From bd1c1973e31354d9effccae5f1bf7f4f16e13bdd Mon Sep 17 00:00:00 2001 From: Hsieh Chin Fan Date: Tue, 24 Sep 2024 17:28:08 +0800 Subject: refactor: move utils about dumbymap into module --- src/dumbyUtils.mjs | 57 ++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 57 insertions(+) create mode 100644 src/dumbyUtils.mjs (limited to 'src/dumbyUtils.mjs') diff --git a/src/dumbyUtils.mjs b/src/dumbyUtils.mjs new file mode 100644 index 0000000..ba0bbf8 --- /dev/null +++ b/src/dumbyUtils.mjs @@ -0,0 +1,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')) +} -- cgit v1.2.3-70-g09d2