bootstrap.esm.js 142 KB
Newer Older
XhmikosR's avatar
XhmikosR committed
2001
  Collapse.collapseInterface = function collapseInterface(element, config) {
XhmikosR's avatar
XhmikosR committed
2002
    var data = Data.getData(element, DATA_KEY$3);
XhmikosR's avatar
Dist.  
XhmikosR committed
2003

XhmikosR's avatar
XhmikosR committed
2004
    var _config = _objectSpread2(_objectSpread2(_objectSpread2({}, Default$1), Manipulator.getDataAttributes(element)), typeof config === 'object' && config ? config : {});
XhmikosR's avatar
Dist.  
XhmikosR committed
2005

XhmikosR's avatar
XhmikosR committed
2006
    if (!data && _config.toggle && typeof config === 'string' && /show|hide/.test(config)) {
XhmikosR's avatar
Dist.  
XhmikosR committed
2007
2008
2009
2010
2011
2012
2013
2014
2015
      _config.toggle = false;
    }

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

    if (typeof config === 'string') {
      if (typeof data[config] === 'undefined') {
XhmikosR's avatar
XhmikosR committed
2016
        throw new TypeError("No method named \"" + config + "\"");
XhmikosR's avatar
Dist.  
XhmikosR committed
2017
2018
2019
2020
      }

      data[config]();
    }
XhmikosR's avatar
XhmikosR committed
2021
  };
XhmikosR's avatar
Dist.  
XhmikosR committed
2022

XhmikosR's avatar
XhmikosR committed
2023
  Collapse.jQueryInterface = function jQueryInterface(config) {
XhmikosR's avatar
Dist.  
XhmikosR committed
2024
    return this.each(function () {
XhmikosR's avatar
XhmikosR committed
2025
      Collapse.collapseInterface(this, config);
XhmikosR's avatar
Dist.  
XhmikosR committed
2026
    });
XhmikosR's avatar
XhmikosR committed
2027
  };
XhmikosR's avatar
Dist.  
XhmikosR committed
2028

XhmikosR's avatar
XhmikosR committed
2029
  Collapse.getInstance = function getInstance(element) {
XhmikosR's avatar
Dist.  
XhmikosR committed
2030
    return Data.getData(element, DATA_KEY$3);
XhmikosR's avatar
XhmikosR committed
2031
  };
XhmikosR's avatar
Dist.  
XhmikosR committed
2032

XhmikosR's avatar
XhmikosR committed
2033
2034
2035
2036
2037
2038
2039
2040
2041
2042
2043
2044
2045
2046
  _createClass(Collapse, null, [{
    key: "VERSION",
    get: function get() {
      return VERSION$3;
    }
  }, {
    key: "Default",
    get: function get() {
      return Default$1;
    }
  }]);

  return Collapse;
}();
XhmikosR's avatar
Dist.  
XhmikosR committed
2047
2048
2049
2050
2051
2052
2053
/**
 * ------------------------------------------------------------------------
 * Data Api implementation
 * ------------------------------------------------------------------------
 */


XhmikosR's avatar
XhmikosR committed
2054
EventHandler.on(document, EVENT_CLICK_DATA_API$3, SELECTOR_DATA_TOGGLE$1, function (event) {
XhmikosR's avatar
Dist.  
XhmikosR committed
2055
2056
2057
2058
2059
  // preventDefault only for <a> elements (which change the URL) not inside the collapsible element
  if (event.target.tagName === 'A') {
    event.preventDefault();
  }

XhmikosR's avatar
XhmikosR committed
2060
2061
  var triggerData = Manipulator.getDataAttributes(this);
  var selector = getSelectorFromElement(this);
XhmikosR's avatar
XhmikosR committed
2062
  var selectorElements = SelectorEngine.find(selector);
XhmikosR's avatar
XhmikosR committed
2063
2064
2065
  selectorElements.forEach(function (element) {
    var data = Data.getData(element, DATA_KEY$3);
    var config;
XhmikosR's avatar
Dist.  
XhmikosR committed
2066
2067
2068
2069
2070
2071
2072
2073
2074
2075
2076
2077
2078

    if (data) {
      // update parent attribute
      if (data._parent === null && typeof triggerData.parent === 'string') {
        data._config.parent = triggerData.parent;
        data._parent = data._getParent();
      }

      config = 'toggle';
    } else {
      config = triggerData;
    }

XhmikosR's avatar
XhmikosR committed
2079
    Collapse.collapseInterface(element, config);
XhmikosR's avatar
Dist.  
XhmikosR committed
2080
2081
  });
});
XhmikosR's avatar
XhmikosR committed
2082
var $$4 = getjQuery();
XhmikosR's avatar
Dist.  
XhmikosR committed
2083
2084
2085
2086
2087
2088
2089
/**
 * ------------------------------------------------------------------------
 * jQuery
 * ------------------------------------------------------------------------
 * add .collapse to jQuery only if jQuery is present
 */

2090
2091
/* istanbul ignore if */

XhmikosR's avatar
XhmikosR committed
2092
2093
2094
2095
if ($$4) {
  var JQUERY_NO_CONFLICT$3 = $$4.fn[NAME$3];
  $$4.fn[NAME$3] = Collapse.jQueryInterface;
  $$4.fn[NAME$3].Constructor = Collapse;
XhmikosR's avatar
Dist.  
XhmikosR committed
2096

XhmikosR's avatar
XhmikosR committed
2097
2098
2099
  $$4.fn[NAME$3].noConflict = function () {
    $$4.fn[NAME$3] = JQUERY_NO_CONFLICT$3;
    return Collapse.jQueryInterface;
XhmikosR's avatar
Dist.  
XhmikosR committed
2100
2101
2102
2103
2104
2105
2106
2107
2108
  };
}

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

XhmikosR's avatar
XhmikosR committed
2109
var NAME$4 = 'dropdown';
2110
var VERSION$4 = '5.0.0-alpha1';
XhmikosR's avatar
XhmikosR committed
2111
2112
2113
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
2114
2115
2116
2117
2118
2119
2120
2121
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
2122
2123
2124
2125
2126
2127
2128
2129
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
2130
var CLASS_NAME_DISABLED = 'disabled';
XhmikosR's avatar
XhmikosR committed
2131
2132
2133
2134
2135
2136
2137
2138
2139
2140
2141
2142
2143
2144
2145
2146
2147
2148
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';
var SELECTOR_DATA_TOGGLE$2 = '[data-toggle="dropdown"]';
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
2149
var Default$2 = {
XhmikosR's avatar
Dist.  
XhmikosR committed
2150
2151
2152
2153
  offset: 0,
  flip: true,
  boundary: 'scrollParent',
  reference: 'toggle',
XhmikosR's avatar
XhmikosR committed
2154
2155
  display: 'dynamic',
  popperConfig: null
XhmikosR's avatar
Dist.  
XhmikosR committed
2156
};
XhmikosR's avatar
XhmikosR committed
2157
var DefaultType$2 = {
XhmikosR's avatar
Dist.  
XhmikosR committed
2158
2159
2160
2161
  offset: '(number|string|function)',
  flip: 'boolean',
  boundary: '(string|element)',
  reference: '(string|element)',
XhmikosR's avatar
XhmikosR committed
2162
2163
  display: 'string',
  popperConfig: '(null|object)'
XhmikosR's avatar
Dist.  
XhmikosR committed
2164
};
XhmikosR's avatar
XhmikosR committed
2165
2166
2167
2168
2169
/**
 * ------------------------------------------------------------------------
 * Class Definition
 * ------------------------------------------------------------------------
 */
XhmikosR's avatar
Dist.  
XhmikosR committed
2170

XhmikosR's avatar
XhmikosR committed
2171
var Dropdown = /*#__PURE__*/function () {
XhmikosR's avatar
XhmikosR committed
2172
  function Dropdown(element, config) {
XhmikosR's avatar
Dist.  
XhmikosR committed
2173
2174
2175
2176
2177
2178
2179
2180
2181
2182
2183
2184
    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
2185
  var _proto = Dropdown.prototype;
XhmikosR's avatar
Dist.  
XhmikosR committed
2186

XhmikosR's avatar
XhmikosR committed
2187
2188
  // Public
  _proto.toggle = function toggle() {
XhmikosR's avatar
XhmikosR committed
2189
    if (this._element.disabled || this._element.classList.contains(CLASS_NAME_DISABLED)) {
XhmikosR's avatar
Dist.  
XhmikosR committed
2190
2191
2192
      return;
    }

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

XhmikosR's avatar
XhmikosR committed
2195
    Dropdown.clearMenus();
XhmikosR's avatar
Dist.  
XhmikosR committed
2196
2197
2198
2199
2200

    if (isActive) {
      return;
    }

XhmikosR's avatar
XhmikosR committed
2201
2202
2203
2204
    this.show();
  };

  _proto.show = function show() {
XhmikosR's avatar
XhmikosR committed
2205
    if (this._element.disabled || this._element.classList.contains(CLASS_NAME_DISABLED) || this._menu.classList.contains(CLASS_NAME_SHOW$1)) {
XhmikosR's avatar
XhmikosR committed
2206
2207
2208
2209
      return;
    }

    var parent = Dropdown.getParentFromElement(this._element);
XhmikosR's avatar
XhmikosR committed
2210
    var relatedTarget = {
XhmikosR's avatar
Dist.  
XhmikosR committed
2211
2212
      relatedTarget: this._element
    };
XhmikosR's avatar
XhmikosR committed
2213
    var showEvent = EventHandler.trigger(this._element, EVENT_SHOW$1, relatedTarget);
XhmikosR's avatar
Dist.  
XhmikosR committed
2214
2215
2216
2217
2218
2219
2220
2221
2222
2223
2224

    if (showEvent.defaultPrevented) {
      return;
    } // Disable totally Popper.js for Dropdown in Navbar


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

XhmikosR's avatar
XhmikosR committed
2225
      var referenceElement = this._element;
XhmikosR's avatar
Dist.  
XhmikosR committed
2226
2227
2228
2229
2230
2231
2232
2233
2234
2235
2236
2237
2238
2239
2240

      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
2241
        parent.classList.add(CLASS_NAME_POSITION_STATIC);
XhmikosR's avatar
Dist.  
XhmikosR committed
2242
2243
2244
2245
2246
2247
2248
2249
2250
      }

      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
2251
    if ('ontouchstart' in document.documentElement && !parent.closest(SELECTOR_NAVBAR_NAV)) {
XhmikosR's avatar
XhmikosR committed
2252
2253
2254
      var _ref;

      (_ref = []).concat.apply(_ref, document.body.children).forEach(function (elem) {
XhmikosR's avatar
XhmikosR committed
2255
2256
        return EventHandler.on(elem, 'mouseover', null, noop());
      });
XhmikosR's avatar
Dist.  
XhmikosR committed
2257
2258
2259
2260
2261
2262
    }

    this._element.focus();

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

XhmikosR's avatar
XhmikosR committed
2263
2264
2265
    Manipulator.toggleClass(this._menu, CLASS_NAME_SHOW$1);
    Manipulator.toggleClass(this._element, CLASS_NAME_SHOW$1);
    EventHandler.trigger(parent, EVENT_SHOWN$1, relatedTarget);
XhmikosR's avatar
XhmikosR committed
2266
  };
XhmikosR's avatar
Dist.  
XhmikosR committed
2267

XhmikosR's avatar
XhmikosR committed
2268
  _proto.hide = function hide() {
XhmikosR's avatar
XhmikosR committed
2269
    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
2270
2271
2272
      return;
    }

XhmikosR's avatar
XhmikosR committed
2273
    var parent = Dropdown.getParentFromElement(this._element);
XhmikosR's avatar
XhmikosR committed
2274
    var relatedTarget = {
XhmikosR's avatar
Dist.  
XhmikosR committed
2275
2276
      relatedTarget: this._element
    };
XhmikosR's avatar
XhmikosR committed
2277
    var hideEvent = EventHandler.trigger(parent, EVENT_HIDE$1, relatedTarget);
XhmikosR's avatar
Dist.  
XhmikosR committed
2278
2279
2280
2281
2282

    if (hideEvent.defaultPrevented) {
      return;
    }

XhmikosR's avatar
XhmikosR committed
2283
2284
2285
2286
    if (this._popper) {
      this._popper.destroy();
    }

XhmikosR's avatar
XhmikosR committed
2287
2288
2289
    Manipulator.toggleClass(this._menu, CLASS_NAME_SHOW$1);
    Manipulator.toggleClass(this._element, CLASS_NAME_SHOW$1);
    EventHandler.trigger(parent, EVENT_HIDDEN$1, relatedTarget);
XhmikosR's avatar
XhmikosR committed
2290
  };
XhmikosR's avatar
Dist.  
XhmikosR committed
2291

XhmikosR's avatar
XhmikosR committed
2292
  _proto.dispose = function dispose() {
XhmikosR's avatar
Dist.  
XhmikosR committed
2293
2294
2295
2296
2297
    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
2298
    if (this._popper) {
XhmikosR's avatar
Dist.  
XhmikosR committed
2299
2300
2301
2302
      this._popper.destroy();

      this._popper = null;
    }
XhmikosR's avatar
XhmikosR committed
2303
  };
XhmikosR's avatar
Dist.  
XhmikosR committed
2304

XhmikosR's avatar
XhmikosR committed
2305
  _proto.update = function update() {
XhmikosR's avatar
Dist.  
XhmikosR committed
2306
2307
    this._inNavbar = this._detectNavbar();

XhmikosR's avatar
XhmikosR committed
2308
    if (this._popper) {
XhmikosR's avatar
Dist.  
XhmikosR committed
2309
2310
2311
      this._popper.scheduleUpdate();
    }
  } // Private
XhmikosR's avatar
XhmikosR committed
2312
  ;
XhmikosR's avatar
Dist.  
XhmikosR committed
2313

XhmikosR's avatar
XhmikosR committed
2314
2315
  _proto._addEventListeners = function _addEventListeners() {
    var _this = this;
XhmikosR's avatar
Dist.  
XhmikosR committed
2316

XhmikosR's avatar
XhmikosR committed
2317
    EventHandler.on(this._element, EVENT_CLICK, function (event) {
XhmikosR's avatar
Dist.  
XhmikosR committed
2318
2319
      event.preventDefault();
      event.stopPropagation();
XhmikosR's avatar
XhmikosR committed
2320
2321

      _this.toggle();
XhmikosR's avatar
Dist.  
XhmikosR committed
2322
    });
XhmikosR's avatar
XhmikosR committed
2323
  };
XhmikosR's avatar
Dist.  
XhmikosR committed
2324

XhmikosR's avatar
XhmikosR committed
2325
  _proto._getConfig = function _getConfig(config) {
XhmikosR's avatar
XhmikosR committed
2326
    config = _objectSpread2(_objectSpread2(_objectSpread2({}, this.constructor.Default), Manipulator.getDataAttributes(this._element)), config);
XhmikosR's avatar
Dist.  
XhmikosR committed
2327
2328
    typeCheckConfig(NAME$4, config, this.constructor.DefaultType);
    return config;
XhmikosR's avatar
XhmikosR committed
2329
  };
XhmikosR's avatar
Dist.  
XhmikosR committed
2330

XhmikosR's avatar
XhmikosR committed
2331
  _proto._getMenuElement = function _getMenuElement() {
XhmikosR's avatar
XhmikosR committed
2332
    return SelectorEngine.next(this._element, SELECTOR_MENU)[0];
XhmikosR's avatar
XhmikosR committed
2333
  };
XhmikosR's avatar
Dist.  
XhmikosR committed
2334

XhmikosR's avatar
XhmikosR committed
2335
2336
  _proto._getPlacement = function _getPlacement() {
    var parentDropdown = this._element.parentNode;
XhmikosR's avatar
XhmikosR committed
2337
    var placement = PLACEMENT_BOTTOM; // Handle dropup
XhmikosR's avatar
Dist.  
XhmikosR committed
2338

XhmikosR's avatar
XhmikosR committed
2339
2340
    if (parentDropdown.classList.contains(CLASS_NAME_DROPUP)) {
      placement = PLACEMENT_TOP;
XhmikosR's avatar
Dist.  
XhmikosR committed
2341

XhmikosR's avatar
XhmikosR committed
2342
2343
      if (this._menu.classList.contains(CLASS_NAME_MENURIGHT)) {
        placement = PLACEMENT_TOPEND;
XhmikosR's avatar
Dist.  
XhmikosR committed
2344
      }
XhmikosR's avatar
XhmikosR committed
2345
2346
2347
2348
2349
2350
    } 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
2351
2352
2353
    }

    return placement;
XhmikosR's avatar
XhmikosR committed
2354
  };
XhmikosR's avatar
Dist.  
XhmikosR committed
2355

XhmikosR's avatar
XhmikosR committed
2356
  _proto._detectNavbar = function _detectNavbar() {
XhmikosR's avatar
XhmikosR committed
2357
    return Boolean(this._element.closest("." + CLASS_NAME_NAVBAR));
XhmikosR's avatar
XhmikosR committed
2358
  };
XhmikosR's avatar
Dist.  
XhmikosR committed
2359

XhmikosR's avatar
XhmikosR committed
2360
2361
2362
2363
  _proto._getOffset = function _getOffset() {
    var _this2 = this;

    var offset = {};
XhmikosR's avatar
Dist.  
XhmikosR committed
2364
2365

    if (typeof this._config.offset === 'function') {
XhmikosR's avatar
XhmikosR committed
2366
      offset.fn = function (data) {
XhmikosR's avatar
XhmikosR committed
2367
        data.offsets = _objectSpread2(_objectSpread2({}, data.offsets), _this2._config.offset(data.offsets, _this2._element) || {});
XhmikosR's avatar
Dist.  
XhmikosR committed
2368
2369
2370
2371
2372
2373
2374
        return data;
      };
    } else {
      offset.offset = this._config.offset;
    }

    return offset;
XhmikosR's avatar
XhmikosR committed
2375
  };
XhmikosR's avatar
Dist.  
XhmikosR committed
2376

XhmikosR's avatar
XhmikosR committed
2377
2378
  _proto._getPopperConfig = function _getPopperConfig() {
    var popperConfig = {
XhmikosR's avatar
Dist.  
XhmikosR committed
2379
2380
2381
2382
2383
2384
2385
2386
2387
      placement: this._getPlacement(),
      modifiers: {
        offset: this._getOffset(),
        flip: {
          enabled: this._config.flip
        },
        preventOverflow: {
          boundariesElement: this._config.boundary
        }
XhmikosR's avatar
XhmikosR committed
2388
2389
      }
    }; // Disable Popper.js if we have a static display
XhmikosR's avatar
Dist.  
XhmikosR committed
2390
2391
2392
2393
2394
2395
2396

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

XhmikosR's avatar
XhmikosR committed
2397
    return _objectSpread2(_objectSpread2({}, popperConfig), this._config.popperConfig);
XhmikosR's avatar
Dist.  
XhmikosR committed
2398
  } // Static
XhmikosR's avatar
XhmikosR committed
2399
  ;
XhmikosR's avatar
Dist.  
XhmikosR committed
2400

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

XhmikosR's avatar
XhmikosR committed
2404
    var _config = typeof config === 'object' ? config : null;
XhmikosR's avatar
Dist.  
XhmikosR committed
2405
2406
2407
2408
2409
2410
2411

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

    if (typeof config === 'string') {
      if (typeof data[config] === 'undefined') {
XhmikosR's avatar
XhmikosR committed
2412
        throw new TypeError("No method named \"" + config + "\"");
XhmikosR's avatar
Dist.  
XhmikosR committed
2413
2414
2415
2416
      }

      data[config]();
    }
XhmikosR's avatar
XhmikosR committed
2417
  };
XhmikosR's avatar
Dist.  
XhmikosR committed
2418

XhmikosR's avatar
XhmikosR committed
2419
  Dropdown.jQueryInterface = function jQueryInterface(config) {
XhmikosR's avatar
Dist.  
XhmikosR committed
2420
    return this.each(function () {
XhmikosR's avatar
XhmikosR committed
2421
      Dropdown.dropdownInterface(this, config);
XhmikosR's avatar
Dist.  
XhmikosR committed
2422
    });
XhmikosR's avatar
XhmikosR committed
2423
  };
XhmikosR's avatar
Dist.  
XhmikosR committed
2424

XhmikosR's avatar
XhmikosR committed
2425
  Dropdown.clearMenus = function clearMenus(event) {
XhmikosR's avatar
XhmikosR committed
2426
    if (event && (event.button === RIGHT_MOUSE_BUTTON || event.type === 'keyup' && event.key !== TAB_KEY)) {
XhmikosR's avatar
Dist.  
XhmikosR committed
2427
2428
2429
      return;
    }

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

XhmikosR's avatar
XhmikosR committed
2432
    for (var i = 0, len = toggles.length; i < len; i++) {
XhmikosR's avatar
XhmikosR committed
2433
      var parent = Dropdown.getParentFromElement(toggles[i]);
XhmikosR's avatar
XhmikosR committed
2434
2435
      var context = Data.getData(toggles[i], DATA_KEY$4);
      var relatedTarget = {
XhmikosR's avatar
Dist.  
XhmikosR committed
2436
2437
2438
2439
2440
2441
2442
2443
2444
2445
2446
        relatedTarget: toggles[i]
      };

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

      if (!context) {
        continue;
      }

XhmikosR's avatar
XhmikosR committed
2447
      var dropdownMenu = context._menu;
XhmikosR's avatar
Dist.  
XhmikosR committed
2448

XhmikosR's avatar
XhmikosR committed
2449
      if (!toggles[i].classList.contains(CLASS_NAME_SHOW$1)) {
XhmikosR's avatar
Dist.  
XhmikosR committed
2450
2451
2452
        continue;
      }

XhmikosR's avatar
XhmikosR committed
2453
      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
2454
2455
2456
        continue;
      }

XhmikosR's avatar
XhmikosR committed
2457
      var hideEvent = EventHandler.trigger(parent, EVENT_HIDE$1, relatedTarget);
XhmikosR's avatar
Dist.  
XhmikosR committed
2458
2459
2460
2461
2462
2463
2464
2465

      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
2466
2467
2468
        var _ref2;

        (_ref2 = []).concat.apply(_ref2, document.body.children).forEach(function (elem) {
XhmikosR's avatar
XhmikosR committed
2469
2470
          return EventHandler.off(elem, 'mouseover', null, noop());
        });
XhmikosR's avatar
Dist.  
XhmikosR committed
2471
2472
2473
      }

      toggles[i].setAttribute('aria-expanded', 'false');
XhmikosR's avatar
XhmikosR committed
2474
2475
2476
2477
2478

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

XhmikosR's avatar
XhmikosR committed
2479
2480
2481
      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
2482
    }
XhmikosR's avatar
XhmikosR committed
2483
  };
XhmikosR's avatar
Dist.  
XhmikosR committed
2484

XhmikosR's avatar
XhmikosR committed
2485
2486
  Dropdown.getParentFromElement = function getParentFromElement(element) {
    return getElementFromSelector(element) || element.parentNode;
XhmikosR's avatar
XhmikosR committed
2487
  };
XhmikosR's avatar
Dist.  
XhmikosR committed
2488

XhmikosR's avatar
XhmikosR committed
2489
  Dropdown.dataApiKeydownHandler = function dataApiKeydownHandler(event) {
XhmikosR's avatar
Dist.  
XhmikosR committed
2490
2491
2492
2493
2494
2495
2496
    // 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
2497
    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
2498
2499
2500
2501
2502
2503
      return;
    }

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

XhmikosR's avatar
XhmikosR committed
2504
    if (this.disabled || this.classList.contains(CLASS_NAME_DISABLED)) {
XhmikosR's avatar
Dist.  
XhmikosR committed
2505
2506
2507
      return;
    }

XhmikosR's avatar
XhmikosR committed
2508
    var parent = Dropdown.getParentFromElement(this);
XhmikosR's avatar
XhmikosR committed
2509
    var isActive = this.classList.contains(CLASS_NAME_SHOW$1);
XhmikosR's avatar
Dist.  
XhmikosR committed
2510

XhmikosR's avatar
XhmikosR committed
2511
    if (event.key === ESCAPE_KEY) {
XhmikosR's avatar
XhmikosR committed
2512
2513
2514
2515
2516
      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
2517

XhmikosR's avatar
XhmikosR committed
2518
    if (!isActive || event.key === SPACE_KEY) {
XhmikosR's avatar
XhmikosR committed
2519
      Dropdown.clearMenus();
XhmikosR's avatar
Dist.  
XhmikosR committed
2520
2521
2522
      return;
    }

XhmikosR's avatar
XhmikosR committed
2523
    var items = SelectorEngine.find(SELECTOR_VISIBLE_ITEMS, parent).filter(isVisible);
XhmikosR's avatar
Dist.  
XhmikosR committed
2524
2525
2526
2527
2528

    if (!items.length) {
      return;
    }

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

XhmikosR's avatar
XhmikosR committed
2531
    if (event.key === ARROW_UP_KEY && index > 0) {
XhmikosR's avatar
Dist.  
XhmikosR committed
2532
2533
2534
2535
      // Up
      index--;
    }

XhmikosR's avatar
XhmikosR committed
2536
    if (event.key === ARROW_DOWN_KEY && index < items.length - 1) {
XhmikosR's avatar
Dist.  
XhmikosR committed
2537
2538
      // Down
      index++;
XhmikosR's avatar
XhmikosR committed
2539
2540
    } // index is -1 if the first keydown is an ArrowUp

XhmikosR's avatar
Dist.  
XhmikosR committed
2541

XhmikosR's avatar
XhmikosR committed
2542
    index = index === -1 ? 0 : index;
XhmikosR's avatar
Dist.  
XhmikosR committed
2543
    items[index].focus();
XhmikosR's avatar
XhmikosR committed
2544
  };
XhmikosR's avatar
Dist.  
XhmikosR committed
2545

XhmikosR's avatar
XhmikosR committed
2546
  Dropdown.getInstance = function getInstance(element) {
XhmikosR's avatar
Dist.  
XhmikosR committed
2547
    return Data.getData(element, DATA_KEY$4);
XhmikosR's avatar
XhmikosR committed
2548
  };
XhmikosR's avatar
Dist.  
XhmikosR committed
2549

XhmikosR's avatar
XhmikosR committed
2550
2551
2552
2553
2554
2555
2556
2557
2558
2559
2560
2561
2562
2563
2564
2565
2566
2567
2568
  _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
2569
2570
2571
2572
2573
2574
2575
/**
 * ------------------------------------------------------------------------
 * Data Api implementation
 * ------------------------------------------------------------------------
 */


XhmikosR's avatar
XhmikosR committed
2576
2577
2578
2579
2580
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
2581
2582
  event.preventDefault();
  event.stopPropagation();
XhmikosR's avatar
XhmikosR committed
2583
  Dropdown.dropdownInterface(this, 'toggle');
XhmikosR's avatar
Dist.  
XhmikosR committed
2584
});
XhmikosR's avatar
XhmikosR committed
2585
EventHandler.on(document, EVENT_CLICK_DATA_API$4, SELECTOR_FORM_CHILD, function (e) {
XhmikosR's avatar
XhmikosR committed
2586
2587
  return e.stopPropagation();
});
XhmikosR's avatar
XhmikosR committed
2588
var $$5 = getjQuery();
XhmikosR's avatar
Dist.  
XhmikosR committed
2589
2590
2591
2592
2593
2594
2595
/**
 * ------------------------------------------------------------------------
 * jQuery
 * ------------------------------------------------------------------------
 * add .dropdown to jQuery only if jQuery is present
 */

2596
2597
/* istanbul ignore if */

XhmikosR's avatar
XhmikosR committed
2598
2599
2600
2601
if ($$5) {
  var JQUERY_NO_CONFLICT$4 = $$5.fn[NAME$4];
  $$5.fn[NAME$4] = Dropdown.jQueryInterface;
  $$5.fn[NAME$4].Constructor = Dropdown;
XhmikosR's avatar
Dist.  
XhmikosR committed
2602

XhmikosR's avatar
XhmikosR committed
2603
2604
2605
  $$5.fn[NAME$4].noConflict = function () {
    $$5.fn[NAME$4] = JQUERY_NO_CONFLICT$4;
    return Dropdown.jQueryInterface;
XhmikosR's avatar
Dist.  
XhmikosR committed
2606
2607
2608
2609
2610
2611
2612
2613
2614
  };
}

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

XhmikosR's avatar
XhmikosR committed
2615
var NAME$5 = 'modal';
2616
var VERSION$5 = '5.0.0-alpha1';
XhmikosR's avatar
XhmikosR committed
2617
2618
2619
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
2620
var ESCAPE_KEY$1 = 'Escape';
XhmikosR's avatar
XhmikosR committed
2621
var Default$3 = {
XhmikosR's avatar
Dist.  
XhmikosR committed
2622
2623
2624
2625
2626
  backdrop: true,
  keyboard: true,
  focus: true,
  show: true
};
XhmikosR's avatar
XhmikosR committed
2627
var DefaultType$3 = {
XhmikosR's avatar
Dist.  
XhmikosR committed
2628
2629
2630
2631
2632
  backdrop: '(boolean|string)',
  keyboard: 'boolean',
  focus: 'boolean',
  show: 'boolean'
};
XhmikosR's avatar
XhmikosR committed
2633
2634
2635
2636
2637
2638
2639
2640
2641
2642
2643
2644
2645
2646
2647
2648
2649
2650
2651
2652
2653
2654
2655
2656
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';
var SELECTOR_DATA_TOGGLE$3 = '[data-toggle="modal"]';
var SELECTOR_DATA_DISMISS = '[data-dismiss="modal"]';
var SELECTOR_FIXED_CONTENT = '.fixed-top, .fixed-bottom, .is-fixed, .sticky-top';
var SELECTOR_STICKY_CONTENT = '.sticky-top';
XhmikosR's avatar
XhmikosR committed
2657
2658
2659
2660
2661
/**
 * ------------------------------------------------------------------------
 * Class Definition
 * ------------------------------------------------------------------------
 */
XhmikosR's avatar
Dist.  
XhmikosR committed
2662

XhmikosR's avatar
XhmikosR committed
2663
var Modal = /*#__PURE__*/function () {
XhmikosR's avatar
XhmikosR committed
2664
  function Modal(element, config) {
XhmikosR's avatar
Dist.  
XhmikosR committed
2665
2666
    this._config = this._getConfig(config);
    this._element = element;
XhmikosR's avatar
XhmikosR committed
2667
    this._dialog = SelectorEngine.findOne(SELECTOR_DIALOG, element);
XhmikosR's avatar
Dist.  
XhmikosR committed
2668
2669
2670
2671
2672
2673
2674
2675
2676
2677
    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
2678
  var _proto = Modal.prototype;
XhmikosR's avatar
Dist.  
XhmikosR committed
2679

XhmikosR's avatar
XhmikosR committed
2680
2681
  // Public
  _proto.toggle = function toggle(relatedTarget) {
XhmikosR's avatar
Dist.  
XhmikosR committed
2682
    return this._isShown ? this.hide() : this.show(relatedTarget);
XhmikosR's avatar
XhmikosR committed
2683
2684
2685
2686
  };

  _proto.show = function show(relatedTarget) {
    var _this = this;
XhmikosR's avatar
Dist.  
XhmikosR committed
2687
2688
2689
2690
2691

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

XhmikosR's avatar
XhmikosR committed
2692
    if (this._element.classList.contains(CLASS_NAME_FADE)) {
XhmikosR's avatar
Dist.  
XhmikosR committed
2693
2694
2695
      this._isTransitioning = true;
    }

XhmikosR's avatar
XhmikosR committed
2696
    var showEvent = EventHandler.trigger(this._element, EVENT_SHOW$2, {
XhmikosR's avatar
XhmikosR committed
2697
      relatedTarget: relatedTarget
XhmikosR's avatar
Dist.  
XhmikosR committed
2698
2699
2700
2701
2702
2703
2704
2705
2706
2707
2708
2709
2710
2711
2712
2713
2714
2715
    });

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

    this._isShown = true;

    this._checkScrollbar();

    this._setScrollbar();

    this._adjustDialog();

    this._setEscapeEvent();

    this._setResizeEvent();

XhmikosR's avatar
XhmikosR committed
2716
    EventHandler.on(this._element, EVENT_CLICK_DISMISS, SELECTOR_DATA_DISMISS, function (event) {
XhmikosR's avatar
XhmikosR committed
2717
2718
      return _this.hide(event);
    });
XhmikosR's avatar
XhmikosR committed
2719
2720
    EventHandler.on(this._dialog, EVENT_MOUSEDOWN_DISMISS, function () {
      EventHandler.one(_this._element, EVENT_MOUSEUP_DISMISS, function (event) {
XhmikosR's avatar
XhmikosR committed
2721
2722
        if (event.target === _this._element) {
          _this._ignoreBackdropClick = true;
XhmikosR's avatar
Dist.  
XhmikosR committed
2723
2724
2725
2726
        }
      });
    });

XhmikosR's avatar
XhmikosR committed
2727
2728
2729
2730
2731
2732
2733
    this._showBackdrop(function () {
      return _this._showElement(relatedTarget);
    });
  };

  _proto.hide = function hide(event) {
    var _this2 = this;
XhmikosR's avatar
Dist.  
XhmikosR committed
2734
2735
2736
2737
2738
2739
2740
2741
2742

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

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

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

2745
    if (hideEvent.defaultPrevented) {
XhmikosR's avatar
Dist.  
XhmikosR committed
2746
2747
2748
2749
2750
      return;
    }

    this._isShown = false;

XhmikosR's avatar
XhmikosR committed
2751
    var transition = this._element.classList.contains(CLASS_NAME_FADE);
XhmikosR's avatar
Dist.  
XhmikosR committed
2752
2753
2754
2755
2756
2757
2758
2759
2760

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

    this._setEscapeEvent();

    this._setResizeEvent();

XhmikosR's avatar
XhmikosR committed
2761
    EventHandler.off(document, EVENT_FOCUSIN);
XhmikosR's avatar
Dist.  
XhmikosR committed
2762

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

XhmikosR's avatar
XhmikosR committed
2765
2766
    EventHandler.off(this._element, EVENT_CLICK_DISMISS);
    EventHandler.off(this._dialog, EVENT_MOUSEDOWN_DISMISS);
XhmikosR's avatar
Dist.  
XhmikosR committed
2767
2768

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

XhmikosR's avatar
XhmikosR committed
2779
2780
2781
2782
  _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
2783
    /**
XhmikosR's avatar
XhmikosR committed
2784
     * `document` has 2 events `EVENT_FOCUSIN` and `EVENT_CLICK_DATA_API`
XhmikosR's avatar
Dist.  
XhmikosR committed
2785
     * Do not move `document` in `htmlElements` array
XhmikosR's avatar
XhmikosR committed
2786
     * It will remove `EVENT_CLICK_DATA_API` event that should remain
XhmikosR's avatar
Dist.  
XhmikosR committed
2787
2788
     */

XhmikosR's avatar
XhmikosR committed
2789
    EventHandler.off(document, EVENT_FOCUSIN);
XhmikosR's avatar
Dist.  
XhmikosR committed
2790
2791
2792
2793
2794
2795
2796
2797
2798
2799
    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
2800
  };
XhmikosR's avatar
Dist.  
XhmikosR committed
2801

XhmikosR's avatar
XhmikosR committed
2802
  _proto.handleUpdate = function handleUpdate() {
XhmikosR's avatar
Dist.  
XhmikosR committed
2803
2804
    this._adjustDialog();
  } // Private
XhmikosR's avatar
XhmikosR committed
2805
  ;
XhmikosR's avatar
Dist.  
XhmikosR committed
2806

XhmikosR's avatar
XhmikosR committed
2807
  _proto._getConfig = function _getConfig(config) {
XhmikosR's avatar
XhmikosR committed
2808
    config = _objectSpread2(_objectSpread2({}, Default$3), config);
XhmikosR's avatar
Dist.  
XhmikosR committed
2809
2810
    typeCheckConfig(NAME$5, config, DefaultType$3);
    return config;
XhmikosR's avatar
XhmikosR committed
2811
2812
2813
2814
  };

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

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

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

XhmikosR's avatar
Dist.  
XhmikosR committed
2820
2821
2822
2823
2824
2825
2826
2827
2828
2829
2830
    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
2831
2832
    this._element.setAttribute('role', 'dialog');

XhmikosR's avatar
XhmikosR committed
2833
2834
2835
    this._element.scrollTop = 0;

    if (modalBody) {
XhmikosR's avatar
XhmikosR committed
2836
      modalBody.scrollTop = 0;
XhmikosR's avatar
Dist.  
XhmikosR committed
2837
2838
2839
2840
2841
2842
    }

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

XhmikosR's avatar
XhmikosR committed
2843
    this._element.classList.add(CLASS_NAME_SHOW$2);
XhmikosR's avatar
Dist.  
XhmikosR committed
2844
2845
2846
2847
2848

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

XhmikosR's avatar
XhmikosR committed
2849
2850
2851
    var transitionComplete = function transitionComplete() {
      if (_this3._config.focus) {
        _this3._element.focus();
XhmikosR's avatar
Dist.  
XhmikosR committed
2852
2853
      }

XhmikosR's avatar
XhmikosR committed
2854
      _this3._isTransitioning = false;
XhmikosR's avatar
XhmikosR committed
2855
      EventHandler.trigger(_this3._element, EVENT_SHOWN$2, {
XhmikosR's avatar
XhmikosR committed
2856
        relatedTarget: relatedTarget
XhmikosR's avatar
Dist.  
XhmikosR committed
2857
2858
2859
2860
      });
    };

    if (transition) {
XhmikosR's avatar
XhmikosR committed
2861
      var transitionDuration = getTransitionDurationFromElement(this._dialog);
XhmikosR's avatar
Dist.  
XhmikosR committed
2862
2863
2864
2865
2866
      EventHandler.one(this._dialog, TRANSITION_END, transitionComplete);
      emulateTransitionEnd(this._dialog, transitionDuration);
    } else {
      transitionComplete();
    }
XhmikosR's avatar
XhmikosR committed
2867
2868
2869
2870
  };

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

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

XhmikosR's avatar
XhmikosR committed
2874
    EventHandler.on(document, EVENT_FOCUSIN, function (event) {
XhmikosR's avatar
XhmikosR committed
2875
2876
      if (document !== event.target && _this4._element !== event.target && !_this4._element.contains(event.target)) {
        _this4._element.focus();
XhmikosR's avatar
Dist.  
XhmikosR committed
2877
2878
      }
    });
XhmikosR's avatar
XhmikosR committed
2879
2880
2881
2882
  };

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

XhmikosR's avatar
XhmikosR committed
2884
2885
    if (this._isShown) {
      EventHandler.on(this._element, EVENT_KEYDOWN_DISMISS, function (event) {
XhmikosR's avatar
XhmikosR committed
2886
        if (_this5._config.keyboard && event.key === ESCAPE_KEY$1) {
XhmikosR's avatar
XhmikosR committed
2887
2888
2889
          event.preventDefault();

          _this5.hide();
XhmikosR's avatar
XhmikosR committed
2890
        } else if (!_this5._config.keyboard && event.key === ESCAPE_KEY$1) {
XhmikosR's avatar
XhmikosR committed
2891
          _this5._triggerBackdropTransition();
XhmikosR's avatar
Dist.  
XhmikosR committed
2892
2893
        }
      });
2894
    } else {
XhmikosR's avatar
XhmikosR committed
2895
      EventHandler.off(this._element, EVENT_KEYDOWN_DISMISS);
XhmikosR's avatar
Dist.  
XhmikosR committed
2896
    }
XhmikosR's avatar
XhmikosR committed
2897
2898
2899
2900
  };

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

    if (this._isShown) {
XhmikosR's avatar
XhmikosR committed
2903
      EventHandler.on(window, EVENT_RESIZE, function () {
2904
        return _this6._adjustDialog();
XhmikosR's avatar
XhmikosR committed
2905
      });
XhmikosR's avatar
Dist.  
XhmikosR committed
2906
    } else {
XhmikosR's avatar
XhmikosR committed
2907
      EventHandler.off(window, EVENT_RESIZE);
XhmikosR's avatar
Dist.  
XhmikosR committed
2908
    }
XhmikosR's avatar
XhmikosR committed
2909
2910
2911
2912
  };

  _proto._hideModal = function _hideModal() {
    var _this7 = this;
XhmikosR's avatar
Dist.  
XhmikosR committed
2913
2914
2915
2916
2917
2918
2919

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

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

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

Mark Otto's avatar
Mark Otto committed
2920
2921
    this._element.removeAttribute('role');

XhmikosR's avatar
Dist.  
XhmikosR committed
2922
2923
    this._isTransitioning = false;

XhmikosR's avatar
XhmikosR committed
2924
    this._showBackdrop(function () {
XhmikosR's avatar
XhmikosR committed
2925
      document.body.classList.remove(CLASS_NAME_OPEN);
XhmikosR's avatar
Dist.  
XhmikosR committed
2926

XhmikosR's avatar
XhmikosR committed
2927
      _this7._resetAdjustments();
XhmikosR's avatar
Dist.  
XhmikosR committed
2928

XhmikosR's avatar
XhmikosR committed
2929
      _this7._resetScrollbar();
XhmikosR's avatar
Dist.  
XhmikosR committed
2930

XhmikosR's avatar
XhmikosR committed
2931
      EventHandler.trigger(_this7._element, EVENT_HIDDEN$2);
XhmikosR's avatar
Dist.  
XhmikosR committed
2932
    });
XhmikosR's avatar
XhmikosR committed
2933
  };
XhmikosR's avatar
Dist.  
XhmikosR committed
2934

XhmikosR's avatar
XhmikosR committed
2935
  _proto._removeBackdrop = function _removeBackdrop() {
2936
    this._backdrop.parentNode.removeChild(this._backdrop);
XhmikosR's avatar
Dist.  
XhmikosR committed
2937

2938
    this._backdrop = null;
XhmikosR's avatar
XhmikosR committed
2939
  };
XhmikosR's avatar
Dist.  
XhmikosR committed
2940

XhmikosR's avatar
XhmikosR committed
2941
2942
2943
  _proto._showBackdrop = function _showBackdrop(callback) {
    var _this8 = this;

XhmikosR's avatar
XhmikosR committed
2944
    var animate = this._element.classList.contains(CLASS_NAME_FADE) ? CLASS_NAME_FADE : '';
XhmikosR's avatar
Dist.  
XhmikosR committed
2945
2946
2947

    if (this._isShown && this._config.backdrop) {
      this._backdrop = document.createElement('div');
XhmikosR's avatar
XhmikosR committed
2948
      this._backdrop.className = CLASS_NAME_BACKDROP;
XhmikosR's avatar
Dist.  
XhmikosR committed
2949
2950
2951
2952
2953
2954

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

      document.body.appendChild(this._backdrop);
XhmikosR's avatar
XhmikosR committed
2955
      EventHandler.on(this._element, EVENT_CLICK_DISMISS, function (event) {
XhmikosR's avatar
XhmikosR committed
2956
2957
        if (_this8._ignoreBackdropClick) {
          _this8._ignoreBackdropClick = false;
XhmikosR's avatar
Dist.  
XhmikosR committed
2958
2959
2960
2961
2962
2963
2964
          return;
        }

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

XhmikosR's avatar
XhmikosR committed
2965
        _this8._triggerBackdropTransition();
XhmikosR's avatar
Dist.  
XhmikosR committed
2966
2967
2968
2969
2970
2971
      });

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

XhmikosR's avatar
XhmikosR committed
2972
      this._backdrop.classList.add(CLASS_NAME_SHOW$2);
XhmikosR's avatar
Dist.  
XhmikosR committed
2973
2974
2975
2976
2977
2978

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

XhmikosR's avatar
XhmikosR committed
2979
      var backdropTransitionDuration = getTransitionDurationFromElement(this._backdrop);
XhmikosR's avatar
Dist.  
XhmikosR committed
2980
2981
2982
      EventHandler.one(this._backdrop, TRANSITION_END, callback);
      emulateTransitionEnd(this._backdrop, backdropTransitionDuration);
    } else if (!this._isShown && this._backdrop) {
XhmikosR's avatar
XhmikosR committed
2983
      this._backdrop.classList.remove(CLASS_NAME_SHOW$2);
XhmikosR's avatar
Dist.  
XhmikosR committed
2984

XhmikosR's avatar
XhmikosR committed
2985
2986
      var callbackRemove = function callbackRemove() {
        _this8._removeBackdrop();
XhmikosR's avatar
Dist.  
XhmikosR committed
2987

2988
        callback();
XhmikosR's avatar
Dist.  
XhmikosR committed
2989
2990
      };

XhmikosR's avatar
XhmikosR committed
2991
      if (this._element.classList.contains(CLASS_NAME_FADE)) {
XhmikosR's avatar
XhmikosR committed
2992
2993
        var _backdropTransitionDuration = getTransitionDurationFromElement(this._backdrop);

XhmikosR's avatar
Dist.  
XhmikosR committed
2994
        EventHandler.one(this._backdrop, TRANSITION_END, callbackRemove);
XhmikosR's avatar
XhmikosR committed
2995
        emulateTransitionEnd(this._backdrop, _backdropTransitionDuration);
XhmikosR's avatar
Dist.  
XhmikosR committed
2996
2997
2998
      } else {
        callbackRemove();
      }
2999
    } else {
XhmikosR's avatar
Dist.  
XhmikosR committed
3000
      callback();
For faster browsing, not all history is shown. View entire blame