diff options
-rw-r--r-- | js/src/alert.js | 6 | ||||
-rw-r--r-- | js/src/button.js | 4 | ||||
-rw-r--r-- | js/src/carousel.js | 7 | ||||
-rw-r--r-- | js/src/collapse.js | 11 | ||||
-rw-r--r-- | js/src/dropdown.js | 48 | ||||
-rw-r--r-- | js/src/modal.js | 16 | ||||
-rw-r--r-- | js/src/popover.js | 6 | ||||
-rw-r--r-- | js/src/scrollspy.js | 22 | ||||
-rw-r--r-- | js/src/tab.js | 24 | ||||
-rw-r--r-- | js/src/toast.js | 334 | ||||
-rw-r--r-- | js/src/tooltip.js | 76 | ||||
-rw-r--r-- | js/src/util.js | 3 |
12 files changed, 273 insertions, 284 deletions
diff --git a/js/src/alert.js b/js/src/alert.js index 777f8ffa1d..7edc96a3a8 100644 --- a/js/src/alert.js +++ b/js/src/alert.js @@ -1,6 +1,3 @@ -import $ from 'jquery' -import Util from './util' - /** * -------------------------------------------------------------------------- * Bootstrap (v4.1.3): alert.js @@ -8,6 +5,9 @@ import Util from './util' * -------------------------------------------------------------------------- */ +import $ from 'jquery' +import Util from './util' + /** * ------------------------------------------------------------------------ * Constants diff --git a/js/src/button.js b/js/src/button.js index 6a2a545973..75b21d94d1 100644 --- a/js/src/button.js +++ b/js/src/button.js @@ -1,5 +1,3 @@ -import $ from 'jquery' - /** * -------------------------------------------------------------------------- * Bootstrap (v4.1.3): button.js @@ -7,6 +5,8 @@ import $ from 'jquery' * -------------------------------------------------------------------------- */ +import $ from 'jquery' + /** * ------------------------------------------------------------------------ * Constants diff --git a/js/src/carousel.js b/js/src/carousel.js index 550c48eb55..734e155965 100644 --- a/js/src/carousel.js +++ b/js/src/carousel.js @@ -60,10 +60,7 @@ const Event = { TOUCHMOVE : `touchmove${EVENT_KEY}`, TOUCHEND : `touchend${EVENT_KEY}`, POINTERDOWN : `pointerdown${EVENT_KEY}`, - POINTERMOVE : `pointermove${EVENT_KEY}`, POINTERUP : `pointerup${EVENT_KEY}`, - POINTERLEAVE : `pointerleave${EVENT_KEY}`, - POINTERCANCEL : `pointercancel${EVENT_KEY}`, DRAG_START : `dragstart${EVENT_KEY}`, LOAD_DATA_API : `load${EVENT_KEY}${DATA_API_KEY}`, CLICK_DATA_API : `click${EVENT_KEY}${DATA_API_KEY}` @@ -280,7 +277,7 @@ class Carousel { } const start = (event) => { - if (this._pointerEvent && (event.originalEvent.pointerType === PointerType.TOUCH || event.originalEvent.pointerType === PointerType.PEN)) { + if (this._pointerEvent && PointerType[event.originalEvent.pointerType.toUpperCase()]) { this.touchStartX = event.originalEvent.clientX } else if (!this._pointerEvent) { this.touchStartX = event.originalEvent.touches[0].clientX @@ -297,7 +294,7 @@ class Carousel { } const end = (event) => { - if (this._pointerEvent && (event.originalEvent.pointerType === PointerType.TOUCH || event.originalEvent.pointerType === PointerType.PEN)) { + if (this._pointerEvent && PointerType[event.originalEvent.pointerType.toUpperCase()]) { this.touchDeltaX = event.originalEvent.clientX - this.touchStartX } diff --git a/js/src/collapse.js b/js/src/collapse.js index 6fe0e4a98d..bf154ab256 100644 --- a/js/src/collapse.js +++ b/js/src/collapse.js @@ -1,6 +1,3 @@ -import $ from 'jquery' -import Util from './util' - /** * -------------------------------------------------------------------------- * Bootstrap (v4.1.3): collapse.js @@ -8,6 +5,9 @@ import Util from './util' * -------------------------------------------------------------------------- */ +import $ from 'jquery' +import Util from './util' + /** * ------------------------------------------------------------------------ * Constants @@ -67,10 +67,11 @@ class Collapse { this._isTransitioning = false this._element = element this._config = this._getConfig(config) - this._triggerArray = $.makeArray(document.querySelectorAll( + this._triggerArray = [].slice.call(document.querySelectorAll( `[data-toggle="collapse"][href="#${element.id}"],` + `[data-toggle="collapse"][data-target="#${element.id}"]` )) + const toggleList = [].slice.call(document.querySelectorAll(Selector.DATA_TOGGLE)) for (let i = 0, len = toggleList.length; i < len; i++) { const elem = toggleList[i] @@ -227,6 +228,7 @@ class Collapse { for (let i = 0; i < triggerArrayLength; i++) { const trigger = this._triggerArray[i] const selector = Util.getSelectorFromElement(trigger) + if (selector !== null) { const $elem = $([].slice.call(document.querySelectorAll(selector))) if (!$elem.hasClass(ClassName.SHOW)) { @@ -375,6 +377,7 @@ $(document).on(Event.CLICK_DATA_API, Selector.DATA_TOGGLE, function (event) { const $trigger = $(this) const selector = Util.getSelectorFromElement(this) const selectors = [].slice.call(document.querySelectorAll(selector)) + $(selectors).each(function () { const $target = $(this) const data = $target.data(DATA_KEY) diff --git a/js/src/dropdown.js b/js/src/dropdown.js index 48b8d62eab..d8fe5fdba1 100644 --- a/js/src/dropdown.js +++ b/js/src/dropdown.js @@ -1,7 +1,3 @@ -import $ from 'jquery' -import Popper from 'popper.js' -import Util from './util' - /** * -------------------------------------------------------------------------- * Bootstrap (v4.1.3): dropdown.js @@ -9,6 +5,10 @@ import Util from './util' * -------------------------------------------------------------------------- */ +import $ from 'jquery' +import Popper from 'popper.js' +import Util from './util' + /** * ------------------------------------------------------------------------ * Constants @@ -41,13 +41,13 @@ const Event = { } const ClassName = { - DISABLED : 'disabled', - SHOW : 'show', - DROPUP : 'dropup', - DROPRIGHT : 'dropright', - DROPLEFT : 'dropleft', - MENURIGHT : 'dropdown-menu-right', - MENULEFT : 'dropdown-menu-left', + DISABLED : 'disabled', + SHOW : 'show', + DROPUP : 'dropup', + DROPRIGHT : 'dropright', + DROPLEFT : 'dropleft', + MENURIGHT : 'dropdown-menu-right', + MENULEFT : 'dropdown-menu-left', POSITION_STATIC : 'position-static' } @@ -71,19 +71,19 @@ const AttachmentMap = { } const Default = { - offset : 0, - flip : true, - boundary : 'scrollParent', - reference : 'toggle', - display : 'dynamic' + offset : 0, + flip : true, + boundary : 'scrollParent', + reference : 'toggle', + display : 'dynamic' } const DefaultType = { - offset : '(number|string|function)', - flip : 'boolean', - boundary : '(string|element)', - reference : '(string|element)', - display : 'string' + offset : '(number|string|function)', + flip : 'boolean', + boundary : '(string|element)', + reference : '(string|element)', + display : 'string' } /** @@ -203,8 +203,8 @@ class Dropdown { relatedTarget: this._element } const showEvent = $.Event(Event.SHOW, relatedTarget) - const parent = Dropdown._getParentFromElement(this._element) + $(parent).trigger(showEvent) if (showEvent.isDefaultPrevented()) { @@ -226,8 +226,8 @@ class Dropdown { relatedTarget: this._element } const hideEvent = $.Event(Event.HIDE, relatedTarget) - const parent = Dropdown._getParentFromElement(this._element) + $(parent).trigger(hideEvent) if (hideEvent.isDefaultPrevented()) { @@ -287,6 +287,7 @@ class Dropdown { _getMenuElement() { if (!this._menu) { const parent = Dropdown._getParentFromElement(this._element) + if (parent) { this._menu = parent.querySelector(Selector.MENU) } @@ -382,6 +383,7 @@ class Dropdown { } const toggles = [].slice.call(document.querySelectorAll(Selector.DATA_TOGGLE)) + for (let i = 0, len = toggles.length; i < len; i++) { const parent = Dropdown._getParentFromElement(toggles[i]) const context = $(toggles[i]).data(DATA_KEY) diff --git a/js/src/modal.js b/js/src/modal.js index 0004fe8bbe..74a16d4611 100644 --- a/js/src/modal.js +++ b/js/src/modal.js @@ -1,6 +1,3 @@ -import $ from 'jquery' -import Util from './util' - /** * -------------------------------------------------------------------------- * Bootstrap (v4.1.3): modal.js @@ -8,6 +5,9 @@ import Util from './util' * -------------------------------------------------------------------------- */ +import $ from 'jquery' +import Util from './util' + /** * ------------------------------------------------------------------------ * Constants @@ -59,11 +59,11 @@ const ClassName = { } const Selector = { - DIALOG : '.modal-dialog', - DATA_TOGGLE : '[data-toggle="modal"]', - DATA_DISMISS : '[data-dismiss="modal"]', - FIXED_CONTENT : '.fixed-top, .fixed-bottom, .is-fixed, .sticky-top', - STICKY_CONTENT : '.sticky-top' + DIALOG : '.modal-dialog', + DATA_TOGGLE : '[data-toggle="modal"]', + DATA_DISMISS : '[data-dismiss="modal"]', + FIXED_CONTENT : '.fixed-top, .fixed-bottom, .is-fixed, .sticky-top', + STICKY_CONTENT : '.sticky-top' } /** diff --git a/js/src/popover.js b/js/src/popover.js index 42123d6192..862ec096a5 100644 --- a/js/src/popover.js +++ b/js/src/popover.js @@ -1,6 +1,3 @@ -import $ from 'jquery' -import Tooltip from './tooltip' - /** * -------------------------------------------------------------------------- * Bootstrap (v4.1.3): popover.js @@ -8,6 +5,9 @@ import Tooltip from './tooltip' * -------------------------------------------------------------------------- */ +import $ from 'jquery' +import Tooltip from './tooltip' + /** * ------------------------------------------------------------------------ * Constants diff --git a/js/src/scrollspy.js b/js/src/scrollspy.js index bd77216731..c323c2aea8 100644 --- a/js/src/scrollspy.js +++ b/js/src/scrollspy.js @@ -1,6 +1,3 @@ -import $ from 'jquery' -import Util from './util' - /** * -------------------------------------------------------------------------- * Bootstrap (v4.1.3): scrollspy.js @@ -8,6 +5,9 @@ import Util from './util' * -------------------------------------------------------------------------- */ +import $ from 'jquery' +import Util from './util' + /** * ------------------------------------------------------------------------ * Constants @@ -242,12 +242,9 @@ class ScrollSpy { this._clear() - let queries = this._selector.split(',') - // eslint-disable-next-line arrow-body-style - queries = queries.map((selector) => { - return `${selector}[data-target="${target}"],` + - `${selector}[href="${target}"]` - }) + const queries = this._selector + .split(',') + .map((selector) => `${selector}[data-target="${target}"],${selector}[href="${target}"]`) const $link = $([].slice.call(document.querySelectorAll(queries.join(',')))) @@ -270,8 +267,9 @@ class ScrollSpy { } _clear() { - const nodes = [].slice.call(document.querySelectorAll(this._selector)) - $(nodes).filter(Selector.ACTIVE).removeClass(ClassName.ACTIVE) + [].slice.call(document.querySelectorAll(this._selector)) + .filter((node) => node.classList.contains(ClassName.ACTIVE)) + .forEach((node) => node.classList.remove(ClassName.ACTIVE)) } // Static @@ -304,8 +302,8 @@ class ScrollSpy { $(window).on(Event.LOAD_DATA_API, () => { const scrollSpys = [].slice.call(document.querySelectorAll(Selector.DATA_SPY)) - const scrollSpysLength = scrollSpys.length + for (let i = scrollSpysLength; i--;) { const $spy = $(scrollSpys[i]) ScrollSpy._jQueryInterface.call($spy, $spy.data()) diff --git a/js/src/tab.js b/js/src/tab.js index 7333f22a1f..99cfbe2e85 100644 --- a/js/src/tab.js +++ b/js/src/tab.js @@ -1,6 +1,3 @@ -import $ from 'jquery' -import Util from './util' - /** * -------------------------------------------------------------------------- * Bootstrap (v4.1.3): tab.js @@ -8,6 +5,9 @@ import Util from './util' * -------------------------------------------------------------------------- */ +import $ from 'jquery' +import Util from './util' + /** * ------------------------------------------------------------------------ * Constants @@ -141,17 +141,12 @@ class Tab { // Private _activate(element, container, callback) { - let activeElements - if (container && container.nodeName === 'UL') { - activeElements = $(container).find(Selector.ACTIVE_UL) - } else { - activeElements = $(container).children(Selector.ACTIVE) - } + const activeElements = container && container.nodeName === 'UL' + ? $(container).find(Selector.ACTIVE_UL) + : $(container).children(Selector.ACTIVE) const active = activeElements[0] - const isTransitioning = callback && - (active && $(active).hasClass(ClassName.FADE)) - + const isTransitioning = callback && (active && $(active).hasClass(ClassName.FADE)) const complete = () => this._transitionComplete( element, active, @@ -195,11 +190,12 @@ class Tab { Util.reflow(element) $(element).addClass(ClassName.SHOW) - if (element.parentNode && - $(element.parentNode).hasClass(ClassName.DROPDOWN_MENU)) { + if (element.parentNode && $(element.parentNode).hasClass(ClassName.DROPDOWN_MENU)) { const dropdownElement = $(element).closest(Selector.DROPDOWN)[0] + if (dropdownElement) { const dropdownToggleList = [].slice.call(dropdownElement.querySelectorAll(Selector.DROPDOWN_TOGGLE)) + $(dropdownToggleList).addClass(ClassName.ACTIVE) } diff --git a/js/src/toast.js b/js/src/toast.js index 878ffe0296..23d482d35f 100644 --- a/js/src/toast.js +++ b/js/src/toast.js @@ -1,6 +1,3 @@ -import $ from 'jquery' -import Util from './util' - /** * -------------------------------------------------------------------------- * Bootstrap (v4.1.3): toast.js @@ -8,215 +5,214 @@ import Util from './util' * -------------------------------------------------------------------------- */ -const Toast = (($) => { - /** - * ------------------------------------------------------------------------ - * Constants - * ------------------------------------------------------------------------ - */ - - const NAME = 'toast' - const VERSION = '4.1.3' - const DATA_KEY = 'bs.toast' - const EVENT_KEY = `.${DATA_KEY}` - const JQUERY_NO_CONFLICT = $.fn[NAME] - - const Event = { - CLICK_DISMISS : `click.dismiss${EVENT_KEY}`, - HIDE : `hide${EVENT_KEY}`, - HIDDEN : `hidden${EVENT_KEY}`, - SHOW : `show${EVENT_KEY}`, - SHOWN : `shown${EVENT_KEY}` - } +import $ from 'jquery' +import Util from './util' - const ClassName = { - FADE : 'fade', - HIDE : 'hide', - SHOW : 'show' - } +/** + * ------------------------------------------------------------------------ + * Constants + * ------------------------------------------------------------------------ + */ - const DefaultType = { - animation : 'boolean', - autohide : 'boolean', - delay : 'number' - } +const NAME = 'toast' +const VERSION = '4.1.3' +const DATA_KEY = 'bs.toast' +const EVENT_KEY = `.${DATA_KEY}` +const JQUERY_NO_CONFLICT = $.fn[NAME] + +const Event = { + CLICK_DISMISS : `click.dismiss${EVENT_KEY}`, + HIDE : `hide${EVENT_KEY}`, + HIDDEN : `hidden${EVENT_KEY}`, + SHOW : `show${EVENT_KEY}`, + SHOWN : `shown${EVENT_KEY}` +} + +const ClassName = { + FADE : 'fade', + HIDE : 'hide', + SHOW : 'show' +} + +const DefaultType = { + animation : 'boolean', + autohide : 'boolean', + delay : 'number' +} + +const Default = { + animation : true, + autohide : true, + delay : 500 +} + +const Selector = { + DATA_DISMISS : '[data-dismiss="toast"]' +} - const Default = { - animation : true, - autohide : true, - delay : 500 - } +/** + * ------------------------------------------------------------------------ + * Class Definition + * ------------------------------------------------------------------------ + */ - const Selector = { - DATA_DISMISS : '[data-dismiss="toast"]' +class Toast { + constructor(element, config) { + this._element = element + this._config = this._getConfig(config) + this._timeout = null + this._setListeners() } - /** - * ------------------------------------------------------------------------ - * Class Definition - * ------------------------------------------------------------------------ - */ - - class Toast { - constructor(element, config) { - this._element = element - this._config = this._getConfig(config) - this._timeout = null - this._setListeners() - } + // Getters - // Getters - - static get VERSION() { - return VERSION - } + static get VERSION() { + return VERSION + } - static get DefaultType() { - return DefaultType - } + static get DefaultType() { + return DefaultType + } - // Public + // Public - show() { - $(this._element).trigger(Event.SHOW) + show() { + $(this._element).trigger(Event.SHOW) - if (this._config.animation) { - this._element.classList.add(ClassName.FADE) - } + if (this._config.animation) { + this._element.classList.add(ClassName.FADE) + } - const complete = () => { - $(this._element).trigger(Event.SHOWN) + const complete = () => { + $(this._element).trigger(Event.SHOWN) - if (this._config.autohide) { - this.hide() - } + if (this._config.autohide) { + this.hide() } + } - this._element.classList.add(ClassName.SHOW) - if (this._config.animation) { - const transitionDuration = Util.getTransitionDurationFromElement(this._element) + this._element.classList.add(ClassName.SHOW) + if (this._config.animation) { + const transitionDuration = Util.getTransitionDurationFromElement(this._element) - $(this._element) - .one(Util.TRANSITION_END, complete) - .emulateTransitionEnd(transitionDuration) - } else { - complete() - } + $(this._element) + .one(Util.TRANSITION_END, complete) + .emulateTransitionEnd(transitionDuration) + } else { + complete() } + } - hide(withoutTimeout) { - if (!this._element.classList.contains(ClassName.SHOW)) { - return - } + hide(withoutTimeout) { + if (!this._element.classList.contains(ClassName.SHOW)) { + return + } - $(this._element).trigger(Event.HIDE) + $(this._element).trigger(Event.HIDE) - if (withoutTimeout) { + if (withoutTimeout) { + this._close() + } else { + this._timeout = setTimeout(() => { this._close() - } else { - this._timeout = setTimeout(() => { - this._close() - }, this._config.delay) - } + }, this._config.delay) } + } - dispose() { - clearTimeout(this._timeout) - this._timeout = null - - if (this._element.classList.contains(ClassName.SHOW)) { - this._element.classList.remove(ClassName.SHOW) - } - - $(this._element).off(Event.CLICK_DISMISS) + dispose() { + clearTimeout(this._timeout) + this._timeout = null - $.removeData(this._element, DATA_KEY) - this._element = null - this._config = null + if (this._element.classList.contains(ClassName.SHOW)) { + this._element.classList.remove(ClassName.SHOW) } - // Private - - _getConfig(config) { - config = { - ...Default, - ...$(this._element).data(), - ...typeof config === 'object' && config ? config : {} - } + $(this._element).off(Event.CLICK_DISMISS) - Util.typeCheckConfig( - NAME, - config, - this.constructor.DefaultType - ) + $.removeData(this._element, DATA_KEY) + this._element = null + this._config = null + } - return config - } + // Private - _setListeners() { - $(this._element).on( - Event.CLICK_DISMISS, - Selector.DATA_DISMISS, - () => this.hide(true) - ) + _getConfig(config) { + config = { + ...Default, + ...$(this._element).data(), + ...typeof config === 'object' && config ? config : {} } - _close() { - const complete = () => { - $(this._element).trigger(Event.HIDDEN) - } + Util.typeCheckConfig( + NAME, + config, + this.constructor.DefaultType + ) - this._element.classList.remove(ClassName.SHOW) + return config + } - if (this._config.animation) { - const transitionDuration = Util.getTransitionDurationFromElement(this._element) + _setListeners() { + $(this._element).on( + Event.CLICK_DISMISS, + Selector.DATA_DISMISS, + () => this.hide(true) + ) + } - $(this._element) - .one(Util.TRANSITION_END, complete) - .emulateTransitionEnd(transitionDuration) - } else { - complete() - } + _close() { + const complete = () => { + $(this._element).trigger(Event.HIDDEN) } - // Static + this._element.classList.remove(ClassName.SHOW) - static _jQueryInterface(config) { - return this.each(function () { - const $element = $(this) - let data = $element.data(DATA_KEY) - const _config = typeof config === 'object' && config + if (this._config.animation) { + const transitionDuration = Util.getTransitionDurationFromElement(this._element) - if (!data) { - data = new Toast(this, _config) - $element.data(DATA_KEY, data) - } + $(this._element) + .one(Util.TRANSITION_END, complete) + .emulateTransitionEnd(transitionDuration) + } else { + complete() + } + } - if (typeof config === 'string') { - if (typeof data[config] === 'undefined') { - throw new TypeError(`No method named "${config}"`) - } + // Static + + static _jQueryInterface(config) { + return this.each(function () { + const $element = $(this) + let data = $element.data(DATA_KEY) + const _config = typeof config === 'object' && config + + if (!data) { + data = new Toast(this, _config) + $element.data(DATA_KEY, data) + } - data[config](this) + if (typeof config === 'string') { + if (typeof data[config] === 'undefined') { + throw new TypeError(`No method named "${config}"`) } - }) - } - } - /** - * ------------------------------------------------------------------------ - * jQuery - * ------------------------------------------------------------------------ - */ - - $.fn[NAME] = Toast._jQueryInterface - $.fn[NAME].Constructor = Toast - $.fn[NAME].noConflict = () => { - $.fn[NAME] = JQUERY_NO_CONFLICT - return Toast._jQueryInterface + data[config](this) + } + }) } +} + +/** + * ------------------------------------------------------------------------ + * jQuery + * ------------------------------------------------------------------------ + */ - return Toast -})($) +$.fn[NAME] = Toast._jQueryInterface +$.fn[NAME].Constructor = Toast +$.fn[NAME].noConflict = () => { + $.fn[NAME] = JQUERY_NO_CONFLICT + return Toast._jQueryInterface +} export default Toast diff --git a/js/src/tooltip.js b/js/src/tooltip.js index cf8b8e1186..f428a79ebd 100644 --- a/js/src/tooltip.js +++ b/js/src/tooltip.js @@ -1,7 +1,3 @@ -import $ from 'jquery' -import Popper from 'popper.js' -import Util from './util' - /** * -------------------------------------------------------------------------- * Bootstrap (v4.1.3): tooltip.js @@ -9,6 +5,10 @@ import Util from './util' * -------------------------------------------------------------------------- */ +import $ from 'jquery' +import Popper from 'popper.js' +import Util from './util' + /** * ------------------------------------------------------------------------ * Constants @@ -24,18 +24,18 @@ 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 : '(number|string)', - container : '(string|element|boolean)', - fallbackPlacement : '(string|array)', - boundary : '(string|element)' + 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)', + boundary : '(string|element)' } const AttachmentMap = { @@ -47,20 +47,20 @@ const AttachmentMap = { } const Default = { - animation : true, - template : '<div class="tooltip" role="tooltip">' + - '<div class="arrow"></div>' + - '<div class="tooltip-inner"></div></div>', - trigger : 'hover focus', - title : '', - delay : 0, - html : false, - selector : false, - placement : 'top', - offset : 0, - container : false, - fallbackPlacement : 'flip', - boundary : 'scrollParent' + animation : true, + template : '<div class="tooltip" role="tooltip">' + + '<div class="arrow"></div>' + + '<div class="tooltip-inner"></div></div>', + trigger : 'hover focus', + title : '', + delay : 0, + html : false, + selector : false, + placement : 'top', + offset : 0, + container : false, + fallbackPlacement : 'flip', + boundary : 'scrollParent' } const HoverState = { @@ -303,9 +303,7 @@ class Tooltip { this._handlePopperPlacementChange(data) } }, - onUpdate: (data) => { - this._handlePopperPlacementChange(data) - } + onUpdate: (data) => this._handlePopperPlacementChange(data) }) $(tip).addClass(ClassName.SHOW) @@ -510,19 +508,19 @@ class Tooltip { _fixTitle() { const titleType = typeof this.element.getAttribute('data-original-title') - if (this.element.getAttribute('title') || - titleType !== 'string') { + + if (this.element.getAttribute('title') || titleType !== 'string') { this.element.setAttribute( 'data-original-title', this.element.getAttribute('title') || '' ) + this.element.setAttribute('title', '') } } _enter(event, context) { const dataKey = this.constructor.DATA_KEY - context = context || $(event.currentTarget).data(dataKey) if (!context) { @@ -539,8 +537,7 @@ class Tooltip { ] = true } - if ($(context.getTipElement()).hasClass(ClassName.SHOW) || - context._hoverState === HoverState.SHOW) { + if ($(context.getTipElement()).hasClass(ClassName.SHOW) || context._hoverState === HoverState.SHOW) { context._hoverState = HoverState.SHOW return } @@ -563,7 +560,6 @@ class Tooltip { _leave(event, context) { const dataKey = this.constructor.DATA_KEY - context = context || $(event.currentTarget).data(dataKey) if (!context) { @@ -673,9 +669,11 @@ class Tooltip { _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() diff --git a/js/src/util.js b/js/src/util.js index 92ad2a7220..e9665d24fd 100644 --- a/js/src/util.js +++ b/js/src/util.js @@ -1,5 +1,3 @@ -import $ from 'jquery' - /** * -------------------------------------------------------------------------- * Bootstrap (v4.1.3): util.js @@ -7,6 +5,7 @@ import $ from 'jquery' * -------------------------------------------------------------------------- */ +import $ from 'jquery' /** * ------------------------------------------------------------------------ |