bootstrap.js 96.1 KB
Newer Older
1001
1002
1003
1004
1005
1006
1007
1008
1009
1010
1011
1012
1013
1014
1015
1016
1017
1018
1019
1020
1021
1022
1023
1024
1025
1026
1027
1028
1029
1030
1031
1032
1033
1034
1035
1036
 * Bootstrap (v4.0.0): collapse.js
 * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
 * --------------------------------------------------------------------------
 */

var Collapse = (function ($) {

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

  var NAME = 'collapse';
  var VERSION = '4.0.0';
  var DATA_KEY = 'bs.collapse';
  var EVENT_KEY = '.' + DATA_KEY;
  var DATA_API_KEY = '.data-api';
  var JQUERY_NO_CONFLICT = $.fn[NAME];
  var TRANSITION_DURATION = 600;

  var Default = {
    toggle: true,
    parent: ''
  };

  var DefaultType = {
    toggle: 'boolean',
    parent: 'string'
  };

  var Event = {
    SHOW: 'show' + EVENT_KEY,
    SHOWN: 'shown' + EVENT_KEY,
    HIDE: 'hide' + EVENT_KEY,
    HIDDEN: 'hidden' + EVENT_KEY,
Jacob Thornton's avatar
Jacob Thornton committed
1037
    CLICK_DATA_API: 'click' + EVENT_KEY + DATA_API_KEY
1038
1039
1040
1041
1042
1043
1044
1045
1046
1047
1048
1049
1050
1051
1052
1053
1054
1055
1056
1057
1058
1059
1060
1061
1062
1063
1064
1065
1066
1067
1068
1069
1070
1071
1072
1073
1074
1075
1076
  };

  var ClassName = {
    IN: 'in',
    COLLAPSE: 'collapse',
    COLLAPSING: 'collapsing',
    COLLAPSED: 'collapsed'
  };

  var Dimension = {
    WIDTH: 'width',
    HEIGHT: 'height'
  };

  var Selector = {
    ACTIVES: '.panel > .in, .panel > .collapsing',
    DATA_TOGGLE: '[data-toggle="collapse"]'
  };

  /**
   * ------------------------------------------------------------------------
   * Class Definition
   * ------------------------------------------------------------------------
   */

  var Collapse = (function () {
    function Collapse(element, config) {
      _classCallCheck(this, Collapse);

      this._isTransitioning = false;
      this._element = element;
      this._config = this._getConfig(config);
      this._triggerArray = $.makeArray($('[data-toggle="collapse"][href="#' + element.id + '"],' + ('[data-toggle="collapse"][data-target="#' + element.id + '"]')));

      this._parent = this._config.parent ? this._getParent() : null;

      if (!this._config.parent) {
        this._addAriaAndCollapsedClass(this._element, this._triggerArray);
      }
Mark Otto's avatar
Mark Otto committed
1077

1078
1079
1080
      if (this._config.toggle) {
        this.toggle();
      }
Mark Otto's avatar
Mark Otto committed
1081
1082
    }

Jacob Thornton's avatar
Jacob Thornton committed
1083
1084
1085
1086
1087
1088
1089
1090
    /**
     * ------------------------------------------------------------------------
     * Data Api implementation
     * ------------------------------------------------------------------------
     */

    // getters

1091
1092
    _createClass(Collapse, [{
      key: 'toggle',
Mark Otto's avatar
Mark Otto committed
1093

1094
      // public
Mark Otto's avatar
Mark Otto committed
1095

1096
1097
1098
1099
1100
1101
1102
1103
1104
1105
1106
1107
1108
1109
1110
      value: function toggle() {
        if ($(this._element).hasClass(ClassName.IN)) {
          this.hide();
        } else {
          this.show();
        }
      }
    }, {
      key: 'show',
      value: function show() {
        var _this4 = this;

        if (this._isTransitioning || $(this._element).hasClass(ClassName.IN)) {
          return;
        }
Mark Otto's avatar
Mark Otto committed
1111

1112
1113
        var actives = undefined;
        var activesData = undefined;
Mark Otto's avatar
Mark Otto committed
1114

1115
1116
1117
1118
1119
1120
        if (this._parent) {
          actives = $.makeArray($(Selector.ACTIVES));
          if (!actives.length) {
            actives = null;
          }
        }
Mark Otto's avatar
Mark Otto committed
1121

1122
1123
1124
1125
1126
1127
        if (actives) {
          activesData = $(actives).data(DATA_KEY);
          if (activesData && activesData._isTransitioning) {
            return;
          }
        }
Mark Otto's avatar
Mark Otto committed
1128

1129
1130
1131
1132
1133
        var startEvent = $.Event(Event.SHOW);
        $(this._element).trigger(startEvent);
        if (startEvent.isDefaultPrevented()) {
          return;
        }
Mark Otto's avatar
Mark Otto committed
1134

1135
1136
1137
1138
1139
1140
        if (actives) {
          Collapse._jQueryInterface.call($(actives), 'hide');
          if (!activesData) {
            $(actives).data(DATA_KEY, null);
          }
        }
Mark Otto's avatar
Mark Otto committed
1141

1142
        var dimension = this._getDimension();
Mark Otto's avatar
Mark Otto committed
1143

1144
        $(this._element).removeClass(ClassName.COLLAPSE).addClass(ClassName.COLLAPSING);
Mark Otto's avatar
Mark Otto committed
1145

1146
1147
        this._element.style[dimension] = 0;
        this._element.setAttribute('aria-expanded', true);
Mark Otto's avatar
Mark Otto committed
1148

1149
1150
1151
        if (this._triggerArray.length) {
          $(this._triggerArray).removeClass(ClassName.COLLAPSED).attr('aria-expanded', true);
        }
Mark Otto's avatar
Mark Otto committed
1152

1153
        this.setTransitioning(true);
Mark Otto's avatar
Mark Otto committed
1154

1155
1156
        var complete = function complete() {
          $(_this4._element).removeClass(ClassName.COLLAPSING).addClass(ClassName.COLLAPSE).addClass(ClassName.IN);
Mark Otto's avatar
Mark Otto committed
1157

1158
          _this4._element.style[dimension] = '';
Mark Otto's avatar
Mark Otto committed
1159

1160
          _this4.setTransitioning(false);
Mark Otto's avatar
Mark Otto committed
1161

1162
1163
          $(_this4._element).trigger(Event.SHOWN);
        };
Mark Otto's avatar
Mark Otto committed
1164

1165
1166
1167
1168
        if (!Util.supportsTransitionEnd()) {
          complete();
          return;
        }
Mark Otto's avatar
Mark Otto committed
1169

Mark Otto's avatar
Mark Otto committed
1170
1171
        var capitalizedDimension = dimension[0].toUpperCase() + dimension.slice(1);
        var scrollSize = 'scroll' + capitalizedDimension;
Mark Otto's avatar
Mark Otto committed
1172

1173
        $(this._element).one(Util.TRANSITION_END, complete).emulateTransitionEnd(TRANSITION_DURATION);
Mark Otto's avatar
Mark Otto committed
1174

1175
1176
1177
1178
1179
1180
        this._element.style[dimension] = this._element[scrollSize] + 'px';
      }
    }, {
      key: 'hide',
      value: function hide() {
        var _this5 = this;
Mark Otto's avatar
Mark Otto committed
1181

1182
1183
1184
        if (this._isTransitioning || !$(this._element).hasClass(ClassName.IN)) {
          return;
        }
Mark Otto's avatar
Mark Otto committed
1185

1186
1187
1188
1189
1190
        var startEvent = $.Event(Event.HIDE);
        $(this._element).trigger(startEvent);
        if (startEvent.isDefaultPrevented()) {
          return;
        }
Mark Otto's avatar
Mark Otto committed
1191

1192
1193
        var dimension = this._getDimension();
        var offsetDimension = dimension === Dimension.WIDTH ? 'offsetWidth' : 'offsetHeight';
Mark Otto's avatar
Mark Otto committed
1194

1195
        this._element.style[dimension] = this._element[offsetDimension] + 'px';
Mark Otto's avatar
Mark Otto committed
1196

1197
        Util.reflow(this._element);
Mark Otto's avatar
Mark Otto committed
1198

1199
        $(this._element).addClass(ClassName.COLLAPSING).removeClass(ClassName.COLLAPSE).removeClass(ClassName.IN);
Mark Otto's avatar
Mark Otto committed
1200

1201
        this._element.setAttribute('aria-expanded', false);
Mark Otto's avatar
Mark Otto committed
1202

1203
1204
1205
        if (this._triggerArray.length) {
          $(this._triggerArray).addClass(ClassName.COLLAPSED).attr('aria-expanded', false);
        }
Mark Otto's avatar
Mark Otto committed
1206

1207
        this.setTransitioning(true);
Mark Otto's avatar
Mark Otto committed
1208

1209
1210
1211
1212
        var complete = function complete() {
          _this5.setTransitioning(false);
          $(_this5._element).removeClass(ClassName.COLLAPSING).addClass(ClassName.COLLAPSE).trigger(Event.HIDDEN);
        };
Mark Otto's avatar
Mark Otto committed
1213

1214
        this._element.style[dimension] = 0;
Mark Otto's avatar
Mark Otto committed
1215

1216
        if (!Util.supportsTransitionEnd()) {
Mark Otto's avatar
Mark Otto committed
1217
1218
          complete();
          return;
1219
        }
Mark Otto's avatar
Mark Otto committed
1220

1221
1222
1223
1224
1225
1226
1227
1228
1229
1230
1231
1232
1233
1234
1235
1236
1237
1238
        $(this._element).one(Util.TRANSITION_END, complete).emulateTransitionEnd(TRANSITION_DURATION);
      }
    }, {
      key: 'setTransitioning',
      value: function setTransitioning(isTransitioning) {
        this._isTransitioning = isTransitioning;
      }
    }, {
      key: 'dispose',
      value: function dispose() {
        $.removeData(this._element, DATA_KEY);

        this._config = null;
        this._parent = null;
        this._element = null;
        this._triggerArray = null;
        this._isTransitioning = null;
      }
Mark Otto's avatar
Mark Otto committed
1239

1240
      // private
Mark Otto's avatar
Mark Otto committed
1241

Jacob Thornton's avatar
Jacob Thornton committed
1242
1243
    }, {
      key: '_getConfig',
1244
1245
      value: function _getConfig(config) {
        config = $.extend({}, Default, config);
Mark Otto's avatar
Mark Otto committed
1246
        config.toggle = Boolean(config.toggle); // coerce string values
1247
1248
1249
1250
1251
1252
1253
1254
1255
1256
1257
1258
1259
        Util.typeCheckConfig(NAME, config, DefaultType);
        return config;
      }
    }, {
      key: '_getDimension',
      value: function _getDimension() {
        var hasWidth = $(this._element).hasClass(Dimension.WIDTH);
        return hasWidth ? Dimension.WIDTH : Dimension.HEIGHT;
      }
    }, {
      key: '_getParent',
      value: function _getParent() {
        var _this6 = this;
Mark Otto's avatar
Mark Otto committed
1260

1261
1262
        var parent = $(this._config.parent)[0];
        var selector = '[data-toggle="collapse"][data-parent="' + this._config.parent + '"]';
Mark Otto's avatar
Mark Otto committed
1263

1264
1265
1266
        $(parent).find(selector).each(function (i, element) {
          _this6._addAriaAndCollapsedClass(Collapse._getTargetFromElement(element), [element]);
        });
Mark Otto's avatar
Mark Otto committed
1267

1268
1269
1270
1271
1272
1273
1274
1275
1276
1277
1278
1279
1280
1281
        return parent;
      }
    }, {
      key: '_addAriaAndCollapsedClass',
      value: function _addAriaAndCollapsedClass(element, triggerArray) {
        if (element) {
          var isOpen = $(element).hasClass(ClassName.IN);
          element.setAttribute('aria-expanded', isOpen);

          if (triggerArray.length) {
            $(triggerArray).toggleClass(ClassName.COLLAPSED, !isOpen).attr('aria-expanded', isOpen);
          }
        }
      }
Mark Otto's avatar
Mark Otto committed
1282

1283
      // static
Mark Otto's avatar
Mark Otto committed
1284

Jacob Thornton's avatar
Jacob Thornton committed
1285
1286
    }], [{
      key: '_getTargetFromElement',
1287
1288
1289
1290
1291
1292
1293
1294
1295
1296
1297
1298
1299
1300
1301
      value: function _getTargetFromElement(element) {
        var selector = Util.getSelectorFromElement(element);
        return selector ? $(selector)[0] : null;
      }
    }, {
      key: '_jQueryInterface',
      value: function _jQueryInterface(config) {
        return this.each(function () {
          var $this = $(this);
          var data = $this.data(DATA_KEY);
          var _config = $.extend({}, Default, $this.data(), typeof config === 'object' && config);

          if (!data && _config.toggle && /show|hide/.test(config)) {
            _config.toggle = false;
          }
Mark Otto's avatar
Mark Otto committed
1302

1303
1304
1305
1306
          if (!data) {
            data = new Collapse(this, _config);
            $this.data(DATA_KEY, data);
          }
Mark Otto's avatar
Mark Otto committed
1307

1308
1309
1310
1311
1312
          if (typeof config === 'string') {
            data[config]();
          }
        });
      }
Mark Otto's avatar
grunt    
Mark Otto committed
1313
1314
    }, {
      key: 'VERSION',
Jacob Thornton's avatar
Jacob Thornton committed
1315
      get: function get() {
Mark Otto's avatar
grunt    
Mark Otto committed
1316
1317
1318
1319
        return VERSION;
      }
    }, {
      key: 'Default',
Jacob Thornton's avatar
Jacob Thornton committed
1320
      get: function get() {
Mark Otto's avatar
grunt    
Mark Otto committed
1321
1322
        return Default;
      }
1323
    }]);
Mark Otto's avatar
Mark Otto committed
1324

1325
1326
    return Collapse;
  })();
Mark Otto's avatar
Mark Otto committed
1327

1328
1329
  $(document).on(Event.CLICK_DATA_API, Selector.DATA_TOGGLE, function (event) {
    event.preventDefault();
Mark Otto's avatar
Mark Otto committed
1330

1331
1332
1333
    var target = Collapse._getTargetFromElement(this);
    var data = $(target).data(DATA_KEY);
    var config = data ? 'toggle' : $(this).data();
Mark Otto's avatar
Mark Otto committed
1334

1335
1336
    Collapse._jQueryInterface.call($(target), config);
  });
Mark Otto's avatar
Mark Otto committed
1337

1338
1339
1340
1341
1342
  /**
   * ------------------------------------------------------------------------
   * jQuery
   * ------------------------------------------------------------------------
   */
Mark Otto's avatar
Mark Otto committed
1343

1344
1345
1346
1347
1348
1349
  $.fn[NAME] = Collapse._jQueryInterface;
  $.fn[NAME].Constructor = Collapse;
  $.fn[NAME].noConflict = function () {
    $.fn[NAME] = JQUERY_NO_CONFLICT;
    return Collapse._jQueryInterface;
  };
Mark Otto's avatar
Mark Otto committed
1350

1351
1352
  return Collapse;
})(jQuery);
Mark Otto's avatar
Mark Otto committed
1353
1354

/**
1355
1356
1357
1358
1359
1360
1361
1362
1363
1364
1365
1366
1367
1368
1369
1370
1371
1372
1373
1374
1375
1376
1377
1378
1379
1380
1381
 * --------------------------------------------------------------------------
 * Bootstrap (v4.0.0): dropdown.js
 * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
 * --------------------------------------------------------------------------
 */

var Dropdown = (function ($) {

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

  var NAME = 'dropdown';
  var VERSION = '4.0.0';
  var DATA_KEY = 'bs.dropdown';
  var EVENT_KEY = '.' + DATA_KEY;
  var DATA_API_KEY = '.data-api';
  var JQUERY_NO_CONFLICT = $.fn[NAME];

  var Event = {
    HIDE: 'hide' + EVENT_KEY,
    HIDDEN: 'hidden' + EVENT_KEY,
    SHOW: 'show' + EVENT_KEY,
    SHOWN: 'shown' + EVENT_KEY,
    CLICK: 'click' + EVENT_KEY,
Jacob Thornton's avatar
Jacob Thornton committed
1382
1383
    CLICK_DATA_API: 'click' + EVENT_KEY + DATA_API_KEY,
    KEYDOWN_DATA_API: 'keydown' + EVENT_KEY + DATA_API_KEY
1384
1385
1386
1387
1388
1389
1390
1391
1392
1393
1394
1395
1396
1397
1398
1399
1400
1401
1402
1403
1404
1405
1406
1407
1408
1409
1410
1411
1412
1413
1414
1415
1416
  };

  var ClassName = {
    BACKDROP: 'dropdown-backdrop',
    DISABLED: 'disabled',
    OPEN: 'open'
  };

  var Selector = {
    BACKDROP: '.dropdown-backdrop',
    DATA_TOGGLE: '[data-toggle="dropdown"]',
    FORM_CHILD: '.dropdown form',
    ROLE_MENU: '[role="menu"]',
    ROLE_LISTBOX: '[role="listbox"]',
    NAVBAR_NAV: '.navbar-nav',
    VISIBLE_ITEMS: '[role="menu"] li:not(.disabled) a, ' + '[role="listbox"] li:not(.disabled) a'
  };

  /**
   * ------------------------------------------------------------------------
   * Class Definition
   * ------------------------------------------------------------------------
   */

  var Dropdown = (function () {
    function Dropdown(element) {
      _classCallCheck(this, Dropdown);

      this._element = element;

      this._addEventListeners();
    }

Jacob Thornton's avatar
Jacob Thornton committed
1417
1418
1419
1420
1421
1422
1423
1424
    /**
     * ------------------------------------------------------------------------
     * Data Api implementation
     * ------------------------------------------------------------------------
     */

    // getters

1425
1426
1427
1428
1429
1430
1431
    _createClass(Dropdown, [{
      key: 'toggle',

      // public

      value: function toggle() {
        if (this.disabled || $(this).hasClass(ClassName.DISABLED)) {
Mark Otto's avatar
Mark Otto committed
1432
          return false;
1433
        }
Mark Otto's avatar
Mark Otto committed
1434

1435
1436
        var parent = Dropdown._getParentFromElement(this);
        var isActive = $(parent).hasClass(ClassName.OPEN);
Mark Otto's avatar
Mark Otto committed
1437

1438
        Dropdown._clearMenus();
Mark Otto's avatar
Mark Otto committed
1439

1440
1441
1442
        if (isActive) {
          return false;
        }
Mark Otto's avatar
Mark Otto committed
1443

1444
        if ('ontouchstart' in document.documentElement && !$(parent).closest(Selector.NAVBAR_NAV).length) {
Mark Otto's avatar
Mark Otto committed
1445

1446
1447
1448
1449
1450
1451
          // if mobile we use a backdrop because click events don't delegate
          var dropdown = document.createElement('div');
          dropdown.className = ClassName.BACKDROP;
          $(dropdown).insertBefore(this);
          $(dropdown).on('click', Dropdown._clearMenus);
        }
Mark Otto's avatar
Mark Otto committed
1452

1453
1454
        var relatedTarget = { relatedTarget: this };
        var showEvent = $.Event(Event.SHOW, relatedTarget);
Mark Otto's avatar
Mark Otto committed
1455

1456
        $(parent).trigger(showEvent);
Mark Otto's avatar
Mark Otto committed
1457

1458
        if (showEvent.isDefaultPrevented()) {
Mark Otto's avatar
Mark Otto committed
1459
          return false;
1460
        }
Mark Otto's avatar
Mark Otto committed
1461

1462
1463
        this.focus();
        this.setAttribute('aria-expanded', 'true');
Mark Otto's avatar
Mark Otto committed
1464

1465
        $(parent).toggleClass(ClassName.OPEN);
Mark Otto's avatar
grunt    
Mark Otto committed
1466
        $(parent).trigger($.Event(Event.SHOWN, relatedTarget));
Mark Otto's avatar
Mark Otto committed
1467

1468
1469
1470
1471
1472
1473
1474
1475
1476
        return false;
      }
    }, {
      key: 'dispose',
      value: function dispose() {
        $.removeData(this._element, DATA_KEY);
        $(this._element).off(EVENT_KEY);
        this._element = null;
      }
Mark Otto's avatar
Mark Otto committed
1477

1478
      // private
Mark Otto's avatar
Mark Otto committed
1479

Jacob Thornton's avatar
Jacob Thornton committed
1480
1481
    }, {
      key: '_addEventListeners',
1482
1483
1484
      value: function _addEventListeners() {
        $(this._element).on(Event.CLICK, this.toggle);
      }
Mark Otto's avatar
Mark Otto committed
1485

1486
      // static
Mark Otto's avatar
Mark Otto committed
1487

Jacob Thornton's avatar
Jacob Thornton committed
1488
1489
    }], [{
      key: '_jQueryInterface',
1490
1491
1492
      value: function _jQueryInterface(config) {
        return this.each(function () {
          var data = $(this).data(DATA_KEY);
Mark Otto's avatar
Mark Otto committed
1493

1494
1495
1496
          if (!data) {
            $(this).data(DATA_KEY, data = new Dropdown(this));
          }
Mark Otto's avatar
Mark Otto committed
1497

1498
1499
1500
1501
1502
1503
1504
1505
1506
1507
1508
          if (typeof config === 'string') {
            data[config].call(this);
          }
        });
      }
    }, {
      key: '_clearMenus',
      value: function _clearMenus(event) {
        if (event && event.which === 3) {
          return;
        }
Mark Otto's avatar
Mark Otto committed
1509

1510
1511
1512
1513
        var backdrop = $(Selector.BACKDROP)[0];
        if (backdrop) {
          backdrop.parentNode.removeChild(backdrop);
        }
Mark Otto's avatar
Mark Otto committed
1514

1515
        var toggles = $.makeArray($(Selector.DATA_TOGGLE));
Mark Otto's avatar
Mark Otto committed
1516

1517
1518
1519
        for (var i = 0; i < toggles.length; i++) {
          var _parent = Dropdown._getParentFromElement(toggles[i]);
          var relatedTarget = { relatedTarget: toggles[i] };
Mark Otto's avatar
Mark Otto committed
1520

1521
1522
1523
          if (!$(_parent).hasClass(ClassName.OPEN)) {
            continue;
          }
Mark Otto's avatar
Mark Otto committed
1524

1525
1526
1527
          if (event && event.type === 'click' && /input|textarea/i.test(event.target.tagName) && $.contains(_parent, event.target)) {
            continue;
          }
Mark Otto's avatar
Mark Otto committed
1528

1529
1530
1531
1532
1533
          var hideEvent = $.Event(Event.HIDE, relatedTarget);
          $(_parent).trigger(hideEvent);
          if (hideEvent.isDefaultPrevented()) {
            continue;
          }
Mark Otto's avatar
Mark Otto committed
1534

1535
          toggles[i].setAttribute('aria-expanded', 'false');
Mark Otto's avatar
Mark Otto committed
1536

Mark Otto's avatar
grunt    
Mark Otto committed
1537
          $(_parent).removeClass(ClassName.OPEN).trigger($.Event(Event.HIDDEN, relatedTarget));
1538
1539
1540
1541
1542
1543
1544
1545
1546
1547
1548
        }
      }
    }, {
      key: '_getParentFromElement',
      value: function _getParentFromElement(element) {
        var parent = undefined;
        var selector = Util.getSelectorFromElement(element);

        if (selector) {
          parent = $(selector)[0];
        }
Mark Otto's avatar
Mark Otto committed
1549

1550
1551
1552
1553
1554
1555
1556
1557
        return parent || element.parentNode;
      }
    }, {
      key: '_dataApiKeydownHandler',
      value: function _dataApiKeydownHandler(event) {
        if (!/(38|40|27|32)/.test(event.which) || /input|textarea/i.test(event.target.tagName)) {
          return;
        }
Mark Otto's avatar
Mark Otto committed
1558

1559
1560
        event.preventDefault();
        event.stopPropagation();
Mark Otto's avatar
Mark Otto committed
1561

1562
1563
1564
        if (this.disabled || $(this).hasClass(ClassName.DISABLED)) {
          return;
        }
Mark Otto's avatar
Mark Otto committed
1565

1566
1567
        var parent = Dropdown._getParentFromElement(this);
        var isActive = $(parent).hasClass(ClassName.OPEN);
Mark Otto's avatar
Mark Otto committed
1568

1569
        if (!isActive && event.which !== 27 || isActive && event.which === 27) {
Mark Otto's avatar
Mark Otto committed
1570

1571
1572
1573
1574
          if (event.which === 27) {
            var toggle = $(parent).find(Selector.DATA_TOGGLE)[0];
            $(toggle).trigger('focus');
          }
Mark Otto's avatar
Mark Otto committed
1575

1576
1577
1578
          $(this).trigger('click');
          return;
        }
Mark Otto's avatar
Mark Otto committed
1579

1580
        var items = $.makeArray($(Selector.VISIBLE_ITEMS));
Mark Otto's avatar
Mark Otto committed
1581

1582
1583
1584
        items = items.filter(function (item) {
          return item.offsetWidth || item.offsetHeight;
        });
Mark Otto's avatar
Mark Otto committed
1585

1586
1587
1588
        if (!items.length) {
          return;
        }
Mark Otto's avatar
Mark Otto committed
1589

1590
        var index = items.indexOf(event.target);
Mark Otto's avatar
Mark Otto committed
1591

Mark Otto's avatar
Mark Otto committed
1592
1593
1594
1595
1596
1597
1598
1599
1600
1601
1602
1603
1604
        if (event.which === 38 && index > 0) {
          // up
          index--;
        }

        if (event.which === 40 && index < items.length - 1) {
          // down
          index++;
        }

        if (! ~index) {
          index = 0;
        }
Mark Otto's avatar
Mark Otto committed
1605

1606
1607
        items[index].focus();
      }
Mark Otto's avatar
grunt    
Mark Otto committed
1608
1609
    }, {
      key: 'VERSION',
Jacob Thornton's avatar
Jacob Thornton committed
1610
      get: function get() {
Mark Otto's avatar
grunt    
Mark Otto committed
1611
1612
        return VERSION;
      }
1613
    }]);
Mark Otto's avatar
Mark Otto committed
1614

1615
1616
    return Dropdown;
  })();
Mark Otto's avatar
Mark Otto committed
1617

1618
1619
1620
  $(document).on(Event.KEYDOWN_DATA_API, Selector.DATA_TOGGLE, Dropdown._dataApiKeydownHandler).on(Event.KEYDOWN_DATA_API, Selector.ROLE_MENU, Dropdown._dataApiKeydownHandler).on(Event.KEYDOWN_DATA_API, Selector.ROLE_LISTBOX, Dropdown._dataApiKeydownHandler).on(Event.CLICK_DATA_API, Dropdown._clearMenus).on(Event.CLICK_DATA_API, Selector.DATA_TOGGLE, Dropdown.prototype.toggle).on(Event.CLICK_DATA_API, Selector.FORM_CHILD, function (e) {
    e.stopPropagation();
  });
Mark Otto's avatar
Mark Otto committed
1621

1622
1623
1624
1625
1626
  /**
   * ------------------------------------------------------------------------
   * jQuery
   * ------------------------------------------------------------------------
   */
Mark Otto's avatar
Mark Otto committed
1627

1628
1629
1630
1631
1632
1633
  $.fn[NAME] = Dropdown._jQueryInterface;
  $.fn[NAME].Constructor = Dropdown;
  $.fn[NAME].noConflict = function () {
    $.fn[NAME] = JQUERY_NO_CONFLICT;
    return Dropdown._jQueryInterface;
  };
Mark Otto's avatar
Mark Otto committed
1634

1635
1636
  return Dropdown;
})(jQuery);
Mark Otto's avatar
Mark Otto committed
1637
1638

/**
1639
1640
1641
1642
1643
1644
1645
1646
1647
1648
1649
1650
1651
1652
1653
1654
1655
1656
1657
1658
1659
1660
1661
1662
1663
1664
1665
1666
1667
1668
1669
1670
1671
1672
1673
1674
1675
1676
1677
1678
1679
1680
1681
1682
1683
1684
1685
1686
 * --------------------------------------------------------------------------
 * Bootstrap (v4.0.0): modal.js
 * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
 * --------------------------------------------------------------------------
 */

var Modal = (function ($) {

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

  var NAME = 'modal';
  var VERSION = '4.0.0';
  var DATA_KEY = 'bs.modal';
  var EVENT_KEY = '.' + DATA_KEY;
  var DATA_API_KEY = '.data-api';
  var JQUERY_NO_CONFLICT = $.fn[NAME];
  var TRANSITION_DURATION = 300;
  var BACKDROP_TRANSITION_DURATION = 150;

  var Default = {
    backdrop: true,
    keyboard: true,
    focus: true,
    show: true
  };

  var DefaultType = {
    backdrop: '(boolean|string)',
    keyboard: 'boolean',
    focus: 'boolean',
    show: 'boolean'
  };

  var Event = {
    HIDE: 'hide' + EVENT_KEY,
    HIDDEN: 'hidden' + EVENT_KEY,
    SHOW: 'show' + EVENT_KEY,
    SHOWN: 'shown' + EVENT_KEY,
    FOCUSIN: 'focusin' + EVENT_KEY,
    RESIZE: 'resize' + EVENT_KEY,
    CLICK_DISMISS: 'click.dismiss' + EVENT_KEY,
    KEYDOWN_DISMISS: 'keydown.dismiss' + EVENT_KEY,
    MOUSEUP_DISMISS: 'mouseup.dismiss' + EVENT_KEY,
    MOUSEDOWN_DISMISS: 'mousedown.dismiss' + EVENT_KEY,
Jacob Thornton's avatar
Jacob Thornton committed
1687
    CLICK_DATA_API: 'click' + EVENT_KEY + DATA_API_KEY
1688
1689
1690
  };

  var ClassName = {
Mark Otto's avatar
grunt    
Mark Otto committed
1691
    SCROLLBAR_MEASURER: 'modal-scrollbar-measure',
1692
1693
1694
1695
1696
1697
1698
1699
1700
1701
    BACKDROP: 'modal-backdrop',
    OPEN: 'modal-open',
    FADE: 'fade',
    IN: 'in'
  };

  var Selector = {
    DIALOG: '.modal-dialog',
    DATA_TOGGLE: '[data-toggle="modal"]',
    DATA_DISMISS: '[data-dismiss="modal"]',
Mark Otto's avatar
grunt    
Mark Otto committed
1702
    FIXED_CONTENT: '.navbar-fixed-top, .navbar-fixed-bottom, .is-fixed'
1703
1704
1705
1706
1707
1708
1709
1710
1711
1712
1713
1714
1715
1716
1717
1718
1719
1720
1721
1722
1723
1724
1725
  };

  /**
   * ------------------------------------------------------------------------
   * Class Definition
   * ------------------------------------------------------------------------
   */

  var Modal = (function () {
    function Modal(element, config) {
      _classCallCheck(this, Modal);

      this._config = this._getConfig(config);
      this._element = element;
      this._dialog = $(element).find(Selector.DIALOG)[0];
      this._backdrop = null;
      this._isShown = false;
      this._isBodyOverflowing = false;
      this._ignoreBackdropClick = false;
      this._originalBodyPadding = 0;
      this._scrollbarWidth = 0;
    }

Jacob Thornton's avatar
Jacob Thornton committed
1726
1727
1728
1729
1730
1731
1732
1733
    /**
     * ------------------------------------------------------------------------
     * Data Api implementation
     * ------------------------------------------------------------------------
     */

    // getters

1734
1735
1736
1737
1738
1739
1740
1741
1742
1743
1744
1745
    _createClass(Modal, [{
      key: 'toggle',

      // public

      value: function toggle(relatedTarget) {
        return this._isShown ? this.hide() : this.show(relatedTarget);
      }
    }, {
      key: 'show',
      value: function show(relatedTarget) {
        var _this7 = this;
Mark Otto's avatar
Mark Otto committed
1746

1747
1748
1749
        var showEvent = $.Event(Event.SHOW, {
          relatedTarget: relatedTarget
        });
Mark Otto's avatar
Mark Otto committed
1750

1751
        $(this._element).trigger(showEvent);
Mark Otto's avatar
Mark Otto committed
1752

1753
1754
1755
        if (this._isShown || showEvent.isDefaultPrevented()) {
          return;
        }
Mark Otto's avatar
Mark Otto committed
1756

1757
        this._isShown = true;
Mark Otto's avatar
Mark Otto committed
1758

1759
1760
        this._checkScrollbar();
        this._setScrollbar();
Mark Otto's avatar
Mark Otto committed
1761

1762
        $(document.body).addClass(ClassName.OPEN);
Mark Otto's avatar
Mark Otto committed
1763

1764
1765
        this._setEscapeEvent();
        this._setResizeEvent();
Mark Otto's avatar
Mark Otto committed
1766

1767
        $(this._element).on(Event.CLICK_DISMISS, Selector.DATA_DISMISS, $.proxy(this.hide, this));
Mark Otto's avatar
Mark Otto committed
1768

1769
1770
1771
1772
1773
1774
1775
        $(this._dialog).on(Event.MOUSEDOWN_DISMISS, function () {
          $(_this7._element).one(Event.MOUSEUP_DISMISS, function (event) {
            if ($(event.target).is(_this7._element)) {
              that._ignoreBackdropClick = true;
            }
          });
        });
Mark Otto's avatar
Mark Otto committed
1776

1777
1778
1779
1780
1781
1782
1783
1784
        this._showBackdrop($.proxy(this._showElement, this, relatedTarget));
      }
    }, {
      key: 'hide',
      value: function hide(event) {
        if (event) {
          event.preventDefault();
        }
Mark Otto's avatar
Mark Otto committed
1785

1786
        var hideEvent = $.Event(Event.HIDE);
Mark Otto's avatar
Mark Otto committed
1787

1788
        $(this._element).trigger(hideEvent);
Mark Otto's avatar
Mark Otto committed
1789

1790
1791
1792
        if (!this._isShown || hideEvent.isDefaultPrevented()) {
          return;
        }
Mark Otto's avatar
Mark Otto committed
1793

1794
        this._isShown = false;
Mark Otto's avatar
Mark Otto committed
1795

1796
1797
        this._setEscapeEvent();
        this._setResizeEvent();
Mark Otto's avatar
Mark Otto committed
1798

1799
        $(document).off(Event.FOCUSIN);
Mark Otto's avatar
Mark Otto committed
1800

1801
        $(this._element).removeClass(ClassName.IN);
Mark Otto's avatar
Mark Otto committed
1802

1803
1804
        $(this._element).off(Event.CLICK_DISMISS);
        $(this._dialog).off(Event.MOUSEDOWN_DISMISS);
Mark Otto's avatar
Mark Otto committed
1805

1806
        if (Util.supportsTransitionEnd() && $(this._element).hasClass(ClassName.FADE)) {
Mark Otto's avatar
Mark Otto committed
1807

1808
1809
1810
1811
1812
1813
1814
1815
1816
1817
1818
1819
1820
1821
1822
1823
1824
1825
1826
1827
1828
1829
1830
1831
1832
          $(this._element).one(Util.TRANSITION_END, $.proxy(this._hideModal, this)).emulateTransitionEnd(TRANSITION_DURATION);
        } else {
          this._hideModal();
        }
      }
    }, {
      key: 'dispose',
      value: function dispose() {
        $.removeData(this._element, DATA_KEY);

        $(window).off(EVENT_KEY);
        $(document).off(EVENT_KEY);
        $(this._element).off(EVENT_KEY);
        $(this._backdrop).off(EVENT_KEY);

        this._config = null;
        this._element = null;
        this._dialog = null;
        this._backdrop = null;
        this._isShown = null;
        this._isBodyOverflowing = null;
        this._ignoreBackdropClick = null;
        this._originalBodyPadding = null;
        this._scrollbarWidth = null;
      }
Mark Otto's avatar
Mark Otto committed
1833

1834
      // private
Mark Otto's avatar
Mark Otto committed
1835

Jacob Thornton's avatar
Jacob Thornton committed
1836
1837
    }, {
      key: '_getConfig',
1838
1839
1840
1841
1842
1843
1844
1845
1846
      value: function _getConfig(config) {
        config = $.extend({}, Default, config);
        Util.typeCheckConfig(NAME, config, DefaultType);
        return config;
      }
    }, {
      key: '_showElement',
      value: function _showElement(relatedTarget) {
        var _this8 = this;
Mark Otto's avatar
Mark Otto committed
1847

1848
        var transition = Util.supportsTransitionEnd() && $(this._element).hasClass(ClassName.FADE);
Mark Otto's avatar
Mark Otto committed
1849

1850
1851
1852
1853
        if (!this._element.parentNode || this._element.parentNode.nodeType !== Node.ELEMENT_NODE) {
          // don't move modals dom position
          document.body.appendChild(this._element);
        }
XhmikosR's avatar
XhmikosR committed
1854

1855
1856
        this._element.style.display = 'block';
        this._element.scrollTop = 0;
XhmikosR's avatar
XhmikosR committed
1857

1858
1859
1860
        if (transition) {
          Util.reflow(this._element);
        }
XhmikosR's avatar
XhmikosR committed
1861

1862
        $(this._element).addClass(ClassName.IN);
XhmikosR's avatar
XhmikosR committed
1863

Mark Otto's avatar
Mark Otto committed
1864
1865
1866
        if (this._config.focus) {
          this._enforceFocus();
        }
XhmikosR's avatar
XhmikosR committed
1867

1868
1869
1870
        var shownEvent = $.Event(Event.SHOWN, {
          relatedTarget: relatedTarget
        });
XhmikosR's avatar
XhmikosR committed
1871

1872
        var transitionComplete = function transitionComplete() {
Mark Otto's avatar
Mark Otto committed
1873
1874
1875
          if (_this8._config.focus) {
            _this8._element.focus();
          }
1876
1877
          $(_this8._element).trigger(shownEvent);
        };
XhmikosR's avatar
XhmikosR committed
1878

1879
1880
1881
1882
1883
1884
1885
1886
1887
1888
1889
1890
1891
1892
1893
1894
1895
1896
1897
1898
1899
1900
1901
1902
1903
1904
1905
1906
1907
1908
1909
1910
1911
1912
1913
1914
1915
1916
1917
1918
1919
1920
1921
1922
1923
1924
1925
1926
1927
1928
1929
1930
1931
1932
1933
1934
1935
1936
1937
1938
1939
1940
1941
1942
1943
1944
1945
        if (transition) {
          $(this._dialog).one(Util.TRANSITION_END, transitionComplete).emulateTransitionEnd(TRANSITION_DURATION);
        } else {
          transitionComplete();
        }
      }
    }, {
      key: '_enforceFocus',
      value: function _enforceFocus() {
        var _this9 = this;

        $(document).off(Event.FOCUSIN) // guard against infinite focus loop
        .on(Event.FOCUSIN, function (event) {
          if (_this9._element !== event.target && !$(_this9._element).has(event.target).length) {
            _this9._element.focus();
          }
        });
      }
    }, {
      key: '_setEscapeEvent',
      value: function _setEscapeEvent() {
        var _this10 = this;

        if (this._isShown && this._config.keyboard) {
          $(this._element).on(Event.KEYDOWN_DISMISS, function (event) {
            if (event.which === 27) {
              _this10.hide();
            }
          });
        } else if (!this._isShown) {
          $(this._element).off(Event.KEYDOWN_DISMISS);
        }
      }
    }, {
      key: '_setResizeEvent',
      value: function _setResizeEvent() {
        if (this._isShown) {
          $(window).on(Event.RESIZE, $.proxy(this._handleUpdate, this));
        } else {
          $(window).off(Event.RESIZE);
        }
      }
    }, {
      key: '_hideModal',
      value: function _hideModal() {
        var _this11 = this;

        this._element.style.display = 'none';
        this._showBackdrop(function () {
          $(document.body).removeClass(ClassName.OPEN);
          _this11._resetAdjustments();
          _this11._resetScrollbar();
          $(_this11._element).trigger(Event.HIDDEN);
        });
      }
    }, {
      key: '_removeBackdrop',
      value: function _removeBackdrop() {
        if (this._backdrop) {
          $(this._backdrop).remove();
          this._backdrop = null;
        }
      }
    }, {
      key: '_showBackdrop',
      value: function _showBackdrop(callback) {
        var _this12 = this;
XhmikosR's avatar
XhmikosR committed
1946

1947
        var animate = $(this._element).hasClass(ClassName.FADE) ? ClassName.FADE : '';
XhmikosR's avatar
XhmikosR committed
1948

1949
1950
        if (this._isShown && this._config.backdrop) {
          var doAnimate = Util.supportsTransitionEnd() && animate;
XhmikosR's avatar
XhmikosR committed
1951

1952
1953
          this._backdrop = document.createElement('div');
          this._backdrop.className = ClassName.BACKDROP;
XhmikosR's avatar
XhmikosR committed
1954

1955
1956
1957
          if (animate) {
            $(this._backdrop).addClass(animate);
          }
XhmikosR's avatar
XhmikosR committed
1958

Jacob Thornton's avatar
Jacob Thornton committed
1959
          $(this._backdrop).appendTo(document.body);
1960
1961
1962
1963
1964
1965
1966
1967
1968
1969
1970
1971
1972
1973
1974
1975
1976
1977
1978

          $(this._element).on(Event.CLICK_DISMISS, function (event) {
            if (_this12._ignoreBackdropClick) {
              _this12._ignoreBackdropClick = false;
              return;
            }
            if (event.target !== event.currentTarget) {
              return;
            }
            if (_this12._config.backdrop === 'static') {
              _this12._element.focus();
            } else {
              _this12.hide();
            }
          });

          if (doAnimate) {
            Util.reflow(this._backdrop);
          }
XhmikosR's avatar
XhmikosR committed
1979

1980
          $(this._backdrop).addClass(ClassName.IN);
XhmikosR's avatar
XhmikosR committed
1981

1982
1983
1984
          if (!callback) {
            return;
          }
XhmikosR's avatar
XhmikosR committed
1985

1986
1987
1988
1989
          if (!doAnimate) {
            callback();
            return;
          }
Mark Otto's avatar
Mark Otto committed
1990

1991
1992
1993
1994
1995
1996
1997
1998
1999
2000
          $(this._backdrop).one(Util.TRANSITION_END, callback).emulateTransitionEnd(BACKDROP_TRANSITION_DURATION);
        } else if (!this._isShown && this._backdrop) {
          $(this._backdrop).removeClass(ClassName.IN);

          var callbackRemove = function callbackRemove() {
            _this12._removeBackdrop();
            if (callback) {
              callback();
            }
          };
For faster browsing, not all history is shown. View entire blame