123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224 |
- /**
- * --------------------------------------------------------------------------
- * Bootstrap (v4.5.0): toast.js
- * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
- * --------------------------------------------------------------------------
- */
-
- import $ from 'jquery'
- import Util from './util'
-
- /**
- * ------------------------------------------------------------------------
- * Constants
- * ------------------------------------------------------------------------
- */
-
- const NAME = 'toast'
- const VERSION = '4.5.0'
- const DATA_KEY = 'bs.toast'
- const EVENT_KEY = `.${DATA_KEY}`
- const JQUERY_NO_CONFLICT = $.fn[NAME]
-
- const EVENT_CLICK_DISMISS = `click.dismiss${EVENT_KEY}`
- const EVENT_HIDE = `hide${EVENT_KEY}`
- const EVENT_HIDDEN = `hidden${EVENT_KEY}`
- const EVENT_SHOW = `show${EVENT_KEY}`
- const EVENT_SHOWN = `shown${EVENT_KEY}`
-
- const CLASS_NAME_FADE = 'fade'
- const CLASS_NAME_HIDE = 'hide'
- const CLASS_NAME_SHOW = 'show'
- const CLASS_NAME_SHOWING = 'showing'
-
- const DefaultType = {
- animation : 'boolean',
- autohide : 'boolean',
- delay : 'number'
- }
-
- const Default = {
- animation : true,
- autohide : true,
- delay : 500
- }
-
- const SELECTOR_DATA_DISMISS = '[data-dismiss="toast"]'
-
- /**
- * ------------------------------------------------------------------------
- * Class Definition
- * ------------------------------------------------------------------------
- */
-
- class Toast {
- constructor(element, config) {
- this._element = element
- this._config = this._getConfig(config)
- this._timeout = null
- this._setListeners()
- }
-
- // Getters
-
- static get VERSION() {
- return VERSION
- }
-
- static get DefaultType() {
- return DefaultType
- }
-
- static get Default() {
- return Default
- }
-
- // Public
-
- show() {
- const showEvent = $.Event(EVENT_SHOW)
-
- $(this._element).trigger(showEvent)
- if (showEvent.isDefaultPrevented()) {
- return
- }
-
- if (this._config.animation) {
- this._element.classList.add(CLASS_NAME_FADE)
- }
-
- const complete = () => {
- this._element.classList.remove(CLASS_NAME_SHOWING)
- this._element.classList.add(CLASS_NAME_SHOW)
-
- $(this._element).trigger(EVENT_SHOWN)
-
- if (this._config.autohide) {
- this._timeout = setTimeout(() => {
- this.hide()
- }, this._config.delay)
- }
- }
-
- this._element.classList.remove(CLASS_NAME_HIDE)
- Util.reflow(this._element)
- this._element.classList.add(CLASS_NAME_SHOWING)
- if (this._config.animation) {
- const transitionDuration = Util.getTransitionDurationFromElement(this._element)
-
- $(this._element)
- .one(Util.TRANSITION_END, complete)
- .emulateTransitionEnd(transitionDuration)
- } else {
- complete()
- }
- }
-
- hide() {
- if (!this._element.classList.contains(CLASS_NAME_SHOW)) {
- return
- }
-
- const hideEvent = $.Event(EVENT_HIDE)
-
- $(this._element).trigger(hideEvent)
- if (hideEvent.isDefaultPrevented()) {
- return
- }
-
- this._close()
- }
-
- dispose() {
- clearTimeout(this._timeout)
- this._timeout = null
-
- if (this._element.classList.contains(CLASS_NAME_SHOW)) {
- this._element.classList.remove(CLASS_NAME_SHOW)
- }
-
- $(this._element).off(EVENT_CLICK_DISMISS)
-
- $.removeData(this._element, DATA_KEY)
- this._element = null
- this._config = null
- }
-
- // Private
-
- _getConfig(config) {
- config = {
- ...Default,
- ...$(this._element).data(),
- ...typeof config === 'object' && config ? config : {}
- }
-
- Util.typeCheckConfig(
- NAME,
- config,
- this.constructor.DefaultType
- )
-
- return config
- }
-
- _setListeners() {
- $(this._element).on(EVENT_CLICK_DISMISS, SELECTOR_DATA_DISMISS, () => this.hide())
- }
-
- _close() {
- const complete = () => {
- this._element.classList.add(CLASS_NAME_HIDE)
- $(this._element).trigger(EVENT_HIDDEN)
- }
-
- this._element.classList.remove(CLASS_NAME_SHOW)
- if (this._config.animation) {
- const transitionDuration = Util.getTransitionDurationFromElement(this._element)
-
- $(this._element)
- .one(Util.TRANSITION_END, complete)
- .emulateTransitionEnd(transitionDuration)
- } else {
- complete()
- }
- }
-
- // Static
-
- static _jQueryInterface(config) {
- return this.each(function () {
- const $element = $(this)
- let data = $element.data(DATA_KEY)
- const _config = typeof config === 'object' && config
-
- if (!data) {
- data = new Toast(this, _config)
- $element.data(DATA_KEY, data)
- }
-
- if (typeof config === 'string') {
- if (typeof data[config] === 'undefined') {
- throw new TypeError(`No method named "${config}"`)
- }
-
- data[config](this)
- }
- })
- }
- }
-
- /**
- * ------------------------------------------------------------------------
- * jQuery
- * ------------------------------------------------------------------------
- */
-
- $.fn[NAME] = Toast._jQueryInterface
- $.fn[NAME].Constructor = Toast
- $.fn[NAME].noConflict = () => {
- $.fn[NAME] = JQUERY_NO_CONFLICT
- return Toast._jQueryInterface
- }
-
- export default Toast
|