Skip to content

Commit

Permalink
Carousel: Fix not used option (ride), simplify cycle method (#35983)
Browse files Browse the repository at this point in the history
* Fix not used option (`ride`)  (according to docs), continuing of #35753 a247fe9
* separate concept of  `programmatical cycle`  vs `maybe cycle after click` functionality
  • Loading branch information
GeoSot committed Apr 21, 2022
1 parent 584600b commit 5547368
Show file tree
Hide file tree
Showing 3 changed files with 143 additions and 146 deletions.
72 changes: 35 additions & 37 deletions js/src/carousel.js
Expand Up @@ -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'
}

/**
Expand All @@ -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
Expand Down Expand Up @@ -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) {
Expand All @@ -175,8 +180,6 @@ class Carousel extends BaseComponent {

const activeIndex = this._getItemIndex(this._getActive())
if (activeIndex === index) {
this.pause()
this.cycle()
return
}

Expand Down Expand Up @@ -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()) {
Expand Down Expand Up @@ -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 = {
Expand Down Expand Up @@ -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
Expand Down Expand Up @@ -420,12 +421,6 @@ class Carousel extends BaseComponent {
}

data[config]()
return
}

if (data._config.interval && data._config.ride) {
data.pause()
data.cycle()
}
})
}
Expand All @@ -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, () => {
Expand Down

0 comments on commit 5547368

Please sign in to comment.