liebling/src/js/home.js

95 lines
2.6 KiB
JavaScript
Raw Normal View History

2019-05-21 19:50:29 +00:00
import $ from 'jquery'
2019-11-21 15:48:21 +00:00
import shave from 'shave'
2020-06-29 13:54:07 +00:00
import Glide, {
Controls,
Swipe,
Breakpoints
} from '@glidejs/glide/dist/glide.modular.esm'
2019-10-27 10:43:31 +00:00
import { isRTL } from './helpers'
2019-05-21 19:50:29 +00:00
$(() => {
2020-06-29 13:54:07 +00:00
const $featuredSlider = $('.js-featured-slider')
2019-05-21 19:50:29 +00:00
2020-06-29 13:54:07 +00:00
if ($featuredSlider.length > 0) {
const numSlides = $featuredSlider.find('.js-featured-slide').length
const featuredSlider = new Glide('.js-featured-slider', {
2020-07-07 15:13:29 +00:00
type: 'slider',
2020-06-29 13:54:07 +00:00
rewind: false,
gap: 0,
swipeThreshold: false,
dragThreshold: false,
direction: isRTL() ? 'rtl' : 'ltr',
breakpoints: {
768: {
swipeThreshold: numSlides === 1 ? false : 80,
dragThreshold: numSlides === 1 ? false : 120
}
}
2019-11-21 15:48:21 +00:00
})
2020-07-07 15:13:29 +00:00
const ArrowDisabler = (Glide, Components) => {
const controlClasses = {
'controls': 'js-featured-slider-controls',
'backArrow': 'js-featured-slider-previous',
'nextArrow': 'js-featured-slider-next',
}
return {
mount() {
if (Glide.settings.rewind || numSlides === 1) {
return
}
Glide.on(['mount.after', 'run'], () => {
for (let controlItem of Components.Controls.items) {
if (!controlItem.className.includes(controlClasses.controls)) {
continue
}
const left = controlItem.querySelector(`.${controlClasses.backArrow}`)
if (left) {
if (Glide.index === 0) {
left.setAttribute('disabled', '')
} else {
left.removeAttribute('disabled')
}
}
const right = controlItem.querySelector(`.${controlClasses.nextArrow}`)
if (right) {
const lastSlideIndex = Glide.settings.bound
? Glide.index + (Glide.settings.perView - 1)
: Glide.index
if (lastSlideIndex === Components.Sizes.length - 1) {
right.setAttribute('disabled', '')
} else {
right.removeAttribute('disabled')
}
}
}
})
}
}
}
2020-06-29 13:54:07 +00:00
if (numSlides === 1) {
2020-07-07 15:13:29 +00:00
$featuredSlider.find('.js-featured-slider-controls').remove()
2020-06-29 13:54:07 +00:00
}
featuredSlider.on('mount.after', () => {
shave('.js-featured-article-title', 200)
2019-05-21 19:50:29 +00:00
})
2020-07-07 15:13:29 +00:00
featuredSlider.mount({ Controls, Swipe, Breakpoints, ArrowDisabler })
2020-06-29 13:54:07 +00:00
2019-05-21 19:50:29 +00:00
setTimeout(() => {
2020-06-29 13:54:07 +00:00
window.dispatchEvent(new Event('resize'))
2019-05-21 19:50:29 +00:00
}, 350)
}
2020-06-29 13:54:07 +00:00
shave('.js-featured-article-title', 200)
2019-05-21 19:50:29 +00:00
})