assets/javascripts/bootstrap.js in bootstrap-4.0.0.alpha5 vs assets/javascripts/bootstrap.js in bootstrap-4.0.0.alpha6
- old
+ new
@@ -1,13 +1,13 @@
/*!
- * Bootstrap v4.0.0-alpha.5 (https://getbootstrap.com)
- * Copyright 2011-2016 The Bootstrap Authors (https://github.com/twbs/bootstrap/graphs/contributors)
+ * Bootstrap v4.0.0-alpha.6 (https://getbootstrap.com)
+ * Copyright 2011-2017 The Bootstrap Authors (https://github.com/twbs/bootstrap/graphs/contributors)
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
*/
if (typeof jQuery === 'undefined') {
- throw new Error('Bootstrap\'s JavaScript requires jQuery')
+ throw new Error('Bootstrap\'s JavaScript requires jQuery. jQuery must be included before Bootstrap\'s JavaScript.')
}
+function ($) {
var version = $.fn.jquery.split(' ')[0].split('.')
if ((version[0] < 2 && version[1] < 9) || (version[0] == 1 && version[1] == 9 && version[2] < 1) || (version[0] >= 4)) {
@@ -28,11 +28,11 @@
function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
/**
* --------------------------------------------------------------------------
- * Bootstrap (v4.0.0-alpha.5): util.js
+ * Bootstrap (v4.0.0-alpha.6): util.js
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
* --------------------------------------------------------------------------
*/
var Util = function ($) {
@@ -83,11 +83,13 @@
var el = document.createElement('bootstrap');
for (var name in TransitionEndEvent) {
if (el.style[name] !== undefined) {
- return { end: TransitionEndEvent[name] };
+ return {
+ end: TransitionEndEvent[name]
+ };
}
}
return false;
}
@@ -130,13 +132,12 @@
TRANSITION_END: 'bsTransitionEnd',
getUID: function getUID(prefix) {
do {
- /* eslint-disable no-bitwise */
+ // eslint-disable-next-line no-bitwise
prefix += ~~(Math.random() * MAX_UID); // "~~" acts like a faster Math.floor() here
- /* eslint-enable no-bitwise */
} while (document.getElementById(prefix));
return prefix;
},
getSelectorFromElement: function getSelectorFromElement(element) {
var selector = element.getAttribute('data-target');
@@ -147,11 +148,11 @@
}
return selector;
},
reflow: function reflow(element) {
- new Function('bs', 'return bs')(element.offsetHeight);
+ return element.offsetHeight;
},
triggerTransitionEnd: function triggerTransitionEnd(element) {
$(element).trigger(transition.end);
},
supportsTransitionEnd: function supportsTransitionEnd() {
@@ -160,18 +161,12 @@
typeCheckConfig: function typeCheckConfig(componentName, config, configTypes) {
for (var property in configTypes) {
if (configTypes.hasOwnProperty(property)) {
var expectedTypes = configTypes[property];
var value = config[property];
- var valueType = void 0;
+ var valueType = value && isElement(value) ? 'element' : toType(value);
- if (value && isElement(value)) {
- valueType = 'element';
- } else {
- valueType = toType(value);
- }
-
if (!new RegExp(expectedTypes).test(valueType)) {
throw new Error(componentName.toUpperCase() + ': ' + ('Option "' + property + '" provided type "' + valueType + '" ') + ('but expected type "' + expectedTypes + '".'));
}
}
}
@@ -183,11 +178,11 @@
return Util;
}(jQuery);
/**
* --------------------------------------------------------------------------
- * Bootstrap (v4.0.0-alpha.5): alert.js
+ * Bootstrap (v4.0.0-alpha.6): alert.js
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
* --------------------------------------------------------------------------
*/
var Alert = function ($) {
@@ -197,11 +192,11 @@
* Constants
* ------------------------------------------------------------------------
*/
var NAME = 'alert';
- var VERSION = '4.0.0-alpha.5';
+ var VERSION = '4.0.0-alpha.6';
var DATA_KEY = 'bs.alert';
var EVENT_KEY = '.' + DATA_KEY;
var DATA_API_KEY = '.data-api';
var JQUERY_NO_CONFLICT = $.fn[NAME];
var TRANSITION_DURATION = 150;
@@ -217,11 +212,11 @@
};
var ClassName = {
ALERT: 'alert',
FADE: 'fade',
- IN: 'in'
+ SHOW: 'show'
};
/**
* ------------------------------------------------------------------------
* Class Definition
@@ -280,18 +275,22 @@
$(element).trigger(closeEvent);
return closeEvent;
};
Alert.prototype._removeElement = function _removeElement(element) {
- $(element).removeClass(ClassName.IN);
+ var _this2 = this;
+ $(element).removeClass(ClassName.SHOW);
+
if (!Util.supportsTransitionEnd() || !$(element).hasClass(ClassName.FADE)) {
this._destroyElement(element);
return;
}
- $(element).one(Util.TRANSITION_END, $.proxy(this._destroyElement, this, element)).emulateTransitionEnd(TRANSITION_DURATION);
+ $(element).one(Util.TRANSITION_END, function (event) {
+ return _this2._destroyElement(element, event);
+ }).emulateTransitionEnd(TRANSITION_DURATION);
};
Alert.prototype._destroyElement = function _destroyElement(element) {
$(element).detach().trigger(Event.CLOSED).remove();
};
@@ -358,11 +357,11 @@
return Alert;
}(jQuery);
/**
* --------------------------------------------------------------------------
- * Bootstrap (v4.0.0-alpha.5): button.js
+ * Bootstrap (v4.0.0-alpha.6): button.js
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
* --------------------------------------------------------------------------
*/
var Button = function ($) {
@@ -372,11 +371,11 @@
* Constants
* ------------------------------------------------------------------------
*/
var NAME = 'button';
- var VERSION = '4.0.0-alpha.5';
+ var VERSION = '4.0.0-alpha.6';
var DATA_KEY = 'bs.button';
var EVENT_KEY = '.' + DATA_KEY;
var DATA_API_KEY = '.data-api';
var JQUERY_NO_CONFLICT = $.fn[NAME];
@@ -436,19 +435,19 @@
}
}
if (triggerChangeEvent) {
input.checked = !$(this._element).hasClass(ClassName.ACTIVE);
- $(this._element).trigger('change');
+ $(input).trigger('change');
}
input.focus();
}
- } else {
- this._element.setAttribute('aria-pressed', !$(this._element).hasClass(ClassName.ACTIVE));
}
+ this._element.setAttribute('aria-pressed', !$(this._element).hasClass(ClassName.ACTIVE));
+
if (triggerChangeEvent) {
$(this._element).toggleClass(ClassName.ACTIVE);
}
};
@@ -521,11 +520,11 @@
return Button;
}(jQuery);
/**
* --------------------------------------------------------------------------
- * Bootstrap (v4.0.0-alpha.5): carousel.js
+ * Bootstrap (v4.0.0-alpha.6): carousel.js
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
* --------------------------------------------------------------------------
*/
var Carousel = function ($) {
@@ -535,11 +534,11 @@
* Constants
* ------------------------------------------------------------------------
*/
var NAME = 'carousel';
- var VERSION = '4.0.0-alpha.5';
+ var VERSION = '4.0.0-alpha.6';
var DATA_KEY = 'bs.carousel';
var EVENT_KEY = '.' + DATA_KEY;
var DATA_API_KEY = '.data-api';
var JQUERY_NO_CONFLICT = $.fn[NAME];
var TRANSITION_DURATION = 600;
@@ -562,11 +561,13 @@
wrap: 'boolean'
};
var Direction = {
NEXT: 'next',
- PREVIOUS: 'prev'
+ PREV: 'prev',
+ LEFT: 'left',
+ RIGHT: 'right'
};
var Event = {
SLIDE: 'slide' + EVENT_KEY,
SLID: 'slid' + EVENT_KEY,
@@ -579,20 +580,22 @@
var ClassName = {
CAROUSEL: 'carousel',
ACTIVE: 'active',
SLIDE: 'slide',
- RIGHT: 'right',
- LEFT: 'left',
+ RIGHT: 'carousel-item-right',
+ LEFT: 'carousel-item-left',
+ NEXT: 'carousel-item-next',
+ PREV: 'carousel-item-prev',
ITEM: 'carousel-item'
};
var Selector = {
ACTIVE: '.active',
ACTIVE_ITEM: '.active.carousel-item',
ITEM: '.carousel-item',
- NEXT_PREV: '.next, .prev',
+ NEXT_PREV: '.carousel-item-next, .carousel-item-prev',
INDICATORS: '.carousel-indicators',
DATA_SLIDE: '[data-slide], [data-slide-to]',
DATA_RIDE: '[data-ride="carousel"]'
};
@@ -623,26 +626,28 @@
// getters
// public
Carousel.prototype.next = function next() {
- if (!this._isSliding) {
- this._slide(Direction.NEXT);
+ if (this._isSliding) {
+ throw new Error('Carousel is sliding');
}
+ this._slide(Direction.NEXT);
};
Carousel.prototype.nextWhenVisible = function nextWhenVisible() {
// Don't call next when the page isn't visible
if (!document.hidden) {
this.next();
}
};
Carousel.prototype.prev = function prev() {
- if (!this._isSliding) {
- this._slide(Direction.PREVIOUS);
+ if (this._isSliding) {
+ throw new Error('Carousel is sliding');
}
+ this._slide(Direction.PREVIOUS);
};
Carousel.prototype.pause = function pause(event) {
if (!event) {
this._isPaused = true;
@@ -666,16 +671,16 @@
clearInterval(this._interval);
this._interval = null;
}
if (this._config.interval && !this._isPaused) {
- this._interval = setInterval($.proxy(document.visibilityState ? this.nextWhenVisible : this.next, this), this._config.interval);
+ this._interval = setInterval((document.visibilityState ? this.nextWhenVisible : this.next).bind(this), this._config.interval);
}
};
Carousel.prototype.to = function to(index) {
- var _this2 = this;
+ var _this3 = this;
this._activeElement = $(this._element).find(Selector.ACTIVE_ITEM)[0];
var activeIndex = this._getItemIndex(this._activeElement);
@@ -683,11 +688,11 @@
return;
}
if (this._isSliding) {
$(this._element).one(Event.SLID, function () {
- return _this2.to(index);
+ return _this3.to(index);
});
return;
}
if (activeIndex === index) {
@@ -722,31 +727,39 @@
Util.typeCheckConfig(NAME, config, DefaultType);
return config;
};
Carousel.prototype._addEventListeners = function _addEventListeners() {
+ var _this4 = this;
+
if (this._config.keyboard) {
- $(this._element).on(Event.KEYDOWN, $.proxy(this._keydown, this));
+ $(this._element).on(Event.KEYDOWN, function (event) {
+ return _this4._keydown(event);
+ });
}
if (this._config.pause === 'hover' && !('ontouchstart' in document.documentElement)) {
- $(this._element).on(Event.MOUSEENTER, $.proxy(this.pause, this)).on(Event.MOUSELEAVE, $.proxy(this.cycle, this));
+ $(this._element).on(Event.MOUSEENTER, function (event) {
+ return _this4.pause(event);
+ }).on(Event.MOUSELEAVE, function (event) {
+ return _this4.cycle(event);
+ });
}
};
Carousel.prototype._keydown = function _keydown(event) {
- event.preventDefault();
-
if (/input|textarea/i.test(event.target.tagName)) {
return;
}
switch (event.which) {
case ARROW_LEFT_KEYCODE:
+ event.preventDefault();
this.prev();
break;
case ARROW_RIGHT_KEYCODE:
+ event.preventDefault();
this.next();
break;
default:
return;
}
@@ -772,14 +785,14 @@
var itemIndex = (activeIndex + delta) % this._items.length;
return itemIndex === -1 ? this._items[this._items.length - 1] : this._items[itemIndex];
};
- Carousel.prototype._triggerSlideEvent = function _triggerSlideEvent(relatedTarget, directionalClassname) {
+ Carousel.prototype._triggerSlideEvent = function _triggerSlideEvent(relatedTarget, eventDirectionName) {
var slideEvent = $.Event(Event.SLIDE, {
relatedTarget: relatedTarget,
- direction: directionalClassname
+ direction: eventDirectionName
});
$(this._element).trigger(slideEvent);
return slideEvent;
@@ -796,25 +809,37 @@
}
}
};
Carousel.prototype._slide = function _slide(direction, element) {
- var _this3 = this;
+ var _this5 = this;
var activeElement = $(this._element).find(Selector.ACTIVE_ITEM)[0];
var nextElement = element || activeElement && this._getItemByDirection(direction, activeElement);
var isCycling = Boolean(this._interval);
- var directionalClassName = direction === Direction.NEXT ? ClassName.LEFT : ClassName.RIGHT;
+ var directionalClassName = void 0;
+ var orderClassName = void 0;
+ var eventDirectionName = void 0;
+ if (direction === Direction.NEXT) {
+ directionalClassName = ClassName.LEFT;
+ orderClassName = ClassName.NEXT;
+ eventDirectionName = Direction.LEFT;
+ } else {
+ directionalClassName = ClassName.RIGHT;
+ orderClassName = ClassName.PREV;
+ eventDirectionName = Direction.RIGHT;
+ }
+
if (nextElement && $(nextElement).hasClass(ClassName.ACTIVE)) {
this._isSliding = false;
return;
}
- var slideEvent = this._triggerSlideEvent(nextElement, directionalClassName);
+ var slideEvent = this._triggerSlideEvent(nextElement, eventDirectionName);
if (slideEvent.isDefaultPrevented()) {
return;
}
if (!activeElement || !nextElement) {
@@ -830,33 +855,31 @@
this._setActiveIndicatorElement(nextElement);
var slidEvent = $.Event(Event.SLID, {
relatedTarget: nextElement,
- direction: directionalClassName
+ direction: eventDirectionName
});
if (Util.supportsTransitionEnd() && $(this._element).hasClass(ClassName.SLIDE)) {
- $(nextElement).addClass(direction);
+ $(nextElement).addClass(orderClassName);
Util.reflow(nextElement);
$(activeElement).addClass(directionalClassName);
$(nextElement).addClass(directionalClassName);
$(activeElement).one(Util.TRANSITION_END, function () {
- $(nextElement).removeClass(directionalClassName).removeClass(direction);
+ $(nextElement).removeClass(directionalClassName + ' ' + orderClassName).addClass(ClassName.ACTIVE);
- $(nextElement).addClass(ClassName.ACTIVE);
+ $(activeElement).removeClass(ClassName.ACTIVE + ' ' + orderClassName + ' ' + directionalClassName);
- $(activeElement).removeClass(ClassName.ACTIVE).removeClass(direction).removeClass(directionalClassName);
+ _this5._isSliding = false;
- _this3._isSliding = false;
-
setTimeout(function () {
- return $(_this3._element).trigger(slidEvent);
+ return $(_this5._element).trigger(slidEvent);
}, 0);
}).emulateTransitionEnd(TRANSITION_DURATION);
} else {
$(activeElement).removeClass(ClassName.ACTIVE);
$(nextElement).addClass(ClassName.ACTIVE);
@@ -977,11 +1000,11 @@
return Carousel;
}(jQuery);
/**
* --------------------------------------------------------------------------
- * Bootstrap (v4.0.0-alpha.5): collapse.js
+ * Bootstrap (v4.0.0-alpha.6): collapse.js
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
* --------------------------------------------------------------------------
*/
var Collapse = function ($) {
@@ -991,11 +1014,11 @@
* Constants
* ------------------------------------------------------------------------
*/
var NAME = 'collapse';
- var VERSION = '4.0.0-alpha.5';
+ var VERSION = '4.0.0-alpha.6';
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;
@@ -1017,11 +1040,11 @@
HIDDEN: 'hidden' + EVENT_KEY,
CLICK_DATA_API: 'click' + EVENT_KEY + DATA_API_KEY
};
var ClassName = {
- IN: 'in',
+ SHOW: 'show',
COLLAPSE: 'collapse',
COLLAPSING: 'collapsing',
COLLAPSED: 'collapsed'
};
@@ -1029,11 +1052,11 @@
WIDTH: 'width',
HEIGHT: 'height'
};
var Selector = {
- ACTIVES: '.card > .in, .card > .collapsing',
+ ACTIVES: '.card > .show, .card > .collapsing',
DATA_TOGGLE: '[data-toggle="collapse"]'
};
/**
* ------------------------------------------------------------------------
@@ -1064,29 +1087,33 @@
// getters
// public
Collapse.prototype.toggle = function toggle() {
- if ($(this._element).hasClass(ClassName.IN)) {
+ if ($(this._element).hasClass(ClassName.SHOW)) {
this.hide();
} else {
this.show();
}
};
Collapse.prototype.show = function show() {
- var _this4 = this;
+ var _this6 = this;
- if (this._isTransitioning || $(this._element).hasClass(ClassName.IN)) {
+ if (this._isTransitioning) {
+ throw new Error('Collapse is transitioning');
+ }
+
+ if ($(this._element).hasClass(ClassName.SHOW)) {
return;
}
var actives = void 0;
var activesData = void 0;
if (this._parent) {
- actives = $.makeArray($(Selector.ACTIVES));
+ actives = $.makeArray($(this._parent).find(Selector.ACTIVES));
if (!actives.length) {
actives = null;
}
}
@@ -1122,17 +1149,17 @@
}
this.setTransitioning(true);
var complete = function complete() {
- $(_this4._element).removeClass(ClassName.COLLAPSING).addClass(ClassName.COLLAPSE).addClass(ClassName.IN);
+ $(_this6._element).removeClass(ClassName.COLLAPSING).addClass(ClassName.COLLAPSE).addClass(ClassName.SHOW);
- _this4._element.style[dimension] = '';
+ _this6._element.style[dimension] = '';
- _this4.setTransitioning(false);
+ _this6.setTransitioning(false);
- $(_this4._element).trigger(Event.SHOWN);
+ $(_this6._element).trigger(Event.SHOWN);
};
if (!Util.supportsTransitionEnd()) {
complete();
return;
@@ -1145,13 +1172,17 @@
this._element.style[dimension] = this._element[scrollSize] + 'px';
};
Collapse.prototype.hide = function hide() {
- var _this5 = this;
+ var _this7 = this;
- if (this._isTransitioning || !$(this._element).hasClass(ClassName.IN)) {
+ if (this._isTransitioning) {
+ throw new Error('Collapse is transitioning');
+ }
+
+ if (!$(this._element).hasClass(ClassName.SHOW)) {
return;
}
var startEvent = $.Event(Event.HIDE);
$(this._element).trigger(startEvent);
@@ -1164,23 +1195,23 @@
this._element.style[dimension] = this._element[offsetDimension] + 'px';
Util.reflow(this._element);
- $(this._element).addClass(ClassName.COLLAPSING).removeClass(ClassName.COLLAPSE).removeClass(ClassName.IN);
+ $(this._element).addClass(ClassName.COLLAPSING).removeClass(ClassName.COLLAPSE).removeClass(ClassName.SHOW);
this._element.setAttribute('aria-expanded', false);
if (this._triggerArray.length) {
$(this._triggerArray).addClass(ClassName.COLLAPSED).attr('aria-expanded', false);
}
this.setTransitioning(true);
var complete = function complete() {
- _this5.setTransitioning(false);
- $(_this5._element).removeClass(ClassName.COLLAPSING).addClass(ClassName.COLLAPSE).trigger(Event.HIDDEN);
+ _this7.setTransitioning(false);
+ $(_this7._element).removeClass(ClassName.COLLAPSING).addClass(ClassName.COLLAPSE).trigger(Event.HIDDEN);
};
this._element.style[dimension] = '';
if (!Util.supportsTransitionEnd()) {
@@ -1218,25 +1249,25 @@
var hasWidth = $(this._element).hasClass(Dimension.WIDTH);
return hasWidth ? Dimension.WIDTH : Dimension.HEIGHT;
};
Collapse.prototype._getParent = function _getParent() {
- var _this6 = this;
+ var _this8 = this;
var parent = $(this._config.parent)[0];
var selector = '[data-toggle="collapse"][data-parent="' + this._config.parent + '"]';
$(parent).find(selector).each(function (i, element) {
- _this6._addAriaAndCollapsedClass(Collapse._getTargetFromElement(element), [element]);
+ _this8._addAriaAndCollapsedClass(Collapse._getTargetFromElement(element), [element]);
});
return parent;
};
Collapse.prototype._addAriaAndCollapsedClass = function _addAriaAndCollapsedClass(element, triggerArray) {
if (element) {
- var isOpen = $(element).hasClass(ClassName.IN);
+ var isOpen = $(element).hasClass(ClassName.SHOW);
element.setAttribute('aria-expanded', isOpen);
if (triggerArray.length) {
$(triggerArray).toggleClass(ClassName.COLLAPSED, !isOpen).attr('aria-expanded', isOpen);
}
@@ -1321,11 +1352,11 @@
return Collapse;
}(jQuery);
/**
* --------------------------------------------------------------------------
- * Bootstrap (v4.0.0-alpha.5): dropdown.js
+ * Bootstrap (v4.0.0-alpha.6): dropdown.js
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
* --------------------------------------------------------------------------
*/
var Dropdown = function ($) {
@@ -1335,11 +1366,11 @@
* Constants
* ------------------------------------------------------------------------
*/
var NAME = 'dropdown';
- var VERSION = '4.0.0-alpha.5';
+ var VERSION = '4.0.0-alpha.6';
var DATA_KEY = 'bs.dropdown';
var EVENT_KEY = '.' + DATA_KEY;
var DATA_API_KEY = '.data-api';
var JQUERY_NO_CONFLICT = $.fn[NAME];
var ESCAPE_KEYCODE = 27; // KeyboardEvent.which value for Escape (Esc) key
@@ -1352,17 +1383,18 @@
HIDDEN: 'hidden' + EVENT_KEY,
SHOW: 'show' + EVENT_KEY,
SHOWN: 'shown' + EVENT_KEY,
CLICK: 'click' + EVENT_KEY,
CLICK_DATA_API: 'click' + EVENT_KEY + DATA_API_KEY,
+ FOCUSIN_DATA_API: 'focusin' + EVENT_KEY + DATA_API_KEY,
KEYDOWN_DATA_API: 'keydown' + EVENT_KEY + DATA_API_KEY
};
var ClassName = {
BACKDROP: 'dropdown-backdrop',
DISABLED: 'disabled',
- OPEN: 'open'
+ SHOW: 'show'
};
var Selector = {
BACKDROP: '.dropdown-backdrop',
DATA_TOGGLE: '[data-toggle="dropdown"]',
@@ -1396,11 +1428,11 @@
if (this.disabled || $(this).hasClass(ClassName.DISABLED)) {
return false;
}
var parent = Dropdown._getParentFromElement(this);
- var isActive = $(parent).hasClass(ClassName.OPEN);
+ var isActive = $(parent).hasClass(ClassName.SHOW);
Dropdown._clearMenus();
if (isActive) {
return false;
@@ -1413,23 +1445,25 @@
dropdown.className = ClassName.BACKDROP;
$(dropdown).insertBefore(this);
$(dropdown).on('click', Dropdown._clearMenus);
}
- var relatedTarget = { relatedTarget: this };
+ var relatedTarget = {
+ relatedTarget: this
+ };
var showEvent = $.Event(Event.SHOW, relatedTarget);
$(parent).trigger(showEvent);
if (showEvent.isDefaultPrevented()) {
return false;
}
this.focus();
- this.setAttribute('aria-expanded', 'true');
+ this.setAttribute('aria-expanded', true);
- $(parent).toggleClass(ClassName.OPEN);
+ $(parent).toggleClass(ClassName.SHOW);
$(parent).trigger($.Event(Event.SHOWN, relatedTarget));
return false;
};
@@ -1450,11 +1484,12 @@
Dropdown._jQueryInterface = function _jQueryInterface(config) {
return this.each(function () {
var data = $(this).data(DATA_KEY);
if (!data) {
- $(this).data(DATA_KEY, data = new Dropdown(this));
+ data = new Dropdown(this);
+ $(this).data(DATA_KEY, data);
}
if (typeof config === 'string') {
if (data[config] === undefined) {
throw new Error('No method named "' + config + '"');
@@ -1476,17 +1511,19 @@
var toggles = $.makeArray($(Selector.DATA_TOGGLE));
for (var i = 0; i < toggles.length; i++) {
var parent = Dropdown._getParentFromElement(toggles[i]);
- var relatedTarget = { relatedTarget: toggles[i] };
+ var relatedTarget = {
+ relatedTarget: toggles[i]
+ };
- if (!$(parent).hasClass(ClassName.OPEN)) {
+ if (!$(parent).hasClass(ClassName.SHOW)) {
continue;
}
- if (event && event.type === 'click' && /input|textarea/i.test(event.target.tagName) && $.contains(parent, event.target)) {
+ if (event && (event.type === 'click' && /input|textarea/i.test(event.target.tagName) || event.type === 'focusin') && $.contains(parent, event.target)) {
continue;
}
var hideEvent = $.Event(Event.HIDE, relatedTarget);
$(parent).trigger(hideEvent);
@@ -1494,11 +1531,11 @@
continue;
}
toggles[i].setAttribute('aria-expanded', 'false');
- $(parent).removeClass(ClassName.OPEN).trigger($.Event(Event.HIDDEN, relatedTarget));
+ $(parent).removeClass(ClassName.SHOW).trigger($.Event(Event.HIDDEN, relatedTarget));
}
};
Dropdown._getParentFromElement = function _getParentFromElement(element) {
var parent = void 0;
@@ -1522,11 +1559,11 @@
if (this.disabled || $(this).hasClass(ClassName.DISABLED)) {
return;
}
var parent = Dropdown._getParentFromElement(this);
- var isActive = $(parent).hasClass(ClassName.OPEN);
+ var isActive = $(parent).hasClass(ClassName.SHOW);
if (!isActive && event.which !== ESCAPE_KEYCODE || isActive && event.which === ESCAPE_KEYCODE) {
if (event.which === ESCAPE_KEYCODE) {
var toggle = $(parent).find(Selector.DATA_TOGGLE)[0];
@@ -1535,16 +1572,12 @@
$(this).trigger('click');
return;
}
- var items = $.makeArray($(Selector.VISIBLE_ITEMS));
+ var items = $(parent).find(Selector.VISIBLE_ITEMS).get();
- items = items.filter(function (item) {
- return item.offsetWidth || item.offsetHeight;
- });
-
if (!items.length) {
return;
}
var index = items.indexOf(event.target);
@@ -1580,11 +1613,11 @@
* ------------------------------------------------------------------------
* Data Api implementation
* ------------------------------------------------------------------------
*/
- $(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) {
+ $(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 + ' ' + Event.FOCUSIN_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();
});
/**
* ------------------------------------------------------------------------
@@ -1602,11 +1635,11 @@
return Dropdown;
}(jQuery);
/**
* --------------------------------------------------------------------------
- * Bootstrap (v4.0.0-alpha.5): modal.js
+ * Bootstrap (v4.0.0-alpha.6): modal.js
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
* --------------------------------------------------------------------------
*/
var Modal = function ($) {
@@ -1616,11 +1649,11 @@
* Constants
* ------------------------------------------------------------------------
*/
var NAME = 'modal';
- var VERSION = '4.0.0-alpha.5';
+ var VERSION = '4.0.0-alpha.6';
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;
@@ -1658,18 +1691,18 @@
var ClassName = {
SCROLLBAR_MEASURER: 'modal-scrollbar-measure',
BACKDROP: 'modal-backdrop',
OPEN: 'modal-open',
FADE: 'fade',
- IN: 'in'
+ SHOW: 'show'
};
var Selector = {
DIALOG: '.modal-dialog',
DATA_TOGGLE: '[data-toggle="modal"]',
DATA_DISMISS: '[data-dismiss="modal"]',
- FIXED_CONTENT: '.navbar-fixed-top, .navbar-fixed-bottom, .is-fixed'
+ FIXED_CONTENT: '.fixed-top, .fixed-bottom, .is-fixed, .sticky-top'
};
/**
* ------------------------------------------------------------------------
* Class Definition
@@ -1685,10 +1718,11 @@
this._dialog = $(element).find(Selector.DIALOG)[0];
this._backdrop = null;
this._isShown = false;
this._isBodyOverflowing = false;
this._ignoreBackdropClick = false;
+ this._isTransitioning = false;
this._originalBodyPadding = 0;
this._scrollbarWidth = 0;
}
// getters
@@ -1698,12 +1732,19 @@
Modal.prototype.toggle = function toggle(relatedTarget) {
return this._isShown ? this.hide() : this.show(relatedTarget);
};
Modal.prototype.show = function show(relatedTarget) {
- var _this7 = this;
+ var _this9 = this;
+ if (this._isTransitioning) {
+ throw new Error('Modal is transitioning');
+ }
+
+ if (Util.supportsTransitionEnd() && $(this._element).hasClass(ClassName.FADE)) {
+ this._isTransitioning = true;
+ }
var showEvent = $.Event(Event.SHOW, {
relatedTarget: relatedTarget
});
$(this._element).trigger(showEvent);
@@ -1720,30 +1761,44 @@
$(document.body).addClass(ClassName.OPEN);
this._setEscapeEvent();
this._setResizeEvent();
- $(this._element).on(Event.CLICK_DISMISS, Selector.DATA_DISMISS, $.proxy(this.hide, this));
+ $(this._element).on(Event.CLICK_DISMISS, Selector.DATA_DISMISS, function (event) {
+ return _this9.hide(event);
+ });
$(this._dialog).on(Event.MOUSEDOWN_DISMISS, function () {
- $(_this7._element).one(Event.MOUSEUP_DISMISS, function (event) {
- if ($(event.target).is(_this7._element)) {
- _this7._ignoreBackdropClick = true;
+ $(_this9._element).one(Event.MOUSEUP_DISMISS, function (event) {
+ if ($(event.target).is(_this9._element)) {
+ _this9._ignoreBackdropClick = true;
}
});
});
- this._showBackdrop($.proxy(this._showElement, this, relatedTarget));
+ this._showBackdrop(function () {
+ return _this9._showElement(relatedTarget);
+ });
};
Modal.prototype.hide = function hide(event) {
+ var _this10 = this;
+
if (event) {
event.preventDefault();
}
- var hideEvent = $.Event(Event.HIDE);
+ if (this._isTransitioning) {
+ throw new Error('Modal is transitioning');
+ }
+ var transition = Util.supportsTransitionEnd() && $(this._element).hasClass(ClassName.FADE);
+ if (transition) {
+ this._isTransitioning = true;
+ }
+
+ var hideEvent = $.Event(Event.HIDE);
$(this._element).trigger(hideEvent);
if (!this._isShown || hideEvent.isDefaultPrevented()) {
return;
}
@@ -1753,30 +1808,28 @@
this._setEscapeEvent();
this._setResizeEvent();
$(document).off(Event.FOCUSIN);
- $(this._element).removeClass(ClassName.IN);
+ $(this._element).removeClass(ClassName.SHOW);
$(this._element).off(Event.CLICK_DISMISS);
$(this._dialog).off(Event.MOUSEDOWN_DISMISS);
- if (Util.supportsTransitionEnd() && $(this._element).hasClass(ClassName.FADE)) {
-
- $(this._element).one(Util.TRANSITION_END, $.proxy(this._hideModal, this)).emulateTransitionEnd(TRANSITION_DURATION);
+ if (transition) {
+ $(this._element).one(Util.TRANSITION_END, function (event) {
+ return _this10._hideModal(event);
+ }).emulateTransitionEnd(TRANSITION_DURATION);
} else {
this._hideModal();
}
};
Modal.prototype.dispose = 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);
+ $(window, document, this._element, this._backdrop).off(EVENT_KEY);
this._config = null;
this._element = null;
this._dialog = null;
this._backdrop = null;
@@ -1794,11 +1847,11 @@
Util.typeCheckConfig(NAME, config, DefaultType);
return config;
};
Modal.prototype._showElement = function _showElement(relatedTarget) {
- var _this8 = this;
+ var _this11 = this;
var transition = Util.supportsTransitionEnd() && $(this._element).hasClass(ClassName.FADE);
if (!this._element.parentNode || this._element.parentNode.nodeType !== Node.ELEMENT_NODE) {
// don't move modals dom position
@@ -1811,77 +1864,83 @@
if (transition) {
Util.reflow(this._element);
}
- $(this._element).addClass(ClassName.IN);
+ $(this._element).addClass(ClassName.SHOW);
if (this._config.focus) {
this._enforceFocus();
}
var shownEvent = $.Event(Event.SHOWN, {
relatedTarget: relatedTarget
});
var transitionComplete = function transitionComplete() {
- if (_this8._config.focus) {
- _this8._element.focus();
+ if (_this11._config.focus) {
+ _this11._element.focus();
}
- $(_this8._element).trigger(shownEvent);
+ _this11._isTransitioning = false;
+ $(_this11._element).trigger(shownEvent);
};
if (transition) {
$(this._dialog).one(Util.TRANSITION_END, transitionComplete).emulateTransitionEnd(TRANSITION_DURATION);
} else {
transitionComplete();
}
};
Modal.prototype._enforceFocus = function _enforceFocus() {
- var _this9 = this;
+ var _this12 = this;
$(document).off(Event.FOCUSIN) // guard against infinite focus loop
.on(Event.FOCUSIN, function (event) {
- if (document !== event.target && _this9._element !== event.target && !$(_this9._element).has(event.target).length) {
- _this9._element.focus();
+ if (document !== event.target && _this12._element !== event.target && !$(_this12._element).has(event.target).length) {
+ _this12._element.focus();
}
});
};
Modal.prototype._setEscapeEvent = function _setEscapeEvent() {
- var _this10 = this;
+ var _this13 = this;
if (this._isShown && this._config.keyboard) {
$(this._element).on(Event.KEYDOWN_DISMISS, function (event) {
if (event.which === ESCAPE_KEYCODE) {
- _this10.hide();
+ _this13.hide();
}
});
} else if (!this._isShown) {
$(this._element).off(Event.KEYDOWN_DISMISS);
}
};
Modal.prototype._setResizeEvent = function _setResizeEvent() {
+ var _this14 = this;
+
if (this._isShown) {
- $(window).on(Event.RESIZE, $.proxy(this._handleUpdate, this));
+ $(window).on(Event.RESIZE, function (event) {
+ return _this14._handleUpdate(event);
+ });
} else {
$(window).off(Event.RESIZE);
}
};
Modal.prototype._hideModal = function _hideModal() {
- var _this11 = this;
+ var _this15 = this;
this._element.style.display = 'none';
this._element.setAttribute('aria-hidden', 'true');
+ this._isTransitioning = false;
this._showBackdrop(function () {
$(document.body).removeClass(ClassName.OPEN);
- _this11._resetAdjustments();
- _this11._resetScrollbar();
- $(_this11._element).trigger(Event.HIDDEN);
+ _this15._resetAdjustments();
+ _this15._resetScrollbar();
+ $(_this15._element).trigger(Event.HIDDEN);
});
};
Modal.prototype._removeBackdrop = function _removeBackdrop() {
if (this._backdrop) {
@@ -1889,11 +1948,11 @@
this._backdrop = null;
}
};
Modal.prototype._showBackdrop = function _showBackdrop(callback) {
- var _this12 = this;
+ var _this16 = this;
var animate = $(this._element).hasClass(ClassName.FADE) ? ClassName.FADE : '';
if (this._isShown && this._config.backdrop) {
var doAnimate = Util.supportsTransitionEnd() && animate;
@@ -1906,29 +1965,29 @@
}
$(this._backdrop).appendTo(document.body);
$(this._element).on(Event.CLICK_DISMISS, function (event) {
- if (_this12._ignoreBackdropClick) {
- _this12._ignoreBackdropClick = false;
+ if (_this16._ignoreBackdropClick) {
+ _this16._ignoreBackdropClick = false;
return;
}
if (event.target !== event.currentTarget) {
return;
}
- if (_this12._config.backdrop === 'static') {
- _this12._element.focus();
+ if (_this16._config.backdrop === 'static') {
+ _this16._element.focus();
} else {
- _this12.hide();
+ _this16.hide();
}
});
if (doAnimate) {
Util.reflow(this._backdrop);
}
- $(this._backdrop).addClass(ClassName.IN);
+ $(this._backdrop).addClass(ClassName.SHOW);
if (!callback) {
return;
}
@@ -1937,14 +1996,14 @@
return;
}
$(this._backdrop).one(Util.TRANSITION_END, callback).emulateTransitionEnd(BACKDROP_TRANSITION_DURATION);
} else if (!this._isShown && this._backdrop) {
- $(this._backdrop).removeClass(ClassName.IN);
+ $(this._backdrop).removeClass(ClassName.SHOW);
var callbackRemove = function callbackRemove() {
- _this12._removeBackdrop();
+ _this16._removeBackdrop();
if (callback) {
callback();
}
};
@@ -2056,34 +2115,34 @@
* Data Api implementation
* ------------------------------------------------------------------------
*/
$(document).on(Event.CLICK_DATA_API, Selector.DATA_TOGGLE, function (event) {
- var _this13 = this;
+ var _this17 = this;
var target = void 0;
var selector = Util.getSelectorFromElement(this);
if (selector) {
target = $(selector)[0];
}
var config = $(target).data(DATA_KEY) ? 'toggle' : $.extend({}, $(target).data(), $(this).data());
- if (this.tagName === 'A') {
+ if (this.tagName === 'A' || this.tagName === 'AREA') {
event.preventDefault();
}
var $target = $(target).one(Event.SHOW, function (showEvent) {
if (showEvent.isDefaultPrevented()) {
// only register focus restorer if modal will actually get shown
return;
}
$target.one(Event.HIDDEN, function () {
- if ($(_this13).is(':visible')) {
- _this13.focus();
+ if ($(_this17).is(':visible')) {
+ _this17.focus();
}
});
});
Modal._jQueryInterface.call($(target), config, this);
@@ -2105,11 +2164,11 @@
return Modal;
}(jQuery);
/**
* --------------------------------------------------------------------------
- * Bootstrap (v4.0.0-alpha.5): scrollspy.js
+ * Bootstrap (v4.0.0-alpha.6): scrollspy.js
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
* --------------------------------------------------------------------------
*/
var ScrollSpy = function ($) {
@@ -2119,11 +2178,11 @@
* Constants
* ------------------------------------------------------------------------
*/
var NAME = 'scrollspy';
- var VERSION = '4.0.0-alpha.5';
+ var VERSION = '4.0.0-alpha.6';
var DATA_KEY = 'bs.scrollspy';
var EVENT_KEY = '.' + DATA_KEY;
var DATA_API_KEY = '.data-api';
var JQUERY_NO_CONFLICT = $.fn[NAME];
@@ -2176,10 +2235,12 @@
* ------------------------------------------------------------------------
*/
var ScrollSpy = function () {
function ScrollSpy(element, config) {
+ var _this18 = this;
+
_classCallCheck(this, ScrollSpy);
this._element = element;
this._scrollElement = element.tagName === 'BODY' ? window : element;
this._config = this._getConfig(config);
@@ -2187,22 +2248,24 @@
this._offsets = [];
this._targets = [];
this._activeTarget = null;
this._scrollHeight = 0;
- $(this._scrollElement).on(Event.SCROLL, $.proxy(this._process, this));
+ $(this._scrollElement).on(Event.SCROLL, function (event) {
+ return _this18._process(event);
+ });
this.refresh();
this._process();
}
// getters
// public
ScrollSpy.prototype.refresh = function refresh() {
- var _this14 = this;
+ var _this19 = this;
var autoMethod = this._scrollElement !== this._scrollElement.window ? OffsetMethod.POSITION : OffsetMethod.OFFSET;
var offsetMethod = this._config.method === 'auto' ? autoMethod : this._config.method;
@@ -2231,12 +2294,12 @@
}).filter(function (item) {
return item;
}).sort(function (a, b) {
return a[0] - b[0];
}).forEach(function (item) {
- _this14._offsets.push(item[0]);
- _this14._targets.push(item[1]);
+ _this19._offsets.push(item[0]);
+ _this19._targets.push(item[1]);
});
};
ScrollSpy.prototype.dispose = function dispose() {
$.removeData(this._element, DATA_KEY);
@@ -2270,21 +2333,25 @@
return config;
};
ScrollSpy.prototype._getScrollTop = function _getScrollTop() {
- return this._scrollElement === window ? this._scrollElement.scrollY : this._scrollElement.scrollTop;
+ return this._scrollElement === window ? this._scrollElement.pageYOffset : this._scrollElement.scrollTop;
};
ScrollSpy.prototype._getScrollHeight = function _getScrollHeight() {
return this._scrollElement.scrollHeight || Math.max(document.body.scrollHeight, document.documentElement.scrollHeight);
};
+ ScrollSpy.prototype._getOffsetHeight = function _getOffsetHeight() {
+ return this._scrollElement === window ? window.innerHeight : this._scrollElement.offsetHeight;
+ };
+
ScrollSpy.prototype._process = function _process() {
var scrollTop = this._getScrollTop() + this._config.offset;
var scrollHeight = this._getScrollHeight();
- var maxScroll = this._config.offset + scrollHeight - this._scrollElement.offsetHeight;
+ var maxScroll = this._config.offset + scrollHeight - this._getOffsetHeight();
if (this._scrollHeight !== scrollHeight) {
this.refresh();
}
@@ -2292,13 +2359,14 @@
var target = this._targets[this._targets.length - 1];
if (this._activeTarget !== target) {
this._activate(target);
}
+ return;
}
- if (this._activeTarget && scrollTop < this._offsets[0]) {
+ if (this._activeTarget && scrollTop < this._offsets[0] && this._offsets[0] > 0) {
this._activeTarget = null;
this._clear();
return;
}
@@ -2327,11 +2395,11 @@
$link.closest(Selector.DROPDOWN).find(Selector.DROPDOWN_TOGGLE).addClass(ClassName.ACTIVE);
$link.addClass(ClassName.ACTIVE);
} else {
// todo (fat) this is kinda sus...
// recursively add actives to tested nav-links
- $link.parents(Selector.LI).find(Selector.NAV_LINKS).addClass(ClassName.ACTIVE);
+ $link.parents(Selector.LI).find('> ' + Selector.NAV_LINKS).addClass(ClassName.ACTIVE);
}
$(this._scrollElement).trigger(Event.ACTIVATE, {
relatedTarget: target
});
@@ -2344,11 +2412,11 @@
// static
ScrollSpy._jQueryInterface = function _jQueryInterface(config) {
return this.each(function () {
var data = $(this).data(DATA_KEY);
- var _config = (typeof config === 'undefined' ? 'undefined' : _typeof(config)) === 'object' && config || null;
+ var _config = (typeof config === 'undefined' ? 'undefined' : _typeof(config)) === 'object' && config;
if (!data) {
data = new ScrollSpy(this, _config);
$(this).data(DATA_KEY, data);
}
@@ -2408,11 +2476,11 @@
return ScrollSpy;
}(jQuery);
/**
* --------------------------------------------------------------------------
- * Bootstrap (v4.0.0-alpha.5): tab.js
+ * Bootstrap (v4.0.0-alpha.6): tab.js
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
* --------------------------------------------------------------------------
*/
var Tab = function ($) {
@@ -2422,11 +2490,11 @@
* Constants
* ------------------------------------------------------------------------
*/
var NAME = 'tab';
- var VERSION = '4.0.0-alpha.5';
+ var VERSION = '4.0.0-alpha.6';
var DATA_KEY = 'bs.tab';
var EVENT_KEY = '.' + DATA_KEY;
var DATA_API_KEY = '.data-api';
var JQUERY_NO_CONFLICT = $.fn[NAME];
var TRANSITION_DURATION = 150;
@@ -2440,19 +2508,20 @@
};
var ClassName = {
DROPDOWN_MENU: 'dropdown-menu',
ACTIVE: 'active',
+ DISABLED: 'disabled',
FADE: 'fade',
- IN: 'in'
+ SHOW: 'show'
};
var Selector = {
A: 'a',
LI: 'li',
DROPDOWN: '.dropdown',
- UL: 'ul:not(.dropdown-menu)',
+ LIST: 'ul:not(.dropdown-menu), ol:not(.dropdown-menu), nav:not(.dropdown-menu)',
FADE_CHILD: '> .nav-item .fade, > .fade',
ACTIVE: '.active',
ACTIVE_CHILD: '> .nav-item > .active, > .active',
DATA_TOGGLE: '[data-toggle="tab"], [data-toggle="pill"]',
DROPDOWN_TOGGLE: '.dropdown-toggle',
@@ -2475,23 +2544,23 @@
// getters
// public
Tab.prototype.show = function show() {
- var _this15 = this;
+ var _this20 = this;
- if (this._element.parentNode && this._element.parentNode.nodeType === Node.ELEMENT_NODE && $(this._element).hasClass(ClassName.ACTIVE)) {
+ if (this._element.parentNode && this._element.parentNode.nodeType === Node.ELEMENT_NODE && $(this._element).hasClass(ClassName.ACTIVE) || $(this._element).hasClass(ClassName.DISABLED)) {
return;
}
var target = void 0;
var previous = void 0;
- var ulElement = $(this._element).closest(Selector.UL)[0];
+ var listElement = $(this._element).closest(Selector.LIST)[0];
var selector = Util.getSelectorFromElement(this._element);
- if (ulElement) {
- previous = $.makeArray($(ulElement).find(Selector.ACTIVE));
+ if (listElement) {
+ previous = $.makeArray($(listElement).find(Selector.ACTIVE));
previous = previous[previous.length - 1];
}
var hideEvent = $.Event(Event.HIDE, {
relatedTarget: this._element
@@ -2513,23 +2582,23 @@
if (selector) {
target = $(selector)[0];
}
- this._activate(this._element, ulElement);
+ this._activate(this._element, listElement);
var complete = function complete() {
var hiddenEvent = $.Event(Event.HIDDEN, {
- relatedTarget: _this15._element
+ relatedTarget: _this20._element
});
var shownEvent = $.Event(Event.SHOWN, {
relatedTarget: previous
});
$(previous).trigger(hiddenEvent);
- $(_this15._element).trigger(shownEvent);
+ $(_this20._element).trigger(shownEvent);
};
if (target) {
this._activate(target, target.parentNode, complete);
} else {
@@ -2543,31 +2612,35 @@
};
// private
Tab.prototype._activate = function _activate(element, container, callback) {
+ var _this21 = this;
+
var active = $(container).find(Selector.ACTIVE_CHILD)[0];
var isTransitioning = callback && Util.supportsTransitionEnd() && (active && $(active).hasClass(ClassName.FADE) || Boolean($(container).find(Selector.FADE_CHILD)[0]));
- var complete = $.proxy(this._transitionComplete, this, element, active, isTransitioning, callback);
+ var complete = function complete() {
+ return _this21._transitionComplete(element, active, isTransitioning, callback);
+ };
if (active && isTransitioning) {
$(active).one(Util.TRANSITION_END, complete).emulateTransitionEnd(TRANSITION_DURATION);
} else {
complete();
}
if (active) {
- $(active).removeClass(ClassName.IN);
+ $(active).removeClass(ClassName.SHOW);
}
};
Tab.prototype._transitionComplete = function _transitionComplete(element, active, isTransitioning, callback) {
if (active) {
$(active).removeClass(ClassName.ACTIVE);
- var dropdownChild = $(active).find(Selector.DROPDOWN_ACTIVE_CHILD)[0];
+ var dropdownChild = $(active.parentNode).find(Selector.DROPDOWN_ACTIVE_CHILD)[0];
if (dropdownChild) {
$(dropdownChild).removeClass(ClassName.ACTIVE);
}
@@ -2577,11 +2650,11 @@
$(element).addClass(ClassName.ACTIVE);
element.setAttribute('aria-expanded', true);
if (isTransitioning) {
Util.reflow(element);
- $(element).addClass(ClassName.IN);
+ $(element).addClass(ClassName.SHOW);
} else {
$(element).removeClass(ClassName.FADE);
}
if (element.parentNode && $(element.parentNode).hasClass(ClassName.DROPDOWN_MENU)) {
@@ -2605,11 +2678,11 @@
return this.each(function () {
var $this = $(this);
var data = $this.data(DATA_KEY);
if (!data) {
- data = data = new Tab(this);
+ data = new Tab(this);
$this.data(DATA_KEY, data);
}
if (typeof config === 'string') {
if (data[config] === undefined) {
@@ -2659,33 +2732,33 @@
/* global Tether */
/**
* --------------------------------------------------------------------------
- * Bootstrap (v4.0.0-alpha.5): tooltip.js
+ * Bootstrap (v4.0.0-alpha.6): tooltip.js
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
* --------------------------------------------------------------------------
*/
var Tooltip = function ($) {
/**
* Check for Tether dependency
* Tether - http://tether.io/
*/
- if (window.Tether === undefined) {
+ if (typeof Tether === 'undefined') {
throw new Error('Bootstrap tooltips require Tether (http://tether.io/)');
}
/**
* ------------------------------------------------------------------------
* Constants
* ------------------------------------------------------------------------
*/
var NAME = 'tooltip';
- var VERSION = '4.0.0-alpha.5';
+ var VERSION = '4.0.0-alpha.6';
var DATA_KEY = 'bs.tooltip';
var EVENT_KEY = '.' + DATA_KEY;
var JQUERY_NO_CONFLICT = $.fn[NAME];
var TRANSITION_DURATION = 150;
var CLASS_PREFIX = 'bs-tether';
@@ -2698,11 +2771,12 @@
delay: 0,
html: false,
selector: false,
placement: 'top',
offset: '0 0',
- constraints: []
+ constraints: [],
+ container: false
};
var DefaultType = {
animation: 'boolean',
template: 'string',
@@ -2711,22 +2785,23 @@
delay: '(number|object)',
html: 'boolean',
selector: '(string|boolean)',
placement: '(string|function)',
offset: 'string',
- constraints: 'array'
+ constraints: 'array',
+ container: '(string|element|boolean)'
};
var AttachmentMap = {
TOP: 'bottom center',
RIGHT: 'middle left',
BOTTOM: 'top center',
LEFT: 'middle right'
};
var HoverState = {
- IN: 'in',
+ SHOW: 'show',
OUT: 'out'
};
var Event = {
HIDE: 'hide' + EVENT_KEY,
@@ -2741,11 +2816,11 @@
MOUSELEAVE: 'mouseleave' + EVENT_KEY
};
var ClassName = {
FADE: 'fade',
- IN: 'in'
+ SHOW: 'show'
};
var Selector = {
TOOLTIP: '.tooltip',
TOOLTIP_INNER: '.tooltip-inner'
@@ -2776,10 +2851,11 @@
// private
this._isEnabled = true;
this._timeout = 0;
this._hoverState = '';
this._activeTrigger = {};
+ this._isTransitioning = false;
this._tether = null;
// protected
this.element = element;
this.config = this._getConfig(config);
@@ -2821,11 +2897,11 @@
} else {
context._leave(null, context);
}
} else {
- if ($(this.getTipElement()).hasClass(ClassName.IN)) {
+ if ($(this.getTipElement()).hasClass(ClassName.SHOW)) {
this._leave(null, this);
return;
}
this._enter(null, this);
@@ -2838,10 +2914,11 @@
this.cleanupTether();
$.removeData(this.element, this.constructor.DATA_KEY);
$(this.element).off(this.constructor.EVENT_KEY);
+ $(this.element).closest('.modal').off('hide.bs.modal');
if (this.tip) {
$(this.tip).remove();
}
@@ -2855,15 +2932,21 @@
this.config = null;
this.tip = null;
};
Tooltip.prototype.show = function show() {
- var _this16 = this;
+ var _this22 = this;
- var showEvent = $.Event(this.constructor.Event.SHOW);
+ if ($(this.element).css('display') === 'none') {
+ throw new Error('Please use show on visible elements');
+ }
+ var showEvent = $.Event(this.constructor.Event.SHOW);
if (this.isWithContent() && this._isEnabled) {
+ if (this._isTransitioning) {
+ throw new Error('Tooltip is transitioning');
+ }
$(this.element).trigger(showEvent);
var isInTheDom = $.contains(this.element.ownerDocument.documentElement, this.element);
if (showEvent.isDefaultPrevented() || !isInTheDom) {
@@ -2884,12 +2967,14 @@
var placement = typeof this.config.placement === 'function' ? this.config.placement.call(this, tip, this.element) : this.config.placement;
var attachment = this._getAttachment(placement);
- $(tip).data(this.constructor.DATA_KEY, this).appendTo(document.body);
+ var container = this.config.container === false ? document.body : $(this.config.container);
+ $(tip).data(this.constructor.DATA_KEY, this).appendTo(container);
+
$(this.element).trigger(this.constructor.Event.INSERTED);
this._tether = new Tether({
attachment: attachment,
element: tip,
@@ -2902,45 +2987,51 @@
});
Util.reflow(tip);
this._tether.position();
- $(tip).addClass(ClassName.IN);
+ $(tip).addClass(ClassName.SHOW);
var complete = function complete() {
- var prevHoverState = _this16._hoverState;
- _this16._hoverState = null;
+ var prevHoverState = _this22._hoverState;
+ _this22._hoverState = null;
+ _this22._isTransitioning = false;
- $(_this16.element).trigger(_this16.constructor.Event.SHOWN);
+ $(_this22.element).trigger(_this22.constructor.Event.SHOWN);
if (prevHoverState === HoverState.OUT) {
- _this16._leave(null, _this16);
+ _this22._leave(null, _this22);
}
};
if (Util.supportsTransitionEnd() && $(this.tip).hasClass(ClassName.FADE)) {
+ this._isTransitioning = true;
$(this.tip).one(Util.TRANSITION_END, complete).emulateTransitionEnd(Tooltip._TRANSITION_DURATION);
return;
}
complete();
}
};
Tooltip.prototype.hide = function hide(callback) {
- var _this17 = this;
+ var _this23 = this;
var tip = this.getTipElement();
var hideEvent = $.Event(this.constructor.Event.HIDE);
+ if (this._isTransitioning) {
+ throw new Error('Tooltip is transitioning');
+ }
var complete = function complete() {
- if (_this17._hoverState !== HoverState.IN && tip.parentNode) {
+ if (_this23._hoverState !== HoverState.SHOW && tip.parentNode) {
tip.parentNode.removeChild(tip);
}
- _this17.element.removeAttribute('aria-describedby');
- $(_this17.element).trigger(_this17.constructor.Event.HIDDEN);
- _this17.cleanupTether();
+ _this23.element.removeAttribute('aria-describedby');
+ $(_this23.element).trigger(_this23.constructor.Event.HIDDEN);
+ _this23._isTransitioning = false;
+ _this23.cleanupTether();
if (callback) {
callback();
}
};
@@ -2949,14 +3040,18 @@
if (hideEvent.isDefaultPrevented()) {
return;
}
- $(tip).removeClass(ClassName.IN);
+ $(tip).removeClass(ClassName.SHOW);
- if (Util.supportsTransitionEnd() && $(this.tip).hasClass(ClassName.FADE)) {
+ this._activeTrigger[Trigger.CLICK] = false;
+ this._activeTrigger[Trigger.FOCUS] = false;
+ this._activeTrigger[Trigger.HOVER] = false;
+ if (Util.supportsTransitionEnd() && $(this.tip).hasClass(ClassName.FADE)) {
+ this._isTransitioning = true;
$(tip).one(Util.TRANSITION_END, complete).emulateTransitionEnd(TRANSITION_DURATION);
} else {
complete();
}
@@ -2976,11 +3071,11 @@
Tooltip.prototype.setContent = function setContent() {
var $tip = $(this.getTipElement());
this.setElementContent($tip.find(Selector.TOOLTIP_INNER), this.getTitle());
- $tip.removeClass(ClassName.FADE).removeClass(ClassName.IN);
+ $tip.removeClass(ClassName.FADE + ' ' + ClassName.SHOW);
this.cleanupTether();
};
Tooltip.prototype.setElementContent = function setElementContent($element, content) {
@@ -3020,23 +3115,33 @@
Tooltip.prototype._getAttachment = function _getAttachment(placement) {
return AttachmentMap[placement.toUpperCase()];
};
Tooltip.prototype._setListeners = function _setListeners() {
- var _this18 = this;
+ var _this24 = this;
var triggers = this.config.trigger.split(' ');
triggers.forEach(function (trigger) {
if (trigger === 'click') {
- $(_this18.element).on(_this18.constructor.Event.CLICK, _this18.config.selector, $.proxy(_this18.toggle, _this18));
+ $(_this24.element).on(_this24.constructor.Event.CLICK, _this24.config.selector, function (event) {
+ return _this24.toggle(event);
+ });
} else if (trigger !== Trigger.MANUAL) {
- var eventIn = trigger === Trigger.HOVER ? _this18.constructor.Event.MOUSEENTER : _this18.constructor.Event.FOCUSIN;
- var eventOut = trigger === Trigger.HOVER ? _this18.constructor.Event.MOUSELEAVE : _this18.constructor.Event.FOCUSOUT;
+ var eventIn = trigger === Trigger.HOVER ? _this24.constructor.Event.MOUSEENTER : _this24.constructor.Event.FOCUSIN;
+ var eventOut = trigger === Trigger.HOVER ? _this24.constructor.Event.MOUSELEAVE : _this24.constructor.Event.FOCUSOUT;
- $(_this18.element).on(eventIn, _this18.config.selector, $.proxy(_this18._enter, _this18)).on(eventOut, _this18.config.selector, $.proxy(_this18._leave, _this18));
+ $(_this24.element).on(eventIn, _this24.config.selector, function (event) {
+ return _this24._enter(event);
+ }).on(eventOut, _this24.config.selector, function (event) {
+ return _this24._leave(event);
+ });
}
+
+ $(_this24.element).closest('.modal').on('hide.bs.modal', function () {
+ return _this24.hide();
+ });
});
if (this.config.selector) {
this.config = $.extend({}, this.config, {
trigger: 'manual',
@@ -3067,26 +3172,26 @@
if (event) {
context._activeTrigger[event.type === 'focusin' ? Trigger.FOCUS : Trigger.HOVER] = true;
}
- if ($(context.getTipElement()).hasClass(ClassName.IN) || context._hoverState === HoverState.IN) {
- context._hoverState = HoverState.IN;
+ if ($(context.getTipElement()).hasClass(ClassName.SHOW) || context._hoverState === HoverState.SHOW) {
+ context._hoverState = HoverState.SHOW;
return;
}
clearTimeout(context._timeout);
- context._hoverState = HoverState.IN;
+ context._hoverState = HoverState.SHOW;
if (!context.config.delay || !context.config.delay.show) {
context.show();
return;
}
context._timeout = setTimeout(function () {
- if (context._hoverState === HoverState.IN) {
+ if (context._hoverState === HoverState.SHOW) {
context.show();
}
}, context.config.delay.show);
};
@@ -3166,11 +3271,11 @@
// static
Tooltip._jQueryInterface = function _jQueryInterface(config) {
return this.each(function () {
var data = $(this).data(DATA_KEY);
- var _config = (typeof config === 'undefined' ? 'undefined' : _typeof(config)) === 'object' ? config : null;
+ var _config = (typeof config === 'undefined' ? 'undefined' : _typeof(config)) === 'object' && config;
if (!data && /dispose|hide/.test(config)) {
return;
}
@@ -3244,11 +3349,11 @@
return Tooltip;
}(jQuery);
/**
* --------------------------------------------------------------------------
- * Bootstrap (v4.0.0-alpha.5): popover.js
+ * Bootstrap (v4.0.0-alpha.6): popover.js
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
* --------------------------------------------------------------------------
*/
var Popover = function ($) {
@@ -3258,11 +3363,11 @@
* Constants
* ------------------------------------------------------------------------
*/
var NAME = 'popover';
- var VERSION = '4.0.0-alpha.5';
+ var VERSION = '4.0.0-alpha.6';
var DATA_KEY = 'bs.popover';
var EVENT_KEY = '.' + DATA_KEY;
var JQUERY_NO_CONFLICT = $.fn[NAME];
var Default = $.extend({}, Tooltip.Default, {
@@ -3276,11 +3381,11 @@
content: '(string|element|function)'
});
var ClassName = {
FADE: 'fade',
- IN: 'in'
+ SHOW: 'show'
};
var Selector = {
TITLE: '.popover-title',
CONTENT: '.popover-content'
@@ -3329,10 +3434,10 @@
// we use append for html objects to maintain js events
this.setElementContent($tip.find(Selector.TITLE), this.getTitle());
this.setElementContent($tip.find(Selector.CONTENT), this._getContent());
- $tip.removeClass(ClassName.FADE).removeClass(ClassName.IN);
+ $tip.removeClass(ClassName.FADE + ' ' + ClassName.SHOW);
this.cleanupTether();
};
// private