Skip to main content

Діалог

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

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

Розгляньмо пов’язані методи роботи застосунку Dialog:
  • Створити екземпляр Dialog: app.dialog.create(parameters)
    • parametersobject. Об'єкт з параметрами діалогового вікна.
    Повертає: створений екземпляр Dialog.
  • Знищити екземпляр Dialog: app.dialog.destroy(el)
  • Отримати екземпляр Dialog: app.dialog.get(el) Повертає: екземпляр Dialog.
  • Відкрити діалог: app.dialog.open(el, animate) Повертає: екземпляр Dialog.
  • Закрити діалог: app.dialog.close(el, animate) Повертає: екземпляр 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
Посилання на глобальний екземпляр застосунку
Techno4 (app)
dialog.el
HTML-елемент діалогового вікна
HTMLElement
dialog.$el
Екземпляр Dom64 з діалоговим елементом HTML
Dom64
dialog.backdropEl
Елемент HTML фону
HTMLElement
dialog.$backdropEl
Екземпляр Dom64 із фоновим елементом HTML
Dom64
dialog.params
Параметри діалогу
object
dialog.opened
Логічне значення, що вказує, відкрито діалогове вікно чи ні
boolean

Методи

МетодОпис
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">
Подія буде ініційована, коли діалогове вікно розпочне свою початкову анімацію
Event
dialog:opened
Dialog Element
<div class="dialog">
Подію буде запущено після того, як діалог завершить свою початкову анімацію
Event
dialog:close
Dialog Element
<div class="dialog">
Подія буде ініційована, коли діалогове вікно почне завершувати анімацію
Event
dialog:closed
Dialog Element
<div class="dialog">
Подію буде запущено після того, як діалогове вікно завершить свою анімацію закриття
Event
dialog:beforedestroy
Dialog Element
<div class="dialog">
Подія буде запущена безпосередньо перед знищенням екземпляра Dialog
Event

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

Екземпляр діалогового вікна випромінює події як у себе, так і в екземплярі застосунку . Події екземпляра застосунка мають однакові назви з діалоговим вікном. 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)
    • textstring. Текст попередження.
    • titlestring. Заголовок діалогового вікна.
    • callbackfunction. Функція зворотного виклику, що виконується після натискання «Ok».
    Повертає: створений екземпляр Dialog.
  • Діалог попередження за замовчуванням: app.dialog.alert(text, callback)
    • textstring. Текст попередження.
    • callbackfunction. Функція зворотного виклику після натискання кнопки «Ok».
    Повертає: створений екземпляр Dialog.

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

Діалог підтвердження зазвичай використовується, коли потрібно підтвердити якусь дію. Щоб відкрити модальне підтвердження, ми також повинні викликати один із таких методів програми:
  • Діалог підтвердження з власною назвою: app.dialog.confirm(text, title, callbackOk, callbackCancel)
    • textstring. Текст діалогу підтвердження.
    • titlestring. Заголовок діалогового вікна підтвердження.
    • callbackOkfunction. Зворотний виклик при натисканні кнопки «Ok».
    • callbackCancelfunction. Зворотний виклик при натисканні кнопки «Скасувати».
    Повертає: створений екземпляр Dialog.
  • Діалог підтвердження за замовчуванням: app.dialog.confirm(text, callbackOk, callbackCancel)
    • textstring. Текст підтвердження із назвою за замовчуванням.
    • callbackOkfunction. Зворотний виклик при натисканні «Ok».
    • callbackCancelfunction. Зворотний виклик при натисканні «Скасувати».
    Повертає: створений екземпляр Dialog.

Запит

Діалог запиту використовується, коли потрібно отримати якісь дані/відповідь від користувача. Щоб відкрити діалогове вікно запиту, ми також повинні викликати один із таких методів програми:
  • Діалог запиту з власною назвою: app.dialog.prompt(text, title, callbackOk, callbackCancel, defaultValue)
    • textstring. Текст запиту.
    • titlestring. Заголовок вікна запиту.
    • callbackOkfunction(value). Виконується при натисканні «Ok» (отримує введене значення).
    • callbackCancelfunction(value). Виконується при натисканні «Скасувати».
    • defaultValuestring. Значення текстового поля за замовчуванням.
    Повертає: створений екземпляр Dialog.
  • Діалог запиту за замовчуванням: app.dialog.prompt(text, callbackOk, callbackCancel, defaultValue)
    • textstring. Текст діалогу запиту із заголовком за замовчуванням.
    • callbackOkfunction(value). Виконується при «Ok».
    • callbackCancelfunction(value). Виконується при «Скасувати».
    • defaultValuestring. Початкове значення поля.
    Повертає: створений екземпляр Dialog.

Логін

  • Діалог входу (Login) з власною назвою: app.dialog.login(text, title, callbackOk, callbackCancel)
    • textstring. Текст діалогу входу.
    • titlestring. Заголовок вікна входу.
    • callbackOkfunction(username, password). Виконується при «Ok».
    • callbackCancelfunction(username, password). Виконується при «Скасувати».
    Повертає: створений екземпляр Dialog.
  • Діалог входу за замовчуванням: app.dialog.login(text, callbackOk, callbackCancel)
    • textstring. Текст вікна входу із заголовком за замовчуванням.
    • callbackOkfunction(username, password). Виконується при «Ok».
    • callbackCancelfunction(username, password). Виконується при «Скасувати».
    Повертає: створений екземпляр Dialog.

Пароль

Діалогове вікно пароля корисне, якщо вам потрібно запитати лише пароль:
  • Діалог пароля з власною назвою: app.dialog.password(text, title, callbackOk, callbackCancel)
    • textstring. Текст діалогу пароля.
    • titlestring. Заголовок діалогового вікна пароля.
    • callbackOkfunction(password). Виконується при «Ok».
    • callbackCancelfunction(password). Виконується при «Скасувати».
    Повертає: створений екземпляр Dialog.
  • Діалог пароля за замовчуванням: app.dialog.password(text, callbackOk, callbackCancel)
    • textstring. Текст вікна пароля із заголовком за замовчуванням.
    • callbackOkfunction(password). Виконується при «Ok».
    • callbackCancelfunction(password). Виконується при «Скасувати».
    Повертає: створений екземпляр Dialog.

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

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

Прогрес

Те саме, що діалогове вікно попереднього завантажувача, але з панеллю прогресу progressbar замість попереднього завантажувача.
  • Діалог індикатора прогресу (Progress): app.dialog.progress(title, progress, color)
    • titlestring. Додатково. Назва вікна прогресу.
    • progressnumber. Значення прогресу від 0 до 100. Якщо число не передано, відображається нескінченний прогрес.
    • colorstring. Додатково. Колір смуги прогресу.
    Повертає: створений екземпляр 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>