toast.js 11.6 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) {
XhmikosR's avatar
XhmikosR committed
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
  (global = global || self, global.Toast = factory(global.Data, global.EventHandler, global.Manipulator));
XhmikosR's avatar
XhmikosR committed
10
}(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
  /**
   * --------------------------------------------------------------------------
   * Bootstrap (v4.3.1): util/index.js
   * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
   * --------------------------------------------------------------------------
   */
  var MILLISECONDS_MULTIPLIER = 1000;
XhmikosR's avatar
XhmikosR committed
88
  var TRANSITION_END = 'transitionend'; // Shoutout AngusCroll (https://goo.gl/pxwQGp)
XhmikosR's avatar
XhmikosR committed
89
90
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

  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
118
119
120
    var evt = document.createEvent('HTMLEvents');
    evt.initEvent(TRANSITION_END, true, true);
    element.dispatchEvent(evt);
XhmikosR's avatar
XhmikosR committed
121
122
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
  };

  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 + "\"."));
      }
    });
  };

157
158
159
160
  var reflow = function reflow(element) {
    return element.offsetHeight;
  };

XhmikosR's avatar
XhmikosR committed
161
162
163
164
165
166
167
168
169
170
171
  var getjQuery = function getjQuery() {
    var _window = window,
        jQuery = _window.jQuery;

    if (jQuery && !document.body.hasAttribute('data-no-jquery')) {
      return jQuery;
    }

    return null;
  };

XhmikosR's avatar
Dist  
XhmikosR committed
172
  /**
XhmikosR's avatar
Dist    
XhmikosR committed
173
174
175
   * ------------------------------------------------------------------------
   * Constants
   * ------------------------------------------------------------------------
XhmikosR's avatar
Dist  
XhmikosR committed
176
177
   */

XhmikosR's avatar
Dist    
XhmikosR committed
178
  var NAME = 'toast';
XhmikosR's avatar
XhmikosR committed
179
  var VERSION = '4.3.1';
XhmikosR's avatar
Dist    
XhmikosR committed
180
181
  var DATA_KEY = 'bs.toast';
  var EVENT_KEY = "." + DATA_KEY;
XhmikosR's avatar
XhmikosR committed
182
  var Event = {
XhmikosR's avatar
Dist    
XhmikosR committed
183
184
185
186
187
188
189
190
191
    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
192
193
    SHOW: 'show',
    SHOWING: 'showing'
XhmikosR's avatar
Dist    
XhmikosR committed
194
195
196
197
198
199
200
201
202
203
204
205
206
207
  };
  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
XhmikosR committed
208
209
210
211
212
  /**
   * ------------------------------------------------------------------------
   * Class Definition
   * ------------------------------------------------------------------------
   */
XhmikosR's avatar
Dist  
XhmikosR committed
213

XhmikosR's avatar
Dist    
XhmikosR committed
214
215
216
217
218
219
220
  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
221

XhmikosR's avatar
Dist    
XhmikosR committed
222
      this._setListeners();
XhmikosR's avatar
XhmikosR committed
223
224

      Data.setData(element, DATA_KEY, this);
XhmikosR's avatar
Dist    
XhmikosR committed
225
    } // Getters
XhmikosR's avatar
Dist  
XhmikosR committed
226
227


XhmikosR's avatar
Dist    
XhmikosR committed
228
    var _proto = Toast.prototype;
XhmikosR's avatar
Dist  
XhmikosR committed
229

XhmikosR's avatar
Dist    
XhmikosR committed
230
231
232
    // Public
    _proto.show = function show() {
      var _this = this;
XhmikosR's avatar
Dist  
XhmikosR committed
233

Mark Otto's avatar
dist v5    
Mark Otto committed
234
235
236
237
238
      var showEvent = EventHandler.trigger(this._element, Event.SHOW);

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

XhmikosR's avatar
Dist    
XhmikosR committed
240
241
242
      if (this._config.animation) {
        this._element.classList.add(ClassName.FADE);
      }
XhmikosR's avatar
Dist  
XhmikosR committed
243

XhmikosR's avatar
Dist    
XhmikosR committed
244
      var complete = function complete() {
Mark Otto's avatar
dist    
Mark Otto committed
245
246
247
248
        _this._element.classList.remove(ClassName.SHOWING);

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

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

XhmikosR's avatar
Dist    
XhmikosR committed
251
        if (_this._config.autohide) {
XhmikosR's avatar
XhmikosR committed
252
253
254
          _this._timeout = setTimeout(function () {
            _this.hide();
          }, _this._config.delay);
XhmikosR's avatar
Dist  
XhmikosR committed
255
256
257
        }
      };

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

260
261
      reflow(this._element);

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

XhmikosR's avatar
Dist    
XhmikosR committed
264
      if (this._config.animation) {
XhmikosR's avatar
XhmikosR committed
265
266
267
        var transitionDuration = getTransitionDurationFromElement(this._element);
        EventHandler.one(this._element, TRANSITION_END, complete);
        emulateTransitionEnd(this._element, transitionDuration);
XhmikosR's avatar
Dist    
XhmikosR committed
268
269
270
271
      } else {
        complete();
      }
    };
XhmikosR's avatar
Dist  
XhmikosR committed
272

XhmikosR's avatar
XhmikosR committed
273
    _proto.hide = function hide() {
XhmikosR's avatar
Dist    
XhmikosR committed
274
      var _this2 = this;
XhmikosR's avatar
Dist  
XhmikosR committed
275

XhmikosR's avatar
Dist    
XhmikosR committed
276
277
278
      if (!this._element.classList.contains(ClassName.SHOW)) {
        return;
      }
XhmikosR's avatar
Dist  
XhmikosR committed
279

Mark Otto's avatar
dist v5    
Mark Otto committed
280
281
282
283
284
      var hideEvent = EventHandler.trigger(this._element, Event.HIDE);

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

XhmikosR's avatar
XhmikosR committed
286
287
288
289
290
291
292
293
294
295
296
297
      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
298
      } else {
XhmikosR's avatar
XhmikosR committed
299
        complete();
XhmikosR's avatar
Dist    
XhmikosR committed
300
301
      }
    };
XhmikosR's avatar
Dist  
XhmikosR committed
302

XhmikosR's avatar
Dist    
XhmikosR committed
303
304
305
    _proto.dispose = function dispose() {
      clearTimeout(this._timeout);
      this._timeout = null;
XhmikosR's avatar
Dist  
XhmikosR committed
306

XhmikosR's avatar
Dist    
XhmikosR committed
307
308
309
      if (this._element.classList.contains(ClassName.SHOW)) {
        this._element.classList.remove(ClassName.SHOW);
      }
XhmikosR's avatar
Dist  
XhmikosR committed
310

XhmikosR's avatar
XhmikosR committed
311
      EventHandler.off(this._element, Event.CLICK_DISMISS);
XhmikosR's avatar
XhmikosR committed
312
      Data.removeData(this._element, DATA_KEY);
XhmikosR's avatar
Dist    
XhmikosR committed
313
314
      this._element = null;
      this._config = null;
Mark Otto's avatar
Mark Otto committed
315
316
    } // Private
    ;
XhmikosR's avatar
Dist  
XhmikosR committed
317

XhmikosR's avatar
Dist    
XhmikosR committed
318
    _proto._getConfig = function _getConfig(config) {
319
      config = _objectSpread2({}, Default, {}, Manipulator.getDataAttributes(this._element), {}, typeof config === 'object' && config ? config : {});
XhmikosR's avatar
XhmikosR committed
320
      typeCheckConfig(NAME, config, this.constructor.DefaultType);
XhmikosR's avatar
Dist    
XhmikosR committed
321
322
      return config;
    };
XhmikosR's avatar
Dist  
XhmikosR committed
323

XhmikosR's avatar
Dist    
XhmikosR committed
324
325
    _proto._setListeners = function _setListeners() {
      var _this3 = this;
XhmikosR's avatar
Dist  
XhmikosR committed
326

XhmikosR's avatar
XhmikosR committed
327
328
      EventHandler.on(this._element, Event.CLICK_DISMISS, Selector.DATA_DISMISS, function () {
        return _this3.hide();
XhmikosR's avatar
Dist    
XhmikosR committed
329
      });
Mark Otto's avatar
Mark Otto committed
330
331
    } // Static
    ;
XhmikosR's avatar
Dist  
XhmikosR committed
332

XhmikosR's avatar
XhmikosR committed
333
    Toast.jQueryInterface = function jQueryInterface(config) {
XhmikosR's avatar
Dist    
XhmikosR committed
334
      return this.each(function () {
XhmikosR's avatar
XhmikosR committed
335
        var data = Data.getData(this, DATA_KEY);
XhmikosR's avatar
Dist  
XhmikosR committed
336

XhmikosR's avatar
Dist    
XhmikosR committed
337
        var _config = typeof config === 'object' && config;
XhmikosR's avatar
Dist  
XhmikosR committed
338

XhmikosR's avatar
Dist    
XhmikosR committed
339
340
341
        if (!data) {
          data = new Toast(this, _config);
        }
XhmikosR's avatar
Dist  
XhmikosR committed
342

XhmikosR's avatar
Dist    
XhmikosR committed
343
344
345
        if (typeof config === 'string') {
          if (typeof data[config] === 'undefined') {
            throw new TypeError("No method named \"" + config + "\"");
XhmikosR's avatar
Dist  
XhmikosR committed
346
347
          }

XhmikosR's avatar
Dist    
XhmikosR committed
348
          data[config](this);
XhmikosR's avatar
Dist  
XhmikosR committed
349
        }
XhmikosR's avatar
Dist    
XhmikosR committed
350
351
      });
    };
XhmikosR's avatar
Dist  
XhmikosR committed
352

XhmikosR's avatar
XhmikosR committed
353
    Toast.getInstance = function getInstance(element) {
XhmikosR's avatar
XhmikosR committed
354
355
356
      return Data.getData(element, DATA_KEY);
    };

XhmikosR's avatar
Dist    
XhmikosR committed
357
358
359
360
361
362
363
364
365
366
    _createClass(Toast, null, [{
      key: "VERSION",
      get: function get() {
        return VERSION;
      }
    }, {
      key: "DefaultType",
      get: function get() {
        return DefaultType;
      }
Mark Otto's avatar
Mark Otto committed
367
368
369
370
371
    }, {
      key: "Default",
      get: function get() {
        return Default;
      }
XhmikosR's avatar
Dist    
XhmikosR committed
372
    }]);
XhmikosR's avatar
Dist  
XhmikosR committed
373

XhmikosR's avatar
Dist    
XhmikosR committed
374
375
    return Toast;
  }();
XhmikosR's avatar
XhmikosR committed
376
377

  var $ = getjQuery();
XhmikosR's avatar
Dist    
XhmikosR committed
378
379
380
381
  /**
   * ------------------------------------------------------------------------
   * jQuery
   * ------------------------------------------------------------------------
XhmikosR's avatar
XhmikosR committed
382
   *  add .toast to jQuery only if jQuery is present
XhmikosR's avatar
Dist    
XhmikosR committed
383
   */
XhmikosR's avatar
Dist  
XhmikosR committed
384

385
386
  /* istanbul ignore if */

XhmikosR's avatar
XhmikosR committed
387
388
389
390
  if ($) {
    var JQUERY_NO_CONFLICT = $.fn[NAME];
    $.fn[NAME] = Toast.jQueryInterface;
    $.fn[NAME].Constructor = Toast;
XhmikosR's avatar
Dist  
XhmikosR committed
391

XhmikosR's avatar
XhmikosR committed
392
393
394
    $.fn[NAME].noConflict = function () {
      $.fn[NAME] = JQUERY_NO_CONFLICT;
      return Toast.jQueryInterface;
XhmikosR's avatar
XhmikosR committed
395
396
    };
  }
XhmikosR's avatar
Dist  
XhmikosR committed
397
398
399

  return Toast;

XhmikosR's avatar
XhmikosR committed
400
})));
XhmikosR's avatar
Dist  
XhmikosR committed
401
//# sourceMappingURL=toast.js.map