Skip to main content

Діалог

Діалогове вікно – це невелика панель вмісту, яка з’являється над основним вмістом програми. Діалогові вікна зазвичай використовуються, щоб запитати щось у користувача або повідомити чи попередити користувача. Діалогове вікно, як і всі інші модальні елементи, є частиною так званих «Тимчасових переглядів». Діалогове вікно можна відкрити лише за допомогою JavaScript. Отже, розгляньмо пов’язані методи роботи з діалоговими вікнами програми.

Методи діалогового додатка

Розгляньмо пов’язані методи роботи застосунку Dialog:
app.dialog.create(parameters)- створити екземпляр Dialog

parameters - object. - Об'єкт з параметрами діалогу

Метод повертає створений екземпляр Dialog

app.dialog.destroy(el)- знищити екземпляр Dialog

el - HTMLElement or string (за допомогою селектора CSS) або об’єкта - Елемент діалогу або екземпляр діалогу для знищення.

app.dialog.get(el)- отримати екземпляр Dialog за елементом HTML

el - HTMLElement or string (за допомогою селектора CSS) - Елемент діалогу.

Метод повертає екземпляр Dialog

app.dialog.open(el, animate)- відкриває діалог

el - HTMLElement or string (за допомогою селектора CSS). - Елемент діалогу для відкриття.

animate - boolean - Відкрити діалогове вікно з анімацією.

Метод повертає екземпляр Dialog

app.dialog.close(el, animate)- закриває діалог

el - HTMLElement or string (за допомогою селектора CSS). - Елемент діалогу для закриття.

animate - boolean - Закрити діалогове вікно з анімацією.

Метод повертає екземпляр Dialog

Параметри діалогу

Тепер давайте подивимося на список доступних параметрів, необхідних для створення діалогу:
ПараметрЗа замовчуваннямОписТип
el
Елемент діалогу. Може бути корисним, якщо у вашому HTML вже є елемент Dialog і ви хочете створити новий екземпляр за допомогою цього елемента
HTMLElement

string

containerEl
Дозволяє монтувати діалогове вікно до власного елемента, а не до кореневого елемента програми (app.el)
HTMLElement

string

backdrop
true
Вмикає фон діалогу (темний напівпрозорий шар позаду)
boolean
closeByBackdropClick
false
Якщо ввімкнено, діалогове вікно закриватиметься після натискання фону
boolean
animate
true
Чи відкривати/закривати діалогове вікно з анімацією чи ні. Може бути перезаписано в методах .open() і .close().
boolean
title
Назва діалогу
string
text
Внутрішній текст діалогу
string
content
Спеціальний вміст діалогового вікна, який слідує за текстом діалогового вікна. Може приймати будь-який вміст HTML
string
buttons
[]
Масив із діалоговими кнопками, де кожна кнопка є об’єктом із параметрами кнопки
array
verticalButtons
false
Вмикає вертикальне розташування кнопок
boolean
destroyOnClose
false
Якщо ввімкнено, діалогове вікно буде автоматично знищено після закриття
boolean
onClick
Функція зворотного виклику, яка буде виконана після натискання кнопки діалогу. Як аргументи він отримав екземпляр діалогу та номер індексу натиснутої кнопки,
function(dialog, index)
cssClass
Додавання додаткового класу css
string

ПараметрОписТип
on
Об'єкт з обробниками подій. Наприклад:
object
var dialog = app.dialog.create({
  text: 'Hello World',
  on: {
    opened: function () {
      console.log('Dialog opened')
    }
  }
})

Параметри кнопки

Кожна кнопка в масиві кнопок має бути представлена як об’єкт із параметрами кнопки:
ПараметрЗа замовчуваннямОписТип
text
Рядок із текстом кнопки (може бути рядком HTML)
string
bold
false
Вмикає жирний текст кнопки
boolean
color
Колір кнопки, один із кольорів за замовчуванням
string
close
true
Якщо ввімкнено, натискання кнопки закриє діалогове вікно
boolean
cssClass
CSS клас додаткової кнопки
string
keyCodes
[]
Масив із кодами клавіш клавіатури, які використовуватимуться для ініціювання натискання кнопки. Наприклад, код клавіші 13 означає, що натискання кнопки буде активовано після натискання клавіші Enter
array
onClick
Функція зворотного виклику, яка буде виконана після натискання цієї кнопки
function(dialog, e)

Методи та властивості діалогового вікна

Отже, щоб створити діалог, ми повинні викликати:
var dialog = app.dialog.create({ /* parameters */ })
Після цього у нас є його ініціалізований екземпляр (як діалогова dialog змінна у прикладі вище) з корисними методами та властивостями::
Властивість Опис
dialog.app
Посилання на глобальний екземпляр застосунку
dialog.el
HTML-елемент діалогового вікна
dialog.$el
Екземпляр Dom7 з діалоговим елементом HTML
dialog.backdropEl
Елемент HTML фону
dialog.$backdropEl
Екземпляр Dom7 із фоновим елементом HTML
dialog.params
Параметри діалогу
dialog.opened
Логічне значення, що вказує, відкрито діалогове вікно чи ні

Методи

МетодОпис
dialog.open(animate)
Відкрити діалог. Де

animate - boolean (by default true) - визначає, чи слід відкривати його з анімацією

dialog.close(animate)
Закрити діалог. Де

animate - boolean (by default true) - визначає, чи слід закривати його з анімацією

dialog.setProgress(progress, duration)
Встановлює перебіг діалогу, коли використовується ярлик перебігу діалогу, де

progress - number - індикатор прогресу (від 0 до 100)

duration - number (in ms) - тривалість зміни прогресу

dialog.setTitle(title)
Встановлює заголовок діалогу

title - string - новий заголовок діалогу

dialog.setText(text)
Встановлює текст діалогу

text - string - новий текст діалогу

dialog.destroy()
Знищити діалог
dialog.on(event, handler)
Додати обробник подій
dialog.once(event, handler)
Додати обробник подій, який буде видалено після запуску
dialog.off(event, handler)
Видалити обробник подій
dialog.off(event)
Видалити всі обробники для вказаної події
dialog.emit(event, ...args)
запустити подію на примірнику

Події в діалоговому вікні

Діалог запускатиме наступні події DOM в елементі діалогу та події в застосунку та екземплярі діалогу:

Події DOM

ПодіяОб'єктОпис
dialog:open
Dialog Element

<div class="dialog">

Подія буде ініційована, коли діалогове вікно розпочне свою початкову анімацію
dialog:opened
Dialog Element

<div class="dialog">

Подію буде запущено після того, як діалог завершить свою початкову анімацію
dialog:close
Dialog Element

<div class="dialog">

Подія буде ініційована, коли діалогове вікно почне завершувати анімацію
dialog:closed
Dialog Element

<div class="dialog">

Подію буде запущено після того, як діалогове вікно завершить свою анімацію закриття
dialog:beforedestroy
Dialog Element

<div class="dialog">

Подія буде запущена безпосередньо перед знищенням екземпляра Dialog

Події екземплярів програми та діалогового вікна

Екземпляр діалогового вікна випромінює події як у себе, так і в екземплярі застосунку . Події екземпляра застосунка мають однакові назви з діалоговим вікном. dialog
ПодіяАргументОписОб'єкт
open
dialog
Подія буде ініційована, коли діалогове вікно розпочне свою початкову анімацію. Як аргумент обробник події отримує екземпляр діалогу
dialog
dialogOpen
dialog
Подія буде ініційована, коли діалогове вікно розпочне свою початкову анімацію. Як аргумент обробник події отримує екземпляр діалогу
app
opened
dialog
Подію буде запущено після того, як діалог завершить свою початкову анімацію. Як аргумент обробник події отримує екземпляр діалогу
dialog
dialogOpened
dialog
Подію буде запущено після того, як діалог завершить свою початкову анімацію. Як аргумент обробник події отримує екземпляр діалогу
app
close
dialog
Подія буде ініційована, коли діалогове вікно почне завершувати анімацію. Як аргумент обробник події отримує екземпляр діалогу
dialog
dialogClose
dialog
Подія буде ініційована, коли діалогове вікно почне завершувати анімацію. Як аргумент обробник події отримує екземпляр діалогу
app
closed
dialog
Подію буде запущено після того, як діалогове вікно завершить свою анімацію закриття. Як аргумент обробник події отримує екземпляр діалогу
dialog
dialogClosed
dialog
Подію буде запущено після того, як діалогове вікно завершить свою анімацію закриття. Як аргумент обробник події отримує екземпляр діалогу
app
beforeDestroy
dialog
Подія буде запущена безпосередньо перед знищенням екземпляра Dialog. Як аргумент обробник події отримує екземпляр діалогу
dialog
dialogBeforeDestroy
dialog
Подія буде запущена безпосередньо перед знищенням екземпляра Dialog. Як аргумент обробник події отримує екземпляр діалогу
app

Комбінації клавіш для діалогового вікна

Є кілька методів швидкого доступу, які значно полегшують створення діалогових вікон. Спочатку давайте перевіримо глобальні параметри програми, які допомагають налаштувати такі ярлики, а також використовуються для цілей локалізації.

Параметри ярликів діалогового вікна

Наступні глобальні параметри ярлика діалогового вікна можна передати під час ініціалізації програми у властивості діалогового вікна:
var app = new Techno4({
  dialog: {
    // встановити назву за замовчуванням для всіх ярликів діалогових вікон
    title: 'My App',
    // змінити стандартний текст кнопки "ОК".
    buttonOk: 'Done',
    ...
  }
});
ПараметрЗа замовчуваннямОписТип
title
Заголовок ярликів діалогових вікон за замовчуванням. Якщо не вказано, дорівнюватиме app.name
string
buttonOk
OK
Текст кнопки "ОК" за замовчуванням
string
buttonCancel
Cancel
Текст кнопки "Cancel" за замовчуванням
string
usernamePlaceholder
Username
Заповнювач поля імені користувача за замовчуванням у діалоговому вікні входу
string
passwordPlaceholder
Password
Заповнювач поля пароля за замовчуванням у діалогових вікнах імені та пароля
string
preloaderTitle
Loading...
Назва за замовчуванням для діалогового вікна попереднього завантажувача
string
progressTitle
Loading...
Назва за замовчуванням для діалогового вікна прогресу
string
destroyPredefinedDialogs
true
Після закриття автоматично знищить усі попередньо визначені діалогові вікна (сповіщення, підтвердження, запит тощо).
boolean
keyboardActions
true
Вмикає комбінації клавіш (Enter і Esc) клавіші для попередньо визначених діалогових вікон (Сповіщення, Підтвердження, Запит, Логін, Пароль) Кнопки «OK» і «Скасувати»
boolean
autoFocus
true
Якщо ввімкнено, діалогове вікно автофокусу вводиться під час відкриття діалогового вікна. Діє лише для попередньо визначених діалогових вікон із такими введеннями, як запит, ім’я користувача та пароль
boolean
Тепер розгляньмо доступні ярлики діалогового вікна:

Попередження

Щоб створити діалогове вікно попередження, нам потрібно використати такі методи програми:
app.dialog.alert(text, title, callback)- створити діалогове вікно попередження і відкрити його

text - string. - Текст діалогу попередження

title - string. - Заголовок діалогового вікна попередження

callback - function - Додатково. Функція зворотного виклику, яка буде виконана після того, як користувач натисне на кнопку попередження

Метод повертає створений екземпляр Dialog

app.dialog.alert(text, callback)- створити діалогове вікно попередження із назвою за замовчуванням і відкрити його

Метод повертає створений екземпляр Dialog

Підтвердження

Діалог підтвердження зазвичай використовується, коли потрібно підтвердити якусь дію. Щоб відкрити модальне підтвердження, ми також повинні викликати один із таких методів програми:
app.dialog.confirm(text, title, callbackOk, callbackCancel)- створити діалогове вікно підтвердження та відкрити його

text - string. - Текст діалогу підтвердження

title - string. - Заголовок діалогового вікна підтвердження

callbackOk - function - Додатково. Функція зворотного виклику, яка буде виконана, коли користувач натисне кнопку «Ok» у діалоговому вікні підтвердження (коли користувач підтвердить дію)

callbackCancel - function - Додатково. Функція зворотного виклику, яка буде виконана, коли користувач натискає кнопку «Скасувати» у діалоговому вікні підтвердження (коли користувач відхиляє дію)

Метод повертає створений екземпляр Dialog

app.dialog.confirm(text, callbackOk, callbackCancel)- створити діалогове вікно підтвердження із назвою за замовчуванням і відкрити його

Метод повертає створений екземпляр Dialog

Запит

Діалог запиту використовується, коли потрібно отримати якісь дані/відповідь від користувача. Щоб відкрити діалогове вікно запиту, ми також повинні викликати один із таких методів програми:
app.dialog.prompt(text, title, callbackOk, callbackCancel, defaultValue)- створити діалогове вікно запиту та відкрити його

text - string. - Текст діалогу запиту

title - string. - Заголовок діалогового вікна запиту

callbackOk - function(value). - Додатково. Функція зворотного виклику, яка буде виконана, коли користувач натисне кнопку «Ok» у діалоговому вікні запиту. Як аргумент функція отримує значення текстового введення

callbackCancel - function(value). - Додатково. Функція зворотного виклику, яка буде виконана, коли користувач натисне кнопку «Скасувати» у діалоговому вікні запиту. Як аргумент функція отримує значення текстового введення

defaultValue - string Додатково. Запропонуйте ввести значення за замовчуванням

Метод повертає створений екземпляр Dialog

app.dialog.prompt(text, callbackOk, callbackCancel, defaultValue)- створити діалогове вікно запиту із назвою за замовчуванням і відкрити його

Метод повертає створений екземпляр Dialog

Логін

app.dialog.login(text, title, callbackOk, callbackCancel)- створити діалогове вікно логіну та відкрити його

text - string. - Текст діалогу логіну

title - string. - Заголовок діалогового вікна логіну

callbackOk - function(username, password). Додатково. Функція зворотного виклику, яка буде виконана, коли користувач натисне кнопку «Ok» у діалоговому вікні логіну. Як аргумент функція отримує значення імені користувача та пароля

callbackCancel - (username, password). -Додатково. Функція зворотного виклику, яка буде виконана, коли користувач натисне кнопку «Скасувати» у діалоговому вікні логіну. Як аргумент функція отримує значення імені користувача та пароля

app.dialog.login(text, callbackOk, callbackCancel)- створити діалогове вікно логіну із назвою за замовчуванням і відкрити його

Метод повертає створений екземпляр Dialog

Пароль

Діалогове вікно пароля корисне, якщо вам потрібно запитати лише пароль:
app.dialog.password(text, title, callbackOk, callbackCancel)- створити діалогове вікно пароля та відкрити його

text - string. - Текст діалогу пароля

title - string. - Заголовок діалогового вікна пароля

callbackOk - function(password). Додатково. Функція зворотного виклику, яка буде виконана, коли користувач натисне кнопку «Ok» у діалоговому вікні пароля. Як аргумент функція отримує значення пароля

callbackCancel - (password). - Додатково. Функція зворотного виклику, яка буде виконана, коли користувач натисне кнопку «Скасувати» у діалоговому вікні пароля. Як аргумент функція отримує значення пароля

app.dialog.password(text, callbackOk, callbackCancel)- створити діалогове вікно пароля із назвою за замовчуванням і відкрити його

Метод повертає створений екземпляр Dialog

Попередній завантажувач

Діалогове вікно попереднього завантаження використовується для вказівки певної фонової активності (наприклад, запиту Ajax) і блокування будь-яких дій користувача під час цієї діяльності. Щоб відкрити діалогове вікно Preloader, ми також повинні викликати відповідний метод App:
app.dialog.preloader(title, color)- створити діалог попереднього завантажувача та відкрити його

title - string. - Додатково. Назва діалогового вікна попереднього завантажувача

color - string. Додатково. Колір попереднього завантажувача. Один із кольорів за замовчуванням

Метод повертає створений екземпляр Dialog

Прогрес

Те саме, що діалогове вікно попереднього завантажувача, але з панеллю прогресу progressbar замість попереднього завантажувача.
app.dialog.progress(title, progress, color)- створити діалогове вікно прогресу та відкрити його

title - string. - Додатково. Назва діалогового вікна прогресу

progress - number - Індикатор прогресу (від 0 до 100). Якщо число не пройдено, він матиме нескінченну панель прогресу

color - string. Додатково. Колір індикатора прогресу. Один із кольорів за замовчуванням

Метод повертає створений екземпляр Dialog

Змінні CSS

Нижче наведено список пов’язаних змінних CSS (спеціальні властивості CSS).
Зауважте, що коментовані змінні не вказано за замовчуванням, і в цьому випадку вони повертаються до їхніх значень.
:root {
  --t4-dialog-button-text-color: var(--t4-theme-color);
  --t4-dialog-button-text-align: center;
  --t4-dialog-input-bg-color: #fff;
}
:root .dark,
:root.dark {
  --t4-dialog-text-color: #fff;
}
.ios {
  --t4-dialog-box-shadow: none;
  --t4-dialog-width: 270px;
  --t4-dialog-inner-padding: 16px;
  --t4-dialog-border-radius: 13px;
  --t4-dialog-text-align: center;
  --t4-dialog-font-size: 14px;
  --t4-dialog-title-text-color: inherit;
  --t4-dialog-title-font-size: 18px;
  --t4-dialog-title-font-weight: 600;
  --t4-dialog-title-line-height: inherit;
  --t4-dialog-button-font-size: 17px;
  --t4-dialog-button-height: 44px;
  --t4-dialog-button-letter-spacing: 0;
  --t4-dialog-button-font-weight: 400;
  --t4-dialog-button-text-transform: none;
  --t4-dialog-input-border-radius: 4px;
  --t4-dialog-input-font-size: 14px;
  --t4-dialog-input-height: 32px;
  --t4-dialog-input-border-width: 1px;
  --t4-dialog-input-placeholder-color: #a9a9a9;
  --t4-dialog-preloader-size: 34px;
  --t4-dialog-bg-color: rgba(255, 255, 255, 0.95);
  --t4-dialog-bg-color-rgb: 255, 255, 255;
  --t4-dialog-text-color: #000;
  --t4-dialog-button-pressed-bg-color: rgba(0, 0, 0, 0.1);
  --t4-dialog-input-border-color: rgba(0, 0, 0, 0.3);
  --t4-dialog-border-divider-color: rgba(0, 0, 0, 0.2);
}
.ios .dark,
.ios.dark {
  --t4-dialog-bg-color: rgba(45, 45, 45, 0.95);
  --t4-dialog-bg-color-rgb: 45, 45, 45;
  --t4-dialog-button-pressed-bg-color: rgba(0, 0, 0, 0.2);
  --t4-dialog-border-divider-color: rgba(255, 255, 255, 0.15);
  --t4-dialog-input-border-color: rgba(255, 255, 255, 0.15);
  --t4-dialog-input-bg-color: rgba(0, 0, 0, 0.5);
}
.md {
  --t4-dialog-box-shadow: var(--t4-elevation-24);
  --t4-dialog-width: 280px;
  --t4-dialog-inner-padding: 24px;
  --t4-dialog-border-radius: 4px;
  --t4-dialog-text-align: left;
  --t4-dialog-font-size: 16px;
  --t4-dialog-title-font-size: 20px;
  --t4-dialog-title-font-weight: 500;
  --t4-dialog-title-line-height: 1.3;
  --t4-dialog-button-font-size: 14px;
  --t4-dialog-button-height: 36px;
  --t4-dialog-button-letter-spacing: 0.05em;
  --t4-dialog-button-font-weight: 500;
  --t4-dialog-button-text-transform: uppercase;
  --t4-dialog-button-pressed-bg-color: rgba(var(--t4-theme-color-rgb), 0.15);
  --t4-dialog-input-border-radius: 0px;
  --t4-dialog-input-font-size: 16px;
  --t4-dialog-input-height: 36px;
  --t4-dialog-input-border-color: transparent;
  --t4-dialog-input-border-width: 0px;
  --t4-dialog-preloader-size: 32px;
  --t4-dialog-bg-color: #fff;
  --t4-dialog-text-color: rgba(0, 0, 0, 0.54);
  --t4-dialog-title-text-color: #212121;
  --t4-dialog-input-placeholder-color: rgba(0, 0, 0, 0.35);
}
.md .dark,
.md.dark {
  --t4-dialog-bg-color: #1c1c1d;
  --t4-dialog-title-text-color: #fff;
  --t4-dialog-input-bg-color: transparent;
  --t4-dialog-input-placeholder-color: rgba(255, 255, 255, 0.54);
}
.aurora {
  --t4-dialog-box-shadow: 0 0 20px 0 rgba(0, 0, 0, 0.15), 0 25px 30px 0 rgba(0,0,0,0.35);
  --t4-dialog-width: 300px;
  --t4-dialog-inner-padding: 20px;
  --t4-dialog-border-radius: 8px;
  --t4-dialog-text-align: left;
  --t4-dialog-font-size: 14px;
  --t4-dialog-title-font-size: 18px;
  --t4-dialog-title-font-weight: 700;
  --t4-dialog-title-line-height: inherit;
  --t4-dialog-button-font-size: 14px;
  --t4-dialog-button-height: 36px;
  --t4-dialog-button-letter-spacing: 0;
  --t4-dialog-button-font-weight: 600;
  --t4-dialog-button-text-transform: uppercase;
  /*
  --t4-dialog-button-pressed-bg-color: var(--t4-theme-color-shade);
  --t4-dialog-button-hover-bg-color: var(--t4-theme-color-tint);
  */
  --t4-dialog-input-border-radius: 8px;
  --t4-dialog-input-font-size: 16px;
  --t4-dialog-input-height: 32px;
  --t4-dialog-input-border-width: 1px;
  --t4-dialog-preloader-size: 24px;
  --t4-dialog-bg-color: #fff;
  --t4-dialog-title-text-color: inherit;
  --t4-dialog-text-color: #000;
  --t4-dialog-button-text-color: #fff;
  --t4-dialog-input-border-color: rgba(0, 0, 0, 0.2);
  --t4-dialog-input-placeholder-color: rgba(0, 0, 0, 0.32);
}
.aurora .dark,
.aurora.dark {
  --t4-dialog-bg-color: #1c1c1d;
  --t4-dialog-title-text-color: #fff;
  --t4-dialog-input-bg-color: rgba(0, 0, 0, 0.25);
  --t4-dialog-input-placeholder-color: rgba(255, 255, 255, 0.54);
  --t4-dialog-input-border-color: rgba(255, 255, 255, 0.15);
}

Приклади

<template>
  <div class="page">
    <div class="navbar">
      <div class="navbar-bg"></div>
      <div class="navbar-inner">
        <div class="title">Dialog</div>
      </div>
    </div>
    <div class="page-content">
      <div class="block block-strong">
        <p class="row">
          <button class="col button button-fill open-alert">Alert</button>
          <button class="col button button-fill open-confirm">Confirm</button>
          <button class="col button button-fill open-prompt">Prompt</button>
        </p>
        <p class="row">
          <button class="col button button-fill open-login">Login</button>
          <button class="col button button-fill open-password">Password</button>
        </p>
      </div>
      <div class="block-title">Vertical Buttons</div>
      <div class="block block-strong">
        <p>
          <button class="button button-fill open-vertical">Vertical Buttons</button>
        </p>
      </div>
      <div class="block-title">Preloader Dialog</div>
      <div class="block block-strong">
        <p class="row">
          <button class="col button button-fill open-preloader">Preloader</button>
          <button class="col button button-fill open-preloader-custom">Custom Title</button>
        </p>
      </div>
      <div class="block-title">Progress Dialog</div>
      <div class="block block-strong">
        <p class="row">
          <button class="col button button-fill open-progress">Determined</button>
          <button class="col button button-fill open-progress-infinite">Infinite</button>
        </p>
      </div>
    </div>
  </div>
</template>
<script>
  export default (props, { $, $t4, $on }) => {
    $on('pageInit', () => {
      // Alert
      $('.open-alert').on('click', function () {
        $t4.dialog.alert('Hello');
      });

      // Confirm
      $('.open-confirm').on('click', function () {
        $t4.dialog.confirm('Are you feel good today?', function () {
          $t4.dialog.alert('Great!');
        });
      });

      // Prompt
      $('.open-prompt').on('click', function () {
        $t4.dialog.prompt('What is your name?', function (name) {
          $t4.dialog.confirm('Are you sure that your name is ' + name + '?', function () {
            $t4.dialog.alert('Ok, your name is ' + name);
          });
        });
      });

      // Login
      $('.open-login').on('click', function () {
        $t4.dialog.login('Enter your username and password', function (username, password) {
          $t4.dialog.alert('Thank you!<br>Username:' + username + '<br>Password:' + password);
        });
      });

      // Password
      $('.open-password').on('click', function () {
        $t4.dialog.password('Enter your password', function (password) {
          $t4.dialog.alert('Thank you!<br>Password:' + password);
        });
      });

      // Vertical Buttons
      $('.open-vertical').on('click', function () {
        $t4.dialog.create({
          title: 'Vertical Buttons',
          text: 'Dialog with vertical buttons',
          buttons: [
            {
              text: 'Button 1',
            },
            {
              text: 'Button 2',
            },
            {
              text: 'Button 3',
            },
          ],
          verticalButtons: true,
        }).open();
      });

      // Preloader
      $('.open-preloader').on('click', function () {
        $t4.dialog.preloader();
        setTimeout(function () {
          $t4.dialog.close();
        }, 3000);
      });

      // Preloader with custom text
      $('.open-preloader-custom').on('click', function () {
        $t4.dialog.preloader('My text...');
        setTimeout(function () {
          $t4.dialog.close();
        }, 3000);
      });

      // Progress
      $('.open-progress').on('click', function () {
        var progress = 0;
        var dialog = $t4.dialog.progress('Loading assets', progress);
        dialog.setText('Image 1 of 10');
        var interval = setInterval(function () {
          progress += 10;
          dialog.setProgress(progress);
          dialog.setText('Image ' + ((progress) / 10) + ' of 10');
          if (progress === 100) {
            clearInterval(interval);
            dialog.close();
          }
        }, 300)
      });

      // Progress Infinite
      $('.open-progress-infinite').on('click', function () {
        $t4.dialog.progress();
        setTimeout(function () {
          $t4.dialog.close();
        }, 3000);
      });
    })

    return $render;
  }
</script>