diff --git a/build/build-plugins.js b/build/build-plugins.js index 4917f4a6aa6e..0940ab1fc438 100644 --- a/build/build-plugins.js +++ b/build/build-plugins.js @@ -17,10 +17,12 @@ const files = { Index: path.resolve(__dirname, '../js/src/index.js') } -const pathDest = path.resolve(__dirname, '../js/dist/') -const relativePathSrc = 'js/src/' -const relativePathDist = 'js/dist/' -const externalIndex = [] +const pathDest = path.resolve(__dirname, '../js/dist/') +const pathDestESM = path.resolve(__dirname, '../js/dist/esm/') +const relativePathSrc = 'js/src/' +const relativePathDist = 'js/dist/' +const relativePathDistESM = 'js/dist/esm/' +const externalIndex = [] for (const plugin in files) { if (!Object.prototype.hasOwnProperty.call(files, plugin)) { @@ -28,18 +30,23 @@ for (const plugin in files) { } const file = `${plugin.toLowerCase()}.js` var externalArray = ['jquery', 'popper.js'] + if (files[plugin] !== files.Util) { externalArray.push(files.Util) } - if (files[plugin] !== files.Tooltip) { + + if (files[plugin] === files.Popover) { externalArray.push(files.Tooltip) } + + // Do not export every plugins for the Index if (files[plugin] !== files.Index) { externalIndex.push(files[plugin]) } else { externalArray = externalIndex } + rollup.rollup({ entry: files[plugin], external: externalArray, @@ -56,7 +63,7 @@ for (const plugin in files) { } }) .then(function (bundle) { - bundle.write({ + const conf = { dest: `${pathDest}/${file}`, format: 'umd', moduleName: plugin === 'Index' ? 'bootstrap' : plugin, @@ -65,9 +72,22 @@ for (const plugin in files) { jquery: '$', 'popper.js': 'Popper' } - }) + } + // Write plugin in UMD + bundle.write(conf) .then(function () { console.log(`${relativePathSrc}${file} -> ${relativePathDist}${file}`) + + conf.format = 'es' + conf.moduleName = null + conf.dest = `${pathDestESM}/${file}` + conf.globals = null + + // Write plugin in ESM + bundle.write(conf) + .then(function () { + console.log(`${relativePathSrc}${file} -> ${relativePathDistESM}${file}`) + }) }) }) .catch(console.error) // log errors diff --git a/js/dist/esm/alert.js b/js/dist/esm/alert.js new file mode 100644 index 000000000000..51ec853d0b01 --- /dev/null +++ b/js/dist/esm/alert.js @@ -0,0 +1,217 @@ +import $ from 'jquery'; +import Util from './util.js'; + +var classCallCheck = function (instance, Constructor) { + if (!(instance instanceof Constructor)) { + throw new TypeError("Cannot call a class as a function"); + } +}; + +var createClass = function () { + function defineProperties(target, props) { + for (var i = 0; i < props.length; i++) { + var descriptor = props[i]; + descriptor.enumerable = descriptor.enumerable || false; + descriptor.configurable = true; + if ("value" in descriptor) descriptor.writable = true; + Object.defineProperty(target, descriptor.key, descriptor); + } + } + + return function (Constructor, protoProps, staticProps) { + if (protoProps) defineProperties(Constructor.prototype, protoProps); + if (staticProps) defineProperties(Constructor, staticProps); + return Constructor; + }; +}(); + +/** + * -------------------------------------------------------------------------- + * Bootstrap (v4.0.0-alpha.6): alert.js + * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) + * -------------------------------------------------------------------------- + */ + +/** + * ------------------------------------------------------------------------ + * Constants + * ------------------------------------------------------------------------ + */ + +var NAME = 'alert'; +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; + +var Selector = { + DISMISS: '[data-dismiss="alert"]' +}; + +var Event = { + CLOSE: 'close' + EVENT_KEY, + CLOSED: 'closed' + EVENT_KEY, + CLICK_DATA_API: 'click' + EVENT_KEY + DATA_API_KEY +}; + +var ClassName = { + ALERT: 'alert', + FADE: 'fade', + SHOW: 'show' + + /** + * ------------------------------------------------------------------------ + * Class Definition + * ------------------------------------------------------------------------ + */ + +}; +var Alert = function () { + function Alert(element) { + classCallCheck(this, Alert); + + this._element = element; + } + + // getters + + createClass(Alert, [{ + key: 'close', + + + // public + + value: function close(element) { + element = element || this._element; + + var rootElement = this._getRootElement(element); + var customEvent = this._triggerCloseEvent(rootElement); + + if (customEvent.isDefaultPrevented()) { + return; + } + + this._removeElement(rootElement); + } + }, { + key: 'dispose', + value: function dispose() { + $.removeData(this._element, DATA_KEY); + this._element = null; + } + + // private + + }, { + key: '_getRootElement', + value: function _getRootElement(element) { + var selector = Util.getSelectorFromElement(element); + var parent = false; + + if (selector) { + parent = $(selector)[0]; + } + + if (!parent) { + parent = $(element).closest('.' + ClassName.ALERT)[0]; + } + + return parent; + } + }, { + key: '_triggerCloseEvent', + value: function _triggerCloseEvent(element) { + var closeEvent = $.Event(Event.CLOSE); + + $(element).trigger(closeEvent); + return closeEvent; + } + }, { + key: '_removeElement', + value: function _removeElement(element) { + var _this = this; + + $(element).removeClass(ClassName.SHOW); + + if (!Util.supportsTransitionEnd() || !$(element).hasClass(ClassName.FADE)) { + this._destroyElement(element); + return; + } + + $(element).one(Util.TRANSITION_END, function (event) { + return _this._destroyElement(element, event); + }).emulateTransitionEnd(TRANSITION_DURATION); + } + }, { + key: '_destroyElement', + value: function _destroyElement(element) { + $(element).detach().trigger(Event.CLOSED).remove(); + } + + // static + + }], [{ + key: '_jQueryInterface', + value: function _jQueryInterface(config) { + return this.each(function () { + var $element = $(this); + var data = $element.data(DATA_KEY); + + if (!data) { + data = new Alert(this); + $element.data(DATA_KEY, data); + } + + if (config === 'close') { + data[config](this); + } + }); + } + }, { + key: '_handleDismiss', + value: function _handleDismiss(alertInstance) { + return function (event) { + if (event) { + event.preventDefault(); + } + + alertInstance.close(this); + }; + } + }, { + key: '_init', + value: function _init() { + /** + * ------------------------------------------------------------------------ + * Data Api implementation + * ------------------------------------------------------------------------ + */ + + $(document).on(Event.CLICK_DATA_API, Selector.DISMISS, Alert._handleDismiss(new Alert())); + + /** + * ------------------------------------------------------------------------ + * jQuery + * ------------------------------------------------------------------------ + */ + + $.fn[NAME] = Alert._jQueryInterface; + $.fn[NAME].Constructor = Alert; + $.fn[NAME].noConflict = function () { + $.fn[NAME] = JQUERY_NO_CONFLICT; + return Alert._jQueryInterface; + }; + } + }, { + key: 'VERSION', + get: function get$$1() { + return VERSION; + } + }]); + return Alert; +}(); + +export default Alert; +//# sourceMappingURL=alert.js.map diff --git a/js/dist/esm/alert.js.map b/js/dist/esm/alert.js.map new file mode 100644 index 000000000000..077c7fef56d4 --- /dev/null +++ b/js/dist/esm/alert.js.map @@ -0,0 +1 @@ +{"version":3,"file":"alert.js","sources":["../../src/alert.js"],"sourcesContent":["import $ from 'jquery'\nimport Util from './util'\n\n\n/**\n * --------------------------------------------------------------------------\n * Bootstrap (v4.0.0-alpha.6): alert.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n * --------------------------------------------------------------------------\n */\n\n/**\n * ------------------------------------------------------------------------\n * Constants\n * ------------------------------------------------------------------------\n */\n\nconst NAME = 'alert'\nconst VERSION = '4.0.0-alpha.6'\nconst DATA_KEY = 'bs.alert'\nconst EVENT_KEY = `.${DATA_KEY}`\nconst DATA_API_KEY = '.data-api'\nconst JQUERY_NO_CONFLICT = $.fn[NAME]\nconst TRANSITION_DURATION = 150\n\nconst Selector = {\n DISMISS : '[data-dismiss=\"alert\"]'\n}\n\nconst Event = {\n CLOSE : `close${EVENT_KEY}`,\n CLOSED : `closed${EVENT_KEY}`,\n CLICK_DATA_API : `click${EVENT_KEY}${DATA_API_KEY}`\n}\n\nconst ClassName = {\n ALERT : 'alert',\n FADE : 'fade',\n SHOW : 'show'\n}\n\n\n/**\n * ------------------------------------------------------------------------\n * Class Definition\n * ------------------------------------------------------------------------\n */\n\nexport default class Alert {\n\n constructor(element) {\n this._element = element\n }\n\n\n // getters\n\n static get VERSION() {\n return VERSION\n }\n\n\n // public\n\n close(element) {\n element = element || this._element\n\n const rootElement = this._getRootElement(element)\n const customEvent = this._triggerCloseEvent(rootElement)\n\n if (customEvent.isDefaultPrevented()) {\n return\n }\n\n this._removeElement(rootElement)\n }\n\n dispose() {\n $.removeData(this._element, DATA_KEY)\n this._element = null\n }\n\n\n // private\n\n _getRootElement(element) {\n const selector = Util.getSelectorFromElement(element)\n let parent = false\n\n if (selector) {\n parent = $(selector)[0]\n }\n\n if (!parent) {\n parent = $(element).closest(`.${ClassName.ALERT}`)[0]\n }\n\n return parent\n }\n\n _triggerCloseEvent(element) {\n const closeEvent = $.Event(Event.CLOSE)\n\n $(element).trigger(closeEvent)\n return closeEvent\n }\n\n _removeElement(element) {\n $(element).removeClass(ClassName.SHOW)\n\n if (!Util.supportsTransitionEnd() ||\n !$(element).hasClass(ClassName.FADE)) {\n this._destroyElement(element)\n return\n }\n\n $(element)\n .one(Util.TRANSITION_END, (event) => this._destroyElement(element, event))\n .emulateTransitionEnd(TRANSITION_DURATION)\n }\n\n _destroyElement(element) {\n $(element)\n .detach()\n .trigger(Event.CLOSED)\n .remove()\n }\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 static _init() {\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 = function () {\n $.fn[NAME] = JQUERY_NO_CONFLICT\n return Alert._jQueryInterface\n }\n }\n}\n\n/*if (!Util.nodeEnv()) {\n $(document).ready(() => {\n Alert._init()\n })\n}*/\n"],"names":["NAME","VERSION","DATA_KEY","EVENT_KEY","DATA_API_KEY","JQUERY_NO_CONFLICT","$","fn","TRANSITION_DURATION","Selector","Event","ClassName","Alert","element","_element","rootElement","_getRootElement","customEvent","_triggerCloseEvent","isDefaultPrevented","_removeElement","removeData","selector","Util","getSelectorFromElement","parent","closest","ALERT","closeEvent","CLOSE","trigger","removeClass","SHOW","supportsTransitionEnd","hasClass","FADE","_destroyElement","one","TRANSITION_END","event","emulateTransitionEnd","detach","CLOSED","remove","config","each","$element","data","alertInstance","preventDefault","close","document","on","CLICK_DATA_API","DISMISS","_handleDismiss","_jQueryInterface","Constructor","noConflict"],"mappings":"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"} \ No newline at end of file diff --git a/js/dist/esm/button.js b/js/dist/esm/button.js new file mode 100644 index 000000000000..e1afc373c41c --- /dev/null +++ b/js/dist/esm/button.js @@ -0,0 +1,208 @@ +import $ from 'jquery'; +import Util from './util.js'; + +var classCallCheck = function (instance, Constructor) { + if (!(instance instanceof Constructor)) { + throw new TypeError("Cannot call a class as a function"); + } +}; + +var createClass = function () { + function defineProperties(target, props) { + for (var i = 0; i < props.length; i++) { + var descriptor = props[i]; + descriptor.enumerable = descriptor.enumerable || false; + descriptor.configurable = true; + if ("value" in descriptor) descriptor.writable = true; + Object.defineProperty(target, descriptor.key, descriptor); + } + } + + return function (Constructor, protoProps, staticProps) { + if (protoProps) defineProperties(Constructor.prototype, protoProps); + if (staticProps) defineProperties(Constructor, staticProps); + return Constructor; + }; +}(); + +/** + * -------------------------------------------------------------------------- + * Bootstrap (v4.0.0-alpha.6): button.js + * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) + * -------------------------------------------------------------------------- + */ + +/** + * ------------------------------------------------------------------------ + * Constants + * ------------------------------------------------------------------------ + */ + +var NAME = 'button'; +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]; + +var ClassName = { + ACTIVE: 'active', + BUTTON: 'btn', + FOCUS: 'focus' +}; + +var Selector = { + DATA_TOGGLE_CARROT: '[data-toggle^="button"]', + DATA_TOGGLE: '[data-toggle="buttons"]', + INPUT: 'input', + ACTIVE: '.active', + BUTTON: '.btn' +}; + +var Event = { + CLICK_DATA_API: 'click' + EVENT_KEY + DATA_API_KEY, + FOCUS_BLUR_DATA_API: 'focus' + EVENT_KEY + DATA_API_KEY + ' ' + ('blur' + EVENT_KEY + DATA_API_KEY) + + /** + * ------------------------------------------------------------------------ + * Class Definition + * ------------------------------------------------------------------------ + */ + +}; +var Button = function () { + function Button(element) { + classCallCheck(this, Button); + + this._element = element; + } + + // getters + + createClass(Button, [{ + key: 'toggle', + + + // public + + value: function toggle() { + var triggerChangeEvent = true; + var addAriaPressed = true; + var rootElement = $(this._element).closest(Selector.DATA_TOGGLE)[0]; + + if (rootElement) { + var input = $(this._element).find(Selector.INPUT)[0]; + + if (input) { + if (input.type === 'radio') { + if (input.checked && $(this._element).hasClass(ClassName.ACTIVE)) { + triggerChangeEvent = false; + } else { + var activeElement = $(rootElement).find(Selector.ACTIVE)[0]; + + if (activeElement) { + $(activeElement).removeClass(ClassName.ACTIVE); + } + } + } + + if (triggerChangeEvent) { + if (input.hasAttribute('disabled') || rootElement.hasAttribute('disabled') || input.classList.contains('disabled') || rootElement.classList.contains('disabled')) { + return; + } + input.checked = !$(this._element).hasClass(ClassName.ACTIVE); + $(input).trigger('change'); + } + + input.focus(); + addAriaPressed = false; + } + } + + if (addAriaPressed) { + this._element.setAttribute('aria-pressed', !$(this._element).hasClass(ClassName.ACTIVE)); + } + + if (triggerChangeEvent) { + $(this._element).toggleClass(ClassName.ACTIVE); + } + } + }, { + key: 'dispose', + value: function dispose() { + $.removeData(this._element, DATA_KEY); + this._element = null; + } + + // static + + }], [{ + key: '_jQueryInterface', + value: function _jQueryInterface(config) { + return this.each(function () { + var data = $(this).data(DATA_KEY); + + if (!data) { + data = new Button(this); + $(this).data(DATA_KEY, data); + } + + if (config === 'toggle') { + data[config](); + } + }); + } + }, { + key: '_init', + value: function _init() { + /** + * ------------------------------------------------------------------------ + * Data Api implementation + * ------------------------------------------------------------------------ + */ + + $(document).on(Event.CLICK_DATA_API, Selector.DATA_TOGGLE_CARROT, function (event) { + event.preventDefault(); + + var button = event.target; + + if (!$(button).hasClass(ClassName.BUTTON)) { + button = $(button).closest(Selector.BUTTON); + } + + Button._jQueryInterface.call($(button), 'toggle'); + }).on(Event.FOCUS_BLUR_DATA_API, Selector.DATA_TOGGLE_CARROT, function (event) { + var button = $(event.target).closest(Selector.BUTTON)[0]; + $(button).toggleClass(ClassName.FOCUS, /^focus(in)?$/.test(event.type)); + }); + + /** + * ------------------------------------------------------------------------ + * jQuery + * ------------------------------------------------------------------------ + */ + + $.fn[NAME] = Button._jQueryInterface; + $.fn[NAME].Constructor = Button; + $.fn[NAME].noConflict = function () { + $.fn[NAME] = JQUERY_NO_CONFLICT; + return Button._jQueryInterface; + }; + } + }, { + key: 'VERSION', + get: function get$$1() { + return VERSION; + } + }]); + return Button; +}(); + +if (!Util.nodeEnv()) { + $(document).ready(function () { + Button._init(); + }); +} + +export default Button; +//# sourceMappingURL=button.js.map diff --git a/js/dist/esm/button.js.map b/js/dist/esm/button.js.map new file mode 100644 index 000000000000..ff776fb5006e --- /dev/null +++ b/js/dist/esm/button.js.map @@ -0,0 +1 @@ +{"version":3,"file":"button.js","sources":["../../src/button.js"],"sourcesContent":["import $ from 'jquery'\nimport Util from './util'\n\n/**\n * --------------------------------------------------------------------------\n * Bootstrap (v4.0.0-alpha.6): button.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n * --------------------------------------------------------------------------\n */\n\n/**\n * ------------------------------------------------------------------------\n * Constants\n * ------------------------------------------------------------------------\n */\n\nconst NAME = 'button'\nconst VERSION = '4.0.0-alpha.6'\nconst DATA_KEY = 'bs.button'\nconst EVENT_KEY = `.${DATA_KEY}`\nconst DATA_API_KEY = '.data-api'\nconst JQUERY_NO_CONFLICT = $.fn[NAME]\n\nconst ClassName = {\n ACTIVE : 'active',\n BUTTON : 'btn',\n FOCUS : 'focus'\n}\n\nconst Selector = {\n DATA_TOGGLE_CARROT : '[data-toggle^=\"button\"]',\n DATA_TOGGLE : '[data-toggle=\"buttons\"]',\n INPUT : 'input',\n ACTIVE : '.active',\n BUTTON : '.btn'\n}\n\nconst Event = {\n CLICK_DATA_API : `click${EVENT_KEY}${DATA_API_KEY}`,\n FOCUS_BLUR_DATA_API : `focus${EVENT_KEY}${DATA_API_KEY} `\n + `blur${EVENT_KEY}${DATA_API_KEY}`\n}\n\n\n/**\n * ------------------------------------------------------------------------\n * Class Definition\n * ------------------------------------------------------------------------\n */\n\nexport default class Button {\n\n constructor(element) {\n this._element = element\n }\n\n\n // getters\n\n static get VERSION() {\n return VERSION\n }\n\n\n // public\n\n toggle() {\n let triggerChangeEvent = true\n let addAriaPressed = true\n const rootElement = $(this._element).closest(\n Selector.DATA_TOGGLE\n )[0]\n\n if (rootElement) {\n const input = $(this._element).find(Selector.INPUT)[0]\n\n if (input) {\n if (input.type === 'radio') {\n if (input.checked &&\n $(this._element).hasClass(ClassName.ACTIVE)) {\n triggerChangeEvent = false\n\n } else {\n const activeElement = $(rootElement).find(Selector.ACTIVE)[0]\n\n if (activeElement) {\n $(activeElement).removeClass(ClassName.ACTIVE)\n }\n }\n }\n\n if (triggerChangeEvent) {\n if (input.hasAttribute('disabled') ||\n rootElement.hasAttribute('disabled') ||\n input.classList.contains('disabled') ||\n rootElement.classList.contains('disabled')) {\n return\n }\n input.checked = !$(this._element).hasClass(ClassName.ACTIVE)\n $(input).trigger('change')\n }\n\n input.focus()\n addAriaPressed = false\n }\n\n }\n\n if (addAriaPressed) {\n this._element.setAttribute('aria-pressed',\n !$(this._element).hasClass(ClassName.ACTIVE))\n }\n\n if (triggerChangeEvent) {\n $(this._element).toggleClass(ClassName.ACTIVE)\n }\n }\n\n dispose() {\n $.removeData(this._element, DATA_KEY)\n this._element = null\n }\n\n\n // static\n\n static _jQueryInterface(config) {\n return this.each(function () {\n let data = $(this).data(DATA_KEY)\n\n if (!data) {\n data = new Button(this)\n $(this).data(DATA_KEY, data)\n }\n\n if (config === 'toggle') {\n data[config]()\n }\n })\n }\n\n static _init() {\n /**\n * ------------------------------------------------------------------------\n * Data Api implementation\n * ------------------------------------------------------------------------\n */\n\n $(document)\n .on(Event.CLICK_DATA_API, Selector.DATA_TOGGLE_CARROT, (event) => {\n event.preventDefault()\n\n let button = event.target\n\n if (!$(button).hasClass(ClassName.BUTTON)) {\n button = $(button).closest(Selector.BUTTON)\n }\n\n Button._jQueryInterface.call($(button), 'toggle')\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(ClassName.FOCUS, /^focus(in)?$/.test(event.type))\n })\n\n /**\n * ------------------------------------------------------------------------\n * jQuery\n * ------------------------------------------------------------------------\n */\n\n $.fn[NAME] = Button._jQueryInterface\n $.fn[NAME].Constructor = Button\n $.fn[NAME].noConflict = function () {\n $.fn[NAME] = JQUERY_NO_CONFLICT\n return Button._jQueryInterface\n }\n }\n}\n\nif (!Util.nodeEnv()) {\n $(document).ready(() => {\n Button._init()\n })\n}\n"],"names":["NAME","VERSION","DATA_KEY","EVENT_KEY","DATA_API_KEY","JQUERY_NO_CONFLICT","$","fn","ClassName","Selector","Event","Button","element","_element","triggerChangeEvent","addAriaPressed","rootElement","closest","DATA_TOGGLE","input","find","INPUT","type","checked","hasClass","ACTIVE","activeElement","removeClass","hasAttribute","classList","contains","trigger","focus","setAttribute","toggleClass","removeData","config","each","data","document","on","CLICK_DATA_API","DATA_TOGGLE_CARROT","event","preventDefault","button","target","BUTTON","_jQueryInterface","call","FOCUS_BLUR_DATA_API","FOCUS","test","Constructor","noConflict","Util","nodeEnv","ready","_init"],"mappings":"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"} \ No newline at end of file diff --git a/js/dist/esm/carousel.js b/js/dist/esm/carousel.js new file mode 100644 index 000000000000..94250f7ef2c9 --- /dev/null +++ b/js/dist/esm/carousel.js @@ -0,0 +1,576 @@ +import $ from 'jquery'; +import Util from './util.js'; + +var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol" ? function (obj) { + return typeof obj; +} : function (obj) { + return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; +}; + + + + + + + + + + + +var classCallCheck = function (instance, Constructor) { + if (!(instance instanceof Constructor)) { + throw new TypeError("Cannot call a class as a function"); + } +}; + +var createClass = function () { + function defineProperties(target, props) { + for (var i = 0; i < props.length; i++) { + var descriptor = props[i]; + descriptor.enumerable = descriptor.enumerable || false; + descriptor.configurable = true; + if ("value" in descriptor) descriptor.writable = true; + Object.defineProperty(target, descriptor.key, descriptor); + } + } + + return function (Constructor, protoProps, staticProps) { + if (protoProps) defineProperties(Constructor.prototype, protoProps); + if (staticProps) defineProperties(Constructor, staticProps); + return Constructor; + }; +}(); + +/** + * -------------------------------------------------------------------------- + * Bootstrap (v4.0.0-alpha.6): carousel.js + * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) + * -------------------------------------------------------------------------- + */ + +/** + * ------------------------------------------------------------------------ + * Constants + * ------------------------------------------------------------------------ + */ + +var NAME = 'carousel'; +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; +var ARROW_LEFT_KEYCODE = 37; // KeyboardEvent.which value for left arrow key +var ARROW_RIGHT_KEYCODE = 39; // KeyboardEvent.which value for right arrow key +var TOUCHEVENT_COMPAT_WAIT = 500; // Time for mouse compat events to fire after touch + +var Default = { + interval: 5000, + keyboard: true, + slide: false, + pause: 'hover', + wrap: true +}; + +var DefaultType = { + interval: '(number|boolean)', + keyboard: 'boolean', + slide: '(boolean|string)', + pause: '(string|boolean)', + wrap: 'boolean' +}; + +var Direction = { + NEXT: 'next', + PREV: 'prev', + LEFT: 'left', + RIGHT: 'right' +}; + +var Event = { + SLIDE: 'slide' + EVENT_KEY, + SLID: 'slid' + EVENT_KEY, + KEYDOWN: 'keydown' + EVENT_KEY, + MOUSEENTER: 'mouseenter' + EVENT_KEY, + MOUSELEAVE: 'mouseleave' + EVENT_KEY, + TOUCHEND: 'touchend' + EVENT_KEY, + LOAD_DATA_API: 'load' + EVENT_KEY + DATA_API_KEY, + CLICK_DATA_API: 'click' + EVENT_KEY + DATA_API_KEY +}; + +var ClassName = { + CAROUSEL: 'carousel', + ACTIVE: 'active', + SLIDE: 'slide', + 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: '.carousel-item-next, .carousel-item-prev', + INDICATORS: '.carousel-indicators', + DATA_SLIDE: '[data-slide], [data-slide-to]', + DATA_RIDE: '[data-ride="carousel"]' + + /** + * ------------------------------------------------------------------------ + * Class Definition + * ------------------------------------------------------------------------ + */ + +}; +var Carousel = function () { + function Carousel(element, config) { + classCallCheck(this, Carousel); + + this._items = null; + this._interval = null; + this._activeElement = null; + + this._isPaused = false; + this._isSliding = false; + + this.touchTimeout = null; + + this._config = this._getConfig(config); + this._element = $(element)[0]; + this._indicatorsElement = $(this._element).find(Selector.INDICATORS)[0]; + + this._addEventListeners(); + } + + // getters + + createClass(Carousel, [{ + key: 'next', + + + // public + + value: function next() { + if (!this._isSliding) { + this._slide(Direction.NEXT); + } + } + }, { + key: 'nextWhenVisible', + value: function nextWhenVisible() { + // Don't call next when the page isn't visible + if (!document.hidden) { + this.next(); + } + } + }, { + key: 'prev', + value: function prev() { + if (!this._isSliding) { + this._slide(Direction.PREV); + } + } + }, { + key: 'pause', + value: function pause(event) { + if (!event) { + this._isPaused = true; + } + + if ($(this._element).find(Selector.NEXT_PREV)[0] && Util.supportsTransitionEnd()) { + Util.triggerTransitionEnd(this._element); + this.cycle(true); + } + + clearInterval(this._interval); + this._interval = null; + } + }, { + key: 'cycle', + value: function cycle(event) { + if (!event) { + this._isPaused = false; + } + + if (this._interval) { + clearInterval(this._interval); + this._interval = null; + } + + if (this._config.interval && !this._isPaused) { + this._interval = setInterval((document.visibilityState ? this.nextWhenVisible : this.next).bind(this), this._config.interval); + } + } + }, { + key: 'to', + value: function to(index) { + var _this = this; + + this._activeElement = $(this._element).find(Selector.ACTIVE_ITEM)[0]; + + var activeIndex = this._getItemIndex(this._activeElement); + + if (index > this._items.length - 1 || index < 0) { + return; + } + + if (this._isSliding) { + $(this._element).one(Event.SLID, function () { + return _this.to(index); + }); + return; + } + + if (activeIndex === index) { + this.pause(); + this.cycle(); + return; + } + + var direction = index > activeIndex ? Direction.NEXT : Direction.PREV; + + this._slide(direction, this._items[index]); + } + }, { + key: 'dispose', + value: function dispose() { + $(this._element).off(EVENT_KEY); + $.removeData(this._element, DATA_KEY); + + this._items = null; + this._config = null; + this._element = null; + this._interval = null; + this._isPaused = null; + this._isSliding = null; + this._activeElement = null; + this._indicatorsElement = null; + } + + // private + + }, { + key: '_getConfig', + value: function _getConfig(config) { + config = $.extend({}, Default, config); + Util.typeCheckConfig(NAME, config, DefaultType); + return config; + } + }, { + key: '_addEventListeners', + value: function _addEventListeners() { + var _this2 = this; + + if (this._config.keyboard) { + $(this._element).on(Event.KEYDOWN, function (event) { + return _this2._keydown(event); + }); + } + + if (this._config.pause === 'hover') { + $(this._element).on(Event.MOUSEENTER, function (event) { + return _this2.pause(event); + }).on(Event.MOUSELEAVE, function (event) { + return _this2.cycle(event); + }); + if ('ontouchstart' in document.documentElement) { + // if it's a touch-enabled device, mouseenter/leave are fired as + // part of the mouse compatibility events on first tap - the carousel + // would stop cycling until user tapped out of it; + // here, we listen for touchend, explicitly pause the carousel + // (as if it's the second time we tap on it, mouseenter compat event + // is NOT fired) and after a timeout (to allow for mouse compatibility + // events to fire) we explicitly restart cycling + $(this._element).on(Event.TOUCHEND, function () { + _this2.pause(); + if (_this2.touchTimeout) { + clearTimeout(_this2.touchTimeout); + } + _this2.touchTimeout = setTimeout(function (event) { + return _this2.cycle(event); + }, TOUCHEVENT_COMPAT_WAIT + _this2._config.interval); + }); + } + } + } + }, { + key: '_keydown', + value: function _keydown(event) { + 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; + } + } + }, { + key: '_getItemIndex', + value: function _getItemIndex(element) { + this._items = $.makeArray($(element).parent().find(Selector.ITEM)); + return this._items.indexOf(element); + } + }, { + key: '_getItemByDirection', + value: function _getItemByDirection(direction, activeElement) { + var isNextDirection = direction === Direction.NEXT; + var isPrevDirection = direction === Direction.PREV; + var activeIndex = this._getItemIndex(activeElement); + var lastItemIndex = this._items.length - 1; + var isGoingToWrap = isPrevDirection && activeIndex === 0 || isNextDirection && activeIndex === lastItemIndex; + + if (isGoingToWrap && !this._config.wrap) { + return activeElement; + } + + var delta = direction === Direction.PREV ? -1 : 1; + var itemIndex = (activeIndex + delta) % this._items.length; + + return itemIndex === -1 ? this._items[this._items.length - 1] : this._items[itemIndex]; + } + }, { + key: '_triggerSlideEvent', + value: function _triggerSlideEvent(relatedTarget, eventDirectionName) { + var targetIndex = this._getItemIndex(relatedTarget); + var fromIndex = this._getItemIndex($(this._element).find(Selector.ACTIVE_ITEM)[0]); + var slideEvent = $.Event(Event.SLIDE, { + relatedTarget: relatedTarget, + direction: eventDirectionName, + from: fromIndex, + to: targetIndex + }); + + $(this._element).trigger(slideEvent); + + return slideEvent; + } + }, { + key: '_setActiveIndicatorElement', + value: function _setActiveIndicatorElement(element) { + if (this._indicatorsElement) { + $(this._indicatorsElement).find(Selector.ACTIVE).removeClass(ClassName.ACTIVE); + + var nextIndicator = this._indicatorsElement.children[this._getItemIndex(element)]; + + if (nextIndicator) { + $(nextIndicator).addClass(ClassName.ACTIVE); + } + } + } + }, { + key: '_slide', + value: function _slide(direction, element) { + var _this3 = this; + + var activeElement = $(this._element).find(Selector.ACTIVE_ITEM)[0]; + var activeElementIndex = this._getItemIndex(activeElement); + var nextElement = element || activeElement && this._getItemByDirection(direction, activeElement); + var nextElementIndex = this._getItemIndex(nextElement); + var isCycling = Boolean(this._interval); + + 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, eventDirectionName); + if (slideEvent.isDefaultPrevented()) { + return; + } + + if (!activeElement || !nextElement) { + // some weirdness is happening, so we bail + return; + } + + this._isSliding = true; + + if (isCycling) { + this.pause(); + } + + this._setActiveIndicatorElement(nextElement); + + var slidEvent = $.Event(Event.SLID, { + relatedTarget: nextElement, + direction: eventDirectionName, + from: activeElementIndex, + to: nextElementIndex + }); + + if (Util.supportsTransitionEnd() && $(this._element).hasClass(ClassName.SLIDE)) { + + $(nextElement).addClass(orderClassName); + + Util.reflow(nextElement); + + $(activeElement).addClass(directionalClassName); + $(nextElement).addClass(directionalClassName); + + $(activeElement).one(Util.TRANSITION_END, function () { + $(nextElement).removeClass(directionalClassName + ' ' + orderClassName).addClass(ClassName.ACTIVE); + + $(activeElement).removeClass(ClassName.ACTIVE + ' ' + orderClassName + ' ' + directionalClassName); + + _this3._isSliding = false; + + setTimeout(function () { + return $(_this3._element).trigger(slidEvent); + }, 0); + }).emulateTransitionEnd(TRANSITION_DURATION); + } else { + $(activeElement).removeClass(ClassName.ACTIVE); + $(nextElement).addClass(ClassName.ACTIVE); + + this._isSliding = false; + $(this._element).trigger(slidEvent); + } + + if (isCycling) { + this.cycle(); + } + } + + // static + + }], [{ + key: '_jQueryInterface', + value: function _jQueryInterface(config) { + return this.each(function () { + var data = $(this).data(DATA_KEY); + var _config = $.extend({}, Default, $(this).data()); + + if ((typeof config === 'undefined' ? 'undefined' : _typeof(config)) === 'object') { + $.extend(_config, config); + } + + var action = typeof config === 'string' ? config : _config.slide; + + if (!data) { + data = new Carousel(this, _config); + $(this).data(DATA_KEY, data); + } + + if (typeof config === 'number') { + data.to(config); + } else if (typeof action === 'string') { + if (data[action] === undefined) { + throw new Error('No method named "' + action + '"'); + } + data[action](); + } else if (_config.interval) { + data.pause(); + data.cycle(); + } + }); + } + }, { + key: '_dataApiClickHandler', + value: function _dataApiClickHandler(event) { + var selector = Util.getSelectorFromElement(this); + + if (!selector) { + return; + } + + var target = $(selector)[0]; + + if (!target || !$(target).hasClass(ClassName.CAROUSEL)) { + return; + } + + var config = $.extend({}, $(target).data(), $(this).data()); + var slideIndex = this.getAttribute('data-slide-to'); + + if (slideIndex) { + config.interval = false; + } + + Carousel._jQueryInterface.call($(target), config); + + if (slideIndex) { + $(target).data(DATA_KEY).to(slideIndex); + } + + event.preventDefault(); + } + }, { + key: '_init', + value: function _init() { + /** + * ------------------------------------------------------------------------ + * Data Api implementation + * ------------------------------------------------------------------------ + */ + + $(document).on(Event.CLICK_DATA_API, Selector.DATA_SLIDE, Carousel._dataApiClickHandler); + + $(window).on(Event.LOAD_DATA_API, function () { + $(Selector.DATA_RIDE).each(function () { + var $carousel = $(this); + Carousel._jQueryInterface.call($carousel, $carousel.data()); + }); + }); + + /** + * ------------------------------------------------------------------------ + * jQuery + * ------------------------------------------------------------------------ + */ + + $.fn[NAME] = Carousel._jQueryInterface; + $.fn[NAME].Constructor = Carousel; + $.fn[NAME].noConflict = function () { + $.fn[NAME] = JQUERY_NO_CONFLICT; + return Carousel._jQueryInterface; + }; + } + }, { + key: 'VERSION', + get: function get$$1() { + return VERSION; + } + }, { + key: 'Default', + get: function get$$1() { + return Default; + } + }]); + return Carousel; +}(); + +if (!Util.nodeEnv()) { + $(document).ready(function () { + Carousel._init(); + }); +} + +export default Carousel; +//# sourceMappingURL=carousel.js.map diff --git a/js/dist/esm/carousel.js.map b/js/dist/esm/carousel.js.map new file mode 100644 index 000000000000..b5f7c6338a0c --- /dev/null +++ b/js/dist/esm/carousel.js.map @@ -0,0 +1 @@ +{"version":3,"file":"carousel.js","sources":["../../src/carousel.js"],"sourcesContent":["import $ from 'jquery'\nimport Util from './util'\n\n\n/**\n * --------------------------------------------------------------------------\n * Bootstrap (v4.0.0-alpha.6): carousel.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n * --------------------------------------------------------------------------\n */\n\n\n/**\n * ------------------------------------------------------------------------\n * Constants\n * ------------------------------------------------------------------------\n */\n\nconst NAME = 'carousel'\nconst VERSION = '4.0.0-alpha.6'\nconst DATA_KEY = 'bs.carousel'\nconst EVENT_KEY = `.${DATA_KEY}`\nconst DATA_API_KEY = '.data-api'\nconst JQUERY_NO_CONFLICT = $.fn[NAME]\nconst TRANSITION_DURATION = 600\nconst ARROW_LEFT_KEYCODE = 37 // KeyboardEvent.which value for left arrow key\nconst ARROW_RIGHT_KEYCODE = 39 // KeyboardEvent.which value for right arrow key\nconst TOUCHEVENT_COMPAT_WAIT = 500 // Time for mouse compat events to fire after touch\n\nconst Default = {\n interval : 5000,\n keyboard : true,\n slide : false,\n pause : 'hover',\n wrap : true\n}\n\nconst DefaultType = {\n interval : '(number|boolean)',\n keyboard : 'boolean',\n slide : '(boolean|string)',\n pause : '(string|boolean)',\n wrap : 'boolean'\n}\n\nconst Direction = {\n NEXT : 'next',\n PREV : 'prev',\n LEFT : 'left',\n RIGHT : 'right'\n}\n\nconst Event = {\n SLIDE : `slide${EVENT_KEY}`,\n SLID : `slid${EVENT_KEY}`,\n KEYDOWN : `keydown${EVENT_KEY}`,\n MOUSEENTER : `mouseenter${EVENT_KEY}`,\n MOUSELEAVE : `mouseleave${EVENT_KEY}`,\n TOUCHEND : `touchend${EVENT_KEY}`,\n LOAD_DATA_API : `load${EVENT_KEY}${DATA_API_KEY}`,\n CLICK_DATA_API : `click${EVENT_KEY}${DATA_API_KEY}`\n}\n\nconst ClassName = {\n CAROUSEL : 'carousel',\n ACTIVE : 'active',\n SLIDE : 'slide',\n RIGHT : 'carousel-item-right',\n LEFT : 'carousel-item-left',\n NEXT : 'carousel-item-next',\n PREV : 'carousel-item-prev',\n ITEM : 'carousel-item'\n}\n\nconst Selector = {\n ACTIVE : '.active',\n ACTIVE_ITEM : '.active.carousel-item',\n ITEM : '.carousel-item',\n NEXT_PREV : '.carousel-item-next, .carousel-item-prev',\n INDICATORS : '.carousel-indicators',\n DATA_SLIDE : '[data-slide], [data-slide-to]',\n DATA_RIDE : '[data-ride=\"carousel\"]'\n}\n\n\n/**\n * ------------------------------------------------------------------------\n * Class Definition\n * ------------------------------------------------------------------------\n */\n\nexport default class Carousel {\n\n constructor(element, config) {\n this._items = null\n this._interval = null\n this._activeElement = null\n\n this._isPaused = false\n this._isSliding = false\n\n this.touchTimeout = null\n\n this._config = this._getConfig(config)\n this._element = $(element)[0]\n this._indicatorsElement = $(this._element).find(Selector.INDICATORS)[0]\n\n this._addEventListeners()\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\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 if (!document.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).find(Selector.NEXT_PREV)[0] &&\n Util.supportsTransitionEnd()) {\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).find(Selector.ACTIVE_ITEM)[0]\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\n // private\n\n _getConfig(config) {\n config = $.extend({}, Default, config)\n Util.typeCheckConfig(NAME, config, DefaultType)\n return config\n }\n\n _addEventListeners() {\n if (this._config.keyboard) {\n $(this._element)\n .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 if ('ontouchstart' in document.documentElement) {\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 $(this._element).on(Event.TOUCHEND, () => {\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 }\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 return\n }\n }\n\n _getItemIndex(element) {\n this._items = $.makeArray($(element).parent().find(Selector.ITEM))\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\n _triggerSlideEvent(relatedTarget, eventDirectionName) {\n const targetIndex = this._getItemIndex(relatedTarget)\n const fromIndex = this._getItemIndex($(this._element).find(Selector.ACTIVE_ITEM)[0])\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 $(this._indicatorsElement)\n .find(Selector.ACTIVE)\n .removeClass(ClassName.ACTIVE)\n\n const nextIndicator = this._indicatorsElement.children[\n this._getItemIndex(element)\n ]\n\n if (nextIndicator) {\n $(nextIndicator).addClass(ClassName.ACTIVE)\n }\n }\n }\n\n _slide(direction, element) {\n const activeElement = $(this._element).find(Selector.ACTIVE_ITEM)[0]\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 = ClassName.LEFT\n orderClassName = ClassName.NEXT\n eventDirectionName = Direction.LEFT\n } else {\n directionalClassName = ClassName.RIGHT\n orderClassName = ClassName.PREV\n eventDirectionName = Direction.RIGHT\n }\n\n if (nextElement && $(nextElement).hasClass(ClassName.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 (Util.supportsTransitionEnd() &&\n $(this._element).hasClass(ClassName.SLIDE)) {\n\n $(nextElement).addClass(orderClassName)\n\n Util.reflow(nextElement)\n\n $(activeElement).addClass(directionalClassName)\n $(nextElement).addClass(directionalClassName)\n\n $(activeElement)\n .one(Util.TRANSITION_END, () => {\n $(nextElement)\n .removeClass(`${directionalClassName} ${orderClassName}`)\n .addClass(ClassName.ACTIVE)\n\n $(activeElement).removeClass(`${ClassName.ACTIVE} ${orderClassName} ${directionalClassName}`)\n\n this._isSliding = false\n\n setTimeout(() => $(this._element).trigger(slidEvent), 0)\n\n })\n .emulateTransitionEnd(TRANSITION_DURATION)\n\n } else {\n $(activeElement).removeClass(ClassName.ACTIVE)\n $(nextElement).addClass(ClassName.ACTIVE)\n\n this._isSliding = false\n $(this._element).trigger(slidEvent)\n }\n\n if (isCycling) {\n this.cycle()\n }\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 = $.extend({}, Default, $(this).data())\n\n if (typeof config === 'object') {\n $.extend(_config, config)\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 (data[action] === undefined) {\n throw new Error(`No method named \"${action}\"`)\n }\n data[action]()\n } else if (_config.interval) {\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(ClassName.CAROUSEL)) {\n return\n }\n\n const config = $.extend({}, $(target).data(), $(this).data())\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 static _init() {\n /**\n * ------------------------------------------------------------------------\n * Data Api implementation\n * ------------------------------------------------------------------------\n */\n\n $(document)\n .on(Event.CLICK_DATA_API, Selector.DATA_SLIDE, Carousel._dataApiClickHandler)\n\n $(window).on(Event.LOAD_DATA_API, () => {\n $(Selector.DATA_RIDE).each(function () {\n const $carousel = $(this)\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 = function () {\n $.fn[NAME] = JQUERY_NO_CONFLICT\n return Carousel._jQueryInterface\n }\n }\n}\n\nif (!Util.nodeEnv()) {\n $(document).ready(() => {\n Carousel._init()\n })\n}\n"],"names":["NAME","VERSION","DATA_KEY","EVENT_KEY","DATA_API_KEY","JQUERY_NO_CONFLICT","$","fn","TRANSITION_DURATION","ARROW_LEFT_KEYCODE","ARROW_RIGHT_KEYCODE","TOUCHEVENT_COMPAT_WAIT","Default","DefaultType","Direction","Event","ClassName","Selector","Carousel","element","config","_items","_interval","_activeElement","_isPaused","_isSliding","touchTimeout","_config","_getConfig","_element","_indicatorsElement","find","INDICATORS","_addEventListeners","_slide","NEXT","document","hidden","next","PREV","event","NEXT_PREV","Util","supportsTransitionEnd","triggerTransitionEnd","cycle","interval","setInterval","visibilityState","nextWhenVisible","bind","index","ACTIVE_ITEM","activeIndex","_getItemIndex","length","one","SLID","to","pause","direction","off","removeData","extend","typeCheckConfig","keyboard","on","KEYDOWN","_keydown","MOUSEENTER","MOUSELEAVE","documentElement","TOUCHEND","setTimeout","test","target","tagName","which","preventDefault","prev","makeArray","parent","ITEM","indexOf","activeElement","isNextDirection","isPrevDirection","lastItemIndex","isGoingToWrap","wrap","delta","itemIndex","relatedTarget","eventDirectionName","targetIndex","fromIndex","slideEvent","SLIDE","trigger","ACTIVE","removeClass","nextIndicator","children","addClass","activeElementIndex","nextElement","_getItemByDirection","nextElementIndex","isCycling","Boolean","directionalClassName","orderClassName","LEFT","RIGHT","hasClass","_triggerSlideEvent","isDefaultPrevented","_setActiveIndicatorElement","slidEvent","reflow","TRANSITION_END","emulateTransitionEnd","each","data","action","slide","undefined","Error","selector","getSelectorFromElement","CAROUSEL","slideIndex","getAttribute","_jQueryInterface","call","CLICK_DATA_API","DATA_SLIDE","_dataApiClickHandler","window","LOAD_DATA_API","DATA_RIDE","$carousel","Constructor","noConflict","nodeEnv","ready","_init"],"mappings":"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"} \ No newline at end of file diff --git a/js/dist/esm/collapse.js b/js/dist/esm/collapse.js new file mode 100644 index 000000000000..1d4d98dc6eb7 --- /dev/null +++ b/js/dist/esm/collapse.js @@ -0,0 +1,424 @@ +import $ from 'jquery'; +import Util from './util.js'; + +var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol" ? function (obj) { + return typeof obj; +} : function (obj) { + return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; +}; + + + + + + + + + + + +var classCallCheck = function (instance, Constructor) { + if (!(instance instanceof Constructor)) { + throw new TypeError("Cannot call a class as a function"); + } +}; + +var createClass = function () { + function defineProperties(target, props) { + for (var i = 0; i < props.length; i++) { + var descriptor = props[i]; + descriptor.enumerable = descriptor.enumerable || false; + descriptor.configurable = true; + if ("value" in descriptor) descriptor.writable = true; + Object.defineProperty(target, descriptor.key, descriptor); + } + } + + return function (Constructor, protoProps, staticProps) { + if (protoProps) defineProperties(Constructor.prototype, protoProps); + if (staticProps) defineProperties(Constructor, staticProps); + return Constructor; + }; +}(); + +/** + * -------------------------------------------------------------------------- + * Bootstrap (v4.0.0-alpha.6): collapse.js + * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) + * -------------------------------------------------------------------------- + */ + +/** + * ------------------------------------------------------------------------ + * Constants + * ------------------------------------------------------------------------ + */ + +var NAME = 'collapse'; +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; + +var Default = { + toggle: true, + parent: '' +}; + +var DefaultType = { + toggle: 'boolean', + parent: 'string' +}; + +var Event = { + SHOW: 'show' + EVENT_KEY, + SHOWN: 'shown' + EVENT_KEY, + HIDE: 'hide' + EVENT_KEY, + HIDDEN: 'hidden' + EVENT_KEY, + CLICK_DATA_API: 'click' + EVENT_KEY + DATA_API_KEY +}; + +var ClassName = { + SHOW: 'show', + COLLAPSE: 'collapse', + COLLAPSING: 'collapsing', + COLLAPSED: 'collapsed' +}; + +var Dimension = { + WIDTH: 'width', + HEIGHT: 'height' +}; + +var Selector = { + ACTIVES: '.show, .collapsing', + DATA_TOGGLE: '[data-toggle="collapse"]' + + /** + * ------------------------------------------------------------------------ + * Class Definition + * ------------------------------------------------------------------------ + */ + +}; +var Collapse = function () { + function Collapse(element, config) { + classCallCheck(this, Collapse); + + this._isTransitioning = false; + this._element = element; + this._config = this._getConfig(config); + this._triggerArray = $.makeArray($('[data-toggle="collapse"][href="#' + element.id + '"],' + ('[data-toggle="collapse"][data-target="#' + element.id + '"]'))); + var tabToggles = $(Selector.DATA_TOGGLE); + for (var i = 0; i < tabToggles.length; i++) { + var elem = tabToggles[i]; + var selector = Util.getSelectorFromElement(elem); + if (selector !== null && $(selector).filter(element).length > 0) { + this._triggerArray.push(elem); + } + } + + this._parent = this._config.parent ? this._getParent() : null; + + if (!this._config.parent) { + this._addAriaAndCollapsedClass(this._element, this._triggerArray); + } + + if (this._config.toggle) { + this.toggle(); + } + } + + // getters + + createClass(Collapse, [{ + key: 'toggle', + + + // public + + value: function toggle() { + if ($(this._element).hasClass(ClassName.SHOW)) { + this.hide(); + } else { + this.show(); + } + } + }, { + key: 'show', + value: function show() { + var _this = this; + + if (this._isTransitioning || $(this._element).hasClass(ClassName.SHOW)) { + return; + } + + var actives = void 0; + var activesData = void 0; + + if (this._parent) { + actives = $.makeArray($(this._parent).children().children(Selector.ACTIVES)); + if (!actives.length) { + actives = null; + } + } + + if (actives) { + activesData = $(actives).data(DATA_KEY); + if (activesData && activesData._isTransitioning) { + return; + } + } + + var startEvent = $.Event(Event.SHOW); + $(this._element).trigger(startEvent); + if (startEvent.isDefaultPrevented()) { + return; + } + + if (actives) { + Collapse._jQueryInterface.call($(actives), 'hide'); + if (!activesData) { + $(actives).data(DATA_KEY, null); + } + } + + var dimension = this._getDimension(); + + $(this._element).removeClass(ClassName.COLLAPSE).addClass(ClassName.COLLAPSING); + + this._element.style[dimension] = 0; + + if (this._triggerArray.length) { + $(this._triggerArray).removeClass(ClassName.COLLAPSED).attr('aria-expanded', true); + } + + this.setTransitioning(true); + + var complete = function complete() { + $(_this._element).removeClass(ClassName.COLLAPSING).addClass(ClassName.COLLAPSE).addClass(ClassName.SHOW); + + _this._element.style[dimension] = ''; + + _this.setTransitioning(false); + + $(_this._element).trigger(Event.SHOWN); + }; + + if (!Util.supportsTransitionEnd()) { + complete(); + return; + } + + var capitalizedDimension = dimension[0].toUpperCase() + dimension.slice(1); + var scrollSize = 'scroll' + capitalizedDimension; + + $(this._element).one(Util.TRANSITION_END, complete).emulateTransitionEnd(TRANSITION_DURATION); + + this._element.style[dimension] = this._element[scrollSize] + 'px'; + } + }, { + key: 'hide', + value: function hide() { + var _this2 = this; + + if (this._isTransitioning || !$(this._element).hasClass(ClassName.SHOW)) { + return; + } + + var startEvent = $.Event(Event.HIDE); + $(this._element).trigger(startEvent); + if (startEvent.isDefaultPrevented()) { + return; + } + + var dimension = this._getDimension(); + + this._element.style[dimension] = this._element.getBoundingClientRect()[dimension] + 'px'; + + Util.reflow(this._element); + + $(this._element).addClass(ClassName.COLLAPSING).removeClass(ClassName.COLLAPSE).removeClass(ClassName.SHOW); + + if (this._triggerArray.length) { + for (var i = 0; i < this._triggerArray.length; i++) { + var trigger = this._triggerArray[i]; + var selector = Util.getSelectorFromElement(trigger); + if (selector !== null) { + var $elem = $(selector); + if (!$elem.hasClass(ClassName.SHOW)) { + $(trigger).addClass(ClassName.COLLAPSED).attr('aria-expanded', false); + } + } + } + } + + this.setTransitioning(true); + + var complete = function complete() { + _this2.setTransitioning(false); + $(_this2._element).removeClass(ClassName.COLLAPSING).addClass(ClassName.COLLAPSE).trigger(Event.HIDDEN); + }; + + this._element.style[dimension] = ''; + + if (!Util.supportsTransitionEnd()) { + complete(); + return; + } + + $(this._element).one(Util.TRANSITION_END, complete).emulateTransitionEnd(TRANSITION_DURATION); + } + }, { + key: 'setTransitioning', + value: function setTransitioning(isTransitioning) { + this._isTransitioning = isTransitioning; + } + }, { + key: 'dispose', + value: function dispose() { + $.removeData(this._element, DATA_KEY); + + this._config = null; + this._parent = null; + this._element = null; + this._triggerArray = null; + this._isTransitioning = null; + } + + // private + + }, { + key: '_getConfig', + value: function _getConfig(config) { + config = $.extend({}, Default, config); + config.toggle = Boolean(config.toggle); // coerce string values + Util.typeCheckConfig(NAME, config, DefaultType); + return config; + } + }, { + key: '_getDimension', + value: function _getDimension() { + var hasWidth = $(this._element).hasClass(Dimension.WIDTH); + return hasWidth ? Dimension.WIDTH : Dimension.HEIGHT; + } + }, { + key: '_getParent', + value: function _getParent() { + var _this3 = this; + + var parent = $(this._config.parent)[0]; + var selector = '[data-toggle="collapse"][data-parent="' + this._config.parent + '"]'; + + $(parent).find(selector).each(function (i, element) { + _this3._addAriaAndCollapsedClass(Collapse._getTargetFromElement(element), [element]); + }); + + return parent; + } + }, { + key: '_addAriaAndCollapsedClass', + value: function _addAriaAndCollapsedClass(element, triggerArray) { + if (element) { + var isOpen = $(element).hasClass(ClassName.SHOW); + + if (triggerArray.length) { + $(triggerArray).toggleClass(ClassName.COLLAPSED, !isOpen).attr('aria-expanded', isOpen); + } + } + } + + // static + + }], [{ + key: '_getTargetFromElement', + value: function _getTargetFromElement(element) { + var selector = Util.getSelectorFromElement(element); + return selector ? $(selector)[0] : null; + } + }, { + key: '_jQueryInterface', + value: function _jQueryInterface(config) { + return this.each(function () { + var $this = $(this); + var data = $this.data(DATA_KEY); + var _config = $.extend({}, Default, $this.data(), (typeof config === 'undefined' ? 'undefined' : _typeof(config)) === 'object' && config); + + if (!data && _config.toggle && /show|hide/.test(config)) { + _config.toggle = false; + } + + if (!data) { + data = new Collapse(this, _config); + $this.data(DATA_KEY, data); + } + + if (typeof config === 'string') { + if (data[config] === undefined) { + throw new Error('No method named "' + config + '"'); + } + data[config](); + } + }); + } + }, { + key: '_init', + value: function _init() { + /** + * ------------------------------------------------------------------------ + * Data Api implementation + * ------------------------------------------------------------------------ + */ + + $(document).on(Event.CLICK_DATA_API, Selector.DATA_TOGGLE, function (event) { + if (!/input|textarea/i.test(event.target.tagName)) { + event.preventDefault(); + } + + var $trigger = $(this); + var selector = Util.getSelectorFromElement(this); + $(selector).each(function () { + var $target = $(this); + var data = $target.data(DATA_KEY); + var config = data ? 'toggle' : $trigger.data(); + Collapse._jQueryInterface.call($target, config); + }); + }); + + /** + * ------------------------------------------------------------------------ + * jQuery + * ------------------------------------------------------------------------ + */ + + $.fn[NAME] = Collapse._jQueryInterface; + $.fn[NAME].Constructor = Collapse; + $.fn[NAME].noConflict = function () { + $.fn[NAME] = JQUERY_NO_CONFLICT; + return Collapse._jQueryInterface; + }; + } + }, { + key: 'VERSION', + get: function get$$1() { + return VERSION; + } + }, { + key: 'Default', + get: function get$$1() { + return Default; + } + }]); + return Collapse; +}(); + +if (!Util.nodeEnv()) { + $(document).ready(function () { + Collapse._init(); + }); +} + +export default Collapse; +//# sourceMappingURL=collapse.js.map diff --git a/js/dist/esm/collapse.js.map b/js/dist/esm/collapse.js.map new file mode 100644 index 000000000000..ec895c6ed1c4 --- /dev/null +++ b/js/dist/esm/collapse.js.map @@ -0,0 +1 @@ +{"version":3,"file":"collapse.js","sources":["../../src/collapse.js"],"sourcesContent":["import $ from 'jquery'\nimport Util from './util'\n\n\n/**\n * --------------------------------------------------------------------------\n * Bootstrap (v4.0.0-alpha.6): collapse.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n * --------------------------------------------------------------------------\n */\n\n\n/**\n * ------------------------------------------------------------------------\n * Constants\n * ------------------------------------------------------------------------\n */\n\nconst NAME = 'collapse'\nconst VERSION = '4.0.0-alpha.6'\nconst DATA_KEY = 'bs.collapse'\nconst EVENT_KEY = `.${DATA_KEY}`\nconst DATA_API_KEY = '.data-api'\nconst JQUERY_NO_CONFLICT = $.fn[NAME]\nconst TRANSITION_DURATION = 600\n\nconst Default = {\n toggle : true,\n parent : ''\n}\n\nconst DefaultType = {\n toggle : 'boolean',\n parent : 'string'\n}\n\nconst Event = {\n SHOW : `show${EVENT_KEY}`,\n SHOWN : `shown${EVENT_KEY}`,\n HIDE : `hide${EVENT_KEY}`,\n HIDDEN : `hidden${EVENT_KEY}`,\n CLICK_DATA_API : `click${EVENT_KEY}${DATA_API_KEY}`\n}\n\nconst ClassName = {\n SHOW : 'show',\n COLLAPSE : 'collapse',\n COLLAPSING : 'collapsing',\n COLLAPSED : 'collapsed'\n}\n\nconst Dimension = {\n WIDTH : 'width',\n HEIGHT : 'height'\n}\n\nconst Selector = {\n ACTIVES : '.show, .collapsing',\n DATA_TOGGLE : '[data-toggle=\"collapse\"]'\n}\n\n\n/**\n * ------------------------------------------------------------------------\n * Class Definition\n * ------------------------------------------------------------------------\n */\n\nexport default class Collapse {\n\n constructor(element, config) {\n this._isTransitioning = false\n this._element = element\n this._config = this._getConfig(config)\n this._triggerArray = $.makeArray($(\n `[data-toggle=\"collapse\"][href=\"#${element.id}\"],` +\n `[data-toggle=\"collapse\"][data-target=\"#${element.id}\"]`\n ))\n const tabToggles = $(Selector.DATA_TOGGLE)\n for (let i = 0; i < tabToggles.length; i++) {\n const elem = tabToggles[i]\n const selector = Util.getSelectorFromElement(elem)\n if (selector !== null && $(selector).filter(element).length > 0) {\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\n // getters\n\n static get VERSION() {\n return VERSION\n }\n\n static get Default() {\n return Default\n }\n\n\n // public\n\n toggle() {\n if ($(this._element).hasClass(ClassName.SHOW)) {\n this.hide()\n } else {\n this.show()\n }\n }\n\n show() {\n if (this._isTransitioning ||\n $(this._element).hasClass(ClassName.SHOW)) {\n return\n }\n\n let actives\n let activesData\n\n if (this._parent) {\n actives = $.makeArray($(this._parent).children().children(Selector.ACTIVES))\n if (!actives.length) {\n actives = null\n }\n }\n\n if (actives) {\n activesData = $(actives).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), 'hide')\n if (!activesData) {\n $(actives).data(DATA_KEY, null)\n }\n }\n\n const dimension = this._getDimension()\n\n $(this._element)\n .removeClass(ClassName.COLLAPSE)\n .addClass(ClassName.COLLAPSING)\n\n this._element.style[dimension] = 0\n\n if (this._triggerArray.length) {\n $(this._triggerArray)\n .removeClass(ClassName.COLLAPSED)\n .attr('aria-expanded', true)\n }\n\n this.setTransitioning(true)\n\n const complete = () => {\n $(this._element)\n .removeClass(ClassName.COLLAPSING)\n .addClass(ClassName.COLLAPSE)\n .addClass(ClassName.SHOW)\n\n this._element.style[dimension] = ''\n\n this.setTransitioning(false)\n\n $(this._element).trigger(Event.SHOWN)\n }\n\n if (!Util.supportsTransitionEnd()) {\n complete()\n return\n }\n\n const capitalizedDimension = dimension[0].toUpperCase() + dimension.slice(1)\n const scrollSize = `scroll${capitalizedDimension}`\n\n $(this._element)\n .one(Util.TRANSITION_END, complete)\n .emulateTransitionEnd(TRANSITION_DURATION)\n\n this._element.style[dimension] = `${this._element[scrollSize]}px`\n }\n\n hide() {\n if (this._isTransitioning ||\n !$(this._element).hasClass(ClassName.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(ClassName.COLLAPSING)\n .removeClass(ClassName.COLLAPSE)\n .removeClass(ClassName.SHOW)\n\n if (this._triggerArray.length) {\n for (let i = 0; i < this._triggerArray.length; i++) {\n const trigger = this._triggerArray[i]\n const selector = Util.getSelectorFromElement(trigger)\n if (selector !== null) {\n const $elem = $(selector)\n if (!$elem.hasClass(ClassName.SHOW)) {\n $(trigger).addClass(ClassName.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(ClassName.COLLAPSING)\n .addClass(ClassName.COLLAPSE)\n .trigger(Event.HIDDEN)\n }\n\n this._element.style[dimension] = ''\n\n if (!Util.supportsTransitionEnd()) {\n complete()\n return\n }\n\n $(this._element)\n .one(Util.TRANSITION_END, complete)\n .emulateTransitionEnd(TRANSITION_DURATION)\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\n // private\n\n _getConfig(config) {\n config = $.extend({}, Default, config)\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 const parent = $(this._config.parent)[0]\n const selector =\n `[data-toggle=\"collapse\"][data-parent=\"${this._config.parent}\"]`\n\n $(parent).find(selector).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 if (element) {\n const isOpen = $(element).hasClass(ClassName.SHOW)\n\n if (triggerArray.length) {\n $(triggerArray)\n .toggleClass(ClassName.COLLAPSED, !isOpen)\n .attr('aria-expanded', isOpen)\n }\n }\n }\n\n\n // static\n\n static _getTargetFromElement(element) {\n const selector = Util.getSelectorFromElement(element)\n return selector ? $(selector)[0] : 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 = $.extend(\n {},\n Default,\n $this.data(),\n typeof config === 'object' && config\n )\n\n if (!data && _config.toggle && /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 (data[config] === undefined) {\n throw new Error(`No method named \"${config}\"`)\n }\n data[config]()\n }\n })\n }\n\n static _init() {\n /**\n * ------------------------------------------------------------------------\n * Data Api implementation\n * ------------------------------------------------------------------------\n */\n\n $(document).on(Event.CLICK_DATA_API, Selector.DATA_TOGGLE, function (event) {\n if (!/input|textarea/i.test(event.target.tagName)) {\n event.preventDefault()\n }\n\n const $trigger = $(this)\n const selector = Util.getSelectorFromElement(this)\n $(selector).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 = function () {\n $.fn[NAME] = JQUERY_NO_CONFLICT\n return Collapse._jQueryInterface\n }\n }\n}\n\nif (!Util.nodeEnv()) {\n $(document).ready(() => {\n Collapse._init()\n })\n}\n"],"names":["NAME","VERSION","DATA_KEY","EVENT_KEY","DATA_API_KEY","JQUERY_NO_CONFLICT","$","fn","TRANSITION_DURATION","Default","DefaultType","Event","ClassName","Dimension","Selector","Collapse","element","config","_isTransitioning","_element","_config","_getConfig","_triggerArray","makeArray","id","tabToggles","DATA_TOGGLE","i","length","elem","selector","Util","getSelectorFromElement","filter","push","_parent","parent","_getParent","_addAriaAndCollapsedClass","toggle","hasClass","SHOW","hide","show","actives","activesData","children","ACTIVES","data","startEvent","trigger","isDefaultPrevented","_jQueryInterface","call","dimension","_getDimension","removeClass","COLLAPSE","addClass","COLLAPSING","style","COLLAPSED","attr","setTransitioning","complete","SHOWN","supportsTransitionEnd","capitalizedDimension","toUpperCase","slice","scrollSize","one","TRANSITION_END","emulateTransitionEnd","HIDE","getBoundingClientRect","reflow","$elem","HIDDEN","isTransitioning","removeData","extend","Boolean","typeCheckConfig","hasWidth","WIDTH","HEIGHT","find","each","_getTargetFromElement","triggerArray","isOpen","toggleClass","$this","test","undefined","Error","document","on","CLICK_DATA_API","event","target","tagName","preventDefault","$trigger","$target","Constructor","noConflict","nodeEnv","ready","_init"],"mappings":"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"} \ No newline at end of file diff --git a/js/dist/esm/dropdown.js b/js/dist/esm/dropdown.js new file mode 100644 index 000000000000..80e6ec632c3c --- /dev/null +++ b/js/dist/esm/dropdown.js @@ -0,0 +1,484 @@ +import $ from 'jquery'; +import Popper from 'popper.js'; +import Util from './util.js'; + +var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol" ? function (obj) { + return typeof obj; +} : function (obj) { + return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; +}; + + + + + + + + + + + +var classCallCheck = function (instance, Constructor) { + if (!(instance instanceof Constructor)) { + throw new TypeError("Cannot call a class as a function"); + } +}; + +var createClass = function () { + function defineProperties(target, props) { + for (var i = 0; i < props.length; i++) { + var descriptor = props[i]; + descriptor.enumerable = descriptor.enumerable || false; + descriptor.configurable = true; + if ("value" in descriptor) descriptor.writable = true; + Object.defineProperty(target, descriptor.key, descriptor); + } + } + + return function (Constructor, protoProps, staticProps) { + if (protoProps) defineProperties(Constructor.prototype, protoProps); + if (staticProps) defineProperties(Constructor, staticProps); + return Constructor; + }; +}(); + +/** + * -------------------------------------------------------------------------- + * Bootstrap (v4.0.0-alpha.6): dropdown.js + * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) + * -------------------------------------------------------------------------- + */ + +/** + * ------------------------------------------------------------------------ + * Constants + * ------------------------------------------------------------------------ + */ + +var NAME = 'dropdown'; +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 +var SPACE_KEYCODE = 32; // KeyboardEvent.which value for space key +var TAB_KEYCODE = 9; // KeyboardEvent.which value for tab key +var ARROW_UP_KEYCODE = 38; // KeyboardEvent.which value for up arrow key +var ARROW_DOWN_KEYCODE = 40; // KeyboardEvent.which value for down arrow key +var RIGHT_MOUSE_BUTTON_WHICH = 3; // MouseEvent.which value for the right button (assuming a right-handed mouse) +var REGEXP_KEYDOWN = new RegExp(ARROW_UP_KEYCODE + '|' + ARROW_DOWN_KEYCODE + '|' + ESCAPE_KEYCODE); + +var Event = { + HIDE: 'hide' + EVENT_KEY, + 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, + KEYDOWN_DATA_API: 'keydown' + EVENT_KEY + DATA_API_KEY, + KEYUP_DATA_API: 'keyup' + EVENT_KEY + DATA_API_KEY +}; + +var ClassName = { + DISABLED: 'disabled', + SHOW: 'show', + DROPUP: 'dropup', + MENURIGHT: 'dropdown-menu-right', + MENULEFT: 'dropdown-menu-left' +}; + +var Selector = { + DATA_TOGGLE: '[data-toggle="dropdown"]', + FORM_CHILD: '.dropdown form', + MENU: '.dropdown-menu', + NAVBAR_NAV: '.navbar-nav', + VISIBLE_ITEMS: '.dropdown-menu .dropdown-item:not(.disabled)' +}; + +var AttachmentMap = { + TOP: 'top-start', + TOPEND: 'top-end', + BOTTOM: 'bottom-start', + BOTTOMEND: 'bottom-end' +}; + +var Default = { + placement: AttachmentMap.BOTTOM, + offset: 0, + flip: true +}; + +var DefaultType = { + placement: 'string', + offset: '(number|string)', + flip: 'boolean' + + /** + * ------------------------------------------------------------------------ + * Class Definition + * ------------------------------------------------------------------------ + */ + +}; +var Dropdown = function () { + function Dropdown(element, config) { + classCallCheck(this, Dropdown); + + this._element = element; + this._popper = null; + this._config = this._getConfig(config); + this._menu = this._getMenuElement(); + this._inNavbar = this._detectNavbar(); + + this._addEventListeners(); + } + + // getters + + createClass(Dropdown, [{ + key: 'toggle', + + + // public + + value: function toggle() { + if (this._element.disabled || $(this._element).hasClass(ClassName.DISABLED)) { + return; + } + + var parent = Dropdown._getParentFromElement(this._element); + var isActive = $(this._menu).hasClass(ClassName.SHOW); + + Dropdown._clearMenus(); + + if (isActive) { + return; + } + + var relatedTarget = { + relatedTarget: this._element + }; + var showEvent = $.Event(Event.SHOW, relatedTarget); + + $(parent).trigger(showEvent); + + if (showEvent.isDefaultPrevented()) { + return; + } + + var element = this._element; + // for dropup with alignment we use the parent as popper container + if ($(parent).hasClass(ClassName.DROPUP)) { + if ($(this._menu).hasClass(ClassName.MENULEFT) || $(this._menu).hasClass(ClassName.MENURIGHT)) { + element = parent; + } + } + this._popper = new Popper(element, this._menu, this._getPopperConfig()); + + // if this is a touch-enabled device we add extra + // empty mouseover listeners to the body's immediate children; + // only needed because of broken event delegation on iOS + // https://www.quirksmode.org/blog/archives/2014/02/mouse_event_bub.html + if ('ontouchstart' in document.documentElement && !$(parent).closest(Selector.NAVBAR_NAV).length) { + $('body').children().on('mouseover', null, $.noop); + } + + this._element.focus(); + this._element.setAttribute('aria-expanded', true); + + $(this._menu).toggleClass(ClassName.SHOW); + $(parent).toggleClass(ClassName.SHOW).trigger($.Event(Event.SHOWN, relatedTarget)); + } + }, { + key: 'dispose', + value: function dispose() { + $.removeData(this._element, DATA_KEY); + $(this._element).off(EVENT_KEY); + this._element = null; + this._menu = null; + if (this._popper !== null) { + this._popper.destroy(); + } + this._popper = null; + } + }, { + key: 'update', + value: function update() { + this._inNavbar = this._detectNavbar(); + if (this._popper !== null) { + this._popper.scheduleUpdate(); + } + } + + // private + + }, { + key: '_addEventListeners', + value: function _addEventListeners() { + var _this = this; + + $(this._element).on(Event.CLICK, function (event) { + event.preventDefault(); + event.stopPropagation(); + _this.toggle(); + }); + } + }, { + key: '_getConfig', + value: function _getConfig(config) { + var elementData = $(this._element).data(); + if (elementData.placement !== undefined) { + elementData.placement = AttachmentMap[elementData.placement.toUpperCase()]; + } + + config = $.extend({}, this.constructor.Default, $(this._element).data(), config); + + Util.typeCheckConfig(NAME, config, this.constructor.DefaultType); + + return config; + } + }, { + key: '_getMenuElement', + value: function _getMenuElement() { + if (!this._menu) { + var parent = Dropdown._getParentFromElement(this._element); + this._menu = $(parent).find(Selector.MENU)[0]; + } + return this._menu; + } + }, { + key: '_getPlacement', + value: function _getPlacement() { + var $parentDropdown = $(this._element).parent(); + var placement = this._config.placement; + + // Handle dropup + if ($parentDropdown.hasClass(ClassName.DROPUP) || this._config.placement === AttachmentMap.TOP) { + placement = AttachmentMap.TOP; + if ($(this._menu).hasClass(ClassName.MENURIGHT)) { + placement = AttachmentMap.TOPEND; + } + } else if ($(this._menu).hasClass(ClassName.MENURIGHT)) { + placement = AttachmentMap.BOTTOMEND; + } + return placement; + } + }, { + key: '_detectNavbar', + value: function _detectNavbar() { + return $(this._element).closest('.navbar').length > 0; + } + }, { + key: '_getPopperConfig', + value: function _getPopperConfig() { + var popperConfig = { + placement: this._getPlacement(), + modifiers: { + offset: { + offset: this._config.offset + }, + flip: { + enabled: this._config.flip + } + } + + // Disable Popper.js for Dropdown in Navbar + };if (this._inNavbar) { + popperConfig.modifiers.applyStyle = { + enabled: !this._inNavbar + }; + } + + return popperConfig; + } + + // static + + }], [{ + key: '_jQueryInterface', + value: function _jQueryInterface(config) { + return this.each(function () { + var data = $(this).data(DATA_KEY); + var _config = (typeof config === 'undefined' ? 'undefined' : _typeof(config)) === 'object' ? config : null; + + if (!data) { + data = new Dropdown(this, _config); + $(this).data(DATA_KEY, data); + } + + if (typeof config === 'string') { + if (data[config] === undefined) { + throw new Error('No method named "' + config + '"'); + } + data[config](); + } + }); + } + }, { + key: '_clearMenus', + value: function _clearMenus(event) { + if (event && (event.which === RIGHT_MOUSE_BUTTON_WHICH || event.type === 'keyup' && event.which !== TAB_KEYCODE)) { + return; + } + + var toggles = $.makeArray($(Selector.DATA_TOGGLE)); + for (var i = 0; i < toggles.length; i++) { + var parent = Dropdown._getParentFromElement(toggles[i]); + var context = $(toggles[i]).data(DATA_KEY); + var relatedTarget = { + relatedTarget: toggles[i] + }; + + if (!context) { + continue; + } + + var dropdownMenu = context._menu; + if (!$(parent).hasClass(ClassName.SHOW)) { + continue; + } + + if (event && (event.type === 'click' && /input|textarea/i.test(event.target.tagName) || event.type === 'keyup' && event.which === TAB_KEYCODE) && $.contains(parent, event.target)) { + continue; + } + + var hideEvent = $.Event(Event.HIDE, relatedTarget); + $(parent).trigger(hideEvent); + if (hideEvent.isDefaultPrevented()) { + continue; + } + + // if this is a touch-enabled device we remove the extra + // empty mouseover listeners we added for iOS support + if ('ontouchstart' in document.documentElement) { + $('body').children().off('mouseover', null, $.noop); + } + + toggles[i].setAttribute('aria-expanded', 'false'); + + $(dropdownMenu).removeClass(ClassName.SHOW); + $(parent).removeClass(ClassName.SHOW).trigger($.Event(Event.HIDDEN, relatedTarget)); + } + } + }, { + key: '_getParentFromElement', + value: function _getParentFromElement(element) { + var parent = void 0; + var selector = Util.getSelectorFromElement(element); + + if (selector) { + parent = $(selector)[0]; + } + + return parent || element.parentNode; + } + }, { + key: '_dataApiKeydownHandler', + value: function _dataApiKeydownHandler(event) { + if (!REGEXP_KEYDOWN.test(event.which) || /button/i.test(event.target.tagName) && event.which === SPACE_KEYCODE || /input|textarea/i.test(event.target.tagName)) { + return; + } + + event.preventDefault(); + event.stopPropagation(); + + if (this.disabled || $(this).hasClass(ClassName.DISABLED)) { + return; + } + + var parent = Dropdown._getParentFromElement(this); + var isActive = $(parent).hasClass(ClassName.SHOW); + + if (!isActive && (event.which !== ESCAPE_KEYCODE || event.which !== SPACE_KEYCODE) || isActive && (event.which === ESCAPE_KEYCODE || event.which === SPACE_KEYCODE)) { + + if (event.which === ESCAPE_KEYCODE) { + var toggle = $(parent).find(Selector.DATA_TOGGLE)[0]; + $(toggle).trigger('focus'); + } + + $(this).trigger('click'); + return; + } + + var items = $(parent).find(Selector.VISIBLE_ITEMS).get(); + + if (!items.length) { + return; + } + + var index = items.indexOf(event.target); + + if (event.which === ARROW_UP_KEYCODE && index > 0) { + // up + index--; + } + + if (event.which === ARROW_DOWN_KEYCODE && index < items.length - 1) { + // down + index++; + } + + if (index < 0) { + index = 0; + } + + items[index].focus(); + } + }, { + key: '_init', + value: function _init() { + /** + * ------------------------------------------------------------------------ + * Data Api implementation + * ------------------------------------------------------------------------ + */ + + $(document).on(Event.KEYDOWN_DATA_API, Selector.DATA_TOGGLE, Dropdown._dataApiKeydownHandler).on(Event.KEYDOWN_DATA_API, Selector.MENU, Dropdown._dataApiKeydownHandler).on(Event.CLICK_DATA_API + ' ' + Event.KEYUP_DATA_API, Dropdown._clearMenus).on(Event.CLICK_DATA_API, Selector.DATA_TOGGLE, function (event) { + event.preventDefault(); + event.stopPropagation(); + Dropdown._jQueryInterface.call($(this), 'toggle'); + }).on(Event.CLICK_DATA_API, Selector.FORM_CHILD, function (e) { + e.stopPropagation(); + }); + + /** + * ------------------------------------------------------------------------ + * jQuery + * ------------------------------------------------------------------------ + */ + + $.fn[NAME] = Dropdown._jQueryInterface; + $.fn[NAME].Constructor = Dropdown; + $.fn[NAME].noConflict = function () { + $.fn[NAME] = JQUERY_NO_CONFLICT; + return Dropdown._jQueryInterface; + }; + } + }, { + key: 'VERSION', + get: function get$$1() { + return VERSION; + } + }, { + key: 'Default', + get: function get$$1() { + return Default; + } + }, { + key: 'DefaultType', + get: function get$$1() { + return DefaultType; + } + }]); + return Dropdown; +}(); + +if (!Util.nodeEnv()) { + $(document).ready(function () { + Dropdown._init(); + }); +} + +export default Dropdown; +//# sourceMappingURL=dropdown.js.map diff --git a/js/dist/esm/dropdown.js.map b/js/dist/esm/dropdown.js.map new file mode 100644 index 000000000000..2b3738b82826 --- /dev/null +++ b/js/dist/esm/dropdown.js.map @@ -0,0 +1 @@ +{"version":3,"file":"dropdown.js","sources":["../../src/dropdown.js"],"sourcesContent":["import $ from 'jquery'\nimport Popper from 'popper.js'\nimport Util from './util'\n\n\n/**\n * --------------------------------------------------------------------------\n * Bootstrap (v4.0.0-alpha.6): dropdown.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n * --------------------------------------------------------------------------\n */\n\n/**\n * ------------------------------------------------------------------------\n * Constants\n * ------------------------------------------------------------------------\n */\n\nconst NAME = 'dropdown'\nconst VERSION = '4.0.0-alpha.6'\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 = {\n HIDE : `hide${EVENT_KEY}`,\n HIDDEN : `hidden${EVENT_KEY}`,\n SHOW : `show${EVENT_KEY}`,\n SHOWN : `shown${EVENT_KEY}`,\n CLICK : `click${EVENT_KEY}`,\n CLICK_DATA_API : `click${EVENT_KEY}${DATA_API_KEY}`,\n KEYDOWN_DATA_API : `keydown${EVENT_KEY}${DATA_API_KEY}`,\n KEYUP_DATA_API : `keyup${EVENT_KEY}${DATA_API_KEY}`\n}\n\nconst ClassName = {\n DISABLED : 'disabled',\n SHOW : 'show',\n DROPUP : 'dropup',\n MENURIGHT : 'dropdown-menu-right',\n MENULEFT : 'dropdown-menu-left'\n}\n\nconst Selector = {\n DATA_TOGGLE : '[data-toggle=\"dropdown\"]',\n FORM_CHILD : '.dropdown form',\n MENU : '.dropdown-menu',\n NAVBAR_NAV : '.navbar-nav',\n VISIBLE_ITEMS : '.dropdown-menu .dropdown-item:not(.disabled)'\n}\n\nconst AttachmentMap = {\n TOP : 'top-start',\n TOPEND : 'top-end',\n BOTTOM : 'bottom-start',\n BOTTOMEND : 'bottom-end'\n}\n\nconst Default = {\n placement : AttachmentMap.BOTTOM,\n offset : 0,\n flip : true\n}\n\nconst DefaultType = {\n placement : 'string',\n offset : '(number|string)',\n flip : 'boolean'\n}\n\n\n/**\n * ------------------------------------------------------------------------\n * Class Definition\n * ------------------------------------------------------------------------\n */\n\nexport default class Dropdown {\n\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(ClassName.DISABLED)) {\n return\n }\n\n const parent = Dropdown._getParentFromElement(this._element)\n const isActive = $(this._menu).hasClass(ClassName.SHOW)\n\n Dropdown._clearMenus()\n\n if (isActive) {\n return\n }\n\n const relatedTarget = {\n relatedTarget : this._element\n }\n const showEvent = $.Event(Event.SHOW, relatedTarget)\n\n $(parent).trigger(showEvent)\n\n if (showEvent.isDefaultPrevented()) {\n return\n }\n\n let element = this._element\n // for dropup with alignment we use the parent as popper container\n if ($(parent).hasClass(ClassName.DROPUP)) {\n if ($(this._menu).hasClass(ClassName.MENULEFT) || $(this._menu).hasClass(ClassName.MENURIGHT)) {\n element = parent\n }\n }\n this._popper = new Popper(element, this._menu, this._getPopperConfig())\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) {\n $('body').children().on('mouseover', null, $.noop)\n }\n\n this._element.focus()\n this._element.setAttribute('aria-expanded', true)\n\n $(this._menu).toggleClass(ClassName.SHOW)\n $(parent)\n .toggleClass(ClassName.SHOW)\n .trigger($.Event(Event.SHOWN, 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 }\n this._popper = null\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 const elementData = $(this._element).data()\n if (elementData.placement !== undefined) {\n elementData.placement = AttachmentMap[elementData.placement.toUpperCase()]\n }\n\n config = $.extend(\n {},\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 this._menu = $(parent).find(Selector.MENU)[0]\n }\n return this._menu\n }\n\n _getPlacement() {\n const $parentDropdown = $(this._element).parent()\n let placement = this._config.placement\n\n // Handle dropup\n if ($parentDropdown.hasClass(ClassName.DROPUP) || this._config.placement === AttachmentMap.TOP) {\n placement = AttachmentMap.TOP\n if ($(this._menu).hasClass(ClassName.MENURIGHT)) {\n placement = AttachmentMap.TOPEND\n }\n } else if ($(this._menu).hasClass(ClassName.MENURIGHT)) {\n placement = AttachmentMap.BOTTOMEND\n }\n return placement\n }\n\n _detectNavbar() {\n return $(this._element).closest('.navbar').length > 0\n }\n\n _getPopperConfig() {\n const popperConfig = {\n placement : this._getPlacement(),\n modifiers : {\n offset : {\n offset : this._config.offset\n },\n flip : {\n enabled : this._config.flip\n }\n }\n }\n\n // Disable Popper.js for Dropdown in Navbar\n if (this._inNavbar) {\n popperConfig.modifiers.applyStyle = {\n enabled: !this._inNavbar\n }\n }\n\n return popperConfig\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 (data[config] === undefined) {\n throw new Error(`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 = $.makeArray($(Selector.DATA_TOGGLE))\n for (let i = 0; i < toggles.length; 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 (!context) {\n continue\n }\n\n const dropdownMenu = context._menu\n if (!$(parent).hasClass(ClassName.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 $('body').children().off('mouseover', null, $.noop)\n }\n\n toggles[i].setAttribute('aria-expanded', 'false')\n\n $(dropdownMenu).removeClass(ClassName.SHOW)\n $(parent)\n .removeClass(ClassName.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 = $(selector)[0]\n }\n\n return parent || element.parentNode\n }\n\n static _dataApiKeydownHandler(event) {\n if (!REGEXP_KEYDOWN.test(event.which) || /button/i.test(event.target.tagName) && event.which === SPACE_KEYCODE ||\n /input|textarea/i.test(event.target.tagName)) {\n return\n }\n\n event.preventDefault()\n event.stopPropagation()\n\n if (this.disabled || $(this).hasClass(ClassName.DISABLED)) {\n return\n }\n\n const parent = Dropdown._getParentFromElement(this)\n const isActive = $(parent).hasClass(ClassName.SHOW)\n\n if (!isActive && (event.which !== ESCAPE_KEYCODE || event.which !== SPACE_KEYCODE) ||\n isActive && (event.which === ESCAPE_KEYCODE || event.which === SPACE_KEYCODE)) {\n\n if (event.which === ESCAPE_KEYCODE) {\n const toggle = $(parent).find(Selector.DATA_TOGGLE)[0]\n $(toggle).trigger('focus')\n }\n\n $(this).trigger('click')\n return\n }\n\n const items = $(parent).find(Selector.VISIBLE_ITEMS).get()\n\n if (!items.length) {\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 static _init() {\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 = function () {\n $.fn[NAME] = JQUERY_NO_CONFLICT\n return Dropdown._jQueryInterface\n }\n }\n}\n\nif (!Util.nodeEnv()) {\n $(document).ready(() => {\n Dropdown._init()\n })\n}\n"],"names":["NAME","VERSION","DATA_KEY","EVENT_KEY","DATA_API_KEY","JQUERY_NO_CONFLICT","$","fn","ESCAPE_KEYCODE","SPACE_KEYCODE","TAB_KEYCODE","ARROW_UP_KEYCODE","ARROW_DOWN_KEYCODE","RIGHT_MOUSE_BUTTON_WHICH","REGEXP_KEYDOWN","RegExp","Event","ClassName","Selector","AttachmentMap","Default","BOTTOM","DefaultType","Dropdown","element","config","_element","_popper","_config","_getConfig","_menu","_getMenuElement","_inNavbar","_detectNavbar","_addEventListeners","disabled","hasClass","DISABLED","parent","_getParentFromElement","isActive","SHOW","_clearMenus","relatedTarget","showEvent","trigger","isDefaultPrevented","DROPUP","MENULEFT","MENURIGHT","Popper","_getPopperConfig","document","documentElement","closest","NAVBAR_NAV","length","children","on","noop","focus","setAttribute","toggleClass","SHOWN","removeData","off","destroy","scheduleUpdate","CLICK","event","preventDefault","stopPropagation","toggle","elementData","data","placement","undefined","toUpperCase","extend","constructor","typeCheckConfig","find","MENU","$parentDropdown","TOP","TOPEND","BOTTOMEND","popperConfig","_getPlacement","offset","flip","modifiers","applyStyle","each","Error","which","type","toggles","makeArray","DATA_TOGGLE","i","context","dropdownMenu","test","target","tagName","contains","hideEvent","HIDE","removeClass","HIDDEN","selector","Util","getSelectorFromElement","parentNode","items","VISIBLE_ITEMS","get","index","indexOf","KEYDOWN_DATA_API","_dataApiKeydownHandler","CLICK_DATA_API","KEYUP_DATA_API","_jQueryInterface","call","FORM_CHILD","e","Constructor","noConflict","nodeEnv","ready","_init"],"mappings":"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"} \ No newline at end of file diff --git a/js/dist/esm/index.js b/js/dist/esm/index.js new file mode 100644 index 000000000000..b97b20fbf98b --- /dev/null +++ b/js/dist/esm/index.js @@ -0,0 +1,16 @@ +import __alert_js from './alert.js'; +import __button_js from './button.js'; +import __carousel_js from './carousel.js'; +import __collapse_js from './collapse.js'; +import __dropdown_js from './dropdown.js'; +import __modal_js from './modal.js'; +import __popover_js from './popover.js'; +import __scrollspy_js from './scrollspy.js'; +import __tab_js from './tab.js'; +import __tooltip_js from './tooltip.js'; +import __util_js from './util.js'; + + + +export { __util_js as Util, __alert_js as Alert, __button_js as Button, __carousel_js as Carousel, __collapse_js as Collapse, __dropdown_js as Dropdown, __modal_js as Modal, __popover_js as Popover, __scrollspy_js as Scrollspy, __tab_js as Tab, __tooltip_js as Tooltip }; +//# sourceMappingURL=index.js.map diff --git a/js/dist/esm/index.js.map b/js/dist/esm/index.js.map new file mode 100644 index 000000000000..7d29fe54ecf5 --- /dev/null +++ b/js/dist/esm/index.js.map @@ -0,0 +1 @@ +{"version":3,"file":"index.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;"} \ No newline at end of file diff --git a/js/dist/esm/modal.js b/js/dist/esm/modal.js new file mode 100644 index 000000000000..77b80e4fbcc0 --- /dev/null +++ b/js/dist/esm/modal.js @@ -0,0 +1,644 @@ +import $ from 'jquery'; +import Util from './util.js'; + +var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol" ? function (obj) { + return typeof obj; +} : function (obj) { + return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; +}; + + + + + + + + + + + +var classCallCheck = function (instance, Constructor) { + if (!(instance instanceof Constructor)) { + throw new TypeError("Cannot call a class as a function"); + } +}; + +var createClass = function () { + function defineProperties(target, props) { + for (var i = 0; i < props.length; i++) { + var descriptor = props[i]; + descriptor.enumerable = descriptor.enumerable || false; + descriptor.configurable = true; + if ("value" in descriptor) descriptor.writable = true; + Object.defineProperty(target, descriptor.key, descriptor); + } + } + + return function (Constructor, protoProps, staticProps) { + if (protoProps) defineProperties(Constructor.prototype, protoProps); + if (staticProps) defineProperties(Constructor, staticProps); + return Constructor; + }; +}(); + +/** + * -------------------------------------------------------------------------- + * Bootstrap (v4.0.0-alpha.6): modal.js + * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) + * -------------------------------------------------------------------------- + */ + +/** + * ------------------------------------------------------------------------ + * Constants + * ------------------------------------------------------------------------ + */ + +var NAME = 'modal'; +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; +var BACKDROP_TRANSITION_DURATION = 150; +var ESCAPE_KEYCODE = 27; // KeyboardEvent.which value for Escape (Esc) key + +var Default = { + backdrop: true, + keyboard: true, + focus: true, + show: true +}; + +var DefaultType = { + backdrop: '(boolean|string)', + keyboard: 'boolean', + focus: 'boolean', + show: 'boolean' +}; + +var Event = { + HIDE: 'hide' + EVENT_KEY, + HIDDEN: 'hidden' + EVENT_KEY, + SHOW: 'show' + EVENT_KEY, + SHOWN: 'shown' + EVENT_KEY, + FOCUSIN: 'focusin' + EVENT_KEY, + RESIZE: 'resize' + EVENT_KEY, + CLICK_DISMISS: 'click.dismiss' + EVENT_KEY, + KEYDOWN_DISMISS: 'keydown.dismiss' + EVENT_KEY, + MOUSEUP_DISMISS: 'mouseup.dismiss' + EVENT_KEY, + MOUSEDOWN_DISMISS: 'mousedown.dismiss' + EVENT_KEY, + CLICK_DATA_API: 'click' + EVENT_KEY + DATA_API_KEY +}; + +var ClassName = { + SCROLLBAR_MEASURER: 'modal-scrollbar-measure', + BACKDROP: 'modal-backdrop', + OPEN: 'modal-open', + FADE: 'fade', + SHOW: 'show' +}; + +var Selector = { + DIALOG: '.modal-dialog', + DATA_TOGGLE: '[data-toggle="modal"]', + DATA_DISMISS: '[data-dismiss="modal"]', + FIXED_CONTENT: '.fixed-top, .fixed-bottom, .is-fixed, .sticky-top', + NAVBAR_TOGGLER: '.navbar-toggler' + + /** + * ------------------------------------------------------------------------ + * Class Definition + * ------------------------------------------------------------------------ + */ + +}; +var Modal = function () { + function Modal(element, config) { + classCallCheck(this, Modal); + + this._config = this._getConfig(config); + this._element = element; + this._dialog = $(element).find(Selector.DIALOG)[0]; + this._backdrop = null; + this._isShown = false; + this._isBodyOverflowing = false; + this._ignoreBackdropClick = false; + this._originalBodyPadding = 0; + this._scrollbarWidth = 0; + } + + // getters + + createClass(Modal, [{ + key: 'toggle', + + + // public + + value: function toggle(relatedTarget) { + return this._isShown ? this.hide() : this.show(relatedTarget); + } + }, { + key: 'show', + value: function show(relatedTarget) { + var _this = this; + + if (this._isTransitioning) { + return; + } + + if (Util.supportsTransitionEnd() && $(this._element).hasClass(ClassName.FADE)) { + this._isTransitioning = true; + } + + var showEvent = $.Event(Event.SHOW, { + relatedTarget: relatedTarget + }); + + $(this._element).trigger(showEvent); + + if (this._isShown || showEvent.isDefaultPrevented()) { + return; + } + + this._isShown = true; + + this._checkScrollbar(); + this._setScrollbar(); + + $(document.body).addClass(ClassName.OPEN); + + this._setEscapeEvent(); + this._setResizeEvent(); + + $(this._element).on(Event.CLICK_DISMISS, Selector.DATA_DISMISS, function (event) { + return _this.hide(event); + }); + + $(this._dialog).on(Event.MOUSEDOWN_DISMISS, function () { + $(_this._element).one(Event.MOUSEUP_DISMISS, function (event) { + if ($(event.target).is(_this._element)) { + _this._ignoreBackdropClick = true; + } + }); + }); + + this._showBackdrop(function () { + return _this._showElement(relatedTarget); + }); + } + }, { + key: 'hide', + value: function hide(event) { + var _this2 = this; + + if (event) { + event.preventDefault(); + } + + if (this._isTransitioning || !this._isShown) { + return; + } + + 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; + } + + this._isShown = false; + + this._setEscapeEvent(); + this._setResizeEvent(); + + $(document).off(Event.FOCUSIN); + + $(this._element).removeClass(ClassName.SHOW); + + $(this._element).off(Event.CLICK_DISMISS); + $(this._dialog).off(Event.MOUSEDOWN_DISMISS); + + if (transition) { + + $(this._element).one(Util.TRANSITION_END, function (event) { + return _this2._hideModal(event); + }).emulateTransitionEnd(TRANSITION_DURATION); + } else { + this._hideModal(); + } + } + }, { + key: 'dispose', + value: function dispose() { + $.removeData(this._element, DATA_KEY); + + $(window, document, this._element, this._backdrop).off(EVENT_KEY); + + this._config = null; + this._element = null; + this._dialog = null; + this._backdrop = null; + this._isShown = null; + this._isBodyOverflowing = null; + this._ignoreBackdropClick = null; + this._scrollbarWidth = null; + } + }, { + key: 'handleUpdate', + value: function handleUpdate() { + this._adjustDialog(); + } + + // private + + }, { + key: '_getConfig', + value: function _getConfig(config) { + config = $.extend({}, Default, config); + Util.typeCheckConfig(NAME, config, DefaultType); + return config; + } + }, { + key: '_showElement', + value: function _showElement(relatedTarget) { + var _this3 = 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 + document.body.appendChild(this._element); + } + + this._element.style.display = 'block'; + this._element.removeAttribute('aria-hidden'); + this._element.scrollTop = 0; + + if (transition) { + Util.reflow(this._element); + } + + $(this._element).addClass(ClassName.SHOW); + + if (this._config.focus) { + this._enforceFocus(); + } + + var shownEvent = $.Event(Event.SHOWN, { + relatedTarget: relatedTarget + }); + + var transitionComplete = function transitionComplete() { + if (_this3._config.focus) { + _this3._element.focus(); + } + _this3._isTransitioning = false; + $(_this3._element).trigger(shownEvent); + }; + + if (transition) { + $(this._dialog).one(Util.TRANSITION_END, transitionComplete).emulateTransitionEnd(TRANSITION_DURATION); + } else { + transitionComplete(); + } + } + }, { + key: '_enforceFocus', + value: function _enforceFocus() { + var _this4 = this; + + $(document).off(Event.FOCUSIN) // guard against infinite focus loop + .on(Event.FOCUSIN, function (event) { + if (document !== event.target && _this4._element !== event.target && !$(_this4._element).has(event.target).length) { + _this4._element.focus(); + } + }); + } + }, { + key: '_setEscapeEvent', + value: function _setEscapeEvent() { + var _this5 = this; + + if (this._isShown && this._config.keyboard) { + $(this._element).on(Event.KEYDOWN_DISMISS, function (event) { + if (event.which === ESCAPE_KEYCODE) { + event.preventDefault(); + _this5.hide(); + } + }); + } else if (!this._isShown) { + $(this._element).off(Event.KEYDOWN_DISMISS); + } + } + }, { + key: '_setResizeEvent', + value: function _setResizeEvent() { + var _this6 = this; + + if (this._isShown) { + $(window).on(Event.RESIZE, function (event) { + return _this6.handleUpdate(event); + }); + } else { + $(window).off(Event.RESIZE); + } + } + }, { + key: '_hideModal', + value: function _hideModal() { + var _this7 = this; + + this._element.style.display = 'none'; + this._element.setAttribute('aria-hidden', true); + this._isTransitioning = false; + this._showBackdrop(function () { + $(document.body).removeClass(ClassName.OPEN); + _this7._resetAdjustments(); + _this7._resetScrollbar(); + $(_this7._element).trigger(Event.HIDDEN); + }); + } + }, { + key: '_removeBackdrop', + value: function _removeBackdrop() { + if (this._backdrop) { + $(this._backdrop).remove(); + this._backdrop = null; + } + } + }, { + key: '_showBackdrop', + value: function _showBackdrop(callback) { + var _this8 = this; + + var animate = $(this._element).hasClass(ClassName.FADE) ? ClassName.FADE : ''; + + if (this._isShown && this._config.backdrop) { + var doAnimate = Util.supportsTransitionEnd() && animate; + + this._backdrop = document.createElement('div'); + this._backdrop.className = ClassName.BACKDROP; + + if (animate) { + $(this._backdrop).addClass(animate); + } + + $(this._backdrop).appendTo(document.body); + + $(this._element).on(Event.CLICK_DISMISS, function (event) { + if (_this8._ignoreBackdropClick) { + _this8._ignoreBackdropClick = false; + return; + } + if (event.target !== event.currentTarget) { + return; + } + if (_this8._config.backdrop === 'static') { + _this8._element.focus(); + } else { + _this8.hide(); + } + }); + + if (doAnimate) { + Util.reflow(this._backdrop); + } + + $(this._backdrop).addClass(ClassName.SHOW); + + if (!callback) { + return; + } + + if (!doAnimate) { + callback(); + return; + } + + $(this._backdrop).one(Util.TRANSITION_END, callback).emulateTransitionEnd(BACKDROP_TRANSITION_DURATION); + } else if (!this._isShown && this._backdrop) { + $(this._backdrop).removeClass(ClassName.SHOW); + + var callbackRemove = function callbackRemove() { + _this8._removeBackdrop(); + if (callback) { + callback(); + } + }; + + if (Util.supportsTransitionEnd() && $(this._element).hasClass(ClassName.FADE)) { + $(this._backdrop).one(Util.TRANSITION_END, callbackRemove).emulateTransitionEnd(BACKDROP_TRANSITION_DURATION); + } else { + callbackRemove(); + } + } else if (callback) { + callback(); + } + } + + // ---------------------------------------------------------------------- + // the following methods are used to handle overflowing modals + // todo (fat): these should probably be refactored out of modal.js + // ---------------------------------------------------------------------- + + }, { + key: '_adjustDialog', + value: function _adjustDialog() { + var isModalOverflowing = this._element.scrollHeight > document.documentElement.clientHeight; + + if (!this._isBodyOverflowing && isModalOverflowing) { + this._element.style.paddingLeft = this._scrollbarWidth + 'px'; + } + + if (this._isBodyOverflowing && !isModalOverflowing) { + this._element.style.paddingRight = this._scrollbarWidth + 'px'; + } + } + }, { + key: '_resetAdjustments', + value: function _resetAdjustments() { + this._element.style.paddingLeft = ''; + this._element.style.paddingRight = ''; + } + }, { + key: '_checkScrollbar', + value: function _checkScrollbar() { + this._isBodyOverflowing = document.body.clientWidth < window.innerWidth; + this._scrollbarWidth = this._getScrollbarWidth(); + } + }, { + key: '_setScrollbar', + value: function _setScrollbar() { + var _this9 = this; + + if (this._isBodyOverflowing) { + // 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) + _this9._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) + _this9._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'); + } + } + }, { + key: '_resetScrollbar', + value: function _resetScrollbar() { + // 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'); + } + } + }, { + key: '_getScrollbarWidth', + value: function _getScrollbarWidth() { + // thx d.walsh + var scrollDiv = document.createElement('div'); + scrollDiv.className = ClassName.SCROLLBAR_MEASURER; + document.body.appendChild(scrollDiv); + var scrollbarWidth = scrollDiv.getBoundingClientRect().width - scrollDiv.clientWidth; + document.body.removeChild(scrollDiv); + return scrollbarWidth; + } + + // static + + }], [{ + key: '_jQueryInterface', + value: function _jQueryInterface(config, relatedTarget) { + return this.each(function () { + var data = $(this).data(DATA_KEY); + var _config = $.extend({}, Modal.Default, $(this).data(), (typeof config === 'undefined' ? 'undefined' : _typeof(config)) === 'object' && config); + + if (!data) { + data = new Modal(this, _config); + $(this).data(DATA_KEY, data); + } + + if (typeof config === 'string') { + if (data[config] === undefined) { + throw new Error('No method named "' + config + '"'); + } + data[config](relatedTarget); + } else if (_config.show) { + data.show(relatedTarget); + } + }); + } + }, { + key: '_init', + value: function _init() { + /** + * ------------------------------------------------------------------------ + * Data Api implementation + * ------------------------------------------------------------------------ + */ + + $(document).on(Event.CLICK_DATA_API, Selector.DATA_TOGGLE, function (event) { + var _this10 = 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' || 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 ($(_this10).is(':visible')) { + _this10.focus(); + } + }); + }); + + Modal._jQueryInterface.call($(target), config, this); + }); + + /** + * ------------------------------------------------------------------------ + * jQuery + * ------------------------------------------------------------------------ + */ + + $.fn[NAME] = Modal._jQueryInterface; + $.fn[NAME].Constructor = Modal; + $.fn[NAME].noConflict = function () { + $.fn[NAME] = JQUERY_NO_CONFLICT; + return Modal._jQueryInterface; + }; + } + }, { + key: 'VERSION', + get: function get$$1() { + return VERSION; + } + }, { + key: 'Default', + get: function get$$1() { + return Default; + } + }]); + return Modal; +}(); + +if (!Util.nodeEnv()) { + $(document).ready(function () { + Modal._init(); + }); +} + +export default Modal; +//# sourceMappingURL=modal.js.map diff --git a/js/dist/esm/modal.js.map b/js/dist/esm/modal.js.map new file mode 100644 index 000000000000..1fa3883b9d00 --- /dev/null +++ b/js/dist/esm/modal.js.map @@ -0,0 +1 @@ +{"version":3,"file":"modal.js","sources":["../../src/modal.js"],"sourcesContent":["import $ from 'jquery'\nimport Util from './util'\n\n\n/**\n * --------------------------------------------------------------------------\n * Bootstrap (v4.0.0-alpha.6): modal.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n * --------------------------------------------------------------------------\n */\n\n\n/**\n * ------------------------------------------------------------------------\n * Constants\n * ------------------------------------------------------------------------\n */\n\nconst NAME = 'modal'\nconst VERSION = '4.0.0-alpha.6'\nconst DATA_KEY = 'bs.modal'\nconst EVENT_KEY = `.${DATA_KEY}`\nconst DATA_API_KEY = '.data-api'\nconst JQUERY_NO_CONFLICT = $.fn[NAME]\nconst TRANSITION_DURATION = 300\nconst BACKDROP_TRANSITION_DURATION = 150\nconst ESCAPE_KEYCODE = 27 // KeyboardEvent.which value for Escape (Esc) key\n\nconst Default = {\n backdrop : true,\n keyboard : true,\n focus : true,\n show : true\n}\n\nconst DefaultType = {\n backdrop : '(boolean|string)',\n keyboard : 'boolean',\n focus : 'boolean',\n show : 'boolean'\n}\n\nconst Event = {\n HIDE : `hide${EVENT_KEY}`,\n HIDDEN : `hidden${EVENT_KEY}`,\n SHOW : `show${EVENT_KEY}`,\n SHOWN : `shown${EVENT_KEY}`,\n FOCUSIN : `focusin${EVENT_KEY}`,\n RESIZE : `resize${EVENT_KEY}`,\n CLICK_DISMISS : `click.dismiss${EVENT_KEY}`,\n KEYDOWN_DISMISS : `keydown.dismiss${EVENT_KEY}`,\n MOUSEUP_DISMISS : `mouseup.dismiss${EVENT_KEY}`,\n MOUSEDOWN_DISMISS : `mousedown.dismiss${EVENT_KEY}`,\n CLICK_DATA_API : `click${EVENT_KEY}${DATA_API_KEY}`\n}\n\nconst ClassName = {\n SCROLLBAR_MEASURER : 'modal-scrollbar-measure',\n BACKDROP : 'modal-backdrop',\n OPEN : 'modal-open',\n FADE : 'fade',\n SHOW : 'show'\n}\n\nconst Selector = {\n DIALOG : '.modal-dialog',\n DATA_TOGGLE : '[data-toggle=\"modal\"]',\n DATA_DISMISS : '[data-dismiss=\"modal\"]',\n FIXED_CONTENT : '.fixed-top, .fixed-bottom, .is-fixed, .sticky-top',\n NAVBAR_TOGGLER : '.navbar-toggler'\n}\n\n\n/**\n * ------------------------------------------------------------------------\n * Class Definition\n * ------------------------------------------------------------------------\n */\n\nexport default class Modal {\n\n constructor(element, config) {\n this._config = this._getConfig(config)\n this._element = element\n this._dialog = $(element).find(Selector.DIALOG)[0]\n this._backdrop = null\n this._isShown = false\n this._isBodyOverflowing = false\n this._ignoreBackdropClick = false\n this._originalBodyPadding = 0\n this._scrollbarWidth = 0\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\n // public\n\n toggle(relatedTarget) {\n return this._isShown ? this.hide() : this.show(relatedTarget)\n }\n\n show(relatedTarget) {\n if (this._isTransitioning) {\n return\n }\n\n if (Util.supportsTransitionEnd() && $(this._element).hasClass(ClassName.FADE)) {\n this._isTransitioning = true\n }\n\n const showEvent = $.Event(Event.SHOW, {\n relatedTarget\n })\n\n $(this._element).trigger(showEvent)\n\n if (this._isShown || showEvent.isDefaultPrevented()) {\n return\n }\n\n this._isShown = true\n\n this._checkScrollbar()\n this._setScrollbar()\n\n $(document.body).addClass(ClassName.OPEN)\n\n this._setEscapeEvent()\n this._setResizeEvent()\n\n $(this._element).on(\n Event.CLICK_DISMISS,\n Selector.DATA_DISMISS,\n (event) => 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._isTransitioning || !this._isShown) {\n return\n }\n\n const transition = Util.supportsTransitionEnd() && $(this._element).hasClass(ClassName.FADE)\n\n if (transition) {\n this._isTransitioning = true\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\n this._setEscapeEvent()\n this._setResizeEvent()\n\n $(document).off(Event.FOCUSIN)\n\n $(this._element).removeClass(ClassName.SHOW)\n\n $(this._element).off(Event.CLICK_DISMISS)\n $(this._dialog).off(Event.MOUSEDOWN_DISMISS)\n\n if (transition) {\n\n $(this._element)\n .one(Util.TRANSITION_END, (event) => this._hideModal(event))\n .emulateTransitionEnd(TRANSITION_DURATION)\n } else {\n this._hideModal()\n }\n }\n\n dispose() {\n $.removeData(this._element, DATA_KEY)\n\n $(window, document, this._element, this._backdrop).off(EVENT_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._scrollbarWidth = null\n }\n\n handleUpdate() {\n this._adjustDialog()\n }\n\n // private\n\n _getConfig(config) {\n config = $.extend({}, Default, config)\n Util.typeCheckConfig(NAME, config, DefaultType)\n return config\n }\n\n _showElement(relatedTarget) {\n const transition = Util.supportsTransitionEnd() &&\n $(this._element).hasClass(ClassName.FADE)\n\n if (!this._element.parentNode ||\n this._element.parentNode.nodeType !== Node.ELEMENT_NODE) {\n // don't move modals 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.scrollTop = 0\n\n if (transition) {\n Util.reflow(this._element)\n }\n\n $(this._element).addClass(ClassName.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 $(this._dialog)\n .one(Util.TRANSITION_END, transitionComplete)\n .emulateTransitionEnd(TRANSITION_DURATION)\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) {\n this._element.focus()\n }\n })\n }\n\n _setEscapeEvent() {\n if (this._isShown && this._config.keyboard) {\n $(this._element).on(Event.KEYDOWN_DISMISS, (event) => {\n if (event.which === ESCAPE_KEYCODE) {\n event.preventDefault()\n this.hide()\n }\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._isTransitioning = false\n this._showBackdrop(() => {\n $(document.body).removeClass(ClassName.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(ClassName.FADE) ?\n ClassName.FADE : ''\n\n if (this._isShown && this._config.backdrop) {\n const doAnimate = Util.supportsTransitionEnd() && animate\n\n this._backdrop = document.createElement('div')\n this._backdrop.className = ClassName.BACKDROP\n\n if (animate) {\n $(this._backdrop).addClass(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 if (this._config.backdrop === 'static') {\n this._element.focus()\n } else {\n this.hide()\n }\n })\n\n if (doAnimate) {\n Util.reflow(this._backdrop)\n }\n\n $(this._backdrop).addClass(ClassName.SHOW)\n\n if (!callback) {\n return\n }\n\n if (!doAnimate) {\n callback()\n return\n }\n\n $(this._backdrop)\n .one(Util.TRANSITION_END, callback)\n .emulateTransitionEnd(BACKDROP_TRANSITION_DURATION)\n\n } else if (!this._isShown && this._backdrop) {\n $(this._backdrop).removeClass(ClassName.SHOW)\n\n const callbackRemove = () => {\n this._removeBackdrop()\n if (callback) {\n callback()\n }\n }\n\n if (Util.supportsTransitionEnd() &&\n $(this._element).hasClass(ClassName.FADE)) {\n $(this._backdrop)\n .one(Util.TRANSITION_END, callbackRemove)\n .emulateTransitionEnd(BACKDROP_TRANSITION_DURATION)\n } else {\n callbackRemove()\n }\n\n } else if (callback) {\n callback()\n }\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 this._isBodyOverflowing = document.body.clientWidth < 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\n // Adjust fixed content padding\n $(Selector.FIXED_CONTENT).each((index, element) => {\n const actualPadding = $(element)[0].style.paddingRight\n const calculatedPadding = $(element).css('padding-right')\n $(element).data('padding-right', actualPadding).css('padding-right', `${parseFloat(calculatedPadding) + this._scrollbarWidth}px`)\n })\n\n // Adjust navbar-toggler margin\n $(Selector.NAVBAR_TOGGLER).each((index, element) => {\n const actualMargin = $(element)[0].style.marginRight\n const calculatedMargin = $(element).css('margin-right')\n $(element).data('margin-right', actualMargin).css('margin-right', `${parseFloat(calculatedMargin) + this._scrollbarWidth}px`)\n })\n\n // Adjust body padding\n const actualPadding = document.body.style.paddingRight\n const calculatedPadding = $('body').css('padding-right')\n $('body').data('padding-right', actualPadding).css('padding-right', `${parseFloat(calculatedPadding) + this._scrollbarWidth}px`)\n }\n }\n\n _resetScrollbar() {\n // Restore fixed content padding\n $(Selector.FIXED_CONTENT).each((index, element) => {\n const padding = $(element).data('padding-right')\n if (typeof padding !== 'undefined') {\n $(element).css('padding-right', padding).removeData('padding-right')\n }\n })\n\n // Restore navbar-toggler margin\n $(Selector.NAVBAR_TOGGLER).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 = $('body').data('padding-right')\n if (typeof padding !== 'undefined') {\n $('body').css('padding-right', padding).removeData('padding-right')\n }\n }\n\n _getScrollbarWidth() { // thx d.walsh\n const scrollDiv = document.createElement('div')\n scrollDiv.className = ClassName.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\n // static\n\n static _jQueryInterface(config, relatedTarget) {\n return this.each(function () {\n let data = $(this).data(DATA_KEY)\n const _config = $.extend(\n {},\n Modal.Default,\n $(this).data(),\n typeof config === 'object' && 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 (data[config] === undefined) {\n throw new Error(`No method named \"${config}\"`)\n }\n data[config](relatedTarget)\n } else if (_config.show) {\n data.show(relatedTarget)\n }\n })\n }\n\n static _init() {\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 = $(selector)[0]\n }\n\n const config = $(target).data(DATA_KEY) ?\n 'toggle' : $.extend({}, $(target).data(), $(this).data())\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 = function () {\n $.fn[NAME] = JQUERY_NO_CONFLICT\n return Modal._jQueryInterface\n }\n }\n}\n\nif (!Util.nodeEnv()) {\n $(document).ready(() => {\n Modal._init()\n })\n}\n"],"names":["NAME","VERSION","DATA_KEY","EVENT_KEY","DATA_API_KEY","JQUERY_NO_CONFLICT","$","fn","TRANSITION_DURATION","BACKDROP_TRANSITION_DURATION","ESCAPE_KEYCODE","Default","DefaultType","Event","ClassName","Selector","Modal","element","config","_config","_getConfig","_element","_dialog","find","DIALOG","_backdrop","_isShown","_isBodyOverflowing","_ignoreBackdropClick","_originalBodyPadding","_scrollbarWidth","relatedTarget","hide","show","_isTransitioning","Util","supportsTransitionEnd","hasClass","FADE","showEvent","SHOW","trigger","isDefaultPrevented","_checkScrollbar","_setScrollbar","document","body","addClass","OPEN","_setEscapeEvent","_setResizeEvent","on","CLICK_DISMISS","DATA_DISMISS","event","MOUSEDOWN_DISMISS","one","MOUSEUP_DISMISS","target","is","_showBackdrop","_showElement","preventDefault","transition","hideEvent","HIDE","off","FOCUSIN","removeClass","TRANSITION_END","_hideModal","emulateTransitionEnd","removeData","window","_adjustDialog","extend","typeCheckConfig","parentNode","nodeType","Node","ELEMENT_NODE","appendChild","style","display","removeAttribute","scrollTop","reflow","focus","_enforceFocus","shownEvent","SHOWN","transitionComplete","has","length","keyboard","KEYDOWN_DISMISS","which","RESIZE","handleUpdate","setAttribute","_resetAdjustments","_resetScrollbar","HIDDEN","remove","callback","animate","backdrop","doAnimate","createElement","className","BACKDROP","appendTo","currentTarget","callbackRemove","_removeBackdrop","isModalOverflowing","scrollHeight","documentElement","clientHeight","paddingLeft","paddingRight","clientWidth","innerWidth","_getScrollbarWidth","FIXED_CONTENT","each","index","actualPadding","calculatedPadding","css","data","parseFloat","NAVBAR_TOGGLER","actualMargin","marginRight","calculatedMargin","padding","margin","scrollDiv","SCROLLBAR_MEASURER","scrollbarWidth","getBoundingClientRect","width","removeChild","undefined","Error","CLICK_DATA_API","DATA_TOGGLE","selector","getSelectorFromElement","tagName","$target","_jQueryInterface","call","Constructor","noConflict","nodeEnv","ready","_init"],"mappings":"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"} \ No newline at end of file diff --git a/js/dist/esm/popover.js b/js/dist/esm/popover.js new file mode 100644 index 000000000000..48ec1de12d6b --- /dev/null +++ b/js/dist/esm/popover.js @@ -0,0 +1,296 @@ +import $ from 'jquery'; +import Tooltip from './tooltip.js'; +import Util from './util.js'; + +var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol" ? function (obj) { + return typeof obj; +} : function (obj) { + return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; +}; + + + + + + + + + + + +var classCallCheck = function (instance, Constructor) { + if (!(instance instanceof Constructor)) { + throw new TypeError("Cannot call a class as a function"); + } +}; + +var createClass = function () { + function defineProperties(target, props) { + for (var i = 0; i < props.length; i++) { + var descriptor = props[i]; + descriptor.enumerable = descriptor.enumerable || false; + descriptor.configurable = true; + if ("value" in descriptor) descriptor.writable = true; + Object.defineProperty(target, descriptor.key, descriptor); + } + } + + return function (Constructor, protoProps, staticProps) { + if (protoProps) defineProperties(Constructor.prototype, protoProps); + if (staticProps) defineProperties(Constructor, staticProps); + return Constructor; + }; +}(); + + + + + + + + + +var inherits = function (subClass, superClass) { + if (typeof superClass !== "function" && superClass !== null) { + throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); + } + + subClass.prototype = Object.create(superClass && superClass.prototype, { + constructor: { + value: subClass, + enumerable: false, + writable: true, + configurable: true + } + }); + if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; +}; + + + + + + + + + + + +var possibleConstructorReturn = function (self, call) { + if (!self) { + throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); + } + + return call && (typeof call === "object" || typeof call === "function") ? call : self; +}; + +/** + * -------------------------------------------------------------------------- + * Bootstrap (v4.0.0-alpha.6): popover.js + * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) + * -------------------------------------------------------------------------- + */ + +/** + * ------------------------------------------------------------------------ + * Constants + * ------------------------------------------------------------------------ + */ + +var NAME = 'popover'; +var VERSION = '4.0.0-alpha.6'; +var DATA_KEY = 'bs.popover'; +var EVENT_KEY = '.' + DATA_KEY; +var JQUERY_NO_CONFLICT = $.fn[NAME]; +var CLASS_PREFIX = 'bs-popover'; +var BSCLS_PREFIX_REGEX = new RegExp('(^|\\s)' + CLASS_PREFIX + '\\S+', 'g'); + +var Default = $.extend({}, Tooltip.Default, { + placement: 'right', + trigger: 'click', + content: '', + template: '' +}); + +var DefaultType = $.extend({}, Tooltip.DefaultType, { + content: '(string|element|function)' +}); + +var ClassName = { + FADE: 'fade', + SHOW: 'show' +}; + +var Selector = { + TITLE: '.popover-header', + CONTENT: '.popover-body' +}; + +var Event = { + HIDE: 'hide' + EVENT_KEY, + HIDDEN: 'hidden' + EVENT_KEY, + SHOW: 'show' + EVENT_KEY, + SHOWN: 'shown' + EVENT_KEY, + INSERTED: 'inserted' + EVENT_KEY, + CLICK: 'click' + EVENT_KEY, + FOCUSIN: 'focusin' + EVENT_KEY, + FOCUSOUT: 'focusout' + EVENT_KEY, + MOUSEENTER: 'mouseenter' + EVENT_KEY, + MOUSELEAVE: 'mouseleave' + EVENT_KEY + + /** + * ------------------------------------------------------------------------ + * Class Definition + * ------------------------------------------------------------------------ + */ + +}; +var Popover = function (_Tooltip) { + inherits(Popover, _Tooltip); + + function Popover() { + classCallCheck(this, Popover); + return possibleConstructorReturn(this, (Popover.__proto__ || Object.getPrototypeOf(Popover)).apply(this, arguments)); + } + + createClass(Popover, [{ + key: 'isWithContent', + + + // overrides + + value: function isWithContent() { + return this.getTitle() || this._getContent(); + } + }, { + key: 'addAttachmentClass', + value: function addAttachmentClass(attachment) { + $(this.getTipElement()).addClass(CLASS_PREFIX + '-' + attachment); + } + }, { + key: 'getTipElement', + value: function getTipElement() { + return this.tip = this.tip || $(this.config.template)[0]; + } + }, { + key: 'setContent', + value: function setContent() { + var $tip = $(this.getTipElement()); + + // 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 + ' ' + ClassName.SHOW); + } + + // private + + }, { + key: '_getContent', + value: function _getContent() { + return this.element.getAttribute('data-content') || (typeof this.config.content === 'function' ? this.config.content.call(this.element) : this.config.content); + } + }, { + key: '_cleanTipClass', + value: function _cleanTipClass() { + var $tip = $(this.getTipElement()); + var tabClass = $tip.attr('class').match(BSCLS_PREFIX_REGEX); + if (tabClass !== null && tabClass.length > 0) { + $tip.removeClass(tabClass.join('')); + } + } + + // static + + }], [{ + key: '_jQueryInterface', + value: function _jQueryInterface(config) { + return this.each(function () { + var data = $(this).data(DATA_KEY); + var _config = (typeof config === 'undefined' ? 'undefined' : _typeof(config)) === 'object' ? config : null; + + if (!data && /destroy|hide/.test(config)) { + return; + } + + if (!data) { + data = new Popover(this, _config); + $(this).data(DATA_KEY, data); + } + + if (typeof config === 'string') { + if (data[config] === undefined) { + throw new Error('No method named "' + config + '"'); + } + data[config](); + } + }); + } + }, { + key: '_init', + value: function _init() { + /** + * ------------------------------------------------------------------------ + * jQuery + * ------------------------------------------------------------------------ + */ + + $.fn[NAME] = Popover._jQueryInterface; + $.fn[NAME].Constructor = Popover; + $.fn[NAME].noConflict = function () { + $.fn[NAME] = JQUERY_NO_CONFLICT; + return Popover._jQueryInterface; + }; + } + }, { + key: 'VERSION', + + + // getters + + get: function get$$1() { + return VERSION; + } + }, { + key: 'Default', + get: function get$$1() { + return Default; + } + }, { + key: 'NAME', + get: function get$$1() { + return NAME; + } + }, { + key: 'DATA_KEY', + get: function get$$1() { + return DATA_KEY; + } + }, { + key: 'Event', + get: function get$$1() { + return Event; + } + }, { + key: 'EVENT_KEY', + get: function get$$1() { + return EVENT_KEY; + } + }, { + key: 'DefaultType', + get: function get$$1() { + return DefaultType; + } + }]); + return Popover; +}(Tooltip); + +if (!Util.nodeEnv()) { + $(document).ready(function () { + Popover._init(); + }); +} + +export default Popover; +//# sourceMappingURL=popover.js.map diff --git a/js/dist/esm/popover.js.map b/js/dist/esm/popover.js.map new file mode 100644 index 000000000000..6bda530d4c5d --- /dev/null +++ b/js/dist/esm/popover.js.map @@ -0,0 +1 @@ +{"version":3,"file":"popover.js","sources":["../../src/popover.js"],"sourcesContent":["import $ from 'jquery'\nimport Tooltip from './tooltip'\nimport Util from './util'\n\n/**\n * --------------------------------------------------------------------------\n * Bootstrap (v4.0.0-alpha.6): popover.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n * --------------------------------------------------------------------------\n */\n\n/**\n * ------------------------------------------------------------------------\n * Constants\n * ------------------------------------------------------------------------\n */\n\nconst NAME = 'popover'\nconst VERSION = '4.0.0-alpha.6'\nconst DATA_KEY = 'bs.popover'\nconst EVENT_KEY = `.${DATA_KEY}`\nconst JQUERY_NO_CONFLICT = $.fn[NAME]\nconst CLASS_PREFIX = 'bs-popover'\nconst BSCLS_PREFIX_REGEX = new RegExp(`(^|\\\\s)${CLASS_PREFIX}\\\\S+`, 'g')\n\nconst Default = $.extend({}, Tooltip.Default, {\n placement : 'right',\n trigger : 'click',\n content : '',\n template : '
'\n + '
'\n + '

'\n + '
'\n})\n\nconst DefaultType = $.extend({}, Tooltip.DefaultType, {\n content : '(string|element|function)'\n})\n\nconst ClassName = {\n FADE : 'fade',\n SHOW : 'show'\n}\n\nconst Selector = {\n TITLE : '.popover-header',\n CONTENT : '.popover-body'\n}\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 * ------------------------------------------------------------------------\n * Class Definition\n * ------------------------------------------------------------------------\n */\n\nexport default class Popover extends Tooltip {\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 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\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 return this.tip = this.tip || $(this.config.template)[0]\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 this.setElementContent($tip.find(Selector.CONTENT), this._getContent())\n\n $tip.removeClass(`${ClassName.FADE} ${ClassName.SHOW}`)\n }\n\n // private\n\n _getContent() {\n return this.element.getAttribute('data-content')\n || (typeof this.config.content === 'function' ?\n this.config.content.call(this.element) :\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\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 && /destroy|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 (data[config] === undefined) {\n throw new Error(`No method named \"${config}\"`)\n }\n data[config]()\n }\n })\n }\n\n static _init() {\n /**\n * ------------------------------------------------------------------------\n * jQuery\n * ------------------------------------------------------------------------\n */\n\n $.fn[NAME] = Popover._jQueryInterface\n $.fn[NAME].Constructor = Popover\n $.fn[NAME].noConflict = function () {\n $.fn[NAME] = JQUERY_NO_CONFLICT\n return Popover._jQueryInterface\n }\n }\n}\n\nif (!Util.nodeEnv()) {\n $(document).ready(() => {\n Popover._init()\n })\n}\n"],"names":["NAME","VERSION","DATA_KEY","EVENT_KEY","JQUERY_NO_CONFLICT","$","fn","CLASS_PREFIX","BSCLS_PREFIX_REGEX","RegExp","Default","extend","Tooltip","DefaultType","ClassName","Selector","Event","Popover","getTitle","_getContent","attachment","getTipElement","addClass","tip","config","template","$tip","setElementContent","find","TITLE","CONTENT","removeClass","FADE","SHOW","element","getAttribute","content","call","tabClass","attr","match","length","join","each","data","_config","test","undefined","Error","_jQueryInterface","Constructor","noConflict","Util","nodeEnv","document","ready","_init"],"mappings":"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"} \ No newline at end of file diff --git a/js/dist/esm/scrollspy.js b/js/dist/esm/scrollspy.js new file mode 100644 index 000000000000..ea16d05a96c2 --- /dev/null +++ b/js/dist/esm/scrollspy.js @@ -0,0 +1,376 @@ +import $ from 'jquery'; +import Util from './util.js'; + +var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol" ? function (obj) { + return typeof obj; +} : function (obj) { + return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; +}; + + + + + + + + + + + +var classCallCheck = function (instance, Constructor) { + if (!(instance instanceof Constructor)) { + throw new TypeError("Cannot call a class as a function"); + } +}; + +var createClass = function () { + function defineProperties(target, props) { + for (var i = 0; i < props.length; i++) { + var descriptor = props[i]; + descriptor.enumerable = descriptor.enumerable || false; + descriptor.configurable = true; + if ("value" in descriptor) descriptor.writable = true; + Object.defineProperty(target, descriptor.key, descriptor); + } + } + + return function (Constructor, protoProps, staticProps) { + if (protoProps) defineProperties(Constructor.prototype, protoProps); + if (staticProps) defineProperties(Constructor, staticProps); + return Constructor; + }; +}(); + +/** + * -------------------------------------------------------------------------- + * Bootstrap (v4.0.0-alpha.6): scrollspy.js + * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) + * -------------------------------------------------------------------------- + */ + +/** + * ------------------------------------------------------------------------ + * Constants + * ------------------------------------------------------------------------ + */ + +var NAME = 'scrollspy'; +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]; + +var Default = { + offset: 10, + method: 'auto', + target: '' +}; + +var DefaultType = { + offset: 'number', + method: 'string', + target: '(string|element)' +}; + +var Event = { + ACTIVATE: 'activate' + EVENT_KEY, + SCROLL: 'scroll' + EVENT_KEY, + LOAD_DATA_API: 'load' + EVENT_KEY + DATA_API_KEY +}; + +var ClassName = { + DROPDOWN_ITEM: 'dropdown-item', + DROPDOWN_MENU: 'dropdown-menu', + ACTIVE: 'active' +}; + +var Selector = { + DATA_SPY: '[data-spy="scroll"]', + ACTIVE: '.active', + 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' +}; + +var OffsetMethod = { + OFFSET: 'offset', + POSITION: 'position' + + /** + * ------------------------------------------------------------------------ + * Class Definition + * ------------------------------------------------------------------------ + */ + +}; +var ScrollSpy = function () { + function ScrollSpy(element, config) { + var _this = 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.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 _this._process(event); + }); + + this.refresh(); + this._process(); + } + + // getters + + createClass(ScrollSpy, [{ + key: 'refresh', + + + // public + + value: function refresh() { + var _this2 = this; + + var autoMethod = this._scrollElement !== this._scrollElement.window ? OffsetMethod.POSITION : OffsetMethod.OFFSET; + + var offsetMethod = this._config.method === 'auto' ? autoMethod : this._config.method; + + var offsetBase = offsetMethod === OffsetMethod.POSITION ? this._getScrollTop() : 0; + + this._offsets = []; + this._targets = []; + + this._scrollHeight = this._getScrollHeight(); + + var targets = $.makeArray($(this._selector)); + + targets.map(function (element) { + var target = void 0; + var targetSelector = Util.getSelectorFromElement(element); + + if (targetSelector) { + target = $(targetSelector)[0]; + } + + if (target) { + var targetBCR = target.getBoundingClientRect(); + if (targetBCR.width || targetBCR.height) { + // todo (fat): remove sketch reliance on jQuery position/offset + return [$(target)[offsetMethod]().top + offsetBase, targetSelector]; + } + } + return null; + }).filter(function (item) { + return item; + }).sort(function (a, b) { + return a[0] - b[0]; + }).forEach(function (item) { + _this2._offsets.push(item[0]); + _this2._targets.push(item[1]); + }); + } + }, { + key: 'dispose', + value: function dispose() { + $.removeData(this._element, DATA_KEY); + $(this._scrollElement).off(EVENT_KEY); + + this._element = null; + this._scrollElement = null; + this._config = null; + this._selector = null; + this._offsets = null; + this._targets = null; + this._activeTarget = null; + this._scrollHeight = null; + } + + // private + + }, { + key: '_getConfig', + value: function _getConfig(config) { + config = $.extend({}, Default, config); + + if (typeof config.target !== 'string') { + var id = $(config.target).attr('id'); + if (!id) { + id = Util.getUID(NAME); + $(config.target).attr('id', id); + } + config.target = '#' + id; + } + + Util.typeCheckConfig(NAME, config, DefaultType); + + return config; + } + }, { + key: '_getScrollTop', + value: function _getScrollTop() { + return this._scrollElement === window ? this._scrollElement.pageYOffset : this._scrollElement.scrollTop; + } + }, { + key: '_getScrollHeight', + value: function _getScrollHeight() { + return this._scrollElement.scrollHeight || Math.max(document.body.scrollHeight, document.documentElement.scrollHeight); + } + }, { + key: '_getOffsetHeight', + value: function _getOffsetHeight() { + return this._scrollElement === window ? window.innerHeight : this._scrollElement.getBoundingClientRect().height; + } + }, { + key: '_process', + value: function _process() { + var scrollTop = this._getScrollTop() + this._config.offset; + var scrollHeight = this._getScrollHeight(); + var maxScroll = this._config.offset + scrollHeight - this._getOffsetHeight(); + + if (this._scrollHeight !== scrollHeight) { + this.refresh(); + } + + if (scrollTop >= maxScroll) { + var target = this._targets[this._targets.length - 1]; + + if (this._activeTarget !== target) { + this._activate(target); + } + return; + } + + if (this._activeTarget && scrollTop < this._offsets[0] && this._offsets[0] > 0) { + this._activeTarget = null; + this._clear(); + return; + } + + for (var i = this._offsets.length; i--;) { + var isActiveTarget = this._activeTarget !== this._targets[i] && scrollTop >= this._offsets[i] && (this._offsets[i + 1] === undefined || scrollTop < this._offsets[i + 1]); + + if (isActiveTarget) { + this._activate(this._targets[i]); + } + } + } + }, { + key: '_activate', + value: function _activate(target) { + this._activeTarget = target; + + this._clear(); + + var queries = this._selector.split(','); + queries = queries.map(function (selector) { + return selector + '[data-target="' + target + '"],' + (selector + '[href="' + target + '"]'); + }); + + var $link = $(queries.join(',')); + + if ($link.hasClass(ClassName.DROPDOWN_ITEM)) { + $link.closest(Selector.DROPDOWN).find(Selector.DROPDOWN_TOGGLE).addClass(ClassName.ACTIVE); + $link.addClass(ClassName.ACTIVE); + } else { + // Set triggered link as active + $link.addClass(ClassName.ACTIVE); + // Set triggered links parents as active + // With both