{"version":3,"sources":["src/js/modules/_fn.js","src/js/all.js"],"names":["on","target","event","func","option","window","addEventListener","opt","attachEvent","throttle","wait","mustRun","timeout","startTime","Date","args","arguments","curTime","undefined","clearTimeout","apply","this","setTimeout","document","cookieMaxAge","cookieNotice","setName","userAgent","navigator","indexOf","match","location","href","Element","prototype","remove","parentNode","removeChild","$","foundation","html","documentElement","ww","innerWidth","wh","innerHeight","getWinSet","length","pageYOffset","scrollTop","clientTop","getScrollTop","deviceDetect","test","classList","add","browserIs","ua","browser","isChrome","isFirefox","isSafari","isIE","isEdge","key","split","toLowerCase","is","aniSec","querySelectorAll","scrollTriggerAniThrottle","scrollTriggerAni","i","el","rect","getBoundingClientRect","offsetHeight","bottom","right","top","clientHeight","left","clientWidth","Array","filter","call","ani","contains","lazyloadTimer","buildLazyLoad","LazyLoad","loader","querySelector","doc","header","footer","headerClassScroll","headerScrollHandler","windowScrollTop","offsetTop","addClass","removeClass","mobileFullHeight","hasClass","vh","vw","style","setProperty","stop","animate","parent","e","preventDefault","$el","searchObj","find","type","attr","stopPropagation","parents","$input","val","openModalId","videoPopupPlayer","currentItem","youTubeId","url","getYoutubeId","videoId","youTubeIframeString","append","ready","closest","cookieNoticeBtn","name","nameEQ","ca","cookie","c","trim","replace","getCookie","getAttribute","parseInt","value","days","expires","date","setTime","getTime","toUTCString","setCookie"],"mappings":"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","file":"../all.min.js","sourcesContent":["/* ---------------------------------------- [START] Window EventListener */\nexport function on(target, event, func, option) {\n\ttarget = target || window;\n\tif (window.addEventListener) {\n\t\tvar opt = option || false;\n\t\ttarget.addEventListener(event, func, opt);\n\t} else {\n\t\ttarget.attachEvent('on' + event, func);\n\t}\n}\n\nexport function off(target, event, func, option) {\n\ttarget = target || window;\n\tif (window.addEventListener) {\n\t\tvar opt = option || false;\n\t\ttarget.addEventListener(event, func, opt);\n\t} else {\n\t\ttarget.attachEvent('on' + event, func);\n\t}\n}\n/* ---------------------------------------- [END] Window EventListener */\n\n/* ---------------------------------------- [START] 簡單的節流函數 */\n// https://www.cnblogs.com/coco1s/p/5499469.html\nexport function throttle(func, wait, mustRun) {\n\tvar timeout;\n\tvar startTime = new Date();\n\n\treturn function () {\n\t\tvar context = this;\n\t\tvar args = arguments;\n\t\tvar curTime = new Date();\n\n\t\tif (timeout !== undefined) {\n\t\t\tclearTimeout(timeout);\n\t\t}\n\t\t// 如果達到了規定的觸發時間間隔,觸發 handler\n\t\tif (curTime - startTime >= mustRun) {\n\t\t\tfunc.apply(context, args);\n\t\t\tstartTime = curTime;\n\t\t\t// 沒達到觸發間隔,重新設定定時器\n\t\t} else {\n\t\t\ttimeout = setTimeout(func, wait);\n\t\t}\n\t};\n}\n/* ---------------------------------------- [END] 簡單的節流函數 */\n\n/* ---------------------------------------- [START] isInViewport */\nexport function isInViewport(el) {\n\tvar rect = el.getBoundingClientRect();\n\n\tvar isVisible = el.offsetHeight !== 0;\n\n\treturn (\n\t\tisVisible &&\n\t\trect.bottom >= 0 &&\n\t\trect.right >= 0 &&\n\t\trect.top <= (window.innerHeight || document.documentElement.clientHeight) &&\n\t\trect.left <= (window.innerWidth || document.documentElement.clientWidth)\n\t);\n}\n/* ---------------------------------------- [END] isInViewport */\n\n/* ---------------------------------------- [START] 從 String 取得 HTML Element */\n// https://stackoverflow.com/a/494348/11240898\nexport function createElementFromHTML(htmlString) {\n\tvar div = document.createElement('div');\n\tdiv.innerHTML = htmlString.trim();\n\n\t// Change this to div.childNodes to support multiple top-level nodes\n\treturn div.firstChild;\n}\n/* ---------------------------------------- [END] 從 String 取得 HTML Element */\n\n/* ---------------------------------------- [START] Disable/Enable Scroll */\nexport function docDisableScroll() {\n\tvar html = document.documentElement;\n\tvar top = (window.pageYOffset || html.scrollTop) - (html.clientTop || 0);\n\twindow.scrollTopCache = top;\n\thtml.style.cssText += `position: fixed; width: 100%; overflow-y: hidden; top:-${top}px`;\n}\nexport function docEnableScroll() {\n\tvar html = document.documentElement;\n\thtml.style.cssText = '';\n\twindow.scrollTo(0, window.scrollTopCache);\n\twindow.scrollTopCache = 0;\n}\n/* ---------------------------------------- [END] Disable/Enable Scroll */\n\n/* ---------------------------------------- [START] 取得正確的資源位置 */\n// https://stackoverflow.com/a/26023176/11240898\n/**\n * Current Script Path | 取得正確的資源位置\n *\n * Get the dir path to the currently executing script file\n * which is always the last one in the scripts array with\n * an [src] attr\n */\nexport function currentScriptPath() {\n\tvar scripts = document.querySelectorAll('script[src]');\n\tvar currentScript = scripts[scripts.length - 1].src;\n\tvar currentScriptChunks = currentScript.split('/');\n\tvar currentScriptFile = currentScriptChunks[currentScriptChunks.length - 1];\n\n\treturn currentScript.replace(currentScriptFile, '').split('js/')[0];\n}\n/* ---------------------------------------- [END] 取得正確的資源位置 */\n","/*global EaseScroll, lazyload*/\n\n'use strict';\n\nimport { on, off, throttle, isInViewport } from './modules/_fn';\n\n/* ---------------------------------------- [START] IE Global Setting */\n// 舊IE提醒\nconst userAgent = window.navigator.userAgent;\nif (\n\tuserAgent.indexOf('MSIE 7.0') > 0 ||\n\tuserAgent.indexOf('MSIE 8.0') > 0 ||\n\tuserAgent.indexOf('MSIE 9.0') > 0 ||\n\tuserAgent.indexOf('MSIE 10.0') > 0 ||\n\t!!userAgent.match(/Trident.*rv\\:11\\./) // IE11\n) {\n\tlocation.href = 'browser.html';\n}\n\n/* 防止IE沒有 JS element.remove() */\n/* Create Element.remove() function if not exist */\nif (!('remove' in Element.prototype)) {\n\tElement.prototype.remove = function () {\n\t\tif (this.parentNode) {\n\t\t\tthis.parentNode.removeChild(this);\n\t\t}\n\t};\n}\n/* ---------------------------------------- [END] IE Global Setting */\n(function (window, document) {\n\ton(window, 'load', function () {\n\t\t// Start\n\t\t$(document).foundation();\n\t\t// $('body').addClass('is-loaded');\n\t});\n\n\t/* ---------------------------------------- [START] Windows Setting */\n\tconst html = document.documentElement;\n\tlet ww = window.innerWidth;\n\tlet wh = window.innerHeight;\n\tlet ws = 0;\n\tfunction getScrollTop(target = window) {\n\t\treturn (target.pageYOffset || html.scrollTop) - (html.clientTop || 0);\n\t}\n\tfunction getWinSet() {\n\t\tww = window.innerWidth;\n\t\twh = window.innerHeight;\n\t\tws = getScrollTop();\n\t}\n\ton(window, 'load', getWinSet);\n\ton(window, 'resize', throttle(getWinSet, 50, 100));\n\t/* ---------------------------------------- [END] Windows Setting */\n\n\t/* ---------------------------------------- [START] 取得裝置判斷 */\n\t// 取得裝置判斷\n\tlet isMobile = false;\n\tlet isTablet = false;\n\tlet isPhone = false;\n\n\tconst deviceDetect = function () {\n\t\t// IsPhone\n\t\tisPhone = ww <= 640;\n\n\t\t// IsMobile\n\t\t// 防止測試時一直用開發者工具Resize出現Bug\n\t\tisMobile = /Android|webOS|iPhone|iPad|iPod|BlackBerry|IEMobile|Opera Mini/i.test(navigator.userAgent);\n\t\tif (isMobile) html.classList.add('is-mobile');\n\t\telse html.classList.remove('is-mobile');\n\n\t\t// IsTablet\n\t\tif (navigator.userAgent.match(/Android/i)) {\n\t\t\tif (!navigator.userAgent.match(/Mobile/i)) {\n\t\t\t\tisTablet = true;\n\t\t\t}\n\t\t} else if (navigator.userAgent.match(/BlackBerry|iPad|Opera Mini|IEMobile/i)) {\n\t\t\tisTablet = true;\n\t\t}\n\t};\n\n\tdeviceDetect();\n\ton(window, 'resize', throttle(deviceDetect, 50, 100));\n\t/* ---------------------------------------- [END] 取得裝置判斷 */\n\n\t/* ---------------------------------------- [START] 判斷browser */\n\tvar ua = navigator.userAgent;\n\tvar browser = {\n\t\tisChrome: /chrome/i.test(ua),\n\t\tisFirefox: /firefox/i.test(ua),\n\t\tisSafari: /safari/i.test(ua),\n\t\tisIE: /msie/i.test(ua) || /trident/i.test(ua),\n\t\tisEdge: /edge/i.test(ua),\n\t};\n\n\t// 修正數值browser\n\tif (browser.isChrome) browser.isSafari = false;\n\tif (browser.isEdge) {\n\t\tbrowser.isChrome = false;\n\t\tbrowser.isSafari = false;\n\t}\n\n\tvar browserIs;\n\tfor (var key in browser) {\n\t\tif (browser[key]) {\n\t\t\tbrowserIs = key.split('is')[1];\n\t\t\t// 增加Class\n\t\t\tdocument.documentElement.classList.add(browserIs.toLowerCase());\n\t\t\tdocument.documentElement.browser = browserIs;\n\t\t\tbreak;\n\t\t}\n\t}\n\tbrowser.is = browserIs;\n\n\t// ----------------------------\n\t// 判斷 裝置\n\t// iOS\n\tvar isiOS = ua.toLowerCase().match(/(iphone|ipod|ipad)/);\n\tisiOS && html.classList.add('ios');\n\t/* ---------------------------------------- [END] 判斷browser */\n\n\t/* ----------------------------------- [START] Loader 移除 */\n\t// var loaderRemove = function () {\n\t// \tvar loader = document.querySelector('#loader');\n\n\t// \tloader.classList.add('loaded');\n\t// \tsetTimeout(function () {\n\t// \t\tloader.remove();\n\t// \t}, 2000);\n\t// };\n\t// window.addEventListener('load', loaderRemove);\n\t/* ----------------------------------- [END] Loader 移除 */\n\n\t/* ---------------------------------------- [START] Ease scroll */\n\tvar buildEaseScroll = function () {\n\t\tif (window.EaseScroll === undefined) return false;\n\t\tconst es = new EaseScroll({\n\t\t\tframeRate: 60,\n\t\t\tanimationTime: 1000,\n\t\t\tstepSize: 100,\n\t\t\tpulseAlgorithm: 1,\n\t\t\tpulseScale: 6,\n\t\t\tpulseNormalize: 1,\n\t\t\taccelerationDelta: 20,\n\t\t\taccelerationMax: 1,\n\t\t\tkeyboardSupport: true,\n\t\t\tarrowScroll: 30,\n\t\t\ttouchpadSupport: true,\n\t\t\tfixedBackground: true,\n\t\t\t// disabledClass: 'modal-open',\n\n\t\t\t/* Browser Setting Control */\n\t\t\tbrowser: {\n\t\t\t\tChrome: true,\n\t\t\t\tFireFox: false,\n\t\t\t\tSafari: true,\n\t\t\t\tIE: true,\n\t\t\t\tEdge: true,\n\t\t\t},\n\t\t});\n\t};\n\t// on(window, 'load', buildEaseScroll);\n\t/* ---------------------------------------- [END] Ease scroll */\n\n\t/* ---------------------------------------- [START] ScrollTriggerAni */\n\t// 有滑動到該區增加動態者增加class \"js-ani\" , 滑動到該區增加class \"is-animated\"\n\tlet aniSec = document.querySelectorAll('.js-ani');\n\tconst scrollTriggerAniThrottle = throttle(scrollTriggerAni, 200, 500); // 節流作用\n\n\tfunction scrollTriggerAni() {\n\t\tfor (var i = 0; i < aniSec.length; i++) {\n\t\t\tif (isInViewport(aniSec[i])) {\n\t\t\t\taniSec[i].classList.add('is-animated');\n\t\t\t}\n\t\t}\n\n\t\tcleanTrigger();\n\n\t\t/* If load all of the item, stop Listener */\n\t\tif (aniSec.length === 0) {\n\t\t\twindow.addEventListener('scroll', scrollTriggerAniThrottle);\n\t\t}\n\t}\n\n\tfunction cleanTrigger() {\n\t\taniSec = Array.prototype.filter.call(aniSec, function (ani) {\n\t\t\treturn !ani.classList.contains('is-animated');\n\t\t});\n\t}\n\n\tfunction isInViewport(el) {\n\t\tconst rect = el.getBoundingClientRect();\n\t\tconst isVisible = el.offsetHeight !== 0;\n\n\t\treturn (\n\t\t\tisVisible &&\n\t\t\trect.bottom >= 0 &&\n\t\t\trect.right >= 0 &&\n\t\t\trect.top + 100 <= (window.innerHeight || document.documentElement.clientHeight) &&\n\t\t\trect.left <= (window.innerWidth || document.documentElement.clientWidth)\n\t\t);\n\t}\n\n\ton(window, 'load', scrollTriggerAni);\n\ton(window, 'scroll', scrollTriggerAniThrottle);\n\t/* ---------------------------------------- [END] ScrollTriggerAni */\n\n\t/* ---------------------------------------- [START] Lazyload */\n\t/*\n\t * 使用:https://github.com/verlok/vanilla-lazyload\n\t * 尋找頁面上的 .lazy 為執行 Lazy Load 物件\n\t */\n\tvar lazyloadTimer = 0;\n\tfunction buildLazyLoad() {\n\t\tif (lazyloadTimer < 5 && window.LazyLoad === undefined) {\n\t\t\treturn setTimeout(function () {\n\t\t\t\tlazyloadTimer++;\n\t\t\t\tbuildLazyLoad();\n\t\t\t}, 500);\n\t\t}\n\n\t\tvar lazyLoadInstance = new LazyLoad({\n\t\t\t// Your custom settings go here\n\t\t});\n\t}\n\ton(window, 'load', buildLazyLoad);\n\t/* ---------------------------------------- [END] Lazyload */\n\n\t/* ----------------------------------- [START] Loader 移除 */\n\tvar loaderRemove = function () {\n\t\tvar loader = document.querySelector('#loader');\n\n\t\tif (loader) {\n\t\t\tsetTimeout(function () {\n\t\t\t\tloader.classList.add('loaded');\n\t\t\t}, 50);\n\n\t\t\tsetTimeout(function () {\n\t\t\t\tloader.remove();\n\t\t\t}, 1000);\n\t\t}\n\t};\n\twindow.addEventListener('load', loaderRemove);\n\t/* ----------------------------------- [END] Loader 移除 */\n\n\t/* ---------------------------------------- [START] 選單下滑更改樣式 */\n\tconst doc = document.documentElement;\n\tconst header = document.querySelector('#hd');\n\tconst footer = document.querySelector('#ft');\n\tconst headerClassScroll = 'is-collapse';\n\n\tfunction headerScrollHandler() {\n\t\tconst windowScrollTop = (window.pageYOffset || doc.scrollTop) - (doc.clientTop || 0);\n\t\tif (windowScrollTop >= 50) {\n\t\t\theader.classList.add(headerClassScroll);\n\t\t} else {\n\t\t\theader.classList.remove(headerClassScroll);\n\t\t}\n\n\t\tif (windowScrollTop >= 50 && windowScrollTop + wh <= footer.offsetTop) {\n\t\t\t$('.js-goto-fixed').addClass('is-show');\n\t\t} else {\n\t\t\t$('.js-goto-fixed').removeClass('is-show');\n\t\t}\n\t}\n\ton(window, 'scroll', headerScrollHandler);\n\ton(window, 'load', headerScrollHandler);\n\n\t// goto top\n\t$(document).on('click', '.js-goto-fixed', function () {\n\t\t$('html, body').stop().animate({ scrollTop: 0 });\n\t});\n\t/* ---------------------------------------- [END] 選單下滑更改樣式 */\n\n\t/* ---------------------------------------- [START] --vh */\n\tfunction mobileFullHeight() {\n\t\tvar isIE = $('html').hasClass('ie');\n\t\tif (!isIE) {\n\t\t\t// 取得視窗高度,再乘以1%得到1vh的值\n\t\t\tvar vh = window.innerHeight * 0.01;\n\t\t\tvar vw = window.innerWidth * 0.01;\n\t\t\t// 把--vh的值設置到文件的根元素中\n\t\t\tdocument.documentElement.style.setProperty('--vh', vh + 'px');\n\t\t\tdocument.documentElement.style.setProperty('--vw', vw + 'px');\n\t\t}\n\t}\n\n\ton(window, 'load', mobileFullHeight);\n\ton(window, 'resize', mobileFullHeight);\n\t/* ---------------------------------------- [END] --vh */\n\n\t/* ---------------------------------------- [START] header選單 */\n\tfunction checkIsPc() {\n\t\tif (ww > 1024) {\n\t\t\t// stopHtmlScrolling(false);\n\n\t\t\t$('#hd').removeClass('is-open');\n\t\t\t$('.js-hd-expand').parent().removeClass('is-open');\n\t\t}\n\t}\n\n\ton(window, 'resize', checkIsPc);\n\n\tfunction stopHtmlScrolling(boolean) {\n\t\tif (boolean) {\n\t\t\tdocument.querySelector('html').classList.add('stop_scrolling');\n\t\t} else {\n\t\t\tdocument.querySelector('html').classList.remove('stop_scrolling');\n\t\t}\n\t}\n\n\t// 漢堡選單\n\t$(document).on('click', '.js-toggle-hamburger', function () {\n\t\tif ($('#hd').hasClass('is-open')) {\n\t\t\t$('#hd').removeClass('is-open');\n\t\t\t// stopHtmlScrolling(false);\n\n\t\t\t$('.hd_main_block').scrollTop(0);\n\n\t\t\tif ($('.js-hd-expand')) {\n\t\t\t\t$('.js-hd-expand').parent().removeClass('is-open');\n\t\t\t}\n\t\t} else {\n\t\t\t$('#hd').addClass('is-open');\n\t\t\t// stopHtmlScrolling(true);\n\t\t}\n\t});\n\n\t// main選單手機版\n\t$(document).on('click', '.js-hd-expand', function (e) {\n\t\te.preventDefault();\n\n\t\tconst $el = $(this).parent();\n\t\tconst elClass = '.hd_main_item';\n\n\t\tif (ww < 1024) {\n\t\t\tif ($el.hasClass('is-open')) {\n\t\t\t\t$el.removeClass('is-open');\n\t\t\t} else {\n\t\t\t\t$(elClass).removeClass('is-open');\n\t\t\t\t$el.addClass('is-open');\n\t\t\t}\n\t\t}\n\t});\n\n\t// Search Ctrl\n\tlet searchObj = {};\n\n\t$(document).on('click', '.js-search-box', function () {\n\t\tconst $el = $(this).find('.search-form');\n\t\tconst type = $(this).attr('data-search');\n\n\t\tif (!searchObj[type]) {\n\t\t\tsearchObj[type] = false;\n\t\t}\n\n\t\tif (searchObj[type]) return false;\n\t\tsearchObj[type] = true;\n\t\t$el.addClass('is-open');\n\t});\n\n\t$(document).on('click', '.js-search-close', function (e) {\n\t\te.stopPropagation();\n\t\tconst $el = $(this).parents('.search-form');\n\t\tconst $input = $el.find('.search_input');\n\t\tconst type = $(this).parents('.search-box').attr('data-search');\n\n\t\tif (!searchObj[type]) return false;\n\t\tsearchObj[type] = false;\n\t\t$el.removeClass('is-open');\n\t\t$input.val('');\n\t});\n\t/* ---------------------------------------- [END] header選單 */\n\n\t/* ---------------------------------------- [START] footer選單 */\n\t// main選單手機版\n\t$(document).on('click', '.js-ft-expand', function () {\n\t\tconst $el = $(this).parent();\n\t\tconst elClass = '.ft_top_item';\n\n\t\tif (ww < 768) {\n\t\t\tif ($el.hasClass('is-open')) {\n\t\t\t\t$el.removeClass('is-open');\n\t\t\t} else {\n\t\t\t\t$(elClass).removeClass('is-open');\n\t\t\t\t$el.addClass('is-open');\n\t\t\t}\n\t\t}\n\t});\n\t/* ---------------------------------------- [END] footer選單 */\n\n\t/* ---------------------------------------- [START] 示意開啟 modal */\n\tlet openModalId = '';\n\n\t$(document).on('click', '[data-modal-open]', function () {\n\t\topenModalId = $(this).attr('data-modal-open');\n\n\t\t$('#' + openModalId).addClass('is-active');\n\t\t// docDisableScroll();\n\t});\n\n\t// 示意關閉 modal\n\t$(document).on('click', '[data-modal-close]', function () {\n\t\t$('#' + openModalId).removeClass('is-active');\n\t\t// docEnableScroll();\n\n\t\topenModalId = '';\n\n\t\tif ($('#video-popup').length) {\n\t\t\t$('#video-popup').find('iframe').remove();\n\t\t}\n\t});\n\t/* ---------------------------------------- [END] 示意開啟 modal */\n\n\t/* ---------------------------------------- [START] 影片彈窗 */\n\n\tvar youTubeSetting = '';\n\tvar videoIframe = null;\n\n\t// 輪播的需要綁定複製的項目\n\tvar videoBox = $('.video-box');\n\tif (videoBox.length === 0) return false;\n\n\tvar videoPopup = $('#video-popup');\n\tvar videoPopupPlayer = videoPopup.find('.video-player');\n\n\t// Click and load iframe\n\t$(document).on('click', '.video-box', function () {\n\t\tvar currentItem = $(this);\n\t\tvar youTubeUrl = currentItem.attr('data-video');\n\t\tvar youTubeId = getYoutubeId(youTubeUrl);\n\n\t\t// 寫入Properties\n\t\tthis.videoId = youTubeId;\n\n\t\tvar videoImg = currentItem.find('.video-box__preview');\n\t\tvar videoPlayPopup = currentItem.find('[data-video-popup]');\n\n\t\tvar videoIframeSrc = 'https://www.youtube.com/embed/' + youTubeId + youTubeSetting;\n\n\t\tvar youTubeIframeString =\n\t\t\t'';\n\n\t\tvideoPopupPlayer.append(youTubeIframeString);\n\t});\n\n\t// 讀取網址\n\t// get-youtube-info.js: https://gist.github.com/ramonvictor/5629626\n\tfunction getYoutubeId(url) {\n\t\tvar regExp = /^.*((youtu.be\\/)|(v\\/)|(\\/u\\/\\w\\/)|(embed\\/)|(watch\\?))\\??v?=?([^#\\&\\?]*).*/;\n\t\tvar match = url.match(regExp);\n\t\tif (match && match[7].length == 11) {\n\t\t\treturn match[7];\n\t\t}\n\t\treturn false;\n\t}\n\t/* ---------------------------------------- [END] 影片彈窗 */\n\n\n})(window, document);\n\n// JQuery init\n$(document).ready(function () {\n\t// navbar 導覽選單\n\t$('.navbar .navbar-link').on('click', function () {\n\t\t$(this).closest('.navbar-list').find('.navbar-link').removeClass('is-active');\n\t\t$(this).addClass('is-active'); // 新增\n\t});\n});\n\n/* ---------------------------------------- [START] cookie */\n// data-max-age:幾天內不會出現,預設180天\n(function (window, document) {\n\tvar cookieNotice = document.querySelector('#cookie-notice');\n\tvar cookieMaxAge; // 紀錄時效\n\tvar setName = 'cookieNoticeHide';\n\n\tfunction checkCookie() {\n\t\t/* 頁面上沒有 Cookie 物件 => 不執行 */\n\t\tif (!cookieNotice) {\n\t\t\treturn false;\n\t\t}\n\n\t\tvar cookieNoticeBtn = cookieNotice.querySelector('button');\n\t\t// var cookieNoticeBtnClose = cookieNotice.querySelector('[data-close]');\n\n\t\t/* 確認是否已經有確認Cookie */\n\t\tif (getCookie(setName) === 'true') {\n\t\t\t/* 已有確認 */\n\t\t\tcookieNotice.remove();\n\t\t} else {\n\t\t\t/* 未確認 */\n\t\t\tcookieNotice.classList.add('is-show');\n\n\t\t\t/* 取得過期時間設定 */\n\t\t\tcookieMaxAge = cookieNotice.getAttribute('data-max-age') || 180;\n\t\t\tif (typeof cookieMaxAge === 'string') {\n\t\t\t\tcookieMaxAge = parseInt(cookieMaxAge);\n\t\t\t}\n\t\t}\n\n\t\tvar closeHandler = function () {\n\t\t\tcookieNotice.classList.remove('is-show');\n\t\t\tsetTimeout(function () {\n\t\t\t\tcookieNotice.remove();\n\t\t\t}, 1000);\n\t\t}\n\n\t\t/* 按下「確認」功能 */\n\t\tcookieNoticeBtn.addEventListener('click', function () {\n\t\t\tsetCookie(setName, true, cookieMaxAge); // 時效設定單位:天\n\t\t\tcloseHandler();\n\t\t});\n\n\t\t// /* 按下「有連結的按鈕」功能 */\n\t\t// if (cookieNoticeBtnAnchor) {\n\t\t// \tcookieNoticeBtnAnchor.addEventListener('click', function() {\n\t\t// \t\tcloseHandler();\n\t\t// \t});\n\t\t// }\n\n\t\t/* 按下「關閉」功能 */\n\t\t// if (cookieNoticeBtnClose) {\n\t\t// \tcookieNoticeBtnClose.addEventListener('click', function() {\n\t\t// \t\tcloseHandler();\n\n\t\t// \t\t// 2022/07/27 客戶希望增加設定,按下叉後,永遠不顯示\n\t\t// \t\tlocalStorage.setItem('cookieClosed', true);\n\t\t// \t});\n\t\t// }\n\t}\n\n\twindow.addEventListener('load', checkCookie);\n\n\t/* ------------------------------------------------------- Tool */\n\t/* https://stackoverflow.com/a/24103596/11240898 */\n\tfunction setCookie(name, value, days) {\n\t\tvar expires = '';\n\t\tif (days) {\n\t\t\tvar date = new Date();\n\t\t\tdate.setTime(date.getTime() + days * 24 * 60 * 60 * 1000);\n\t\t\texpires = '; expires=' + date.toUTCString();\n\t\t}\n\t\tdocument.cookie = name + '=' + (value || '') + expires + '; path=/';\n\t}\n\n\tfunction getCookie(name) {\n\t\tvar nameEQ = name + '=';\n\t\tvar ca = document.cookie.split(';');\n\t\tfor (var i = 0; i < ca.length; i++) {\n\t\t\tvar c = ca[i].trim();\n\t\t\tif (c.indexOf(nameEQ) === 0) {\n\t\t\t\treturn c.replace(nameEQ, '');\n\t\t\t}\n\t\t}\n\t\treturn null;\n\t}\n})(window, document);\n/* ---------------------------------------- [END] cookie */"],"sourceRoot":"../../src/"}