1let settingsOpen = false;
  2
  3let currentLemmaIndex = 0;
  4if (localStorage.getItem('startdate') != undefined) {
  5    currentLemmaIndex = Math.floor(new Date().getTime() / 1000 / 60 / 60 / 24) - localStorage.getItem('startdate');
  6    currentLemmaIndex += parseInt(localStorage.getItem('offset'));
  7} else {
  8    localStorage.setItem('startdate', Math.floor(new Date().getTime() / 1000 / 60 / 60 / 24));
  9    localStorage.setItem('offset', 0);
 10}
 11
 12
 13
 14
 15let listOfLemmas = []
 16
 17
 18function displayResult(parsedJSON) {
 19    var bestResult = parsedJSON.data[0]
 20    console.log(bestResult)
 21    // DOM modifications
 22    // Resetting divs
 23    document.getElementById("words").innerHTML = "";
 24    document.getElementById("senses").innerHTML = "";
 25    // Writing to those divs
 26    // Word Container Start
 27    for (var wordIndex in bestResult.japanese) {
 28        var wordcontainer = document.createElement("div");
 29        wordcontainer.className = "word-container";
 30        wordcontainer.id = "word-container-" + wordIndex;
 31        // Word div Start
 32        var worddiv = document.createElement("div");
 33        worddiv.className = "word";
 34        if (bestResult.japanese[wordIndex].word != undefined) {
 35            worddiv.innerHTML = bestResult.japanese[wordIndex].word;
 36        } else {
 37            worddiv.innerHTML = currentLemma;
 38        }
 39
 40        wordcontainer.appendChild(worddiv);
 41        // Word div End
 42        // Reading div Start
 43        var readingdiv = document.createElement("div");
 44        readingdiv.className = "reading";
 45        readingdiv.innerHTML = bestResult.japanese[wordIndex].reading;
 46        wordcontainer.appendChild(readingdiv);
 47        // Reading div End
 48        document.getElementById("words").appendChild(wordcontainer);
 49    }
 50    // Word Container End
 51    // Senses Container Start
 52    for (var sensesIndex in bestResult.senses) {
 53        var sensecontainer = document.createElement("div");
 54        sensecontainer.className = "sense-container";
 55        sensecontainer.id = "sense-container-" + sensesIndex;
 56        // Sense Type div Start
 57        var sensetypediv = document.createElement("div");
 58        sensetypediv.className = "sense-types";
 59        sensetypediv.innerHTML = bestResult.senses[sensesIndex].parts_of_speech[0]; // is a list but for some reason there is always only one element
 60        sensecontainer.appendChild(sensetypediv);
 61        // Sense Type div End
 62        // Sense Definitions div Start
 63        var definitionsdiv = document.createElement("div");
 64        definitionsdiv.className = "sense-definitions";
 65        definitionsdiv.innerHTML = bestResult.senses[sensesIndex].english_definitions[0]; // is a list but for some reason there is always only one element
 66        sensecontainer.appendChild(definitionsdiv);
 67        // Sense Definitions div End
 68        // Word Container End
 69        document.getElementById("senses").appendChild(sensecontainer);
 70    }
 71}
 72
 73// Get information on the currently selected lemma
 74function updateCurrentLemma() {
 75    document.getElementById("word-number").innerHTML = currentLemmaIndex + 1;
 76    currentLemma = listOfLemmas[currentLemmaIndex];
 77    const url = 'https://ontake.dev/daily-kanji/assets/datasets/building-dataset/jisho-dataset/' + currentLemma;
 78    $.ajax({
 79        url: url,
 80        success: function(result) {
 81            parsedJSON = JSON.parse(result)
 82            displayResult(parsedJSON)
 83        }
 84    });
 85}
 86
 87function updateOffset() {
 88    localStorage.setItem('offset', currentLemmaIndex - (Math.floor(new Date().getTime() / 1000 / 60 / 60 / 24) - localStorage.getItem('startdate')));
 89}
 90
 91// Previous lemma
 92function previousLemma() {
 93    currentLemmaIndex--;
 94    if (currentLemmaIndex < 0) {
 95        currentLemmaIndex = 0;
 96    }
 97    updateOffset()
 98    updateCurrentLemma();
 99}
100
101// Next lemma
102function nextLemma() {
103    currentLemmaIndex++;
104    updateOffset()
105    updateCurrentLemma();
106}
107
108// Update theme
109function updateTheme() {
110    if (localStorage.getItem('daily-kanji-theme') == undefined) {
111        localStorage.setItem('daily-kanji-theme', 0);
112    }
113    if (localStorage.getItem('daily-kanji-theme') == "0") {
114        document.documentElement.style.setProperty('--text-color', "white");
115        document.documentElement.style.setProperty('--bg-color-1', "#000000");
116        document.documentElement.style.setProperty('--bg-color-2', "#ffffff0f");
117        document.documentElement.style.setProperty('--border-color-1', "#ffffff38");
118        document.documentElement.style.setProperty('--scrollbar-color-1', "#ffffff");
119        document.documentElement.style.setProperty('--scrollbar-color-2', "#393939");
120        document.documentElement.style.setProperty('--invert-state', "0");
121    } else {
122        document.documentElement.style.setProperty('--text-color', "black");
123        document.documentElement.style.setProperty('--bg-color-1', "#ffffff");
124        document.documentElement.style.setProperty('--bg-color-2', "#0000000f");
125        document.documentElement.style.setProperty('--border-color-1', "#00000038");
126        document.documentElement.style.setProperty('--scrollbar-color-1', "#000000");
127        document.documentElement.style.setProperty('--scrollbar-color-2', "#c7c7c7");
128        document.documentElement.style.setProperty('--invert-state', "1");
129    }
130}
131
132// Theme toggle
133function themeToggle() {
134    if (localStorage.getItem('daily-kanji-theme') == "0") {
135        localStorage.setItem('daily-kanji-theme', 1);
136    } else {
137        localStorage.setItem('daily-kanji-theme', 0);
138    }
139    updateTheme();
140}
141
142// Update Start Date
143function updateStartDate() {
144    localStorage.setItem('startdate', document.getElementById("start-date-input").value);
145}
146
147// Open Settings
148function openSettings() {
149    if (!settingsOpen) {
150        var settingsDiv = document.createElement("div");
151        settingsDiv.id = "settings-container";
152        //Start Date
153        var startDateLabel = document.createElement("div");
154        startDateLabel.id = "start-date-label";
155        startDateLabel.innerHTML = "Start Date"
156        var startDateInput = document.createElement("input");
157        startDateInput.type = "number"
158        startDateInput.value = localStorage.getItem('startdate');
159        startDateInput.id = "start-date-input";
160        startDateInput.oninput = updateStartDate;
161        settingsDiv.appendChild(startDateLabel);
162        settingsDiv.appendChild(startDateInput);
163        //Disclaimer
164        var settingsDisclaimerLabel = document.createElement("div");
165        settingsDisclaimerLabel.id = "settings-disclaimer-label";
166        settingsDisclaimerLabel.innerHTML = "Please note that a refresh of the page is required to show changes.<br><br>Tip: To close this page click on the settings icon again."
167        settingsDiv.appendChild(settingsDisclaimerLabel);
168        //End
169        settingsDiv.id = "settings-container"
170        document.body.appendChild(settingsDiv);
171        settingsOpen = true;
172    } else {
173        document.getElementById("settings-container").remove()
174        settingsOpen = false;
175    }
176}
177
178updateTheme();
179
180document.getElementById("current-date").innerHTML = $.format.date(new Date(), 'ddd, MMMM d, yyyy');
181
182// Get list of lemmas
183const url = 'https://ontake.dev/daily-kanji/assets/datasets/listoflemmas.txt';
184$.ajax({
185    url: url,
186    success: function(result) {
187        listOfLemmas = result.split("\r\n");
188        updateCurrentLemma();
189    }
190});