@xwadex/fesd 0.0.14-re.21 → 0.0.14-re.23
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/assets/fesd-bundle.js +451 -600
- package/dist/assets/fesd-bundle.js.map +1 -1
- package/dist/assets/image-preview-bundle.js +5310 -5154
- package/dist/assets/image-preview-bundle.js.map +1 -1
- package/dist/assets/tools-bundle.js +2 -2
- package/dist/assets/tools-bundle.js.map +1 -1
- package/package.json +1 -2
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"fesd-bundle.js","sources":["../../src/fesd/detect4/detect4.js","../../src/fesd/video4/video4.js","../../src/fesd/article4/article4.js","../../src/fesd/category-slider/category-slider.js","../../src/fesd/share4/share4.js","../../src/fesd/marquee4/marquee4.js","../../src/fesd/multipurpose4/multipurpose4.js","../../src/fesd/collapse4/collapse4.js"],"sourcesContent":["export const init = () => {\n const userAgent = navigator.userAgent;\n const browser = {\n // Firefox 1.0+\n isFirefox: typeof InstallTrigger !== 'undefined',\n // Opera 8.0+\n isOpera: (!!window.opr && !!opr.addons) || !!window.opera || userAgent.indexOf(' OPR/') >= 0,\n // Internet Explorer 6-11\n isIE: /*@cc_on!@*/ false || !!document.documentMode,\n // Edge 20+\n isEdge: !(false || !!document.documentMode) && !!window.StyleMedia,\n // Edge (based on chromium) detection\n isEdgeChromium: /\\sedg\\//i.test(userAgent) || /edg([ea]|ios)/i.test(userAgent),\n // Safari 3.0+ \"[object HTMLElementConstructor]\"\n isSafari: !/chrome|crios|crmo/i.test(userAgent) && /safari/i.test(userAgent),\n // Chrome 1 - 79\n isChrome: (!!window.chrome && (!!window.chrome.webstore || !!window.chrome.runtime)) || /chrome|crios|crmo/i.test(userAgent),\n };\n const mobile = {\n // Android\n isAndroid: userAgent.indexOf('Android') > -1 || userAgent.indexOf('Adr') > -1,\n // iOS | ipad\n isiOS: userAgent.indexOf('Mac') > -1 && 'ontouchend' in document,\n };\n const os = {\n // window\n isWindows: userAgent.indexOf('Win') > -1,\n // macos\n isMacOS: userAgent.indexOf('Mac') > -1,\n // UNIX\n isUNIX: userAgent.indexOf('X11') > -1,\n // Linux\n isLinux: userAgent.indexOf('Linux') > -1,\n };\n return { browser, mobile, os }\n}\n\nexport const isBrowser4 = () => {\n const { browser } = init();\n return Object.keys(browser).find(key => {\n if (browser[key]) return browser[key];\n });\n};\n\nexport const isMobile4 = () => {\n const { mobile } = init();\n return Object.keys(mobile).some(key => {\n if (mobile[key]) return mobile[key];\n });\n};\n\nexport const isOs4 = () => {\n const { os } = init();\n return Object.keys(os).find(key => {\n if (os[key]) return os[key];\n });\n};\n\nexport const logs = () => console.dir(init());\n\nexport default function Detect4() {\n return {\n init,\n isBrowser4,\n isMobile4,\n isOs4,\n logs\n }\n}\n\n\n","import LazyLoad from 'vanilla-lazyload';\nimport Modal4 from '../modal4'\nimport Events4 from '../events4'\nimport Configs from '../configs'\nimport { scrollLock, scrollUnlock } from \"@/tools\"\n// import videoPlayer from './videoPlayer'\nimport {\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-autoplay=\"${params.videoAutoplay}\"></video-player>`;\n};\n\nclass video4 extends Events4 {\n constructor(el, options = {}) {\n super();\n // 可傳 string 或 element 或 nodeList\n if (!isString(el) && !isElement(el) && !isNodeList(el)) {\n error('video4', `找不到該物件 -> ${el}`);\n return;\n }\n\n const { EVENTS } = Configs.anchor4;\n this.__events__ = Object.assign({}, EVENTS);\n this.__storage__ = { el, options, };\n\n this.#create();\n }\n\n #create() {\n const { el, options } = this.__storage__;\n // 從 Configs 提取設定\n const { SETTINGS, EVENTS } = Configs.video4;\n\n this.elements = getAllElements(el);\n this.options = Object.assign({}, SETTINGS, options);\n // this.__events__ = Object.assign({}, EVENTS);\n\n if (this.options.on) {\n for (const [k, v] of Object.entries(this.options.on)) {\n this.__events__[k] = [v];\n }\n }\n\n this.#init();\n }\n\n #init() {\n const { elements, options } = this;\n\n elements.forEach(el => {\n el.video = {};\n el.video.instance = this;\n el.video.defaultOptions = options;\n el.video.params = this.#getVideoData(el);\n el.video.methods = {};\n el.video.methods.update = this.update;\n\n if (hasVideoID(el.video.params) && !isActive(el.video.params)) {\n el.setAttribute('video4-active', 'on');\n this.#createCover(el);\n }\n\n if (!hasVideoID(el.video.params)) {\n error('video4', `無法取得影片 ID`);\n }\n });\n\n this.emit('init');\n }\n\n #createCover(el) {\n const { LAYOUT } = Configs.video4;\n const params = el.video.params;\n const { $selector, videoLayoutNo, videoId, videoType, videoMode, videoButton, videoCover } = params;\n\n if (videoMode === 'onBox') {\n let $target = null;\n if (videoCover === 'on') {\n el.classList.add('video4-cover');\n // 無圖片結構放置圖片結構\n if (!$selector.querySelector('img')) {\n $selector.insertAdjacentHTML(insert.prepend, '<picture><source srcset=\"\" type=\"image/webp\"><source srcset=\"\" type=\"image/jpeg\"><img src=\"\" alt></picture>');\n warn('video4', `若啟用 [videoCover] 且選擇 onBox 模式必須於 video-target 內放置 img 結構,若無結構則自動加入圖片結構`);\n }\n\n const $cover = $selector.querySelector('img');\n $cover.insertAdjacentHTML(insert.after, LAYOUT[videoLayoutNo]);\n\n const src = $cover?.getAttribute('src') || $cover?.getAttribute('data-src');\n\n // 無圖片時放置預設封面畫面,僅 youtube & vimeo 提供\n if (!src && videoType == 'youtube') {\n $cover.setAttribute('src', `https://img.youtube.com/vi/${videoId}/0.jpg`);\n } else if (!src && videoType == 'vimeo') {\n $cover.setAttribute('src', `https://vumbnail.com/${videoId}_large.jpg`);\n } else {\n warn('video4', `僅 youtube & vimeo 提供,無圖片時放置預設封面畫面,其他影片平台請自行上傳封面照片`);\n }\n }\n\n // 若無設定撥放按鈕,則點擊物件轉移為物件本身\n if (videoButton == 'off') {\n $target = $selector;\n } else {\n $target = $selector.querySelector(videoButton) ?? $selector;\n if (!$selector.querySelector(videoButton)) {\n warn('video4', `找不到 videoButton 設定的 element -> '${videoButton}' , 點擊物件轉移至 '${this.__storage__.el}'`);\n }\n }\n\n if (!$target.video) {\n $target.video = {};\n $target.video.params = params;\n }\n\n $target.video.eventHandler = this.#trigger;\n $target.addEventListener('click', $target.video.eventHandler);\n } else if (videoMode === 'onPage') {\n let $target = null;\n if (videoCover == 'on') {\n el.classList.add('video4-cover');\n // 無圖片結構放置圖片結構\n if (!$selector.querySelector('img')) {\n $selector.insertAdjacentHTML(insert.prepend, '<picture><source srcset=\"\" type=\"image/webp\"><source srcset=\"\" type=\"image/jpeg\"><img src=\"\" alt></picture>');\n warn('video', `若啟用 [videoCover] 且選擇 onBox 模式必須於 video-target 內放置 img 結構`);\n }\n\n const $cover = $selector.querySelector('img');\n $cover.insertAdjacentHTML(insert.after, LAYOUT[videoLayoutNo]);\n\n const src = $cover?.getAttribute('src') || $cover?.getAttribute('data-src');\n\n // 無圖片時放置預設封面畫面,僅 youtube 提供\n if (!src && videoType == 'youtube') {\n $cover.setAttribute('src', `https://img.youtube.com/vi/${videoId}/0.jpg`);\n } else if (!src && videoType == 'vimeo') {\n $cover.setAttribute('src', `https://vumbnail.com/${videoId}_large.jpg`);\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 { $selector, videoMode, videoTarget, videoTargetRoute } = video.params;\n const lazy = new LazyLoad({ callback_loaded: img => { }, })\n\n if (videoMode == 'onBox') {\n const options = {\n target: videoTarget,\n route: videoTargetRoute,\n on: {\n complete(modal) {\n modal.querySelector('.modal-content').insertAdjacentHTML('beforeend', createPlayer(video.params));\n },\n open(modal) {\n const scrollers = modal.querySelectorAll('[data-overlayscrollbars-viewport]');\n lazy.update();\n scrollLock([...scrollers]);\n },\n close(modal) {\n const scrollers = modal.querySelectorAll('[data-overlayscrollbars-viewport]');\n scrollUnlock([...scrollers]);\n },\n destroy(modal) { },\n },\n };\n\n Modal4.open(options);\n } else if (videoMode == 'onPage') {\n // onPage 點擊後應自動撥放影片\n video.params.videoAutoplay = 'on';\n // 直接替換 cover & playButton\n $selector.innerHTML = createPlayer(video.params);\n }\n }\n\n #getVideoData(el) {\n const { SETTINGS } = Configs.video4;\n\n return {\n $selector: el,\n videoId: el.getAttribute('video-id'),\n videoType: el.getAttribute('video-type'),\n videoAutoplay: el.getAttribute('video-autoplay') || SETTINGS.videoAutoplay,\n videoMode: el.getAttribute('video-mode') || SETTINGS.videoMode,\n videoButton: el.getAttribute('video-button') || SETTINGS.videoButton,\n 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 };\n }\n\n update() {\n this.#create();\n }\n}\n\n// Object.assign(video4.prototype, EVENTS);\n\n\nexport default video4;\n","import { Swiper as SwiperV8 } from 'swiper/bundle'\nimport Video4 from '../video4'\nimport Configs from '../configs'\n// import Swiper bundle with all modules installed\nimport {\n isString,\n isNodeList,\n isElementExist,\n getAllElements,\n createUid\n} from '../commons'\n\n// 設置 CSS 樣式\nconst setCss = (target, style, css) => {\n if (!target) return;\n\n // 若是 NodeList 則需使用 foreach set css\n if (isNodeList(target)) target.forEach(el => (el.style[style] = css));\n else target.style[style] = css;\n};\n\nclass Article4 {\n constructor(el, options = {}) {\n if (!isString(el) || !isElementExist(el)) return;\n\n this.__storage__ = {\n el,\n options,\n };\n\n this.#create();\n }\n\n #create() {\n const { el, options } = this.__storage__;\n const { SETTINGS } = Configs.article4;\n\n this.elements = getAllElements(el);\n this.options = Object.assign({}, SETTINGS, options);\n\n this.#init();\n }\n\n #init() {\n const { elements } = this;\n\n elements.forEach(parent => {\n parent.querySelectorAll('._article').forEach(el => {\n el.article = {};\n el.article.parent = parent;\n el.article.params = this.#getArticleData(el);\n el.article.methods = {};\n el.article.methods.update = this.update;\n this.#setStyle(el).#createVideo4(el).#createSwiper(el);\n });\n });\n }\n\n // 取得元件上的設定值\n #getArticleData(element) {\n return {\n // 元件本身\n $selector: element,\n\n // 父層元件\n $backgroundWrap: element.querySelector('._backgroundWrap'),\n $contentWrap: element.querySelector('._contentWrap'),\n $wordCover: element.querySelector('._wordCover'),\n $buttonCover: element.querySelector('._buttonCover'),\n $imgCover: element.querySelector('._imgCover'),\n $cover: element.querySelectorAll('._cover'),\n $swiper: element.querySelector('.swiper'),\n $swiperButtonCover: element.querySelector('.swiper-button-cover'),\n\n // 子層元件\n $h: element.querySelector('._H'),\n $subH: element.querySelector('._subH'),\n $p: element.querySelector('._P'),\n $button: element.querySelector('._button'),\n $description: element.querySelectorAll('._description'),\n $video: element.querySelectorAll('[video-id]'),\n\n // 父層設定\n typeFullColor: element.getAttribute('typeFull-color'),\n typeFullBoxColor: element.getAttribute('typeFull-boxcolor'),\n\n // 子層設定\n hColor: element.getAttribute('h-color'),\n subHColor: element.getAttribute('subh-color'),\n pColor: element.getAttribute('p-color'),\n buttonColor: element.getAttribute('button-color'),\n buttonColorHover: element.getAttribute('button-color-hover'),\n buttonTextColor: element.getAttribute('button-textcolor'),\n descriptionColor: element.getAttribute('description-color'),\n };\n }\n\n // 設置設定值的 CSS 樣式\n #setStyle(element) {\n const { params } = element.article;\n\n // article ._H\n setCss(params.$h, 'color', params.hColor);\n\n // article ._subH\n setCss(params.$subH, 'color', params.subHColor);\n\n // article ._P\n setCss(params.$p, 'color', params.pColor);\n\n // imgCover ._description\n setCss(params.$description, 'color', params.descriptionColor);\n\n // button background-color && text color\n setCss(params.$button, 'backgroundColor', params.buttonColor);\n setCss(params.$button, 'color', params.buttonTextColor);\n\n // button hover color\n if (params.buttonColorHover && params.$button) {\n params.$button.appendChild(document.createElement('span'));\n setCss(params.$button.querySelector('span'), 'backgroundColor', params.buttonColorHover);\n }\n\n // typeFull background-color\n setCss(params.$backgroundWrap, 'backgroundColor', params.typeFullColor);\n\n // typeFull box background-color\n setCss(params.$contentWrap, 'backgroundColor', params.typeFullBoxColor);\n\n return this;\n }\n\n #createVideo4(element) {\n const { params } = element.article;\n\n if (params.$video.length) {\n const video = new Video4(params.$video);\n }\n\n return this;\n }\n\n #createSwiper(element) {\n const { basic_rwd } = this.options;\n\n const { params } = element.article;\n\n // 判斷是否擁有 swiper4 結構\n if (!params.$swiper) return;\n\n // set id\n const $id = createUid();\n\n const $this = this;\n\n // set swiper\n let $swiperSet = {\n on: {\n init(swiper) {\n const container = swiper.$el[0];\n // video4 重複綁定修正\n if (params.$video.length) {\n // 應該抓 DB 設定的 classname\n const allVideo4 = container.querySelectorAll('[video4-active]');\n [...allVideo4].forEach(element => {\n element.querySelector(Configs.video4.SETTINGS.videoButton)?.remove();\n element.querySelector('.overlay')?.remove();\n element.removeAttribute('video4-active');\n });\n $this.update();\n }\n },\n observerUpdate(swiper) {\n if (swiper.params.autoplay.enabled) {\n swiper.autoplay.start();\n swiper.update();\n }\n },\n },\n observer: true,\n breakpoints: {},\n };\n\n params.$selector.setAttribute('img-swiper', 'on');\n params.$selector.classList.add(`swiper-${$id}`);\n\n // swiper navigation (預設為 off)\n if (params.$selector.getAttribute('swiper-arrow') !== 'off' && params.$selector.getAttribute('swiper-arrow')) {\n const next = document.createElement('div');\n next.className = `swiper-button-next swiper-${$id}`;\n params.$swiperButtonCover.appendChild(next);\n\n const prev = document.createElement('div');\n prev.className = `swiper-button-prev swiper-${$id}`;\n params.$swiperButtonCover.appendChild(prev);\n\n $swiperSet.navigation = {\n nextEl: `.swiper-button-next.swiper-${$id}`,\n prevEl: `.swiper-button-prev.swiper-${$id}`,\n };\n }\n\n // swiper pagination (預設為 on)\n if (params.$selector.getAttribute('swiper-nav') !== 'off' || !params.$selector.getAttribute('swiper-nav')) {\n const pagination = document.createElement('div');\n pagination.className = `swiper-pagination swiper-${$id}`;\n params.$swiper.appendChild(pagination);\n\n $swiperSet.pagination = {\n el: `.swiper-pagination.swiper-${$id}`,\n clickable: true,\n };\n }\n\n // slidesPerView\n if (Number.parseInt(params.$selector.getAttribute('swiper-num'))) {\n $swiperSet.breakpoints[basic_rwd] = {\n slidesPerView: params.$selector.getAttribute('swiper-num') ? (Number.parseInt(params.$selector.getAttribute('swiper-num')) > 5 ? 5 : Number.parseInt(params.$selector.getAttribute('swiper-num'))) : 1,\n };\n }\n\n // autoplay (預設為 on)\n if (params.$selector.getAttribute('swiper-autoplay') !== 'off' || !params.$selector.getAttribute('swiper-autoplay')) {\n $swiperSet.autoplay = {\n delay: 3000,\n disableOnInteraction: false,\n };\n }\n\n // loop (預設為 on)\n if (params.$selector.getAttribute('swiper-loop') !== 'off' || !params.$selector.getAttribute('swiper-loop')) {\n $swiperSet.loop = true;\n }\n\n // speed\n if (params.$selector.getAttribute('swiper-speed')) {\n $swiperSet.speed = parseInt(params.$selector.getAttribute('swiper-speed'));\n }\n\n // parallax (預設為 off)\n if (params.$selector.getAttribute('swiper-parallax') !== 'off' && !params.$selector.getAttribute('swiper-loop')) {\n $swiperSet.parallax = true;\n }\n\n // pagination dynamicBullets (預設為 off)\n if (params.$selector.getAttribute('swiper-pagination-dynamic') === 'on') {\n $swiperSet.pagination.dynamicBullets = true;\n }\n\n // 若 swiper 只有一筆輪播則隱藏 navigation 及 pagination\n let gate = () => (window.innerWidth > this.basic_rwd ? Number(params.$selector.getAttribute('swiper-num')) || 1 : 1);\n\n if (params.$swiper.querySelectorAll('.swiper-slide').length <= gate()) {\n $swiperSet.navigation = false;\n $swiperSet.pagination = false;\n $swiperSet.autoplay = false;\n $swiperSet.loop = false;\n\n params.$selector.querySelector('.swiper-button-cover').style.display = 'none';\n params.$selector.querySelector('.swiper-pagination').style.display = 'none';\n\n params.$swiper.classList.add('swiper-no-swiping');\n }\n\n const $swiper = new SwiperV8(params.$swiper, $swiperSet);\n\n element.article.swiperList = [];\n element.article.swiperList.push($swiper);\n\n return this;\n }\n update() {\n const { elements } = this;\n\n elements.forEach(parent => {\n parent.querySelectorAll('._article').forEach(el => {\n el.article = {};\n el.article.parent = parent;\n el.article.params = this.#getArticleData(el);\n\n this.#createVideo4(el);\n });\n });\n }\n}\n\nexport default Article4;\n","// 判斷操作事件使用 mouse 或是 touch\nlet operateStart = 'ontouchstart' in document.documentElement ? 'touchstart' : 'mousedown';\nlet operateEnd = 'ontouchend' in document.documentElement ? 'touchend' : 'mouseup';\nlet operateMove = 'ontouchmove' in document.documentElement ? 'touchmove' : 'mousemove';\n\n/* ---------------------------- Function 宣告 --------------------------------- */\n\n// 獲取 translate 數值\nfunction getTranslateValues(element) {\n const style = window.getComputedStyle(element);\n const matrix = style['transform'] || style.mozTransform;\n\n // No transform property. Simply return 0 values.\n if (matrix === 'none') {\n return {\n x: 0,\n y: 0,\n z: 0,\n };\n }\n\n // Can either be 2d or 3d transform\n const matrixType = matrix.includes('3d') ? '3d' : '2d';\n const matrixValues = matrix.match(/matrix.*\\((.+)\\)/)[1].split(', ');\n\n // 2d matrices have 6 values\n // Last 2 values are X and Y.\n // 2d matrices does not have Z value.\n if (matrixType === '2d') {\n return {\n x: Number(matrixValues[4]),\n y: Number(matrixValues[5]),\n z: 0,\n };\n }\n\n // 3d matrices have 16 values\n // The 13th, 14th, and 15th values are X, Y, and Z\n if (matrixType === '3d') {\n return {\n x: Number(matrixValues[12]),\n y: Number(matrixValues[13]),\n z: Number(matrixValues[14]),\n };\n }\n}\n\n// 計算輪播內容總寬度\nfunction getSlideTotalW(element) {\n const slideWrap = element.querySelector('.wrapper');\n const items = slideWrap.querySelectorAll('.item');\n let slideTotalWidth = 0; //輪播內容總寬度\n items.forEach((item) => {\n const style = getComputedStyle(item);\n const marginL = parseInt(style.marginLeft);\n const marginR = parseInt(style.marginRight);\n slideTotalWidth += item.getBoundingClientRect().width + marginL + marginR;\n });\n return slideTotalWidth;\n}\n\n// 偵測目前輪播位置\nfunction detectPos(self) {\n // 拖拉在最左邊時\n if (getTranslateValues(self.slideWrapEl).x >= self.translateMin) {\n return 'is-start';\n }\n // 拖拉在最右邊時\n else if (getTranslateValues(self.slideWrapEl).x <= self.translateMax) {\n return 'is-end';\n }\n // 拖拉在中間時\n else if (\n getTranslateValues(self.slideWrapEl).x < self.translateMin &&\n getTranslateValues(self.slideWrapEl).x > self.translateMax\n ) {\n return 'is-middle';\n }\n}\n\n// 綁定事件\nfunction eventHandler(self) {\n const element = self.el;\n const slideWrap = element.querySelector('.wrapper');\n //滑鼠按住或是行動裝置手指按住\n slideWrap.addEventListener(operateStart, function (e) {\n self.isDown = true;\n if (self.slidable) slideWrap.classList.add('dragging');\n switch (operateStart) {\n case 'mousedown':\n self.startX = e.pageX;\n break;\n case 'touchstart':\n self.startX = e.changedTouches[0].pageX;\n break;\n }\n self.nowTranslateX = getTranslateValues(slideWrap).x;\n });\n\n //滑鼠放開或是行動裝置手指放開\n slideWrap.addEventListener(operateEnd, function (e) {\n self.isDown = false;\n slideWrap.classList.remove('dragging');\n slideWrap.classList.remove('moving');\n //移動距離\n let moveDistance;\n switch (operateMove) {\n case 'mousemove':\n moveDistance = e.pageX - self.startX;\n break;\n case 'touchmove':\n moveDistance = e.changedTouches[0].pageX - self.startX;\n break;\n }\n if (moveDistance === 0 && e.target.closest('.item')) {\n if (operateEnd === 'mouseup' && e.button !== 0) return;\n const items = slideWrap.querySelectorAll('.item');\n items.forEach((item) => {\n item.classList.remove('active');\n });\n e.target.closest('.item').classList.add('active');\n self.moveActive(self.params.speed);\n } else {\n if (self.slidable) self.resetPos(element);\n }\n });\n\n //滑鼠離開\n slideWrap.addEventListener('mouseleave', function () {\n if (!self.isDown) return;\n if (self.slidable) {\n self.isDown = false;\n slideWrap.classList.remove('dragging');\n slideWrap.classList.remove('moving');\n self.resetPos(element);\n }\n });\n\n //滑鼠移動或是行動裝置手指移動\n slideWrap.addEventListener(operateMove, function (e) {\n if (!self.draggable) return;\n if (self.slidable) {\n if (!self.isDown) return;\n e.preventDefault();\n //移動距離\n let moveDistance;\n switch (operateMove) {\n case 'mousemove':\n moveDistance = e.pageX - self.startX;\n break;\n case 'touchmove':\n moveDistance = e.changedTouches[0].pageX - self.startX;\n break;\n }\n if (moveDistance !== 0) {\n slideWrap.classList.add('moving');\n const styles = {\n transition: 'all 0ms ease 0s',\n transform: `translate3d(${self.nowTranslateX + moveDistance}px,0,0)`,\n };\n Object.assign(slideWrap.style, styles);\n }\n }\n });\n}\n\n// 取消 a 的拖拉\nfunction disableLinkDrag(element) {\n const aTag = element.querySelectorAll('a');\n for (var i = 0, len = aTag.length; i < len; i++) {\n aTag[i].draggable = false;\n }\n}\n\nexport default class CategorySlider {\n constructor(element, params) {\n this.el = typeof element === 'string' ? document.querySelector(element) : element;\n this.slideWrapEl = this.el.querySelector('.wrapper');\n // default params\n this.params = {\n speed: 300,\n clickSwitch: true,\n breakpoint: false,\n };\n Object.assign(this.params, params);\n\n this.draggable = true;\n this.isDown = false; //按下\n this.startX = 0; //按下初始位置\n this.nowTranslateX = getTranslateValues(this.slideWrapEl).x; //目前X軸偏移輛\n this.slideTotalWidth = getSlideTotalW(this.el);\n this.translateMin = 0;\n this.translateMax = -Math.floor(\n Math.abs(\n getSlideTotalW(this.el) - this.el.querySelector('.wrapper').getBoundingClientRect().width\n )\n );\n this.slidable =\n this.slideTotalWidth > Math.round(this.el.getBoundingClientRect().width) &&\n (!this.params.breakpoint || window.innerWidth <= this.params.breakpoint);\n this.init();\n }\n init() {\n const self = this;\n if (self.slidable) {\n self.slideWrapEl.style.width = `${self.slideTotalWidth}px`;\n self.el.classList.add('slidable');\n if (self.slideWrapEl.querySelector('.item.active')) self.moveActive();\n }\n window.addEventListener('resize', function () {\n self.update();\n });\n eventHandler(self);\n disableLinkDrag(self.el);\n }\n moveActive(speed) {\n const self = this;\n const activeItem = self.slideWrapEl.querySelector('.item.active');\n const prevItem = activeItem.previousElementSibling;\n const prevOffsetLeft = prevItem\n ? activeItem.offsetLeft - self.el.clientWidth / 2 + activeItem.clientWidth / 2\n : 0;\n if (self.slidable) {\n if (-prevOffsetLeft < 0 && -prevOffsetLeft > self.translateMax) {\n const styles = {\n transition: `all ${speed ? speed : 0}ms ease 0s`,\n transform: `translate3d(-${prevOffsetLeft}px,0,0)`,\n };\n Object.assign(self.slideWrapEl.style, styles);\n } else if (-prevOffsetLeft >= 0) {\n const styles = {\n transition: `all ${speed ? speed : 0}ms ease 0s`,\n transform: `translate3d(0,0,0)`,\n };\n Object.assign(self.slideWrapEl.style, styles);\n } else {\n const styles = {\n transition: `all ${speed ? speed : 0}ms ease 0s`,\n transform: `translate3d(${self.translateMax}px,0,0)`,\n };\n Object.assign(self.slideWrapEl.style, styles);\n }\n if (speed) {\n self.slideWrapEl.addEventListener(\n 'transitionend',\n function () {\n self.nowTranslateX = getTranslateValues(self.slideWrapEl).x;\n switch (detectPos(self)) {\n case 'is-start':\n self.el.classList.add('is-start');\n self.el.classList.remove('is-end');\n break;\n case 'is-middle':\n self.el.classList.remove('is-start');\n self.el.classList.remove('is-end');\n break;\n case 'is-end':\n self.el.classList.remove('is-start');\n self.el.classList.add('is-end');\n break;\n }\n },\n false\n );\n } else {\n self.nowTranslateX = getTranslateValues(self.slideWrapEl).x;\n switch (detectPos(self)) {\n case 'is-start':\n self.el.classList.add('is-start');\n self.el.classList.remove('is-end');\n break;\n case 'is-middle':\n self.el.classList.remove('is-start');\n self.el.classList.remove('is-end');\n break;\n case 'is-end':\n self.el.classList.remove('is-start');\n self.el.classList.add('is-end');\n break;\n }\n }\n }\n }\n resetPos() {\n const self = this;\n switch (detectPos(self)) {\n case 'is-start':\n self.el.classList.add('is-start');\n self.el.classList.remove('is-end');\n Object.assign(self.slideWrapEl.style, {\n transition: `all ${self.params.speed}ms ease 0s`,\n transform: 'translate3d(0,0,0)',\n });\n break;\n case 'is-middle':\n self.el.classList.remove('is-start');\n self.el.classList.remove('is-end');\n break;\n case 'is-end':\n self.el.classList.remove('is-start');\n self.el.classList.add('is-end');\n Object.assign(self.slideWrapEl.style, {\n transition: `all ${self.params.speed}ms ease 0s`,\n transform: `translate3d(${self.translateMax}px,0,0)`,\n });\n break;\n }\n }\n update() {\n const self = this;\n self.el.querySelector('.wrapper').removeAttribute('style');\n self.slideTotalWidth = getSlideTotalW(self.el);\n self.translateMax = -Math.floor(\n Math.abs(\n getSlideTotalW(self.el) - self.el.querySelector('.wrapper').getBoundingClientRect().width\n )\n );\n self.slidable =\n self.slideTotalWidth > Math.round(self.el.getBoundingClientRect().width) &&\n (!self.params.breakpoint || window.innerWidth <= self.params.breakpoint);\n if (self.slidable) {\n self.slideWrapEl.style.width = `${self.slideTotalWidth}px`;\n self.el.classList.add('slidable');\n if (self.slideWrapEl.querySelector('.item.active')) self.moveActive();\n } else {\n self.el.classList.remove('slidable');\n self.el.classList.remove('is-start');\n self.el.classList.remove('is-end');\n self.slideWrapEl.removeAttribute('style');\n }\n }\n}\n","import Configs from '../configs'\nimport {\n insert,\n isString,\n isElementExist,\n getAllElements\n} from '../commons'\n\nconst getTargetUrl = type => {\n // facebook\n if (type == 'facebook') {\n return 'https://www.facebook.com/sharer/sharer.php?u=';\n }\n\n // line\n if (type == 'line') {\n // desktop & mobile 網址不同\n if (/Android|webOS|iPhone|iPad|iPod|BlackBerry|IEMobile|Opera Mini/i.test(navigator.userAgent)) {\n return 'http://line.naver.jp/R/msg/text/?';\n }\n return 'https://lineit.line.me/share/ui?url=';\n }\n\n // twitter\n if (type == 'twitter') {\n return 'https://twitter.com/intent/tweet?url=';\n }\n\n // linkedin\n if (type == 'linkedin') {\n return `http://www.linkedin.com/shareArticle?mini=true&title=${document.title}&source=${document.title}&url=`;\n // return `https://www.linkedin.com/sharing/share-offsite/?url=`;\n }\n\n // telegram\n if (type == 'telegram') {\n return 'https://telegram.me/share/url?url=';\n }\n};\n\nclass Share4 {\n constructor(el, options = {}) {\n this.__storage__ = {\n el,\n options,\n };\n\n this.#create();\n }\n\n #create() {\n const { el, options } = this.__storage__;\n // 從 Configs 提取設定\n const { SETTINGS } = Configs.share4;\n if (!isString(el) || !isElementExist(el)) return;\n\n this.elements = getAllElements(el);\n\n this.options = Object.assign({}, SETTINGS, options);\n\n this.#init();\n }\n\n #init() {\n const { elements, options } = this;\n\n elements.forEach(targets => {\n targets.querySelectorAll('[share-target]').forEach(el => {\n el.share = {};\n el.share.instance = this;\n el.share.params = options;\n el.share.eventHandler = this.#trigger;\n el.addEventListener('click', el.share.eventHandler);\n });\n });\n }\n\n #trigger() {\n /** the keyword `this` in this method is pointed to the click target */\n const { eventHandler, params } = this.share;\n const type = this.getAttribute('share-target');\n\n const utm = {\n source: this.getAttribute('utm-source'),\n medium: this.getAttribute('utm-medium'),\n campaign: this.getAttribute('utm-campaign'),\n };\n\n const copy = {\n success: this.getAttribute('copy-success') || params.success,\n text: this.getAttribute('copy-text') || params.text,\n className: this.getAttribute('copy-class') || params.className,\n duration: this.getAttribute('copy-duration') || params.duration,\n };\n\n const baseUrl = encodeURIComponent(document.URL);\n let shareUrl = baseUrl;\n\n // 若為 wechat 則另開視窗掃描 QRcode\n if (type == 'wechat') {\n // https://api.qrserver.com/v1/create-qr-code/?data=${url}&size=300x300\n window.open(`https://api.qrserver.com/v1/create-qr-code/?data=${baseUrl}&size=250x250`, 'share to wechat', 'width=300,height=300');\n return;\n }\n\n // 若為 url 則複製連結\n if (type == 'url') {\n if (isElementExist('.copied-wrapper')) return;\n\n document.querySelector('body').insertAdjacentHTML(insert.append, `<div class='copied-wrapper'><div class='text'>${copy.success ? copy.success : ''}</div><input id='clipboard' type='text' readonly></div>`);\n\n const $copied = document.querySelector('.copied-wrapper');\n\n if (copy.className) {\n $copied.classList.add(copy.className);\n }\n $copied.style.top = this.getBoundingClientRect().top + window.scrollY + 'px';\n $copied.style.left = this.getBoundingClientRect().left + this.getBoundingClientRect().width / 2 + 'px';\n $copied.style.display = 'block';\n\n const $clipboard = document.querySelector('#clipboard');\n\n $clipboard.value = copy.text ?? window.location.href;\n $clipboard.setSelectionRange(0, 9999);\n $clipboard.select();\n\n if (document.execCommand('copy')) {\n // 複製對應內容\n document.execCommand('copy');\n // 動畫效果\n const copiedWrapper = document.querySelector('.copied-wrapper');\n const tooltipsText = document.querySelector('.copied-wrapper .text');\n tooltipsText.style.display = 'block';\n tooltipsText.style.opacity = 0;\n const fadeIn = (element, duration) => {\n let opacity = 0;\n const interval = 50;\n const gap = interval / duration;\n\n const fading = setInterval(function () {\n opacity += gap;\n element.style.opacity = opacity;\n\n if (opacity >= 1) {\n clearInterval(fading);\n setTimeout(function () {\n fadeOut(element, 300, function () {\n copiedWrapper.remove();\n });\n }, copy.duration);\n }\n }, interval);\n };\n const fadeOut = (element, duration, callback) => {\n let opacity = 1;\n const interval = 50;\n const gap = interval / duration;\n\n const fading = setInterval(() => {\n opacity -= gap;\n element.style.opacity = opacity;\n\n if (opacity <= 0) {\n clearInterval(fading);\n element.style.display = 'none';\n if (callback) callback();\n }\n }, interval);\n };\n fadeIn(tooltipsText, 300);\n }\n\n return;\n }\n\n // 其餘則使用對應網址另開新分頁\n // url + '?utm_source=Facebook' + '&utm_medium=social' + '&utm_campaign=' + campaign\n shareUrl = `${shareUrl}${utm.source ? `?utm_source=${utm.source}` : ''}${utm.medium ? `&utm_medium${utm.medium}` : ''}${utm.campaign ? `&utm_campaign${utm.campaign}` : ''}`;\n shareUrl = shareUrl.replace('?', '%3F').replace(new RegExp('&', 'g'), '%26');\n\n if (type == 'line') {\n // line 需帶入原始網址\n window.open(`${getTargetUrl(type)}${baseUrl}`);\n } else {\n window.open(`${getTargetUrl(type)}${shareUrl}"e=${shareUrl}`);\n }\n\n this.removeEventListener('click', eventHandler);\n setTimeout(() => {\n this.addEventListener('click', eventHandler);\n }, 100);\n }\n}\n\nexport default Share4;\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// if (!customElements.get('marquee-el')) {\n// customElements.define('marquee-el', Marquee4);\n// }\n\nexport default Marquee4;\n","import Configs from '../configs'\nimport { isNodeList, insert } from '../commons'\n\n// debounce\nconst debounce = function (func) {\n let timer;\n return function (event) {\n if (timer) clearTimeout(timer);\n timer = setTimeout(func, 200, event);\n };\n};\n\n// add class\nconst addClass = (target, className) => {\n if (isNodeList(target)) {\n target.forEach(el => {\n el.classList.add(className);\n });\n return;\n }\n\n target.classList.add(className);\n};\n\n// remove class\nconst removeClass = (target, className) => {\n if (isNodeList(target)) {\n target.forEach(el => {\n el.classList.remove(className);\n });\n return;\n }\n\n target.classList.remove(className);\n};\n\n// 拖拉類型控制\nclass dragControl {\n constructor(el) {\n this.$element = el;\n this.option = el.s.option.drag;\n this.#init();\n }\n\n // 初始化\n #init() {\n const $this = this;\n if (!$this.$element) return;\n\n $this.$container = $this.$element.querySelector('.drag-container');\n $this.$wrapper = $this.$container.querySelector('.wrapper');\n\n // scroll & resize event\n const updateEvent = () => {\n $this.#scrollerDetect();\n $this.#buttonDetect();\n };\n\n // scroll event handle\n $this.$wrapper.removeEventListener('scroll', updateEvent);\n $this.$wrapper.addEventListener('scroll', updateEvent);\n\n // resize event handle\n window.removeEventListener('resize', debounce(updateEvent));\n window.addEventListener('resize', debounce(updateEvent));\n\n // 左右拖拉事件綁定,若為 collapse 則強制啟用 draggable\n if ($this.option.draggable || $this.$element.s.type == 'collapse') $this.#bindDragEvent();\n // 左右箭頭事件綁定,若為 collapse 則不輸出 .navigation\n if ($this.option.navigation && $this.$element.s.type !== 'collapse') {\n $this.$container.insertAdjacentHTML(\n insert.prepend,\n `<div class=\"navigation\">\n <div class=\"button prev\">\n <div></div>\n </div>\n <div class=\"button next\">\n <div></div>\n </div>\n </div>`,\n );\n\n $this.$button = $this.$container?.querySelectorAll('.button');\n $this.#bindButtonEvent();\n }\n // 卷軸位置判斷\n $this.#scrollerDetect();\n // 隱藏按鈕判斷\n $this.#buttonDetect();\n // 選項事件綁定\n $this.#bindItemEvent();\n // 更新 active 位置\n // $this.update();\n }\n // 更新 active 位置\n update(element) {\n const $wrapper = element.querySelector('.wrapper');\n const $active = $wrapper?.querySelector('.active');\n if ($active) {\n // 移動至 active class 處\n const moveDistance = $active.offsetLeft + $active.getBoundingClientRect().width / 2 - $wrapper.getBoundingClientRect().width / 2;\n $wrapper.scrollTo({\n left: moveDistance,\n behavior: 'smooth',\n });\n }\n }\n // 左右箭頭事件綁定\n #bindButtonEvent() {\n const $this = this;\n const { $wrapper, $button } = $this;\n // button event\n const buttonEvent = function () {\n const type = this.classList.contains('next');\n const fix = parseInt($wrapper.getBoundingClientRect().width * 0.7);\n\n $wrapper.scrollTo({\n left: type ? $wrapper.scrollLeft + fix : $wrapper.scrollLeft - fix,\n behavior: 'smooth',\n });\n\n setTimeout(() => {\n $this.#buttonDetect();\n }, 100);\n };\n\n // button event handle\n $button.forEach($el => {\n $el.removeEventListener('click', buttonEvent);\n $el.addEventListener('click', buttonEvent);\n });\n }\n // 左右拖拉事件綁定\n #bindDragEvent() {\n const { $wrapper } = this;\n\n // 是否為點擊狀態\n let isDown = false;\n // 是否為移動狀態\n let isMoved = false;\n // 起始 X 軸數值\n let startX = 0;\n // 卷軸數值\n let scrollLeft = 0;\n\n // mousedown event\n const mousedownEvent = function (event) {\n event.preventDefault();\n\n isMoved = false;\n isDown = true;\n\n startX = event.pageX - $wrapper.offsetLeft;\n scrollLeft = $wrapper.scrollLeft;\n };\n\n // mousedown event handle\n $wrapper.removeEventListener('mousedown', mousedownEvent);\n $wrapper.addEventListener('mousedown', mousedownEvent);\n\n // mouseleave event\n const mouseleaveEvent = function () {\n isMoved = false;\n isDown = false;\n };\n\n // mouseleave event handle\n $wrapper.removeEventListener('mouseleave', mouseleaveEvent);\n $wrapper.addEventListener('mouseleave', mouseleaveEvent);\n\n // mouseup event\n const mouseupEvent = function (event) {\n event.preventDefault();\n isDown = false;\n };\n\n // mouseup event handle\n $wrapper.removeEventListener('mouseup', mouseupEvent);\n $wrapper.addEventListener('mouseup', mouseupEvent);\n\n // mousemove event\n const mousemoveEvent = function (event) {\n event.preventDefault();\n\n isMoved = true;\n\n if (!isDown) return;\n\n const x = event.pageX - $wrapper.offsetLeft;\n const walk = x - startX;\n $wrapper.scrollTo({\n left: scrollLeft - walk,\n });\n };\n\n // mousemove event handle\n $wrapper.removeEventListener('mousemove', mousemoveEvent);\n $wrapper.addEventListener('mousemove', mousemoveEvent);\n\n const reset = function (event) {\n if (isMoved) {\n event.preventDefault();\n event.stopPropagation();\n }\n };\n\n $wrapper.querySelectorAll('a').forEach($el => {\n $el.removeEventListener('click', reset);\n $el.addEventListener('click', reset);\n });\n }\n // 卷軸位置判斷\n #scrollerDetect() {\n const { $container, $wrapper } = this;\n\n const gate = $wrapper.scrollWidth - $wrapper.clientWidth;\n const value = $wrapper.scrollLeft;\n\n if (gate <= 0) return;\n\n addClass($container, 'scrollable');\n\n // 最前\n if (value == 0) {\n removeClass($container, 'scrollable');\n addClass($wrapper, 'start');\n removeClass($wrapper, 'end');\n }\n // 最後\n else if (value >= 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 addClass($button, 'hide');\n addClass($element, 'noScrollable');\n return;\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 else if (value >= gate) {\n $button.forEach($el => {\n if ($el.classList.contains('next')) {\n addClass($el, 'hide');\n return;\n }\n\n removeClass($el, 'hide');\n });\n }\n // 中間\n else {\n removeClass($button, 'hide');\n }\n }\n // 選項事件綁定\n #bindItemEvent() {\n const { $element } = this;\n\n const itemEvent = $el => {\n if (this.option.selected) {\n const selectOption = $el.getAttribute('data-option').trim();\n $element.setAttribute('m4-status', selectOption);\n }\n };\n\n function clickHandler() {\n itemEvent(this);\n }\n\n this.$container.querySelectorAll('.item').forEach(el => {\n el.removeEventListener('click', clickHandler);\n el.addEventListener('click', clickHandler);\n });\n }\n}\n\n// 收合類型控制\nclass collapseControl {\n constructor(el) {\n this.$element = el;\n this.option = el.s.option.collapse;\n this.#init();\n }\n\n // 初始化\n #init() {\n if (!this.$element) return;\n\n this.$container = this.$element.querySelector('.collapse-container');\n this.$wrapper = this.$container.querySelector('.wrapper');\n\n // 隱藏按鈕判斷\n if (this.#buttonDetect()) {\n // 展開箭頭事件綁定\n this.#bindButtonEvent();\n }\n\n // 選項事件綁定\n this.#bindItemEvent();\n }\n // 隱藏按鈕判斷\n #buttonDetect() {\n const $drag = this.$element.querySelector('.drag-container');\n const $wrapper = $drag.querySelector('.wrapper');\n\n if ($wrapper.scrollWidth - $wrapper.clientWidth > 0) {\n $drag.insertAdjacentHTML(insert.append, `<div class=\"open-collapse\"></div>`);\n this.$button = $drag.querySelector('.open-collapse');\n return true;\n }\n\n return false;\n }\n // 展開箭頭事件綁定\n #bindButtonEvent() {\n const { $element, $button } = this;\n\n // button event\n const buttonEvent = function () {\n if ($element.classList.contains('expand')) {\n $element.classList.remove('expand');\n } else {\n $element.classList.add('expand');\n }\n };\n\n // button event handle\n $button.removeEventListener('click', buttonEvent);\n $button.addEventListener('click', buttonEvent);\n }\n // 選項事件綁定\n #bindItemEvent() {\n const { $element } = this;\n\n const itemEvent = ($el, collapse) => {\n if (collapse) {\n if ($element?.classList.contains('expand')) {\n $element?.classList.remove('expand');\n } else {\n $element?.classList.add('expand');\n }\n }\n\n if (this.option.selected) {\n const selectOption = $el.getAttribute('data-option').trim();\n $element.setAttribute('m4-status', selectOption);\n }\n };\n\n function clickHandler() {\n itemEvent(this, true);\n }\n\n this.$container.querySelectorAll('.item').forEach(el => {\n el.removeEventListener('click', clickHandler);\n el.addEventListener('click', clickHandler);\n });\n }\n}\n\n// create template method\nconst createTemplate = m4 => {\n const { type, option, originalDomString } = m4.s;\n\n const $storage = document.createElement('div');\n if (type == 'drag') {\n $storage.innerHTML = Configs.multipurpose4.TEMPLATE[type]().trim();\n\n const $wrapper = $storage.querySelector('.drag-container .wrapper');\n $wrapper.insertAdjacentHTML(insert.append, originalDomString);\n }\n if (type == 'collapse') {\n $storage.innerHTML = Configs.multipurpose4.TEMPLATE[type](option?.collapse).trim();\n // drag\n const $container = $storage.querySelector('.drag-container .wrapper');\n $container.insertAdjacentHTML(insert.append, originalDomString);\n // collapse\n const $model = $storage.querySelector('.collapse-container .wrapper');\n $model.insertAdjacentHTML(insert.append, originalDomString);\n }\n if (type == 'dropdown') {\n $storage.innerHTML = Configs.multipurpose4.TEMPLATE[type](option?.dropdown).trim();\n\n const $dropdown = $storage.querySelector('dropdown-el');\n $dropdown.insertAdjacentHTML(insert.append, originalDomString);\n }\n\n return $storage.children;\n};\n\nclass Multipurpose4 extends HTMLElement {\n constructor() {\n super();\n this.initialize = false;\n this.__events__ = {};\n this.s = {};\n this.s.originalDomString = this.innerHTML.trim().replace(/\\n/g, '');\n this.previousWidth = window.innerWidth;\n }\n static get observedAttributes() {\n return ['m4-type', 'm4-status'];\n }\n attributeChangedCallback(attr, oldVal, newVal) {\n switch (attr) {\n case 'm4-type':\n if (oldVal === null || oldVal === newVal) return;\n this.s.type = newVal;\n this.#distribute();\n break;\n case 'm4-status':\n if (oldVal === newVal) return;\n const type = this.getAttribute('m4-type');\n if (type !== 'drag' && type !== 'collapse') return;\n // 左右拖拉\n this.querySelectorAll('.drag-container .item').forEach(el => {\n el.classList.remove('active');\n });\n this.querySelector(`.drag-container .item[data-option=\"${newVal}\"]`)?.classList.add('active');\n // 展開選項\n if (type === 'collapse') {\n this.querySelectorAll('.collapse-container .item').forEach(el => {\n el.classList.remove('active');\n });\n this.querySelector(`.collapse-container .item[data-option=\"${newVal}\"]`)?.classList.add('active');\n }\n this.constructor.drag?.update(this);\n break;\n }\n }\n connectedCallback() {\n if (this.initialize || this.classList.contains('m4-init')) return;\n this.initialize = true;\n this.#init();\n }\n update() {\n // 斷點設定\n this.#breakpoint();\n }\n #init() {\n let customize = {};\n\n if (!this.hasAttribute('m4-value')) {\n this.setAttribute('m4-value', '');\n }\n\n this.s.type = this.getAttribute('m4-type') ?? Configs.multipurpose4.SETTINGS.type;\n if (this.hasAttribute('m4-option')) {\n customize = this.getAttribute('m4-option') ? JSON.parse(this.getAttribute('m4-option')) : {};\n this.removeAttribute('m4-option');\n }\n\n const updateEvent = event => {\n if (event.type === 'resize') {\n if (window.innerWidth === this.previousWidth) return;\n this.previousWidth = window.innerWidth;\n }\n this.update();\n };\n\n // resize event handle\n window.removeEventListener('resize', debounce(updateEvent));\n window.addEventListener('resize', debounce(updateEvent));\n\n this.s.option = {};\n this.s.option.drag = Object.assign({}, Configs.multipurpose4.SETTINGS.drag, customize?.drag);\n this.s.option.collapse = Object.assign({}, Configs.multipurpose4.SETTINGS.collapse, customize?.collapse);\n this.s.option.dropdown = Object.assign({}, Configs.multipurpose4.SETTINGS.dropdown, customize?.dropdown);\n this.s.option.breakpoint = Object.assign({}, Configs.multipurpose4.SETTINGS.breakpoint, customize?.breakpoint);\n\n this.#render();\n }\n #render() {\n this.classList.add('m4-init');\n // 斷點設定\n this.#breakpoint();\n }\n // 斷點設定\n #breakpoint() {\n const obj = Object.keys(this.s.option.breakpoint);\n if (!obj.length) {\n this.#distribute();\n return;\n }\n obj\n .map(keys => Number(keys))\n .sort((a, b) => b - a)\n .some(point => {\n if (window.innerWidth >= point) {\n this.s.type = this.s.option.breakpoint[point]?.type;\n this.setAttribute('m4-type', this.s.type);\n this.s.option.drag = Object.assign({}, this.s.option.drag, this.s.option.breakpoint[point]?.drag);\n this.s.option.collapse = Object.assign({}, this.s.option.collapse, this.s.option.breakpoint[point]?.collapse);\n this.s.option.dropdown = Object.assign({}, this.s.option.dropdown, this.s.option.breakpoint[point]?.dropdown);\n }\n this.#distribute();\n return window.innerWidth >= point;\n });\n }\n // check type\n #distribute() {\n const { type } = this.s;\n\n this.innerHTML = '';\n [...createTemplate(this)].forEach(el => {\n this.append(el);\n });\n\n // 新增預設 active class\n const dragContainer = this.querySelector(`.drag-container .item[data-option=\"${this.getAttribute('m4-status')}\"]`);\n const collapseContainer = this.querySelector(`.collapse-container .item[data-option=\"${this.getAttribute('m4-status')}\"]`);\n dragContainer?.classList.add('active');\n collapseContainer?.classList.add('active');\n\n switch (type) {\n case 'drag':\n this.constructor.drag = new dragControl(this);\n break;\n case 'collapse':\n this.constructor.drag = new dragControl(this);\n this.constructor.collapse = new collapseControl(this);\n break;\n case 'dropdown':\n // this.#dropdown();\n break;\n }\n this.constructor.drag?.update(this);\n }\n}\n\n// if (!customElements.get('multipurpose-nav')) {\n// customElements.define('multipurpose-nav', Multipurpose4);\n// }\n\nexport default Multipurpose4;\n","import Events4 from '../events4'\nimport Configs from '../configs'\nimport {\n isString,\n isElement,\n isNodeList,\n isElementExist,\n getAllElements,\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 extends Events4 {\n constructor(el, options = {}) {\n super();\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.#create();\n }\n\n #create() {\n const { el, options } = this.__storage__;\n const { SETTINGS, EVENTS } = Configs.collapse4;\n\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\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// Object.assign(Collapse4.prototype, EVENTS);\n\nexport default Collapse4;\n"],"names":["init","userAgent","browser","mobile","os","isBrowser4","key","isMobile4","isOs4","logs","Detect4","hasVideoID","data","isActive","createPlayer","params","video4","Events4","el","options","__privateAdd","_create","_init","_createCover","_trigger","_getVideoData","isString","isElement","isNodeList","error","EVENTS","Configs.anchor4","__privateMethod","create_fn","SETTINGS","Configs.video4","getAllElements","k","v","init_fn","elements","getVideoData_fn","createCover_fn","LAYOUT","$selector","videoLayoutNo","videoId","videoType","videoMode","videoButton","videoCover","$target","insert","warn","$cover","src","trigger_fn","e","video","videoTarget","videoTargetRoute","lazy","LazyLoad","img","modal","scrollers","scrollLock","scrollUnlock","Modal4","setCss","target","style","css","Article4","_getArticleData","_setStyle","_createVideo4","_createSwiper","isElementExist","parent","getArticleData_fn","createVideo4_fn","Configs.article4","_b","_a","setStyle_fn","createSwiper_fn","element","Video4","basic_rwd","$id","createUid","$this","$swiperSet","swiper","container","next","prev","pagination","gate","$swiper","SwiperV8","operateStart","operateEnd","operateMove","getTranslateValues","matrix","matrixType","matrixValues","getSlideTotalW","items","slideTotalWidth","item","marginL","marginR","detectPos","self","eventHandler","slideWrap","moveDistance","styles","disableLinkDrag","aTag","i","len","CategorySlider","speed","activeItem","prevOffsetLeft","getTargetUrl","type","Share4","Configs.share4","targets","utm","copy","baseUrl","shareUrl","$copied","$clipboard","copiedWrapper","tooltipsText","fadeIn","duration","opacity","interval","gap","fading","fadeOut","callback","getBreakpoints","m4","breakpoints","attr","value","getDuration","breakpoint","points","point","a","b","createAnimateWrap","behavior","continual","childDOM","animateItem","cloneElement","cloneAnimateWrap","keyframes","direction","framesObj","animateFrom","animateTo","debounce","func","timer","event","Marquee4","_animation","_event","oldVal","newVal","Configs.marquee4","animation_fn","event_fn","autoplay","pauseOnMouseenter","playDelay","animateInit","enterKeyframes","framesArr","averageDuration","updateDuration","startTime","cloneStartTime","addClass","className","removeClass","dragControl","_bindButtonEvent","_bindDragEvent","_scrollerDetect","_buttonDetect","_bindItemEvent","$wrapper","$active","updateEvent","scrollerDetect_fn","buttonDetect_fn","bindDragEvent_fn","_c","bindButtonEvent_fn","_d","_e","_f","bindItemEvent_fn","$button","buttonEvent","fix","$el","isDown","isMoved","startX","scrollLeft","mousedownEvent","mouseleaveEvent","mouseupEvent","mousemoveEvent","walk","reset","$container","$element","itemEvent","selectOption","clickHandler","collapseControl","$drag","collapse","createTemplate","option","originalDomString","$storage","Configs.multipurpose4","Multipurpose4","_render","_breakpoint","_distribute","distribute_fn","breakpoint_fn","customize","render_fn","obj","keys","dragContainer","collapseContainer","collapseHandle","defaultOptions","collapseClass","transition","expandHandle","height","Collapse4","Configs.collapse4","block","defaultOpen","targetStopPropagation","defaultActiveMark","instance","single"],"mappings":"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"}
|
1
|
+
{"version":3,"file":"fesd-bundle.js","sources":["../../src/fesd/detect4/detect4.js","../../src/fesd/article4/article4.js","../../src/fesd/category-slider/category-slider.js","../../src/fesd/share4/share4.js","../../src/fesd/marquee4/marquee4.js","../../src/fesd/multipurpose4/multipurpose4.js"],"sourcesContent":["export const init = () => {\n const userAgent = navigator.userAgent;\n const browser = {\n // Firefox 1.0+\n isFirefox: typeof InstallTrigger !== 'undefined',\n // Opera 8.0+\n isOpera: (!!window.opr && !!opr.addons) || !!window.opera || userAgent.indexOf(' OPR/') >= 0,\n // Internet Explorer 6-11\n isIE: /*@cc_on!@*/ false || !!document.documentMode,\n // Edge 20+\n isEdge: !(false || !!document.documentMode) && !!window.StyleMedia,\n // Edge (based on chromium) detection\n isEdgeChromium: /\\sedg\\//i.test(userAgent) || /edg([ea]|ios)/i.test(userAgent),\n // Safari 3.0+ \"[object HTMLElementConstructor]\"\n isSafari: !/chrome|crios|crmo/i.test(userAgent) && /safari/i.test(userAgent),\n // Chrome 1 - 79\n isChrome: (!!window.chrome && (!!window.chrome.webstore || !!window.chrome.runtime)) || /chrome|crios|crmo/i.test(userAgent),\n };\n const mobile = {\n // Android\n isAndroid: userAgent.indexOf('Android') > -1 || userAgent.indexOf('Adr') > -1,\n // iOS | ipad\n isiOS: userAgent.indexOf('Mac') > -1 && 'ontouchend' in document,\n };\n const os = {\n // window\n isWindows: userAgent.indexOf('Win') > -1,\n // macos\n isMacOS: userAgent.indexOf('Mac') > -1,\n // UNIX\n isUNIX: userAgent.indexOf('X11') > -1,\n // Linux\n isLinux: userAgent.indexOf('Linux') > -1,\n };\n return { browser, mobile, os }\n}\n\nexport const isBrowser4 = () => {\n const { browser } = init();\n return Object.keys(browser).find(key => {\n if (browser[key]) return browser[key];\n });\n};\n\nexport const isMobile4 = () => {\n const { mobile } = init();\n return Object.keys(mobile).some(key => {\n if (mobile[key]) return mobile[key];\n });\n};\n\nexport const isOs4 = () => {\n const { os } = init();\n return Object.keys(os).find(key => {\n if (os[key]) return os[key];\n });\n};\n\nexport const logs = () => console.dir(init());\n\nexport default function Detect4() {\n return {\n init,\n isBrowser4,\n isMobile4,\n isOs4,\n logs\n }\n}\n\n\n","import { Swiper as SwiperV8 } from 'swiper/bundle'\nimport { configs } from '../configs'\nimport Video4 from '../video4'\n// import Swiper bundle with all modules installed\nimport {\n isString,\n isNodeList,\n isElementExist,\n getAllElements,\n createUid\n} from '../commons'\n\n// 設置 CSS 樣式\nconst setCss = (target, style, css) => {\n if (!target) return;\n\n // 若是 NodeList 則需使用 foreach set css\n if (isNodeList(target)) target.forEach(el => (el.style[style] = css));\n else target.style[style] = css;\n};\n\nclass Article4 {\n constructor(el, options = {}) {\n if (!isString(el) || !isElementExist(el)) return;\n\n this.__storage__ = {\n el,\n options,\n };\n\n this.#create();\n }\n\n #create() {\n const { el, options } = this.__storage__;\n const { SETTINGS } = configs.article4;\n\n this.elements = getAllElements(el);\n this.options = Object.assign({}, SETTINGS, options);\n\n this.#init();\n }\n\n #init() {\n const { elements } = this;\n\n elements.forEach(parent => {\n parent.querySelectorAll('._article').forEach(el => {\n el.article = {};\n el.article.parent = parent;\n el.article.params = this.#getArticleData(el);\n el.article.methods = {};\n el.article.methods.update = this.update;\n this.#setStyle(el).#createVideo4(el).#createSwiper(el);\n });\n });\n }\n\n // 取得元件上的設定值\n #getArticleData(element) {\n return {\n // 元件本身\n $selector: element,\n\n // 父層元件\n $backgroundWrap: element.querySelector('._backgroundWrap'),\n $contentWrap: element.querySelector('._contentWrap'),\n $wordCover: element.querySelector('._wordCover'),\n $buttonCover: element.querySelector('._buttonCover'),\n $imgCover: element.querySelector('._imgCover'),\n $cover: element.querySelectorAll('._cover'),\n $swiper: element.querySelector('.swiper'),\n $swiperButtonCover: element.querySelector('.swiper-button-cover'),\n\n // 子層元件\n $h: element.querySelector('._H'),\n $subH: element.querySelector('._subH'),\n $p: element.querySelector('._P'),\n $button: element.querySelector('._button'),\n $description: element.querySelectorAll('._description'),\n $video: element.querySelectorAll('[video-id]'),\n\n // 父層設定\n typeFullColor: element.getAttribute('typeFull-color'),\n typeFullBoxColor: element.getAttribute('typeFull-boxcolor'),\n\n // 子層設定\n hColor: element.getAttribute('h-color'),\n subHColor: element.getAttribute('subh-color'),\n pColor: element.getAttribute('p-color'),\n buttonColor: element.getAttribute('button-color'),\n buttonColorHover: element.getAttribute('button-color-hover'),\n buttonTextColor: element.getAttribute('button-textcolor'),\n descriptionColor: element.getAttribute('description-color'),\n };\n }\n\n // 設置設定值的 CSS 樣式\n #setStyle(element) {\n const { params } = element.article;\n\n // article ._H\n setCss(params.$h, 'color', params.hColor);\n\n // article ._subH\n setCss(params.$subH, 'color', params.subHColor);\n\n // article ._P\n setCss(params.$p, 'color', params.pColor);\n\n // imgCover ._description\n setCss(params.$description, 'color', params.descriptionColor);\n\n // button background-color && text color\n setCss(params.$button, 'backgroundColor', params.buttonColor);\n setCss(params.$button, 'color', params.buttonTextColor);\n\n // button hover color\n if (params.buttonColorHover && params.$button) {\n params.$button.appendChild(document.createElement('span'));\n setCss(params.$button.querySelector('span'), 'backgroundColor', params.buttonColorHover);\n }\n\n // typeFull background-color\n setCss(params.$backgroundWrap, 'backgroundColor', params.typeFullColor);\n\n // typeFull box background-color\n setCss(params.$contentWrap, 'backgroundColor', params.typeFullBoxColor);\n\n return this;\n }\n\n #createVideo4(element) {\n const { params } = element.article;\n\n if (params.$video.length) {\n const video = new Video4(params.$video);\n }\n\n return this;\n }\n\n #createSwiper(element) {\n const { basic_rwd } = this.options;\n\n const { params } = element.article;\n\n // 判斷是否擁有 swiper4 結構\n if (!params.$swiper) return;\n\n // set id\n const $id = createUid();\n\n const $this = this;\n\n // set swiper\n let $swiperSet = {\n on: {\n init(swiper) {\n const container = swiper.$el[0];\n // video4 重複綁定修正\n if (params.$video.length) {\n // 應該抓 DB 設定的 classname\n const allVideo4 = container.querySelectorAll('[video4-active]');\n [...allVideo4].forEach(element => {\n element.querySelector(configs.video4.SETTINGS.videoButton)?.remove();\n element.querySelector('.overlay')?.remove();\n element.removeAttribute('video4-active');\n });\n $this.update();\n }\n },\n observerUpdate(swiper) {\n if (swiper.params.autoplay.enabled) {\n swiper.autoplay.start();\n swiper.update();\n }\n },\n },\n observer: true,\n breakpoints: {},\n };\n\n params.$selector.setAttribute('img-swiper', 'on');\n params.$selector.classList.add(`swiper-${$id}`);\n\n // swiper navigation (預設為 off)\n if (params.$selector.getAttribute('swiper-arrow') !== 'off' && params.$selector.getAttribute('swiper-arrow')) {\n const next = document.createElement('div');\n next.className = `swiper-button-next swiper-${$id}`;\n params.$swiperButtonCover.appendChild(next);\n\n const prev = document.createElement('div');\n prev.className = `swiper-button-prev swiper-${$id}`;\n params.$swiperButtonCover.appendChild(prev);\n\n $swiperSet.navigation = {\n nextEl: `.swiper-button-next.swiper-${$id}`,\n prevEl: `.swiper-button-prev.swiper-${$id}`,\n };\n }\n\n // swiper pagination (預設為 on)\n if (params.$selector.getAttribute('swiper-nav') !== 'off' || !params.$selector.getAttribute('swiper-nav')) {\n const pagination = document.createElement('div');\n pagination.className = `swiper-pagination swiper-${$id}`;\n params.$swiper.appendChild(pagination);\n\n $swiperSet.pagination = {\n el: `.swiper-pagination.swiper-${$id}`,\n clickable: true,\n };\n }\n\n // slidesPerView\n if (Number.parseInt(params.$selector.getAttribute('swiper-num'))) {\n $swiperSet.breakpoints[basic_rwd] = {\n slidesPerView: params.$selector.getAttribute('swiper-num') ? (Number.parseInt(params.$selector.getAttribute('swiper-num')) > 5 ? 5 : Number.parseInt(params.$selector.getAttribute('swiper-num'))) : 1,\n };\n }\n\n // autoplay (預設為 on)\n if (params.$selector.getAttribute('swiper-autoplay') !== 'off' || !params.$selector.getAttribute('swiper-autoplay')) {\n $swiperSet.autoplay = {\n delay: 3000,\n disableOnInteraction: false,\n };\n }\n\n // loop (預設為 on)\n if (params.$selector.getAttribute('swiper-loop') !== 'off' || !params.$selector.getAttribute('swiper-loop')) {\n $swiperSet.loop = true;\n }\n\n // speed\n if (params.$selector.getAttribute('swiper-speed')) {\n $swiperSet.speed = parseInt(params.$selector.getAttribute('swiper-speed'));\n }\n\n // parallax (預設為 off)\n if (params.$selector.getAttribute('swiper-parallax') !== 'off' && !params.$selector.getAttribute('swiper-loop')) {\n $swiperSet.parallax = true;\n }\n\n // pagination dynamicBullets (預設為 off)\n if (params.$selector.getAttribute('swiper-pagination-dynamic') === 'on') {\n $swiperSet.pagination.dynamicBullets = true;\n }\n\n // 若 swiper 只有一筆輪播則隱藏 navigation 及 pagination\n let gate = () => (window.innerWidth > this.basic_rwd ? Number(params.$selector.getAttribute('swiper-num')) || 1 : 1);\n\n if (params.$swiper.querySelectorAll('.swiper-slide').length <= gate()) {\n $swiperSet.navigation = false;\n $swiperSet.pagination = false;\n $swiperSet.autoplay = false;\n $swiperSet.loop = false;\n\n params.$selector.querySelector('.swiper-button-cover').style.display = 'none';\n params.$selector.querySelector('.swiper-pagination').style.display = 'none';\n\n params.$swiper.classList.add('swiper-no-swiping');\n }\n\n const $swiper = new SwiperV8(params.$swiper, $swiperSet);\n\n element.article.swiperList = [];\n element.article.swiperList.push($swiper);\n\n return this;\n }\n update() {\n const { elements } = this;\n\n elements.forEach(parent => {\n parent.querySelectorAll('._article').forEach(el => {\n el.article = {};\n el.article.parent = parent;\n el.article.params = this.#getArticleData(el);\n\n this.#createVideo4(el);\n });\n });\n }\n}\n\nexport default Article4;\n","// 判斷操作事件使用 mouse 或是 touch\nlet operateStart = 'ontouchstart' in document.documentElement ? 'touchstart' : 'mousedown';\nlet operateEnd = 'ontouchend' in document.documentElement ? 'touchend' : 'mouseup';\nlet operateMove = 'ontouchmove' in document.documentElement ? 'touchmove' : 'mousemove';\n\n/* ---------------------------- Function 宣告 --------------------------------- */\n\n// 獲取 translate 數值\nfunction getTranslateValues(element) {\n const style = window.getComputedStyle(element);\n const matrix = style['transform'] || style.mozTransform;\n\n // No transform property. Simply return 0 values.\n if (matrix === 'none') {\n return {\n x: 0,\n y: 0,\n z: 0,\n };\n }\n\n // Can either be 2d or 3d transform\n const matrixType = matrix.includes('3d') ? '3d' : '2d';\n const matrixValues = matrix.match(/matrix.*\\((.+)\\)/)[1].split(', ');\n\n // 2d matrices have 6 values\n // Last 2 values are X and Y.\n // 2d matrices does not have Z value.\n if (matrixType === '2d') {\n return {\n x: Number(matrixValues[4]),\n y: Number(matrixValues[5]),\n z: 0,\n };\n }\n\n // 3d matrices have 16 values\n // The 13th, 14th, and 15th values are X, Y, and Z\n if (matrixType === '3d') {\n return {\n x: Number(matrixValues[12]),\n y: Number(matrixValues[13]),\n z: Number(matrixValues[14]),\n };\n }\n}\n\n// 計算輪播內容總寬度\nfunction getSlideTotalW(element) {\n const slideWrap = element.querySelector('.wrapper');\n const items = slideWrap.querySelectorAll('.item');\n let slideTotalWidth = 0; //輪播內容總寬度\n items.forEach((item) => {\n const style = getComputedStyle(item);\n const marginL = parseInt(style.marginLeft);\n const marginR = parseInt(style.marginRight);\n slideTotalWidth += item.getBoundingClientRect().width + marginL + marginR;\n });\n return slideTotalWidth;\n}\n\n// 偵測目前輪播位置\nfunction detectPos(self) {\n // 拖拉在最左邊時\n if (getTranslateValues(self.slideWrapEl).x >= self.translateMin) {\n return 'is-start';\n }\n // 拖拉在最右邊時\n else if (getTranslateValues(self.slideWrapEl).x <= self.translateMax) {\n return 'is-end';\n }\n // 拖拉在中間時\n else if (\n getTranslateValues(self.slideWrapEl).x < self.translateMin &&\n getTranslateValues(self.slideWrapEl).x > self.translateMax\n ) {\n return 'is-middle';\n }\n}\n\n// 綁定事件\nfunction eventHandler(self) {\n const element = self.el;\n const slideWrap = element.querySelector('.wrapper');\n //滑鼠按住或是行動裝置手指按住\n slideWrap.addEventListener(operateStart, function (e) {\n self.isDown = true;\n if (self.slidable) slideWrap.classList.add('dragging');\n switch (operateStart) {\n case 'mousedown':\n self.startX = e.pageX;\n break;\n case 'touchstart':\n self.startX = e.changedTouches[0].pageX;\n break;\n }\n self.nowTranslateX = getTranslateValues(slideWrap).x;\n });\n\n //滑鼠放開或是行動裝置手指放開\n slideWrap.addEventListener(operateEnd, function (e) {\n self.isDown = false;\n slideWrap.classList.remove('dragging');\n slideWrap.classList.remove('moving');\n //移動距離\n let moveDistance;\n switch (operateMove) {\n case 'mousemove':\n moveDistance = e.pageX - self.startX;\n break;\n case 'touchmove':\n moveDistance = e.changedTouches[0].pageX - self.startX;\n break;\n }\n if (moveDistance === 0 && e.target.closest('.item')) {\n if (operateEnd === 'mouseup' && e.button !== 0) return;\n const items = slideWrap.querySelectorAll('.item');\n items.forEach((item) => {\n item.classList.remove('active');\n });\n e.target.closest('.item').classList.add('active');\n self.moveActive(self.params.speed);\n } else {\n if (self.slidable) self.resetPos(element);\n }\n });\n\n //滑鼠離開\n slideWrap.addEventListener('mouseleave', function () {\n if (!self.isDown) return;\n if (self.slidable) {\n self.isDown = false;\n slideWrap.classList.remove('dragging');\n slideWrap.classList.remove('moving');\n self.resetPos(element);\n }\n });\n\n //滑鼠移動或是行動裝置手指移動\n slideWrap.addEventListener(operateMove, function (e) {\n if (!self.draggable) return;\n if (self.slidable) {\n if (!self.isDown) return;\n e.preventDefault();\n //移動距離\n let moveDistance;\n switch (operateMove) {\n case 'mousemove':\n moveDistance = e.pageX - self.startX;\n break;\n case 'touchmove':\n moveDistance = e.changedTouches[0].pageX - self.startX;\n break;\n }\n if (moveDistance !== 0) {\n slideWrap.classList.add('moving');\n const styles = {\n transition: 'all 0ms ease 0s',\n transform: `translate3d(${self.nowTranslateX + moveDistance}px,0,0)`,\n };\n Object.assign(slideWrap.style, styles);\n }\n }\n });\n}\n\n// 取消 a 的拖拉\nfunction disableLinkDrag(element) {\n const aTag = element.querySelectorAll('a');\n for (var i = 0, len = aTag.length; i < len; i++) {\n aTag[i].draggable = false;\n }\n}\n\nexport default class CategorySlider {\n constructor(element, params) {\n this.el = typeof element === 'string' ? document.querySelector(element) : element;\n this.slideWrapEl = this.el.querySelector('.wrapper');\n // default params\n this.params = {\n speed: 300,\n clickSwitch: true,\n breakpoint: false,\n };\n Object.assign(this.params, params);\n\n this.draggable = true;\n this.isDown = false; //按下\n this.startX = 0; //按下初始位置\n this.nowTranslateX = getTranslateValues(this.slideWrapEl).x; //目前X軸偏移輛\n this.slideTotalWidth = getSlideTotalW(this.el);\n this.translateMin = 0;\n this.translateMax = -Math.floor(\n Math.abs(\n getSlideTotalW(this.el) - this.el.querySelector('.wrapper').getBoundingClientRect().width\n )\n );\n this.slidable =\n this.slideTotalWidth > Math.round(this.el.getBoundingClientRect().width) &&\n (!this.params.breakpoint || window.innerWidth <= this.params.breakpoint);\n this.init();\n }\n init() {\n const self = this;\n if (self.slidable) {\n self.slideWrapEl.style.width = `${self.slideTotalWidth}px`;\n self.el.classList.add('slidable');\n if (self.slideWrapEl.querySelector('.item.active')) self.moveActive();\n }\n window.addEventListener('resize', function () {\n self.update();\n });\n eventHandler(self);\n disableLinkDrag(self.el);\n }\n moveActive(speed) {\n const self = this;\n const activeItem = self.slideWrapEl.querySelector('.item.active');\n const prevItem = activeItem.previousElementSibling;\n const prevOffsetLeft = prevItem\n ? activeItem.offsetLeft - self.el.clientWidth / 2 + activeItem.clientWidth / 2\n : 0;\n if (self.slidable) {\n if (-prevOffsetLeft < 0 && -prevOffsetLeft > self.translateMax) {\n const styles = {\n transition: `all ${speed ? speed : 0}ms ease 0s`,\n transform: `translate3d(-${prevOffsetLeft}px,0,0)`,\n };\n Object.assign(self.slideWrapEl.style, styles);\n } else if (-prevOffsetLeft >= 0) {\n const styles = {\n transition: `all ${speed ? speed : 0}ms ease 0s`,\n transform: `translate3d(0,0,0)`,\n };\n Object.assign(self.slideWrapEl.style, styles);\n } else {\n const styles = {\n transition: `all ${speed ? speed : 0}ms ease 0s`,\n transform: `translate3d(${self.translateMax}px,0,0)`,\n };\n Object.assign(self.slideWrapEl.style, styles);\n }\n if (speed) {\n self.slideWrapEl.addEventListener(\n 'transitionend',\n function () {\n self.nowTranslateX = getTranslateValues(self.slideWrapEl).x;\n switch (detectPos(self)) {\n case 'is-start':\n self.el.classList.add('is-start');\n self.el.classList.remove('is-end');\n break;\n case 'is-middle':\n self.el.classList.remove('is-start');\n self.el.classList.remove('is-end');\n break;\n case 'is-end':\n self.el.classList.remove('is-start');\n self.el.classList.add('is-end');\n break;\n }\n },\n false\n );\n } else {\n self.nowTranslateX = getTranslateValues(self.slideWrapEl).x;\n switch (detectPos(self)) {\n case 'is-start':\n self.el.classList.add('is-start');\n self.el.classList.remove('is-end');\n break;\n case 'is-middle':\n self.el.classList.remove('is-start');\n self.el.classList.remove('is-end');\n break;\n case 'is-end':\n self.el.classList.remove('is-start');\n self.el.classList.add('is-end');\n break;\n }\n }\n }\n }\n resetPos() {\n const self = this;\n switch (detectPos(self)) {\n case 'is-start':\n self.el.classList.add('is-start');\n self.el.classList.remove('is-end');\n Object.assign(self.slideWrapEl.style, {\n transition: `all ${self.params.speed}ms ease 0s`,\n transform: 'translate3d(0,0,0)',\n });\n break;\n case 'is-middle':\n self.el.classList.remove('is-start');\n self.el.classList.remove('is-end');\n break;\n case 'is-end':\n self.el.classList.remove('is-start');\n self.el.classList.add('is-end');\n Object.assign(self.slideWrapEl.style, {\n transition: `all ${self.params.speed}ms ease 0s`,\n transform: `translate3d(${self.translateMax}px,0,0)`,\n });\n break;\n }\n }\n update() {\n const self = this;\n self.el.querySelector('.wrapper').removeAttribute('style');\n self.slideTotalWidth = getSlideTotalW(self.el);\n self.translateMax = -Math.floor(\n Math.abs(\n getSlideTotalW(self.el) - self.el.querySelector('.wrapper').getBoundingClientRect().width\n )\n );\n self.slidable =\n self.slideTotalWidth > Math.round(self.el.getBoundingClientRect().width) &&\n (!self.params.breakpoint || window.innerWidth <= self.params.breakpoint);\n if (self.slidable) {\n self.slideWrapEl.style.width = `${self.slideTotalWidth}px`;\n self.el.classList.add('slidable');\n if (self.slideWrapEl.querySelector('.item.active')) self.moveActive();\n } else {\n self.el.classList.remove('slidable');\n self.el.classList.remove('is-start');\n self.el.classList.remove('is-end');\n self.slideWrapEl.removeAttribute('style');\n }\n }\n}\n","import { configs } from '../configs'\nimport {\n insert,\n isString,\n isElementExist,\n getAllElements\n} from '../commons'\n\nconst getTargetUrl = type => {\n // facebook\n if (type == 'facebook') {\n return 'https://www.facebook.com/sharer/sharer.php?u=';\n }\n\n // line\n if (type == 'line') {\n // desktop & mobile 網址不同\n if (/Android|webOS|iPhone|iPad|iPod|BlackBerry|IEMobile|Opera Mini/i.test(navigator.userAgent)) {\n return 'http://line.naver.jp/R/msg/text/?';\n }\n return 'https://lineit.line.me/share/ui?url=';\n }\n\n // twitter\n if (type == 'twitter') {\n return 'https://twitter.com/intent/tweet?url=';\n }\n\n // linkedin\n if (type == 'linkedin') {\n return `http://www.linkedin.com/shareArticle?mini=true&title=${document.title}&source=${document.title}&url=`;\n // return `https://www.linkedin.com/sharing/share-offsite/?url=`;\n }\n\n // telegram\n if (type == 'telegram') {\n return 'https://telegram.me/share/url?url=';\n }\n};\n\nclass Share4 {\n constructor(el, options = {}) {\n this.__storage__ = {\n el,\n options,\n };\n\n this.#create();\n }\n\n #create() {\n const { el, options } = this.__storage__;\n // 從 configs 提取設定\n const { SETTINGS } = configs.share4;\n if (!isString(el) || !isElementExist(el)) return;\n\n this.elements = getAllElements(el);\n\n this.options = Object.assign({}, SETTINGS, options);\n\n this.#init();\n }\n\n #init() {\n const { elements, options } = this;\n\n elements.forEach(targets => {\n targets.querySelectorAll('[share-target]').forEach(el => {\n el.share = {};\n el.share.instance = this;\n el.share.params = options;\n el.share.eventHandler = this.#trigger;\n el.addEventListener('click', el.share.eventHandler);\n });\n });\n }\n\n #trigger() {\n /** the keyword `this` in this method is pointed to the click target */\n const { eventHandler, params } = this.share;\n const type = this.getAttribute('share-target');\n\n const utm = {\n source: this.getAttribute('utm-source'),\n medium: this.getAttribute('utm-medium'),\n campaign: this.getAttribute('utm-campaign'),\n };\n\n const copy = {\n success: this.getAttribute('copy-success') || params.success,\n text: this.getAttribute('copy-text') || params.text,\n className: this.getAttribute('copy-class') || params.className,\n duration: this.getAttribute('copy-duration') || params.duration,\n };\n\n const baseUrl = encodeURIComponent(document.URL);\n let shareUrl = baseUrl;\n\n // 若為 wechat 則另開視窗掃描 QRcode\n if (type == 'wechat') {\n // https://api.qrserver.com/v1/create-qr-code/?data=${url}&size=300x300\n window.open(`https://api.qrserver.com/v1/create-qr-code/?data=${baseUrl}&size=250x250`, 'share to wechat', 'width=300,height=300');\n return;\n }\n\n // 若為 url 則複製連結\n if (type == 'url') {\n if (isElementExist('.copied-wrapper')) return;\n\n document.querySelector('body').insertAdjacentHTML(insert.append, `<div class='copied-wrapper'><div class='text'>${copy.success ? copy.success : ''}</div><input id='clipboard' type='text' readonly></div>`);\n\n const $copied = document.querySelector('.copied-wrapper');\n\n if (copy.className) {\n $copied.classList.add(copy.className);\n }\n $copied.style.top = this.getBoundingClientRect().top + window.scrollY + 'px';\n $copied.style.left = this.getBoundingClientRect().left + this.getBoundingClientRect().width / 2 + 'px';\n $copied.style.display = 'block';\n\n const $clipboard = document.querySelector('#clipboard');\n\n $clipboard.value = copy.text ?? window.location.href;\n $clipboard.setSelectionRange(0, 9999);\n $clipboard.select();\n\n if (document.execCommand('copy')) {\n // 複製對應內容\n document.execCommand('copy');\n // 動畫效果\n const copiedWrapper = document.querySelector('.copied-wrapper');\n const tooltipsText = document.querySelector('.copied-wrapper .text');\n tooltipsText.style.display = 'block';\n tooltipsText.style.opacity = 0;\n const fadeIn = (element, duration) => {\n let opacity = 0;\n const interval = 50;\n const gap = interval / duration;\n\n const fading = setInterval(function () {\n opacity += gap;\n element.style.opacity = opacity;\n\n if (opacity >= 1) {\n clearInterval(fading);\n setTimeout(function () {\n fadeOut(element, 300, function () {\n copiedWrapper.remove();\n });\n }, copy.duration);\n }\n }, interval);\n };\n const fadeOut = (element, duration, callback) => {\n let opacity = 1;\n const interval = 50;\n const gap = interval / duration;\n\n const fading = setInterval(() => {\n opacity -= gap;\n element.style.opacity = opacity;\n\n if (opacity <= 0) {\n clearInterval(fading);\n element.style.display = 'none';\n if (callback) callback();\n }\n }, interval);\n };\n fadeIn(tooltipsText, 300);\n }\n\n return;\n }\n\n // 其餘則使用對應網址另開新分頁\n // url + '?utm_source=Facebook' + '&utm_medium=social' + '&utm_campaign=' + campaign\n shareUrl = `${shareUrl}${utm.source ? `?utm_source=${utm.source}` : ''}${utm.medium ? `&utm_medium${utm.medium}` : ''}${utm.campaign ? `&utm_campaign${utm.campaign}` : ''}`;\n shareUrl = shareUrl.replace('?', '%3F').replace(new RegExp('&', 'g'), '%26');\n\n if (type == 'line') {\n // line 需帶入原始網址\n window.open(`${getTargetUrl(type)}${baseUrl}`);\n } else {\n window.open(`${getTargetUrl(type)}${shareUrl}"e=${shareUrl}`);\n }\n\n this.removeEventListener('click', eventHandler);\n setTimeout(() => {\n this.addEventListener('click', eventHandler);\n }, 100);\n }\n}\n\nexport default Share4;\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// if (!customElements.get('marquee-el')) {\n// customElements.define('marquee-el', Marquee4);\n// }\n\nexport default Marquee4;\n","import { configs } from '../configs'\nimport { isNodeList, insert } from '../commons'\n\n// debounce\nconst debounce = function (func) {\n let timer;\n return function (event) {\n if (timer) clearTimeout(timer);\n timer = setTimeout(func, 200, event);\n };\n};\n\n// add class\nconst addClass = (target, className) => {\n if (isNodeList(target)) {\n target.forEach(el => {\n el.classList.add(className);\n });\n return;\n }\n\n target.classList.add(className);\n};\n\n// remove class\nconst removeClass = (target, className) => {\n if (isNodeList(target)) {\n target.forEach(el => {\n el.classList.remove(className);\n });\n return;\n }\n\n target.classList.remove(className);\n};\n\n// 拖拉類型控制\nclass dragControl {\n constructor(el) {\n this.$element = el;\n this.option = el.s.option.drag;\n this.#init();\n }\n\n // 初始化\n #init() {\n const $this = this;\n if (!$this.$element) return;\n\n $this.$container = $this.$element.querySelector('.drag-container');\n $this.$wrapper = $this.$container.querySelector('.wrapper');\n\n // scroll & resize event\n const updateEvent = () => {\n $this.#scrollerDetect();\n $this.#buttonDetect();\n };\n\n // scroll event handle\n $this.$wrapper.removeEventListener('scroll', updateEvent);\n $this.$wrapper.addEventListener('scroll', updateEvent);\n\n // resize event handle\n window.removeEventListener('resize', debounce(updateEvent));\n window.addEventListener('resize', debounce(updateEvent));\n\n // 左右拖拉事件綁定,若為 collapse 則強制啟用 draggable\n if ($this.option.draggable || $this.$element.s.type == 'collapse') $this.#bindDragEvent();\n // 左右箭頭事件綁定,若為 collapse 則不輸出 .navigation\n if ($this.option.navigation && $this.$element.s.type !== 'collapse') {\n $this.$container.insertAdjacentHTML(\n insert.prepend,\n `<div class=\"navigation\">\n <div class=\"button prev\">\n <div></div>\n </div>\n <div class=\"button next\">\n <div></div>\n </div>\n </div>`,\n );\n\n $this.$button = $this.$container?.querySelectorAll('.button');\n $this.#bindButtonEvent();\n }\n // 卷軸位置判斷\n $this.#scrollerDetect();\n // 隱藏按鈕判斷\n $this.#buttonDetect();\n // 選項事件綁定\n $this.#bindItemEvent();\n // 更新 active 位置\n // $this.update();\n }\n // 更新 active 位置\n update(element) {\n const $wrapper = element.querySelector('.wrapper');\n const $active = $wrapper?.querySelector('.active');\n if ($active) {\n // 移動至 active class 處\n const moveDistance = $active.offsetLeft + $active.getBoundingClientRect().width / 2 - $wrapper.getBoundingClientRect().width / 2;\n $wrapper.scrollTo({\n left: moveDistance,\n behavior: 'smooth',\n });\n }\n }\n // 左右箭頭事件綁定\n #bindButtonEvent() {\n const $this = this;\n const { $wrapper, $button } = $this;\n // button event\n const buttonEvent = function () {\n const type = this.classList.contains('next');\n const fix = parseInt($wrapper.getBoundingClientRect().width * 0.7);\n\n $wrapper.scrollTo({\n left: type ? $wrapper.scrollLeft + fix : $wrapper.scrollLeft - fix,\n behavior: 'smooth',\n });\n\n setTimeout(() => {\n $this.#buttonDetect();\n }, 100);\n };\n\n // button event handle\n $button.forEach($el => {\n $el.removeEventListener('click', buttonEvent);\n $el.addEventListener('click', buttonEvent);\n });\n }\n // 左右拖拉事件綁定\n #bindDragEvent() {\n const { $wrapper } = this;\n\n // 是否為點擊狀態\n let isDown = false;\n // 是否為移動狀態\n let isMoved = false;\n // 起始 X 軸數值\n let startX = 0;\n // 卷軸數值\n let scrollLeft = 0;\n\n // mousedown event\n const mousedownEvent = function (event) {\n event.preventDefault();\n\n isMoved = false;\n isDown = true;\n\n startX = event.pageX - $wrapper.offsetLeft;\n scrollLeft = $wrapper.scrollLeft;\n };\n\n // mousedown event handle\n $wrapper.removeEventListener('mousedown', mousedownEvent);\n $wrapper.addEventListener('mousedown', mousedownEvent);\n\n // mouseleave event\n const mouseleaveEvent = function () {\n isMoved = false;\n isDown = false;\n };\n\n // mouseleave event handle\n $wrapper.removeEventListener('mouseleave', mouseleaveEvent);\n $wrapper.addEventListener('mouseleave', mouseleaveEvent);\n\n // mouseup event\n const mouseupEvent = function (event) {\n event.preventDefault();\n isDown = false;\n };\n\n // mouseup event handle\n $wrapper.removeEventListener('mouseup', mouseupEvent);\n $wrapper.addEventListener('mouseup', mouseupEvent);\n\n // mousemove event\n const mousemoveEvent = function (event) {\n event.preventDefault();\n\n isMoved = true;\n\n if (!isDown) return;\n\n const x = event.pageX - $wrapper.offsetLeft;\n const walk = x - startX;\n $wrapper.scrollTo({\n left: scrollLeft - walk,\n });\n };\n\n // mousemove event handle\n $wrapper.removeEventListener('mousemove', mousemoveEvent);\n $wrapper.addEventListener('mousemove', mousemoveEvent);\n\n const reset = function (event) {\n if (isMoved) {\n event.preventDefault();\n event.stopPropagation();\n }\n };\n\n $wrapper.querySelectorAll('a').forEach($el => {\n $el.removeEventListener('click', reset);\n $el.addEventListener('click', reset);\n });\n }\n // 卷軸位置判斷\n #scrollerDetect() {\n const { $container, $wrapper } = this;\n\n const gate = $wrapper.scrollWidth - $wrapper.clientWidth;\n const value = $wrapper.scrollLeft;\n\n if (gate <= 0) return;\n\n addClass($container, 'scrollable');\n\n // 最前\n if (value == 0) {\n removeClass($container, 'scrollable');\n addClass($wrapper, 'start');\n removeClass($wrapper, 'end');\n }\n // 最後\n else if (value >= 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 addClass($button, 'hide');\n addClass($element, 'noScrollable');\n return;\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 else if (value >= gate) {\n $button.forEach($el => {\n if ($el.classList.contains('next')) {\n addClass($el, 'hide');\n return;\n }\n\n removeClass($el, 'hide');\n });\n }\n // 中間\n else {\n removeClass($button, 'hide');\n }\n }\n // 選項事件綁定\n #bindItemEvent() {\n const { $element } = this;\n\n const itemEvent = $el => {\n if (this.option.selected) {\n const selectOption = $el.getAttribute('data-option').trim();\n $element.setAttribute('m4-status', selectOption);\n }\n };\n\n function clickHandler() {\n itemEvent(this);\n }\n\n this.$container.querySelectorAll('.item').forEach(el => {\n el.removeEventListener('click', clickHandler);\n el.addEventListener('click', clickHandler);\n });\n }\n}\n\n// 收合類型控制\nclass collapseControl {\n constructor(el) {\n this.$element = el;\n this.option = el.s.option.collapse;\n this.#init();\n }\n\n // 初始化\n #init() {\n if (!this.$element) return;\n\n this.$container = this.$element.querySelector('.collapse-container');\n this.$wrapper = this.$container.querySelector('.wrapper');\n\n // 隱藏按鈕判斷\n if (this.#buttonDetect()) {\n // 展開箭頭事件綁定\n this.#bindButtonEvent();\n }\n\n // 選項事件綁定\n this.#bindItemEvent();\n }\n // 隱藏按鈕判斷\n #buttonDetect() {\n const $drag = this.$element.querySelector('.drag-container');\n const $wrapper = $drag.querySelector('.wrapper');\n\n if ($wrapper.scrollWidth - $wrapper.clientWidth > 0) {\n $drag.insertAdjacentHTML(insert.append, `<div class=\"open-collapse\"></div>`);\n this.$button = $drag.querySelector('.open-collapse');\n return true;\n }\n\n return false;\n }\n // 展開箭頭事件綁定\n #bindButtonEvent() {\n const { $element, $button } = this;\n\n // button event\n const buttonEvent = function () {\n if ($element.classList.contains('expand')) {\n $element.classList.remove('expand');\n } else {\n $element.classList.add('expand');\n }\n };\n\n // button event handle\n $button.removeEventListener('click', buttonEvent);\n $button.addEventListener('click', buttonEvent);\n }\n // 選項事件綁定\n #bindItemEvent() {\n const { $element } = this;\n\n const itemEvent = ($el, collapse) => {\n if (collapse) {\n if ($element?.classList.contains('expand')) {\n $element?.classList.remove('expand');\n } else {\n $element?.classList.add('expand');\n }\n }\n\n if (this.option.selected) {\n const selectOption = $el.getAttribute('data-option').trim();\n $element.setAttribute('m4-status', selectOption);\n }\n };\n\n function clickHandler() {\n itemEvent(this, true);\n }\n\n this.$container.querySelectorAll('.item').forEach(el => {\n el.removeEventListener('click', clickHandler);\n el.addEventListener('click', clickHandler);\n });\n }\n}\n\n// create template method\nconst createTemplate = m4 => {\n const { type, option, originalDomString } = m4.s;\n\n const $storage = document.createElement('div');\n if (type == 'drag') {\n $storage.innerHTML = configs.multipurpose4.TEMPLATE[type]().trim();\n\n const $wrapper = $storage.querySelector('.drag-container .wrapper');\n $wrapper.insertAdjacentHTML(insert.append, originalDomString);\n }\n if (type == 'collapse') {\n $storage.innerHTML = configs.multipurpose4.TEMPLATE[type](option?.collapse).trim();\n // drag\n const $container = $storage.querySelector('.drag-container .wrapper');\n $container.insertAdjacentHTML(insert.append, originalDomString);\n // collapse\n const $model = $storage.querySelector('.collapse-container .wrapper');\n $model.insertAdjacentHTML(insert.append, originalDomString);\n }\n if (type == 'dropdown') {\n $storage.innerHTML = configs.multipurpose4.TEMPLATE[type](option?.dropdown).trim();\n\n const $dropdown = $storage.querySelector('dropdown-el');\n $dropdown.insertAdjacentHTML(insert.append, originalDomString);\n }\n\n return $storage.children;\n};\n\nclass Multipurpose4 extends HTMLElement {\n constructor() {\n super();\n this.initialize = false;\n this.__events__ = {};\n this.s = {};\n this.s.originalDomString = this.innerHTML.trim().replace(/\\n/g, '');\n this.previousWidth = window.innerWidth;\n }\n static get observedAttributes() {\n return ['m4-type', 'm4-status'];\n }\n attributeChangedCallback(attr, oldVal, newVal) {\n switch (attr) {\n case 'm4-type':\n if (oldVal === null || oldVal === newVal) return;\n this.s.type = newVal;\n this.#distribute();\n break;\n case 'm4-status':\n if (oldVal === newVal) return;\n const type = this.getAttribute('m4-type');\n if (type !== 'drag' && type !== 'collapse') return;\n // 左右拖拉\n this.querySelectorAll('.drag-container .item').forEach(el => {\n el.classList.remove('active');\n });\n this.querySelector(`.drag-container .item[data-option=\"${newVal}\"]`)?.classList.add('active');\n // 展開選項\n if (type === 'collapse') {\n this.querySelectorAll('.collapse-container .item').forEach(el => {\n el.classList.remove('active');\n });\n this.querySelector(`.collapse-container .item[data-option=\"${newVal}\"]`)?.classList.add('active');\n }\n this.constructor.drag?.update(this);\n break;\n }\n }\n connectedCallback() {\n if (this.initialize || this.classList.contains('m4-init')) return;\n this.initialize = true;\n this.#init();\n }\n update() {\n // 斷點設定\n this.#breakpoint();\n }\n #init() {\n let customize = {};\n\n if (!this.hasAttribute('m4-value')) {\n this.setAttribute('m4-value', '');\n }\n\n this.s.type = this.getAttribute('m4-type') ?? configs.multipurpose4.SETTINGS.type;\n if (this.hasAttribute('m4-option')) {\n customize = this.getAttribute('m4-option') ? JSON.parse(this.getAttribute('m4-option')) : {};\n this.removeAttribute('m4-option');\n }\n\n const updateEvent = event => {\n if (event.type === 'resize') {\n if (window.innerWidth === this.previousWidth) return;\n this.previousWidth = window.innerWidth;\n }\n this.update();\n };\n\n // resize event handle\n window.removeEventListener('resize', debounce(updateEvent));\n window.addEventListener('resize', debounce(updateEvent));\n\n this.s.option = {};\n this.s.option.drag = Object.assign({}, configs.multipurpose4.SETTINGS.drag, customize?.drag);\n this.s.option.collapse = Object.assign({}, configs.multipurpose4.SETTINGS.collapse, customize?.collapse);\n this.s.option.dropdown = Object.assign({}, configs.multipurpose4.SETTINGS.dropdown, customize?.dropdown);\n this.s.option.breakpoint = Object.assign({}, configs.multipurpose4.SETTINGS.breakpoint, customize?.breakpoint);\n\n this.#render();\n }\n #render() {\n this.classList.add('m4-init');\n // 斷點設定\n this.#breakpoint();\n }\n // 斷點設定\n #breakpoint() {\n const obj = Object.keys(this.s.option.breakpoint);\n if (!obj.length) {\n this.#distribute();\n return;\n }\n obj\n .map(keys => Number(keys))\n .sort((a, b) => b - a)\n .some(point => {\n if (window.innerWidth >= point) {\n this.s.type = this.s.option.breakpoint[point]?.type;\n this.setAttribute('m4-type', this.s.type);\n this.s.option.drag = Object.assign({}, this.s.option.drag, this.s.option.breakpoint[point]?.drag);\n this.s.option.collapse = Object.assign({}, this.s.option.collapse, this.s.option.breakpoint[point]?.collapse);\n this.s.option.dropdown = Object.assign({}, this.s.option.dropdown, this.s.option.breakpoint[point]?.dropdown);\n }\n this.#distribute();\n return window.innerWidth >= point;\n });\n }\n // check type\n #distribute() {\n const { type } = this.s;\n\n this.innerHTML = '';\n [...createTemplate(this)].forEach(el => {\n this.append(el);\n });\n\n // 新增預設 active class\n const dragContainer = this.querySelector(`.drag-container .item[data-option=\"${this.getAttribute('m4-status')}\"]`);\n const collapseContainer = this.querySelector(`.collapse-container .item[data-option=\"${this.getAttribute('m4-status')}\"]`);\n dragContainer?.classList.add('active');\n collapseContainer?.classList.add('active');\n\n switch (type) {\n case 'drag':\n this.constructor.drag = new dragControl(this);\n break;\n case 'collapse':\n this.constructor.drag = new dragControl(this);\n this.constructor.collapse = new collapseControl(this);\n break;\n case 'dropdown':\n // this.#dropdown();\n break;\n }\n this.constructor.drag?.update(this);\n }\n}\n\n// if (!customElements.get('multipurpose-nav')) {\n// customElements.define('multipurpose-nav', Multipurpose4);\n// }\n\nexport default Multipurpose4;\n"],"names":["init","userAgent","browser","mobile","os","isBrowser4","key","isMobile4","isOs4","logs","Detect4","setCss","target","style","css","isNodeList","el","Article4","options","__privateAdd","_create","_init","_getArticleData","_setStyle","_createVideo4","_createSwiper","isString","isElementExist","__privateMethod","create_fn","elements","parent","getArticleData_fn","createVideo4_fn","SETTINGS","configs.article4","getAllElements","init_fn","_b","_a","setStyle_fn","createSwiper_fn","element","params","Video4","basic_rwd","$id","createUid","$this","$swiperSet","swiper","container","configs.video4","next","prev","pagination","gate","$swiper","SwiperV8","operateStart","operateEnd","operateMove","getTranslateValues","matrix","matrixType","matrixValues","getSlideTotalW","items","slideTotalWidth","item","marginL","marginR","detectPos","self","eventHandler","slideWrap","e","moveDistance","styles","disableLinkDrag","aTag","i","len","CategorySlider","speed","activeItem","prevOffsetLeft","getTargetUrl","type","Share4","_trigger","configs.share4","targets","trigger_fn","utm","copy","baseUrl","shareUrl","insert","$copied","$clipboard","copiedWrapper","tooltipsText","fadeIn","duration","opacity","interval","gap","fading","fadeOut","callback","getBreakpoints","m4","breakpoints","attr","value","getDuration","breakpoint","points","point","a","b","createAnimateWrap","behavior","continual","childDOM","animateItem","cloneElement","cloneAnimateWrap","keyframes","direction","framesObj","animateFrom","animateTo","debounce","func","timer","event","Marquee4","_animation","_event","oldVal","newVal","configs.marquee4","animation_fn","event_fn","autoplay","pauseOnMouseenter","playDelay","animateInit","enterKeyframes","framesArr","averageDuration","updateDuration","startTime","cloneStartTime","addClass","className","removeClass","dragControl","_bindButtonEvent","_bindDragEvent","_scrollerDetect","_buttonDetect","_bindItemEvent","$wrapper","$active","updateEvent","scrollerDetect_fn","buttonDetect_fn","bindDragEvent_fn","_c","bindButtonEvent_fn","_d","_e","_f","bindItemEvent_fn","$button","buttonEvent","fix","$el","isDown","isMoved","startX","scrollLeft","mousedownEvent","mouseleaveEvent","mouseupEvent","mousemoveEvent","walk","reset","$container","$element","itemEvent","selectOption","clickHandler","collapseControl","$drag","collapse","createTemplate","option","originalDomString","$storage","configs.multipurpose4","Multipurpose4","_render","_breakpoint","_distribute","distribute_fn","breakpoint_fn","customize","render_fn","obj","keys","dragContainer","collapseContainer"],"mappings":"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"}
|