{"version":3,"sources":["js/all.js"],"names":["spreadsheetId","zh","en","vn","initClient","gapi","client","init","then","startBuild","isMobile","mql","window","matchMedia","matches","load","resizeId","device","myRefresh","location","reload","addEventListener","clearTimeout","setTimeout","flag","img","video","imgVideo","hr","opImg","opVideo","opImgVideo","data","currentData","currentCategory","currentPage","prevPageLanguage","document","referrer","substring","sheets","spreadsheets","values","get","range","response","result","shift","reason","console","error","message","list","requestArr","Promise","forEach","item","index","request","push","ads","el","ad","typeName","safe","link","material","note","trim","memo","demoVideo","galleryLink","adType","split","adDevice","switchGroup","name","length","enName","vnName","all","myOnload","querySelector","defaultLang","iPhoneUseChrome","setAttribute","deleteEnEmptyInfo","removeAttribute","deleteZhEmptyInfo","buildCategory","defaultCategory","buildList","buildDirection","mobileBtn","specBtn","designatedPage","findIndex","isSameGroup","isSameType","updatePage","toggleFullScreen","href","lang","getHrefLangString","undefined","toLowerCase","changeCategory","getHrefFormatString","currentIndex","match","replace","getHrefAdTypeString","join","container","style","gridTemplateAreas","display","buildListMenu","body","listMenu","view","spec","specContent","getMobileOperatingSystem","isChrome","gridTemplateRows","height","top","maxHeight","navigator","userAgent","vendor","opera","test","MSStream","num","updateCategory","deleteEmptyCategory","filter","category","createElement","p","src","innerText","querySelectorAll","fontWeight","appendChild","backgroundColor","pointerEvents","format","recordFormat","formatName","history","replaceState","checked","remove","optionsLength","insertBefore","firstChild","prev","next","isSameDevice","prevOne","parseInt","notCouple","nextOne","toCategory","toList","nextBtn","e","btn","classList","add","changeLanguage","changeShow","directionStyle","displayViewDemoBtn","displayAlertCard","buildSpec","recordType","type","innerHTML","isFirst","isLast","opacity","cursor","viewDemoBtn","alertCardText","width","guideBtn","closeBtn","disableClick","specLang","fontSize","includes","doc","docEl","documentElement","requestFullScreen","requestFullscreen","mozRequestFullScreen","webkitRequestFullScreen","msRequestFullscreen","cancelFullScreen","exitFullscreen","mozCancelFullScreen","webkitExitFullscreen","msExitFullscreen","fullscreenElement","mozFullScreenElement","webkitFullscreenElement","msFullscreenElement","call"],"mappings":"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","file":"all.672130bc.js","sourceRoot":"../src","sourcesContent":["const spreadsheetId = '1ijnYlWjwFvw5-Qtfo1UCMEdaAoD-7Ho_bdDSVtDJYJo';\nconst zh = 0, en = 1, vn = 2;\n\n\ngapi.load('client',initClient);\n\n//init gapi\nfunction initClient() {\n let GoogleAuth; // Google Auth object.\n gapi.client.init({\n 'apiKey': 'AIzaSyDEt_y6KrtFoa876tecRNQFnLgrdsDaPKE',\n // 'clientId': '217010907616-ep4p90qd18c048k0boa9jfq624opctig.apps.googleusercontent.com',\n 'scope': 'https://www.googleapis.com/auth/spreadsheets',\n 'discoveryDocs': ['https://sheets.googleapis.com/$discovery/rest?version=v4']\n }).then(function () {\n // GoogleAuth = gapi.auth2.getAuthInstance();\n // Listen for sign-in state changes.\n // GoogleAuth.isSignedIn.listen((isSignedIn) => isSignedIn ? startBuild() : GoogleAuth.signIn());\n // GoogleAuth.isSignedIn.get() ? startBuild() : GoogleAuth.signIn();\n startBuild();\n });\n}\n\n// watch num\n// if u need debug, open it\n// document.addEventListener(\"click\", updateNum);\n// function updateNum() {\n// document.querySelector(\".currentCategory\").innerText = currentCategory;\n// document.querySelector(\".currentPage\").innerText = currentPage;\n// }\n\n// check breakpoint\nfunction isMobile() {\n let mql = window.matchMedia('(max-width: 768px), (max-width: 480px)');\n return mql.matches;\n}\n\nvar resizeId, device = isMobile();\nwindow.addEventListener('resize', function() {\n clearTimeout(resizeId);\n resizeId = setTimeout(myRefresh, 200);\n});\n\n// try to use this fix the mess, caz we need to set gridTemplateAreas style when category click\nfunction myRefresh() {\n if (device != isMobile()) {\n window.location.reload();\n }\n}\n\nlet data = [], currentData = [];\nlet currentCategory = 0, currentPage = 0;\nlet prevPageLanguage = document.referrer.substring(22, 24);\nwindow.data = data;\n// get spreadsheet's info\nfunction startBuild() {\n let request = gapi.client.sheets.spreadsheets.values.get({spreadsheetId: spreadsheetId, range: '版型家族'});\n request.then(function(response) {\n response.result.values.shift();\n return response.result.values;\n }, function(reason) {\n console.error('error: ' + reason.result.error.message);\n }).then(function(list) {\n let requestArr = [];\n list.forEach((item, index) => {\n let request = gapi.client.sheets.spreadsheets.values.get({spreadsheetId: spreadsheetId, range: item[0]});\n requestArr.push(request.then(function(response) {\n let ads = [];\n response.result.values.forEach((el) => {\n let ad = {\n zh: {\n typeName: el[0],\n device: el[4],\n safe: el[5],\n link: el[6],\n material: el[7],\n note: (el[8] || \"\").trim(),\n memo: (el[9] || \"\").trim(),\n demoVideo: el[10],\n galleryLink: (el[11] || \"\").trim(),\n },\n en: {\n typeName: el[13],\n device: el[14],\n safe: el[15],\n link: el[16],\n material: el[17],\n note: (el[18] || \"\").trim(),\n memo: (el[19] || \"\").trim(),\n demoVideo: el[20],\n galleryLink: (el[21] || \"\").trim()\n },\n vn: {\n typeName: el[13],\n device: el[23],\n safe: el[24],\n link: el[25],\n material: el[26],\n note: (el[27] || \"\").trim(),\n memo: (el[28] || \"\").trim(),\n demoVideo: el[20],\n galleryLink: (el[21] || \"\").trim()\n },\n adType: el[1].split(\".\")[1],\n adDevice: el[2],\n switchGroup: el[3]\n };\n ads.push(ad);\n });\n let name = response.result.range.split(\"!\")[0];\n name = name.substring(1, name.length - 1);\n img = item[1];\n enName = item[3];\n vnName = item[4];\n ads.shift();\n data[index] = {name: name, img: img, ads: ads, enName: enName, vnName: vnName};\n }));\n });\n return Promise.all(requestArr);\n }).then(myOnload);\n}\n\nlet flag, img, video, imgVideo, hr, opImg, opVideo, opImgVideo;\nfunction myOnload() {\n // initial list menu option\n flag = document.querySelector('#flag');\n img = document.querySelector('#img');\n video = document.querySelector('#video');\n imgVideo = document.querySelector('#img-video');\n hr = document.querySelector('.select > ul.input-info > hr');\n opImg = document.querySelector('.img');\n opVideo = document.querySelector('.video');\n opImgVideo = document.querySelector('.img-video');\n\n // check browser status\n defaultLang();\n isMobile();\n iPhoneUseChrome();\n // en & vn default font family\n if (defaultLang() != \"zh\") {\n document.querySelector(\"body\").setAttribute(\"class\", \"except-zh\");\n deleteEnEmptyInfo();\n } else {\n document.querySelector(\"body\").removeAttribute(\"except-zh\");\n deleteZhEmptyInfo();\n }\n\n // build screen\n buildCategory();\n defaultCategory();\n buildList();\n buildDirection();\n mobileBtn();\n specBtn();\n designatedPage();\n let switchBtn = document.querySelector('#switch > .switch-btn > input[type=checkbox]');\n switchBtn.addEventListener('click', function() {\n currentPage = currentData.findIndex((el, index) => {\n let isSameGroup = el.switchGroup == currentData[currentPage].switchGroup;\n let isSameType = el.adType == currentData[currentPage].adType;\n return isSameGroup && isSameType && index != currentPage;\n });\n updatePage();\n });\n // toggleFullScreenBtn (Android Only)\n document.querySelector(\".fullscreen\").addEventListener('click', toggleFullScreen);\n}\n\nlet href = location.href;\n// as a token, to change website's language\nfunction defaultLang() {\n let lang = getHrefLangString(href);\n if (lang == \"zh\") {\n return \"zh\";\n }\n if (lang == \"vn\") {\n return \"vn\";\n }\n return \"en\";\n}\n\n// to get language string from url parameter\nfunction getHrefLangString() {\n if (href.split('?')[1] != undefined) {\n return href.split('?')[1].split(\"&\")[0].toLowerCase();\n }\n return \"en\";\n}\n\n// to choose target category\nfunction defaultCategory() {\n let category = getHrefFormatString();\n changeCategory(category);\n}\n\n// get format string from url parameter\nfunction getHrefFormatString() {\n let currentIndex = 0;\n if(href.match(\"format\")) {\n data.forEach((el, index) => {\n if (el.enName.replace(/\\s*/g, \"\").toLowerCase() == href.split('?')[1].split(\"=\")[1].split(\"&\")[0].toLowerCase()) {\n currentIndex = index;\n }\n });\n }\n return currentIndex;\n}\n\n// get AdType string from url parameter\nfunction getHrefAdTypeString() {\n let currentIndex = 0;\n if (href.match(\"type\")) {\n currentData.forEach((el, index) => {\n let type = href.split('?')[1].split(\"=\")[2].toLowerCase();\n let targetType = el.en.typeName.replace(/\\s*/g, \"\").split(\"\").join(\"\").split(\"\").join(\"\").toLowerCase();\n if (type == targetType) {\n currentIndex = index;\n }\n });\n }\n return currentIndex;\n}\n\nfunction designatedPage() {\n let container = document.querySelector(\"#container\");\n if(isMobile() == true && href.split('?')[1] != undefined && href.match(\"format\")) {\n document.querySelector(\"body\").style.gridTemplateAreas = \"'main'\";\n container.style.display = \"grid\";\n if (href.match(\"type\")) {\n container.style.gridTemplateAreas = \"'view'\";\n } else {\n document.querySelector(\"#list-menu\").style.display = \"grid\";\n }\n buildListMenu();\n }\n}\n\n// let screen visible\nfunction iPhoneUseChrome() {\n let body = document.querySelector(\"body\");\n let listMenu = document.querySelector(\"#list-menu\");\n let view = document.querySelector(\"#view\");\n let spec = document.querySelector(\"#spec\");\n let specContent = document.querySelector(\".spec-content\");\n if (isMobile() == true && getMobileOperatingSystem() == \"iOS\" && isChrome() == \"yes\") {\n body.style.gridTemplateAreas = \"'category' '.'\";\n body.style.gridTemplateRows = \"89% 11%\";\n listMenu.style.gridTemplateRows = \"11% auto 7.5% 47% 29%\";\n view.style.gridTemplateRows = \"11% 1fr 5% auto 5% 3fr 1fr 15% 3%\";\n spec.style.height = \"75vh\";\n spec.style.top = \"calc(50% - 35vh)\";\n specContent.style.maxHeight = \"68vh\";\n }\n}\n\n// detect iOS's Chrome browser\nfunction isChrome() {\n if(navigator.userAgent.match('CriOS')) {\n return \"yes\";\n }\n return \"no\";\n}\n\n// detect device's system\nfunction getMobileOperatingSystem() {\n let userAgent = navigator.userAgent || navigator.vendor || window.opera;\n // Windows Phone must come first because its UA also contains \"Android\"\n if (/windows phone/i.test(userAgent)) {\n return \"Windows Phone\";\n }\n if (/android/i.test(userAgent)) {\n return \"Android\";\n }\n // iOS detection from: http://stackoverflow.com/a/9039885/177710\n if (/iPad|iPhone|iPod/.test(userAgent) && !window.MSStream) {\n return \"iOS\";\n }\n return \"unknown\";\n}\n\n// record & change category\nfunction changeCategory(num) {\n currentCategory = num;\n currentData = data[currentCategory].ads;\n updateCategory();\n}\n\nfunction deleteEmptyCategory() {\n data.filter((item) => item.ads != \"\");\n}\n\nfunction deleteZhEmptyInfo() {\n data.forEach((item) => {\n item.ads = item.ads.filter(ad => ad.zh.demoVideo != \"\");\n });\n data = data.filter((item) => item.ads != \"\");\n}\n\nfunction deleteEnEmptyInfo() {\n data.forEach((item) => {\n item.ads = item.ads.filter(ad => ad.en.demoVideo != \"\");\n });\n data = data.filter((item) => item.ads != \"\");\n}\n\n// let user can choose to display which AD format\nfunction buildCategory() {\n data.forEach((item, index) => {\n let category = document.createElement('li');\n let img = document.createElement('img');\n let p = document.createElement('p');\n img.src = item.img;\n p.innerText = defaultLang() == \"zh\" ? item.name : item.enName;\n if (defaultLang() != \"zh\") {\n document.querySelectorAll('#category > ul > li > p').forEach(el => {\n el.style.fontWeight = \"400\";\n });\n }\n category.appendChild(img);\n category.appendChild(p);\n let body = document.querySelector(\"body\");\n category.addEventListener(\"click\", function() {\n if (isMobile() == true) {\n body.style.gridTemplateAreas = \"'main'\"; \n body.style.backgroundColor = \"#F5F4F4\";\n document.querySelector('#category').style.display = \"none\";\n document.querySelector('#container').style.display = \"grid\";\n document.querySelector('#list-menu').style.display = \"grid\";\n }\n document.querySelector('#disable-click').style.display = \"none\";\n document.querySelector('#spec').style.display = \"none\";\n document.querySelector('#list').style.pointerEvents = \"auto\";\n changeCategory(index);\n buildListMenu();\n });\n document.querySelector('#category > ul').appendChild(category);\n });\n}\n\nlet format = \"\";\nfunction recordFormat(category) {\n let lang = defaultLang();\n let formatName = category.enName.replace(/\\s*/g, \"\");\n history.replaceState(`?${lang}&format=${formatName}`, '', `?${lang}&format=${formatName}`);\n format = `?${lang}&format=${formatName}`;\n}\n\n// user can choose which format Type to display, when device is desktop\nfunction buildList() {\n document.querySelector(\".imgBtn\").addEventListener(\"click\", function() {\n currentPage = currentData.findIndex((el) => {\n return el.adType == \"img\";\n });\n updatePage();\n });\n document.querySelector(\".videoBtn\").addEventListener(\"click\", function() {\n currentPage = currentData.findIndex((el) => {\n return el.adType == \"video\";\n });\n updatePage();\n });\n document.querySelector(\".img-videoBtn\").addEventListener(\"click\", function() {\n currentPage = currentData.findIndex((el) => {\n return el.adType == \"img-video\";\n });\n updatePage();\n });\n}\n\n// rules of list menu option, use to select format type\nfunction buildListMenu() {\n let listMenu = document.querySelector('.select > ul.input-info');\n document.querySelector('.select > ul.input-info > input[type = radio]').checked = false;\n document.querySelectorAll('.select > ul.input-info > *').forEach((el) => {\n el.remove();\n });\n currentData.forEach((item) => {\n if (item.adType == 'img') {\n listMenu.appendChild(img);\n listMenu.appendChild(opImg);\n } else if (item.adType == 'video') {\n listMenu.appendChild(video);\n listMenu.appendChild(opVideo);\n } else {\n listMenu.appendChild(imgVideo);\n listMenu.appendChild(opImgVideo);\n }\n });\n document.querySelector('.select > ul.input-info > input:first-child').checked = true;\n let optionsLength = document.querySelectorAll('.select > ul.input-info > li').length;\n if (optionsLength >= 2) {\n listMenu.insertBefore(flag, listMenu.firstChild);\n }\n if (optionsLength >= 3) {\n listMenu.appendChild(hr);\n }\n flag.checked = true;\n}\n\n// to check other same format type's AD\nfunction buildDirection() {\n let prev = document.querySelector(\"#prev\");\n let next = document.querySelector(\"#next\");\n prev.addEventListener(\"click\", function() {\n currentPage = currentData.findIndex((el, index) => {\n let isSameType = el.adType == currentData[currentPage].adType;\n let isSameDevice = el.adDevice == currentData[currentPage].adDevice;\n let prevOne = el.switchGroup == parseInt(currentData[currentPage].switchGroup) - 1;\n let notCouple = index == currentData.length - 1 || el.switchGroup != currentData[index + 1].switchGroup;\n return (isSameType && isSameDevice && prevOne) || (isSameType && !isSameDevice && prevOne && notCouple);\n });\n updatePage();\n });\n next.addEventListener(\"click\", function() {\n currentPage = currentData.findIndex((el, index) => {\n let isSameType = el.adType == currentData[currentPage].adType;\n let isSameDevice = el.adDevice == currentData[currentPage].adDevice;\n let nextOne = el.switchGroup == parseInt(currentData[currentPage].switchGroup) + 1;\n let notCouple = index == currentData.length - 1 || el.switchGroup != currentData[index + 1].switchGroup;\n return (isSameType && isSameDevice && nextOne) || (isSameType && !isSameDevice && nextOne && notCouple);\n });\n updatePage();\n });\n}\n\n// button to go prev or next page, when device is mobile\nfunction mobileBtn() {\n let toCategory = document.querySelector('.to-category');\n let toList = document.querySelector('.to-list');\n let nextBtn = document.querySelector('.nextBtn');\n let container = document.querySelector('#container');\n let listMenu = document.querySelector('#list-menu');\n toCategory.addEventListener('click', function() {\n document.querySelector('body').style.gridTemplateAreas = \"'category'\";\n document.querySelector(\"body\").style.backgroundColor = \"white\";\n document.querySelector('#category').style.display = \"block\";\n container.style.display = \"none\";\n listMenu.style.display = \"none\";\n });\n toList.addEventListener('click', function() {\n container.style.gridTemplateAreas = \"'list-menu'\";\n listMenu.style.display = \"grid\";\n });\n nextBtn.addEventListener('click', function() {\n container.style.gridTemplateAreas = \"'view'\";\n listMenu.style.display = \"none\";\n if (img.checked == true) {\n currentPage = currentData.findIndex((el) => {\n return el.adType == \"img\";\n });\n updatePage();\n } else if (video.checked == true) {\n currentPage = currentData.findIndex((el) => {\n return el.adType == \"video\";\n });\n updatePage();\n } else {\n currentPage = currentData.findIndex((el) => {\n return el.adType == \"img-video\";\n });\n updatePage();\n }\n });\n document.querySelectorAll(\"input[name=adtype]\").forEach(el => {\n el.addEventListener('change', e => {\n document.querySelector(\"#flag\").checked = true;\n })\n });\n}\n\n// let user know which category he click and display the category's format type\nfunction updateCategory() {\n // display the chosen one!\n document.querySelectorAll(\"#category > ul > li\").forEach((btn, index) => {\n index == currentCategory ? btn.classList.add(\"active\") : btn.classList.remove(\"active\");\n recordFormat(data[currentCategory]);\n });\n // place in format type all his have\n document.querySelectorAll(\"#list > ul > li\").forEach((btn) => {\n btn.style.display = \"none\";\n });\n currentData.forEach((item) => {\n let btn = document.querySelector(`.${item.adType}Btn`);\n btn.style.display = \"flex\";\n });\n currentPage = getHrefAdTypeString();\n // console.log(`Page: ${currentPage}`);\n updatePage();\n}\n\n// let user know which format type is select and display the demo video\nfunction updatePage() {\n // which format type is select\n document.querySelectorAll(\"#list > ul >li\").forEach((btn) => {\n btn.classList.remove(\"active\");\n });\n document.querySelector(`.${currentData[currentPage].adType}Btn`).classList.add(\"active\");\n // renew screen\n changeLanguage();\n changeShow();\n directionStyle();\n displayViewDemoBtn();\n displayAlertCard();\n buildSpec();\n recordType();\n // show AD type name\n let type = document.querySelector(\".type\");\n type.innerHTML = currentData[currentPage][defaultLang()].typeName;\n if (defaultLang() != \"zh\") {\n type.style.fontWeight = \"500\";\n }\n // switch font\n document.querySelectorAll(\"#switch > p\").forEach(el => {\n if (defaultLang() != \"zh\") {\n el.style.fontWeight = \"400\";\n }\n });\n // show format type(at list menu page)\n let name = document.querySelector(\".name\");\n name.innerText = defaultLang() == \"zh\" ? data[currentCategory].name : data[currentCategory].enName;\n if (defaultLang() != \"zh\") {\n name.style.fontWeight = \"300\";\n }\n\n // when user use Android mobile (no need)\n // if (isMobile() == true) {\n // if (getMobileOperatingSystem() == \"Android\" || getMobileOperatingSystem() == \"Windows Phone\") {\n // document.querySelector(\".fullscreen\").style.display = \"block\";\n // }\n // }\n}\n\nfunction recordType() {\n let adType = currentData[currentPage][\"en\"].typeName.replace(/\\s*/g, \"\").split(\"\").join(\"\").split(\"\").join(\"\");\n if (format != \"\") {\n history.replaceState(`${format}&type=${adType}`, '', `${format}&type=${adType}`);\n }\n}\n\n// for different language user\nfunction changeLanguage() {\n document.querySelectorAll(\".en\").forEach(el => {\n el.style.display = defaultLang() == \"en\" ? \"inline-block\" : \"none\";\n });\n document.querySelectorAll(\".vn\").forEach(el => {\n el.style.display = defaultLang() == \"vn\" ? \"inline-block\" : \"none\";\n });\n document.querySelectorAll(\".zh\").forEach(el => {\n el.style.display = defaultLang() == \"zh\" ? \"inline-block\" : \"none\";\n });\n}\n\n// change demo video when click switch button\nfunction changeShow() {\n document.querySelector(\"#demo > .mobile\").style.display = currentData[currentPage].adDevice == \"mobile\" ? \"block\" : \"none\";\n document.querySelector(\".mobile > video\").setAttribute('src', currentData[currentPage][defaultLang()].demoVideo);\n document.querySelector(\"#demo > .desktop\").style.display = currentData[currentPage].adDevice == \"desktop\" ? \"block\" : \"none\";\n document.querySelector(\".desktop > video\").setAttribute('src', currentData[currentPage][defaultLang()].demoVideo);\n let switchBtn = document.querySelector(\"#switch\");\n switchBtn.style.display = currentData.findIndex((el, index) => {\n let isSameType = el.adType == currentData[currentPage].adType;\n let isSameGroup = el.switchGroup == currentData[currentPage].switchGroup;\n let notMe = index != currentPage;\n return isSameType && isSameGroup && notMe;\n }) != -1 ? \"flex\" : \"none\";\n let switchChecked = document.querySelector(\"#switch > .switch-btn > input[type=checkbox]\");\n switchChecked.checked = currentData[currentPage].adDevice == \"desktop\" ? true : false;\n}\n\n// change prev & next btn style\nfunction directionStyle() {\n let isFirst = currentData[currentPage].switchGroup == 1;\n let isLast = currentData.findIndex((el) => {\n let isSameType = el.adType == currentData[currentPage].adType;\n let nextOne = el.switchGroup == parseInt(currentData[currentPage].switchGroup) + 1;\n return isSameType && nextOne;\n }) == -1;\n let prev = document.querySelector(\"#prev\");\n prev.style.display = isFirst && isLast ? \"none\" : \"block\";\n prev.style.opacity = isFirst ? \".5\" : \"1\";\n prev.style.cursor = isFirst ? \"auto\" : \"pointer\";\n prev.style.pointerEvents = isFirst ? \"none\" : \"auto\";\n let next = document.querySelector(\"#next\");\n next.style.display = isFirst && isLast ? \"none\" : \"block\";\n next.style.opacity = isLast ? \".5\" : \"1\";\n next.style.cursor = isLast ? \"auto\" : \"pointer\";\n next.style.pointerEvents = isLast ? \"none\" : \"auto\";\n}\n\n// to decide \"view demo\" button should or not display\nfunction displayViewDemoBtn() {\n let viewDemoBtn = document.querySelector(\"#view-demoBtn\");\n viewDemoBtn.style.display = isMobile() == true && currentData[currentPage].adDevice == \"desktop\" || currentData[currentPage][defaultLang()].galleryLink == \"\" ? \"none\" : \"flex\";\n viewDemoBtn.setAttribute('href', currentData[currentPage][defaultLang()].galleryLink);\n}\n\n// when use mobile to display desktop demo page\nfunction displayAlertCard() {\n let alertCard = document.querySelector(\"#alertCard\");\n alertCard.style.display = isMobile() == true && currentData[currentPage].adDevice == \"desktop\" && currentData[currentPage][defaultLang()].galleryLink != \"\" ? \"flex\" : \"none\";\n let alertCardText = document.querySelector(\"#alertCard > .alert-text\");\n if (defaultLang() != \"zh\") {\n alertCardText.style.fontWeight = \"300\";\n alertCardText.style.width = \"80%\";\n document.querySelector(\"#alertCard\").style.height = \"28vw\";\n }\n}\n\n// to control spec open & close\nfunction specBtn() {\n let guideBtn = document.querySelector('#guide');\n let closeBtn = document.querySelector('.close');\n let disableClick = document.querySelector('#disable-click');\n let spec = document.querySelector('#spec');\n guideBtn.addEventListener('click', function() {\n disableClick.style.display = \"block\";\n spec.style.display = \"flex\";\n document.querySelector('#list').style.pointerEvents = \"none\";\n if (isMobile() == true) {\n document.querySelector(\"body\").style.backgroundColor = \"#44444490\";\n }\n updatePage();\n });\n closeBtn.addEventListener('click', function() {\n disableClick.style.display = \"none\";\n spec.style.display = \"none\";\n document.querySelector('#list').style.pointerEvents = \"auto\";\n if (isMobile() == true) {\n document.querySelector(\"body\").style.backgroundColor = \"#F5F4F4\";\n }\n updatePage();\n });\n}\n\n// spec content\nfunction buildSpec() {\n specLang(defaultLang());\n if (defaultLang() != \"zh\") {\n let typeName = document.querySelector(\".type-name\");\n typeName.style.fontWeight = \"500\";\n document.querySelectorAll('#spec > .spec-content > .spec-style > p').forEach(el => {\n el.style.fontWeight = \"300\";\n if (isMobile() == true) {\n el.style.fontWeight = \"400\";\n el.style.fontSize = \"1.1rem\";\n }\n });\n }\n}\n\n// place url designated language\nfunction specLang(lang) {\n document.querySelector(\".type-name\").innerHTML = currentData[currentPage][lang].typeName;\n document.querySelector(\".device\").innerText = currentData[currentPage][lang].device;\n document.querySelector(\".safe\").innerText = currentData[currentPage][lang].safe;\n document.querySelector(\".link\").innerText = currentData[currentPage][lang].link;\n if (currentData[currentPage][lang].material.includes(\"\")) {\n document.querySelector(\".material\").innerHTML = currentData[currentPage][lang].material;\n document.querySelector(\".material > .desktop\").style.display = isMobile() ? \"none\" : \"block\";\n document.querySelector(\".material > .mobile\").style.display = isMobile() ? \"block\" : \"none\";\n } else {\n document.querySelector(\".material\").innerText = currentData[currentPage][lang].material;\n }\n document.querySelector(\".note-title\").style.display = currentData[currentPage][lang].note == \"\" ? \"none\" : \"block\";\n document.querySelector(\".note\").innerText = currentData[currentPage][lang].note;\n document.querySelector(\".memo-title\").style.display = currentData[currentPage][lang].memo == \"\" ? \"none\" : \"block\";\n document.querySelector(\".memo\").innerText = currentData[currentPage][lang].memo;\n}\n\n// can let user use fullscreen (Android mobile Only)\nfunction toggleFullScreen() {\n let doc = window.document;\n let docEl = doc.documentElement;\n\n let requestFullScreen = docEl.requestFullscreen || docEl.mozRequestFullScreen || docEl.webkitRequestFullScreen || docEl.msRequestFullscreen;\n let cancelFullScreen = doc.exitFullscreen || doc.mozCancelFullScreen || doc.webkitExitFullscreen || doc.msExitFullscreen;\n\n if(!doc.fullscreenElement && !doc.mozFullScreenElement && !doc.webkitFullscreenElement && !doc.msFullscreenElement) {\n requestFullScreen.call(docEl);\n }\n else {\n cancelFullScreen.call(doc);\n }\n}\n"]}