@xwadex/fesd 0.0.70 → 0.0.71
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.
- package/dist/fesd-bundle.js +196 -192
- package/dist/fesd-bundle.js.map +1 -1
- package/dist/image-preview-bundle.js +485 -358
- package/dist/image-preview-bundle.js.map +1 -1
- package/dist/tools-bundle.js +217 -324
- package/dist/tools-bundle.js.map +1 -1
- package/package.json +1 -1
|
@@ -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: '.playTrigger',\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 openModal: null,\n closeModal: null,\n },\n // video4 target 內放置結構 index 對應 videoLayoutNo\n LAYOUT: [\n `\n <div class=\"playTrigger\">\n <div class=\"playButton\"></div>\n </div>\n <div class=\"overlay\"></div>\n `\n ],\n COOKIEDISAGREELAYOUT: \n `\n <div class=\"disagree-inner\">\n <div class=\"icon\"> <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"7\" height=\"25\" viewBox=\"0 0 7 25\"\n fill=\"none\">\n <path\n d=\"M0 0H6.96277L5.77128 16.1948H1.22872L0 0ZM0 22.0304C0 21.1556 0.322695 20.442 0.968085 19.8895C1.6383 19.337 2.48227 19.0608 3.5 19.0608C4.51773 19.0608 5.34929 19.337 5.99468 19.8895C6.66489 20.442 7 21.1556 7 22.0304C7 22.9052 6.66489 23.6188 5.99468 24.1713C5.34929 24.7238 4.51773 25 3.5 25C2.48227 25 1.6383 24.7238 0.968085 24.1713C0.322695 23.6188 0 22.9052 0 22.0304Z\"\n fill=\"white\"></path>\n </svg></div>\n <div class=\"title ch\">由於未授權 Cookie 使用,影片無法播放</div>\n <div class=\"title en\">The video can’t be played due to unauthorized use of cookies.</div>\n <div class=\"text\">\n <div class=\"box\"><span>您可前往 </span><span data-cookie data-cookie-open=\"advance\">Cookie 偏好設定</span><span> 進行修改</span></div>\n <div class=\"box\"><span>Modify your </span><span data-cookie data-cookie-open=\"advance\">cookie preferences.</span></div>\n </div>\n </div>\n `\n ,\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 markdownLinkBlank: 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// prevent fetch modal multiple click \nconst pending_fetch = {}\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 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 // prevent fetch modal multiple click \n if (pending_fetch[target]) return\n pending_fetch[target] = true\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 delete pending_fetch[target]\n })\n .catch(error => {\n // trigger error event\n useEvent('error', error);\n delete pending_fetch[target]\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.videoMode = this.getAttribute('video-mode');\n this.autoplay = this.getAttribute('video-autoplay');\n this.startTime = this.getAttribute('video-starttime');\n this.videoInboxImg = this.getAttribute('video-inbox-img');\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,videoMode } = this;\n const { COOKIEDISAGREELAYOUT } = configs.video4;\n let layout = '';\n function cookieDisagreeFn(el) {\n $(el).addClass(\"cookie-disagree\")\n $(\".cookie-disagree\").append(COOKIEDISAGREELAYOUT)\n }\n\n switch (videoType) {\n case 'youtubeAPI':\n // this.#youtubeAPI();\n break;\n case 'youtube':\n if (document.body.wd_youtube == false) {\n cookieDisagreeFn(\"video-player\")\n } else {\n layout = this.#youtube();\n }\n break;\n case 'youkuAPI':\n // this.#youkuAPI();\n break;\n case 'youku':\n if (document.body.wd_youku == false) {\n cookieDisagreeFn(\"video-player\")\n } else {\n layout = this.#youku();\n }\n break;\n case 'vimeo':\n if (document.body.wd_vimeo == false) {\n cookieDisagreeFn(\"video-player\")\n } else {\n layout = this.#vimeo();\n }\n break;\n case 'bilibili':\n if (document.body.wd_bilibili == false) {\n cookieDisagreeFn(\"video-player\")\n } else {\n layout = this.#bilibili();\n }\n break;\n case 'instagram':\n if (document.body.wd_instagram == false) {\n cookieDisagreeFn(\".instagram-media\")\n } else {\n layout = this.#instagram();\n }\n break;\n case 'tiktok':\n if (document.body.wd_tiktok == false) {\n cookieDisagreeFn(\"video-player\")\n } else {\n layout = this.#tiktok();\n }\n break;\n case 'videojs':\n // this.#videoJs();\n break;\n case 'video':\n layout = this.#video();\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=true' : ''}\" allow=\"${autoplay === 'on' ? 'autoplay;' : ''} width=\"100%\" height=\"100%\" 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 // 2026.01.15 新增 video \n #video() {\n const { videoId, autoplay } = this;\n return `<video src=\"${videoId}\" ${autoplay == \"on\" ? \"autoplay\" : \"\"} muted playsinline controls></video>`;\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, Detect4 } from '@/fesd'\nimport LazyLoad from 'vanilla-lazyload'\nimport { lock, unlock } from 'tua-body-scroll-lock'\nimport { OverlayScrollbars } from 'overlayscrollbars'\n\n/**\n * Scroll Lock / Unlock\n */\nlet lockCount = 0;\nfunction elementArray(elements) {\n const elementArr = [];\n\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 return elementArr;\n}\n\nexport function scrollLock(elements) {\n const elementArr = elementArray(elements);\n\n lockCount += 1;\n\n if (lockCount === 1) {\n document.documentElement.classList.add(\"scrollLock\");\n }\n\n lock(elementArr);\n}\n\nexport function scrollUnlock(elements) {\n lockCount = Math.max(0, lockCount - 1);\n\n const elementArr = elementArray(elements);\n unlock(elementArr);\n\n if (lockCount === 0) {\n document.documentElement.classList.remove(\"scrollLock\");\n }\n}\n\n/**\n * Loading animate\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/**\n * ImagePreview\n */\nexport function imagePreview(selector, options) {\n new ImagePreview(selector, options);\n}\n\n/**\n * Ajax Update\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\n/**\n * Tab Change\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 * Timing tools\n */\nexport const sleep = (time) => new Promise((resolve) => {\n let timer = setTimeout(() => {\n clearTimeout(timer)\n return resolve()\n }, time)\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\nconst igCreatePlayer = params => {\n console.log(params.videoId,\"params.videoId\");\n return `<blockquote class=\"instagram-media\" data-instgrm-captioned data-instgrm-permalink=\"${params.videoId}\"></blockquote>`;\n};\n\nclass video4 {\n static globalOptions = {}; //*-* 給Article4用的 **//\n\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, LAYOUT } = configs.video4; //*-* 加 LAYOUT **//\n\n //*-* 如果 new Video4 有帶 isGlobal: true,就把這次的設定變成全站預設 **//\n if (options.isGlobal) {\n video4.globalOptions = options;\n }\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({}, { LAYOUT }, SETTINGS, options); \n \n //*-* start **//\n this.options = Object.assign(\n {},\n { LAYOUT }, // 原始 configs 的 LAYOUT\n SETTINGS, // 原始 configs 的 SETTINGS\n video4.globalOptions, // 全站 A 設定\n options // 個別傳入的設定 (優先級最高)\n );\n //*-* end **//\n \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 #getCoverSrc(params) {\n const { $selector, videoId, videoType, videoInboxImg, videoHighQualityPic } = params;\n const selectorImg = $selector?.querySelector('img');\n const selectorImgSrc = selectorImg?.getAttribute('src') || selectorImg?.getAttribute('data-src');\n\n if (videoInboxImg) {\n return Promise.resolve(videoInboxImg);\n }\n\n if (selectorImgSrc) {\n return Promise.resolve(selectorImgSrc);\n }\n\n if (videoType == 'youtube') {\n if (videoHighQualityPic == 'on') {\n return Promise.resolve(`https://img.youtube.com/vi/${videoId}/maxresdefault.jpg`);\n } else {\n return Promise.resolve(`https://img.youtube.com/vi/${videoId}/0.jpg`);\n }\n } else if (videoType == 'vimeo') {\n return Promise.resolve(`https://vumbnail.com/${videoId}_large.jpg`);\n } else if (videoType == 'tiktok') {\n return fetch(`https://www.tiktok.com/oembed?url=https://www.tiktok.com/@/video/${videoId}`, { method: 'GET', redirect: 'follow' })\n .then(response => response.json())\n .then(html => html.thumbnail_url)\n .catch(function () {\n return '';\n });\n }\n\n return Promise.resolve('');\n }\n\n #applyCoverSrc($cover, params) {\n const { videoType, videoId } = params;\n const src = $cover?.getAttribute('src') || $cover?.getAttribute('data-src');\n\n if (src) return;\n\n if (videoType === 'video') {\n // 先預拉出 video 影片, 抓第一幀的畫面用 canvas 轉圖片當作封面圖\n const v = document.createElement('video');\n \n v.src = videoId;\n v.preload = 'metadata';\n v.muted = true;\n v.playsInline = true;\n v.crossOrigin = 'anonymous';\n\n v.onloadeddata = () => {\n v.currentTime = 0.5; // 抓 0.5 秒的畫面為封面圖\n };\n\n v.onseeked = () => {\n const c = document.createElement('canvas');\n c.width = v.videoWidth;\n c.height = v.videoHeight;\n c.getContext('2d').drawImage(v, 0, 0);\n $cover.src = c.toDataURL('image/jpeg', 0.85);\n };\n\n return;\n }\n\n this.#getCoverSrc(params).then(url => {\n if (url) {\n $cover.setAttribute('src', `${url}`);\n } else {\n warn('video4', `僅 youtube & vimeo 提供,無圖片時放置預設封面畫面,其他影片平台請自行上傳封面照片`);\n }\n });\n }\n\n #createCover(el) {\n const { LAYOUT } = this.options; //*-* 改 this.options **//\n const params = el.video.params;\n const { $selector, videoLayoutNo, videoId, videoType, videoMode, videoButton, videoCover, videoHighQualityPic } = params;\n\n if (videoMode === 'onBox' || videoMode === 'inBox') {\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 const src = $cover?.getAttribute('src') || $cover?.getAttribute('data-src');\n // $cover.insertAdjacentHTML(insert.after, LAYOUT[videoLayoutNo]);\n //*-* 按鈕防呆 start **//\n //*-* 確認該 index 是否存在,不存在就強制用 0,如果連 0 都沒有就給空字串 **//\n const layoutHtml = LAYOUT[videoLayoutNo] ? LAYOUT[videoLayoutNo] : (LAYOUT[0] || '');\n if (layoutHtml) {\n $cover.insertAdjacentHTML(insert.after, layoutHtml);\n } else {\n warn('video4', `找不到對應的 LAYOUT 設定 (No: ${videoLayoutNo}),且無預設樣式。`);\n }\n //*-* 按鈕防呆 end **//\n \n\n // 無圖片時放置預設封面畫面,僅 youtube & vimeo 提供\n if (!src) {\n this.#applyCoverSrc($cover, params);\n } else if (!src && videoType == 'youtube') {\n if (videoHighQualityPic == 'on') {\n $cover.setAttribute('src', `https://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 === 'video') {\n // 先預拉出 video 影片, 抓第一幀的畫面用 canvas 轉圖片當作封面圖\n const v = document.createElement('video');\n \n v.src = videoId;\n v.preload = 'metadata';\n v.muted = true;\n v.playsInline = true;\n v.crossOrigin = 'anonymous';\n\n v.onloadeddata = () => {\n v.currentTime = 0.5; // 抓 0.5 秒的畫面為封面圖\n };\n\n v.onseeked = () => {\n const c = document.createElement('canvas');\n c.width = v.videoWidth;\n c.height = v.videoHeight;\n c.getContext('2d').drawImage(v, 0, 0);\n $cover.src = c.toDataURL('image/jpeg', 0.85);\n };\n\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 $target.video.instance = this;\n }\n\n $target.video.eventHandler = this.#trigger;\n $target.addEventListener('click', $target.video.eventHandler);\n\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) {\n this.#applyCoverSrc($cover, params);\n } else 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 } = this;\n const instance = video.instance;\n const { \n $selector, \n videoMode, \n videoTarget, \n videoKeep,\n videoId, \n videoTargetRoute, \n videoType, \n videoIgHtml, \n videoInboxImg,\n videoButton,\n videoLayoutNo,\n videoStartTime,\n } = video.params;\n const lazy = new LazyLoad({ callback_loaded: img => { }, })\n\n const params = new URLSearchParams({\n video_mode: videoMode,\n video_type: videoType,\n video_id: videoId,\n });\n \n if (videoMode == 'onBox' || videoMode == 'inBox') {\n const modalOptions = {\n target: videoTarget,\n route: videoTargetRoute + `?${params.toString()}`,\n on: {\n complete(modal) {\n if (videoMode == 'onBox') {\n if (videoType == 'instagram') {\n modal.setAttribute('video-typeStyle', `${videoType}`)\n if (window.instgrm?.Embeds) {\n modal.querySelector('.modal-content').insertAdjacentHTML('beforeend', igCreatePlayer(video.params));\n window.instgrm.Embeds.process();\n } else {\n console.log('window.instgrm is undefined');\n }\n } else {\n modal.querySelector('.modal-content').insertAdjacentHTML('beforeend', createPlayer(video.params));\n modal.setAttribute('video-typeStyle', `${videoType}`)\n }\n }\n if (videoMode == 'inBox') {\n modal.setAttribute('video-typeStyle', `${videoType}`)\n if (videoType == 'instagram') {\n if (window.instgrm?.Embeds) {\n modal.querySelector('.modal-content').insertAdjacentHTML('beforeend', igCreatePlayer(video.params));\n window.instgrm.Embeds.process();\n } else {\n console.log('window.instgrm is undefined');\n }\n }\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 resizeObserver.observe(target);\n }\n // if (videoMode == 'onBox') {\n // }\n if (videoMode == 'inBox') {\n if (videoType == 'instagram') {\n $(\".video-content\").remove();\n } else{\n let layout\n const target = modal.querySelector('.video-content');\n\n instance.#getCoverSrc(video.params).then(videoInboxImgs => {\n layout = `\n <div\n class=\"photo-box\"\n video-target\n video-mode=\"onPage\"\n video-type=\"${videoType}\"\n video-id=\"${videoId}\"\n video-button=\"${videoButton}\"\n video-layout-no=\"${videoLayoutNo}\"\n video-starttime=\"${videoStartTime}\"\n >\n <picture>\n <source\n srcset=\"${videoInboxImgs || ''}\"\n type=\"image/webp\"\n />\n <source\n srcset=\"${videoInboxImgs || ''}\"\n type=\"image/jpeg\"\n />\n <img src=\"${videoInboxImgs || ''}\" alt=\"\" />\n </picture>\n </div>`\n\n target.insertAdjacentHTML(insert.prepend, layout);\n\n const targetElements = modal.querySelectorAll('[video-target]');\n if (targetElements.length > 0) {\n new video4(targetElements, { \n LAYOUT: video.params.LAYOUT, \n videoLayoutNo: \n video.params.videoLayoutNo \n });\n }\n });\n }\n }\n instance?.emit('openModal');\n },\n close(modal) {\n const scrollers = modal.querySelectorAll('[data-overlayscrollbars-viewport]');\n scrollUnlock([...scrollers]);\n instance?.emit('closeModal');\n },\n destroy(modal) {\n },\n },\n };\n\n Modal4.open(modalOptions);\n \n } else if (videoMode == 'onPage') {\n // onPage 點擊後應自動撥放影片\n video.params.videoAutoplay = 'on';\n\n if (videoKeep == 'off') {\n // 直接替換 cover & playButton\n // 2026.01.15 update 補判斷\n if ($selector.querySelector('video-player')) {\n return;\n }\n\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, LAYOUT } = configs.video4;\n const SETTINGS = this.options; //*-*//\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 videoInboxImg: el.getAttribute('video-inbox-img') || SETTINGS.videoInboxImgHtml,\n LAYOUT: SETTINGS.LAYOUT || []\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;","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 as originalData } from './cityData'\nimport { OverlayScrollbars } from 'overlayscrollbars'\n\n('use strict');\n\nlet cityData\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.s.dropdownEl.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.s.dropdownEl.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 if ($(\"#newCityData\").length > 0) {\n if ($(\"#newCityData\").val() !== \"\") {\n cityData = JSON.parse($(\"#newCityData\").val())[0]\n console.log([0]);\n }\n } else {\n cityData = originalData\n }\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.s.dropdownEl.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.s.dropdownEl.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.s.dropdownEl.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.s.dropdownEl.querySelector(`.dropdown-list li`).classList.remove('active');\n newVal.split(',').forEach(option => {\n const li = d4.s.dropdownEl.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 disconnectedCallback() {\n // -** 獨立 dropdown 出 body 更新 - 關閉下拉時移除結構\n if (this.s && this.s.dropdownEl && this.s.dropdownEl.parentNode === document.body) {\n document.body.removeChild(this.s.dropdownEl);\n }\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 // -** 獨立 dropdown 出 body 更新\n this.s.dropdownEl = this.querySelector('.dropdown');\n if (this.getAttribute('d4-portal') === 'true') {\n this.s.dropdownEl.setAttribute('data-d4-portal', '');\n document.body.appendChild(this.s.dropdownEl);\n }\n this.#init();\n }\n // -** 獨立 dropdown 出 body 更新\n #positionPortal() {\n const d4 = this;\n const rect = d4.getBoundingClientRect();\n const el = d4.s.dropdownEl;\n \n el.style.position = 'fixed';\n el.style.overflow = `hidden`;\n el.style.left = `${rect.left}px`;\n el.style.width = `${rect.width}px`;\n\n const dropdownHeight = parseInt(el.style.height) || el.scrollHeight;\n const spaceBelow = window.innerHeight - rect.bottom;\n if (spaceBelow < dropdownHeight && rect.top > dropdownHeight) {\n // 上方展開\n el.style.top = 'auto';\n el.style.bottom = `${window.innerHeight - rect.top + 5}px`;\n } else {\n el.style.top = `${rect.bottom + 5}px`;\n el.style.bottom = 'auto';\n }\n }\n #init() {\n const d4 = this;\n d4.s.allLi = d4.s.dropdownEl.querySelectorAll('.dropdown-list li');\n d4.s.selectDisplayEl = d4.querySelector('.select-display');\n // -** 獨立 dropdown 出 body 更新\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.s.dropdownEl.querySelectorAll('.dropdown-list li');\n d4.classList.remove('disabled');\n if (d4.getAttribute('d4-value') !== '') {\n const dist = value.split(',')[1];\n valueLi = d4.s.dropdownEl.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.s.dropdownEl.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.s.dropdownEl.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 (d4.s.subDropdownTotalH > 0 && d4.__scroller__) {\n d4.__scroller__.update(true);\n }\n if (hasFilter) {\n d4.s.dropdownEl.querySelector('.filter-bar input').disabled = false;\n d4.s.dropdownEl.querySelector('.filter-bar input').focus();\n }\n if (d4.s.selectType === 'single') {\n scrollToActive();\n }\n break;\n case 'close':\n // -** 獨立 dropdown 出 body 更新\n if (d4.getAttribute('d4-portal') == \"true\") {\n if (d4.__scroller__) d4.__scroller__.update(true);\n d4.s.dropdownEl.style.height = '';\n d4.s.dropdownEl.style.zIndex = '';\n if (hasFilter) d4.s.dropdownEl.querySelector('.filter-bar input').disabled = true;\n if (d4.s.dropdownEl.parentNode === document.body) {\n document.body.removeChild(d4.s.dropdownEl);\n }\n } else {\n d4.__scroller__.update(true);\n d4.s.dropdownEl.removeAttribute('style');\n if (hasFilter) d4.querySelector('.filter-bar input').disabled = true;\n }\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.s.dropdownEl.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.s.dropdownEl.querySelector('.dropdown-scroller');\n const citySelect = d4.classList.contains('city');\n d4.s.allLi = d4.s.dropdownEl.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 // -** 獨立 dropdown 出 body 更新\n if (d4.getAttribute('d4-portal') == \"true\") {\n d4.s.dropdownEl.style.setProperty('--maxHeight', `${totalHeight}px`);\n } else {\n d4.style.cssText = `--maxHeight: ${totalHeight}px;`;\n }\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.s.dropdownEl.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 // -** 獨立 dropdown 出 body 更新\n if (d4.getAttribute('d4-portal') == \"true\") {\n distSelectEl.s.dropdownEl.querySelector('.dropdown-list').append(li);\n } else {\n distSelectEl.querySelector('.dropdown-list').append(li);\n }\n });\n d4.__events__.selectOption(distSelectEl);\n }\n }\n // -** 獨立 dropdown 出 body 更新\n if (d4.getAttribute('d4-portal') == \"true\") {\n e.stopPropagation();\n d4.close();\n } else {\n if (clickOption.parentNode.closest('li')?.classList.contains('has-sublayer')) {\n e.stopPropagation();\n d4.close();\n }\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.s.dropdownEl.querySelector('.filter-bar').addEventListener('click', function (e) {\n e.stopPropagation();\n });\n d4.s.dropdownEl.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.s.dropdownEl.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 if (!(d4.getAttribute('d4-portal') == \"true\")) {\n d4.__events__.bindScrollbar();\n }\n d4.__events__.selectOption();\n d4.__events__.filterHandler();\n d4.__events__.removeTag();\n d4.__events__.transitionend();\n }\n open() {\n const d4 = this;\n let dropdownHeight;\n if (d4.getAttribute('d4-portal') == \"true\") {\n // -** 獨立 dropdown 出 body 更新\n closeAllDropdown();\n\n if (d4.s.dropdownEl.parentNode !== document.body) {\n document.body.appendChild(d4.s.dropdownEl);\n }\n\n if (!d4.__scroller__) {\n d4.__events__.bindScrollbar();\n }\n this.#positionPortal();\n void d4.s.dropdownEl.offsetHeight;\n\n dropdownHeight = d4.s.dropdownEl.querySelector('.dropdown-scroller').clientHeight;\n } else {\n dropdownHeight = d4.querySelector('.dropdown-scroller').clientHeight;\n }\n const hasFilter = d4.classList.contains('filter');\n const totalHeight = () => {\n // -** 獨立 dropdown 出 body 更新\n if (d4.getAttribute('d4-portal') == \"true\") {\n if (hasFilter) {\n if (d4.s.dropdownEl.querySelector('.dropdown-scroller .filter-bar')) {\n return dropdownHeight\n } else {\n return d4.s.dropdownEl.querySelector('.filter-bar') ? d4.s.dropdownEl.querySelector('.filter-bar').clientHeight + dropdownHeight : dropdownHeight;\n }\n }\n } else {\n if (hasFilter) {\n if (d4.querySelector('.dropdown-scroller .filter-bar')) {\n return dropdownHeight\n } else {\n return d4.querySelector('.filter-bar') ? d4.querySelector('.filter-bar').clientHeight + dropdownHeight : dropdownHeight;\n }\n }\n }\n return dropdownHeight;\n };\n // -** 雙層選單預設 open 更新 (data-open=\"true\")\n d4.s.subDropdownTotalH = 0;\n const scroller = d4.getAttribute('d4-portal') == \"true\"\n ? d4.s.dropdownEl.querySelector('.dropdown-scroller')\n : d4.querySelector('.dropdown-scroller');\n const scrollerMaxHeight = parseInt(getComputedStyle(scroller).maxHeight);\n d4.s.dropdownEl.querySelectorAll('.has-sublayer[data-open=\"true\"]').forEach(item => {\n const subDropdown = item.querySelector('.sub-dropdown');\n const subDropdownList = subDropdown.querySelector('.sub-dropdown-list');\n const margin = parseInt(getComputedStyle(subDropdownList).marginTop) + parseInt(getComputedStyle(subDropdownList).marginBottom);\n subDropdown.style.cssText = `--height: ${subDropdownList.offsetHeight + margin}px`;\n d4.s.subDropdownTotalH += parseInt(subDropdown.style.cssText.replace('--height:', '').trim());\n item.classList.add('open');\n });\n const openHeight = () => {\n const filterBarEl = hasFilter ? (d4.getAttribute('d4-portal') == \"true\" ? d4.s.dropdownEl.querySelector('.filter-bar') : d4.querySelector('.filter-bar')) : null;\n const filterBarH = filterBarEl ? filterBarEl.clientHeight : 0;\n const h = totalHeight() + d4.s.subDropdownTotalH;\n return h > scrollerMaxHeight + filterBarH ? scrollerMaxHeight + filterBarH : h;\n };\n if (d4.getAttribute('d4-portal') !== \"true\") {\n closeAllDropdown();\n }\n d4.setAttribute('d4-status', 'open');\n d4.setAttribute('d4-default-height', totalHeight());\n if (d4.getAttribute('d4-portal') == \"true\") {\n // -** 獨立 dropdown 出 body 更新\n d4.s.dropdownEl.style.setProperty('--maxHeight', `${openHeight()}px`);\n d4.s.dropdownEl.style.zIndex = '9999';\n\n this.#positionPortal();\n void d4.s.dropdownEl.offsetHeight;\n d4.s.dropdownEl.style.height = `${openHeight()}px`;\n \n d4.__events__._scrollUpdate = () => {\n const rect = d4.getBoundingClientRect();\n if (rect.bottom < 0 || rect.top > window.innerHeight) {\n d4.close();\n } else {\n d4.#positionPortal();\n }\n };\n window.addEventListener('scroll', d4.__events__._scrollUpdate, { passive: true, capture: true });\n window.addEventListener('resize', d4.__events__._scrollUpdate, { passive: true });\n // -**\n } else {\n d4.style.cssText = `--maxHeight: ${openHeight()}px;`;\n d4.s.dropdownEl.style.cssText = `\n height: ${openHeight()}px;\n z-index: 2;\n `;\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 // -** 獨立 dropdown 出 body 更新\n if (d4.getAttribute('d4-portal') == \"true\") {\n if (d4.__events__._scrollUpdate) {\n window.removeEventListener('scroll', d4.__events__._scrollUpdate, { capture: true });\n window.removeEventListener('resize', d4.__events__._scrollUpdate);\n }\n }\n // -**\n allSublayer.forEach(item => {\n item.classList.remove('open');\n });\n // -** 獨立 dropdown 出 body 更新\n if (d4.getAttribute('d4-portal') == \"true\") {\n d4.s.dropdownEl.style.setProperty('--maxHeight', `${defaultHeight}px`);\n } else {\n d4.style.cssText = `--maxHeight: ${defaultHeight}px;`;\n }\n d4.s.subDropdownTotalH = 0;\n if (d4.classList.contains('filter') && d4.s.dropdownEl.querySelector('.filter-input')) {\n d4.s.dropdownEl.querySelector('.filter-input').value = '';\n d4.s.allLi.forEach(el => el.removeAttribute('style'));\n }\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._didInitialScroll = false;\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 let resizing = false;\n\n // scroll & resize event\n const updateEvent = () => {\n if (!resizing) {\n requestAnimationFrame(() => {\n this.#scrollerDetect();\n this.#buttonDetect();\n resizing = false;\n });\n resizing = true;\n }\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', updateEvent);\n window.addEventListener('resize', 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.#bindItemEvent();\n // 更新 active 位置\n $this.update(true);\n requestAnimationFrame(() => {\n this.#scrollerDetect();\n this.#buttonDetect();\n });\n }\n // 更新 active 位置\n update(withDelay = false) {\n const $wrapper = this.$element.querySelector('.wrapper');\n const $active = $wrapper?.querySelector('.active');\n if (!$active || !$wrapper) return;\n\n const doScroll = () => {\n const wrapRect = $wrapper.getBoundingClientRect()\n const itemRect = $active.getBoundingClientRect()\n\n const wrapCenter = wrapRect.left + wrapRect.width / 2\n const itemCenter = itemRect.left + itemRect.width / 2\n\n const gap = itemCenter - wrapCenter\n const targetLeft = $wrapper.scrollLeft + gap\n $wrapper.scrollTo({\n left: targetLeft,\n behavior: 'smooth',\n });\n };\n\n if (withDelay && !this._didInitialScroll) {\n this._didInitialScroll = true;\n setTimeout(doScroll, 250);\n return;\n }\n\n doScroll();\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\n if (gate <= 0) {\n // console.log(gate,\"gate <= 0\");\n addClass($button, 'hide');\n removeClass($button, 'active');\n addClass($element, 'noScrollable');\n return;\n }\n\n if (gate > 0) {\n // console.log(gate,\"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 removeClass(this.$element, 'noScrollable');\n return true;\n } else {\n addClass(this.$element, 'noScrollable');\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 this.#syncStatus(newVal);\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 // resize 後重算版型前,先關閉展開中的 collapse\n this.#closeCollapse();\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 // 同步目前選中的項目\n #syncStatus(value = this.getAttribute('m4-status')) {\n const status = value ?? '';\n\n const syncActive = selector => {\n this.querySelectorAll(selector).forEach(el => {\n const option = el.getAttribute('data-option')?.trim();\n el.classList.toggle('active', option === status);\n });\n };\n\n // 左右拖拉\n syncActive('.drag-container .item');\n // 展開選項\n syncActive('.collapse-container .item');\n\n // 下拉選項\n const dropdown = this.querySelector('dropdown-el');\n if (dropdown && dropdown.getAttribute('d4-value') !== status) {\n dropdown.setAttribute('d4-value', status);\n }\n\n this.drag?.update();\n }\n // 下拉選項事件綁定\n #bindDropdownEvent() {\n const dropdown = this.querySelector('dropdown-el');\n if (!dropdown || typeof dropdown.on !== 'function') return;\n\n this.__events__.dropdownChange = () => {\n const value = dropdown.getAttribute('d4-value')?.trim() ?? '';\n\n if (this.getAttribute('m4-status') !== value) {\n this.setAttribute('m4-status', value);\n }\n };\n\n dropdown.off?.('change', this.__events__.dropdownChange);\n dropdown.on('change', this.__events__.dropdownChange);\n }\n // 關閉展開中的 collapse\n #closeCollapse() {\n this.classList.remove('expand');\n }\n // check type\n #distribute() {\n const { type } = this.s;\n\n this.#closeCollapse();\n this.innerHTML = '';\n [...createTemplate(this)].forEach(el => {\n this.append(el);\n });\n\n this.#syncStatus();\n\n switch (type) {\n case 'drag':\n this.drag = new dragControl(this);\n break;\n case 'collapse':\n this.drag = new dragControl(this);\n this.collapse = new collapseControl(this);\n break;\n case 'dropdown':\n this.#bindDropdownEvent();\n break;\n }\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","#create","SETTINGS","configs.anchor4","k","v","#init","elements","#trigger","defaultOptions","eventHandler","newOptions","hashName","targetStr","searchParams","MODALS","createTemplate","TEMPLATE","configs.modal4","childDom","content","child","ModernModal","attr","oldVal","newVal","#stateControl","ATTRS","id","#mount","scroller","OverlayScrollbars","#event","$self","close","destroy","closeAttr","destroyAttr","e","state","__scroller__","viewport","transitionEndHandler","pending_fetch","useMethod","name","useFunction","Modal4","dispatchModal","modal","useModal","useFetch","action","on","route","useEvent","res","doms","containerElement","ons","openOptions","obj","methods","interaction","scrollElement","viewHeight","viewTop","className","delay","end","repeat","top","bottom","startTrigger","endTrigger","shouldRemove","detectRepeat","repeatType","Aost4","configs.aost4","removeShow","configs.video4","videoPlayer","videoType","videoMode","COOKIEDISAGREELAYOUT","layout","cookieDisagreeFn","$","#youtube","#youku","#vimeo","#bilibili","#instagram","#tiktok","#video","videoId","autoplay","startTime","hash","lockCount","elementArray","elementArr","element","scrollLock","lock","scrollUnlock","unlock","loading","timerout","loaded","imagePreview","selector","ImagePreview","ajaxUpdate","lazy","LazyLoad","imageValidate","ImageValidate","tabChange","callback","bodyScrollbarInit","appleDebug","detectMacOSVersion","userAgent","clickToggleClass","clickSwitchClass","sleep","time","resolve","timer","debounce","func","context","throttle","timeout","last","now","countDown","i","set_seconds","set_time","minutes","seconds","reject","fixMobile100vh","init","vh","wordAnimation","isWrap","delayStartTime","delaySpace","randomTransTime","$this","removeBr","newText","words","s","letter","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","igCreatePlayer","LAYOUT","#getVideoData","#createCover","#getCoverSrc","$selector","videoInboxImg","videoHighQualityPic","selectorImg","selectorImgSrc","response","html","#applyCoverSrc","$cover","url","videoLayoutNo","videoButton","videoCover","$target","src","layoutHtml","err","videoTarget","videoKeep","videoTargetRoute","videoIgHtml","videoStartTime","modalOptions","scrollers","entries","videoInboxImgs","targetElements","cityData","d4","configs.dropdown4","subOption","detectSync","controlElements","disabledEl","setSelectDisplay","valueIndex","placeholder","allLi","option","li","activeLi","tagEl","valueArray","loadCityData","lang","originalData","city","loadDistData","dist","closeAllDropdown","settingScrollbarStyle","key","Dropdown4","valueLiArray","valueIndexArray","#positionPortal","rect","dropdownHeight","valueLi","cityDropdown","cityDropdownHasVal","toggleTransitionend","dropdownStatus","hasFilter","scrollToActive","halfActiveLiHeight","offsetTop","scroll","computedHeight","totalHeight","citySelect","clickOption","clickIndex","defaultHeight","subDropdown","subDropdownList","subDropdownListMargin","subDropdownH","maxHeight","recalculate","distSelectEl","activeLiArray","scrollerMaxHeight","item","margin","openHeight","filterBarEl","filterBarH","h","allSublayer","getBreakpoints","m4","breakpoints","getDuration","breakpoint","points","point","a","createAnimateWrap","behavior","continual","childDOM","animateItem","cloneElement","cloneAnimateWrap","keyframes","framesObj","animateFrom","animateTo","Marquee4","configs.marquee4","#animation","duration","pauseOnMouseenter","playDelay","animateInit","enterKeyframes","framesArr","moveDistance","averageDuration","updateDuration","cloneStartTime","addClass","removeClass","dragControl","resizing","updateEvent","#scrollerDetect","#buttonDetect","#bindDragEvent","#bindButtonEvent","#bindItemEvent","withDelay","$wrapper","$active","doScroll","wrapRect","itemRect","wrapCenter","targetLeft","$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","#distribute","#syncStatus","#closeCollapse","#breakpoint","customize","#render","keys","status","syncActive","#bindDropdownEvent","Tab4","#stateChange","configs.tab4","#tabSet","#createSwiper","matchingTabs","#resizeTab","tabs","#getTabIndex","tabPanelsWithId","panel","tabPanel","swiperContainer","swiperWrapper","slide","#initSwiper","sContainer","sWrapper","tabPanels","totalWidth","#addUrl","newUrl","#eventAnchor","pageYOffset","changeOffset","#goAnchor","#step","current","#btnNextState","newPage","next","isSinglePage","isLastPage","btn","#btnPrevState","prev","isFirstPage","#tabState","tabId","tab","#isTrue","fun","val2","#animationHide","timing","#animationShow","clientHeight","slideWidth","translateValue","newTabIndex","_this_","clickedTab","indexOf","newTabId","defaultID","tabIndex","nextPage","nextPageId","prevPage","prevPageId","changeEvent","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","configs.ripple4","attrToBoolean","booleanVal","#ball","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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AK;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,IACnB;AAAA,IACI,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,MACb,CAAC,OAAO,KAAK;AAAA,MACb,CAAC,OAAO,KAAK;AAAA,MACb,CAAC,OAAO,KAAK;AAAA,IACnB;AAAA,IACI,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,IACnB;AAAA,IACI,KAAK;AAAA,MACH,CAAC,OAAO,KAAK;AAAA,MACb,CAAC,OAAO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C,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,IACnB;AAAA,IACI,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,IACnB;AAAA,IACI,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,IACnB;AAAA,IACI,KAAK;AAAA,MACH,CAAC,MAAM,KAAK;AAAA,MACZ,CAAC,MAAM,KAAK;AAAA,IAClB;AAAA,IACI,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,IACnB;AAAA,IACI,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,IACnB;AAAA,IACI,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,MA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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/tools/cgpagechange.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: '.playTrigger',\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 openModal: null,\n closeModal: null,\n },\n // video4 target 內放置結構 index 對應 videoLayoutNo\n LAYOUT: [\n `\n <div class=\"playTrigger\">\n <div class=\"playButton\"></div>\n </div>\n <div class=\"overlay\"></div>\n `\n ],\n COOKIEDISAGREELAYOUT: \n `\n <div class=\"disagree-inner\">\n <div class=\"icon\"> <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"7\" height=\"25\" viewBox=\"0 0 7 25\"\n fill=\"none\">\n <path\n d=\"M0 0H6.96277L5.77128 16.1948H1.22872L0 0ZM0 22.0304C0 21.1556 0.322695 20.442 0.968085 19.8895C1.6383 19.337 2.48227 19.0608 3.5 19.0608C4.51773 19.0608 5.34929 19.337 5.99468 19.8895C6.66489 20.442 7 21.1556 7 22.0304C7 22.9052 6.66489 23.6188 5.99468 24.1713C5.34929 24.7238 4.51773 25 3.5 25C2.48227 25 1.6383 24.7238 0.968085 24.1713C0.322695 23.6188 0 22.9052 0 22.0304Z\"\n fill=\"white\"></path>\n </svg></div>\n <div class=\"title ch\">由於未授權 Cookie 使用,影片無法播放</div>\n <div class=\"title en\">The video can’t be played due to unauthorized use of cookies.</div>\n <div class=\"text\">\n <div class=\"box\"><span>您可前往 </span><span data-cookie data-cookie-open=\"advance\">Cookie 偏好設定</span><span> 進行修改</span></div>\n <div class=\"box\"><span>Modify your </span><span data-cookie data-cookie-open=\"advance\">cookie preferences.</span></div>\n </div>\n </div>\n `\n ,\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 markdownLinkBlank: 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","const pageChange = {\n CG_A: function (href) {\n $('html,body')\n .delay(100)\n .animate(\n { opacity: '0' },\n {\n queue: true,\n duration: 800,\n easing: 'easeOutQuad',\n complete: function () {\n window.location.assign(href);\n },\n },\n );\n },\n CG_B: function (href) {\n $('main').append(\"<div id='CG_Abg'><div class='CG_Abg1'></div><div class='CG_Abg2'></div></div>\");\n\n $('body')\n .delay(1200)\n .animate(\n { opacity: '0' },\n {\n queue: true,\n duration: 200,\n easing: 'easeOutQuad',\n complete: function () {\n setTimeout(function () {\n window.location.assign(href);\n }, 100);\n },\n },\n );\n },\n CG_C: function (href) {\n $('main').append(\"<div id='CG_Bbg'></div>\");\n $('body')\n .delay(1200)\n .animate(\n { opacity: '0' },\n {\n queue: true,\n duration: 200,\n easing: 'easeOutQuad',\n complete: function () {\n setTimeout(function () {\n window.location.assign(href);\n }, 100);\n },\n },\n );\n },\n CG_D: function (href) {\n $('main').append(\"<div id='CG_Cbg'><div class='CG_Cbg1'></div><div class='CG_Cbg2'></div></div>\");\n $('body')\n .delay(1200)\n .animate(\n { opacity: '0' },\n {\n queue: true,\n duration: 200,\n easing: 'easeOutQuad',\n complete: function () {\n setTimeout(function () {\n window.location.assign(href);\n }, 100);\n },\n },\n );\n },\n};\n\nconst randomAnimate = href => {\n const i = Math.floor(Math.random() * Math.floor(4)) + 1;\n switch (1) {\n case 1:\n pageChange.CG_A(href);\n break;\n case 2:\n pageChange.CG_B(href);\n break;\n case 3:\n pageChange.CG_C(href);\n break;\n case 4:\n pageChange.CG_D(href);\n break;\n default:\n break;\n }\n};\n\nexport const clickEvent = (e,hrefLink) => {\n e.preventDefault();\n const $this = $(e.currentTarget);\n const thisTarget = $this.attr('target');\n const aHref = $this.attr('href');\n let href;\n \n if (hrefLink) {\n // 如果有屬性 data-nolink 就阻止轉址\n if ($this.is('[data-nolink]')) {\n e.stopPropagation(); \n e.preventDefault();\n return\n }\n if ($this.hasClass('href-link')) {\n href = $this.closest('[data-href]').attr('data-href');\n } else {\n href = aHref;\n }\n } else {\n // 如果有屬性 data-nolink 就阻止轉址\n if ($this.is('[data-nolink]')) {\n e.stopPropagation(); \n e.preventDefault();\n return\n }\n if ($this.hasClass('click-block')) {\n href = $this.closest('[data-href]').attr('data-href');\n } else {\n href = aHref;\n }\n }\n\n // 本地\n const x = window.location.pathname.replace('http://', '');\n let xArr = x.split('/');\n xArr = lastArr(xArr);\n // 連結\n const y = href.replace('http://', '');\n let yArr = y.split('/');\n yArr = lastArr(yArr);\n function lastArr(arr) {\n const last = arr.pop();\n if (last.indexOf('#') > -1) {\n arr.push(last);\n } else if (last.indexOf('html') > 0) {\n arr.push(last);\n } else if (last == '') {\n arr.push('index.html');\n } else {\n arr.push(last);\n arr.push('index.html');\n }\n return arr;\n }\n if (thisTarget == '_blank' || e.ctrlKey || e.metaKey) {\n window.open(href);\n } else if (y.indexOf('jpg') > -1 || y.indexOf('javascript') > -1) {\n //啥事都不幹\n } else {\n randomAnimate(href);\n }\n};\n\nconst mouseenterEvent = e => {\n const $this = $(e.currentTarget);\n const $hrefEl = $this.closest('[data-href]');\n if ($hrefEl.hasClass('isHover')) return;\n $hrefEl.addClass('isHover');\n};\n\nconst mouseleaveEvent = e => {\n const $this = $(e.currentTarget);\n const $hrefEl = $this.closest('[data-href]');\n if (!$hrefEl.hasClass('isHover')) return;\n $hrefEl.removeClass('isHover');\n};\n\nlet currentHrefLink = true;\n\nexport const getHrefLink = () => currentHrefLink;\n\nexport const cgpagechange = (hrefLink = true) => {\n currentHrefLink = hrefLink;\n // 動畫曲線\n $.easing['jswing'] = $.easing['swing'];\n $.extend($.easing, {\n def: 'easeOutQuad',\n easeOutQuad: function (x, t, b, c, d) {\n return -c * (t /= d) * (t - 2) + b;\n },\n easeInOutCirc: function (x, 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 });\n if (hrefLink) {\n $('body').on('click', 'a:not(.nocg), .href-link, [data-nolink]', e => clickEvent(e,hrefLink));\n // $('body').on('click', 'a:not(.nocg)', function(e) {\n // e.stopPropagation();\n // });\n } else {\n $('body').on('click', 'a:not(.nocg), .click-block, [data-nolink]', e => clickEvent(e,hrefLink));\n // $('body').on('click', 'a:not(.nocg)', function(e) {\n // e.stopPropagation();\n // });\n }\n $('body').on('mouseenter', '[data-href] a', e => mouseenterEvent(e));\n $('body').on('mouseleave', '[data-href] a', e => mouseleaveEvent(e));\n}\n\n\n//\n\n\n// const pageChange = {\n// CG_A: function (href) {\n// $('html,body').delay(100).animate({ opacity: '0' }, {\n// queue: true,\n// duration: 800,\n// easing: 'easeOutQuad',\n// complete: function () {\n// window.location.assign(href);\n// },\n// });\n// },\n// CG_B: function (href) {\n// $('main').append(\"<div id='CG_Abg'><div class='CG_Abg1'></div><div class='CG_Abg2'></div></div>\");\n\n// $('body')\n// .delay(1200)\n// .animate(\n// { opacity: '0' },\n// {\n// queue: true,\n// duration: 200,\n// easing: 'easeOutQuad',\n// complete: function () {\n// setTimeout(function () {\n// window.location.assign(href);\n// }, 100);\n// },\n// },\n// );\n// },\n// CG_C: function (href) {\n// $('main').append(\"<div id='CG_Bbg'></div>\");\n// $('body')\n// .delay(1200)\n// .animate(\n// { opacity: '0' },\n// {\n// queue: true,\n// duration: 200,\n// easing: 'easeOutQuad',\n// complete: function () {\n// setTimeout(function () {\n// window.location.assign(href);\n// }, 100);\n// },\n// },\n// );\n// },\n// CG_D: function (href) {\n// $('main').append(\"<div id='CG_Cbg'><div class='CG_Cbg1'></div><div class='CG_Cbg2'></div></div>\");\n// $('body')\n// .delay(1200)\n// .animate(\n// { opacity: '0' },\n// {\n// queue: true,\n// duration: 200,\n// easing: 'easeOutQuad',\n// complete: function () {\n// setTimeout(function () {\n// window.location.assign(href);\n// }, 100);\n// },\n// },\n// );\n// },\n// };\n\n// const randomAnimate = href => {\n// const i = Math.floor(Math.random() * Math.floor(4)) + 1;\n// switch (1) {\n// case 1: pageChange.CG_A(href); break;\n// case 2: pageChange.CG_B(href); break;\n// case 3: pageChange.CG_C(href); break;\n// case 4: pageChange.CG_D(href); break;\n// default: break;\n// }\n// };\n\n// const clickEvent = e => {\n// e.preventDefault();\n// const $this = $(e.currentTarget);\n// const thisTarget = $this.attr('target');\n// const href = $this.hasClass('href-link')\n// ? $this.closest('[data-href]').attr('data-href')\n// : $this.attr('href');\n\n// const lastArr = (arr) => {\n// const last = arr.pop();\n// if (last.indexOf('#') > -1) {\n// arr.push(last);\n// } else if (last.indexOf('html') > 0) {\n// arr.push(last);\n// } else if (last == '') {\n// arr.push('index.html');\n// } else {\n// arr.push(last);\n// arr.push('index.html');\n// }\n// return arr;\n// }\n\n// if (thisTarget == '_blank' || e.ctrlKey || e.metaKey) {\n// window.open(href);\n// } else if (y.indexOf('jpg') > -1 || y.indexOf('javascript') > -1) {\n// //啥事都不幹\n// } else {\n// randomAnimate(href);\n// }\n\n// // 本地\n// const x = window.location.pathname.replace('http://', '');\n// let xArr = x.split('/');\n// xArr = lastArr(xArr);\n// // 連結\n// const y = href.replace('http://', '');\n// let yArr = y.split('/');\n// yArr = lastArr(yArr);\n\n\n// };\n\n// const mouseenterEvent = e => {\n// const $this = $(e.currentTarget);\n// const $hrefEl = $this.closest('[data-href]');\n// if ($hrefEl.hasClass('isHover')) return;\n// $hrefEl.addClass('isHover');\n// };\n\n// const mouseleaveEvent = e => {\n// const $this = $(e.currentTarget);\n// const $hrefEl = $this.closest('[data-href]');\n// if (!$hrefEl.hasClass('isHover')) return;\n// $hrefEl.removeClass('isHover');\n// };\n\n// export const cgpagechange = () => {\n// // 動畫曲線\n// $.easing['jswing'] = $.easing['swing'];\n// $.extend($.easing, {\n// def: 'easeOutQuad',\n// easeOutQuad: function (x, t, b, c, d) {\n// return -c * (t /= d) * (t - 2) + b;\n// },\n// easeInOutCirc: function (x, 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// });\n\n// $('body').on('click', 'a:not(.nocg), .href-link', e => clickEvent(e));\n// $('body').on('mouseenter', '[data-href] a', e => mouseenterEvent(e));\n// $('body').on('mouseleave', '[data-href] a', e => mouseleaveEvent(e));\n// }\n\n\n\n","import { configs } from '../configs'\nimport { EVENTS, createUid, warn } from '../commons'\nimport { OverlayScrollbars } from 'overlayscrollbars'\nimport { clickEvent, getHrefLink } from \"@/tools/cgpagechange\";\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\nconst bindModalHrefLinks = (modal) => {\n const $modal = $(modal);\n if (!modal) return;\n const hrefLink = getHrefLink();\n if (!hrefLink) return;\n\n let target = hrefLink\n ? \"a:not(.nocg), .href-link, [data-nolink]\"\n : \"a:not(.nocg), .click-block, [data-nolink]\";\n const $links = $modal.find(target);\n\n $links.off(\"click.modalHrefLink\");\n $links.on(\"click.modalHrefLink\", function (e) {\n clickEvent(e, hrefLink);\n });\n};\n\nconst unbindModalHrefLinks = (modal) => {\n const $modal = $(modal);\n if (!modal) return;\n const hrefLink = getHrefLink();\n if (!hrefLink) return;\n\n let target = hrefLink\n ? \"a:not(.nocg), .href-link, [data-nolink]\"\n : \"a:not(.nocg), .click-block, [data-nolink]\";\n const $links = $modal.find(target);\n\n $links.off(\"click.modalHrefLink\");\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 bindModalHrefLinks(this);\n\n return this;\n }\n\n close() {\n this.setAttribute(':state', 'close');\n unbindModalHrefLinks(this);\n\n return this;\n }\n\n destroy() {\n this.setAttribute(':state', 'destroy');\n unbindModalHrefLinks(this);\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// prevent fetch modal multiple click \nconst pending_fetch = {}\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 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 // prevent fetch modal multiple click \n if (pending_fetch[target]) return\n pending_fetch[target] = true\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 delete pending_fetch[target]\n })\n .catch(error => {\n // trigger error event\n useEvent('error', error);\n delete pending_fetch[target]\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.videoMode = this.getAttribute('video-mode');\n this.autoplay = this.getAttribute('video-autoplay');\n this.startTime = this.getAttribute('video-starttime');\n this.videoInboxImg = this.getAttribute('video-inbox-img');\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,videoMode } = this;\n const { COOKIEDISAGREELAYOUT } = configs.video4;\n let layout = '';\n function cookieDisagreeFn(el) {\n $(el).addClass(\"cookie-disagree\")\n $(\".cookie-disagree\").append(COOKIEDISAGREELAYOUT)\n }\n\n switch (videoType) {\n case 'youtubeAPI':\n // this.#youtubeAPI();\n break;\n case 'youtube':\n if (document.body.wd_youtube == false) {\n cookieDisagreeFn(\"video-player\")\n } else {\n layout = this.#youtube();\n }\n break;\n case 'youkuAPI':\n // this.#youkuAPI();\n break;\n case 'youku':\n if (document.body.wd_youku == false) {\n cookieDisagreeFn(\"video-player\")\n } else {\n layout = this.#youku();\n }\n break;\n case 'vimeo':\n if (document.body.wd_vimeo == false) {\n cookieDisagreeFn(\"video-player\")\n } else {\n layout = this.#vimeo();\n }\n break;\n case 'bilibili':\n if (document.body.wd_bilibili == false) {\n cookieDisagreeFn(\"video-player\")\n } else {\n layout = this.#bilibili();\n }\n break;\n case 'instagram':\n if (document.body.wd_instagram == false) {\n cookieDisagreeFn(\".instagram-media\")\n } else {\n layout = this.#instagram();\n }\n break;\n case 'tiktok':\n if (document.body.wd_tiktok == false) {\n cookieDisagreeFn(\"video-player\")\n } else {\n layout = this.#tiktok();\n }\n break;\n case 'videojs':\n // this.#videoJs();\n break;\n case 'video':\n layout = this.#video();\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=true' : ''}\" allow=\"${autoplay === 'on' ? 'autoplay;' : ''} width=\"100%\" height=\"100%\" 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 // 2026.01.15 新增 video \n #video() {\n const { videoId, autoplay } = this;\n return `<video src=\"${videoId}\" ${autoplay == \"on\" ? \"autoplay\" : \"\"} muted playsinline controls></video>`;\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, Detect4 } from '@/fesd'\nimport LazyLoad from 'vanilla-lazyload'\nimport { lock, unlock } from 'tua-body-scroll-lock'\nimport { OverlayScrollbars } from 'overlayscrollbars'\n\n/**\n * Scroll Lock / Unlock\n */\nlet lockCount = 0;\nfunction elementArray(elements) {\n const elementArr = [];\n\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 return elementArr;\n}\n\nexport function scrollLock(elements) {\n const elementArr = elementArray(elements);\n\n lockCount += 1;\n\n if (lockCount === 1) {\n document.documentElement.classList.add(\"scrollLock\");\n }\n\n lock(elementArr);\n}\n\nexport function scrollUnlock(elements) {\n lockCount = Math.max(0, lockCount - 1);\n\n const elementArr = elementArray(elements);\n unlock(elementArr);\n\n if (lockCount === 0) {\n document.documentElement.classList.remove(\"scrollLock\");\n }\n}\n\n/**\n * Loading animate\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/**\n * ImagePreview\n */\nexport function imagePreview(selector, options) {\n new ImagePreview(selector, options);\n}\n\n/**\n * Ajax Update\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\n/**\n * Tab Change\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 * Timing tools\n */\nexport const sleep = (time) => new Promise((resolve) => {\n let timer = setTimeout(() => {\n clearTimeout(timer)\n return resolve()\n }, time)\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\nconst igCreatePlayer = params => {\n console.log(params.videoId,\"params.videoId\");\n return `<blockquote class=\"instagram-media\" data-instgrm-captioned data-instgrm-permalink=\"${params.videoId}\"></blockquote>`;\n};\n\nclass video4 {\n static globalOptions = {}; //*-* 給Article4用的 **//\n\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, LAYOUT } = configs.video4; //*-* 加 LAYOUT **//\n\n //*-* 如果 new Video4 有帶 isGlobal: true,就把這次的設定變成全站預設 **//\n if (options.isGlobal) {\n video4.globalOptions = options;\n }\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({}, { LAYOUT }, SETTINGS, options); \n \n //*-* start **//\n this.options = Object.assign(\n {},\n { LAYOUT }, // 原始 configs 的 LAYOUT\n SETTINGS, // 原始 configs 的 SETTINGS\n video4.globalOptions, // 全站 A 設定\n options // 個別傳入的設定 (優先級最高)\n );\n //*-* end **//\n \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 #getCoverSrc(params) {\n const { $selector, videoId, videoType, videoInboxImg, videoHighQualityPic } = params;\n const selectorImg = $selector?.querySelector('img');\n const selectorImgSrc = selectorImg?.getAttribute('src') || selectorImg?.getAttribute('data-src');\n\n if (videoInboxImg) {\n return Promise.resolve(videoInboxImg);\n }\n\n if (selectorImgSrc) {\n return Promise.resolve(selectorImgSrc);\n }\n\n if (videoType == 'youtube') {\n if (videoHighQualityPic == 'on') {\n return Promise.resolve(`https://img.youtube.com/vi/${videoId}/maxresdefault.jpg`);\n } else {\n return Promise.resolve(`https://img.youtube.com/vi/${videoId}/0.jpg`);\n }\n } else if (videoType == 'vimeo') {\n return Promise.resolve(`https://vumbnail.com/${videoId}_large.jpg`);\n } else if (videoType == 'tiktok') {\n return fetch(`https://www.tiktok.com/oembed?url=https://www.tiktok.com/@/video/${videoId}`, { method: 'GET', redirect: 'follow' })\n .then(response => response.json())\n .then(html => html.thumbnail_url)\n .catch(function () {\n return '';\n });\n }\n\n return Promise.resolve('');\n }\n\n #applyCoverSrc($cover, params) {\n const { videoType, videoId } = params;\n const src = $cover?.getAttribute('src') || $cover?.getAttribute('data-src');\n\n if (src) return;\n\n if (videoType === 'video') {\n // 先預拉出 video 影片, 抓第一幀的畫面用 canvas 轉圖片當作封面圖\n const v = document.createElement('video');\n \n v.src = videoId;\n v.preload = 'metadata';\n v.muted = true;\n v.playsInline = true;\n v.crossOrigin = 'anonymous';\n\n v.onloadeddata = () => {\n v.currentTime = 0.5; // 抓 0.5 秒的畫面為封面圖\n };\n\n v.onseeked = () => {\n const c = document.createElement('canvas');\n c.width = v.videoWidth;\n c.height = v.videoHeight;\n c.getContext('2d').drawImage(v, 0, 0);\n $cover.src = c.toDataURL('image/jpeg', 0.85);\n };\n\n return;\n }\n\n this.#getCoverSrc(params).then(url => {\n if (url) {\n $cover.setAttribute('src', `${url}`);\n } else {\n warn('video4', `僅 youtube & vimeo 提供,無圖片時放置預設封面畫面,其他影片平台請自行上傳封面照片`);\n }\n });\n }\n\n #createCover(el) {\n const { LAYOUT } = this.options; //*-* 改 this.options **//\n const params = el.video.params;\n const { $selector, videoLayoutNo, videoId, videoType, videoMode, videoButton, videoCover, videoHighQualityPic } = params;\n\n if (videoMode === 'onBox' || videoMode === 'inBox') {\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 const src = $cover?.getAttribute('src') || $cover?.getAttribute('data-src');\n // $cover.insertAdjacentHTML(insert.after, LAYOUT[videoLayoutNo]);\n //*-* 按鈕防呆 start **//\n //*-* 確認該 index 是否存在,不存在就強制用 0,如果連 0 都沒有就給空字串 **//\n const layoutHtml = LAYOUT[videoLayoutNo] ? LAYOUT[videoLayoutNo] : (LAYOUT[0] || '');\n if (layoutHtml) {\n $cover.insertAdjacentHTML(insert.after, layoutHtml);\n } else {\n warn('video4', `找不到對應的 LAYOUT 設定 (No: ${videoLayoutNo}),且無預設樣式。`);\n }\n //*-* 按鈕防呆 end **//\n \n\n // 無圖片時放置預設封面畫面,僅 youtube & vimeo 提供\n if (!src) {\n this.#applyCoverSrc($cover, params);\n } else if (!src && videoType == 'youtube') {\n if (videoHighQualityPic == 'on') {\n $cover.setAttribute('src', `https://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 === 'video') {\n // 先預拉出 video 影片, 抓第一幀的畫面用 canvas 轉圖片當作封面圖\n const v = document.createElement('video');\n \n v.src = videoId;\n v.preload = 'metadata';\n v.muted = true;\n v.playsInline = true;\n v.crossOrigin = 'anonymous';\n\n v.onloadeddata = () => {\n v.currentTime = 0.5; // 抓 0.5 秒的畫面為封面圖\n };\n\n v.onseeked = () => {\n const c = document.createElement('canvas');\n c.width = v.videoWidth;\n c.height = v.videoHeight;\n c.getContext('2d').drawImage(v, 0, 0);\n $cover.src = c.toDataURL('image/jpeg', 0.85);\n };\n\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 $target.video.instance = this;\n }\n\n $target.video.eventHandler = this.#trigger;\n $target.addEventListener('click', $target.video.eventHandler);\n\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) {\n this.#applyCoverSrc($cover, params);\n } else 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 } = this;\n const instance = video.instance;\n const { \n $selector, \n videoMode, \n videoTarget, \n videoKeep,\n videoId, \n videoTargetRoute, \n videoType, \n videoIgHtml, \n videoInboxImg,\n videoButton,\n videoLayoutNo,\n videoStartTime,\n } = video.params;\n const lazy = new LazyLoad({ callback_loaded: img => { }, })\n\n const params = new URLSearchParams({\n video_mode: videoMode,\n video_type: videoType,\n video_id: videoId,\n });\n \n if (videoMode == 'onBox' || videoMode == 'inBox') {\n const modalOptions = {\n target: videoTarget,\n route: videoTargetRoute + `?${params.toString()}`,\n on: {\n complete(modal) {\n if (videoMode == 'onBox') {\n if (videoType == 'instagram') {\n modal.setAttribute('video-typeStyle', `${videoType}`)\n if (window.instgrm?.Embeds) {\n modal.querySelector('.modal-content').insertAdjacentHTML('beforeend', igCreatePlayer(video.params));\n window.instgrm.Embeds.process();\n } else {\n console.log('window.instgrm is undefined');\n }\n } else {\n modal.querySelector('.modal-content').insertAdjacentHTML('beforeend', createPlayer(video.params));\n modal.setAttribute('video-typeStyle', `${videoType}`)\n }\n }\n if (videoMode == 'inBox') {\n modal.setAttribute('video-typeStyle', `${videoType}`)\n if (videoType == 'instagram') {\n if (window.instgrm?.Embeds) {\n modal.querySelector('.modal-content').insertAdjacentHTML('beforeend', igCreatePlayer(video.params));\n window.instgrm.Embeds.process();\n } else {\n console.log('window.instgrm is undefined');\n }\n }\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 resizeObserver.observe(target);\n }\n // if (videoMode == 'onBox') {\n // }\n if (videoMode == 'inBox') {\n if (videoType == 'instagram') {\n $(\".video-content\").remove();\n } else{\n let layout\n const target = modal.querySelector('.video-content');\n\n instance.#getCoverSrc(video.params).then(videoInboxImgs => {\n layout = `\n <div\n class=\"photo-box\"\n video-target\n video-mode=\"onPage\"\n video-type=\"${videoType}\"\n video-id=\"${videoId}\"\n video-button=\"${videoButton}\"\n video-layout-no=\"${videoLayoutNo}\"\n video-starttime=\"${videoStartTime}\"\n >\n <picture>\n <source\n srcset=\"${videoInboxImgs || ''}\"\n type=\"image/webp\"\n />\n <source\n srcset=\"${videoInboxImgs || ''}\"\n type=\"image/jpeg\"\n />\n <img src=\"${videoInboxImgs || ''}\" alt=\"\" />\n </picture>\n </div>`\n\n target.insertAdjacentHTML(insert.prepend, layout);\n\n const targetElements = modal.querySelectorAll('[video-target]');\n if (targetElements.length > 0) {\n new video4(targetElements, { \n LAYOUT: video.params.LAYOUT, \n videoLayoutNo: \n video.params.videoLayoutNo \n });\n }\n });\n }\n }\n instance?.emit('openModal');\n },\n close(modal) {\n const scrollers = modal.querySelectorAll('[data-overlayscrollbars-viewport]');\n scrollUnlock([...scrollers]);\n instance?.emit('closeModal');\n },\n destroy(modal) {\n },\n },\n };\n\n Modal4.open(modalOptions);\n \n } else if (videoMode == 'onPage') {\n // onPage 點擊後應自動撥放影片\n video.params.videoAutoplay = 'on';\n\n if (videoKeep == 'off') {\n // 直接替換 cover & playButton\n // 2026.01.15 update 補判斷\n if ($selector.querySelector('video-player')) {\n return;\n }\n\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, LAYOUT } = configs.video4;\n const SETTINGS = this.options; //*-*//\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 videoInboxImg: el.getAttribute('video-inbox-img') || SETTINGS.videoInboxImgHtml,\n LAYOUT: SETTINGS.LAYOUT || []\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;","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 as originalData } from './cityData'\nimport { OverlayScrollbars } from 'overlayscrollbars'\n\n('use strict');\n\nlet cityData\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.s.dropdownEl.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.s.dropdownEl.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 if ($(\"#newCityData\").length > 0) {\n if ($(\"#newCityData\").val() !== \"\") {\n cityData = JSON.parse($(\"#newCityData\").val())[0]\n console.log([0]);\n }\n } else {\n cityData = originalData\n }\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.s.dropdownEl.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.s.dropdownEl.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 (e) {\n const insideDropdown = e.target.closest('dropdown-el') || e.target.closest('[data-d4-portal]');\n if (!insideDropdown) closeAllDropdown();\n}, true);\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.s.dropdownEl.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.s.dropdownEl.querySelector(`.dropdown-list li`).classList.remove('active');\n newVal.split(',').forEach(option => {\n const li = d4.s.dropdownEl.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 disconnectedCallback() {\n // -** 獨立 dropdown 出 body 更新 - 關閉下拉時移除結構\n if (this.s && this.s.dropdownEl && this.s.dropdownEl.parentNode === document.body) {\n document.body.removeChild(this.s.dropdownEl);\n }\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 // -** 獨立 dropdown 出 body 更新\n this.s.dropdownEl = this.querySelector('.dropdown');\n if (this.getAttribute('d4-portal') === 'true') {\n this.s.dropdownEl.setAttribute('data-d4-portal', '');\n document.body.appendChild(this.s.dropdownEl);\n }\n this.#init();\n }\n // -** 獨立 dropdown 出 body 更新\n #positionPortal() {\n const d4 = this;\n const rect = d4.getBoundingClientRect();\n const el = d4.s.dropdownEl;\n \n el.style.position = 'fixed';\n el.style.overflow = `hidden`;\n el.style.left = `${rect.left}px`;\n el.style.width = `${rect.width}px`;\n\n const dropdownHeight = parseInt(el.style.height) || el.scrollHeight;\n const spaceBelow = window.innerHeight - rect.bottom;\n if (spaceBelow < dropdownHeight && rect.top > dropdownHeight) {\n // 上方展開\n el.style.top = 'auto';\n el.style.bottom = `${window.innerHeight - rect.top + 5}px`;\n } else {\n el.style.top = `${rect.bottom + 5}px`;\n el.style.bottom = 'auto';\n }\n }\n #init() {\n const d4 = this;\n d4.s.allLi = d4.s.dropdownEl.querySelectorAll('.dropdown-list li');\n d4.s.selectDisplayEl = d4.querySelector('.select-display');\n // -** 獨立 dropdown 出 body 更新\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.s.dropdownEl.querySelectorAll('.dropdown-list li');\n d4.classList.remove('disabled');\n if (d4.getAttribute('d4-value') !== '') {\n const dist = value.split(',')[1];\n valueLi = d4.s.dropdownEl.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.s.dropdownEl.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.s.dropdownEl.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 (d4.s.subDropdownTotalH > 0 && d4.__scroller__) {\n d4.__scroller__.update(true);\n }\n if (hasFilter) {\n d4.s.dropdownEl.querySelector('.filter-bar input').disabled = false;\n d4.s.dropdownEl.querySelector('.filter-bar input').focus();\n }\n if (d4.s.selectType === 'single') {\n scrollToActive();\n }\n break;\n case 'close':\n // -** 獨立 dropdown 出 body 更新\n if (d4.getAttribute('d4-portal') == \"true\") {\n if (d4.__scroller__) d4.__scroller__.update(true);\n d4.s.dropdownEl.style.height = '';\n d4.s.dropdownEl.style.zIndex = '';\n if (hasFilter) d4.s.dropdownEl.querySelector('.filter-bar input').disabled = true;\n if (d4.s.dropdownEl.parentNode === document.body) {\n document.body.removeChild(d4.s.dropdownEl);\n }\n } else {\n d4.__scroller__.update(true);\n d4.s.dropdownEl.removeAttribute('style');\n if (hasFilter) d4.querySelector('.filter-bar input').disabled = true;\n }\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.s.dropdownEl.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.s.dropdownEl.querySelector('.dropdown-scroller');\n const citySelect = d4.classList.contains('city');\n d4.s.allLi = d4.s.dropdownEl.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 // -** 獨立 dropdown 出 body 更新\n if (d4.getAttribute('d4-portal') == \"true\") {\n d4.s.dropdownEl.style.setProperty('--maxHeight', `${totalHeight}px`);\n } else {\n d4.style.cssText = `--maxHeight: ${totalHeight}px;`;\n }\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.s.dropdownEl.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 // -** 獨立 dropdown 出 body 更新\n if (d4.getAttribute('d4-portal') == \"true\") {\n distSelectEl.s.dropdownEl.querySelector('.dropdown-list').append(li);\n } else {\n distSelectEl.querySelector('.dropdown-list').append(li);\n }\n });\n d4.__events__.selectOption(distSelectEl);\n }\n }\n // -** 獨立 dropdown 出 body 更新\n if (d4.getAttribute('d4-portal') == \"true\") {\n e.stopPropagation();\n d4.close();\n } else {\n if (clickOption.parentNode.closest('li')?.classList.contains('has-sublayer')) {\n e.stopPropagation();\n d4.close();\n }\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.s.dropdownEl.querySelector('.filter-bar').addEventListener('click', function (e) {\n e.stopPropagation();\n });\n d4.s.dropdownEl.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.s.dropdownEl.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 if (!(d4.getAttribute('d4-portal') == \"true\")) {\n d4.__events__.bindScrollbar();\n }\n d4.__events__.selectOption();\n d4.__events__.filterHandler();\n d4.__events__.removeTag();\n d4.__events__.transitionend();\n }\n open() {\n const d4 = this;\n let dropdownHeight;\n if (d4.getAttribute('d4-portal') == \"true\") {\n // -** 獨立 dropdown 出 body 更新\n closeAllDropdown();\n\n if (d4.s.dropdownEl.parentNode !== document.body) {\n document.body.appendChild(d4.s.dropdownEl);\n }\n\n if (!d4.__scroller__) {\n d4.__events__.bindScrollbar();\n }\n this.#positionPortal();\n void d4.s.dropdownEl.offsetHeight;\n\n dropdownHeight = d4.s.dropdownEl.querySelector('.dropdown-scroller').clientHeight;\n } else {\n dropdownHeight = d4.querySelector('.dropdown-scroller').clientHeight;\n }\n const hasFilter = d4.classList.contains('filter');\n const totalHeight = () => {\n // -** 獨立 dropdown 出 body 更新\n if (d4.getAttribute('d4-portal') == \"true\") {\n if (hasFilter) {\n if (d4.s.dropdownEl.querySelector('.dropdown-scroller .filter-bar')) {\n return dropdownHeight\n } else {\n return d4.s.dropdownEl.querySelector('.filter-bar') ? d4.s.dropdownEl.querySelector('.filter-bar').clientHeight + dropdownHeight : dropdownHeight;\n }\n }\n } else {\n if (hasFilter) {\n if (d4.querySelector('.dropdown-scroller .filter-bar')) {\n return dropdownHeight\n } else {\n return d4.querySelector('.filter-bar') ? d4.querySelector('.filter-bar').clientHeight + dropdownHeight : dropdownHeight;\n }\n }\n }\n return dropdownHeight;\n };\n // -** 雙層選單預設 open 更新 (data-open=\"true\")\n d4.s.subDropdownTotalH = 0;\n const scroller = d4.getAttribute('d4-portal') == \"true\"\n ? d4.s.dropdownEl.querySelector('.dropdown-scroller')\n : d4.querySelector('.dropdown-scroller');\n const scrollerMaxHeight = parseInt(getComputedStyle(scroller).maxHeight);\n d4.s.dropdownEl.querySelectorAll('.has-sublayer[data-open=\"true\"]').forEach(item => {\n const subDropdown = item.querySelector('.sub-dropdown');\n const subDropdownList = subDropdown.querySelector('.sub-dropdown-list');\n const margin = parseInt(getComputedStyle(subDropdownList).marginTop) + parseInt(getComputedStyle(subDropdownList).marginBottom);\n subDropdown.style.cssText = `--height: ${subDropdownList.offsetHeight + margin}px`;\n d4.s.subDropdownTotalH += parseInt(subDropdown.style.cssText.replace('--height:', '').trim());\n item.classList.add('open');\n });\n const openHeight = () => {\n const filterBarEl = hasFilter ? (d4.getAttribute('d4-portal') == \"true\" ? d4.s.dropdownEl.querySelector('.filter-bar') : d4.querySelector('.filter-bar')) : null;\n const filterBarH = filterBarEl ? filterBarEl.clientHeight : 0;\n const h = totalHeight() + d4.s.subDropdownTotalH;\n return h > scrollerMaxHeight + filterBarH ? scrollerMaxHeight + filterBarH : h;\n };\n if (d4.getAttribute('d4-portal') !== \"true\") {\n closeAllDropdown();\n }\n d4.setAttribute('d4-status', 'open');\n d4.setAttribute('d4-default-height', totalHeight());\n if (d4.getAttribute('d4-portal') == \"true\") {\n // -** 獨立 dropdown 出 body 更新\n d4.s.dropdownEl.style.setProperty('--maxHeight', `${openHeight()}px`);\n d4.s.dropdownEl.style.zIndex = '9999';\n\n this.#positionPortal();\n void d4.s.dropdownEl.offsetHeight;\n d4.s.dropdownEl.style.height = `${openHeight()}px`;\n \n d4.__events__._scrollUpdate = () => {\n const rect = d4.getBoundingClientRect();\n if (rect.bottom < 0 || rect.top > window.innerHeight) {\n d4.close();\n } else {\n d4.#positionPortal();\n }\n };\n window.addEventListener('scroll', d4.__events__._scrollUpdate, { passive: true, capture: true });\n window.addEventListener('resize', d4.__events__._scrollUpdate, { passive: true });\n // -**\n } else {\n d4.style.cssText = `--maxHeight: ${openHeight()}px;`;\n d4.s.dropdownEl.style.cssText = `\n height: ${openHeight()}px;\n z-index: 2;\n `;\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 // -** 獨立 dropdown 出 body 更新\n if (d4.getAttribute('d4-portal') == \"true\") {\n if (d4.__events__._scrollUpdate) {\n window.removeEventListener('scroll', d4.__events__._scrollUpdate, { capture: true });\n window.removeEventListener('resize', d4.__events__._scrollUpdate);\n }\n }\n // -**\n allSublayer.forEach(item => {\n item.classList.remove('open');\n });\n // -** 獨立 dropdown 出 body 更新\n if (d4.getAttribute('d4-portal') == \"true\") {\n d4.s.dropdownEl.style.setProperty('--maxHeight', `${defaultHeight}px`);\n } else {\n d4.style.cssText = `--maxHeight: ${defaultHeight}px;`;\n }\n d4.s.subDropdownTotalH = 0;\n if (d4.classList.contains('filter') && d4.s.dropdownEl.querySelector('.filter-input')) {\n d4.s.dropdownEl.querySelector('.filter-input').value = '';\n d4.s.allLi.forEach(el => el.removeAttribute('style'));\n }\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._didInitialScroll = false;\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 let resizing = false;\n\n // scroll & resize event\n const updateEvent = () => {\n if (!resizing) {\n requestAnimationFrame(() => {\n this.#scrollerDetect();\n this.#buttonDetect();\n resizing = false;\n });\n resizing = true;\n }\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', updateEvent);\n window.addEventListener('resize', 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.#bindItemEvent();\n // 更新 active 位置\n $this.update(true);\n requestAnimationFrame(() => {\n this.#scrollerDetect();\n this.#buttonDetect();\n });\n }\n // 更新 active 位置\n update(withDelay = false) {\n const $wrapper = this.$element.querySelector('.wrapper');\n const $active = $wrapper?.querySelector('.active');\n if (!$active || !$wrapper) return;\n\n const doScroll = () => {\n const wrapRect = $wrapper.getBoundingClientRect()\n const itemRect = $active.getBoundingClientRect()\n\n const wrapCenter = wrapRect.left + wrapRect.width / 2\n const itemCenter = itemRect.left + itemRect.width / 2\n\n const gap = itemCenter - wrapCenter\n const targetLeft = $wrapper.scrollLeft + gap\n $wrapper.scrollTo({\n left: targetLeft,\n behavior: 'smooth',\n });\n };\n\n if (withDelay && !this._didInitialScroll) {\n this._didInitialScroll = true;\n setTimeout(doScroll, 250);\n return;\n }\n\n doScroll();\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\n if (gate <= 0) {\n // console.log(gate,\"gate <= 0\");\n addClass($button, 'hide');\n removeClass($button, 'active');\n addClass($element, 'noScrollable');\n return;\n }\n\n if (gate > 0) {\n // console.log(gate,\"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 removeClass(this.$element, 'noScrollable');\n return true;\n } else {\n addClass(this.$element, 'noScrollable');\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 this.#syncStatus(newVal);\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 // resize 後重算版型前,先關閉展開中的 collapse\n this.#closeCollapse();\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 // 同步目前選中的項目\n #syncStatus(value = this.getAttribute('m4-status')) {\n const status = value ?? '';\n\n const syncActive = selector => {\n this.querySelectorAll(selector).forEach(el => {\n const option = el.getAttribute('data-option')?.trim();\n el.classList.toggle('active', option === status);\n });\n };\n\n // 左右拖拉\n syncActive('.drag-container .item');\n // 展開選項\n syncActive('.collapse-container .item');\n\n // 下拉選項\n const dropdown = this.querySelector('dropdown-el');\n if (dropdown && dropdown.getAttribute('d4-value') !== status) {\n dropdown.setAttribute('d4-value', status);\n }\n\n this.drag?.update();\n }\n // 下拉選項事件綁定\n #bindDropdownEvent() {\n const dropdown = this.querySelector('dropdown-el');\n if (!dropdown || typeof dropdown.on !== 'function') return;\n\n this.__events__.dropdownChange = () => {\n const value = dropdown.getAttribute('d4-value')?.trim() ?? '';\n\n if (this.getAttribute('m4-status') !== value) {\n this.setAttribute('m4-status', value);\n }\n };\n\n dropdown.off?.('change', this.__events__.dropdownChange);\n dropdown.on('change', this.__events__.dropdownChange);\n }\n // 關閉展開中的 collapse\n #closeCollapse() {\n this.classList.remove('expand');\n }\n // check type\n #distribute() {\n const { type } = this.s;\n\n this.#closeCollapse();\n this.innerHTML = '';\n [...createTemplate(this)].forEach(el => {\n this.append(el);\n });\n\n this.#syncStatus();\n\n switch (type) {\n case 'drag':\n this.drag = new dragControl(this);\n break;\n case 'collapse':\n this.drag = new dragControl(this);\n this.collapse = new collapseControl(this);\n break;\n case 'dropdown':\n this.#bindDropdownEvent();\n break;\n }\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","#create","SETTINGS","configs.anchor4","k","v","#init","elements","#trigger","defaultOptions","eventHandler","newOptions","hashName","targetStr","searchParams","pageChange","href","$","randomAnimate","clickEvent","e","hrefLink","$this","thisTarget","aHref","xArr","lastArr","y","yArr","arr","last","mouseenterEvent","$hrefEl","mouseleaveEvent","currentHrefLink","getHrefLink","cgpagechange","x","MODALS","createTemplate","TEMPLATE","configs.modal4","childDom","content","child","bindModalHrefLinks","modal","$modal","$links","unbindModalHrefLinks","ModernModal","attr","oldVal","newVal","#stateControl","ATTRS","id","#mount","scroller","OverlayScrollbars","#event","$self","close","destroy","closeAttr","destroyAttr","state","__scroller__","viewport","transitionEndHandler","pending_fetch","useMethod","name","useFunction","Modal4","dispatchModal","useModal","useFetch","action","on","route","useEvent","res","doms","containerElement","ons","openOptions","obj","methods","interaction","scrollElement","viewHeight","viewTop","className","delay","end","repeat","top","bottom","startTrigger","endTrigger","shouldRemove","detectRepeat","repeatType","Aost4","configs.aost4","removeShow","configs.video4","videoPlayer","videoType","videoMode","COOKIEDISAGREELAYOUT","layout","cookieDisagreeFn","#youtube","#youku","#vimeo","#bilibili","#instagram","#tiktok","#video","videoId","autoplay","startTime","hash","lockCount","elementArray","elementArr","element","scrollLock","lock","scrollUnlock","unlock","loading","timerout","loaded","imagePreview","selector","ImagePreview","ajaxUpdate","lazy","LazyLoad","imageValidate","ImageValidate","tabChange","callback","bodyScrollbarInit","appleDebug","detectMacOSVersion","userAgent","clickToggleClass","clickSwitchClass","sleep","time","resolve","timer","debounce","func","context","throttle","timeout","now","countDown","i","set_seconds","set_time","minutes","seconds","reject","fixMobile100vh","init","vh","wordAnimation","isWrap","delayStartTime","delaySpace","randomTransTime","removeBr","newText","words","s","letter","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","igCreatePlayer","LAYOUT","#getVideoData","#createCover","#getCoverSrc","$selector","videoInboxImg","videoHighQualityPic","selectorImg","selectorImgSrc","response","html","#applyCoverSrc","$cover","url","videoLayoutNo","videoButton","videoCover","$target","src","layoutHtml","err","videoTarget","videoKeep","videoTargetRoute","videoIgHtml","videoStartTime","modalOptions","scrollers","entries","videoInboxImgs","targetElements","cityData","d4","configs.dropdown4","subOption","detectSync","controlElements","disabledEl","setSelectDisplay","valueIndex","placeholder","allLi","option","li","activeLi","tagEl","valueArray","loadCityData","lang","originalData","city","loadDistData","dist","closeAllDropdown","settingScrollbarStyle","key","Dropdown4","valueLiArray","valueIndexArray","#positionPortal","rect","dropdownHeight","valueLi","cityDropdown","cityDropdownHasVal","toggleTransitionend","dropdownStatus","hasFilter","scrollToActive","halfActiveLiHeight","offsetTop","scroll","computedHeight","totalHeight","citySelect","clickOption","clickIndex","defaultHeight","subDropdown","subDropdownList","subDropdownListMargin","subDropdownH","maxHeight","recalculate","distSelectEl","activeLiArray","scrollerMaxHeight","item","margin","openHeight","filterBarEl","filterBarH","h","allSublayer","getBreakpoints","m4","breakpoints","getDuration","breakpoint","points","point","a","createAnimateWrap","behavior","continual","childDOM","animateItem","cloneElement","cloneAnimateWrap","keyframes","framesObj","animateFrom","animateTo","Marquee4","configs.marquee4","#animation","duration","pauseOnMouseenter","playDelay","animateInit","enterKeyframes","framesArr","moveDistance","averageDuration","updateDuration","cloneStartTime","addClass","removeClass","dragControl","resizing","updateEvent","#scrollerDetect","#buttonDetect","#bindDragEvent","#bindButtonEvent","#bindItemEvent","withDelay","$wrapper","$active","doScroll","wrapRect","itemRect","wrapCenter","targetLeft","$button","buttonEvent","fix","$el","isDown","isMoved","startX","scrollLeft","mousedownEvent","mouseupEvent","mousemoveEvent","walk","reset","$container","gate","$element","itemEvent","selectOption","clickHandler","collapseControl","$drag","originalDomString","$storage","configs.multipurpose4","Multipurpose4","#distribute","#syncStatus","#closeCollapse","#breakpoint","customize","#render","keys","status","syncActive","#bindDropdownEvent","Tab4","#stateChange","configs.tab4","#tabSet","#createSwiper","matchingTabs","#resizeTab","tabs","#getTabIndex","tabPanelsWithId","panel","tabPanel","swiperContainer","swiperWrapper","slide","#initSwiper","sContainer","sWrapper","tabPanels","totalWidth","#addUrl","newUrl","#eventAnchor","pageYOffset","changeOffset","#goAnchor","#step","current","#btnNextState","newPage","next","isSinglePage","isLastPage","btn","#btnPrevState","prev","isFirstPage","#tabState","tabId","tab","#isTrue","fun","val2","#animationHide","timing","#animationShow","clientHeight","slideWidth","translateValue","newTabIndex","_this_","clickedTab","indexOf","newTabId","defaultID","tabIndex","nextPage","nextPageId","prevPage","prevPageId","changeEvent","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","removeStyle","Ripple4","configs.ripple4","attrToBoolean","booleanVal","#ball","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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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,IACnB;AAAA,IACI,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,IACnB;AAAA,IACI,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,KAA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"}
|