toast.js 11.5 KB
Newer Older
XhmikosR's avatar
Dist  
XhmikosR committed
1
/*!
XhmikosR's avatar
XhmikosR committed
2
  * Bootstrap toast.js v4.3.1 (https://getbootstrap.com/)
Mark Otto's avatar
Mark Otto committed
3
  * Copyright 2011-2019 The Bootstrap Authors (https://github.com/twbs/bootstrap/graphs/contributors)
XhmikosR's avatar
Dist  
XhmikosR committed
4
5
6
  * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
  */
(function (global, factory) {
7
8
  typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory(require('../dom/data.js'), require('../dom/event-handler.js'), require('../dom/manipulator.js')) :
  typeof define === 'function' && define.amd ? define(['../dom/data.js', '../dom/event-handler.js', '../dom/manipulator.js'], factory) :
XhmikosR's avatar
XhmikosR committed
9
10
  (global = global || self, global.Toast = factory(global.Data, global.EventHandler, global.Manipulator));
}(this, function (Data, EventHandler, Manipulator) { 'use strict';
XhmikosR's avatar
Dist  
XhmikosR committed
11

XhmikosR's avatar
XhmikosR committed
12
13
14
  Data = Data && Data.hasOwnProperty('default') ? Data['default'] : Data;
  EventHandler = EventHandler && EventHandler.hasOwnProperty('default') ? EventHandler['default'] : EventHandler;
  Manipulator = Manipulator && Manipulator.hasOwnProperty('default') ? Manipulator['default'] : Manipulator;
XhmikosR's avatar
Dist  
XhmikosR committed
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46

  function _defineProperties(target, props) {
    for (var i = 0; i < props.length; i++) {
      var descriptor = props[i];
      descriptor.enumerable = descriptor.enumerable || false;
      descriptor.configurable = true;
      if ("value" in descriptor) descriptor.writable = true;
      Object.defineProperty(target, descriptor.key, descriptor);
    }
  }

  function _createClass(Constructor, protoProps, staticProps) {
    if (protoProps) _defineProperties(Constructor.prototype, protoProps);
    if (staticProps) _defineProperties(Constructor, staticProps);
    return Constructor;
  }

  function _defineProperty(obj, key, value) {
    if (key in obj) {
      Object.defineProperty(obj, key, {
        value: value,
        enumerable: true,
        configurable: true,
        writable: true
      });
    } else {
      obj[key] = value;
    }

    return obj;
  }

47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
  function ownKeys(object, enumerableOnly) {
    var keys = Object.keys(object);

    if (Object.getOwnPropertySymbols) {
      var symbols = Object.getOwnPropertySymbols(object);
      if (enumerableOnly) symbols = symbols.filter(function (sym) {
        return Object.getOwnPropertyDescriptor(object, sym).enumerable;
      });
      keys.push.apply(keys, symbols);
    }

    return keys;
  }

  function _objectSpread2(target) {
XhmikosR's avatar
Dist  
XhmikosR committed
62
63
64
    for (var i = 1; i < arguments.length; i++) {
      var source = arguments[i] != null ? arguments[i] : {};

65
66
67
68
69
70
71
72
73
74
      if (i % 2) {
        ownKeys(source, true).forEach(function (key) {
          _defineProperty(target, key, source[key]);
        });
      } else if (Object.getOwnPropertyDescriptors) {
        Object.defineProperties(target, Object.getOwnPropertyDescriptors(source));
      } else {
        ownKeys(source).forEach(function (key) {
          Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key));
        });
XhmikosR's avatar
Dist  
XhmikosR committed
75
76
77
78
79
80
      }
    }

    return target;
  }

XhmikosR's avatar
XhmikosR committed
81
82
83
84
85
86
87
88
  /**
   * --------------------------------------------------------------------------
   * Bootstrap (v4.3.1): util/index.js
   * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
   * --------------------------------------------------------------------------
   */
  var MILLISECONDS_MULTIPLIER = 1000;
  var TRANSITION_END = 'transitionend';
XhmikosR's avatar
Dist.    
XhmikosR committed
89
90
  var _window = window,
      jQuery = _window.jQuery; // Shoutout AngusCroll (https://goo.gl/pxwQGp)
XhmikosR's avatar
XhmikosR committed
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119

  var toType = function toType(obj) {
    return {}.toString.call(obj).match(/\s([a-z]+)/i)[1].toLowerCase();
  };

  var getTransitionDurationFromElement = function getTransitionDurationFromElement(element) {
    if (!element) {
      return 0;
    } // Get transition-duration of the element


    var _window$getComputedSt = window.getComputedStyle(element),
        transitionDuration = _window$getComputedSt.transitionDuration,
        transitionDelay = _window$getComputedSt.transitionDelay;

    var floatTransitionDuration = parseFloat(transitionDuration);
    var floatTransitionDelay = parseFloat(transitionDelay); // Return 0 if element or transition duration is not found

    if (!floatTransitionDuration && !floatTransitionDelay) {
      return 0;
    } // If multiple durations are defined, take the first


    transitionDuration = transitionDuration.split(',')[0];
    transitionDelay = transitionDelay.split(',')[0];
    return (parseFloat(transitionDuration) + parseFloat(transitionDelay)) * MILLISECONDS_MULTIPLIER;
  };

  var triggerTransitionEnd = function triggerTransitionEnd(element) {
XhmikosR's avatar
XhmikosR committed
120
121
122
    var evt = document.createEvent('HTMLEvents');
    evt.initEvent(TRANSITION_END, true, true);
    element.dispatchEvent(evt);
XhmikosR's avatar
XhmikosR committed
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
  };

  var isElement = function isElement(obj) {
    return (obj[0] || obj).nodeType;
  };

  var emulateTransitionEnd = function emulateTransitionEnd(element, duration) {
    var called = false;
    var durationPadding = 5;
    var emulatedDuration = duration + durationPadding;

    function listener() {
      called = true;
      element.removeEventListener(TRANSITION_END, listener);
    }

    element.addEventListener(TRANSITION_END, listener);
    setTimeout(function () {
      if (!called) {
        triggerTransitionEnd(element);
      }
    }, emulatedDuration);
  };

  var typeCheckConfig = function typeCheckConfig(componentName, config, configTypes) {
    Object.keys(configTypes).forEach(function (property) {
      var expectedTypes = configTypes[property];
      var value = config[property];
      var valueType = value && isElement(value) ? 'element' : toType(value);

      if (!new RegExp(expectedTypes).test(valueType)) {
        throw new Error(componentName.toUpperCase() + ": " + ("Option \"" + property + "\" provided type \"" + valueType + "\" ") + ("but expected type \"" + expectedTypes + "\"."));
      }
    });
  };

159
160
161
162
  var reflow = function reflow(element) {
    return element.offsetHeight;
  };

XhmikosR's avatar
Dist  
XhmikosR committed
163
  /**
XhmikosR's avatar
Dist    
XhmikosR committed
164
165
166
   * ------------------------------------------------------------------------
   * Constants
   * ------------------------------------------------------------------------
XhmikosR's avatar
Dist  
XhmikosR committed
167
168
   */

XhmikosR's avatar
Dist    
XhmikosR committed
169
  var NAME = 'toast';
XhmikosR's avatar
XhmikosR committed
170
  var VERSION = '4.3.1';
XhmikosR's avatar
Dist    
XhmikosR committed
171
172
  var DATA_KEY = 'bs.toast';
  var EVENT_KEY = "." + DATA_KEY;
XhmikosR's avatar
XhmikosR committed
173
  var Event = {
XhmikosR's avatar
Dist    
XhmikosR committed
174
175
176
177
178
179
180
181
182
    CLICK_DISMISS: "click.dismiss" + EVENT_KEY,
    HIDE: "hide" + EVENT_KEY,
    HIDDEN: "hidden" + EVENT_KEY,
    SHOW: "show" + EVENT_KEY,
    SHOWN: "shown" + EVENT_KEY
  };
  var ClassName = {
    FADE: 'fade',
    HIDE: 'hide',
Mark Otto's avatar
dist    
Mark Otto committed
183
184
    SHOW: 'show',
    SHOWING: 'showing'
XhmikosR's avatar
Dist    
XhmikosR committed
185
186
187
188
189
190
191
192
193
194
195
196
197
  };
  var DefaultType = {
    animation: 'boolean',
    autohide: 'boolean',
    delay: 'number'
  };
  var Default = {
    animation: true,
    autohide: true,
    delay: 500
  };
  var Selector = {
    DATA_DISMISS: '[data-dismiss="toast"]'
XhmikosR's avatar
Dist  
XhmikosR committed
198
199
    /**
     * ------------------------------------------------------------------------
XhmikosR's avatar
Dist    
XhmikosR committed
200
     * Class Definition
XhmikosR's avatar
Dist  
XhmikosR committed
201
202
203
     * ------------------------------------------------------------------------
     */

XhmikosR's avatar
Dist    
XhmikosR committed
204
  };
XhmikosR's avatar
Dist  
XhmikosR committed
205

XhmikosR's avatar
Dist    
XhmikosR committed
206
207
208
209
210
211
212
  var Toast =
  /*#__PURE__*/
  function () {
    function Toast(element, config) {
      this._element = element;
      this._config = this._getConfig(config);
      this._timeout = null;
XhmikosR's avatar
Dist  
XhmikosR committed
213

XhmikosR's avatar
Dist    
XhmikosR committed
214
      this._setListeners();
XhmikosR's avatar
XhmikosR committed
215
216

      Data.setData(element, DATA_KEY, this);
XhmikosR's avatar
Dist    
XhmikosR committed
217
    } // Getters
XhmikosR's avatar
Dist  
XhmikosR committed
218
219


XhmikosR's avatar
Dist    
XhmikosR committed
220
    var _proto = Toast.prototype;
XhmikosR's avatar
Dist  
XhmikosR committed
221

XhmikosR's avatar
Dist    
XhmikosR committed
222
223
224
    // Public
    _proto.show = function show() {
      var _this = this;
XhmikosR's avatar
Dist  
XhmikosR committed
225

Mark Otto's avatar
dist v5    
Mark Otto committed
226
227
228
229
230
      var showEvent = EventHandler.trigger(this._element, Event.SHOW);

      if (showEvent.defaultPrevented) {
        return;
      }
XhmikosR's avatar
Dist  
XhmikosR committed
231

XhmikosR's avatar
Dist    
XhmikosR committed
232
233
234
      if (this._config.animation) {
        this._element.classList.add(ClassName.FADE);
      }
XhmikosR's avatar
Dist  
XhmikosR committed
235

XhmikosR's avatar
Dist    
XhmikosR committed
236
      var complete = function complete() {
Mark Otto's avatar
dist    
Mark Otto committed
237
238
239
240
        _this._element.classList.remove(ClassName.SHOWING);

        _this._element.classList.add(ClassName.SHOW);

XhmikosR's avatar
XhmikosR committed
241
        EventHandler.trigger(_this._element, Event.SHOWN);
XhmikosR's avatar
Dist  
XhmikosR committed
242

XhmikosR's avatar
Dist    
XhmikosR committed
243
        if (_this._config.autohide) {
XhmikosR's avatar
XhmikosR committed
244
245
246
          _this._timeout = setTimeout(function () {
            _this.hide();
          }, _this._config.delay);
XhmikosR's avatar
Dist  
XhmikosR committed
247
248
249
        }
      };

Mark Otto's avatar
dist    
Mark Otto committed
250
251
      this._element.classList.remove(ClassName.HIDE);

252
253
      reflow(this._element);

Mark Otto's avatar
dist    
Mark Otto committed
254
      this._element.classList.add(ClassName.SHOWING);
XhmikosR's avatar
Dist  
XhmikosR committed
255

XhmikosR's avatar
Dist    
XhmikosR committed
256
      if (this._config.animation) {
XhmikosR's avatar
XhmikosR committed
257
258
259
        var transitionDuration = getTransitionDurationFromElement(this._element);
        EventHandler.one(this._element, TRANSITION_END, complete);
        emulateTransitionEnd(this._element, transitionDuration);
XhmikosR's avatar
Dist    
XhmikosR committed
260
261
262
263
      } else {
        complete();
      }
    };
XhmikosR's avatar
Dist  
XhmikosR committed
264

XhmikosR's avatar
XhmikosR committed
265
    _proto.hide = function hide() {
XhmikosR's avatar
Dist    
XhmikosR committed
266
      var _this2 = this;
XhmikosR's avatar
Dist  
XhmikosR committed
267

XhmikosR's avatar
Dist    
XhmikosR committed
268
269
270
      if (!this._element.classList.contains(ClassName.SHOW)) {
        return;
      }
XhmikosR's avatar
Dist  
XhmikosR committed
271

Mark Otto's avatar
dist v5    
Mark Otto committed
272
273
274
275
276
      var hideEvent = EventHandler.trigger(this._element, Event.HIDE);

      if (hideEvent.defaultPrevented) {
        return;
      }
XhmikosR's avatar
Dist  
XhmikosR committed
277

XhmikosR's avatar
XhmikosR committed
278
279
280
281
282
283
284
285
286
287
288
289
      var complete = function complete() {
        _this2._element.classList.add(ClassName.HIDE);

        EventHandler.trigger(_this2._element, Event.HIDDEN);
      };

      this._element.classList.remove(ClassName.SHOW);

      if (this._config.animation) {
        var transitionDuration = getTransitionDurationFromElement(this._element);
        EventHandler.one(this._element, TRANSITION_END, complete);
        emulateTransitionEnd(this._element, transitionDuration);
XhmikosR's avatar
Dist    
XhmikosR committed
290
      } else {
XhmikosR's avatar
XhmikosR committed
291
        complete();
XhmikosR's avatar
Dist    
XhmikosR committed
292
293
      }
    };
XhmikosR's avatar
Dist  
XhmikosR committed
294

XhmikosR's avatar
Dist    
XhmikosR committed
295
296
297
    _proto.dispose = function dispose() {
      clearTimeout(this._timeout);
      this._timeout = null;
XhmikosR's avatar
Dist  
XhmikosR committed
298

XhmikosR's avatar
Dist    
XhmikosR committed
299
300
301
      if (this._element.classList.contains(ClassName.SHOW)) {
        this._element.classList.remove(ClassName.SHOW);
      }
XhmikosR's avatar
Dist  
XhmikosR committed
302

XhmikosR's avatar
XhmikosR committed
303
      EventHandler.off(this._element, Event.CLICK_DISMISS);
XhmikosR's avatar
XhmikosR committed
304
      Data.removeData(this._element, DATA_KEY);
XhmikosR's avatar
Dist    
XhmikosR committed
305
306
      this._element = null;
      this._config = null;
Mark Otto's avatar
Mark Otto committed
307
308
    } // Private
    ;
XhmikosR's avatar
Dist  
XhmikosR committed
309

XhmikosR's avatar
Dist    
XhmikosR committed
310
    _proto._getConfig = function _getConfig(config) {
311
      config = _objectSpread2({}, Default, {}, Manipulator.getDataAttributes(this._element), {}, typeof config === 'object' && config ? config : {});
XhmikosR's avatar
XhmikosR committed
312
      typeCheckConfig(NAME, config, this.constructor.DefaultType);
XhmikosR's avatar
Dist    
XhmikosR committed
313
314
      return config;
    };
XhmikosR's avatar
Dist  
XhmikosR committed
315

XhmikosR's avatar
Dist    
XhmikosR committed
316
317
    _proto._setListeners = function _setListeners() {
      var _this3 = this;
XhmikosR's avatar
Dist  
XhmikosR committed
318

XhmikosR's avatar
XhmikosR committed
319
320
      EventHandler.on(this._element, Event.CLICK_DISMISS, Selector.DATA_DISMISS, function () {
        return _this3.hide();
XhmikosR's avatar
Dist    
XhmikosR committed
321
      });
Mark Otto's avatar
Mark Otto committed
322
323
    } // Static
    ;
XhmikosR's avatar
Dist  
XhmikosR committed
324

XhmikosR's avatar
Dist    
XhmikosR committed
325
326
    Toast._jQueryInterface = function _jQueryInterface(config) {
      return this.each(function () {
XhmikosR's avatar
XhmikosR committed
327
        var data = Data.getData(this, DATA_KEY);
XhmikosR's avatar
Dist  
XhmikosR committed
328

XhmikosR's avatar
Dist    
XhmikosR committed
329
        var _config = typeof config === 'object' && config;
XhmikosR's avatar
Dist  
XhmikosR committed
330

XhmikosR's avatar
Dist    
XhmikosR committed
331
332
333
        if (!data) {
          data = new Toast(this, _config);
        }
XhmikosR's avatar
Dist  
XhmikosR committed
334

XhmikosR's avatar
Dist    
XhmikosR committed
335
336
337
        if (typeof config === 'string') {
          if (typeof data[config] === 'undefined') {
            throw new TypeError("No method named \"" + config + "\"");
XhmikosR's avatar
Dist  
XhmikosR committed
338
339
          }

XhmikosR's avatar
Dist    
XhmikosR committed
340
          data[config](this);
XhmikosR's avatar
Dist  
XhmikosR committed
341
        }
XhmikosR's avatar
Dist    
XhmikosR committed
342
343
      });
    };
XhmikosR's avatar
Dist  
XhmikosR committed
344

XhmikosR's avatar
XhmikosR committed
345
346
347
348
    Toast._getInstance = function _getInstance(element) {
      return Data.getData(element, DATA_KEY);
    };

XhmikosR's avatar
Dist    
XhmikosR committed
349
350
351
352
353
354
355
356
357
358
    _createClass(Toast, null, [{
      key: "VERSION",
      get: function get() {
        return VERSION;
      }
    }, {
      key: "DefaultType",
      get: function get() {
        return DefaultType;
      }
Mark Otto's avatar
Mark Otto committed
359
360
361
362
363
    }, {
      key: "Default",
      get: function get() {
        return Default;
      }
XhmikosR's avatar
Dist    
XhmikosR committed
364
    }]);
XhmikosR's avatar
Dist  
XhmikosR committed
365

XhmikosR's avatar
Dist    
XhmikosR committed
366
367
368
369
370
371
    return Toast;
  }();
  /**
   * ------------------------------------------------------------------------
   * jQuery
   * ------------------------------------------------------------------------
XhmikosR's avatar
XhmikosR committed
372
   *  add .toast to jQuery only if jQuery is present
XhmikosR's avatar
Dist    
XhmikosR committed
373
   */
XhmikosR's avatar
Dist  
XhmikosR committed
374

375
376
  /* istanbul ignore if */

XhmikosR's avatar
Dist  
XhmikosR committed
377

XhmikosR's avatar
XhmikosR committed
378
379
380
381
  if (typeof jQuery !== 'undefined') {
    var JQUERY_NO_CONFLICT = jQuery.fn[NAME];
    jQuery.fn[NAME] = Toast._jQueryInterface;
    jQuery.fn[NAME].Constructor = Toast;
XhmikosR's avatar
Dist  
XhmikosR committed
382

XhmikosR's avatar
XhmikosR committed
383
384
385
386
387
    jQuery.fn[NAME].noConflict = function () {
      jQuery.fn[NAME] = JQUERY_NO_CONFLICT;
      return Toast._jQueryInterface;
    };
  }
XhmikosR's avatar
Dist  
XhmikosR committed
388
389
390

  return Toast;

Mark Otto's avatar
Mark Otto committed
391
}));
XhmikosR's avatar
Dist  
XhmikosR committed
392
//# sourceMappingURL=toast.js.map