@xwadex/fesd 0.0.29 → 0.0.30
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"image-preview-bundle.js","sources":["../src/fesd/configs/config.js","../src/fesd/commons/utils.js","../src/fesd/commons/events.js","../src/fesd/anchor4/anchor4.js","../src/fesd/modal4/modernModal.js","../src/fesd/modal4/modal4.js","../src/fesd/aost4/aost4.js","../src/fesd/video4/videoPlayer.js","../src/tools/utils.js","../src/fesd/video4/video4.js","../src/fesd/dropdown4/cityData.js","../src/fesd/dropdown4/dropdown4.js","../src/fesd/marquee4/marquee4.js","../src/fesd/multipurpose4/multipurpose4.js","../src/fesd/tab4/tab4.js","../src/fesd/collapse4/collapse4.js","../src/fesd/ripple4/ripple4.js","../src/fesd/image-validate/image-validate.js","../src/fesd/image-preview/image-preview.js"],"sourcesContent":["export const video4 = {\n SETTINGS: {\n videoId: null,\n videoType: null,\n videoAutoplay: 'off',\n videoKeep: 'off',\n videoMode: 'onBox',\n videoButton: '.playButton',\n videoCover: 'on',\n videoLayoutNo: 0,\n videoTarget: 'video-template',\n videoTargetRoute: 'https://cdn.wdd.idv.tw/fesd/video4_lightbox.html',\n videoVimeoHash: null,\n videoHighQuality: 'off',\n videoStartTime: 0,\n },\n ATTRS: {\n id: 'video-id',\n type: 'video-type',\n autoplay: 'video-autoplay',\n hash: 'vimeo-hash',\n start: 'video-starttime',\n highquality: 'video-highquality',\n },\n EVENTS: {\n init: null,\n afterInit: null,\n beforeDestroy: null,\n afterUpdate: null,\n },\n // video4 target 內放置結構 index 對應 videoLayoutNo\n LAYOUT: ['<div class=\"playButton\"></div><div class=\"overlay\"></div>'],\n // videoPlayer customElements 內結構\n TEMPLATE() {\n return `<div class=\"player-container\"><div class=\"player-wrapper\"></div></div>`;\n },\n}\n\nexport const share4 = {\n SETTINGS: {\n success: null,\n text: null,\n className: null,\n duration: 1500,\n },\n}\n\nexport const modal4 = {\n SETTINGS: {\n target: null,\n route: null,\n action: 'toggle',\n container: 'body',\n },\n ATTRS: {\n id: 'data-modal-id',\n close: 'data-modal-close',\n destroy: 'data-modal-destroy',\n },\n EVENTS: {\n init: null,\n success: null,\n error: null,\n complete: null,\n open: null,\n close: null,\n destroy: null,\n update: null,\n },\n TEMPLATE(type) {\n return `\n <div class=\"modal-scroller\">\n <div class=\"modal-wrapper\" ${type === 'destroy' ? 'data-modal-destroy' : 'data-modal-close'}>\n <div class=\"modal-content\" stop-propagation>\n </div>\n </div>\n `;\n },\n}\n\nexport const marquee4 = {\n SETTINGS: {\n direction: 'left', // 方向 - top || right || bottom || left\n behavior: 'normal', // 模式 - normal || alternate || endStop\n duration: 50000, // 持續時間(毫秒) - Number\n durationBreakpoints: {}, // 持續時間斷點 - Object\n autoplay: 300, // 自動撥放延遲時間(毫秒) - Number || false\n pauseOnMouseenter: false, // 滑鼠移入暫停 - Boolean\n continual: true, // 連續不間斷 - Boolean\n gap: 30, // 跑馬燈內容之間的距離 - Number\n },\n}\n\nexport const dropdown4 = {\n SETTINGS: {\n scrollbar: {\n 'scrollbar-track-color': 'transparent',\n 'scrollbar-thumb-color': 'rgba(0,0,0,.4)',\n 'scrollbar-thumb-hover-color': 'rgba(0,0,0,.55)',\n 'scrollbar-radius': '10px',\n },\n },\n TEMPLATE(filter, filterPlaceholder, customTemplate, dropdownIcon) {\n // 2025.12.31 scarlett\n // 下拉 icon\n const iconHTML = dropdownIcon ? dropdownIcon : `dropdown-icon`\n const dropdownIcons = `\n <i class=\"${iconHTML}\"></i>\n `\n // 下拉 結構客製化\n const filterBar = `\n <div class=\"filter-bar\">\n <input class=\"filter-input\" type=\"text\" placeholder=\"${filterPlaceholder}\" disabled>\n </div>\n `\n\n const defaultTemplate = `<div class=\"select-wrapper\">\n <div class=\"select-display\"></div>\n ${dropdownIcons}\n <div class=\"dropdown\">\n ${filter ? filterBar : \"\"}\n <div class=\"dropdown-scroller\">\n <ul class=\"dropdown-list\"></ul>\n </div>\n </div>\n </div>`\n\n const propsHTML = customTemplate ? customTemplate : defaultTemplate\n\n return propsHTML;\n },\n}\n\nexport const article4 = {\n SETTINGS: {\n basic_rwd: 900,\n markdownLink: false,\n navigation: false,\n scrollStep: false,\n },\n}\n\nexport const aost4 = {\n SETTINGS: {\n scroller: window,\n class: 'aost-show',\n delay: 0,\n start: 80,\n end: 0,\n mirror: false,\n repeat: false, // false | true | 'up' | 'down'\n direction: 'vertical', // 'vertical' | 'horizontal'\n breakpoints: {\n 1160: 'data-aost-offset-1160',\n 1024: 'data-aost-offset-1024',\n 600: 'data-aost-offset-600',\n },\n },\n EVENTS: {\n init: null,\n enter: null,\n leave: null,\n },\n}\n\nexport const anchor4 = {\n SETTINGS: {\n target: null,\n container: null,\n spacer: null,\n gap: 0,\n speed: 800,\n delay: 0,\n direction: 'vertical',\n easing: 'easeInOutCirc',\n },\n EVENTS: {\n afterInit: null,\n beforeDestroy: null,\n afterUpdate: null,\n beforeScroll: null,\n afterScroll: null,\n },\n}\n\nexport const multipurpose4 = {\n SETTINGS: {\n type: 'drag',\n drag: {\n center: true,\n draggable: true,\n navigation: true,\n selected: false,\n },\n collapse: {\n selected: false,\n placeholder: '類別',\n },\n dropdown: {\n target: 'dropdown-el',\n placeholder: '',\n value: '',\n },\n breakpoint: {},\n },\n TEMPLATE: {\n drag() {\n return `<div class=\"drag-container\">\n <ul class=\"wrapper\">\n </ul>\n </div>`;\n },\n collapse(collapse) {\n return `<div class=\"drag-container\">\n <ul class=\"wrapper\">\n </ul>\n <div class=\"collapse-placeholder\">${collapse.placeholder}</div>\n </div>\n <div class=\"collapse-container\">\n <ul class=\"wrapper\">\n </ul>\n </div>`;\n },\n dropdown(dropdown) {\n return `<dropdown-el${dropdown.placeholder ? ` d4-placeholder=\"${dropdown.placeholder}\"` : ''}${dropdown.value ? ` d4-value=\"${dropdown.value}\"` : ''}></dropdown-el>`;\n },\n },\n}\n\nexport const tab4 = {\n SETTINGS: {\n // 樣式 normal / process\n type: 'normal',\n // 進場方式 fade / slide\n display: 'fade',\n // 預設頁面\n defaultPage: '',\n // 滑動扣除高度\n anchorGap: 0,\n tabGroup: 'true',\n // 動畫設定\n transition: {\n duration: 500,\n timing: 'ease',\n delay: 0,\n },\n // 步驟狀態綁定\n stepOutput: '.step-show',\n },\n}\n\nexport const collapse4 = {\n SETTINGS: {\n collapseClass: 'collapse',\n block: '[collapse-block]',\n target: '[collapse-target]',\n single: true,\n defaultOpen: false,\n targetStopPropagation: false,\n defaultActiveMark: 'collapse-active',\n transition: {\n property: 'height',\n duration: '400ms',\n function: 'ease',\n delay: '0s',\n },\n // expand\n breakpoints: {\n 320: {},\n },\n },\n // ATTRS: {\n // wrapper: 'collapse-wrapper',\n // block: 'collapse-block',\n // target: 'collapse-target',\n // },\n EVENTS: {\n init: null,\n afterInit: null,\n destroy: null,\n beforeDestroy: null,\n update: null,\n afterUpdate: null,\n },\n}\n\nexport const ripple4 = {\n SETTINGS: {\n // 是否要加 hover 效果?\n hover: true,\n // 使用 hover 時是否要啟用點擊 ripple 效果?\n click: false,\n // ripple's 的顏色\n color: '#fff',\n // ripple's 透明度\n opacity: '1',\n // ripple 毫秒\n duration: 600,\n // hover 毫秒 ?\n speed: 600,\n },\n}\n\n\n\n","\n// insertAdjacentHTML 語意化\nexport const insert = {\n before: 'beforebegin',\n after: 'afterend',\n append: 'beforeend',\n prepend: 'afterbegin'\n}\n\n// check value is string and not empty\nexport const isString = (value) => {\n return typeof value === 'string' && value !== '';\n};\n\n// check value is number and not NaN\nexport const isNumber = (value) => {\n return typeof value === 'number' && !isNaN(value);\n};\n\n// check is HTML element\nexport const isElement = (value) => {\n return value instanceof HTMLElement;\n};\n\n// check is Node List\nexport const isNodeList = (value) => {\n return value instanceof NodeList;\n};\n\n// check element is exist\nexport const isElementExist = (value) => {\n return getElement(value) !== null;\n};\n\n// check value is a function\nexport const isFunction = (value) => {\n return typeof value === 'function';\n};\n\n// if value is an element then return value, if not then query value\nexport const getElement = (value) => {\n return isElement(value) ? value : document.querySelector(value);\n};\n\n// if value is an element then return value, if not then query value\nexport const getAllElements = (value) => {\n return isNodeList(value) ? value : document.querySelectorAll(value);\n};\n\n// create a unique id\nexport const createUid = () => {\n return Math.random().toString(36).substr(2, 9);\n};\n\n// parse string to HTML element\nexport const toHTMLElement = (str) => {\n const dom = document.createElement('div');\n dom.innerHTML = str;\n return dom.childNodes;\n};\n\n// parse json to object\nexport const jsonParse = (json) => {\n try {\n JSON.parse(json);\n } catch (e) {\n return json;\n }\n return JSON.parse(json);\n};\n\n// get element transform X\nexport const getTransformX = (target) => {\n const transform = getComputedStyle(target).transform;\n let mat = transform.match(/^matrix3d\\((.+)\\)$/);\n if (mat) return parseFloat(mat[1].split(', ')[12]);\n mat = transform.match(/^matrix\\((.+)\\)$/);\n return mat ? parseFloat(mat[1].split(', ')[4]) : 0;\n};\n\n// get element transform Y\nexport const getTransformY = (target) => {\n const transform = getComputedStyle(target).transform;\n let mat = transform.match(/^matrix3d\\((.+)\\)$/);\n if (mat) return parseFloat(mat[1].split(', ')[13]);\n mat = transform.match(/^matrix\\((.+)\\)$/);\n return mat ? parseFloat(mat[1].split(', ')[5]) : 0;\n};\n\n// warn\nexport const warn = (target, msg) => {\n console.warn(`[${target} warn]: ${msg}`);\n};\n\n// error\nexport const error = (target, msg) => {\n console.error(`[${target} error]: ${msg}`);\n};\n","import { isFunction } from './utils'\n\nexport default {\n on(events, handler) {\n if (!isFunction(handler)) return this;\n\n const { __events__ } = this\n\n events.split(' ').forEach(evt => {\n if (!__events__[evt]) __events__[evt] = []\n __events__[evt].push(handler)\n })\n\n return this\n },\n\n off(events, handler) {\n const { __events__ } = this\n\n events.split(' ').forEach(evt => {\n if (typeof handler === 'undefined') __events__[evt] = []\n else if (__events__[evt]) {\n __events__[evt].forEach((evtHandler, index) => {\n if (evtHandler === handler) __events__[evt].splice(index, 1)\n })\n }\n })\n\n return this\n },\n\n once(events, handler) {\n if (!isFunction(handler)) return this;\n\n const onceHandler = (...args) => {\n this.off(events, onceHandler)\n handler.apply(this, args)\n }\n\n return this.on(events, onceHandler)\n },\n\n emit(...args) {\n const { __events__ } = this\n\n const event = args[0]\n const data = args.slice(1, args.length)\n\n if (!__events__[event]) return this\n\n __events__[event].forEach(handler => {\n if (isFunction(handler)) handler.apply(this, data)\n })\n\n return this\n }\n}","import { configs } from '../configs'\nimport {\n EVENTS,\n isString,\n isElementExist,\n isFunction,\n getElement,\n getAllElements\n} from '../commons'\n\nconst ease = {\n easeInOutCirc(t, b, c, d) {\n if ((t /= d / 2) < 1) return (-c / 2) * (Math.sqrt(1 - t * t) - 1) + b;\n return (c / 2) * (Math.sqrt(1 - (t -= 2) * t) + 1) + b;\n },\n easeInQuart(t, b, c, d) {\n return c * (t /= d) * t * t * t + b;\n },\n easeOutQuart(t, b, c, d) {\n return -c * ((t = t / d - 1) * t * t * t - 1) + b;\n },\n};\n\n// scroll handler\nconst scrollTo = (options, instance) => {\n const { target, container, spacer, speed, gap, easing, direction } = options;\n\n const isHorizontal = direction === 'horizontal';\n const scrollDirection = isHorizontal ? 'scrollLeft' : 'scrollTop';\n const rectPosition = isHorizontal ? 'left' : 'top';\n const rectSpace = isHorizontal ? 'width' : 'height';\n\n const containerEle = isElementExist(container) ? getElement(container) : document.scrollingElement;\n const start = containerEle[scrollDirection];\n const targetPoint = isElementExist(target) ? getElement(target).getBoundingClientRect()[rectPosition] : 0 - start;\n const spacerGap = isElementExist(spacer) ? getElement(spacer).getBoundingClientRect()[rectSpace] : 0;\n const change = targetPoint - gap - spacerGap;\n const increment = 15;\n let currentTime = 0;\n\n if (change === 0) return;\n\n const emitEvent = eventName => {\n const targetEle = getElement(target);\n if (instance) instance.emit(eventName, targetEle);\n if (!instance && options.on) {\n if (isFunction(options.on[eventName])) options.on[eventName](targetEle);\n }\n };\n\n emitEvent('beforeScroll');\n\n const animateScroll = () => {\n currentTime += increment;\n const val = ease[easing](currentTime, start, change, speed);\n containerEle[scrollDirection] = val;\n if (currentTime < speed) requestAnimationFrame(animateScroll);\n if (currentTime >= speed) emitEvent('afterScroll');\n };\n\n requestAnimationFrame(animateScroll);\n};\n\n// class Anchor4\nclass Anchor4 {\n constructor(el, options = {}) {\n this.__storage__ = {\n el,\n options,\n };\n\n this.active = 'data-anchor-active'\n this.#create();\n }\n\n #create() {\n const { el, options } = this.__storage__;\n if (!isString(el) || !isElementExist(el)) return;\n\n const { SETTINGS, EVENTS } = configs.anchor4;\n //wade\n this.elements = options.state == \"not active\" ? getAllElements(el + `:not([${this.active}])`) : getAllElements(el);\n this.elements = getAllElements(el);\n this.options = Object.assign({}, SETTINGS, options);\n this.__events__ = Object.assign({}, EVENTS);\n\n if (this.options.on) {\n for (const [k, v] of Object.entries(this.options.on)) {\n this.__events__[k] = [v];\n }\n }\n\n this.#init();\n }\n\n #init() {\n const { elements, options } = this;\n\n elements.forEach(el => {\n el.anchor = {};\n el.anchor.instance = this;\n el.anchor.eventHandler = this.#trigger;\n el.anchor.defaultOptions = options;\n el.anchor.methods = {};\n el.anchor.methods.destroy = this.destroy;\n el.anchor.methods.update = this.update;\n el.addEventListener('click', el.anchor.eventHandler);\n //wade\n el.setAttribute(this.active, '')\n });\n\n this.emit('afterInit');\n }\n\n #trigger() {\n /** the keyword `this` in this method is pointed to the click target */\n const { defaultOptions, eventHandler, instance } = this.anchor;\n\n const options = {\n target: this.getAttribute('data-anchor-target') || defaultOptions.target,\n container: this.getAttribute('data-anchor-container') || defaultOptions.container,\n spacer: this.getAttribute('data-anchor-spacer') || defaultOptions.spacer,\n gap: parseInt(this.getAttribute('data-anchor-gap') || defaultOptions.gap),\n speed: parseInt(this.getAttribute('data-anchor-speed')) || defaultOptions.speed,\n delay: parseInt(this.getAttribute('data-anchor-delay')) || defaultOptions.delay,\n easing: this.getAttribute('data-anchor-easing') || defaultOptions.easing,\n direction: this.getAttribute('data-anchor-direction') || defaultOptions.direction,\n };\n\n // prevent multiple click\n this.removeEventListener('click', eventHandler);\n setTimeout(() => {\n this.addEventListener('click', eventHandler);\n }, options.speed);\n\n // do scroll\n setTimeout(() => {\n scrollTo(options, instance);\n }, options.delay);\n }\n\n destroy() {\n const { elements } = this;\n\n this.emit('beforeDestroy');\n\n elements.forEach(el => {\n if (!el.anchor) return;\n\n el.removeEventListener('click', el.anchor.eventHandler);\n delete el.anchor;\n });\n\n return this;\n }\n\n update() {\n this.destroy().#create();\n\n this.emit('afterUpdate');\n\n return this;\n }\n\n static run(options) {\n const { SETTINGS } = configs.anchor4;\n const newOptions = Object.assign({}, SETTINGS, options);\n\n setTimeout(() => {\n scrollTo(newOptions);\n }, newOptions.delay);\n }\n\n static url(options) {\n\n const { SETTINGS } = configs.anchor4;\n const { hashName } = options;\n\n const targetStr = window.location.search || window.location.hash;\n const { searchParams } = new URL(window.location)\n\n const target = document.querySelector(`[data-anchor-id=\"${hashName\n ? searchParams.get(hashName)\n : targetStr.split('?').pop()}\"]`);\n\n // console.log(\"anchor-hashName\", hashName);\n // console.log(\"anchor-searchParams\", searchParams.get(hashName));\n // console.log(\"anchor-targetStr\", targetStr.split('?').pop());\n // console.log(\"anchor-target\", target);\n\n if (!target) return;\n\n const newOptions = Object.assign({}, SETTINGS, options, { target });\n\n setTimeout(() => {\n scrollTo(newOptions);\n }, newOptions.delay);\n }\n}\n\nObject.assign(Anchor4.prototype, EVENTS);\n\nexport default Anchor4;\n","import { configs } from '../configs'\nimport { EVENTS, createUid, warn } from '../commons'\nimport { OverlayScrollbars } from 'overlayscrollbars'\n\nif (!window.MODALS) window.MODALS = {};\n\nconst { MODALS } = window;\n\n// create template method\nconst createTemplate = el => {\n const { TEMPLATE } = configs.modal4;\n const { childDom } = el;\n const container = document.createElement('div');\n container.innerHTML = TEMPLATE(el.getAttribute('data-modal-template-setting'));\n\n const content = container.querySelector('.modal-content');\n [...childDom].forEach(child => {\n content.append(child);\n });\n\n return container.children[0];\n};\n\n// class\nclass ModernModal extends HTMLElement {\n constructor() {\n super();\n this.initialize = false;\n }\n\n static get observedAttributes() {\n return [':state'];\n }\n\n attributeChangedCallback(attr, oldVal, newVal) {\n switch (attr) {\n case ':state':\n this.#stateControl(newVal);\n break;\n }\n }\n\n connectedCallback() {\n if (this.initialize) return;\n this.initialize = true;\n this.#create();\n }\n\n #create() {\n const { ATTRS } = configs.modal4;\n\n this.__events__ = {};\n\n if (!this.getAttribute(':state')) {\n this.setAttribute(':state', 'close');\n }\n\n const id = this.getAttribute(ATTRS.id) || createUid();\n if (!this.getAttribute(ATTRS.id)) {\n warn(`modern-modal needs a ${ATTRS.id} attribute with a unique id.`);\n this.setAttribute(ATTRS.id, id);\n }\n\n if (MODALS[id]) warn(`the ${ATTRS.id} \"${id}\" is already be used.`);\n MODALS[id] = this;\n\n this.#mount();\n }\n\n #mount() {\n this.childDom = this.childNodes;\n this.template = createTemplate(this);\n\n this.innerHTML = '';\n this.append(this.template);\n\n this.#init();\n }\n\n #init() {\n const scroller = this.querySelector('.modal-scroller');\n\n this.__scroller__ = OverlayScrollbars(scroller, {\n overflowBehavior: {\n x: 'hidden',\n },\n autoUpdate: true,\n });\n window.modalScroll = this.__scroller__ \n this.#event();\n }\n\n #event() {\n const $self = this;\n const { ATTRS } = configs.modal4;\n const { close, destroy } = ATTRS;\n\n $self.querySelectorAll(`[${close}]`)?.forEach(el => {\n el.addEventListener('click', function () {\n const closeAttr = this.getAttribute(close);\n const closeTarget = closeAttr && MODALS[closeAttr] ? MODALS[closeAttr] : $self;\n closeTarget.close();\n });\n });\n\n $self.querySelectorAll(`[${destroy}]`)?.forEach(el => {\n el.addEventListener('click', function () {\n const destroyAttr = this.getAttribute(destroy);\n const destroyTarget = destroyAttr && MODALS[destroyAttr] ? MODALS[destroyAttr] : $self;\n destroyTarget.destroy();\n });\n });\n\n $self.querySelector('[stop-propagation]')?.addEventListener('click', function (e) {\n e.stopPropagation();\n });\n }\n\n #stateControl(state) {\n const { __scroller__ } = this;\n\n if (state === 'open') {\n this.style.display = 'block';\n if (__scroller__) {\n const { viewport } = __scroller__.elements();\n viewport.scrollTo({\n top: 0,\n });\n }\n setTimeout(() => {\n this.classList.add('show');\n this.emit('open');\n }, 100);\n }\n if (state === 'close') {\n if (!this.classList.contains('show')) return;\n this.classList.remove('show');\n const transitionEndHandler = () => {\n this.style.removeProperty('display');\n this.emit('close');\n this.removeEventListener('transitionend', transitionEndHandler);\n };\n this.addEventListener('transitionend', transitionEndHandler);\n }\n if (state === 'destroy') {\n this.classList.remove('show');\n const transitionEndHandler = () => {\n const { ATTRS } = configs.modal4;\n const id = this.getAttribute(ATTRS.id);\n this.style.removeProperty('display');\n this.emit('close');\n this.remove();\n this.emit('destroy');\n if (MODALS[id]) delete MODALS[id];\n };\n this.addEventListener('transitionend', transitionEndHandler);\n }\n }\n\n open() {\n this.setAttribute(':state', 'open');\n\n return this;\n }\n\n close() {\n this.setAttribute(':state', 'close');\n\n return this;\n }\n\n destroy() {\n this.setAttribute(':state', 'destroy');\n\n return this;\n }\n}\n\n// install on and emit\nObject.assign(ModernModal.prototype, EVENTS);\n\nexport default ModernModal;\n","import { configs } from '../configs'\nimport ModernModal from './modernModal'\nimport {\n EVENTS,\n isString,\n isElementExist,\n isFunction,\n getElement,\n getAllElements,\n toHTMLElement,\n jsonParse, warn\n} from '../commons'\n\nconst { MODALS } = window;\n\n// use methods (for instance)\nconst useMethod = (instance, name, ...args) => {\n if (!name) return;\n const handler = instance[name];\n\n if (handler && isFunction(handler)) {\n handler.apply(instance, args);\n }\n};\n\n// use function (for static)\nconst useFunction = (handler, ...args) => {\n if (handler && isFunction(handler)) {\n handler.apply(Modal4, args);\n }\n};\n\n// dispatch modal\nconst dispatchModal = (options, instance) => {\n const { target } = options;\n\n const modal = MODALS[target] || getElement(options.target);\n\n if (modal) useModal(options, instance);\n if (!modal) useFetch(options, instance);\n};\n\n//\nconst useModal = (options, instance) => {\n const { target, action, on, e } = options;\n\n const modal = MODALS[target] || getElement(options.target);\n const events = ['open', 'close', 'destroy'];\n\n // trigger events\n events.forEach(name => {\n modal.once(name, () => {\n if (instance) {\n instance.emit(name, modal, e);\n useMethod(instance, on[name], modal, e);\n }\n if (!instance) {\n useFunction(on[name], modal);\n }\n });\n });\n\n // action\n switch (action) {\n case 'open':\n modal.open();\n break;\n case 'close':\n modal.close();\n break;\n case 'destroy':\n modal.destroy();\n break;\n default:\n const state = modal.getAttribute(':state');\n if (state === 'close') modal.open();\n if (state === 'open') modal.close();\n break;\n }\n};\n\n// fetch modal from files\nconst useFetch = async (options, instance) => {\n const { target, route, container, on, e } = options;\n\n if (!route) return warn('modal4', 'cannot find target or data-modal-route is not defined');\n\n // trigger event handler\n const useEvent = (name, ...args) => {\n if (instance) {\n instance.emit(name, ...args);\n useMethod(instance, on[name], ...args);\n }\n if (!instance) {\n useFunction(on[name], ...args);\n }\n };\n\n // get response\n fetch(route)\n .then(res => {\n // trigger success event\n useEvent('success', e);\n\n return res.text();\n })\n .then(data => {\n const doms = toHTMLElement(data); /** modern-modal is initialized in this state */\n const containerElement = getElement(container) || getElement(configs.modal4.SETTINGS.container);\n\n // append dom\n [...doms].forEach(dom => {\n containerElement.append(dom);\n });\n\n const modal = MODALS[target] || getElement(options.target);\n\n // trigger complete event\n useEvent('complete', modal);\n useModal(options, instance);\n })\n .catch(error => {\n // trigger error event\n useEvent('error', error);\n });\n};\n\nclass Modal4 {\n constructor(el, options = {}) {\n this.__storage__ = {\n el,\n options,\n };\n\n this.active = 'data-modal-active'\n this.#create();\n }\n\n #create() {\n const { el, options } = this.__storage__;\n if (!isString(el) || !isElementExist(el)) return;\n\n const { SETTINGS, EVENTS } = configs.modal4;\n\n //wade\n this.elements = options.state == \"not active\" ? getAllElements(el + `:not([${this.active}])`) : getAllElements(el);\n // this.elements = getAllElements(el);\n this.options = Object.assign({}, SETTINGS, options);\n this.__events__ = Object.assign({}, EVENTS);\n\n if (this.options.on) {\n for (const [k, v] of Object.entries(this.options.on)) {\n this.__events__[k] = [v];\n }\n }\n\n this.#init();\n }\n\n #init() {\n const { elements, options } = this;\n\n elements.forEach(el => {\n el.modal = {};\n el.modal.instance = this;\n el.modal.eventHandler = this.#trigger;\n el.modal.defaultOptions = options;\n el.modal.methods = {};\n el.modal.methods.destroy = this.destroy;\n el.modal.methods.update = this.update;\n el.addEventListener('click', el.modal.eventHandler);\n //wade\n el.setAttribute(this.active, '')\n });\n\n this.emit('init');\n }\n\n #trigger(e) {\n /** the keyword `this` in this method is pointed to the click target */\n const { defaultOptions, eventHandler, instance } = this.modal;\n\n const ons = jsonParse(this.getAttribute('data-modal-on'));\n if (ons && typeof ons !== 'object') warn('modal4', 'data-modal-on must be a json string.');\n\n const options = {\n target: this.getAttribute('data-modal-target') || defaultOptions.target,\n action: this.getAttribute('data-modal-action') || defaultOptions.action,\n route: this.getAttribute('data-modal-route') || defaultOptions.route,\n container: this.getAttribute('data-modal-container') || defaultOptions.container,\n on: ons && typeof ons === 'object' ? ons : {},\n e,\n };\n\n // prevent multiple click\n this.removeEventListener('click', eventHandler);\n setTimeout(() => {\n this.addEventListener('click', eventHandler);\n }, 200);\n\n // get modal\n dispatchModal(options, instance);\n }\n\n destroy() {\n const { elements } = this;\n\n elements.forEach(el => {\n if (!el.modal) return;\n\n el.removeEventListener('click', el.modal.eventHandler);\n delete el.modal;\n });\n\n return this;\n }\n\n update() {\n this.destroy().#create();\n\n this.emit('update');\n\n return this;\n }\n\n /** static method 'open' */\n static open(options) {\n const { SETTINGS } = configs.modal4;\n const openOptions = Object.assign({}, SETTINGS, { on: {} }, options);\n dispatchModal(openOptions);\n }\n\n /** static method 'defineMethods' */\n static defineMethods(obj) {\n if (!Modal4.prototype.__methods__) Modal4.prototype.__methods__ = {};\n const methods = Modal4.prototype.__methods__;\n\n for (const [k, v] of Object.entries(obj)) {\n if (isFunction(v)) methods[k] = v;\n }\n\n Object.assign(Modal4.prototype, Modal4.prototype.__methods__);\n }\n}\n\nObject.assign(Modal4.prototype, EVENTS);\n\n// define custom element\ncustomElements.define('modern-modal', ModernModal);\n\nexport default Modal4;\n","import { configs } from '../configs'\nimport {\n EVENTS,\n isString,\n isElementExist,\n getElement,\n getAllElements\n} from '../commons'\n\n\nconst interaction = (scrollElement, elements) => {\n const viewHeight = scrollElement === window ? scrollElement.innerHeight : scrollElement.getBoundingClientRect().height;\n const viewTop = scrollElement === window ? 0 : scrollElement.getBoundingClientRect().top;\n\n elements.forEach(el => {\n const { class: className, delay, start, end, repeat, instance } = el.aost;\n\n const { top, bottom } = el.getBoundingClientRect();\n const startTrigger = viewHeight * (start / 100);\n const endTrigger = viewHeight * (end / 100);\n const isEntered = top - viewTop <= startTrigger && bottom - viewTop >= endTrigger;\n\n // in view\n if (isEntered && el.offsetParent) {\n setTimeout(() => {\n // instance.emit('enter', el);\n el.classList.add(className);\n }, delay);\n }\n // out of view\n else {\n const shouldRemove = (el.classList.contains(className) && repeat === 'down' && top - viewTop >= startTrigger) || (repeat === 'up' && bottom - viewTop <= endTrigger) || repeat === true;\n setTimeout(() => {\n // instance.emit('leave', el);\n if (shouldRemove) el.classList.remove(className);\n }, delay);\n }\n });\n};\n\nconst detectRepeat = (repeatType, options) => {\n if (repeatType === 'up' || repeatType === 'down') {\n return repeatType;\n }\n\n if (repeatType !== null) {\n if (repeatType === 'true') {\n return true;\n } else if (repeatType === 'false') {\n return false;\n } else {\n return options.repeat;\n }\n }\n\n return options.repeat;\n};\n\nclass Aost4 {\n constructor(el, options = {}) {\n this.__storage__ = {\n el,\n options,\n };\n\n this.active = 'data-aost-active'\n this.#create();\n }\n\n #create() {\n const { el, options } = this.__storage__;\n if (!isString(el) || !isElementExist(el)) return;\n\n const { SETTINGS, EVENTS } = configs.aost4;\n\n //wade\n this.elements = options.state == \"not active\" ? getAllElements(el + `:not([${this.active}])`) : getAllElements(el);\n // this.elements = getAllElements(el);\n this.options = Object.assign({}, SETTINGS, options);\n this.__events__ = Object.assign({}, EVENTS);\n\n if (this.options.on) {\n for (const [k, v] of Object.entries(this.options.on)) {\n this.__events__[k] = [v];\n }\n }\n\n this.#init();\n }\n\n #init() {\n const { elements, options } = this;\n const { scroller } = options;\n const scrollElement = scroller === window || !isElementExist(scroller) ? window : getElement(scroller);\n\n this.eventHandler = () => {\n interaction(scrollElement, elements);\n };\n\n elements.forEach(el => {\n el.aost = {};\n el.aost.class = el.getAttribute('data-aost-class') || options.class;\n el.aost.delay = parseInt(el.getAttribute('data-aost-delay')) || options.delay;\n el.aost.start = parseInt(el.getAttribute('data-aost-start')) || options.start;\n el.aost.end = parseInt(el.getAttribute('data-aost-end')) || options.end;\n el.aost.repeat = detectRepeat(el.getAttribute('data-aost-repeat'), options);\n el.aost.methods = {};\n el.aost.methods.destroy = this.destroy;\n el.aost.methods.update = this.update;\n el.aost.instance = this;\n //wade\n el.setAttribute(this.active, '')\n });\n\n const { eventHandler } = this;\n eventHandler();\n scrollElement.aost = {};\n scrollElement.aost.eventHandler = eventHandler;\n scrollElement.addEventListener('scroll', scrollElement.aost.eventHandler, false);\n }\n\n destroy(removeShow) {\n const { elements, options } = this;\n if (!elements) return this;\n\n const { scroller } = options;\n const scrollElement = scroller === window || !isElementExist(scroller) ? window : getElement(scroller);\n\n if (scrollElement.aost) {\n scrollElement.removeEventListener('scroll', scrollElement.aost.eventHandler);\n delete scrollElement.aost;\n }\n\n elements.forEach(el => {\n if (!el.aost) return;\n const { class: className } = el.aost;\n if (removeShow) {\n el.classList.remove(className);\n }\n delete el.aost;\n });\n\n return this;\n }\n\n update(removeShow) {\n this.destroy(removeShow).#create();\n }\n}\n\nObject.assign(Aost4.prototype, EVENTS);\n\nexport default Aost4;\n","import { configs } from '../configs'\nimport { insert, warn } from '../commons'\n\n// create template method\nconst createTemplate = el => {\n const { TEMPLATE } = configs.video4;\n const { childDom } = el;\n const container = document.createElement('div');\n container.innerHTML = TEMPLATE();\n\n const content = container.querySelector('.player-wrapper');\n [...childDom].forEach(child => {\n content.append(child);\n });\n\n return container.children[0];\n};\n\n// class\nclass videoPlayer extends HTMLElement {\n constructor() {\n super();\n\n this.#create();\n }\n\n #create() {\n if (!this.getAttribute('video-id')) {\n warn('videoPlayer', `video-render needs a ['video-id'] attribute to creat player.`);\n return;\n }\n\n this.videoId = this.getAttribute('video-id');\n this.videoType = this.getAttribute('video-type');\n this.autoplay = this.getAttribute('video-autoplay');\n this.startTime = this.getAttribute('video-starttime');\n\n this.#mount();\n }\n\n #mount() {\n this.childDom = this.childNodes;\n this.template = createTemplate(this);\n\n // 清空原本結構\n this.innerHTML = '';\n // 放置整理過後的結構\n this.append(this.template);\n\n this.#init();\n }\n\n #init() {\n const { videoType } = this;\n let layout = '';\n\n switch (videoType) {\n case 'youtubeAPI':\n // this.#youtubeAPI();\n break;\n case 'youtube':\n layout = this.#youtube();\n break;\n case 'youkuAPI':\n // this.#youkuAPI();\n break;\n case 'youku':\n layout = this.#youku();\n break;\n case 'vimeo':\n layout = this.#vimeo();\n break;\n case 'bilibili':\n layout = this.#bilibili();\n break;\n case 'instagram':\n layout = this.#instagram();\n break;\n case 'tiktok':\n layout = this.#tiktok();\n break;\n case 'videojs':\n // this.#videoJs();\n break;\n default:\n break;\n }\n\n this.querySelector('.player-wrapper').insertAdjacentHTML(insert.prepend, layout);\n }\n\n // youtube iframe\n #youtube() {\n const { videoId, autoplay, startTime } = this;\n return `<iframe src=\"https://www.youtube.com/embed/${videoId}?rel=0&${autoplay === 'on' ? 'autoplay=1' : ''}&start=${startTime}&mute=1&loop=1&enablejsapi=1\" frameborder=\"0\" allowfullscreen=\"0\" volumn=\"0\" allow=\"${autoplay === 'on' ? 'autoplay;' : ''} encrypted-media; gyroscope; picture-in-picture;\"></iframe>`;\n }\n\n // vimeo iframe\n #vimeo() {\n const { videoId, autoplay, hash } = this;\n\n return `<iframe src=\"https://player.vimeo.com/video/${videoId}?h=${hash}&${autoplay === 'on' ? 'autoplay=1' : ''}&loop=1&color=ffffff&title=0&byline=0&portrait=0\" frameborder=\"0\" allow=\"${autoplay === 'on' ? 'autoplay;' : ''\n } fullscreen; picture-in-picture\" allowfullscreen></iframe><script src=\"https://player.vimeo.com/api/player.js\"></script>`;\n }\n\n // youku iframe\n #youku() {\n const { videoId, autoplay } = this;\n return `<iframe src=\"https://player.youku.com/embed/${videoId}?rel=0&${autoplay === 'on' ? 'autoplay=1' : ''}\" frameborder=0 \"allowfullscreen\"></iframe>`;\n }\n\n #bilibili() {\n const { videoId, autoplay } = this;\n return `<iframe src=\"//player.bilibili.com/player.html?bvid=${videoId}&page=1&as_wide=1&high_quality=1&danmaku=0\" scrolling=\"no\" border=\"0\" frameborder=\"no\" framespacing=\"0\" allowfullscreen=\"true\"></iframe>`;\n }\n\n // 2025.02.11 新增 ig \n #instagram() {\n const { videoId, autoplay } = this;\n return `<iframe class=\"instagram-media instagram-media-rendered\" id=\"instagram-embed-0\" src=\"https://www.instagram.com/p/${videoId}/embed/\" width=\"num-w\" height=\" num-h\" scrolling=\"auto\" frameborder=\"0\" data-instgrm-payload-id=\"instagram-media-payload-0\"></iframe>`;\n }\n \n // 2025.02.11 新增 tiktok \n #tiktok() {\n const { videoId, autoplay } = this;\n return `<iframe name=\"__tt_embed__v79271677875424740\" sandbox=\"allow-popups allow-popups-to-escape-sandbox allow-scripts allow-top-navigation allow-same-origin\" src=\"https://www.tiktok.com/player/v1/${videoId}?&${autoplay === 'on' ? 'autoplay=1' : ''}\"></iframe>`;\n }\n\n play() {\n const { videoType } = this;\n\n switch (videoType) {\n case 'youtubeAPI':\n // 無可用 function\n break;\n case 'youtube':\n this.querySelector('iframe').contentWindow.postMessage(JSON.stringify({ event: 'command', func: 'playVideo' }), '*');\n break;\n case 'youkuAPI':\n // 無可用 function\n break;\n case 'youku':\n // 無可用 function\n break;\n case 'vimeo':\n this.querySelector('iframe').contentWindow.postMessage(JSON.stringify({ value: 'true', method: 'play' }), '*');\n break;\n case 'bilibili':\n // 無可用 function\n break;\n case 'instagram':\n // 無可用 function\n break;\n case 'tiktok':\n // 無可用 function\n break;\n case 'videojs':\n // 無可用 function\n break;\n default:\n break;\n }\n }\n\n pause() {\n const { videoType } = this;\n\n switch (videoType) {\n case 'youtubeAPI':\n // 無可用 function\n break;\n case 'youtube':\n this.querySelector('iframe').contentWindow.postMessage(JSON.stringify({ event: 'command', func: 'pauseVideo' }), '*');\n break;\n case 'youkuAPI':\n // 無可用 function\n break;\n case 'youku':\n // 無可用 function\n break;\n case 'vimeo':\n this.querySelector('iframe').contentWindow.postMessage(JSON.stringify({ value: 'true', method: 'pause' }), '*');\n break;\n case 'bilibili':\n // 無可用 function\n break;\n case 'instagram':\n // 無可用 function\n break;\n case 'tiktok':\n // 無可用 function\n break;\n case 'videojs':\n // 無可用 function\n break;\n default:\n break;\n }\n }\n}\n\nexport default videoPlayer;\n","import { Aost4, Anchor4, ImageValidate, ImagePreview } from '@/fesd'\nimport LazyLoad from 'vanilla-lazyload'\nimport { lock, unlock } from 'tua-body-scroll-lock'\nimport { OverlayScrollbars } from 'overlayscrollbars'\n\n\nexport const sleep = (time) => new Promise((resolve) => {\n let timer = setTimeout(() => {\n clearTimeout(timer)\n return resolve()\n }, time)\n})\nexport function scrollLock(elements) {\n const elementArr = [];\n if (elements) {\n elements.forEach(element => {\n if (element instanceof HTMLElement) {\n elementArr.push(element);\n } else if (typeof element === 'string') {\n elementArr.push(...document.querySelectorAll(`${element}`));\n }\n });\n }\n $('html').addClass('scrollLock');\n lock(elementArr);\n}\n\nexport function scrollUnlock(elements) {\n const elementArr = [];\n if (elements) {\n elements.forEach(element => {\n if (element instanceof HTMLElement) {\n elementArr.push(element);\n } else if (typeof element === 'string') {\n elementArr.push(...document.querySelectorAll(`${element}`));\n }\n });\n }\n $('html').removeClass('scrollLock');\n unlock(elementArr);\n}\n\nexport async function loading(timerout = 0) {\n const $loading = $(\".loading-wrapper\")\n if ($loading.length) return\n\n const LoadingDOM = `\n <div class=\"loading-wrapper\">\n <div class=\"icon-box\">\n <svg xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\" viewBox=\"0 0 100 100\" preserveAspectRatio=\"xMidYMid\"><path d=\"M10 50A40 40 0 0 0 90 50A40 42 0 0 1 10 50\" fill=\"#ffffff\" stroke=\"none\">\n <animateTransform attributeName=\"transform\" type=\"rotate\" dur=\"1s\" repeatCount=\"indefinite\" keyTimes=\"0;1\" values=\"0 50 51;360 50 51\">\n </animateTransform>\n </path>\n </svg>\n </div>\n </div>\n `;\n\n $('body').append(LoadingDOM);\n\n $('.loading-wrapper')\n .delay(timerout)\n .fadeIn(300)\n .promise()\n .done(function () {\n scrollLock();\n });\n}\n\nexport function loaded() {\n $('.loading-wrapper')\n .fadeOut(300)\n .promise()\n .done(function () {\n $('.loading-wrapper').remove();\n scrollUnlock();\n });\n}\n\n\nexport function imagePreview(selector, options) {\n new ImagePreview(selector, options);\n}\n\nexport function ajaxUpdate() {\n const aost4 = new Aost4('[data-aost]')\n const lazy = new LazyLoad({ callback_loaded: img => { }, })\n const imageValidate = new ImageValidate()\n const anchor4 = new Anchor4('[data-anchor-target]')\n\n aost4.update();\n lazy.update();\n imageValidate.reValidate();\n anchor4.update();\n\n}\n\nexport function tabChange(target, callback = () => { }) {\n const $target = $(`[data-tab-content=${target}]`);\n $target.fadeIn(function () {\n if (typeof callback === \"function\") {\n callback();\n }\n }).siblings(\"[data-tab-content]\").hide();\n ajaxUpdate();\n}\n\n\n// WDD function 工具包\n/**\n *\n */\nexport function bodyScrollbarInit() {\n const bodyScrollbar = OverlayScrollbars(\n {\n target: document.body,\n cancel: {\n nativeScrollbarsOverlaid: true,\n body: null,\n },\n },\n {\n overflow: {\n x: 'hidden',\n },\n scrollbars: {\n autoHide: 'scroll',\n autoHideSuspend: true,\n },\n },\n {\n initialized() {\n console.log('body scrollbar initialized');\n },\n },\n );\n}\n/**\n * iOS 回上一頁空白修正\n */\nexport function appleDebug() {\n window.onpageshow = function (event) {\n if (event.persisted) {\n window.location.reload();\n }\n };\n}\n/**\n * 偵測 MacOS 版本\n * @returns\n */\nexport function detectMacOSVersion() {\n const userAgent = navigator.userAgent;\n return {\n BigSurUP: /Mac OS X 10.15/.test(userAgent) || /Mac OS X 10_15_7/.test(userAgent) || /Mac OS X 10_15_8/.test(userAgent) || /Mac OS X 10_15_9/.test(userAgent) || /Mac OS X 11_/.test(userAgent) || /Mac OS X 12_/.test(userAgent),\n };\n}\n\n/**\n * 點擊開關class\n * @param {object} target 目標 element\n * @param {string} className 欲切換的 class 名稱\n */\nexport function clickToggleClass(target, className) {\n $(target).on('click', function () {\n $(this).toggleClass(className);\n });\n}\n\n/**\n * 點擊切換active\n * @param {object} target 目標 element\n * @param {string} className 欲切換的 class 名稱\n */\nexport function clickSwitchClass(target, className) {\n $(target).on('click', function () {\n $(target).not(this).removeClass(className);\n $(this).addClass(className);\n });\n}\n\n/**\n * Debounce(去抖動)\n * @param {function} func 欲防止重複執行的 function\n * @param {number} delay 延遲執行的時間(毫秒)\n * @returns\n */\nexport function debounce(func, delay = 250) {\n let timer = null;\n return function (...args) {\n let context = this;\n clearTimeout(timer);\n timer = setTimeout(() => {\n func.apply(context, args);\n }, delay);\n };\n}\n\n/**\n * Throttle (節閥)\n * @param {*} func 欲防止重複執行的 function\n * @param {*} timeout 設定多少毫秒內只執行一次\n * @returns\n */\nexport function throttle(func, timeout = 250) {\n let last;\n let timer;\n return function () {\n const context = this;\n const args = arguments;\n const now = +new Date();\n if (last && now < last + timeout) {\n clearTimeout(timer);\n timer = setTimeout(function () {\n last = now;\n func.apply(context, args);\n }, timeout);\n } else {\n last = now;\n func.apply(context, args);\n }\n };\n}\n\n/**\n * 倒數計時\n *\n * 搭配以下結構使用\n *\n * .countdown(data-seconds=\"600\") data-seconds 填入欲倒數秒數\n *\n * clearInterval(_g.interval[?]) 可以暫停\n */\nexport function countDown() {\n window._g.interval = [];\n const countdowns = $('.countdown');\n countdowns.each((i, el) => {\n const set_seconds = Number($(el).attr('data-seconds')) + 1;\n let set_time = Math.floor(set_seconds / 60) + ':' + (set_seconds % 60);\n window._g.interval[i] = setInterval(function () {\n var timer = set_time.split(':');\n var minutes = parseInt(timer[0], 10);\n var seconds = parseInt(timer[1], 10);\n --seconds;\n minutes = seconds < 0 ? --minutes : minutes;\n minutes = minutes < 10 ? (minutes = '0' + minutes) : minutes;\n if (minutes == 0 && seconds == 0) clearInterval(window._g.interval[i]);\n seconds = seconds < 0 ? 59 : seconds;\n seconds = seconds < 10 ? '0' + seconds : seconds;\n $(el).html(minutes + ':' + seconds);\n set_time = minutes + ':' + seconds;\n }, 1000);\n });\n}\n\n\nexport function delay(time = 500) {\n return new Promise((resolve, reject) => {\n let timer = setTimeout(() => {\n clearTimeout(timer)\n resolve()\n }, time)\n })\n}\n\n/**\n * 計算手機100vh\n */\nexport function fixMobile100vh() {\n const init = function () {\n let vh = window.innerHeight * 0.01;\n document.documentElement.style.setProperty('--vh', vh + 'px');\n };\n init();\n window.addEventListener('resize', debounce(init));\n}\n\n/**\n * 文字切割\n * @param {object} target 目標 element\n * @param {boolean} isWrap 是否要每個單字再包一層\n * @param {number} delayStartTime 第一個的延遲時間(若為'random'則隨機)\n * @param {number} delaySpace 每一個字元延遲的間隔時間\n * @param {number} randomTransTime 隨機transition Max time\n */\nexport function wordAnimation(target, isWrap, delayStartTime, delaySpace, randomTransTime) {\n const $this = this;\n const word = $(target).html();\n const removeBr = word.split('<br>');\n let newText = '';\n let index = 0;\n removeBr.forEach((words, s) => {\n if (s !== 0) newText += `<br>`;\n const letters = words.split('');\n letters.forEach((letter, i) => {\n if (isWrap) {\n if (i === 0) newText += `<span class=\"letter-wrap\" style=\"display: inline-block\">`;\n if (letter === ' ') newText += '</span> <span class=\"letter-wrap\" style=\"display: inline-block\">';\n else {\n newText += `<span class=\"letter\"${randomTransTime || delayStartTime\n ? ` style=\"${randomTransTime ? `transition: ${$this.formatFloat(Math.random(), 2) * randomTransTime}s;` : ''}${delayStartTime ? (delayStartTime === 'random' ? `transition-delay: ${$this.formatFloat(Math.random(), 2)}s;` : `transition-delay: ${delayStartTime + index * delaySpace}s;`) : ''\n }\"`\n : ''\n }>${letter}</span>`;\n index++;\n }\n if (i === words.length - 1) newText += `</span>`;\n } else {\n if (letter === ' ') newText += ' ';\n else {\n newText += `<span class=\"letter\"${randomTransTime || delayStartTime\n ? ` style=\"${randomTransTime ? `transition: ${$this.formatFloat(Math.random(), 2) * randomTransTime}s;` : ''}${delayStartTime ? (delayStartTime === 'random' ? `transition-delay: ${$this.formatFloat(Math.random(), 2)}s;` : `transition-delay: ${delayStartTime + index * delaySpace}s;`) : ''\n }\"`\n : ''\n }>${letter}</span>`;\n index++;\n }\n }\n });\n });\n $(target).html(newText);\n}\n\n/**\n * 小數點後第N位四捨五入\n * @param {number} num 欲四捨五入的數字\n * @param {number} pos 欲取得小數點後第幾位\n * @returns\n */\nexport function formatFloat(num, pos) {\n const size = Math.pow(10, pos);\n return Math.round(num * size) / size;\n}\n\n/**\n * 取得SliderIndex\n * @param {object} swiper swiper物件\n * @returns\n */\nexport function getSlideDataIndex(swiper) {\n let activeIndex = swiper.activeIndex;\n let slidesLen = swiper.slides.length;\n if (swiper.params.loop) {\n switch (swiper.activeIndex) {\n case 0:\n activeIndex = slidesLen - 3;\n break;\n case slidesLen - 1:\n activeIndex = 0;\n break;\n default:\n --activeIndex;\n }\n }\n return activeIndex;\n}\n\n/**\n * 判斷Swiper輪播數量\n * @param {object} swiper swiper物件\n * @param {number} disableNum 設定數量 <= 多少會禁用 swiper\n */\nexport function getSlidesCount(swiper, disableNum) {\n const container = swiper.$el;\n const gridRows = swiper.params.grid.rows;\n const disableCount = disableNum ? disableNum : swiper.params.slidesPerView * gridRows;\n const slidesCount = () => {\n if (swiper.loopedSlides) return swiper.slides.length - swiper.loopedSlides * 2;\n else return swiper.slides.length;\n };\n if (slidesCount() <= disableCount) {\n container.addClass('swiper-no-swiping');\n $(swiper.params.navigation.nextEl).hide();\n $(swiper.params.navigation.prevEl).hide();\n $(swiper.params.pagination.el).hide();\n swiper.params.autoplay.enabled = false;\n swiper.autoplay.stop();\n } else {\n container.removeClass('swiper-no-swiping');\n $(swiper.params.navigation.nextEl).show();\n $(swiper.params.navigation.prevEl).show();\n $(swiper.params.pagination.el).show();\n if (swiper.params.autoplay.enabled) {\n swiper.autoplay.start();\n }\n }\n}\n\n/**\n * 偵測 swiper 內圖片深淺\n * @param {object} swiper swiper物件\n */\nexport function slideImgDetect(swiper) {\n swiper.el.querySelectorAll('img.detect-shade').forEach(img => {\n img.addEventListener('load', function () {\n detectShade(img);\n });\n });\n}\n\n/**\n * 判斷當前輪播是否為影片\n * @param {object} swiper swiper物件\n */\nexport function isVideo(swiper) {\n const container = swiper.el;\n const activeSlide = $(container).find('.swiper-slide-active');\n const video = $(activeSlide).find('video').get(0);\n const allVideo = $(container).find('.swiper-slide video');\n swiper.autoplay.stop();\n $(video).off('ended');\n if (video) {\n allVideo.each((index, el) => {\n el.currentTime = 0;\n });\n $(video).on('ended', function () {\n swiper.slideNext();\n });\n video.play();\n } else {\n if (swiper.params.autoplay.enabled) {\n swiper.autoplay.start();\n }\n }\n}\n\n/**\n * 數字從0跑到9\n *\n * 要用之前記得引用 layouts/_growAnimate.sass\n *\n * 結構 <div class=\"number-grow\" data-num=\"12345\"></div>\n */\nexport function numberGrow() {\n $('.number-grow').each(function (index, el) {\n const ele = $(el);\n const num = ele.attr('data-num');\n const comma = num.replace(/(\\d)(?=(?:\\d{3})+$)/g, '$1,');\n const splitNum = comma.split('');\n const zeroToNine = () => {\n let text = '';\n for (var i = 0; i <= 9; i++) {\n text += String(i) + '<br>';\n }\n return text;\n };\n $(splitNum).each(function (i, el) {\n const dom = () => {\n if (el !== ',') return `<div class=\"num\" data-final-num=\"${el}\"><div><br>${zeroToNine()}<br>${zeroToNine()}</div></div>`;\n else return `<div class=\"comma\">${el}</div>`;\n };\n ele.append(dom);\n });\n });\n}\n\n/**\n * 英文從A跑到Z(只能大寫)\n *\n * 要用之前記得引用 layouts/_growAnimate.sass\n *\n * 結構 結構 <div class=\"letter-grow\" data-num=\"ABCDE\"></div>\n */\nexport function letterGrow() {\n $('.letter-grow').each(function (index, el) {\n const ele = $(el);\n const letter = ele.attr('data-letter');\n const splitLetter = letter.split('');\n const a_z = [];\n const aToZ = () => {\n let text = '';\n for (let i = 65; i <= 90; i++) {\n a_z.push(String.fromCharCode(i));\n text += String.fromCharCode(i) + '<br>';\n }\n return text;\n };\n $(splitLetter).each(function (i, el) {\n const dom = `<div class=\"letter\" data-final-letter=\"${el}\"><div><br>${aToZ()}<br>${aToZ()}</div></div>`;\n ele.append(dom);\n });\n });\n}\n\n/**\n * 取得 target 的 transformX\n * @param {object} target 目標 element\n * @returns\n */\nexport function getTransformX(target) {\n const transform = getComputedStyle(target).transform;\n let mat = transform.match(/^matrix3d\\((.+)\\)$/);\n if (mat) return parseFloat(mat[1].split(', ')[12]);\n mat = transform.match(/^matrix\\((.+)\\)$/);\n return mat ? parseFloat(mat[1].split(', ')[4]) : 0;\n}\n\n/**\n * 取得 target 的 transformY\n * @param {object} target 目標 element\n * @returns\n */\nexport function getTransformY(target) {\n const transform = getComputedStyle(target).transform;\n let mat = transform.match(/^matrix3d\\((.+)\\)$/);\n if (mat) return parseFloat(mat[1].split(', ')[13]);\n mat = transform.match(/^matrix\\((.+)\\)$/);\n return mat ? parseFloat(mat[1].split(', ')[5]) : 0;\n}\n\n/**\n * HTML 字串轉 DOM\n * @param {string} htmlString HTML 字串\n * @returns\n */\nexport function htmlStringToDOM(htmlString) {\n const dom = document.createElement('div');\n dom.innerHTML = htmlString;\n return dom.childNodes[0];\n}","import { configs } from '../configs'\nimport Modal4 from '../modal4'\nimport videoPlayer from './videoPlayer'\nimport { scrollLock, scrollUnlock } from \"@/tools\"\nimport LazyLoad from 'vanilla-lazyload';\nimport {\n EVENTS,\n isString,\n isElement,\n isNodeList,\n getAllElements,\n warn,\n error,\n insert\n} from '../commons'\n\n// 判斷影片物件有沒有 video-id\nconst hasVideoID = data => {\n return data.videoId !== '' || typeof data.videoId !== 'undefined' ? true : false;\n};\n\n// 判斷影片物件是否已經啟用\nconst isActive = data => {\n return data.$selector.getAttribute('video4-active') === 'on' ? true : false;\n};\n\nconst createPlayer = params => {\n return `<video-player video-id=\"${params.videoId}\" video-type=\"${params.videoType}\" video-startTime=\"${params.videoStartTime}\" video-autoplay=\"${params.videoAutoplay}\"></video-player>`;\n};\n\nclass video4 {\n constructor(el, options = {}) {\n // 可傳 string 或 element 或 nodeList\n if (!isString(el) && !isElement(el) && !isNodeList(el)) {\n error('video4', `找不到該物件 -> ${el}`);\n return;\n }\n\n this.__storage__ = {\n el,\n options,\n };\n\n this.active = 'data-video-active'\n this.#create();\n }\n\n #create() {\n const { el, options } = this.__storage__;\n // 從 configs 提取設定\n const { SETTINGS, EVENTS } = configs.video4;\n\n //wade\n this.elements = options.state == \"not active\" ? getAllElements(el + `:not([${this.active}])`) : getAllElements(el);\n // this.elements = getAllElements(el);\n this.options = Object.assign({}, SETTINGS, options);\n this.__events__ = Object.assign({}, EVENTS);\n\n if (this.options.on) {\n for (const [k, v] of Object.entries(this.options.on)) {\n this.__events__[k] = [v];\n }\n }\n\n this.#init();\n }\n\n #init() {\n const { elements, options } = this;\n\n elements.forEach(el => {\n el.video = {};\n el.video.instance = this;\n el.video.defaultOptions = options;\n el.video.params = this.#getVideoData(el);\n el.video.methods = {};\n el.video.methods.update = this.update;\n\n //wade\n el.setAttribute(this.active, '')\n\n if (hasVideoID(el.video.params) && !isActive(el.video.params)) {\n el.setAttribute('video4-active', 'on');\n this.#createCover(el);\n }\n\n if (!hasVideoID(el.video.params)) {\n error('video4', `無法取得影片 ID`);\n }\n });\n\n this.emit('init');\n }\n\n #createCover(el) {\n const { LAYOUT } = configs.video4;\n const params = el.video.params;\n const { $selector, videoLayoutNo, videoId, videoType, videoMode, videoButton, videoCover, videoHighQualityPic } = params;\n\n if (videoMode === 'onBox') {\n let $target = null;\n if (videoCover === 'on') {\n el.classList.add('video4-cover');\n // 無圖片結構放置圖片結構\n if (!$selector.querySelector('img')) {\n $selector.insertAdjacentHTML(insert.prepend, '<picture><source srcset=\"\" type=\"image/webp\"><source srcset=\"\" type=\"image/jpeg\"><img src=\"\" alt></picture>');\n warn('video4', `若啟用 [videoCover] 且選擇 onBox 模式必須於 video-target 內放置 img 結構,若無結構則自動加入圖片結構`);\n }\n\n const $cover = $selector.querySelector('img');\n $cover.insertAdjacentHTML(insert.after, LAYOUT[videoLayoutNo]);\n\n const src = $cover?.getAttribute('src') || $cover?.getAttribute('data-src');\n\n // 無圖片時放置預設封面畫面,僅 youtube & vimeo 提供\n if (!src && videoType == 'youtube') {\n if (videoHighQualityPic == 'on') {\n $cover.setAttribute('src', `http://img.youtube.com/vi/${videoId}/maxresdefault.jpg `);\n } else {\n $cover.setAttribute('src', `https://img.youtube.com/vi/${videoId}/0.jpg`);\n }\n } else if (!src && videoType == 'vimeo') {\n $cover.setAttribute('src', `https://vumbnail.com/${videoId}_large.jpg`);\n } else if (!src && videoType == 'tiktok') {\n fetch(`https://www.tiktok.com/oembed?url=https://www.tiktok.com/@/video/${videoId}`, { method: 'GET', redirect: 'follow' })\n .then(response => {\n return response.json();\n })\n .then(html => {\n const url = html.thumbnail_url\n // console.log(html.thumbnail_url);\n $cover.setAttribute('src', `${url}`);\n })\n .catch(function (err) {\n console.log('error')\n });\n } else {\n warn('video4', `僅 youtube & vimeo 提供,無圖片時放置預設封面畫面,其他影片平台請自行上傳封面照片`);\n }\n }\n\n // 若無設定撥放按鈕,則點擊物件轉移為物件本身\n if (videoButton == 'off') {\n $target = $selector;\n } else {\n $target = $selector.querySelector(videoButton) ?? $selector;\n if (!$selector.querySelector(videoButton)) {\n warn('video4', `找不到 videoButton 設定的 element -> '${videoButton}' , 點擊物件轉移至 '${this.__storage__.el}'`);\n }\n }\n\n if (!$target.video) {\n $target.video = {};\n $target.video.params = params;\n }\n\n $target.video.eventHandler = this.#trigger;\n $target.addEventListener('click', $target.video.eventHandler);\n } else if (videoMode === 'onPage') {\n let $target = null;\n if (videoCover == 'on') {\n el.classList.add('video4-cover');\n // 無圖片結構放置圖片結構\n if (!$selector.querySelector('img')) {\n $selector.insertAdjacentHTML(insert.prepend, '<picture><source srcset=\"\" type=\"image/webp\"><source srcset=\"\" type=\"image/jpeg\"><img src=\"\" alt></picture>');\n warn('video', `若啟用 [videoCover] 且選擇 onBox 模式必須於 video-target 內放置 img 結構`);\n }\n\n const $cover = $selector.querySelector('img');\n $cover.insertAdjacentHTML(insert.after, LAYOUT[videoLayoutNo]);\n\n const src = $cover?.getAttribute('src') || $cover?.getAttribute('data-src');\n\n // 無圖片時放置預設封面畫面,僅 youtube 提供\n if (!src && videoType == 'youtube') {\n if (videoHighQualityPic == 'on') {\n $cover.setAttribute('src', `http://img.youtube.com/vi/${videoId}/maxresdefault.jpg `);\n } else {\n $cover.setAttribute('src', `https://img.youtube.com/vi/${videoId}/0.jpg`);\n }\n } else if (!src && videoType == 'vimeo') {\n $cover.setAttribute('src', `https://vumbnail.com/${videoId}_large.jpg`);\n } else if (!src && videoType == 'tiktok') {\n fetch(`https://www.tiktok.com/oembed?url=https://www.tiktok.com/@/video/${videoId}`, { method: 'GET', redirect: 'follow' })\n .then(response => {\n return response.json();\n })\n .then(html => {\n const url = html.thumbnail_url\n // console.log(html.thumbnail_url);\n $cover.setAttribute('src', `${url}`);\n })\n .catch(function (err) {\n console.log('error')\n });\n } else if (!src) {\n warn('video4', `僅 youtube & vimeo 提供,無圖片時放置預設封面畫面,其他影片平台請自行上傳封面照片`);\n }\n\n // 若無設定撥放按鈕,則點擊物件轉移為物件本身\n if (videoButton == 'off') {\n $target = $selector;\n } else {\n $target = $selector.querySelector(videoButton) ?? $selector;\n if (!$selector.querySelector(videoButton)) {\n warn('video4', `找不到 videoButton 設定的 element -> '${videoButton}', 點擊物件轉移至 '${this.__storage__.el}'`);\n }\n }\n } else {\n $selector.innerHTML = createPlayer(params);\n return;\n }\n\n if (!$target.video) {\n $target.video = {};\n $target.video.params = params;\n }\n\n $target.video.eventHandler = this.#trigger;\n $target.addEventListener('click', $target.video.eventHandler);\n }\n }\n\n #trigger(e) {\n const { video, emit } = this;\n const { $selector, videoMode, videoTarget, videoKeep, videoTargetRoute, videoType, videoIgHtml } = video.params;\n const lazy = new LazyLoad({ callback_loaded: img => { }, })\n\n if (videoMode == 'onBox') {\n const options = {\n target: videoTarget,\n route: videoTargetRoute,\n on: {\n complete(modal) {\n if (videoType == 'instagram') {\n modal.setAttribute('video-typeStyle', `${videoType}`)\n if (window.instgrm) {\n window.instgrm.Embeds.process();\n } else {\n const script = document.createElement(\"script\");\n script.src = \"https://www.instagram.com/embed.js\";\n script.async = true;\n document.body.appendChild(script);\n }\n } else {\n modal.querySelector('.modal-content').insertAdjacentHTML('beforeend', createPlayer(video.params));\n modal.setAttribute('video-typeStyle', `${videoType}`)\n }\n },\n open(modal) {\n const scrollers = modal.querySelectorAll('[data-overlayscrollbars-viewport]');\n lazy.update();\n scrollLock([...scrollers]);\n if (videoType == 'instagram') {\n const target = document.querySelector('[video-template] .modal-content');\n const resizeObserver = new ResizeObserver(entries => {\n // console.log(entries[0].contentRect.height)\n if (entries[0].contentRect.height > 50) {\n target.classList.add('active');\n }\n });\n\n resizeObserver.observe(target);\n }\n },\n close(modal) {\n const scrollers = modal.querySelectorAll('[data-overlayscrollbars-viewport]');\n scrollUnlock([...scrollers]);\n },\n destroy(modal) {\n },\n },\n };\n\n Modal4.open(options);\n\n\n } else if (videoMode == 'onPage') {\n // onPage 點擊後應自動撥放影片\n video.params.videoAutoplay = 'on';\n\n if (videoKeep == 'off') {\n // 直接替換 cover & playButton\n $selector.innerHTML = createPlayer(video.params);\n return;\n } else {\n // 保留原結構\n const $videoBox = $selector.querySelector(videoKeep) ?? $selector;\n $videoBox.insertAdjacentHTML('beforeend', createPlayer(video.params));\n return;\n }\n }\n }\n\n #getVideoData(el) {\n const { SETTINGS } = configs.video4;\n\n return {\n $selector: el,\n videoId: el.getAttribute('video-id'),\n videoType: el.getAttribute('video-type'),\n videoAutoplay: el.getAttribute('video-autoplay') || SETTINGS.videoAutoplay,\n videoMode: el.getAttribute('video-mode') || SETTINGS.videoMode,\n videoButton: el.getAttribute('video-button') || SETTINGS.videoButton,\n videoKeep: el.getAttribute('video-keep') || SETTINGS.videoKeep,\n videoCover: el.getAttribute('video-cover') || SETTINGS.videoCover,\n videoLayoutNo: el.getAttribute('video-layout-no') || SETTINGS.videoLayoutNo,\n videoTarget: el.getAttribute('video-target') || SETTINGS.videoTarget,\n videoTargetRoute: el.getAttribute('video-target-route') || SETTINGS.videoTargetRoute,\n videoStartTime: el.getAttribute('video-starttime') || SETTINGS.videoStartTime,\n videoHighQualityPic: el.getAttribute('video-highquality') || SETTINGS.videoHighQuality,\n videoIgHtml: el.getAttribute('video-ig') || SETTINGS.videoIgHtml,\n };\n }\n\n update() {\n this.#create();\n }\n}\n\nObject.assign(video4.prototype, EVENTS);\n\n// define custom element\ncustomElements.define('video-player', videoPlayer);\nexport default video4;\n","export const cityData = {\n 'zh-tw': {\n 臺北市: [\n ['中正區', '100'],\n ['大同區', '103'],\n ['中山區', '104'],\n ['松山區', '105'],\n ['大安區', '106'],\n ['萬華區', '108'],\n ['信義區', '110'],\n ['士林區', '111'],\n ['北投區', '112'],\n ['內湖區', '114'],\n ['南港區', '115'],\n ['文山區', '116'],\n ],\n 新北市: [\n ['萬里區', '207'],\n ['金山區', '208'],\n ['板橋區', '220'],\n ['汐止區', '221'],\n ['深坑區', '222'],\n ['石碇區', '223'],\n ['瑞芳區', '224'],\n ['平溪區', '226'],\n ['雙溪區', '227'],\n ['貢寮區', '228'],\n ['新店區', '231'],\n ['坪林區', '232'],\n ['烏來區', '233'],\n ['永和區', '234'],\n ['中和區', '235'],\n ['土城區', '236'],\n ['三峽區', '237'],\n ['樹林區', '238'],\n ['鶯歌區', '239'],\n ['三重區', '241'],\n ['新莊區', '242'],\n ['泰山區', '243'],\n ['林口區', '244'],\n ['蘆洲區', '247'],\n ['五股區', '248'],\n ['八里區', '249'],\n ['淡水區', '251'],\n ['三芝區', '252'],\n ['石門區', '253'],\n ],\n 基隆市: [\n ['仁愛區', '200'],\n ['信義區', '201'],\n ['中正區', '202'],\n ['中山區', '203'],\n ['安樂區', '204'],\n ['暖暖區', '205'],\n ['七堵區', '206'],\n ],\n 宜蘭縣: [\n ['宜蘭市', '260'],\n ['頭城鎮', '261'],\n ['礁溪鄉', '262'],\n ['壯圍鄉', '263'],\n ['員山鄉', '264'],\n ['羅東鎮', '265'],\n ['三星鄉', '266'],\n ['大同鄉', '267'],\n ['五結鄉', '268'],\n ['冬山鄉', '269'],\n ['蘇澳鎮', '270'],\n ['南澳鄉', '272'],\n ],\n 桃園市: [\n ['中壢區', '320'],\n ['平鎮區', '324'],\n ['龍潭區', '325'],\n ['楊梅區', '326'],\n ['新屋區', '327'],\n ['觀音區', '328'],\n ['桃園區', '330'],\n ['龜山區', '333'],\n ['八德區', '334'],\n ['大溪區', '335'],\n ['復興區', '336'],\n ['大園區', '337'],\n ['蘆竹區', '338'],\n ],\n 新竹市: [\n ['東區', '300'],\n ['北區', '301'],\n ['香山區', '309'],\n ],\n 新竹縣: [\n ['竹北市', '302'],\n ['湖口鄉', '303'],\n ['新豐鄉', '304'],\n ['新埔鎮', '305'],\n ['關西鎮', '306'],\n ['芎林鄉', '307'],\n ['寶山鄉', '308'],\n ['竹東鎮', '310'],\n ['五峰鄉', '311'],\n ['橫山鄉', '312'],\n ['尖石鄉', '313'],\n ['北埔鄉', '314'],\n ['峨嵋鄉', '315'],\n ],\n 苗栗縣: [\n ['竹南鎮', '350'],\n ['頭份鎮', '351'],\n ['三灣鄉', '352'],\n ['南庄鄉', '353'],\n ['獅潭鄉', '354'],\n ['後龍鎮', '356'],\n ['通霄鎮', '357'],\n ['苑裡鎮', '358'],\n ['苗栗市', '360'],\n ['造橋鄉', '361'],\n ['頭屋鄉', '362'],\n ['公館鄉', '363'],\n ['大湖鄉', '364'],\n ['泰安鄉', '365'],\n ['銅鑼鄉', '366'],\n ['三義鄉', '367'],\n ['西湖鄉', '368'],\n ['卓蘭鎮', '369'],\n ],\n 臺中市: [\n ['中區', '400'],\n ['東區', '401'],\n ['南區', '402'],\n ['西區', '403'],\n ['北區', '404'],\n ['北屯區', '406'],\n ['西屯區', '407'],\n ['南屯區', '408'],\n ['太平區', '411'],\n ['大里區', '412'],\n ['霧峰區', '413'],\n ['烏日區', '414'],\n ['豐原區', '420'],\n ['后里區', '421'],\n ['石岡區', '422'],\n ['東勢區', '423'],\n ['和平區', '424'],\n ['新社區', '426'],\n ['潭子區', '427'],\n ['大雅區', '428'],\n ['神岡區', '429'],\n ['大肚區', '432'],\n ['沙鹿區', '433'],\n ['龍井區', '434'],\n ['梧棲區', '435'],\n ['清水區', '436'],\n ['大甲區', '437'],\n ['外埔區', '438'],\n ['大安區', '439'],\n ],\n 彰化縣: [\n ['彰化市', '500'],\n ['芬園鄉', '502'],\n ['花壇鄉', '503'],\n ['秀水鄉', '504'],\n ['鹿港鎮', '505'],\n ['福興鄉', '506'],\n ['線西鄉', '507'],\n ['和美鎮', '508'],\n ['伸港鄉', '509'],\n ['員林鎮', '510'],\n ['社頭鄉', '511'],\n ['永靖鄉', '512'],\n ['埔心鄉', '513'],\n ['溪湖鎮', '514'],\n ['大村鄉', '515'],\n ['埔鹽鄉', '516'],\n ['田中鎮', '520'],\n ['北斗鎮', '521'],\n ['田尾鄉', '522'],\n ['埤頭鄉', '523'],\n ['溪州鄉', '524'],\n ['竹塘鄉', '525'],\n ['二林鎮', '526'],\n ['大城鄉', '527'],\n ['芳苑鄉', '528'],\n ['二水鄉', '530'],\n ],\n 南投縣: [\n ['南投市', '540'],\n ['中寮鄉', '541'],\n ['草屯鎮', '542'],\n ['國姓鄉', '544'],\n ['埔里鎮', '545'],\n ['仁愛鄉', '546'],\n ['名間鄉', '551'],\n ['集集鎮', '552'],\n ['水里鎮', '553'],\n ['魚池鄉', '555'],\n ['信義鄉', '556'],\n ['竹山鎮', '557'],\n ['鹿谷鄉', '558'],\n ],\n 雲林縣: [\n ['斗南鎮', '630'],\n ['大埤鄉', '631'],\n ['虎尾鎮', '632'],\n ['土庫鎮', '633'],\n ['褒忠鄉', '634'],\n ['東勢鄉', '635'],\n ['臺西鄉', '636'],\n ['崙背鄉', '637'],\n ['麥寮鄉', '638'],\n ['斗六市', '640'],\n ['林內鄉', '643'],\n ['古坑鄉', '646'],\n ['莿桐鄉', '647'],\n ['西螺鎮', '648'],\n ['二崙鄉', '649'],\n ['北港鎮', '651'],\n ['水林鄉', '652'],\n ['口湖鄉', '653'],\n ['四湖鄉', '654'],\n ['元長鄉', '655'],\n ],\n 嘉義市: [\n ['西區', '600'],\n ['東區', '601'],\n ],\n 嘉義縣: [\n ['番路鄉', '602'],\n ['梅山鄉', '603'],\n ['竹崎鄉', '604'],\n ['阿里山鄉', '605'],\n ['中埔鄉', '606'],\n ['大埔鄉', '607'],\n ['水上鄉', '608'],\n ['鹿草鄉', '611'],\n ['太保市', '612'],\n ['朴子市', '613'],\n ['東石鄉', '614'],\n ['六腳鄉', '615'],\n ['新港鄉', '616'],\n ['民雄鄉', '621'],\n ['大林鎮', '622'],\n ['溪口鄉', '623'],\n ['義竹鄉', '624'],\n ['布袋鎮', '625'],\n ],\n 臺南市: [\n ['中西區', '700'],\n ['東區', '701'],\n ['南區', '702'],\n ['北區', '704'],\n ['安平區', '708'],\n ['安南區', '709'],\n ['永康區', '710'],\n ['歸仁區', '711'],\n ['新化區', '712'],\n ['左鎮區', '713'],\n ['玉井區', '714'],\n ['楠西區', '715'],\n ['南化區', '716'],\n ['仁德區', '717'],\n ['關廟區', '718'],\n ['龍崎區', '719'],\n ['官田區', '720'],\n ['麻豆區', '721'],\n ['佳里區', '722'],\n ['西港區', '723'],\n ['七股區', '724'],\n ['將軍區', '725'],\n ['學甲區', '726'],\n ['北門區', '727'],\n ['新營區', '730'],\n ['後壁區', '731'],\n ['白河區', '732'],\n ['東山區', '733'],\n ['六甲區', '734'],\n ['下營區', '735'],\n ['柳營區', '736'],\n ['鹽水區', '737'],\n ['善化區', '741'],\n ['大內區', '742'],\n ['山上區', '743'],\n ['新市區', '744'],\n ['安定區', '745'],\n ],\n 高雄市: [\n ['新興區', '800'],\n ['前金區', '801'],\n ['苓雅區', '802'],\n ['鹽埕區', '803'],\n ['鼓山區', '804'],\n ['旗津區', '805'],\n ['前鎮區', '806'],\n ['三民區', '807'],\n ['楠梓區', '811'],\n ['小港區', '812'],\n ['左營區', '813'],\n ['仁武區', '814'],\n ['大社區', '815'],\n ['岡山區', '820'],\n ['路竹區', '821'],\n ['阿蓮區', '822'],\n ['田寮區', '823'],\n ['燕巢區', '824'],\n ['橋頭區', '825'],\n ['梓官區', '826'],\n ['彌陀區', '827'],\n ['永安區', '828'],\n ['湖內區', '829'],\n ['鳳山區', '830'],\n ['大寮區', '831'],\n ['林園區', '832'],\n ['鳥松區', '833'],\n ['大樹區', '840'],\n ['旗山區', '842'],\n ['美濃區', '843'],\n ['六龜區', '844'],\n ['內門區', '845'],\n ['杉林區', '846'],\n ['甲仙區', '847'],\n ['桃源區', '848'],\n ['那瑪夏區', '849'],\n ['茂林區', '851'],\n ['茄萣區', '852'],\n ],\n 屏東縣: [\n ['屏東市', '900'],\n ['三地鄉', '901'],\n ['霧臺鄉', '902'],\n ['瑪家鄉', '903'],\n ['九如鄉', '904'],\n ['里港鄉', '905'],\n ['高樹鄉', '906'],\n ['鹽埔鄉', '907'],\n ['長治鄉', '908'],\n ['麟洛鄉', '909'],\n ['竹田鄉', '911'],\n ['內埔鄉', '912'],\n ['萬丹鄉', '913'],\n ['潮州鎮', '920'],\n ['泰武鄉', '921'],\n ['來義鄉', '922'],\n ['萬巒鄉', '923'],\n ['崁頂鄉', '924'],\n ['新埤鄉', '925'],\n ['南州鄉', '926'],\n ['林邊鄉', '927'],\n ['東港鎮', '928'],\n ['琉球鄉', '929'],\n ['佳冬鄉', '931'],\n ['新園鄉', '932'],\n ['枋寮鄉', '940'],\n ['枋山鄉', '941'],\n ['春日鄉', '942'],\n ['獅子鄉', '943'],\n ['車城鄉', '944'],\n ['牡丹鄉', '945'],\n ['恒春鎮', '946'],\n ['滿州鄉', '947'],\n ],\n 花蓮縣: [\n ['花蓮市', '970'],\n ['新城鄉', '971'],\n ['秀林鄉', '972'],\n ['吉安鄉', '973'],\n ['壽豐鄉', '974'],\n ['鳳林鎮', '975'],\n ['光復鄉', '976'],\n ['豐濱鄉', '977'],\n ['瑞穗鄉', '978'],\n ['萬榮鄉', '979'],\n ['玉里鎮', '981'],\n ['卓溪鄉', '982'],\n ['富里鄉', '983'],\n ],\n 臺東縣: [\n ['臺東市', '950'],\n ['綠島鄉', '951'],\n ['蘭嶼鄉', '952'],\n ['延平鄉', '953'],\n ['卑南鄉', '954'],\n ['鹿野鄉', '955'],\n ['關山鎮', '956'],\n ['海端鄉', '957'],\n ['池上鄉', '958'],\n ['東河鄉', '959'],\n ['成功鄉', '961'],\n ['長濱鄉', '962'],\n ['太麻里鄉', '963'],\n ['金峰鄉', '964'],\n ['大武鄉', '965'],\n ['達仁鄉', '966'],\n ],\n 澎湖縣: [\n ['馬公市', '880'],\n ['西嶼鄉', '881'],\n ['望安鄉', '882'],\n ['七美鄉', '883'],\n ['白沙鄉', '884'],\n ['湖西鄉', '885'],\n ],\n 金門縣: [\n ['金沙鎮', '890'],\n ['金湖鎮', '891'],\n ['金寧鄉', '892'],\n ['金城鎮', '893'],\n ['烈嶼鄉', '894'],\n ['烏坵鄉', '896'],\n ],\n 連江縣: [\n ['南竿鄉', '209'],\n ['北竿鄉', '210'],\n ['莒光鄉', '211'],\n ['東引鄉', '212'],\n ],\n },\n en: {\n 'Taipei City': [\n ['Zhongzheng Dist', '100'],\n ['Datong Dist', '103'],\n ['Zhongshan Dist', '104'],\n ['Songshan Dist', '105'],\n [\"Da'an Dist\", '106'],\n ['Wanhua Dist', '108'],\n ['Xinyi Dist', '110'],\n ['Shilin Dist', '111'],\n ['Beitou Dist', '112'],\n ['Neihu Dist', '114'],\n ['Nangang Dist', '115'],\n ['Wenshan Dist', '116'],\n ],\n 'New Taipei City': [\n ['Wanli Dist', '207'],\n ['Jinshan Dist', '208'],\n ['Banqiao Dist', '220'],\n ['Xizhi Dist', '221'],\n ['Shenkeng Dist', '222'],\n ['Shiding Dist', '223'],\n ['Ruifang Dist', '224'],\n ['Pingxi Dist', '226'],\n ['Shuangxi Dist', '227'],\n ['Gongliao Dist', '228'],\n ['Xindian Dist', '231'],\n ['Pinglin Dist', '232'],\n ['Wulai Dist', '233'],\n ['Yonghe Dist', '234'],\n ['Zhonghe Dist', '235'],\n ['Tucheng Dist', '236'],\n ['Sanxia Dist', '237'],\n ['Shulin Dist', '238'],\n ['Yingge Dist', '239'],\n ['Sanchong Dist', '241'],\n ['Xinzhuang Dist', '242'],\n ['Taishan Dist', '243'],\n ['Linkou Dist', '244'],\n ['Luzhou Dist', '247'],\n ['Wugu Dist', '248'],\n ['Bali Dist', '249'],\n ['Tamsui Dist', '251'],\n ['Sanzhi Dist', '252'],\n ['Shimen Dist', '253'],\n ],\n 'Keelung City': [\n [\"Ren'ai Dist\", '200'],\n ['Xinyi Dist', '201'],\n ['Zhongzheng Dist', '202'],\n ['Zhongshan Dist', '203'],\n ['Anle Dist', '204'],\n ['Nuannuan Dist', '205'],\n ['Qidu Dist', '206'],\n ],\n 'Yilan County': [\n ['Yilan City', '260'],\n ['Toucheng Township', '261'],\n ['Jiaoxi Township', '262'],\n ['Zhuangwei Township', '263'],\n ['Yuanshan Township', '264'],\n ['Luodong Township', '265'],\n ['Sanxing Township', '266'],\n ['Datong Township', '267'],\n ['Wujie Township', '268'],\n ['Dongshan Township', '269'],\n [\"Su'ao Township\", '270'],\n ['Nan’ao Township', '272'],\n ],\n 'Taoyuan City': [\n ['Zhongli Dist', '320'],\n ['Pingzhen Dist', '324'],\n ['Longtan Dist', '325'],\n ['Yangmei Dist', '326'],\n ['Xinwu Dist', '327'],\n ['Guanyin Dist', '328'],\n ['Taoyuan Dist', '330'],\n ['Guishan Dist', '333'],\n ['Bade Dist', '334'],\n ['Daxi Dist', '335'],\n ['Fuxing Dist', '336'],\n ['Dayuan Dist', '337'],\n ['Luzhu Dist', '338'],\n ],\n 'Hsinchu City': [\n ['East Dist', '300'],\n ['North Dist', '301'],\n ['Xiangshan Dist', '309'],\n ],\n 'Hsinchu County': [\n ['Zhubei City', '302'],\n ['Hukou Township', '303'],\n ['Xinfeng Township', '304'],\n ['Xinpu Township', '305'],\n ['Guanxi Township', '306'],\n ['Qionglin Township', '307'],\n ['Baoshan Township', '308'],\n ['Zhudong Township', '310'],\n ['Wufeng Township', '311'],\n ['Hengshan Township', '312'],\n ['Jianshi Township', '313'],\n ['Beipu Township', '314'],\n ['Emei Township', '315'],\n ],\n 'Miaoli County': [\n ['Zhunan Township', '350'],\n ['Toufen City', '351'],\n ['Sanwan Township', '352'],\n ['Nanzhuang Township', '353'],\n ['Shitan Township', '354'],\n ['Houlong Township', '356'],\n ['Tongxiao Township', '357'],\n ['Yuanli Township', '358'],\n ['Miaoli City', '360'],\n ['Zaoqiao Township', '361'],\n ['Touwu Township', '362'],\n ['Gongguan Township', '363'],\n ['Dahu Township', '364'],\n [\"Tai'an Township\", '365'],\n ['Tongluo Township', '366'],\n ['Sanyi Township', '367'],\n ['Xihu Township', '368'],\n ['Zhuolan Township', '369'],\n ],\n 'Taichung City': [\n ['Central Dist', '400'],\n ['East Dist', '401'],\n ['South Dist', '402'],\n ['West Dist', '403'],\n ['North Dist', '404'],\n ['Beitun Dist', '406'],\n ['Xitun Dist', '407'],\n ['Nantun Dist', '408'],\n ['Taiping Dist', '411'],\n ['Dali Dist', '412'],\n ['Wufeng Dist', '413'],\n ['Wuri Dist', '414'],\n ['Fengyuan Dist', '420'],\n ['Houli Dist', '421'],\n ['Shigang Dist', '422'],\n ['Dongshi Dist', '423'],\n ['Heping Dist', '424'],\n ['Xinshe Dist', '426'],\n ['Tanzi Dist', '427'],\n ['Daya Dist', '428'],\n ['Shengang Dist', '429'],\n ['Dadu Dist', '432'],\n ['Shalu Dist', '433'],\n ['Longjing Dist', '434'],\n ['Wuqi Dist', '435'],\n ['Qingshui Dist', '436'],\n ['Dajia Dist', '437'],\n ['Waipu Dist', '438'],\n [\"Da'an Dist\", '439'],\n ],\n 'Changhua County': [\n ['Changhua City', '500'],\n ['Fenyuan Township', '502'],\n ['Huatan Township', '503'],\n ['Xiushui Township', '504'],\n ['Lukang Township', '505'],\n ['Fuxing Township', '506'],\n ['Xianxi Township', '507'],\n ['Hemei Township', '508'],\n ['Shengang Township', '509'],\n ['Yuanlin City', '510'],\n ['Shetou Township', '511'],\n ['Yongjing Township', '512'],\n ['Puxin Township', '513'],\n ['Xihu Township', '514'],\n ['Dacun Township', '515'],\n ['Puyan Township', '516'],\n ['Tianzhong Township', '520'],\n ['Beidou Township', '521'],\n ['Tianwei Township', '522'],\n ['Pitou Township', '523'],\n ['Xizhou Township', '524'],\n ['Zhutang Township', '525'],\n ['Erlin Township', '526'],\n ['Dacheng Township', '527'],\n ['Fangyuan Township', '528'],\n ['Ershui Township', '530'],\n ],\n 'Nantou County': [\n ['Nantou City', '540'],\n ['Zhongliao Township', '541'],\n ['Caotun Township', '542'],\n ['Guoxing Township', '544'],\n ['Puli Township', '545'],\n [\"Ren'ai Township\", '546'],\n ['Mingjian Township', '551'],\n ['Jiji Township', '552'],\n ['Shuili Township', '553'],\n ['Yuchi Township', '555'],\n ['Xinyi Township', '556'],\n ['Zhushan Township', '557'],\n ['Lugu Township', '558'],\n ],\n 'Yunlin County': [\n ['Dounan Township', '630'],\n ['Dapi Township', '631'],\n ['Huwei Township', '632'],\n ['Tuku Township', '633'],\n ['Baozhong Township', '634'],\n ['Dongshi Township', '635'],\n ['Taixi Township', '636'],\n ['Lunbei Township', '637'],\n ['Mailiao Township', '638'],\n ['Douliu City', '640'],\n ['Linnei Township', '643'],\n ['Gukeng Township', '646'],\n ['Citong Township', '647'],\n ['Xiluo Township', '648'],\n ['Erlun Township', '649'],\n ['Beigang Township', '651'],\n ['Shuilin Township', '652'],\n ['Kouhu Township', '653'],\n ['Sihu Township', '654'],\n ['Yuanzhang Township', '655'],\n ],\n 'Chiayi City': [\n ['West Dist', '600'],\n ['0', '601'],\n ],\n 'Chiayi County': [\n ['Fanlu Township', '602'],\n ['Meishan Township', '603'],\n ['Zhuqi Township', '604'],\n ['Alishan Township', '605'],\n ['Zhongpu Township', '606'],\n ['Dapu Township', '607'],\n ['Shuishang Township', '608'],\n ['Lucao Township', '611'],\n ['Taibao City', '612'],\n ['Puzi City', '613'],\n ['Dongshi Township', '614'],\n ['Liujiao Township', '615'],\n ['Xingang Township', '616'],\n ['Minxiong Township', '621'],\n ['Dalin Township', '622'],\n ['Xikou Township', '623'],\n ['Yizhu Township', '624'],\n ['Budai Township', '625'],\n ],\n 'Tainan City': [\n ['West Central Dist', '700'],\n ['East Dist', '701'],\n ['South Dist', '702'],\n ['North Dist', '704'],\n ['Anping Dist', '708'],\n ['Annan Dist', '709'],\n ['Yongkang Dist', '710'],\n ['Guiren Dist', '711'],\n ['Xinhua Dist', '712'],\n ['Zuozhen Dist', '713'],\n ['Yujing Dist', '714'],\n ['Nanxi Dist', '715'],\n ['Nanhua Dist', '716'],\n ['Rende Dist', '717'],\n ['Guanmiao Dist', '718'],\n ['Longqi Dist', '719'],\n ['Guantian Dist', '720'],\n ['Madou Dist', '721'],\n ['Jiali Dist', '722'],\n ['Xigang Dist', '723'],\n ['Qigu Dist', '724'],\n ['Jiangjun Dist', '725'],\n ['Xuejia Dist', '726'],\n ['Beimen Dist', '727'],\n ['Xinying Dist', '730'],\n ['Houbi Dist', '731'],\n ['Baihe Dist', '732'],\n ['Dongshan Dist', '733'],\n ['Liujia Dist', '734'],\n ['Xiaying Dist', '735'],\n ['Liuying Dist', '736'],\n ['Yanshui Dist', '737'],\n ['Shanhua Dist', '741'],\n ['Danei Dist', '742'],\n ['Shanshang Dist', '743'],\n ['Xinshi Dist', '744'],\n ['Anding Dist', '745'],\n ],\n 'Kaohsiung City': [\n ['Xinxing Dist', '800'],\n ['Qianjin Dist', '801'],\n ['Lingya Dist', '802'],\n ['Yancheng Dist', '803'],\n ['Gushan Dist', '804'],\n ['Qijin Dist', '805'],\n ['Qianzhen Dist', '806'],\n ['Sanmin Dist', '807'],\n ['Nanzi Dist', '811'],\n ['Xiaogang Dist', '812'],\n ['Zuoying Dist', '813'],\n ['Renwu Dist', '814'],\n ['Dashe Dist', '815'],\n ['Gangshan Dist', '820'],\n ['Luzhu Dist', '821'],\n ['Alian Dist', '822'],\n ['Tianliao Dist', '823'],\n ['Yanchao Dist', '824'],\n ['Qiaotou Dist', '825'],\n ['Ziguan Dist', '826'],\n ['Mituo Dist', '827'],\n [\"Yong'an Dist\", '828'],\n ['Hunei Dist', '829'],\n ['Fengshan Dist', '830'],\n ['Daliao Dist', '831'],\n ['Linyuan Dist', '832'],\n ['Niaosong Dist', '833'],\n ['Dashu Dist', '840'],\n ['Qishan Dist', '842'],\n ['Meinong Dist', '843'],\n ['Liugui Dist', '844'],\n ['Neimen Dist', '845'],\n ['Shanlin Dist', '846'],\n ['Jiaxian Dist', '847'],\n ['Taoyuan Dist', '848'],\n ['Namaxia Dist', '849'],\n ['Maolin Dist', '851'],\n ['Qieding Dist', '852'],\n ],\n 'Pingtung County': [\n ['Pingtung City', '900'],\n ['Sandimen Township', '901'],\n ['Wutai Township', '902'],\n ['Majia Township', '903'],\n ['Jiuru Township', '904'],\n ['Ligang Township', '905'],\n ['Gaoshu Township', '906'],\n ['Yanpu Township', '907'],\n ['Changzhi Township', '908'],\n ['Linluo Township', '909'],\n ['Zhutian Township', '911'],\n ['Neipu Township', '912'],\n ['Wandan Township', '913'],\n ['Chaozhou Township', '920'],\n ['Taiwu Township', '921'],\n ['Laiyi Township', '922'],\n ['Wanluan Township', '923'],\n ['Kanding Township', '924'],\n ['Xinpi Township', '925'],\n ['Nanzhou Township', '926'],\n ['Linbian Township', '927'],\n ['Donggang Township', '928'],\n ['Liuqiu Township', '929'],\n ['Jiadong Township', '931'],\n ['Xinyuan Township', '932'],\n ['Fangliao Township', '940'],\n ['Fangshan Township', '941'],\n ['Chunri Township', '942'],\n ['Shizi Township', '943'],\n ['Checheng Township', '944'],\n ['Mudan Township', '945'],\n ['Hengchun Township', '946'],\n ['Manzhou Township', '947'],\n ],\n 'Hualien County': [\n ['Hualien City', '970'],\n ['Xincheng Township', '971'],\n ['Xiulin Township', '972'],\n [\"Ji'an Township\", '973'],\n ['Shoufeng Township', '974'],\n ['Fenglin Township', '975'],\n ['Guangfu Township', '976'],\n ['Fengbin Township', '977'],\n ['Ruisui Township', '978'],\n ['Wanrong Township', '979'],\n ['Yuli Township', '981'],\n ['Zhuoxi Township', '982'],\n ['Fuli Township', '983'],\n ],\n 'Taitung County': [\n ['Taitung City', '950'],\n ['Ludao Township', '951'],\n ['Lanyu Township', '952'],\n ['Yanping Township', '953'],\n ['Beinan Township', '954'],\n ['Luye Township', '955'],\n ['Guanshan Township', '956'],\n ['Haiduan Township', '957'],\n ['Chishang Township', '958'],\n ['Donghe Township', '959'],\n ['Chenggong Township', '961'],\n ['Changbin Township', '962'],\n ['Taimali Township', '963'],\n ['Jinfeng Township', '964'],\n ['Dawu Township', '965'],\n ['Daren Township', '966'],\n ],\n 'Penghu County': [\n ['Magong City', '880'],\n ['Xiyu Township', '881'],\n [\"Wang'an Township\", '882'],\n ['Qimei Township', '883'],\n ['Baisha Township', '884'],\n ['Huxi Township', '885'],\n ],\n 'Kinmen County': [\n ['Jinsha Township', '890'],\n ['Jinhu Township', '891'],\n ['Jinning Township', '892'],\n ['Jincheng Township', '893'],\n ['Lieyu Township', '894'],\n ['Wuqiu Township', '896'],\n ],\n 'Lienchiang County': [\n ['Nangan Township', '209'],\n ['Beigan Township', '210'],\n ['Juguang Township', '211'],\n ['Dongyin Township', '212'],\n ],\n },\n};\n","import { configs } from '../configs'\nimport {\n EVENTS,\n isElementExist,\n getElement,\n getAllElements,\n insert,\n warn\n} from '../commons'\nimport { cityData } from './cityData'\nimport { OverlayScrollbars } from 'overlayscrollbars'\n\n('use strict');\n\n// create template method\nconst createTemplate = d4 => {\n const { TEMPLATE } = configs.dropdown4;\n const { childDom } = d4.s;\n const container = document.createElement('div');\n const filter = d4.classList.contains('filter');\n const filterPlaceholder = d4.getAttribute('filter-placeholder');\n const dropdownIcon = d4.getAttribute('d4-icon');\n\n //2024.12.31 scarlett\n //新增customTemplate\n const customTemplate = d4.getAttribute('custom-template');\n container.innerHTML = TEMPLATE(\n filter,\n filterPlaceholder,\n customTemplate,\n dropdownIcon\n );\n\n const content = container.querySelector('.dropdown-list');\n [...childDom].forEach(child => {\n if (child.tagName === 'LI') {\n if (child.classList.contains('has-sublayer')) {\n const subOptions = child.querySelectorAll('li');\n [...subOptions].forEach(subOption => {\n if (!subOption.hasAttribute('data-option') || subOption.getAttribute('data-option').trim() === '') {\n subOption.setAttribute('data-option', subOption.textContent.trim());\n }\n });\n } else {\n if (!child.hasAttribute('data-option') || child.getAttribute('data-option').trim() === '') {\n child.setAttribute('data-option', child.textContent.trim());\n }\n }\n }\n content.append(child);\n });\n\n return container.children[0];\n};\n\n/**\n * 判斷是否有設定連動\n * @param {object} d4 d4 Element\n */\nconst detectSync = d4 => {\n const controlElements = d4.getAttribute('control-elements')?.split(',');\n if (controlElements) {\n controlElements.forEach(el => {\n const disabledEl = document.querySelector(el);\n if (!disabledEl) {\n warn('dropdown', `Can't not find control element(${el})`);\n }\n if (disabledEl && disabledEl.classList.contains('disabled')) {\n disabledEl.classList.remove('disabled');\n if (disabledEl.tagName === 'DROPDOWN-EL' && disabledEl.s.activeLi) {\n setSelectDisplay(disabledEl, [...disabledEl.s.allLi].indexOf(disabledEl.s.activeLi));\n }\n }\n });\n }\n};\n\n/**\n * 顯示選擇的選項\n * @param {object} d4 d4 Element\n * @param {number} valueIndex 被選擇的選項索引值\n * @returns\n */\nconst setSelectDisplay = (d4, valueIndex) => {\n const placeholder = d4.getAttribute('d4-placeholder');\n const allLi = d4.querySelectorAll('.dropdown-list li');\n if (valueIndex < 0 || valueIndex.length === 0) {\n // 恢復空值狀態\n allLi.forEach(el => {\n el.classList.remove('active');\n });\n d4.s.activeLi = undefined;\n // 判斷單選或複選\n switch (d4.s.selectType) {\n case 'single':\n d4.s.value = {\n index: -1,\n id: undefined,\n el: undefined,\n };\n break;\n case 'multiple':\n d4.s.value = [];\n break;\n }\n\n d4.s.selectDisplayEl.textContent = placeholder.trim();\n d4.setAttribute('d4-value', '');\n } else {\n if (d4.classList.contains('disabled')) {\n d4.s.selectDisplayEl.textContent = placeholder.trim();\n return;\n }\n // 判斷單選或複選\n switch (d4.s.selectType) {\n case 'single':\n const option = allLi[valueIndex].textContent.trim();\n d4.s.allLi.forEach(el => {\n el.classList.remove('active');\n });\n allLi[valueIndex].classList.add('active');\n d4.s.selectDisplayEl.textContent = option;\n d4.s.activeLi = allLi[valueIndex];\n d4.s.value = {\n index: valueIndex,\n id: allLi[valueIndex].getAttribute('data-option'),\n el: allLi[valueIndex],\n };\n break;\n case 'multiple':\n if (Array.isArray(valueIndex)) {\n d4.s.allLi.forEach(li => {\n if (valueIndex.indexOf([...d4.s.allLi].indexOf(li)) >= 0) {\n li.classList.add('active');\n } else {\n li.classList.remove('active');\n }\n });\n }\n const activeLi = d4.querySelectorAll('.dropdown-list li.active');\n if (activeLi.length <= 0) {\n d4.s.selectDisplayEl.textContent = placeholder.trim();\n } else {\n d4.s.selectDisplayEl.textContent = '';\n activeLi.forEach(li => {\n const id = li.getAttribute('data-option');\n const option = li.textContent.trim();\n const tagEl = `<div class=\"option-btn\" data-option=\"${id}\"><div class=\"text\">${option}</div><div class=\"remove-icon\"></div></div>`;\n d4.s.selectDisplayEl.insertAdjacentHTML(insert.append, tagEl);\n });\n }\n d4.s.activeLi = activeLi;\n d4.s.value = [...activeLi].map(option => {\n const obj = {\n index: [...allLi].indexOf(option),\n id: option.getAttribute('data-option'),\n el: option,\n };\n return obj;\n });\n const valueArray = [...activeLi].map(option => option.getAttribute('data-option'));\n d4.setAttribute('d4-value', valueArray.join());\n break;\n }\n }\n};\n\n/**\n * 載入台灣縣市資料\n * @param {*} d4 d4 Element\n */\nconst loadCityData = d4 => {\n const lang = d4.s.cityLang;\n // 塞入縣市資料\n if (d4.classList.contains('city')) {\n d4.s.dropdownEl.querySelector('.dropdown-list').innerHTML = '';\n Object.keys(cityData[lang]).forEach(city => {\n const li = document.createElement('li');\n li.textContent = city;\n li.setAttribute('data-option', city);\n d4.s.dropdownEl.querySelector('.dropdown-list').append(li);\n });\n d4.s.allLi = d4.querySelectorAll('.dropdown-list li');\n }\n};\n\n/**\n * 載入對應地區資料\n */\nconst loadDistData = (d4, city) => {\n const lang = d4.s.cityLang;\n // 塞入地區資料\n cityData[lang][city].forEach((dist, index) => {\n const li = document.createElement('li');\n li.textContent = dist[0];\n li.setAttribute('data-option', dist[0]);\n d4.querySelector('.dropdown-list').append(li);\n });\n};\n\n/**\n * 關閉全部下拉選單\n */\nconst closeAllDropdown = () => {\n const allDropdown = getAllElements('dropdown-el[d4-status=\"open\"]');\n allDropdown.forEach(el => {\n el.close();\n });\n};\n\n/**\n * 設定卷軸樣式\n */\nconst settingScrollbarStyle = () => {\n const { SETTINGS } = configs.dropdown4;\n const setProperty = (element, obj) => {\n Object.keys(obj).forEach(key => {\n element.style.setProperty(`--${key}`, obj[key]);\n });\n };\n setProperty(document.documentElement, SETTINGS.scrollbar);\n};\n\nsettingScrollbarStyle();\n// 點擊空白處關閉下拉選單\ndocument.addEventListener('click', function () {\n closeAllDropdown();\n});\n\n// 創建 Custom Element\nclass Dropdown4 extends HTMLElement {\n constructor() {\n super();\n this.initialize = false;\n }\n static get observedAttributes() {\n return ['d4-status', 'd4-placeholder', 'd4-value'];\n }\n attributeChangedCallback(attr, oldVal, newVal) {\n const d4 = this;\n switch (attr) {\n case 'd4-status':\n if (oldVal === null || oldVal === newVal) return;\n if (newVal === 'open' || newVal === 'close') {\n d4.emit(newVal);\n }\n break;\n case 'd4-value':\n if (oldVal === null || oldVal === newVal) return;\n if (newVal !== '') {\n const selectType = d4.hasAttribute('multiple') ? 'multiple' : 'single';\n switch (selectType) {\n case 'single':\n const li = d4.querySelector(`.dropdown-list li[data-option=\"${newVal}\"]`);\n if (isElementExist(li)) {\n setSelectDisplay(d4, [...d4.s.allLi].indexOf(li));\n } else {\n setSelectDisplay(d4, -1);\n }\n break;\n case 'multiple':\n const valueLiArray = [];\n d4.querySelector(`.dropdown-list li`).classList.remove('active');\n newVal.split(',').forEach(option => {\n const li = d4.querySelector(`.dropdown-list li[data-option=\"${option}\"]`);\n if (isElementExist(li)) {\n li.classList.add('active');\n valueLiArray.push(li);\n }\n });\n const valueIndexArray = valueLiArray.map(li => [...d4.s.allLi].indexOf(li));\n setSelectDisplay(d4, valueIndexArray);\n break;\n }\n } else {\n setSelectDisplay(d4, -1);\n }\n d4.emit('change');\n break;\n case 'd4-placeholder':\n if (oldVal === null) return;\n if (oldVal !== newVal && d4.s.value.index < 0) {\n setSelectDisplay(d4, d4.s.value.index);\n }\n break;\n }\n }\n connectedCallback() {\n const d4 = this;\n if (d4.initialize || d4.classList.contains('d4-initialize')) return;\n d4.initialize = true;\n this.#create();\n }\n #create() {\n this.s = {};\n this.__events__ = {};\n\n if (!this.hasAttribute('d4-status')) {\n this.setAttribute('d4-status', 'close');\n }\n if (!this.hasAttribute('d4-value')) {\n this.setAttribute('d4-value', '');\n }\n this.#mount();\n }\n #mount() {\n this.s.childDom = this.childNodes;\n this.s.template = createTemplate(this);\n this.innerHTML = '';\n this.append(this.s.template);\n this.#init();\n }\n #init() {\n const d4 = this;\n d4.s.allLi = d4.querySelectorAll('.dropdown-list li');\n d4.s.selectDisplayEl = d4.querySelector('.select-display');\n d4.s.dropdownEl = d4.querySelector('.dropdown');\n d4.s.selectType = d4.hasAttribute('multiple') ? 'multiple' : 'single';\n d4.s.cityLang = d4.hasAttribute('city-lang') ? d4.getAttribute('city-lang') : 'zh-tw';\n\n loadCityData(d4);\n d4.s.subDropdownTotalH = 0;\n const value = d4.getAttribute('d4-value');\n switch (d4.s.selectType) {\n case 'single':\n let valueLi;\n // 如果是地區下拉選單\n if (d4.classList.contains('dist')) {\n const cityDropdown = document.querySelector(`dropdown-el[dist-select=\"${d4.id}\"]`);\n //判斷縣市下拉選單是否有值\n const cityDropdownHasVal = cityDropdown ? cityDropdown.getAttribute('d4-value') !== '' : false;\n if (cityDropdown && cityDropdownHasVal) {\n const city = cityDropdown.getAttribute('d4-value');\n loadDistData(d4, city);\n d4.s.allLi = d4.querySelectorAll('.dropdown-list li');\n d4.classList.remove('disabled');\n if (d4.getAttribute('d4-value') !== '') {\n const dist = value.split(',')[1];\n valueLi = d4.querySelector(`.dropdown-list li[data-option=\"${dist}\"]`);\n d4.setAttribute('d4-value', dist);\n }\n }\n } else {\n valueLi = d4.querySelector(`.dropdown-list li[data-option=\"${value}\"]`);\n }\n if (isElementExist(valueLi)) {\n valueLi.classList.add('active');\n d4.s.activeLi = valueLi;\n d4.s.value = {\n index: [...d4.s.allLi].indexOf(valueLi),\n id: value,\n el: valueLi,\n };\n } else {\n d4.s.activeLi = undefined;\n d4.s.value = {\n index: -1,\n id: undefined,\n el: undefined,\n };\n }\n break;\n case 'multiple':\n const valueLiArray = [];\n value.split(',').forEach(option => {\n const li = d4.querySelector(`.dropdown-list li[data-option=\"${option}\"]`);\n if (isElementExist(li)) {\n valueLiArray.push(li);\n }\n });\n if (valueLiArray.length > 0) {\n d4.s.value = {\n index: valueLiArray.map(li => [...d4.s.allLi].indexOf(li)),\n id: valueLiArray.map(li => li.getAttribute('data-option')),\n el: valueLiArray.map(li => li),\n };\n } else {\n d4.s.value = {\n index: [],\n id: undefined,\n el: undefined,\n };\n }\n break;\n }\n setSelectDisplay(d4, d4.s.value.index);\n d4.#event();\n d4.classList.add('d4-initialize');\n }\n #event() {\n const d4 = this;\n // 下拉選單開關\n d4.__events__.dropdownToggle = () => {\n d4.addEventListener('click', function (e) {\n e.stopPropagation();\n const status = d4.getAttribute('d4-status');\n switch (status) {\n case 'open':\n d4.close();\n break;\n case 'close':\n d4.open();\n break;\n }\n });\n };\n\n // 下拉選單完成過渡\n d4.__events__.transitionend = () => {\n function toggleTransitionend(event) {\n if (event.target === this) {\n const dropdownStatus = d4.getAttribute('d4-status');\n const hasFilter = d4.classList.contains('filter');\n switch (dropdownStatus) {\n case 'open':\n const scroller = d4.querySelector('.dropdown-scroller');\n // 捲動到 active 的選項\n const scrollToActive = () => {\n if (d4.__scroller__) {\n const { viewport } = d4.__scroller__.elements();\n if (isElementExist(d4.s.activeLi)) {\n const halfActiveLiHeight = d4.s.activeLi.clientHeight / 2;\n const offsetTop = d4.s.activeLi.offsetTop;\n const scroll = offsetTop - scroller.clientHeight / 2 + halfActiveLiHeight > 0 ? offsetTop - scroller.clientHeight / 2 + halfActiveLiHeight : 0;\n viewport.scrollTo({\n top: scroll,\n behavior: 'smooth',\n });\n } else {\n viewport.scrollTo({\n top: 0,\n behavior: 'smooth',\n });\n }\n }\n };\n if (hasFilter) {\n d4.querySelector('.filter-bar input').disabled = false;\n d4.querySelector('.filter-bar input').focus();\n }\n if (d4.s.selectType === 'single') {\n scrollToActive();\n }\n break;\n case 'close':\n d4.__scroller__.update(true);\n d4.s.dropdownEl.removeAttribute('style');\n if (hasFilter) d4.querySelector('.filter-bar input').disabled = true;\n break;\n }\n }\n }\n d4.s.dropdownEl.addEventListener('transitionend', toggleTransitionend);\n };\n\n // 綁定卷軸\n d4.__events__.bindScrollbar = (d4 = this) => {\n const scroller = d4.querySelector('.dropdown-scroller');\n // 綁定卷軸套件\n d4.__scroller__ = OverlayScrollbars(scroller, {\n overflowBehavior: {\n x: 'hidden',\n },\n });\n };\n\n // 顯示選的選項\n d4.__events__.selectOption = (d4 = this) => {\n let computedHeight, totalHeight;\n const scroller = d4.querySelector('.dropdown-scroller');\n const citySelect = d4.classList.contains('city');\n d4.s.allLi = d4.querySelectorAll('.dropdown-list li');\n d4.s.allLi.forEach(option => {\n option.addEventListener('click', function (e) {\n const clickOption = this;\n const clickIndex = [...d4.s.allLi].indexOf(clickOption);\n // 子下拉選單打開前的總高度\n const defaultHeight = parseInt(d4.getAttribute('d4-default-height'));\n // 有子層選單\n if (clickOption.classList.contains('has-sublayer')) {\n e.stopPropagation();\n const subDropdown = clickOption.querySelector('.sub-dropdown');\n const subDropdownList = subDropdown.querySelector('.sub-dropdown-list');\n const subDropdownListMargin = parseInt(getComputedStyle(subDropdownList).marginTop) + parseInt(getComputedStyle(subDropdownList).marginBottom);\n subDropdown.style.cssText = `--height: ${subDropdownList.offsetHeight + subDropdownListMargin}px`;\n // 子下拉選單高度\n const subDropdownH = parseInt(subDropdown.style.cssText.replace('--height:', '').trim());\n // 最大高度\n const maxHeight = parseInt(getComputedStyle(scroller).maxHeight);\n const recalculate = () => {\n // 重新計算整個下拉選單的高度\n computedHeight = defaultHeight + d4.s.subDropdownTotalH;\n totalHeight = computedHeight > maxHeight ? maxHeight : computedHeight;\n d4.style.cssText = `--maxHeight: ${totalHeight}px;`;\n d4.s.dropdownEl.style.height = `${totalHeight}px`;\n };\n if (!clickOption.classList.contains('open')) {\n // 子層下拉選單打開\n clickOption.classList.add('open');\n d4.s.subDropdownTotalH += subDropdownH;\n recalculate();\n } else {\n // 子層下拉選單關閉\n clickOption.classList.remove('open');\n d4.s.subDropdownTotalH -= subDropdownH;\n recalculate();\n }\n const collapse = () => {\n d4.__scroller__.update(true);\n subDropdown.removeEventListener('transitionend', collapse);\n };\n subDropdown.addEventListener('transitionend', collapse);\n }\n // 沒有子層選單\n else {\n detectSync(d4);\n // 判斷單選或複選\n switch (d4.s.selectType) {\n // 單選\n case 'single':\n d4.setAttribute('d4-value', clickOption.getAttribute('data-option'));\n // 選擇縣市\n if (citySelect) {\n const lang = d4.s.cityLang;\n const city = option.textContent.trim();\n const distSelectEl = document.getElementById(d4.getAttribute('dist-select'));\n if (distSelectEl) {\n distSelectEl.querySelector('.dropdown-list').textContent = '';\n setSelectDisplay(distSelectEl, -1);\n cityData[lang][city].forEach((dist, index) => {\n const li = document.createElement('li');\n li.textContent = dist[0];\n li.setAttribute('data-option', dist[0]);\n distSelectEl.querySelector('.dropdown-list').append(li);\n });\n d4.__events__.selectOption(distSelectEl);\n }\n }\n if (clickOption.parentNode.closest('li')?.classList.contains('has-sublayer')) {\n e.stopPropagation();\n d4.close();\n }\n break;\n // 複選\n case 'multiple':\n e.stopPropagation();\n clickOption.classList.toggle('active');\n setSelectDisplay(d4, clickIndex);\n break;\n }\n }\n });\n });\n };\n\n // 篩選功能\n d4.__events__.filterHandler = () => {\n if (d4.classList.contains('filter')) {\n d4.querySelector('.filter-bar').addEventListener('click', function (e) {\n e.stopPropagation();\n });\n d4.querySelector('.filter-input').addEventListener('input', function () {\n const val = this.value.toUpperCase();\n d4.s.allLi.forEach(el => {\n if (!el.textContent.toUpperCase().includes(val)) el.style.display = 'none';\n else el.removeAttribute('style');\n });\n });\n }\n };\n\n // 複選標籤移除\n d4.__events__.removeTag = () => {\n if (d4.s.selectType === 'single') return;\n d4.s.selectDisplayEl.addEventListener('click', function (e) {\n if (e.target.classList.contains('select-display')) return;\n const optionBtn = e.target.classList.contains('option-btn') ? e.target : e.target.parentElement;\n if (optionBtn.contains(e.target)) {\n e.stopPropagation();\n if (e.target.classList.contains('remove-icon')) {\n const tag = e.target.parentElement;\n const id = tag.getAttribute('data-option');\n d4.s.dropdownEl.querySelector(`.dropdown-list li[data-option=\"${id}\"]`).classList.remove('active');\n d4.s.activeLi = d4.querySelectorAll('.dropdown-list li.active');\n e.target.parentElement.remove();\n const activeLiArray = [...d4.s.activeLi];\n d4.s.value = activeLiArray.map(option => {\n const obj = {\n index: [...d4.s.allLi].indexOf(option),\n id: option.getAttribute('data-option'),\n el: option,\n };\n return obj;\n });\n d4.s.activeLi = activeLiArray;\n const valueArray = activeLiArray.map(option => option.getAttribute('data-option'));\n d4.setAttribute('d4-value', valueArray.join());\n if (activeLiArray.length <= 0) {\n d4.s.selectDisplayEl.textContent = d4.getAttribute('d4-placeholder').trim();\n }\n }\n }\n });\n };\n d4.__events__.dropdownToggle();\n d4.__events__.bindScrollbar();\n d4.__events__.selectOption();\n d4.__events__.filterHandler();\n d4.__events__.removeTag();\n d4.__events__.transitionend();\n }\n open() {\n const d4 = this;\n const dropdownHeight = d4.querySelector('.dropdown-scroller').clientHeight;\n const hasFilter = d4.classList.contains('filter');\n const totalHeight = () => {\n if (hasFilter) {\n if (d4.querySelector('.dropdown-scroller .filter-bar')) {\n return dropdownHeight\n } else {\n return d4.querySelector('.filter-bar').clientHeight + dropdownHeight;\n }\n }\n return dropdownHeight;\n };\n closeAllDropdown();\n d4.setAttribute('d4-status', 'open');\n d4.setAttribute('d4-default-height', totalHeight());\n d4.style.cssText = `--maxHeight: ${totalHeight()}px;`;\n d4.s.dropdownEl.style.cssText = `\n height: ${totalHeight()}px;\n z-index: 2;\n `;\n return this;\n }\n close() {\n const d4 = this;\n const allSublayer = d4.s.dropdownEl.querySelectorAll('.has-sublayer');\n const defaultHeight = parseInt(d4.getAttribute('d4-default-height'));\n d4.setAttribute('d4-status', 'close');\n d4.s.dropdownEl.style.height = '0px';\n allSublayer.forEach(item => {\n item.classList.remove('open');\n });\n d4.style.cssText = `--maxHeight: ${defaultHeight}px;`;\n d4.s.subDropdownTotalH = 0;\n return this;\n }\n scrollTo(scroll) {\n const d4 = this;\n const { viewport } = d4.__scroller__.elements();\n viewport.scrollTo({\n top: scroll,\n behavior: 'smooth',\n });\n }\n update() {\n this.__events__.selectOption();\n }\n}\n\nObject.assign(Dropdown4.prototype, EVENTS);\n\n// define custom element\ncustomElements.define('dropdown-el', Dropdown4);\n\nexport default Dropdown4;\n","import { configs } from '../configs'\n\n// 獲取標籤上斷點設定\nfunction getBreakpoints(m4) {\n const breakpoints = {};\n [...m4.attributes].forEach(attr => {\n if (attr.name.includes('duration-')) {\n const key = attr.name.replace('duration-', '');\n const value = attr.nodeValue;\n breakpoints[key] = Number(value);\n }\n });\n return Object.keys(breakpoints).length === 0 ? null : breakpoints;\n}\n\n// 透過標籤上設定的斷點判斷持續時間\nfunction getDuration(m4) {\n if (getBreakpoints(m4)) {\n let breakpoint;\n const points = Object.keys(getBreakpoints(m4)).map(point => {\n return {\n value: point,\n point,\n };\n });\n points.sort((a, b) => parseInt(b.value, 10) - parseInt(a.value, 10));\n for (let i = 0; i < points.length; i += 1) {\n const { point, value } = points[i];\n if (window.matchMedia(`(max-width: ${value}px)`).matches) {\n breakpoint = point;\n }\n }\n return breakpoint ? Number(getBreakpoints(m4)[breakpoint]) : m4.s.options.duration;\n } else {\n return m4.s.options.duration;\n }\n}\n\n// 產生動畫結構\nfunction createAnimateWrap(m4) {\n const { behavior, continual, gap } = m4.s.options;\n const childDOM = m4.childNodes;\n const container = document.createElement('div');\n const animateItem = document.createElement('div');\n container.className = 'animate-container';\n animateItem.className = 'animate-item';\n [...childDOM].forEach(element => {\n animateItem.append(element);\n });\n function cloneElement() {\n const cloneAnimateWrap = animateItem.cloneNode(true);\n cloneAnimateWrap.classList.add('clone');\n m4.s.cloneAnimation = null;\n m4.s.cloneAnimateEl = cloneAnimateWrap;\n return cloneAnimateWrap;\n }\n m4.s.animation = null;\n m4.s.animateEl = animateItem;\n m4.textContent = '';\n container.append(animateItem);\n m4.append(container);\n if (animateItem.clientWidth * 2 + gap >= m4.clientWidth) {\n if (behavior === 'normal' && continual) {\n container.append(cloneElement());\n }\n } else {\n m4.s.options.continual = false;\n }\n}\n\n// 設定動畫影格\nfunction keyframes(m4) {\n const { behavior, direction, continual } = m4.s.options;\n let framesObj = {};\n // 判斷模式\n switch (behavior) {\n case 'normal':\n // 判斷方向\n // normal 模式會判斷是否開啟 continual\n let animateFrom, animateTo;\n switch (direction) {\n case 'top':\n animateFrom = continual ? 'translate3d(0,100%,0)' : `translate3d(0,${m4.clientHeight}px,0)`;\n animateTo = continual ? 'translate3d(0,-100%,0)' : 'translate3d(0,-100%,0)';\n framesObj.animate1 = [{ transform: animateFrom }, { transform: animateTo }];\n if (continual) {\n framesObj.animate2 = [{ transform: 'translate3d(0,0,0)' }, { transform: 'translate3d(0,-200%,0)' }];\n }\n break;\n case 'right':\n animateFrom = continual ? 'translate3d(0,0,0)' : 'translate3d(-100%,0,0)';\n animateTo = continual ? 'translate3d(200%,0,0)' : `translate3d(${m4.clientWidth}px,0,0)`;\n framesObj.animate1 = [{ transform: animateFrom }, { transform: animateTo }];\n if (continual) {\n framesObj.animate2 = [{ transform: 'translate3d(-100%,0,0)' }, { transform: 'translate3d(100%,0,0)' }];\n }\n break;\n case 'bottom':\n animateFrom = continual ? 'translate3d(0,-100%,0)' : 'translate3d(0,-100%,0)';\n animateTo = continual ? 'translate3d(0,100%,0)' : `translate3d(0,${m4.clientHeight}px,0)`;\n framesObj.animate1 = [{ transform: animateFrom }, { transform: animateTo }];\n if (continual) {\n framesObj.animate2 = [{ transform: 'translate3d(0,-200%,0)' }, { transform: 'translate3d(0,0,0)' }];\n }\n break;\n case 'left':\n animateFrom = continual ? 'translate3d(100%,0,0)' : `translate3d(${m4.clientWidth}px,0,0)`;\n animateTo = continual ? 'translate3d(-100%,0,0)' : 'translate3d(-100%,0,0)';\n framesObj.animate1 = [{ transform: animateFrom }, { transform: animateTo }];\n if (continual) {\n framesObj.animate2 = [{ transform: 'translate3d(0,0,0)' }, { transform: 'translate3d(-200%,0,0)' }];\n }\n break;\n }\n break;\n // 來回模式\n case 'alternate':\n // 判斷方向\n switch (direction) {\n case 'top':\n framesObj.animate1 = [{ transform: `translate3d(0,calc(${m4.clientHeight}px - 100%),0)` }, { transform: `translate3d(0,0,0)` }, { transform: `translate3d(0,calc(${m4.clientHeight}px - 100%),0)` }];\n break;\n case 'right':\n framesObj.animate1 = [{ transform: `translate3d(0,0,0)` }, { transform: `translate3d(calc(-100% + ${m4.clientWidth}px),0,0)` }, { transform: `translate3d(0,0,0)` }];\n break;\n case 'bottom':\n framesObj.animate1 = [{ transform: `translate3d(0,0,0)` }, { transform: `translate3d(0,calc(${m4.clientHeight}px - 100%),0)` }, { transform: `translate3d(0,0,0)` }];\n break;\n case 'left':\n framesObj.animate1 = [{ transform: `translate3d(calc(-100% + ${m4.clientWidth}px),0,0)` }, { transform: `translate3d(0,0,0)` }, { transform: `translate3d(calc(-100% + ${m4.clientWidth}px),0,0)` }];\n break;\n }\n break;\n case 'endStop':\n // 判斷方向\n switch (direction) {\n case 'top':\n framesObj.animate1 = [{ transform: `translate3d(0,${m4.clientHeight}px,0)` }, { transform: `translate3d(0,0,0)` }];\n break;\n case 'right':\n framesObj.animate1 = [{ transform: `translate3d(-100%,0,0)` }, { transform: `translate3d(0,0,0)` }];\n break;\n case 'bottom':\n framesObj.animate1 = [{ transform: `translate3d(0,-100%,0)` }, { transform: `translate3d(0,calc(${m4.clientHeight}px - 100%),0)` }];\n break;\n case 'left':\n framesObj.animate1 = [{ transform: `translate3d(${m4.clientWidth}px,0,0)` }, { transform: `translate3d(calc(${m4.clientWidth}px - 100%),0,0)` }];\n break;\n }\n break;\n }\n return framesObj;\n}\n\nfunction debounce(func) {\n let timer;\n return function (event) {\n if (timer) clearTimeout(timer);\n timer = setTimeout(func, 200, event);\n };\n}\n\nclass Marquee4 extends HTMLElement {\n constructor() {\n super();\n this.initialize = false;\n }\n static get observedAttributes() {\n return [];\n }\n attributeChangedCallback(attr, oldVal, newVal) { }\n connectedCallback() {\n if (this.initialize) return;\n this.initialize = true;\n this.#create();\n }\n #create() {\n const options = {\n direction: this.getAttribute('direction') || configs.marquee4.SETTINGS.direction, // up / down / left / right\n behavior: this.getAttribute('behavior') || configs.marquee4.SETTINGS.behavior, // normal / alternate / endStop\n duration: Number(this.getAttribute('duration')) || configs.marquee4.SETTINGS.duration, // ms\n durationBreakpoints: getBreakpoints(this) || configs.marquee4.SETTINGS.durationBreakpoints,\n autoplay: this.getAttribute('autoplay') || configs.marquee4.SETTINGS.autoplay, // normal / alternate / endStop\n pauseOnMouseenter: this.getAttribute('pauseOnMouseEnter') ? (this.getAttribute('pauseOnMouseEnter') === 'true' ? true : false) : configs.marquee4.SETTINGS.pauseOnMouseenter, // true / false\n continual: this.getAttribute('continual') ? (this.getAttribute('continual') === 'true' ? true : false) : configs.marquee4.SETTINGS.continual, // true / false\n gap: Number(this.getAttribute('gap')) || configs.marquee4.SETTINGS.gap,\n };\n this.s = {};\n this.s.options = options;\n this.s.nowDuration = getDuration(this);\n createAnimateWrap(this);\n this.#init();\n }\n #init() {\n const { direction, continual, gap } = this.s.options;\n // 方向為左/右\n switch (direction) {\n case 'left':\n case 'right':\n this.style.cssText = `--continual-gap: ${gap}px;`;\n break;\n case 'top':\n case 'bottom':\n if (continual) {\n this.style.cssText = `height: ${this.s.animateEl.clientHeight}px;--continual-gap: ${gap}px;`;\n } else {\n this.style.cssText = `min-height: ${this.s.animateEl.clientHeight}px;--continual-gap: ${gap}px;`;\n }\n break;\n }\n this.#animation();\n this.#event();\n if (continual) {\n this.classList.add(`continual`);\n }\n this.classList.add('m4-initialize');\n }\n #animation() {\n const m4 = this;\n const { direction, behavior, duration, autoplay, pauseOnMouseenter, continual } = m4.s.options;\n let playDelay; //跑馬燈自動撥放開始前的延遲時間\n function animateInit() {\n // 判斷模式\n switch (behavior) {\n case 'normal':\n m4.s.animateEl.style.transform = `${keyframes(m4).animate1[0].transform}`;\n m4.s.animation = m4.s.animateEl.animate(keyframes(m4).animate1, {\n duration: m4.s.nowDuration,\n iterations: Infinity,\n });\n if (continual) {\n m4.s.cloneAnimateEl.style.transform = `${keyframes(m4).animate2[0].transform}`;\n m4.s.cloneAnimation = m4.s.cloneAnimateEl.animate(keyframes(m4).animate2, {\n duration: m4.s.nowDuration,\n delay: -m4.s.nowDuration / 2,\n iterations: Infinity,\n });\n }\n break;\n case 'alternate':\n let moveDistance; //移動的距離\n let averageDuration; //平均速率\n // 進場的keyframe\n function enterKeyframes() {\n let framesArr = [];\n switch (direction) {\n case 'top':\n moveDistance = Math.abs(m4.s.animateEl.scrollHeight - m4.clientHeight);\n averageDuration = parseInt(m4.s.nowDuration / (moveDistance * 2)) * m4.s.animateEl.scrollHeight;\n framesArr = [{ transform: `translate3d(0,${m4.clientHeight}px,0)` }, { transform: `translate3d(0,calc(${m4.clientHeight}px - 100%),0)` }];\n break;\n case 'right':\n moveDistance = Math.abs(m4.s.animateEl.scrollWidth - m4.clientWidth);\n averageDuration = parseInt(m4.s.nowDuration / (moveDistance * 2)) * m4.s.animateEl.scrollWidth;\n framesArr = [{ transform: `translate3d(-100%,0,0)` }, { transform: `translate3d(0,0,0)` }];\n break;\n case 'bottom':\n moveDistance = Math.abs(m4.s.animateEl.scrollHeight - m4.clientHeight);\n averageDuration = parseInt(duration / (moveDistance * 2)) * m4.s.animateEl.scrollHeight;\n framesArr = [{ transform: `translate3d(0,-100%,0)` }, { transform: `translate3d(0,0,0)` }];\n break;\n case 'left':\n moveDistance = Math.abs(m4.s.animateEl.scrollWidth - m4.clientWidth);\n averageDuration = parseInt(duration / (moveDistance * 2)) * m4.s.animateEl.scrollWidth;\n framesArr = [{ transform: `translate3d(${m4.clientWidth}px,0,0)` }, { transform: `translate3d(calc(-100% + ${m4.clientWidth}px),0,0)` }];\n break;\n }\n return framesArr;\n }\n // 跑馬燈範圍高度大於內容高度或是方向為左/右時\n if (m4.clientHeight > m4.s.animateEl.scrollHeight || direction === 'left' || direction === 'right') {\n m4.s.animateEl.style.transform = `${enterKeyframes()[0].transform}`;\n const enterAnimate = m4.s.animateEl.animate(enterKeyframes(), {\n duration: averageDuration,\n fill: 'forwards',\n });\n enterAnimate.finished.then(() => {\n m4.s.animation = m4.s.animateEl.animate(keyframes(m4).animate1, {\n duration: m4.s.nowDuration,\n iterations: Infinity,\n });\n });\n }\n if (m4.s.animation) {\n m4.s.animation.ready.then(() => {\n m4.s.animateEl.classList.add('ready');\n });\n }\n break;\n case 'endStop':\n m4.s.animateEl.style.transform = `${keyframes(m4).animate1[0].transform}`;\n m4.s.animation = m4.s.animateEl.animate(keyframes(m4).animate1, {\n duration: m4.s.nowDuration,\n fill: 'forwards',\n });\n break;\n }\n m4.s.animateEl.classList.add('start');\n if (autoplay === false) {\n m4.s.animateEl.classList.remove('start');\n m4.s.animation.cancel();\n }\n }\n clearTimeout(playDelay);\n playDelay = setTimeout(\n () => {\n animateInit();\n },\n autoplay ? autoplay : 0,\n );\n\n // mouseenter/leave Event\n m4.addEventListener('mouseenter', function () {\n if (m4.s.animation && pauseOnMouseenter && m4.s.animation.playState === 'running') {\n m4.pause();\n }\n });\n m4.addEventListener('mouseleave', function () {\n if (m4.s.animation && pauseOnMouseenter && m4.s.animation.playState === 'paused') {\n m4.play();\n }\n });\n }\n #event() {\n const m4 = this;\n function updateDuration() {\n const startTime = m4.s.animation.startTime;\n const cloneStartTime = m4.s.cloneAnimation ? m4.s.cloneAnimation.startTime : null;\n m4.s.nowDuration = getDuration(m4);\n m4.s.animation.cancel();\n if (m4.s.cloneAnimation) {\n m4.s.cloneAnimation.cancel();\n }\n m4.s.animation = m4.s.animateEl.animate(keyframes(m4).animate1, {\n duration: m4.s.nowDuration,\n iterations: Infinity,\n });\n m4.s.animation.startTime = startTime;\n if (m4.s.cloneAnimation) {\n m4.s.cloneAnimation = m4.s.cloneAnimateEl.animate(keyframes(m4).animate2, {\n duration: m4.s.nowDuration,\n delay: -m4.s.nowDuration / 2,\n iterations: Infinity,\n });\n m4.s.cloneAnimation.startTime = cloneStartTime;\n }\n }\n window.addEventListener('resize', debounce(updateDuration));\n }\n play() {\n this.s.animation.play();\n this.s.animateEl.classList.add('start');\n if (this.s.options.continual) {\n this.s.cloneAnimation.play();\n this.s.cloneAnimateEl.classList.add('start');\n }\n }\n pause() {\n this.s.animation.pause();\n if (this.s.options.continual) {\n this.s.cloneAnimation.pause();\n }\n }\n}\n\n// define custom element\n customElements.define('marquee-el', Marquee4);\n\nexport default Marquee4;\n","import { configs } from '../configs'\nimport { isNodeList, insert } from '../commons'\n\n// debounce\nconst debounce = function (func, time) {\n let timer;\n return function (event) {\n if (timer) clearTimeout(timer);\n timer = setTimeout(func, 200, event);\n };\n};\n\n// add class\nconst addClass = (target, className) => {\n if (isNodeList(target)) {\n target.forEach(el => {\n el.classList.add(className);\n });\n return;\n }\n\n target.classList.add(className);\n};\n\n// remove class\nconst removeClass = (target, className) => {\n if (isNodeList(target)) {\n target.forEach(el => {\n el.classList.remove(className);\n });\n return;\n }\n\n target.classList.remove(className);\n};\n\n// 拖拉類型控制\nclass dragControl {\n constructor(el) {\n this.$element = el;\n this.option = el.s.option.drag;\n this.#init();\n }\n\n // 初始化\n #init() {\n const $this = this;\n if (!$this.$element) return;\n\n $this.$container = $this.$element.querySelector('.drag-container');\n $this.$wrapper = $this.$container.querySelector('.wrapper');\n\n // scroll & resize event\n const updateEvent = () => {\n $this.#scrollerDetect();\n $this.#buttonDetect();\n };\n\n // scroll event handle\n $this.$wrapper.removeEventListener('scroll', updateEvent);\n $this.$wrapper.addEventListener('scroll', updateEvent);\n\n // resize event handle\n window.removeEventListener('resize', debounce(updateEvent));\n window.addEventListener('resize', debounce(updateEvent));\n\n // 左右拖拉事件綁定,若為 collapse 則強制啟用 draggable\n if ($this.option.draggable || $this.$element.s.type == 'collapse') $this.#bindDragEvent();\n // 左右箭頭事件綁定,若為 collapse 則不輸出 .navigation\n if ($this.option.navigation && $this.$element.s.type !== 'collapse') {\n $this.$container.insertAdjacentHTML(\n insert.prepend,\n `<div class=\"navigation\">\n <div class=\"button prev\">\n <div></div>\n </div>\n <div class=\"button next\">\n <div></div>\n </div>\n </div>`,\n );\n\n $this.$button = $this.$container?.querySelectorAll('.button');\n $this.#bindButtonEvent();\n }\n // 卷軸位置判斷\n $this.#scrollerDetect();\n // 隱藏按鈕判斷\n $this.#buttonDetect();\n // 選項事件綁定\n $this.#bindItemEvent();\n // 更新 active 位置\n $this.update();\n }\n // 更新 active 位置\n update(element) {\n const $wrapper = this.$element.querySelector('.wrapper');\n const $active = $wrapper?.querySelector('.active');\n if ($active) {\n // 移動至 active class 處\n const moveDistance = $active.offsetLeft + $active.getBoundingClientRect().width / 2 - $wrapper.getBoundingClientRect().width / 2;\n $wrapper.scrollTo({\n left: moveDistance,\n behavior: 'smooth',\n });\n }\n }\n // 左右箭頭事件綁定\n #bindButtonEvent() {\n const $this = this;\n const { $wrapper, $button } = $this;\n // button event\n const buttonEvent = function () {\n const type = this.classList.contains('next');\n const fix = parseInt($wrapper.getBoundingClientRect().width * 0.7);\n\n $wrapper.scrollTo({\n left: type ? $wrapper.scrollLeft + fix : $wrapper.scrollLeft - fix,\n behavior: 'smooth',\n });\n\n setTimeout(() => {\n $this.#buttonDetect();\n }, 100);\n };\n\n // button event handle\n $button.forEach($el => {\n $el.removeEventListener('click', buttonEvent);\n $el.addEventListener('click', buttonEvent);\n });\n }\n // 左右拖拉事件綁定\n #bindDragEvent() {\n const { $wrapper } = this;\n\n // 是否為點擊狀態\n let isDown = false;\n // 是否為移動狀態\n let isMoved = false;\n // 起始 X 軸數值\n let startX = 0;\n // 卷軸數值\n let scrollLeft = 0;\n\n // mousedown event\n const mousedownEvent = function (event) {\n event.preventDefault();\n\n isMoved = false;\n isDown = true;\n\n startX = event.pageX - $wrapper.offsetLeft;\n scrollLeft = $wrapper.scrollLeft;\n };\n\n // mousedown event handle\n $wrapper.removeEventListener('mousedown', mousedownEvent);\n $wrapper.addEventListener('mousedown', mousedownEvent);\n\n // mouseleave event\n const mouseleaveEvent = function () {\n isMoved = false;\n isDown = false;\n };\n\n // mouseleave event handle\n $wrapper.removeEventListener('mouseleave', mouseleaveEvent);\n $wrapper.addEventListener('mouseleave', mouseleaveEvent);\n\n // mouseup event\n const mouseupEvent = function (event) {\n event.preventDefault();\n isDown = false;\n };\n\n // mouseup event handle\n $wrapper.removeEventListener('mouseup', mouseupEvent);\n $wrapper.addEventListener('mouseup', mouseupEvent);\n\n // mousemove event\n const mousemoveEvent = function (event) {\n event.preventDefault();\n\n isMoved = true;\n\n if (!isDown) return;\n\n const x = event.pageX - $wrapper.offsetLeft;\n const walk = x - startX;\n $wrapper.scrollTo({\n left: scrollLeft - walk,\n });\n };\n\n // mousemove event handle\n $wrapper.removeEventListener('mousemove', mousemoveEvent);\n $wrapper.addEventListener('mousemove', mousemoveEvent);\n\n const reset = function (event) {\n if (isMoved) {\n event.preventDefault();\n event.stopPropagation();\n }\n };\n\n $wrapper.querySelectorAll('a').forEach($el => {\n $el.removeEventListener('click', reset);\n $el.addEventListener('click', reset);\n });\n }\n // 卷軸位置判斷\n #scrollerDetect() {\n const { $container, $wrapper } = this;\n\n const gate = $wrapper.scrollWidth - $wrapper.clientWidth;\n const value = Math.round($wrapper.scrollLeft);\n\n if (gate <= 0) return;\n\n addClass($container, 'scrollable');\n // console.log(value,gate)\n // 最前\n if (value == 0) {\n removeClass($container, 'scrollable');\n addClass($wrapper, 'start');\n removeClass($wrapper, 'end');\n }\n // 最後\n // 2025.04.23 防止誤差 修正\n else if (value + 1 >= gate) {\n removeClass($container, 'scrollable');\n removeClass($wrapper, 'start');\n addClass($wrapper, 'end');\n }\n // 中間\n else {\n addClass($wrapper, 'center');\n removeClass($wrapper, 'start');\n removeClass($wrapper, 'end');\n }\n }\n // 隱藏按鈕判斷\n #buttonDetect() {\n const { $wrapper, $button, $element } = this;\n\n if (!$button) return;\n\n const gate = $wrapper.scrollWidth - $wrapper.clientWidth;\n const value = $wrapper.scrollLeft;\n // console.log(gate,$wrapper.scrollWidth, $wrapper.clientWidth)\n if (gate <= 0) {\n addClass($button, 'hide');\n removeClass($button, 'active');\n addClass($element, 'noScrollable');\n return;\n }\n\n if (gate > 0) {\n addClass($button, 'active');\n removeClass($element, 'noScrollable');\n }\n\n // 最前\n if (value == 0) {\n $button.forEach($el => {\n if ($el.classList.contains('next')) {\n removeClass($el, 'hide');\n return;\n }\n\n addClass($el, 'hide');\n });\n }\n // 最後\n // 2025.04.23 防止誤差 修正\n else if (value + 1 >= gate) {\n $button.forEach($el => {\n if ($el.classList.contains('next')) {\n addClass($el, 'hide');\n return;\n }\n\n removeClass($el, 'hide');\n });\n }\n // 中間\n else {\n removeClass($button, 'hide');\n }\n }\n // 選項事件綁定\n #bindItemEvent() {\n const { $element } = this;\n\n const itemEvent = $el => {\n if (this.option.selected) {\n const selectOption = $el.getAttribute('data-option').trim();\n $element.setAttribute('m4-status', selectOption);\n }\n };\n\n function clickHandler() {\n itemEvent(this);\n }\n\n this.$container.querySelectorAll('.item').forEach(el => {\n el.removeEventListener('click', clickHandler);\n el.addEventListener('click', clickHandler);\n });\n }\n}\n\n// 收合類型控制\nclass collapseControl {\n constructor(el) {\n this.$element = el;\n this.option = el.s.option.collapse;\n this.#init();\n }\n\n // 初始化\n #init() {\n if (!this.$element) return;\n\n this.$container = this.$element.querySelector('.collapse-container');\n this.$wrapper = this.$container.querySelector('.wrapper');\n\n // 隱藏按鈕判斷\n if (this.#buttonDetect()) {\n // 展開箭頭事件綁定\n this.#bindButtonEvent();\n }\n\n // 選項事件綁定\n this.#bindItemEvent();\n }\n // 隱藏按鈕判斷\n #buttonDetect() {\n const $drag = this.$element.querySelector('.drag-container');\n const $wrapper = $drag.querySelector('.wrapper');\n\n if ($wrapper.scrollWidth - $wrapper.clientWidth > 0) {\n $drag.insertAdjacentHTML(insert.append, `<div class=\"open-collapse\"></div>`);\n this.$button = $drag.querySelector('.open-collapse');\n return true;\n }\n\n return false;\n }\n // 展開箭頭事件綁定\n #bindButtonEvent() {\n const { $element, $button } = this;\n\n // button event\n const buttonEvent = function () {\n if ($element.classList.contains('expand')) {\n $element.classList.remove('expand');\n } else {\n $element.classList.add('expand');\n }\n };\n\n // button event handle\n $button.removeEventListener('click', buttonEvent);\n $button.addEventListener('click', buttonEvent);\n }\n // 選項事件綁定\n #bindItemEvent() {\n const { $element } = this;\n\n const itemEvent = ($el, collapse) => {\n if (collapse) {\n if ($element?.classList.contains('expand')) {\n $element?.classList.remove('expand');\n } else {\n $element?.classList.add('expand');\n }\n }\n\n if (this.option.selected) {\n const selectOption = $el.getAttribute('data-option').trim();\n $element.setAttribute('m4-status', selectOption);\n }\n };\n\n function clickHandler() {\n itemEvent(this, true);\n }\n\n this.$container.querySelectorAll('.item').forEach(el => {\n el.removeEventListener('click', clickHandler);\n el.addEventListener('click', clickHandler);\n });\n }\n}\n\n// create template method\nconst createTemplate = m4 => {\n const { type, option, originalDomString } = m4.s;\n\n const $storage = document.createElement('div');\n if (type == 'drag') {\n $storage.innerHTML = configs.multipurpose4.TEMPLATE[type]().trim();\n\n const $wrapper = $storage.querySelector('.drag-container .wrapper');\n $wrapper.insertAdjacentHTML(insert.append, originalDomString);\n }\n if (type == 'collapse') {\n $storage.innerHTML = configs.multipurpose4.TEMPLATE[type](option?.collapse).trim();\n // drag\n const $container = $storage.querySelector('.drag-container .wrapper');\n $container.insertAdjacentHTML(insert.append, originalDomString);\n // collapse\n const $model = $storage.querySelector('.collapse-container .wrapper');\n $model.insertAdjacentHTML(insert.append, originalDomString);\n }\n if (type == 'dropdown') {\n $storage.innerHTML = configs.multipurpose4.TEMPLATE[type](option?.dropdown).trim();\n\n const $dropdown = $storage.querySelector('dropdown-el');\n $dropdown.insertAdjacentHTML(insert.append, originalDomString);\n }\n\n return $storage.children;\n};\n\nclass Multipurpose4 extends HTMLElement {\n constructor() {\n super();\n this.initialize = false;\n this.__events__ = {};\n this.s = {};\n this.s.originalDomString = this.innerHTML.trim().replace(/\\n/g, '');\n this.previousWidth = window.innerWidth;\n }\n static get observedAttributes() {\n return ['m4-type', 'm4-status'];\n }\n attributeChangedCallback(attr, oldVal, newVal) {\n switch (attr) {\n case 'm4-type':\n if (oldVal === null || oldVal === newVal) return;\n this.s.type = newVal;\n this.#distribute();\n break;\n case 'm4-status':\n if (oldVal === newVal) return;\n const type = this.getAttribute('m4-type');\n if (type !== 'drag' && type !== 'collapse') return;\n // 左右拖拉\n this.querySelectorAll('.drag-container .item').forEach(el => {\n el.classList.remove('active');\n });\n this.querySelector(`.drag-container .item[data-option=\"${newVal}\"]`)?.classList.add('active');\n // 展開選項\n if (type === 'collapse') {\n this.querySelectorAll('.collapse-container .item').forEach(el => {\n el.classList.remove('active');\n });\n this.querySelector(`.collapse-container .item[data-option=\"${newVal}\"]`)?.classList.add('active');\n }\n this.constructor.drag?.update(this);\n break;\n }\n }\n connectedCallback() {\n if (this.initialize || this.classList.contains('m4-init')) return;\n this.initialize = true;\n this.#init();\n }\n update() {\n // 斷點設定\n this.#breakpoint();\n }\n #init() {\n let customize = {};\n\n if (!this.hasAttribute('m4-value')) {\n this.setAttribute('m4-value', '');\n }\n\n this.s.type = this.getAttribute('m4-type') ?? configs.multipurpose4.SETTINGS.type;\n if (this.hasAttribute('m4-option')) {\n customize = this.getAttribute('m4-option') ? JSON.parse(this.getAttribute('m4-option')) : {};\n this.removeAttribute('m4-option');\n }\n\n const updateEvent = event => {\n if (event.type === 'resize') {\n if (window.innerWidth === this.previousWidth) return;\n this.previousWidth = window.innerWidth;\n }\n this.update();\n };\n\n // resize event handle\n window.removeEventListener('resize', debounce(updateEvent));\n window.addEventListener('resize', debounce(updateEvent));\n\n this.s.option = {};\n this.s.option.drag = Object.assign({}, configs.multipurpose4.SETTINGS.drag, customize?.drag);\n this.s.option.collapse = Object.assign({}, configs.multipurpose4.SETTINGS.collapse, customize?.collapse);\n this.s.option.dropdown = Object.assign({}, configs.multipurpose4.SETTINGS.dropdown, customize?.dropdown);\n this.s.option.breakpoint = Object.assign({}, configs.multipurpose4.SETTINGS.breakpoint, customize?.breakpoint);\n\n this.#render();\n }\n #render() {\n this.classList.add('m4-init');\n // 斷點設定\n this.#breakpoint();\n }\n // 斷點設定\n #breakpoint() {\n const obj = Object.keys(this.s.option.breakpoint);\n if (!obj.length) {\n this.#distribute();\n return;\n }\n obj\n .map(keys => Number(keys))\n .sort((a, b) => b - a)\n .some(point => {\n if (window.innerWidth >= point) {\n this.s.type = this.s.option.breakpoint[point]?.type;\n this.setAttribute('m4-type', this.s.type);\n this.s.option.drag = Object.assign({}, this.s.option.drag, this.s.option.breakpoint[point]?.drag);\n this.s.option.collapse = Object.assign({}, this.s.option.collapse, this.s.option.breakpoint[point]?.collapse);\n this.s.option.dropdown = Object.assign({}, this.s.option.dropdown, this.s.option.breakpoint[point]?.dropdown);\n }\n this.#distribute();\n return window.innerWidth >= point;\n });\n }\n // check type\n #distribute() {\n const { type } = this.s;\n\n this.innerHTML = '';\n [...createTemplate(this)].forEach(el => {\n this.append(el);\n });\n\n // 新增預設 active class\n const dragContainer = this.querySelector(`.drag-container .item[data-option=\"${this.getAttribute('m4-status')}\"]`);\n const collapseContainer = this.querySelector(`.collapse-container .item[data-option=\"${this.getAttribute('m4-status')}\"]`);\n dragContainer?.classList.add('active');\n collapseContainer?.classList.add('active');\n\n switch (type) {\n case 'drag':\n this.constructor.drag = new dragControl(this);\n break;\n case 'collapse':\n this.constructor.drag = new dragControl(this);\n this.constructor.collapse = new collapseControl(this);\n break;\n case 'dropdown':\n // this.#dropdown();\n break;\n }\n this.constructor.drag?.update(this);\n }\n}\n\ncustomElements.define('multipurpose-nav', Multipurpose4);\n\nexport default Multipurpose4;\n","import { configs } from '../configs'\nimport { EVENTS, isElement } from '../commons'\n\n// 第六版\nclass Tab4 extends HTMLElement {\n // 定義組件的初始狀態\n constructor(el, option) {\n super();\n }\n // 當組件的屬性被更改時會被呼叫\n static get observedAttributes() {\n return ['t4-active'];\n }\n attributeChangedCallback(attr, oldVal, newVal) {\n if (attr === 't4-active') {\n // change function\n if (oldVal !== newVal) {\n this.#stateChange(newVal);\n }\n }\n }\n connectedCallback() {\n // 防呆\n if (!this.classList.contains('t4-initialize')) {\n this.#create();\n }\n }\n #create() {\n const name = this.getAttribute('t4-name');\n const { SETTINGS } = configs.tab4;\n // 防呆!\n if (document.querySelectorAll(`tab-el[t4-name=${name}]`).length > 1) {\n console.warn(name, '名字有重複喔!!!');\n }\n\n this.t = {\n tabs: [],\n name: name,\n tabPanels: [...this.children],\n activeTab: '',\n stepOutput: SETTINGS.stepOutput,\n recordUrl: this.getAttribute('t4-url') || SETTINGS.recordUrl,\n type: this.getAttribute('t4-type') || SETTINGS.type,\n display: this.getAttribute('t4-display') || SETTINGS.display,\n defaultPage: this.getAttribute('t4-defaultPage') || SETTINGS.defaultPage,\n anchor: this.getAttribute('t4-anchor'),\n gap: this.getAttribute('t4-gap') || SETTINGS.anchorGap,\n transition: {\n duration: this.getAttribute('t4-duration') || SETTINGS.transition.duration,\n timing: this.getAttribute('t4-timing') || SETTINGS.transition.timing,\n delay: this.getAttribute('t4-delay') || SETTINGS.transition.delay,\n },\n tabGroup: this.getAttribute('t4-group') || SETTINGS.tabGroup,\n };\n this.__events__ = {};\n this.t.tabs = this.#tabSet();\n this.t.step = document.querySelector(`[t4-control=\"${this.t.name}\"]${this.t.stepOutput}`);\n\n this.#init();\n }\n\n #init() {\n // 初始化設定\n this.t.activeTab = this.t.defaultPage;\n if (this.t.display === 'swiper') {\n this.#createSwiper();\n }\n if (this.t.recordUrl) {\n const params = new URLSearchParams(document.location.search);\n const val = params.get(this.t.name);\n\n //2024.9.9 Scarlett\n const matchingTabs = document.querySelectorAll(`[t4-name=\"${this.t.name}\"] .tab-panel[t4-id=\"${val}\"]`);\n\n // 如果網址中有對應的參數,載入對應的頁籤\n if (val && matchingTabs.length === 1) {\n this.t.activeTab = val;\n } else {\n console.warn(`沒有${val}這頁喔!!`);\n }\n }\n this.setActiveTab(this.t.activeTab);\n // 設定防呆\n this.classList.add('t4-initialize');\n this.#resizeTab();\n }\n // 第一關 判斷數量以及id設定\n #tabSet() {\n const { t } = this;\n const tabs = Array.from(document.querySelectorAll(`[t4-control=\"${t.name}\"][t4-role=\"tab\"]`));\n // 防呆\n if (t.type === 'normal' && t.tabGroup === 'true') {\n // 是頁籤且是群組 判斷數量是否相符\n if (t.tabPanels.length !== tabs.length) {\n console.warn('按鈕與內容數量不同喔', t.tabPanels.length, tabs.length);\n }\n }\n if (t.tabGroup === 'true') {\n // 流水號\n t.tabPanels.forEach((el, index) => el.setAttribute('t4-id', index));\n } else {\n // 單一頁籤\n t.tabPanels.forEach(el => {\n if (!el.getAttribute('t4-id')) {\n console.warn(el, '請幫我設定id!!');\n }\n });\n }\n return tabs;\n }\n // 第二關 id命名提醒\n #getTabIndex(id) {\n const { t } = this;\n const tabPanelsWithId = t.tabPanels.filter(panel => panel.getAttribute('t4-id') === id);\n // 防呆!\n if (tabPanelsWithId.length > 1) {\n console.warn('有兩個相同id設定', tabPanelsWithId);\n }\n\n // 取得頁籤本人\n const tabPanel = tabPanelsWithId[0];\n if (tabPanel) {\n const tabIndex = t.tabPanels.indexOf(tabPanel);\n return tabIndex;\n } else {\n console.warn(`找不到t4-id為${id}的頁籤`);\n return 0;\n }\n }\n\n #createSwiper() {\n const swiperContainer = document.createElement('div');\n swiperContainer.classList.add('swiper-container');\n\n const swiperWrapper = document.createElement('div');\n swiperWrapper.classList.add('swiper-wrapper');\n\n this.t.tabPanels.forEach(slide => {\n swiperWrapper.appendChild(slide.cloneNode(true));\n });\n\n // 更新 t.tabPanels\n this.t.tabPanels = [...swiperWrapper.children];\n\n swiperContainer.appendChild(swiperWrapper);\n this.innerHTML = ''; // 清空原有的內容\n this.appendChild(swiperContainer);\n // 執行 Swiper 效果的相關初始化\n this.#initSwiper();\n }\n #initSwiper() {\n const sContainer = this.querySelector('.swiper-container');\n const sWrapper = this.querySelector('.swiper-wrapper');\n const tabPanels = this.t.tabPanels;\n\n // 設定容器和 wrapper 的樣式\n sContainer.style.overflow = 'hidden';\n sWrapper.style.display = 'flex';\n\n // 設定 wrapper 的寬度\n const totalWidth = tabPanels.length * 100 + '%';\n sWrapper.style.width = totalWidth;\n }\n\n #addUrl(panel) {\n const { t } = this;\n\n if (t.recordUrl === 'true') {\n const params = new URLSearchParams(document.location.search);\n params.set(t.name, panel);\n const newUrl = `${window.location.pathname}?${params.toString()}`;\n\n // 使用 replaceState 修改瀏覽器歷史記錄\n history.replaceState({ t4Id: panel }, '', newUrl);\n }\n }\n\n // 執行函式\n // 移動至指定位置\n #eventAnchor() {\n const gap = parseInt(this.t.gap, 10);\n const pageYOffset = window.pageYOffset;\n const targetOffset = this.getBoundingClientRect().top;\n const changeOffset = targetOffset + pageYOffset - gap;\n this.#goAnchor(changeOffset);\n }\n // 移動\n #goAnchor(val) {\n window.scrollTo({\n top: val,\n behavior: 'smooth',\n });\n }\n // 步驟狀態\n #step(val) {\n let current = parseInt(val, 10) + 1;\n this.t.step.textContent = `${current}`;\n this.t.step.setAttribute('now-page', current);\n }\n // next 按鈕狀態\n #btnNextState(newPage) {\n const next = document.querySelectorAll(`[t4-role=\"next\"][t4-control=\"${this.t.name}\"]`);\n\n const isSinglePage = this.t.tabPanels.length === 1;\n const isLastPage = newPage === this.t.tabPanels.length - 1;\n\n next.forEach(btn => {\n if (isSinglePage || isLastPage) {\n btn.setAttribute('disabled', '');\n } else {\n btn.removeAttribute('disabled');\n }\n });\n }\n // prev 按鈕狀態\n #btnPrevState(newPage) {\n const prev = document.querySelectorAll(`[t4-role=\"prev\"][t4-control=\"${this.t.name}\"]`);\n\n const isSinglePage = this.t.tabPanels.length === 1;\n const isFirstPage = newPage === 0;\n\n prev.forEach(btn => {\n if (isSinglePage || isFirstPage) {\n btn.setAttribute('disabled', '');\n } else {\n btn.removeAttribute('disabled');\n }\n });\n }\n // 頁籤狀態\n #tabState(newPage, tabId) {\n if (this.t.tabGroup === 'true') {\n this.t.tabs.forEach((tab, i) => {\n if (i == newPage) {\n tab.setAttribute('aria-selected', true);\n } else {\n tab.setAttribute('aria-selected', false);\n }\n });\n } else {\n // 自訂 id 的話...\n this.t.tabs.forEach((tab, i) => {\n if (tab.getAttribute('t4-id') === tabId) {\n tab.setAttribute('aria-selected', true);\n } else {\n tab.setAttribute('aria-selected', false);\n }\n });\n }\n }\n // 第三關各種元件判斷 及 執行\n #isTrue(fun, val, val2) {\n switch (fun) {\n case 'step':\n if (isElement(this.t.step)) {\n this.#step(val);\n }\n break;\n case 'eventAnchor':\n if (this.t.anchor) {\n this.#eventAnchor();\n }\n break;\n case 'tabState':\n // 流程沒有按鈕 客制的話....\n if (this.t.type == 'normal') {\n // 頁籤按鈕狀態\n this.#tabState(val, val2);\n }\n break;\n case 'btnState':\n this.#btnNextState(val);\n this.#btnPrevState(val);\n break;\n case 'tabUrl':\n if (this.t.recordUrl === 'true') {\n this.#addUrl(val);\n }\n break;\n default:\n console.warn('請增加判斷,謝謝');\n break;\n }\n }\n // 消失動畫\n #animationHide(index) {\n const { t } = this;\n const { duration, timing, delay } = this.t.transition;\n const tabPanel = t.tabPanels[index];\n // 動畫 消失 動畫 出現 搭配 settimeout 使用\n tabPanel.classList.remove('show');\n tabPanel.classList.add('hide');\n switch (t.display) {\n case 'fade':\n tabPanel.style.cssText = 'display: none; opacity: 0;';\n break;\n case 'slide':\n tabPanel.style.cssText = 'display: none; opacity: 0; max-height: unset;';\n break;\n case 'swiper':\n break;\n default:\n tabPanel.style.display = 'none';\n break;\n }\n }\n // 出現動畫\n #animationShow(index) {\n const { duration, timing, delay } = this.t.transition;\n const tabPanel = this.t.tabPanels[index];\n let timer;\n\n tabPanel.classList.add('show');\n tabPanel.classList.remove('hide');\n tabPanel.style.transition = `opacity ${duration}ms ${timing} ${delay}ms`;\n tabPanel.style.display = 'block';\n\n switch (this.t.display) {\n case 'fade':\n tabPanel.style.opacity = '0';\n timer = setTimeout(() => {\n clearTimeout(timer);\n tabPanel.style.opacity = '1';\n }, 100);\n break;\n case 'slide':\n console.warn(this.t.display, '抱歉,好像壞掉了...');\n const clientHeight = tabPanel.offsetHeight;\n tabPanel.style.opacity = '1';\n tabPanel.style.maxHeight = '0';\n timer = setTimeout(() => {\n clearTimeout(timer);\n tabPanel.style.maxHeight = clientHeight + 'px';\n }, 100);\n break;\n case 'swiper':\n tabPanel.style.opacity = '1';\n const sWrapper = this.querySelector('.swiper-wrapper');\n const slideWidth = this.t.tabPanels[0].offsetWidth;\n const translateValue = -index * slideWidth;\n\n sWrapper.style.transition = `transform ${duration}ms ${timing} ${delay}ms`;\n sWrapper.style.transform = `translateX(${translateValue}px)`;\n break;\n default:\n console.warn(this.t.display, '沒有這個效果請自己想辦法!!!!');\n break;\n }\n }\n // 狀態\n #stateChange(tabId) {\n const newTabIndex = this.#getTabIndex(tabId);\n // 通知狀態改變\n this.#isTrue('step', newTabIndex);\n this.#isTrue('btnState', newTabIndex);\n this.#isTrue('tabState', newTabIndex, tabId);\n this.#isTrue('tabUrl', tabId);\n // 觸發自定義事件\n this.emit('change');\n }\n // resize\n #resizeTab() {\n const _this_ = this;\n window.addEventListener(\n 'resize',\n debounce(() => {\n _this_.update();\n }, 1000),\n );\n }\n\n // ------------- 我是分隔線呦 -------------\n // 頁籤切換\n tabClick(clickedTab) {\n const { t } = this;\n // 防呆!! 為了保證數量多餘頁籤時仍可正常執行\n const indexOf = t.tabs.indexOf(clickedTab) % t.tabPanels.length;\n const newTabId = t.tabGroup === 'true' ? String(indexOf) : clickedTab.getAttribute('t4-id');\n\n // 通知頁籤切換\n this.setActiveTab(newTabId);\n\n // 錨點滑動動畫\n setTimeout(() => {\n this.#isTrue('eventAnchor');\n }, t.transition.duration);\n }\n // 外部呼叫方法 $0.setActiveTab(0)\n setActiveTab(id) {\n const { t } = this;\n const defaultID = id === '' ? t.tabPanels[0].getAttribute('t4-id') : id;\n t.activeTab = defaultID;\n this.setAttribute('t4-active', defaultID);\n\n const newTabIndex = this.#getTabIndex(defaultID);\n\n t.tabPanels.forEach((panel, i) => {\n i === newTabIndex ? this.#animationShow(i) : this.#animationHide(i);\n });\n }\n // 外部呼叫方法 $0.goNext()\n goNext() {\n const tabIndex = this.#getTabIndex(this.t.activeTab);\n const nextPage = Math.min(this.t.tabPanels.length - 1, tabIndex + 1);\n const nextPageId = this.t.tabPanels[nextPage].getAttribute('t4-id');\n this.setActiveTab(nextPageId);\n }\n // 外部呼叫方法 $0.goPrev()\n goPrev() {\n const tabIndex = this.#getTabIndex(this.t.activeTab);\n const prevPage = Math.max(0, tabIndex - 1);\n const prevPageId = this.t.tabPanels[prevPage].getAttribute('t4-id');\n this.setActiveTab(prevPageId);\n }\n // 外部呼叫方法 $0.update()\n update() {\n this.t.tabs = this.#tabSet();\n // 事件重綁\n changeEvent();\n console.log('tab update!!!!');\n }\n}\n\nfunction debounce(func, time = 1000) {\n let timer;\n return function (event) {\n if (timer) clearTimeout(timer);\n timer = setTimeout(func, time, event);\n };\n}\n\n// 綁定點擊事件\nfunction changeEvent() {\n const targetElements = document.querySelectorAll('[t4-control]');\n\n document.addEventListener('click', function (event) {\n let isTarget = false;\n for (const targetElement of targetElements) {\n if (targetElement.contains(event.target) || event.target.closest('[t4-control]') === targetElement) {\n isTarget = true;\n break;\n }\n }\n if (isTarget) {\n // event.target 是目標元素或其子層\n const tabControl = event.target.closest('[t4-control]');\n const tabElName = tabControl.getAttribute('t4-control');\n const tabEls = document.querySelectorAll(`tab-el[t4-name=\"${tabElName}\"]`);\n const role = tabControl.getAttribute('t4-role');\n tabEls.forEach(el => {\n switch (role) {\n case 'tab':\n el.tabClick(tabControl);\n break;\n case 'next':\n el.goNext(tabControl);\n break;\n case 'prev':\n el.goPrev(tabControl);\n break;\n default:\n console.warn('你是誰??', tabControl);\n break;\n }\n });\n }\n });\n}\nchangeEvent();\n\nObject.assign(Tab4.prototype, EVENTS);\n\ncustomElements.define('tab-el', Tab4);\n\nexport default Tab4;\n","import { configs } from '../configs'\nimport {\n EVENTS,\n isString,\n isElement,\n isNodeList,\n isElementExist,\n isFunction,\n getElement,\n getAllElements,\n createUid,\n toHTMLElement,\n jsonParse,\n warn,\n error\n} from '../commons'\n\nconst collapseHandle = $wrapper => {\n const { defaultOptions } = $wrapper.collapse;\n const { collapseClass, target, transition } = defaultOptions;\n\n const $target = $wrapper.querySelector(target);\n\n $wrapper.classList.add(collapseClass);\n\n $target.style.height = 0;\n $target.style['transition-property'] = transition.property;\n $target.style['transition-duration'] = transition.duration;\n $target.style['transition-timing-function'] = transition.function;\n $target.style['transition-delay'] = transition.delay;\n $target.style.overflow = 'hidden';\n};\n\nconst expandHandle = $wrapper => {\n const { defaultOptions } = $wrapper.collapse;\n const { collapseClass, target, transition } = defaultOptions;\n\n const $target = $wrapper.querySelector(target);\n const height = $target.children[0].offsetHeight;\n $wrapper.collapse.height = height;\n\n // console.log( height );\n // console.log( $target.children[0].offsetHeight );\n $wrapper.classList.remove(collapseClass);\n\n $target.style.display = 'block';\n $target.style.height = `${height}px`;\n $target.style['transition-property'] = transition.property;\n $target.style['transition-duration'] = transition.duration;\n $target.style['transition-timing-function'] = transition.function;\n $target.style['transition-delay'] = transition.delay;\n $target.style.overflow = 'hidden';\n};\n\nclass Collapse4 {\n constructor(el, options = {}) {\n // 可傳 string 或 element 或 nodeList\n if (!isString(el) && !isElement(el) && !isNodeList(el) && !isElementExist(el)) return;\n\n this.__storage__ = {\n el,\n options,\n };\n\n this.active = 'data-collapse-active'\n this.#create();\n }\n\n #create() {\n const { el, options } = this.__storage__;\n const { SETTINGS, EVENTS } = configs.collapse4;\n\n //wade\n this.elements = options.state == \"not active\" ? getAllElements(el + `:not([${this.active}])`) : getAllElements(el);\n // this.elements = getAllElements(el);\n this.options = Object.assign({}, SETTINGS, options);\n this.__events__ = Object.assign({}, EVENTS);\n\n if (this.options.on) {\n for (const [k, v] of Object.entries(this.options.on)) {\n this.__events__[k] = [v];\n }\n }\n\n this.#init();\n }\n\n #init() {\n const { elements, options } = this;\n\n elements.forEach(el => {\n el.collapse = {};\n el.collapse.instance = this;\n el.collapse.defaultOptions = options;\n el.collapse.methods = {};\n el.collapse.methods.update = this.update;\n //wade\n el.setAttribute(this.active, '')\n this.#trigger(el);\n });\n\n this.emit('init');\n }\n\n #trigger(el) {\n const { options } = this;\n const { collapseClass, block, target, defaultOpen, targetStopPropagation, defaultActiveMark } = options;\n\n // collapse-wrapper\n // collapse-block\n // collapse-target\n\n const $wrapper = el;\n const $target = $wrapper.querySelector(target);\n $wrapper.collapse.height = $target.children[0].offsetHeight;\n\n // const $block = $wrapper.querySelector(block);\n\n // 是否預設全打開\n if (defaultOpen) {\n $target.style.height = `${$target.children[0].offsetHeight}px`;\n $wrapper.classList.remove(collapseClass);\n } else {\n if (!$wrapper.classList.contains(defaultActiveMark) && !$wrapper.hasAttribute(defaultActiveMark)) {\n $wrapper.classList.add(collapseClass);\n $target.style.height = '0px';\n $target.style.overflow = 'hidden';\n } else {\n $target.style.height = `${$target.children[0].offsetHeight}px`;\n $wrapper.classList.remove(collapseClass);\n }\n }\n\n // update() 避免重複綁定\n $wrapper.removeEventListener('click', this.#event);\n $wrapper.addEventListener('click', this.#event);\n\n // target 點擊不收合\n if (targetStopPropagation) {\n const event = e => {\n e.stopPropagation();\n };\n // update() 避免重複綁定\n $target.removeEventListener('click', event);\n $target.addEventListener('click', event);\n }\n }\n\n #event() {\n const { instance, defaultOptions } = this.collapse;\n const { collapseClass, block, target, single } = defaultOptions;\n\n const $wrapper = this;\n\n if ($wrapper.classList.contains(collapseClass)) {\n if (single) {\n $wrapper.parentNode.querySelectorAll(`.${$wrapper.classList[0]}`).forEach(el => {\n collapseHandle(el);\n });\n }\n\n expandHandle($wrapper);\n } else {\n collapseHandle($wrapper);\n }\n\n instance.emit('afterCollapse');\n }\n\n update() {\n this.#create();\n }\n}\n\nObject.assign(Collapse4.prototype, EVENTS);\n\nexport default Collapse4;\n","import { configs } from '../configs'\n\nfunction createRipple(e, r4) {\n const button = r4;\n const { color, opacity, duration } = r4.s.options;\n\n // 可以更改點擊時生成效果樣式的結構\n let ripples = document.createElement('span');\n\n //偵測滑鼠點擊位置\n let x = e.clientX - button.getBoundingClientRect().left;\n let y = e.clientY - button.getBoundingClientRect().top;\n\n ripples.style.cssText = `background: ${color};left: ${x}px;top: ${y}px;opacity: ${opacity};animation-duration: ${duration}ms`;\n ripples.classList.add('circle');\n\n // 生成\n button.appendChild(ripples);\n\n // 生成後消失\n setTimeout(function () {\n ripples.remove();\n }, `${duration}`);\n}\n\nfunction removeStyle() {\n document.querySelectorAll('ripple-btn').forEach(button => {\n const ball = button.querySelector('.hover-ball');\n button.style.setProperty('--r', '');\n button.classList.remove('entered');\n });\n}\n\ndocument.addEventListener('click', removeStyle);\n\nclass Ripple4 extends HTMLElement {\n constructor() {\n super();\n this.initialize = false;\n }\n\n connectedCallback() {\n const r4 = this;\n if (r4.initialize || r4.classList.contains('r4-initialize')) return;\n r4.initialize = true;\n this.#create();\n }\n\n #create() {\n const { SETTINGS } = configs.ripple4;\n this.s = {};\n function attrToBoolean(str) {\n let booleanVal = Boolean(str);\n booleanVal = str === 'true';\n return booleanVal;\n }\n const options = {\n color: this.getAttribute('r4-color') || SETTINGS.color,\n opacity: this.getAttribute('r4-opacity') || SETTINGS.opacity,\n duration: Number(this.getAttribute('r4-duration')) || SETTINGS.duration,\n speed: Number(this.getAttribute('r4-speed')) || SETTINGS.speed,\n hover: this.getAttribute('r4-hover') ? attrToBoolean(this.getAttribute('r4-hover')) : SETTINGS.hover,\n click: this.getAttribute('r4-hover-click') ? attrToBoolean(this.getAttribute('r4-hover-click')) : SETTINGS.click,\n };\n\n this.s.options = options;\n if (this.s.options.hover) this.classList.add('hover-btn');\n\n this.#init();\n }\n\n #init() {\n this.#ball();\n this.#event();\n this.classList.add('r4-initialize');\n }\n\n #ball() {\n const button = this;\n const ball = document.createElement('i');\n ball.classList.add('hover-ball');\n ball.style.transitionDuration = `${button.s.options.speed}ms`;\n button.appendChild(ball);\n }\n\n #event() {\n const ball = this.querySelector('i.hover-ball');\n const button = this;\n // ripple點擊事件\n button.addEventListener('click', function (e) {\n e.stopPropagation();\n if (button.s.options.click) {\n createRipple(e, button);\n }\n });\n\n // 判斷操作事件使用 mouse 或是 touch\n let operateStart = 'ontouchstart' in document.documentElement ? 'touchstart' : 'mouseenter';\n let operateEnd = 'ontouchend' in document.documentElement ? 'touchend' : 'mouseleave';\n // hover\n button.addEventListener(operateStart, function (e) {\n if (operateStart === 'touchstart') {\n removeStyle();\n }\n if (button.s.options.hover) {\n const posX = operateStart === 'mouseenter' ? Math.round(e.clientX - button.getBoundingClientRect().left) : Math.round(e.changedTouches[0].clientX - button.getBoundingClientRect().x);\n const posY = operateStart === 'mouseenter' ? Math.round(e.clientY - button.getBoundingClientRect().top) : Math.round(e.changedTouches[0].clientY - button.getBoundingClientRect().y);\n const { offsetWidth, offsetHeight } = button;\n // 0402\n // 取 button 的寬度及長度 抓最大的值\n const max = Math.max(offsetWidth, offsetHeight);\n ball.style.width = max * 2 + 'px';\n ball.style.height = max * 2 + 'px';\n // 最大可覆蓋之半徑\n // const rippleR = Math.ceil(Math.sqrt(offsetWidth ** 2 + offsetHeight ** 2) * 2);\n // button.style.setProperty('--r', rippleR);\n ball.style.left = posX + 'px';\n ball.style.top = posY + 'px';\n button.classList.add('entered');\n }\n });\n button.addEventListener(operateEnd, function (e) {\n if (operateEnd === 'touchend') return;\n if (button.s.options.hover) {\n const posX = operateEnd === 'mouseleave' ? Math.round(e.clientX - button.getBoundingClientRect().left) : Math.round(e.changedTouches[0].clientX - button.getBoundingClientRect().x);\n const posY = operateEnd === 'mouseleave' ? Math.round(e.clientY - button.getBoundingClientRect().top) : Math.round(e.changedTouches[0].clientY - button.getBoundingClientRect().y);\n // 250402\n ball.style.width = 1 + 'px';\n ball.style.height = 1 + 'px';\n button.style.setProperty('--r', '');\n ball.style.left = posX + 'px';\n ball.style.top = posY + 'px';\n button.classList.remove('entered');\n }\n });\n }\n update() {\n this.classList.remove('r4-initialize');\n this.querySelector('i.hover-ball').remove();\n this.#create();\n }\n}\n\ncustomElements.define('ripple-btn', Ripple4);\n\nexport default Ripple4;\n","export default class ImageValidate {\n constructor() {\n this.init();\n }\n init() {\n const images = document.querySelectorAll('*:not([video-id]) > img');\n const noImageDom = (width, height) => {\n const div = document.createElement('div');\n const slash1 = document.createElement('span');\n const slash2 = document.createElement('span');\n const slashWidth = Math.sqrt(width ** 2 + height ** 2);\n const theta = (Math.asin(height / slashWidth) * 180) / Math.PI;\n div.className = 'no-image';\n slash1.className = 'slash1';\n slash1.style.cssText = `\n width: ${slashWidth}px;\n transform: rotate(${theta}deg);\n `;\n slash2.className = 'slash2';\n slash2.style.cssText = `\n width: ${slashWidth}px;\n transform: rotate(${-theta}deg);\n `;\n div.appendChild(slash1);\n div.appendChild(slash2);\n return div;\n };\n const errorImage = document.querySelectorAll('.error-image');\n for (let i = 0; i < errorImage.length; i++) {\n errorImage[i].remove();\n }\n images.forEach((img) => {\n let src;\n const wrapWidth = img.parentElement.clientWidth;\n const wrapHeight = img.parentElement.clientHeight;\n if (img.classList.contains('lazy') || img.classList.contains('swiper-lazy')) {\n src = img.getAttribute('data-src');\n } else {\n src = img.getAttribute('src');\n }\n if (src === '') {\n const wrapDIV = document.createElement('div');\n const parentsPosition = getComputedStyle(img.parentElement).position;\n wrapDIV.className = 'error-image';\n if (parentsPosition === 'static') {\n img.parentElement.style.position = 'relative';\n }\n img.parentElement.appendChild(wrapDIV);\n wrapDIV.style.cssText = `\n position: absolute;\n top: 50%;\n left: 50%;\n width: 100%;\n height: 100%;\n transform: translate(-50%,-50%);\n z-index: 1;\n `;\n wrapDIV.appendChild(noImageDom(wrapWidth, wrapHeight));\n }\n });\n function imageResize() {\n const noImage = document.querySelectorAll('.no-image');\n if (noImage.length <= 0) return;\n noImage.forEach((item) => {\n const wrapWidth = item.parentElement.clientWidth;\n const wrapHeight = item.parentElement.clientHeight;\n const slashWidth = Math.sqrt(wrapWidth ** 2 + wrapHeight ** 2);\n const theta = (Math.asin(wrapHeight / slashWidth) * 180) / Math.PI;\n item.querySelector('.slash1').style.cssText = `\n width: ${slashWidth}px;\n transform: rotate(${theta}deg);\n `;\n item.querySelector('.slash2').style.cssText = `\n width: ${slashWidth}px;\n transform: rotate(${-theta}deg);\n `;\n });\n }\n window.addEventListener('resize', imageResize);\n }\n reValidate() {\n this.init();\n }\n}\n","//建立 callback Function\nfunction createCallbackFunction(attributeValue, defaultValue) {\n if (attributeValue) {\n return function (el, res) {\n Function(attributeValue)(el, res);\n };\n } else {\n return defaultValue;\n }\n}\n\n//產生結構\nfunction createDOM(input, element, file, res) {\n const params = element.params;\n const preview = input.closest('[data-upload-item]').querySelector('[data-preview]');\n if (preview.querySelector('img')) preview.querySelector('img').remove();\n preview.appendChild(res.imgElement);\n const group = input.dataset.group;\n const inputIndex = document.querySelector(element.el).dataset.index;\n if (params.compress) {\n //副檔名\n const fileExt = file.name.substring(file.name.lastIndexOf('.')).replace('.');\n //檔名\n const fileName = file.name.replace(`.${fileExt}`, '');\n //檔案壓縮\n res.originalCanvas.toBlob(\n function (blob) {\n const imgFile = new File([blob], `${fileName}`, { type: file.type });\n uploadImage[`${group}`][inputIndex] = {\n file: imgFile,\n info: res,\n };\n if (params.on.changeAfter && typeof params.on.changeAfter === 'function') {\n params.on.changeAfter(input, res);\n }\n },\n file.type,\n params.compress,\n );\n } else {\n uploadImage[`${group}`][inputIndex] = {\n file: file,\n info: res,\n };\n if (params.on.changeAfter && typeof params.on.changeAfter === 'function') {\n params.on.changeAfter(input, res);\n }\n }\n}\n\n//產生Canvas\nfunction createCanvas(options, img, outputW, outputH) {\n const canvas = document.createElement('canvas');\n const ctx = canvas.getContext('2d');\n const originalWidth = img.width;\n const originalHeight = img.height;\n const originalRatio = (originalHeight / originalWidth) * 100;\n const outputRatio = (outputH / outputW) * 100;\n let newWidth = 0;\n let newHeight = 0;\n canvas.width = outputW;\n canvas.height = outputH;\n //縮圖填滿\n switch (options.previewSize) {\n case 'contain':\n if (originalRatio < outputRatio) {\n newWidth = canvas.width;\n newHeight = (outputW * originalRatio) / 100;\n } else if (originalRatio > outputRatio) {\n newWidth = (outputH / originalRatio) * 100;\n newHeight = canvas.height;\n } else {\n newWidth = canvas.width;\n newHeight = canvas.height;\n }\n break;\n case 'cover':\n if (originalRatio < outputRatio) {\n newWidth = (outputH / originalRatio) * 100;\n newHeight = canvas.height;\n } else if (originalRatio > outputRatio) {\n newWidth = canvas.width;\n newHeight = (outputW * originalRatio) / 100;\n } else if (originalRatio === outputRatio) {\n newWidth = canvas.width;\n newHeight = canvas.height;\n }\n break;\n }\n const x = (canvas.width - newWidth) * 0.5;\n const y = (canvas.height - newHeight) * 0.5;\n ctx.drawImage(img, x, y, newWidth, newHeight);\n\n return canvas;\n}\n\n//將檔案轉成圖片\nfunction convertImg(options, dataUrl) {\n return new Promise((resolve, reject) => {\n if (dataUrl) {\n const img = new Image();\n img.src = dataUrl;\n img.classList.add(options.previewSize);\n img.onload = () => {\n let result = {\n imgElement: img,\n originalCanvas: createCanvas(options, img, img.width, img.height),\n info: {\n originalWidth: img.width,\n originalHeight: img.height,\n ratio: (img.height / img.width) * 100 + '%',\n },\n };\n resolve(result);\n };\n } else {\n resolve();\n }\n });\n}\n\n//小數點後第N位四捨五入\nfunction formatFloat(num, pos) {\n const size = Math.pow(10, pos);\n return Math.round(num * size) / size;\n}\n\n//檢查檔案大小\nfunction checkSize(file, sizeLimit) {\n let fileSize = file.size / 1024 / 1024;\n return `${formatFloat(fileSize, 2)}` <= sizeLimit;\n}\n\n//讀取檔案\nfunction readFileHandler(e, input, element) {\n if (e.target.files.length <= 0) return;\n const file = e.target.files[0];\n const parentsEl = input.closest('[data-upload-item]');\n let reader = new FileReader();\n reader.onload = event => {\n const dataUrl = file.type.split('/')[0] === 'image' ? event.target.result : null;\n if (element.params.sizeLimit && !checkSize(file, element.params.sizeLimit)) {\n input.value = '';\n parentsEl.classList.add('over-limit');\n if (element.params.on.overLimit && typeof element.params.on.overLimit === 'function') {\n element.params.on.overLimit(input, element.params.sizeLimit);\n }\n return;\n } else {\n parentsEl.classList.remove('over-limit');\n parentsEl.classList.add('uploaded');\n convertImg(element.params, dataUrl).then(res => {\n createDOM(input, element, file, res);\n });\n }\n };\n reader.readAsDataURL(file);\n}\n\nexport default class ImagePreview {\n constructor(element, params) {\n const self = this;\n self.el = element;\n // default params\n self.params = {\n on: {\n changeAfter: null,\n overLimit: null,\n },\n group: 'group', //群組名稱 (type: String)\n sizeLimit: 2, //大小限制 (type: Number 單位: MB)\n previewSize: 'cover', //縮圖形式 (type: String 'contain' || 'cover')\n compress: 0.8, //壓縮品質 (type: Number 0~1 || false)\n };\n Object.assign(self.params, params);\n self.init();\n }\n init() {\n const self = this;\n const inputs = document.querySelectorAll(`${self.el}:not(.preview-active)`);\n if (inputs.length <= 0) return;\n window.uploadImage = {};\n inputs.forEach((input, index) => {\n input.classList.add('preview-active');\n // final set params\n const params = {\n group: input.dataset.group || self.params.group,\n sizeLimit: parseInt(input.dataset.limit) || self.params.sizeLimit,\n previewSize: input.dataset.previewSize || self.params.previewSize,\n compress: input.dataset.compress || self.params.compress,\n on: {\n changeAfter: createCallbackFunction(input.dataset.changeAfter, self.params.on.changeAfter),\n overLimit: createCallbackFunction(input.dataset.overLimit, self.params.on.overLimit),\n },\n };\n self.params = params;\n if (typeof uploadImage[`${params.group}`] === 'undefined') uploadImage[`${params.group}`] = [];\n if (!input.dataset.group) input.dataset.group = params.group;\n input.dataset.index = document.querySelectorAll(`[data-group=\"${params.group}\"]`).length - 1;\n input.addEventListener('change', function (e) {\n readFileHandler(e, input, self);\n });\n });\n }\n}\n\n"],"names":["video4","share4","modal4","type","marquee4","dropdown4","filter","filterPlaceholder","customTemplate","dropdownIcon","dropdownIcons","filterBar","defaultTemplate","article4","aost4","anchor4","multipurpose4","collapse","dropdown","tab4","collapse4","ripple4","insert","isString","value","isElement","isNodeList","isElementExist","getElement","isFunction","getAllElements","createUid","toHTMLElement","str","dom","jsonParse","json","warn","target","msg","error","EVENTS","events","handler","__events__","evt","evtHandler","index","onceHandler","args","event","data","ease","t","b","c","d","scrollTo","options","instance","container","spacer","speed","gap","easing","direction","isHorizontal","scrollDirection","rectPosition","rectSpace","containerEle","start","targetPoint","spacerGap","change","increment","currentTime","emitEvent","eventName","targetEle","animateScroll","val","Anchor4","el","__privateAdd","_create","_init","_trigger","__privateMethod","create_fn","elements","_a","SETTINGS","configs.anchor4","newOptions","hashName","targetStr","searchParams","k","v","init_fn","trigger_fn","defaultOptions","eventHandler","MODALS","createTemplate","TEMPLATE","configs.modal4","childDom","content","child","ModernModal","_mount","_event","_stateControl","attr","oldVal","newVal","stateControl_fn","ATTRS","id","mount_fn","scroller","OverlayScrollbars","event_fn","$self","close","destroy","closeAttr","_b","destroyAttr","_c","e","state","__scroller__","viewport","transitionEndHandler","useMethod","name","useFunction","Modal4","dispatchModal","modal","useModal","useFetch","action","on","route","useEvent","res","doms","containerElement","_Modal4","openOptions","obj","methods","ons","interaction","scrollElement","viewHeight","viewTop","className","delay","end","repeat","top","bottom","startTrigger","endTrigger","shouldRemove","detectRepeat","repeatType","Aost4","removeShow","configs.aost4","configs.video4","videoPlayer","_youtube","_vimeo","_youku","_bilibili","_instagram","_tiktok","videoType","layout","youtube_fn","youku_fn","vimeo_fn","bilibili_fn","instagram_fn","tiktok_fn","videoId","autoplay","startTime","hash","sleep","time","resolve","timer","scrollLock","elementArr","element","$","lock","scrollUnlock","unlock","loading","timerout","loaded","imagePreview","selector","ImagePreview","ajaxUpdate","lazy","LazyLoad","img","imageValidate","ImageValidate","tabChange","callback","bodyScrollbarInit","appleDebug","detectMacOSVersion","userAgent","clickToggleClass","clickSwitchClass","debounce","func","context","throttle","timeout","last","now","countDown","set_seconds","set_time","minutes","seconds","reject","fixMobile100vh","init","vh","wordAnimation","isWrap","delayStartTime","delaySpace","randomTransTime","$this","removeBr","newText","words","s","letter","i","formatFloat","num","pos","size","getSlideDataIndex","swiper","activeIndex","slidesLen","getSlidesCount","disableNum","gridRows","disableCount","slideImgDetect","isVideo","activeSlide","video","allVideo","numberGrow","ele","splitNum","zeroToNine","text","letterGrow","splitLetter","aToZ","getTransformX","transform","mat","getTransformY","htmlStringToDOM","htmlString","hasVideoID","isActive","createPlayer","params","_createCover","_getVideoData","getVideoData_fn","createCover_fn","LAYOUT","$selector","videoLayoutNo","videoMode","videoButton","videoCover","videoHighQualityPic","$target","$cover","src","response","html","url","err","emit","videoTarget","videoKeep","videoTargetRoute","videoIgHtml","script","scrollers","entries","cityData","d4","configs.dropdown4","subOption","detectSync","controlElements","disabledEl","setSelectDisplay","valueIndex","placeholder","allLi","option","li","activeLi","tagEl","valueArray","loadCityData","lang","city","loadDistData","dist","closeAllDropdown","settingScrollbarStyle","key","Dropdown4","valueLiArray","valueIndexArray","dropdownHeight","hasFilter","totalHeight","allSublayer","defaultHeight","item","scroll","valueLi","cityDropdown","cityDropdownHasVal","toggleTransitionend","dropdownStatus","scrollToActive","halfActiveLiHeight","offsetTop","computedHeight","citySelect","clickOption","clickIndex","subDropdown","subDropdownList","subDropdownListMargin","subDropdownH","maxHeight","recalculate","distSelectEl","activeLiArray","getBreakpoints","m4","breakpoints","getDuration","breakpoint","points","point","a","createAnimateWrap","behavior","continual","childDOM","animateItem","cloneElement","cloneAnimateWrap","keyframes","framesObj","animateFrom","animateTo","Marquee4","_animation","configs.marquee4","animation_fn","duration","pauseOnMouseenter","playDelay","animateInit","enterKeyframes","framesArr","moveDistance","averageDuration","updateDuration","cloneStartTime","addClass","removeClass","dragControl","_bindButtonEvent","_bindDragEvent","_scrollerDetect","_buttonDetect","_bindItemEvent","$wrapper","$active","updateEvent","scrollerDetect_fn","buttonDetect_fn","bindDragEvent_fn","bindButtonEvent_fn","_d","_e","_f","bindItemEvent_fn","$button","buttonEvent","fix","$el","isDown","isMoved","startX","scrollLeft","mousedownEvent","mouseleaveEvent","mouseupEvent","mousemoveEvent","walk","reset","$container","gate","$element","itemEvent","selectOption","clickHandler","collapseControl","$drag","originalDomString","$storage","configs.multipurpose4","Multipurpose4","_render","_breakpoint","_distribute","distribute_fn","breakpoint_fn","customize","render_fn","keys","dragContainer","collapseContainer","Tab4","_tabSet","_getTabIndex","_createSwiper","_initSwiper","_addUrl","_eventAnchor","_goAnchor","_step","_btnNextState","_btnPrevState","_tabState","_isTrue","_animationHide","_animationShow","_stateChange","_resizeTab","stateChange_fn","clickedTab","indexOf","newTabId","isTrue_fn","defaultID","newTabIndex","getTabIndex_fn","panel","animationShow_fn","animationHide_fn","tabIndex","nextPage","nextPageId","prevPage","prevPageId","tabSet_fn","changeEvent","configs.tab4","createSwiper_fn","matchingTabs","resizeTab_fn","tabs","tabPanelsWithId","tabPanel","swiperContainer","swiperWrapper","slide","initSwiper_fn","sContainer","sWrapper","tabPanels","totalWidth","addUrl_fn","newUrl","eventAnchor_fn","pageYOffset","changeOffset","goAnchor_fn","step_fn","current","btnNextState_fn","newPage","next","isSinglePage","isLastPage","btn","btnPrevState_fn","prev","isFirstPage","tabState_fn","tabId","tab","fun","val2","timing","clientHeight","slideWidth","translateValue","_this_","targetElements","isTarget","targetElement","tabControl","tabElName","tabEls","role","collapseHandle","collapseClass","transition","expandHandle","height","Collapse4","configs.collapse4","block","defaultOpen","targetStopPropagation","defaultActiveMark","single","createRipple","r4","button","color","opacity","ripples","x","y","removeStyle","Ripple4","_ball","configs.ripple4","attrToBoolean","booleanVal","ball_fn","ball","operateStart","operateEnd","posX","posY","offsetWidth","offsetHeight","max","images","noImageDom","width","div","slash1","slash2","slashWidth","theta","errorImage","wrapWidth","wrapHeight","wrapDIV","parentsPosition","imageResize","noImage","createCallbackFunction","attributeValue","defaultValue","createDOM","input","file","preview","group","inputIndex","fileExt","fileName","blob","imgFile","createCanvas","outputW","outputH","canvas","ctx","originalWidth","originalRatio","outputRatio","newWidth","newHeight","convertImg","dataUrl","result","checkSize","sizeLimit","fileSize","readFileHandler","parentsEl","reader","self","inputs"],"mappings":"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AAO,KAAK;AAAA,MACb,CAAC,OAAO,KAAK;AAAA,MACb,CAAC,OAAO,KAAK;AAAA,MACb,CAAC,OAAO,KAAK;AAAA,MACb,CAAC,OAAO,KAAK;AAAA,MACb,CAAC,OAAO,KAAK;AAAA,MACb,CAAC,OAAO,KAAK;AAAA,MACb,CAAC,OAAO,KAAK;AAAA,IACd;AAAA,IACD,KAAK;AAAA,MACH,CAAC,OAAO,KAAK;AAAA,MACb,CAAC,OAAO,KAAK;AAAA,MACb,CAAC,OAAO,KAAK;AAAA,MACb,CAAC,OAAO,KAAK;AAAA,MACb,CAAC,OAAO,KAAK;AAAA,MACb,CAAC,OAAO,KAAK;AAAA,MACb,CAAC,OAAO,KAAK;AAAA,MACb,CAAC,OAAO,KAAK;AAAA,MACb,CAAC,OAAO,KAAK;AAAA,MACb,CAAC,OAAO,KAAK;AAAA,MACb,CAAC,OAAO,KAAK;AAAA,MACb,CAAC,OAAO,KAAK;AAAA,MACb,CAAC,OAAO,KAAK;AAAA,MACb,CAAC,OAAO,KAAK;AAAA,MACb,CAAC,OAAO,KAAK;AAAA,MACb,CAAC,OAAO,KAAK;AAAA,MACb,CAAC,OAAO,KAAK;AAAA,MACb,CAAC,OAAO,KAAK;AAAA,MACb,CAAC,OAAO,KAAK;AAAA,MACb,CAAC,OAAO,KAAK;AAAA,MACb,CAAC,OAAO,KAAK;AAAA,MACb,CAAC,OAAO,KAAK;AAAA,MACb,CAAC,OAAO,KAAK;AAAA,MACb,CAAC,OAAO,KAAK;AAAA,MACb,CAAC,OAAO,KAAK;AAAA,MACb,CAAC,OAAO,KAAK;AAAA,IACd;AAAA,IACD,KAAK;AAAA,MACH,CAAC,OAAO,KAAK;AAAA,MACb,CAAC,OAAO,KAAK;AAAA,MACb,CAAC,OAAO,KAAK;AAAA,MACb,CAAC,OAAO,KAAK;AAAA,MACb,CAAC,OAAO,KAAK;AAAA,MACb,CAAC,OAAO,KAAK;AAAA,MACb,CAAC,OAAO,KAAK;AAAA,MACb,CAAC,OAAO,KAAK;AAAA,MACb,CAAC,OAAO,KAAK;AAAA,MACb,CAAC,OAAO,KAAK;AAAA,MACb,CAAC,OAAO,KAAK;AAAA,MACb,CAAC,OAAO,KAAK;AAAA,MACb,CAAC,OAAO,KAAK;AAAA,IACd;AAAA,IACD,KAAK;AAAA,MACH,CAAC,OAAO,KAAK;AAAA,MACb,CAAC,OAAO,KAAK;AAAA,MACb,CAAC,OAAO,KAAK;AAAA,MACb,CAAC,OAAO,KAAK;AAAA,MACb,CAAC,OAAO,KAAK;AAAA,MACb,CAAC,OAAO,KAAK;AAAA,MACb,CAAC,OAAO,KAAK;AAAA,MACb,CAAC,OAAO,KAAK;AAAA,MACb,CAAC,OAAO,KAAK;AAAA,MACb,CAAC,OAAO,KAAK;AAAA,MACb,CAAC,OAAO,KAAK;AAAA,MACb,CAAC,OAAO,KAAK;AAAA,MACb,CAAC,OAAO,KAAK;AAAA,MACb,CAAC,OAAO,KAAK;AAAA,MACb,CAAC,OAAO,KAAK;AAAA,MACb,CAAC,OAAO,KAAK;AAAA,MACb,CAAC,OAAO,KAAK;AAAA,MACb,CAAC,OAAO,KAAK;AAAA,MACb,CAAC,OAAO,KAAK;AAAA,MACb,CAAC,OAAO,KAAK;AAAA,IACd;AAAA,IACD,KAAK;AAAA,MACH,CAAC,MAAM,KAAK;AAAA,MACZ,CAAC,MAAM,KAAK;AAAA,IACb;AAAA,IACD,KAAK;AAAA,MACH,CAAC,OAAO,KAAK;AAAA,MACb,CAAC,OAAO,KAAK;AAAA,MACb,CAAC,OAAO,KAAK;AAAA,MACb,CAAC,QAAQ,KAAK;AAAA,MACd,CAAC,OAAO,KAAK;AAAA,MACb,CAAC,OAAO,KAAK;AAAA,MACb,CAAC,OAAO,KAAK;AAAA,MACb,CAAC,OAAO,KAAK;AAAA,MACb,CAAC,OAAO,KAAK;AAAA,MACb,CAAC,OAAO,KAAK;AAAA,MACb,CAAC,OAAO,KAAK;AAAA,MACb,CAAC,OAAO,KAAK;AAAA,MACb,CAAC,OAAO,KAAK;AAAA,MACb,CAAC,OAAO,KAAK;AAAA,MACb,CAAC,OAAO,KAAK;AAAA,MACb,CAAC,OAAO,KAAK;AAAA,MACb,CAAC,OAAO,KAAK;AAAA,MACb,CAAC,OAAO,KAAK;AAAA,IACd;AAAA,IACD,KAAK;AAAA,MACH,CAAC,OAAO,KAAK;AAAA,MACb,CAAC,MAAM,KAAK;AAAA,MACZ,CAAC,MAAM,KAAK;AAAA,MACZ,CAAC,MAAM,KAAK;AAAA,MACZ,CAAC,OAAO,KAAK;AAAA,MACb,CAAC,OAAO,KAAK;AAAA,MACb,CAAC,OAAO,KAAK;AAAA,MACb,CAAC,OAAO,KAAK;AAAA,MACb,CAAC,OAAO,KAAK;AAAA,MACb,CAAC,OAAO,KAAK;AAAA,MACb,CAAC,OAAO,KAAK;AAAA,MACb,CAAC,OAAO,KAAK;AAAA,MACb,CAAC,OAAO,KAAK;AAAA,MACb,CAAC,OAAO,KAAK;AAAA,MACb,CAAC,OAAO,KAAK;AAAA,MACb,CAAC,OAAO,KAAK;AAAA,MACb,CAAC,OAAO,KAAK;AAAA,MACb,CAAC,OAAO,KAAK;AAAA,MACb,CAAC,OAAO,KAAK;AAAA,MACb,CAAC,OAAO,KAAK;AAAA,MACb,CAAC,OAAO,KAAK;AAAA,MACb,CAAC,OAAO,KAAK;AAAA,MACb,CAAC,OAAO,KAAK;AAAA,MACb,CAAC,OAAO,KAAK;AAAA,MACb,CAAC,OAAO,KAAK;AAAA,MACb,CAAC,OAAO,KAAK;AAAA,MACb,CAAC,OAAO,KAAK;AAAA,MACb,CAAC,OAAO,KAAK;AAAA,MACb,CAAC,OAAO,KAAK;AAAA,MACb,CAAC,OAAO,KAAK;AAAA,MACb,CAAC,OAAO,KAAK;AAAA,MACb,CAAC,OAAO,KAAK;AAAA,MACb,CAAC,OAAO,KAAK;AAAA,MACb,CAAC,OAAO,KAAK;AAAA,MACb,CAAC,OAAO,KAAK;AAAA,MACb,CAAC,OAAO,KAAK;AAAA,MACb,CAAC,OAAO,KAAK;AAAA,IACd;AAAA,IACD,KAAK;AAAA,MACH,CAAC,OAAO,KAAK;AAAA,MACb,CAAC,OAAO,KAAK;AAAA,MACb,CAAC,OAAO,KAAK;AAAA,MACb,CAAC,OAAO,KAAK;AAAA,MACb,CAAC,OAAO,KAAK;AAAA,MACb,CAAC,OAAO,KAAK;AAAA,MACb,CAAC,OAAO,KAAK;AAAA,MACb,CAAC,OAAO,KAAK;AAAA,MACb,CAAC,OAAO,KAAK;AAAA,MACb,CAAC,OAAO,KAAK;AAAA,MACb,CAAC,OAAO,KAAK;AAAA,MACb,CAAC,OAAO,KAAK;AAAA,MACb,CAAC,OAAO,KAAK;AAAA,MACb,CAAC,O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"}
|
1
|
+
{"version":3,"file":"image-preview-bundle.js","sources":["../src/fesd/configs/config.js","../src/fesd/commons/utils.js","../src/fesd/commons/events.js","../src/fesd/anchor4/anchor4.js","../src/fesd/modal4/modernModal.js","../src/fesd/modal4/modal4.js","../src/fesd/aost4/aost4.js","../src/fesd/video4/videoPlayer.js","../src/tools/utils.js","../src/fesd/video4/video4.js","../src/fesd/dropdown4/cityData.js","../src/fesd/dropdown4/dropdown4.js","../src/fesd/marquee4/marquee4.js","../src/fesd/multipurpose4/multipurpose4.js","../src/fesd/tab4/tab4.js","../src/fesd/collapse4/collapse4.js","../src/fesd/ripple4/ripple4.js","../src/fesd/image-validate/image-validate.js","../src/fesd/image-preview/image-preview.js"],"sourcesContent":["export const video4 = {\n SETTINGS: {\n videoId: null,\n videoType: null,\n videoAutoplay: 'off',\n videoKeep: 'off',\n videoMode: 'onBox',\n videoButton: '.playButton',\n videoCover: 'on',\n videoLayoutNo: 0,\n videoTarget: 'video-template',\n videoTargetRoute: 'https://cdn.wdd.idv.tw/fesd/video4_lightbox.html',\n videoVimeoHash: null,\n videoHighQuality: 'off',\n videoStartTime: 0,\n },\n ATTRS: {\n id: 'video-id',\n type: 'video-type',\n autoplay: 'video-autoplay',\n hash: 'vimeo-hash',\n start: 'video-starttime',\n highquality: 'video-highquality',\n },\n EVENTS: {\n init: null,\n afterInit: null,\n beforeDestroy: null,\n afterUpdate: null,\n },\n // video4 target 內放置結構 index 對應 videoLayoutNo\n LAYOUT: ['<div class=\"playButton\"></div><div class=\"overlay\"></div>'],\n // videoPlayer customElements 內結構\n TEMPLATE() {\n return `<div class=\"player-container\"><div class=\"player-wrapper\"></div></div>`;\n },\n}\n\nexport const share4 = {\n SETTINGS: {\n success: null,\n text: null,\n className: null,\n duration: 1500,\n },\n}\n\nexport const modal4 = {\n SETTINGS: {\n target: null,\n route: null,\n action: 'toggle',\n container: 'body',\n },\n ATTRS: {\n id: 'data-modal-id',\n close: 'data-modal-close',\n destroy: 'data-modal-destroy',\n },\n EVENTS: {\n init: null,\n success: null,\n error: null,\n complete: null,\n open: null,\n close: null,\n destroy: null,\n update: null,\n },\n TEMPLATE(type) {\n return `\n <div class=\"modal-scroller\">\n <div class=\"modal-wrapper\" ${type === 'destroy' ? 'data-modal-destroy' : 'data-modal-close'}>\n <div class=\"modal-content\" stop-propagation>\n </div>\n </div>\n `;\n },\n}\n\nexport const marquee4 = {\n SETTINGS: {\n direction: 'left', // 方向 - top || right || bottom || left\n behavior: 'normal', // 模式 - normal || alternate || endStop\n duration: 50000, // 持續時間(毫秒) - Number\n durationBreakpoints: {}, // 持續時間斷點 - Object\n autoplay: 300, // 自動撥放延遲時間(毫秒) - Number || false\n pauseOnMouseenter: false, // 滑鼠移入暫停 - Boolean\n continual: true, // 連續不間斷 - Boolean\n gap: 30, // 跑馬燈內容之間的距離 - Number\n },\n}\n\nexport const dropdown4 = {\n SETTINGS: {\n scrollbar: {\n 'scrollbar-track-color': 'transparent',\n 'scrollbar-thumb-color': 'rgba(0,0,0,.4)',\n 'scrollbar-thumb-hover-color': 'rgba(0,0,0,.55)',\n 'scrollbar-radius': '10px',\n },\n },\n TEMPLATE(filter, filterPlaceholder, customTemplate, dropdownIcon) {\n // 2025.12.31 scarlett\n // 下拉 icon\n const iconHTML = dropdownIcon ? dropdownIcon : `dropdown-icon`\n const dropdownIcons = `\n <i class=\"${iconHTML}\"></i>\n `\n // 下拉 結構客製化\n const filterBar = `\n <div class=\"filter-bar\">\n <input class=\"filter-input\" type=\"text\" placeholder=\"${filterPlaceholder}\" disabled>\n </div>\n `\n\n const defaultTemplate = `<div class=\"select-wrapper\">\n <div class=\"select-display\"></div>\n ${dropdownIcons}\n <div class=\"dropdown\">\n ${filter ? filterBar : \"\"}\n <div class=\"dropdown-scroller\">\n <ul class=\"dropdown-list\"></ul>\n </div>\n </div>\n </div>`\n\n const propsHTML = customTemplate ? customTemplate : defaultTemplate\n\n return propsHTML;\n },\n}\n\nexport const article4 = {\n SETTINGS: {\n basic_rwd: 900,\n markdownLink: false,\n markdownImg: false,\n navigation: false,\n scrollStep: false,\n },\n}\n\nexport const aost4 = {\n SETTINGS: {\n scroller: window,\n class: 'aost-show',\n delay: 0,\n start: 80,\n end: 0,\n mirror: false,\n repeat: false, // false | true | 'up' | 'down'\n direction: 'vertical', // 'vertical' | 'horizontal'\n breakpoints: {\n 1160: 'data-aost-offset-1160',\n 1024: 'data-aost-offset-1024',\n 600: 'data-aost-offset-600',\n },\n },\n EVENTS: {\n init: null,\n enter: null,\n leave: null,\n },\n}\n\nexport const anchor4 = {\n SETTINGS: {\n target: null,\n container: null,\n spacer: null,\n gap: 0,\n speed: 800,\n delay: 0,\n direction: 'vertical',\n easing: 'easeInOutCirc',\n },\n EVENTS: {\n afterInit: null,\n beforeDestroy: null,\n afterUpdate: null,\n beforeScroll: null,\n afterScroll: null,\n },\n}\n\nexport const multipurpose4 = {\n SETTINGS: {\n type: 'drag',\n drag: {\n center: true,\n draggable: true,\n navigation: true,\n selected: false,\n },\n collapse: {\n selected: false,\n placeholder: '類別',\n },\n dropdown: {\n target: 'dropdown-el',\n placeholder: '',\n value: '',\n },\n breakpoint: {},\n },\n TEMPLATE: {\n drag() {\n return `<div class=\"drag-container\">\n <ul class=\"wrapper\">\n </ul>\n </div>`;\n },\n collapse(collapse) {\n return `<div class=\"drag-container\">\n <ul class=\"wrapper\">\n </ul>\n <div class=\"collapse-placeholder\">${collapse.placeholder}</div>\n </div>\n <div class=\"collapse-container\">\n <ul class=\"wrapper\">\n </ul>\n </div>`;\n },\n dropdown(dropdown) {\n return `<dropdown-el${dropdown.placeholder ? ` d4-placeholder=\"${dropdown.placeholder}\"` : ''}${dropdown.value ? ` d4-value=\"${dropdown.value}\"` : ''}></dropdown-el>`;\n },\n },\n}\n\nexport const tab4 = {\n SETTINGS: {\n // 樣式 normal / process\n type: 'normal',\n // 進場方式 fade / slide\n display: 'fade',\n // 預設頁面\n defaultPage: '',\n // 滑動扣除高度\n anchorGap: 0,\n tabGroup: 'true',\n // 動畫設定\n transition: {\n duration: 500,\n timing: 'ease',\n delay: 0,\n },\n // 步驟狀態綁定\n stepOutput: '.step-show',\n },\n}\n\nexport const collapse4 = {\n SETTINGS: {\n collapseClass: 'collapse',\n block: '[collapse-block]',\n target: '[collapse-target]',\n single: true,\n defaultOpen: false,\n targetStopPropagation: false,\n defaultActiveMark: 'collapse-active',\n transition: {\n property: 'height',\n duration: '400ms',\n function: 'ease',\n delay: '0s',\n },\n // expand\n breakpoints: {\n 320: {},\n },\n },\n // ATTRS: {\n // wrapper: 'collapse-wrapper',\n // block: 'collapse-block',\n // target: 'collapse-target',\n // },\n EVENTS: {\n init: null,\n afterInit: null,\n destroy: null,\n beforeDestroy: null,\n update: null,\n afterUpdate: null,\n },\n}\n\nexport const ripple4 = {\n SETTINGS: {\n // 是否要加 hover 效果?\n hover: true,\n // 使用 hover 時是否要啟用點擊 ripple 效果?\n click: false,\n // ripple's 的顏色\n color: '#fff',\n // ripple's 透明度\n opacity: '1',\n // ripple 毫秒\n duration: 600,\n // hover 毫秒 ?\n speed: 600,\n },\n}\n\n\n\n","\n// insertAdjacentHTML 語意化\nexport const insert = {\n before: 'beforebegin',\n after: 'afterend',\n append: 'beforeend',\n prepend: 'afterbegin'\n}\n\n// check value is string and not empty\nexport const isString = (value) => {\n return typeof value === 'string' && value !== '';\n};\n\n// check value is number and not NaN\nexport const isNumber = (value) => {\n return typeof value === 'number' && !isNaN(value);\n};\n\n// check is HTML element\nexport const isElement = (value) => {\n return value instanceof HTMLElement;\n};\n\n// check is Node List\nexport const isNodeList = (value) => {\n return value instanceof NodeList;\n};\n\n// check element is exist\nexport const isElementExist = (value) => {\n return getElement(value) !== null;\n};\n\n// check value is a function\nexport const isFunction = (value) => {\n return typeof value === 'function';\n};\n\n// if value is an element then return value, if not then query value\nexport const getElement = (value) => {\n return isElement(value) ? value : document.querySelector(value);\n};\n\n// if value is an element then return value, if not then query value\nexport const getAllElements = (value) => {\n return isNodeList(value) ? value : document.querySelectorAll(value);\n};\n\n// create a unique id\nexport const createUid = () => {\n return Math.random().toString(36).substr(2, 9);\n};\n\n// parse string to HTML element\nexport const toHTMLElement = (str) => {\n const dom = document.createElement('div');\n dom.innerHTML = str;\n return dom.childNodes;\n};\n\n// parse json to object\nexport const jsonParse = (json) => {\n try {\n JSON.parse(json);\n } catch (e) {\n return json;\n }\n return JSON.parse(json);\n};\n\n// get element transform X\nexport const getTransformX = (target) => {\n const transform = getComputedStyle(target).transform;\n let mat = transform.match(/^matrix3d\\((.+)\\)$/);\n if (mat) return parseFloat(mat[1].split(', ')[12]);\n mat = transform.match(/^matrix\\((.+)\\)$/);\n return mat ? parseFloat(mat[1].split(', ')[4]) : 0;\n};\n\n// get element transform Y\nexport const getTransformY = (target) => {\n const transform = getComputedStyle(target).transform;\n let mat = transform.match(/^matrix3d\\((.+)\\)$/);\n if (mat) return parseFloat(mat[1].split(', ')[13]);\n mat = transform.match(/^matrix\\((.+)\\)$/);\n return mat ? parseFloat(mat[1].split(', ')[5]) : 0;\n};\n\n// warn\nexport const warn = (target, msg) => {\n console.warn(`[${target} warn]: ${msg}`);\n};\n\n// error\nexport const error = (target, msg) => {\n console.error(`[${target} error]: ${msg}`);\n};\n","import { isFunction } from './utils'\n\nexport default {\n on(events, handler) {\n if (!isFunction(handler)) return this;\n\n const { __events__ } = this\n\n events.split(' ').forEach(evt => {\n if (!__events__[evt]) __events__[evt] = []\n __events__[evt].push(handler)\n })\n\n return this\n },\n\n off(events, handler) {\n const { __events__ } = this\n\n events.split(' ').forEach(evt => {\n if (typeof handler === 'undefined') __events__[evt] = []\n else if (__events__[evt]) {\n __events__[evt].forEach((evtHandler, index) => {\n if (evtHandler === handler) __events__[evt].splice(index, 1)\n })\n }\n })\n\n return this\n },\n\n once(events, handler) {\n if (!isFunction(handler)) return this;\n\n const onceHandler = (...args) => {\n this.off(events, onceHandler)\n handler.apply(this, args)\n }\n\n return this.on(events, onceHandler)\n },\n\n emit(...args) {\n const { __events__ } = this\n\n const event = args[0]\n const data = args.slice(1, args.length)\n\n if (!__events__[event]) return this\n\n __events__[event].forEach(handler => {\n if (isFunction(handler)) handler.apply(this, data)\n })\n\n return this\n }\n}","import { configs } from '../configs'\nimport {\n EVENTS,\n isString,\n isElementExist,\n isFunction,\n getElement,\n getAllElements\n} from '../commons'\n\nconst ease = {\n easeInOutCirc(t, b, c, d) {\n if ((t /= d / 2) < 1) return (-c / 2) * (Math.sqrt(1 - t * t) - 1) + b;\n return (c / 2) * (Math.sqrt(1 - (t -= 2) * t) + 1) + b;\n },\n easeInQuart(t, b, c, d) {\n return c * (t /= d) * t * t * t + b;\n },\n easeOutQuart(t, b, c, d) {\n return -c * ((t = t / d - 1) * t * t * t - 1) + b;\n },\n};\n\n// scroll handler\nconst scrollTo = (options, instance) => {\n const { target, container, spacer, speed, gap, easing, direction } = options;\n\n const isHorizontal = direction === 'horizontal';\n const scrollDirection = isHorizontal ? 'scrollLeft' : 'scrollTop';\n const rectPosition = isHorizontal ? 'left' : 'top';\n const rectSpace = isHorizontal ? 'width' : 'height';\n\n const containerEle = isElementExist(container) ? getElement(container) : document.scrollingElement;\n const start = containerEle[scrollDirection];\n const targetPoint = isElementExist(target) ? getElement(target).getBoundingClientRect()[rectPosition] : 0 - start;\n const spacerGap = isElementExist(spacer) ? getElement(spacer).getBoundingClientRect()[rectSpace] : 0;\n const change = targetPoint - gap - spacerGap;\n const increment = 15;\n let currentTime = 0;\n\n if (change === 0) return;\n\n const emitEvent = eventName => {\n const targetEle = getElement(target);\n if (instance) instance.emit(eventName, targetEle);\n if (!instance && options.on) {\n if (isFunction(options.on[eventName])) options.on[eventName](targetEle);\n }\n };\n\n emitEvent('beforeScroll');\n\n const animateScroll = () => {\n currentTime += increment;\n const val = ease[easing](currentTime, start, change, speed);\n containerEle[scrollDirection] = val;\n if (currentTime < speed) requestAnimationFrame(animateScroll);\n if (currentTime >= speed) emitEvent('afterScroll');\n };\n\n requestAnimationFrame(animateScroll);\n};\n\n// class Anchor4\nclass Anchor4 {\n constructor(el, options = {}) {\n this.__storage__ = {\n el,\n options,\n };\n\n this.active = 'data-anchor-active'\n this.#create();\n }\n\n #create() {\n const { el, options } = this.__storage__;\n if (!isString(el) || !isElementExist(el)) return;\n\n const { SETTINGS, EVENTS } = configs.anchor4;\n //wade\n this.elements = options.state == \"not active\" ? getAllElements(el + `:not([${this.active}])`) : getAllElements(el);\n this.elements = getAllElements(el);\n this.options = Object.assign({}, SETTINGS, options);\n this.__events__ = Object.assign({}, EVENTS);\n\n if (this.options.on) {\n for (const [k, v] of Object.entries(this.options.on)) {\n this.__events__[k] = [v];\n }\n }\n\n this.#init();\n }\n\n #init() {\n const { elements, options } = this;\n\n elements.forEach(el => {\n el.anchor = {};\n el.anchor.instance = this;\n el.anchor.eventHandler = this.#trigger;\n el.anchor.defaultOptions = options;\n el.anchor.methods = {};\n el.anchor.methods.destroy = this.destroy;\n el.anchor.methods.update = this.update;\n el.addEventListener('click', el.anchor.eventHandler);\n //wade\n el.setAttribute(this.active, '')\n });\n\n this.emit('afterInit');\n }\n\n #trigger() {\n /** the keyword `this` in this method is pointed to the click target */\n const { defaultOptions, eventHandler, instance } = this.anchor;\n\n const options = {\n target: this.getAttribute('data-anchor-target') || defaultOptions.target,\n container: this.getAttribute('data-anchor-container') || defaultOptions.container,\n spacer: this.getAttribute('data-anchor-spacer') || defaultOptions.spacer,\n gap: parseInt(this.getAttribute('data-anchor-gap') || defaultOptions.gap),\n speed: parseInt(this.getAttribute('data-anchor-speed')) || defaultOptions.speed,\n delay: parseInt(this.getAttribute('data-anchor-delay')) || defaultOptions.delay,\n easing: this.getAttribute('data-anchor-easing') || defaultOptions.easing,\n direction: this.getAttribute('data-anchor-direction') || defaultOptions.direction,\n };\n\n // prevent multiple click\n this.removeEventListener('click', eventHandler);\n setTimeout(() => {\n this.addEventListener('click', eventHandler);\n }, options.speed);\n\n // do scroll\n setTimeout(() => {\n scrollTo(options, instance);\n }, options.delay);\n }\n\n destroy() {\n const { elements } = this;\n\n this.emit('beforeDestroy');\n\n elements.forEach(el => {\n if (!el.anchor) return;\n\n el.removeEventListener('click', el.anchor.eventHandler);\n delete el.anchor;\n });\n\n return this;\n }\n\n update() {\n this.destroy().#create();\n\n this.emit('afterUpdate');\n\n return this;\n }\n\n static run(options) {\n const { SETTINGS } = configs.anchor4;\n const newOptions = Object.assign({}, SETTINGS, options);\n\n setTimeout(() => {\n scrollTo(newOptions);\n }, newOptions.delay);\n }\n\n static url(options) {\n\n const { SETTINGS } = configs.anchor4;\n const { hashName } = options;\n\n const targetStr = window.location.search || window.location.hash;\n const { searchParams } = new URL(window.location)\n\n const target = document.querySelector(`[data-anchor-id=\"${hashName\n ? searchParams.get(hashName)\n : targetStr.split('?').pop()}\"]`);\n\n // console.log(\"anchor-hashName\", hashName);\n // console.log(\"anchor-searchParams\", searchParams.get(hashName));\n // console.log(\"anchor-targetStr\", targetStr.split('?').pop());\n // console.log(\"anchor-target\", target);\n\n if (!target) return;\n\n const newOptions = Object.assign({}, SETTINGS, options, { target });\n\n setTimeout(() => {\n scrollTo(newOptions);\n }, newOptions.delay);\n }\n}\n\nObject.assign(Anchor4.prototype, EVENTS);\n\nexport default Anchor4;\n","import { configs } from '../configs'\nimport { EVENTS, createUid, warn } from '../commons'\nimport { OverlayScrollbars } from 'overlayscrollbars'\n\nif (!window.MODALS) window.MODALS = {};\n\nconst { MODALS } = window;\n\n// create template method\nconst createTemplate = el => {\n const { TEMPLATE } = configs.modal4;\n const { childDom } = el;\n const container = document.createElement('div');\n container.innerHTML = TEMPLATE(el.getAttribute('data-modal-template-setting'));\n\n const content = container.querySelector('.modal-content');\n [...childDom].forEach(child => {\n content.append(child);\n });\n\n return container.children[0];\n};\n\n// class\nclass ModernModal extends HTMLElement {\n constructor() {\n super();\n this.initialize = false;\n }\n\n static get observedAttributes() {\n return [':state'];\n }\n\n attributeChangedCallback(attr, oldVal, newVal) {\n switch (attr) {\n case ':state':\n this.#stateControl(newVal);\n break;\n }\n }\n\n connectedCallback() {\n if (this.initialize) return;\n this.initialize = true;\n this.#create();\n }\n\n #create() {\n const { ATTRS } = configs.modal4;\n\n this.__events__ = {};\n\n if (!this.getAttribute(':state')) {\n this.setAttribute(':state', 'close');\n }\n\n const id = this.getAttribute(ATTRS.id) || createUid();\n if (!this.getAttribute(ATTRS.id)) {\n warn(`modern-modal needs a ${ATTRS.id} attribute with a unique id.`);\n this.setAttribute(ATTRS.id, id);\n }\n\n if (MODALS[id]) warn(`the ${ATTRS.id} \"${id}\" is already be used.`);\n MODALS[id] = this;\n\n this.#mount();\n }\n\n #mount() {\n this.childDom = this.childNodes;\n this.template = createTemplate(this);\n\n this.innerHTML = '';\n this.append(this.template);\n\n this.#init();\n }\n\n #init() {\n const scroller = this.querySelector('.modal-scroller');\n\n this.__scroller__ = OverlayScrollbars(scroller, {\n overflowBehavior: {\n x: 'hidden',\n },\n autoUpdate: true,\n });\n window.modalScroll = this.__scroller__ \n this.#event();\n }\n\n #event() {\n const $self = this;\n const { ATTRS } = configs.modal4;\n const { close, destroy } = ATTRS;\n\n $self.querySelectorAll(`[${close}]`)?.forEach(el => {\n el.addEventListener('click', function () {\n const closeAttr = this.getAttribute(close);\n const closeTarget = closeAttr && MODALS[closeAttr] ? MODALS[closeAttr] : $self;\n closeTarget.close();\n });\n });\n\n $self.querySelectorAll(`[${destroy}]`)?.forEach(el => {\n el.addEventListener('click', function () {\n const destroyAttr = this.getAttribute(destroy);\n const destroyTarget = destroyAttr && MODALS[destroyAttr] ? MODALS[destroyAttr] : $self;\n destroyTarget.destroy();\n });\n });\n\n $self.querySelector('[stop-propagation]')?.addEventListener('click', function (e) {\n e.stopPropagation();\n });\n }\n\n #stateControl(state) {\n const { __scroller__ } = this;\n\n if (state === 'open') {\n this.style.display = 'block';\n if (__scroller__) {\n const { viewport } = __scroller__.elements();\n viewport.scrollTo({\n top: 0,\n });\n }\n setTimeout(() => {\n this.classList.add('show');\n this.emit('open');\n }, 100);\n }\n if (state === 'close') {\n if (!this.classList.contains('show')) return;\n this.classList.remove('show');\n const transitionEndHandler = () => {\n this.style.removeProperty('display');\n this.emit('close');\n this.removeEventListener('transitionend', transitionEndHandler);\n };\n this.addEventListener('transitionend', transitionEndHandler);\n }\n if (state === 'destroy') {\n this.classList.remove('show');\n const transitionEndHandler = () => {\n const { ATTRS } = configs.modal4;\n const id = this.getAttribute(ATTRS.id);\n this.style.removeProperty('display');\n this.emit('close');\n this.remove();\n this.emit('destroy');\n if (MODALS[id]) delete MODALS[id];\n };\n this.addEventListener('transitionend', transitionEndHandler);\n }\n }\n\n open() {\n this.setAttribute(':state', 'open');\n\n return this;\n }\n\n close() {\n this.setAttribute(':state', 'close');\n\n return this;\n }\n\n destroy() {\n this.setAttribute(':state', 'destroy');\n\n return this;\n }\n}\n\n// install on and emit\nObject.assign(ModernModal.prototype, EVENTS);\n\nexport default ModernModal;\n","import { configs } from '../configs'\nimport ModernModal from './modernModal'\nimport {\n EVENTS,\n isString,\n isElementExist,\n isFunction,\n getElement,\n getAllElements,\n toHTMLElement,\n jsonParse, warn\n} from '../commons'\n\nconst { MODALS } = window;\n\n// use methods (for instance)\nconst useMethod = (instance, name, ...args) => {\n if (!name) return;\n const handler = instance[name];\n\n if (handler && isFunction(handler)) {\n handler.apply(instance, args);\n }\n};\n\n// use function (for static)\nconst useFunction = (handler, ...args) => {\n if (handler && isFunction(handler)) {\n handler.apply(Modal4, args);\n }\n};\n\n// dispatch modal\nconst dispatchModal = (options, instance) => {\n const { target } = options;\n\n const modal = MODALS[target] || getElement(options.target);\n\n if (modal) useModal(options, instance);\n if (!modal) useFetch(options, instance);\n};\n\n//\nconst useModal = (options, instance) => {\n const { target, action, on, e } = options;\n\n const modal = MODALS[target] || getElement(options.target);\n const events = ['open', 'close', 'destroy'];\n\n // trigger events\n events.forEach(name => {\n modal.once(name, () => {\n if (instance) {\n instance.emit(name, modal, e);\n useMethod(instance, on[name], modal, e);\n }\n if (!instance) {\n useFunction(on[name], modal);\n }\n });\n });\n\n // action\n switch (action) {\n case 'open':\n modal.open();\n break;\n case 'close':\n modal.close();\n break;\n case 'destroy':\n modal.destroy();\n break;\n default:\n const state = modal.getAttribute(':state');\n if (state === 'close') modal.open();\n if (state === 'open') modal.close();\n break;\n }\n};\n\n// fetch modal from files\nconst useFetch = async (options, instance) => {\n const { target, route, container, on, e } = options;\n\n if (!route) return warn('modal4', 'cannot find target or data-modal-route is not defined');\n\n // trigger event handler\n const useEvent = (name, ...args) => {\n if (instance) {\n instance.emit(name, ...args);\n useMethod(instance, on[name], ...args);\n }\n if (!instance) {\n useFunction(on[name], ...args);\n }\n };\n\n // get response\n fetch(route)\n .then(res => {\n // trigger success event\n useEvent('success', e);\n\n return res.text();\n })\n .then(data => {\n const doms = toHTMLElement(data); /** modern-modal is initialized in this state */\n const containerElement = getElement(container) || getElement(configs.modal4.SETTINGS.container);\n\n // append dom\n [...doms].forEach(dom => {\n containerElement.append(dom);\n });\n\n const modal = MODALS[target] || getElement(options.target);\n\n // trigger complete event\n useEvent('complete', modal);\n useModal(options, instance);\n })\n .catch(error => {\n // trigger error event\n useEvent('error', error);\n });\n};\n\nclass Modal4 {\n constructor(el, options = {}) {\n this.__storage__ = {\n el,\n options,\n };\n\n this.active = 'data-modal-active'\n this.#create();\n }\n\n #create() {\n const { el, options } = this.__storage__;\n if (!isString(el) || !isElementExist(el)) return;\n\n const { SETTINGS, EVENTS } = configs.modal4;\n\n //wade\n this.elements = options.state == \"not active\" ? getAllElements(el + `:not([${this.active}])`) : getAllElements(el);\n // this.elements = getAllElements(el);\n this.options = Object.assign({}, SETTINGS, options);\n this.__events__ = Object.assign({}, EVENTS);\n\n if (this.options.on) {\n for (const [k, v] of Object.entries(this.options.on)) {\n this.__events__[k] = [v];\n }\n }\n\n this.#init();\n }\n\n #init() {\n const { elements, options } = this;\n\n elements.forEach(el => {\n el.modal = {};\n el.modal.instance = this;\n el.modal.eventHandler = this.#trigger;\n el.modal.defaultOptions = options;\n el.modal.methods = {};\n el.modal.methods.destroy = this.destroy;\n el.modal.methods.update = this.update;\n el.addEventListener('click', el.modal.eventHandler);\n //wade\n el.setAttribute(this.active, '')\n });\n\n this.emit('init');\n }\n\n #trigger(e) {\n /** the keyword `this` in this method is pointed to the click target */\n const { defaultOptions, eventHandler, instance } = this.modal;\n\n const ons = jsonParse(this.getAttribute('data-modal-on'));\n if (ons && typeof ons !== 'object') warn('modal4', 'data-modal-on must be a json string.');\n\n const options = {\n target: this.getAttribute('data-modal-target') || defaultOptions.target,\n action: this.getAttribute('data-modal-action') || defaultOptions.action,\n route: this.getAttribute('data-modal-route') || defaultOptions.route,\n container: this.getAttribute('data-modal-container') || defaultOptions.container,\n on: ons && typeof ons === 'object' ? ons : {},\n e,\n };\n\n // prevent multiple click\n this.removeEventListener('click', eventHandler);\n setTimeout(() => {\n this.addEventListener('click', eventHandler);\n }, 200);\n\n // get modal\n dispatchModal(options, instance);\n }\n\n destroy() {\n const { elements } = this;\n\n elements.forEach(el => {\n if (!el.modal) return;\n\n el.removeEventListener('click', el.modal.eventHandler);\n delete el.modal;\n });\n\n return this;\n }\n\n update() {\n this.destroy().#create();\n\n this.emit('update');\n\n return this;\n }\n\n /** static method 'open' */\n static open(options) {\n const { SETTINGS } = configs.modal4;\n const openOptions = Object.assign({}, SETTINGS, { on: {} }, options);\n dispatchModal(openOptions);\n }\n\n /** static method 'defineMethods' */\n static defineMethods(obj) {\n if (!Modal4.prototype.__methods__) Modal4.prototype.__methods__ = {};\n const methods = Modal4.prototype.__methods__;\n\n for (const [k, v] of Object.entries(obj)) {\n if (isFunction(v)) methods[k] = v;\n }\n\n Object.assign(Modal4.prototype, Modal4.prototype.__methods__);\n }\n}\n\nObject.assign(Modal4.prototype, EVENTS);\n\n// define custom element\ncustomElements.define('modern-modal', ModernModal);\n\nexport default Modal4;\n","import { configs } from '../configs'\nimport {\n EVENTS,\n isString,\n isElementExist,\n getElement,\n getAllElements\n} from '../commons'\n\n\nconst interaction = (scrollElement, elements) => {\n const viewHeight = scrollElement === window ? scrollElement.innerHeight : scrollElement.getBoundingClientRect().height;\n const viewTop = scrollElement === window ? 0 : scrollElement.getBoundingClientRect().top;\n\n elements.forEach(el => {\n const { class: className, delay, start, end, repeat, instance } = el.aost;\n\n const { top, bottom } = el.getBoundingClientRect();\n const startTrigger = viewHeight * (start / 100);\n const endTrigger = viewHeight * (end / 100);\n const isEntered = top - viewTop <= startTrigger && bottom - viewTop >= endTrigger;\n\n // in view\n if (isEntered && el.offsetParent) {\n setTimeout(() => {\n // instance.emit('enter', el);\n el.classList.add(className);\n }, delay);\n }\n // out of view\n else {\n const shouldRemove = (el.classList.contains(className) && repeat === 'down' && top - viewTop >= startTrigger) || (repeat === 'up' && bottom - viewTop <= endTrigger) || repeat === true;\n setTimeout(() => {\n // instance.emit('leave', el);\n if (shouldRemove) el.classList.remove(className);\n }, delay);\n }\n });\n};\n\nconst detectRepeat = (repeatType, options) => {\n if (repeatType === 'up' || repeatType === 'down') {\n return repeatType;\n }\n\n if (repeatType !== null) {\n if (repeatType === 'true') {\n return true;\n } else if (repeatType === 'false') {\n return false;\n } else {\n return options.repeat;\n }\n }\n\n return options.repeat;\n};\n\nclass Aost4 {\n constructor(el, options = {}) {\n this.__storage__ = {\n el,\n options,\n };\n\n this.active = 'data-aost-active'\n this.#create();\n }\n\n #create() {\n const { el, options } = this.__storage__;\n if (!isString(el) || !isElementExist(el)) return;\n\n const { SETTINGS, EVENTS } = configs.aost4;\n\n //wade\n this.elements = options.state == \"not active\" ? getAllElements(el + `:not([${this.active}])`) : getAllElements(el);\n // this.elements = getAllElements(el);\n this.options = Object.assign({}, SETTINGS, options);\n this.__events__ = Object.assign({}, EVENTS);\n\n if (this.options.on) {\n for (const [k, v] of Object.entries(this.options.on)) {\n this.__events__[k] = [v];\n }\n }\n\n this.#init();\n }\n\n #init() {\n const { elements, options } = this;\n const { scroller } = options;\n const scrollElement = scroller === window || !isElementExist(scroller) ? window : getElement(scroller);\n\n this.eventHandler = () => {\n interaction(scrollElement, elements);\n };\n\n elements.forEach(el => {\n el.aost = {};\n el.aost.class = el.getAttribute('data-aost-class') || options.class;\n el.aost.delay = parseInt(el.getAttribute('data-aost-delay')) || options.delay;\n el.aost.start = parseInt(el.getAttribute('data-aost-start')) || options.start;\n el.aost.end = parseInt(el.getAttribute('data-aost-end')) || options.end;\n el.aost.repeat = detectRepeat(el.getAttribute('data-aost-repeat'), options);\n el.aost.methods = {};\n el.aost.methods.destroy = this.destroy;\n el.aost.methods.update = this.update;\n el.aost.instance = this;\n //wade\n el.setAttribute(this.active, '')\n });\n\n const { eventHandler } = this;\n eventHandler();\n scrollElement.aost = {};\n scrollElement.aost.eventHandler = eventHandler;\n scrollElement.addEventListener('scroll', scrollElement.aost.eventHandler, false);\n }\n\n destroy(removeShow) {\n const { elements, options } = this;\n if (!elements) return this;\n\n const { scroller } = options;\n const scrollElement = scroller === window || !isElementExist(scroller) ? window : getElement(scroller);\n\n if (scrollElement.aost) {\n scrollElement.removeEventListener('scroll', scrollElement.aost.eventHandler);\n delete scrollElement.aost;\n }\n\n elements.forEach(el => {\n if (!el.aost) return;\n const { class: className } = el.aost;\n if (removeShow) {\n el.classList.remove(className);\n }\n delete el.aost;\n });\n\n return this;\n }\n\n update(removeShow) {\n this.destroy(removeShow).#create();\n }\n}\n\nObject.assign(Aost4.prototype, EVENTS);\n\nexport default Aost4;\n","import { configs } from '../configs'\nimport { insert, warn } from '../commons'\n\n// create template method\nconst createTemplate = el => {\n const { TEMPLATE } = configs.video4;\n const { childDom } = el;\n const container = document.createElement('div');\n container.innerHTML = TEMPLATE();\n\n const content = container.querySelector('.player-wrapper');\n [...childDom].forEach(child => {\n content.append(child);\n });\n\n return container.children[0];\n};\n\n// class\nclass videoPlayer extends HTMLElement {\n constructor() {\n super();\n\n this.#create();\n }\n\n #create() {\n if (!this.getAttribute('video-id')) {\n warn('videoPlayer', `video-render needs a ['video-id'] attribute to creat player.`);\n return;\n }\n\n this.videoId = this.getAttribute('video-id');\n this.videoType = this.getAttribute('video-type');\n this.autoplay = this.getAttribute('video-autoplay');\n this.startTime = this.getAttribute('video-starttime');\n\n this.#mount();\n }\n\n #mount() {\n this.childDom = this.childNodes;\n this.template = createTemplate(this);\n\n // 清空原本結構\n this.innerHTML = '';\n // 放置整理過後的結構\n this.append(this.template);\n\n this.#init();\n }\n\n #init() {\n const { videoType } = this;\n let layout = '';\n\n switch (videoType) {\n case 'youtubeAPI':\n // this.#youtubeAPI();\n break;\n case 'youtube':\n layout = this.#youtube();\n break;\n case 'youkuAPI':\n // this.#youkuAPI();\n break;\n case 'youku':\n layout = this.#youku();\n break;\n case 'vimeo':\n layout = this.#vimeo();\n break;\n case 'bilibili':\n layout = this.#bilibili();\n break;\n case 'instagram':\n layout = this.#instagram();\n break;\n case 'tiktok':\n layout = this.#tiktok();\n break;\n case 'videojs':\n // this.#videoJs();\n break;\n default:\n break;\n }\n\n this.querySelector('.player-wrapper').insertAdjacentHTML(insert.prepend, layout);\n }\n\n // youtube iframe\n #youtube() {\n const { videoId, autoplay, startTime } = this;\n return `<iframe src=\"https://www.youtube.com/embed/${videoId}?rel=0&${autoplay === 'on' ? 'autoplay=1' : ''}&start=${startTime}&mute=1&loop=1&enablejsapi=1\" frameborder=\"0\" allowfullscreen=\"0\" volumn=\"0\" allow=\"${autoplay === 'on' ? 'autoplay;' : ''} encrypted-media; gyroscope; picture-in-picture;\"></iframe>`;\n }\n\n // vimeo iframe\n #vimeo() {\n const { videoId, autoplay, hash } = this;\n\n return `<iframe src=\"https://player.vimeo.com/video/${videoId}?h=${hash}&${autoplay === 'on' ? 'autoplay=1' : ''}&loop=1&color=ffffff&title=0&byline=0&portrait=0\" frameborder=\"0\" allow=\"${autoplay === 'on' ? 'autoplay;' : ''\n } fullscreen; picture-in-picture\" allowfullscreen></iframe><script src=\"https://player.vimeo.com/api/player.js\"></script>`;\n }\n\n // youku iframe\n #youku() {\n const { videoId, autoplay } = this;\n return `<iframe src=\"https://player.youku.com/embed/${videoId}?rel=0&${autoplay === 'on' ? 'autoplay=1' : ''}\" frameborder=0 \"allowfullscreen\"></iframe>`;\n }\n\n #bilibili() {\n const { videoId, autoplay } = this;\n return `<iframe src=\"//player.bilibili.com/player.html?bvid=${videoId}&page=1&as_wide=1&high_quality=1&danmaku=0\" scrolling=\"no\" border=\"0\" frameborder=\"no\" framespacing=\"0\" allowfullscreen=\"true\"></iframe>`;\n }\n\n // 2025.02.11 新增 ig \n #instagram() {\n const { videoId, autoplay } = this;\n return `<iframe class=\"instagram-media instagram-media-rendered\" id=\"instagram-embed-0\" src=\"https://www.instagram.com/p/${videoId}/embed/\" width=\"num-w\" height=\" num-h\" scrolling=\"auto\" frameborder=\"0\" data-instgrm-payload-id=\"instagram-media-payload-0\"></iframe>`;\n }\n \n // 2025.02.11 新增 tiktok \n #tiktok() {\n const { videoId, autoplay } = this;\n return `<iframe name=\"__tt_embed__v79271677875424740\" sandbox=\"allow-popups allow-popups-to-escape-sandbox allow-scripts allow-top-navigation allow-same-origin\" src=\"https://www.tiktok.com/player/v1/${videoId}?&${autoplay === 'on' ? 'autoplay=1' : ''}\"></iframe>`;\n }\n\n play() {\n const { videoType } = this;\n\n switch (videoType) {\n case 'youtubeAPI':\n // 無可用 function\n break;\n case 'youtube':\n this.querySelector('iframe').contentWindow.postMessage(JSON.stringify({ event: 'command', func: 'playVideo' }), '*');\n break;\n case 'youkuAPI':\n // 無可用 function\n break;\n case 'youku':\n // 無可用 function\n break;\n case 'vimeo':\n this.querySelector('iframe').contentWindow.postMessage(JSON.stringify({ value: 'true', method: 'play' }), '*');\n break;\n case 'bilibili':\n // 無可用 function\n break;\n case 'instagram':\n // 無可用 function\n break;\n case 'tiktok':\n // 無可用 function\n break;\n case 'videojs':\n // 無可用 function\n break;\n default:\n break;\n }\n }\n\n pause() {\n const { videoType } = this;\n\n switch (videoType) {\n case 'youtubeAPI':\n // 無可用 function\n break;\n case 'youtube':\n this.querySelector('iframe').contentWindow.postMessage(JSON.stringify({ event: 'command', func: 'pauseVideo' }), '*');\n break;\n case 'youkuAPI':\n // 無可用 function\n break;\n case 'youku':\n // 無可用 function\n break;\n case 'vimeo':\n this.querySelector('iframe').contentWindow.postMessage(JSON.stringify({ value: 'true', method: 'pause' }), '*');\n break;\n case 'bilibili':\n // 無可用 function\n break;\n case 'instagram':\n // 無可用 function\n break;\n case 'tiktok':\n // 無可用 function\n break;\n case 'videojs':\n // 無可用 function\n break;\n default:\n break;\n }\n }\n}\n\nexport default videoPlayer;\n","import { Aost4, Anchor4, ImageValidate, ImagePreview } from '@/fesd'\nimport LazyLoad from 'vanilla-lazyload'\nimport { lock, unlock } from 'tua-body-scroll-lock'\nimport { OverlayScrollbars } from 'overlayscrollbars'\n\n\nexport const sleep = (time) => new Promise((resolve) => {\n let timer = setTimeout(() => {\n clearTimeout(timer)\n return resolve()\n }, time)\n})\nexport function scrollLock(elements) {\n const elementArr = [];\n if (elements) {\n elements.forEach(element => {\n if (element instanceof HTMLElement) {\n elementArr.push(element);\n } else if (typeof element === 'string') {\n elementArr.push(...document.querySelectorAll(`${element}`));\n }\n });\n }\n $('html').addClass('scrollLock');\n lock(elementArr);\n}\n\nexport function scrollUnlock(elements) {\n const elementArr = [];\n if (elements) {\n elements.forEach(element => {\n if (element instanceof HTMLElement) {\n elementArr.push(element);\n } else if (typeof element === 'string') {\n elementArr.push(...document.querySelectorAll(`${element}`));\n }\n });\n }\n $('html').removeClass('scrollLock');\n unlock(elementArr);\n}\n\nexport async function loading(timerout = 0) {\n const $loading = $(\".loading-wrapper\")\n if ($loading.length) return\n\n const LoadingDOM = `\n <div class=\"loading-wrapper\">\n <div class=\"icon-box\">\n <svg xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\" viewBox=\"0 0 100 100\" preserveAspectRatio=\"xMidYMid\"><path d=\"M10 50A40 40 0 0 0 90 50A40 42 0 0 1 10 50\" fill=\"#ffffff\" stroke=\"none\">\n <animateTransform attributeName=\"transform\" type=\"rotate\" dur=\"1s\" repeatCount=\"indefinite\" keyTimes=\"0;1\" values=\"0 50 51;360 50 51\">\n </animateTransform>\n </path>\n </svg>\n </div>\n </div>\n `;\n\n $('body').append(LoadingDOM);\n\n $('.loading-wrapper')\n .delay(timerout)\n .fadeIn(300)\n .promise()\n .done(function () {\n scrollLock();\n });\n}\n\nexport function loaded() {\n $('.loading-wrapper')\n .fadeOut(300)\n .promise()\n .done(function () {\n $('.loading-wrapper').remove();\n scrollUnlock();\n });\n}\n\n\nexport function imagePreview(selector, options) {\n new ImagePreview(selector, options);\n}\n\nexport function ajaxUpdate() {\n const aost4 = document.querySelector('[data-aost]') && new Aost4('[data-aost]');\n const anchor4 = document.querySelector('[data-anchor-target]') && new Anchor4('[data-anchor-target]');\n\n const lazy = new LazyLoad({ callback_loaded: () => {} });\n const imageValidate = new ImageValidate();\n\n aost4?.update();\n lazy.update();\n imageValidate.reValidate();\n anchor4?.update();\n}\n\nexport function tabChange(target, callback = () => { }) {\n const $target = $(`[data-tab-content=${target}]`);\n $target.fadeIn(function () {\n if (typeof callback === \"function\") {\n callback();\n }\n }).siblings(\"[data-tab-content]\").hide();\n ajaxUpdate();\n}\n\n\n// WDD function 工具包\n/**\n *\n */\nexport function bodyScrollbarInit() {\n const bodyScrollbar = OverlayScrollbars(\n {\n target: document.body,\n cancel: {\n nativeScrollbarsOverlaid: true,\n body: null,\n },\n },\n {\n overflow: {\n x: 'hidden',\n },\n scrollbars: {\n autoHide: 'scroll',\n autoHideSuspend: true,\n },\n },\n {\n initialized() {\n console.log('body scrollbar initialized');\n },\n },\n );\n}\n/**\n * iOS 回上一頁空白修正\n */\nexport function appleDebug() {\n window.onpageshow = function (event) {\n if (event.persisted) {\n window.location.reload();\n }\n };\n}\n/**\n * 偵測 MacOS 版本\n * @returns\n */\nexport function detectMacOSVersion() {\n const userAgent = navigator.userAgent;\n return {\n BigSurUP: /Mac OS X 10.15/.test(userAgent) || /Mac OS X 10_15_7/.test(userAgent) || /Mac OS X 10_15_8/.test(userAgent) || /Mac OS X 10_15_9/.test(userAgent) || /Mac OS X 11_/.test(userAgent) || /Mac OS X 12_/.test(userAgent),\n };\n}\n\n/**\n * 點擊開關class\n * @param {object} target 目標 element\n * @param {string} className 欲切換的 class 名稱\n */\nexport function clickToggleClass(target, className) {\n $(target).on('click', function () {\n $(this).toggleClass(className);\n });\n}\n\n/**\n * 點擊切換active\n * @param {object} target 目標 element\n * @param {string} className 欲切換的 class 名稱\n */\nexport function clickSwitchClass(target, className) {\n $(target).on('click', function () {\n $(target).not(this).removeClass(className);\n $(this).addClass(className);\n });\n}\n\n/**\n * Debounce(去抖動)\n * @param {function} func 欲防止重複執行的 function\n * @param {number} delay 延遲執行的時間(毫秒)\n * @returns\n */\nexport function debounce(func, delay = 250) {\n let timer = null;\n return function (...args) {\n let context = this;\n clearTimeout(timer);\n timer = setTimeout(() => {\n func.apply(context, args);\n }, delay);\n };\n}\n\n/**\n * Throttle (節閥)\n * @param {*} func 欲防止重複執行的 function\n * @param {*} timeout 設定多少毫秒內只執行一次\n * @returns\n */\nexport function throttle(func, timeout = 250) {\n let last;\n let timer;\n return function () {\n const context = this;\n const args = arguments;\n const now = +new Date();\n if (last && now < last + timeout) {\n clearTimeout(timer);\n timer = setTimeout(function () {\n last = now;\n func.apply(context, args);\n }, timeout);\n } else {\n last = now;\n func.apply(context, args);\n }\n };\n}\n\n/**\n * 倒數計時\n *\n * 搭配以下結構使用\n *\n * .countdown(data-seconds=\"600\") data-seconds 填入欲倒數秒數\n *\n * clearInterval(_g.interval[?]) 可以暫停\n */\nexport function countDown() {\n window._g.interval = [];\n const countdowns = $('.countdown');\n countdowns.each((i, el) => {\n const set_seconds = Number($(el).attr('data-seconds')) + 1;\n let set_time = Math.floor(set_seconds / 60) + ':' + (set_seconds % 60);\n window._g.interval[i] = setInterval(function () {\n var timer = set_time.split(':');\n var minutes = parseInt(timer[0], 10);\n var seconds = parseInt(timer[1], 10);\n --seconds;\n minutes = seconds < 0 ? --minutes : minutes;\n minutes = minutes < 10 ? (minutes = '0' + minutes) : minutes;\n if (minutes == 0 && seconds == 0) clearInterval(window._g.interval[i]);\n seconds = seconds < 0 ? 59 : seconds;\n seconds = seconds < 10 ? '0' + seconds : seconds;\n $(el).html(minutes + ':' + seconds);\n set_time = minutes + ':' + seconds;\n }, 1000);\n });\n}\n\n\nexport function delay(time = 500) {\n return new Promise((resolve, reject) => {\n let timer = setTimeout(() => {\n clearTimeout(timer)\n resolve()\n }, time)\n })\n}\n\n/**\n * 計算手機100vh\n */\nexport function fixMobile100vh() {\n const init = function () {\n let vh = window.innerHeight * 0.01;\n document.documentElement.style.setProperty('--vh', vh + 'px');\n };\n init();\n window.addEventListener('resize', debounce(init));\n}\n\n/**\n * 文字切割\n * @param {object} target 目標 element\n * @param {boolean} isWrap 是否要每個單字再包一層\n * @param {number} delayStartTime 第一個的延遲時間(若為'random'則隨機)\n * @param {number} delaySpace 每一個字元延遲的間隔時間\n * @param {number} randomTransTime 隨機transition Max time\n */\nexport function wordAnimation(target, isWrap, delayStartTime, delaySpace, randomTransTime) {\n const $this = this;\n const word = $(target).html();\n const removeBr = word.split('<br>');\n let newText = '';\n let index = 0;\n removeBr.forEach((words, s) => {\n if (s !== 0) newText += `<br>`;\n const letters = words.split('');\n letters.forEach((letter, i) => {\n if (isWrap) {\n if (i === 0) newText += `<span class=\"letter-wrap\" style=\"display: inline-block\">`;\n if (letter === ' ') newText += '</span> <span class=\"letter-wrap\" style=\"display: inline-block\">';\n else {\n newText += `<span class=\"letter\"${randomTransTime || delayStartTime\n ? ` style=\"${randomTransTime ? `transition: ${$this.formatFloat(Math.random(), 2) * randomTransTime}s;` : ''}${delayStartTime ? (delayStartTime === 'random' ? `transition-delay: ${$this.formatFloat(Math.random(), 2)}s;` : `transition-delay: ${delayStartTime + index * delaySpace}s;`) : ''\n }\"`\n : ''\n }>${letter}</span>`;\n index++;\n }\n if (i === words.length - 1) newText += `</span>`;\n } else {\n if (letter === ' ') newText += ' ';\n else {\n newText += `<span class=\"letter\"${randomTransTime || delayStartTime\n ? ` style=\"${randomTransTime ? `transition: ${$this.formatFloat(Math.random(), 2) * randomTransTime}s;` : ''}${delayStartTime ? (delayStartTime === 'random' ? `transition-delay: ${$this.formatFloat(Math.random(), 2)}s;` : `transition-delay: ${delayStartTime + index * delaySpace}s;`) : ''\n }\"`\n : ''\n }>${letter}</span>`;\n index++;\n }\n }\n });\n });\n $(target).html(newText);\n}\n\n/**\n * 小數點後第N位四捨五入\n * @param {number} num 欲四捨五入的數字\n * @param {number} pos 欲取得小數點後第幾位\n * @returns\n */\nexport function formatFloat(num, pos) {\n const size = Math.pow(10, pos);\n return Math.round(num * size) / size;\n}\n\n/**\n * 取得SliderIndex\n * @param {object} swiper swiper物件\n * @returns\n */\nexport function getSlideDataIndex(swiper) {\n let activeIndex = swiper.activeIndex;\n let slidesLen = swiper.slides.length;\n if (swiper.params.loop) {\n switch (swiper.activeIndex) {\n case 0:\n activeIndex = slidesLen - 3;\n break;\n case slidesLen - 1:\n activeIndex = 0;\n break;\n default:\n --activeIndex;\n }\n }\n return activeIndex;\n}\n\n/**\n * 判斷Swiper輪播數量\n * @param {object} swiper swiper物件\n * @param {number} disableNum 設定數量 <= 多少會禁用 swiper\n */\nexport function getSlidesCount(swiper, disableNum) {\n const container = swiper.$el;\n const gridRows = swiper.params.grid.rows;\n const disableCount = disableNum ? disableNum : swiper.params.slidesPerView * gridRows;\n const slidesCount = () => {\n if (swiper.loopedSlides) return swiper.slides.length - swiper.loopedSlides * 2;\n else return swiper.slides.length;\n };\n if (slidesCount() <= disableCount) {\n container.addClass('swiper-no-swiping');\n $(swiper.params.navigation.nextEl).hide();\n $(swiper.params.navigation.prevEl).hide();\n $(swiper.params.pagination.el).hide();\n swiper.params.autoplay.enabled = false;\n swiper.autoplay.stop();\n } else {\n container.removeClass('swiper-no-swiping');\n $(swiper.params.navigation.nextEl).show();\n $(swiper.params.navigation.prevEl).show();\n $(swiper.params.pagination.el).show();\n if (swiper.params.autoplay.enabled) {\n swiper.autoplay.start();\n }\n }\n}\n\n/**\n * 偵測 swiper 內圖片深淺\n * @param {object} swiper swiper物件\n */\nexport function slideImgDetect(swiper) {\n swiper.el.querySelectorAll('img.detect-shade').forEach(img => {\n img.addEventListener('load', function () {\n detectShade(img);\n });\n });\n}\n\n/**\n * 判斷當前輪播是否為影片\n * @param {object} swiper swiper物件\n */\nexport function isVideo(swiper) {\n const container = swiper.el;\n const activeSlide = $(container).find('.swiper-slide-active');\n const video = $(activeSlide).find('video').get(0);\n const allVideo = $(container).find('.swiper-slide video');\n swiper.autoplay.stop();\n $(video).off('ended');\n if (video) {\n allVideo.each((index, el) => {\n el.currentTime = 0;\n });\n $(video).on('ended', function () {\n swiper.slideNext();\n });\n video.play();\n } else {\n if (swiper.params.autoplay.enabled) {\n swiper.autoplay.start();\n }\n }\n}\n\n/**\n * 數字從0跑到9\n *\n * 要用之前記得引用 layouts/_growAnimate.sass\n *\n * 結構 <div class=\"number-grow\" data-num=\"12345\"></div>\n */\nexport function numberGrow() {\n $('.number-grow').each(function (index, el) {\n const ele = $(el);\n const num = ele.attr('data-num');\n const comma = num.replace(/(\\d)(?=(?:\\d{3})+$)/g, '$1,');\n const splitNum = comma.split('');\n const zeroToNine = () => {\n let text = '';\n for (var i = 0; i <= 9; i++) {\n text += String(i) + '<br>';\n }\n return text;\n };\n $(splitNum).each(function (i, el) {\n const dom = () => {\n if (el !== ',') return `<div class=\"num\" data-final-num=\"${el}\"><div><br>${zeroToNine()}<br>${zeroToNine()}</div></div>`;\n else return `<div class=\"comma\">${el}</div>`;\n };\n ele.append(dom);\n });\n });\n}\n\n/**\n * 英文從A跑到Z(只能大寫)\n *\n * 要用之前記得引用 layouts/_growAnimate.sass\n *\n * 結構 結構 <div class=\"letter-grow\" data-num=\"ABCDE\"></div>\n */\nexport function letterGrow() {\n $('.letter-grow').each(function (index, el) {\n const ele = $(el);\n const letter = ele.attr('data-letter');\n const splitLetter = letter.split('');\n const a_z = [];\n const aToZ = () => {\n let text = '';\n for (let i = 65; i <= 90; i++) {\n a_z.push(String.fromCharCode(i));\n text += String.fromCharCode(i) + '<br>';\n }\n return text;\n };\n $(splitLetter).each(function (i, el) {\n const dom = `<div class=\"letter\" data-final-letter=\"${el}\"><div><br>${aToZ()}<br>${aToZ()}</div></div>`;\n ele.append(dom);\n });\n });\n}\n\n/**\n * 取得 target 的 transformX\n * @param {object} target 目標 element\n * @returns\n */\nexport function getTransformX(target) {\n const transform = getComputedStyle(target).transform;\n let mat = transform.match(/^matrix3d\\((.+)\\)$/);\n if (mat) return parseFloat(mat[1].split(', ')[12]);\n mat = transform.match(/^matrix\\((.+)\\)$/);\n return mat ? parseFloat(mat[1].split(', ')[4]) : 0;\n}\n\n/**\n * 取得 target 的 transformY\n * @param {object} target 目標 element\n * @returns\n */\nexport function getTransformY(target) {\n const transform = getComputedStyle(target).transform;\n let mat = transform.match(/^matrix3d\\((.+)\\)$/);\n if (mat) return parseFloat(mat[1].split(', ')[13]);\n mat = transform.match(/^matrix\\((.+)\\)$/);\n return mat ? parseFloat(mat[1].split(', ')[5]) : 0;\n}\n\n/**\n * HTML 字串轉 DOM\n * @param {string} htmlString HTML 字串\n * @returns\n */\nexport function htmlStringToDOM(htmlString) {\n const dom = document.createElement('div');\n dom.innerHTML = htmlString;\n return dom.childNodes[0];\n}","import { configs } from '../configs'\nimport Modal4 from '../modal4'\nimport videoPlayer from './videoPlayer'\nimport { scrollLock, scrollUnlock } from \"@/tools\"\nimport LazyLoad from 'vanilla-lazyload';\nimport {\n EVENTS,\n isString,\n isElement,\n isNodeList,\n getAllElements,\n warn,\n error,\n insert\n} from '../commons'\n\n// 判斷影片物件有沒有 video-id\nconst hasVideoID = data => {\n return data.videoId !== '' || typeof data.videoId !== 'undefined' ? true : false;\n};\n\n// 判斷影片物件是否已經啟用\nconst isActive = data => {\n return data.$selector.getAttribute('video4-active') === 'on' ? true : false;\n};\n\nconst createPlayer = params => {\n return `<video-player video-id=\"${params.videoId}\" video-type=\"${params.videoType}\" video-startTime=\"${params.videoStartTime}\" video-autoplay=\"${params.videoAutoplay}\"></video-player>`;\n};\n\nclass video4 {\n constructor(el, options = {}) {\n // 可傳 string 或 element 或 nodeList\n if (!isString(el) && !isElement(el) && !isNodeList(el)) {\n error('video4', `找不到該物件 -> ${el}`);\n return;\n }\n\n this.__storage__ = {\n el,\n options,\n };\n\n this.active = 'data-video-active'\n this.#create();\n }\n\n #create() {\n const { el, options } = this.__storage__;\n // 從 configs 提取設定\n const { SETTINGS, EVENTS } = configs.video4;\n\n //wade\n this.elements = options.state == \"not active\" ? getAllElements(el + `:not([${this.active}])`) : getAllElements(el);\n // this.elements = getAllElements(el);\n this.options = Object.assign({}, SETTINGS, options);\n this.__events__ = Object.assign({}, EVENTS);\n\n if (this.options.on) {\n for (const [k, v] of Object.entries(this.options.on)) {\n this.__events__[k] = [v];\n }\n }\n\n this.#init();\n }\n\n #init() {\n const { elements, options } = this;\n\n elements.forEach(el => {\n el.video = {};\n el.video.instance = this;\n el.video.defaultOptions = options;\n el.video.params = this.#getVideoData(el);\n el.video.methods = {};\n el.video.methods.update = this.update;\n\n //wade\n el.setAttribute(this.active, '')\n\n if (hasVideoID(el.video.params) && !isActive(el.video.params)) {\n el.setAttribute('video4-active', 'on');\n this.#createCover(el);\n }\n\n if (!hasVideoID(el.video.params)) {\n error('video4', `無法取得影片 ID`);\n }\n });\n\n this.emit('init');\n }\n\n #createCover(el) {\n const { LAYOUT } = configs.video4;\n const params = el.video.params;\n const { $selector, videoLayoutNo, videoId, videoType, videoMode, videoButton, videoCover, videoHighQualityPic } = params;\n\n if (videoMode === 'onBox') {\n let $target = null;\n if (videoCover === 'on') {\n el.classList.add('video4-cover');\n // 無圖片結構放置圖片結構\n if (!$selector.querySelector('img')) {\n $selector.insertAdjacentHTML(insert.prepend, '<picture><source srcset=\"\" type=\"image/webp\"><source srcset=\"\" type=\"image/jpeg\"><img src=\"\" alt></picture>');\n warn('video4', `若啟用 [videoCover] 且選擇 onBox 模式必須於 video-target 內放置 img 結構,若無結構則自動加入圖片結構`);\n }\n\n const $cover = $selector.querySelector('img');\n $cover.insertAdjacentHTML(insert.after, LAYOUT[videoLayoutNo]);\n\n const src = $cover?.getAttribute('src') || $cover?.getAttribute('data-src');\n\n // 無圖片時放置預設封面畫面,僅 youtube & vimeo 提供\n if (!src && videoType == 'youtube') {\n if (videoHighQualityPic == 'on') {\n $cover.setAttribute('src', `http://img.youtube.com/vi/${videoId}/maxresdefault.jpg `);\n } else {\n $cover.setAttribute('src', `https://img.youtube.com/vi/${videoId}/0.jpg`);\n }\n } else if (!src && videoType == 'vimeo') {\n $cover.setAttribute('src', `https://vumbnail.com/${videoId}_large.jpg`);\n } else if (!src && videoType == 'tiktok') {\n fetch(`https://www.tiktok.com/oembed?url=https://www.tiktok.com/@/video/${videoId}`, { method: 'GET', redirect: 'follow' })\n .then(response => {\n return response.json();\n })\n .then(html => {\n const url = html.thumbnail_url\n // console.log(html.thumbnail_url);\n $cover.setAttribute('src', `${url}`);\n })\n .catch(function (err) {\n console.log('error')\n });\n } else {\n warn('video4', `僅 youtube & vimeo 提供,無圖片時放置預設封面畫面,其他影片平台請自行上傳封面照片`);\n }\n }\n\n // 若無設定撥放按鈕,則點擊物件轉移為物件本身\n if (videoButton == 'off') {\n $target = $selector;\n } else {\n $target = $selector.querySelector(videoButton) ?? $selector;\n if (!$selector.querySelector(videoButton)) {\n warn('video4', `找不到 videoButton 設定的 element -> '${videoButton}' , 點擊物件轉移至 '${this.__storage__.el}'`);\n }\n }\n\n if (!$target.video) {\n $target.video = {};\n $target.video.params = params;\n }\n\n $target.video.eventHandler = this.#trigger;\n $target.addEventListener('click', $target.video.eventHandler);\n } else if (videoMode === 'onPage') {\n let $target = null;\n if (videoCover == 'on') {\n el.classList.add('video4-cover');\n // 無圖片結構放置圖片結構\n if (!$selector.querySelector('img')) {\n $selector.insertAdjacentHTML(insert.prepend, '<picture><source srcset=\"\" type=\"image/webp\"><source srcset=\"\" type=\"image/jpeg\"><img src=\"\" alt></picture>');\n warn('video', `若啟用 [videoCover] 且選擇 onBox 模式必須於 video-target 內放置 img 結構`);\n }\n\n const $cover = $selector.querySelector('img');\n $cover.insertAdjacentHTML(insert.after, LAYOUT[videoLayoutNo]);\n\n const src = $cover?.getAttribute('src') || $cover?.getAttribute('data-src');\n\n // 無圖片時放置預設封面畫面,僅 youtube 提供\n if (!src && videoType == 'youtube') {\n if (videoHighQualityPic == 'on') {\n $cover.setAttribute('src', `http://img.youtube.com/vi/${videoId}/maxresdefault.jpg `);\n } else {\n $cover.setAttribute('src', `https://img.youtube.com/vi/${videoId}/0.jpg`);\n }\n } else if (!src && videoType == 'vimeo') {\n $cover.setAttribute('src', `https://vumbnail.com/${videoId}_large.jpg`);\n } else if (!src && videoType == 'tiktok') {\n fetch(`https://www.tiktok.com/oembed?url=https://www.tiktok.com/@/video/${videoId}`, { method: 'GET', redirect: 'follow' })\n .then(response => {\n return response.json();\n })\n .then(html => {\n const url = html.thumbnail_url\n // console.log(html.thumbnail_url);\n $cover.setAttribute('src', `${url}`);\n })\n .catch(function (err) {\n console.log('error')\n });\n } else if (!src) {\n warn('video4', `僅 youtube & vimeo 提供,無圖片時放置預設封面畫面,其他影片平台請自行上傳封面照片`);\n }\n\n // 若無設定撥放按鈕,則點擊物件轉移為物件本身\n if (videoButton == 'off') {\n $target = $selector;\n } else {\n $target = $selector.querySelector(videoButton) ?? $selector;\n if (!$selector.querySelector(videoButton)) {\n warn('video4', `找不到 videoButton 設定的 element -> '${videoButton}', 點擊物件轉移至 '${this.__storage__.el}'`);\n }\n }\n } else {\n $selector.innerHTML = createPlayer(params);\n return;\n }\n\n if (!$target.video) {\n $target.video = {};\n $target.video.params = params;\n }\n\n $target.video.eventHandler = this.#trigger;\n $target.addEventListener('click', $target.video.eventHandler);\n }\n }\n\n #trigger(e) {\n const { video, emit } = this;\n const { $selector, videoMode, videoTarget, videoKeep, videoTargetRoute, videoType, videoIgHtml } = video.params;\n const lazy = new LazyLoad({ callback_loaded: img => { }, })\n\n if (videoMode == 'onBox') {\n const options = {\n target: videoTarget,\n route: videoTargetRoute,\n on: {\n complete(modal) {\n if (videoType == 'instagram') {\n modal.setAttribute('video-typeStyle', `${videoType}`)\n if (window.instgrm) {\n window.instgrm.Embeds.process();\n } else {\n const script = document.createElement(\"script\");\n script.src = \"https://www.instagram.com/embed.js\";\n script.async = true;\n document.body.appendChild(script);\n }\n } else {\n modal.querySelector('.modal-content').insertAdjacentHTML('beforeend', createPlayer(video.params));\n modal.setAttribute('video-typeStyle', `${videoType}`)\n }\n },\n open(modal) {\n const scrollers = modal.querySelectorAll('[data-overlayscrollbars-viewport]');\n lazy.update();\n scrollLock([...scrollers]);\n if (videoType == 'instagram') {\n const target = document.querySelector('[video-template] .modal-content');\n const resizeObserver = new ResizeObserver(entries => {\n // console.log(entries[0].contentRect.height)\n if (entries[0].contentRect.height > 50) {\n target.classList.add('active');\n }\n });\n\n resizeObserver.observe(target);\n }\n },\n close(modal) {\n const scrollers = modal.querySelectorAll('[data-overlayscrollbars-viewport]');\n scrollUnlock([...scrollers]);\n },\n destroy(modal) {\n },\n },\n };\n\n Modal4.open(options);\n\n\n } else if (videoMode == 'onPage') {\n // onPage 點擊後應自動撥放影片\n video.params.videoAutoplay = 'on';\n\n if (videoKeep == 'off') {\n // 直接替換 cover & playButton\n $selector.innerHTML = createPlayer(video.params);\n return;\n } else {\n // 保留原結構\n const $videoBox = $selector.querySelector(videoKeep) ?? $selector;\n $videoBox.insertAdjacentHTML('beforeend', createPlayer(video.params));\n return;\n }\n }\n }\n\n #getVideoData(el) {\n const { SETTINGS } = configs.video4;\n\n return {\n $selector: el,\n videoId: el.getAttribute('video-id'),\n videoType: el.getAttribute('video-type'),\n videoAutoplay: el.getAttribute('video-autoplay') || SETTINGS.videoAutoplay,\n videoMode: el.getAttribute('video-mode') || SETTINGS.videoMode,\n videoButton: el.getAttribute('video-button') || SETTINGS.videoButton,\n videoKeep: el.getAttribute('video-keep') || SETTINGS.videoKeep,\n videoCover: el.getAttribute('video-cover') || SETTINGS.videoCover,\n videoLayoutNo: el.getAttribute('video-layout-no') || SETTINGS.videoLayoutNo,\n videoTarget: el.getAttribute('video-target') || SETTINGS.videoTarget,\n videoTargetRoute: el.getAttribute('video-target-route') || SETTINGS.videoTargetRoute,\n videoStartTime: el.getAttribute('video-starttime') || SETTINGS.videoStartTime,\n videoHighQualityPic: el.getAttribute('video-highquality') || SETTINGS.videoHighQuality,\n videoIgHtml: el.getAttribute('video-ig') || SETTINGS.videoIgHtml,\n };\n }\n\n update() {\n this.#create();\n }\n}\n\nObject.assign(video4.prototype, EVENTS);\n\n// define custom element\ncustomElements.define('video-player', videoPlayer);\nexport default video4;\n","export const cityData = {\n 'zh-tw': {\n 臺北市: [\n ['中正區', '100'],\n ['大同區', '103'],\n ['中山區', '104'],\n ['松山區', '105'],\n ['大安區', '106'],\n ['萬華區', '108'],\n ['信義區', '110'],\n ['士林區', '111'],\n ['北投區', '112'],\n ['內湖區', '114'],\n ['南港區', '115'],\n ['文山區', '116'],\n ],\n 新北市: [\n ['萬里區', '207'],\n ['金山區', '208'],\n ['板橋區', '220'],\n ['汐止區', '221'],\n ['深坑區', '222'],\n ['石碇區', '223'],\n ['瑞芳區', '224'],\n ['平溪區', '226'],\n ['雙溪區', '227'],\n ['貢寮區', '228'],\n ['新店區', '231'],\n ['坪林區', '232'],\n ['烏來區', '233'],\n ['永和區', '234'],\n ['中和區', '235'],\n ['土城區', '236'],\n ['三峽區', '237'],\n ['樹林區', '238'],\n ['鶯歌區', '239'],\n ['三重區', '241'],\n ['新莊區', '242'],\n ['泰山區', '243'],\n ['林口區', '244'],\n ['蘆洲區', '247'],\n ['五股區', '248'],\n ['八里區', '249'],\n ['淡水區', '251'],\n ['三芝區', '252'],\n ['石門區', '253'],\n ],\n 基隆市: [\n ['仁愛區', '200'],\n ['信義區', '201'],\n ['中正區', '202'],\n ['中山區', '203'],\n ['安樂區', '204'],\n ['暖暖區', '205'],\n ['七堵區', '206'],\n ],\n 宜蘭縣: [\n ['宜蘭市', '260'],\n ['頭城鎮', '261'],\n ['礁溪鄉', '262'],\n ['壯圍鄉', '263'],\n ['員山鄉', '264'],\n ['羅東鎮', '265'],\n ['三星鄉', '266'],\n ['大同鄉', '267'],\n ['五結鄉', '268'],\n ['冬山鄉', '269'],\n ['蘇澳鎮', '270'],\n ['南澳鄉', '272'],\n ],\n 桃園市: [\n ['中壢區', '320'],\n ['平鎮區', '324'],\n ['龍潭區', '325'],\n ['楊梅區', '326'],\n ['新屋區', '327'],\n ['觀音區', '328'],\n ['桃園區', '330'],\n ['龜山區', '333'],\n ['八德區', '334'],\n ['大溪區', '335'],\n ['復興區', '336'],\n ['大園區', '337'],\n ['蘆竹區', '338'],\n ],\n 新竹市: [\n ['東區', '300'],\n ['北區', '301'],\n ['香山區', '309'],\n ],\n 新竹縣: [\n ['竹北市', '302'],\n ['湖口鄉', '303'],\n ['新豐鄉', '304'],\n ['新埔鎮', '305'],\n ['關西鎮', '306'],\n ['芎林鄉', '307'],\n ['寶山鄉', '308'],\n ['竹東鎮', '310'],\n ['五峰鄉', '311'],\n ['橫山鄉', '312'],\n ['尖石鄉', '313'],\n ['北埔鄉', '314'],\n ['峨嵋鄉', '315'],\n ],\n 苗栗縣: [\n ['竹南鎮', '350'],\n ['頭份鎮', '351'],\n ['三灣鄉', '352'],\n ['南庄鄉', '353'],\n ['獅潭鄉', '354'],\n ['後龍鎮', '356'],\n ['通霄鎮', '357'],\n ['苑裡鎮', '358'],\n ['苗栗市', '360'],\n ['造橋鄉', '361'],\n ['頭屋鄉', '362'],\n ['公館鄉', '363'],\n ['大湖鄉', '364'],\n ['泰安鄉', '365'],\n ['銅鑼鄉', '366'],\n ['三義鄉', '367'],\n ['西湖鄉', '368'],\n ['卓蘭鎮', '369'],\n ],\n 臺中市: [\n ['中區', '400'],\n ['東區', '401'],\n ['南區', '402'],\n ['西區', '403'],\n ['北區', '404'],\n ['北屯區', '406'],\n ['西屯區', '407'],\n ['南屯區', '408'],\n ['太平區', '411'],\n ['大里區', '412'],\n ['霧峰區', '413'],\n ['烏日區', '414'],\n ['豐原區', '420'],\n ['后里區', '421'],\n ['石岡區', '422'],\n ['東勢區', '423'],\n ['和平區', '424'],\n ['新社區', '426'],\n ['潭子區', '427'],\n ['大雅區', '428'],\n ['神岡區', '429'],\n ['大肚區', '432'],\n ['沙鹿區', '433'],\n ['龍井區', '434'],\n ['梧棲區', '435'],\n ['清水區', '436'],\n ['大甲區', '437'],\n ['外埔區', '438'],\n ['大安區', '439'],\n ],\n 彰化縣: [\n ['彰化市', '500'],\n ['芬園鄉', '502'],\n ['花壇鄉', '503'],\n ['秀水鄉', '504'],\n ['鹿港鎮', '505'],\n ['福興鄉', '506'],\n ['線西鄉', '507'],\n ['和美鎮', '508'],\n ['伸港鄉', '509'],\n ['員林鎮', '510'],\n ['社頭鄉', '511'],\n ['永靖鄉', '512'],\n ['埔心鄉', '513'],\n ['溪湖鎮', '514'],\n ['大村鄉', '515'],\n ['埔鹽鄉', '516'],\n ['田中鎮', '520'],\n ['北斗鎮', '521'],\n ['田尾鄉', '522'],\n ['埤頭鄉', '523'],\n ['溪州鄉', '524'],\n ['竹塘鄉', '525'],\n ['二林鎮', '526'],\n ['大城鄉', '527'],\n ['芳苑鄉', '528'],\n ['二水鄉', '530'],\n ],\n 南投縣: [\n ['南投市', '540'],\n ['中寮鄉', '541'],\n ['草屯鎮', '542'],\n ['國姓鄉', '544'],\n ['埔里鎮', '545'],\n ['仁愛鄉', '546'],\n ['名間鄉', '551'],\n ['集集鎮', '552'],\n ['水里鎮', '553'],\n ['魚池鄉', '555'],\n ['信義鄉', '556'],\n ['竹山鎮', '557'],\n ['鹿谷鄉', '558'],\n ],\n 雲林縣: [\n ['斗南鎮', '630'],\n ['大埤鄉', '631'],\n ['虎尾鎮', '632'],\n ['土庫鎮', '633'],\n ['褒忠鄉', '634'],\n ['東勢鄉', '635'],\n ['臺西鄉', '636'],\n ['崙背鄉', '637'],\n ['麥寮鄉', '638'],\n ['斗六市', '640'],\n ['林內鄉', '643'],\n ['古坑鄉', '646'],\n ['莿桐鄉', '647'],\n ['西螺鎮', '648'],\n ['二崙鄉', '649'],\n ['北港鎮', '651'],\n ['水林鄉', '652'],\n ['口湖鄉', '653'],\n ['四湖鄉', '654'],\n ['元長鄉', '655'],\n ],\n 嘉義市: [\n ['西區', '600'],\n ['東區', '601'],\n ],\n 嘉義縣: [\n ['番路鄉', '602'],\n ['梅山鄉', '603'],\n ['竹崎鄉', '604'],\n ['阿里山鄉', '605'],\n ['中埔鄉', '606'],\n ['大埔鄉', '607'],\n ['水上鄉', '608'],\n ['鹿草鄉', '611'],\n ['太保市', '612'],\n ['朴子市', '613'],\n ['東石鄉', '614'],\n ['六腳鄉', '615'],\n ['新港鄉', '616'],\n ['民雄鄉', '621'],\n ['大林鎮', '622'],\n ['溪口鄉', '623'],\n ['義竹鄉', '624'],\n ['布袋鎮', '625'],\n ],\n 臺南市: [\n ['中西區', '700'],\n ['東區', '701'],\n ['南區', '702'],\n ['北區', '704'],\n ['安平區', '708'],\n ['安南區', '709'],\n ['永康區', '710'],\n ['歸仁區', '711'],\n ['新化區', '712'],\n ['左鎮區', '713'],\n ['玉井區', '714'],\n ['楠西區', '715'],\n ['南化區', '716'],\n ['仁德區', '717'],\n ['關廟區', '718'],\n ['龍崎區', '719'],\n ['官田區', '720'],\n ['麻豆區', '721'],\n ['佳里區', '722'],\n ['西港區', '723'],\n ['七股區', '724'],\n ['將軍區', '725'],\n ['學甲區', '726'],\n ['北門區', '727'],\n ['新營區', '730'],\n ['後壁區', '731'],\n ['白河區', '732'],\n ['東山區', '733'],\n ['六甲區', '734'],\n ['下營區', '735'],\n ['柳營區', '736'],\n ['鹽水區', '737'],\n ['善化區', '741'],\n ['大內區', '742'],\n ['山上區', '743'],\n ['新市區', '744'],\n ['安定區', '745'],\n ],\n 高雄市: [\n ['新興區', '800'],\n ['前金區', '801'],\n ['苓雅區', '802'],\n ['鹽埕區', '803'],\n ['鼓山區', '804'],\n ['旗津區', '805'],\n ['前鎮區', '806'],\n ['三民區', '807'],\n ['楠梓區', '811'],\n ['小港區', '812'],\n ['左營區', '813'],\n ['仁武區', '814'],\n ['大社區', '815'],\n ['岡山區', '820'],\n ['路竹區', '821'],\n ['阿蓮區', '822'],\n ['田寮區', '823'],\n ['燕巢區', '824'],\n ['橋頭區', '825'],\n ['梓官區', '826'],\n ['彌陀區', '827'],\n ['永安區', '828'],\n ['湖內區', '829'],\n ['鳳山區', '830'],\n ['大寮區', '831'],\n ['林園區', '832'],\n ['鳥松區', '833'],\n ['大樹區', '840'],\n ['旗山區', '842'],\n ['美濃區', '843'],\n ['六龜區', '844'],\n ['內門區', '845'],\n ['杉林區', '846'],\n ['甲仙區', '847'],\n ['桃源區', '848'],\n ['那瑪夏區', '849'],\n ['茂林區', '851'],\n ['茄萣區', '852'],\n ],\n 屏東縣: [\n ['屏東市', '900'],\n ['三地鄉', '901'],\n ['霧臺鄉', '902'],\n ['瑪家鄉', '903'],\n ['九如鄉', '904'],\n ['里港鄉', '905'],\n ['高樹鄉', '906'],\n ['鹽埔鄉', '907'],\n ['長治鄉', '908'],\n ['麟洛鄉', '909'],\n ['竹田鄉', '911'],\n ['內埔鄉', '912'],\n ['萬丹鄉', '913'],\n ['潮州鎮', '920'],\n ['泰武鄉', '921'],\n ['來義鄉', '922'],\n ['萬巒鄉', '923'],\n ['崁頂鄉', '924'],\n ['新埤鄉', '925'],\n ['南州鄉', '926'],\n ['林邊鄉', '927'],\n ['東港鎮', '928'],\n ['琉球鄉', '929'],\n ['佳冬鄉', '931'],\n ['新園鄉', '932'],\n ['枋寮鄉', '940'],\n ['枋山鄉', '941'],\n ['春日鄉', '942'],\n ['獅子鄉', '943'],\n ['車城鄉', '944'],\n ['牡丹鄉', '945'],\n ['恒春鎮', '946'],\n ['滿州鄉', '947'],\n ],\n 花蓮縣: [\n ['花蓮市', '970'],\n ['新城鄉', '971'],\n ['秀林鄉', '972'],\n ['吉安鄉', '973'],\n ['壽豐鄉', '974'],\n ['鳳林鎮', '975'],\n ['光復鄉', '976'],\n ['豐濱鄉', '977'],\n ['瑞穗鄉', '978'],\n ['萬榮鄉', '979'],\n ['玉里鎮', '981'],\n ['卓溪鄉', '982'],\n ['富里鄉', '983'],\n ],\n 臺東縣: [\n ['臺東市', '950'],\n ['綠島鄉', '951'],\n ['蘭嶼鄉', '952'],\n ['延平鄉', '953'],\n ['卑南鄉', '954'],\n ['鹿野鄉', '955'],\n ['關山鎮', '956'],\n ['海端鄉', '957'],\n ['池上鄉', '958'],\n ['東河鄉', '959'],\n ['成功鄉', '961'],\n ['長濱鄉', '962'],\n ['太麻里鄉', '963'],\n ['金峰鄉', '964'],\n ['大武鄉', '965'],\n ['達仁鄉', '966'],\n ],\n 澎湖縣: [\n ['馬公市', '880'],\n ['西嶼鄉', '881'],\n ['望安鄉', '882'],\n ['七美鄉', '883'],\n ['白沙鄉', '884'],\n ['湖西鄉', '885'],\n ],\n 金門縣: [\n ['金沙鎮', '890'],\n ['金湖鎮', '891'],\n ['金寧鄉', '892'],\n ['金城鎮', '893'],\n ['烈嶼鄉', '894'],\n ['烏坵鄉', '896'],\n ],\n 連江縣: [\n ['南竿鄉', '209'],\n ['北竿鄉', '210'],\n ['莒光鄉', '211'],\n ['東引鄉', '212'],\n ],\n },\n en: {\n 'Taipei City': [\n ['Zhongzheng Dist', '100'],\n ['Datong Dist', '103'],\n ['Zhongshan Dist', '104'],\n ['Songshan Dist', '105'],\n [\"Da'an Dist\", '106'],\n ['Wanhua Dist', '108'],\n ['Xinyi Dist', '110'],\n ['Shilin Dist', '111'],\n ['Beitou Dist', '112'],\n ['Neihu Dist', '114'],\n ['Nangang Dist', '115'],\n ['Wenshan Dist', '116'],\n ],\n 'New Taipei City': [\n ['Wanli Dist', '207'],\n ['Jinshan Dist', '208'],\n ['Banqiao Dist', '220'],\n ['Xizhi Dist', '221'],\n ['Shenkeng Dist', '222'],\n ['Shiding Dist', '223'],\n ['Ruifang Dist', '224'],\n ['Pingxi Dist', '226'],\n ['Shuangxi Dist', '227'],\n ['Gongliao Dist', '228'],\n ['Xindian Dist', '231'],\n ['Pinglin Dist', '232'],\n ['Wulai Dist', '233'],\n ['Yonghe Dist', '234'],\n ['Zhonghe Dist', '235'],\n ['Tucheng Dist', '236'],\n ['Sanxia Dist', '237'],\n ['Shulin Dist', '238'],\n ['Yingge Dist', '239'],\n ['Sanchong Dist', '241'],\n ['Xinzhuang Dist', '242'],\n ['Taishan Dist', '243'],\n ['Linkou Dist', '244'],\n ['Luzhou Dist', '247'],\n ['Wugu Dist', '248'],\n ['Bali Dist', '249'],\n ['Tamsui Dist', '251'],\n ['Sanzhi Dist', '252'],\n ['Shimen Dist', '253'],\n ],\n 'Keelung City': [\n [\"Ren'ai Dist\", '200'],\n ['Xinyi Dist', '201'],\n ['Zhongzheng Dist', '202'],\n ['Zhongshan Dist', '203'],\n ['Anle Dist', '204'],\n ['Nuannuan Dist', '205'],\n ['Qidu Dist', '206'],\n ],\n 'Yilan County': [\n ['Yilan City', '260'],\n ['Toucheng Township', '261'],\n ['Jiaoxi Township', '262'],\n ['Zhuangwei Township', '263'],\n ['Yuanshan Township', '264'],\n ['Luodong Township', '265'],\n ['Sanxing Township', '266'],\n ['Datong Township', '267'],\n ['Wujie Township', '268'],\n ['Dongshan Township', '269'],\n [\"Su'ao Township\", '270'],\n ['Nan’ao Township', '272'],\n ],\n 'Taoyuan City': [\n ['Zhongli Dist', '320'],\n ['Pingzhen Dist', '324'],\n ['Longtan Dist', '325'],\n ['Yangmei Dist', '326'],\n ['Xinwu Dist', '327'],\n ['Guanyin Dist', '328'],\n ['Taoyuan Dist', '330'],\n ['Guishan Dist', '333'],\n ['Bade Dist', '334'],\n ['Daxi Dist', '335'],\n ['Fuxing Dist', '336'],\n ['Dayuan Dist', '337'],\n ['Luzhu Dist', '338'],\n ],\n 'Hsinchu City': [\n ['East Dist', '300'],\n ['North Dist', '301'],\n ['Xiangshan Dist', '309'],\n ],\n 'Hsinchu County': [\n ['Zhubei City', '302'],\n ['Hukou Township', '303'],\n ['Xinfeng Township', '304'],\n ['Xinpu Township', '305'],\n ['Guanxi Township', '306'],\n ['Qionglin Township', '307'],\n ['Baoshan Township', '308'],\n ['Zhudong Township', '310'],\n ['Wufeng Township', '311'],\n ['Hengshan Township', '312'],\n ['Jianshi Township', '313'],\n ['Beipu Township', '314'],\n ['Emei Township', '315'],\n ],\n 'Miaoli County': [\n ['Zhunan Township', '350'],\n ['Toufen City', '351'],\n ['Sanwan Township', '352'],\n ['Nanzhuang Township', '353'],\n ['Shitan Township', '354'],\n ['Houlong Township', '356'],\n ['Tongxiao Township', '357'],\n ['Yuanli Township', '358'],\n ['Miaoli City', '360'],\n ['Zaoqiao Township', '361'],\n ['Touwu Township', '362'],\n ['Gongguan Township', '363'],\n ['Dahu Township', '364'],\n [\"Tai'an Township\", '365'],\n ['Tongluo Township', '366'],\n ['Sanyi Township', '367'],\n ['Xihu Township', '368'],\n ['Zhuolan Township', '369'],\n ],\n 'Taichung City': [\n ['Central Dist', '400'],\n ['East Dist', '401'],\n ['South Dist', '402'],\n ['West Dist', '403'],\n ['North Dist', '404'],\n ['Beitun Dist', '406'],\n ['Xitun Dist', '407'],\n ['Nantun Dist', '408'],\n ['Taiping Dist', '411'],\n ['Dali Dist', '412'],\n ['Wufeng Dist', '413'],\n ['Wuri Dist', '414'],\n ['Fengyuan Dist', '420'],\n ['Houli Dist', '421'],\n ['Shigang Dist', '422'],\n ['Dongshi Dist', '423'],\n ['Heping Dist', '424'],\n ['Xinshe Dist', '426'],\n ['Tanzi Dist', '427'],\n ['Daya Dist', '428'],\n ['Shengang Dist', '429'],\n ['Dadu Dist', '432'],\n ['Shalu Dist', '433'],\n ['Longjing Dist', '434'],\n ['Wuqi Dist', '435'],\n ['Qingshui Dist', '436'],\n ['Dajia Dist', '437'],\n ['Waipu Dist', '438'],\n [\"Da'an Dist\", '439'],\n ],\n 'Changhua County': [\n ['Changhua City', '500'],\n ['Fenyuan Township', '502'],\n ['Huatan Township', '503'],\n ['Xiushui Township', '504'],\n ['Lukang Township', '505'],\n ['Fuxing Township', '506'],\n ['Xianxi Township', '507'],\n ['Hemei Township', '508'],\n ['Shengang Township', '509'],\n ['Yuanlin City', '510'],\n ['Shetou Township', '511'],\n ['Yongjing Township', '512'],\n ['Puxin Township', '513'],\n ['Xihu Township', '514'],\n ['Dacun Township', '515'],\n ['Puyan Township', '516'],\n ['Tianzhong Township', '520'],\n ['Beidou Township', '521'],\n ['Tianwei Township', '522'],\n ['Pitou Township', '523'],\n ['Xizhou Township', '524'],\n ['Zhutang Township', '525'],\n ['Erlin Township', '526'],\n ['Dacheng Township', '527'],\n ['Fangyuan Township', '528'],\n ['Ershui Township', '530'],\n ],\n 'Nantou County': [\n ['Nantou City', '540'],\n ['Zhongliao Township', '541'],\n ['Caotun Township', '542'],\n ['Guoxing Township', '544'],\n ['Puli Township', '545'],\n [\"Ren'ai Township\", '546'],\n ['Mingjian Township', '551'],\n ['Jiji Township', '552'],\n ['Shuili Township', '553'],\n ['Yuchi Township', '555'],\n ['Xinyi Township', '556'],\n ['Zhushan Township', '557'],\n ['Lugu Township', '558'],\n ],\n 'Yunlin County': [\n ['Dounan Township', '630'],\n ['Dapi Township', '631'],\n ['Huwei Township', '632'],\n ['Tuku Township', '633'],\n ['Baozhong Township', '634'],\n ['Dongshi Township', '635'],\n ['Taixi Township', '636'],\n ['Lunbei Township', '637'],\n ['Mailiao Township', '638'],\n ['Douliu City', '640'],\n ['Linnei Township', '643'],\n ['Gukeng Township', '646'],\n ['Citong Township', '647'],\n ['Xiluo Township', '648'],\n ['Erlun Township', '649'],\n ['Beigang Township', '651'],\n ['Shuilin Township', '652'],\n ['Kouhu Township', '653'],\n ['Sihu Township', '654'],\n ['Yuanzhang Township', '655'],\n ],\n 'Chiayi City': [\n ['West Dist', '600'],\n ['0', '601'],\n ],\n 'Chiayi County': [\n ['Fanlu Township', '602'],\n ['Meishan Township', '603'],\n ['Zhuqi Township', '604'],\n ['Alishan Township', '605'],\n ['Zhongpu Township', '606'],\n ['Dapu Township', '607'],\n ['Shuishang Township', '608'],\n ['Lucao Township', '611'],\n ['Taibao City', '612'],\n ['Puzi City', '613'],\n ['Dongshi Township', '614'],\n ['Liujiao Township', '615'],\n ['Xingang Township', '616'],\n ['Minxiong Township', '621'],\n ['Dalin Township', '622'],\n ['Xikou Township', '623'],\n ['Yizhu Township', '624'],\n ['Budai Township', '625'],\n ],\n 'Tainan City': [\n ['West Central Dist', '700'],\n ['East Dist', '701'],\n ['South Dist', '702'],\n ['North Dist', '704'],\n ['Anping Dist', '708'],\n ['Annan Dist', '709'],\n ['Yongkang Dist', '710'],\n ['Guiren Dist', '711'],\n ['Xinhua Dist', '712'],\n ['Zuozhen Dist', '713'],\n ['Yujing Dist', '714'],\n ['Nanxi Dist', '715'],\n ['Nanhua Dist', '716'],\n ['Rende Dist', '717'],\n ['Guanmiao Dist', '718'],\n ['Longqi Dist', '719'],\n ['Guantian Dist', '720'],\n ['Madou Dist', '721'],\n ['Jiali Dist', '722'],\n ['Xigang Dist', '723'],\n ['Qigu Dist', '724'],\n ['Jiangjun Dist', '725'],\n ['Xuejia Dist', '726'],\n ['Beimen Dist', '727'],\n ['Xinying Dist', '730'],\n ['Houbi Dist', '731'],\n ['Baihe Dist', '732'],\n ['Dongshan Dist', '733'],\n ['Liujia Dist', '734'],\n ['Xiaying Dist', '735'],\n ['Liuying Dist', '736'],\n ['Yanshui Dist', '737'],\n ['Shanhua Dist', '741'],\n ['Danei Dist', '742'],\n ['Shanshang Dist', '743'],\n ['Xinshi Dist', '744'],\n ['Anding Dist', '745'],\n ],\n 'Kaohsiung City': [\n ['Xinxing Dist', '800'],\n ['Qianjin Dist', '801'],\n ['Lingya Dist', '802'],\n ['Yancheng Dist', '803'],\n ['Gushan Dist', '804'],\n ['Qijin Dist', '805'],\n ['Qianzhen Dist', '806'],\n ['Sanmin Dist', '807'],\n ['Nanzi Dist', '811'],\n ['Xiaogang Dist', '812'],\n ['Zuoying Dist', '813'],\n ['Renwu Dist', '814'],\n ['Dashe Dist', '815'],\n ['Gangshan Dist', '820'],\n ['Luzhu Dist', '821'],\n ['Alian Dist', '822'],\n ['Tianliao Dist', '823'],\n ['Yanchao Dist', '824'],\n ['Qiaotou Dist', '825'],\n ['Ziguan Dist', '826'],\n ['Mituo Dist', '827'],\n [\"Yong'an Dist\", '828'],\n ['Hunei Dist', '829'],\n ['Fengshan Dist', '830'],\n ['Daliao Dist', '831'],\n ['Linyuan Dist', '832'],\n ['Niaosong Dist', '833'],\n ['Dashu Dist', '840'],\n ['Qishan Dist', '842'],\n ['Meinong Dist', '843'],\n ['Liugui Dist', '844'],\n ['Neimen Dist', '845'],\n ['Shanlin Dist', '846'],\n ['Jiaxian Dist', '847'],\n ['Taoyuan Dist', '848'],\n ['Namaxia Dist', '849'],\n ['Maolin Dist', '851'],\n ['Qieding Dist', '852'],\n ],\n 'Pingtung County': [\n ['Pingtung City', '900'],\n ['Sandimen Township', '901'],\n ['Wutai Township', '902'],\n ['Majia Township', '903'],\n ['Jiuru Township', '904'],\n ['Ligang Township', '905'],\n ['Gaoshu Township', '906'],\n ['Yanpu Township', '907'],\n ['Changzhi Township', '908'],\n ['Linluo Township', '909'],\n ['Zhutian Township', '911'],\n ['Neipu Township', '912'],\n ['Wandan Township', '913'],\n ['Chaozhou Township', '920'],\n ['Taiwu Township', '921'],\n ['Laiyi Township', '922'],\n ['Wanluan Township', '923'],\n ['Kanding Township', '924'],\n ['Xinpi Township', '925'],\n ['Nanzhou Township', '926'],\n ['Linbian Township', '927'],\n ['Donggang Township', '928'],\n ['Liuqiu Township', '929'],\n ['Jiadong Township', '931'],\n ['Xinyuan Township', '932'],\n ['Fangliao Township', '940'],\n ['Fangshan Township', '941'],\n ['Chunri Township', '942'],\n ['Shizi Township', '943'],\n ['Checheng Township', '944'],\n ['Mudan Township', '945'],\n ['Hengchun Township', '946'],\n ['Manzhou Township', '947'],\n ],\n 'Hualien County': [\n ['Hualien City', '970'],\n ['Xincheng Township', '971'],\n ['Xiulin Township', '972'],\n [\"Ji'an Township\", '973'],\n ['Shoufeng Township', '974'],\n ['Fenglin Township', '975'],\n ['Guangfu Township', '976'],\n ['Fengbin Township', '977'],\n ['Ruisui Township', '978'],\n ['Wanrong Township', '979'],\n ['Yuli Township', '981'],\n ['Zhuoxi Township', '982'],\n ['Fuli Township', '983'],\n ],\n 'Taitung County': [\n ['Taitung City', '950'],\n ['Ludao Township', '951'],\n ['Lanyu Township', '952'],\n ['Yanping Township', '953'],\n ['Beinan Township', '954'],\n ['Luye Township', '955'],\n ['Guanshan Township', '956'],\n ['Haiduan Township', '957'],\n ['Chishang Township', '958'],\n ['Donghe Township', '959'],\n ['Chenggong Township', '961'],\n ['Changbin Township', '962'],\n ['Taimali Township', '963'],\n ['Jinfeng Township', '964'],\n ['Dawu Township', '965'],\n ['Daren Township', '966'],\n ],\n 'Penghu County': [\n ['Magong City', '880'],\n ['Xiyu Township', '881'],\n [\"Wang'an Township\", '882'],\n ['Qimei Township', '883'],\n ['Baisha Township', '884'],\n ['Huxi Township', '885'],\n ],\n 'Kinmen County': [\n ['Jinsha Township', '890'],\n ['Jinhu Township', '891'],\n ['Jinning Township', '892'],\n ['Jincheng Township', '893'],\n ['Lieyu Township', '894'],\n ['Wuqiu Township', '896'],\n ],\n 'Lienchiang County': [\n ['Nangan Township', '209'],\n ['Beigan Township', '210'],\n ['Juguang Township', '211'],\n ['Dongyin Township', '212'],\n ],\n },\n};\n","import { configs } from '../configs'\nimport {\n EVENTS,\n isElementExist,\n getElement,\n getAllElements,\n insert,\n warn\n} from '../commons'\nimport { cityData } from './cityData'\nimport { OverlayScrollbars } from 'overlayscrollbars'\n\n('use strict');\n\n// create template method\nconst createTemplate = d4 => {\n const { TEMPLATE } = configs.dropdown4;\n const { childDom } = d4.s;\n const container = document.createElement('div');\n const filter = d4.classList.contains('filter');\n const filterPlaceholder = d4.getAttribute('filter-placeholder');\n const dropdownIcon = d4.getAttribute('d4-icon');\n\n //2024.12.31 scarlett\n //新增customTemplate\n const customTemplate = d4.getAttribute('custom-template');\n container.innerHTML = TEMPLATE(\n filter,\n filterPlaceholder,\n customTemplate,\n dropdownIcon\n );\n\n const content = container.querySelector('.dropdown-list');\n [...childDom].forEach(child => {\n if (child.tagName === 'LI') {\n if (child.classList.contains('has-sublayer')) {\n const subOptions = child.querySelectorAll('li');\n [...subOptions].forEach(subOption => {\n if (!subOption.hasAttribute('data-option') || subOption.getAttribute('data-option').trim() === '') {\n subOption.setAttribute('data-option', subOption.textContent.trim());\n }\n });\n } else {\n if (!child.hasAttribute('data-option') || child.getAttribute('data-option').trim() === '') {\n child.setAttribute('data-option', child.textContent.trim());\n }\n }\n }\n content.append(child);\n });\n\n return container.children[0];\n};\n\n/**\n * 判斷是否有設定連動\n * @param {object} d4 d4 Element\n */\nconst detectSync = d4 => {\n const controlElements = d4.getAttribute('control-elements')?.split(',');\n if (controlElements) {\n controlElements.forEach(el => {\n const disabledEl = document.querySelector(el);\n if (!disabledEl) {\n warn('dropdown', `Can't not find control element(${el})`);\n }\n if (disabledEl && disabledEl.classList.contains('disabled')) {\n disabledEl.classList.remove('disabled');\n if (disabledEl.tagName === 'DROPDOWN-EL' && disabledEl.s.activeLi) {\n setSelectDisplay(disabledEl, [...disabledEl.s.allLi].indexOf(disabledEl.s.activeLi));\n }\n }\n });\n }\n};\n\n/**\n * 顯示選擇的選項\n * @param {object} d4 d4 Element\n * @param {number} valueIndex 被選擇的選項索引值\n * @returns\n */\nconst setSelectDisplay = (d4, valueIndex) => {\n const placeholder = d4.getAttribute('d4-placeholder');\n const allLi = d4.querySelectorAll('.dropdown-list li');\n if (valueIndex < 0 || valueIndex.length === 0) {\n // 恢復空值狀態\n allLi.forEach(el => {\n el.classList.remove('active');\n });\n d4.s.activeLi = undefined;\n // 判斷單選或複選\n switch (d4.s.selectType) {\n case 'single':\n d4.s.value = {\n index: -1,\n id: undefined,\n el: undefined,\n };\n break;\n case 'multiple':\n d4.s.value = [];\n break;\n }\n\n d4.s.selectDisplayEl.textContent = placeholder.trim();\n d4.setAttribute('d4-value', '');\n } else {\n if (d4.classList.contains('disabled')) {\n d4.s.selectDisplayEl.textContent = placeholder.trim();\n return;\n }\n // 判斷單選或複選\n switch (d4.s.selectType) {\n case 'single':\n const option = allLi[valueIndex].textContent.trim();\n d4.s.allLi.forEach(el => {\n el.classList.remove('active');\n });\n allLi[valueIndex].classList.add('active');\n d4.s.selectDisplayEl.textContent = option;\n d4.s.activeLi = allLi[valueIndex];\n d4.s.value = {\n index: valueIndex,\n id: allLi[valueIndex].getAttribute('data-option'),\n el: allLi[valueIndex],\n };\n break;\n case 'multiple':\n if (Array.isArray(valueIndex)) {\n d4.s.allLi.forEach(li => {\n if (valueIndex.indexOf([...d4.s.allLi].indexOf(li)) >= 0) {\n li.classList.add('active');\n } else {\n li.classList.remove('active');\n }\n });\n }\n const activeLi = d4.querySelectorAll('.dropdown-list li.active');\n if (activeLi.length <= 0) {\n d4.s.selectDisplayEl.textContent = placeholder.trim();\n } else {\n d4.s.selectDisplayEl.textContent = '';\n activeLi.forEach(li => {\n const id = li.getAttribute('data-option');\n const option = li.textContent.trim();\n const tagEl = `<div class=\"option-btn\" data-option=\"${id}\"><div class=\"text\">${option}</div><div class=\"remove-icon\"></div></div>`;\n d4.s.selectDisplayEl.insertAdjacentHTML(insert.append, tagEl);\n });\n }\n d4.s.activeLi = activeLi;\n d4.s.value = [...activeLi].map(option => {\n const obj = {\n index: [...allLi].indexOf(option),\n id: option.getAttribute('data-option'),\n el: option,\n };\n return obj;\n });\n const valueArray = [...activeLi].map(option => option.getAttribute('data-option'));\n d4.setAttribute('d4-value', valueArray.join());\n break;\n }\n }\n};\n\n/**\n * 載入台灣縣市資料\n * @param {*} d4 d4 Element\n */\nconst loadCityData = d4 => {\n const lang = d4.s.cityLang;\n // 塞入縣市資料\n if (d4.classList.contains('city')) {\n d4.s.dropdownEl.querySelector('.dropdown-list').innerHTML = '';\n Object.keys(cityData[lang]).forEach(city => {\n const li = document.createElement('li');\n li.textContent = city;\n li.setAttribute('data-option', city);\n d4.s.dropdownEl.querySelector('.dropdown-list').append(li);\n });\n d4.s.allLi = d4.querySelectorAll('.dropdown-list li');\n }\n};\n\n/**\n * 載入對應地區資料\n */\nconst loadDistData = (d4, city) => {\n const lang = d4.s.cityLang;\n // 塞入地區資料\n cityData[lang][city].forEach((dist, index) => {\n const li = document.createElement('li');\n li.textContent = dist[0];\n li.setAttribute('data-option', dist[0]);\n d4.querySelector('.dropdown-list').append(li);\n });\n};\n\n/**\n * 關閉全部下拉選單\n */\nconst closeAllDropdown = () => {\n const allDropdown = getAllElements('dropdown-el[d4-status=\"open\"]');\n allDropdown.forEach(el => {\n el.close();\n });\n};\n\n/**\n * 設定卷軸樣式\n */\nconst settingScrollbarStyle = () => {\n const { SETTINGS } = configs.dropdown4;\n const setProperty = (element, obj) => {\n Object.keys(obj).forEach(key => {\n element.style.setProperty(`--${key}`, obj[key]);\n });\n };\n setProperty(document.documentElement, SETTINGS.scrollbar);\n};\n\nsettingScrollbarStyle();\n// 點擊空白處關閉下拉選單\ndocument.addEventListener('click', function () {\n closeAllDropdown();\n});\n\n// 創建 Custom Element\nclass Dropdown4 extends HTMLElement {\n constructor() {\n super();\n this.initialize = false;\n }\n static get observedAttributes() {\n return ['d4-status', 'd4-placeholder', 'd4-value'];\n }\n attributeChangedCallback(attr, oldVal, newVal) {\n const d4 = this;\n switch (attr) {\n case 'd4-status':\n if (oldVal === null || oldVal === newVal) return;\n if (newVal === 'open' || newVal === 'close') {\n d4.emit(newVal);\n }\n break;\n case 'd4-value':\n if (oldVal === null || oldVal === newVal) return;\n if (newVal !== '') {\n const selectType = d4.hasAttribute('multiple') ? 'multiple' : 'single';\n switch (selectType) {\n case 'single':\n const li = d4.querySelector(`.dropdown-list li[data-option=\"${newVal}\"]`);\n if (isElementExist(li)) {\n setSelectDisplay(d4, [...d4.s.allLi].indexOf(li));\n } else {\n setSelectDisplay(d4, -1);\n }\n break;\n case 'multiple':\n const valueLiArray = [];\n d4.querySelector(`.dropdown-list li`).classList.remove('active');\n newVal.split(',').forEach(option => {\n const li = d4.querySelector(`.dropdown-list li[data-option=\"${option}\"]`);\n if (isElementExist(li)) {\n li.classList.add('active');\n valueLiArray.push(li);\n }\n });\n const valueIndexArray = valueLiArray.map(li => [...d4.s.allLi].indexOf(li));\n setSelectDisplay(d4, valueIndexArray);\n break;\n }\n } else {\n setSelectDisplay(d4, -1);\n }\n d4.emit('change');\n break;\n case 'd4-placeholder':\n if (oldVal === null) return;\n if (oldVal !== newVal && d4.s.value.index < 0) {\n setSelectDisplay(d4, d4.s.value.index);\n }\n break;\n }\n }\n connectedCallback() {\n const d4 = this;\n if (d4.initialize || d4.classList.contains('d4-initialize')) return;\n d4.initialize = true;\n this.#create();\n }\n #create() {\n this.s = {};\n this.__events__ = {};\n\n if (!this.hasAttribute('d4-status')) {\n this.setAttribute('d4-status', 'close');\n }\n if (!this.hasAttribute('d4-value')) {\n this.setAttribute('d4-value', '');\n }\n this.#mount();\n }\n #mount() {\n this.s.childDom = this.childNodes;\n this.s.template = createTemplate(this);\n this.innerHTML = '';\n this.append(this.s.template);\n this.#init();\n }\n #init() {\n const d4 = this;\n d4.s.allLi = d4.querySelectorAll('.dropdown-list li');\n d4.s.selectDisplayEl = d4.querySelector('.select-display');\n d4.s.dropdownEl = d4.querySelector('.dropdown');\n d4.s.selectType = d4.hasAttribute('multiple') ? 'multiple' : 'single';\n d4.s.cityLang = d4.hasAttribute('city-lang') ? d4.getAttribute('city-lang') : 'zh-tw';\n\n loadCityData(d4);\n d4.s.subDropdownTotalH = 0;\n const value = d4.getAttribute('d4-value');\n switch (d4.s.selectType) {\n case 'single':\n let valueLi;\n // 如果是地區下拉選單\n if (d4.classList.contains('dist')) {\n const cityDropdown = document.querySelector(`dropdown-el[dist-select=\"${d4.id}\"]`);\n //判斷縣市下拉選單是否有值\n const cityDropdownHasVal = cityDropdown ? cityDropdown.getAttribute('d4-value') !== '' : false;\n if (cityDropdown && cityDropdownHasVal) {\n const city = cityDropdown.getAttribute('d4-value');\n loadDistData(d4, city);\n d4.s.allLi = d4.querySelectorAll('.dropdown-list li');\n d4.classList.remove('disabled');\n if (d4.getAttribute('d4-value') !== '') {\n const dist = value.split(',')[1];\n valueLi = d4.querySelector(`.dropdown-list li[data-option=\"${dist}\"]`);\n d4.setAttribute('d4-value', dist);\n }\n }\n } else {\n valueLi = d4.querySelector(`.dropdown-list li[data-option=\"${value}\"]`);\n }\n if (isElementExist(valueLi)) {\n valueLi.classList.add('active');\n d4.s.activeLi = valueLi;\n d4.s.value = {\n index: [...d4.s.allLi].indexOf(valueLi),\n id: value,\n el: valueLi,\n };\n } else {\n d4.s.activeLi = undefined;\n d4.s.value = {\n index: -1,\n id: undefined,\n el: undefined,\n };\n }\n break;\n case 'multiple':\n const valueLiArray = [];\n value.split(',').forEach(option => {\n const li = d4.querySelector(`.dropdown-list li[data-option=\"${option}\"]`);\n if (isElementExist(li)) {\n valueLiArray.push(li);\n }\n });\n if (valueLiArray.length > 0) {\n d4.s.value = {\n index: valueLiArray.map(li => [...d4.s.allLi].indexOf(li)),\n id: valueLiArray.map(li => li.getAttribute('data-option')),\n el: valueLiArray.map(li => li),\n };\n } else {\n d4.s.value = {\n index: [],\n id: undefined,\n el: undefined,\n };\n }\n break;\n }\n setSelectDisplay(d4, d4.s.value.index);\n d4.#event();\n d4.classList.add('d4-initialize');\n }\n #event() {\n const d4 = this;\n // 下拉選單開關\n d4.__events__.dropdownToggle = () => {\n d4.addEventListener('click', function (e) {\n e.stopPropagation();\n const status = d4.getAttribute('d4-status');\n switch (status) {\n case 'open':\n d4.close();\n break;\n case 'close':\n d4.open();\n break;\n }\n });\n };\n\n // 下拉選單完成過渡\n d4.__events__.transitionend = () => {\n function toggleTransitionend(event) {\n if (event.target === this) {\n const dropdownStatus = d4.getAttribute('d4-status');\n const hasFilter = d4.classList.contains('filter');\n switch (dropdownStatus) {\n case 'open':\n const scroller = d4.querySelector('.dropdown-scroller');\n // 捲動到 active 的選項\n const scrollToActive = () => {\n if (d4.__scroller__) {\n const { viewport } = d4.__scroller__.elements();\n if (isElementExist(d4.s.activeLi)) {\n const halfActiveLiHeight = d4.s.activeLi.clientHeight / 2;\n const offsetTop = d4.s.activeLi.offsetTop;\n const scroll = offsetTop - scroller.clientHeight / 2 + halfActiveLiHeight > 0 ? offsetTop - scroller.clientHeight / 2 + halfActiveLiHeight : 0;\n viewport.scrollTo({\n top: scroll,\n behavior: 'smooth',\n });\n } else {\n viewport.scrollTo({\n top: 0,\n behavior: 'smooth',\n });\n }\n }\n };\n if (hasFilter) {\n d4.querySelector('.filter-bar input').disabled = false;\n d4.querySelector('.filter-bar input').focus();\n }\n if (d4.s.selectType === 'single') {\n scrollToActive();\n }\n break;\n case 'close':\n d4.__scroller__.update(true);\n d4.s.dropdownEl.removeAttribute('style');\n if (hasFilter) d4.querySelector('.filter-bar input').disabled = true;\n break;\n }\n }\n }\n d4.s.dropdownEl.addEventListener('transitionend', toggleTransitionend);\n };\n\n // 綁定卷軸\n d4.__events__.bindScrollbar = (d4 = this) => {\n const scroller = d4.querySelector('.dropdown-scroller');\n // 綁定卷軸套件\n d4.__scroller__ = OverlayScrollbars(scroller, {\n overflowBehavior: {\n x: 'hidden',\n },\n });\n };\n\n // 顯示選的選項\n d4.__events__.selectOption = (d4 = this) => {\n let computedHeight, totalHeight;\n const scroller = d4.querySelector('.dropdown-scroller');\n const citySelect = d4.classList.contains('city');\n d4.s.allLi = d4.querySelectorAll('.dropdown-list li');\n d4.s.allLi.forEach(option => {\n option.addEventListener('click', function (e) {\n const clickOption = this;\n const clickIndex = [...d4.s.allLi].indexOf(clickOption);\n // 子下拉選單打開前的總高度\n const defaultHeight = parseInt(d4.getAttribute('d4-default-height'));\n // 有子層選單\n if (clickOption.classList.contains('has-sublayer')) {\n e.stopPropagation();\n const subDropdown = clickOption.querySelector('.sub-dropdown');\n const subDropdownList = subDropdown.querySelector('.sub-dropdown-list');\n const subDropdownListMargin = parseInt(getComputedStyle(subDropdownList).marginTop) + parseInt(getComputedStyle(subDropdownList).marginBottom);\n subDropdown.style.cssText = `--height: ${subDropdownList.offsetHeight + subDropdownListMargin}px`;\n // 子下拉選單高度\n const subDropdownH = parseInt(subDropdown.style.cssText.replace('--height:', '').trim());\n // 最大高度\n const maxHeight = parseInt(getComputedStyle(scroller).maxHeight);\n const recalculate = () => {\n // 重新計算整個下拉選單的高度\n computedHeight = defaultHeight + d4.s.subDropdownTotalH;\n totalHeight = computedHeight > maxHeight ? maxHeight : computedHeight;\n d4.style.cssText = `--maxHeight: ${totalHeight}px;`;\n d4.s.dropdownEl.style.height = `${totalHeight}px`;\n };\n if (!clickOption.classList.contains('open')) {\n // 子層下拉選單打開\n clickOption.classList.add('open');\n d4.s.subDropdownTotalH += subDropdownH;\n recalculate();\n } else {\n // 子層下拉選單關閉\n clickOption.classList.remove('open');\n d4.s.subDropdownTotalH -= subDropdownH;\n recalculate();\n }\n const collapse = () => {\n d4.__scroller__.update(true);\n subDropdown.removeEventListener('transitionend', collapse);\n };\n subDropdown.addEventListener('transitionend', collapse);\n }\n // 沒有子層選單\n else {\n detectSync(d4);\n // 判斷單選或複選\n switch (d4.s.selectType) {\n // 單選\n case 'single':\n d4.setAttribute('d4-value', clickOption.getAttribute('data-option'));\n // 選擇縣市\n if (citySelect) {\n const lang = d4.s.cityLang;\n const city = option.textContent.trim();\n const distSelectEl = document.getElementById(d4.getAttribute('dist-select'));\n if (distSelectEl) {\n distSelectEl.querySelector('.dropdown-list').textContent = '';\n setSelectDisplay(distSelectEl, -1);\n cityData[lang][city].forEach((dist, index) => {\n const li = document.createElement('li');\n li.textContent = dist[0];\n li.setAttribute('data-option', dist[0]);\n distSelectEl.querySelector('.dropdown-list').append(li);\n });\n d4.__events__.selectOption(distSelectEl);\n }\n }\n if (clickOption.parentNode.closest('li')?.classList.contains('has-sublayer')) {\n e.stopPropagation();\n d4.close();\n }\n break;\n // 複選\n case 'multiple':\n e.stopPropagation();\n clickOption.classList.toggle('active');\n setSelectDisplay(d4, clickIndex);\n break;\n }\n }\n });\n });\n };\n\n // 篩選功能\n d4.__events__.filterHandler = () => {\n if (d4.classList.contains('filter')) {\n d4.querySelector('.filter-bar').addEventListener('click', function (e) {\n e.stopPropagation();\n });\n d4.querySelector('.filter-input').addEventListener('input', function () {\n const val = this.value.toUpperCase();\n d4.s.allLi.forEach(el => {\n if (!el.textContent.toUpperCase().includes(val)) el.style.display = 'none';\n else el.removeAttribute('style');\n });\n });\n }\n };\n\n // 複選標籤移除\n d4.__events__.removeTag = () => {\n if (d4.s.selectType === 'single') return;\n d4.s.selectDisplayEl.addEventListener('click', function (e) {\n if (e.target.classList.contains('select-display')) return;\n const optionBtn = e.target.classList.contains('option-btn') ? e.target : e.target.parentElement;\n if (optionBtn.contains(e.target)) {\n e.stopPropagation();\n if (e.target.classList.contains('remove-icon')) {\n const tag = e.target.parentElement;\n const id = tag.getAttribute('data-option');\n d4.s.dropdownEl.querySelector(`.dropdown-list li[data-option=\"${id}\"]`).classList.remove('active');\n d4.s.activeLi = d4.querySelectorAll('.dropdown-list li.active');\n e.target.parentElement.remove();\n const activeLiArray = [...d4.s.activeLi];\n d4.s.value = activeLiArray.map(option => {\n const obj = {\n index: [...d4.s.allLi].indexOf(option),\n id: option.getAttribute('data-option'),\n el: option,\n };\n return obj;\n });\n d4.s.activeLi = activeLiArray;\n const valueArray = activeLiArray.map(option => option.getAttribute('data-option'));\n d4.setAttribute('d4-value', valueArray.join());\n if (activeLiArray.length <= 0) {\n d4.s.selectDisplayEl.textContent = d4.getAttribute('d4-placeholder').trim();\n }\n }\n }\n });\n };\n d4.__events__.dropdownToggle();\n d4.__events__.bindScrollbar();\n d4.__events__.selectOption();\n d4.__events__.filterHandler();\n d4.__events__.removeTag();\n d4.__events__.transitionend();\n }\n open() {\n const d4 = this;\n const dropdownHeight = d4.querySelector('.dropdown-scroller').clientHeight;\n const hasFilter = d4.classList.contains('filter');\n const totalHeight = () => {\n if (hasFilter) {\n if (d4.querySelector('.dropdown-scroller .filter-bar')) {\n return dropdownHeight\n } else {\n return d4.querySelector('.filter-bar').clientHeight + dropdownHeight;\n }\n }\n return dropdownHeight;\n };\n closeAllDropdown();\n d4.setAttribute('d4-status', 'open');\n d4.setAttribute('d4-default-height', totalHeight());\n d4.style.cssText = `--maxHeight: ${totalHeight()}px;`;\n d4.s.dropdownEl.style.cssText = `\n height: ${totalHeight()}px;\n z-index: 2;\n `;\n return this;\n }\n close() {\n const d4 = this;\n const allSublayer = d4.s.dropdownEl.querySelectorAll('.has-sublayer');\n const defaultHeight = parseInt(d4.getAttribute('d4-default-height'));\n d4.setAttribute('d4-status', 'close');\n d4.s.dropdownEl.style.height = '0px';\n allSublayer.forEach(item => {\n item.classList.remove('open');\n });\n d4.style.cssText = `--maxHeight: ${defaultHeight}px;`;\n d4.s.subDropdownTotalH = 0;\n return this;\n }\n scrollTo(scroll) {\n const d4 = this;\n const { viewport } = d4.__scroller__.elements();\n viewport.scrollTo({\n top: scroll,\n behavior: 'smooth',\n });\n }\n update() {\n this.__events__.selectOption();\n }\n}\n\nObject.assign(Dropdown4.prototype, EVENTS);\n\n// define custom element\ncustomElements.define('dropdown-el', Dropdown4);\n\nexport default Dropdown4;\n","import { configs } from '../configs'\n\n// 獲取標籤上斷點設定\nfunction getBreakpoints(m4) {\n const breakpoints = {};\n [...m4.attributes].forEach(attr => {\n if (attr.name.includes('duration-')) {\n const key = attr.name.replace('duration-', '');\n const value = attr.nodeValue;\n breakpoints[key] = Number(value);\n }\n });\n return Object.keys(breakpoints).length === 0 ? null : breakpoints;\n}\n\n// 透過標籤上設定的斷點判斷持續時間\nfunction getDuration(m4) {\n if (getBreakpoints(m4)) {\n let breakpoint;\n const points = Object.keys(getBreakpoints(m4)).map(point => {\n return {\n value: point,\n point,\n };\n });\n points.sort((a, b) => parseInt(b.value, 10) - parseInt(a.value, 10));\n for (let i = 0; i < points.length; i += 1) {\n const { point, value } = points[i];\n if (window.matchMedia(`(max-width: ${value}px)`).matches) {\n breakpoint = point;\n }\n }\n return breakpoint ? Number(getBreakpoints(m4)[breakpoint]) : m4.s.options.duration;\n } else {\n return m4.s.options.duration;\n }\n}\n\n// 產生動畫結構\nfunction createAnimateWrap(m4) {\n const { behavior, continual, gap } = m4.s.options;\n const childDOM = m4.childNodes;\n const container = document.createElement('div');\n const animateItem = document.createElement('div');\n container.className = 'animate-container';\n animateItem.className = 'animate-item';\n [...childDOM].forEach(element => {\n animateItem.append(element);\n });\n function cloneElement() {\n const cloneAnimateWrap = animateItem.cloneNode(true);\n cloneAnimateWrap.classList.add('clone');\n m4.s.cloneAnimation = null;\n m4.s.cloneAnimateEl = cloneAnimateWrap;\n return cloneAnimateWrap;\n }\n m4.s.animation = null;\n m4.s.animateEl = animateItem;\n m4.textContent = '';\n container.append(animateItem);\n m4.append(container);\n if (animateItem.clientWidth * 2 + gap >= m4.clientWidth) {\n if (behavior === 'normal' && continual) {\n container.append(cloneElement());\n }\n } else {\n m4.s.options.continual = false;\n }\n}\n\n// 設定動畫影格\nfunction keyframes(m4) {\n const { behavior, direction, continual } = m4.s.options;\n let framesObj = {};\n // 判斷模式\n switch (behavior) {\n case 'normal':\n // 判斷方向\n // normal 模式會判斷是否開啟 continual\n let animateFrom, animateTo;\n switch (direction) {\n case 'top':\n animateFrom = continual ? 'translate3d(0,100%,0)' : `translate3d(0,${m4.clientHeight}px,0)`;\n animateTo = continual ? 'translate3d(0,-100%,0)' : 'translate3d(0,-100%,0)';\n framesObj.animate1 = [{ transform: animateFrom }, { transform: animateTo }];\n if (continual) {\n framesObj.animate2 = [{ transform: 'translate3d(0,0,0)' }, { transform: 'translate3d(0,-200%,0)' }];\n }\n break;\n case 'right':\n animateFrom = continual ? 'translate3d(0,0,0)' : 'translate3d(-100%,0,0)';\n animateTo = continual ? 'translate3d(200%,0,0)' : `translate3d(${m4.clientWidth}px,0,0)`;\n framesObj.animate1 = [{ transform: animateFrom }, { transform: animateTo }];\n if (continual) {\n framesObj.animate2 = [{ transform: 'translate3d(-100%,0,0)' }, { transform: 'translate3d(100%,0,0)' }];\n }\n break;\n case 'bottom':\n animateFrom = continual ? 'translate3d(0,-100%,0)' : 'translate3d(0,-100%,0)';\n animateTo = continual ? 'translate3d(0,100%,0)' : `translate3d(0,${m4.clientHeight}px,0)`;\n framesObj.animate1 = [{ transform: animateFrom }, { transform: animateTo }];\n if (continual) {\n framesObj.animate2 = [{ transform: 'translate3d(0,-200%,0)' }, { transform: 'translate3d(0,0,0)' }];\n }\n break;\n case 'left':\n animateFrom = continual ? 'translate3d(100%,0,0)' : `translate3d(${m4.clientWidth}px,0,0)`;\n animateTo = continual ? 'translate3d(-100%,0,0)' : 'translate3d(-100%,0,0)';\n framesObj.animate1 = [{ transform: animateFrom }, { transform: animateTo }];\n if (continual) {\n framesObj.animate2 = [{ transform: 'translate3d(0,0,0)' }, { transform: 'translate3d(-200%,0,0)' }];\n }\n break;\n }\n break;\n // 來回模式\n case 'alternate':\n // 判斷方向\n switch (direction) {\n case 'top':\n framesObj.animate1 = [{ transform: `translate3d(0,calc(${m4.clientHeight}px - 100%),0)` }, { transform: `translate3d(0,0,0)` }, { transform: `translate3d(0,calc(${m4.clientHeight}px - 100%),0)` }];\n break;\n case 'right':\n framesObj.animate1 = [{ transform: `translate3d(0,0,0)` }, { transform: `translate3d(calc(-100% + ${m4.clientWidth}px),0,0)` }, { transform: `translate3d(0,0,0)` }];\n break;\n case 'bottom':\n framesObj.animate1 = [{ transform: `translate3d(0,0,0)` }, { transform: `translate3d(0,calc(${m4.clientHeight}px - 100%),0)` }, { transform: `translate3d(0,0,0)` }];\n break;\n case 'left':\n framesObj.animate1 = [{ transform: `translate3d(calc(-100% + ${m4.clientWidth}px),0,0)` }, { transform: `translate3d(0,0,0)` }, { transform: `translate3d(calc(-100% + ${m4.clientWidth}px),0,0)` }];\n break;\n }\n break;\n case 'endStop':\n // 判斷方向\n switch (direction) {\n case 'top':\n framesObj.animate1 = [{ transform: `translate3d(0,${m4.clientHeight}px,0)` }, { transform: `translate3d(0,0,0)` }];\n break;\n case 'right':\n framesObj.animate1 = [{ transform: `translate3d(-100%,0,0)` }, { transform: `translate3d(0,0,0)` }];\n break;\n case 'bottom':\n framesObj.animate1 = [{ transform: `translate3d(0,-100%,0)` }, { transform: `translate3d(0,calc(${m4.clientHeight}px - 100%),0)` }];\n break;\n case 'left':\n framesObj.animate1 = [{ transform: `translate3d(${m4.clientWidth}px,0,0)` }, { transform: `translate3d(calc(${m4.clientWidth}px - 100%),0,0)` }];\n break;\n }\n break;\n }\n return framesObj;\n}\n\nfunction debounce(func) {\n let timer;\n return function (event) {\n if (timer) clearTimeout(timer);\n timer = setTimeout(func, 200, event);\n };\n}\n\nclass Marquee4 extends HTMLElement {\n constructor() {\n super();\n this.initialize = false;\n }\n static get observedAttributes() {\n return [];\n }\n attributeChangedCallback(attr, oldVal, newVal) { }\n connectedCallback() {\n if (this.initialize) return;\n this.initialize = true;\n this.#create();\n }\n #create() {\n const options = {\n direction: this.getAttribute('direction') || configs.marquee4.SETTINGS.direction, // up / down / left / right\n behavior: this.getAttribute('behavior') || configs.marquee4.SETTINGS.behavior, // normal / alternate / endStop\n duration: Number(this.getAttribute('duration')) || configs.marquee4.SETTINGS.duration, // ms\n durationBreakpoints: getBreakpoints(this) || configs.marquee4.SETTINGS.durationBreakpoints,\n autoplay: this.getAttribute('autoplay') || configs.marquee4.SETTINGS.autoplay, // normal / alternate / endStop\n pauseOnMouseenter: this.getAttribute('pauseOnMouseEnter') ? (this.getAttribute('pauseOnMouseEnter') === 'true' ? true : false) : configs.marquee4.SETTINGS.pauseOnMouseenter, // true / false\n continual: this.getAttribute('continual') ? (this.getAttribute('continual') === 'true' ? true : false) : configs.marquee4.SETTINGS.continual, // true / false\n gap: Number(this.getAttribute('gap')) || configs.marquee4.SETTINGS.gap,\n };\n this.s = {};\n this.s.options = options;\n this.s.nowDuration = getDuration(this);\n createAnimateWrap(this);\n this.#init();\n }\n #init() {\n const { direction, continual, gap } = this.s.options;\n // 方向為左/右\n switch (direction) {\n case 'left':\n case 'right':\n this.style.cssText = `--continual-gap: ${gap}px;`;\n break;\n case 'top':\n case 'bottom':\n if (continual) {\n this.style.cssText = `height: ${this.s.animateEl.clientHeight}px;--continual-gap: ${gap}px;`;\n } else {\n this.style.cssText = `min-height: ${this.s.animateEl.clientHeight}px;--continual-gap: ${gap}px;`;\n }\n break;\n }\n this.#animation();\n this.#event();\n if (continual) {\n this.classList.add(`continual`);\n }\n this.classList.add('m4-initialize');\n }\n #animation() {\n const m4 = this;\n const { direction, behavior, duration, autoplay, pauseOnMouseenter, continual } = m4.s.options;\n let playDelay; //跑馬燈自動撥放開始前的延遲時間\n function animateInit() {\n // 判斷模式\n switch (behavior) {\n case 'normal':\n m4.s.animateEl.style.transform = `${keyframes(m4).animate1[0].transform}`;\n m4.s.animation = m4.s.animateEl.animate(keyframes(m4).animate1, {\n duration: m4.s.nowDuration,\n iterations: Infinity,\n });\n if (continual) {\n m4.s.cloneAnimateEl.style.transform = `${keyframes(m4).animate2[0].transform}`;\n m4.s.cloneAnimation = m4.s.cloneAnimateEl.animate(keyframes(m4).animate2, {\n duration: m4.s.nowDuration,\n delay: -m4.s.nowDuration / 2,\n iterations: Infinity,\n });\n }\n break;\n case 'alternate':\n let moveDistance; //移動的距離\n let averageDuration; //平均速率\n // 進場的keyframe\n function enterKeyframes() {\n let framesArr = [];\n switch (direction) {\n case 'top':\n moveDistance = Math.abs(m4.s.animateEl.scrollHeight - m4.clientHeight);\n averageDuration = parseInt(m4.s.nowDuration / (moveDistance * 2)) * m4.s.animateEl.scrollHeight;\n framesArr = [{ transform: `translate3d(0,${m4.clientHeight}px,0)` }, { transform: `translate3d(0,calc(${m4.clientHeight}px - 100%),0)` }];\n break;\n case 'right':\n moveDistance = Math.abs(m4.s.animateEl.scrollWidth - m4.clientWidth);\n averageDuration = parseInt(m4.s.nowDuration / (moveDistance * 2)) * m4.s.animateEl.scrollWidth;\n framesArr = [{ transform: `translate3d(-100%,0,0)` }, { transform: `translate3d(0,0,0)` }];\n break;\n case 'bottom':\n moveDistance = Math.abs(m4.s.animateEl.scrollHeight - m4.clientHeight);\n averageDuration = parseInt(duration / (moveDistance * 2)) * m4.s.animateEl.scrollHeight;\n framesArr = [{ transform: `translate3d(0,-100%,0)` }, { transform: `translate3d(0,0,0)` }];\n break;\n case 'left':\n moveDistance = Math.abs(m4.s.animateEl.scrollWidth - m4.clientWidth);\n averageDuration = parseInt(duration / (moveDistance * 2)) * m4.s.animateEl.scrollWidth;\n framesArr = [{ transform: `translate3d(${m4.clientWidth}px,0,0)` }, { transform: `translate3d(calc(-100% + ${m4.clientWidth}px),0,0)` }];\n break;\n }\n return framesArr;\n }\n // 跑馬燈範圍高度大於內容高度或是方向為左/右時\n if (m4.clientHeight > m4.s.animateEl.scrollHeight || direction === 'left' || direction === 'right') {\n m4.s.animateEl.style.transform = `${enterKeyframes()[0].transform}`;\n const enterAnimate = m4.s.animateEl.animate(enterKeyframes(), {\n duration: averageDuration,\n fill: 'forwards',\n });\n enterAnimate.finished.then(() => {\n m4.s.animation = m4.s.animateEl.animate(keyframes(m4).animate1, {\n duration: m4.s.nowDuration,\n iterations: Infinity,\n });\n });\n }\n if (m4.s.animation) {\n m4.s.animation.ready.then(() => {\n m4.s.animateEl.classList.add('ready');\n });\n }\n break;\n case 'endStop':\n m4.s.animateEl.style.transform = `${keyframes(m4).animate1[0].transform}`;\n m4.s.animation = m4.s.animateEl.animate(keyframes(m4).animate1, {\n duration: m4.s.nowDuration,\n fill: 'forwards',\n });\n break;\n }\n m4.s.animateEl.classList.add('start');\n if (autoplay === false) {\n m4.s.animateEl.classList.remove('start');\n m4.s.animation.cancel();\n }\n }\n clearTimeout(playDelay);\n playDelay = setTimeout(\n () => {\n animateInit();\n },\n autoplay ? autoplay : 0,\n );\n\n // mouseenter/leave Event\n m4.addEventListener('mouseenter', function () {\n if (m4.s.animation && pauseOnMouseenter && m4.s.animation.playState === 'running') {\n m4.pause();\n }\n });\n m4.addEventListener('mouseleave', function () {\n if (m4.s.animation && pauseOnMouseenter && m4.s.animation.playState === 'paused') {\n m4.play();\n }\n });\n }\n #event() {\n const m4 = this;\n function updateDuration() {\n const startTime = m4.s.animation.startTime;\n const cloneStartTime = m4.s.cloneAnimation ? m4.s.cloneAnimation.startTime : null;\n m4.s.nowDuration = getDuration(m4);\n m4.s.animation.cancel();\n if (m4.s.cloneAnimation) {\n m4.s.cloneAnimation.cancel();\n }\n m4.s.animation = m4.s.animateEl.animate(keyframes(m4).animate1, {\n duration: m4.s.nowDuration,\n iterations: Infinity,\n });\n m4.s.animation.startTime = startTime;\n if (m4.s.cloneAnimation) {\n m4.s.cloneAnimation = m4.s.cloneAnimateEl.animate(keyframes(m4).animate2, {\n duration: m4.s.nowDuration,\n delay: -m4.s.nowDuration / 2,\n iterations: Infinity,\n });\n m4.s.cloneAnimation.startTime = cloneStartTime;\n }\n }\n window.addEventListener('resize', debounce(updateDuration));\n }\n play() {\n this.s.animation.play();\n this.s.animateEl.classList.add('start');\n if (this.s.options.continual) {\n this.s.cloneAnimation.play();\n this.s.cloneAnimateEl.classList.add('start');\n }\n }\n pause() {\n this.s.animation.pause();\n if (this.s.options.continual) {\n this.s.cloneAnimation.pause();\n }\n }\n}\n\n// define custom element\n customElements.define('marquee-el', Marquee4);\n\nexport default Marquee4;\n","import { configs } from '../configs'\nimport { isNodeList, insert } from '../commons'\n\n// debounce\nconst debounce = function (func, time) {\n let timer;\n return function (event) {\n if (timer) clearTimeout(timer);\n timer = setTimeout(func, 200, event);\n };\n};\n\n// add class\nconst addClass = (target, className) => {\n if (isNodeList(target)) {\n target.forEach(el => {\n el.classList.add(className);\n });\n return;\n }\n\n target.classList.add(className);\n};\n\n// remove class\nconst removeClass = (target, className) => {\n if (isNodeList(target)) {\n target.forEach(el => {\n el.classList.remove(className);\n });\n return;\n }\n\n target.classList.remove(className);\n};\n\n// 拖拉類型控制\nclass dragControl {\n constructor(el) {\n this.$element = el;\n this.option = el.s.option.drag;\n this.#init();\n }\n\n // 初始化\n #init() {\n const $this = this;\n if (!$this.$element) return;\n\n $this.$container = $this.$element.querySelector('.drag-container');\n $this.$wrapper = $this.$container.querySelector('.wrapper');\n\n // scroll & resize event\n const updateEvent = () => {\n $this.#scrollerDetect();\n $this.#buttonDetect();\n };\n\n // scroll event handle\n $this.$wrapper.removeEventListener('scroll', updateEvent);\n $this.$wrapper.addEventListener('scroll', updateEvent);\n\n // resize event handle\n window.removeEventListener('resize', debounce(updateEvent));\n window.addEventListener('resize', debounce(updateEvent));\n\n // 左右拖拉事件綁定,若為 collapse 則強制啟用 draggable\n if ($this.option.draggable || $this.$element.s.type == 'collapse') $this.#bindDragEvent();\n // 左右箭頭事件綁定,若為 collapse 則不輸出 .navigation\n if ($this.option.navigation && $this.$element.s.type !== 'collapse') {\n $this.$container.insertAdjacentHTML(\n insert.prepend,\n `<div class=\"navigation\">\n <div class=\"button prev\">\n <div></div>\n </div>\n <div class=\"button next\">\n <div></div>\n </div>\n </div>`,\n );\n\n $this.$button = $this.$container?.querySelectorAll('.button');\n $this.#bindButtonEvent();\n }\n // 卷軸位置判斷\n $this.#scrollerDetect();\n // 隱藏按鈕判斷\n $this.#buttonDetect();\n // 選項事件綁定\n $this.#bindItemEvent();\n // 更新 active 位置\n $this.update();\n }\n // 更新 active 位置\n update(element) {\n const $wrapper = this.$element.querySelector('.wrapper');\n const $active = $wrapper?.querySelector('.active');\n if ($active) {\n // 移動至 active class 處\n const moveDistance = $active.offsetLeft + $active.getBoundingClientRect().width / 2 - $wrapper.getBoundingClientRect().width / 2;\n $wrapper.scrollTo({\n left: moveDistance,\n behavior: 'smooth',\n });\n }\n }\n // 左右箭頭事件綁定\n #bindButtonEvent() {\n const $this = this;\n const { $wrapper, $button } = $this;\n // button event\n const buttonEvent = function () {\n const type = this.classList.contains('next');\n const fix = parseInt($wrapper.getBoundingClientRect().width * 0.7);\n\n $wrapper.scrollTo({\n left: type ? $wrapper.scrollLeft + fix : $wrapper.scrollLeft - fix,\n behavior: 'smooth',\n });\n\n setTimeout(() => {\n $this.#buttonDetect();\n }, 100);\n };\n\n // button event handle\n $button.forEach($el => {\n $el.removeEventListener('click', buttonEvent);\n $el.addEventListener('click', buttonEvent);\n });\n }\n // 左右拖拉事件綁定\n #bindDragEvent() {\n const { $wrapper } = this;\n\n // 是否為點擊狀態\n let isDown = false;\n // 是否為移動狀態\n let isMoved = false;\n // 起始 X 軸數值\n let startX = 0;\n // 卷軸數值\n let scrollLeft = 0;\n\n // mousedown event\n const mousedownEvent = function (event) {\n event.preventDefault();\n\n isMoved = false;\n isDown = true;\n\n startX = event.pageX - $wrapper.offsetLeft;\n scrollLeft = $wrapper.scrollLeft;\n };\n\n // mousedown event handle\n $wrapper.removeEventListener('mousedown', mousedownEvent);\n $wrapper.addEventListener('mousedown', mousedownEvent);\n\n // mouseleave event\n const mouseleaveEvent = function () {\n isMoved = false;\n isDown = false;\n };\n\n // mouseleave event handle\n $wrapper.removeEventListener('mouseleave', mouseleaveEvent);\n $wrapper.addEventListener('mouseleave', mouseleaveEvent);\n\n // mouseup event\n const mouseupEvent = function (event) {\n event.preventDefault();\n isDown = false;\n };\n\n // mouseup event handle\n $wrapper.removeEventListener('mouseup', mouseupEvent);\n $wrapper.addEventListener('mouseup', mouseupEvent);\n\n // mousemove event\n const mousemoveEvent = function (event) {\n event.preventDefault();\n\n isMoved = true;\n\n if (!isDown) return;\n\n const x = event.pageX - $wrapper.offsetLeft;\n const walk = x - startX;\n $wrapper.scrollTo({\n left: scrollLeft - walk,\n });\n };\n\n // mousemove event handle\n $wrapper.removeEventListener('mousemove', mousemoveEvent);\n $wrapper.addEventListener('mousemove', mousemoveEvent);\n\n const reset = function (event) {\n if (isMoved) {\n event.preventDefault();\n event.stopPropagation();\n }\n };\n\n $wrapper.querySelectorAll('a').forEach($el => {\n $el.removeEventListener('click', reset);\n $el.addEventListener('click', reset);\n });\n }\n // 卷軸位置判斷\n #scrollerDetect() {\n const { $container, $wrapper } = this;\n\n const gate = $wrapper.scrollWidth - $wrapper.clientWidth;\n const value = Math.round($wrapper.scrollLeft);\n\n if (gate <= 0) return;\n\n addClass($container, 'scrollable');\n // console.log(value,gate)\n // 最前\n if (value == 0) {\n removeClass($container, 'scrollable');\n addClass($wrapper, 'start');\n removeClass($wrapper, 'end');\n }\n // 最後\n // 2025.04.23 防止誤差 修正\n else if (value + 1 >= gate) {\n removeClass($container, 'scrollable');\n removeClass($wrapper, 'start');\n addClass($wrapper, 'end');\n }\n // 中間\n else {\n addClass($wrapper, 'center');\n removeClass($wrapper, 'start');\n removeClass($wrapper, 'end');\n }\n }\n // 隱藏按鈕判斷\n #buttonDetect() {\n const { $wrapper, $button, $element } = this;\n\n if (!$button) return;\n\n const gate = $wrapper.scrollWidth - $wrapper.clientWidth;\n const value = $wrapper.scrollLeft;\n // console.log(gate,$wrapper.scrollWidth, $wrapper.clientWidth)\n if (gate <= 0) {\n addClass($button, 'hide');\n removeClass($button, 'active');\n addClass($element, 'noScrollable');\n return;\n }\n\n if (gate > 0) {\n addClass($button, 'active');\n removeClass($element, 'noScrollable');\n }\n\n // 最前\n if (value == 0) {\n $button.forEach($el => {\n if ($el.classList.contains('next')) {\n removeClass($el, 'hide');\n return;\n }\n\n addClass($el, 'hide');\n });\n }\n // 最後\n // 2025.04.23 防止誤差 修正\n else if (value + 1 >= gate) {\n $button.forEach($el => {\n if ($el.classList.contains('next')) {\n addClass($el, 'hide');\n return;\n }\n\n removeClass($el, 'hide');\n });\n }\n // 中間\n else {\n removeClass($button, 'hide');\n }\n }\n // 選項事件綁定\n #bindItemEvent() {\n const { $element } = this;\n\n const itemEvent = $el => {\n if (this.option.selected) {\n const selectOption = $el.getAttribute('data-option').trim();\n $element.setAttribute('m4-status', selectOption);\n }\n };\n\n function clickHandler() {\n itemEvent(this);\n }\n\n this.$container.querySelectorAll('.item').forEach(el => {\n el.removeEventListener('click', clickHandler);\n el.addEventListener('click', clickHandler);\n });\n }\n}\n\n// 收合類型控制\nclass collapseControl {\n constructor(el) {\n this.$element = el;\n this.option = el.s.option.collapse;\n this.#init();\n }\n\n // 初始化\n #init() {\n if (!this.$element) return;\n\n this.$container = this.$element.querySelector('.collapse-container');\n this.$wrapper = this.$container.querySelector('.wrapper');\n\n // 隱藏按鈕判斷\n if (this.#buttonDetect()) {\n // 展開箭頭事件綁定\n this.#bindButtonEvent();\n }\n\n // 選項事件綁定\n this.#bindItemEvent();\n }\n // 隱藏按鈕判斷\n #buttonDetect() {\n const $drag = this.$element.querySelector('.drag-container');\n const $wrapper = $drag.querySelector('.wrapper');\n\n if ($wrapper.scrollWidth - $wrapper.clientWidth > 0) {\n $drag.insertAdjacentHTML(insert.append, `<div class=\"open-collapse\"></div>`);\n this.$button = $drag.querySelector('.open-collapse');\n return true;\n }\n\n return false;\n }\n // 展開箭頭事件綁定\n #bindButtonEvent() {\n const { $element, $button } = this;\n\n // button event\n const buttonEvent = function () {\n if ($element.classList.contains('expand')) {\n $element.classList.remove('expand');\n } else {\n $element.classList.add('expand');\n }\n };\n\n // button event handle\n $button.removeEventListener('click', buttonEvent);\n $button.addEventListener('click', buttonEvent);\n }\n // 選項事件綁定\n #bindItemEvent() {\n const { $element } = this;\n\n const itemEvent = ($el, collapse) => {\n if (collapse) {\n if ($element?.classList.contains('expand')) {\n $element?.classList.remove('expand');\n } else {\n $element?.classList.add('expand');\n }\n }\n\n if (this.option.selected) {\n const selectOption = $el.getAttribute('data-option').trim();\n $element.setAttribute('m4-status', selectOption);\n }\n };\n\n function clickHandler() {\n itemEvent(this, true);\n }\n\n this.$container.querySelectorAll('.item').forEach(el => {\n el.removeEventListener('click', clickHandler);\n el.addEventListener('click', clickHandler);\n });\n }\n}\n\n// create template method\nconst createTemplate = m4 => {\n const { type, option, originalDomString } = m4.s;\n\n const $storage = document.createElement('div');\n if (type == 'drag') {\n $storage.innerHTML = configs.multipurpose4.TEMPLATE[type]().trim();\n\n const $wrapper = $storage.querySelector('.drag-container .wrapper');\n $wrapper.insertAdjacentHTML(insert.append, originalDomString);\n }\n if (type == 'collapse') {\n $storage.innerHTML = configs.multipurpose4.TEMPLATE[type](option?.collapse).trim();\n // drag\n const $container = $storage.querySelector('.drag-container .wrapper');\n $container.insertAdjacentHTML(insert.append, originalDomString);\n // collapse\n const $model = $storage.querySelector('.collapse-container .wrapper');\n $model.insertAdjacentHTML(insert.append, originalDomString);\n }\n if (type == 'dropdown') {\n $storage.innerHTML = configs.multipurpose4.TEMPLATE[type](option?.dropdown).trim();\n\n const $dropdown = $storage.querySelector('dropdown-el');\n $dropdown.insertAdjacentHTML(insert.append, originalDomString);\n }\n\n return $storage.children;\n};\n\nclass Multipurpose4 extends HTMLElement {\n constructor() {\n super();\n this.initialize = false;\n this.__events__ = {};\n this.s = {};\n this.s.originalDomString = this.innerHTML.trim().replace(/\\n/g, '');\n this.previousWidth = window.innerWidth;\n }\n static get observedAttributes() {\n return ['m4-type', 'm4-status'];\n }\n attributeChangedCallback(attr, oldVal, newVal) {\n switch (attr) {\n case 'm4-type':\n if (oldVal === null || oldVal === newVal) return;\n this.s.type = newVal;\n this.#distribute();\n break;\n case 'm4-status':\n if (oldVal === newVal) return;\n const type = this.getAttribute('m4-type');\n if (type !== 'drag' && type !== 'collapse') return;\n // 左右拖拉\n this.querySelectorAll('.drag-container .item').forEach(el => {\n el.classList.remove('active');\n });\n this.querySelector(`.drag-container .item[data-option=\"${newVal}\"]`)?.classList.add('active');\n // 展開選項\n if (type === 'collapse') {\n this.querySelectorAll('.collapse-container .item').forEach(el => {\n el.classList.remove('active');\n });\n this.querySelector(`.collapse-container .item[data-option=\"${newVal}\"]`)?.classList.add('active');\n }\n this.constructor.drag?.update(this);\n break;\n }\n }\n connectedCallback() {\n if (this.initialize || this.classList.contains('m4-init')) return;\n this.initialize = true;\n this.#init();\n }\n update() {\n // 斷點設定\n this.#breakpoint();\n }\n #init() {\n let customize = {};\n\n if (!this.hasAttribute('m4-value')) {\n this.setAttribute('m4-value', '');\n }\n\n this.s.type = this.getAttribute('m4-type') ?? configs.multipurpose4.SETTINGS.type;\n if (this.hasAttribute('m4-option')) {\n customize = this.getAttribute('m4-option') ? JSON.parse(this.getAttribute('m4-option')) : {};\n this.removeAttribute('m4-option');\n }\n\n const updateEvent = event => {\n if (event.type === 'resize') {\n if (window.innerWidth === this.previousWidth) return;\n this.previousWidth = window.innerWidth;\n }\n this.update();\n };\n\n // resize event handle\n window.removeEventListener('resize', debounce(updateEvent));\n window.addEventListener('resize', debounce(updateEvent));\n\n this.s.option = {};\n this.s.option.drag = Object.assign({}, configs.multipurpose4.SETTINGS.drag, customize?.drag);\n this.s.option.collapse = Object.assign({}, configs.multipurpose4.SETTINGS.collapse, customize?.collapse);\n this.s.option.dropdown = Object.assign({}, configs.multipurpose4.SETTINGS.dropdown, customize?.dropdown);\n this.s.option.breakpoint = Object.assign({}, configs.multipurpose4.SETTINGS.breakpoint, customize?.breakpoint);\n\n this.#render();\n }\n #render() {\n this.classList.add('m4-init');\n // 斷點設定\n this.#breakpoint();\n }\n // 斷點設定\n #breakpoint() {\n const obj = Object.keys(this.s.option.breakpoint);\n if (!obj.length) {\n this.#distribute();\n return;\n }\n obj\n .map(keys => Number(keys))\n .sort((a, b) => b - a)\n .some(point => {\n if (window.innerWidth >= point) {\n this.s.type = this.s.option.breakpoint[point]?.type;\n this.setAttribute('m4-type', this.s.type);\n this.s.option.drag = Object.assign({}, this.s.option.drag, this.s.option.breakpoint[point]?.drag);\n this.s.option.collapse = Object.assign({}, this.s.option.collapse, this.s.option.breakpoint[point]?.collapse);\n this.s.option.dropdown = Object.assign({}, this.s.option.dropdown, this.s.option.breakpoint[point]?.dropdown);\n }\n this.#distribute();\n return window.innerWidth >= point;\n });\n }\n // check type\n #distribute() {\n const { type } = this.s;\n\n this.innerHTML = '';\n [...createTemplate(this)].forEach(el => {\n this.append(el);\n });\n\n // 新增預設 active class\n const dragContainer = this.querySelector(`.drag-container .item[data-option=\"${this.getAttribute('m4-status')}\"]`);\n const collapseContainer = this.querySelector(`.collapse-container .item[data-option=\"${this.getAttribute('m4-status')}\"]`);\n dragContainer?.classList.add('active');\n collapseContainer?.classList.add('active');\n\n switch (type) {\n case 'drag':\n this.constructor.drag = new dragControl(this);\n break;\n case 'collapse':\n this.constructor.drag = new dragControl(this);\n this.constructor.collapse = new collapseControl(this);\n break;\n case 'dropdown':\n // this.#dropdown();\n break;\n }\n this.constructor.drag?.update(this);\n }\n}\n\ncustomElements.define('multipurpose-nav', Multipurpose4);\n\nexport default Multipurpose4;\n","import { configs } from '../configs'\nimport { EVENTS, isElement } from '../commons'\n\n// 第六版\nclass Tab4 extends HTMLElement {\n // 定義組件的初始狀態\n constructor(el, option) {\n super();\n }\n // 當組件的屬性被更改時會被呼叫\n static get observedAttributes() {\n return ['t4-active'];\n }\n attributeChangedCallback(attr, oldVal, newVal) {\n if (attr === 't4-active') {\n // change function\n if (oldVal !== newVal) {\n this.#stateChange(newVal);\n }\n }\n }\n connectedCallback() {\n // 防呆\n if (!this.classList.contains('t4-initialize')) {\n this.#create();\n }\n }\n #create() {\n const name = this.getAttribute('t4-name');\n const { SETTINGS } = configs.tab4;\n // 防呆!\n if (document.querySelectorAll(`tab-el[t4-name=${name}]`).length > 1) {\n console.warn(name, '名字有重複喔!!!');\n }\n\n this.t = {\n tabs: [],\n name: name,\n tabPanels: [...this.children],\n activeTab: '',\n stepOutput: SETTINGS.stepOutput,\n recordUrl: this.getAttribute('t4-url') || SETTINGS.recordUrl,\n type: this.getAttribute('t4-type') || SETTINGS.type,\n display: this.getAttribute('t4-display') || SETTINGS.display,\n defaultPage: this.getAttribute('t4-defaultPage') || SETTINGS.defaultPage,\n anchor: this.getAttribute('t4-anchor'),\n gap: this.getAttribute('t4-gap') || SETTINGS.anchorGap,\n transition: {\n duration: this.getAttribute('t4-duration') || SETTINGS.transition.duration,\n timing: this.getAttribute('t4-timing') || SETTINGS.transition.timing,\n delay: this.getAttribute('t4-delay') || SETTINGS.transition.delay,\n },\n tabGroup: this.getAttribute('t4-group') || SETTINGS.tabGroup,\n };\n this.__events__ = {};\n this.t.tabs = this.#tabSet();\n this.t.step = document.querySelector(`[t4-control=\"${this.t.name}\"]${this.t.stepOutput}`);\n\n this.#init();\n }\n\n #init() {\n // 初始化設定\n this.t.activeTab = this.t.defaultPage;\n if (this.t.display === 'swiper') {\n this.#createSwiper();\n }\n if (this.t.recordUrl) {\n const params = new URLSearchParams(document.location.search);\n const val = params.get(this.t.name);\n\n //2024.9.9 Scarlett\n const matchingTabs = document.querySelectorAll(`[t4-name=\"${this.t.name}\"] .tab-panel[t4-id=\"${val}\"]`);\n\n // 如果網址中有對應的參數,載入對應的頁籤\n if (val && matchingTabs.length === 1) {\n this.t.activeTab = val;\n } else {\n console.warn(`沒有${val}這頁喔!!`);\n }\n }\n this.setActiveTab(this.t.activeTab);\n // 設定防呆\n this.classList.add('t4-initialize');\n this.#resizeTab();\n }\n // 第一關 判斷數量以及id設定\n #tabSet() {\n const { t } = this;\n const tabs = Array.from(document.querySelectorAll(`[t4-control=\"${t.name}\"][t4-role=\"tab\"]`));\n // 防呆\n if (t.type === 'normal' && t.tabGroup === 'true') {\n // 是頁籤且是群組 判斷數量是否相符\n if (t.tabPanels.length !== tabs.length) {\n console.warn('按鈕與內容數量不同喔', t.tabPanels.length, tabs.length);\n }\n }\n if (t.tabGroup === 'true') {\n // 流水號\n t.tabPanels.forEach((el, index) => el.setAttribute('t4-id', index));\n } else {\n // 單一頁籤\n t.tabPanels.forEach(el => {\n if (!el.getAttribute('t4-id')) {\n console.warn(el, '請幫我設定id!!');\n }\n });\n }\n return tabs;\n }\n // 第二關 id命名提醒\n #getTabIndex(id) {\n const { t } = this;\n const tabPanelsWithId = t.tabPanels.filter(panel => panel.getAttribute('t4-id') === id);\n // 防呆!\n if (tabPanelsWithId.length > 1) {\n console.warn('有兩個相同id設定', tabPanelsWithId);\n }\n\n // 取得頁籤本人\n const tabPanel = tabPanelsWithId[0];\n if (tabPanel) {\n const tabIndex = t.tabPanels.indexOf(tabPanel);\n return tabIndex;\n } else {\n console.warn(`找不到t4-id為${id}的頁籤`);\n return 0;\n }\n }\n\n #createSwiper() {\n const swiperContainer = document.createElement('div');\n swiperContainer.classList.add('swiper-container');\n\n const swiperWrapper = document.createElement('div');\n swiperWrapper.classList.add('swiper-wrapper');\n\n this.t.tabPanels.forEach(slide => {\n swiperWrapper.appendChild(slide.cloneNode(true));\n });\n\n // 更新 t.tabPanels\n this.t.tabPanels = [...swiperWrapper.children];\n\n swiperContainer.appendChild(swiperWrapper);\n this.innerHTML = ''; // 清空原有的內容\n this.appendChild(swiperContainer);\n // 執行 Swiper 效果的相關初始化\n this.#initSwiper();\n }\n #initSwiper() {\n const sContainer = this.querySelector('.swiper-container');\n const sWrapper = this.querySelector('.swiper-wrapper');\n const tabPanels = this.t.tabPanels;\n\n // 設定容器和 wrapper 的樣式\n sContainer.style.overflow = 'hidden';\n sWrapper.style.display = 'flex';\n\n // 設定 wrapper 的寬度\n const totalWidth = tabPanels.length * 100 + '%';\n sWrapper.style.width = totalWidth;\n }\n\n #addUrl(panel) {\n const { t } = this;\n\n if (t.recordUrl === 'true') {\n const params = new URLSearchParams(document.location.search);\n params.set(t.name, panel);\n const newUrl = `${window.location.pathname}?${params.toString()}`;\n\n // 使用 replaceState 修改瀏覽器歷史記錄\n history.replaceState({ t4Id: panel }, '', newUrl);\n }\n }\n\n // 執行函式\n // 移動至指定位置\n #eventAnchor() {\n const gap = parseInt(this.t.gap, 10);\n const pageYOffset = window.pageYOffset;\n const targetOffset = this.getBoundingClientRect().top;\n const changeOffset = targetOffset + pageYOffset - gap;\n this.#goAnchor(changeOffset);\n }\n // 移動\n #goAnchor(val) {\n window.scrollTo({\n top: val,\n behavior: 'smooth',\n });\n }\n // 步驟狀態\n #step(val) {\n let current = parseInt(val, 10) + 1;\n this.t.step.textContent = `${current}`;\n this.t.step.setAttribute('now-page', current);\n }\n // next 按鈕狀態\n #btnNextState(newPage) {\n const next = document.querySelectorAll(`[t4-role=\"next\"][t4-control=\"${this.t.name}\"]`);\n\n const isSinglePage = this.t.tabPanels.length === 1;\n const isLastPage = newPage === this.t.tabPanels.length - 1;\n\n next.forEach(btn => {\n if (isSinglePage || isLastPage) {\n btn.setAttribute('disabled', '');\n } else {\n btn.removeAttribute('disabled');\n }\n });\n }\n // prev 按鈕狀態\n #btnPrevState(newPage) {\n const prev = document.querySelectorAll(`[t4-role=\"prev\"][t4-control=\"${this.t.name}\"]`);\n\n const isSinglePage = this.t.tabPanels.length === 1;\n const isFirstPage = newPage === 0;\n\n prev.forEach(btn => {\n if (isSinglePage || isFirstPage) {\n btn.setAttribute('disabled', '');\n } else {\n btn.removeAttribute('disabled');\n }\n });\n }\n // 頁籤狀態\n #tabState(newPage, tabId) {\n if (this.t.tabGroup === 'true') {\n this.t.tabs.forEach((tab, i) => {\n if (i == newPage) {\n tab.setAttribute('aria-selected', true);\n } else {\n tab.setAttribute('aria-selected', false);\n }\n });\n } else {\n // 自訂 id 的話...\n this.t.tabs.forEach((tab, i) => {\n if (tab.getAttribute('t4-id') === tabId) {\n tab.setAttribute('aria-selected', true);\n } else {\n tab.setAttribute('aria-selected', false);\n }\n });\n }\n }\n // 第三關各種元件判斷 及 執行\n #isTrue(fun, val, val2) {\n switch (fun) {\n case 'step':\n if (isElement(this.t.step)) {\n this.#step(val);\n }\n break;\n case 'eventAnchor':\n if (this.t.anchor) {\n this.#eventAnchor();\n }\n break;\n case 'tabState':\n // 流程沒有按鈕 客制的話....\n if (this.t.type == 'normal') {\n // 頁籤按鈕狀態\n this.#tabState(val, val2);\n }\n break;\n case 'btnState':\n this.#btnNextState(val);\n this.#btnPrevState(val);\n break;\n case 'tabUrl':\n if (this.t.recordUrl === 'true') {\n this.#addUrl(val);\n }\n break;\n default:\n console.warn('請增加判斷,謝謝');\n break;\n }\n }\n // 消失動畫\n #animationHide(index) {\n const { t } = this;\n const { duration, timing, delay } = this.t.transition;\n const tabPanel = t.tabPanels[index];\n // 動畫 消失 動畫 出現 搭配 settimeout 使用\n tabPanel.classList.remove('show');\n tabPanel.classList.add('hide');\n switch (t.display) {\n case 'fade':\n tabPanel.style.cssText = 'display: none; opacity: 0;';\n break;\n case 'slide':\n tabPanel.style.cssText = 'display: none; opacity: 0; max-height: unset;';\n break;\n case 'swiper':\n break;\n default:\n tabPanel.style.display = 'none';\n break;\n }\n }\n // 出現動畫\n #animationShow(index) {\n const { duration, timing, delay } = this.t.transition;\n const tabPanel = this.t.tabPanels[index];\n let timer;\n\n tabPanel.classList.add('show');\n tabPanel.classList.remove('hide');\n tabPanel.style.transition = `opacity ${duration}ms ${timing} ${delay}ms`;\n tabPanel.style.display = 'block';\n\n switch (this.t.display) {\n case 'fade':\n tabPanel.style.opacity = '0';\n timer = setTimeout(() => {\n clearTimeout(timer);\n tabPanel.style.opacity = '1';\n }, 100);\n break;\n case 'slide':\n console.warn(this.t.display, '抱歉,好像壞掉了...');\n const clientHeight = tabPanel.offsetHeight;\n tabPanel.style.opacity = '1';\n tabPanel.style.maxHeight = '0';\n timer = setTimeout(() => {\n clearTimeout(timer);\n tabPanel.style.maxHeight = clientHeight + 'px';\n }, 100);\n break;\n case 'swiper':\n tabPanel.style.opacity = '1';\n const sWrapper = this.querySelector('.swiper-wrapper');\n const slideWidth = this.t.tabPanels[0].offsetWidth;\n const translateValue = -index * slideWidth;\n\n sWrapper.style.transition = `transform ${duration}ms ${timing} ${delay}ms`;\n sWrapper.style.transform = `translateX(${translateValue}px)`;\n break;\n default:\n console.warn(this.t.display, '沒有這個效果請自己想辦法!!!!');\n break;\n }\n }\n // 狀態\n #stateChange(tabId) {\n const newTabIndex = this.#getTabIndex(tabId);\n // 通知狀態改變\n this.#isTrue('step', newTabIndex);\n this.#isTrue('btnState', newTabIndex);\n this.#isTrue('tabState', newTabIndex, tabId);\n this.#isTrue('tabUrl', tabId);\n // 觸發自定義事件\n this.emit('change');\n }\n // resize\n #resizeTab() {\n const _this_ = this;\n window.addEventListener(\n 'resize',\n debounce(() => {\n _this_.update();\n }, 1000),\n );\n }\n\n // ------------- 我是分隔線呦 -------------\n // 頁籤切換\n tabClick(clickedTab) {\n const { t } = this;\n // 防呆!! 為了保證數量多餘頁籤時仍可正常執行\n const indexOf = t.tabs.indexOf(clickedTab) % t.tabPanels.length;\n const newTabId = t.tabGroup === 'true' ? String(indexOf) : clickedTab.getAttribute('t4-id');\n\n // 通知頁籤切換\n this.setActiveTab(newTabId);\n\n // 錨點滑動動畫\n setTimeout(() => {\n this.#isTrue('eventAnchor');\n }, t.transition.duration);\n }\n // 外部呼叫方法 $0.setActiveTab(0)\n setActiveTab(id) {\n const { t } = this;\n const defaultID = id === '' ? t.tabPanels[0].getAttribute('t4-id') : id;\n t.activeTab = defaultID;\n this.setAttribute('t4-active', defaultID);\n\n const newTabIndex = this.#getTabIndex(defaultID);\n\n t.tabPanels.forEach((panel, i) => {\n i === newTabIndex ? this.#animationShow(i) : this.#animationHide(i);\n });\n }\n // 外部呼叫方法 $0.goNext()\n goNext() {\n const tabIndex = this.#getTabIndex(this.t.activeTab);\n const nextPage = Math.min(this.t.tabPanels.length - 1, tabIndex + 1);\n const nextPageId = this.t.tabPanels[nextPage].getAttribute('t4-id');\n this.setActiveTab(nextPageId);\n }\n // 外部呼叫方法 $0.goPrev()\n goPrev() {\n const tabIndex = this.#getTabIndex(this.t.activeTab);\n const prevPage = Math.max(0, tabIndex - 1);\n const prevPageId = this.t.tabPanels[prevPage].getAttribute('t4-id');\n this.setActiveTab(prevPageId);\n }\n // 外部呼叫方法 $0.update()\n update() {\n this.t.tabs = this.#tabSet();\n // 事件重綁\n changeEvent();\n console.log('tab update!!!!');\n }\n}\n\nfunction debounce(func, time = 1000) {\n let timer;\n return function (event) {\n if (timer) clearTimeout(timer);\n timer = setTimeout(func, time, event);\n };\n}\n\n// 綁定點擊事件\nfunction changeEvent() {\n const targetElements = document.querySelectorAll('[t4-control]');\n\n document.addEventListener('click', function (event) {\n let isTarget = false;\n for (const targetElement of targetElements) {\n if (targetElement.contains(event.target) || event.target.closest('[t4-control]') === targetElement) {\n isTarget = true;\n break;\n }\n }\n if (isTarget) {\n // event.target 是目標元素或其子層\n const tabControl = event.target.closest('[t4-control]');\n const tabElName = tabControl.getAttribute('t4-control');\n const tabEls = document.querySelectorAll(`tab-el[t4-name=\"${tabElName}\"]`);\n const role = tabControl.getAttribute('t4-role');\n tabEls.forEach(el => {\n switch (role) {\n case 'tab':\n el.tabClick(tabControl);\n break;\n case 'next':\n el.goNext(tabControl);\n break;\n case 'prev':\n el.goPrev(tabControl);\n break;\n default:\n console.warn('你是誰??', tabControl);\n break;\n }\n });\n }\n });\n}\nchangeEvent();\n\nObject.assign(Tab4.prototype, EVENTS);\n\ncustomElements.define('tab-el', Tab4);\n\nexport default Tab4;\n","import { configs } from '../configs'\nimport {\n EVENTS,\n isString,\n isElement,\n isNodeList,\n isElementExist,\n isFunction,\n getElement,\n getAllElements,\n createUid,\n toHTMLElement,\n jsonParse,\n warn,\n error\n} from '../commons'\n\nconst collapseHandle = $wrapper => {\n const { defaultOptions } = $wrapper.collapse;\n const { collapseClass, target, transition } = defaultOptions;\n\n const $target = $wrapper.querySelector(target);\n\n $wrapper.classList.add(collapseClass);\n\n $target.style.height = 0;\n $target.style['transition-property'] = transition.property;\n $target.style['transition-duration'] = transition.duration;\n $target.style['transition-timing-function'] = transition.function;\n $target.style['transition-delay'] = transition.delay;\n $target.style.overflow = 'hidden';\n};\n\nconst expandHandle = $wrapper => {\n const { defaultOptions } = $wrapper.collapse;\n const { collapseClass, target, transition } = defaultOptions;\n\n const $target = $wrapper.querySelector(target);\n const height = $target.children[0].offsetHeight;\n $wrapper.collapse.height = height;\n\n // console.log( height );\n // console.log( $target.children[0].offsetHeight );\n $wrapper.classList.remove(collapseClass);\n\n $target.style.display = 'block';\n $target.style.height = `${height}px`;\n $target.style['transition-property'] = transition.property;\n $target.style['transition-duration'] = transition.duration;\n $target.style['transition-timing-function'] = transition.function;\n $target.style['transition-delay'] = transition.delay;\n $target.style.overflow = 'hidden';\n};\n\nclass Collapse4 {\n constructor(el, options = {}) {\n // 可傳 string 或 element 或 nodeList\n if (!isString(el) && !isElement(el) && !isNodeList(el) && !isElementExist(el)) return;\n\n this.__storage__ = {\n el,\n options,\n };\n\n this.active = 'data-collapse-active'\n this.#create();\n }\n\n #create() {\n const { el, options } = this.__storage__;\n const { SETTINGS, EVENTS } = configs.collapse4;\n\n //wade\n this.elements = options.state == \"not active\" ? getAllElements(el + `:not([${this.active}])`) : getAllElements(el);\n // this.elements = getAllElements(el);\n this.options = Object.assign({}, SETTINGS, options);\n this.__events__ = Object.assign({}, EVENTS);\n\n if (this.options.on) {\n for (const [k, v] of Object.entries(this.options.on)) {\n this.__events__[k] = [v];\n }\n }\n\n this.#init();\n }\n\n #init() {\n const { elements, options } = this;\n\n elements.forEach(el => {\n el.collapse = {};\n el.collapse.instance = this;\n el.collapse.defaultOptions = options;\n el.collapse.methods = {};\n el.collapse.methods.update = this.update;\n //wade\n el.setAttribute(this.active, '')\n this.#trigger(el);\n });\n\n this.emit('init');\n }\n\n #trigger(el) {\n const { options } = this;\n const { collapseClass, block, target, defaultOpen, targetStopPropagation, defaultActiveMark } = options;\n\n // collapse-wrapper\n // collapse-block\n // collapse-target\n\n const $wrapper = el;\n const $target = $wrapper.querySelector(target);\n $wrapper.collapse.height = $target.children[0].offsetHeight;\n\n // const $block = $wrapper.querySelector(block);\n\n // 是否預設全打開\n if (defaultOpen) {\n $target.style.height = `${$target.children[0].offsetHeight}px`;\n $wrapper.classList.remove(collapseClass);\n } else {\n if (!$wrapper.classList.contains(defaultActiveMark) && !$wrapper.hasAttribute(defaultActiveMark)) {\n $wrapper.classList.add(collapseClass);\n $target.style.height = '0px';\n $target.style.overflow = 'hidden';\n } else {\n $target.style.height = `${$target.children[0].offsetHeight}px`;\n $wrapper.classList.remove(collapseClass);\n }\n }\n\n // update() 避免重複綁定\n $wrapper.removeEventListener('click', this.#event);\n $wrapper.addEventListener('click', this.#event);\n\n // target 點擊不收合\n if (targetStopPropagation) {\n const event = e => {\n e.stopPropagation();\n };\n // update() 避免重複綁定\n $target.removeEventListener('click', event);\n $target.addEventListener('click', event);\n }\n }\n\n #event() {\n const { instance, defaultOptions } = this.collapse;\n const { collapseClass, block, target, single } = defaultOptions;\n\n const $wrapper = this;\n\n if ($wrapper.classList.contains(collapseClass)) {\n if (single) {\n $wrapper.parentNode.querySelectorAll(`.${$wrapper.classList[0]}`).forEach(el => {\n collapseHandle(el);\n });\n }\n\n expandHandle($wrapper);\n } else {\n collapseHandle($wrapper);\n }\n\n instance.emit('afterCollapse');\n }\n\n update() {\n this.#create();\n }\n}\n\nObject.assign(Collapse4.prototype, EVENTS);\n\nexport default Collapse4;\n","import { configs } from '../configs'\n\nfunction createRipple(e, r4) {\n const button = r4;\n const { color, opacity, duration } = r4.s.options;\n\n // 可以更改點擊時生成效果樣式的結構\n let ripples = document.createElement('span');\n\n //偵測滑鼠點擊位置\n let x = e.clientX - button.getBoundingClientRect().left;\n let y = e.clientY - button.getBoundingClientRect().top;\n\n ripples.style.cssText = `background: ${color};left: ${x}px;top: ${y}px;opacity: ${opacity};animation-duration: ${duration}ms`;\n ripples.classList.add('circle');\n\n // 生成\n button.appendChild(ripples);\n\n // 生成後消失\n setTimeout(function () {\n ripples.remove();\n }, `${duration}`);\n}\n\nfunction removeStyle() {\n document.querySelectorAll('ripple-btn').forEach(button => {\n const ball = button.querySelector('.hover-ball');\n button.style.setProperty('--r', '');\n button.classList.remove('entered');\n });\n}\n\ndocument.addEventListener('click', removeStyle);\n\nclass Ripple4 extends HTMLElement {\n constructor() {\n super();\n this.initialize = false;\n }\n\n connectedCallback() {\n const r4 = this;\n if (r4.initialize || r4.classList.contains('r4-initialize')) return;\n r4.initialize = true;\n this.#create();\n }\n\n #create() {\n const { SETTINGS } = configs.ripple4;\n this.s = {};\n function attrToBoolean(str) {\n let booleanVal = Boolean(str);\n booleanVal = str === 'true';\n return booleanVal;\n }\n const options = {\n color: this.getAttribute('r4-color') || SETTINGS.color,\n opacity: this.getAttribute('r4-opacity') || SETTINGS.opacity,\n duration: Number(this.getAttribute('r4-duration')) || SETTINGS.duration,\n speed: Number(this.getAttribute('r4-speed')) || SETTINGS.speed,\n hover: this.getAttribute('r4-hover') ? attrToBoolean(this.getAttribute('r4-hover')) : SETTINGS.hover,\n click: this.getAttribute('r4-hover-click') ? attrToBoolean(this.getAttribute('r4-hover-click')) : SETTINGS.click,\n };\n\n this.s.options = options;\n if (this.s.options.hover) this.classList.add('hover-btn');\n\n this.#init();\n }\n\n #init() {\n this.#ball();\n this.#event();\n this.classList.add('r4-initialize');\n }\n\n #ball() {\n const button = this;\n const ball = document.createElement('i');\n ball.classList.add('hover-ball');\n ball.style.transitionDuration = `${button.s.options.speed}ms`;\n button.appendChild(ball);\n }\n\n #event() {\n const ball = this.querySelector('i.hover-ball');\n const button = this;\n // ripple點擊事件\n button.addEventListener('click', function (e) {\n e.stopPropagation();\n if (button.s.options.click) {\n createRipple(e, button);\n }\n });\n\n // 判斷操作事件使用 mouse 或是 touch\n let operateStart = 'ontouchstart' in document.documentElement ? 'touchstart' : 'mouseenter';\n let operateEnd = 'ontouchend' in document.documentElement ? 'touchend' : 'mouseleave';\n // hover\n button.addEventListener(operateStart, function (e) {\n if (operateStart === 'touchstart') {\n removeStyle();\n }\n if (button.s.options.hover) {\n const posX = operateStart === 'mouseenter' ? Math.round(e.clientX - button.getBoundingClientRect().left) : Math.round(e.changedTouches[0].clientX - button.getBoundingClientRect().x);\n const posY = operateStart === 'mouseenter' ? Math.round(e.clientY - button.getBoundingClientRect().top) : Math.round(e.changedTouches[0].clientY - button.getBoundingClientRect().y);\n const { offsetWidth, offsetHeight } = button;\n // 0402\n // 取 button 的寬度及長度 抓最大的值\n const max = Math.max(offsetWidth, offsetHeight);\n ball.style.width = max * 2 + 'px';\n ball.style.height = max * 2 + 'px';\n // 最大可覆蓋之半徑\n // const rippleR = Math.ceil(Math.sqrt(offsetWidth ** 2 + offsetHeight ** 2) * 2);\n // button.style.setProperty('--r', rippleR);\n ball.style.left = posX + 'px';\n ball.style.top = posY + 'px';\n button.classList.add('entered');\n }\n });\n button.addEventListener(operateEnd, function (e) {\n if (operateEnd === 'touchend') return;\n if (button.s.options.hover) {\n const posX = operateEnd === 'mouseleave' ? Math.round(e.clientX - button.getBoundingClientRect().left) : Math.round(e.changedTouches[0].clientX - button.getBoundingClientRect().x);\n const posY = operateEnd === 'mouseleave' ? Math.round(e.clientY - button.getBoundingClientRect().top) : Math.round(e.changedTouches[0].clientY - button.getBoundingClientRect().y);\n // 250402\n ball.style.width = 1 + 'px';\n ball.style.height = 1 + 'px';\n button.style.setProperty('--r', '');\n ball.style.left = posX + 'px';\n ball.style.top = posY + 'px';\n button.classList.remove('entered');\n }\n });\n }\n update() {\n this.classList.remove('r4-initialize');\n this.querySelector('i.hover-ball').remove();\n this.#create();\n }\n}\n\ncustomElements.define('ripple-btn', Ripple4);\n\nexport default Ripple4;\n","export default class ImageValidate {\n constructor() {\n this.init();\n }\n init() {\n const images = document.querySelectorAll('*:not([video-id]) > img');\n const noImageDom = (width, height) => {\n const div = document.createElement('div');\n const slash1 = document.createElement('span');\n const slash2 = document.createElement('span');\n const slashWidth = Math.sqrt(width ** 2 + height ** 2);\n const theta = (Math.asin(height / slashWidth) * 180) / Math.PI;\n div.className = 'no-image';\n slash1.className = 'slash1';\n slash1.style.cssText = `\n width: ${slashWidth}px;\n transform: rotate(${theta}deg);\n `;\n slash2.className = 'slash2';\n slash2.style.cssText = `\n width: ${slashWidth}px;\n transform: rotate(${-theta}deg);\n `;\n div.appendChild(slash1);\n div.appendChild(slash2);\n return div;\n };\n const errorImage = document.querySelectorAll('.error-image');\n for (let i = 0; i < errorImage.length; i++) {\n errorImage[i].remove();\n }\n images.forEach((img) => {\n let src;\n const wrapWidth = img.parentElement.clientWidth;\n const wrapHeight = img.parentElement.clientHeight;\n if (img.classList.contains('lazy') || img.classList.contains('swiper-lazy')) {\n src = img.getAttribute('data-src');\n } else {\n src = img.getAttribute('src');\n }\n if (src === '') {\n const wrapDIV = document.createElement('div');\n const parentsPosition = getComputedStyle(img.parentElement).position;\n wrapDIV.className = 'error-image';\n if (parentsPosition === 'static') {\n img.parentElement.style.position = 'relative';\n }\n img.parentElement.appendChild(wrapDIV);\n wrapDIV.style.cssText = `\n position: absolute;\n top: 50%;\n left: 50%;\n width: 100%;\n height: 100%;\n transform: translate(-50%,-50%);\n z-index: 1;\n `;\n wrapDIV.appendChild(noImageDom(wrapWidth, wrapHeight));\n }\n });\n function imageResize() {\n const noImage = document.querySelectorAll('.no-image');\n if (noImage.length <= 0) return;\n noImage.forEach((item) => {\n const wrapWidth = item.parentElement.clientWidth;\n const wrapHeight = item.parentElement.clientHeight;\n const slashWidth = Math.sqrt(wrapWidth ** 2 + wrapHeight ** 2);\n const theta = (Math.asin(wrapHeight / slashWidth) * 180) / Math.PI;\n item.querySelector('.slash1').style.cssText = `\n width: ${slashWidth}px;\n transform: rotate(${theta}deg);\n `;\n item.querySelector('.slash2').style.cssText = `\n width: ${slashWidth}px;\n transform: rotate(${-theta}deg);\n `;\n });\n }\n window.addEventListener('resize', imageResize);\n }\n reValidate() {\n this.init();\n }\n}\n","//建立 callback Function\nfunction createCallbackFunction(attributeValue, defaultValue) {\n if (attributeValue) {\n return function (el, res) {\n Function(attributeValue)(el, res);\n };\n } else {\n return defaultValue;\n }\n}\n\n//產生結構\nfunction createDOM(input, element, file, res) {\n const params = element.params;\n const preview = input.closest('[data-upload-item]').querySelector('[data-preview]');\n if (preview.querySelector('img')) preview.querySelector('img').remove();\n preview.appendChild(res.imgElement);\n const group = input.dataset.group;\n const inputIndex = document.querySelector(element.el).dataset.index;\n if (params.compress) {\n //副檔名\n const fileExt = file.name.substring(file.name.lastIndexOf('.')).replace('.');\n //檔名\n const fileName = file.name.replace(`.${fileExt}`, '');\n //檔案壓縮\n res.originalCanvas.toBlob(\n function (blob) {\n const imgFile = new File([blob], `${fileName}`, { type: file.type });\n uploadImage[`${group}`][inputIndex] = {\n file: imgFile,\n info: res,\n };\n if (params.on.changeAfter && typeof params.on.changeAfter === 'function') {\n params.on.changeAfter(input, res);\n }\n },\n file.type,\n params.compress,\n );\n } else {\n uploadImage[`${group}`][inputIndex] = {\n file: file,\n info: res,\n };\n if (params.on.changeAfter && typeof params.on.changeAfter === 'function') {\n params.on.changeAfter(input, res);\n }\n }\n}\n\n//產生Canvas\nfunction createCanvas(options, img, outputW, outputH) {\n const canvas = document.createElement('canvas');\n const ctx = canvas.getContext('2d');\n const originalWidth = img.width;\n const originalHeight = img.height;\n const originalRatio = (originalHeight / originalWidth) * 100;\n const outputRatio = (outputH / outputW) * 100;\n let newWidth = 0;\n let newHeight = 0;\n canvas.width = outputW;\n canvas.height = outputH;\n //縮圖填滿\n switch (options.previewSize) {\n case 'contain':\n if (originalRatio < outputRatio) {\n newWidth = canvas.width;\n newHeight = (outputW * originalRatio) / 100;\n } else if (originalRatio > outputRatio) {\n newWidth = (outputH / originalRatio) * 100;\n newHeight = canvas.height;\n } else {\n newWidth = canvas.width;\n newHeight = canvas.height;\n }\n break;\n case 'cover':\n if (originalRatio < outputRatio) {\n newWidth = (outputH / originalRatio) * 100;\n newHeight = canvas.height;\n } else if (originalRatio > outputRatio) {\n newWidth = canvas.width;\n newHeight = (outputW * originalRatio) / 100;\n } else if (originalRatio === outputRatio) {\n newWidth = canvas.width;\n newHeight = canvas.height;\n }\n break;\n }\n const x = (canvas.width - newWidth) * 0.5;\n const y = (canvas.height - newHeight) * 0.5;\n ctx.drawImage(img, x, y, newWidth, newHeight);\n\n return canvas;\n}\n\n//將檔案轉成圖片\nfunction convertImg(options, dataUrl) {\n return new Promise((resolve, reject) => {\n if (dataUrl) {\n const img = new Image();\n img.src = dataUrl;\n img.classList.add(options.previewSize);\n img.onload = () => {\n let result = {\n imgElement: img,\n originalCanvas: createCanvas(options, img, img.width, img.height),\n info: {\n originalWidth: img.width,\n originalHeight: img.height,\n ratio: (img.height / img.width) * 100 + '%',\n },\n };\n resolve(result);\n };\n } else {\n resolve();\n }\n });\n}\n\n//小數點後第N位四捨五入\nfunction formatFloat(num, pos) {\n const size = Math.pow(10, pos);\n return Math.round(num * size) / size;\n}\n\n//檢查檔案大小\nfunction checkSize(file, sizeLimit) {\n let fileSize = file.size / 1024 / 1024;\n return `${formatFloat(fileSize, 2)}` <= sizeLimit;\n}\n\n//讀取檔案\nfunction readFileHandler(e, input, element) {\n if (e.target.files.length <= 0) return;\n const file = e.target.files[0];\n const parentsEl = input.closest('[data-upload-item]');\n let reader = new FileReader();\n reader.onload = event => {\n const dataUrl = file.type.split('/')[0] === 'image' ? event.target.result : null;\n if (element.params.sizeLimit && !checkSize(file, element.params.sizeLimit)) {\n input.value = '';\n parentsEl.classList.add('over-limit');\n if (element.params.on.overLimit && typeof element.params.on.overLimit === 'function') {\n element.params.on.overLimit(input, element.params.sizeLimit);\n }\n return;\n } else {\n parentsEl.classList.remove('over-limit');\n parentsEl.classList.add('uploaded');\n convertImg(element.params, dataUrl).then(res => {\n createDOM(input, element, file, res);\n });\n }\n };\n reader.readAsDataURL(file);\n}\n\nexport default class ImagePreview {\n constructor(element, params) {\n const self = this;\n self.el = element;\n // default params\n self.params = {\n on: {\n changeAfter: null,\n overLimit: null,\n },\n group: 'group', //群組名稱 (type: String)\n sizeLimit: 2, //大小限制 (type: Number 單位: MB)\n previewSize: 'cover', //縮圖形式 (type: String 'contain' || 'cover')\n compress: 0.8, //壓縮品質 (type: Number 0~1 || false)\n };\n Object.assign(self.params, params);\n self.init();\n }\n init() {\n const self = this;\n const inputs = document.querySelectorAll(`${self.el}:not(.preview-active)`);\n if (inputs.length <= 0) return;\n window.uploadImage = {};\n inputs.forEach((input, index) => {\n input.classList.add('preview-active');\n // final set params\n const params = {\n group: input.dataset.group || self.params.group,\n sizeLimit: parseInt(input.dataset.limit) || self.params.sizeLimit,\n previewSize: input.dataset.previewSize || self.params.previewSize,\n compress: input.dataset.compress || self.params.compress,\n on: {\n changeAfter: createCallbackFunction(input.dataset.changeAfter, self.params.on.changeAfter),\n overLimit: createCallbackFunction(input.dataset.overLimit, self.params.on.overLimit),\n },\n };\n self.params = params;\n if (typeof uploadImage[`${params.group}`] === 'undefined') uploadImage[`${params.group}`] = [];\n if (!input.dataset.group) input.dataset.group = params.group;\n input.dataset.index = document.querySelectorAll(`[data-group=\"${params.group}\"]`).length - 1;\n input.addEventListener('change', function (e) {\n readFileHandler(e, input, self);\n });\n });\n }\n}\n\n"],"names":["video4","share4","modal4","type","marquee4","dropdown4","filter","filterPlaceholder","customTemplate","dropdownIcon","dropdownIcons","filterBar","defaultTemplate","article4","aost4","anchor4","multipurpose4","collapse","dropdown","tab4","collapse4","ripple4","insert","isString","value","isElement","isNodeList","isElementExist","getElement","isFunction","getAllElements","createUid","toHTMLElement","str","dom","jsonParse","json","warn","target","msg","error","EVENTS","events","handler","__events__","evt","evtHandler","index","onceHandler","args","event","data","ease","t","b","c","d","scrollTo","options","instance","container","spacer","speed","gap","easing","direction","isHorizontal","scrollDirection","rectPosition","rectSpace","containerEle","start","targetPoint","spacerGap","change","increment","currentTime","emitEvent","eventName","targetEle","animateScroll","val","Anchor4","el","__privateAdd","_create","_init","_trigger","__privateMethod","create_fn","elements","_a","SETTINGS","configs.anchor4","newOptions","hashName","targetStr","searchParams","k","v","init_fn","trigger_fn","defaultOptions","eventHandler","MODALS","createTemplate","TEMPLATE","configs.modal4","childDom","content","child","ModernModal","_mount","_event","_stateControl","attr","oldVal","newVal","stateControl_fn","ATTRS","id","mount_fn","scroller","OverlayScrollbars","event_fn","$self","close","destroy","closeAttr","_b","destroyAttr","_c","e","state","__scroller__","viewport","transitionEndHandler","useMethod","name","useFunction","Modal4","dispatchModal","modal","useModal","useFetch","action","on","route","useEvent","res","doms","containerElement","_Modal4","openOptions","obj","methods","ons","interaction","scrollElement","viewHeight","viewTop","className","delay","end","repeat","top","bottom","startTrigger","endTrigger","shouldRemove","detectRepeat","repeatType","Aost4","removeShow","configs.aost4","configs.video4","videoPlayer","_youtube","_vimeo","_youku","_bilibili","_instagram","_tiktok","videoType","layout","youtube_fn","youku_fn","vimeo_fn","bilibili_fn","instagram_fn","tiktok_fn","videoId","autoplay","startTime","hash","sleep","time","resolve","timer","scrollLock","elementArr","element","$","lock","scrollUnlock","unlock","loading","timerout","loaded","imagePreview","selector","ImagePreview","ajaxUpdate","lazy","LazyLoad","imageValidate","ImageValidate","tabChange","callback","bodyScrollbarInit","appleDebug","detectMacOSVersion","userAgent","clickToggleClass","clickSwitchClass","debounce","func","context","throttle","timeout","last","now","countDown","set_seconds","set_time","minutes","seconds","reject","fixMobile100vh","init","vh","wordAnimation","isWrap","delayStartTime","delaySpace","randomTransTime","$this","removeBr","newText","words","s","letter","i","formatFloat","num","pos","size","getSlideDataIndex","swiper","activeIndex","slidesLen","getSlidesCount","disableNum","gridRows","disableCount","slideImgDetect","img","isVideo","activeSlide","video","allVideo","numberGrow","ele","splitNum","zeroToNine","text","letterGrow","splitLetter","aToZ","getTransformX","transform","mat","getTransformY","htmlStringToDOM","htmlString","hasVideoID","isActive","createPlayer","params","_createCover","_getVideoData","getVideoData_fn","createCover_fn","LAYOUT","$selector","videoLayoutNo","videoMode","videoButton","videoCover","videoHighQualityPic","$target","$cover","src","response","html","url","err","emit","videoTarget","videoKeep","videoTargetRoute","videoIgHtml","script","scrollers","entries","cityData","d4","configs.dropdown4","subOption","detectSync","controlElements","disabledEl","setSelectDisplay","valueIndex","placeholder","allLi","option","li","activeLi","tagEl","valueArray","loadCityData","lang","city","loadDistData","dist","closeAllDropdown","settingScrollbarStyle","key","Dropdown4","valueLiArray","valueIndexArray","dropdownHeight","hasFilter","totalHeight","allSublayer","defaultHeight","item","scroll","valueLi","cityDropdown","cityDropdownHasVal","toggleTransitionend","dropdownStatus","scrollToActive","halfActiveLiHeight","offsetTop","computedHeight","citySelect","clickOption","clickIndex","subDropdown","subDropdownList","subDropdownListMargin","subDropdownH","maxHeight","recalculate","distSelectEl","activeLiArray","getBreakpoints","m4","breakpoints","getDuration","breakpoint","points","point","a","createAnimateWrap","behavior","continual","childDOM","animateItem","cloneElement","cloneAnimateWrap","keyframes","framesObj","animateFrom","animateTo","Marquee4","_animation","configs.marquee4","animation_fn","duration","pauseOnMouseenter","playDelay","animateInit","enterKeyframes","framesArr","moveDistance","averageDuration","updateDuration","cloneStartTime","addClass","removeClass","dragControl","_bindButtonEvent","_bindDragEvent","_scrollerDetect","_buttonDetect","_bindItemEvent","$wrapper","$active","updateEvent","scrollerDetect_fn","buttonDetect_fn","bindDragEvent_fn","bindButtonEvent_fn","_d","_e","_f","bindItemEvent_fn","$button","buttonEvent","fix","$el","isDown","isMoved","startX","scrollLeft","mousedownEvent","mouseleaveEvent","mouseupEvent","mousemoveEvent","walk","reset","$container","gate","$element","itemEvent","selectOption","clickHandler","collapseControl","$drag","originalDomString","$storage","configs.multipurpose4","Multipurpose4","_render","_breakpoint","_distribute","distribute_fn","breakpoint_fn","customize","render_fn","keys","dragContainer","collapseContainer","Tab4","_tabSet","_getTabIndex","_createSwiper","_initSwiper","_addUrl","_eventAnchor","_goAnchor","_step","_btnNextState","_btnPrevState","_tabState","_isTrue","_animationHide","_animationShow","_stateChange","_resizeTab","stateChange_fn","clickedTab","indexOf","newTabId","isTrue_fn","defaultID","newTabIndex","getTabIndex_fn","panel","animationShow_fn","animationHide_fn","tabIndex","nextPage","nextPageId","prevPage","prevPageId","tabSet_fn","changeEvent","configs.tab4","createSwiper_fn","matchingTabs","resizeTab_fn","tabs","tabPanelsWithId","tabPanel","swiperContainer","swiperWrapper","slide","initSwiper_fn","sContainer","sWrapper","tabPanels","totalWidth","addUrl_fn","newUrl","eventAnchor_fn","pageYOffset","changeOffset","goAnchor_fn","step_fn","current","btnNextState_fn","newPage","next","isSinglePage","isLastPage","btn","btnPrevState_fn","prev","isFirstPage","tabState_fn","tabId","tab","fun","val2","timing","clientHeight","slideWidth","translateValue","_this_","targetElements","isTarget","targetElement","tabControl","tabElName","tabEls","role","collapseHandle","collapseClass","transition","expandHandle","height","Collapse4","configs.collapse4","block","defaultOpen","targetStopPropagation","defaultActiveMark","single","createRipple","r4","button","color","opacity","ripples","x","y","removeStyle","Ripple4","_ball","configs.ripple4","attrToBoolean","booleanVal","ball_fn","ball","operateStart","operateEnd","posX","posY","offsetWidth","offsetHeight","max","images","noImageDom","width","div","slash1","slash2","slashWidth","theta","errorImage","wrapWidth","wrapHeight","wrapDIV","parentsPosition","imageResize","noImage","createCallbackFunction","attributeValue","defaultValue","createDOM","input","file","preview","group","inputIndex","fileExt","fileName","blob","imgFile","createCanvas","outputW","outputH","canvas","ctx","originalWidth","originalRatio","outputRatio","newWidth","newHeight","convertImg","dataUrl","result","checkSize","sizeLimit","fileSize","readFileHandler","parentsEl","reader","self","inputs"],"mappings":"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MACb,CAAC,OAAO,KAAK;AAAA,MACb,CAAC,OAAO,KAAK;AAAA,MACb,CAAC,OAAO,KAAK;AAAA,MACb,CAAC,OAAO,KAAK;AAAA,MACb,CAAC,OAAO,KAAK;AAAA,MACb,CAAC,OAAO,KAAK;AAAA,MACb,CAAC,OAAO,KAAK;AAAA,MACb,CAAC,OAAO,KAAK;AAAA,MACb,CAAC,OAAO,KAAK;AAAA,MACb,CAAC,OAAO,KAAK;AAAA,IACd;AAAA,IACD,KAAK;AAAA,MACH,CAAC,OAAO,KAAK;AAAA,MACb,CAAC,OAAO,KAAK;AAAA,MACb,CAAC,OAAO,KAAK;AAAA,MACb,CAAC,OAAO,KAAK;AAAA,MACb,CAAC,OAAO,KAAK;AAAA,MACb,CAAC,OAAO,KAAK;AAAA,MACb,CAAC,OAAO,KAAK;AAAA,MACb,CAAC,OAAO,KAAK;AAAA,MACb,CAAC,OAAO,KAAK;AAAA,MACb,CAAC,OAAO,KAAK;AAAA,MACb,CAAC,OAAO,KAAK;AAAA,MACb,CAAC,OAAO,KAAK;AAAA,MACb,CAAC,OAAO,KAAK;AAAA,MACb,CAAC,OAAO,KAAK;AAAA,MACb,CAAC,OAAO,KAAK;AAAA,MACb,CAAC,OAAO,KAAK;AAAA,MACb,CAAC,OAAO,KAAK;AAAA,MACb,CAAC,OAAO,KAAK;AAAA,MACb,CAAC,OAAO,KAAK;AAAA,MACb,CAAC,OAAO,KAAK;AAAA,MACb,CAAC,OAAO,KAAK;AAAA,MACb,CAAC,OAAO,KAAK;AAAA,MACb,CAAC,OAAO,KAAK;AAAA,MACb,CAAC,OAAO,KAAK;AAAA,MACb,CAAC,OAAO,KAAK;AAAA,MACb,CAAC,OAAO,KAAK;AAAA,IACd;AAAA,IACD,KAAK;AAAA,MACH,CAAC,OAAO,KAAK;AAAA,MACb,CAAC,OAAO,KAAK;AAAA,MACb,CAAC,OAAO,KAAK;AAAA,MACb,CAAC,OAAO,KAAK;AAAA,MACb,CAAC,OAAO,KAAK;AAAA,MACb,CAAC,OAAO,KAAK;AAAA,MACb,CAAC,OAAO,KAAK;AAAA,MACb,CAAC,OAAO,KAAK;AAAA,MACb,CAAC,OAAO,KAAK;AAAA,MACb,CAAC,OAAO,KAAK;AAAA,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"}
|