diff --git a/.eslintignore b/.eslintignore index b9c0b6a25bb..1bca50cbaec 100644 --- a/.eslintignore +++ b/.eslintignore @@ -74,19 +74,19 @@ media/player/videojs/videojs/video-js.swf mod/assign/feedback/editpdf/fpdi/ repository/s3/S3.php theme/boost/scss/bootstrap/ -theme/boost/amd/src/alert.js -theme/boost/amd/src/button.js -theme/boost/amd/src/carousel.js -theme/boost/amd/src/collapse.js -theme/boost/amd/src/dropdown.js -theme/boost/amd/src/index.js -theme/boost/amd/src/modal.js -theme/boost/amd/src/popover.js -theme/boost/amd/src/sanitizer.js -theme/boost/amd/src/scrollspy.js -theme/boost/amd/src/tab.js -theme/boost/amd/src/toast.js -theme/boost/amd/src/tooltip.js -theme/boost/amd/src/util.js +theme/boost/amd/src/bootstrap/alert.js +theme/boost/amd/src/bootstrap/button.js +theme/boost/amd/src/bootstrap/carousel.js +theme/boost/amd/src/bootstrap/collapse.js +theme/boost/amd/src/bootstrap/dropdown.js +theme/boost/amd/src/bootstrap/index.js +theme/boost/amd/src/bootstrap/modal.js +theme/boost/amd/src/bootstrap/popover.js +theme/boost/amd/src/bootstrap/tools/sanitizer.js +theme/boost/amd/src/bootstrap/scrollspy.js +theme/boost/amd/src/bootstrap/tab.js +theme/boost/amd/src/bootstrap/toast.js +theme/boost/amd/src/bootstrap/tooltip.js +theme/boost/amd/src/bootstrap/util.js theme/boost/amd/src/tether.js theme/boost/scss/fontawesome/ \ No newline at end of file diff --git a/.stylelintignore b/.stylelintignore index 5d9e5c16782..c0de22f3b98 100644 --- a/.stylelintignore +++ b/.stylelintignore @@ -75,19 +75,19 @@ media/player/videojs/videojs/video-js.swf mod/assign/feedback/editpdf/fpdi/ repository/s3/S3.php theme/boost/scss/bootstrap/ -theme/boost/amd/src/alert.js -theme/boost/amd/src/button.js -theme/boost/amd/src/carousel.js -theme/boost/amd/src/collapse.js -theme/boost/amd/src/dropdown.js -theme/boost/amd/src/index.js -theme/boost/amd/src/modal.js -theme/boost/amd/src/popover.js -theme/boost/amd/src/sanitizer.js -theme/boost/amd/src/scrollspy.js -theme/boost/amd/src/tab.js -theme/boost/amd/src/toast.js -theme/boost/amd/src/tooltip.js -theme/boost/amd/src/util.js +theme/boost/amd/src/bootstrap/alert.js +theme/boost/amd/src/bootstrap/button.js +theme/boost/amd/src/bootstrap/carousel.js +theme/boost/amd/src/bootstrap/collapse.js +theme/boost/amd/src/bootstrap/dropdown.js +theme/boost/amd/src/bootstrap/index.js +theme/boost/amd/src/bootstrap/modal.js +theme/boost/amd/src/bootstrap/popover.js +theme/boost/amd/src/bootstrap/tools/sanitizer.js +theme/boost/amd/src/bootstrap/scrollspy.js +theme/boost/amd/src/bootstrap/tab.js +theme/boost/amd/src/bootstrap/toast.js +theme/boost/amd/src/bootstrap/tooltip.js +theme/boost/amd/src/bootstrap/util.js theme/boost/amd/src/tether.js theme/boost/scss/fontawesome/ \ No newline at end of file diff --git a/calendar/templates/minicalendar_day_link.mustache b/calendar/templates/minicalendar_day_link.mustache index 87723565109..13ac37b0b02 100644 --- a/calendar/templates/minicalendar_day_link.mustache +++ b/calendar/templates/minicalendar_day_link.mustache @@ -49,7 +49,7 @@ {{#js}} require(['jquery'], function($) { - require(['theme_boost/popover'], function() { + require(['theme_boost/bootstrap/popover'], function() { var target = $("#calendar-day-popover-link-{{courseid}}-{{year}}-{{yday}}-{{uniqid}}"); target.popover({ content: function() { diff --git a/enrol/manual/tests/behat/quickenrolment.feature b/enrol/manual/tests/behat/quickenrolment.feature index 49e51ba14ab..cd3c979cf22 100644 --- a/enrol/manual/tests/behat/quickenrolment.feature +++ b/enrol/manual/tests/behat/quickenrolment.feature @@ -124,9 +124,7 @@ Feature: Teacher can search and enrol users one by one into the course And I should see "Student 001" And I click on "Enrol users" "button" in the "Enrol users" "dialogue" Then I should see "Active" in the "Student 001" "table_row" - # The following line is commented out as auto-hidden toasts fire events in the wrong place. - # TODO Uncomment this when we upgrade Bootstrap. This issue is fixed in v4.4.0 - see MDL-67386. - #And I should see "1 enrolled users" + And I should see "1 enrolled users" @javascript Scenario: Searching for a non-existing user diff --git a/lib/templates/local/toast/message.mustache b/lib/templates/local/toast/message.mustache index 4e00ed18384..ae5cdac848f 100644 --- a/lib/templates/local/toast/message.mustache +++ b/lib/templates/local/toast/message.mustache @@ -44,7 +44,7 @@ {{#js}} -require(['jquery', 'theme_boost/toast'], function(jQuery) { +require(['jquery', 'theme_boost/bootstrap/toast'], function(jQuery) { // Show the toast. // Bootstrap toast components are not shown automatically. jQuery('#toast-{{uniqid}}').toast('show'); diff --git a/theme/boost/amd/build/alert.min.js b/theme/boost/amd/build/alert.min.js deleted file mode 100644 index 64e09a670c2..00000000000 --- a/theme/boost/amd/build/alert.min.js +++ /dev/null @@ -1,2 +0,0 @@ -"use strict";define ("theme_boost/alert",["exports","jquery","./util"],function(a,b,c){"use strict";Object.defineProperty(a,"__esModule",{value:!0});var h=d(b),i=d(c);function d(a){return a&&a.__esModule?a:{default:a}}function e(a,b){if(!(a instanceof b)){throw new TypeError("Cannot call a class as a function")}}function f(a,b){for(var c=0,d;c this._destroyElement(element, event))\n .emulateTransitionEnd(transitionDuration)\n }\n\n _destroyElement(element) {\n $(element)\n .detach()\n .trigger(EVENT_CLOSED)\n .remove()\n }\n\n // Static\n\n static _jQueryInterface(config) {\n return this.each(function () {\n const $element = $(this)\n let data = $element.data(DATA_KEY)\n\n if (!data) {\n data = new Alert(this)\n $element.data(DATA_KEY, data)\n }\n\n if (config === 'close') {\n data[config](this)\n }\n })\n }\n\n static _handleDismiss(alertInstance) {\n return function (event) {\n if (event) {\n event.preventDefault()\n }\n\n alertInstance.close(this)\n }\n }\n}\n\n/**\n * ------------------------------------------------------------------------\n * Data Api implementation\n * ------------------------------------------------------------------------\n */\n\n$(document).on(\n EVENT_CLICK_DATA_API,\n SELECTOR_DISMISS,\n Alert._handleDismiss(new Alert())\n)\n\n/**\n * ------------------------------------------------------------------------\n * jQuery\n * ------------------------------------------------------------------------\n */\n\n$.fn[NAME] = Alert._jQueryInterface\n$.fn[NAME].Constructor = Alert\n$.fn[NAME].noConflict = () => {\n $.fn[NAME] = JQUERY_NO_CONFLICT\n return Alert._jQueryInterface\n}\n\nexport default Alert\n"],"file":"alert.min.js"} \ No newline at end of file diff --git a/theme/boost/amd/build/bootstrap/button.min.js b/theme/boost/amd/build/bootstrap/button.min.js new file mode 100644 index 00000000000..bdc9b93678a --- /dev/null +++ b/theme/boost/amd/build/bootstrap/button.min.js @@ -0,0 +1,2 @@ +define ("theme_boost/bootstrap/button",["exports","jquery"],function(a,b){"use strict";Object.defineProperty(a,"__esModule",{value:!0});a.default=void 0;b=function(a){return a&&a.__esModule?a:{default:a}}(b);function c(a,b){if(!(a instanceof b)){throw new TypeError("Cannot call a class as a function")}}function d(a,b){for(var c=0,d;c {\n let button = event.target\n const initialButton = button\n\n if (!$(button).hasClass(CLASS_NAME_BUTTON)) {\n button = $(button).closest(SELECTOR_BUTTON)[0]\n }\n\n if (!button || button.hasAttribute('disabled') || button.classList.contains('disabled')) {\n event.preventDefault() // work around Firefox bug #1540995\n } else {\n const inputBtn = button.querySelector(SELECTOR_INPUT)\n\n if (inputBtn && (inputBtn.hasAttribute('disabled') || inputBtn.classList.contains('disabled'))) {\n event.preventDefault() // work around Firefox bug #1540995\n return\n }\n\n if (initialButton.tagName === 'LABEL' && inputBtn && inputBtn.type === 'checkbox') {\n event.preventDefault() // work around event sent to label and input\n }\n Button._jQueryInterface.call($(button), 'toggle')\n }\n })\n .on(EVENT_FOCUS_BLUR_DATA_API, SELECTOR_DATA_TOGGLE_CARROT, (event) => {\n const button = $(event.target).closest(SELECTOR_BUTTON)[0]\n $(button).toggleClass(CLASS_NAME_FOCUS, /^focus(in)?$/.test(event.type))\n })\n\n$(window).on(EVENT_LOAD_DATA_API, () => {\n // ensure correct active class is set to match the controls' actual values/states\n\n // find all checkboxes/readio buttons inside data-toggle groups\n let buttons = [].slice.call(document.querySelectorAll(SELECTOR_DATA_TOGGLES_BUTTONS))\n for (let i = 0, len = buttons.length; i < len; i++) {\n const button = buttons[i]\n const input = button.querySelector(SELECTOR_INPUT)\n if (input.checked || input.hasAttribute('checked')) {\n button.classList.add(CLASS_NAME_ACTIVE)\n } else {\n button.classList.remove(CLASS_NAME_ACTIVE)\n }\n }\n\n // find all button toggles\n buttons = [].slice.call(document.querySelectorAll(SELECTOR_DATA_TOGGLE))\n for (let i = 0, len = buttons.length; i < len; i++) {\n const button = buttons[i]\n if (button.getAttribute('aria-pressed') === 'true') {\n button.classList.add(CLASS_NAME_ACTIVE)\n } else {\n button.classList.remove(CLASS_NAME_ACTIVE)\n }\n }\n})\n\n/**\n * ------------------------------------------------------------------------\n * jQuery\n * ------------------------------------------------------------------------\n */\n\n$.fn[NAME] = Button._jQueryInterface\n$.fn[NAME].Constructor = Button\n$.fn[NAME].noConflict = () => {\n $.fn[NAME] = JQUERY_NO_CONFLICT\n return Button._jQueryInterface\n}\n\nexport default Button\n"],"file":"button.min.js"} \ No newline at end of file diff --git a/theme/boost/amd/build/bootstrap/carousel.min.js b/theme/boost/amd/build/bootstrap/carousel.min.js new file mode 100644 index 00000000000..477f01b0932 --- /dev/null +++ b/theme/boost/amd/build/bootstrap/carousel.min.js @@ -0,0 +1,2 @@ +define ("theme_boost/bootstrap/carousel",["exports","jquery","./util"],function(a,b,c){"use strict";Object.defineProperty(a,"__esModule",{value:!0});a.default=void 0;b=d(b);c=d(c);function d(a){return a&&a.__esModule?a:{default:a}}function e(a){"@babel/helpers - typeof";if("function"==typeof Symbol&&"symbol"==typeof Symbol.iterator){e=function(a){return typeof a}}else{e=function(a){return a&&"function"==typeof Symbol&&a.constructor===Symbol&&a!==Symbol.prototype?"symbol":typeof a}}return e(a)}function f(a,b){var c=Object.keys(a);if(Object.getOwnPropertySymbols){var d=Object.getOwnPropertySymbols(a);if(b)d=d.filter(function(b){return Object.getOwnPropertyDescriptor(a,b).enumerable});c.push.apply(c,d)}return c}function g(a){for(var b=1,c;bthis._items.length-1||0>a){return}if(this._isSliding){(0,b.default)(this._element).one(u,function(){return c.to(a)});return}if(d===a){this.pause();this.cycle();return}var e=a>d?r:s;this._slide(e,this._items[a])}},{key:"dispose",value:function dispose(){(0,b.default)(this._element).off(m);b.default.removeData(this._element,l);this._items=null;this._config=null;this._element=null;this._interval=null;this._isPaused=null;this._isSliding=null;this._activeElement=null;this._indicatorsElement=null}},{key:"_getConfig",value:function _getConfig(a){a=g({},p,{},a);c.default.typeCheckConfig("carousel",a,q);return a}},{key:"_handleSwipe",value:function _handleSwipe(){var a=Math.abs(this.touchDeltaX);if(a<=40){return}var b=a/this.touchDeltaX;this.touchDeltaX=0;if(0b){this.next()}}},{key:"_addEventListeners",value:function _addEventListeners(){var a=this;if(this._config.keyboard){(0,b.default)(this._element).on(v,function(b){return a._keydown(b)})}if("hover"===this._config.pause){(0,b.default)(this._element).on(w,function(b){return a.pause(b)}).on(x,function(b){return a.cycle(b)})}if(this._config.touch){this._addTouchEventListeners()}}},{key:"_addTouchEventListeners",value:function _addTouchEventListeners(){var a=this;if(!this._touchSupported){return}var c=function(b){if(a._pointerEvent&&I[b.originalEvent.pointerType.toUpperCase()]){a.touchStartX=b.originalEvent.clientX}else if(!a._pointerEvent){a.touchStartX=b.originalEvent.touches[0].clientX}},d=function(b){if(b.originalEvent.touches&&1 0\n this._pointerEvent = Boolean(window.PointerEvent || window.MSPointerEvent)\n\n this._addEventListeners()\n }\n\n // Getters\n\n static get VERSION() {\n return VERSION\n }\n\n static get Default() {\n return Default\n }\n\n // Public\n\n next() {\n if (!this._isSliding) {\n this._slide(DIRECTION_NEXT)\n }\n }\n\n nextWhenVisible() {\n // Don't call next when the page isn't visible\n // or the carousel or its parent isn't visible\n if (!document.hidden &&\n ($(this._element).is(':visible') && $(this._element).css('visibility') !== 'hidden')) {\n this.next()\n }\n }\n\n prev() {\n if (!this._isSliding) {\n this._slide(DIRECTION_PREV)\n }\n }\n\n pause(event) {\n if (!event) {\n this._isPaused = true\n }\n\n if (this._element.querySelector(SELECTOR_NEXT_PREV)) {\n Util.triggerTransitionEnd(this._element)\n this.cycle(true)\n }\n\n clearInterval(this._interval)\n this._interval = null\n }\n\n cycle(event) {\n if (!event) {\n this._isPaused = false\n }\n\n if (this._interval) {\n clearInterval(this._interval)\n this._interval = null\n }\n\n if (this._config.interval && !this._isPaused) {\n this._interval = setInterval(\n (document.visibilityState ? this.nextWhenVisible : this.next).bind(this),\n this._config.interval\n )\n }\n }\n\n to(index) {\n this._activeElement = this._element.querySelector(SELECTOR_ACTIVE_ITEM)\n\n const activeIndex = this._getItemIndex(this._activeElement)\n\n if (index > this._items.length - 1 || index < 0) {\n return\n }\n\n if (this._isSliding) {\n $(this._element).one(EVENT_SLID, () => this.to(index))\n return\n }\n\n if (activeIndex === index) {\n this.pause()\n this.cycle()\n return\n }\n\n const direction = index > activeIndex\n ? DIRECTION_NEXT\n : DIRECTION_PREV\n\n this._slide(direction, this._items[index])\n }\n\n dispose() {\n $(this._element).off(EVENT_KEY)\n $.removeData(this._element, DATA_KEY)\n\n this._items = null\n this._config = null\n this._element = null\n this._interval = null\n this._isPaused = null\n this._isSliding = null\n this._activeElement = null\n this._indicatorsElement = null\n }\n\n // Private\n\n _getConfig(config) {\n config = {\n ...Default,\n ...config\n }\n Util.typeCheckConfig(NAME, config, DefaultType)\n return config\n }\n\n _handleSwipe() {\n const absDeltax = Math.abs(this.touchDeltaX)\n\n if (absDeltax <= SWIPE_THRESHOLD) {\n return\n }\n\n const direction = absDeltax / this.touchDeltaX\n\n this.touchDeltaX = 0\n\n // swipe left\n if (direction > 0) {\n this.prev()\n }\n\n // swipe right\n if (direction < 0) {\n this.next()\n }\n }\n\n _addEventListeners() {\n if (this._config.keyboard) {\n $(this._element).on(EVENT_KEYDOWN, (event) => this._keydown(event))\n }\n\n if (this._config.pause === 'hover') {\n $(this._element)\n .on(EVENT_MOUSEENTER, (event) => this.pause(event))\n .on(EVENT_MOUSELEAVE, (event) => this.cycle(event))\n }\n\n if (this._config.touch) {\n this._addTouchEventListeners()\n }\n }\n\n _addTouchEventListeners() {\n if (!this._touchSupported) {\n return\n }\n\n const start = (event) => {\n if (this._pointerEvent && PointerType[event.originalEvent.pointerType.toUpperCase()]) {\n this.touchStartX = event.originalEvent.clientX\n } else if (!this._pointerEvent) {\n this.touchStartX = event.originalEvent.touches[0].clientX\n }\n }\n\n const move = (event) => {\n // ensure swiping with one touch and not pinching\n if (event.originalEvent.touches && event.originalEvent.touches.length > 1) {\n this.touchDeltaX = 0\n } else {\n this.touchDeltaX = event.originalEvent.touches[0].clientX - this.touchStartX\n }\n }\n\n const end = (event) => {\n if (this._pointerEvent && PointerType[event.originalEvent.pointerType.toUpperCase()]) {\n this.touchDeltaX = event.originalEvent.clientX - this.touchStartX\n }\n\n this._handleSwipe()\n if (this._config.pause === 'hover') {\n // If it's a touch-enabled device, mouseenter/leave are fired as\n // part of the mouse compatibility events on first tap - the carousel\n // would stop cycling until user tapped out of it;\n // here, we listen for touchend, explicitly pause the carousel\n // (as if it's the second time we tap on it, mouseenter compat event\n // is NOT fired) and after a timeout (to allow for mouse compatibility\n // events to fire) we explicitly restart cycling\n\n this.pause()\n if (this.touchTimeout) {\n clearTimeout(this.touchTimeout)\n }\n this.touchTimeout = setTimeout((event) => this.cycle(event), TOUCHEVENT_COMPAT_WAIT + this._config.interval)\n }\n }\n\n $(this._element.querySelectorAll(SELECTOR_ITEM_IMG))\n .on(EVENT_DRAG_START, (e) => e.preventDefault())\n\n if (this._pointerEvent) {\n $(this._element).on(EVENT_POINTERDOWN, (event) => start(event))\n $(this._element).on(EVENT_POINTERUP, (event) => end(event))\n\n this._element.classList.add(CLASS_NAME_POINTER_EVENT)\n } else {\n $(this._element).on(EVENT_TOUCHSTART, (event) => start(event))\n $(this._element).on(EVENT_TOUCHMOVE, (event) => move(event))\n $(this._element).on(EVENT_TOUCHEND, (event) => end(event))\n }\n }\n\n _keydown(event) {\n if (/input|textarea/i.test(event.target.tagName)) {\n return\n }\n\n switch (event.which) {\n case ARROW_LEFT_KEYCODE:\n event.preventDefault()\n this.prev()\n break\n case ARROW_RIGHT_KEYCODE:\n event.preventDefault()\n this.next()\n break\n default:\n }\n }\n\n _getItemIndex(element) {\n this._items = element && element.parentNode\n ? [].slice.call(element.parentNode.querySelectorAll(SELECTOR_ITEM))\n : []\n return this._items.indexOf(element)\n }\n\n _getItemByDirection(direction, activeElement) {\n const isNextDirection = direction === DIRECTION_NEXT\n const isPrevDirection = direction === DIRECTION_PREV\n const activeIndex = this._getItemIndex(activeElement)\n const lastItemIndex = this._items.length - 1\n const isGoingToWrap = isPrevDirection && activeIndex === 0 ||\n isNextDirection && activeIndex === lastItemIndex\n\n if (isGoingToWrap && !this._config.wrap) {\n return activeElement\n }\n\n const delta = direction === DIRECTION_PREV ? -1 : 1\n const itemIndex = (activeIndex + delta) % this._items.length\n\n return itemIndex === -1\n ? this._items[this._items.length - 1] : this._items[itemIndex]\n }\n\n _triggerSlideEvent(relatedTarget, eventDirectionName) {\n const targetIndex = this._getItemIndex(relatedTarget)\n const fromIndex = this._getItemIndex(this._element.querySelector(SELECTOR_ACTIVE_ITEM))\n const slideEvent = $.Event(EVENT_SLIDE, {\n relatedTarget,\n direction: eventDirectionName,\n from: fromIndex,\n to: targetIndex\n })\n\n $(this._element).trigger(slideEvent)\n\n return slideEvent\n }\n\n _setActiveIndicatorElement(element) {\n if (this._indicatorsElement) {\n const indicators = [].slice.call(this._indicatorsElement.querySelectorAll(SELECTOR_ACTIVE))\n $(indicators).removeClass(CLASS_NAME_ACTIVE)\n\n const nextIndicator = this._indicatorsElement.children[\n this._getItemIndex(element)\n ]\n\n if (nextIndicator) {\n $(nextIndicator).addClass(CLASS_NAME_ACTIVE)\n }\n }\n }\n\n _slide(direction, element) {\n const activeElement = this._element.querySelector(SELECTOR_ACTIVE_ITEM)\n const activeElementIndex = this._getItemIndex(activeElement)\n const nextElement = element || activeElement &&\n this._getItemByDirection(direction, activeElement)\n const nextElementIndex = this._getItemIndex(nextElement)\n const isCycling = Boolean(this._interval)\n\n let directionalClassName\n let orderClassName\n let eventDirectionName\n\n if (direction === DIRECTION_NEXT) {\n directionalClassName = CLASS_NAME_LEFT\n orderClassName = CLASS_NAME_NEXT\n eventDirectionName = DIRECTION_LEFT\n } else {\n directionalClassName = CLASS_NAME_RIGHT\n orderClassName = CLASS_NAME_PREV\n eventDirectionName = DIRECTION_RIGHT\n }\n\n if (nextElement && $(nextElement).hasClass(CLASS_NAME_ACTIVE)) {\n this._isSliding = false\n return\n }\n\n const slideEvent = this._triggerSlideEvent(nextElement, eventDirectionName)\n if (slideEvent.isDefaultPrevented()) {\n return\n }\n\n if (!activeElement || !nextElement) {\n // Some weirdness is happening, so we bail\n return\n }\n\n this._isSliding = true\n\n if (isCycling) {\n this.pause()\n }\n\n this._setActiveIndicatorElement(nextElement)\n\n const slidEvent = $.Event(EVENT_SLID, {\n relatedTarget: nextElement,\n direction: eventDirectionName,\n from: activeElementIndex,\n to: nextElementIndex\n })\n\n if ($(this._element).hasClass(CLASS_NAME_SLIDE)) {\n $(nextElement).addClass(orderClassName)\n\n Util.reflow(nextElement)\n\n $(activeElement).addClass(directionalClassName)\n $(nextElement).addClass(directionalClassName)\n\n const nextElementInterval = parseInt(nextElement.getAttribute('data-interval'), 10)\n if (nextElementInterval) {\n this._config.defaultInterval = this._config.defaultInterval || this._config.interval\n this._config.interval = nextElementInterval\n } else {\n this._config.interval = this._config.defaultInterval || this._config.interval\n }\n\n const transitionDuration = Util.getTransitionDurationFromElement(activeElement)\n\n $(activeElement)\n .one(Util.TRANSITION_END, () => {\n $(nextElement)\n .removeClass(`${directionalClassName} ${orderClassName}`)\n .addClass(CLASS_NAME_ACTIVE)\n\n $(activeElement).removeClass(`${CLASS_NAME_ACTIVE} ${orderClassName} ${directionalClassName}`)\n\n this._isSliding = false\n\n setTimeout(() => $(this._element).trigger(slidEvent), 0)\n })\n .emulateTransitionEnd(transitionDuration)\n } else {\n $(activeElement).removeClass(CLASS_NAME_ACTIVE)\n $(nextElement).addClass(CLASS_NAME_ACTIVE)\n\n this._isSliding = false\n $(this._element).trigger(slidEvent)\n }\n\n if (isCycling) {\n this.cycle()\n }\n }\n\n // Static\n\n static _jQueryInterface(config) {\n return this.each(function () {\n let data = $(this).data(DATA_KEY)\n let _config = {\n ...Default,\n ...$(this).data()\n }\n\n if (typeof config === 'object') {\n _config = {\n ..._config,\n ...config\n }\n }\n\n const action = typeof config === 'string' ? config : _config.slide\n\n if (!data) {\n data = new Carousel(this, _config)\n $(this).data(DATA_KEY, data)\n }\n\n if (typeof config === 'number') {\n data.to(config)\n } else if (typeof action === 'string') {\n if (typeof data[action] === 'undefined') {\n throw new TypeError(`No method named \"${action}\"`)\n }\n data[action]()\n } else if (_config.interval && _config.ride) {\n data.pause()\n data.cycle()\n }\n })\n }\n\n static _dataApiClickHandler(event) {\n const selector = Util.getSelectorFromElement(this)\n\n if (!selector) {\n return\n }\n\n const target = $(selector)[0]\n\n if (!target || !$(target).hasClass(CLASS_NAME_CAROUSEL)) {\n return\n }\n\n const config = {\n ...$(target).data(),\n ...$(this).data()\n }\n const slideIndex = this.getAttribute('data-slide-to')\n\n if (slideIndex) {\n config.interval = false\n }\n\n Carousel._jQueryInterface.call($(target), config)\n\n if (slideIndex) {\n $(target).data(DATA_KEY).to(slideIndex)\n }\n\n event.preventDefault()\n }\n}\n\n/**\n * ------------------------------------------------------------------------\n * Data Api implementation\n * ------------------------------------------------------------------------\n */\n\n$(document).on(EVENT_CLICK_DATA_API, SELECTOR_DATA_SLIDE, Carousel._dataApiClickHandler)\n\n$(window).on(EVENT_LOAD_DATA_API, () => {\n const carousels = [].slice.call(document.querySelectorAll(SELECTOR_DATA_RIDE))\n for (let i = 0, len = carousels.length; i < len; i++) {\n const $carousel = $(carousels[i])\n Carousel._jQueryInterface.call($carousel, $carousel.data())\n }\n})\n\n/**\n * ------------------------------------------------------------------------\n * jQuery\n * ------------------------------------------------------------------------\n */\n\n$.fn[NAME] = Carousel._jQueryInterface\n$.fn[NAME].Constructor = Carousel\n$.fn[NAME].noConflict = () => {\n $.fn[NAME] = JQUERY_NO_CONFLICT\n return Carousel._jQueryInterface\n}\n\nexport default Carousel\n"],"file":"carousel.min.js"} \ No newline at end of file diff --git a/theme/boost/amd/build/bootstrap/collapse.min.js b/theme/boost/amd/build/bootstrap/collapse.min.js new file mode 100644 index 00000000000..365a018565d --- /dev/null +++ b/theme/boost/amd/build/bootstrap/collapse.min.js @@ -0,0 +1,2 @@ +define ("theme_boost/bootstrap/collapse",["exports","jquery","./util"],function(a,b,c){"use strict";Object.defineProperty(a,"__esModule",{value:!0});a.default=void 0;b=d(b);c=d(c);function d(a){return a&&a.__esModule?a:{default:a}}function e(a){"@babel/helpers - typeof";if("function"==typeof Symbol&&"symbol"==typeof Symbol.iterator){e=function(a){return typeof a}}else{e=function(a){return a&&"function"==typeof Symbol&&a.constructor===Symbol&&a!==Symbol.prototype?"symbol":typeof a}}return e(a)}function f(a,b){var c=Object.keys(a);if(Object.getOwnPropertySymbols){var d=Object.getOwnPropertySymbols(a);if(b)d=d.filter(function(b){return Object.getOwnPropertyDescriptor(a,b).enumerable});c.push.apply(c,d)}return c}function g(a){for(var b=1,c;b foundElem === element)\n\n if (selector !== null && filterElement.length > 0) {\n this._selector = selector\n this._triggerArray.push(elem)\n }\n }\n\n this._parent = this._config.parent ? this._getParent() : null\n\n if (!this._config.parent) {\n this._addAriaAndCollapsedClass(this._element, this._triggerArray)\n }\n\n if (this._config.toggle) {\n this.toggle()\n }\n }\n\n // Getters\n\n static get VERSION() {\n return VERSION\n }\n\n static get Default() {\n return Default\n }\n\n // Public\n\n toggle() {\n if ($(this._element).hasClass(CLASS_NAME_SHOW)) {\n this.hide()\n } else {\n this.show()\n }\n }\n\n show() {\n if (this._isTransitioning ||\n $(this._element).hasClass(CLASS_NAME_SHOW)) {\n return\n }\n\n let actives\n let activesData\n\n if (this._parent) {\n actives = [].slice.call(this._parent.querySelectorAll(SELECTOR_ACTIVES))\n .filter((elem) => {\n if (typeof this._config.parent === 'string') {\n return elem.getAttribute('data-parent') === this._config.parent\n }\n\n return elem.classList.contains(CLASS_NAME_COLLAPSE)\n })\n\n if (actives.length === 0) {\n actives = null\n }\n }\n\n if (actives) {\n activesData = $(actives).not(this._selector).data(DATA_KEY)\n if (activesData && activesData._isTransitioning) {\n return\n }\n }\n\n const startEvent = $.Event(EVENT_SHOW)\n $(this._element).trigger(startEvent)\n if (startEvent.isDefaultPrevented()) {\n return\n }\n\n if (actives) {\n Collapse._jQueryInterface.call($(actives).not(this._selector), 'hide')\n if (!activesData) {\n $(actives).data(DATA_KEY, null)\n }\n }\n\n const dimension = this._getDimension()\n\n $(this._element)\n .removeClass(CLASS_NAME_COLLAPSE)\n .addClass(CLASS_NAME_COLLAPSING)\n\n this._element.style[dimension] = 0\n\n if (this._triggerArray.length) {\n $(this._triggerArray)\n .removeClass(CLASS_NAME_COLLAPSED)\n .attr('aria-expanded', true)\n }\n\n this.setTransitioning(true)\n\n const complete = () => {\n $(this._element)\n .removeClass(CLASS_NAME_COLLAPSING)\n .addClass(`${CLASS_NAME_COLLAPSE} ${CLASS_NAME_SHOW}`)\n\n this._element.style[dimension] = ''\n\n this.setTransitioning(false)\n\n $(this._element).trigger(EVENT_SHOWN)\n }\n\n const capitalizedDimension = dimension[0].toUpperCase() + dimension.slice(1)\n const scrollSize = `scroll${capitalizedDimension}`\n const transitionDuration = Util.getTransitionDurationFromElement(this._element)\n\n $(this._element)\n .one(Util.TRANSITION_END, complete)\n .emulateTransitionEnd(transitionDuration)\n\n this._element.style[dimension] = `${this._element[scrollSize]}px`\n }\n\n hide() {\n if (this._isTransitioning ||\n !$(this._element).hasClass(CLASS_NAME_SHOW)) {\n return\n }\n\n const startEvent = $.Event(EVENT_HIDE)\n $(this._element).trigger(startEvent)\n if (startEvent.isDefaultPrevented()) {\n return\n }\n\n const dimension = this._getDimension()\n\n this._element.style[dimension] = `${this._element.getBoundingClientRect()[dimension]}px`\n\n Util.reflow(this._element)\n\n $(this._element)\n .addClass(CLASS_NAME_COLLAPSING)\n .removeClass(`${CLASS_NAME_COLLAPSE} ${CLASS_NAME_SHOW}`)\n\n const triggerArrayLength = this._triggerArray.length\n if (triggerArrayLength > 0) {\n for (let i = 0; i < triggerArrayLength; i++) {\n const trigger = this._triggerArray[i]\n const selector = Util.getSelectorFromElement(trigger)\n\n if (selector !== null) {\n const $elem = $([].slice.call(document.querySelectorAll(selector)))\n if (!$elem.hasClass(CLASS_NAME_SHOW)) {\n $(trigger).addClass(CLASS_NAME_COLLAPSED)\n .attr('aria-expanded', false)\n }\n }\n }\n }\n\n this.setTransitioning(true)\n\n const complete = () => {\n this.setTransitioning(false)\n $(this._element)\n .removeClass(CLASS_NAME_COLLAPSING)\n .addClass(CLASS_NAME_COLLAPSE)\n .trigger(EVENT_HIDDEN)\n }\n\n this._element.style[dimension] = ''\n const transitionDuration = Util.getTransitionDurationFromElement(this._element)\n\n $(this._element)\n .one(Util.TRANSITION_END, complete)\n .emulateTransitionEnd(transitionDuration)\n }\n\n setTransitioning(isTransitioning) {\n this._isTransitioning = isTransitioning\n }\n\n dispose() {\n $.removeData(this._element, DATA_KEY)\n\n this._config = null\n this._parent = null\n this._element = null\n this._triggerArray = null\n this._isTransitioning = null\n }\n\n // Private\n\n _getConfig(config) {\n config = {\n ...Default,\n ...config\n }\n config.toggle = Boolean(config.toggle) // Coerce string values\n Util.typeCheckConfig(NAME, config, DefaultType)\n return config\n }\n\n _getDimension() {\n const hasWidth = $(this._element).hasClass(DIMENSION_WIDTH)\n return hasWidth ? DIMENSION_WIDTH : DIMENSION_HEIGHT\n }\n\n _getParent() {\n let parent\n\n if (Util.isElement(this._config.parent)) {\n parent = this._config.parent\n\n // It's a jQuery object\n if (typeof this._config.parent.jquery !== 'undefined') {\n parent = this._config.parent[0]\n }\n } else {\n parent = document.querySelector(this._config.parent)\n }\n\n const selector = `[data-toggle=\"collapse\"][data-parent=\"${this._config.parent}\"]`\n const children = [].slice.call(parent.querySelectorAll(selector))\n\n $(children).each((i, element) => {\n this._addAriaAndCollapsedClass(\n Collapse._getTargetFromElement(element),\n [element]\n )\n })\n\n return parent\n }\n\n _addAriaAndCollapsedClass(element, triggerArray) {\n const isOpen = $(element).hasClass(CLASS_NAME_SHOW)\n\n if (triggerArray.length) {\n $(triggerArray)\n .toggleClass(CLASS_NAME_COLLAPSED, !isOpen)\n .attr('aria-expanded', isOpen)\n }\n }\n\n // Static\n\n static _getTargetFromElement(element) {\n const selector = Util.getSelectorFromElement(element)\n return selector ? document.querySelector(selector) : null\n }\n\n static _jQueryInterface(config) {\n return this.each(function () {\n const $this = $(this)\n let data = $this.data(DATA_KEY)\n const _config = {\n ...Default,\n ...$this.data(),\n ...typeof config === 'object' && config ? config : {}\n }\n\n if (!data && _config.toggle && typeof config === 'string' && /show|hide/.test(config)) {\n _config.toggle = false\n }\n\n if (!data) {\n data = new Collapse(this, _config)\n $this.data(DATA_KEY, data)\n }\n\n if (typeof config === 'string') {\n if (typeof data[config] === 'undefined') {\n throw new TypeError(`No method named \"${config}\"`)\n }\n data[config]()\n }\n })\n }\n}\n\n/**\n * ------------------------------------------------------------------------\n * Data Api implementation\n * ------------------------------------------------------------------------\n */\n\n$(document).on(EVENT_CLICK_DATA_API, SELECTOR_DATA_TOGGLE, function (event) {\n // preventDefault only for elements (which change the URL) not inside the collapsible element\n if (event.currentTarget.tagName === 'A') {\n event.preventDefault()\n }\n\n const $trigger = $(this)\n const selector = Util.getSelectorFromElement(this)\n const selectors = [].slice.call(document.querySelectorAll(selector))\n\n $(selectors).each(function () {\n const $target = $(this)\n const data = $target.data(DATA_KEY)\n const config = data ? 'toggle' : $trigger.data()\n Collapse._jQueryInterface.call($target, config)\n })\n})\n\n/**\n * ------------------------------------------------------------------------\n * jQuery\n * ------------------------------------------------------------------------\n */\n\n$.fn[NAME] = Collapse._jQueryInterface\n$.fn[NAME].Constructor = Collapse\n$.fn[NAME].noConflict = () => {\n $.fn[NAME] = JQUERY_NO_CONFLICT\n return Collapse._jQueryInterface\n}\n\nexport default Collapse\n"],"file":"collapse.min.js"} \ No newline at end of file diff --git a/theme/boost/amd/build/bootstrap/dropdown.min.js b/theme/boost/amd/build/bootstrap/dropdown.min.js new file mode 100644 index 00000000000..279ced3b1c7 --- /dev/null +++ b/theme/boost/amd/build/bootstrap/dropdown.min.js @@ -0,0 +1,2 @@ +define ("theme_boost/bootstrap/dropdown",["exports","jquery","core/popper","./util"],function(a,b,c,d){"use strict";Object.defineProperty(a,"__esModule",{value:!0});a.default=void 0;b=e(b);c=e(c);d=e(d);function e(a){return a&&a.__esModule?a:{default:a}}function f(a){"@babel/helpers - typeof";if("function"==typeof Symbol&&"symbol"==typeof Symbol.iterator){f=function(a){return typeof a}}else{f=function(a){return a&&"function"==typeof Symbol&&a.constructor===Symbol&&a!==Symbol.prototype?"symbol":typeof a}}return f(a)}function g(a,b){var c=Object.keys(a);if(Object.getOwnPropertySymbols){var d=Object.getOwnPropertySymbols(a);if(b)d=d.filter(function(b){return Object.getOwnPropertyDescriptor(a,b).enumerable});c.push.apply(c,d)}return c}function h(a){for(var b=1,c;bg){g=0}f[g].focus()}},{key:"VERSION",get:function get(){return"4.5.0"}},{key:"Default",get:function get(){return J}},{key:"DefaultType",get:function get(){return K}}]);return a}();(0,b.default)(document).on(C,H,L._dataApiKeydownHandler).on(C,I,L._dataApiKeydownHandler).on("".concat(B," ").concat(D),L._clearMenus).on(B,H,function(a){a.preventDefault();a.stopPropagation();L._jQueryInterface.call((0,b.default)(this),"toggle")}).on(B,".dropdown form",function(a){a.stopPropagation()});b.default.fn.dropdown=L._jQueryInterface;b.default.fn.dropdown.Constructor=L;b.default.fn.dropdown.noConflict=function(){b.default.fn.dropdown=p;return L._jQueryInterface};a.default=L;return a.default}); +//# sourceMappingURL=dropdown.min.js.map diff --git a/theme/boost/amd/build/bootstrap/dropdown.min.js.map b/theme/boost/amd/build/bootstrap/dropdown.min.js.map new file mode 100644 index 00000000000..f6df14ff1ba --- /dev/null +++ b/theme/boost/amd/build/bootstrap/dropdown.min.js.map @@ -0,0 +1 @@ +{"version":3,"sources":["../../src/bootstrap/dropdown.js"],"names":["DATA_KEY","EVENT_KEY","DATA_API_KEY","JQUERY_NO_CONFLICT","$","fn","ESCAPE_KEYCODE","SPACE_KEYCODE","TAB_KEYCODE","ARROW_UP_KEYCODE","ARROW_DOWN_KEYCODE","REGEXP_KEYDOWN","RegExp","EVENT_HIDE","EVENT_HIDDEN","EVENT_SHOW","EVENT_SHOWN","EVENT_CLICK","EVENT_CLICK_DATA_API","EVENT_KEYDOWN_DATA_API","EVENT_KEYUP_DATA_API","CLASS_NAME_DISABLED","CLASS_NAME_SHOW","CLASS_NAME_MENURIGHT","SELECTOR_DATA_TOGGLE","SELECTOR_MENU","Default","offset","flip","boundary","reference","display","popperConfig","DefaultType","Dropdown","element","config","_element","_popper","_config","_getConfig","_menu","_getMenuElement","_inNavbar","_detectNavbar","_addEventListeners","disabled","hasClass","isActive","_clearMenus","show","usePopper","relatedTarget","showEvent","Event","parent","_getParentFromElement","trigger","isDefaultPrevented","Popper","TypeError","referenceElement","Util","isElement","jquery","addClass","_getPopperConfig","document","documentElement","closest","length","body","children","on","noop","focus","setAttribute","toggleClass","hideEvent","destroy","removeData","off","scheduleUpdate","event","preventDefault","stopPropagation","toggle","constructor","data","typeCheckConfig","querySelector","$parentDropdown","parentNode","placement","offsets","_getPlacement","modifiers","_getOffset","enabled","preventOverflow","boundariesElement","applyStyle","each","which","type","toggles","slice","call","querySelectorAll","i","len","context","clickEvent","dropdownMenu","test","target","tagName","contains","removeClass","selector","getSelectorFromElement","items","filter","item","is","index","indexOf","_dataApiKeydownHandler","_jQueryInterface","e","Constructor","noConflict"],"mappings":"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","sourcesContent":["/**\n * --------------------------------------------------------------------------\n * Bootstrap (v4.5.0): dropdown.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport $ from 'jquery'\nimport Popper from 'core/popper'\nimport Util from './util'\n\n/**\n * ------------------------------------------------------------------------\n * Constants\n * ------------------------------------------------------------------------\n */\n\nconst NAME = 'dropdown'\nconst VERSION = '4.5.0'\nconst DATA_KEY = 'bs.dropdown'\nconst EVENT_KEY = `.${DATA_KEY}`\nconst DATA_API_KEY = '.data-api'\nconst JQUERY_NO_CONFLICT = $.fn[NAME]\nconst ESCAPE_KEYCODE = 27 // KeyboardEvent.which value for Escape (Esc) key\nconst SPACE_KEYCODE = 32 // KeyboardEvent.which value for space key\nconst TAB_KEYCODE = 9 // KeyboardEvent.which value for tab key\nconst ARROW_UP_KEYCODE = 38 // KeyboardEvent.which value for up arrow key\nconst ARROW_DOWN_KEYCODE = 40 // KeyboardEvent.which value for down arrow key\nconst RIGHT_MOUSE_BUTTON_WHICH = 3 // MouseEvent.which value for the right button (assuming a right-handed mouse)\nconst REGEXP_KEYDOWN = new RegExp(`${ARROW_UP_KEYCODE}|${ARROW_DOWN_KEYCODE}|${ESCAPE_KEYCODE}`)\n\nconst EVENT_HIDE = `hide${EVENT_KEY}`\nconst EVENT_HIDDEN = `hidden${EVENT_KEY}`\nconst EVENT_SHOW = `show${EVENT_KEY}`\nconst EVENT_SHOWN = `shown${EVENT_KEY}`\nconst EVENT_CLICK = `click${EVENT_KEY}`\nconst EVENT_CLICK_DATA_API = `click${EVENT_KEY}${DATA_API_KEY}`\nconst EVENT_KEYDOWN_DATA_API = `keydown${EVENT_KEY}${DATA_API_KEY}`\nconst EVENT_KEYUP_DATA_API = `keyup${EVENT_KEY}${DATA_API_KEY}`\n\nconst CLASS_NAME_DISABLED = 'disabled'\nconst CLASS_NAME_SHOW = 'show'\nconst CLASS_NAME_DROPUP = 'dropup'\nconst CLASS_NAME_DROPRIGHT = 'dropright'\nconst CLASS_NAME_DROPLEFT = 'dropleft'\nconst CLASS_NAME_MENURIGHT = 'dropdown-menu-right'\nconst CLASS_NAME_POSITION_STATIC = 'position-static'\n\nconst SELECTOR_DATA_TOGGLE = '[data-toggle=\"dropdown\"]'\nconst SELECTOR_FORM_CHILD = '.dropdown form'\nconst SELECTOR_MENU = '.dropdown-menu'\nconst SELECTOR_NAVBAR_NAV = '.navbar-nav'\nconst SELECTOR_VISIBLE_ITEMS = '.dropdown-menu .dropdown-item:not(.disabled):not(:disabled)'\n\nconst PLACEMENT_TOP = 'top-start'\nconst PLACEMENT_TOPEND = 'top-end'\nconst PLACEMENT_BOTTOM = 'bottom-start'\nconst PLACEMENT_BOTTOMEND = 'bottom-end'\nconst PLACEMENT_RIGHT = 'right-start'\nconst PLACEMENT_LEFT = 'left-start'\n\nconst Default = {\n offset : 0,\n flip : true,\n boundary : 'scrollParent',\n reference : 'toggle',\n display : 'dynamic',\n popperConfig : null\n}\n\nconst DefaultType = {\n offset : '(number|string|function)',\n flip : 'boolean',\n boundary : '(string|element)',\n reference : '(string|element)',\n display : 'string',\n popperConfig : '(null|object)'\n}\n\n/**\n * ------------------------------------------------------------------------\n * Class Definition\n * ------------------------------------------------------------------------\n */\n\nclass Dropdown {\n constructor(element, config) {\n this._element = element\n this._popper = null\n this._config = this._getConfig(config)\n this._menu = this._getMenuElement()\n this._inNavbar = this._detectNavbar()\n\n this._addEventListeners()\n }\n\n // Getters\n\n static get VERSION() {\n return VERSION\n }\n\n static get Default() {\n return Default\n }\n\n static get DefaultType() {\n return DefaultType\n }\n\n // Public\n\n toggle() {\n if (this._element.disabled || $(this._element).hasClass(CLASS_NAME_DISABLED)) {\n return\n }\n\n const isActive = $(this._menu).hasClass(CLASS_NAME_SHOW)\n\n Dropdown._clearMenus()\n\n if (isActive) {\n return\n }\n\n this.show(true)\n }\n\n show(usePopper = false) {\n if (this._element.disabled || $(this._element).hasClass(CLASS_NAME_DISABLED) || $(this._menu).hasClass(CLASS_NAME_SHOW)) {\n return\n }\n\n const relatedTarget = {\n relatedTarget: this._element\n }\n const showEvent = $.Event(EVENT_SHOW, relatedTarget)\n const parent = Dropdown._getParentFromElement(this._element)\n\n $(parent).trigger(showEvent)\n\n if (showEvent.isDefaultPrevented()) {\n return\n }\n\n // Disable totally Popper.js for Dropdown in Navbar\n if (!this._inNavbar && usePopper) {\n /**\n * Check for Popper dependency\n * Popper - https://popper.js.org\n */\n if (typeof Popper === 'undefined') {\n throw new TypeError('Bootstrap\\'s dropdowns require Popper.js (https://popper.js.org/)')\n }\n\n let referenceElement = this._element\n\n if (this._config.reference === 'parent') {\n referenceElement = parent\n } else if (Util.isElement(this._config.reference)) {\n referenceElement = this._config.reference\n\n // Check if it's jQuery element\n if (typeof this._config.reference.jquery !== 'undefined') {\n referenceElement = this._config.reference[0]\n }\n }\n\n // If boundary is not `scrollParent`, then set position to `static`\n // to allow the menu to \"escape\" the scroll parent's boundaries\n // https://github.com/twbs/bootstrap/issues/24251\n if (this._config.boundary !== 'scrollParent') {\n $(parent).addClass(CLASS_NAME_POSITION_STATIC)\n }\n this._popper = new Popper(referenceElement, this._menu, this._getPopperConfig())\n }\n\n // If this is a touch-enabled device we add extra\n // empty mouseover listeners to the body's immediate children;\n // only needed because of broken event delegation on iOS\n // https://www.quirksmode.org/blog/archives/2014/02/mouse_event_bub.html\n if ('ontouchstart' in document.documentElement &&\n $(parent).closest(SELECTOR_NAVBAR_NAV).length === 0) {\n $(document.body).children().on('mouseover', null, $.noop)\n }\n\n this._element.focus()\n this._element.setAttribute('aria-expanded', true)\n\n $(this._menu).toggleClass(CLASS_NAME_SHOW)\n $(parent)\n .toggleClass(CLASS_NAME_SHOW)\n .trigger($.Event(EVENT_SHOWN, relatedTarget))\n }\n\n hide() {\n if (this._element.disabled || $(this._element).hasClass(CLASS_NAME_DISABLED) || !$(this._menu).hasClass(CLASS_NAME_SHOW)) {\n return\n }\n\n const relatedTarget = {\n relatedTarget: this._element\n }\n const hideEvent = $.Event(EVENT_HIDE, relatedTarget)\n const parent = Dropdown._getParentFromElement(this._element)\n\n $(parent).trigger(hideEvent)\n\n if (hideEvent.isDefaultPrevented()) {\n return\n }\n\n if (this._popper) {\n this._popper.destroy()\n }\n\n $(this._menu).toggleClass(CLASS_NAME_SHOW)\n $(parent)\n .toggleClass(CLASS_NAME_SHOW)\n .trigger($.Event(EVENT_HIDDEN, relatedTarget))\n }\n\n dispose() {\n $.removeData(this._element, DATA_KEY)\n $(this._element).off(EVENT_KEY)\n this._element = null\n this._menu = null\n if (this._popper !== null) {\n this._popper.destroy()\n this._popper = null\n }\n }\n\n update() {\n this._inNavbar = this._detectNavbar()\n if (this._popper !== null) {\n this._popper.scheduleUpdate()\n }\n }\n\n // Private\n\n _addEventListeners() {\n $(this._element).on(EVENT_CLICK, (event) => {\n event.preventDefault()\n event.stopPropagation()\n this.toggle()\n })\n }\n\n _getConfig(config) {\n config = {\n ...this.constructor.Default,\n ...$(this._element).data(),\n ...config\n }\n\n Util.typeCheckConfig(\n NAME,\n config,\n this.constructor.DefaultType\n )\n\n return config\n }\n\n _getMenuElement() {\n if (!this._menu) {\n const parent = Dropdown._getParentFromElement(this._element)\n\n if (parent) {\n this._menu = parent.querySelector(SELECTOR_MENU)\n }\n }\n return this._menu\n }\n\n _getPlacement() {\n const $parentDropdown = $(this._element.parentNode)\n let placement = PLACEMENT_BOTTOM\n\n // Handle dropup\n if ($parentDropdown.hasClass(CLASS_NAME_DROPUP)) {\n placement = $(this._menu).hasClass(CLASS_NAME_MENURIGHT)\n ? PLACEMENT_TOPEND\n : PLACEMENT_TOP\n } else if ($parentDropdown.hasClass(CLASS_NAME_DROPRIGHT)) {\n placement = PLACEMENT_RIGHT\n } else if ($parentDropdown.hasClass(CLASS_NAME_DROPLEFT)) {\n placement = PLACEMENT_LEFT\n } else if ($(this._menu).hasClass(CLASS_NAME_MENURIGHT)) {\n placement = PLACEMENT_BOTTOMEND\n }\n return placement\n }\n\n _detectNavbar() {\n return $(this._element).closest('.navbar').length > 0\n }\n\n _getOffset() {\n const offset = {}\n\n if (typeof this._config.offset === 'function') {\n offset.fn = (data) => {\n data.offsets = {\n ...data.offsets,\n ...this._config.offset(data.offsets, this._element) || {}\n }\n\n return data\n }\n } else {\n offset.offset = this._config.offset\n }\n\n return offset\n }\n\n _getPopperConfig() {\n const popperConfig = {\n placement: this._getPlacement(),\n modifiers: {\n offset: this._getOffset(),\n flip: {\n enabled: this._config.flip\n },\n preventOverflow: {\n boundariesElement: this._config.boundary\n }\n }\n }\n\n // Disable Popper.js if we have a static display\n if (this._config.display === 'static') {\n popperConfig.modifiers.applyStyle = {\n enabled: false\n }\n }\n\n return {\n ...popperConfig,\n ...this._config.popperConfig\n }\n }\n\n // Static\n\n static _jQueryInterface(config) {\n return this.each(function () {\n let data = $(this).data(DATA_KEY)\n const _config = typeof config === 'object' ? config : null\n\n if (!data) {\n data = new Dropdown(this, _config)\n $(this).data(DATA_KEY, data)\n }\n\n if (typeof config === 'string') {\n if (typeof data[config] === 'undefined') {\n throw new TypeError(`No method named \"${config}\"`)\n }\n data[config]()\n }\n })\n }\n\n static _clearMenus(event) {\n if (event && (event.which === RIGHT_MOUSE_BUTTON_WHICH ||\n event.type === 'keyup' && event.which !== TAB_KEYCODE)) {\n return\n }\n\n const toggles = [].slice.call(document.querySelectorAll(SELECTOR_DATA_TOGGLE))\n\n for (let i = 0, len = toggles.length; i < len; i++) {\n const parent = Dropdown._getParentFromElement(toggles[i])\n const context = $(toggles[i]).data(DATA_KEY)\n const relatedTarget = {\n relatedTarget: toggles[i]\n }\n\n if (event && event.type === 'click') {\n relatedTarget.clickEvent = event\n }\n\n if (!context) {\n continue\n }\n\n const dropdownMenu = context._menu\n if (!$(parent).hasClass(CLASS_NAME_SHOW)) {\n continue\n }\n\n if (event && (event.type === 'click' &&\n /input|textarea/i.test(event.target.tagName) || event.type === 'keyup' && event.which === TAB_KEYCODE) &&\n $.contains(parent, event.target)) {\n continue\n }\n\n const hideEvent = $.Event(EVENT_HIDE, relatedTarget)\n $(parent).trigger(hideEvent)\n if (hideEvent.isDefaultPrevented()) {\n continue\n }\n\n // If this is a touch-enabled device we remove the extra\n // empty mouseover listeners we added for iOS support\n if ('ontouchstart' in document.documentElement) {\n $(document.body).children().off('mouseover', null, $.noop)\n }\n\n toggles[i].setAttribute('aria-expanded', 'false')\n\n if (context._popper) {\n context._popper.destroy()\n }\n\n $(dropdownMenu).removeClass(CLASS_NAME_SHOW)\n $(parent)\n .removeClass(CLASS_NAME_SHOW)\n .trigger($.Event(EVENT_HIDDEN, relatedTarget))\n }\n }\n\n static _getParentFromElement(element) {\n let parent\n const selector = Util.getSelectorFromElement(element)\n\n if (selector) {\n parent = document.querySelector(selector)\n }\n\n return parent || element.parentNode\n }\n\n // eslint-disable-next-line complexity\n static _dataApiKeydownHandler(event) {\n // If not input/textarea:\n // - And not a key in REGEXP_KEYDOWN => not a dropdown command\n // If input/textarea:\n // - If space key => not a dropdown command\n // - If key is other than escape\n // - If key is not up or down => not a dropdown command\n // - If trigger inside the menu => not a dropdown command\n if (/input|textarea/i.test(event.target.tagName)\n ? event.which === SPACE_KEYCODE || event.which !== ESCAPE_KEYCODE &&\n (event.which !== ARROW_DOWN_KEYCODE && event.which !== ARROW_UP_KEYCODE ||\n $(event.target).closest(SELECTOR_MENU).length) : !REGEXP_KEYDOWN.test(event.which)) {\n return\n }\n\n if (this.disabled || $(this).hasClass(CLASS_NAME_DISABLED)) {\n return\n }\n\n const parent = Dropdown._getParentFromElement(this)\n const isActive = $(parent).hasClass(CLASS_NAME_SHOW)\n\n if (!isActive && event.which === ESCAPE_KEYCODE) {\n return\n }\n\n event.preventDefault()\n event.stopPropagation()\n\n if (!isActive || isActive && (event.which === ESCAPE_KEYCODE || event.which === SPACE_KEYCODE)) {\n if (event.which === ESCAPE_KEYCODE) {\n $(parent.querySelector(SELECTOR_DATA_TOGGLE)).trigger('focus')\n }\n\n $(this).trigger('click')\n return\n }\n\n const items = [].slice.call(parent.querySelectorAll(SELECTOR_VISIBLE_ITEMS))\n .filter((item) => $(item).is(':visible'))\n\n if (items.length === 0) {\n return\n }\n\n let index = items.indexOf(event.target)\n\n if (event.which === ARROW_UP_KEYCODE && index > 0) { // Up\n index--\n }\n\n if (event.which === ARROW_DOWN_KEYCODE && index < items.length - 1) { // Down\n index++\n }\n\n if (index < 0) {\n index = 0\n }\n\n items[index].focus()\n }\n}\n\n/**\n * ------------------------------------------------------------------------\n * Data Api implementation\n * ------------------------------------------------------------------------\n */\n\n$(document)\n .on(EVENT_KEYDOWN_DATA_API, SELECTOR_DATA_TOGGLE, Dropdown._dataApiKeydownHandler)\n .on(EVENT_KEYDOWN_DATA_API, SELECTOR_MENU, Dropdown._dataApiKeydownHandler)\n .on(`${EVENT_CLICK_DATA_API} ${EVENT_KEYUP_DATA_API}`, Dropdown._clearMenus)\n .on(EVENT_CLICK_DATA_API, SELECTOR_DATA_TOGGLE, function (event) {\n event.preventDefault()\n event.stopPropagation()\n Dropdown._jQueryInterface.call($(this), 'toggle')\n })\n .on(EVENT_CLICK_DATA_API, SELECTOR_FORM_CHILD, (e) => {\n e.stopPropagation()\n })\n\n/**\n * ------------------------------------------------------------------------\n * jQuery\n * ------------------------------------------------------------------------\n */\n\n$.fn[NAME] = Dropdown._jQueryInterface\n$.fn[NAME].Constructor = Dropdown\n$.fn[NAME].noConflict = () => {\n $.fn[NAME] = JQUERY_NO_CONFLICT\n return Dropdown._jQueryInterface\n}\n\nexport default Dropdown\n"],"file":"dropdown.min.js"} \ No newline at end of file diff --git a/theme/boost/amd/build/bootstrap/index.min.js b/theme/boost/amd/build/bootstrap/index.min.js new file mode 100644 index 00000000000..9bcd5b1c437 --- /dev/null +++ b/theme/boost/amd/build/bootstrap/index.min.js @@ -0,0 +1,2 @@ +define ("theme_boost/bootstrap/index",["exports","./alert","./button","./carousel","./collapse","./dropdown","./modal","./popover","./scrollspy","./tab","./toast","./tooltip","./util"],function(a,b,c,d,e,f,g,h,i,j,k,l,m){"use strict";Object.defineProperty(a,"__esModule",{value:!0});Object.defineProperty(a,"Alert",{enumerable:!0,get:function get(){return b.default}});Object.defineProperty(a,"Button",{enumerable:!0,get:function get(){return c.default}});Object.defineProperty(a,"Carousel",{enumerable:!0,get:function get(){return d.default}});Object.defineProperty(a,"Collapse",{enumerable:!0,get:function get(){return e.default}});Object.defineProperty(a,"Dropdown",{enumerable:!0,get:function get(){return f.default}});Object.defineProperty(a,"Modal",{enumerable:!0,get:function get(){return g.default}});Object.defineProperty(a,"Popover",{enumerable:!0,get:function get(){return h.default}});Object.defineProperty(a,"Scrollspy",{enumerable:!0,get:function get(){return i.default}});Object.defineProperty(a,"Tab",{enumerable:!0,get:function get(){return j.default}});Object.defineProperty(a,"Toast",{enumerable:!0,get:function get(){return k.default}});Object.defineProperty(a,"Tooltip",{enumerable:!0,get:function get(){return l.default}});Object.defineProperty(a,"Util",{enumerable:!0,get:function get(){return m.default}});b=n(b);c=n(c);d=n(d);e=n(e);f=n(f);g=n(g);h=n(h);i=n(i);j=n(j);k=n(k);l=n(l);m=n(m);function n(a){return a&&a.__esModule?a:{default:a}}}); +//# sourceMappingURL=index.min.js.map diff --git a/theme/boost/amd/build/bootstrap/index.min.js.map b/theme/boost/amd/build/bootstrap/index.min.js.map new file mode 100644 index 00000000000..b3666511508 --- /dev/null +++ b/theme/boost/amd/build/bootstrap/index.min.js.map @@ -0,0 +1 @@ +{"version":3,"sources":["../../src/bootstrap/index.js"],"names":[],"mappings":"kzCAAA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,O","sourcesContent":["import Alert from './alert'\nimport Button from './button'\nimport Carousel from './carousel'\nimport Collapse from './collapse'\nimport Dropdown from './dropdown'\nimport Modal from './modal'\nimport Popover from './popover'\nimport Scrollspy from './scrollspy'\nimport Tab from './tab'\nimport Toast from './toast'\nimport Tooltip from './tooltip'\nimport Util from './util'\n\n/**\n * --------------------------------------------------------------------------\n * Bootstrap (v4.5.0): index.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nexport {\n Util,\n Alert,\n Button,\n Carousel,\n Collapse,\n Dropdown,\n Modal,\n Popover,\n Scrollspy,\n Tab,\n Toast,\n Tooltip\n}\n"],"file":"index.min.js"} \ No newline at end of file diff --git a/theme/boost/amd/build/bootstrap/modal.min.js b/theme/boost/amd/build/bootstrap/modal.min.js new file mode 100644 index 00000000000..b1cb5969c80 --- /dev/null +++ b/theme/boost/amd/build/bootstrap/modal.min.js @@ -0,0 +1,2 @@ +define ("theme_boost/bootstrap/modal",["exports","jquery","./util"],function(a,b,c){"use strict";Object.defineProperty(a,"__esModule",{value:!0});a.default=void 0;b=d(b);c=d(c);function d(a){return a&&a.__esModule?a:{default:a}}function e(a){"@babel/helpers - typeof";if("function"==typeof Symbol&&"symbol"==typeof Symbol.iterator){e=function(a){return typeof a}}else{e=function(a){return a&&"function"==typeof Symbol&&a.constructor===Symbol&&a!==Symbol.prototype?"symbol":typeof a}}return e(a)}function f(a,b){var c=Object.keys(a);if(Object.getOwnPropertySymbols){var d=Object.getOwnPropertySymbols(a);if(b)d=d.filter(function(b){return Object.getOwnPropertyDescriptor(a,b).enumerable});c.push.apply(c,d)}return c}function g(a){for(var b=1,c;bdocument.documentElement.clientHeight;if(!this._isBodyOverflowing&&a){this._element.style.paddingLeft="".concat(this._scrollbarWidth,"px")}if(this._isBodyOverflowing&&!a){this._element.style.paddingRight="".concat(this._scrollbarWidth,"px")}}},{key:"_resetAdjustments",value:function _resetAdjustments(){this._element.style.paddingLeft="";this._element.style.paddingRight=""}},{key:"_checkScrollbar",value:function _checkScrollbar(){var a=document.body.getBoundingClientRect();this._isBodyOverflowing=Math.round(a.left+a.right) this.hide(event)\n )\n\n $(this._dialog).on(EVENT_MOUSEDOWN_DISMISS, () => {\n $(this._element).one(EVENT_MOUSEUP_DISMISS, (event) => {\n if ($(event.target).is(this._element)) {\n this._ignoreBackdropClick = true\n }\n })\n })\n\n this._showBackdrop(() => this._showElement(relatedTarget))\n }\n\n hide(event) {\n if (event) {\n event.preventDefault()\n }\n\n if (!this._isShown || this._isTransitioning) {\n return\n }\n\n const hideEvent = $.Event(EVENT_HIDE)\n\n $(this._element).trigger(hideEvent)\n\n if (!this._isShown || hideEvent.isDefaultPrevented()) {\n return\n }\n\n this._isShown = false\n const transition = $(this._element).hasClass(CLASS_NAME_FADE)\n\n if (transition) {\n this._isTransitioning = true\n }\n\n this._setEscapeEvent()\n this._setResizeEvent()\n\n $(document).off(EVENT_FOCUSIN)\n\n $(this._element).removeClass(CLASS_NAME_SHOW)\n\n $(this._element).off(EVENT_CLICK_DISMISS)\n $(this._dialog).off(EVENT_MOUSEDOWN_DISMISS)\n\n if (transition) {\n const transitionDuration = Util.getTransitionDurationFromElement(this._element)\n\n $(this._element)\n .one(Util.TRANSITION_END, (event) => this._hideModal(event))\n .emulateTransitionEnd(transitionDuration)\n } else {\n this._hideModal()\n }\n }\n\n dispose() {\n [window, this._element, this._dialog]\n .forEach((htmlElement) => $(htmlElement).off(EVENT_KEY))\n\n /**\n * `document` has 2 events `EVENT_FOCUSIN` and `EVENT_CLICK_DATA_API`\n * Do not move `document` in `htmlElements` array\n * It will remove `EVENT_CLICK_DATA_API` event that should remain\n */\n $(document).off(EVENT_FOCUSIN)\n\n $.removeData(this._element, DATA_KEY)\n\n this._config = null\n this._element = null\n this._dialog = null\n this._backdrop = null\n this._isShown = null\n this._isBodyOverflowing = null\n this._ignoreBackdropClick = null\n this._isTransitioning = null\n this._scrollbarWidth = null\n }\n\n handleUpdate() {\n this._adjustDialog()\n }\n\n // Private\n\n _getConfig(config) {\n config = {\n ...Default,\n ...config\n }\n Util.typeCheckConfig(NAME, config, DefaultType)\n return config\n }\n\n _triggerBackdropTransition() {\n if (this._config.backdrop === 'static') {\n const hideEventPrevented = $.Event(EVENT_HIDE_PREVENTED)\n\n $(this._element).trigger(hideEventPrevented)\n if (hideEventPrevented.defaultPrevented) {\n return\n }\n\n this._element.classList.add(CLASS_NAME_STATIC)\n\n const modalTransitionDuration = Util.getTransitionDurationFromElement(this._element)\n\n $(this._element).one(Util.TRANSITION_END, () => {\n this._element.classList.remove(CLASS_NAME_STATIC)\n })\n .emulateTransitionEnd(modalTransitionDuration)\n this._element.focus()\n } else {\n this.hide()\n }\n }\n\n _showElement(relatedTarget) {\n const transition = $(this._element).hasClass(CLASS_NAME_FADE)\n const modalBody = this._dialog ? this._dialog.querySelector(SELECTOR_MODAL_BODY) : null\n\n if (!this._element.parentNode ||\n this._element.parentNode.nodeType !== Node.ELEMENT_NODE) {\n // Don't move modal's DOM position\n document.body.appendChild(this._element)\n }\n\n this._element.style.display = 'block'\n this._element.removeAttribute('aria-hidden')\n this._element.setAttribute('aria-modal', true)\n\n if ($(this._dialog).hasClass(CLASS_NAME_SCROLLABLE) && modalBody) {\n modalBody.scrollTop = 0\n } else {\n this._element.scrollTop = 0\n }\n\n if (transition) {\n Util.reflow(this._element)\n }\n\n $(this._element).addClass(CLASS_NAME_SHOW)\n\n if (this._config.focus) {\n this._enforceFocus()\n }\n\n const shownEvent = $.Event(EVENT_SHOWN, {\n relatedTarget\n })\n\n const transitionComplete = () => {\n if (this._config.focus) {\n this._element.focus()\n }\n this._isTransitioning = false\n $(this._element).trigger(shownEvent)\n }\n\n if (transition) {\n const transitionDuration = Util.getTransitionDurationFromElement(this._dialog)\n\n $(this._dialog)\n .one(Util.TRANSITION_END, transitionComplete)\n .emulateTransitionEnd(transitionDuration)\n } else {\n transitionComplete()\n }\n }\n\n _enforceFocus() {\n $(document)\n .off(EVENT_FOCUSIN) // Guard against infinite focus loop\n .on(EVENT_FOCUSIN, (event) => {\n if (document !== event.target &&\n this._element !== event.target &&\n $(this._element).has(event.target).length === 0) {\n this._element.focus()\n }\n })\n }\n\n _setEscapeEvent() {\n if (this._isShown) {\n $(this._element).on(EVENT_KEYDOWN_DISMISS, (event) => {\n if (this._config.keyboard && event.which === ESCAPE_KEYCODE) {\n event.preventDefault()\n this.hide()\n } else if (!this._config.keyboard && event.which === ESCAPE_KEYCODE) {\n this._triggerBackdropTransition()\n }\n })\n } else if (!this._isShown) {\n $(this._element).off(EVENT_KEYDOWN_DISMISS)\n }\n }\n\n _setResizeEvent() {\n if (this._isShown) {\n $(window).on(EVENT_RESIZE, (event) => this.handleUpdate(event))\n } else {\n $(window).off(EVENT_RESIZE)\n }\n }\n\n _hideModal() {\n this._element.style.display = 'none'\n this._element.setAttribute('aria-hidden', true)\n this._element.removeAttribute('aria-modal')\n this._isTransitioning = false\n this._showBackdrop(() => {\n $(document.body).removeClass(CLASS_NAME_OPEN)\n this._resetAdjustments()\n this._resetScrollbar()\n $(this._element).trigger(EVENT_HIDDEN)\n })\n }\n\n _removeBackdrop() {\n if (this._backdrop) {\n $(this._backdrop).remove()\n this._backdrop = null\n }\n }\n\n _showBackdrop(callback) {\n const animate = $(this._element).hasClass(CLASS_NAME_FADE)\n ? CLASS_NAME_FADE : ''\n\n if (this._isShown && this._config.backdrop) {\n this._backdrop = document.createElement('div')\n this._backdrop.className = CLASS_NAME_BACKDROP\n\n if (animate) {\n this._backdrop.classList.add(animate)\n }\n\n $(this._backdrop).appendTo(document.body)\n\n $(this._element).on(EVENT_CLICK_DISMISS, (event) => {\n if (this._ignoreBackdropClick) {\n this._ignoreBackdropClick = false\n return\n }\n if (event.target !== event.currentTarget) {\n return\n }\n\n this._triggerBackdropTransition()\n })\n\n if (animate) {\n Util.reflow(this._backdrop)\n }\n\n $(this._backdrop).addClass(CLASS_NAME_SHOW)\n\n if (!callback) {\n return\n }\n\n if (!animate) {\n callback()\n return\n }\n\n const backdropTransitionDuration = Util.getTransitionDurationFromElement(this._backdrop)\n\n $(this._backdrop)\n .one(Util.TRANSITION_END, callback)\n .emulateTransitionEnd(backdropTransitionDuration)\n } else if (!this._isShown && this._backdrop) {\n $(this._backdrop).removeClass(CLASS_NAME_SHOW)\n\n const callbackRemove = () => {\n this._removeBackdrop()\n if (callback) {\n callback()\n }\n }\n\n if ($(this._element).hasClass(CLASS_NAME_FADE)) {\n const backdropTransitionDuration = Util.getTransitionDurationFromElement(this._backdrop)\n\n $(this._backdrop)\n .one(Util.TRANSITION_END, callbackRemove)\n .emulateTransitionEnd(backdropTransitionDuration)\n } else {\n callbackRemove()\n }\n } else if (callback) {\n callback()\n }\n }\n\n // ----------------------------------------------------------------------\n // the following methods are used to handle overflowing modals\n // todo (fat): these should probably be refactored out of modal.js\n // ----------------------------------------------------------------------\n\n _adjustDialog() {\n const isModalOverflowing =\n this._element.scrollHeight > document.documentElement.clientHeight\n\n if (!this._isBodyOverflowing && isModalOverflowing) {\n this._element.style.paddingLeft = `${this._scrollbarWidth}px`\n }\n\n if (this._isBodyOverflowing && !isModalOverflowing) {\n this._element.style.paddingRight = `${this._scrollbarWidth}px`\n }\n }\n\n _resetAdjustments() {\n this._element.style.paddingLeft = ''\n this._element.style.paddingRight = ''\n }\n\n _checkScrollbar() {\n const rect = document.body.getBoundingClientRect()\n this._isBodyOverflowing = Math.round(rect.left + rect.right) < window.innerWidth\n this._scrollbarWidth = this._getScrollbarWidth()\n }\n\n _setScrollbar() {\n if (this._isBodyOverflowing) {\n // Note: DOMNode.style.paddingRight returns the actual value or '' if not set\n // while $(DOMNode).css('padding-right') returns the calculated value or 0 if not set\n const fixedContent = [].slice.call(document.querySelectorAll(SELECTOR_FIXED_CONTENT))\n const stickyContent = [].slice.call(document.querySelectorAll(SELECTOR_STICKY_CONTENT))\n\n // Adjust fixed content padding\n $(fixedContent).each((index, element) => {\n const actualPadding = element.style.paddingRight\n const calculatedPadding = $(element).css('padding-right')\n $(element)\n .data('padding-right', actualPadding)\n .css('padding-right', `${parseFloat(calculatedPadding) + this._scrollbarWidth}px`)\n })\n\n // Adjust sticky content margin\n $(stickyContent).each((index, element) => {\n const actualMargin = element.style.marginRight\n const calculatedMargin = $(element).css('margin-right')\n $(element)\n .data('margin-right', actualMargin)\n .css('margin-right', `${parseFloat(calculatedMargin) - this._scrollbarWidth}px`)\n })\n\n // Adjust body padding\n const actualPadding = document.body.style.paddingRight\n const calculatedPadding = $(document.body).css('padding-right')\n $(document.body)\n .data('padding-right', actualPadding)\n .css('padding-right', `${parseFloat(calculatedPadding) + this._scrollbarWidth}px`)\n }\n\n $(document.body).addClass(CLASS_NAME_OPEN)\n }\n\n _resetScrollbar() {\n // Restore fixed content padding\n const fixedContent = [].slice.call(document.querySelectorAll(SELECTOR_FIXED_CONTENT))\n $(fixedContent).each((index, element) => {\n const padding = $(element).data('padding-right')\n $(element).removeData('padding-right')\n element.style.paddingRight = padding ? padding : ''\n })\n\n // Restore sticky content\n const elements = [].slice.call(document.querySelectorAll(`${SELECTOR_STICKY_CONTENT}`))\n $(elements).each((index, element) => {\n const margin = $(element).data('margin-right')\n if (typeof margin !== 'undefined') {\n $(element).css('margin-right', margin).removeData('margin-right')\n }\n })\n\n // Restore body padding\n const padding = $(document.body).data('padding-right')\n $(document.body).removeData('padding-right')\n document.body.style.paddingRight = padding ? padding : ''\n }\n\n _getScrollbarWidth() { // thx d.walsh\n const scrollDiv = document.createElement('div')\n scrollDiv.className = CLASS_NAME_SCROLLBAR_MEASURER\n document.body.appendChild(scrollDiv)\n const scrollbarWidth = scrollDiv.getBoundingClientRect().width - scrollDiv.clientWidth\n document.body.removeChild(scrollDiv)\n return scrollbarWidth\n }\n\n // Static\n\n static _jQueryInterface(config, relatedTarget) {\n return this.each(function () {\n let data = $(this).data(DATA_KEY)\n const _config = {\n ...Default,\n ...$(this).data(),\n ...typeof config === 'object' && config ? config : {}\n }\n\n if (!data) {\n data = new Modal(this, _config)\n $(this).data(DATA_KEY, data)\n }\n\n if (typeof config === 'string') {\n if (typeof data[config] === 'undefined') {\n throw new TypeError(`No method named \"${config}\"`)\n }\n data[config](relatedTarget)\n } else if (_config.show) {\n data.show(relatedTarget)\n }\n })\n }\n}\n\n/**\n * ------------------------------------------------------------------------\n * Data Api implementation\n * ------------------------------------------------------------------------\n */\n\n$(document).on(EVENT_CLICK_DATA_API, SELECTOR_DATA_TOGGLE, function (event) {\n let target\n const selector = Util.getSelectorFromElement(this)\n\n if (selector) {\n target = document.querySelector(selector)\n }\n\n const config = $(target).data(DATA_KEY)\n ? 'toggle' : {\n ...$(target).data(),\n ...$(this).data()\n }\n\n if (this.tagName === 'A' || this.tagName === 'AREA') {\n event.preventDefault()\n }\n\n const $target = $(target).one(EVENT_SHOW, (showEvent) => {\n if (showEvent.isDefaultPrevented()) {\n // Only register focus restorer if modal will actually get shown\n return\n }\n\n $target.one(EVENT_HIDDEN, () => {\n if ($(this).is(':visible')) {\n this.focus()\n }\n })\n })\n\n Modal._jQueryInterface.call($(target), config, this)\n})\n\n/**\n * ------------------------------------------------------------------------\n * jQuery\n * ------------------------------------------------------------------------\n */\n\n$.fn[NAME] = Modal._jQueryInterface\n$.fn[NAME].Constructor = Modal\n$.fn[NAME].noConflict = () => {\n $.fn[NAME] = JQUERY_NO_CONFLICT\n return Modal._jQueryInterface\n}\n\nexport default Modal\n"],"file":"modal.min.js"} \ No newline at end of file diff --git a/theme/boost/amd/build/bootstrap/popover.min.js b/theme/boost/amd/build/bootstrap/popover.min.js new file mode 100644 index 00000000000..61c387f0c68 --- /dev/null +++ b/theme/boost/amd/build/bootstrap/popover.min.js @@ -0,0 +1,2 @@ +define ("theme_boost/bootstrap/popover",["exports","jquery","./tooltip"],function(a,b,c){"use strict";Object.defineProperty(a,"__esModule",{value:!0});a.default=void 0;b=d(b);c=d(c);function d(a){return a&&a.__esModule?a:{default:a}}function e(a){"@babel/helpers - typeof";if("function"==typeof Symbol&&"symbol"==typeof Symbol.iterator){e=function(a){return typeof a}}else{e=function(a){return a&&"function"==typeof Symbol&&a.constructor===Symbol&&a!==Symbol.prototype?"symbol":typeof a}}return e(a)}function f(a,b){if(!(a instanceof b)){throw new TypeError("Cannot call a class as a function")}}function g(a,b){for(var c=0,d;c

"}),z=r({},c.default.DefaultType,{content:"(string|element|function)"}),A={HIDE:"hide".concat(u),HIDDEN:"hidden".concat(u),SHOW:"show".concat(u),SHOWN:"shown".concat(u),INSERTED:"inserted".concat(u),CLICK:"click".concat(u),FOCUSIN:"focusin".concat(u),FOCUSOUT:"focusout".concat(u),MOUSEENTER:"mouseenter".concat(u),MOUSELEAVE:"mouseleave".concat(u)},B=function(a){i(c,a);var d=k(c);function c(){f(this,c);return d.apply(this,arguments)}h(c,[{key:"isWithContent",value:function isWithContent(){return this.getTitle()||this._getContent()}},{key:"addAttachmentClass",value:function addAttachmentClass(a){(0,b.default)(this.getTipElement()).addClass("".concat(w,"-").concat(a))}},{key:"getTipElement",value:function getTipElement(){this.tip=this.tip||(0,b.default)(this.config.template)[0];return this.tip}},{key:"setContent",value:function setContent(){var a=(0,b.default)(this.getTipElement());this.setElementContent(a.find(".popover-header"),this.getTitle());var c=this._getContent();if("function"==typeof c){c=c.call(this.element)}this.setElementContent(a.find(".popover-body"),c);a.removeClass("".concat("fade"," ").concat("show"))}},{key:"_getContent",value:function _getContent(){return this.element.getAttribute("data-content")||this.config.content}},{key:"_cleanTipClass",value:function _cleanTipClass(){var a=(0,b.default)(this.getTipElement()),c=a.attr("class").match(x);if(null!==c&&0' +\n '
' +\n '

' +\n '
'\n}\n\nconst DefaultType = {\n ...Tooltip.DefaultType,\n content : '(string|element|function)'\n}\n\nconst CLASS_NAME_FADE = 'fade'\nconst CLASS_NAME_SHOW = 'show'\n\nconst SELECTOR_TITLE = '.popover-header'\nconst SELECTOR_CONTENT = '.popover-body'\n\nconst Event = {\n HIDE : `hide${EVENT_KEY}`,\n HIDDEN : `hidden${EVENT_KEY}`,\n SHOW : `show${EVENT_KEY}`,\n SHOWN : `shown${EVENT_KEY}`,\n INSERTED : `inserted${EVENT_KEY}`,\n CLICK : `click${EVENT_KEY}`,\n FOCUSIN : `focusin${EVENT_KEY}`,\n FOCUSOUT : `focusout${EVENT_KEY}`,\n MOUSEENTER : `mouseenter${EVENT_KEY}`,\n MOUSELEAVE : `mouseleave${EVENT_KEY}`\n}\n\n/**\n * ------------------------------------------------------------------------\n * Class Definition\n * ------------------------------------------------------------------------\n */\n\nclass Popover extends Tooltip {\n // Getters\n\n static get VERSION() {\n return VERSION\n }\n\n static get Default() {\n return Default\n }\n\n static get NAME() {\n return NAME\n }\n\n static get DATA_KEY() {\n return DATA_KEY\n }\n\n static get Event() {\n return Event\n }\n\n static get EVENT_KEY() {\n return EVENT_KEY\n }\n\n static get DefaultType() {\n return DefaultType\n }\n\n // Overrides\n\n isWithContent() {\n return this.getTitle() || this._getContent()\n }\n\n addAttachmentClass(attachment) {\n $(this.getTipElement()).addClass(`${CLASS_PREFIX}-${attachment}`)\n }\n\n getTipElement() {\n this.tip = this.tip || $(this.config.template)[0]\n return this.tip\n }\n\n setContent() {\n const $tip = $(this.getTipElement())\n\n // We use append for html objects to maintain js events\n this.setElementContent($tip.find(SELECTOR_TITLE), this.getTitle())\n let content = this._getContent()\n if (typeof content === 'function') {\n content = content.call(this.element)\n }\n this.setElementContent($tip.find(SELECTOR_CONTENT), content)\n\n $tip.removeClass(`${CLASS_NAME_FADE} ${CLASS_NAME_SHOW}`)\n }\n\n // Private\n\n _getContent() {\n return this.element.getAttribute('data-content') ||\n this.config.content\n }\n\n _cleanTipClass() {\n const $tip = $(this.getTipElement())\n const tabClass = $tip.attr('class').match(BSCLS_PREFIX_REGEX)\n if (tabClass !== null && tabClass.length > 0) {\n $tip.removeClass(tabClass.join(''))\n }\n }\n\n // Static\n\n static _jQueryInterface(config) {\n return this.each(function () {\n let data = $(this).data(DATA_KEY)\n const _config = typeof config === 'object' ? config : null\n\n if (!data && /dispose|hide/.test(config)) {\n return\n }\n\n if (!data) {\n data = new Popover(this, _config)\n $(this).data(DATA_KEY, data)\n }\n\n if (typeof config === 'string') {\n if (typeof data[config] === 'undefined') {\n throw new TypeError(`No method named \"${config}\"`)\n }\n data[config]()\n }\n })\n }\n}\n\n/**\n * ------------------------------------------------------------------------\n * jQuery\n * ------------------------------------------------------------------------\n */\n\n$.fn[NAME] = Popover._jQueryInterface\n$.fn[NAME].Constructor = Popover\n$.fn[NAME].noConflict = () => {\n $.fn[NAME] = JQUERY_NO_CONFLICT\n return Popover._jQueryInterface\n}\n\nexport default Popover\n"],"file":"popover.min.js"} \ No newline at end of file diff --git a/theme/boost/amd/build/bootstrap/scrollspy.min.js b/theme/boost/amd/build/bootstrap/scrollspy.min.js new file mode 100644 index 00000000000..2fa14269d84 --- /dev/null +++ b/theme/boost/amd/build/bootstrap/scrollspy.min.js @@ -0,0 +1,2 @@ +define ("theme_boost/bootstrap/scrollspy",["exports","jquery","./util"],function(a,b,c){"use strict";Object.defineProperty(a,"__esModule",{value:!0});a.default=void 0;b=d(b);c=d(c);function d(a){return a&&a.__esModule?a:{default:a}}function e(a){"@babel/helpers - typeof";if("function"==typeof Symbol&&"symbol"==typeof Symbol.iterator){e=function(a){return typeof a}}else{e=function(a){return a&&"function"==typeof Symbol&&a.constructor===Symbol&&a!==Symbol.prototype?"symbol":typeof a}}return e(a)}function f(a,b){var c=Object.keys(a);if(Object.getOwnPropertySymbols){var d=Object.getOwnPropertySymbols(a);if(b)d=d.filter(function(b){return Object.getOwnPropertyDescriptor(a,b).enumerable});c.push.apply(c,d)}return c}function g(a){for(var b=1,c;b=c){var d=this._targets[this._targets.length-1];if(this._activeTarget!==d){this._activate(d)}return}if(this._activeTarget&&a=this._offsets[e]&&("undefined"==typeof this._offsets[e+1]||a this._process(event))\n\n this.refresh()\n this._process()\n }\n\n // Getters\n\n static get VERSION() {\n return VERSION\n }\n\n static get Default() {\n return Default\n }\n\n // Public\n\n refresh() {\n const autoMethod = this._scrollElement === this._scrollElement.window\n ? METHOD_OFFSET : METHOD_POSITION\n\n const offsetMethod = this._config.method === 'auto'\n ? autoMethod : this._config.method\n\n const offsetBase = offsetMethod === METHOD_POSITION\n ? this._getScrollTop() : 0\n\n this._offsets = []\n this._targets = []\n\n this._scrollHeight = this._getScrollHeight()\n\n const targets = [].slice.call(document.querySelectorAll(this._selector))\n\n targets\n .map((element) => {\n let target\n const targetSelector = Util.getSelectorFromElement(element)\n\n if (targetSelector) {\n target = document.querySelector(targetSelector)\n }\n\n if (target) {\n const targetBCR = target.getBoundingClientRect()\n if (targetBCR.width || targetBCR.height) {\n // TODO (fat): remove sketch reliance on jQuery position/offset\n return [\n $(target)[offsetMethod]().top + offsetBase,\n targetSelector\n ]\n }\n }\n return null\n })\n .filter((item) => item)\n .sort((a, b) => a[0] - b[0])\n .forEach((item) => {\n this._offsets.push(item[0])\n this._targets.push(item[1])\n })\n }\n\n dispose() {\n $.removeData(this._element, DATA_KEY)\n $(this._scrollElement).off(EVENT_KEY)\n\n this._element = null\n this._scrollElement = null\n this._config = null\n this._selector = null\n this._offsets = null\n this._targets = null\n this._activeTarget = null\n this._scrollHeight = null\n }\n\n // Private\n\n _getConfig(config) {\n config = {\n ...Default,\n ...typeof config === 'object' && config ? config : {}\n }\n\n if (typeof config.target !== 'string' && Util.isElement(config.target)) {\n let id = $(config.target).attr('id')\n if (!id) {\n id = Util.getUID(NAME)\n $(config.target).attr('id', id)\n }\n config.target = `#${id}`\n }\n\n Util.typeCheckConfig(NAME, config, DefaultType)\n\n return config\n }\n\n _getScrollTop() {\n return this._scrollElement === window\n ? this._scrollElement.pageYOffset : this._scrollElement.scrollTop\n }\n\n _getScrollHeight() {\n return this._scrollElement.scrollHeight || Math.max(\n document.body.scrollHeight,\n document.documentElement.scrollHeight\n )\n }\n\n _getOffsetHeight() {\n return this._scrollElement === window\n ? window.innerHeight : this._scrollElement.getBoundingClientRect().height\n }\n\n _process() {\n const scrollTop = this._getScrollTop() + this._config.offset\n const scrollHeight = this._getScrollHeight()\n const maxScroll = this._config.offset + scrollHeight - this._getOffsetHeight()\n\n if (this._scrollHeight !== scrollHeight) {\n this.refresh()\n }\n\n if (scrollTop >= maxScroll) {\n const target = this._targets[this._targets.length - 1]\n\n if (this._activeTarget !== target) {\n this._activate(target)\n }\n return\n }\n\n if (this._activeTarget && scrollTop < this._offsets[0] && this._offsets[0] > 0) {\n this._activeTarget = null\n this._clear()\n return\n }\n\n for (let i = this._offsets.length; i--;) {\n const isActiveTarget = this._activeTarget !== this._targets[i] &&\n scrollTop >= this._offsets[i] &&\n (typeof this._offsets[i + 1] === 'undefined' ||\n scrollTop < this._offsets[i + 1])\n\n if (isActiveTarget) {\n this._activate(this._targets[i])\n }\n }\n }\n\n _activate(target) {\n this._activeTarget = target\n\n this._clear()\n\n const queries = this._selector\n .split(',')\n .map((selector) => `${selector}[data-target=\"${target}\"],${selector}[href=\"${target}\"]`)\n\n const $link = $([].slice.call(document.querySelectorAll(queries.join(','))))\n\n if ($link.hasClass(CLASS_NAME_DROPDOWN_ITEM)) {\n $link.closest(SELECTOR_DROPDOWN)\n .find(SELECTOR_DROPDOWN_TOGGLE)\n .addClass(CLASS_NAME_ACTIVE)\n $link.addClass(CLASS_NAME_ACTIVE)\n } else {\n // Set triggered link as active\n $link.addClass(CLASS_NAME_ACTIVE)\n // Set triggered links parents as active\n // With both