123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211 |
- // noinspection EqualityComparisonWithCoercionJS
- /**
- * --------------------------------------------
- * AdminLTE Toasts.js
- * License MIT
- * --------------------------------------------
- */
- import $ from 'jquery'
- /**
- * Constants
- * ====================================================
- */
- const NAME = 'Toasts'
- const DATA_KEY = 'lte.toasts'
- const EVENT_KEY = `.${DATA_KEY}`
- const JQUERY_NO_CONFLICT = $.fn[NAME]
- const EVENT_INIT = `init${EVENT_KEY}`
- const EVENT_CREATED = `created${EVENT_KEY}`
- const EVENT_REMOVED = `removed${EVENT_KEY}`
- const SELECTOR_CONTAINER_TOP_RIGHT = '#toastsContainerTopRight'
- const SELECTOR_CONTAINER_TOP_LEFT = '#toastsContainerTopLeft'
- const SELECTOR_CONTAINER_BOTTOM_RIGHT = '#toastsContainerBottomRight'
- const SELECTOR_CONTAINER_BOTTOM_LEFT = '#toastsContainerBottomLeft'
- const CLASS_NAME_TOP_RIGHT = 'toasts-top-right'
- const CLASS_NAME_TOP_LEFT = 'toasts-top-left'
- const CLASS_NAME_BOTTOM_RIGHT = 'toasts-bottom-right'
- const CLASS_NAME_BOTTOM_LEFT = 'toasts-bottom-left'
- const POSITION_TOP_RIGHT = 'topRight'
- const POSITION_TOP_LEFT = 'topLeft'
- const POSITION_BOTTOM_RIGHT = 'bottomRight'
- const POSITION_BOTTOM_LEFT = 'bottomLeft'
- const Default = {
- position: POSITION_TOP_RIGHT,
- fixed: true,
- autohide: false,
- autoremove: true,
- delay: 1000,
- fade: true,
- icon: null,
- image: null,
- imageAlt: null,
- imageHeight: '25px',
- title: null,
- subtitle: null,
- close: true,
- body: null,
- class: null
- }
- /**
- * Class Definition
- * ====================================================
- */
- class Toasts {
- constructor(element, config) {
- this._config = config
- this._prepareContainer()
- $('body').trigger($.Event(EVENT_INIT))
- }
- // Public
- create() {
- const toast = $('<div class="toast" role="alert" aria-live="assertive" aria-atomic="true"/>')
- toast.data('autohide', this._config.autohide)
- toast.data('animation', this._config.fade)
- if (this._config.class) {
- toast.addClass(this._config.class)
- }
- if (this._config.delay && this._config.delay != 500) {
- toast.data('delay', this._config.delay)
- }
- const toastHeader = $('<div class="toast-header">')
- if (this._config.image != null) {
- const toastImage = $('<img />').addClass('rounded mr-2').attr('src', this._config.image).attr('alt', this._config.imageAlt)
- if (this._config.imageHeight != null) {
- toastImage.height(this._config.imageHeight).width('auto')
- }
- toastHeader.append(toastImage)
- }
- if (this._config.icon != null) {
- toastHeader.append($('<i />').addClass('mr-2').addClass(this._config.icon))
- }
- if (this._config.title != null) {
- toastHeader.append($('<strong />').addClass('mr-auto').html(this._config.title))
- }
- if (this._config.subtitle != null) {
- toastHeader.append($('<small />').html(this._config.subtitle))
- }
- if (this._config.close == true) {
- const toastClose = $('<button data-dismiss="toast" />').attr('type', 'button').addClass('ml-2 mb-1 close').attr('aria-label', 'Close').append('<span aria-hidden="true">×</span>')
- if (this._config.title == null) {
- toastClose.toggleClass('ml-2 ml-auto')
- }
- toastHeader.append(toastClose)
- }
- toast.append(toastHeader)
- if (this._config.body != null) {
- toast.append($('<div class="toast-body" />').html(this._config.body))
- }
- $(this._getContainerId()).prepend(toast)
- const $body = $('body')
- $body.trigger($.Event(EVENT_CREATED))
- toast.toast('show')
- if (this._config.autoremove) {
- toast.on('hidden.bs.toast', function () {
- $(this).delay(200).remove()
- $body.trigger($.Event(EVENT_REMOVED))
- })
- }
- }
- // Static
- _getContainerId() {
- if (this._config.position === POSITION_TOP_RIGHT) {
- return SELECTOR_CONTAINER_TOP_RIGHT
- }
- if (this._config.position === POSITION_TOP_LEFT) {
- return SELECTOR_CONTAINER_TOP_LEFT
- }
- if (this._config.position === POSITION_BOTTOM_RIGHT) {
- return SELECTOR_CONTAINER_BOTTOM_RIGHT
- }
- if (this._config.position === POSITION_BOTTOM_LEFT) {
- return SELECTOR_CONTAINER_BOTTOM_LEFT
- }
- }
- _prepareContainer() {
- if ($(this._getContainerId()).length === 0) {
- const container = $('<div />').attr('id', this._getContainerId().replace('#', ''))
- if (this._config.position == POSITION_TOP_RIGHT) {
- container.addClass(CLASS_NAME_TOP_RIGHT)
- } else if (this._config.position == POSITION_TOP_LEFT) {
- container.addClass(CLASS_NAME_TOP_LEFT)
- } else if (this._config.position == POSITION_BOTTOM_RIGHT) {
- container.addClass(CLASS_NAME_BOTTOM_RIGHT)
- } else if (this._config.position == POSITION_BOTTOM_LEFT) {
- container.addClass(CLASS_NAME_BOTTOM_LEFT)
- }
- $('body').append(container)
- }
- if (this._config.fixed) {
- $(this._getContainerId()).addClass('fixed')
- } else {
- $(this._getContainerId()).removeClass('fixed')
- }
- }
- // Static
- static _jQueryInterface(option, config) {
- return this.each(function () {
- const _options = $.extend({}, Default, config)
- const toast = new Toasts($(this), _options)
- if (option === 'create') {
- toast[option]()
- }
- })
- }
- }
- /**
- * jQuery API
- * ====================================================
- */
- $.fn[NAME] = Toasts._jQueryInterface
- $.fn[NAME].Constructor = Toasts
- $.fn[NAME].noConflict = function () {
- $.fn[NAME] = JQUERY_NO_CONFLICT
- return Toasts._jQueryInterface
- }
- export default Toasts
|