Панель повідомлень
Навігація
- 
    
        
                Макет панелі повідомленьМакет аркуша панелі повідомлень
Макет вкладень панелі повідомлень
 - Методи застосунку панелі повідомлень
 - Параметри панелі повідомлень
 - Методи та властивості панелі повідомлень
 - 
    
        
                Події панелі повідомленьПодії DOM
Події екземплярів застосунку та панелі повідомлень
 - Автоматична ініціалізація панелі повідомлень
 - Змінні CSS
 - Приклади
 
Панель повідомлень
Макет панелі повідомлень
<div class="toolbar messagebar">
  <div class="toolbar-inner">
    <div class="messagebar-area">
      <!-- вкладення панелі повідомлень -->
      <div class="messagebar-attachments">...</div>
      <!-- панель повідомлень зі змінним розміром текстового поля -->
      <textarea class="resizable" placeholder="Message"></textarea>
    </div>
    <a href="#" class="link">Send</a>
  </div>
  <!-- лист панелі повідомлень -->
  <div class="messagebar-sheet">...</div>
</div>●	messagebar-attachments  - блок із вкладеннями панелі повідомлень. Необов'язково
●	messagebar-sheet - блок із панеллю повідомлень. Необов'язково
page та безпосередньо перед вмістом сторінки page-content:<div class="page">
  <!-- navbar -->
  <div class="navbar">...</div>
  <!-- messagebar -->
  <div class="toolbar messagebar">...</div>
  <!-- page-content/messages-content -->
  <div class="page-content messages-content">
    ... Повідомлення
  </div>
</div>
Макет аркуша панелі повідомлень
<div class="messagebar-sheet">
  <!-- зображення аркуша, яке можна вибрати -->
  <label class="checkbox messagebar-sheet-image" style="background-image:url(path/to/image1.png)">
    <input type="checkbox" />
    <i class="icon icon-checkbox"></i>
  </label>
  <!-- інше зображення аркуша, яке можна вибрати -->
  <label class="checkbox messagebar-sheet-image" style="background-image:url(path/to/image2.png)">
    <input type="checkbox" />
    <i class="icon icon-checkbox"></i>
  </label>
  <!-- якийсь нестандартний елемент аркуша -->
  <div class="messagebar-sheet-item">
    <!-- будь-який спеціальний вміст тут -->
  </div>
</div>
Макет вкладень панелі повідомлень
<div class="messagebar-attachments">
  <!-- вкладення зображення -->
  <div class="messagebar-attachment">
    <img src="path/to/image1.png" />
  </div>
  <!-- вкладене зображення, яке можна видалити -->
  <div class="messagebar-attachment">
    <img src="path/to/image2.png" />
    <!-- кнопка видалення вкладення -->
    <span class="messagebar-attachment-delete"></span>
  </div>
</div>
Методи застосунку панелі повідомлень
| Метод | Опис | 
|---|---|
app.messagebar.create( parameters) | Ініціалізація панелі повідомлень із параметрами:
 
  | 
app.messagebar.destroy( el) | Знищити екземпляр панелі повідомлень
 ●	  | 
app.messagebar.get( el) | Отримати екземпляр панелі повідомлень за елементом HTML
 ● Метод повертає екземпляр панелі повідомлень  | 
Параметри панелі повідомлень
| Параметр | За замовчуванням | Опис | Тип | 
|---|---|---|---|
el  | Селектор CSS або елемент HTML елемента панелі повідомлень ( div class="messagebar") | HTMLElement  string  | |
textareaEl  | Селектор CSS або елемент HTML текстового поля панелі повідомлень. За умовчанням (якщо не передано) спробує шукати текстове поле всередині панелі повідомлень  | HTMLElement  string  | |
maxHeight  | null  | Максимальна висота текстового поля під час зміни його розміру залежно від обсягу тексту  | number | 
attachments  | []  | Масив із вкладеннями. Наприклад  ['path/to/image1.png', 'path/to/image2.png'] | array | 
resizePage  | true  | Вимкніть, якщо ви не хочете змінювати розмір сторінки повідомлень, коли змінюється розмір текстової області панелі повідомлень  | boolean | 
| Параметр | Опис | Тип | 
|---|---|---|
on  | Об'єкт з обробниками подій. Наприклад:  | object | 
var messagebar = app.messagebar.create({
  el: '.messagebar',
  on: {
    change: function () {
      console.log('Textarea value changed')
    }
  }
})
                
            
        
    
Функції візуалізації
| Параметр | Опис | Тип | 
|---|---|---|
renderAttachments  | Функція відтворення блоку вкладень. Має повертати повний рядок HTML вкладень  | function(attachments) | 
renderAttachment  | Функція відтворення одного вкладення. Має повертати повний рядок HTML вкладення  | function(attachment) | 
Методи та властивості панелі повідомлень
var messagebar = app.messagebar.create({ /* parameters */ })messagebar у прикладі вище) з корисними методами та властивостями:Властивості
| Властивість | Опис | 
|---|---|
messagebar.el  | HTML-елемент панелі повідомлень.  | 
messagebar.$el  | Елемент DOM64 із HTML-елементом панелі повідомлень.>  | 
messagebar.textareaEl  | HTML-елемент текстового поля панелі повідомлень  | 
messagebar.$textareaEl  | Елемент DOM64 із HTML-елементом textarea на панелі повідомлень  | 
messagebar.params  | Об'єкт із переданими параметрами ініціалізації  | 
messagebar.attachments  | Масив із вкладеннями панелі повідомлень  | 
Методи
| Метод | Опис | 
|---|---|
messagebar.getValue();  | Отримати значення текстового поля панелі повідомлень  | 
messagebar.setValue( value); | Установити значення/текст текстового поля панелі повідомлень  | 
messagebar.clear();  | Очистити текстове поле та оновити/скинути його розмір  | 
messagebar.focus();  | Перейти до текстового поля панелі повідомлень  | 
messagebar.blur();  | Видалити фокус із текстової області панелі повідомлень  | 
messagebar.setPlaceholder( placeholder) | Встановити/змінити текст заповнювача панелі повідомлень  | 
messagebar.resizePage()  | Змусити панель повідомлень змінювати розмір сторінки повідомлень залежно від висоти/розміру панелі повідомлень  | 
messagebar.attachmentsCreate()  | Динамічно створювати вкладені блоки елемента HTML  | 
messagebar.attachmentsShow()  | Показати блок вкладень  | 
messagebar.attachmentsHide()  | Приховати блок вкладень  | 
messagebar.attachmentsToggle()  | Перемкнути блок вкладень  | 
messagebar.renderAttachments()  | Відобразити блок вкладень на основі даних вкладень  | 
messagebar.sheetCreate()  | Динамічно створює  HTML-елемент блоку панелі повідомлень  | 
messagebar.sheetShow()  | Показати панель повідомлень  | 
messagebar.sheetHide()  | Приховати лист панелі повідомлень  | 
messagebar.sheetToggle()  | Перемкнути панель повідомлень  | 
messagebar.destroy();  | Знищити екземпляр панелі повідомлень  | 
Події панелі повідомлень
Події DOM
| Подія | Об'єкт | Опис | 
|---|---|---|
messagebar:change  | Елемент панелі повідомлень  
  | Подія буде ініційована після зміни значення текстового поля на панелі повідомлень  | 
messagebar:focus  | Елемент панелі повідомлень  
  | Подія буде ініційована, коли текстове поле панелі повідомлень отримує фокус  | 
messagebar:blur  | Елемент панелі повідомлень  
  | Подія буде ініційована, коли текстове поле на панелі повідомлень втрачає фокус  | 
messagebar:resizepage  | Елемент панелі повідомлень  
  | Подія буде ініційована, коли панель повідомлень змінює розмір сторінки повідомлень  | 
messagebar:attachmentdelete  | Елемент вкладення панелі повідомлень  
  | Подію буде запущено після натискання кнопки видалення вкладення на панелі повідомлень  | 
messagebar:attachmentclick  | Елемент вкладення панелі повідомлень  
  | Подію буде ініційовано після натискання вкладеного файлу на панелі повідомлень  | 
messagebar:beforedestroy  | Елемент панелі повідомлень  
  | Подія буде ініційована безпосередньо перед тим, як екземпляр панелі повідомлень буде знищено  | 
Події екземплярів застосунку та панелі повідомлень
messagebar.| Подія | Аргумент | Опис | Об'єкт | 
|---|---|---|---|
change  | (messagebar)  | Подія буде ініційована після зміни значення текстового поля на панелі повідомлень. Як аргумент обробник події отримує екземпляр панелі повідомлень  | messagebar | 
messagebarChange  | (messagebar)  | Подія буде ініційована після зміни значення текстового поля на панелі повідомлень. Як аргумент обробник події отримує екземпляр панелі повідомлень  | app | 
focus  | (messagebar)  | Подія буде ініційована, коли текстове поле панелі повідомлень отримує фокус. Як аргумент обробник події отримує екземпляр панелі повідомлень  | messagebar | 
messagebarFocus  | (messagebar)  | Подія буде ініційована, коли текстове поле панелі повідомлень отримує фокус. Як аргумент обробник події отримує екземпляр панелі повідомлень  | app | 
blur  | (messagebar)  | Подія буде ініційована, коли текстове поле на панелі повідомлень втрачає фокус. Як аргумент обробник події отримує екземпляр панелі повідомлень  | messagebar | 
messagebarBlur  | (messagebar)  | Подія буде ініційована, коли текстове поле на панелі повідомлень втрачає фокус. Як аргумент обробник події отримує екземпляр панелі повідомлень  | app | 
resizePage  | (messagebar)  | Подія буде ініційована, коли панель повідомлень змінює розмір сторінки повідомлень. Як аргумент обробник події отримує екземпляр панелі повідомлень  | messagebar | 
messagebarResizePage  | (messagebar)  | Подія буде ініційована, коли панель повідомлень змінює розмір сторінки повідомлень. Як аргумент обробник події отримує екземпляр панелі повідомлень  | app | 
attachmentDelete  | (messagebar, attachmentEl, attachmentIndex)  | Подію буде запущено після натискання кнопки видалення вкладення на панелі повідомлень. Як аргумент обробник події отримує екземпляр панелі повідомлень, HTML-елемент вкладення та номер індексу вкладення  | messagebar | 
messagebarAttachmentDelete  | (messagebar, attachmentEl, attachmentIndex)  | Подію буде запущено після натискання кнопки видалення вкладення на панелі повідомлень. Як аргумент обробник події отримує екземпляр панелі повідомлень, HTML-елемент вкладення та номер індексу вкладення  | app | 
attachmentClick  | (messagebar, attachmentEl, attachmentIndex)  | Подію буде ініційовано після натискання вкладеного файлу на панелі повідомлень. Як аргумент обробник події отримує екземпляр панелі повідомлень, HTML-елемент вкладення та номер індексу вкладення  | messagebar | 
messagebarAttachmentClick  | (messagebar, attachmentEl, attachmentIndex)  | Подію буде ініційовано після натискання вкладеного файлу на панелі повідомлень. Як аргумент обробник події отримує екземпляр панелі повідомлень, HTML-елемент вкладення та номер індексу вкладення  | app | 
beforeDestroy  | (messagebar)  | Подія буде ініційована безпосередньо перед тим, як екземпляр панелі повідомлень буде знищено  | messagebar | 
messagebarBeforeDestroy  | (messagebar)  | Подія буде ініційована безпосередньо перед тим, як екземпляр панелі повідомлень буде знищено  | app | 
Автоматична ініціалізація панелі повідомлень
messagebar-init ініціалізації панелі повідомлень до елемента панелі повідомлень, і всі необхідні параметри можна передаватися за допомогою атрибутів даних data-:<div class="toolbar messagebar messagebar-init" data-max-height="200">
  <div class="toolbar-inner">
    <div class="messagebar-area">
      <textarea placeholder="Message"></textarea>
    </div>
    <a href="#" class="link">Send</a>
  </div>
</div>maxHeight, в атрибутах data- повинні використовуватися в kebab-case як data-max-height!Змінні CSS
:root {
  --t4-messagebar-shadow-image: none;
  --t4-messagebar-textarea-bg-color: transparent;
  --t4-messagebar-attachments-height: 155px;
  --t4-messagebar-attachment-height: 155px;
  --t4-messagebar-attachment-landscape-height: 120px;
  --t4-messagebar-sheet-height: 252px;
  --t4-messagebar-sheet-landscape-height: 192px;
  /*
  --t4-messagebar-inner-padding-left: var(--t4-toolbar-inner-padding-left);
  --t4-messagebar-inner-padding-right: var(--t4-toolbar-inner-padding-right);
  */
  --t4-messagebar-bg-color: #fff;
  --t4-messagebar-bg-color-rgb: 255, 255, 255;
}
:root .dark,
:root.dark {
  --t4-messagebar-bg-color: var(--t4-bars-bg-color);
  --t4-messagebar-bg-color-rgb: var(--t4-bars-bg-color-rgb);
}
.ios {
  --t4-messagebar-height: 44px;
  --t4-messagebar-font-size: 17px;
  /*
  --t4-messagebar-link-color: var(--t4-theme-color);
  */
  --t4-messagebar-border-color: transparent;
  --t4-messagebar-textarea-border-radius: 17px;
  --t4-messagebar-textarea-padding: 6px 16px;
  --t4-messagebar-textarea-height: 34px;
  --t4-messagebar-textarea-font-size: 17px;
  --t4-messagebar-textarea-line-height: 20px;
  --t4-messagebar-sheet-bg-color: #d1d5da;
  --t4-messagebar-attachment-border-radius: 12px;
  --t4-messagebar-textarea-text-color: #000;
  --t4-messagebar-textarea-border: 1px solid #c8c8cd;
  --t4-messagebar-attachments-border-color: #c8c8cd;
}
.ios .dark,
.ios.dark {
  --t4-messagebar-textarea-text-color: #fff;
  --t4-messagebar-textarea-border: 1px solid var(--t4-bars-border-color);
  --t4-messagebar-attachments-border-color: var(--t4-bars-border-color);
}
.md {
  --t4-messagebar-height: 48px;
  --t4-messagebar-font-size: 16px;
  --t4-messagebar-textarea-border-radius: 0px;
  --t4-messagebar-textarea-padding: 5px 8px;
  --t4-messagebar-textarea-height: 32px;
  --t4-messagebar-textarea-font-size: 16px;
  --t4-messagebar-textarea-line-height: 22px;
  --t4-messagebar-textarea-border: 1px solid transparent;
  --t4-messagebar-sheet-bg-color: #fff;
  --t4-messagebar-attachment-border-radius: 4px;
  --t4-messagebar-link-color: #333;
  --t4-messagebar-border-color: #d1d1d1;
  --t4-messagebar-textarea-text-color: #333;
  --t4-messagebar-attachments-border-color: #ddd;
}
.md .dark,
.md.dark {
  --t4-messagebar-border-color: transparent;
  --t4-messagebar-link-color: rgba(255, 255, 255, 0.87);
  --t4-messagebar-textarea-text-color: rgba(255, 255, 255, 0.87);
  --t4-messagebar-attachments-border-color: rgba(255, 255, 255, 0.2);
}
.aurora {
  --t4-messagebar-height: 48px;
  --t4-messagebar-font-size: 16px;
  /*
  --t4-messagebar-link-color: var(--t4-theme-color);
  */
  --t4-messagebar-border-color: transparent;
  --t4-messagebar-textarea-border-radius: 8px;
  --t4-messagebar-textarea-padding: 4px 8px;
  --t4-messagebar-textarea-height: 32px;
  --t4-messagebar-textarea-font-size: 16px;
  --t4-messagebar-textarea-line-height: 22px;
  --t4-messagebar-sheet-bg-color: #fff;
  --t4-messagebar-attachment-border-radius: 8px;
  --t4-messagebar-textarea-text-color: #000;
  --t4-messagebar-textarea-border: 1px solid #c8c8cd;
  --t4-messagebar-attachments-border-color: #c8c8cd;
}
.aurora .dark,
.aurora.dark {
  --t4-messagebar-textarea-text-color: #fff;
  --t4-messagebar-textarea-border: 1px solid var(--t4-bars-border-color);
  --t4-messagebar-attachments-border-color: var(--t4-bars-border-color);
}
Приклади
<template>
  <div class="page">
    <div class="navbar">
      <div class="navbar-bg"></div>
      <div class="navbar-inner">
        <div class="title">Messages</div>
      </div>
    </div>
    <div class="toolbar messagebar">
      <div class="toolbar-inner">
        <a class="link toggle-sheet" href="#">
          <i class="icon t4-icons if-not-md">camera_fill</i>
          <i class="icon material-icons md-only">camera_alt</i>
        </a>
        <div class="messagebar-area">
          <textarea placeholder="Message"></textarea>
        </div>
        <a class="link" href="#">Send</a>
      </div>
      <div class="messagebar-sheet"></div>
    </div>
    <div class="page-content messages-content">
      <div class="messages">
        <div class="messages-title"><b>Sunday, Feb 9,</b> 12:58</div>
        <div class="message message-sent">
          <div class="message-content">
            <div class="message-bubble">
              <div class="message-text">Hi, Kate</div>
            </div>
          </div>
        </div>
        <div class="message message-sent">
          <div class="message-content">
            <div class="message-bubble">
              <div class="message-text">How are you?</div>
            </div>
          </div>
        </div>
        <div class="message message-received">
          <div class="message-avatar"
            style="background-image:url(https://cdn.Techno4.io/placeholder/people-100x100-9.jpg)"></div>
          <div class="message-content">
            <div class="message-name">Kate</div>
            <div class="message-bubble">
              <div class="message-text">Hi, I am good!</div>
            </div>
          </div>
        </div>
        <div class="message message-received">
          <div class="message-avatar"
            style="background-image:url(https://cdn.Techno4.io/placeholder/people-100x100-7.jpg)"></div>
          <div class="message-content">
            <div class="message-name">Blue Ninja</div>
            <div class="message-bubble">
              <div class="message-text">Hi there, I am also fine, thanks! And how are you?</div>
            </div>
          </div>
        </div>
        <div class="message message-sent">
          <div class="message-content">
            <div class="message-bubble">
              <div class="message-text">Hey, Blue Ninja! Glad to see you ;)</div>
            </div>
          </div>
        </div>
        <div class="message message-sent">
          <div class="message-content">
            <div class="message-bubble">
              <div class="message-text">Hey, look, cutest kitten ever!</div>
            </div>
          </div>
        </div>
        <div class="message message-sent">
          <div class="message-content">
            <div class="message-bubble">
              <div class="message-image">
                <img src="https://cdn.Techno4.io/placeholder/cats-200x260-4.jpg"
                  style="width:200px; height: 260px" />
              </div>
            </div>
          </div>
        </div>
        <div class="message message-received">
          <div class="message-avatar"
            style="background-image:url(https://cdn.Techno4.io/placeholder/people-100x100-9.jpg)"></div>
          <div class="message-content">
            <div class="message-name">Kate</div>
            <div class="message-bubble">
              <div class="message-text">Nice!</div>
            </div>
          </div>
        </div>
        <div class="message message-received">
          <div class="message-avatar"
            style="background-image:url(https://cdn.Techno4.io/placeholder/people-100x100-9.jpg)"></div>
          <div class="message-content">
            <div class="message-name">Kate</div>
            <div class="message-bubble">
              <div class="message-text">Like it very much!</div>
            </div>
          </div>
        </div>
        <div class="message message-received">
          <div class="message-avatar"
            style="background-image:url(https://cdn.Techno4.io/placeholder/people-100x100-7.jpg)"></div>
          <div class="message-content">
            <div class="message-name">Blue Ninja</div>
            <div class="message-bubble">
              <div class="message-text">Awesome!</div>
            </div>
          </div>
        </div>
      </div>
    </div>
  </div>
</template>
<script>
  export default (props, { $, $t4, $on }) => {
    let messages;
    let messagebar;
    $on('pageInit', () => {
      messages = $t4.messages.create({
        el: '.messages',
        firstMessageRule: function (message, previousMessage, nextMessage) {
          if (message.isTitle) return false;
          if (!previousMessage || previousMessage.type !== message.type || previousMessage.name !== message.name) return true;
          return false;
        },
        lastMessageRule: function (message, previousMessage, nextMessage) {
          if (message.isTitle) return false;
          if (!nextMessage || nextMessage.type !== message.type || nextMessage.name !== message.name) return true;
          return false;
        },
        tailMessageRule: function (message, previousMessage, nextMessage) {
          if (message.isTitle) return false;
          if (!nextMessage || nextMessage.type !== message.type || nextMessage.name !== message.name) return true;
          return false;
        }
      });
      // Ініціалізація панелі повідомлень
      messagebar = $t4.messagebar.create({
        el: '.messagebar',
        attachments: []
      });
      // Доступні зображення
      var images = [
        'https://cdn.Techno4.io/placeholder/cats-300x300-1.jpg',
        'https://cdn.Techno4.io/placeholder/cats-200x300-2.jpg',
        'https://cdn.Techno4.io/placeholder/cats-400x300-3.jpg',
        'https://cdn.Techno4.io/placeholder/cats-300x150-4.jpg',
        'https://cdn.Techno4.io/placeholder/cats-150x300-5.jpg',
        'https://cdn.Techno4.io/placeholder/cats-300x300-6.jpg',
        'https://cdn.Techno4.io/placeholder/cats-300x300-7.jpg',
        'https://cdn.Techno4.io/placeholder/cats-200x300-8.jpg',
        'https://cdn.Techno4.io/placeholder/cats-400x300-9.jpg',
        'https://cdn.Techno4.io/placeholder/cats-300x150-10.jpg'
      ]
      // Створення елементів аркуша
      var sheetHtml = '';
      images.forEach(function (image) {
        sheetHtml += `
          <label class="checkbox messagebar-sheet-image" style="background-image:url(${image})">
            <input type="checkbox">
            <i class="icon icon-checkbox"></i>
          </label>
        `;
      });
      $('.messagebar-sheet').html(sheetHtml);
      /*========================
        Обробка вкладень
        ========================*/
      function checkAttachments() {
        if (messagebar.attachments.length > 0) {
          messagebar.attachmentsShow();
          messagebar.setPlaceholder('Add comment or Send');
        } else {
          messagebar.attachmentsHide();
          messagebar.setPlaceholder('Message');
        }
      }
      $('.messagebar-sheet-image input').on('change', function (e) {
        var index = $(e.target).parents('.messagebar-sheet-image').index();
        var image = images[index];
        if (e.target.checked) {
          //Додати до вкладень
          messagebar.attachments.unshift(image)
        } else {
          // Видалити з вкладень
          messagebar.attachments.splice(messagebar.attachments.indexOf(image), 1);
        }
        messagebar.renderAttachments();
        checkAttachments();
      });
      messagebar.on('attachmentDelete', function (messagebar, attachmentEl, attachmentIndex) {
        var image = messagebar.attachments.splice(attachmentIndex, 1)[0];
        messagebar.renderAttachments();
        checkAttachments();
        // Зніміть прапорець на аркуші
        var imageIndex = images.indexOf(image);
        messagebar.$el.find('.messagebar-sheet .checkbox').eq(imageIndex).find('input').prop('checked', false);
      });
      /*========================
        Перемкнути аркуш
        ========================*/
      $('a.toggle-sheet').on('click', function () {
        messagebar.sheetToggle();
      });
    })
    return $render;
  }
</script>
                
            
        
        Techno4 Framework
- Get Started
 - Introduction
 - Kitchen Sink
 - Installation
 - Package Structure
 - App HTML Layout
 - RTL Layout
 - Initialize App
 - Events
 - Router Component
 - Routes
 - Store
 - App/Core
 - Accordion/Collapsible
 - Action Sheet
 - Area chart
 - Autocomplete
 - Badge
 - Block/Content Block
 - Breadcrumbs
 - Button
 - Calendar/Date Picker
 - Cards
 - Checkbox
 - Chips
 - Color Picker
 - Contact List
 - Data Table
 - Dialog
 - Floating action button
 - Form
 - Gauge
 - Icons
 - Inputs / Form Inputs
 - Grid /Layout Grid
 - Link
 - List Button
 - List View
 - List Index
 - Login Screen
 - Menu List
 - Messagebar
 - Navbar
 - Messages
 - Notification
 - Panel/Side Panels
 - Photo Browser
 - Picker
 - Pie Chart
 - Popover
 - Popup
 - Preloader
 - Progressbar
 - Pull to Refresh
 - Radio
 - Range Slider
 - Searchbar