bootstrap.js 97.5 KB
Newer Older
Mark Otto's avatar
Mark Otto committed
1001

1002
1003
1004
1005
1006
1007
  $.fn[NAME] = Carousel._jQueryInterface;
  $.fn[NAME].Constructor = Carousel;
  $.fn[NAME].noConflict = function () {
    $.fn[NAME] = JQUERY_NO_CONFLICT;
    return Carousel._jQueryInterface;
  };
Mark Otto's avatar
Mark Otto committed
1008

1009
1010
  return Carousel;
})(jQuery);
Mark Otto's avatar
Mark Otto committed
1011
1012

/**
1013
 * --------------------------------------------------------------------------
1014
 * Bootstrap (v4.0.0-alpha.2): collapse.js
1015
1016
1017
1018
1019
1020
1021
1022
1023
1024
1025
1026
1027
 * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
 * --------------------------------------------------------------------------
 */

var Collapse = (function ($) {

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

  var NAME = 'collapse';
XhmikosR's avatar
XhmikosR committed
1028
  var VERSION = '4.0.0-alpha.2';
1029
1030
1031
1032
1033
1034
1035
1036
1037
1038
1039
1040
1041
1042
1043
1044
1045
1046
1047
1048
1049
  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
1050
    CLICK_DATA_API: 'click' + EVENT_KEY + DATA_API_KEY
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
1077
1078
1079
1080
1081
1082
1083
1084
1085
1086
1087
1088
1089
  };

  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
1090

1091
1092
1093
      if (this._config.toggle) {
        this.toggle();
      }
Mark Otto's avatar
Mark Otto committed
1094
1095
    }

Jacob Thornton's avatar
Jacob Thornton committed
1096
1097
1098
1099
1100
1101
1102
1103
    /**
     * ------------------------------------------------------------------------
     * Data Api implementation
     * ------------------------------------------------------------------------
     */

    // getters

1104
1105
    _createClass(Collapse, [{
      key: 'toggle',
Mark Otto's avatar
Mark Otto committed
1106

1107
      // public
Mark Otto's avatar
Mark Otto committed
1108

1109
1110
1111
1112
1113
1114
1115
1116
1117
1118
1119
1120
1121
1122
1123
      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
1124

1125
1126
        var actives = undefined;
        var activesData = undefined;
Mark Otto's avatar
Mark Otto committed
1127

1128
1129
1130
1131
1132
1133
        if (this._parent) {
          actives = $.makeArray($(Selector.ACTIVES));
          if (!actives.length) {
            actives = null;
          }
        }
Mark Otto's avatar
Mark Otto committed
1134

1135
1136
1137
1138
1139
1140
        if (actives) {
          activesData = $(actives).data(DATA_KEY);
          if (activesData && activesData._isTransitioning) {
            return;
          }
        }
Mark Otto's avatar
Mark Otto committed
1141

1142
1143
1144
1145
1146
        var startEvent = $.Event(Event.SHOW);
        $(this._element).trigger(startEvent);
        if (startEvent.isDefaultPrevented()) {
          return;
        }
Mark Otto's avatar
Mark Otto committed
1147

1148
1149
1150
1151
1152
1153
        if (actives) {
          Collapse._jQueryInterface.call($(actives), 'hide');
          if (!activesData) {
            $(actives).data(DATA_KEY, null);
          }
        }
Mark Otto's avatar
Mark Otto committed
1154

1155
        var dimension = this._getDimension();
Mark Otto's avatar
Mark Otto committed
1156

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

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

1162
1163
1164
        if (this._triggerArray.length) {
          $(this._triggerArray).removeClass(ClassName.COLLAPSED).attr('aria-expanded', true);
        }
Mark Otto's avatar
Mark Otto committed
1165

1166
        this.setTransitioning(true);
Mark Otto's avatar
Mark Otto committed
1167

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

1171
          _this4._element.style[dimension] = '';
Mark Otto's avatar
Mark Otto committed
1172

1173
          _this4.setTransitioning(false);
Mark Otto's avatar
Mark Otto committed
1174

1175
1176
          $(_this4._element).trigger(Event.SHOWN);
        };
Mark Otto's avatar
Mark Otto committed
1177

1178
1179
1180
1181
        if (!Util.supportsTransitionEnd()) {
          complete();
          return;
        }
Mark Otto's avatar
Mark Otto committed
1182

Mark Otto's avatar
Mark Otto committed
1183
1184
        var capitalizedDimension = dimension[0].toUpperCase() + dimension.slice(1);
        var scrollSize = 'scroll' + capitalizedDimension;
Mark Otto's avatar
Mark Otto committed
1185

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

1188
1189
1190
1191
1192
1193
        this._element.style[dimension] = this._element[scrollSize] + 'px';
      }
    }, {
      key: 'hide',
      value: function hide() {
        var _this5 = this;
Mark Otto's avatar
Mark Otto committed
1194

1195
1196
1197
        if (this._isTransitioning || !$(this._element).hasClass(ClassName.IN)) {
          return;
        }
Mark Otto's avatar
Mark Otto committed
1198

1199
1200
1201
1202
1203
        var startEvent = $.Event(Event.HIDE);
        $(this._element).trigger(startEvent);
        if (startEvent.isDefaultPrevented()) {
          return;
        }
Mark Otto's avatar
Mark Otto committed
1204

1205
1206
        var dimension = this._getDimension();
        var offsetDimension = dimension === Dimension.WIDTH ? 'offsetWidth' : 'offsetHeight';
Mark Otto's avatar
Mark Otto committed
1207

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

1210
        Util.reflow(this._element);
Mark Otto's avatar
Mark Otto committed
1211

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

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

1216
1217
1218
        if (this._triggerArray.length) {
          $(this._triggerArray).addClass(ClassName.COLLAPSED).attr('aria-expanded', false);
        }
Mark Otto's avatar
Mark Otto committed
1219

1220
        this.setTransitioning(true);
Mark Otto's avatar
Mark Otto committed
1221

1222
1223
1224
1225
        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
1226

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

1229
        if (!Util.supportsTransitionEnd()) {
Mark Otto's avatar
Mark Otto committed
1230
1231
          complete();
          return;
1232
        }
Mark Otto's avatar
Mark Otto committed
1233

1234
1235
1236
1237
1238
1239
1240
1241
1242
1243
1244
1245
1246
1247
1248
1249
1250
1251
        $(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
1252

1253
      // private
Mark Otto's avatar
Mark Otto committed
1254

Jacob Thornton's avatar
Jacob Thornton committed
1255
1256
    }, {
      key: '_getConfig',
1257
1258
      value: function _getConfig(config) {
        config = $.extend({}, Default, config);
Mark Otto's avatar
Mark Otto committed
1259
        config.toggle = Boolean(config.toggle); // coerce string values
1260
1261
1262
1263
1264
1265
1266
1267
1268
1269
1270
1271
1272
        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
1273

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

1277
1278
1279
        $(parent).find(selector).each(function (i, element) {
          _this6._addAriaAndCollapsedClass(Collapse._getTargetFromElement(element), [element]);
        });
Mark Otto's avatar
Mark Otto committed
1280

1281
1282
1283
1284
1285
1286
1287
1288
1289
1290
1291
1292
1293
1294
        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
1295

1296
      // static
Mark Otto's avatar
Mark Otto committed
1297

Jacob Thornton's avatar
Jacob Thornton committed
1298
1299
    }], [{
      key: '_getTargetFromElement',
1300
1301
1302
1303
1304
1305
1306
1307
1308
1309
1310
1311
1312
1313
1314
      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
1315

1316
1317
1318
1319
          if (!data) {
            data = new Collapse(this, _config);
            $this.data(DATA_KEY, data);
          }
Mark Otto's avatar
Mark Otto committed
1320

1321
          if (typeof config === 'string') {
XhmikosR's avatar
XhmikosR committed
1322
1323
1324
            if (data[config] === undefined) {
              throw new Error('No method named "' + config + '"');
            }
1325
1326
1327
1328
            data[config]();
          }
        });
      }
Mark Otto's avatar
grunt    
Mark Otto committed
1329
1330
    }, {
      key: 'VERSION',
Jacob Thornton's avatar
Jacob Thornton committed
1331
      get: function get() {
Mark Otto's avatar
grunt    
Mark Otto committed
1332
1333
1334
1335
        return VERSION;
      }
    }, {
      key: 'Default',
Jacob Thornton's avatar
Jacob Thornton committed
1336
      get: function get() {
Mark Otto's avatar
grunt    
Mark Otto committed
1337
1338
        return Default;
      }
1339
    }]);
Mark Otto's avatar
Mark Otto committed
1340

1341
1342
    return Collapse;
  })();
Mark Otto's avatar
Mark Otto committed
1343

1344
1345
  $(document).on(Event.CLICK_DATA_API, Selector.DATA_TOGGLE, function (event) {
    event.preventDefault();
Mark Otto's avatar
Mark Otto committed
1346

1347
1348
1349
    var target = Collapse._getTargetFromElement(this);
    var data = $(target).data(DATA_KEY);
    var config = data ? 'toggle' : $(this).data();
Mark Otto's avatar
Mark Otto committed
1350

1351
1352
    Collapse._jQueryInterface.call($(target), config);
  });
Mark Otto's avatar
Mark Otto committed
1353

1354
1355
1356
1357
1358
  /**
   * ------------------------------------------------------------------------
   * jQuery
   * ------------------------------------------------------------------------
   */
Mark Otto's avatar
Mark Otto committed
1359

1360
1361
1362
1363
1364
1365
  $.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
1366

1367
1368
  return Collapse;
})(jQuery);
Mark Otto's avatar
Mark Otto committed
1369
1370

/**
1371
 * --------------------------------------------------------------------------
1372
 * Bootstrap (v4.0.0-alpha.2): dropdown.js
1373
1374
1375
1376
1377
1378
1379
1380
1381
1382
1383
1384
1385
 * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
 * --------------------------------------------------------------------------
 */

var Dropdown = (function ($) {

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

  var NAME = 'dropdown';
XhmikosR's avatar
XhmikosR committed
1386
  var VERSION = '4.0.0-alpha.2';
1387
1388
1389
1390
1391
1392
1393
1394
1395
1396
1397
  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
1398
1399
    CLICK_DATA_API: 'click' + EVENT_KEY + DATA_API_KEY,
    KEYDOWN_DATA_API: 'keydown' + EVENT_KEY + DATA_API_KEY
1400
1401
1402
1403
1404
1405
1406
1407
1408
1409
1410
1411
1412
1413
1414
1415
1416
1417
1418
1419
1420
1421
1422
1423
1424
1425
1426
1427
1428
1429
1430
1431
1432
  };

  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
1433
1434
1435
1436
1437
1438
1439
1440
    /**
     * ------------------------------------------------------------------------
     * Data Api implementation
     * ------------------------------------------------------------------------
     */

    // getters

1441
1442
1443
1444
1445
1446
1447
    _createClass(Dropdown, [{
      key: 'toggle',

      // public

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

1451
1452
        var parent = Dropdown._getParentFromElement(this);
        var isActive = $(parent).hasClass(ClassName.OPEN);
Mark Otto's avatar
Mark Otto committed
1453

1454
        Dropdown._clearMenus();
Mark Otto's avatar
Mark Otto committed
1455

1456
1457
1458
        if (isActive) {
          return false;
        }
Mark Otto's avatar
Mark Otto committed
1459

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

1462
1463
1464
1465
1466
1467
          // 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
1468

1469
1470
        var relatedTarget = { relatedTarget: this };
        var showEvent = $.Event(Event.SHOW, relatedTarget);
Mark Otto's avatar
Mark Otto committed
1471

1472
        $(parent).trigger(showEvent);
Mark Otto's avatar
Mark Otto committed
1473

1474
        if (showEvent.isDefaultPrevented()) {
Mark Otto's avatar
Mark Otto committed
1475
          return false;
1476
        }
Mark Otto's avatar
Mark Otto committed
1477

1478
1479
        this.focus();
        this.setAttribute('aria-expanded', 'true');
Mark Otto's avatar
Mark Otto committed
1480

1481
        $(parent).toggleClass(ClassName.OPEN);
Mark Otto's avatar
grunt    
Mark Otto committed
1482
        $(parent).trigger($.Event(Event.SHOWN, relatedTarget));
Mark Otto's avatar
Mark Otto committed
1483

1484
1485
1486
1487
1488
1489
1490
1491
1492
        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
1493

1494
      // private
Mark Otto's avatar
Mark Otto committed
1495

Jacob Thornton's avatar
Jacob Thornton committed
1496
1497
    }, {
      key: '_addEventListeners',
1498
1499
1500
      value: function _addEventListeners() {
        $(this._element).on(Event.CLICK, this.toggle);
      }
Mark Otto's avatar
Mark Otto committed
1501

1502
      // static
Mark Otto's avatar
Mark Otto committed
1503

Jacob Thornton's avatar
Jacob Thornton committed
1504
1505
    }], [{
      key: '_jQueryInterface',
1506
1507
1508
      value: function _jQueryInterface(config) {
        return this.each(function () {
          var data = $(this).data(DATA_KEY);
Mark Otto's avatar
Mark Otto committed
1509

1510
1511
1512
          if (!data) {
            $(this).data(DATA_KEY, data = new Dropdown(this));
          }
Mark Otto's avatar
Mark Otto committed
1513

1514
          if (typeof config === 'string') {
XhmikosR's avatar
XhmikosR committed
1515
1516
1517
            if (data[config] === undefined) {
              throw new Error('No method named "' + config + '"');
            }
1518
1519
1520
1521
1522
1523
1524
1525
1526
1527
            data[config].call(this);
          }
        });
      }
    }, {
      key: '_clearMenus',
      value: function _clearMenus(event) {
        if (event && event.which === 3) {
          return;
        }
Mark Otto's avatar
Mark Otto committed
1528

1529
1530
1531
1532
        var backdrop = $(Selector.BACKDROP)[0];
        if (backdrop) {
          backdrop.parentNode.removeChild(backdrop);
        }
Mark Otto's avatar
Mark Otto committed
1533

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

1536
1537
1538
        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
1539

1540
1541
1542
          if (!$(_parent).hasClass(ClassName.OPEN)) {
            continue;
          }
Mark Otto's avatar
Mark Otto committed
1543

1544
1545
1546
          if (event && event.type === 'click' && /input|textarea/i.test(event.target.tagName) && $.contains(_parent, event.target)) {
            continue;
          }
Mark Otto's avatar
Mark Otto committed
1547

1548
1549
1550
1551
1552
          var hideEvent = $.Event(Event.HIDE, relatedTarget);
          $(_parent).trigger(hideEvent);
          if (hideEvent.isDefaultPrevented()) {
            continue;
          }
Mark Otto's avatar
Mark Otto committed
1553

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

Mark Otto's avatar
grunt    
Mark Otto committed
1556
          $(_parent).removeClass(ClassName.OPEN).trigger($.Event(Event.HIDDEN, relatedTarget));
1557
1558
1559
1560
1561
1562
1563
1564
1565
1566
1567
        }
      }
    }, {
      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
1568

1569
1570
1571
1572
1573
1574
1575
1576
        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
1577

1578
1579
        event.preventDefault();
        event.stopPropagation();
Mark Otto's avatar
Mark Otto committed
1580

1581
1582
1583
        if (this.disabled || $(this).hasClass(ClassName.DISABLED)) {
          return;
        }
Mark Otto's avatar
Mark Otto committed
1584

1585
1586
        var parent = Dropdown._getParentFromElement(this);
        var isActive = $(parent).hasClass(ClassName.OPEN);
Mark Otto's avatar
Mark Otto committed
1587

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

1590
1591
1592
1593
          if (event.which === 27) {
            var toggle = $(parent).find(Selector.DATA_TOGGLE)[0];
            $(toggle).trigger('focus');
          }
Mark Otto's avatar
Mark Otto committed
1594

1595
1596
1597
          $(this).trigger('click');
          return;
        }
Mark Otto's avatar
Mark Otto committed
1598

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

1601
1602
1603
        items = items.filter(function (item) {
          return item.offsetWidth || item.offsetHeight;
        });
Mark Otto's avatar
Mark Otto committed
1604

1605
1606
1607
        if (!items.length) {
          return;
        }
Mark Otto's avatar
Mark Otto committed
1608

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

Mark Otto's avatar
Mark Otto committed
1611
1612
1613
1614
1615
1616
1617
1618
1619
1620
        if (event.which === 38 && index > 0) {
          // up
          index--;
        }

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

Chris Rebert's avatar
Chris Rebert committed
1621
        if (index < 0) {
Mark Otto's avatar
Mark Otto committed
1622
1623
          index = 0;
        }
Mark Otto's avatar
Mark Otto committed
1624

1625
1626
        items[index].focus();
      }
Mark Otto's avatar
grunt    
Mark Otto committed
1627
1628
    }, {
      key: 'VERSION',
Jacob Thornton's avatar
Jacob Thornton committed
1629
      get: function get() {
Mark Otto's avatar
grunt    
Mark Otto committed
1630
1631
        return VERSION;
      }
1632
    }]);
Mark Otto's avatar
Mark Otto committed
1633

1634
1635
    return Dropdown;
  })();
Mark Otto's avatar
Mark Otto committed
1636

1637
1638
1639
  $(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
1640

1641
1642
1643
1644
1645
  /**
   * ------------------------------------------------------------------------
   * jQuery
   * ------------------------------------------------------------------------
   */
Mark Otto's avatar
Mark Otto committed
1646

1647
1648
1649
1650
1651
1652
  $.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
1653

1654
1655
  return Dropdown;
})(jQuery);
Mark Otto's avatar
Mark Otto committed
1656
1657

/**
1658
 * --------------------------------------------------------------------------
1659
 * Bootstrap (v4.0.0-alpha.2): modal.js
1660
1661
1662
1663
1664
1665
1666
1667
1668
1669
1670
1671
1672
 * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
 * --------------------------------------------------------------------------
 */

var Modal = (function ($) {

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

  var NAME = 'modal';
XhmikosR's avatar
XhmikosR committed
1673
  var VERSION = '4.0.0-alpha.2';
1674
1675
1676
1677
1678
1679
1680
1681
1682
1683
1684
1685
1686
1687
1688
1689
1690
1691
1692
1693
1694
1695
1696
1697
1698
1699
1700
1701
1702
1703
1704
1705
  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
1706
    CLICK_DATA_API: 'click' + EVENT_KEY + DATA_API_KEY
1707
1708
1709
  };

  var ClassName = {
Mark Otto's avatar
grunt    
Mark Otto committed
1710
    SCROLLBAR_MEASURER: 'modal-scrollbar-measure',
1711
1712
1713
1714
1715
1716
1717
1718
1719
1720
    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
1721
    FIXED_CONTENT: '.navbar-fixed-top, .navbar-fixed-bottom, .is-fixed'
1722
1723
1724
1725
1726
1727
1728
1729
1730
1731
1732
1733
1734
1735
1736
1737
1738
1739
1740
1741
1742
1743
1744
  };

  /**
   * ------------------------------------------------------------------------
   * 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
1745
1746
1747
1748
1749
1750
1751
1752
    /**
     * ------------------------------------------------------------------------
     * Data Api implementation
     * ------------------------------------------------------------------------
     */

    // getters

1753
1754
1755
1756
1757
1758
1759
1760
1761
1762
1763
1764
    _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
1765

1766
1767
1768
        var showEvent = $.Event(Event.SHOW, {
          relatedTarget: relatedTarget
        });
Mark Otto's avatar
Mark Otto committed
1769

1770
        $(this._element).trigger(showEvent);
Mark Otto's avatar
Mark Otto committed
1771

1772
1773
1774
        if (this._isShown || showEvent.isDefaultPrevented()) {
          return;
        }
Mark Otto's avatar
Mark Otto committed
1775

1776
        this._isShown = true;
Mark Otto's avatar
Mark Otto committed
1777

1778
1779
        this._checkScrollbar();
        this._setScrollbar();
Mark Otto's avatar
Mark Otto committed
1780

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

1783
1784
        this._setEscapeEvent();
        this._setResizeEvent();
Mark Otto's avatar
Mark Otto committed
1785

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

1788
1789
1790
        $(this._dialog).on(Event.MOUSEDOWN_DISMISS, function () {
          $(_this7._element).one(Event.MOUSEUP_DISMISS, function (event) {
            if ($(event.target).is(_this7._element)) {
XhmikosR's avatar
XhmikosR committed
1791
              _this7._ignoreBackdropClick = true;
1792
1793
1794
            }
          });
        });
Mark Otto's avatar
Mark Otto committed
1795

1796
1797
1798
1799
1800
1801
1802
1803
        this._showBackdrop($.proxy(this._showElement, this, relatedTarget));
      }
    }, {
      key: 'hide',
      value: function hide(event) {
        if (event) {
          event.preventDefault();
        }
Mark Otto's avatar
Mark Otto committed
1804

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

1807
        $(this._element).trigger(hideEvent);
Mark Otto's avatar
Mark Otto committed
1808

1809
1810
1811
        if (!this._isShown || hideEvent.isDefaultPrevented()) {
          return;
        }
Mark Otto's avatar
Mark Otto committed
1812

1813
        this._isShown = false;
Mark Otto's avatar
Mark Otto committed
1814

1815
1816
        this._setEscapeEvent();
        this._setResizeEvent();
Mark Otto's avatar
Mark Otto committed
1817

1818
        $(document).off(Event.FOCUSIN);
Mark Otto's avatar
Mark Otto committed
1819

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

1822
1823
        $(this._element).off(Event.CLICK_DISMISS);
        $(this._dialog).off(Event.MOUSEDOWN_DISMISS);
Mark Otto's avatar
Mark Otto committed
1824

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

1827
1828
1829
1830
1831
1832
1833
1834
1835
1836
1837
1838
1839
1840
1841
1842
1843
1844
1845
1846
1847
1848
1849
1850
1851
          $(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
1852

1853
      // private
Mark Otto's avatar
Mark Otto committed
1854

Jacob Thornton's avatar
Jacob Thornton committed
1855
1856
    }, {
      key: '_getConfig',
1857
1858
1859
1860
1861
1862
1863
1864
1865
      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
1866

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

1869
1870
1871
1872
        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
1873

1874
1875
        this._element.style.display = 'block';
        this._element.scrollTop = 0;
XhmikosR's avatar
XhmikosR committed
1876

1877
1878
1879
        if (transition) {
          Util.reflow(this._element);
        }
XhmikosR's avatar
XhmikosR committed
1880

1881
        $(this._element).addClass(ClassName.IN);
XhmikosR's avatar
XhmikosR committed
1882

Mark Otto's avatar
Mark Otto committed
1883
1884
1885
        if (this._config.focus) {
          this._enforceFocus();
        }
XhmikosR's avatar
XhmikosR committed
1886

1887
1888
1889
        var shownEvent = $.Event(Event.SHOWN, {
          relatedTarget: relatedTarget
        });
XhmikosR's avatar
XhmikosR committed
1890

1891
        var transitionComplete = function transitionComplete() {
Mark Otto's avatar
Mark Otto committed
1892
1893
1894
          if (_this8._config.focus) {
            _this8._element.focus();
          }
1895
1896
          $(_this8._element).trigger(shownEvent);
        };
XhmikosR's avatar
XhmikosR committed
1897

1898
1899
1900
1901
1902
1903
1904
1905
1906
1907
1908
1909
1910
        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) {
Chris Rebert's avatar
Chris Rebert committed
1911
          if (document !== event.target && _this9._element !== event.target && !$(_this9._element).has(event.target).length) {
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
1946
1947
1948
1949
1950
1951
1952
1953
1954
1955
1956
1957
1958
1959
1960
1961
1962
1963
1964
            _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
1965

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

1968
1969
        if (this._isShown && this._config.backdrop) {
          var doAnimate = Util.supportsTransitionEnd() && animate;
XhmikosR's avatar
XhmikosR committed
1970

1971
1972
          this._backdrop = document.createElement('div');
          this._backdrop.className = ClassName.BACKDROP;
XhmikosR's avatar
XhmikosR committed
1973

1974
1975
1976
          if (animate) {
            $(this._backdrop).addClass(animate);
          }
XhmikosR's avatar
XhmikosR committed
1977

Jacob Thornton's avatar
Jacob Thornton committed
1978
          $(this._backdrop).appendTo(document.body);
1979
1980
1981
1982
1983
1984
1985
1986
1987
1988
1989
1990
1991
1992
1993
1994
1995
1996
1997

          $(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
1998

1999
          $(this._backdrop).addClass(ClassName.IN);
XhmikosR's avatar
XhmikosR committed
2000

For faster browsing, not all history is shown. View entire blame