blob: ba0bbf85067a0cbf00cacf8d8596a54aec94e843 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
|
export function focusNextMap(reverse = false) {
const renderedList = this.renderMaps
.map(render => render.target)
.filter(ele => ele.getAttribute('data-state') === 'rendered')
const mapNum = renderedList.length
if (mapNum === 0) return
// Get current focused map element
const currentFocus = this.container.querySelector('.map-container.focus')
// Remove class name of focus for ALL candidates
// This may trigger animation
renderedList.forEach(ele => ele.classList.remove('focus'))
// Get next existing map element
const padding = reverse ? -1 : 1
let nextIndex = currentFocus ? renderedList.indexOf(currentFocus) + padding : 0
nextIndex = (nextIndex + mapNum) % mapNum
const nextFocus = renderedList[nextIndex]
nextFocus.classList.add("focus")
return nextFocus
}
export function focusDelay() {
return window.getComputedStyle(this.showcase).display === 'none' ? 50 : 300
}
export function switchToNextLayout(reverse = false) {
const layouts = this.layouts
const currentLayoutName = this.container.getAttribute('data-layout')
const currentIndex = layouts.map(l => l.name).indexOf(currentLayoutName)
const padding = reverse ? -1 : 1
const nextIndex = currentIndex === -1 ? 0 : (currentIndex + padding + layouts.length) % layouts.length
const nextLayout = layouts[nextIndex]
this.container.setAttribute("data-layout", nextLayout.name)
}
export function focusNextBlock(reverse = false) {
const blocks = this.blocks.filter(b => b.checkVisibility({
contentVisibilityAuto: true,
opacityProperty: true,
visibilityProperty: true,
}))
const currentBlock = blocks.find(b => b.classList.contains('focus'))
const currentIndex = blocks.indexOf(currentBlock)
const padding = reverse ? -1 : 1
const nextIndex = currentIndex === -1 ? 0 : (currentIndex + padding + blocks.length) % blocks.length
const nextBlock = blocks[nextIndex]
blocks.forEach(b => b.classList.remove('focus'))
nextBlock?.classList?.add('focus')
nextBlock.scrollIntoView({ behavior: 'smooth', block: "nearest" })
}
export function removeBlockFocus() {
this.blocks.forEach(b => b.classList.remove('focus'))
}
|