RaMemory/build/js/index.js

1 line
25 KiB
JavaScript

"use strict";const Css={classes:{displayNone:"d-none",darkTheme:"dark-theme",lightTheme:"light-theme",bgBlack:"bg-black",bgWhite:"bg-white",bgPrimary:"bg-primary",bgOrange:"bg-primary",bgGreen:"bg-success",bgBlue:"bg-blue",memoryCardStyleOne:"style-one",memoryCardStyleTwo:"style-two"}},Firework={set:0,intervalIds:[],stopTimeoutId:0,fireworkClass:"firework",fireworkTime:750,autoRemoveFfireworkTime:9e3,random:function(e,t){return e+Math.random()*(t+1-e)},create:function(){var t=Firework.random(40,60),s=Firework.random(40,60),o="#"+Math.random().toString(16).substr(2,6);for(let e=1;e<=30;e++){var n=document.createElement("div");n.className=Firework.fireworkClass,n.classList.add(Firework.fireworkClass+e),n.classList.add("set"+this.set),n.style.backgroundColor=o,n.style.left=t+"%",n.style.top=s+"%",document.body.appendChild(n)}this.set++},delete:function(){var e=this.set-1;0<=this.set&&document.getElemntsByClassName("set"+e).forEach(e=>{e.remove()})},start:function(){var e=Firework;e.create(),e.intervalIds.push(setInterval(Firework.create,e.fireworkTime)),e.intervalIds.push(setInterval(Firework.delete,3*e.fireworkTime)),setTimeout(e.stop,e.autoRemoveFfireworkTime)},stop:function(){var t=Firework;for(let e=0;e<t.intervalIds.length;e++)clearInterval(t.intervalIds[e])}},PWA={installBtnClass:"btn-install-as-app",deferredPrompt:null,displaNoneClass:Css.classes.displayNone,installBtnDoms:[],getDeferredPromptEvent:function(){let t=this;null===t.deferredPrompt&&window.addEventListener("beforeinstallprompt",async function(e){e.preventDefault(),t.deferredPrompt=e;for(let e=0;e<t.installBtnDoms.length;e++)t.installBtnDoms[e].classList.remove(t.displaNoneClass)})},installBtnAction:function(){var t=PWA;for(let e=0;e<t.installBtnDoms.length;e++)t.installBtnDoms[e].classList.add(t.displaNoneClass);t.deferredPrompt.prompt(),t.deferredPrompt.userChoice,t.deferredPrompt=null},setBtnActions:function(){let t=PWA;for(let e=0;e<t.installBtnDoms.length;e++)t.installBtnDoms[e].addEventListener("click",t.installBtnAction,!1);window.addEventListener("appinstalled",function(){for(let e=0;e<t.installBtnDoms.length;e++)t.installBtnDoms[e].classList.add(t.displaNoneClass);t.deferredPrompt=null})},isStandalone:!1,getPWADisplayMode:function(){return this.isStandalone=window.matchMedia("(display-mode: standalone)").matches,document.referrer.startsWith("android-app://")?"twa":navigator.standalone||this.isStandalone?"standalone":"browser"},init:function(){this.installBtnDoms=document.getElementsByClassName(PWA.installBtnClass),this.getDeferredPromptEvent(),this.setBtnActions()}},Memory=(PWA.init(),{memoryId:"memory",wonId:"won",inputMemoryPairsCountId:"memory-pair-count",inputMemoryPairsId:"memory-pairs",inputMemorySizeId:"memory-size",selectFrontStyleId:"front-style-select",selectBackStyleId:"back-style-select",selectSpeedId:"speed-select",countId:"tries-counter",countWrapId:"tries-counter-wrap",displayNoneClass:Css.classes.displayNone,foundPairClass:"found",activePairClass:"active",memoryCardIdPrefix:"memory-card-",memoryCardClass:"memory-flip-card",memoryCardInnerClass:"inner",memoryCardFrontClass:"front",memoryCardBackClass:"back",generateMemoryBtnId:"generate-memory",memoryLoaderId:"memory-loader",highscorePairsCountId:"highscore-pairs-count",highscorePairsId:"highscore-pairs",highscoreCountId:"highscore-count",imageUrl:"./config/images.json",emojiUrl:"./config/emojis.min.json",emojiCategoriesUrl:"./config/emoji-categories.min.json",emojis:null,emojiCategories:null,amountPairs:5,countPairs:2,speed:3,size:14,backStyle:0,frontStyle:0,foundPairs:0,counter:0,highscorePairsCount:0,highscorePairs:0,highscoreCount:0,memoryDom:null,countDom:null,wonDom:null,loaderDom:null,selectFrontStyleDom:null,selectBackStyleDom:null,images:null,intervalIds:[],colors:[],actives:[],activeFlipTimeoutId:0,cookies:!1,speedMap:[6e3,4500,3e3,1700,850,650,300],MAP:{frontStyle2Class:{0:Css.classes.memoryCardStyleTwo+" "+Css.classes.bgBlack,1:Css.classes.memoryCardStyleTwo+" "+Css.classes.bgWhite,2:Css.classes.memoryCardStyleTwo+" "+Css.classes.bgOrange,3:Css.classes.memoryCardStyleTwo+" "+Css.classes.bgGreen,4:Css.classes.memoryCardStyleTwo+" "+Css.classes.bgBlue,5:Css.classes.memoryCardStyleOne+" "+Css.classes.bgBlack,6:Css.classes.memoryCardStyleOne+" "+Css.classes.bgWhite,7:Css.classes.memoryCardStyleOne+" "+Css.classes.bgOrange,8:Css.classes.memoryCardStyleOne+" "+Css.classes.bgGreen,9:Css.classes.memoryCardStyleOne+" "+Css.classes.bgBlue,10:Css.classes.bgBlack,11:Css.classes.bgWhite,12:Css.classes.bgOrange,13:Css.classes.bgGreen,14:Css.classes.bgBlue},backStyle2Emoji:{1:0,2:0,10:1,11:1,12:2,13:2,14:3,15:3,16:4,17:4,18:5,19:5,20:6,21:6,22:7,23:7,24:8,25:8,26:9,27:9},backStyleHasColor:[1,3,5,7,9,10,12,14,16,18,20,22,24,26,28]},timeoutEffectId:0,preFetchImages:!1,cookieSaveHighscore:1,cookieStartValue:2,randomize:function(e){let t=e.length,s;for(;0!==t;)s=Math.floor(Math.random()*t),t--,[e[t],e[s]]=[e[s],e[t]]},fillArr:function(t){var s=[];t.colors=["F09130","bcce43","308ff0"];for(let e=0;e<t.countPairs;e++)for(let e=0;e<t.amountPairs;e++)if(s.push(e),e>t.colors.length-1){let e=Math.random().toString(16).substr(2,3);for(;-1<t.colors.indexOf(e);)e=Math.random().toString(16).substr(2,3);t.colors.push(e)}return t.amountPairs<5&&t.randomize(s),t.randomize(s),t.randomize(t.colors),s},winActionHelper(e){e.highscorePairs=e.amountPairs,e.highscorePairsCount=e.countPairs,e.highscoreCount=e.counter,e.cookies&&1===e.cookieSaveHighscore&&(e.setCookie("highscorePairs",e.highscorePairs),e.setCookie("highscorePairsCount",e.highscorePairsCount),e.setCookie("highscoreCount",parseInt(e.highscoreCount))),e.showHighscore(e),"object"==typeof Firework&&Firework.start()},showHighscore:function(e){null!==document.getElementById(e.highscoreCountId)&&(document.getElementById(e.highscoreCountId).innerHTML=e.highscoreCount),null!==document.getElementById(e.highscorePairsId)&&(document.getElementById(e.highscorePairsId).innerHTML=e.highscorePairs),null!==document.getElementById(e.highscorePairsCountId)&&(document.getElementById(e.highscorePairsCountId).innerHTML=e.highscorePairsCount)},winAction:function(e){(e.highscorePairsCount===e.countPairs&&e.highscorePairs===e.amountPairs&&e.highscoreCount>e.counter||e.highscorePairsCount===e.countPairs&&e.highscorePairs<e.amountPairs||e.highscorePairsCount<e.countPairs)&&e.winActionHelper(e),document.body.scrollIntoView({behavior:"smooth"}),null!==e.wonDom&&e.wonDom.classList.remove(e.displayNoneClass)},closeAllActiveCards:function(t){var s=t.memoryDom.getElementsByClassName(t.activePairClass);for(let e=0;e<s.length;e++)s[e]!==this&&s[e].classList.remove(t.activePairClass)},compareActivesWith:function(e,t){return 0===e.actives.length||e.actives[0].innerHTML===t.innerHTML&&t.id!==e.actives[0].id},cardAction:function(e){if("click"===e.type||13===e.keyCode){let o=Memory;if(this.classList.contains(o.foundPairClass)||this.classList.contains(o.activePairClass))return 0;if(0===o.actives.length&&0<o.memoryDom.getElementsByClassName(o.activePairClass).length){for(;0<o.memoryDom.getElementsByClassName(o.activePairClass).length;)o.closeAllActiveCards(o);clearTimeout(o.activeFlipTimeoutId)}if(this.classList.add("active"),o.compareActivesWith(o,this)&&o.actives.length<o.countPairs-1)o.actives.push(this);else{if(o.counter++,null!==o.countDom&&(null!==document.getElementById(o.countWrapId)&&document.getElementById(o.countWrapId).classList.remove(o.displayNoneClass),o.countDom.innerHTML=o.counter),o.compareActivesWith(o,this)){this.removeAttribute("tabindex"),this.classList.add(o.foundPairClass),this.classList.remove(o.activePairClass),this.removeEventListener("click",o.cardAction,!1),this.removeEventListener("keyup",o.cardAction,!1);for(let e=0;e<o.actives.length;e++)o.actives[e].removeAttribute("tabindex"),o.actives[e].classList.add(o.foundPairClass),o.actives[e].classList.remove(o.activePairClass),o.actives[e].removeEventListener("click",o.cardAction,!1),o.actives[e].removeEventListener("keyup",o.cardAction,!1);o.foundPairs++,o.foundPairs===o.amountPairs&&(o.actives=[],o.winAction(o))}else{let t=this,s=o.actives;o.activeFlipTimeoutId=setTimeout(function(){for(let e=0;e<s.length;e++)t.classList.contains(o.activePairClass)&&s[e].classList.remove(o.activePairClass);t.classList.contains(o.activePairClass)&&t.classList.remove(o.activePairClass),s=[],t=null},o.speedMap[o.speed])}o.actives=[]}}},cardClick:function(e,t){t.addEventListener("click",e.cardAction,!1),t.addEventListener("keyup",e.cardAction,!1)},getCharCode:function(e){return null===e||"undefined"===e?"":e<26?String.fromCharCode(65+e):Memory.getCharCode(Number(e/26)-1)+String.fromCharCode(65+e%26)},toHex:function(e){for(var t=unescape(encodeURIComponent(e)),s="",o=0;o<t.length;o++)s+=t.charCodeAt(o).toString(16);return String(s)},simpleHashCode:function(e){var t,s,o=1;if(e)for(o=0,t=e.length-1;0<=t;t--)o=0!=(s=266338304&(o=(o<<6&268435455)+(s=e.charCodeAt(t))+(s<<14)))?o^s>>21:o;return String(o)},getSaltetString(e,t,s){switch(t[s]%3){case 1:return e.amountPairs+".a!"+e.emojis[t[s]]+e.highscoreCount+"t"+t[s]+"Rt.a!"+e.highscorePairs;case 2:return e.amountPairs+".T!"+ +e.highscorePairs+"t"+e.emojis[t[s]]+"t.R!"+e.highscoreCount;default:return e.amountPairs+e.emojis[t[s]]+".Ec"+t[s]+e.highscoreCount+"tt.a#"+e.highscorePairs}},randomLongString:function(e,t,s){return e.getCharCode(e.toHex(e.simpleHashCode(e.getSaltetString(e,t,s))))},randomShortString:function(e,t,s){return e.getCharCode(e.simpleHashCode(e.getSaltetString(e,t,s)))},randomizeShortStringForMemorie:function(e,t,s){return e.getCharCode(e.simpleHashCode(e.getSaltetString(e,t,s)))},getContrastYIQ:function(e){return 3===e.length&&(e=e.split("").map(function(e){return e+e}).join("")),128<=(299*parseInt(e.substr(0,2),16)+587*parseInt(e.substr(2,2),16)+114*parseInt(e.substr(4,2),16))/1e3?"black":"white"},createCardBackDom:function(e,t,s,o){var n=document.createElement("div");switch(e=Memory,n.className=e.memoryCardBackClass,-1<e.MAP.backStyleHasColor.indexOf(e.backStyle)&&(n.style="background-color: #"+e.colors[t[s]]+";",n.classList.add("text-"+e.getContrastYIQ(e.colors[t[s]]))),e.backStyle){case 0:void 0===e.images[t[s]]?(n.style="background-color: #"+e.colors[t[s]]+";",n.innerHTML='<div style="font-size: '+o+'em;">'+e.emojis[e.emojiCategories[0][t[s]]]+"<div>"):n.style="background-image: url("+e.images[t[s]]+");";break;case 3:case 4:n.innerHTML='<div class="h1 text-wrap">'+e.randomShortString(e,t,s)+"<div>";break;case 5:case 6:n.innerHTML='<div class="h1 text-wrap">'+e.randomLongString(e,t,s)+"<div>";break;case 7:case 8:n.innerHTML='<div class="h1">'+t[s]+"<div>";break;case 28:case 29:n.innerHTML='<div class="h1 text-wrap">'+e.simpleHashCode(t[s]+"")+"<div>";break;case 9:break;default:void 0===e.MAP.backStyle2Emoji[e.backStyle]?void 0===e.images[t[s]]?(n.style="background-color: #"+e.colors[t[s]]+";",n.innerHTML='<div style="font-size: '+o+'em;">'+e.emojis[e.emojiCategories[0][t[s]]]+"<div>"):n.style="background-image: url("+e.images[t[s]]+");":n.innerHTML='<div style="font-size: '+o+'em;">'+e.emojis[e.emojiCategories[e.MAP.backStyle2Emoji[e.backStyle]][t[s]]]+"<div>"}return n},drawSingleMemoryCard:function(e,t,s){var o=document.createElement("div"),n=(o.id=e.memoryCardIdPrefix+s,o.className=e.memoryCardClass,o.setAttribute("tabindex",0),o.style="width: "+e.size+"em; height: "+e.size+"em",document.createElement("div")),i=(n.className=e.memoryCardInnerClass,document.createElement("div"));i.className=e.memoryCardFrontClass+" "+e.MAP.frontStyle2Class[e.frontStyle],n.appendChild(i),n.appendChild(e.createCardBackDom(e,t,s,.8*e.size)),o.appendChild(n),e.cardClick(e,o),e.memoryDom.appendChild(o)},draw:function(t){for(;t.memoryDom.firstChild;)t.memoryDom.removeChild(t.memoryDom.firstChild);null!==t.images&&t.randomize(t.images);for(let e=0;e<t.emojiCategories.length;e++)t.randomize(t.emojiCategories[e]);let s=t.fillArr(t);for(let e=0;e<s.length;e++)t.drawSingleMemoryCard(t,s,e);s=[]},reset:function(t){null===t.wonDom||t.wonDom.classList.contains(t.displayNoneClass)||t.wonDom.classList.add(t.displayNoneClass),"object"==typeof Firework&&Firework.stop();let s=document.getElementsByClassName(t.memoryCardClass);for(let e=0;e<s.length;e++)s[e].removeEventListener("click",t.cardAction,!1),s[e].removeEventListener("keyup",t.cardAction,!1),s[e].remove();s=null,t.foundPairs=0,t.actives=[]},hideWelcomeMessages:function(t){var s=document.getElementsByClassName("welcome");for(let e=0;e<s.length;e++)s[e].classList.contains(t.displayNoneClass)||s[e].classList.add(t.displayNoneClass)},showLoader:function(e){e.loaderDom.classList.contains(e.displayNoneClass)&&e.loaderDom.classList.remove(e.displayNoneClass),e.memoryDom.classList.contains(e.displayNoneClass)||e.memoryDom.classList.add(e.displayNoneClass)},hideLoader:function(e){e.loaderDom.classList.contains(e.displayNoneClass)||e.loaderDom.classList.add(e.displayNoneClass),e.memoryDom.classList.contains(e.displayNoneClass)&&e.memoryDom.classList.remove(e.displayNoneClass)},setCookieSaveHighscore:function(e){Memory.cookieSaveHighscore=parseInt(e),Memory.setCookie("cookieSaveHighscore",Memory.cookieSaveHighscore)},setCookieStartValue:function(e){0<parseInt(e)&&(Memory.cookieStartValue=parseInt(e),Memory.setCookie("cookieStartValue",Memory.cookieStartValue),Memory.setCooiesFromForm())},setCooiesFromForm:function(){var e=Memory;e.cookies&&1===e.cookieStartValue&&(null!==document.getElementById(e.inputMemoryPairsId)&&e.setCookie("amountPairs",parseInt(document.getElementById(e.inputMemoryPairsId).value)),null!==document.getElementById(e.inputMemoryPairsCountId)&&e.setCookie("countPairs",parseInt(document.getElementById(e.inputMemoryPairsCountId).value)),null!==document.getElementById(e.selectSpeedId)&&e.setCookie("speed",parseInt(document.getElementById(e.selectSpeedId).value)),null!==e.selectFrontStyleDom&&e.setCookie("frontStyle",parseInt(e.selectFrontStyleDom.options[e.selectFrontStyleDom.selectedIndex].value)),null!==e.selectBackStyleDom&&e.setCookie("backStyle",parseInt(e.selectBackStyleDom.options[e.selectBackStyleDom.selectedIndex].value)),null!==document.getElementById(e.inputMemorySizeId))&&e.setCookie("size",parseInt(document.getElementById(e.inputMemorySizeId).value))},setCookieStartAction:function(e){e.cookies&&2===e.cookieStartValue&&(e.setCookie("amountPairs",e.amountPairs),e.setCookie("countPairs",e.countPairs),e.setCookie("speed",e.speed),e.setCookie("size",e.size),e.setCookie("frontStyle",e.frontStyle),e.setCookie("backStyle",e.backStyle))},startAction(e){document.getElementById(e.generateMemoryBtnId).addEventListener("click",function(){e.showLoader(e),e.hideWelcomeMessages(e),e.reset(e),null!==document.getElementById(e.inputMemoryPairsId)&&(e.amountPairs=parseInt(document.getElementById(e.inputMemoryPairsId).value)),null!==document.getElementById(e.inputMemoryPairsCountId)&&(e.countPairs=parseInt(document.getElementById(e.inputMemoryPairsCountId).value)),null!==document.getElementById(e.selectSpeedId)&&(e.speed=parseInt(document.getElementById(e.selectSpeedId).value)),null!==e.selectFrontStyleDom&&(e.frontStyle=parseInt(e.selectFrontStyleDom.options[e.selectFrontStyleDom.selectedIndex].value)),null!==e.selectBackStyleDom&&(e.backStyle=parseInt(e.selectBackStyleDom.options[e.selectBackStyleDom.selectedIndex].value)),null!==document.getElementById(e.inputMemorySizeId)&&(e.size=parseInt(document.getElementById(e.inputMemorySizeId).value)),e.setCookieStartAction(e),e.draw(e),e.counter=0,setTimeout(function(){e.hideLoader(e),e.memoryDom.scrollIntoView({behavior:"smooth"})},750)},!1)},setPrefilledCardActions:function(t){if(t.memoryDom.getElementsByClassName(t.memoryCardClass).length===t.amountPairs*t.countPairs){var s=t.memoryDom.getElementsByClassName(t.memoryCardClass);for(let e=0;e<s.length;e++)t.cardClick(t,s[e])}},initDomVariables:function(e){null===e.memoryDom&&(e.memoryDom=document.getElementById(e.memoryId)),null===e.countDom&&(e.countDom=document.getElementById(e.countId)),null===e.selectFrontStyleDom&&(e.selectFrontStyleDom=document.getElementById(e.selectFrontStyleId)),null===e.selectBackStyleDom&&(e.selectBackStyleDom=document.getElementById(e.selectBackStyleId)),null===e.wonDom&&(e.wonDom=document.getElementById(e.wonId)),null===e.loaderDom&&(e.loaderDom=document.getElementById(e.memoryLoaderId))},fetchEmojis:function(t){null===t.emojis&&fetch(t.emojiUrl).then(function(e){return e.json()}).then(function(e){t.emojis=e}).catch(function(e){t.emojis=[]}),null===t.emojiCategories&&fetch(t.emojiCategoriesUrl).then(function(e){return e.json()}).then(function(e){t.emojiCategories=e}).catch(function(e){t.emojiCategories=[]})},fetchSingleImages:function(t){!0===t.preFetchImages&&document.addEventListener("DOMContentLoaded",async function(){for(let e=0;e<t.images.length;e++)0===t.images[e].indexOf("http")&&fetch(t.images[e])},!1)},fetchImages:function(t){void 0!==t.memoryDom.dataset.imagesSrc&&(t.imageUrl=t.memoryDom.dataset.imagesSrc),null===t.images&&fetch(t.imageUrl).then(function(e){return e.json()}).then(function(e){t.images=e,t.fetchSingleImages(t)}).catch(function(e){t.images=[]})},initDomActions:function(e){e.initDomVariables(e),e.startAction(e),e.setPrefilledCardActions(e)},eraseCookie:function(e){var t=new Date;t.setTime(t.getTime()-864e5),document.cookie=e+"=;secure=true;path=/;expires="+t.toGMTString()},eraseAllCookies:function(){var e=Memory;e.cookies=!1,e.cookieSaveHighscore=0,e.cookieStartValue=0,e.eraseCookie("amountPairs"),e.eraseCookie("countPairs"),e.eraseCookie("speed"),e.eraseCookie("size"),e.eraseCookie("frontStyle"),e.eraseCookie("backStyle"),e.eraseCookie("highscorePairs"),e.eraseCookie("highscorePairsCount"),e.eraseCookie("highscoreCount"),e.eraseCookie("cookieStartValue"),e.eraseCookie("cookieSaveHighscore")},getCookie:function(e){e=document.cookie.match("(^|;) ?"+e+"=([^;]*)(;|$)");return e?e[2]:null},setCookie:function(e,t,s=365){var o=new Date;o.setTime(o.getTime()+864e5*s),document.cookie=e+"="+t+";secure=true;path=/;expires="+o.toGMTString()},getInt:function(e,t=0){return isNaN(parseInt(e))?t:parseInt(e)},fillForm:function(e){null!==document.getElementById(e.inputMemoryPairsId)&&(document.getElementById(e.inputMemoryPairsId).value=e.amountPairs),null!==document.getElementById(e.inputMemoryPairsCountId)&&(document.getElementById(e.inputMemoryPairsCountId).value=e.countPairs),null!==document.getElementById(e.selectSpeedId)&&(document.getElementById(e.selectSpeedId).value=e.speed),null!==e.selectFrontStyleDom&&(e.selectFrontStyleDom.value=e.frontStyle),null!==e.selectBackStyleDom&&(e.selectBackStyleDom.value=e.backStyle),null!==document.getElementById(e.inputMemorySizeId)&&(document.getElementById(e.inputMemorySizeId).value=e.size)},loadFromCookies(e){e.cookieSaveHighscore=e.getInt(e.getCookie("cookieSaveHighscore")),e.cookieStartValue=e.getInt(e.getCookie("cookieStartValue")),0<e.cookieStartValue&&(e.cookies=!0,e.amountPairs=e.getInt(e.getCookie("amountPairs")),e.countPairs=e.getInt(e.getCookie("countPairs")),e.speed=e.getInt(e.getCookie("speed")),e.size=e.getInt(e.getCookie("size")),e.frontStyle=e.getInt(e.getCookie("frontStyle")),e.backStyle=e.getInt(e.getCookie("backStyle"))),0<e.cookieSaveHighscore&&(e.cookies=!0,e.highscorePairs=e.getInt(e.getCookie("highscorePairs")),e.highscorePairsCount=e.getInt(e.getCookie("highscorePairsCount")),e.highscoreCount=e.getInt(e.getCookie("highscoreCount")))},init:function(e=!1,t=!1){let s=this;e&&(s.preFetchImages=!0),s.loadFromCookies(s),!s.cookies&&t&&(s.cookies=!0,s.setCookieSaveHighscore(1),s.setCookieStartValue(2)),null===document.getElementById(s.memoryId)?document.addEventListener("DOMContentLoaded",function(){null===document.getElementById(Memory.memoryId)&&(s.initDomActions(),s.showHighscore(s),s.fillForm(s))},!1):(s.initDomActions(s),s.showHighscore(s),s.fillForm(s)),s.fetchEmojis(s),s.fetchImages(s)}}),RaMemoryPage={howToPlayId:"how-to-play",aboutId:"about",gameId:"game",imprintId:"imprint",gdprId:"gdpr",settingsId:"settings",displayNoneClass:Css.classes.displayNone,howToPlayBtnClass:"btn-howto",gdprBtnClass:"btn-gdpr",imprintBtnClass:"btn-imprint",settingsBtnClass:"btn-settings",themeSwitchBtnClass:"btn-toggle-theme",settingsCheckUseCookiesId:"settings-use-cookies",settingsCheckSaveHighscoreId:"settings-save-highscore",settingsRadioStartValueClass:"settings-start-value",scrollToTimeout:200,timeoutId:0,prefersDarkTheme:null,currentTheme:null,closeAll:function(e,t=""){document.getElementById(e.howToPlayId)&&t!==e.howToPlayId&&!document.getElementById(e.howToPlayId).classList.contains(e.displayNoneClass)&&document.getElementById(e.howToPlayId).classList.add(e.displayNoneClass),document.getElementById(e.gameId)&&t!==e.gameId&&!document.getElementById(e.gameId).classList.contains(e.displayNoneClass)&&document.getElementById(e.gameId).classList.add(e.displayNoneClass),document.getElementById(e.aboutId)&&t!==e.aboutId&&!document.getElementById(e.aboutId).classList.contains(e.displayNoneClass)&&document.getElementById(e.aboutId).classList.add(e.displayNoneClass),document.getElementById(e.imprintId)&&t!==e.imprintId&&!document.getElementById(e.imprintId).classList.contains(e.displayNoneClass)&&document.getElementById(e.imprintId).classList.add(e.displayNoneClass),document.getElementById(e.gdprId)&&t!==e.gdprId&&!document.getElementById(e.gdprId).classList.contains(e.displayNoneClass)&&document.getElementById(e.gdprId).classList.add(e.displayNoneClass),document.getElementById(e.settingsId)&&t!==e.settingsId&&!document.getElementById(e.settingsId).classList.contains(e.displayNoneClass)&&document.getElementById(e.settingsId).classList.add(e.displayNoneClass)},showJust:function(e){var t=RaMemoryPage;t.closeAll(t,e),document.getElementById(e)&&document.getElementById(e).classList.contains(t.displayNoneClass)&&document.getElementById(e).classList.remove(t.displayNoneClass)},btnActions:function(e,t){e.showJust(t),e.timeoutId=setTimeout(function(){document.getElementById(t).scrollIntoView({behavior:"smooth"})},e.scrollToTimeout)},initBtnActions:function(t){document.getElementById(Memory.generateMemoryBtnId).addEventListener("click",function(){t.showJust(t.gameId)});let s=document.getElementsByClassName(t.howToPlayBtnClass);for(let e=0;e<s.length;e++)s[e].addEventListener("click",function(){t.btnActions(t,t.howToPlayId)});s=document.getElementsByClassName(t.gdprBtnClass);for(let e=0;e<s.length;e++)s[e].addEventListener("click",function(){t.btnActions(t,t.gdprId)});s=document.getElementsByClassName(t.imprintBtnClass);for(let e=0;e<s.length;e++)s[e].addEventListener("click",function(){t.btnActions(t,t.imprintId)});s=document.getElementsByClassName(t.settingsBtnClass);for(let e=0;e<s.length;e++)s[e].addEventListener("click",function(){t.btnActions(t,t.settingsId)});s=document.getElementsByClassName(t.themeSwitchBtnClass);for(let e=0;e<s.length;e++)s[e].addEventListener("click",function(){let e="";e=t.prefersDarkTheme.matches?(document.body.classList.toggle(Css.classes.lightTheme),document.body.classList.contains(Css.classes.lightTheme)?"light":"dark"):(document.body.classList.toggle(Css.classes.darkTheme),document.body.classList.contains(Css.classes.darkTheme)?"dark":"light"),localStorage.setItem("theme",e)});document.getElementById("save-settings").addEventListener("click",function(e){document.getElementById(t.settingsCheckUseCookiesId).checked?(t.saveSettingsAction(t),document.getElementById(t.settingsCheckUseCookiesId).parentNode.classList.remove("bg-alert"),document.getElementById(t.settingsCheckUseCookiesId).parentNode.classList.remove("text-white")):(document.getElementById(t.settingsCheckUseCookiesId).parentNode.classList.add("bg-alert"),document.getElementById(t.settingsCheckUseCookiesId).parentNode.classList.add("text-white"))}),document.getElementById("clear-settings").addEventListener("click",function(e){Memory.eraseAllCookies(),document.getElementById(t.settingsRadioStartValueClass+"-0").checked=!0,document.getElementById(t.settingsCheckSaveHighscoreId).checked=!1,document.getElementById(t.settingsCheckUseCookiesId).checked=!1,document.getElementById("settings-saved").classList.remove("d-none"),setTimeout(function(){document.getElementById("settings-saved").classList.add("d-none")},1350)})},initTheme:function(e){e.prefersDarkTheme=window.matchMedia("(prefers-color-scheme: dark)"),e.currentTheme=localStorage.getItem("theme"),"dark"===e.currentTheme?document.body.classList.toggle(Css.classes.darkTheme):"light"===e.currentTheme&&document.body.classList.toggle(Css.classes.lightTheme)},initSettings:function(e){document.getElementById(e.settingsRadioStartValueClass+"-"+Memory.cookieStartValue).checked=!0,document.getElementById(e.settingsCheckSaveHighscoreId).checked=0!==Memory.cookieSaveHighscore,document.getElementById(e.settingsCheckUseCookiesId).checked=Memory.cookies},saveSettingsAction:function(e){document.cookie="",Memory.cookies=!0,Memory.setCookieSaveHighscore(document.getElementById(e.settingsCheckSaveHighscoreId).checked?1:0),Memory.setCookieStartValue(document.querySelector('input[name="'+e.settingsRadioStartValueClass+'"]:checked').value),document.getElementById("settings-saved").classList.remove("d-none"),setTimeout(function(){document.getElementById("settings-saved").classList.add("d-none")},1350)},init:function(){var t=this;if("object"==typeof Memory&&Memory.init(),t.initTheme(t),t.initBtnActions(t),t.initSettings(t),location.hash==="#"+t.howToPlayId||location.hash==="#"+t.settingsId||location.hash==="#"+t.gdprId||location.hash==="#"+t.imprintId){let e=location.hash.substr(1,location.hash.length-1);document.getElementById(e)&&(t.showJust(e),setTimeout(function(){document.getElementById(e).scrollIntoView({behavior:"smooth"})},450))}t.closeAll(t,t.aboutId)}},registerServiceWorker=(RaMemoryPage.init(),async()=>{if("serviceWorker"in navigator)try{var e=await navigator.serviceWorker.register("./sw.js",{scope:"./"});e.installing||e.waiting||e.active}catch(e){console.error("Registration failed with "+e)}});window.addEventListener("DOMContentLoaded",async function(e){registerServiceWorker()});