diff options
Diffstat (limited to 'library/bootstrap/js/bootstrap.js')
-rw-r--r-- | library/bootstrap/js/bootstrap.js | 159 |
1 files changed, 93 insertions, 66 deletions
diff --git a/library/bootstrap/js/bootstrap.js b/library/bootstrap/js/bootstrap.js index 5f2db5c86..5599d7165 100644 --- a/library/bootstrap/js/bootstrap.js +++ b/library/bootstrap/js/bootstrap.js @@ -1713,7 +1713,8 @@ var Modal = function ($) { DIALOG: '.modal-dialog', DATA_TOGGLE: '[data-toggle="modal"]', DATA_DISMISS: '[data-dismiss="modal"]', - FIXED_CONTENT: '.fixed-top, .fixed-bottom, .is-fixed, .sticky-top' + FIXED_CONTENT: '.fixed-top, .fixed-bottom, .is-fixed, .sticky-top', + NAVBAR_TOGGLER: '.navbar-toggler' }; /** @@ -1852,7 +1853,6 @@ var Modal = function ($) { this._isShown = null; this._isBodyOverflowing = null; this._ignoreBackdropClick = null; - this._originalBodyPadding = null; this._scrollbarWidth = null; }; @@ -2065,17 +2065,55 @@ var Modal = function ($) { }; Modal.prototype._setScrollbar = function _setScrollbar() { - var bodyPadding = parseInt($(Selector.FIXED_CONTENT).css('padding-right') || 0, 10); - - this._originalBodyPadding = document.body.style.paddingRight || ''; + var _this17 = this; if (this._isBodyOverflowing) { - document.body.style.paddingRight = bodyPadding + this._scrollbarWidth + 'px'; + // Note: DOMNode.style.paddingRight returns the actual value or '' if not set + // while $(DOMNode).css('padding-right') returns the calculated value or 0 if not set + + // Adjust fixed content padding + $(Selector.FIXED_CONTENT).each(function (index, element) { + var actualPadding = $(element)[0].style.paddingRight; + var calculatedPadding = $(element).css('padding-right'); + $(element).data('padding-right', actualPadding).css('padding-right', parseFloat(calculatedPadding) + _this17._scrollbarWidth + 'px'); + }); + + // Adjust navbar-toggler margin + $(Selector.NAVBAR_TOGGLER).each(function (index, element) { + var actualMargin = $(element)[0].style.marginRight; + var calculatedMargin = $(element).css('margin-right'); + $(element).data('margin-right', actualMargin).css('margin-right', parseFloat(calculatedMargin) + _this17._scrollbarWidth + 'px'); + }); + + // Adjust body padding + var actualPadding = document.body.style.paddingRight; + var calculatedPadding = $('body').css('padding-right'); + $('body').data('padding-right', actualPadding).css('padding-right', parseFloat(calculatedPadding) + this._scrollbarWidth + 'px'); } }; Modal.prototype._resetScrollbar = function _resetScrollbar() { - document.body.style.paddingRight = this._originalBodyPadding; + // Restore fixed content padding + $(Selector.FIXED_CONTENT).each(function (index, element) { + var padding = $(element).data('padding-right'); + if (typeof padding !== 'undefined') { + $(element).css('padding-right', padding).removeData('padding-right'); + } + }); + + // Restore navbar-toggler margin + $(Selector.NAVBAR_TOGGLER).each(function (index, element) { + var margin = $(element).data('margin-right'); + if (typeof margin !== 'undefined') { + $(element).css('margin-right', margin).removeData('margin-right'); + } + }); + + // Restore body padding + var padding = $('body').data('padding-right'); + if (typeof padding !== 'undefined') { + $('body').css('padding-right', padding).removeData('padding-right'); + } }; Modal.prototype._getScrollbarWidth = function _getScrollbarWidth() { @@ -2133,7 +2171,7 @@ var Modal = function ($) { */ $(document).on(Event.CLICK_DATA_API, Selector.DATA_TOGGLE, function (event) { - var _this17 = this; + var _this18 = this; var target = void 0; var selector = Util.getSelectorFromElement(this); @@ -2155,8 +2193,8 @@ var Modal = function ($) { } $target.one(Event.HIDDEN, function () { - if ($(_this17).is(':visible')) { - _this17.focus(); + if ($(_this18).is(':visible')) { + _this18.focus(); } }); }); @@ -2223,18 +2261,15 @@ var ScrollSpy = function ($) { var ClassName = { DROPDOWN_ITEM: 'dropdown-item', DROPDOWN_MENU: 'dropdown-menu', - NAV_LINK: 'nav-link', - NAV: 'nav', ACTIVE: 'active' }; var Selector = { DATA_SPY: '[data-spy="scroll"]', ACTIVE: '.active', - LIST_ITEM: '.list-item', - LI: 'li', - LI_DROPDOWN: 'li.dropdown', + NAV_LIST_GROUP: '.nav, .list-group', NAV_LINKS: '.nav-link', + LIST_ITEMS: '.list-group-item', DROPDOWN: '.dropdown', DROPDOWN_ITEMS: '.dropdown-item', DROPDOWN_TOGGLE: '.dropdown-toggle' @@ -2253,21 +2288,21 @@ var ScrollSpy = function ($) { var ScrollSpy = function () { function ScrollSpy(element, config) { - var _this18 = this; + var _this19 = this; _classCallCheck(this, ScrollSpy); this._element = element; this._scrollElement = element.tagName === 'BODY' ? window : element; this._config = this._getConfig(config); - this._selector = this._config.target + ' ' + Selector.NAV_LINKS + ',' + (this._config.target + ' ' + Selector.DROPDOWN_ITEMS); + this._selector = this._config.target + ' ' + Selector.NAV_LINKS + ',' + (this._config.target + ' ' + Selector.LIST_ITEMS + ',') + (this._config.target + ' ' + Selector.DROPDOWN_ITEMS); this._offsets = []; this._targets = []; this._activeTarget = null; this._scrollHeight = 0; $(this._scrollElement).on(Event.SCROLL, function (event) { - return _this18._process(event); + return _this19._process(event); }); this.refresh(); @@ -2279,7 +2314,7 @@ var ScrollSpy = function ($) { // public ScrollSpy.prototype.refresh = function refresh() { - var _this19 = this; + var _this20 = this; var autoMethod = this._scrollElement !== this._scrollElement.window ? OffsetMethod.POSITION : OffsetMethod.OFFSET; @@ -2315,8 +2350,8 @@ var ScrollSpy = function ($) { }).sort(function (a, b) { return a[0] - b[0]; }).forEach(function (item) { - _this19._offsets.push(item[0]); - _this19._targets.push(item[1]); + _this20._offsets.push(item[0]); + _this20._targets.push(item[1]); }); }; @@ -2414,9 +2449,11 @@ var ScrollSpy = function ($) { $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); + // Set triggered link as active + $link.addClass(ClassName.ACTIVE); + // Set triggered links parents as active + // With both <ul> and <nav> markup a parent is the previous sibling of any nav ancestor + $link.parents(Selector.NAV_LIST_GROUP).prev(Selector.NAV_LINKS + ', ' + Selector.LIST_ITEMS).addClass(ClassName.ACTIVE); } $(this._scrollElement).trigger(Event.ACTIVATE, { @@ -2535,14 +2572,10 @@ var Tab = function ($) { }; var Selector = { - A: 'a', - LI: 'li', DROPDOWN: '.dropdown', - LIST: 'ul:not(.dropdown-menu), ol:not(.dropdown-menu), nav:not(.dropdown-menu), .list-group:not(.dropdown-menu)', - FADE_CHILD: '> .nav-item .fade, > .list-group-item .fade, > .fade', + NAV_LIST_GROUP: '.nav, .list-group', ACTIVE: '.active', - ACTIVE_CHILD: '> .nav-item > .active, > .list-group-item > .active, > .active', - DATA_TOGGLE: '[data-toggle="tab"], [data-toggle="pill"]', + DATA_TOGGLE: '[data-toggle="tab"], [data-toggle="pill"], [data-toggle="list"]', DROPDOWN_TOGGLE: '.dropdown-toggle', DROPDOWN_ACTIVE_CHILD: '> .dropdown-menu .active' }; @@ -2565,7 +2598,7 @@ var Tab = function ($) { // public Tab.prototype.show = function show() { - var _this20 = this; + var _this21 = this; if (this._element.parentNode && this._element.parentNode.nodeType === Node.ELEMENT_NODE && $(this._element).hasClass(ClassName.ACTIVE) || $(this._element).hasClass(ClassName.DISABLED)) { return; @@ -2573,7 +2606,7 @@ var Tab = function ($) { var target = void 0; var previous = void 0; - var listElement = $(this._element).closest(Selector.LIST)[0]; + var listElement = $(this._element).closest(Selector.NAV_LIST_GROUP)[0]; var selector = Util.getSelectorFromElement(this._element); if (listElement) { @@ -2607,7 +2640,7 @@ var Tab = function ($) { var complete = function complete() { var hiddenEvent = $.Event(Event.HIDDEN, { - relatedTarget: _this20._element + relatedTarget: _this21._element }); var shownEvent = $.Event(Event.SHOWN, { @@ -2615,7 +2648,7 @@ var Tab = function ($) { }); $(previous).trigger(hiddenEvent); - $(_this20._element).trigger(shownEvent); + $(_this21._element).trigger(shownEvent); }; if (target) { @@ -2633,13 +2666,13 @@ var Tab = function ($) { // private Tab.prototype._activate = function _activate(element, container, callback) { - var _this21 = this; + var _this22 = 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 active = $(container).find(Selector.ACTIVE)[0]; + var isTransitioning = callback && Util.supportsTransitionEnd() && active && $(active).hasClass(ClassName.FADE); var complete = function complete() { - return _this21._transitionComplete(element, active, isTransitioning, callback); + return _this22._transitionComplete(element, active, isTransitioning, callback); }; if (active && isTransitioning) { @@ -2656,9 +2689,6 @@ var Tab = function ($) { Tab.prototype._transitionComplete = function _transitionComplete(element, active, isTransitioning, callback) { if (active) { $(active).removeClass(ClassName.ACTIVE); - if ($(active).hasClass('list-group-item')) { - $(active).find('a.nav-link').removeClass(ClassName.ACTIVE); - } var dropdownChild = $(active.parentNode).find(Selector.DROPDOWN_ACTIVE_CHILD)[0]; @@ -2670,9 +2700,6 @@ var Tab = function ($) { } $(element).addClass(ClassName.ACTIVE); - if ($(element.parentNode).hasClass('list-group-item')) { - $(element.parentNode).addClass(ClassName.ACTIVE); - } element.setAttribute('aria-expanded', true); if (isTransitioning) { @@ -2959,7 +2986,7 @@ var Tooltip = function ($) { }; Tooltip.prototype.show = function show() { - var _this22 = this; + var _this23 = this; if ($(this.element).css('display') === 'none') { throw new Error('Please use show on visible elements'); @@ -3018,13 +3045,13 @@ var Tooltip = function ($) { $(tip).addClass(ClassName.SHOW); var complete = function complete() { - var prevHoverState = _this22._hoverState; - _this22._hoverState = null; + var prevHoverState = _this23._hoverState; + _this23._hoverState = null; - $(_this22.element).trigger(_this22.constructor.Event.SHOWN); + $(_this23.element).trigger(_this23.constructor.Event.SHOWN); if (prevHoverState === HoverState.OUT) { - _this22._leave(null, _this22); + _this23._leave(null, _this23); } }; @@ -3038,19 +3065,19 @@ var Tooltip = function ($) { }; Tooltip.prototype.hide = function hide(callback) { - var _this23 = this; + var _this24 = this; var tip = this.getTipElement(); var hideEvent = $.Event(this.constructor.Event.HIDE); var complete = function complete() { - if (_this23._hoverState !== HoverState.SHOW && tip.parentNode) { + if (_this24._hoverState !== HoverState.SHOW && tip.parentNode) { tip.parentNode.removeChild(tip); } - _this23._cleanTipClass(); - _this23.element.removeAttribute('aria-describedby'); - $(_this23.element).trigger(_this23.constructor.Event.HIDDEN); - _this23.cleanupTether(); + _this24._cleanTipClass(); + _this24.element.removeAttribute('aria-describedby'); + $(_this24.element).trigger(_this24.constructor.Event.HIDDEN); + _this24.cleanupTether(); if (callback) { callback(); @@ -3146,28 +3173,28 @@ var Tooltip = function ($) { }; Tooltip.prototype._setListeners = function _setListeners() { - var _this24 = this; + var _this25 = this; var triggers = this.config.trigger.split(' '); triggers.forEach(function (trigger) { if (trigger === 'click') { - $(_this24.element).on(_this24.constructor.Event.CLICK, _this24.config.selector, function (event) { - return _this24.toggle(event); + $(_this25.element).on(_this25.constructor.Event.CLICK, _this25.config.selector, function (event) { + return _this25.toggle(event); }); } else if (trigger !== Trigger.MANUAL) { - 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; + var eventIn = trigger === Trigger.HOVER ? _this25.constructor.Event.MOUSEENTER : _this25.constructor.Event.FOCUSIN; + var eventOut = trigger === Trigger.HOVER ? _this25.constructor.Event.MOUSELEAVE : _this25.constructor.Event.FOCUSOUT; - $(_this24.element).on(eventIn, _this24.config.selector, function (event) { - return _this24._enter(event); - }).on(eventOut, _this24.config.selector, function (event) { - return _this24._leave(event); + $(_this25.element).on(eventIn, _this25.config.selector, function (event) { + return _this25._enter(event); + }).on(eventOut, _this25.config.selector, function (event) { + return _this25._leave(event); }); } - $(_this24.element).closest('.modal').on('hide.bs.modal', function () { - return _this24.hide(); + $(_this25.element).closest('.modal').on('hide.bs.modal', function () { + return _this25.hide(); }); }); |