From 7cc4953cfdbf128b02af4824cfd7f38b954e54b8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Julien=20D=C3=A9ramond?= Date: Wed, 2 Mar 2022 10:33:57 +0100 Subject: [PATCH] =?UTF-8?q?chore(merge=20main)=20patched=20commit=20?= =?UTF-8?q?=E2=86=92=200cf3633=20(#1114)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .bundlewatch.config.json | 4 +- .github/workflows/issue-close-require.yml | 19 + .github/workflows/issue-labeled.yml | 19 + README.md | 103 +- config.yml | 4 + js/src/base-component.js | 4 + js/src/carousel.js | 64 +- js/src/dropdown.js | 15 +- js/src/popover.js | 19 - js/src/tooltip.js | 63 +- js/tests/unit/alert.spec.js | 4 +- js/tests/unit/carousel.spec.js | 16 +- js/tests/unit/collapse.spec.js | 8 +- js/tests/unit/dom/event-handler.spec.js | 4 +- js/tests/unit/dropdown.spec.js | 48 +- js/tests/unit/modal.spec.js | 24 +- js/tests/unit/offcanvas.spec.js | 8 +- js/tests/unit/popover.spec.js | 8 +- js/tests/unit/tab.spec.js | 20 +- js/tests/unit/toast.spec.js | 8 +- js/tests/unit/tooltip.spec.js | 22 +- package-lock.json | 170 +- package.json | 12 +- scss/_buttons.scss | 2 +- scss/_dropdown.scss | 16 +- scss/_list-group.scss | 2 +- scss/_modal.scss | 1 + scss/_navbar.scss | 4 +- scss/_pagination.scss | 97 +- scss/_reboot.scss | 9 +- scss/_toasts.scss | 2 + scss/_variables.scss | 66 +- scss/helpers/_colored-links.scss | 7 +- scss/mixins/_breakpoints.scss | 2 +- scss/mixins/_pagination.scss | 29 +- site/assets/js/application.js | 7 +- site/assets/js/vendor/anchor.min.js | 9 - site/assets/scss/_anchor.scss | 18 +- site/assets/scss/_component-examples.scss | 4 + site/content/docs/5.1/components/modal.md | 8 +- .../content/docs/5.1/components/pagination.md | 12 +- site/content/docs/5.1/components/toasts.md | 6 +- site/content/docs/5.1/content/reboot.md | 29 +- .../docs/5.1/examples/blog-rtl/index.html | 14 +- site/content/docs/5.1/examples/blog/blog.css | 34 - .../docs/5.1/examples/blog/blog.rtl.css | 34 - .../content/docs/5.1/examples/blog/index.html | 17 +- .../docs/5.1/examples/carousel-rtl/index.html | 14 +- .../docs/5.1/examples/carousel/carousel.css | 12 - .../5.1/examples/carousel/carousel.rtl.css | 16 - .../docs/5.1/examples/carousel/index.html | 12 +- .../5.1/examples/cheatsheet-rtl/index.html | 2881 ++++++++--------- .../5.1/examples/cheatsheet/cheatsheet.css | 79 +- .../examples/cheatsheet/cheatsheet.rtl.css | 76 +- .../docs/5.1/examples/cheatsheet/index.html | 2848 ++++++++-------- .../content/docs/5.1/examples/cover/cover.css | 3 - .../docs/5.1/examples/cover/index.html | 6 +- .../5.1/examples/dashboard-rtl/index.html | 460 +-- .../docs/5.1/examples/dashboard/dashboard.css | 5 - .../5.1/examples/dashboard/dashboard.rtl.css | 5 - .../docs/5.1/examples/dashboard/index.html | 460 +-- .../docs/5.1/examples/dropdowns/dropdowns.css | 33 +- .../docs/5.1/examples/dropdowns/index.html | 43 +- .../docs/5.1/examples/features/features.css | 19 - .../docs/5.1/examples/features/index.html | 35 +- .../docs/5.1/examples/headers/headers.css | 5 - .../docs/5.1/examples/headers/index.html | 35 +- .../docs/5.1/examples/list-groups/index.html | 56 +- .../5.1/examples/list-groups/list-groups.css | 12 - .../docs/5.1/examples/modals/modals.css | 4 - .../5.1/examples/offcanvas-navbar/index.html | 2 +- .../examples/offcanvas-navbar/offcanvas.css | 23 +- .../docs/5.1/examples/sidebars/index.html | 99 +- .../docs/5.1/examples/sidebars/sidebars.css | 12 - .../docs/5.1/examples/sign-in/index.html | 2 +- .../docs/5.1/examples/sign-in/signin.css | 6 - .../5.1/examples/starter-template/index.html | 22 +- .../starter-template/starter-template.css | 9 - site/content/docs/5.1/migration.md | 4 +- .../_default/_markup/render-heading.html | 5 + site/layouts/_default/examples.html | 22 + 81 files changed, 4061 insertions(+), 4359 deletions(-) create mode 100644 .github/workflows/issue-close-require.yml create mode 100644 .github/workflows/issue-labeled.yml delete mode 100644 site/assets/js/vendor/anchor.min.js create mode 100644 site/layouts/_default/_markup/render-heading.html diff --git a/.bundlewatch.config.json b/.bundlewatch.config.json index 3a4e47958e..b9ded33ce1 100644 --- a/.bundlewatch.config.json +++ b/.bundlewatch.config.json @@ -26,11 +26,11 @@ }, { "path": "./dist/css/boosted.css", - "maxSize": "30.0 kB" + "maxSize": "30.1 kB" }, { "path": "./dist/css/boosted.min.css", - "maxSize": "27.8 kB" + "maxSize": "28.0 kB" }, { "path": "./dist/js/boosted.bundle.js", diff --git a/.github/workflows/issue-close-require.yml b/.github/workflows/issue-close-require.yml new file mode 100644 index 0000000000..87ffed31c6 --- /dev/null +++ b/.github/workflows/issue-close-require.yml @@ -0,0 +1,19 @@ +name: Close Issue Awaiting Reply + +on: + schedule: + - cron: "0 0 * * *" + +jobs: + issue-close-require: + runs-on: ubuntu-latest + if: github.repository == 'Orange-OpenSource/Orange-Boosted-Bootstrap' + steps: + - name: awaiting reply + uses: actions-cool/issues-helper@v3 + with: + actions: "close-issues" + labels: "awaiting-reply" + inactive-day: 14 + body: | + As the issue was labeled with `awaiting-reply`, but there has been no response in 14 days, this issue will be closed. If you have any questions, you can comment/reply. diff --git a/.github/workflows/issue-labeled.yml b/.github/workflows/issue-labeled.yml new file mode 100644 index 0000000000..dd0e389bbf --- /dev/null +++ b/.github/workflows/issue-labeled.yml @@ -0,0 +1,19 @@ +name: Issue Labeled + +on: + issues: + types: [labeled] + +jobs: + issue-labeled: + if: github.repository == 'Orange-OpenSource/Orange-Boosted-Bootstrap' + runs-on: ubuntu-latest + steps: + - name: awaiting reply + if: github.event.label.name == 'awaiting-reply' + uses: actions-cool/issues-helper@v3 + with: + actions: "create-comment" + token: ${{ secrets.GITHUB_TOKEN }} + body: | + Hello @${{ github.event.issue.user.login }}. Bug reports must include a **live demo** of the issue. Per our [contributing guidelines](https://github.com/Orange-OpenSource/Orange-Boosted-Bootstrap/blob/main/.github/CONTRIBUTING.md), please create a reduced test case on [CodePen](https://codepen.io/) or [JS Bin](https://jsbin.com/) and report back with your link, Boosted version, and specific browser and Operating System details. diff --git a/README.md b/README.md index e65001b10f..aabafda855 100644 --- a/README.md +++ b/README.md @@ -64,57 +64,58 @@ Read the [Getting started page](https://boosted.orange.com/docs/5.1/getting-star Within the download you'll find the following directories and files, logically grouping common assets and providing both compiled and minified variations. -
Download contents - -```text -boosted/ -├── css/ -│ ├── boosted-grid.css -│ ├── boosted-grid.css.map -│ ├── boosted-grid.min.css -│ ├── boosted-grid.min.css.map -│ ├── boosted-grid.rtl.css -│ ├── boosted-grid.rtl.css.map -│ ├── boosted-grid.rtl.min.css -│ ├── boosted-grid.rtl.min.css.map -│ ├── boosted-reboot.css -│ ├── boosted-reboot.css.map -│ ├── boosted-reboot.min.css -│ ├── boosted-reboot.min.css.map -│ ├── boosted-reboot.rtl.css -│ ├── boosted-reboot.rtl.css.map -│ ├── boosted-reboot.rtl.min.css -│ ├── boosted-reboot.rtl.min.css.map -│ ├── boosted-utilities.css -│ ├── boosted-utilities.css.map -│ ├── boosted-utilities.min.css -│ ├── boosted-utilities.min.css.map -│ ├── boosted-utilities.rtl.css -│ ├── boosted-utilities.rtl.css.map -│ ├── boosted-utilities.rtl.min.css -│ ├── boosted-utilities.rtl.min.css.map -│ ├── boosted.css -│ ├── boosted.css.map -│ ├── boosted.min.css -│ ├── boosted.min.css.map -│ ├── boosted.rtl.css -│ ├── boosted.rtl.css.map -│ ├── boosted.rtl.min.css -│ └── boosted.rtl.min.css.map -└── js/ - ├── boosted.bundle.js - ├── boosted.bundle.js.map - ├── boosted.bundle.min.js - ├── boosted.bundle.min.js.map - ├── boosted.esm.js - ├── boosted.esm.js.map - ├── boosted.esm.min.js - ├── boosted.esm.min.js.map - ├── boosted.js - ├── boosted.js.map - ├── boosted.min.js - └── boosted.min.js.map -``` +
+ Download contents + + ```text + boosted/ + ├── css/ + │ ├── boosted-grid.css + │ ├── boosted-grid.css.map + │ ├── boosted-grid.min.css + │ ├── boosted-grid.min.css.map + │ ├── boosted-grid.rtl.css + │ ├── boosted-grid.rtl.css.map + │ ├── boosted-grid.rtl.min.css + │ ├── boosted-grid.rtl.min.css.map + │ ├── boosted-reboot.css + │ ├── boosted-reboot.css.map + │ ├── boosted-reboot.min.css + │ ├── boosted-reboot.min.css.map + │ ├── boosted-reboot.rtl.css + │ ├── boosted-reboot.rtl.css.map + │ ├── boosted-reboot.rtl.min.css + │ ├── boosted-reboot.rtl.min.css.map + │ ├── boosted-utilities.css + │ ├── boosted-utilities.css.map + │ ├── boosted-utilities.min.css + │ ├── boosted-utilities.min.css.map + │ ├── boosted-utilities.rtl.css + │ ├── boosted-utilities.rtl.css.map + │ ├── boosted-utilities.rtl.min.css + │ ├── boosted-utilities.rtl.min.css.map + │ ├── boosted.css + │ ├── boosted.css.map + │ ├── boosted.min.css + │ ├── boosted.min.css.map + │ ├── boosted.rtl.css + │ ├── boosted.rtl.css.map + │ ├── boosted.rtl.min.css + │ └── boosted.rtl.min.css.map + └── js/ + ├── boosted.bundle.js + ├── boosted.bundle.js.map + ├── boosted.bundle.min.js + ├── boosted.bundle.min.js.map + ├── boosted.esm.js + ├── boosted.esm.js.map + ├── boosted.esm.min.js + ├── boosted.esm.min.js.map + ├── boosted.js + ├── boosted.js.map + ├── boosted.min.js + └── boosted.min.js.map + ```
We provide compiled CSS and JS (`boosted.*`), as well as compiled and minified CSS and JS (`boosted.min.*`). [Source maps](https://developers.google.com/web/tools/chrome-devtools/javascript/source-maps) (`boosted.*.map`) are available for use with certain browsers' developer tools. Bundled JS files (`boosted.bundle.js` and minified `boosted.bundle.min.js`) include [Popper](https://popper.js.org/). diff --git a/config.yml b/config.yml index cda972fa04..d6a7f53f5d 100644 --- a/config.yml +++ b/config.yml @@ -103,3 +103,7 @@ params: popper_hash: "sha384-q9CRHqZndzlxGLOj+xrdLDJa9ittGte1NksRmgJKeCV9DrM7Kz868XYqsKWPpAmn" focus_visible: "https://cdn.jsdelivr.net/npm/focus-visible@5.2.0/dist/focus-visible.min.js" focus_visible_hash: "sha384-xRa5B8rCDfdg0npZcxAh+RXswrbFk3g6dlHVeABeluN8EIwdyljz/LqJgc2R3KNA" + + anchors: + min: 2 + max: 5 diff --git a/js/src/base-component.js b/js/src/base-component.js index 4140bf1947..75bb90c326 100644 --- a/js/src/base-component.js +++ b/js/src/base-component.js @@ -76,6 +76,10 @@ class BaseComponent extends Config { static get EVENT_KEY() { return `.${this.DATA_KEY}` } + + static eventName(name) { + return `${name}${this.EVENT_KEY}` + } } export default BaseComponent diff --git a/js/src/carousel.js b/js/src/carousel.js index b6c144367a..e483e88a6f 100644 --- a/js/src/carousel.js +++ b/js/src/carousel.js @@ -348,9 +348,8 @@ class Carousel extends BaseComponent { return getNextActiveElement(this._items, activeElement, isNext, this._config.wrap) } - _triggerSlideEvent(relatedTarget, eventDirectionName) { + _triggerSlideEvent(relatedTarget, fromIndex, eventDirectionName) { const targetIndex = this._getItemIndex(relatedTarget) - const fromIndex = this._getItemIndex(this._getActive()) return EventHandler.trigger(this._element, EVENT_SLIDE, { relatedTarget, @@ -360,7 +359,7 @@ class Carousel extends BaseComponent { }) } - _setActiveIndicatorElement(element) { + _setActiveIndicatorElement(index) { if (!this._indicatorsElement) { return } @@ -370,7 +369,7 @@ class Carousel extends BaseComponent { activeIndicator.classList.remove(CLASS_NAME_ACTIVE) activeIndicator.removeAttribute('aria-current') - const newActiveIndicator = SelectorEngine.findOne(`[data-bs-slide-to="${this._getItemIndex(element)}"]`, this._indicatorsElement) + const newActiveIndicator = SelectorEngine.findOne(`[data-bs-slide-to="${index}"]`, this._indicatorsElement) if (newActiveIndicator) { newActiveIndicator.classList.add(CLASS_NAME_ACTIVE) @@ -421,7 +420,7 @@ class Carousel extends BaseComponent { return } - const slideEvent = this._triggerSlideEvent(nextElement, eventDirectionName) + const slideEvent = this._triggerSlideEvent(nextElement, activeElementIndex, eventDirectionName) if (slideEvent.defaultPrevented) { return } @@ -437,18 +436,9 @@ class Carousel extends BaseComponent { this.pause() } - this._setActiveIndicatorElement(nextElement) + this._setActiveIndicatorElement(nextElementIndex) this._activeElement = nextElement - const triggerSlidEvent = () => { - EventHandler.trigger(this._element, EVENT_SLID, { - relatedTarget: nextElement, - direction: eventDirectionName, - from: activeElementIndex, - to: nextElementIndex - }) - } - // Boosted mod: enable/disable prev/next controls when wrap=false if (!this._config.wrap) { const prevControl = SelectorEngine.findOne(SELECTOR_CONTROL_PREV, this._element) @@ -465,39 +455,40 @@ class Carousel extends BaseComponent { } // End mod - if (this._element.classList.contains(CLASS_NAME_SLIDE)) { - nextElement.classList.add(orderClassName) - - reflow(nextElement) - - activeElement.classList.add(directionalClassName) - nextElement.classList.add(directionalClassName) + nextElement.classList.add(orderClassName) - const completeCallBack = () => { - nextElement.classList.remove(directionalClassName, orderClassName) - nextElement.classList.add(CLASS_NAME_ACTIVE) + reflow(nextElement) - activeElement.classList.remove(CLASS_NAME_ACTIVE, orderClassName, directionalClassName) - - this._isSliding = false - - setTimeout(triggerSlidEvent, 0) - } + activeElement.classList.add(directionalClassName) + nextElement.classList.add(directionalClassName) - this._queueCallback(completeCallBack, activeElement, true) - } else { - activeElement.classList.remove(CLASS_NAME_ACTIVE) + const completeCallBack = () => { + nextElement.classList.remove(directionalClassName, orderClassName) nextElement.classList.add(CLASS_NAME_ACTIVE) + activeElement.classList.remove(CLASS_NAME_ACTIVE, orderClassName, directionalClassName) + this._isSliding = false - triggerSlidEvent() + + EventHandler.trigger(this._element, EVENT_SLID, { + relatedTarget: nextElement, + direction: eventDirectionName, + from: activeElementIndex, + to: nextElementIndex + }) } + this._queueCallback(completeCallBack, activeElement, this._isAnimated()) + if (isCycling) { this.cycle() } } + _isAnimated() { + return this._element.classList.contains(CLASS_NAME_SLIDE) + } + _getActive() { return SelectorEngine.findOne(SELECTOR_ACTIVE_ITEM, this._element) } @@ -575,7 +566,6 @@ class Carousel extends BaseComponent { } const config = { - ...Manipulator.getDataAttributes(target), ...Manipulator.getDataAttributes(this) } const slideIndex = this.getAttribute('data-bs-slide-to') @@ -604,7 +594,7 @@ EventHandler.on(window, EVENT_LOAD_DATA_API, () => { const carousels = SelectorEngine.find(SELECTOR_DATA_RIDE) for (const carousel of carousels) { - Carousel.carouselInterface(carousel, Carousel.getInstance(carousel)) + Carousel.getOrCreateInstance(carousel) } }) diff --git a/js/src/dropdown.js b/js/src/dropdown.js index 5635ec96ec..da56f48256 100644 --- a/js/src/dropdown.js +++ b/js/src/dropdown.js @@ -49,7 +49,8 @@ const CLASS_NAME_DROPUP = 'dropup' const CLASS_NAME_DROPEND = 'dropend' const CLASS_NAME_DROPSTART = 'dropstart' -const SELECTOR_DATA_TOGGLE = '[data-bs-toggle="dropdown"]' +const SELECTOR_DATA_TOGGLE = '[data-bs-toggle="dropdown"]:not(.disabled):not(:disabled)' +const SELECTOR_DATA_TOGGLE_SHOWN = `${SELECTOR_DATA_TOGGLE}.${CLASS_NAME_SHOW}` const SELECTOR_MENU = '.dropdown-menu' const SELECTOR_NAVBAR = '.navbar' const SELECTOR_NAVBAR_NAV = '.navbar-nav' @@ -341,18 +342,14 @@ class Dropdown extends BaseComponent { return } - const toggles = SelectorEngine.find(SELECTOR_DATA_TOGGLE) + const openToggles = SelectorEngine.find(SELECTOR_DATA_TOGGLE_SHOWN) - for (const toggle of toggles) { + for (const toggle of openToggles) { const context = Dropdown.getInstance(toggle) if (!context || context._config.autoClose === false) { continue } - if (!context._isShown()) { - continue - } - const composedPath = event.composedPath() const isMenuTarget = composedPath.includes(context._menu) if ( @@ -410,10 +407,6 @@ class Dropdown extends BaseComponent { event.preventDefault() event.stopPropagation() - if (isDisabled(this)) { - return - } - const getToggleButton = SelectorEngine.findOne(SELECTOR_DATA_TOGGLE, delegateTarget.parentNode) const instance = Dropdown.getOrCreateInstance(getToggleButton) diff --git a/js/src/popover.js b/js/src/popover.js index b62b6a2123..b6d1e2010e 100644 --- a/js/src/popover.js +++ b/js/src/popover.js @@ -13,8 +13,6 @@ import Tooltip from './tooltip' */ const NAME = 'popover' -const DATA_KEY = 'bs.popover' -const EVENT_KEY = `.${DATA_KEY}` const SELECTOR_TITLE = '.popover-header' const SELECTOR_CONTENT = '.popover-body' @@ -37,19 +35,6 @@ const DefaultType = { content: '(null|string|element|function)' } -const Event = { - HIDE: `hide${EVENT_KEY}`, - HIDDEN: `hidden${EVENT_KEY}`, - SHOW: `show${EVENT_KEY}`, - SHOWN: `shown${EVENT_KEY}`, - INSERTED: `inserted${EVENT_KEY}`, - CLICK: `click${EVENT_KEY}`, - FOCUSIN: `focusin${EVENT_KEY}`, - FOCUSOUT: `focusout${EVENT_KEY}`, - MOUSEENTER: `mouseenter${EVENT_KEY}`, - MOUSELEAVE: `mouseleave${EVENT_KEY}` -} - /** * Class definition */ @@ -68,10 +53,6 @@ class Popover extends Tooltip { return NAME } - static get Event() { - return Event - } - // Overrides _isWithContent() { return this._getTitle() || this._getContent() diff --git a/js/src/tooltip.js b/js/src/tooltip.js index ef5b9fa825..db626048f6 100644 --- a/js/src/tooltip.js +++ b/js/src/tooltip.js @@ -6,14 +6,7 @@ */ import * as Popper from '@popperjs/core' -import { - defineJQueryPlugin, - findShadowRoot, - getElement, - getUID, - isRTL, - noop -} from './util/index' +import { defineJQueryPlugin, findShadowRoot, getElement, getUID, isRTL, noop } from './util/index' import { DefaultAllowlist } from './util/sanitizer' import EventHandler from './dom/event-handler' import Manipulator from './dom/manipulator' @@ -25,8 +18,6 @@ import TemplateFactory from './util/template-factory' */ const NAME = 'tooltip' -const DATA_KEY = 'bs.tooltip' -const EVENT_KEY = `.${DATA_KEY}` const DISALLOWED_ATTRIBUTES = new Set(['sanitize', 'allowList', 'sanitizeFn']) const CLASS_NAME_FADE = 'fade' @@ -43,6 +34,17 @@ const TRIGGER_FOCUS = 'focus' const TRIGGER_CLICK = 'click' const TRIGGER_MANUAL = 'manual' +const EVENT_HIDE = 'hide' +const EVENT_HIDDEN = 'hidden' +const EVENT_SHOW = 'show' +const EVENT_SHOWN = 'shown' +const EVENT_INSERTED = 'inserted' +const EVENT_CLICK = 'click' +const EVENT_FOCUSIN = 'focusin' +const EVENT_FOCUSOUT = 'focusout' +const EVENT_MOUSEENTER = 'mouseenter' +const EVENT_MOUSELEAVE = 'mouseleave' + const AttachmentMap = { AUTO: 'auto', TOP: 'top', @@ -94,19 +96,6 @@ const DefaultType = { popperConfig: '(null|object|function)' } -const Event = { - HIDE: `hide${EVENT_KEY}`, - HIDDEN: `hidden${EVENT_KEY}`, - SHOW: `show${EVENT_KEY}`, - SHOWN: `shown${EVENT_KEY}`, - INSERTED: `inserted${EVENT_KEY}`, - CLICK: `click${EVENT_KEY}`, - FOCUSIN: `focusin${EVENT_KEY}`, - FOCUSOUT: `focusout${EVENT_KEY}`, - MOUSEENTER: `mouseenter${EVENT_KEY}`, - MOUSELEAVE: `mouseleave${EVENT_KEY}` -} - /** * Class definition */ @@ -146,10 +135,6 @@ class Tooltip extends BaseComponent { return NAME } - static get Event() { - return Event - } - // Public enable() { this._isEnabled = true @@ -212,11 +197,9 @@ class Tooltip extends BaseComponent { return } - const showEvent = EventHandler.trigger(this._element, this.constructor.Event.SHOW) + const showEvent = EventHandler.trigger(this._element, this.constructor.eventName(EVENT_SHOW)) const shadowRoot = findShadowRoot(this._element) - const isInTheDom = shadowRoot === null ? - this._element.ownerDocument.documentElement.contains(this._element) : - shadowRoot.contains(this._element) + const isInTheDom = (shadowRoot || this._element.ownerDocument.documentElement).contains(this._element) if (showEvent.defaultPrevented || !isInTheDom) { return @@ -230,7 +213,7 @@ class Tooltip extends BaseComponent { if (!this._element.ownerDocument.documentElement.contains(this.tip)) { container.append(tip) - EventHandler.trigger(this._element, this.constructor.Event.INSERTED) + EventHandler.trigger(this._element, this.constructor.eventName(EVENT_INSERTED)) } if (this._popper) { @@ -255,7 +238,7 @@ class Tooltip extends BaseComponent { const previousHoverState = this._isHovered this._isHovered = false - EventHandler.trigger(this._element, this.constructor.Event.SHOWN) + EventHandler.trigger(this._element, this.constructor.eventName(EVENT_SHOWN)) if (previousHoverState) { this._leave() @@ -270,7 +253,7 @@ class Tooltip extends BaseComponent { return } - const hideEvent = EventHandler.trigger(this._element, this.constructor.Event.HIDE) + const hideEvent = EventHandler.trigger(this._element, this.constructor.eventName(EVENT_HIDE)) if (hideEvent.defaultPrevented) { return } @@ -301,7 +284,7 @@ class Tooltip extends BaseComponent { } this._element.removeAttribute('aria-describedby') - EventHandler.trigger(this._element, this.constructor.Event.HIDDEN) + EventHandler.trigger(this._element, this.constructor.eventName(EVENT_HIDDEN)) this._disposePopper() } @@ -484,14 +467,14 @@ class Tooltip extends BaseComponent { for (const trigger of triggers) { if (trigger === 'click') { - EventHandler.on(this._element, this.constructor.Event.CLICK, this._config.selector, event => this.toggle(event)) + EventHandler.on(this._element, this.constructor.eventName(EVENT_CLICK), this._config.selector, event => this.toggle(event)) } else if (trigger !== TRIGGER_MANUAL) { const eventIn = trigger === TRIGGER_HOVER ? - this.constructor.Event.MOUSEENTER : - this.constructor.Event.FOCUSIN + this.constructor.eventName(EVENT_MOUSEENTER) : + this.constructor.eventName(EVENT_FOCUSIN) const eventOut = trigger === TRIGGER_HOVER ? - this.constructor.Event.MOUSELEAVE : - this.constructor.Event.FOCUSOUT + this.constructor.eventName(EVENT_MOUSELEAVE) : + this.constructor.eventName(EVENT_FOCUSOUT) EventHandler.on(this._element, eventIn, this._config.selector, event => { const context = this._initializeOnDelegatedTarget(event) diff --git a/js/tests/unit/alert.spec.js b/js/tests/unit/alert.spec.js index e2fe49246a..bfe6f9a292 100644 --- a/js/tests/unit/alert.spec.js +++ b/js/tests/unit/alert.spec.js @@ -102,7 +102,7 @@ describe('Alert', () => { }) it('should not remove alert if close event is prevented', () => { - return new Promise(resolve => { + return new Promise((resolve, reject) => { fixtureEl.innerHTML = '
' const getAlert = () => document.querySelector('.alert') @@ -118,7 +118,7 @@ describe('Alert', () => { }) alertEl.addEventListener('closed.bs.alert', () => { - throw new Error('should not fire closed event') + reject(new Error('should not fire closed event')) }) alert.close() diff --git a/js/tests/unit/carousel.spec.js b/js/tests/unit/carousel.spec.js index ddd2df96af..6e8b0bb61a 100644 --- a/js/tests/unit/carousel.spec.js +++ b/js/tests/unit/carousel.spec.js @@ -270,7 +270,7 @@ describe('Carousel', () => { }) it('should stay at the start when the prev method is called and wrap is false', () => { - return new Promise(resolve => { + return new Promise((resolve, reject) => { fixtureEl.innerHTML = [ '