- B + {% include bootstrap-icon.html %}

Bootstrap is the most popular HTML, CSS, and JS framework in the world for building responsive, mobile-first projects on the web.

Download Bootstrap @@ -29,11 +29,11 @@ layout: home

Bootstrap CDN

-

When you just need to include Bootstrap's compiled CSS and JS, use the Bootstrap CDN, free from the Max CDN folks.

+

When you just need to include Bootstrap's compiled CSS and JS, use the Bootstrap CDN, free from the MaxCDN folks.

{% highlight html %} - + {% endhighlight %}
diff --git a/docs/layout/grid.md b/docs/layout/grid.md index 7a16c52a72..97ffd31613 100644 --- a/docs/layout/grid.md +++ b/docs/layout/grid.md @@ -144,7 +144,7 @@ For example, here are two grid layouts that apply to every device and viewport, 1 of 2
- 1 of 2 + 2 of 2
@@ -152,10 +152,10 @@ For example, here are two grid layouts that apply to every device and viewport, 1 of 3
- 1 of 3 + 2 of 3
- 1 of 3 + 3 of 3
diff --git a/docs/migration.md b/docs/migration.md index 2584a22e84..6bbf754cb1 100644 --- a/docs/migration.md +++ b/docs/migration.md @@ -97,6 +97,7 @@ New to Bootstrap 4 is the Reboot, a new stylesheet that builds on Normalize with - `.form-group` no longer applies styles from the `.row` via mixin, so `.row` is now required for horizontal grid layouts (e.g., `
`). - Added new `.form-control-label` class to vertically center labels with `.form-control`s. - Added custom forms support (for checkboxes, radios, selects, and file inputs). +- Renamed `.has-error` to `.has-danger`. ### Buttons @@ -196,14 +197,6 @@ Dropped entirely for the new card component. - `.panel-warning` to `.card-warning` and `.card-inverse` (or use `.bg-warning` on `.card-header`) - `.panel-danger` to `.card-danger` and `.card-inverse` (or use `.bg-danger` on `.card-header`) -### Tooltips - -- Removed support for `auto` placement options. - -### Popovers - -- Removed support for `auto` placement options. - ### Carousel - Overhauled the entire component to simplify design and styling. We have fewer styles for you to override, new indicators, and new icons. diff --git a/js/dist/button.js b/js/dist/button.js index 367e50495d..cd82242c12 100644 --- a/js/dist/button.js +++ b/js/dist/button.js @@ -82,6 +82,9 @@ var Button = function ($) { } 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'); } diff --git a/js/dist/button.js.map b/js/dist/button.js.map index ae41dc5038..899bcdaeaa 100644 --- a/js/dist/button.js.map +++ b/js/dist/button.js.map @@ -1 +1 @@ -{"version":3,"sources":["../src/button.js"],"names":["Button","$","NAME","VERSION","DATA_KEY","EVENT_KEY","DATA_API_KEY","JQUERY_NO_CONFLICT","fn","ClassName","ACTIVE","BUTTON","FOCUS","Selector","DATA_TOGGLE_CARROT","DATA_TOGGLE","INPUT","Event","CLICK_DATA_API","FOCUS_BLUR_DATA_API","element","_element","toggle","triggerChangeEvent","addAriaPressed","rootElement","closest","input","find","type","checked","hasClass","activeElement","removeClass","trigger","focus","setAttribute","toggleClass","dispose","removeData","_jQueryInterface","config","each","data","document","on","event","preventDefault","button","target","call","test","Constructor","noConflict","jQuery"],"mappings":"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","file":"button.js","sourcesContent":["/**\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\nconst Button = (($) => {\n\n\n /**\n * ------------------------------------------------------------------------\n * Constants\n * ------------------------------------------------------------------------\n */\n\n const NAME = 'button'\n const VERSION = '4.0.0-alpha.6'\n const DATA_KEY = 'bs.button'\n const EVENT_KEY = `.${DATA_KEY}`\n const DATA_API_KEY = '.data-api'\n const JQUERY_NO_CONFLICT = $.fn[NAME]\n\n const ClassName = {\n ACTIVE : 'active',\n BUTTON : 'btn',\n FOCUS : 'focus'\n }\n\n const 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\n const 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\n 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 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 }\n\n\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 * ------------------------------------------------------------------------\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 return Button\n\n})(jQuery)\n\nexport default Button\n"]} \ No newline at end of file +{"version":3,"sources":["../src/button.js"],"names":["Button","$","NAME","VERSION","DATA_KEY","EVENT_KEY","DATA_API_KEY","JQUERY_NO_CONFLICT","fn","ClassName","ACTIVE","BUTTON","FOCUS","Selector","DATA_TOGGLE_CARROT","DATA_TOGGLE","INPUT","Event","CLICK_DATA_API","FOCUS_BLUR_DATA_API","element","_element","toggle","triggerChangeEvent","addAriaPressed","rootElement","closest","input","find","type","checked","hasClass","activeElement","removeClass","hasAttribute","classList","contains","trigger","focus","setAttribute","toggleClass","dispose","removeData","_jQueryInterface","config","each","data","document","on","event","preventDefault","button","target","call","test","Constructor","noConflict","jQuery"],"mappings":"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","file":"button.js","sourcesContent":["/**\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\nconst Button = (($) => {\n\n\n /**\n * ------------------------------------------------------------------------\n * Constants\n * ------------------------------------------------------------------------\n */\n\n const NAME = 'button'\n const VERSION = '4.0.0-alpha.6'\n const DATA_KEY = 'bs.button'\n const EVENT_KEY = `.${DATA_KEY}`\n const DATA_API_KEY = '.data-api'\n const JQUERY_NO_CONFLICT = $.fn[NAME]\n\n const ClassName = {\n ACTIVE : 'active',\n BUTTON : 'btn',\n FOCUS : 'focus'\n }\n\n const 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\n const 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\n 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 }\n\n\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 * ------------------------------------------------------------------------\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 return Button\n\n})(jQuery)\n\nexport default Button\n"]} \ No newline at end of file diff --git a/js/dist/collapse.js b/js/dist/collapse.js index d5105f4421..0e2bc75e21 100644 --- a/js/dist/collapse.js +++ b/js/dist/collapse.js @@ -58,9 +58,8 @@ var Collapse = function ($) { }; var Selector = { - ACTIVES: '.card > .show, .card > .collapsing', - DATA_TOGGLE: '[data-toggle="collapse"]', - DATA_CHILDREN: 'data-children' + ACTIVES: '.show, .collapsing', + DATA_TOGGLE: '[data-toggle="collapse"]' }; /** @@ -77,20 +76,13 @@ var Collapse = function ($) { this._element = element; this._config = this._getConfig(config); this._triggerArray = $.makeArray($('[data-toggle="collapse"][href="#' + element.id + '"],' + ('[data-toggle="collapse"][data-target="#' + element.id + '"]'))); + this._parent = this._config.parent ? this._getParent() : null; if (!this._config.parent) { this._addAriaAndCollapsedClass(this._element, this._triggerArray); } - this._selectorActives = Selector.ACTIVES; - if (this._parent) { - var childrenSelector = this._parent.hasAttribute(Selector.DATA_CHILDREN) ? this._parent.getAttribute(Selector.DATA_CHILDREN) : null; - if (childrenSelector !== null) { - this._selectorActives = childrenSelector + ' > .show, ' + childrenSelector + ' > .collapsing'; - } - } - if (this._config.toggle) { this.toggle(); } @@ -119,7 +111,7 @@ var Collapse = function ($) { var activesData = void 0; if (this._parent) { - actives = $.makeArray($(this._parent).find(this._selectorActives)); + actives = $.makeArray($(this._parent).children().children(Selector.ACTIVES)); if (!actives.length) { actives = null; } diff --git a/js/dist/collapse.js.map b/js/dist/collapse.js.map index db9d13f6eb..5fa9f74faf 100644 --- a/js/dist/collapse.js.map +++ b/js/dist/collapse.js.map @@ -1 +1 @@ -{"version":3,"sources":["../src/collapse.js"],"names":["Collapse","$","NAME","VERSION","DATA_KEY","EVENT_KEY","DATA_API_KEY","JQUERY_NO_CONFLICT","fn","TRANSITION_DURATION","Default","toggle","parent","DefaultType","Event","SHOW","SHOWN","HIDE","HIDDEN","CLICK_DATA_API","ClassName","COLLAPSE","COLLAPSING","COLLAPSED","Dimension","WIDTH","HEIGHT","Selector","ACTIVES","DATA_TOGGLE","DATA_CHILDREN","element","config","_isTransitioning","_element","_config","_getConfig","_triggerArray","makeArray","id","_parent","_getParent","_addAriaAndCollapsedClass","_selectorActives","childrenSelector","hasAttribute","getAttribute","hasClass","hide","show","actives","activesData","find","length","data","startEvent","trigger","isDefaultPrevented","_jQueryInterface","call","dimension","_getDimension","removeClass","addClass","style","attr","setTransitioning","complete","Util","supportsTransitionEnd","capitalizedDimension","toUpperCase","slice","scrollSize","one","TRANSITION_END","emulateTransitionEnd","getBoundingClientRect","reflow","isTransitioning","dispose","removeData","extend","Boolean","typeCheckConfig","hasWidth","selector","each","i","_getTargetFromElement","triggerArray","isOpen","toggleClass","getSelectorFromElement","$this","test","undefined","Error","document","on","event","target","tagName","preventDefault","Constructor","noConflict","jQuery"],"mappings":"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","file":"collapse.js","sourcesContent":["import 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\nconst Collapse = (($) => {\n\n\n /**\n * ------------------------------------------------------------------------\n * Constants\n * ------------------------------------------------------------------------\n */\n\n const NAME = 'collapse'\n const VERSION = '4.0.0-alpha.6'\n const DATA_KEY = 'bs.collapse'\n const EVENT_KEY = `.${DATA_KEY}`\n const DATA_API_KEY = '.data-api'\n const JQUERY_NO_CONFLICT = $.fn[NAME]\n const TRANSITION_DURATION = 600\n\n const Default = {\n toggle : true,\n parent : ''\n }\n\n const DefaultType = {\n toggle : 'boolean',\n parent : 'string'\n }\n\n const 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\n const ClassName = {\n SHOW : 'show',\n COLLAPSE : 'collapse',\n COLLAPSING : 'collapsing',\n COLLAPSED : 'collapsed'\n }\n\n const Dimension = {\n WIDTH : 'width',\n HEIGHT : 'height'\n }\n\n const Selector = {\n ACTIVES : '.card > .show, .card > .collapsing',\n DATA_TOGGLE : '[data-toggle=\"collapse\"]',\n DATA_CHILDREN : 'data-children'\n }\n\n\n /**\n * ------------------------------------------------------------------------\n * Class Definition\n * ------------------------------------------------------------------------\n */\n\n 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 this._parent = this._config.parent ? this._getParent() : null\n\n if (!this._config.parent) {\n this._addAriaAndCollapsedClass(this._element, this._triggerArray)\n }\n\n this._selectorActives = Selector.ACTIVES\n if (this._parent) {\n const childrenSelector = this._parent.hasAttribute(Selector.DATA_CHILDREN) ? this._parent.getAttribute(Selector.DATA_CHILDREN) : null\n if (childrenSelector !== null) {\n this._selectorActives = `${childrenSelector} > .show, ${childrenSelector} > .collapsing`\n }\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).find(this._selectorActives))\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 $(this._triggerArray)\n .addClass(ClassName.COLLAPSED)\n .attr('aria-expanded', false)\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 }\n\n\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 target = Collapse._getTargetFromElement(this)\n const data = $(target).data(DATA_KEY)\n const config = data ? 'toggle' : $(this).data()\n\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 return Collapse\n\n})(jQuery)\n\nexport default Collapse\n"]} \ No newline at end of file +{"version":3,"sources":["../src/collapse.js"],"names":["Collapse","$","NAME","VERSION","DATA_KEY","EVENT_KEY","DATA_API_KEY","JQUERY_NO_CONFLICT","fn","TRANSITION_DURATION","Default","toggle","parent","DefaultType","Event","SHOW","SHOWN","HIDE","HIDDEN","CLICK_DATA_API","ClassName","COLLAPSE","COLLAPSING","COLLAPSED","Dimension","WIDTH","HEIGHT","Selector","ACTIVES","DATA_TOGGLE","element","config","_isTransitioning","_element","_config","_getConfig","_triggerArray","makeArray","id","_parent","_getParent","_addAriaAndCollapsedClass","hasClass","hide","show","actives","activesData","children","length","data","startEvent","trigger","isDefaultPrevented","_jQueryInterface","call","dimension","_getDimension","removeClass","addClass","style","attr","setTransitioning","complete","Util","supportsTransitionEnd","capitalizedDimension","toUpperCase","slice","scrollSize","one","TRANSITION_END","emulateTransitionEnd","getBoundingClientRect","reflow","isTransitioning","dispose","removeData","extend","Boolean","typeCheckConfig","hasWidth","selector","find","each","i","_getTargetFromElement","triggerArray","isOpen","toggleClass","getSelectorFromElement","$this","test","undefined","Error","document","on","event","target","tagName","preventDefault","Constructor","noConflict","jQuery"],"mappings":"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","file":"collapse.js","sourcesContent":["import 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\nconst Collapse = (($) => {\n\n\n /**\n * ------------------------------------------------------------------------\n * Constants\n * ------------------------------------------------------------------------\n */\n\n const NAME = 'collapse'\n const VERSION = '4.0.0-alpha.6'\n const DATA_KEY = 'bs.collapse'\n const EVENT_KEY = `.${DATA_KEY}`\n const DATA_API_KEY = '.data-api'\n const JQUERY_NO_CONFLICT = $.fn[NAME]\n const TRANSITION_DURATION = 600\n\n const Default = {\n toggle : true,\n parent : ''\n }\n\n const DefaultType = {\n toggle : 'boolean',\n parent : 'string'\n }\n\n const 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\n const ClassName = {\n SHOW : 'show',\n COLLAPSE : 'collapse',\n COLLAPSING : 'collapsing',\n COLLAPSED : 'collapsed'\n }\n\n const Dimension = {\n WIDTH : 'width',\n HEIGHT : 'height'\n }\n\n const Selector = {\n ACTIVES : '.show, .collapsing',\n DATA_TOGGLE : '[data-toggle=\"collapse\"]'\n }\n\n\n /**\n * ------------------------------------------------------------------------\n * Class Definition\n * ------------------------------------------------------------------------\n */\n\n 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\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 $(this._triggerArray)\n .addClass(ClassName.COLLAPSED)\n .attr('aria-expanded', false)\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 }\n\n\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 target = Collapse._getTargetFromElement(this)\n const data = $(target).data(DATA_KEY)\n const config = data ? 'toggle' : $(this).data()\n\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 return Collapse\n\n})(jQuery)\n\nexport default Collapse\n"]} \ No newline at end of file diff --git a/js/dist/dropdown.js b/js/dist/dropdown.js index 62df3f341d..a2593e1623 100644 --- a/js/dist/dropdown.js +++ b/js/dist/dropdown.js @@ -1,3 +1,5 @@ +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 _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; }; }(); function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } @@ -11,6 +13,14 @@ function _classCallCheck(instance, Constructor) { if (!(instance instanceof Cons var Dropdown = function ($) { + /** + * Check for Popper dependency + * Popper - https://popper.js.org + */ + if (typeof Popper === 'undefined') { + throw new Error('Bootstrap dropdown require Popper.js (https://popper.js.org)'); + } + /** * ------------------------------------------------------------------------ * Constants @@ -44,7 +54,10 @@ var Dropdown = function ($) { var ClassName = { DISABLED: 'disabled', - SHOW: 'show' + SHOW: 'show', + DROPUP: 'dropup', + MENURIGHT: 'dropdown-menu-right', + MENULEFT: 'dropdown-menu-left' }; var Selector = { @@ -55,6 +68,25 @@ var Dropdown = function ($) { 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 @@ -62,10 +94,13 @@ var Dropdown = function ($) { */ var Dropdown = function () { - function Dropdown(element) { + function Dropdown(element, config) { _classCallCheck(this, Dropdown); this._element = element; + this._popper = null; + this._config = this._getConfig(config); + this._menu = this._getMenuElement(); this._addEventListeners(); } @@ -75,30 +110,49 @@ var Dropdown = function ($) { // public Dropdown.prototype.toggle = function toggle() { - if (this.disabled || $(this).hasClass(ClassName.DISABLED)) { - return false; + if (this._element.disabled || $(this._element).hasClass(ClassName.DISABLED)) { + return; } - var parent = Dropdown._getParentFromElement(this); - var isActive = $(parent).hasClass(ClassName.SHOW); + var parent = Dropdown._getParentFromElement(this._element); + var isActive = $(this._menu).hasClass(ClassName.SHOW); Dropdown._clearMenus(); if (isActive) { - return false; + return; } var relatedTarget = { - relatedTarget: this + relatedTarget: this._element }; var showEvent = $.Event(Event.SHOW, relatedTarget); $(parent).trigger(showEvent); if (showEvent.isDefaultPrevented()) { - return false; + 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, { + placement: this._getPlacement(), + modifiers: { + offset: { + offset: this._config.offset + }, + flip: { + enabled: this._config.flip + } + } + }); + // 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 @@ -107,25 +161,79 @@ var Dropdown = function ($) { $('body').children().on('mouseover', null, $.noop); } - this.focus(); - this.setAttribute('aria-expanded', true); + this._element.focus(); + this._element.setAttribute('aria-expanded', true); - $(parent).toggleClass(ClassName.SHOW); - $(parent).trigger($.Event(Event.SHOWN, relatedTarget)); - - return false; + $(this._menu).toggleClass(ClassName.SHOW); + $(parent).toggleClass(ClassName.SHOW).trigger($.Event(Event.SHOWN, relatedTarget)); }; Dropdown.prototype.dispose = 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; + }; + + Dropdown.prototype.update = function update() { + if (this._popper !== null) { + this._popper.scheduleUpdate(); + } }; // private Dropdown.prototype._addEventListeners = function _addEventListeners() { - $(this._element).on(Event.CLICK, this.toggle); + var _this = this; + + $(this._element).on(Event.CLICK, function (event) { + event.preventDefault(); + event.stopPropagation(); + _this.toggle(); + }); + }; + + Dropdown.prototype._getConfig = 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; + }; + + Dropdown.prototype._getMenuElement = function _getMenuElement() { + if (!this._menu) { + var parent = Dropdown._getParentFromElement(this._element); + this._menu = $(parent).find(Selector.MENU)[0]; + } + return this._menu; + }; + + Dropdown.prototype._getPlacement = 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; }; // static @@ -133,9 +241,10 @@ var Dropdown = function ($) { Dropdown._jQueryInterface = function _jQueryInterface(config) { return this.each(function () { var data = $(this).data(DATA_KEY); + var _config = (typeof config === 'undefined' ? 'undefined' : _typeof(config)) === 'object' ? config : null; if (!data) { - data = new Dropdown(this); + data = new Dropdown(this, _config); $(this).data(DATA_KEY, data); } @@ -143,7 +252,7 @@ var Dropdown = function ($) { if (data[config] === undefined) { throw new Error('No method named "' + config + '"'); } - data[config].call(this); + data[config](); } }); }; @@ -154,13 +263,18 @@ var Dropdown = function ($) { } 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; } @@ -183,6 +297,7 @@ var Dropdown = function ($) { toggles[i].setAttribute('aria-expanded', 'false'); + $(dropdownMenu).removeClass(ClassName.SHOW); $(parent).removeClass(ClassName.SHOW).trigger($.Event(Event.HIDDEN, relatedTarget)); } }; @@ -254,6 +369,16 @@ var Dropdown = function ($) { get: function get() { return VERSION; } + }, { + key: 'Default', + get: function get() { + return Default; + } + }, { + key: 'DefaultType', + get: function get() { + return DefaultType; + } }]); return Dropdown; @@ -265,7 +390,11 @@ var Dropdown = function ($) { * ------------------------------------------------------------------------ */ - $(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, Dropdown.prototype.toggle).on(Event.CLICK_DATA_API, Selector.FORM_CHILD, function (e) { + $(document).on(Event.KEYDOWN_DATA_API, Selector.DATA_TOGGLE, Dropdown._dataApiKeydownHandler).on(Event.KEYDOWN_DATA_API, Selector.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(); }); @@ -283,5 +412,5 @@ var Dropdown = function ($) { }; return Dropdown; -}(jQuery); +}(jQuery); /* global Popper */ //# sourceMappingURL=dropdown.js.map \ No newline at end of file diff --git a/js/dist/dropdown.js.map b/js/dist/dropdown.js.map index c7b189283b..bce6f0161a 100644 --- a/js/dist/dropdown.js.map +++ b/js/dist/dropdown.js.map @@ -1 +1 @@ -{"version":3,"sources":["../src/dropdown.js"],"names":["Dropdown","$","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","HIDE","HIDDEN","SHOW","SHOWN","CLICK","CLICK_DATA_API","KEYDOWN_DATA_API","KEYUP_DATA_API","ClassName","DISABLED","Selector","DATA_TOGGLE","FORM_CHILD","MENU","NAVBAR_NAV","VISIBLE_ITEMS","element","_element","_addEventListeners","toggle","disabled","hasClass","parent","_getParentFromElement","isActive","_clearMenus","relatedTarget","showEvent","trigger","isDefaultPrevented","document","documentElement","closest","length","children","on","noop","focus","setAttribute","toggleClass","dispose","removeData","off","_jQueryInterface","config","each","data","undefined","Error","call","event","which","type","toggles","makeArray","i","test","target","tagName","contains","hideEvent","removeClass","selector","Util","getSelectorFromElement","parentNode","_dataApiKeydownHandler","preventDefault","stopPropagation","find","items","get","index","indexOf","prototype","e","Constructor","noConflict","jQuery"],"mappings":"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","file":"dropdown.js","sourcesContent":["import 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\nconst Dropdown = (($) => {\n\n\n /**\n * ------------------------------------------------------------------------\n * Constants\n * ------------------------------------------------------------------------\n */\n\n const NAME = 'dropdown'\n const VERSION = '4.0.0-alpha.6'\n const DATA_KEY = 'bs.dropdown'\n const EVENT_KEY = `.${DATA_KEY}`\n const DATA_API_KEY = '.data-api'\n const JQUERY_NO_CONFLICT = $.fn[NAME]\n const ESCAPE_KEYCODE = 27 // KeyboardEvent.which value for Escape (Esc) key\n const SPACE_KEYCODE = 32 // KeyboardEvent.which value for space key\n const TAB_KEYCODE = 9 // KeyboardEvent.which value for tab key\n const ARROW_UP_KEYCODE = 38 // KeyboardEvent.which value for up arrow key\n const ARROW_DOWN_KEYCODE = 40 // KeyboardEvent.which value for down arrow key\n const RIGHT_MOUSE_BUTTON_WHICH = 3 // MouseEvent.which value for the right button (assuming a right-handed mouse)\n const REGEXP_KEYDOWN = new RegExp(`${ARROW_UP_KEYCODE}|${ARROW_DOWN_KEYCODE}|${ESCAPE_KEYCODE}`)\n\n const 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\n const ClassName = {\n DISABLED : 'disabled',\n SHOW : 'show'\n }\n\n const 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\n\n /**\n * ------------------------------------------------------------------------\n * Class Definition\n * ------------------------------------------------------------------------\n */\n\n class Dropdown {\n\n constructor(element) {\n this._element = element\n\n this._addEventListeners()\n }\n\n\n // getters\n\n static get VERSION() {\n return VERSION\n }\n\n\n // public\n\n toggle() {\n if (this.disabled || $(this).hasClass(ClassName.DISABLED)) {\n return false\n }\n\n const parent = Dropdown._getParentFromElement(this)\n const isActive = $(parent).hasClass(ClassName.SHOW)\n\n Dropdown._clearMenus()\n\n if (isActive) {\n return false\n }\n\n const relatedTarget = {\n relatedTarget : this\n }\n const showEvent = $.Event(Event.SHOW, relatedTarget)\n\n $(parent).trigger(showEvent)\n\n if (showEvent.isDefaultPrevented()) {\n return false\n }\n\n // if this is a touch-enabled device we add extra\n // empty mouseover listeners to the body's immediate children;\n // only needed because of broken event delegation on iOS\n // https://www.quirksmode.org/blog/archives/2014/02/mouse_event_bub.html\n if ('ontouchstart' in document.documentElement &&\n !$(parent).closest(Selector.NAVBAR_NAV).length) {\n $('body').children().on('mouseover', null, $.noop)\n }\n\n this.focus()\n this.setAttribute('aria-expanded', true)\n\n $(parent).toggleClass(ClassName.SHOW)\n $(parent).trigger($.Event(Event.SHOWN, relatedTarget))\n\n return false\n }\n\n dispose() {\n $.removeData(this._element, DATA_KEY)\n $(this._element).off(EVENT_KEY)\n this._element = null\n }\n\n\n // private\n\n _addEventListeners() {\n $(this._element).on(Event.CLICK, this.toggle)\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 Dropdown(this)\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].call(this)\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\n for (let i = 0; i < toggles.length; i++) {\n const parent = Dropdown._getParentFromElement(toggles[i])\n const relatedTarget = {\n relatedTarget : toggles[i]\n }\n\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 $(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 }\n\n\n /**\n * ------------------------------------------------------------------------\n * Data Api implementation\n * ------------------------------------------------------------------------\n */\n\n $(document)\n .on(Event.KEYDOWN_DATA_API, Selector.DATA_TOGGLE, Dropdown._dataApiKeydownHandler)\n .on(Event.KEYDOWN_DATA_API, Selector.MENU, Dropdown._dataApiKeydownHandler)\n .on(`${Event.CLICK_DATA_API} ${Event.KEYUP_DATA_API}`, Dropdown._clearMenus)\n .on(Event.CLICK_DATA_API, Selector.DATA_TOGGLE, Dropdown.prototype.toggle)\n .on(Event.CLICK_DATA_API, Selector.FORM_CHILD, (e) => {\n e.stopPropagation()\n })\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 return Dropdown\n\n})(jQuery)\n\nexport default Dropdown\n"]} \ No newline at end of file +{"version":3,"sources":["../src/dropdown.js"],"names":["Dropdown","$","Popper","Error","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","HIDE","HIDDEN","SHOW","SHOWN","CLICK","CLICK_DATA_API","KEYDOWN_DATA_API","KEYUP_DATA_API","ClassName","DISABLED","DROPUP","MENURIGHT","MENULEFT","Selector","DATA_TOGGLE","FORM_CHILD","MENU","NAVBAR_NAV","VISIBLE_ITEMS","AttachmentMap","TOP","TOPEND","BOTTOM","BOTTOMEND","Default","placement","offset","flip","DefaultType","element","config","_element","_popper","_config","_getConfig","_menu","_getMenuElement","_addEventListeners","toggle","disabled","hasClass","parent","_getParentFromElement","isActive","_clearMenus","relatedTarget","showEvent","trigger","isDefaultPrevented","_getPlacement","modifiers","enabled","document","documentElement","closest","length","children","on","noop","focus","setAttribute","toggleClass","dispose","removeData","off","destroy","update","scheduleUpdate","event","preventDefault","stopPropagation","elementData","data","undefined","toUpperCase","extend","constructor","Util","typeCheckConfig","find","$parentDropdown","_jQueryInterface","each","which","type","toggles","makeArray","i","context","dropdownMenu","test","target","tagName","contains","hideEvent","removeClass","selector","getSelectorFromElement","parentNode","_dataApiKeydownHandler","items","get","index","indexOf","call","e","Constructor","noConflict","jQuery"],"mappings":"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","file":"dropdown.js","sourcesContent":["/* global Popper */\n\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\nconst Dropdown = (($) => {\n\n /**\n * Check for Popper dependency\n * Popper - https://popper.js.org\n */\n if (typeof Popper === 'undefined') {\n throw new Error('Bootstrap dropdown require Popper.js (https://popper.js.org)')\n }\n\n /**\n * ------------------------------------------------------------------------\n * Constants\n * ------------------------------------------------------------------------\n */\n\n const NAME = 'dropdown'\n const VERSION = '4.0.0-alpha.6'\n const DATA_KEY = 'bs.dropdown'\n const EVENT_KEY = `.${DATA_KEY}`\n const DATA_API_KEY = '.data-api'\n const JQUERY_NO_CONFLICT = $.fn[NAME]\n const ESCAPE_KEYCODE = 27 // KeyboardEvent.which value for Escape (Esc) key\n const SPACE_KEYCODE = 32 // KeyboardEvent.which value for space key\n const TAB_KEYCODE = 9 // KeyboardEvent.which value for tab key\n const ARROW_UP_KEYCODE = 38 // KeyboardEvent.which value for up arrow key\n const ARROW_DOWN_KEYCODE = 40 // KeyboardEvent.which value for down arrow key\n const RIGHT_MOUSE_BUTTON_WHICH = 3 // MouseEvent.which value for the right button (assuming a right-handed mouse)\n const REGEXP_KEYDOWN = new RegExp(`${ARROW_UP_KEYCODE}|${ARROW_DOWN_KEYCODE}|${ESCAPE_KEYCODE}`)\n\n const 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\n const ClassName = {\n DISABLED : 'disabled',\n SHOW : 'show',\n DROPUP : 'dropup',\n MENURIGHT : 'dropdown-menu-right',\n MENULEFT : 'dropdown-menu-left'\n }\n\n const 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\n const AttachmentMap = {\n TOP : 'top-start',\n TOPEND : 'top-end',\n BOTTOM : 'bottom-start',\n BOTTOMEND : 'bottom-end'\n }\n\n const Default = {\n placement : AttachmentMap.BOTTOM,\n offset : 0,\n flip : true\n }\n\n const DefaultType = {\n placement : 'string',\n offset : '(number|string)',\n flip : 'boolean'\n }\n\n\n /**\n * ------------------------------------------------------------------------\n * Class Definition\n * ------------------------------------------------------------------------\n */\n\n 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\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 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, {\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 // 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 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 }\n else {\n if ($(this._menu).hasClass(ClassName.MENURIGHT)) {\n placement = AttachmentMap.BOTTOMEND\n }\n }\n return placement\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 }\n\n\n /**\n * ------------------------------------------------------------------------\n * Data Api implementation\n * ------------------------------------------------------------------------\n */\n\n $(document)\n .on(Event.KEYDOWN_DATA_API, Selector.DATA_TOGGLE, Dropdown._dataApiKeydownHandler)\n .on(Event.KEYDOWN_DATA_API, Selector.MENU, Dropdown._dataApiKeydownHandler)\n .on(`${Event.CLICK_DATA_API} ${Event.KEYUP_DATA_API}`, Dropdown._clearMenus)\n .on(Event.CLICK_DATA_API, Selector.DATA_TOGGLE, function (event) {\n event.preventDefault()\n event.stopPropagation()\n Dropdown._jQueryInterface.call($(this), 'toggle')\n })\n .on(Event.CLICK_DATA_API, Selector.FORM_CHILD, (e) => {\n e.stopPropagation()\n })\n\n\n /**\n * ------------------------------------------------------------------------\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 return Dropdown\n\n})(jQuery)\n\nexport default Dropdown\n"]} \ No newline at end of file diff --git a/js/dist/popover.js b/js/dist/popover.js index d570fa3723..1e82e8210b 100644 --- a/js/dist/popover.js +++ b/js/dist/popover.js @@ -28,12 +28,14 @@ var Popover = function ($) { 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: '' + template: '' }); var DefaultType = $.extend({}, Tooltip.DefaultType, { @@ -84,6 +86,10 @@ var Popover = function ($) { return this.getTitle() || this._getContent(); }; + Popover.prototype.addAttachmentClass = function addAttachmentClass(attachment) { + $(this.getTipElement()).addClass(CLASS_PREFIX + '-' + attachment); + }; + Popover.prototype.getTipElement = function getTipElement() { return this.tip = this.tip || $(this.config.template)[0]; }; @@ -96,8 +102,6 @@ var Popover = function ($) { this.setElementContent($tip.find(Selector.CONTENT), this._getContent()); $tip.removeClass(ClassName.FADE + ' ' + ClassName.SHOW); - - this.cleanupTether(); }; // private @@ -106,6 +110,14 @@ var Popover = function ($) { return this.element.getAttribute('data-content') || (typeof this.config.content === 'function' ? this.config.content.call(this.element) : this.config.content); }; + Popover.prototype._cleanTipClass = 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 Popover._jQueryInterface = function _jQueryInterface(config) { diff --git a/js/dist/popover.js.map b/js/dist/popover.js.map index e8bf8e9d93..727ee815f3 100644 --- a/js/dist/popover.js.map +++ b/js/dist/popover.js.map @@ -1 +1 @@ -{"version":3,"sources":["../src/popover.js"],"names":["Popover","$","NAME","VERSION","DATA_KEY","EVENT_KEY","JQUERY_NO_CONFLICT","fn","Default","extend","Tooltip","placement","trigger","content","template","DefaultType","ClassName","FADE","SHOW","Selector","TITLE","CONTENT","Event","HIDE","HIDDEN","SHOWN","INSERTED","CLICK","FOCUSIN","FOCUSOUT","MOUSEENTER","MOUSELEAVE","isWithContent","getTitle","_getContent","getTipElement","tip","config","setContent","$tip","setElementContent","find","removeClass","cleanupTether","element","getAttribute","call","_jQueryInterface","each","data","_config","test","undefined","Error","Constructor","noConflict","jQuery"],"mappings":"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","file":"popover.js","sourcesContent":["import Tooltip from './tooltip'\n\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\nconst Popover = (($) => {\n\n\n /**\n * ------------------------------------------------------------------------\n * Constants\n * ------------------------------------------------------------------------\n */\n\n const NAME = 'popover'\n const VERSION = '4.0.0-alpha.6'\n const DATA_KEY = 'bs.popover'\n const EVENT_KEY = `.${DATA_KEY}`\n const JQUERY_NO_CONFLICT = $.fn[NAME]\n\n const Default = $.extend({}, Tooltip.Default, {\n placement : 'right',\n trigger : 'click',\n content : '',\n template : '
'\n + '

'\n + '
'\n })\n\n const DefaultType = $.extend({}, Tooltip.DefaultType, {\n content : '(string|element|function)'\n })\n\n const ClassName = {\n FADE : 'fade',\n SHOW : 'show'\n }\n\n const Selector = {\n TITLE : '.popover-title',\n CONTENT : '.popover-content'\n }\n\n const 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\n class Popover extends Tooltip {\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 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 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 this.cleanupTether()\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\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\n\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 return Popover\n\n})(jQuery)\n\nexport default Popover\n"]} \ No newline at end of file +{"version":3,"sources":["../src/popover.js"],"names":["Popover","$","NAME","VERSION","DATA_KEY","EVENT_KEY","JQUERY_NO_CONFLICT","fn","CLASS_PREFIX","BSCLS_PREFIX_REGEX","RegExp","Default","extend","Tooltip","placement","trigger","content","template","DefaultType","ClassName","FADE","SHOW","Selector","TITLE","CONTENT","Event","HIDE","HIDDEN","SHOWN","INSERTED","CLICK","FOCUSIN","FOCUSOUT","MOUSEENTER","MOUSELEAVE","isWithContent","getTitle","_getContent","addAttachmentClass","attachment","getTipElement","addClass","tip","config","setContent","$tip","setElementContent","find","removeClass","element","getAttribute","call","_cleanTipClass","tabClass","attr","match","length","join","_jQueryInterface","each","data","_config","test","undefined","Error","Constructor","noConflict","jQuery"],"mappings":"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","file":"popover.js","sourcesContent":["import Tooltip from './tooltip'\n\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\nconst Popover = (($) => {\n\n\n /**\n * ------------------------------------------------------------------------\n * Constants\n * ------------------------------------------------------------------------\n */\n\n const NAME = 'popover'\n const VERSION = '4.0.0-alpha.6'\n const DATA_KEY = 'bs.popover'\n const EVENT_KEY = `.${DATA_KEY}`\n const JQUERY_NO_CONFLICT = $.fn[NAME]\n const CLASS_PREFIX = 'bs-popover'\n const BSCLS_PREFIX_REGEX = new RegExp(`(^|\\\\s)${CLASS_PREFIX}\\\\S+`, 'g')\n\n const Default = $.extend({}, Tooltip.Default, {\n placement : 'right',\n trigger : 'click',\n content : '',\n template : '
'\n + '
'\n + '

'\n + '
'\n })\n\n const DefaultType = $.extend({}, Tooltip.DefaultType, {\n content : '(string|element|function)'\n })\n\n const ClassName = {\n FADE : 'fade',\n SHOW : 'show'\n }\n\n const Selector = {\n TITLE : '.popover-title',\n CONTENT : '.popover-content'\n }\n\n const 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\n class Popover extends Tooltip {\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 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\n\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 return Popover\n\n})(jQuery)\n\nexport default Popover\n"]} \ No newline at end of file diff --git a/js/dist/tab.js b/js/dist/tab.js index 079f98a638..fb0749ed54 100644 --- a/js/dist/tab.js +++ b/js/dist/tab.js @@ -129,7 +129,7 @@ var Tab = function ($) { }; Tab.prototype.dispose = function dispose() { - $.removeClass(this._element, DATA_KEY); + $.removeData(this._element, DATA_KEY); this._element = null; }; diff --git a/js/dist/tab.js.map b/js/dist/tab.js.map index 80117e0267..7e0d8179d9 100644 --- a/js/dist/tab.js.map +++ b/js/dist/tab.js.map @@ -1 +1 @@ -{"version":3,"sources":["../src/tab.js"],"names":["Tab","$","NAME","VERSION","DATA_KEY","EVENT_KEY","DATA_API_KEY","JQUERY_NO_CONFLICT","fn","TRANSITION_DURATION","Event","HIDE","HIDDEN","SHOW","SHOWN","CLICK_DATA_API","ClassName","DROPDOWN_MENU","ACTIVE","DISABLED","FADE","Selector","DROPDOWN","NAV_LIST_GROUP","DATA_TOGGLE","DROPDOWN_TOGGLE","DROPDOWN_ACTIVE_CHILD","element","_element","show","parentNode","nodeType","Node","ELEMENT_NODE","hasClass","target","previous","listElement","closest","selector","Util","getSelectorFromElement","makeArray","find","length","hideEvent","relatedTarget","showEvent","trigger","isDefaultPrevented","_activate","complete","hiddenEvent","shownEvent","dispose","removeClass","container","callback","active","isTransitioning","supportsTransitionEnd","_transitionComplete","one","TRANSITION_END","emulateTransitionEnd","dropdownChild","setAttribute","addClass","reflow","dropdownElement","_jQueryInterface","config","each","$this","data","undefined","Error","document","on","event","preventDefault","call","Constructor","noConflict","jQuery"],"mappings":"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","file":"tab.js","sourcesContent":["import Util from './util'\n\n\n/**\n * --------------------------------------------------------------------------\n * Bootstrap (v4.0.0-alpha.6): tab.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nconst Tab = (($) => {\n\n\n /**\n * ------------------------------------------------------------------------\n * Constants\n * ------------------------------------------------------------------------\n */\n\n const NAME = 'tab'\n const VERSION = '4.0.0-alpha.6'\n const DATA_KEY = 'bs.tab'\n const EVENT_KEY = `.${DATA_KEY}`\n const DATA_API_KEY = '.data-api'\n const JQUERY_NO_CONFLICT = $.fn[NAME]\n const TRANSITION_DURATION = 150\n\n const Event = {\n HIDE : `hide${EVENT_KEY}`,\n HIDDEN : `hidden${EVENT_KEY}`,\n SHOW : `show${EVENT_KEY}`,\n SHOWN : `shown${EVENT_KEY}`,\n CLICK_DATA_API : `click${EVENT_KEY}${DATA_API_KEY}`\n }\n\n const ClassName = {\n DROPDOWN_MENU : 'dropdown-menu',\n ACTIVE : 'active',\n DISABLED : 'disabled',\n FADE : 'fade',\n SHOW : 'show'\n }\n\n const Selector = {\n DROPDOWN : '.dropdown',\n NAV_LIST_GROUP : '.nav, .list-group',\n ACTIVE : '.active',\n DATA_TOGGLE : '[data-toggle=\"tab\"], [data-toggle=\"pill\"], [data-toggle=\"list\"]',\n DROPDOWN_TOGGLE : '.dropdown-toggle',\n DROPDOWN_ACTIVE_CHILD : '> .dropdown-menu .active'\n }\n\n\n /**\n * ------------------------------------------------------------------------\n * Class Definition\n * ------------------------------------------------------------------------\n */\n\n class Tab {\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 show() {\n if (this._element.parentNode &&\n this._element.parentNode.nodeType === Node.ELEMENT_NODE &&\n $(this._element).hasClass(ClassName.ACTIVE) ||\n $(this._element).hasClass(ClassName.DISABLED)) {\n return\n }\n\n let target\n let previous\n const listElement = $(this._element).closest(Selector.NAV_LIST_GROUP)[0]\n const selector = Util.getSelectorFromElement(this._element)\n\n if (listElement) {\n previous = $.makeArray($(listElement).find(Selector.ACTIVE))\n previous = previous[previous.length - 1]\n }\n\n const hideEvent = $.Event(Event.HIDE, {\n relatedTarget: this._element\n })\n\n const showEvent = $.Event(Event.SHOW, {\n relatedTarget: previous\n })\n\n if (previous) {\n $(previous).trigger(hideEvent)\n }\n\n $(this._element).trigger(showEvent)\n\n if (showEvent.isDefaultPrevented() ||\n hideEvent.isDefaultPrevented()) {\n return\n }\n\n if (selector) {\n target = $(selector)[0]\n }\n\n this._activate(\n this._element,\n listElement\n )\n\n const complete = () => {\n const hiddenEvent = $.Event(Event.HIDDEN, {\n relatedTarget: this._element\n })\n\n const shownEvent = $.Event(Event.SHOWN, {\n relatedTarget: previous\n })\n\n $(previous).trigger(hiddenEvent)\n $(this._element).trigger(shownEvent)\n }\n\n if (target) {\n this._activate(target, target.parentNode, complete)\n } else {\n complete()\n }\n }\n\n dispose() {\n $.removeClass(this._element, DATA_KEY)\n this._element = null\n }\n\n\n // private\n\n _activate(element, container, callback) {\n const active = $(container).find(Selector.ACTIVE)[0]\n const isTransitioning = callback\n && Util.supportsTransitionEnd()\n && (active && $(active).hasClass(ClassName.FADE))\n\n const complete = () => this._transitionComplete(\n element,\n active,\n isTransitioning,\n callback\n )\n\n if (active && isTransitioning) {\n $(active)\n .one(Util.TRANSITION_END, complete)\n .emulateTransitionEnd(TRANSITION_DURATION)\n\n } else {\n complete()\n }\n\n if (active) {\n $(active).removeClass(ClassName.SHOW)\n }\n }\n\n _transitionComplete(element, active, isTransitioning, callback) {\n if (active) {\n $(active).removeClass(ClassName.ACTIVE)\n\n const dropdownChild = $(active.parentNode).find(\n Selector.DROPDOWN_ACTIVE_CHILD\n )[0]\n\n if (dropdownChild) {\n $(dropdownChild).removeClass(ClassName.ACTIVE)\n }\n\n active.setAttribute('aria-expanded', false)\n }\n\n $(element).addClass(ClassName.ACTIVE)\n element.setAttribute('aria-expanded', true)\n\n if (isTransitioning) {\n Util.reflow(element)\n $(element).addClass(ClassName.SHOW)\n } else {\n $(element).removeClass(ClassName.FADE)\n }\n\n if (element.parentNode &&\n $(element.parentNode).hasClass(ClassName.DROPDOWN_MENU)) {\n\n const dropdownElement = $(element).closest(Selector.DROPDOWN)[0]\n if (dropdownElement) {\n $(dropdownElement).find(Selector.DROPDOWN_TOGGLE).addClass(ClassName.ACTIVE)\n }\n\n element.setAttribute('aria-expanded', true)\n }\n\n if (callback) {\n callback()\n }\n }\n\n\n // static\n\n static _jQueryInterface(config) {\n return this.each(function () {\n const $this = $(this)\n let data = $this.data(DATA_KEY)\n\n if (!data) {\n data = new Tab(this)\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 }\n\n\n /**\n * ------------------------------------------------------------------------\n * Data Api implementation\n * ------------------------------------------------------------------------\n */\n\n $(document)\n .on(Event.CLICK_DATA_API, Selector.DATA_TOGGLE, function (event) {\n event.preventDefault()\n Tab._jQueryInterface.call($(this), 'show')\n })\n\n\n /**\n * ------------------------------------------------------------------------\n * jQuery\n * ------------------------------------------------------------------------\n */\n\n $.fn[NAME] = Tab._jQueryInterface\n $.fn[NAME].Constructor = Tab\n $.fn[NAME].noConflict = function () {\n $.fn[NAME] = JQUERY_NO_CONFLICT\n return Tab._jQueryInterface\n }\n\n return Tab\n\n})(jQuery)\n\nexport default Tab\n"]} \ No newline at end of file +{"version":3,"sources":["../src/tab.js"],"names":["Tab","$","NAME","VERSION","DATA_KEY","EVENT_KEY","DATA_API_KEY","JQUERY_NO_CONFLICT","fn","TRANSITION_DURATION","Event","HIDE","HIDDEN","SHOW","SHOWN","CLICK_DATA_API","ClassName","DROPDOWN_MENU","ACTIVE","DISABLED","FADE","Selector","DROPDOWN","NAV_LIST_GROUP","DATA_TOGGLE","DROPDOWN_TOGGLE","DROPDOWN_ACTIVE_CHILD","element","_element","show","parentNode","nodeType","Node","ELEMENT_NODE","hasClass","target","previous","listElement","closest","selector","Util","getSelectorFromElement","makeArray","find","length","hideEvent","relatedTarget","showEvent","trigger","isDefaultPrevented","_activate","complete","hiddenEvent","shownEvent","dispose","removeData","container","callback","active","isTransitioning","supportsTransitionEnd","_transitionComplete","one","TRANSITION_END","emulateTransitionEnd","removeClass","dropdownChild","setAttribute","addClass","reflow","dropdownElement","_jQueryInterface","config","each","$this","data","undefined","Error","document","on","event","preventDefault","call","Constructor","noConflict","jQuery"],"mappings":";;;;AAGA;;;;;;;AAOA,IAAMA,MAAO,UAACC,CAAD,EAAO;;AAGlB;;;;;;AAMA,MAAMC,OAAsB,KAA5B;AACA,MAAMC,UAAsB,eAA5B;AACA,MAAMC,WAAsB,QAA5B;AACA,MAAMC,kBAA0BD,QAAhC;AACA,MAAME,eAAsB,WAA5B;AACA,MAAMC,qBAAsBN,EAAEO,EAAF,CAAKN,IAAL,CAA5B;AACA,MAAMO,sBAAsB,GAA5B;;AAEA,MAAMC,QAAQ;AACZC,mBAAwBN,SADZ;AAEZO,uBAA0BP,SAFd;AAGZQ,mBAAwBR,SAHZ;AAIZS,qBAAyBT,SAJb;AAKZU,8BAAyBV,SAAzB,GAAqCC;AALzB,GAAd;;AAQA,MAAMU,YAAY;AAChBC,mBAAgB,eADA;AAEhBC,YAAgB,QAFA;AAGhBC,cAAgB,UAHA;AAIhBC,UAAgB,MAJA;AAKhBP,UAAgB;AALA,GAAlB;;AAQA,MAAMQ,WAAW;AACfC,cAAwB,WADT;AAEfC,oBAAwB,mBAFT;AAGfL,YAAwB,SAHT;AAIfM,iBAAwB,iEAJT;AAKfC,qBAAwB,kBALT;AAMfC,2BAAwB;AANT,GAAjB;;AAUA;;;;;;AA3CkB,MAiDZ1B,GAjDY;AAmDhB,iBAAY2B,OAAZ,EAAqB;AAAA;;AACnB,WAAKC,QAAL,GAAgBD,OAAhB;AACD;;AAGD;;AAOA;;AA/DgB,kBAiEhBE,IAjEgB,mBAiET;AAAA;;AACL,UAAI,KAAKD,QAAL,CAAcE,UAAd,IACA,KAAKF,QAAL,CAAcE,UAAd,CAAyBC,QAAzB,KAAsCC,KAAKC,YAD3C,IAEAhC,EAAE,KAAK2B,QAAP,EAAiBM,QAAjB,CAA0BlB,UAAUE,MAApC,CAFA,IAGAjB,EAAE,KAAK2B,QAAP,EAAiBM,QAAjB,CAA0BlB,UAAUG,QAApC,CAHJ,EAGmD;AACjD;AACD;;AAED,UAAIgB,eAAJ;AACA,UAAIC,iBAAJ;AACA,UAAMC,cAAcpC,EAAE,KAAK2B,QAAP,EAAiBU,OAAjB,CAAyBjB,SAASE,cAAlC,EAAkD,CAAlD,CAApB;AACA,UAAMgB,WAAcC,KAAKC,sBAAL,CAA4B,KAAKb,QAAjC,CAApB;;AAEA,UAAIS,WAAJ,EAAiB;AACfD,mBAAWnC,EAAEyC,SAAF,CAAYzC,EAAEoC,WAAF,EAAeM,IAAf,CAAoBtB,SAASH,MAA7B,CAAZ,CAAX;AACAkB,mBAAWA,SAASA,SAASQ,MAAT,GAAkB,CAA3B,CAAX;AACD;;AAED,UAAMC,YAAY5C,EAAES,KAAF,CAAQA,MAAMC,IAAd,EAAoB;AACpCmC,uBAAe,KAAKlB;AADgB,OAApB,CAAlB;;AAIA,UAAMmB,YAAY9C,EAAES,KAAF,CAAQA,MAAMG,IAAd,EAAoB;AACpCiC,uBAAeV;AADqB,OAApB,CAAlB;;AAIA,UAAIA,QAAJ,EAAc;AACZnC,UAAEmC,QAAF,EAAYY,OAAZ,CAAoBH,SAApB;AACD;;AAED5C,QAAE,KAAK2B,QAAP,EAAiBoB,OAAjB,CAAyBD,SAAzB;;AAEA,UAAIA,UAAUE,kBAAV,MACDJ,UAAUI,kBAAV,EADH,EACmC;AACjC;AACD;;AAED,UAAIV,QAAJ,EAAc;AACZJ,iBAASlC,EAAEsC,QAAF,EAAY,CAAZ,CAAT;AACD;;AAED,WAAKW,SAAL,CACE,KAAKtB,QADP,EAEES,WAFF;;AAKA,UAAMc,WAAW,SAAXA,QAAW,GAAM;AACrB,YAAMC,cAAcnD,EAAES,KAAF,CAAQA,MAAME,MAAd,EAAsB;AACxCkC,yBAAe,MAAKlB;AADoB,SAAtB,CAApB;;AAIA,YAAMyB,aAAapD,EAAES,KAAF,CAAQA,MAAMI,KAAd,EAAqB;AACtCgC,yBAAeV;AADuB,SAArB,CAAnB;;AAIAnC,UAAEmC,QAAF,EAAYY,OAAZ,CAAoBI,WAApB;AACAnD,UAAE,MAAK2B,QAAP,EAAiBoB,OAAjB,CAAyBK,UAAzB;AACD,OAXD;;AAaA,UAAIlB,MAAJ,EAAY;AACV,aAAKe,SAAL,CAAef,MAAf,EAAuBA,OAAOL,UAA9B,EAA0CqB,QAA1C;AACD,OAFD,MAEO;AACLA;AACD;AACF,KAjIe;;AAAA,kBAmIhBG,OAnIgB,sBAmIN;AACRrD,QAAEsD,UAAF,CAAa,KAAK3B,QAAlB,EAA4BxB,QAA5B;AACA,WAAKwB,QAAL,GAAgB,IAAhB;AACD,KAtIe;;AAyIhB;;AAzIgB,kBA2IhBsB,SA3IgB,sBA2INvB,OA3IM,EA2IG6B,SA3IH,EA2IcC,QA3Id,EA2IwB;AAAA;;AACtC,UAAMC,SAAkBzD,EAAEuD,SAAF,EAAab,IAAb,CAAkBtB,SAASH,MAA3B,EAAmC,CAAnC,CAAxB;AACA,UAAMyC,kBAAkBF,YACnBjB,KAAKoB,qBAAL,EADmB,IAElBF,UAAUzD,EAAEyD,MAAF,EAAUxB,QAAV,CAAmBlB,UAAUI,IAA7B,CAFhB;;AAIA,UAAM+B,WAAW,SAAXA,QAAW;AAAA,eAAM,OAAKU,mBAAL,CACrBlC,OADqB,EAErB+B,MAFqB,EAGrBC,eAHqB,EAIrBF,QAJqB,CAAN;AAAA,OAAjB;;AAOA,UAAIC,UAAUC,eAAd,EAA+B;AAC7B1D,UAAEyD,MAAF,EACGI,GADH,CACOtB,KAAKuB,cADZ,EAC4BZ,QAD5B,EAEGa,oBAFH,CAEwBvD,mBAFxB;AAID,OALD,MAKO;AACL0C;AACD;;AAED,UAAIO,MAAJ,EAAY;AACVzD,UAAEyD,MAAF,EAAUO,WAAV,CAAsBjD,UAAUH,IAAhC;AACD;AACF,KApKe;;AAAA,kBAsKhBgD,mBAtKgB,gCAsKIlC,OAtKJ,EAsKa+B,MAtKb,EAsKqBC,eAtKrB,EAsKsCF,QAtKtC,EAsKgD;AAC9D,UAAIC,MAAJ,EAAY;AACVzD,UAAEyD,MAAF,EAAUO,WAAV,CAAsBjD,UAAUE,MAAhC;;AAEA,YAAMgD,gBAAgBjE,EAAEyD,OAAO5B,UAAT,EAAqBa,IAArB,CACpBtB,SAASK,qBADW,EAEpB,CAFoB,CAAtB;;AAIA,YAAIwC,aAAJ,EAAmB;AACjBjE,YAAEiE,aAAF,EAAiBD,WAAjB,CAA6BjD,UAAUE,MAAvC;AACD;;AAEDwC,eAAOS,YAAP,CAAoB,eAApB,EAAqC,KAArC;AACD;;AAEDlE,QAAE0B,OAAF,EAAWyC,QAAX,CAAoBpD,UAAUE,MAA9B;AACAS,cAAQwC,YAAR,CAAqB,eAArB,EAAsC,IAAtC;;AAEA,UAAIR,eAAJ,EAAqB;AACnBnB,aAAK6B,MAAL,CAAY1C,OAAZ;AACA1B,UAAE0B,OAAF,EAAWyC,QAAX,CAAoBpD,UAAUH,IAA9B;AACD,OAHD,MAGO;AACLZ,UAAE0B,OAAF,EAAWsC,WAAX,CAAuBjD,UAAUI,IAAjC;AACD;;AAED,UAAIO,QAAQG,UAAR,IACA7B,EAAE0B,QAAQG,UAAV,EAAsBI,QAAtB,CAA+BlB,UAAUC,aAAzC,CADJ,EAC6D;;AAE3D,YAAMqD,kBAAkBrE,EAAE0B,OAAF,EAAWW,OAAX,CAAmBjB,SAASC,QAA5B,EAAsC,CAAtC,CAAxB;AACA,YAAIgD,eAAJ,EAAqB;AACnBrE,YAAEqE,eAAF,EAAmB3B,IAAnB,CAAwBtB,SAASI,eAAjC,EAAkD2C,QAAlD,CAA2DpD,UAAUE,MAArE;AACD;;AAEDS,gBAAQwC,YAAR,CAAqB,eAArB,EAAsC,IAAtC;AACD;;AAED,UAAIV,QAAJ,EAAc;AACZA;AACD;AACF,KA7Me;;AAgNhB;;AAhNgB,QAkNTc,gBAlNS,6BAkNQC,MAlNR,EAkNgB;AAC9B,aAAO,KAAKC,IAAL,CAAU,YAAY;AAC3B,YAAMC,QAAQzE,EAAE,IAAF,CAAd;AACA,YAAI0E,OAAUD,MAAMC,IAAN,CAAWvE,QAAX,CAAd;;AAEA,YAAI,CAACuE,IAAL,EAAW;AACTA,iBAAO,IAAI3E,GAAJ,CAAQ,IAAR,CAAP;AACA0E,gBAAMC,IAAN,CAAWvE,QAAX,EAAqBuE,IAArB;AACD;;AAED,YAAI,OAAOH,MAAP,KAAkB,QAAtB,EAAgC;AAC9B,cAAIG,KAAKH,MAAL,MAAiBI,SAArB,EAAgC;AAC9B,kBAAM,IAAIC,KAAJ,uBAA8BL,MAA9B,OAAN;AACD;AACDG,eAAKH,MAAL;AACD;AACF,OAfM,CAAP;AAgBD,KAnOe;;AAAA;AAAA;AAAA,0BA0DK;AACnB,eAAOrE,OAAP;AACD;AA5De;;AAAA;AAAA;;AAwOlB;;;;;;AAMAF,IAAE6E,QAAF,EACGC,EADH,CACMrE,MAAMK,cADZ,EAC4BM,SAASG,WADrC,EACkD,UAAUwD,KAAV,EAAiB;AAC/DA,UAAMC,cAAN;AACAjF,QAAIuE,gBAAJ,CAAqBW,IAArB,CAA0BjF,EAAE,IAAF,CAA1B,EAAmC,MAAnC;AACD,GAJH;;AAOA;;;;;;AAMAA,IAAEO,EAAF,CAAKN,IAAL,IAAyBF,IAAIuE,gBAA7B;AACAtE,IAAEO,EAAF,CAAKN,IAAL,EAAWiF,WAAX,GAAyBnF,GAAzB;AACAC,IAAEO,EAAF,CAAKN,IAAL,EAAWkF,UAAX,GAAyB,YAAY;AACnCnF,MAAEO,EAAF,CAAKN,IAAL,IAAaK,kBAAb;AACA,WAAOP,IAAIuE,gBAAX;AACD,GAHD;;AAKA,SAAOvE,GAAP;AAED,CApQW,CAoQTqF,MApQS,CAAZ","file":"tab.js","sourcesContent":["import Util from './util'\n\n\n/**\n * --------------------------------------------------------------------------\n * Bootstrap (v4.0.0-alpha.6): tab.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nconst Tab = (($) => {\n\n\n /**\n * ------------------------------------------------------------------------\n * Constants\n * ------------------------------------------------------------------------\n */\n\n const NAME = 'tab'\n const VERSION = '4.0.0-alpha.6'\n const DATA_KEY = 'bs.tab'\n const EVENT_KEY = `.${DATA_KEY}`\n const DATA_API_KEY = '.data-api'\n const JQUERY_NO_CONFLICT = $.fn[NAME]\n const TRANSITION_DURATION = 150\n\n const Event = {\n HIDE : `hide${EVENT_KEY}`,\n HIDDEN : `hidden${EVENT_KEY}`,\n SHOW : `show${EVENT_KEY}`,\n SHOWN : `shown${EVENT_KEY}`,\n CLICK_DATA_API : `click${EVENT_KEY}${DATA_API_KEY}`\n }\n\n const ClassName = {\n DROPDOWN_MENU : 'dropdown-menu',\n ACTIVE : 'active',\n DISABLED : 'disabled',\n FADE : 'fade',\n SHOW : 'show'\n }\n\n const Selector = {\n DROPDOWN : '.dropdown',\n NAV_LIST_GROUP : '.nav, .list-group',\n ACTIVE : '.active',\n DATA_TOGGLE : '[data-toggle=\"tab\"], [data-toggle=\"pill\"], [data-toggle=\"list\"]',\n DROPDOWN_TOGGLE : '.dropdown-toggle',\n DROPDOWN_ACTIVE_CHILD : '> .dropdown-menu .active'\n }\n\n\n /**\n * ------------------------------------------------------------------------\n * Class Definition\n * ------------------------------------------------------------------------\n */\n\n class Tab {\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 show() {\n if (this._element.parentNode &&\n this._element.parentNode.nodeType === Node.ELEMENT_NODE &&\n $(this._element).hasClass(ClassName.ACTIVE) ||\n $(this._element).hasClass(ClassName.DISABLED)) {\n return\n }\n\n let target\n let previous\n const listElement = $(this._element).closest(Selector.NAV_LIST_GROUP)[0]\n const selector = Util.getSelectorFromElement(this._element)\n\n if (listElement) {\n previous = $.makeArray($(listElement).find(Selector.ACTIVE))\n previous = previous[previous.length - 1]\n }\n\n const hideEvent = $.Event(Event.HIDE, {\n relatedTarget: this._element\n })\n\n const showEvent = $.Event(Event.SHOW, {\n relatedTarget: previous\n })\n\n if (previous) {\n $(previous).trigger(hideEvent)\n }\n\n $(this._element).trigger(showEvent)\n\n if (showEvent.isDefaultPrevented() ||\n hideEvent.isDefaultPrevented()) {\n return\n }\n\n if (selector) {\n target = $(selector)[0]\n }\n\n this._activate(\n this._element,\n listElement\n )\n\n const complete = () => {\n const hiddenEvent = $.Event(Event.HIDDEN, {\n relatedTarget: this._element\n })\n\n const shownEvent = $.Event(Event.SHOWN, {\n relatedTarget: previous\n })\n\n $(previous).trigger(hiddenEvent)\n $(this._element).trigger(shownEvent)\n }\n\n if (target) {\n this._activate(target, target.parentNode, complete)\n } else {\n complete()\n }\n }\n\n dispose() {\n $.removeData(this._element, DATA_KEY)\n this._element = null\n }\n\n\n // private\n\n _activate(element, container, callback) {\n const active = $(container).find(Selector.ACTIVE)[0]\n const isTransitioning = callback\n && Util.supportsTransitionEnd()\n && (active && $(active).hasClass(ClassName.FADE))\n\n const complete = () => this._transitionComplete(\n element,\n active,\n isTransitioning,\n callback\n )\n\n if (active && isTransitioning) {\n $(active)\n .one(Util.TRANSITION_END, complete)\n .emulateTransitionEnd(TRANSITION_DURATION)\n\n } else {\n complete()\n }\n\n if (active) {\n $(active).removeClass(ClassName.SHOW)\n }\n }\n\n _transitionComplete(element, active, isTransitioning, callback) {\n if (active) {\n $(active).removeClass(ClassName.ACTIVE)\n\n const dropdownChild = $(active.parentNode).find(\n Selector.DROPDOWN_ACTIVE_CHILD\n )[0]\n\n if (dropdownChild) {\n $(dropdownChild).removeClass(ClassName.ACTIVE)\n }\n\n active.setAttribute('aria-expanded', false)\n }\n\n $(element).addClass(ClassName.ACTIVE)\n element.setAttribute('aria-expanded', true)\n\n if (isTransitioning) {\n Util.reflow(element)\n $(element).addClass(ClassName.SHOW)\n } else {\n $(element).removeClass(ClassName.FADE)\n }\n\n if (element.parentNode &&\n $(element.parentNode).hasClass(ClassName.DROPDOWN_MENU)) {\n\n const dropdownElement = $(element).closest(Selector.DROPDOWN)[0]\n if (dropdownElement) {\n $(dropdownElement).find(Selector.DROPDOWN_TOGGLE).addClass(ClassName.ACTIVE)\n }\n\n element.setAttribute('aria-expanded', true)\n }\n\n if (callback) {\n callback()\n }\n }\n\n\n // static\n\n static _jQueryInterface(config) {\n return this.each(function () {\n const $this = $(this)\n let data = $this.data(DATA_KEY)\n\n if (!data) {\n data = new Tab(this)\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 }\n\n\n /**\n * ------------------------------------------------------------------------\n * Data Api implementation\n * ------------------------------------------------------------------------\n */\n\n $(document)\n .on(Event.CLICK_DATA_API, Selector.DATA_TOGGLE, function (event) {\n event.preventDefault()\n Tab._jQueryInterface.call($(this), 'show')\n })\n\n\n /**\n * ------------------------------------------------------------------------\n * jQuery\n * ------------------------------------------------------------------------\n */\n\n $.fn[NAME] = Tab._jQueryInterface\n $.fn[NAME].Constructor = Tab\n $.fn[NAME].noConflict = function () {\n $.fn[NAME] = JQUERY_NO_CONFLICT\n return Tab._jQueryInterface\n }\n\n return Tab\n\n})(jQuery)\n\nexport default Tab\n"]} \ No newline at end of file diff --git a/js/dist/tooltip.js b/js/dist/tooltip.js index af385927ff..f470481d16 100644 --- a/js/dist/tooltip.js +++ b/js/dist/tooltip.js @@ -14,11 +14,11 @@ function _classCallCheck(instance, Constructor) { if (!(instance instanceof Cons var Tooltip = function ($) { /** - * Check for Tether dependency - * Tether - http://tether.io/ + * Check for Popper dependency + * Popper - https://popper.js.org */ - if (typeof Tether === 'undefined') { - throw new Error('Bootstrap tooltips require Tether (http://tether.io/)'); + if (typeof Popper === 'undefined') { + throw new Error('Bootstrap tooltips require Popper.js (https://popper.js.org)'); } /** @@ -33,22 +33,8 @@ var Tooltip = function ($) { var EVENT_KEY = '.' + DATA_KEY; var JQUERY_NO_CONFLICT = $.fn[NAME]; var TRANSITION_DURATION = 150; - var CLASS_PREFIX = 'bs-tether'; - var TETHER_PREFIX_REGEX = new RegExp('(^|\\s)' + CLASS_PREFIX + '\\S+', 'g'); - - var Default = { - animation: true, - template: '', - trigger: 'hover focus', - title: '', - delay: 0, - html: false, - selector: false, - placement: 'top', - offset: '0 0', - constraints: [], - container: false - }; + var CLASS_PREFIX = 'bs-tooltip'; + var BSCLS_PREFIX_REGEX = new RegExp('(^|\\s)' + CLASS_PREFIX + '\\S+', 'g'); var DefaultType = { animation: 'boolean', @@ -59,16 +45,31 @@ var Tooltip = function ($) { html: 'boolean', selector: '(string|boolean)', placement: '(string|function)', - offset: 'string', - constraints: 'array', - container: '(string|element|boolean)' + offset: '(number|string)', + container: '(string|element|boolean)', + fallbackPlacement: '(string|array)' }; var AttachmentMap = { - TOP: 'bottom center', - RIGHT: 'middle left', - BOTTOM: 'top center', - LEFT: 'middle right' + AUTO: 'auto', + TOP: 'top', + RIGHT: 'right', + BOTTOM: 'bottom', + LEFT: 'left' + }; + + var Default = { + animation: true, + template: '', + trigger: 'hover focus', + title: '', + delay: 0, + html: false, + selector: false, + placement: 'top', + offset: 0, + container: false, + fallbackPlacement: 'flip' }; var HoverState = { @@ -99,11 +100,6 @@ var Tooltip = function ($) { TOOLTIP_INNER: '.tooltip-inner' }; - var TetherClass = { - element: false, - enabled: false - }; - var Trigger = { HOVER: 'hover', FOCUS: 'focus', @@ -126,7 +122,7 @@ var Tooltip = function ($) { this._timeout = 0; this._hoverState = ''; this._activeTrigger = {}; - this._tether = null; + this._popper = null; // protected this.element = element; @@ -183,8 +179,6 @@ var Tooltip = function ($) { Tooltip.prototype.dispose = function dispose() { clearTimeout(this._timeout); - this.cleanupTether(); - $.removeData(this.element, this.constructor.DATA_KEY); $(this.element).off(this.constructor.EVENT_KEY); @@ -198,7 +192,10 @@ var Tooltip = function ($) { this._timeout = null; this._hoverState = null; this._activeTrigger = null; - this._tether = null; + if (this._popper !== null) { + this._popper.destroy(); + } + this._popper = null; this.element = null; this.config = null; @@ -237,6 +234,7 @@ var Tooltip = function ($) { var placement = typeof this.config.placement === 'function' ? this.config.placement.call(this, tip, this.element) : this.config.placement; var attachment = this._getAttachment(placement); + this.addAttachmentClass(attachment); var container = this.config.container === false ? document.body : $(this.config.container); @@ -248,20 +246,26 @@ var Tooltip = function ($) { $(this.element).trigger(this.constructor.Event.INSERTED); - this._tether = new Tether({ - attachment: attachment, - element: tip, - target: this.element, - classes: TetherClass, - classPrefix: CLASS_PREFIX, - offset: this.config.offset, - constraints: this.config.constraints, - addTargetClasses: false + this._popper = new Popper(this.element, tip, { + placement: attachment, + modifiers: { + offset: { + offset: this.config.offset + }, + flip: { + behavior: this.config.fallbackPlacement + } + }, + onCreate: function onCreate(data) { + if (data.originalPlacement !== data.placement) { + _this._handlePopperPlacementChange(data); + } + }, + onUpdate: function onUpdate(data) { + _this._handlePopperPlacementChange(data); + } }); - Util.reflow(tip); - this._tether.position(); - $(tip).addClass(ClassName.SHOW); // if this is a touch-enabled device we add extra @@ -273,6 +277,9 @@ var Tooltip = function ($) { } var complete = function complete() { + if (_this.config.animation) { + _this._fixTransition(); + } var prevHoverState = _this._hoverState; _this._hoverState = null; @@ -285,10 +292,9 @@ var Tooltip = function ($) { if (Util.supportsTransitionEnd() && $(this.tip).hasClass(ClassName.FADE)) { $(this.tip).one(Util.TRANSITION_END, complete).emulateTransitionEnd(Tooltip._TRANSITION_DURATION); - return; + } else { + complete(); } - - complete(); } }; @@ -305,7 +311,9 @@ var Tooltip = function ($) { _this2._cleanTipClass(); _this2.element.removeAttribute('aria-describedby'); $(_this2.element).trigger(_this2.constructor.Event.HIDDEN); - _this2.cleanupTether(); + if (_this2._popper !== null) { + _this2._popper.destroy(); + } if (callback) { callback(); @@ -340,24 +348,30 @@ var Tooltip = function ($) { this._hoverState = ''; }; + Tooltip.prototype.update = function update() { + if (this._popper !== null) { + this._popper.scheduleUpdate(); + } + }; + // protected Tooltip.prototype.isWithContent = function isWithContent() { return Boolean(this.getTitle()); }; + Tooltip.prototype.addAttachmentClass = function addAttachmentClass(attachment) { + $(this.getTipElement()).addClass(CLASS_PREFIX + '-' + attachment); + }; + Tooltip.prototype.getTipElement = function getTipElement() { return this.tip = this.tip || $(this.config.template)[0]; }; Tooltip.prototype.setContent = function setContent() { var $tip = $(this.getTipElement()); - this.setElementContent($tip.find(Selector.TOOLTIP_INNER), this.getTitle()); - $tip.removeClass(ClassName.FADE + ' ' + ClassName.SHOW); - - this.cleanupTether(); }; Tooltip.prototype.setElementContent = function setElementContent($element, content) { @@ -386,26 +400,12 @@ var Tooltip = function ($) { return title; }; - Tooltip.prototype.cleanupTether = function cleanupTether() { - if (this._tether) { - this._tether.destroy(); - } - }; - // private Tooltip.prototype._getAttachment = function _getAttachment(placement) { return AttachmentMap[placement.toUpperCase()]; }; - Tooltip.prototype._cleanTipClass = function _cleanTipClass() { - var $tip = $(this.getTipElement()); - var tabClass = $tip.attr('class').match(TETHER_PREFIX_REGEX); - if (tabClass !== null && tabClass.length > 0) { - $tip.removeClass(tabClass.join('')); - } - }; - Tooltip.prototype._setListeners = function _setListeners() { var _this3 = this; @@ -566,6 +566,32 @@ var Tooltip = function ($) { return config; }; + Tooltip.prototype._cleanTipClass = 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('')); + } + }; + + Tooltip.prototype._handlePopperPlacementChange = function _handlePopperPlacementChange(data) { + this._cleanTipClass(); + this.addAttachmentClass(this._getAttachment(data.placement)); + }; + + Tooltip.prototype._fixTransition = function _fixTransition() { + var tip = this.getTipElement(); + var initConfigAnimation = this.config.animation; + if (tip.getAttribute('x-placement') !== null) { + return; + } + $(tip).removeClass(ClassName.FADE); + this.config.animation = false; + this.hide(); + this.show(); + this.config.animation = initConfigAnimation; + }; + // static Tooltip._jQueryInterface = function _jQueryInterface(config) { @@ -645,5 +671,5 @@ var Tooltip = function ($) { }; return Tooltip; -}(jQuery); /* global Tether */ +}(jQuery); /* global Popper */ //# sourceMappingURL=tooltip.js.map \ No newline at end of file diff --git a/js/dist/tooltip.js.map b/js/dist/tooltip.js.map index f697512d3a..ce79d67d11 100644 --- a/js/dist/tooltip.js.map +++ b/js/dist/tooltip.js.map @@ -1 +1 @@ -{"version":3,"sources":["../src/tooltip.js"],"names":["Tooltip","$","Tether","Error","NAME","VERSION","DATA_KEY","EVENT_KEY","JQUERY_NO_CONFLICT","fn","TRANSITION_DURATION","CLASS_PREFIX","TETHER_PREFIX_REGEX","RegExp","Default","animation","template","trigger","title","delay","html","selector","placement","offset","constraints","container","DefaultType","AttachmentMap","TOP","RIGHT","BOTTOM","LEFT","HoverState","SHOW","OUT","Event","HIDE","HIDDEN","SHOWN","INSERTED","CLICK","FOCUSIN","FOCUSOUT","MOUSEENTER","MOUSELEAVE","ClassName","FADE","Selector","TOOLTIP","TOOLTIP_INNER","TetherClass","element","enabled","Trigger","HOVER","FOCUS","MANUAL","config","_isEnabled","_timeout","_hoverState","_activeTrigger","_tether","_getConfig","tip","_setListeners","enable","disable","toggleEnabled","toggle","event","dataKey","constructor","context","currentTarget","data","_getDelegateConfig","click","_isWithActiveTrigger","_enter","_leave","getTipElement","hasClass","dispose","clearTimeout","cleanupTether","removeData","off","closest","remove","show","css","showEvent","isWithContent","isInTheDom","contains","ownerDocument","documentElement","isDefaultPrevented","tipId","Util","getUID","setAttribute","setContent","addClass","call","attachment","_getAttachment","document","body","appendTo","target","classes","classPrefix","addTargetClasses","reflow","position","children","on","noop","complete","prevHoverState","supportsTransitionEnd","one","TRANSITION_END","emulateTransitionEnd","_TRANSITION_DURATION","hide","callback","hideEvent","parentNode","removeChild","_cleanTipClass","removeAttribute","removeClass","Boolean","getTitle","$tip","setElementContent","find","$element","content","nodeType","jquery","parent","is","empty","append","text","getAttribute","destroy","toUpperCase","tabClass","attr","match","length","join","triggers","split","forEach","eventIn","eventOut","extend","_fixTitle","titleType","type","setTimeout","toString","typeCheckConfig","key","_jQueryInterface","each","_config","test","undefined","Constructor","noConflict","jQuery"],"mappings":"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","file":"tooltip.js","sourcesContent":["/* global Tether */\n\nimport Util from './util'\n\n\n/**\n * --------------------------------------------------------------------------\n * Bootstrap (v4.0.0-alpha.6): tooltip.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nconst Tooltip = (($) => {\n\n /**\n * Check for Tether dependency\n * Tether - http://tether.io/\n */\n if (typeof Tether === 'undefined') {\n throw new Error('Bootstrap tooltips require Tether (http://tether.io/)')\n }\n\n\n /**\n * ------------------------------------------------------------------------\n * Constants\n * ------------------------------------------------------------------------\n */\n\n const NAME = 'tooltip'\n const VERSION = '4.0.0-alpha.6'\n const DATA_KEY = 'bs.tooltip'\n const EVENT_KEY = `.${DATA_KEY}`\n const JQUERY_NO_CONFLICT = $.fn[NAME]\n const TRANSITION_DURATION = 150\n const CLASS_PREFIX = 'bs-tether'\n const TETHER_PREFIX_REGEX = new RegExp(`(^|\\\\s)${CLASS_PREFIX}\\\\S+`, 'g')\n\n const Default = {\n animation : true,\n template : '
'\n + '
',\n trigger : 'hover focus',\n title : '',\n delay : 0,\n html : false,\n selector : false,\n placement : 'top',\n offset : '0 0',\n constraints : [],\n container : false\n }\n\n const DefaultType = {\n animation : 'boolean',\n template : 'string',\n title : '(string|element|function)',\n trigger : 'string',\n delay : '(number|object)',\n html : 'boolean',\n selector : '(string|boolean)',\n placement : '(string|function)',\n offset : 'string',\n constraints : 'array',\n container : '(string|element|boolean)'\n }\n\n const AttachmentMap = {\n TOP : 'bottom center',\n RIGHT : 'middle left',\n BOTTOM : 'top center',\n LEFT : 'middle right'\n }\n\n const HoverState = {\n SHOW : 'show',\n OUT : 'out'\n }\n\n const 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 const ClassName = {\n FADE : 'fade',\n SHOW : 'show'\n }\n\n const Selector = {\n TOOLTIP : '.tooltip',\n TOOLTIP_INNER : '.tooltip-inner'\n }\n\n const TetherClass = {\n element : false,\n enabled : false\n }\n\n const Trigger = {\n HOVER : 'hover',\n FOCUS : 'focus',\n CLICK : 'click',\n MANUAL : 'manual'\n }\n\n\n /**\n * ------------------------------------------------------------------------\n * Class Definition\n * ------------------------------------------------------------------------\n */\n\n class Tooltip {\n\n constructor(element, config) {\n\n // private\n this._isEnabled = true\n this._timeout = 0\n this._hoverState = ''\n this._activeTrigger = {}\n this._tether = null\n\n // protected\n this.element = element\n this.config = this._getConfig(config)\n this.tip = null\n\n this._setListeners()\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 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 // public\n\n enable() {\n this._isEnabled = true\n }\n\n disable() {\n this._isEnabled = false\n }\n\n toggleEnabled() {\n this._isEnabled = !this._isEnabled\n }\n\n toggle(event) {\n if (event) {\n const dataKey = this.constructor.DATA_KEY\n let context = $(event.currentTarget).data(dataKey)\n\n if (!context) {\n context = new this.constructor(\n event.currentTarget,\n this._getDelegateConfig()\n )\n $(event.currentTarget).data(dataKey, context)\n }\n\n context._activeTrigger.click = !context._activeTrigger.click\n\n if (context._isWithActiveTrigger()) {\n context._enter(null, context)\n } else {\n context._leave(null, context)\n }\n\n } else {\n\n if ($(this.getTipElement()).hasClass(ClassName.SHOW)) {\n this._leave(null, this)\n return\n }\n\n this._enter(null, this)\n }\n }\n\n dispose() {\n clearTimeout(this._timeout)\n\n this.cleanupTether()\n\n $.removeData(this.element, this.constructor.DATA_KEY)\n\n $(this.element).off(this.constructor.EVENT_KEY)\n $(this.element).closest('.modal').off('hide.bs.modal')\n\n if (this.tip) {\n $(this.tip).remove()\n }\n\n this._isEnabled = null\n this._timeout = null\n this._hoverState = null\n this._activeTrigger = null\n this._tether = null\n\n this.element = null\n this.config = null\n this.tip = null\n }\n\n show() {\n if ($(this.element).css('display') === 'none') {\n throw new Error('Please use show on visible elements')\n }\n\n const showEvent = $.Event(this.constructor.Event.SHOW)\n if (this.isWithContent() && this._isEnabled) {\n $(this.element).trigger(showEvent)\n\n const isInTheDom = $.contains(\n this.element.ownerDocument.documentElement,\n this.element\n )\n\n if (showEvent.isDefaultPrevented() || !isInTheDom) {\n return\n }\n\n const tip = this.getTipElement()\n const tipId = Util.getUID(this.constructor.NAME)\n\n tip.setAttribute('id', tipId)\n this.element.setAttribute('aria-describedby', tipId)\n\n this.setContent()\n\n if (this.config.animation) {\n $(tip).addClass(ClassName.FADE)\n }\n\n const placement = typeof this.config.placement === 'function' ?\n this.config.placement.call(this, tip, this.element) :\n this.config.placement\n\n const attachment = this._getAttachment(placement)\n\n const container = this.config.container === false ? document.body : $(this.config.container)\n\n $(tip).data(this.constructor.DATA_KEY, this)\n\n if (!$.contains(this.element.ownerDocument.documentElement, this.tip)) {\n $(tip).appendTo(container)\n }\n\n $(this.element).trigger(this.constructor.Event.INSERTED)\n\n this._tether = new Tether({\n attachment,\n element : tip,\n target : this.element,\n classes : TetherClass,\n classPrefix : CLASS_PREFIX,\n offset : this.config.offset,\n constraints : this.config.constraints,\n addTargetClasses: false\n })\n\n Util.reflow(tip)\n this._tether.position()\n\n $(tip).addClass(ClassName.SHOW)\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 $('body').children().on('mouseover', null, $.noop)\n }\n\n const complete = () => {\n const prevHoverState = this._hoverState\n this._hoverState = null\n\n $(this.element).trigger(this.constructor.Event.SHOWN)\n\n if (prevHoverState === HoverState.OUT) {\n this._leave(null, this)\n }\n }\n\n if (Util.supportsTransitionEnd() && $(this.tip).hasClass(ClassName.FADE)) {\n $(this.tip)\n .one(Util.TRANSITION_END, complete)\n .emulateTransitionEnd(Tooltip._TRANSITION_DURATION)\n return\n }\n\n complete()\n }\n }\n\n hide(callback) {\n const tip = this.getTipElement()\n const hideEvent = $.Event(this.constructor.Event.HIDE)\n const complete = () => {\n if (this._hoverState !== HoverState.SHOW && tip.parentNode) {\n tip.parentNode.removeChild(tip)\n }\n\n this._cleanTipClass()\n this.element.removeAttribute('aria-describedby')\n $(this.element).trigger(this.constructor.Event.HIDDEN)\n this.cleanupTether()\n\n if (callback) {\n callback()\n }\n }\n\n $(this.element).trigger(hideEvent)\n\n if (hideEvent.isDefaultPrevented()) {\n return\n }\n\n $(tip).removeClass(ClassName.SHOW)\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 this._activeTrigger[Trigger.CLICK] = false\n this._activeTrigger[Trigger.FOCUS] = false\n this._activeTrigger[Trigger.HOVER] = false\n\n if (Util.supportsTransitionEnd() &&\n $(this.tip).hasClass(ClassName.FADE)) {\n\n $(tip)\n .one(Util.TRANSITION_END, complete)\n .emulateTransitionEnd(TRANSITION_DURATION)\n\n } else {\n complete()\n }\n\n this._hoverState = ''\n\n }\n\n\n // protected\n\n isWithContent() {\n return Boolean(this.getTitle())\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 this.setElementContent($tip.find(Selector.TOOLTIP_INNER), this.getTitle())\n\n $tip.removeClass(`${ClassName.FADE} ${ClassName.SHOW}`)\n\n this.cleanupTether()\n }\n\n setElementContent($element, content) {\n const html = this.config.html\n if (typeof content === 'object' && (content.nodeType || content.jquery)) {\n // content is a DOM node or a jQuery\n if (html) {\n if (!$(content).parent().is($element)) {\n $element.empty().append(content)\n }\n } else {\n $element.text($(content).text())\n }\n } else {\n $element[html ? 'html' : 'text'](content)\n }\n }\n\n getTitle() {\n let title = this.element.getAttribute('data-original-title')\n\n if (!title) {\n title = typeof this.config.title === 'function' ?\n this.config.title.call(this.element) :\n this.config.title\n }\n\n return title\n }\n\n cleanupTether() {\n if (this._tether) {\n this._tether.destroy()\n }\n }\n\n\n // private\n\n _getAttachment(placement) {\n return AttachmentMap[placement.toUpperCase()]\n }\n\n _cleanTipClass() {\n const $tip = $(this.getTipElement())\n const tabClass = $tip.attr('class').match(TETHER_PREFIX_REGEX)\n if (tabClass !== null && tabClass.length > 0) {\n $tip.removeClass(tabClass.join(''))\n }\n }\n\n _setListeners() {\n const triggers = this.config.trigger.split(' ')\n\n triggers.forEach((trigger) => {\n if (trigger === 'click') {\n $(this.element).on(\n this.constructor.Event.CLICK,\n this.config.selector,\n (event) => this.toggle(event)\n )\n\n } else if (trigger !== Trigger.MANUAL) {\n const eventIn = trigger === Trigger.HOVER ?\n this.constructor.Event.MOUSEENTER :\n this.constructor.Event.FOCUSIN\n const eventOut = trigger === Trigger.HOVER ?\n this.constructor.Event.MOUSELEAVE :\n this.constructor.Event.FOCUSOUT\n\n $(this.element)\n .on(\n eventIn,\n this.config.selector,\n (event) => this._enter(event)\n )\n .on(\n eventOut,\n this.config.selector,\n (event) => this._leave(event)\n )\n }\n\n $(this.element).closest('.modal').on(\n 'hide.bs.modal',\n () => this.hide()\n )\n })\n\n if (this.config.selector) {\n this.config = $.extend({}, this.config, {\n trigger : 'manual',\n selector : ''\n })\n } else {\n this._fixTitle()\n }\n }\n\n _fixTitle() {\n const titleType = typeof this.element.getAttribute('data-original-title')\n if (this.element.getAttribute('title') ||\n titleType !== 'string') {\n this.element.setAttribute(\n 'data-original-title',\n this.element.getAttribute('title') || ''\n )\n this.element.setAttribute('title', '')\n }\n }\n\n _enter(event, context) {\n const dataKey = this.constructor.DATA_KEY\n\n context = context || $(event.currentTarget).data(dataKey)\n\n if (!context) {\n context = new this.constructor(\n event.currentTarget,\n this._getDelegateConfig()\n )\n $(event.currentTarget).data(dataKey, context)\n }\n\n if (event) {\n context._activeTrigger[\n event.type === 'focusin' ? Trigger.FOCUS : Trigger.HOVER\n ] = true\n }\n\n if ($(context.getTipElement()).hasClass(ClassName.SHOW) ||\n context._hoverState === HoverState.SHOW) {\n context._hoverState = HoverState.SHOW\n return\n }\n\n clearTimeout(context._timeout)\n\n context._hoverState = HoverState.SHOW\n\n if (!context.config.delay || !context.config.delay.show) {\n context.show()\n return\n }\n\n context._timeout = setTimeout(() => {\n if (context._hoverState === HoverState.SHOW) {\n context.show()\n }\n }, context.config.delay.show)\n }\n\n _leave(event, context) {\n const dataKey = this.constructor.DATA_KEY\n\n context = context || $(event.currentTarget).data(dataKey)\n\n if (!context) {\n context = new this.constructor(\n event.currentTarget,\n this._getDelegateConfig()\n )\n $(event.currentTarget).data(dataKey, context)\n }\n\n if (event) {\n context._activeTrigger[\n event.type === 'focusout' ? Trigger.FOCUS : Trigger.HOVER\n ] = false\n }\n\n if (context._isWithActiveTrigger()) {\n return\n }\n\n clearTimeout(context._timeout)\n\n context._hoverState = HoverState.OUT\n\n if (!context.config.delay || !context.config.delay.hide) {\n context.hide()\n return\n }\n\n context._timeout = setTimeout(() => {\n if (context._hoverState === HoverState.OUT) {\n context.hide()\n }\n }, context.config.delay.hide)\n }\n\n _isWithActiveTrigger() {\n for (const trigger in this._activeTrigger) {\n if (this._activeTrigger[trigger]) {\n return true\n }\n }\n\n return false\n }\n\n _getConfig(config) {\n config = $.extend(\n {},\n this.constructor.Default,\n $(this.element).data(),\n config\n )\n\n if (config.delay && typeof config.delay === 'number') {\n config.delay = {\n show : config.delay,\n hide : config.delay\n }\n }\n\n if (config.title && typeof config.title === 'number') {\n config.title = config.title.toString()\n }\n\n if (config.content && typeof config.content === 'number') {\n config.content = config.content.toString()\n }\n\n Util.typeCheckConfig(\n NAME,\n config,\n this.constructor.DefaultType\n )\n\n return config\n }\n\n _getDelegateConfig() {\n const config = {}\n\n if (this.config) {\n for (const key in this.config) {\n if (this.constructor.Default[key] !== this.config[key]) {\n config[key] = this.config[key]\n }\n }\n }\n\n return config\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\n\n if (!data && /dispose|hide/.test(config)) {\n return\n }\n\n if (!data) {\n data = new Tooltip(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 }\n\n\n /**\n * ------------------------------------------------------------------------\n * jQuery\n * ------------------------------------------------------------------------\n */\n\n $.fn[NAME] = Tooltip._jQueryInterface\n $.fn[NAME].Constructor = Tooltip\n $.fn[NAME].noConflict = function () {\n $.fn[NAME] = JQUERY_NO_CONFLICT\n return Tooltip._jQueryInterface\n }\n\n return Tooltip\n\n})(jQuery)\n\nexport default Tooltip\n"]} \ No newline at end of file +{"version":3,"sources":["../src/tooltip.js"],"names":["Tooltip","$","Popper","Error","NAME","VERSION","DATA_KEY","EVENT_KEY","JQUERY_NO_CONFLICT","fn","TRANSITION_DURATION","CLASS_PREFIX","BSCLS_PREFIX_REGEX","RegExp","DefaultType","animation","template","title","trigger","delay","html","selector","placement","offset","container","fallbackPlacement","AttachmentMap","AUTO","TOP","RIGHT","BOTTOM","LEFT","Default","HoverState","SHOW","OUT","Event","HIDE","HIDDEN","SHOWN","INSERTED","CLICK","FOCUSIN","FOCUSOUT","MOUSEENTER","MOUSELEAVE","ClassName","FADE","Selector","TOOLTIP","TOOLTIP_INNER","Trigger","HOVER","FOCUS","MANUAL","element","config","_isEnabled","_timeout","_hoverState","_activeTrigger","_popper","_getConfig","tip","_setListeners","enable","disable","toggleEnabled","toggle","event","dataKey","constructor","context","currentTarget","data","_getDelegateConfig","click","_isWithActiveTrigger","_enter","_leave","getTipElement","hasClass","dispose","clearTimeout","removeData","off","closest","remove","destroy","show","css","showEvent","isWithContent","isInTheDom","contains","ownerDocument","documentElement","isDefaultPrevented","tipId","Util","getUID","setAttribute","setContent","addClass","call","attachment","_getAttachment","addAttachmentClass","document","body","appendTo","modifiers","flip","behavior","onCreate","originalPlacement","_handlePopperPlacementChange","onUpdate","children","on","noop","complete","_fixTransition","prevHoverState","supportsTransitionEnd","one","TRANSITION_END","emulateTransitionEnd","_TRANSITION_DURATION","hide","callback","hideEvent","parentNode","removeChild","_cleanTipClass","removeAttribute","removeClass","update","scheduleUpdate","Boolean","getTitle","$tip","setElementContent","find","$element","content","nodeType","jquery","parent","is","empty","append","text","getAttribute","toUpperCase","triggers","split","forEach","eventIn","eventOut","extend","_fixTitle","titleType","type","setTimeout","toString","typeCheckConfig","key","tabClass","attr","match","length","join","initConfigAnimation","_jQueryInterface","each","_config","test","undefined","Constructor","noConflict","jQuery"],"mappings":"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","file":"tooltip.js","sourcesContent":["/* global Popper */\n\nimport Util from './util'\n\n\n/**\n * --------------------------------------------------------------------------\n * Bootstrap (v4.0.0-alpha.6): tooltip.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nconst Tooltip = (($) => {\n\n /**\n * Check for Popper dependency\n * Popper - https://popper.js.org\n */\n if (typeof Popper === 'undefined') {\n throw new Error('Bootstrap tooltips require Popper.js (https://popper.js.org)')\n }\n\n\n /**\n * ------------------------------------------------------------------------\n * Constants\n * ------------------------------------------------------------------------\n */\n\n const NAME = 'tooltip'\n const VERSION = '4.0.0-alpha.6'\n const DATA_KEY = 'bs.tooltip'\n const EVENT_KEY = `.${DATA_KEY}`\n const JQUERY_NO_CONFLICT = $.fn[NAME]\n const TRANSITION_DURATION = 150\n const CLASS_PREFIX = 'bs-tooltip'\n const BSCLS_PREFIX_REGEX = new RegExp(`(^|\\\\s)${CLASS_PREFIX}\\\\S+`, 'g')\n\n const DefaultType = {\n animation : 'boolean',\n template : 'string',\n title : '(string|element|function)',\n trigger : 'string',\n delay : '(number|object)',\n html : 'boolean',\n selector : '(string|boolean)',\n placement : '(string|function)',\n offset : '(number|string)',\n container : '(string|element|boolean)',\n fallbackPlacement : '(string|array)'\n }\n\n const AttachmentMap = {\n AUTO : 'auto',\n TOP : 'top',\n RIGHT : 'right',\n BOTTOM : 'bottom',\n LEFT : 'left'\n }\n\n const Default = {\n animation : true,\n template : '
'\n + '
'\n + '
',\n trigger : 'hover focus',\n title : '',\n delay : 0,\n html : false,\n selector : false,\n placement : 'top',\n offset : 0,\n container : false,\n fallbackPlacement : 'flip'\n }\n\n const HoverState = {\n SHOW : 'show',\n OUT : 'out'\n }\n\n const 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 const ClassName = {\n FADE : 'fade',\n SHOW : 'show'\n }\n\n const Selector = {\n TOOLTIP : '.tooltip',\n TOOLTIP_INNER : '.tooltip-inner'\n }\n\n const Trigger = {\n HOVER : 'hover',\n FOCUS : 'focus',\n CLICK : 'click',\n MANUAL : 'manual'\n }\n\n\n /**\n * ------------------------------------------------------------------------\n * Class Definition\n * ------------------------------------------------------------------------\n */\n\n class Tooltip {\n\n constructor(element, config) {\n\n // private\n this._isEnabled = true\n this._timeout = 0\n this._hoverState = ''\n this._activeTrigger = {}\n this._popper = null\n\n // protected\n this.element = element\n this.config = this._getConfig(config)\n this.tip = null\n\n this._setListeners()\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 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 // public\n\n enable() {\n this._isEnabled = true\n }\n\n disable() {\n this._isEnabled = false\n }\n\n toggleEnabled() {\n this._isEnabled = !this._isEnabled\n }\n\n toggle(event) {\n if (event) {\n const dataKey = this.constructor.DATA_KEY\n let context = $(event.currentTarget).data(dataKey)\n\n if (!context) {\n context = new this.constructor(\n event.currentTarget,\n this._getDelegateConfig()\n )\n $(event.currentTarget).data(dataKey, context)\n }\n\n context._activeTrigger.click = !context._activeTrigger.click\n\n if (context._isWithActiveTrigger()) {\n context._enter(null, context)\n } else {\n context._leave(null, context)\n }\n\n } else {\n\n if ($(this.getTipElement()).hasClass(ClassName.SHOW)) {\n this._leave(null, this)\n return\n }\n\n this._enter(null, this)\n }\n }\n\n dispose() {\n clearTimeout(this._timeout)\n\n $.removeData(this.element, this.constructor.DATA_KEY)\n\n $(this.element).off(this.constructor.EVENT_KEY)\n $(this.element).closest('.modal').off('hide.bs.modal')\n\n if (this.tip) {\n $(this.tip).remove()\n }\n\n this._isEnabled = null\n this._timeout = null\n this._hoverState = null\n this._activeTrigger = null\n if (this._popper !== null) {\n this._popper.destroy()\n }\n this._popper = null\n\n this.element = null\n this.config = null\n this.tip = null\n }\n\n show() {\n if ($(this.element).css('display') === 'none') {\n throw new Error('Please use show on visible elements')\n }\n\n const showEvent = $.Event(this.constructor.Event.SHOW)\n if (this.isWithContent() && this._isEnabled) {\n $(this.element).trigger(showEvent)\n\n const isInTheDom = $.contains(\n this.element.ownerDocument.documentElement,\n this.element\n )\n\n if (showEvent.isDefaultPrevented() || !isInTheDom) {\n return\n }\n\n const tip = this.getTipElement()\n const tipId = Util.getUID(this.constructor.NAME)\n\n tip.setAttribute('id', tipId)\n this.element.setAttribute('aria-describedby', tipId)\n\n this.setContent()\n\n if (this.config.animation) {\n $(tip).addClass(ClassName.FADE)\n }\n\n const placement = typeof this.config.placement === 'function' ?\n this.config.placement.call(this, tip, this.element) :\n this.config.placement\n\n const attachment = this._getAttachment(placement)\n this.addAttachmentClass(attachment)\n\n const container = this.config.container === false ? document.body : $(this.config.container)\n\n $(tip).data(this.constructor.DATA_KEY, this)\n\n if (!$.contains(this.element.ownerDocument.documentElement, this.tip)) {\n $(tip).appendTo(container)\n }\n\n $(this.element).trigger(this.constructor.Event.INSERTED)\n\n this._popper = new Popper(this.element, tip, {\n placement : attachment,\n modifiers : {\n offset : {\n offset : this.config.offset\n },\n flip : {\n behavior : this.config.fallbackPlacement\n }\n },\n onCreate : (data) => {\n if (data.originalPlacement !== data.placement) {\n this._handlePopperPlacementChange(data)\n }\n },\n onUpdate : (data) => {\n this._handlePopperPlacementChange(data)\n }\n })\n\n $(tip).addClass(ClassName.SHOW)\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 $('body').children().on('mouseover', null, $.noop)\n }\n\n const complete = () => {\n if (this.config.animation) {\n this._fixTransition()\n }\n const prevHoverState = this._hoverState\n this._hoverState = null\n\n $(this.element).trigger(this.constructor.Event.SHOWN)\n\n if (prevHoverState === HoverState.OUT) {\n this._leave(null, this)\n }\n }\n\n if (Util.supportsTransitionEnd() && $(this.tip).hasClass(ClassName.FADE)) {\n $(this.tip)\n .one(Util.TRANSITION_END, complete)\n .emulateTransitionEnd(Tooltip._TRANSITION_DURATION)\n } else {\n complete()\n }\n }\n }\n\n hide(callback) {\n const tip = this.getTipElement()\n const hideEvent = $.Event(this.constructor.Event.HIDE)\n const complete = () => {\n if (this._hoverState !== HoverState.SHOW && tip.parentNode) {\n tip.parentNode.removeChild(tip)\n }\n\n this._cleanTipClass()\n this.element.removeAttribute('aria-describedby')\n $(this.element).trigger(this.constructor.Event.HIDDEN)\n if (this._popper !== null) {\n this._popper.destroy()\n }\n\n if (callback) {\n callback()\n }\n }\n\n $(this.element).trigger(hideEvent)\n\n if (hideEvent.isDefaultPrevented()) {\n return\n }\n\n $(tip).removeClass(ClassName.SHOW)\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 this._activeTrigger[Trigger.CLICK] = false\n this._activeTrigger[Trigger.FOCUS] = false\n this._activeTrigger[Trigger.HOVER] = false\n\n if (Util.supportsTransitionEnd() &&\n $(this.tip).hasClass(ClassName.FADE)) {\n\n $(tip)\n .one(Util.TRANSITION_END, complete)\n .emulateTransitionEnd(TRANSITION_DURATION)\n\n } else {\n complete()\n }\n\n this._hoverState = ''\n\n }\n\n update() {\n if (this._popper !== null) {\n this._popper.scheduleUpdate()\n }\n }\n\n // protected\n\n isWithContent() {\n return Boolean(this.getTitle())\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 this.setElementContent($tip.find(Selector.TOOLTIP_INNER), this.getTitle())\n $tip.removeClass(`${ClassName.FADE} ${ClassName.SHOW}`)\n }\n\n setElementContent($element, content) {\n const html = this.config.html\n if (typeof content === 'object' && (content.nodeType || content.jquery)) {\n // content is a DOM node or a jQuery\n if (html) {\n if (!$(content).parent().is($element)) {\n $element.empty().append(content)\n }\n } else {\n $element.text($(content).text())\n }\n } else {\n $element[html ? 'html' : 'text'](content)\n }\n }\n\n getTitle() {\n let title = this.element.getAttribute('data-original-title')\n\n if (!title) {\n title = typeof this.config.title === 'function' ?\n this.config.title.call(this.element) :\n this.config.title\n }\n\n return title\n }\n\n\n // private\n\n _getAttachment(placement) {\n return AttachmentMap[placement.toUpperCase()]\n }\n\n _setListeners() {\n const triggers = this.config.trigger.split(' ')\n\n triggers.forEach((trigger) => {\n if (trigger === 'click') {\n $(this.element).on(\n this.constructor.Event.CLICK,\n this.config.selector,\n (event) => this.toggle(event)\n )\n\n } else if (trigger !== Trigger.MANUAL) {\n const eventIn = trigger === Trigger.HOVER ?\n this.constructor.Event.MOUSEENTER :\n this.constructor.Event.FOCUSIN\n const eventOut = trigger === Trigger.HOVER ?\n this.constructor.Event.MOUSELEAVE :\n this.constructor.Event.FOCUSOUT\n\n $(this.element)\n .on(\n eventIn,\n this.config.selector,\n (event) => this._enter(event)\n )\n .on(\n eventOut,\n this.config.selector,\n (event) => this._leave(event)\n )\n }\n\n $(this.element).closest('.modal').on(\n 'hide.bs.modal',\n () => this.hide()\n )\n })\n\n if (this.config.selector) {\n this.config = $.extend({}, this.config, {\n trigger : 'manual',\n selector : ''\n })\n } else {\n this._fixTitle()\n }\n }\n\n _fixTitle() {\n const titleType = typeof this.element.getAttribute('data-original-title')\n if (this.element.getAttribute('title') ||\n titleType !== 'string') {\n this.element.setAttribute(\n 'data-original-title',\n this.element.getAttribute('title') || ''\n )\n this.element.setAttribute('title', '')\n }\n }\n\n _enter(event, context) {\n const dataKey = this.constructor.DATA_KEY\n\n context = context || $(event.currentTarget).data(dataKey)\n\n if (!context) {\n context = new this.constructor(\n event.currentTarget,\n this._getDelegateConfig()\n )\n $(event.currentTarget).data(dataKey, context)\n }\n\n if (event) {\n context._activeTrigger[\n event.type === 'focusin' ? Trigger.FOCUS : Trigger.HOVER\n ] = true\n }\n\n if ($(context.getTipElement()).hasClass(ClassName.SHOW) ||\n context._hoverState === HoverState.SHOW) {\n context._hoverState = HoverState.SHOW\n return\n }\n\n clearTimeout(context._timeout)\n\n context._hoverState = HoverState.SHOW\n\n if (!context.config.delay || !context.config.delay.show) {\n context.show()\n return\n }\n\n context._timeout = setTimeout(() => {\n if (context._hoverState === HoverState.SHOW) {\n context.show()\n }\n }, context.config.delay.show)\n }\n\n _leave(event, context) {\n const dataKey = this.constructor.DATA_KEY\n\n context = context || $(event.currentTarget).data(dataKey)\n\n if (!context) {\n context = new this.constructor(\n event.currentTarget,\n this._getDelegateConfig()\n )\n $(event.currentTarget).data(dataKey, context)\n }\n\n if (event) {\n context._activeTrigger[\n event.type === 'focusout' ? Trigger.FOCUS : Trigger.HOVER\n ] = false\n }\n\n if (context._isWithActiveTrigger()) {\n return\n }\n\n clearTimeout(context._timeout)\n\n context._hoverState = HoverState.OUT\n\n if (!context.config.delay || !context.config.delay.hide) {\n context.hide()\n return\n }\n\n context._timeout = setTimeout(() => {\n if (context._hoverState === HoverState.OUT) {\n context.hide()\n }\n }, context.config.delay.hide)\n }\n\n _isWithActiveTrigger() {\n for (const trigger in this._activeTrigger) {\n if (this._activeTrigger[trigger]) {\n return true\n }\n }\n\n return false\n }\n\n _getConfig(config) {\n config = $.extend(\n {},\n this.constructor.Default,\n $(this.element).data(),\n config\n )\n\n if (config.delay && typeof config.delay === 'number') {\n config.delay = {\n show : config.delay,\n hide : config.delay\n }\n }\n\n if (config.title && typeof config.title === 'number') {\n config.title = config.title.toString()\n }\n\n if (config.content && typeof config.content === 'number') {\n config.content = config.content.toString()\n }\n\n Util.typeCheckConfig(\n NAME,\n config,\n this.constructor.DefaultType\n )\n\n return config\n }\n\n _getDelegateConfig() {\n const config = {}\n\n if (this.config) {\n for (const key in this.config) {\n if (this.constructor.Default[key] !== this.config[key]) {\n config[key] = this.config[key]\n }\n }\n }\n\n return config\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 _handlePopperPlacementChange(data) {\n this._cleanTipClass()\n this.addAttachmentClass(this._getAttachment(data.placement))\n }\n\n _fixTransition() {\n const tip = this.getTipElement()\n const initConfigAnimation = this.config.animation\n if (tip.getAttribute('x-placement') !== null) {\n return\n }\n $(tip).removeClass(ClassName.FADE)\n this.config.animation = false\n this.hide()\n this.show()\n this.config.animation = initConfigAnimation\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\n\n if (!data && /dispose|hide/.test(config)) {\n return\n }\n\n if (!data) {\n data = new Tooltip(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 }\n\n\n /**\n * ------------------------------------------------------------------------\n * jQuery\n * ------------------------------------------------------------------------\n */\n\n $.fn[NAME] = Tooltip._jQueryInterface\n $.fn[NAME].Constructor = Tooltip\n $.fn[NAME].noConflict = function () {\n $.fn[NAME] = JQUERY_NO_CONFLICT\n return Tooltip._jQueryInterface\n }\n\n return Tooltip\n\n})(jQuery)\n\nexport default Tooltip\n"]} \ No newline at end of file diff --git a/js/src/dropdown.js b/js/src/dropdown.js index eb536dc7dc..acc3ed453a 100644 --- a/js/src/dropdown.js +++ b/js/src/dropdown.js @@ -1,3 +1,5 @@ +/* global Popper */ + import Util from './util' @@ -10,6 +12,13 @@ import Util from './util' const Dropdown = (($) => { + /** + * Check for Popper dependency + * Popper - https://popper.js.org + */ + if (typeof Popper === 'undefined') { + throw new Error('Bootstrap dropdown require Popper.js (https://popper.js.org)') + } /** * ------------------------------------------------------------------------ @@ -43,8 +52,11 @@ const Dropdown = (($) => { } const ClassName = { - DISABLED : 'disabled', - SHOW : 'show' + DISABLED : 'disabled', + SHOW : 'show', + DROPUP : 'dropup', + MENURIGHT : 'dropdown-menu-right', + MENULEFT : 'dropdown-menu-left' } const Selector = { @@ -55,6 +67,25 @@ const Dropdown = (($) => { VISIBLE_ITEMS : '.dropdown-menu .dropdown-item:not(.disabled)' } + const AttachmentMap = { + TOP : 'top-start', + TOPEND : 'top-end', + BOTTOM : 'bottom-start', + BOTTOMEND : 'bottom-end' + } + + const Default = { + placement : AttachmentMap.BOTTOM, + offset : 0, + flip : true + } + + const DefaultType = { + placement : 'string', + offset : '(number|string)', + flip : 'boolean' + } + /** * ------------------------------------------------------------------------ @@ -64,8 +95,11 @@ const Dropdown = (($) => { class Dropdown { - constructor(element) { + constructor(element, config) { this._element = element + this._popper = null + this._config = this._getConfig(config) + this._menu = this._getMenuElement() this._addEventListeners() } @@ -77,34 +111,60 @@ const Dropdown = (($) => { return VERSION } + static get Default() { + return Default + } + + static get DefaultType() { + return DefaultType + } // public toggle() { - if (this.disabled || $(this).hasClass(ClassName.DISABLED)) { - return false + if (this._element.disabled || $(this._element).hasClass(ClassName.DISABLED)) { + return } - const parent = Dropdown._getParentFromElement(this) - const isActive = $(parent).hasClass(ClassName.SHOW) + const parent = Dropdown._getParentFromElement(this._element) + const isActive = $(this._menu).hasClass(ClassName.SHOW) Dropdown._clearMenus() if (isActive) { - return false + return } const relatedTarget = { - relatedTarget : this + relatedTarget : this._element } - const showEvent = $.Event(Event.SHOW, relatedTarget) + const showEvent = $.Event(Event.SHOW, relatedTarget) $(parent).trigger(showEvent) if (showEvent.isDefaultPrevented()) { - return false + return } + let 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, { + placement : this._getPlacement(), + modifiers : { + offset : { + offset : this._config.offset + }, + flip : { + enabled : this._config.flip + } + } + }) + // 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 @@ -114,37 +174,100 @@ const Dropdown = (($) => { $('body').children().on('mouseover', null, $.noop) } - this.focus() - this.setAttribute('aria-expanded', true) + this._element.focus() + this._element.setAttribute('aria-expanded', true) - $(parent).toggleClass(ClassName.SHOW) - $(parent).trigger($.Event(Event.SHOWN, relatedTarget)) - - return false + $(this._menu).toggleClass(ClassName.SHOW) + $(parent) + .toggleClass(ClassName.SHOW) + .trigger($.Event(Event.SHOWN, relatedTarget)) } 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 } + update() { + if (this._popper !== null) { + this._popper.scheduleUpdate() + } + } // private _addEventListeners() { - $(this._element).on(Event.CLICK, this.toggle) + $(this._element).on(Event.CLICK, (event) => { + event.preventDefault() + event.stopPropagation() + this.toggle() + }) } + _getConfig(config) { + const 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 + } + + _getMenuElement() { + if (!this._menu) { + const parent = Dropdown._getParentFromElement(this._element) + this._menu = $(parent).find(Selector.MENU)[0] + } + return this._menu + } + + _getPlacement() { + const $parentDropdown = $(this._element).parent() + let 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 + } // static static _jQueryInterface(config) { return this.each(function () { let data = $(this).data(DATA_KEY) + const _config = typeof config === 'object' ? config : null if (!data) { - data = new Dropdown(this) + data = new Dropdown(this, _config) $(this).data(DATA_KEY, data) } @@ -152,7 +275,7 @@ const Dropdown = (($) => { if (data[config] === undefined) { throw new Error(`No method named "${config}"`) } - data[config].call(this) + data[config]() } }) } @@ -164,13 +287,18 @@ const Dropdown = (($) => { } const toggles = $.makeArray($(Selector.DATA_TOGGLE)) - for (let i = 0; i < toggles.length; i++) { const parent = Dropdown._getParentFromElement(toggles[i]) + const context = $(toggles[i]).data(DATA_KEY) const relatedTarget = { relatedTarget : toggles[i] } + if (!context) { + continue + } + + const dropdownMenu = context._menu if (!$(parent).hasClass(ClassName.SHOW)) { continue } @@ -195,6 +323,7 @@ const Dropdown = (($) => { toggles[i].setAttribute('aria-expanded', 'false') + $(dropdownMenu).removeClass(ClassName.SHOW) $(parent) .removeClass(ClassName.SHOW) .trigger($.Event(Event.HIDDEN, relatedTarget)) @@ -276,7 +405,11 @@ const Dropdown = (($) => { .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, Dropdown.prototype.toggle) + .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, (e) => { e.stopPropagation() }) diff --git a/js/src/popover.js b/js/src/popover.js index b68b479984..a068420d63 100644 --- a/js/src/popover.js +++ b/js/src/popover.js @@ -22,12 +22,15 @@ const Popover = (($) => { const DATA_KEY = 'bs.popover' const EVENT_KEY = `.${DATA_KEY}` const JQUERY_NO_CONFLICT = $.fn[NAME] + const CLASS_PREFIX = 'bs-popover' + const BSCLS_PREFIX_REGEX = new RegExp(`(^|\\s)${CLASS_PREFIX}\\S+`, 'g') const Default = $.extend({}, Tooltip.Default, { placement : 'right', trigger : 'click', content : '', template : '' }) @@ -106,6 +109,10 @@ const Popover = (($) => { return this.getTitle() || this._getContent() } + addAttachmentClass(attachment) { + $(this.getTipElement()).addClass(`${CLASS_PREFIX}-${attachment}`) + } + getTipElement() { return this.tip = this.tip || $(this.config.template)[0] } @@ -118,8 +125,6 @@ const Popover = (($) => { this.setElementContent($tip.find(Selector.CONTENT), this._getContent()) $tip.removeClass(`${ClassName.FADE} ${ClassName.SHOW}`) - - this.cleanupTether() } // private @@ -131,6 +136,14 @@ const Popover = (($) => { this.config.content) } + _cleanTipClass() { + const $tip = $(this.getTipElement()) + const tabClass = $tip.attr('class').match(BSCLS_PREFIX_REGEX) + if (tabClass !== null && tabClass.length > 0) { + $tip.removeClass(tabClass.join('')) + } + } + // static diff --git a/js/src/tooltip.js b/js/src/tooltip.js index 47c3d8d058..1d53b0470d 100644 --- a/js/src/tooltip.js +++ b/js/src/tooltip.js @@ -1,4 +1,4 @@ -/* global Tether */ +/* global Popper */ import Util from './util' @@ -13,11 +13,11 @@ import Util from './util' const Tooltip = (($) => { /** - * Check for Tether dependency - * Tether - http://tether.io/ + * Check for Popper dependency + * Popper - https://popper.js.org */ - if (typeof Tether === 'undefined') { - throw new Error('Bootstrap tooltips require Tether (http://tether.io/)') + if (typeof Popper === 'undefined') { + throw new Error('Bootstrap tooltips require Popper.js (https://popper.js.org)') } @@ -33,43 +33,45 @@ const Tooltip = (($) => { const EVENT_KEY = `.${DATA_KEY}` const JQUERY_NO_CONFLICT = $.fn[NAME] const TRANSITION_DURATION = 150 - const CLASS_PREFIX = 'bs-tether' - const TETHER_PREFIX_REGEX = new RegExp(`(^|\\s)${CLASS_PREFIX}\\S+`, 'g') - - const Default = { - animation : true, - template : '', - trigger : 'hover focus', - title : '', - delay : 0, - html : false, - selector : false, - placement : 'top', - offset : '0 0', - constraints : [], - container : false - } + const CLASS_PREFIX = 'bs-tooltip' + const BSCLS_PREFIX_REGEX = new RegExp(`(^|\\s)${CLASS_PREFIX}\\S+`, 'g') const DefaultType = { - animation : 'boolean', - template : 'string', - title : '(string|element|function)', - trigger : 'string', - delay : '(number|object)', - html : 'boolean', - selector : '(string|boolean)', - placement : '(string|function)', - offset : 'string', - constraints : 'array', - container : '(string|element|boolean)' + animation : 'boolean', + template : 'string', + title : '(string|element|function)', + trigger : 'string', + delay : '(number|object)', + html : 'boolean', + selector : '(string|boolean)', + placement : '(string|function)', + offset : '(number|string)', + container : '(string|element|boolean)', + fallbackPlacement : '(string|array)' } const AttachmentMap = { - TOP : 'bottom center', - RIGHT : 'middle left', - BOTTOM : 'top center', - LEFT : 'middle right' + AUTO : 'auto', + TOP : 'top', + RIGHT : 'right', + BOTTOM : 'bottom', + LEFT : 'left' + } + + const Default = { + animation : true, + template : '', + trigger : 'hover focus', + title : '', + delay : 0, + html : false, + selector : false, + placement : 'top', + offset : 0, + container : false, + fallbackPlacement : 'flip' } const HoverState = { @@ -100,11 +102,6 @@ const Tooltip = (($) => { TOOLTIP_INNER : '.tooltip-inner' } - const TetherClass = { - element : false, - enabled : false - } - const Trigger = { HOVER : 'hover', FOCUS : 'focus', @@ -128,7 +125,7 @@ const Tooltip = (($) => { this._timeout = 0 this._hoverState = '' this._activeTrigger = {} - this._tether = null + this._popper = null // protected this.element = element @@ -220,8 +217,6 @@ const Tooltip = (($) => { dispose() { clearTimeout(this._timeout) - this.cleanupTether() - $.removeData(this.element, this.constructor.DATA_KEY) $(this.element).off(this.constructor.EVENT_KEY) @@ -235,7 +230,10 @@ const Tooltip = (($) => { this._timeout = null this._hoverState = null this._activeTrigger = null - this._tether = null + if (this._popper !== null) { + this._popper.destroy() + } + this._popper = null this.element = null this.config = null @@ -277,6 +275,7 @@ const Tooltip = (($) => { this.config.placement const attachment = this._getAttachment(placement) + this.addAttachmentClass(attachment) const container = this.config.container === false ? document.body : $(this.config.container) @@ -288,20 +287,26 @@ const Tooltip = (($) => { $(this.element).trigger(this.constructor.Event.INSERTED) - this._tether = new Tether({ - attachment, - element : tip, - target : this.element, - classes : TetherClass, - classPrefix : CLASS_PREFIX, - offset : this.config.offset, - constraints : this.config.constraints, - addTargetClasses: false + this._popper = new Popper(this.element, tip, { + placement : attachment, + modifiers : { + offset : { + offset : this.config.offset + }, + flip : { + behavior : this.config.fallbackPlacement + } + }, + onCreate : (data) => { + if (data.originalPlacement !== data.placement) { + this._handlePopperPlacementChange(data) + } + }, + onUpdate : (data) => { + this._handlePopperPlacementChange(data) + } }) - Util.reflow(tip) - this._tether.position() - $(tip).addClass(ClassName.SHOW) // if this is a touch-enabled device we add extra @@ -313,6 +318,9 @@ const Tooltip = (($) => { } const complete = () => { + if (this.config.animation) { + this._fixTransition() + } const prevHoverState = this._hoverState this._hoverState = null @@ -327,10 +335,9 @@ const Tooltip = (($) => { $(this.tip) .one(Util.TRANSITION_END, complete) .emulateTransitionEnd(Tooltip._TRANSITION_DURATION) - return + } else { + complete() } - - complete() } } @@ -345,7 +352,9 @@ const Tooltip = (($) => { this._cleanTipClass() this.element.removeAttribute('aria-describedby') $(this.element).trigger(this.constructor.Event.HIDDEN) - this.cleanupTether() + if (this._popper !== null) { + this._popper.destroy() + } if (callback) { callback() @@ -385,6 +394,11 @@ const Tooltip = (($) => { } + update() { + if (this._popper !== null) { + this._popper.scheduleUpdate() + } + } // protected @@ -392,18 +406,18 @@ const Tooltip = (($) => { return Boolean(this.getTitle()) } + addAttachmentClass(attachment) { + $(this.getTipElement()).addClass(`${CLASS_PREFIX}-${attachment}`) + } + getTipElement() { return this.tip = this.tip || $(this.config.template)[0] } setContent() { const $tip = $(this.getTipElement()) - this.setElementContent($tip.find(Selector.TOOLTIP_INNER), this.getTitle()) - $tip.removeClass(`${ClassName.FADE} ${ClassName.SHOW}`) - - this.cleanupTether() } setElementContent($element, content) { @@ -434,12 +448,6 @@ const Tooltip = (($) => { return title } - cleanupTether() { - if (this._tether) { - this._tether.destroy() - } - } - // private @@ -447,14 +455,6 @@ const Tooltip = (($) => { return AttachmentMap[placement.toUpperCase()] } - _cleanTipClass() { - const $tip = $(this.getTipElement()) - const tabClass = $tip.attr('class').match(TETHER_PREFIX_REGEX) - if (tabClass !== null && tabClass.length > 0) { - $tip.removeClass(tabClass.join('')) - } - } - _setListeners() { const triggers = this.config.trigger.split(' ') @@ -651,6 +651,31 @@ const Tooltip = (($) => { return config } + _cleanTipClass() { + const $tip = $(this.getTipElement()) + const tabClass = $tip.attr('class').match(BSCLS_PREFIX_REGEX) + if (tabClass !== null && tabClass.length > 0) { + $tip.removeClass(tabClass.join('')) + } + } + + _handlePopperPlacementChange(data) { + this._cleanTipClass() + this.addAttachmentClass(this._getAttachment(data.placement)) + } + + _fixTransition() { + const tip = this.getTipElement() + const initConfigAnimation = this.config.animation + if (tip.getAttribute('x-placement') !== null) { + return + } + $(tip).removeClass(ClassName.FADE) + this.config.animation = false + this.hide() + this.show() + this.config.animation = initConfigAnimation + } // static diff --git a/js/tests/index.html b/js/tests/index.html index 81efd5876d..d17608e4a9 100644 --- a/js/tests/index.html +++ b/js/tests/index.html @@ -7,7 +7,7 @@ - + diff --git a/js/tests/unit/dropdown.js b/js/tests/unit/dropdown.js index a15eb52450..1dd675b0b6 100644 --- a/js/tests/unit/dropdown.js +++ b/js/tests/unit/dropdown.js @@ -275,20 +275,20 @@ $(function () { $first.parent('.dropdown') .on('shown.bs.dropdown', function () { assert.strictEqual($first.parents('.show').length, 1, '"show" class added on click') - assert.strictEqual($('#qunit-fixture .show').length, 1, 'only one dropdown is shown') + assert.strictEqual($('#qunit-fixture .dropdown-menu.show').length, 1, 'only one dropdown is shown') $(document.body).trigger('click') }).on('hidden.bs.dropdown', function () { - assert.strictEqual($('#qunit-fixture .show').length, 0, '"show" class removed') + assert.strictEqual($('#qunit-fixture .dropdown-menu.show').length, 0, '"show" class removed') $last.trigger('click') }) $last.parent('.btn-group') .on('shown.bs.dropdown', function () { assert.strictEqual($last.parent('.show').length, 1, '"show" class added on click') - assert.strictEqual($('#qunit-fixture .show').length, 1, 'only one dropdown is shown') + assert.strictEqual($('#qunit-fixture .dropdown-menu.show').length, 1, 'only one dropdown is shown') $(document.body).trigger('click') }).on('hidden.bs.dropdown', function () { - assert.strictEqual($('#qunit-fixture .show').length, 0, '"show" class removed') + assert.strictEqual($('#qunit-fixture .dropdown-menu.show').length, 0, '"show" class removed') done() }) $first.trigger('click') @@ -321,24 +321,24 @@ $(function () { $first.parent('.dropdown') .on('shown.bs.dropdown', function () { assert.strictEqual($first.parents('.show').length, 1, '"show" class added on click') - assert.strictEqual($('#qunit-fixture .show').length, 1, 'only one dropdown is shown') + assert.strictEqual($('#qunit-fixture .dropdown-menu.show').length, 1, 'only one dropdown is shown') var e = $.Event('keyup') e.which = 9 // Tab $(document.body).trigger(e) }).on('hidden.bs.dropdown', function () { - assert.strictEqual($('#qunit-fixture .show').length, 0, '"show" class removed') + assert.strictEqual($('#qunit-fixture .dropdown-menu.show').length, 0, '"show" class removed') $last.trigger('click') }) $last.parent('.btn-group') .on('shown.bs.dropdown', function () { assert.strictEqual($last.parent('.show').length, 1, '"show" class added on click') - assert.strictEqual($('#qunit-fixture .show').length, 1, 'only one dropdown is shown') + assert.strictEqual($('#qunit-fixture .dropdown-menu.show').length, 1, 'only one dropdown is shown') var e = $.Event('keyup') e.which = 9 // Tab $(document.body).trigger(e) }).on('hidden.bs.dropdown', function () { - assert.strictEqual($('#qunit-fixture .show').length, 0, '"show" class removed') + assert.strictEqual($('#qunit-fixture .dropdown-menu.show').length, 0, '"show" class removed') done() }) $first.trigger('click') @@ -552,7 +552,7 @@ $(function () { }) QUnit.test('should not close the dropdown if the user clicks on a text field', function (assert) { - assert.expect(1) + assert.expect(2) var done = assert.async() var dropdownHTML = '