bootstrap.esm.js 140 KB
Newer Older
XhmikosR's avatar
Dist.  
XhmikosR committed
2001

XhmikosR's avatar
XhmikosR committed
2002
2003
2004
2005
2006
2007
    $.fn[NAME$3].noConflict = function () {
      $.fn[NAME$3] = JQUERY_NO_CONFLICT;
      return Collapse.jQueryInterface;
    };
  }
});
XhmikosR's avatar
Dist.  
XhmikosR committed
2008
2009
2010
2011
2012
2013
2014

/**
 * ------------------------------------------------------------------------
 * Constants
 * ------------------------------------------------------------------------
 */

XhmikosR's avatar
XhmikosR committed
2015
var NAME$4 = 'dropdown';
XhmikosR's avatar
XhmikosR committed
2016
var VERSION$4 = '5.0.0-alpha3';
XhmikosR's avatar
XhmikosR committed
2017
2018
2019
var DATA_KEY$4 = 'bs.dropdown';
var EVENT_KEY$4 = "." + DATA_KEY$4;
var DATA_API_KEY$4 = '.data-api';
XhmikosR's avatar
XhmikosR committed
2020
2021
2022
2023
2024
2025
2026
2027
var ESCAPE_KEY = 'Escape';
var SPACE_KEY = 'Space';
var TAB_KEY = 'Tab';
var ARROW_UP_KEY = 'ArrowUp';
var ARROW_DOWN_KEY = 'ArrowDown';
var RIGHT_MOUSE_BUTTON = 2; // MouseEvent.button value for the secondary button, usually the right button

var REGEXP_KEYDOWN = new RegExp(ARROW_UP_KEY + "|" + ARROW_DOWN_KEY + "|" + ESCAPE_KEY);
XhmikosR's avatar
XhmikosR committed
2028
2029
2030
2031
2032
2033
2034
2035
var EVENT_HIDE$1 = "hide" + EVENT_KEY$4;
var EVENT_HIDDEN$1 = "hidden" + EVENT_KEY$4;
var EVENT_SHOW$1 = "show" + EVENT_KEY$4;
var EVENT_SHOWN$1 = "shown" + EVENT_KEY$4;
var EVENT_CLICK = "click" + EVENT_KEY$4;
var EVENT_CLICK_DATA_API$4 = "click" + EVENT_KEY$4 + DATA_API_KEY$4;
var EVENT_KEYDOWN_DATA_API = "keydown" + EVENT_KEY$4 + DATA_API_KEY$4;
var EVENT_KEYUP_DATA_API = "keyup" + EVENT_KEY$4 + DATA_API_KEY$4;
XhmikosR's avatar
XhmikosR committed
2036
var CLASS_NAME_DISABLED = 'disabled';
XhmikosR's avatar
XhmikosR committed
2037
2038
2039
2040
2041
2042
2043
var CLASS_NAME_SHOW$1 = 'show';
var CLASS_NAME_DROPUP = 'dropup';
var CLASS_NAME_DROPRIGHT = 'dropright';
var CLASS_NAME_DROPLEFT = 'dropleft';
var CLASS_NAME_MENURIGHT = 'dropdown-menu-right';
var CLASS_NAME_NAVBAR = 'navbar';
var CLASS_NAME_POSITION_STATIC = 'position-static';
XhmikosR's avatar
XhmikosR committed
2044
var SELECTOR_DATA_TOGGLE$2 = '[data-bs-toggle="dropdown"]';
XhmikosR's avatar
XhmikosR committed
2045
2046
2047
2048
2049
2050
2051
2052
2053
2054
var SELECTOR_FORM_CHILD = '.dropdown form';
var SELECTOR_MENU = '.dropdown-menu';
var SELECTOR_NAVBAR_NAV = '.navbar-nav';
var SELECTOR_VISIBLE_ITEMS = '.dropdown-menu .dropdown-item:not(.disabled):not(:disabled)';
var PLACEMENT_TOP = 'top-start';
var PLACEMENT_TOPEND = 'top-end';
var PLACEMENT_BOTTOM = 'bottom-start';
var PLACEMENT_BOTTOMEND = 'bottom-end';
var PLACEMENT_RIGHT = 'right-start';
var PLACEMENT_LEFT = 'left-start';
XhmikosR's avatar
XhmikosR committed
2055
var Default$2 = {
XhmikosR's avatar
Dist.  
XhmikosR committed
2056
2057
2058
2059
  offset: 0,
  flip: true,
  boundary: 'scrollParent',
  reference: 'toggle',
XhmikosR's avatar
XhmikosR committed
2060
2061
  display: 'dynamic',
  popperConfig: null
XhmikosR's avatar
Dist.  
XhmikosR committed
2062
};
XhmikosR's avatar
XhmikosR committed
2063
var DefaultType$2 = {
XhmikosR's avatar
Dist.  
XhmikosR committed
2064
2065
2066
2067
  offset: '(number|string|function)',
  flip: 'boolean',
  boundary: '(string|element)',
  reference: '(string|element)',
XhmikosR's avatar
XhmikosR committed
2068
2069
  display: 'string',
  popperConfig: '(null|object)'
XhmikosR's avatar
Dist.  
XhmikosR committed
2070
};
XhmikosR's avatar
XhmikosR committed
2071
2072
2073
2074
2075
/**
 * ------------------------------------------------------------------------
 * Class Definition
 * ------------------------------------------------------------------------
 */
XhmikosR's avatar
Dist.  
XhmikosR committed
2076

XhmikosR's avatar
XhmikosR committed
2077
var Dropdown = /*#__PURE__*/function () {
XhmikosR's avatar
XhmikosR committed
2078
  function Dropdown(element, config) {
XhmikosR's avatar
Dist.  
XhmikosR committed
2079
2080
2081
2082
2083
2084
2085
2086
2087
2088
2089
2090
    this._element = element;
    this._popper = null;
    this._config = this._getConfig(config);
    this._menu = this._getMenuElement();
    this._inNavbar = this._detectNavbar();

    this._addEventListeners();

    Data.setData(element, DATA_KEY$4, this);
  } // Getters


XhmikosR's avatar
XhmikosR committed
2091
  var _proto = Dropdown.prototype;
XhmikosR's avatar
Dist.  
XhmikosR committed
2092

XhmikosR's avatar
XhmikosR committed
2093
2094
  // Public
  _proto.toggle = function toggle() {
XhmikosR's avatar
XhmikosR committed
2095
    if (this._element.disabled || this._element.classList.contains(CLASS_NAME_DISABLED)) {
XhmikosR's avatar
Dist.  
XhmikosR committed
2096
2097
2098
      return;
    }

XhmikosR's avatar
XhmikosR committed
2099
    var isActive = this._element.classList.contains(CLASS_NAME_SHOW$1);
XhmikosR's avatar
Dist.  
XhmikosR committed
2100

XhmikosR's avatar
XhmikosR committed
2101
    Dropdown.clearMenus();
XhmikosR's avatar
Dist.  
XhmikosR committed
2102
2103
2104
2105
2106

    if (isActive) {
      return;
    }

XhmikosR's avatar
XhmikosR committed
2107
2108
2109
2110
    this.show();
  };

  _proto.show = function show() {
XhmikosR's avatar
XhmikosR committed
2111
    if (this._element.disabled || this._element.classList.contains(CLASS_NAME_DISABLED) || this._menu.classList.contains(CLASS_NAME_SHOW$1)) {
XhmikosR's avatar
XhmikosR committed
2112
2113
2114
2115
      return;
    }

    var parent = Dropdown.getParentFromElement(this._element);
XhmikosR's avatar
XhmikosR committed
2116
    var relatedTarget = {
XhmikosR's avatar
Dist.  
XhmikosR committed
2117
2118
      relatedTarget: this._element
    };
XhmikosR's avatar
XhmikosR committed
2119
    var showEvent = EventHandler.trigger(this._element, EVENT_SHOW$1, relatedTarget);
XhmikosR's avatar
Dist.  
XhmikosR committed
2120
2121
2122

    if (showEvent.defaultPrevented) {
      return;
XhmikosR's avatar
XhmikosR committed
2123
    } // Totally disable Popper for Dropdowns in Navbar
XhmikosR's avatar
Dist.  
XhmikosR committed
2124
2125
2126
2127


    if (!this._inNavbar) {
      if (typeof Popper === 'undefined') {
XhmikosR's avatar
XhmikosR committed
2128
        throw new TypeError('Bootstrap\'s dropdowns require Popper (https://popper.js.org)');
XhmikosR's avatar
Dist.  
XhmikosR committed
2129
2130
      }

XhmikosR's avatar
XhmikosR committed
2131
      var referenceElement = this._element;
XhmikosR's avatar
Dist.  
XhmikosR committed
2132
2133
2134
2135
2136
2137
2138
2139
2140
2141
2142
2143
2144
2145
2146

      if (this._config.reference === 'parent') {
        referenceElement = parent;
      } else if (isElement(this._config.reference)) {
        referenceElement = this._config.reference; // Check if it's jQuery element

        if (typeof this._config.reference.jquery !== 'undefined') {
          referenceElement = this._config.reference[0];
        }
      } // If boundary is not `scrollParent`, then set position to `static`
      // to allow the menu to "escape" the scroll parent's boundaries
      // https://github.com/twbs/bootstrap/issues/24251


      if (this._config.boundary !== 'scrollParent') {
XhmikosR's avatar
XhmikosR committed
2147
        parent.classList.add(CLASS_NAME_POSITION_STATIC);
XhmikosR's avatar
Dist.  
XhmikosR committed
2148
2149
2150
2151
2152
2153
2154
2155
2156
      }

      this._popper = new Popper(referenceElement, this._menu, this._getPopperConfig());
    } // If this is a touch-enabled device we add extra
    // empty mouseover listeners to the body's immediate children;
    // only needed because of broken event delegation on iOS
    // https://www.quirksmode.org/blog/archives/2014/02/mouse_event_bub.html


XhmikosR's avatar
XhmikosR committed
2157
    if ('ontouchstart' in document.documentElement && !parent.closest(SELECTOR_NAVBAR_NAV)) {
XhmikosR's avatar
XhmikosR committed
2158
2159
2160
      var _ref;

      (_ref = []).concat.apply(_ref, document.body.children).forEach(function (elem) {
XhmikosR's avatar
XhmikosR committed
2161
2162
        return EventHandler.on(elem, 'mouseover', null, noop());
      });
XhmikosR's avatar
Dist.  
XhmikosR committed
2163
2164
2165
2166
2167
2168
    }

    this._element.focus();

    this._element.setAttribute('aria-expanded', true);

Mark Otto's avatar
Mark Otto committed
2169
2170
2171
2172
    this._menu.classList.toggle(CLASS_NAME_SHOW$1);

    this._element.classList.toggle(CLASS_NAME_SHOW$1);

XhmikosR's avatar
XhmikosR committed
2173
    EventHandler.trigger(parent, EVENT_SHOWN$1, relatedTarget);
XhmikosR's avatar
XhmikosR committed
2174
  };
XhmikosR's avatar
Dist.  
XhmikosR committed
2175

XhmikosR's avatar
XhmikosR committed
2176
  _proto.hide = function hide() {
XhmikosR's avatar
XhmikosR committed
2177
    if (this._element.disabled || this._element.classList.contains(CLASS_NAME_DISABLED) || !this._menu.classList.contains(CLASS_NAME_SHOW$1)) {
XhmikosR's avatar
Dist.  
XhmikosR committed
2178
2179
2180
      return;
    }

XhmikosR's avatar
XhmikosR committed
2181
    var parent = Dropdown.getParentFromElement(this._element);
XhmikosR's avatar
XhmikosR committed
2182
    var relatedTarget = {
XhmikosR's avatar
Dist.  
XhmikosR committed
2183
2184
      relatedTarget: this._element
    };
XhmikosR's avatar
XhmikosR committed
2185
    var hideEvent = EventHandler.trigger(parent, EVENT_HIDE$1, relatedTarget);
XhmikosR's avatar
Dist.  
XhmikosR committed
2186
2187
2188
2189
2190

    if (hideEvent.defaultPrevented) {
      return;
    }

XhmikosR's avatar
XhmikosR committed
2191
2192
2193
2194
    if (this._popper) {
      this._popper.destroy();
    }

Mark Otto's avatar
Mark Otto committed
2195
2196
2197
2198
    this._menu.classList.toggle(CLASS_NAME_SHOW$1);

    this._element.classList.toggle(CLASS_NAME_SHOW$1);

XhmikosR's avatar
XhmikosR committed
2199
    EventHandler.trigger(parent, EVENT_HIDDEN$1, relatedTarget);
XhmikosR's avatar
XhmikosR committed
2200
  };
XhmikosR's avatar
Dist.  
XhmikosR committed
2201

XhmikosR's avatar
XhmikosR committed
2202
  _proto.dispose = function dispose() {
XhmikosR's avatar
Dist.  
XhmikosR committed
2203
2204
2205
2206
2207
    Data.removeData(this._element, DATA_KEY$4);
    EventHandler.off(this._element, EVENT_KEY$4);
    this._element = null;
    this._menu = null;

XhmikosR's avatar
XhmikosR committed
2208
    if (this._popper) {
XhmikosR's avatar
Dist.  
XhmikosR committed
2209
2210
2211
2212
      this._popper.destroy();

      this._popper = null;
    }
XhmikosR's avatar
XhmikosR committed
2213
  };
XhmikosR's avatar
Dist.  
XhmikosR committed
2214

XhmikosR's avatar
XhmikosR committed
2215
  _proto.update = function update() {
XhmikosR's avatar
Dist.  
XhmikosR committed
2216
2217
    this._inNavbar = this._detectNavbar();

XhmikosR's avatar
XhmikosR committed
2218
    if (this._popper) {
XhmikosR's avatar
Dist.  
XhmikosR committed
2219
2220
2221
      this._popper.scheduleUpdate();
    }
  } // Private
XhmikosR's avatar
XhmikosR committed
2222
  ;
XhmikosR's avatar
Dist.  
XhmikosR committed
2223

XhmikosR's avatar
XhmikosR committed
2224
2225
  _proto._addEventListeners = function _addEventListeners() {
    var _this = this;
XhmikosR's avatar
Dist.  
XhmikosR committed
2226

XhmikosR's avatar
XhmikosR committed
2227
    EventHandler.on(this._element, EVENT_CLICK, function (event) {
XhmikosR's avatar
Dist.  
XhmikosR committed
2228
2229
      event.preventDefault();
      event.stopPropagation();
XhmikosR's avatar
XhmikosR committed
2230
2231

      _this.toggle();
XhmikosR's avatar
Dist.  
XhmikosR committed
2232
    });
XhmikosR's avatar
XhmikosR committed
2233
  };
XhmikosR's avatar
Dist.  
XhmikosR committed
2234

XhmikosR's avatar
XhmikosR committed
2235
  _proto._getConfig = function _getConfig(config) {
XhmikosR's avatar
XhmikosR committed
2236
    config = _extends({}, this.constructor.Default, Manipulator.getDataAttributes(this._element), config);
XhmikosR's avatar
Dist.  
XhmikosR committed
2237
2238
    typeCheckConfig(NAME$4, config, this.constructor.DefaultType);
    return config;
XhmikosR's avatar
XhmikosR committed
2239
  };
XhmikosR's avatar
Dist.  
XhmikosR committed
2240

XhmikosR's avatar
XhmikosR committed
2241
  _proto._getMenuElement = function _getMenuElement() {
XhmikosR's avatar
XhmikosR committed
2242
    return SelectorEngine.next(this._element, SELECTOR_MENU)[0];
XhmikosR's avatar
XhmikosR committed
2243
  };
XhmikosR's avatar
Dist.  
XhmikosR committed
2244

XhmikosR's avatar
XhmikosR committed
2245
2246
  _proto._getPlacement = function _getPlacement() {
    var parentDropdown = this._element.parentNode;
XhmikosR's avatar
XhmikosR committed
2247
    var placement = PLACEMENT_BOTTOM; // Handle dropup
XhmikosR's avatar
Dist.  
XhmikosR committed
2248

XhmikosR's avatar
XhmikosR committed
2249
    if (parentDropdown.classList.contains(CLASS_NAME_DROPUP)) {
XhmikosR's avatar
XhmikosR committed
2250
      placement = this._menu.classList.contains(CLASS_NAME_MENURIGHT) ? PLACEMENT_TOPEND : PLACEMENT_TOP;
XhmikosR's avatar
XhmikosR committed
2251
2252
2253
2254
2255
2256
    } else if (parentDropdown.classList.contains(CLASS_NAME_DROPRIGHT)) {
      placement = PLACEMENT_RIGHT;
    } else if (parentDropdown.classList.contains(CLASS_NAME_DROPLEFT)) {
      placement = PLACEMENT_LEFT;
    } else if (this._menu.classList.contains(CLASS_NAME_MENURIGHT)) {
      placement = PLACEMENT_BOTTOMEND;
XhmikosR's avatar
Dist.  
XhmikosR committed
2257
2258
2259
    }

    return placement;
XhmikosR's avatar
XhmikosR committed
2260
  };
XhmikosR's avatar
Dist.  
XhmikosR committed
2261

XhmikosR's avatar
XhmikosR committed
2262
  _proto._detectNavbar = function _detectNavbar() {
XhmikosR's avatar
XhmikosR committed
2263
    return Boolean(this._element.closest("." + CLASS_NAME_NAVBAR));
XhmikosR's avatar
XhmikosR committed
2264
  };
XhmikosR's avatar
Dist.  
XhmikosR committed
2265

XhmikosR's avatar
XhmikosR committed
2266
2267
2268
2269
  _proto._getOffset = function _getOffset() {
    var _this2 = this;

    var offset = {};
XhmikosR's avatar
Dist.  
XhmikosR committed
2270
2271

    if (typeof this._config.offset === 'function') {
XhmikosR's avatar
XhmikosR committed
2272
      offset.fn = function (data) {
XhmikosR's avatar
XhmikosR committed
2273
        data.offsets = _extends({}, data.offsets, _this2._config.offset(data.offsets, _this2._element) || {});
XhmikosR's avatar
Dist.  
XhmikosR committed
2274
2275
2276
2277
2278
2279
2280
        return data;
      };
    } else {
      offset.offset = this._config.offset;
    }

    return offset;
XhmikosR's avatar
XhmikosR committed
2281
  };
XhmikosR's avatar
Dist.  
XhmikosR committed
2282

XhmikosR's avatar
XhmikosR committed
2283
2284
  _proto._getPopperConfig = function _getPopperConfig() {
    var popperConfig = {
XhmikosR's avatar
Dist.  
XhmikosR committed
2285
2286
2287
2288
2289
2290
2291
2292
2293
      placement: this._getPlacement(),
      modifiers: {
        offset: this._getOffset(),
        flip: {
          enabled: this._config.flip
        },
        preventOverflow: {
          boundariesElement: this._config.boundary
        }
XhmikosR's avatar
XhmikosR committed
2294
      }
XhmikosR's avatar
XhmikosR committed
2295
    }; // Disable Popper if we have a static display
XhmikosR's avatar
Dist.  
XhmikosR committed
2296
2297
2298
2299
2300
2301
2302

    if (this._config.display === 'static') {
      popperConfig.modifiers.applyStyle = {
        enabled: false
      };
    }

XhmikosR's avatar
XhmikosR committed
2303
    return _extends({}, popperConfig, this._config.popperConfig);
XhmikosR's avatar
Dist.  
XhmikosR committed
2304
  } // Static
XhmikosR's avatar
XhmikosR committed
2305
  ;
XhmikosR's avatar
Dist.  
XhmikosR committed
2306

XhmikosR's avatar
XhmikosR committed
2307
  Dropdown.dropdownInterface = function dropdownInterface(element, config) {
XhmikosR's avatar
XhmikosR committed
2308
    var data = Data.getData(element, DATA_KEY$4);
XhmikosR's avatar
Dist.  
XhmikosR committed
2309

XhmikosR's avatar
XhmikosR committed
2310
    var _config = typeof config === 'object' ? config : null;
XhmikosR's avatar
Dist.  
XhmikosR committed
2311
2312
2313
2314
2315
2316
2317

    if (!data) {
      data = new Dropdown(element, _config);
    }

    if (typeof config === 'string') {
      if (typeof data[config] === 'undefined') {
XhmikosR's avatar
XhmikosR committed
2318
        throw new TypeError("No method named \"" + config + "\"");
XhmikosR's avatar
Dist.  
XhmikosR committed
2319
2320
2321
2322
      }

      data[config]();
    }
XhmikosR's avatar
XhmikosR committed
2323
  };
XhmikosR's avatar
Dist.  
XhmikosR committed
2324

XhmikosR's avatar
XhmikosR committed
2325
  Dropdown.jQueryInterface = function jQueryInterface(config) {
XhmikosR's avatar
Dist.  
XhmikosR committed
2326
    return this.each(function () {
XhmikosR's avatar
XhmikosR committed
2327
      Dropdown.dropdownInterface(this, config);
XhmikosR's avatar
Dist.  
XhmikosR committed
2328
    });
XhmikosR's avatar
XhmikosR committed
2329
  };
XhmikosR's avatar
Dist.  
XhmikosR committed
2330

XhmikosR's avatar
XhmikosR committed
2331
  Dropdown.clearMenus = function clearMenus(event) {
XhmikosR's avatar
XhmikosR committed
2332
    if (event && (event.button === RIGHT_MOUSE_BUTTON || event.type === 'keyup' && event.key !== TAB_KEY)) {
XhmikosR's avatar
Dist.  
XhmikosR committed
2333
2334
2335
      return;
    }

XhmikosR's avatar
XhmikosR committed
2336
    var toggles = SelectorEngine.find(SELECTOR_DATA_TOGGLE$2);
XhmikosR's avatar
Dist.  
XhmikosR committed
2337

XhmikosR's avatar
XhmikosR committed
2338
    for (var i = 0, len = toggles.length; i < len; i++) {
XhmikosR's avatar
XhmikosR committed
2339
      var parent = Dropdown.getParentFromElement(toggles[i]);
XhmikosR's avatar
XhmikosR committed
2340
2341
      var context = Data.getData(toggles[i], DATA_KEY$4);
      var relatedTarget = {
XhmikosR's avatar
Dist.  
XhmikosR committed
2342
2343
2344
2345
2346
2347
2348
2349
2350
2351
2352
        relatedTarget: toggles[i]
      };

      if (event && event.type === 'click') {
        relatedTarget.clickEvent = event;
      }

      if (!context) {
        continue;
      }

XhmikosR's avatar
XhmikosR committed
2353
      var dropdownMenu = context._menu;
XhmikosR's avatar
Dist.  
XhmikosR committed
2354

XhmikosR's avatar
XhmikosR committed
2355
      if (!toggles[i].classList.contains(CLASS_NAME_SHOW$1)) {
XhmikosR's avatar
Dist.  
XhmikosR committed
2356
2357
2358
        continue;
      }

XhmikosR's avatar
XhmikosR committed
2359
      if (event && (event.type === 'click' && /input|textarea/i.test(event.target.tagName) || event.type === 'keyup' && event.key === TAB_KEY) && dropdownMenu.contains(event.target)) {
XhmikosR's avatar
Dist.  
XhmikosR committed
2360
2361
2362
        continue;
      }

XhmikosR's avatar
XhmikosR committed
2363
      var hideEvent = EventHandler.trigger(parent, EVENT_HIDE$1, relatedTarget);
XhmikosR's avatar
Dist.  
XhmikosR committed
2364
2365
2366
2367
2368
2369
2370
2371

      if (hideEvent.defaultPrevented) {
        continue;
      } // If this is a touch-enabled device we remove the extra
      // empty mouseover listeners we added for iOS support


      if ('ontouchstart' in document.documentElement) {
XhmikosR's avatar
XhmikosR committed
2372
2373
2374
        var _ref2;

        (_ref2 = []).concat.apply(_ref2, document.body.children).forEach(function (elem) {
XhmikosR's avatar
XhmikosR committed
2375
2376
          return EventHandler.off(elem, 'mouseover', null, noop());
        });
XhmikosR's avatar
Dist.  
XhmikosR committed
2377
2378
2379
      }

      toggles[i].setAttribute('aria-expanded', 'false');
XhmikosR's avatar
XhmikosR committed
2380
2381
2382
2383
2384

      if (context._popper) {
        context._popper.destroy();
      }

XhmikosR's avatar
XhmikosR committed
2385
2386
2387
      dropdownMenu.classList.remove(CLASS_NAME_SHOW$1);
      toggles[i].classList.remove(CLASS_NAME_SHOW$1);
      EventHandler.trigger(parent, EVENT_HIDDEN$1, relatedTarget);
XhmikosR's avatar
Dist.  
XhmikosR committed
2388
    }
XhmikosR's avatar
XhmikosR committed
2389
  };
XhmikosR's avatar
Dist.  
XhmikosR committed
2390

XhmikosR's avatar
XhmikosR committed
2391
2392
  Dropdown.getParentFromElement = function getParentFromElement(element) {
    return getElementFromSelector(element) || element.parentNode;
XhmikosR's avatar
XhmikosR committed
2393
  };
XhmikosR's avatar
Dist.  
XhmikosR committed
2394

XhmikosR's avatar
XhmikosR committed
2395
  Dropdown.dataApiKeydownHandler = function dataApiKeydownHandler(event) {
XhmikosR's avatar
Dist.  
XhmikosR committed
2396
2397
2398
2399
2400
2401
2402
    // If not input/textarea:
    //  - And not a key in REGEXP_KEYDOWN => not a dropdown command
    // If input/textarea:
    //  - If space key => not a dropdown command
    //  - If key is other than escape
    //    - If key is not up or down => not a dropdown command
    //    - If trigger inside the menu => not a dropdown command
XhmikosR's avatar
XhmikosR committed
2403
    if (/input|textarea/i.test(event.target.tagName) ? event.key === SPACE_KEY || event.key !== ESCAPE_KEY && (event.key !== ARROW_DOWN_KEY && event.key !== ARROW_UP_KEY || event.target.closest(SELECTOR_MENU)) : !REGEXP_KEYDOWN.test(event.key)) {
XhmikosR's avatar
Dist.  
XhmikosR committed
2404
2405
2406
2407
2408
2409
      return;
    }

    event.preventDefault();
    event.stopPropagation();

XhmikosR's avatar
XhmikosR committed
2410
    if (this.disabled || this.classList.contains(CLASS_NAME_DISABLED)) {
XhmikosR's avatar
Dist.  
XhmikosR committed
2411
2412
2413
      return;
    }

XhmikosR's avatar
XhmikosR committed
2414
    var parent = Dropdown.getParentFromElement(this);
XhmikosR's avatar
XhmikosR committed
2415
    var isActive = this.classList.contains(CLASS_NAME_SHOW$1);
XhmikosR's avatar
Dist.  
XhmikosR committed
2416

XhmikosR's avatar
XhmikosR committed
2417
    if (event.key === ESCAPE_KEY) {
XhmikosR's avatar
XhmikosR committed
2418
2419
2420
2421
2422
      var button = this.matches(SELECTOR_DATA_TOGGLE$2) ? this : SelectorEngine.prev(this, SELECTOR_DATA_TOGGLE$2)[0];
      button.focus();
      Dropdown.clearMenus();
      return;
    }
XhmikosR's avatar
Dist.  
XhmikosR committed
2423

XhmikosR's avatar
XhmikosR committed
2424
    if (!isActive || event.key === SPACE_KEY) {
XhmikosR's avatar
XhmikosR committed
2425
      Dropdown.clearMenus();
XhmikosR's avatar
Dist.  
XhmikosR committed
2426
2427
2428
      return;
    }

XhmikosR's avatar
XhmikosR committed
2429
    var items = SelectorEngine.find(SELECTOR_VISIBLE_ITEMS, parent).filter(isVisible);
XhmikosR's avatar
Dist.  
XhmikosR committed
2430
2431
2432
2433
2434

    if (!items.length) {
      return;
    }

XhmikosR's avatar
XhmikosR committed
2435
    var index = items.indexOf(event.target);
XhmikosR's avatar
Dist.  
XhmikosR committed
2436

XhmikosR's avatar
XhmikosR committed
2437
    if (event.key === ARROW_UP_KEY && index > 0) {
XhmikosR's avatar
Dist.  
XhmikosR committed
2438
2439
2440
2441
      // Up
      index--;
    }

XhmikosR's avatar
XhmikosR committed
2442
    if (event.key === ARROW_DOWN_KEY && index < items.length - 1) {
XhmikosR's avatar
Dist.  
XhmikosR committed
2443
2444
      // Down
      index++;
XhmikosR's avatar
XhmikosR committed
2445
2446
    } // index is -1 if the first keydown is an ArrowUp

XhmikosR's avatar
Dist.  
XhmikosR committed
2447

XhmikosR's avatar
XhmikosR committed
2448
    index = index === -1 ? 0 : index;
XhmikosR's avatar
Dist.  
XhmikosR committed
2449
    items[index].focus();
XhmikosR's avatar
XhmikosR committed
2450
  };
XhmikosR's avatar
Dist.  
XhmikosR committed
2451

XhmikosR's avatar
XhmikosR committed
2452
  Dropdown.getInstance = function getInstance(element) {
XhmikosR's avatar
Dist.  
XhmikosR committed
2453
    return Data.getData(element, DATA_KEY$4);
XhmikosR's avatar
XhmikosR committed
2454
  };
XhmikosR's avatar
Dist.  
XhmikosR committed
2455

XhmikosR's avatar
XhmikosR committed
2456
2457
2458
2459
2460
2461
2462
2463
2464
2465
2466
2467
2468
2469
2470
2471
2472
2473
2474
  _createClass(Dropdown, null, [{
    key: "VERSION",
    get: function get() {
      return VERSION$4;
    }
  }, {
    key: "Default",
    get: function get() {
      return Default$2;
    }
  }, {
    key: "DefaultType",
    get: function get() {
      return DefaultType$2;
    }
  }]);

  return Dropdown;
}();
XhmikosR's avatar
Dist.  
XhmikosR committed
2475
2476
2477
2478
2479
2480
2481
/**
 * ------------------------------------------------------------------------
 * Data Api implementation
 * ------------------------------------------------------------------------
 */


XhmikosR's avatar
XhmikosR committed
2482
2483
2484
2485
2486
EventHandler.on(document, EVENT_KEYDOWN_DATA_API, SELECTOR_DATA_TOGGLE$2, Dropdown.dataApiKeydownHandler);
EventHandler.on(document, EVENT_KEYDOWN_DATA_API, SELECTOR_MENU, Dropdown.dataApiKeydownHandler);
EventHandler.on(document, EVENT_CLICK_DATA_API$4, Dropdown.clearMenus);
EventHandler.on(document, EVENT_KEYUP_DATA_API, Dropdown.clearMenus);
EventHandler.on(document, EVENT_CLICK_DATA_API$4, SELECTOR_DATA_TOGGLE$2, function (event) {
XhmikosR's avatar
Dist.  
XhmikosR committed
2487
2488
  event.preventDefault();
  event.stopPropagation();
XhmikosR's avatar
XhmikosR committed
2489
  Dropdown.dropdownInterface(this, 'toggle');
XhmikosR's avatar
Dist.  
XhmikosR committed
2490
});
XhmikosR's avatar
XhmikosR committed
2491
EventHandler.on(document, EVENT_CLICK_DATA_API$4, SELECTOR_FORM_CHILD, function (e) {
XhmikosR's avatar
XhmikosR committed
2492
2493
  return e.stopPropagation();
});
XhmikosR's avatar
Dist.  
XhmikosR committed
2494
2495
2496
2497
/**
 * ------------------------------------------------------------------------
 * jQuery
 * ------------------------------------------------------------------------
XhmikosR's avatar
XhmikosR committed
2498
 * add .Dropdown to jQuery only if jQuery is present
XhmikosR's avatar
Dist.  
XhmikosR committed
2499
2500
 */

XhmikosR's avatar
XhmikosR committed
2501
2502
2503
onDOMContentLoaded(function () {
  var $ = getjQuery();
  /* istanbul ignore if */
2504

XhmikosR's avatar
XhmikosR committed
2505
2506
2507
2508
  if ($) {
    var JQUERY_NO_CONFLICT = $.fn[NAME$4];
    $.fn[NAME$4] = Dropdown.jQueryInterface;
    $.fn[NAME$4].Constructor = Dropdown;
XhmikosR's avatar
Dist.  
XhmikosR committed
2509

XhmikosR's avatar
XhmikosR committed
2510
2511
2512
2513
2514
2515
    $.fn[NAME$4].noConflict = function () {
      $.fn[NAME$4] = JQUERY_NO_CONFLICT;
      return Dropdown.jQueryInterface;
    };
  }
});
XhmikosR's avatar
Dist.  
XhmikosR committed
2516
2517
2518
2519
2520
2521
2522

/**
 * ------------------------------------------------------------------------
 * Constants
 * ------------------------------------------------------------------------
 */

XhmikosR's avatar
XhmikosR committed
2523
var NAME$5 = 'modal';
XhmikosR's avatar
XhmikosR committed
2524
var VERSION$5 = '5.0.0-alpha3';
XhmikosR's avatar
XhmikosR committed
2525
2526
2527
var DATA_KEY$5 = 'bs.modal';
var EVENT_KEY$5 = "." + DATA_KEY$5;
var DATA_API_KEY$5 = '.data-api';
XhmikosR's avatar
XhmikosR committed
2528
var ESCAPE_KEY$1 = 'Escape';
XhmikosR's avatar
XhmikosR committed
2529
var Default$3 = {
XhmikosR's avatar
Dist.  
XhmikosR committed
2530
2531
2532
2533
2534
  backdrop: true,
  keyboard: true,
  focus: true,
  show: true
};
XhmikosR's avatar
XhmikosR committed
2535
var DefaultType$3 = {
XhmikosR's avatar
Dist.  
XhmikosR committed
2536
2537
2538
2539
2540
  backdrop: '(boolean|string)',
  keyboard: 'boolean',
  focus: 'boolean',
  show: 'boolean'
};
XhmikosR's avatar
XhmikosR committed
2541
2542
2543
2544
2545
2546
2547
2548
2549
2550
2551
2552
2553
2554
2555
2556
2557
2558
2559
2560
var EVENT_HIDE$2 = "hide" + EVENT_KEY$5;
var EVENT_HIDE_PREVENTED = "hidePrevented" + EVENT_KEY$5;
var EVENT_HIDDEN$2 = "hidden" + EVENT_KEY$5;
var EVENT_SHOW$2 = "show" + EVENT_KEY$5;
var EVENT_SHOWN$2 = "shown" + EVENT_KEY$5;
var EVENT_FOCUSIN = "focusin" + EVENT_KEY$5;
var EVENT_RESIZE = "resize" + EVENT_KEY$5;
var EVENT_CLICK_DISMISS = "click.dismiss" + EVENT_KEY$5;
var EVENT_KEYDOWN_DISMISS = "keydown.dismiss" + EVENT_KEY$5;
var EVENT_MOUSEUP_DISMISS = "mouseup.dismiss" + EVENT_KEY$5;
var EVENT_MOUSEDOWN_DISMISS = "mousedown.dismiss" + EVENT_KEY$5;
var EVENT_CLICK_DATA_API$5 = "click" + EVENT_KEY$5 + DATA_API_KEY$5;
var CLASS_NAME_SCROLLBAR_MEASURER = 'modal-scrollbar-measure';
var CLASS_NAME_BACKDROP = 'modal-backdrop';
var CLASS_NAME_OPEN = 'modal-open';
var CLASS_NAME_FADE = 'fade';
var CLASS_NAME_SHOW$2 = 'show';
var CLASS_NAME_STATIC = 'modal-static';
var SELECTOR_DIALOG = '.modal-dialog';
var SELECTOR_MODAL_BODY = '.modal-body';
XhmikosR's avatar
XhmikosR committed
2561
2562
var SELECTOR_DATA_TOGGLE$3 = '[data-bs-toggle="modal"]';
var SELECTOR_DATA_DISMISS = '[data-bs-dismiss="modal"]';
XhmikosR's avatar
XhmikosR committed
2563
2564
var SELECTOR_FIXED_CONTENT = '.fixed-top, .fixed-bottom, .is-fixed, .sticky-top';
var SELECTOR_STICKY_CONTENT = '.sticky-top';
XhmikosR's avatar
XhmikosR committed
2565
2566
2567
2568
2569
/**
 * ------------------------------------------------------------------------
 * Class Definition
 * ------------------------------------------------------------------------
 */
XhmikosR's avatar
Dist.  
XhmikosR committed
2570

XhmikosR's avatar
XhmikosR committed
2571
var Modal = /*#__PURE__*/function () {
XhmikosR's avatar
XhmikosR committed
2572
  function Modal(element, config) {
XhmikosR's avatar
Dist.  
XhmikosR committed
2573
2574
    this._config = this._getConfig(config);
    this._element = element;
XhmikosR's avatar
XhmikosR committed
2575
    this._dialog = SelectorEngine.findOne(SELECTOR_DIALOG, element);
XhmikosR's avatar
Dist.  
XhmikosR committed
2576
2577
2578
2579
2580
2581
2582
2583
2584
2585
    this._backdrop = null;
    this._isShown = false;
    this._isBodyOverflowing = false;
    this._ignoreBackdropClick = false;
    this._isTransitioning = false;
    this._scrollbarWidth = 0;
    Data.setData(element, DATA_KEY$5, this);
  } // Getters


XhmikosR's avatar
XhmikosR committed
2586
  var _proto = Modal.prototype;
XhmikosR's avatar
Dist.  
XhmikosR committed
2587

XhmikosR's avatar
XhmikosR committed
2588
2589
  // Public
  _proto.toggle = function toggle(relatedTarget) {
XhmikosR's avatar
Dist.  
XhmikosR committed
2590
    return this._isShown ? this.hide() : this.show(relatedTarget);
XhmikosR's avatar
XhmikosR committed
2591
2592
2593
2594
  };

  _proto.show = function show(relatedTarget) {
    var _this = this;
XhmikosR's avatar
Dist.  
XhmikosR committed
2595
2596
2597
2598
2599

    if (this._isShown || this._isTransitioning) {
      return;
    }

XhmikosR's avatar
XhmikosR committed
2600
    if (this._element.classList.contains(CLASS_NAME_FADE)) {
XhmikosR's avatar
Dist.  
XhmikosR committed
2601
2602
2603
      this._isTransitioning = true;
    }

XhmikosR's avatar
XhmikosR committed
2604
    var showEvent = EventHandler.trigger(this._element, EVENT_SHOW$2, {
XhmikosR's avatar
XhmikosR committed
2605
      relatedTarget: relatedTarget
XhmikosR's avatar
Dist.  
XhmikosR committed
2606
2607
2608
2609
2610
2611
2612
2613
2614
2615
2616
2617
2618
2619
2620
2621
2622
2623
    });

    if (this._isShown || showEvent.defaultPrevented) {
      return;
    }

    this._isShown = true;

    this._checkScrollbar();

    this._setScrollbar();

    this._adjustDialog();

    this._setEscapeEvent();

    this._setResizeEvent();

XhmikosR's avatar
XhmikosR committed
2624
    EventHandler.on(this._element, EVENT_CLICK_DISMISS, SELECTOR_DATA_DISMISS, function (event) {
XhmikosR's avatar
XhmikosR committed
2625
2626
      return _this.hide(event);
    });
XhmikosR's avatar
XhmikosR committed
2627
2628
    EventHandler.on(this._dialog, EVENT_MOUSEDOWN_DISMISS, function () {
      EventHandler.one(_this._element, EVENT_MOUSEUP_DISMISS, function (event) {
XhmikosR's avatar
XhmikosR committed
2629
2630
        if (event.target === _this._element) {
          _this._ignoreBackdropClick = true;
XhmikosR's avatar
Dist.  
XhmikosR committed
2631
2632
2633
2634
        }
      });
    });

XhmikosR's avatar
XhmikosR committed
2635
2636
2637
2638
2639
2640
2641
    this._showBackdrop(function () {
      return _this._showElement(relatedTarget);
    });
  };

  _proto.hide = function hide(event) {
    var _this2 = this;
XhmikosR's avatar
Dist.  
XhmikosR committed
2642
2643
2644
2645
2646
2647
2648
2649
2650

    if (event) {
      event.preventDefault();
    }

    if (!this._isShown || this._isTransitioning) {
      return;
    }

XhmikosR's avatar
XhmikosR committed
2651
    var hideEvent = EventHandler.trigger(this._element, EVENT_HIDE$2);
XhmikosR's avatar
Dist.  
XhmikosR committed
2652

2653
    if (hideEvent.defaultPrevented) {
XhmikosR's avatar
Dist.  
XhmikosR committed
2654
2655
2656
2657
2658
      return;
    }

    this._isShown = false;

XhmikosR's avatar
XhmikosR committed
2659
    var transition = this._element.classList.contains(CLASS_NAME_FADE);
XhmikosR's avatar
Dist.  
XhmikosR committed
2660
2661
2662
2663
2664
2665
2666
2667
2668

    if (transition) {
      this._isTransitioning = true;
    }

    this._setEscapeEvent();

    this._setResizeEvent();

XhmikosR's avatar
XhmikosR committed
2669
    EventHandler.off(document, EVENT_FOCUSIN);
XhmikosR's avatar
Dist.  
XhmikosR committed
2670

XhmikosR's avatar
XhmikosR committed
2671
    this._element.classList.remove(CLASS_NAME_SHOW$2);
XhmikosR's avatar
Dist.  
XhmikosR committed
2672

XhmikosR's avatar
XhmikosR committed
2673
2674
    EventHandler.off(this._element, EVENT_CLICK_DISMISS);
    EventHandler.off(this._dialog, EVENT_MOUSEDOWN_DISMISS);
XhmikosR's avatar
Dist.  
XhmikosR committed
2675
2676

    if (transition) {
XhmikosR's avatar
XhmikosR committed
2677
2678
2679
2680
      var transitionDuration = getTransitionDurationFromElement(this._element);
      EventHandler.one(this._element, TRANSITION_END, function (event) {
        return _this2._hideModal(event);
      });
XhmikosR's avatar
Dist.  
XhmikosR committed
2681
2682
2683
2684
      emulateTransitionEnd(this._element, transitionDuration);
    } else {
      this._hideModal();
    }
XhmikosR's avatar
XhmikosR committed
2685
  };
XhmikosR's avatar
Dist.  
XhmikosR committed
2686

XhmikosR's avatar
XhmikosR committed
2687
2688
2689
2690
  _proto.dispose = function dispose() {
    [window, this._element, this._dialog].forEach(function (htmlElement) {
      return EventHandler.off(htmlElement, EVENT_KEY$5);
    });
XhmikosR's avatar
Dist.  
XhmikosR committed
2691
    /**
XhmikosR's avatar
XhmikosR committed
2692
     * `document` has 2 events `EVENT_FOCUSIN` and `EVENT_CLICK_DATA_API`
XhmikosR's avatar
Dist.  
XhmikosR committed
2693
     * Do not move `document` in `htmlElements` array
XhmikosR's avatar
XhmikosR committed
2694
     * It will remove `EVENT_CLICK_DATA_API` event that should remain
XhmikosR's avatar
Dist.  
XhmikosR committed
2695
2696
     */

XhmikosR's avatar
XhmikosR committed
2697
    EventHandler.off(document, EVENT_FOCUSIN);
XhmikosR's avatar
Dist.  
XhmikosR committed
2698
2699
2700
2701
2702
2703
2704
2705
2706
2707
    Data.removeData(this._element, DATA_KEY$5);
    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;
XhmikosR's avatar
XhmikosR committed
2708
  };
XhmikosR's avatar
Dist.  
XhmikosR committed
2709

XhmikosR's avatar
XhmikosR committed
2710
  _proto.handleUpdate = function handleUpdate() {
XhmikosR's avatar
Dist.  
XhmikosR committed
2711
2712
    this._adjustDialog();
  } // Private
XhmikosR's avatar
XhmikosR committed
2713
  ;
XhmikosR's avatar
Dist.  
XhmikosR committed
2714

XhmikosR's avatar
XhmikosR committed
2715
  _proto._getConfig = function _getConfig(config) {
XhmikosR's avatar
XhmikosR committed
2716
    config = _extends({}, Default$3, config);
XhmikosR's avatar
Dist.  
XhmikosR committed
2717
2718
    typeCheckConfig(NAME$5, config, DefaultType$3);
    return config;
XhmikosR's avatar
XhmikosR committed
2719
2720
2721
2722
  };

  _proto._showElement = function _showElement(relatedTarget) {
    var _this3 = this;
XhmikosR's avatar
Dist.  
XhmikosR committed
2723

XhmikosR's avatar
XhmikosR committed
2724
    var transition = this._element.classList.contains(CLASS_NAME_FADE);
XhmikosR's avatar
Dist.  
XhmikosR committed
2725

XhmikosR's avatar
XhmikosR committed
2726
    var modalBody = SelectorEngine.findOne(SELECTOR_MODAL_BODY, this._dialog);
XhmikosR's avatar
XhmikosR committed
2727

XhmikosR's avatar
Dist.  
XhmikosR committed
2728
2729
2730
2731
2732
2733
2734
2735
2736
2737
2738
    if (!this._element.parentNode || this._element.parentNode.nodeType !== Node.ELEMENT_NODE) {
      // Don't move modal's DOM position
      document.body.appendChild(this._element);
    }

    this._element.style.display = 'block';

    this._element.removeAttribute('aria-hidden');

    this._element.setAttribute('aria-modal', true);

Mark Otto's avatar
Mark Otto committed
2739
2740
    this._element.setAttribute('role', 'dialog');

XhmikosR's avatar
XhmikosR committed
2741
2742
2743
    this._element.scrollTop = 0;

    if (modalBody) {
XhmikosR's avatar
XhmikosR committed
2744
      modalBody.scrollTop = 0;
XhmikosR's avatar
Dist.  
XhmikosR committed
2745
2746
2747
2748
2749
2750
    }

    if (transition) {
      reflow(this._element);
    }

XhmikosR's avatar
XhmikosR committed
2751
    this._element.classList.add(CLASS_NAME_SHOW$2);
XhmikosR's avatar
Dist.  
XhmikosR committed
2752
2753
2754
2755
2756

    if (this._config.focus) {
      this._enforceFocus();
    }

XhmikosR's avatar
XhmikosR committed
2757
2758
2759
    var transitionComplete = function transitionComplete() {
      if (_this3._config.focus) {
        _this3._element.focus();
XhmikosR's avatar
Dist.  
XhmikosR committed
2760
2761
      }

XhmikosR's avatar
XhmikosR committed
2762
      _this3._isTransitioning = false;
XhmikosR's avatar
XhmikosR committed
2763
      EventHandler.trigger(_this3._element, EVENT_SHOWN$2, {
XhmikosR's avatar
XhmikosR committed
2764
        relatedTarget: relatedTarget
XhmikosR's avatar
Dist.  
XhmikosR committed
2765
2766
2767
2768
      });
    };

    if (transition) {
XhmikosR's avatar
XhmikosR committed
2769
      var transitionDuration = getTransitionDurationFromElement(this._dialog);
XhmikosR's avatar
Dist.  
XhmikosR committed
2770
2771
2772
2773
2774
      EventHandler.one(this._dialog, TRANSITION_END, transitionComplete);
      emulateTransitionEnd(this._dialog, transitionDuration);
    } else {
      transitionComplete();
    }
XhmikosR's avatar
XhmikosR committed
2775
2776
2777
2778
  };

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

XhmikosR's avatar
XhmikosR committed
2780
    EventHandler.off(document, EVENT_FOCUSIN); // guard against infinite focus loop
XhmikosR's avatar
Dist.  
XhmikosR committed
2781

XhmikosR's avatar
XhmikosR committed
2782
    EventHandler.on(document, EVENT_FOCUSIN, function (event) {
XhmikosR's avatar
XhmikosR committed
2783
2784
      if (document !== event.target && _this4._element !== event.target && !_this4._element.contains(event.target)) {
        _this4._element.focus();
XhmikosR's avatar
Dist.  
XhmikosR committed
2785
2786
      }
    });
XhmikosR's avatar
XhmikosR committed
2787
2788
2789
2790
  };

  _proto._setEscapeEvent = function _setEscapeEvent() {
    var _this5 = this;
XhmikosR's avatar
Dist.  
XhmikosR committed
2791

XhmikosR's avatar
XhmikosR committed
2792
2793
    if (this._isShown) {
      EventHandler.on(this._element, EVENT_KEYDOWN_DISMISS, function (event) {
XhmikosR's avatar
XhmikosR committed
2794
        if (_this5._config.keyboard && event.key === ESCAPE_KEY$1) {
XhmikosR's avatar
XhmikosR committed
2795
2796
2797
          event.preventDefault();

          _this5.hide();
XhmikosR's avatar
XhmikosR committed
2798
        } else if (!_this5._config.keyboard && event.key === ESCAPE_KEY$1) {
XhmikosR's avatar
XhmikosR committed
2799
          _this5._triggerBackdropTransition();
XhmikosR's avatar
Dist.  
XhmikosR committed
2800
2801
        }
      });
2802
    } else {
XhmikosR's avatar
XhmikosR committed
2803
      EventHandler.off(this._element, EVENT_KEYDOWN_DISMISS);
XhmikosR's avatar
Dist.  
XhmikosR committed
2804
    }
XhmikosR's avatar
XhmikosR committed
2805
2806
2807
2808
  };

  _proto._setResizeEvent = function _setResizeEvent() {
    var _this6 = this;
XhmikosR's avatar
Dist.  
XhmikosR committed
2809
2810

    if (this._isShown) {
XhmikosR's avatar
XhmikosR committed
2811
      EventHandler.on(window, EVENT_RESIZE, function () {
2812
        return _this6._adjustDialog();
XhmikosR's avatar
XhmikosR committed
2813
      });
XhmikosR's avatar
Dist.  
XhmikosR committed
2814
    } else {
XhmikosR's avatar
XhmikosR committed
2815
      EventHandler.off(window, EVENT_RESIZE);
XhmikosR's avatar
Dist.  
XhmikosR committed
2816
    }
XhmikosR's avatar
XhmikosR committed
2817
2818
2819
2820
  };

  _proto._hideModal = function _hideModal() {
    var _this7 = this;
XhmikosR's avatar
Dist.  
XhmikosR committed
2821
2822
2823
2824
2825
2826
2827

    this._element.style.display = 'none';

    this._element.setAttribute('aria-hidden', true);

    this._element.removeAttribute('aria-modal');

Mark Otto's avatar
Mark Otto committed
2828
2829
    this._element.removeAttribute('role');

XhmikosR's avatar
Dist.  
XhmikosR committed
2830
2831
    this._isTransitioning = false;

XhmikosR's avatar
XhmikosR committed
2832
    this._showBackdrop(function () {
XhmikosR's avatar
XhmikosR committed
2833
      document.body.classList.remove(CLASS_NAME_OPEN);
XhmikosR's avatar
Dist.  
XhmikosR committed
2834

XhmikosR's avatar
XhmikosR committed
2835
      _this7._resetAdjustments();
XhmikosR's avatar
Dist.  
XhmikosR committed
2836

XhmikosR's avatar
XhmikosR committed
2837
      _this7._resetScrollbar();
XhmikosR's avatar
Dist.  
XhmikosR committed
2838

XhmikosR's avatar
XhmikosR committed
2839
      EventHandler.trigger(_this7._element, EVENT_HIDDEN$2);
XhmikosR's avatar
Dist.  
XhmikosR committed
2840
    });
XhmikosR's avatar
XhmikosR committed
2841
  };
XhmikosR's avatar
Dist.  
XhmikosR committed
2842

XhmikosR's avatar
XhmikosR committed
2843
  _proto._removeBackdrop = function _removeBackdrop() {
2844
    this._backdrop.parentNode.removeChild(this._backdrop);
XhmikosR's avatar
Dist.  
XhmikosR committed
2845

2846
    this._backdrop = null;
XhmikosR's avatar
XhmikosR committed
2847
  };
XhmikosR's avatar
Dist.  
XhmikosR committed
2848

XhmikosR's avatar
XhmikosR committed
2849
2850
2851
  _proto._showBackdrop = function _showBackdrop(callback) {
    var _this8 = this;

XhmikosR's avatar
XhmikosR committed
2852
    var animate = this._element.classList.contains(CLASS_NAME_FADE) ? CLASS_NAME_FADE : '';
XhmikosR's avatar
Dist.  
XhmikosR committed
2853
2854
2855

    if (this._isShown && this._config.backdrop) {
      this._backdrop = document.createElement('div');
XhmikosR's avatar
XhmikosR committed
2856
      this._backdrop.className = CLASS_NAME_BACKDROP;
XhmikosR's avatar
Dist.  
XhmikosR committed
2857
2858
2859
2860
2861
2862

      if (animate) {
        this._backdrop.classList.add(animate);
      }

      document.body.appendChild(this._backdrop);
XhmikosR's avatar
XhmikosR committed
2863
      EventHandler.on(this._element, EVENT_CLICK_DISMISS, function (event) {
XhmikosR's avatar
XhmikosR committed
2864
2865
        if (_this8._ignoreBackdropClick) {
          _this8._ignoreBackdropClick = false;
XhmikosR's avatar
Dist.  
XhmikosR committed
2866
2867
2868
2869
2870
2871
2872
          return;
        }

        if (event.target !== event.currentTarget) {
          return;
        }

XhmikosR's avatar
XhmikosR committed
2873
2874
2875
2876
2877
        if (_this8._config.backdrop === 'static') {
          _this8._triggerBackdropTransition();
        } else {
          _this8.hide();
        }
XhmikosR's avatar
Dist.  
XhmikosR committed
2878
2879
2880
2881
2882
2883
      });

      if (animate) {
        reflow(this._backdrop);
      }

XhmikosR's avatar
XhmikosR committed
2884
      this._backdrop.classList.add(CLASS_NAME_SHOW$2);
XhmikosR's avatar
Dist.  
XhmikosR committed
2885
2886
2887
2888
2889
2890

      if (!animate) {
        callback();
        return;
      }

XhmikosR's avatar
XhmikosR committed
2891
      var backdropTransitionDuration = getTransitionDurationFromElement(this._backdrop);
XhmikosR's avatar
Dist.  
XhmikosR committed
2892
2893
2894
      EventHandler.one(this._backdrop, TRANSITION_END, callback);
      emulateTransitionEnd(this._backdrop, backdropTransitionDuration);
    } else if (!this._isShown && this._backdrop) {
XhmikosR's avatar
XhmikosR committed
2895
      this._backdrop.classList.remove(CLASS_NAME_SHOW$2);
XhmikosR's avatar
Dist.  
XhmikosR committed
2896

XhmikosR's avatar
XhmikosR committed
2897
2898
      var callbackRemove = function callbackRemove() {
        _this8._removeBackdrop();
XhmikosR's avatar
Dist.  
XhmikosR committed
2899

2900
        callback();
XhmikosR's avatar
Dist.  
XhmikosR committed
2901
2902
      };

XhmikosR's avatar
XhmikosR committed
2903
      if (this._element.classList.contains(CLASS_NAME_FADE)) {
XhmikosR's avatar
XhmikosR committed
2904
2905
        var _backdropTransitionDuration = getTransitionDurationFromElement(this._backdrop);

XhmikosR's avatar
Dist.  
XhmikosR committed
2906
        EventHandler.one(this._backdrop, TRANSITION_END, callbackRemove);
XhmikosR's avatar
XhmikosR committed
2907
        emulateTransitionEnd(this._backdrop, _backdropTransitionDuration);
XhmikosR's avatar
Dist.  
XhmikosR committed
2908
2909
2910
      } else {
        callbackRemove();
      }
2911
    } else {
XhmikosR's avatar
Dist.  
XhmikosR committed
2912
2913
      callback();
    }
XhmikosR's avatar
XhmikosR committed
2914
2915
2916
2917
2918
  };

  _proto._triggerBackdropTransition = function _triggerBackdropTransition() {
    var _this9 = this;

XhmikosR's avatar
XhmikosR committed
2919
    var hideEvent = EventHandler.trigger(this._element, EVENT_HIDE_PREVENTED);
XhmikosR's avatar
XhmikosR committed
2920

XhmikosR's avatar
XhmikosR committed
2921
2922
2923
    if (hideEvent.defaultPrevented) {
      return;
    }
XhmikosR's avatar
XhmikosR committed
2924

XhmikosR's avatar
XhmikosR committed
2925
    var isModalOverflowing = this._element.scrollHeight > document.documentElement.clientHeight;
XhmikosR's avatar
XhmikosR committed
2926

XhmikosR's avatar
XhmikosR committed
2927
2928
2929
    if (!isModalOverflowing) {
      this._element.style.overflowY = 'hidden';
    }
XhmikosR's avatar
XhmikosR committed
2930

XhmikosR's avatar
XhmikosR committed
2931
    this._element.classList.add(CLASS_NAME_STATIC);
XhmikosR's avatar
XhmikosR committed
2932

XhmikosR's avatar
XhmikosR committed
2933
2934
2935
2936
    var modalTransitionDuration = getTransitionDurationFromElement(this._dialog);
    EventHandler.off(this._element, TRANSITION_END);
    EventHandler.one(this._element, TRANSITION_END, function () {
      _this9._element.classList.remove(CLASS_NAME_STATIC);
XhmikosR's avatar
XhmikosR committed
2937

XhmikosR's avatar
XhmikosR committed
2938
2939
2940
2941
2942
2943
2944
2945
      if (!isModalOverflowing) {
        EventHandler.one(_this9._element, TRANSITION_END, function () {
          _this9._element.style.overflowY = '';
        });
        emulateTransitionEnd(_this9._element, modalTransitionDuration);
      }
    });
    emulateTransitionEnd(this._element, modalTransitionDuration);
XhmikosR's avatar
XhmikosR committed
2946

XhmikosR's avatar
XhmikosR committed
2947
    this._element.focus();
XhmikosR's avatar
Dist.  
XhmikosR committed
2948
2949
2950
  } // ----------------------------------------------------------------------
  // the following methods are used to handle overflowing modals
  // ----------------------------------------------------------------------
XhmikosR's avatar
XhmikosR committed
2951
  ;
XhmikosR's avatar
Dist.  
XhmikosR committed
2952

XhmikosR's avatar
XhmikosR committed
2953
2954
  _proto._adjustDialog = function _adjustDialog() {
    var isModalOverflowing = this._element.scrollHeight > document.documentElement.clientHeight;
XhmikosR's avatar
Dist.  
XhmikosR committed
2955
2956

    if (!this._isBodyOverflowing && isModalOverflowing) {
XhmikosR's avatar
XhmikosR committed
2957
      this._element.style.paddingLeft = this._scrollbarWidth + "px";
XhmikosR's avatar
Dist.  
XhmikosR committed
2958
2959
2960
    }

    if (this._isBodyOverflowing && !isModalOverflowing) {
XhmikosR's avatar
XhmikosR committed
2961
      this._element.style.paddingRight = this._scrollbarWidth + "px";
XhmikosR's avatar
Dist.  
XhmikosR committed
2962
    }
XhmikosR's avatar
XhmikosR committed
2963
  };
XhmikosR's avatar
Dist.  
XhmikosR committed
2964

XhmikosR's avatar
XhmikosR committed
2965
  _proto._resetAdjustments = function _resetAdjustments() {
XhmikosR's avatar
Dist.  
XhmikosR committed
2966
2967
    this._element.style.paddingLeft = '';
    this._element.style.paddingRight = '';
XhmikosR's avatar
XhmikosR committed
2968
  };
XhmikosR's avatar
Dist.  
XhmikosR committed
2969

XhmikosR's avatar
XhmikosR committed
2970
2971
  _proto._checkScrollbar = function _checkScrollbar() {
    var rect = document.body.getBoundingClientRect();
XhmikosR's avatar
XhmikosR committed
2972
    this._isBodyOverflowing = Math.round(rect.left + rect.right) < window.innerWidth;
XhmikosR's avatar
Dist.  
XhmikosR committed
2973
    this._scrollbarWidth = this._getScrollbarWidth();
XhmikosR's avatar
XhmikosR committed
2974
2975
2976
  };

  _proto._setScrollbar = function _setScrollbar() {
XhmikosR's avatar
XhmikosR committed
2977
    var _this10 = this;
XhmikosR's avatar
Dist.  
XhmikosR committed
2978
2979
2980
2981
2982

    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
      // Adjust fixed content padding
XhmikosR's avatar
XhmikosR committed
2983
      SelectorEngine.find(SELECTOR_FIXED_CONTENT).forEach(function (element) {
XhmikosR's avatar
XhmikosR committed
2984
2985
        var actualPadding = element.style.paddingRight;
        var calculatedPadding = window.getComputedStyle(element)['padding-right'];
XhmikosR's avatar
Dist.  
XhmikosR committed
2986
        Manipulator.setDataAttribute(element, 'padding-right', actualPadding);
XhmikosR's avatar
XhmikosR committed
2987
        element.style.paddingRight = Number.parseFloat(calculatedPadding) + _this10._scrollbarWidth + "px";
XhmikosR's avatar
Dist.  
XhmikosR committed
2988
2989
      }); // Adjust sticky content margin

XhmikosR's avatar
XhmikosR committed
2990
      SelectorEngine.find(SELECTOR_STICKY_CONTENT).forEach(function (element) {
XhmikosR's avatar
XhmikosR committed
2991
2992
        var actualMargin = element.style.marginRight;
        var calculatedMargin = window.getComputedStyle(element)['margin-right'];
XhmikosR's avatar
Dist.  
XhmikosR committed
2993
        Manipulator.setDataAttribute(element, 'margin-right', actualMargin);
XhmikosR's avatar
XhmikosR committed
2994
        element.style.marginRight = Number.parseFloat(calculatedMargin) - _this10._scrollbarWidth + "px";
XhmikosR's avatar
Dist.  
XhmikosR committed
2995
2996
      }); // Adjust body padding

XhmikosR's avatar
XhmikosR committed
2997
2998
      var actualPadding = document.body.style.paddingRight;
      var calculatedPadding = window.getComputedStyle(document.body)['padding-right'];
XhmikosR's avatar
Dist.  
XhmikosR committed
2999
      Manipulator.setDataAttribute(document.body, 'padding-right', actualPadding);
XhmikosR's avatar
XhmikosR committed
3000
      document.body.style.paddingRight = Number.parseFloat(calculatedPadding) + this._scrollbarWidth + "px";
For faster browsing, not all history is shown. View entire blame