modal.js 24.7 KB
Newer Older
XhmikosR's avatar
Dist    
XhmikosR committed
1
/*!
XhmikosR's avatar
XhmikosR committed
2
  * Bootstrap modal.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
  * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
  */
Mark Otto's avatar
dist    
Mark Otto committed
6
(function (global, factory) {
XhmikosR's avatar
XhmikosR committed
7
8
9
10
  typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory(require('./dom/data.js'), require('./dom/eventHandler.js'), require('./dom/manipulator.js'), require('./dom/selectorEngine.js')) :
  typeof define === 'function' && define.amd ? define(['./dom/data.js', './dom/eventHandler.js', './dom/manipulator.js', './dom/selectorEngine.js'], factory) :
  (global = global || self, global.Modal = factory(global.Data, global.EventHandler, global.Manipulator, global.SelectorEngine));
}(this, function (Data, EventHandler, Manipulator, SelectorEngine) { 'use strict';
Mark Otto's avatar
dist    
Mark Otto committed
11

XhmikosR's avatar
XhmikosR committed
12
13
14
15
  Data = Data && Data.hasOwnProperty('default') ? Data['default'] : Data;
  EventHandler = EventHandler && EventHandler.hasOwnProperty('default') ? EventHandler['default'] : EventHandler;
  Manipulator = Manipulator && Manipulator.hasOwnProperty('default') ? Manipulator['default'] : Manipulator;
  SelectorEngine = SelectorEngine && SelectorEngine.hasOwnProperty('default') ? SelectorEngine['default'] : SelectorEngine;
Mark Otto's avatar
dist    
Mark Otto committed
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

  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;
    }
Mark Otto's avatar
dist    
Mark Otto committed
44

Mark Otto's avatar
dist    
Mark Otto committed
45
46
    return obj;
  }
Mark Otto's avatar
dist    
Mark Otto committed
47

Mark Otto's avatar
dist    
Mark Otto committed
48
49
50
51
  function _objectSpread(target) {
    for (var i = 1; i < arguments.length; i++) {
      var source = arguments[i] != null ? arguments[i] : {};
      var ownKeys = Object.keys(source);
Mark Otto's avatar
dist    
Mark Otto committed
52

Mark Otto's avatar
dist    
Mark Otto committed
53
54
55
56
57
58
59
60
61
62
63
64
65
      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;
  }
66

XhmikosR's avatar
XhmikosR committed
67
68
69
70
71
72
73
74
75
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
105
106
107
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
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
  /**
   * --------------------------------------------------------------------------
   * 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';
  var jQuery = window.jQuery; // Shoutout AngusCroll (https://goo.gl/pxwQGp)

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

  var getSelectorFromElement = function getSelectorFromElement(element) {
    var selector = element.getAttribute('data-target');

    if (!selector || selector === '#') {
      var hrefAttr = element.getAttribute('href');
      selector = hrefAttr && hrefAttr !== '#' ? hrefAttr.trim() : '';
    }

    try {
      return document.querySelector(selector) ? selector : null;
    } catch (err) {
      return null;
    }
  };

  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) {
    element.dispatchEvent(new Event(TRANSITION_END));
  };

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

  var makeArray = function makeArray(nodeList) {
    if (!nodeList) {
      return [];
    }

    return [].slice.call(nodeList);
  };

  var isVisible = function isVisible(element) {
    if (!element) {
      return false;
    }

    if (element.style && element.parentNode && element.parentNode.style) {
      return element.style.display !== 'none' && element.parentNode.style.display !== 'none' && element.style.visibility !== 'hidden';
    }

    return false;
  };

  var reflow = function reflow(element) {
    return element.offsetHeight;
  };

XhmikosR's avatar
Dist    
XhmikosR committed
181
182
183
184
185
186
187
  /**
   * ------------------------------------------------------------------------
   * Constants
   * ------------------------------------------------------------------------
   */

  var NAME = 'modal';
XhmikosR's avatar
XhmikosR committed
188
  var VERSION = '4.3.1';
XhmikosR's avatar
Dist    
XhmikosR committed
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
  var DATA_KEY = 'bs.modal';
  var EVENT_KEY = "." + DATA_KEY;
  var DATA_API_KEY = '.data-api';
  var ESCAPE_KEYCODE = 27; // KeyboardEvent.which value for Escape (Esc) key

  var Default = {
    backdrop: true,
    keyboard: true,
    focus: true,
    show: true
  };
  var DefaultType = {
    backdrop: '(boolean|string)',
    keyboard: 'boolean',
    focus: 'boolean',
    show: 'boolean'
  };
XhmikosR's avatar
XhmikosR committed
206
  var Event$1 = {
XhmikosR's avatar
Dist    
XhmikosR committed
207
208
209
210
211
212
213
214
215
216
217
218
219
    HIDE: "hide" + EVENT_KEY,
    HIDDEN: "hidden" + EVENT_KEY,
    SHOW: "show" + EVENT_KEY,
    SHOWN: "shown" + EVENT_KEY,
    FOCUSIN: "focusin" + EVENT_KEY,
    RESIZE: "resize" + EVENT_KEY,
    CLICK_DISMISS: "click.dismiss" + EVENT_KEY,
    KEYDOWN_DISMISS: "keydown.dismiss" + EVENT_KEY,
    MOUSEUP_DISMISS: "mouseup.dismiss" + EVENT_KEY,
    MOUSEDOWN_DISMISS: "mousedown.dismiss" + EVENT_KEY,
    CLICK_DATA_API: "click" + EVENT_KEY + DATA_API_KEY
  };
  var ClassName = {
Mark Otto's avatar
Mark Otto committed
220
    SCROLLABLE: 'modal-dialog-scrollable',
XhmikosR's avatar
Dist    
XhmikosR committed
221
222
223
224
225
226
227
228
    SCROLLBAR_MEASURER: 'modal-scrollbar-measure',
    BACKDROP: 'modal-backdrop',
    OPEN: 'modal-open',
    FADE: 'fade',
    SHOW: 'show'
  };
  var Selector = {
    DIALOG: '.modal-dialog',
Mark Otto's avatar
Mark Otto committed
229
    MODAL_BODY: '.modal-body',
XhmikosR's avatar
Dist    
XhmikosR committed
230
231
232
233
    DATA_TOGGLE: '[data-toggle="modal"]',
    DATA_DISMISS: '[data-dismiss="modal"]',
    FIXED_CONTENT: '.fixed-top, .fixed-bottom, .is-fixed, .sticky-top',
    STICKY_CONTENT: '.sticky-top'
Mark Otto's avatar
dist    
Mark Otto committed
234
235
    /**
     * ------------------------------------------------------------------------
XhmikosR's avatar
Dist    
XhmikosR committed
236
     * Class Definition
Mark Otto's avatar
dist    
Mark Otto committed
237
238
     * ------------------------------------------------------------------------
     */
239

XhmikosR's avatar
Dist    
XhmikosR committed
240
241
242
243
244
245
246
247
  };

  var Modal =
  /*#__PURE__*/
  function () {
    function Modal(element, config) {
      this._config = this._getConfig(config);
      this._element = element;
XhmikosR's avatar
XhmikosR committed
248
      this._dialog = SelectorEngine.findOne(Selector.DIALOG, element);
XhmikosR's avatar
Dist    
XhmikosR committed
249
250
251
252
253
254
      this._backdrop = null;
      this._isShown = false;
      this._isBodyOverflowing = false;
      this._ignoreBackdropClick = false;
      this._isTransitioning = false;
      this._scrollbarWidth = 0;
XhmikosR's avatar
XhmikosR committed
255
      Data.setData(element, DATA_KEY, this);
XhmikosR's avatar
Dist    
XhmikosR committed
256
257
258
259
260
261
262
263
    } // Getters


    var _proto = Modal.prototype;

    // Public
    _proto.toggle = function toggle(relatedTarget) {
      return this._isShown ? this.hide() : this.show(relatedTarget);
Mark Otto's avatar
dist    
Mark Otto committed
264
    };
265

XhmikosR's avatar
Dist    
XhmikosR committed
266
267
    _proto.show = function show(relatedTarget) {
      var _this = this;
Jacob Thornton's avatar
Jacob Thornton committed
268

XhmikosR's avatar
Dist    
XhmikosR committed
269
270
271
      if (this._isShown || this._isTransitioning) {
        return;
      }
272

XhmikosR's avatar
XhmikosR committed
273
      if (this._element.classList.contains(ClassName.FADE)) {
XhmikosR's avatar
Dist    
XhmikosR committed
274
275
        this._isTransitioning = true;
      }
276

XhmikosR's avatar
XhmikosR committed
277
      var showEvent = EventHandler.trigger(this._element, Event$1.SHOW, {
XhmikosR's avatar
Dist    
XhmikosR committed
278
279
        relatedTarget: relatedTarget
      });
Mark Otto's avatar
grunt    
Mark Otto committed
280

XhmikosR's avatar
XhmikosR committed
281
      if (this._isShown || showEvent.defaultPrevented) {
XhmikosR's avatar
Dist    
XhmikosR committed
282
283
        return;
      }
284

XhmikosR's avatar
Dist    
XhmikosR committed
285
      this._isShown = true;
Mark Otto's avatar
grunt    
Mark Otto committed
286

XhmikosR's avatar
Dist    
XhmikosR committed
287
      this._checkScrollbar();
288

XhmikosR's avatar
Dist    
XhmikosR committed
289
      this._setScrollbar();
Mark Otto's avatar
grunt    
Mark Otto committed
290

XhmikosR's avatar
Dist    
XhmikosR committed
291
      this._adjustDialog();
Mark Otto's avatar
grunt    
Mark Otto committed
292

XhmikosR's avatar
Dist    
XhmikosR committed
293
      this._setEscapeEvent();
294

XhmikosR's avatar
Dist    
XhmikosR committed
295
      this._setResizeEvent();
Mark Otto's avatar
grunt    
Mark Otto committed
296

XhmikosR's avatar
XhmikosR committed
297
      EventHandler.on(this._element, Event$1.CLICK_DISMISS, Selector.DATA_DISMISS, function (event) {
XhmikosR's avatar
Dist    
XhmikosR committed
298
299
        return _this.hide(event);
      });
XhmikosR's avatar
XhmikosR committed
300
301
302
      EventHandler.on(this._dialog, Event$1.MOUSEDOWN_DISMISS, function () {
        EventHandler.one(_this._element, Event$1.MOUSEUP_DISMISS, function (event) {
          if (event.target === _this._element) {
XhmikosR's avatar
Dist    
XhmikosR committed
303
304
            _this._ignoreBackdropClick = true;
          }
Mark Otto's avatar
dist    
Mark Otto committed
305
        });
XhmikosR's avatar
Dist    
XhmikosR committed
306
      });
307

XhmikosR's avatar
Dist    
XhmikosR committed
308
309
310
311
      this._showBackdrop(function () {
        return _this._showElement(relatedTarget);
      });
    };
Mark Otto's avatar
dist    
Mark Otto committed
312

XhmikosR's avatar
Dist    
XhmikosR committed
313
314
    _proto.hide = function hide(event) {
      var _this2 = this;
315

XhmikosR's avatar
Dist    
XhmikosR committed
316
317
318
      if (event) {
        event.preventDefault();
      }
319

XhmikosR's avatar
Dist    
XhmikosR committed
320
321
322
      if (!this._isShown || this._isTransitioning) {
        return;
      }
323

XhmikosR's avatar
XhmikosR committed
324
      var hideEvent = EventHandler.trigger(this._element, Event$1.HIDE);
325

XhmikosR's avatar
XhmikosR committed
326
      if (!this._isShown || hideEvent.defaultPrevented) {
XhmikosR's avatar
Dist    
XhmikosR committed
327
328
        return;
      }
Mark Otto's avatar
dist    
Mark Otto committed
329

XhmikosR's avatar
Dist    
XhmikosR committed
330
      this._isShown = false;
XhmikosR's avatar
XhmikosR committed
331
332

      var transition = this._element.classList.contains(ClassName.FADE);
Mark Otto's avatar
grunt    
Mark Otto committed
333

XhmikosR's avatar
Dist    
XhmikosR committed
334
335
336
      if (transition) {
        this._isTransitioning = true;
      }
337

XhmikosR's avatar
Dist    
XhmikosR committed
338
      this._setEscapeEvent();
339

XhmikosR's avatar
Dist    
XhmikosR committed
340
      this._setResizeEvent();
Mark Otto's avatar
grunt    
Mark Otto committed
341

XhmikosR's avatar
XhmikosR committed
342
343
344
345
346
347
      EventHandler.off(document, Event$1.FOCUSIN);

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

      EventHandler.off(this._element, Event$1.CLICK_DISMISS);
      EventHandler.off(this._dialog, Event$1.MOUSEDOWN_DISMISS);
Mark Otto's avatar
dist    
Mark Otto committed
348

XhmikosR's avatar
Dist    
XhmikosR committed
349
      if (transition) {
XhmikosR's avatar
XhmikosR committed
350
351
        var transitionDuration = getTransitionDurationFromElement(this._element);
        EventHandler.one(this._element, TRANSITION_END, function (event) {
XhmikosR's avatar
Dist    
XhmikosR committed
352
          return _this2._hideModal(event);
XhmikosR's avatar
XhmikosR committed
353
354
        });
        emulateTransitionEnd(this._element, transitionDuration);
XhmikosR's avatar
Dist    
XhmikosR committed
355
356
357
358
      } else {
        this._hideModal();
      }
    };
Mark Otto's avatar
grunt    
Mark Otto committed
359

XhmikosR's avatar
Dist    
XhmikosR committed
360
361
    _proto.dispose = function dispose() {
      [window, this._element, this._dialog].forEach(function (htmlElement) {
XhmikosR's avatar
XhmikosR committed
362
        return EventHandler.off(htmlElement, EVENT_KEY);
XhmikosR's avatar
Dist    
XhmikosR committed
363
364
365
366
367
368
      });
      /**
       * `document` has 2 events `Event.FOCUSIN` and `Event.CLICK_DATA_API`
       * Do not move `document` in `htmlElements` array
       * It will remove `Event.CLICK_DATA_API` event that should remain
       */
Mark Otto's avatar
grunt    
Mark Otto committed
369

XhmikosR's avatar
XhmikosR committed
370
371
      EventHandler.off(document, Event$1.FOCUSIN);
      Data.removeData(this._element, DATA_KEY);
XhmikosR's avatar
Dist    
XhmikosR committed
372
373
374
375
376
377
378
379
380
381
      this._config = null;
      this._element = null;
      this._dialog = null;
      this._backdrop = null;
      this._isShown = null;
      this._isBodyOverflowing = null;
      this._ignoreBackdropClick = null;
      this._isTransitioning = null;
      this._scrollbarWidth = null;
    };
Mark Otto's avatar
grunt    
Mark Otto committed
382

XhmikosR's avatar
Dist    
XhmikosR committed
383
384
    _proto.handleUpdate = function handleUpdate() {
      this._adjustDialog();
Mark Otto's avatar
Mark Otto committed
385
386
    } // Private
    ;
Mark Otto's avatar
grunt    
Mark Otto committed
387

XhmikosR's avatar
Dist    
XhmikosR committed
388
389
    _proto._getConfig = function _getConfig(config) {
      config = _objectSpread({}, Default, config);
XhmikosR's avatar
XhmikosR committed
390
      typeCheckConfig(NAME, config, DefaultType);
XhmikosR's avatar
Dist    
XhmikosR committed
391
392
      return config;
    };
Mark Otto's avatar
grunt    
Mark Otto committed
393

XhmikosR's avatar
Dist    
XhmikosR committed
394
395
    _proto._showElement = function _showElement(relatedTarget) {
      var _this3 = this;
Mark Otto's avatar
dist    
Mark Otto committed
396

XhmikosR's avatar
XhmikosR committed
397
      var transition = this._element.classList.contains(ClassName.FADE);
Mark Otto's avatar
dist    
Mark Otto committed
398

XhmikosR's avatar
Dist    
XhmikosR committed
399
400
401
402
      if (!this._element.parentNode || this._element.parentNode.nodeType !== Node.ELEMENT_NODE) {
        // Don't move modal's DOM position
        document.body.appendChild(this._element);
      }
Mark Otto's avatar
dist    
Mark Otto committed
403

XhmikosR's avatar
Dist    
XhmikosR committed
404
      this._element.style.display = 'block';
Mark Otto's avatar
dist    
Mark Otto committed
405

XhmikosR's avatar
Dist    
XhmikosR committed
406
      this._element.removeAttribute('aria-hidden');
407

Mark Otto's avatar
dist    
Mark Otto committed
408
409
      this._element.setAttribute('aria-modal', true);

XhmikosR's avatar
XhmikosR committed
410
411
      if (this._dialog.classList.contains(ClassName.SCROLLABLE)) {
        SelectorEngine.findOne(Selector.MODAL_BODY, this._dialog).scrollTop = 0;
Mark Otto's avatar
Mark Otto committed
412
413
414
      } else {
        this._element.scrollTop = 0;
      }
415

XhmikosR's avatar
Dist    
XhmikosR committed
416
      if (transition) {
XhmikosR's avatar
XhmikosR committed
417
        reflow(this._element);
XhmikosR's avatar
Dist    
XhmikosR committed
418
      }
419

XhmikosR's avatar
XhmikosR committed
420
      this._element.classList.add(ClassName.SHOW);
Mark Otto's avatar
dist    
Mark Otto committed
421

XhmikosR's avatar
Dist    
XhmikosR committed
422
423
424
      if (this._config.focus) {
        this._enforceFocus();
      }
425

XhmikosR's avatar
Dist    
XhmikosR committed
426
427
428
      var transitionComplete = function transitionComplete() {
        if (_this3._config.focus) {
          _this3._element.focus();
Mark Otto's avatar
dist    
Mark Otto committed
429
        }
430

XhmikosR's avatar
Dist    
XhmikosR committed
431
        _this3._isTransitioning = false;
XhmikosR's avatar
XhmikosR committed
432
433
434
        EventHandler.trigger(_this3._element, Event$1.SHOWN, {
          relatedTarget: relatedTarget
        });
Mark Otto's avatar
dist    
Mark Otto committed
435
      };
436

XhmikosR's avatar
Dist    
XhmikosR committed
437
      if (transition) {
XhmikosR's avatar
XhmikosR committed
438
439
440
        var transitionDuration = getTransitionDurationFromElement(this._dialog);
        EventHandler.one(this._dialog, TRANSITION_END, transitionComplete);
        emulateTransitionEnd(this._dialog, transitionDuration);
XhmikosR's avatar
Dist    
XhmikosR committed
441
442
443
444
      } else {
        transitionComplete();
      }
    };
445

XhmikosR's avatar
Dist    
XhmikosR committed
446
447
    _proto._enforceFocus = function _enforceFocus() {
      var _this4 = this;
448

XhmikosR's avatar
XhmikosR committed
449
450
451
452
      EventHandler.off(document, Event$1.FOCUSIN); // guard against infinite focus loop

      EventHandler.on(document, Event$1.FOCUSIN, function (event) {
        if (document !== event.target && _this4._element !== event.target && !_this4._element.contains(event.target)) {
XhmikosR's avatar
Dist    
XhmikosR committed
453
          _this4._element.focus();
454
        }
XhmikosR's avatar
Dist    
XhmikosR committed
455
456
      });
    };
Mark Otto's avatar
dist    
Mark Otto committed
457

XhmikosR's avatar
Dist    
XhmikosR committed
458
459
    _proto._setEscapeEvent = function _setEscapeEvent() {
      var _this5 = this;
Mark Otto's avatar
grunt    
Mark Otto committed
460

XhmikosR's avatar
Dist    
XhmikosR committed
461
      if (this._isShown && this._config.keyboard) {
XhmikosR's avatar
XhmikosR committed
462
        EventHandler.on(this._element, Event$1.KEYDOWN_DISMISS, function (event) {
XhmikosR's avatar
Dist    
XhmikosR committed
463
464
          if (event.which === ESCAPE_KEYCODE) {
            event.preventDefault();
Mark Otto's avatar
dist    
Mark Otto committed
465

XhmikosR's avatar
Dist    
XhmikosR committed
466
467
468
469
            _this5.hide();
          }
        });
      } else if (!this._isShown) {
XhmikosR's avatar
XhmikosR committed
470
        EventHandler.off(this._element, Event$1.KEYDOWN_DISMISS);
XhmikosR's avatar
Dist    
XhmikosR committed
471
472
      }
    };
Mark Otto's avatar
dist    
Mark Otto committed
473

XhmikosR's avatar
Dist    
XhmikosR committed
474
475
    _proto._setResizeEvent = function _setResizeEvent() {
      var _this6 = this;
476

XhmikosR's avatar
Dist    
XhmikosR committed
477
      if (this._isShown) {
XhmikosR's avatar
XhmikosR committed
478
        EventHandler.on(window, Event$1.RESIZE, function (event) {
XhmikosR's avatar
Dist    
XhmikosR committed
479
480
481
          return _this6.handleUpdate(event);
        });
      } else {
XhmikosR's avatar
XhmikosR committed
482
        EventHandler.off(window, Event$1.RESIZE);
XhmikosR's avatar
Dist    
XhmikosR committed
483
484
      }
    };
485

XhmikosR's avatar
Dist    
XhmikosR committed
486
487
    _proto._hideModal = function _hideModal() {
      var _this7 = this;
488

XhmikosR's avatar
Dist    
XhmikosR committed
489
      this._element.style.display = 'none';
490

XhmikosR's avatar
Dist    
XhmikosR committed
491
      this._element.setAttribute('aria-hidden', true);
492

Mark Otto's avatar
dist    
Mark Otto committed
493
494
      this._element.removeAttribute('aria-modal');

XhmikosR's avatar
Dist    
XhmikosR committed
495
      this._isTransitioning = false;
Mark Otto's avatar
dist    
Mark Otto committed
496

XhmikosR's avatar
Dist    
XhmikosR committed
497
      this._showBackdrop(function () {
XhmikosR's avatar
XhmikosR committed
498
        document.body.classList.remove(ClassName.OPEN);
499

XhmikosR's avatar
Dist    
XhmikosR committed
500
        _this7._resetAdjustments();
Mark Otto's avatar
dist    
Mark Otto committed
501

XhmikosR's avatar
Dist    
XhmikosR committed
502
        _this7._resetScrollbar();
Mark Otto's avatar
dist    
Mark Otto committed
503

XhmikosR's avatar
XhmikosR committed
504
        EventHandler.trigger(_this7._element, Event$1.HIDDEN);
XhmikosR's avatar
Dist    
XhmikosR committed
505
506
      });
    };
Mark Otto's avatar
dist    
Mark Otto committed
507

XhmikosR's avatar
Dist    
XhmikosR committed
508
509
    _proto._removeBackdrop = function _removeBackdrop() {
      if (this._backdrop) {
XhmikosR's avatar
XhmikosR committed
510
511
        this._backdrop.parentNode.removeChild(this._backdrop);

XhmikosR's avatar
Dist    
XhmikosR committed
512
513
514
        this._backdrop = null;
      }
    };
Mark Otto's avatar
dist    
Mark Otto committed
515

XhmikosR's avatar
Dist    
XhmikosR committed
516
517
    _proto._showBackdrop = function _showBackdrop(callback) {
      var _this8 = this;
Mark Otto's avatar
dist    
Mark Otto committed
518

XhmikosR's avatar
XhmikosR committed
519
      var animate = this._element.classList.contains(ClassName.FADE) ? ClassName.FADE : '';
XhmikosR's avatar
Dist    
XhmikosR committed
520
521
522
523

      if (this._isShown && this._config.backdrop) {
        this._backdrop = document.createElement('div');
        this._backdrop.className = ClassName.BACKDROP;
Mark Otto's avatar
dist    
Mark Otto committed
524

XhmikosR's avatar
Dist    
XhmikosR committed
525
526
527
        if (animate) {
          this._backdrop.classList.add(animate);
        }
528

XhmikosR's avatar
XhmikosR committed
529
530
        document.body.appendChild(this._backdrop);
        EventHandler.on(this._element, Event$1.CLICK_DISMISS, function (event) {
XhmikosR's avatar
Dist    
XhmikosR committed
531
532
          if (_this8._ignoreBackdropClick) {
            _this8._ignoreBackdropClick = false;
533
534
            return;
          }
Mark Otto's avatar
dist    
Mark Otto committed
535

XhmikosR's avatar
Dist    
XhmikosR committed
536
          if (event.target !== event.currentTarget) {
537
538
539
            return;
          }

XhmikosR's avatar
Dist    
XhmikosR committed
540
541
542
543
544
545
          if (_this8._config.backdrop === 'static') {
            _this8._element.focus();
          } else {
            _this8.hide();
          }
        });
Mark Otto's avatar
dist    
Mark Otto committed
546

XhmikosR's avatar
Dist    
XhmikosR committed
547
        if (animate) {
XhmikosR's avatar
XhmikosR committed
548
          reflow(this._backdrop);
XhmikosR's avatar
Dist    
XhmikosR committed
549
        }
550

XhmikosR's avatar
XhmikosR committed
551
        this._backdrop.classList.add(ClassName.SHOW);
552

XhmikosR's avatar
Dist    
XhmikosR committed
553
554
555
        if (!callback) {
          return;
        }
Mark Otto's avatar
grunt    
Mark Otto committed
556

XhmikosR's avatar
Dist    
XhmikosR committed
557
        if (!animate) {
Mark Otto's avatar
dist    
Mark Otto committed
558
          callback();
XhmikosR's avatar
Dist    
XhmikosR committed
559
          return;
560
        }
Mark Otto's avatar
grunt    
Mark Otto committed
561

XhmikosR's avatar
XhmikosR committed
562
563
564
        var backdropTransitionDuration = getTransitionDurationFromElement(this._backdrop);
        EventHandler.one(this._backdrop, TRANSITION_END, callback);
        emulateTransitionEnd(this._backdrop, backdropTransitionDuration);
XhmikosR's avatar
Dist    
XhmikosR committed
565
      } else if (!this._isShown && this._backdrop) {
XhmikosR's avatar
XhmikosR committed
566
        this._backdrop.classList.remove(ClassName.SHOW);
Mark Otto's avatar
dist    
Mark Otto committed
567

XhmikosR's avatar
Dist    
XhmikosR committed
568
569
        var callbackRemove = function callbackRemove() {
          _this8._removeBackdrop();
Mark Otto's avatar
dist    
Mark Otto committed
570

XhmikosR's avatar
Dist    
XhmikosR committed
571
572
573
574
          if (callback) {
            callback();
          }
        };
Mark Otto's avatar
dist    
Mark Otto committed
575

XhmikosR's avatar
XhmikosR committed
576
577
        if (this._element.classList.contains(ClassName.FADE)) {
          var _backdropTransitionDuration = getTransitionDurationFromElement(this._backdrop);
XhmikosR's avatar
Dist    
XhmikosR committed
578

XhmikosR's avatar
XhmikosR committed
579
580
          EventHandler.one(this._backdrop, TRANSITION_END, callbackRemove);
          emulateTransitionEnd(this._backdrop, _backdropTransitionDuration);
XhmikosR's avatar
Dist    
XhmikosR committed
581
582
        } else {
          callbackRemove();
Mark Otto's avatar
dist    
Mark Otto committed
583
        }
XhmikosR's avatar
Dist    
XhmikosR committed
584
585
586
      } else if (callback) {
        callback();
      }
Mark Otto's avatar
Mark Otto committed
587
    } // ----------------------------------------------------------------------
XhmikosR's avatar
Dist    
XhmikosR committed
588
589
590
    // the following methods are used to handle overflowing modals
    // todo (fat): these should probably be refactored out of modal.js
    // ----------------------------------------------------------------------
Mark Otto's avatar
Mark Otto committed
591
    ;
Mark Otto's avatar
dist    
Mark Otto committed
592

XhmikosR's avatar
Dist    
XhmikosR committed
593
594
    _proto._adjustDialog = function _adjustDialog() {
      var isModalOverflowing = this._element.scrollHeight > document.documentElement.clientHeight;
Mark Otto's avatar
dist    
Mark Otto committed
595

XhmikosR's avatar
Dist    
XhmikosR committed
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
      if (!this._isBodyOverflowing && isModalOverflowing) {
        this._element.style.paddingLeft = this._scrollbarWidth + "px";
      }

      if (this._isBodyOverflowing && !isModalOverflowing) {
        this._element.style.paddingRight = this._scrollbarWidth + "px";
      }
    };

    _proto._resetAdjustments = function _resetAdjustments() {
      this._element.style.paddingLeft = '';
      this._element.style.paddingRight = '';
    };

    _proto._checkScrollbar = function _checkScrollbar() {
      var rect = document.body.getBoundingClientRect();
      this._isBodyOverflowing = rect.left + rect.right < window.innerWidth;
      this._scrollbarWidth = this._getScrollbarWidth();
    };

    _proto._setScrollbar = function _setScrollbar() {
      var _this9 = this;
Mark Otto's avatar
dist    
Mark Otto committed
618

XhmikosR's avatar
Dist    
XhmikosR committed
619
620
621
      if (this._isBodyOverflowing) {
        // Note: DOMNode.style.paddingRight returns the actual value or '' if not set
        //   while $(DOMNode).css('padding-right') returns the calculated value or 0 if not set
XhmikosR's avatar
XhmikosR committed
622
623
        // Adjust fixed content padding
        makeArray(SelectorEngine.find(Selector.FIXED_CONTENT)).forEach(function (element) {
XhmikosR's avatar
Dist    
XhmikosR committed
624
          var actualPadding = element.style.paddingRight;
XhmikosR's avatar
XhmikosR committed
625
626
627
          var calculatedPadding = window.getComputedStyle(element)['padding-right'];
          Manipulator.setDataAttribute(element, 'padding-right', actualPadding);
          element.style.paddingRight = parseFloat(calculatedPadding) + _this9._scrollbarWidth + "px";
XhmikosR's avatar
Dist    
XhmikosR committed
628
629
        }); // Adjust sticky content margin

XhmikosR's avatar
XhmikosR committed
630
        makeArray(SelectorEngine.find(Selector.STICKY_CONTENT)).forEach(function (element) {
XhmikosR's avatar
Dist    
XhmikosR committed
631
          var actualMargin = element.style.marginRight;
XhmikosR's avatar
XhmikosR committed
632
633
634
          var calculatedMargin = window.getComputedStyle(element)['margin-right'];
          Manipulator.setDataAttribute(element, 'margin-right', actualMargin);
          element.style.marginRight = parseFloat(calculatedMargin) - _this9._scrollbarWidth + "px";
XhmikosR's avatar
Dist    
XhmikosR committed
635
636
637
        }); // Adjust body padding

        var actualPadding = document.body.style.paddingRight;
XhmikosR's avatar
XhmikosR committed
638
639
640
        var calculatedPadding = window.getComputedStyle(document.body)['padding-right'];
        Manipulator.setDataAttribute(document.body, 'padding-right', actualPadding);
        document.body.style.paddingRight = parseFloat(calculatedPadding) + this._scrollbarWidth + "px";
XhmikosR's avatar
Dist    
XhmikosR committed
641
      }
XhmikosR's avatar
Dist    
XhmikosR committed
642

XhmikosR's avatar
XhmikosR committed
643
      document.body.classList.add(ClassName.OPEN);
XhmikosR's avatar
Dist    
XhmikosR committed
644
    };
Mark Otto's avatar
grunt    
Mark Otto committed
645

XhmikosR's avatar
Dist    
XhmikosR committed
646
647
    _proto._resetScrollbar = function _resetScrollbar() {
      // Restore fixed content padding
XhmikosR's avatar
XhmikosR committed
648
649
      makeArray(SelectorEngine.find(Selector.FIXED_CONTENT)).forEach(function (element) {
        var padding = Manipulator.getDataAttribute(element, 'padding-right');
XhmikosR's avatar
Dist    
XhmikosR committed
650

XhmikosR's avatar
XhmikosR committed
651
652
653
654
655
656
657
658
        if (typeof padding !== 'undefined') {
          Manipulator.removeDataAttribute(element, 'padding-right');
          element.style.paddingRight = padding;
        }
      }); // Restore sticky content and navbar-toggler margin

      makeArray(SelectorEngine.find("" + Selector.STICKY_CONTENT)).forEach(function (element) {
        var margin = Manipulator.getDataAttribute(element, 'margin-right');
XhmikosR's avatar
Dist    
XhmikosR committed
659
660

        if (typeof margin !== 'undefined') {
XhmikosR's avatar
XhmikosR committed
661
662
          Manipulator.removeDataAttribute(element, 'margin-right');
          element.style.marginRight = margin;
XhmikosR's avatar
Dist    
XhmikosR committed
663
664
        }
      }); // Restore body padding
Mark Otto's avatar
dist    
Mark Otto committed
665

XhmikosR's avatar
XhmikosR committed
666
667
668
669
670
671
672
673
      var padding = Manipulator.getDataAttribute(document.body, 'padding-right');

      if (typeof padding !== 'undefined') {
        Manipulator.removeDataAttribute(document.body, 'padding-right');
        document.body.style.paddingRight = padding;
      } else {
        document.body.style.paddingRight = '';
      }
XhmikosR's avatar
Dist    
XhmikosR committed
674
    };
Mark Otto's avatar
grunt    
Mark Otto committed
675

XhmikosR's avatar
Dist    
XhmikosR committed
676
677
678
679
680
681
682
683
    _proto._getScrollbarWidth = function _getScrollbarWidth() {
      // thx d.walsh
      var scrollDiv = document.createElement('div');
      scrollDiv.className = ClassName.SCROLLBAR_MEASURER;
      document.body.appendChild(scrollDiv);
      var scrollbarWidth = scrollDiv.getBoundingClientRect().width - scrollDiv.clientWidth;
      document.body.removeChild(scrollDiv);
      return scrollbarWidth;
Mark Otto's avatar
Mark Otto committed
684
685
    } // Static
    ;
Mark Otto's avatar
grunt    
Mark Otto committed
686

XhmikosR's avatar
Dist    
XhmikosR committed
687
688
    Modal._jQueryInterface = function _jQueryInterface(config, relatedTarget) {
      return this.each(function () {
XhmikosR's avatar
XhmikosR committed
689
        var data = Data.getData(this, DATA_KEY);
Mark Otto's avatar
grunt    
Mark Otto committed
690

XhmikosR's avatar
XhmikosR committed
691
        var _config = _objectSpread({}, Default, Manipulator.getDataAttributes(this), typeof config === 'object' && config ? config : {});
Mark Otto's avatar
dist    
Mark Otto committed
692

XhmikosR's avatar
Dist    
XhmikosR committed
693
694
695
        if (!data) {
          data = new Modal(this, _config);
        }
Mark Otto's avatar
dist    
Mark Otto committed
696

XhmikosR's avatar
Dist    
XhmikosR committed
697
698
699
        if (typeof config === 'string') {
          if (typeof data[config] === 'undefined') {
            throw new TypeError("No method named \"" + config + "\"");
Mark Otto's avatar
dist    
Mark Otto committed
700
          }
Mark Otto's avatar
dist    
Mark Otto committed
701

XhmikosR's avatar
Dist    
XhmikosR committed
702
703
704
          data[config](relatedTarget);
        } else if (_config.show) {
          data.show(relatedTarget);
Mark Otto's avatar
dist    
Mark Otto committed
705
        }
XhmikosR's avatar
Dist    
XhmikosR committed
706
707
      });
    };
708

XhmikosR's avatar
XhmikosR committed
709
710
711
712
    Modal._getInstance = function _getInstance(element) {
      return Data.getData(element, DATA_KEY);
    };

XhmikosR's avatar
Dist    
XhmikosR committed
713
714
715
716
717
718
719
720
721
722
723
    _createClass(Modal, null, [{
      key: "VERSION",
      get: function get() {
        return VERSION;
      }
    }, {
      key: "Default",
      get: function get() {
        return Default;
      }
    }]);
Mark Otto's avatar
dist    
Mark Otto committed
724

XhmikosR's avatar
Dist    
XhmikosR committed
725
726
727
728
729
730
731
    return Modal;
  }();
  /**
   * ------------------------------------------------------------------------
   * Data Api implementation
   * ------------------------------------------------------------------------
   */
732
733


XhmikosR's avatar
XhmikosR committed
734
  EventHandler.on(document, Event$1.CLICK_DATA_API, Selector.DATA_TOGGLE, function (event) {
XhmikosR's avatar
Dist    
XhmikosR committed
735
    var _this10 = this;
736

XhmikosR's avatar
Dist    
XhmikosR committed
737
    var target;
XhmikosR's avatar
XhmikosR committed
738
    var selector = getSelectorFromElement(this);
739

XhmikosR's avatar
Dist    
XhmikosR committed
740
    if (selector) {
XhmikosR's avatar
XhmikosR committed
741
      target = SelectorEngine.findOne(selector);
XhmikosR's avatar
Dist    
XhmikosR committed
742
    }
743

XhmikosR's avatar
XhmikosR committed
744
    var config = Data.getData(target, DATA_KEY) ? 'toggle' : _objectSpread({}, Manipulator.getDataAttributes(target), Manipulator.getDataAttributes(this));
XhmikosR's avatar
Dist    
XhmikosR committed
745
746
747
748
749

    if (this.tagName === 'A' || this.tagName === 'AREA') {
      event.preventDefault();
    }

XhmikosR's avatar
XhmikosR committed
750
751
752
    EventHandler.one(target, Event$1.SHOW, function (showEvent) {
      if (showEvent.defaultPrevented) {
        // only register focus restorer if modal will actually get shown
XhmikosR's avatar
Dist    
XhmikosR committed
753
        return;
754
755
      }

XhmikosR's avatar
XhmikosR committed
756
757
      EventHandler.one(target, Event$1.HIDDEN, function () {
        if (isVisible(_this10)) {
XhmikosR's avatar
Dist    
XhmikosR committed
758
          _this10.focus();
759
760
761
        }
      });
    });
XhmikosR's avatar
XhmikosR committed
762
763
764
765
766
    var data = Data.getData(target, DATA_KEY);

    if (!data) {
      data = new Modal(target, config);
    }
767

XhmikosR's avatar
XhmikosR committed
768
    data.show(this);
XhmikosR's avatar
Dist    
XhmikosR committed
769
770
771
772
773
774
  });
  /**
   * ------------------------------------------------------------------------
   * jQuery
   * ------------------------------------------------------------------------
   */
775

XhmikosR's avatar
XhmikosR committed
776
777
778
779
  if (typeof jQuery !== 'undefined') {
    var JQUERY_NO_CONFLICT = jQuery.fn[NAME];
    jQuery.fn[NAME] = Modal._jQueryInterface;
    jQuery.fn[NAME].Constructor = Modal;
Mark Otto's avatar
dist    
Mark Otto committed
780

XhmikosR's avatar
XhmikosR committed
781
782
783
784
785
    jQuery.fn[NAME].noConflict = function () {
      jQuery.fn[NAME] = JQUERY_NO_CONFLICT;
      return Modal._jQueryInterface;
    };
  }
786
787

  return Modal;
Mark Otto's avatar
dist    
Mark Otto committed
788

Mark Otto's avatar
Mark Otto committed
789
}));
Mark Otto's avatar
dist    
Mark Otto committed
790
//# sourceMappingURL=modal.js.map