"},buildWeekTableBox=function(e,t){var n=e.tableCode,r=e.numberOfMissesInWeek;const s=document.createElement("div");var i=document.createElement("div");i.setAttribute("class","task-icon-container"),i.innerHTML=calendarIcon;const a=document.createTextNode(t.habitDescription),o=document.createElement("div");o.setAttribute("class","graph-title"),o.appendChild(i),o.appendChild(a);const l=document.createElement("div");l.innerHTML="This week summary:",l.setAttribute("class","subtitle");const c=document.createElement("div");c.setAttribute("class","critical-link"),t.isCritical&&"true"==t.isCritical?(c.innerHTML="Unmark as critical",c.setAttribute("onclick","unsetHabitAsCritical("+t.habitId+");")):(c.innerHTML="Mark as critical",c.setAttribute("onclick","setHabitAsCritical("+t.habitId+");")),s.setAttribute("class","table-summary"),s.innerHTML=n;var d=document.createElement("div");d.appendChild(o),d.appendChild(s),d.appendChild(c);var u=document.createElement("br");d.appendChild(u),d.setAttribute("class","box canva-wrapper week-box"),0==r?(d.style.background="#daffd9",d.style.border="1px solid rgb(167 211 162)"):1==r?(d.style.background="rgb(255 252 238)",d.style.border="1px solid rgb(246 223 35)"):r>1&&(d.style.background="white"),document.getElementById("no-week-summary").style.display="none",document.getElementById("week-summary-container").appendChild(d)};function getRandomNumber(e,t){var n=Math.random();return Math.floor(1e3*n)%2==0?Math.floor((t-e)*n+e):Math.ceil((t-e)*n+e)}var apiUser,formatDate=function(e){return e.getFullYear().toString().padStart(2,"0")+"-"+(e.getMonth()+1).toString().padStart(2,"0")+"-"+e.getDate().toString().padStart(2,"0")},getDateFromFormattedDate=function(e){var t=e.split("-");return new Date(t[0],t[1],t[2])},daysSinceToday=function(e){var t=getDateFromFormattedDate(e),n=new Date;return Math.round((n-t)/24/3600)},todaysDateDayNumber=function(){return(new Date).getDay()},formattedTodaysDate=function(){var e=new Date;return formatDate(e)},translations={en_US:{amazing:["Amazing","Superb","Outstanding","Magnificient","Exceptional","Marvellous","Wonderful","Sublime","Supreme","Splendid","Fantastic","Awesome","Mind-blowing","Brilliant","Smashing","Spectacular","Spectaculous","Awesome","Fabulous"],encouraging:["A little effort each day adds up to big results!","You are stronger than you know!","You are capable of amazing things!","Believe in yourself and you will be unstoppable!","You are doing exactly what you should be doing!","You are being so strong and patient!","I admire how strong you are!","I cannot wait to see what you do next!","You are doing a great job!","You are getting stronger every day!","I am so proud of you!","You are on the right track!","You made it look easy!","You have super powers!","You are irresistible!"]}},resetMemory=function(){resetHabits(),resetProgress()},resetElement=function(e){for(var t=0;t=0&&window.localStorage.removeItem(n)}},resetProgress=function(){var e=document.getElementsByClassName("habit-update");for(var t of e)t.parentNode.removeChild(t);resetElement("progress")},resetHabits=function(){var e=document.getElementsByClassName("habit-setting");for(var t of e)t.parentNode.removeChild(t);resetElement("habit")},resetDebugging=function(){document.getElementById("debugging-text").innerHTML=""},debugWrite=function(e){document.getElementById("debugging-text").innerHTML+=e+" "},getMemoryDetails=function(){for(var e=0;e=0?document.getElementById("memory-habit").innerHTML+=window.localStorage.getItem(t):t.indexOf("progress")>=0&&(document.getElementById("memory-progress").innerHTML+=window.localStorage.getItem(t))}},pushProgressToQueue=function(e){var t=progressDOMToJson(e);encourageIfPassedTarget(t.numberOfCompletions,t.target,t.isCritical);var n={id:"progress-"+t.id,value:JSON.stringify(t)};executePushToQueue(n)},pushProgressArrayToQueue=function(e){var t={id:"progress-"+e.id,value:JSON.stringify(e)};executePushToQueue(t)},pushHabitArrayToQueue=function(e){var t={id:"habit-"+e.habitId,value:JSON.stringify(e)};executePushToQueue(t)},executePushToQueue=function(e){console.log("pushing to queue:"),console.log(e);var t=updateQueue.length,n=updateQueue.pop();null!=n&&n.id!=e.id?(console.log("putting back previous"),updateQueue.push(n)):(console.log("did not put back previous:"),console.log(n)),updateQueue.push(e),console.log(updateQueue),console.log("size before push:"+t.toString()+" size after push:"+updateQueue.length.toString())},pushItemInQueue=function(e){updateQueue.push(e)},readQueueProgress=function(){for(;updateQueue.length>0;){var e=updateQueue.shift();console.log("reading from queue"),console.log(e),putInStorage(e.id,e.value);var t=new Date;document.getElementById("last-saved-information").innerHTML="Last saved: "+t.toLocaleTimeString(),document.getElementById("last-saved-information-habits").innerHTML="Last saved: "+t.toLocaleTimeString()}},putInStorage=function(e,t){try{setItem(e,t)}catch(e){console.error(e),console.error("Problem writing progress:"+elementToProcess.id.toString()),console.error(currentOutput)}},getHabitProgressJournal=async function(){if(loggedIn){var e,t=`http://localhost:5000/get-habit-progress-journal?user="${apiUser}"`;try{e=await fetch(t)}catch(e){return console.log("could not connect to the server"),console.log(e),getHabitProgressJournalFromStorage()}return"200"==e.status?e.json():(console.log("status of the api call:"+e.status),getHabitProgressJournalFromStorage())}return getHabitProgressJournalFromStorage()},getHabitProgressJournalFromStorage=function(){for(var e=[],t=[],n=[],r=[],s=[],i=localStorage.length,a=0;a=0){var l=JSON.parse(localStorage.getItem(o));l.progressDate==formattedTodaysDate()?r.push(l):daysSinceToday(l.progressDate)<=30&&s.push(l),e.push(l)}else o.indexOf("habit-")>=0?t.push(JSON.parse(localStorage.getItem(o))):o.indexOf("journal-")>=0&&n.push({key:o,text:JSON.parse(localStorage.getItem(o))})}return{progressArray:e,habitsArray:t,journalArray:n,todaysProgressArray:r,pastProgressArray:s}},removeItemByKey=async function(e){if(window.localStorage.removeItem(e),loggedIn){var t,n={method:"GET",url:`http://localhost:5000/removeItemByKey?keyName=${e}&user="${apiUser}"`};try{t=await APICall(n)}catch(e){console.log(e)}}return console.log("item removed"),t},getItemByKey=async function(e){if(loggedIn){var t,n={method:"GET",url:`http://localhost:5000/getItemByKey?keyName=${e}&user="${apiUser}"`};try{t=await APICall(n)}catch(t){return console.log(t),window.localStorage.getItem(e)}return t}var r=window.localStorage.getItem(e);return console.log("item got from memory:"+r),r},setItem=async function(e,t){if(window.localStorage.setItem(e,t),loggedIn){var n,r={method:"GET",url:`http://localhost:5000/setItemValue?keyName=${e}&value=${t}&user="${apiUser}"`};try{n=await APICall(r)}catch(e){console.log(e)}}return console.log("item set:"+e+":"+t),n},updateParameterInItemValue=async function(e,t,n){var r,s,i=await getItemByKey(e);(r="string"==typeof i||i instanceof String?JSON.parse(i):i)[t]=n,s=JSON.stringify(r),console.log("object got from memory before update"),console.log(s);await setItem(e,s);if(console.log("update executed"),loggedIn){var a={method:"GET",url:`http://localhost:5000/updateParamInItem?keyName=${e}¶meterName=${t}&value=${n}&user="${apiUser}"`};i="";try{i=await APICall(a)}catch(e){console.log(e)}}return console.log("item set:"+e+":"+n),i},dataArrays={},loggedIn=!1,maxForNonLoggedIn=2e3,updateQueue=[],radialProgressParameters={strokeWidth:6,containerHeight:80,fontSize:15,textLeftAdjustment:-5,textTopAdjustment:7,progressColor:"rgb(245 184 1)",emptyColor:"rgb(240 221 165)",anchorDivId:"daily-summary",suffixForIds:"12345"},currentDateTime=new Date;console.log("starting javascript:"+currentDateTime.toString());var currentDate=formatDate(currentDateTime);onload=function(){"use strict";const e=new URLSearchParams(window.location.search);"true"==e.get("debug")&&(document.getElementById("debug-section").style.display="block"),apiUser=e.get("user"),console.log("user:"+apiUser),e.get("user")&&e.get("user").length>1&&(loggedIn=!0),hideStartProgressButtonOnHabits(),document.getElementById("date-filter").value=currentDate,createRadialProgressBar(radialProgressParameters),renderApplication().then(e=>{setTimeout(placeSVGIcons,5),setTimeout(renderPastProgressBoxes,10),setTimeout(showSummariesTab,15),setTimeout(loadAudio,25)},e=>{console.log(e)})};var renderApplication=async function(){if((dataArrays=await getHabitProgressJournal()).progressArray&&dataArrays.progressArray.length>=1?(changeTabToProgress(),showProgressTab()):(hideProgressTab(),changeTabToHabits()),dataArrays.journalArray&&dataArrays.journalArray.length<1&&hideJournalBox(),dataArrays.todaysProgressArray)for(const e of dataArrays.todaysProgressArray)addProgressDOMElement(e);if(dataArrays.habitsArray)for(const e of dataArrays.habitsArray)addHabitDOMElement(e);addEmptyProgressBoxesOnNewDay(currentDate,currentDateTime)};function prepareSummaries(){readJournal(dataArrays.journalArray),loadScriptForGraphs(showGraphsTabIfGoodLength)}function showGraphsTabIfGoodLength(){dataArrays.habitsArray&&dataArrays.habitsArray.length>=1&&showGraphTab()}var saveLoop=function(){setInterval(readQueueProgress,1e3)},reloadHabitProgressJournal=async function(){dataArrays=await getHabitProgressJournal()},placeSVGIcons=function(){document.getElementById("daily-journal-icon").innerHTML=writeIcon,document.getElementById("daily-journal-icon-small").innerHTML=writeIconSmall,document.getElementById("week-link-icon").innerHTML=calendarIcon,document.getElementById("small-graph-icon").innerHTML=graphIconSmall,document.getElementById("small-graph-journal").innerHTML=writeIconSmall,document.getElementById("small-task-icon").innerHTML=taskIcon,document.getElementById("save-icon").innerHTML=saveIcon,document.getElementById("start-icon").innerHTML=startIcon,document.getElementById("trophy-icon-positive").innerHTML=trophyIconBig,document.getElementById("trophy-icon-super-positive").innerHTML=trophyIconBig,document.getElementById("start-icon").innerHTML=startIcon;var e=document.getElementsByClassName("trophy-icon");for(var t of e)t.innerHTML=trophyIcon;var n=document.getElementsByClassName("trophy-icon-big");for(var r of n)r.innerHTML=trophyIconBig;document.getElementById("week-table-icon").innerHTML=calendarIconBig,document.getElementById("plus-icon-button").innerHTML=plusIconBig},loadScript=async function(e){return new Promise(function(t,n){let r=document.createElement("script"),s=document.head||document.getElementsByTagName("head")[0];r.setAttribute("src",e),r.setAttribute("async",!1),r.addEventListener("load",function(){t("success")}),r.addEventListener("error",function(e){n(e.error)}),s.insertBefore(r,s.firstChild)})},loadAudio=function(e){const t=document.createElement("audio");t.setAttribute("src","resources/crowd_cheering_6seconds.mp3"),t.setAttribute("id","cheering-audio"),document.body.appendChild(t)},playCheers=function(){document.getElementById("cheering-audio").play()},hideJournalBox=function(){document.getElementById("journal-container").innerHTML="
No journal entry yet.
"},hideProgressTab=function(){document.getElementById("progress-menu").style.display="none"},showProgressTab=function(){document.getElementById("progress-menu").style.display="block"},hideSummariesTab=function(){document.getElementById("graphs-menu").style.display="none",document.getElementById("go-to-summaries-button").style.display="none"},showSummariesTab=function(){dataArrays.habitsArray&&dataArrays.habitsArray.length>=1&&(document.getElementById("graphs-menu").style.display="block",document.getElementById("go-to-summaries-button").style.display="flex")},showGraphTab=function(){document.getElementById("streaks-link").style.display="block"},hideGraphTab=function(){document.getElementById("streaks-link").style.display="block"},hideStartProgressButtonOnHabits=function(){document.getElementById("go-to-progress-button").style.display="none"},showStartProgressButtonOnHabits=function(){document.getElementById("go-to-progress-button").style.display="flex"},filterDivs=function(e,t,n,r){if(null!=n&&""!=n)for(const i of e){var s=i.getAttribute(t);s==n&&r||s.indexOf(n)>=0&&!r||(i.style.display="none")}},setDivAppearanceBasedOnCompletion=function(e,t){putBorderBackgroundOrderBasedOnCompletion(e,t),null!=e.getAttribute("iscritical")&&"true"==e.getAttribute("iscritical")&&setDivAppearanceForCritical(e,t)},applyFilters=function(){var e=resetElementsOnNewHabitForm(),t=document.getElementById("text-filter").value,n=document.getElementById("date-filter").value;filterDivs(e,"progressDate",n,!0),filterDivs(e,"habitDescription",t,!1)},dateFilter=document.getElementById("date-filter");dateFilter.addEventListener("input",function(){applyFilters(),createMissingElementsForDate(this.value)});var textFilter=document.getElementById("text-filter");textFilter.addEventListener("input",function(){applyFilters()});var createMissingElementsForDate=function(e){var t=e.split("-"),n=new Date(t[0],(parseInt(t[1])-1).toString(),t[2],0,0,0,0);debugWrite("Creating missing progress elements for date:"+e.toString()+" time:"+n.toString()),addEmptyProgressBoxesOnNewDay(e,n)},minusOneToProgress=function(e){console.log("minus one"),parseInt(e.value)>0&&(e.value=(parseInt(e.value)-1).toString())},addOneToProgress=function(e){console.log("plus one"),e.value=(parseInt(e.value)+1).toString()},closeAdditionConfirmation=function(){document.getElementById("addition-message").style.display="none"},confirmAddition=function(e){document.getElementById("addition-message").style.display="flex";var t="closeAdditionConfirmation();document.getElementById("+e+").scrollIntoView();";document.getElementById("check-habit-button").setAttribute("onclick",t)},confirmSave=function(){document.getElementById("save-message").style.display="flex"},habitDOMToJson=function(e){var t={};return t.habitId=e.getAttribute("habitId"),t.isNegative=e.getAttribute("isNegative"),t.order=e.getAttribute("order"),t.habitDescription=e.getElementsByClassName("habit-description-definition")[0].value,t.target=parseInt(e.getElementsByClassName("habit-target-definition")[0].value),t.weekDay=e.getElementsByClassName("week-day-selection")[0].getAttribute("weekDay"),t.isTimerNecessary=document.getElementById("is-timer-necessary-"+t.habitId.toString()).checked.toString(),t.isSuspendableDuringOtherCases=document.getElementById("is-suspendable-in-other-cases-"+t.habitId.toString()).checked.toString(),t.isSuspendableDuringSickness=document.getElementById("is-suspendable-during-sickness-"+t.habitId.toString()).checked.toString(),t.isCritical=document.getElementById("is-critical-"+t.habitId.toString()).checked.toString(),t.timerInitialNumberOfMinutes=document.getElementById("initial-time"+t.habitId.toString()).value,t},progressDOMToJson=function(e){var t={};return t.id=e.getAttribute("id"),t.habitId=e.getAttribute("habitId"),t.habitDescription=e.getAttribute("habitDescription"),t.target=parseInt(e.getAttribute("target")),t.progressDate=e.getAttribute("progressDate"),t.isNew=e.getAttribute("isNew"),t.isNegative=e.getAttribute("isNegative"),t.isCritical=e.getAttribute("isCritical"),t.isSuspendableDuringSickness=e.getAttribute("isSuspendableDuringSickness"),t.isSuspendableDuringOtherCases=e.getAttribute("isSuspendableDuringOtherCases"),t.order=e.getAttribute("order")?e.getAttribute("order"):80,t.numberOfCompletions=parseInt(e.getElementsByClassName("number-of-completion")[0].value),t},launchAllWeekTables=function(e,t){document.getElementById("streaks-container").innerHTML='
Graphs will be shown after adding at least one habit.
Week summary will be shown after adding at least one habit.
',document.getElementById("no-week-summary").style.display="none";for(let n of t)launchHabitWeekTable(e,n)},launchAllCharts=function(e,t){document.getElementById("streaks-container").innerHTML='
Graphs will be shown after adding at least one habit.
',document.getElementById("no-streak").style.display="none";for(let n of t)launchHabitChart(e,n)},changeTabToProgress=function(){document.getElementById("habits-section").style.display="none",document.getElementById("progress-section").style.display="block",document.getElementById("graphs-section").style.display="none",document.getElementById("progress-menu").classList.add("active"),document.getElementById("habits-menu").classList.remove("active"),document.getElementById("graphs-menu").classList.remove("active")},changeTabToHabits=function(){document.getElementById("habits-section").style.display="block",document.getElementById("progress-section").style.display="none",document.getElementById("graphs-section").style.display="none",document.getElementById("progress-menu").classList.remove("active"),document.getElementById("habits-menu").classList.add("active"),document.getElementById("graphs-menu").classList.remove("active")},changeTabToSummaries=function(){reloadHabitProgressJournal().then(e=>{prepareSummaries(),launchAllWeekTables(dataArrays.progressArray,dataArrays.habitsArray),document.getElementById("habits-section").style.display="none",document.getElementById("progress-section").style.display="none",document.getElementById("graphs-section").style.display="block",document.getElementById("progress-menu").classList.remove("active"),document.getElementById("habits-menu").classList.remove("active"),document.getElementById("graphs-menu").classList.add("active"),subMenuGo("week-link")},e=>{console.log(e)})},changeTabToGraph=function(){changeTabToSummaries(),subMenuGo("streak-links")},launchHabitWeekTable=function(e,t){var n,r=prepareDataForHabitWeekTable(e,t);n=weekTable(r),buildWeekTableBox(n,t)},launchHabitChart=function(e,t){var n=prepareDataForHabitGraph(e,t),r=n.dataToShow,s=n.unitAccumulation,i=n.baseline;r.length>=1&&showGraphTab();var a=0,o=getNumberOfStreaks(r,i),l=r.length-1;if(l<0)return!1;var c=0;if(!(l>=0&&r[l]&&r[l].x))return!1;debugWrite("Launching Chart"),debugWrite(r[l].x.getDay()),(c=(r[l].x-r[0].x)/1e3/60/60/24)>0&&(a=Math.round(30*s/c)),buildGraphBox(a,s,o,t,r)},prepareDataForHabitGraph=function(e,t){var n=[],r=[],s=0;for(var i of e)i.habitId==t.habitId&&(s+=i.numberOfCompletions,n.push({x:new Date(i.progressDate),y:i.numberOfCompletions}),r.push({x:new Date(i.progressDate),y:i.target}));return n.sort(function(e,t){return e.x-t.x}),r.sort(function(e,t){return e.x-t.x}),{dataToShow:n,baseline:r,unitAccumulation:s}},prepareDataForHabitWeekTable=function(e,t){var n=[];for(var r of e)r.habitId==t.habitId&&(n[r.progressDate]=r.numberOfCompletions-r.target);return n},getNumberOfStreaks=function(e,t){for(var n=0,r=e.length-1;r>=0;r--){var s=e[r].x;if(s.getFullYear()!==currentDateTime.getFullYear()||s.getMonth()!==currentDateTime.getMonth()||s.getDate()!==currentDateTime.getDate()){if(e[r].y=t[r].y&&n++}return n},subMenuGo=function(e){window.scrollTo(0,0);var t=document.getElementById("journal-link"),n=document.getElementById("streaks-link"),r=document.getElementById("week-link"),s=document.getElementById("week-summary-container"),i=document.getElementById("streaks-container"),a=document.getElementById("journal-container-wrapper");switch(e){case"week-link":r.classList.add("selected-underline"),t.classList.remove("selected-underline"),n.classList.remove("selected-underline"),s.style.display="flex",i.style.display="none",a.style.display="none";break;case"streaks-link":launchAllCharts(dataArrays.progressArray,dataArrays.habitsArray),r.classList.remove("selected-underline"),t.classList.remove("selected-underline"),n.classList.add("selected-underline"),s.style.display="none",i.style.display="flex",a.style.display="none";break;case"journal-link":r.classList.remove("selected-underline"),t.classList.add("selected-underline"),n.classList.remove("selected-underline"),s.style.display="none",i.style.display="none",a.style.display="flex"}};