Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/twbs/bootstrap.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
path: root/js/src
diff options
context:
space:
mode:
authorGeoSot <geo.sotis@gmail.com>2022-04-21 22:42:17 +0300
committerGitHub <noreply@github.com>2022-04-21 22:42:17 +0300
commit554736834dd929263ab307593f4d4d3f28f61479 (patch)
tree084f79f074b2e2276ee39ff7ba7b0eb5c4234ad3 /js/src
parent584600bda36ac13ea325617783216d6c6a331c08 (diff)
Carousel: Fix not used option (`ride`), simplify `cycle` method (#35983)
* Fix not used option (`ride`) (according to docs), continuing of #35753 a247fe9 * separate concept of `programmatical cycle` vs `maybe cycle after click` functionality
Diffstat (limited to 'js/src')
-rw-r--r--js/src/carousel.js72
1 files changed, 35 insertions, 37 deletions
diff --git a/js/src/carousel.js b/js/src/carousel.js
index 7a30beb10e..64f38d7e64 100644
--- a/js/src/carousel.js
+++ b/js/src/carousel.js
@@ -71,19 +71,19 @@ const KEY_TO_DIRECTION = {
const Default = {
interval: 5000,
keyboard: true,
- slide: false,
pause: 'hover',
- wrap: true,
- touch: true
+ ride: false,
+ touch: true,
+ wrap: true
}
const DefaultType = {
interval: '(number|boolean)',
keyboard: 'boolean',
- slide: '(boolean|string)',
+ ride: '(boolean|string)',
pause: '(string|boolean)',
- wrap: 'boolean',
- touch: 'boolean'
+ touch: 'boolean',
+ wrap: 'boolean'
}
/**
@@ -96,13 +96,16 @@ class Carousel extends BaseComponent {
this._interval = null
this._activeElement = null
- this._stayPaused = false
this._isSliding = false
this.touchTimeout = null
this._swipeHelper = null
this._indicatorsElement = SelectorEngine.findOne(SELECTOR_INDICATORS, this._element)
this._addEventListeners()
+
+ if (this._config.ride === CLASS_NAME_CAROUSEL) {
+ this.cycle()
+ }
}
// Getters
@@ -136,30 +139,32 @@ class Carousel extends BaseComponent {
this._slide(ORDER_PREV)
}
- pause(event) {
- if (!event) {
- this._stayPaused = true
- }
-
+ pause() {
if (this._isSliding) {
triggerTransitionEnd(this._element)
- this.cycle(true)
}
this._clearInterval()
}
- cycle(event) {
- if (!event) {
- this._stayPaused = false
- }
-
+ cycle() {
this._clearInterval()
- if (this._config.interval && !this._stayPaused) {
- this._updateInterval()
+ this._updateInterval()
- this._interval = setInterval(() => this.nextWhenVisible(), this._config.interval)
+ this._interval = setInterval(() => this.nextWhenVisible(), this._config.interval)
+ }
+
+ _maybeEnableCycle() {
+ if (!this._config.ride) {
+ return
+ }
+
+ if (this._isSliding) {
+ EventHandler.one(this._element, EVENT_SLID, () => this.cycle())
+ return
}
+
+ this.cycle()
}
to(index) {
@@ -175,8 +180,6 @@ class Carousel extends BaseComponent {
const activeIndex = this._getItemIndex(this._getActive())
if (activeIndex === index) {
- this.pause()
- this.cycle()
return
}
@@ -205,8 +208,8 @@ class Carousel extends BaseComponent {
}
if (this._config.pause === 'hover') {
- EventHandler.on(this._element, EVENT_MOUSEENTER, event => this.pause(event))
- EventHandler.on(this._element, EVENT_MOUSELEAVE, event => this.cycle(event))
+ EventHandler.on(this._element, EVENT_MOUSEENTER, () => this.pause())
+ EventHandler.on(this._element, EVENT_MOUSELEAVE, () => this._maybeEnableCycle())
}
if (this._config.touch && Swipe.isSupported()) {
@@ -237,7 +240,7 @@ class Carousel extends BaseComponent {
clearTimeout(this.touchTimeout)
}
- this.touchTimeout = setTimeout(event => this.cycle(event), TOUCHEVENT_COMPAT_WAIT + this._config.interval)
+ this.touchTimeout = setTimeout(() => this._maybeEnableCycle(), TOUCHEVENT_COMPAT_WAIT + this._config.interval)
}
const swipeConfig = {
@@ -331,12 +334,10 @@ class Carousel extends BaseComponent {
return
}
- this._isSliding = true
-
const isCycling = Boolean(this._interval)
- if (isCycling) {
- this.pause()
- }
+ this.pause()
+
+ this._isSliding = true
this._setActiveIndicatorElement(nextElementIndex)
this._activeElement = nextElement
@@ -420,12 +421,6 @@ class Carousel extends BaseComponent {
}
data[config]()
- return
- }
-
- if (data._config.interval && data._config.ride) {
- data.pause()
- data.cycle()
}
})
}
@@ -449,15 +444,18 @@ EventHandler.on(document, EVENT_CLICK_DATA_API, SELECTOR_DATA_SLIDE, function (e
if (slideIndex) {
carousel.to(slideIndex)
+ carousel._maybeEnableCycle()
return
}
if (Manipulator.getDataAttribute(this, 'slide') === 'next') {
carousel.next()
+ carousel._maybeEnableCycle()
return
}
carousel.prev()
+ carousel._maybeEnableCycle()
})
EventHandler.on(window, EVENT_LOAD_DATA_API, () => {