toast.js 10.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/)
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
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65

  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;
  }

  function _objectSpread(target) {
    for (var i = 1; i < arguments.length; i++) {
      var source = arguments[i] != null ? arguments[i] : {};
      var ownKeys = Object.keys(source);

      if (typeof Object.getOwnPropertySymbols === 'function') {
        ownKeys = ownKeys.concat(Object.getOwnPropertySymbols(source).filter(function (sym) {
          return Object.getOwnPropertyDescriptor(source, sym).enumerable;
        }));
      }

      ownKeys.forEach(function (key) {
        _defineProperty(target, key, source[key]);
      });
    }

    return target;
  }

XhmikosR's avatar
XhmikosR committed
66
67
68
69
70
71
72
73
  /**
   * --------------------------------------------------------------------------
   * 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
74
75
  var _window = window,
      jQuery = _window.jQuery; // Shoutout AngusCroll (https://goo.gl/pxwQGp)
XhmikosR's avatar
XhmikosR committed
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104

  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
105
106
107
    var evt = document.createEvent('HTMLEvents');
    evt.initEvent(TRANSITION_END, true, true);
    element.dispatchEvent(evt);
XhmikosR's avatar
XhmikosR committed
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
  };

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

XhmikosR's avatar
Dist  
XhmikosR committed
144
  /**
XhmikosR's avatar
Dist    
XhmikosR committed
145
146
147
   * ------------------------------------------------------------------------
   * Constants
   * ------------------------------------------------------------------------
XhmikosR's avatar
Dist  
XhmikosR committed
148
149
   */

XhmikosR's avatar
Dist    
XhmikosR committed
150
  var NAME = 'toast';
XhmikosR's avatar
XhmikosR committed
151
  var VERSION = '4.3.1';
XhmikosR's avatar
Dist    
XhmikosR committed
152
153
  var DATA_KEY = 'bs.toast';
  var EVENT_KEY = "." + DATA_KEY;
XhmikosR's avatar
XhmikosR committed
154
  var Event = {
XhmikosR's avatar
Dist    
XhmikosR committed
155
156
157
158
159
160
161
162
163
    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
164
165
    SHOW: 'show',
    SHOWING: 'showing'
XhmikosR's avatar
Dist    
XhmikosR committed
166
167
168
169
170
171
172
173
174
175
176
177
178
  };
  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
179
180
    /**
     * ------------------------------------------------------------------------
XhmikosR's avatar
Dist    
XhmikosR committed
181
     * Class Definition
XhmikosR's avatar
Dist  
XhmikosR committed
182
183
184
     * ------------------------------------------------------------------------
     */

XhmikosR's avatar
Dist    
XhmikosR committed
185
  };
XhmikosR's avatar
Dist  
XhmikosR committed
186

XhmikosR's avatar
Dist    
XhmikosR committed
187
188
189
190
191
192
193
  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
194

XhmikosR's avatar
Dist    
XhmikosR committed
195
      this._setListeners();
XhmikosR's avatar
XhmikosR committed
196
197

      Data.setData(element, DATA_KEY, this);
XhmikosR's avatar
Dist    
XhmikosR committed
198
    } // Getters
XhmikosR's avatar
Dist  
XhmikosR committed
199
200


XhmikosR's avatar
Dist    
XhmikosR committed
201
    var _proto = Toast.prototype;
XhmikosR's avatar
Dist  
XhmikosR committed
202

XhmikosR's avatar
Dist    
XhmikosR committed
203
204
205
    // Public
    _proto.show = function show() {
      var _this = this;
XhmikosR's avatar
Dist  
XhmikosR committed
206

XhmikosR's avatar
XhmikosR committed
207
      EventHandler.trigger(this._element, Event.SHOW);
XhmikosR's avatar
Dist  
XhmikosR committed
208

XhmikosR's avatar
Dist    
XhmikosR committed
209
210
211
      if (this._config.animation) {
        this._element.classList.add(ClassName.FADE);
      }
XhmikosR's avatar
Dist  
XhmikosR committed
212

XhmikosR's avatar
Dist    
XhmikosR committed
213
      var complete = function complete() {
Mark Otto's avatar
dist    
Mark Otto committed
214
215
216
217
        _this._element.classList.remove(ClassName.SHOWING);

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

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

XhmikosR's avatar
Dist    
XhmikosR committed
220
        if (_this._config.autohide) {
XhmikosR's avatar
XhmikosR committed
221
222
223
          _this._timeout = setTimeout(function () {
            _this.hide();
          }, _this._config.delay);
XhmikosR's avatar
Dist  
XhmikosR committed
224
225
226
        }
      };

Mark Otto's avatar
dist    
Mark Otto committed
227
228
229
      this._element.classList.remove(ClassName.HIDE);

      this._element.classList.add(ClassName.SHOWING);
XhmikosR's avatar
Dist  
XhmikosR committed
230

XhmikosR's avatar
Dist    
XhmikosR committed
231
      if (this._config.animation) {
XhmikosR's avatar
XhmikosR committed
232
233
234
        var transitionDuration = getTransitionDurationFromElement(this._element);
        EventHandler.one(this._element, TRANSITION_END, complete);
        emulateTransitionEnd(this._element, transitionDuration);
XhmikosR's avatar
Dist    
XhmikosR committed
235
236
237
238
      } else {
        complete();
      }
    };
XhmikosR's avatar
Dist  
XhmikosR committed
239

XhmikosR's avatar
XhmikosR committed
240
    _proto.hide = function hide() {
XhmikosR's avatar
Dist    
XhmikosR committed
241
      var _this2 = this;
XhmikosR's avatar
Dist  
XhmikosR committed
242

XhmikosR's avatar
Dist    
XhmikosR committed
243
244
245
      if (!this._element.classList.contains(ClassName.SHOW)) {
        return;
      }
XhmikosR's avatar
Dist  
XhmikosR committed
246

XhmikosR's avatar
XhmikosR committed
247
      EventHandler.trigger(this._element, Event.HIDE);
XhmikosR's avatar
Dist  
XhmikosR committed
248

XhmikosR's avatar
XhmikosR committed
249
250
251
252
253
254
255
256
257
258
259
260
      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
261
      } else {
XhmikosR's avatar
XhmikosR committed
262
        complete();
XhmikosR's avatar
Dist    
XhmikosR committed
263
264
      }
    };
XhmikosR's avatar
Dist  
XhmikosR committed
265

XhmikosR's avatar
Dist    
XhmikosR committed
266
267
268
    _proto.dispose = function dispose() {
      clearTimeout(this._timeout);
      this._timeout = null;
XhmikosR's avatar
Dist  
XhmikosR committed
269

XhmikosR's avatar
Dist    
XhmikosR committed
270
271
272
      if (this._element.classList.contains(ClassName.SHOW)) {
        this._element.classList.remove(ClassName.SHOW);
      }
XhmikosR's avatar
Dist  
XhmikosR committed
273

XhmikosR's avatar
XhmikosR committed
274
      EventHandler.off(this._element, Event.CLICK_DISMISS);
XhmikosR's avatar
XhmikosR committed
275
      Data.removeData(this._element, DATA_KEY);
XhmikosR's avatar
Dist    
XhmikosR committed
276
277
      this._element = null;
      this._config = null;
Mark Otto's avatar
Mark Otto committed
278
279
    } // Private
    ;
XhmikosR's avatar
Dist  
XhmikosR committed
280

XhmikosR's avatar
Dist    
XhmikosR committed
281
    _proto._getConfig = function _getConfig(config) {
XhmikosR's avatar
XhmikosR committed
282
283
      config = _objectSpread({}, Default, Manipulator.getDataAttributes(this._element), typeof config === 'object' && config ? config : {});
      typeCheckConfig(NAME, config, this.constructor.DefaultType);
XhmikosR's avatar
Dist    
XhmikosR committed
284
285
      return config;
    };
XhmikosR's avatar
Dist  
XhmikosR committed
286

XhmikosR's avatar
Dist    
XhmikosR committed
287
288
    _proto._setListeners = function _setListeners() {
      var _this3 = this;
XhmikosR's avatar
Dist  
XhmikosR committed
289

XhmikosR's avatar
XhmikosR committed
290
291
      EventHandler.on(this._element, Event.CLICK_DISMISS, Selector.DATA_DISMISS, function () {
        return _this3.hide();
XhmikosR's avatar
Dist    
XhmikosR committed
292
      });
Mark Otto's avatar
Mark Otto committed
293
294
    } // Static
    ;
XhmikosR's avatar
Dist  
XhmikosR committed
295

XhmikosR's avatar
Dist    
XhmikosR committed
296
297
    Toast._jQueryInterface = function _jQueryInterface(config) {
      return this.each(function () {
XhmikosR's avatar
XhmikosR committed
298
        var data = Data.getData(this, DATA_KEY);
XhmikosR's avatar
Dist  
XhmikosR committed
299

XhmikosR's avatar
Dist    
XhmikosR committed
300
        var _config = typeof config === 'object' && config;
XhmikosR's avatar
Dist  
XhmikosR committed
301

XhmikosR's avatar
Dist    
XhmikosR committed
302
303
304
        if (!data) {
          data = new Toast(this, _config);
        }
XhmikosR's avatar
Dist  
XhmikosR committed
305

XhmikosR's avatar
Dist    
XhmikosR committed
306
307
308
        if (typeof config === 'string') {
          if (typeof data[config] === 'undefined') {
            throw new TypeError("No method named \"" + config + "\"");
XhmikosR's avatar
Dist  
XhmikosR committed
309
310
          }

XhmikosR's avatar
Dist    
XhmikosR committed
311
          data[config](this);
XhmikosR's avatar
Dist  
XhmikosR committed
312
        }
XhmikosR's avatar
Dist    
XhmikosR committed
313
314
      });
    };
XhmikosR's avatar
Dist  
XhmikosR committed
315

XhmikosR's avatar
XhmikosR committed
316
317
318
319
    Toast._getInstance = function _getInstance(element) {
      return Data.getData(element, DATA_KEY);
    };

XhmikosR's avatar
Dist    
XhmikosR committed
320
321
322
323
324
325
326
327
328
329
    _createClass(Toast, null, [{
      key: "VERSION",
      get: function get() {
        return VERSION;
      }
    }, {
      key: "DefaultType",
      get: function get() {
        return DefaultType;
      }
Mark Otto's avatar
Mark Otto committed
330
331
332
333
334
    }, {
      key: "Default",
      get: function get() {
        return Default;
      }
XhmikosR's avatar
Dist    
XhmikosR committed
335
    }]);
XhmikosR's avatar
Dist  
XhmikosR committed
336

XhmikosR's avatar
Dist    
XhmikosR committed
337
338
339
340
341
342
    return Toast;
  }();
  /**
   * ------------------------------------------------------------------------
   * jQuery
   * ------------------------------------------------------------------------
XhmikosR's avatar
XhmikosR committed
343
   *  add .toast to jQuery only if jQuery is present
XhmikosR's avatar
Dist    
XhmikosR committed
344
   */
XhmikosR's avatar
Dist  
XhmikosR committed
345
346


XhmikosR's avatar
XhmikosR committed
347
348
349
350
  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
351

XhmikosR's avatar
XhmikosR committed
352
353
354
355
356
    jQuery.fn[NAME].noConflict = function () {
      jQuery.fn[NAME] = JQUERY_NO_CONFLICT;
      return Toast._jQueryInterface;
    };
  }
XhmikosR's avatar
Dist  
XhmikosR committed
357
358
359

  return Toast;

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