toast.js 11.8 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/)
XhmikosR's avatar
XhmikosR committed
3
  * Copyright 2011-2020 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 && Object.prototype.hasOwnProperty.call(Data, 'default') ? Data['default'] : Data;
  EventHandler = EventHandler && Object.prototype.hasOwnProperty.call(EventHandler, 'default') ? EventHandler['default'] : EventHandler;
  Manipulator = Manipulator && Object.prototype.hasOwnProperty.call(Manipulator, '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
      if (i % 2) {
XhmikosR's avatar
XhmikosR committed
66
        ownKeys(Object(source), true).forEach(function (key) {
67
68
69
70
71
          _defineProperty(target, key, source[key]);
        });
      } else if (Object.getOwnPropertyDescriptors) {
        Object.defineProperties(target, Object.getOwnPropertyDescriptors(source));
      } else {
XhmikosR's avatar
XhmikosR committed
72
        ownKeys(Object(source)).forEach(function (key) {
73
74
          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

  var toType = function toType(obj) {
XhmikosR's avatar
XhmikosR committed
91
92
93
94
    if (obj === null || obj === undefined) {
      return "" + obj;
    }

XhmikosR's avatar
XhmikosR committed
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
120
121
    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
122
    element.dispatchEvent(new Event(TRANSITION_END));
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
XhmikosR committed
163
164
165
166
167
168
169
170
171
172
173
  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
174
  /**
XhmikosR's avatar
Dist    
XhmikosR committed
175
176
177
   * ------------------------------------------------------------------------
   * Constants
   * ------------------------------------------------------------------------
XhmikosR's avatar
Dist  
XhmikosR committed
178
179
   */

XhmikosR's avatar
Dist    
XhmikosR committed
180
  var NAME = 'toast';
XhmikosR's avatar
XhmikosR committed
181
  var VERSION = '4.3.1';
XhmikosR's avatar
Dist    
XhmikosR committed
182
183
  var DATA_KEY = 'bs.toast';
  var EVENT_KEY = "." + DATA_KEY;
XhmikosR's avatar
XhmikosR committed
184
185
186
187
188
189
190
191
192
  var EVENT_CLICK_DISMISS = "click.dismiss" + EVENT_KEY;
  var EVENT_HIDE = "hide" + EVENT_KEY;
  var EVENT_HIDDEN = "hidden" + EVENT_KEY;
  var EVENT_SHOW = "show" + EVENT_KEY;
  var EVENT_SHOWN = "shown" + EVENT_KEY;
  var CLASS_NAME_FADE = 'fade';
  var CLASS_NAME_HIDE = 'hide';
  var CLASS_NAME_SHOW = 'show';
  var CLASS_NAME_SHOWING = 'showing';
XhmikosR's avatar
Dist    
XhmikosR committed
193
194
195
196
197
198
199
200
201
202
  var DefaultType = {
    animation: 'boolean',
    autohide: 'boolean',
    delay: 'number'
  };
  var Default = {
    animation: true,
    autohide: true,
    delay: 500
  };
XhmikosR's avatar
XhmikosR committed
203
  var SELECTOR_DATA_DISMISS = '[data-dismiss="toast"]';
XhmikosR's avatar
XhmikosR committed
204
205
206
207
208
  /**
   * ------------------------------------------------------------------------
   * Class Definition
   * ------------------------------------------------------------------------
   */
XhmikosR's avatar
Dist  
XhmikosR committed
209

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

XhmikosR's avatar
Dist    
XhmikosR committed
216
      this._setListeners();
XhmikosR's avatar
XhmikosR committed
217
218

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


XhmikosR's avatar
Dist    
XhmikosR committed
222
    var _proto = Toast.prototype;
XhmikosR's avatar
Dist  
XhmikosR committed
223

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

XhmikosR's avatar
XhmikosR committed
228
      var showEvent = EventHandler.trigger(this._element, EVENT_SHOW);
Mark Otto's avatar
dist v5    
Mark Otto committed
229
230
231
232

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

XhmikosR's avatar
Dist    
XhmikosR committed
234
      if (this._config.animation) {
XhmikosR's avatar
XhmikosR committed
235
        this._element.classList.add(CLASS_NAME_FADE);
XhmikosR's avatar
Dist    
XhmikosR committed
236
      }
XhmikosR's avatar
Dist  
XhmikosR committed
237

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

XhmikosR's avatar
XhmikosR committed
241
        _this._element.classList.add(CLASS_NAME_SHOW);
Mark Otto's avatar
dist    
Mark Otto committed
242

XhmikosR's avatar
XhmikosR committed
243
        EventHandler.trigger(_this._element, EVENT_SHOWN);
XhmikosR's avatar
Dist  
XhmikosR committed
244

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

XhmikosR's avatar
XhmikosR committed
252
      this._element.classList.remove(CLASS_NAME_HIDE);
Mark Otto's avatar
dist    
Mark Otto committed
253

254
255
      reflow(this._element);

XhmikosR's avatar
XhmikosR committed
256
      this._element.classList.add(CLASS_NAME_SHOWING);
XhmikosR's avatar
Dist  
XhmikosR committed
257

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

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

XhmikosR's avatar
XhmikosR committed
270
      if (!this._element.classList.contains(CLASS_NAME_SHOW)) {
XhmikosR's avatar
Dist    
XhmikosR committed
271
272
        return;
      }
XhmikosR's avatar
Dist  
XhmikosR committed
273

XhmikosR's avatar
XhmikosR committed
274
      var hideEvent = EventHandler.trigger(this._element, EVENT_HIDE);
Mark Otto's avatar
dist v5    
Mark Otto committed
275
276
277
278

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

XhmikosR's avatar
XhmikosR committed
280
      var complete = function complete() {
XhmikosR's avatar
XhmikosR committed
281
        _this2._element.classList.add(CLASS_NAME_HIDE);
XhmikosR's avatar
XhmikosR committed
282

XhmikosR's avatar
XhmikosR committed
283
        EventHandler.trigger(_this2._element, EVENT_HIDDEN);
XhmikosR's avatar
XhmikosR committed
284
285
      };

XhmikosR's avatar
XhmikosR committed
286
      this._element.classList.remove(CLASS_NAME_SHOW);
XhmikosR's avatar
XhmikosR committed
287
288
289
290
291

      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
292
      } else {
XhmikosR's avatar
XhmikosR committed
293
        complete();
XhmikosR's avatar
Dist    
XhmikosR committed
294
295
      }
    };
XhmikosR's avatar
Dist  
XhmikosR committed
296

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

XhmikosR's avatar
XhmikosR committed
301
302
      if (this._element.classList.contains(CLASS_NAME_SHOW)) {
        this._element.classList.remove(CLASS_NAME_SHOW);
XhmikosR's avatar
Dist    
XhmikosR committed
303
      }
XhmikosR's avatar
Dist  
XhmikosR committed
304

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

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

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

XhmikosR's avatar
XhmikosR committed
321
      EventHandler.on(this._element, EVENT_CLICK_DISMISS, SELECTOR_DATA_DISMISS, function () {
XhmikosR's avatar
XhmikosR committed
322
        return _this3.hide();
XhmikosR's avatar
Dist    
XhmikosR committed
323
      });
Mark Otto's avatar
Mark Otto committed
324
325
    } // Static
    ;
XhmikosR's avatar
Dist  
XhmikosR committed
326

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

XhmikosR's avatar
Dist    
XhmikosR committed
331
        var _config = typeof config === 'object' && config;
XhmikosR's avatar
Dist  
XhmikosR committed
332

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

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

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

XhmikosR's avatar
XhmikosR committed
347
    Toast.getInstance = function getInstance(element) {
XhmikosR's avatar
XhmikosR committed
348
349
350
      return Data.getData(element, DATA_KEY);
    };

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

XhmikosR's avatar
Dist    
XhmikosR committed
368
369
    return Toast;
  }();
XhmikosR's avatar
XhmikosR committed
370
371

  var $ = getjQuery();
XhmikosR's avatar
Dist    
XhmikosR committed
372
373
374
375
  /**
   * ------------------------------------------------------------------------
   * jQuery
   * ------------------------------------------------------------------------
XhmikosR's avatar
XhmikosR committed
376
   *  add .toast to jQuery only if jQuery is present
XhmikosR's avatar
Dist    
XhmikosR committed
377
   */
XhmikosR's avatar
Dist  
XhmikosR committed
378

379
380
  /* istanbul ignore if */

XhmikosR's avatar
XhmikosR committed
381
382
383
384
  if ($) {
    var JQUERY_NO_CONFLICT = $.fn[NAME];
    $.fn[NAME] = Toast.jQueryInterface;
    $.fn[NAME].Constructor = Toast;
XhmikosR's avatar
Dist  
XhmikosR committed
385

XhmikosR's avatar
XhmikosR committed
386
387
388
    $.fn[NAME].noConflict = function () {
      $.fn[NAME] = JQUERY_NO_CONFLICT;
      return Toast.jQueryInterface;
XhmikosR's avatar
XhmikosR committed
389
390
    };
  }
XhmikosR's avatar
Dist  
XhmikosR committed
391
392
393

  return Toast;

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