diff --git a/tunictracker/tracker/static/tracker/assets/refresh.js b/tunictracker/tracker/static/tracker/assets/refresh.js index 53fb778..0e7873f 100644 --- a/tunictracker/tracker/static/tracker/assets/refresh.js +++ b/tunictracker/tracker/static/tracker/assets/refresh.js @@ -4,7 +4,7 @@ var current_seed = Number.MAX_VALUE; var current_checks = 0; var current_entrances = 0; var current_hints = 0; -var current_codes = { total: 0, codes: { name: "", distance: 0 } }; +var current_codes = 0; var total_checks = 0; var total_entrances = 0; @@ -80,27 +80,6 @@ function notices_ur_debug() { document.getElementById("debug-block").classList.toggle("hidden"); } -async function get_updated_filepath() { - fetch(`${document.URL}get/settings`) - .then((response) => response.json()) - .then( - (data) => { - backend_filepath = JSON.parse(JSON.stringify(data)); - fetch(`${server_address}settings`, { - method: "post", - headers: { "Content-type": "application/json" }, - body: JSON.stringify({ - secretLegend: backend_filepath, - address: ":8000", - }), - }); - }, - (error) => { - console.log(error); - } - ); -} - async function get_updated_server_address() { fetch(`${document.URL}get/address`) .then( @@ -124,21 +103,15 @@ async function get_updated_server_address() { } async function refresh_overview() { - fetch(`${server_address}overview`) - .then((response) => response.json()) - .then((data) => { - // Attempt to receive response JSON. - return data; - }); + const response = await fetch(`${server_address}overview`); + const data = await response.json(); + return data; } async function refresh_hints() { - fetch(`${server_address}hints`) - .then((response) => response.json()) - .then((data) => { - // Attempt to receive response JSON. - return data; - }); + const response = await fetch(`${server_address}hints`); + const data = await response.json(); + return data; } async function refresh_checks() { @@ -148,10 +121,12 @@ async function refresh_checks() { } async function refresh_entrances() { - fetch(`${server_address}doors`).then((response) => response.json()); + const response = await fetch(`${server_address}doors`); + const data = await response.json(); + return data; } -async function update_overview(overview) { +async function update_overview(overview, changed_scene, changed_codes) { let overview_checks_title = document .getElementById("overview-totals") .querySelector(".overview-checks"); @@ -160,19 +135,227 @@ async function update_overview(overview) { .querySelector(".overview-entrances"); // Set content to updated data. - overview_checks_title.textContent = `Checks: ${current_checks}/${total_checks}`; - overview_entrances_title.textContent = `Entrances: ${current_entrances}/${total_entrances}`; + overview_checks_title.textContent = `Checks: ${overview.items}/${total_checks}`; + overview_entrances_title.textContent = `Entrances: ${ + overview.entrances * 2 + }/${total_entrances}`; + + current_seed = overview.seed; + current_scene = overview.scene; + current_checks = overview.items; + current_entrances = overview.entrances; + current_hints = overview.hints; + current_codes = Object.keys(overview.codes).length; + + if (changed_scene) { + await update_scene(overview.scene); + } + if (changed_codes) { + console.log(Object.keys(overview.codes).length); + await update_codes(overview.codes); + } } async function update_codes(codes) { + // Codes that are always active const default_cross_codes = cross_codes.Default; + + // One time codes independent of scene const global_cross_codes = cross_codes.Global; + + let new_cross_codes_block_list = document + .getElementById("codes-list") + .cloneNode(true); + let cross_codes_block_list_item = document + .getElementById("codes-list") + .firstElementChild.cloneNode(true); + new_cross_codes_block_list.innerHTML = ""; + new_cross_codes_block_list.appendChild( + cross_codes_block_list_item.cloneNode(true) + ); + cross_codes_block_list_item.classList.remove("hidden"); + + Object.keys(default_cross_codes).forEach((code) => { + cross_codes_block_list_item.querySelector( + ".codes-list-item-title" + ).textContent = code; + cross_codes_block_list_item.querySelector( + ".codes-list-item-code" + ).textContent = default_cross_codes[code] + .replace(/U/g, "⬆️") + .replace(/R/g, "➡️") + .replace(/D/g, "⬇️") + .replace(/L/g, "⬅️"); + new_cross_codes_block_list.appendChild( + cross_codes_block_list_item.cloneNode(true) + ); + }); + Object.keys(global_cross_codes).forEach((code) => { + cross_codes_block_list_item.querySelector( + ".codes-list-item-title" + ).textContent = code; + cross_codes_block_list_item.querySelector( + ".codes-list-item-code" + ).textContent = global_cross_codes[code] + .replace(/U/g, "⬆️") + .replace(/R/g, "➡️") + .replace(/D/g, "⬇️") + .replace(/L/g, "⬅️"); + new_cross_codes_block_list.appendChild( + cross_codes_block_list_item.cloneNode(true) + ); + }); + Object.keys(codes).forEach((code) => { + cross_codes_block_list_item.querySelector( + ".codes-list-item-title" + ).textContent = code; + cross_codes_block_list_item.querySelector( + ".codes-list-item-code" + ).textContent = cross_codes[current_scene][code] + .replace(/U/g, "⬆️") + .replace(/R/g, "➡️") + .replace(/D/g, "⬇️") + .replace(/L/g, "⬅️"); + new_cross_codes_block_list.appendChild( + cross_codes_block_list_item.cloneNode(true) + ); + }); + console.log(codes); + document.getElementById("codes-list").replaceWith(new_cross_codes_block_list); } -async function update_summary() {} +async function apply_summary_colors(summary) { + // Apply color coding to summary block + summary.element.classList.remove( + "from-highlight-both-light", + "from-highlight-checks-light", + "from-highlight-entrances-light", + "from-highlight-empty-light", + "from-highlight-undiscovered-light", + "to-highlight-both-dark", + "to-highlight-checks-dark", + "to-highlight-entrances-dark", + "to-highlight-empty-dark", + "to-highlight-undiscovered-dark", + "text-highlight-both-text", + "text-highlight-checks-text", + "text-highlight-entrances-text", + "text-highlight-empty-text", + "text-highlight-undiscovered-text" + ); + + console.log(summary); + if (summary.checks_total > 0 && summary.entrances_total > 0) { + if ( + summary.checks_collected == summary.checks_total && + summary.entrances_found == summary.entrances_total + ) { + summary.element.classList.add( + "from-highlight-empty-light", + "to-highlight-empty-dark", + "text-highlight-empty-text" + ); + } else if ( + summary.checks_collected <= 0 && + summary.entrances_found <= 0 && + summary.entrances_total > 0 + ) { + summary.element.classList.add( + "from-highlight-undiscovered-light", + "to-highlight-undiscovered-dark", + "text-highlight-undiscovered-text" + ); + } else if (summary.checks_collected >= summary.checks_total) { + summary.element.classList.add( + "from-highlight-checks-light", + "to-highlight-checks-dark", + "text-highlight-checks-text" + ); + } else if (summary.entrances_found >= summary.entrances_total) { + summary.element.classList.add( + "from-highlight-entrances-light", + "to-highlight-entrances-dark", + "text-highlight-entrances-text" + ); + } else { + summary.element.classList.add( + "from-highlight-both-light", + "to-highlight-both-dark", + "text-highlight-both-text" + ); + } + } +} + +async function update_summary(updates) { + if ("checks" in updates) { + const summary_checks = document + .getElementById("summary-list") + .querySelector(`[data-scene="${updates.scene}"]`) + .querySelector(".summary-checks"); + summary_checks.textContent = `Checks: ${updates.checks}/${summary_checks.dataset.checksTotal}`; + summary_checks.dataset.checksUndiscovered = updates.checks; + apply_summary_colors({ + element: document + .getElementById("summary-list") + .querySelector(`[data-scene="${updates.scene}"]`).firstElementChild, + checks_collected: updates.checks, + checks_total: summary_checks.dataset.checksTotal, + entrances_found: document + .getElementById("summary-list") + .querySelector(`[data-scene="${updates.scene}"]`) + .querySelector(".summary-entrances").dataset.entrancesUndiscovered, + entrances_total: document + .getElementById("summary-list") + .querySelector(`[data-scene="${updates.scene}"]`) + .querySelector(".summary-entrances").dataset.entrancesTotal, + }); + } else if ("entrances" in updates) { + console.log( + `scene: ${document + .getElementById("summary-list") + .querySelector(`[data-scene="${updates.scene}"]`)}\n${ + updates.entrances + }` + ); + const summary_entrances = document + .getElementById("summary-list") + .querySelector(`[data-scene="${updates.scene}"]`) + .querySelector(".summary-entrances"); + summary_entrances.textContent = `Entrances: ${updates.entrances}/${summary_entrances.dataset.entrancesTotal}`; + summary_entrances.dataset.entrancesUndiscovered = updates.entrances; + apply_summary_colors({ + element: document + .getElementById("summary-list") + .querySelector(`[data-scene="${updates.scene}"]`).firstElementChild, + checks_collected: document + .getElementById("summary-list") + .querySelector(`[data-scene="${updates.scene}"]`) + .querySelector(".summary-checks").dataset.checksUndiscovered, + checks_total: document + .getElementById("summary-list") + .querySelector(`[data-scene="${updates.scene}"]`) + .querySelector(".summary-checks").dataset.checksTotal, + entrances_found: updates.entrances, + entrances_total: summary_entrances.dataset.entrancesTotal, + }); + } else { + console.log("What the heck is this"); + } +} async function update_checks(checks) { total_checks = checks.total; + + let new_breakdown_block_checks_list = document + .getElementById("breakdown-list") + .firstElementChild.querySelector(".breakdown-block-checks-list") + .cloneNode(true); + let breakdown_block_checks_list_item = document + .getElementById("breakdown-list") + .firstElementChild.querySelector(".breakdown-block-checks-list") + .firstElementChild.cloneNode(true); + // Create new lists with updated data. let breakdown_list = Array.from( document.getElementById("breakdown-list").children @@ -181,47 +364,129 @@ async function update_checks(checks) { // Create variables for element pointers. let scene_title = scene.querySelector(".breakdown-block-title").textContent; if (scene_title) { - scene.querySelector( - ".breakdown-block-checks-title" - ).textContent = `Checks: ${checks.scenes[scene_title].collected}/${checks.scenes[scene_title].total}`; + const scene_checks = parseInt( + scene.querySelector(".breakdown-block-checks-title").dataset.checks + ); + if (scene_checks != checks.scenes[scene_title].collected) { + scene.querySelector(".breakdown-block-checks-title").dataset.checks = + scene_checks; + update_summary({ + scene: scene_title, + checks: checks.scenes[scene_title].collected, + }); + scene.querySelector( + ".breakdown-block-checks-title" + ).textContent = `Checks: ${checks.scenes[scene_title].collected}/${checks.scenes[scene_title].total}`; - let new_breakdown_block_checks_list = scene - .querySelector(".breakdown-block-checks-list") - .cloneNode(true); - let breakdown_block_checks_list_item = scene - .querySelector(".breakdown-block-checks-list") - .firstElementChild.cloneNode(true); - - Object.keys(checks.scenes[scene_title].checks).forEach((check) => { - if (!check.name) { - breakdown_block_checks_list_item.textContent = `❌ ${check}`; - new_breakdown_block_checks_list.appendChild( - breakdown_block_checks_list_item.cloneNode(true) - ); - } - }); - document - .getElementById("breakdown-list") - .querySelector(`[data-breakdown-scene="${scene_title}"]`) - .querySelector(".breakdown-block-checks-list").innerHTML = ""; - document - .getElementById("breakdown-list") - .querySelector(`[data-breakdown-scene="${scene_title}"]`) - .querySelector(".breakdown-block-checks-list") - .replaceWith(new_breakdown_block_checks_list); + new_breakdown_block_checks_list.innerHTML = ""; + breakdown_block_checks_list_item.classList.remove("hidden"); + Object.keys(checks.scenes[scene_title].checks).forEach((check) => { + if (checks.scenes[scene_title].checks[check].name == "") { + breakdown_block_checks_list_item.textContent = `❌ ${check}`; + new_breakdown_block_checks_list.appendChild( + breakdown_block_checks_list_item.cloneNode(true) + ); + } + }); + document + .getElementById("breakdown-list") + .querySelector(`[data-breakdown-scene="${scene_title}"]`) + .querySelector(".breakdown-block-checks-list").innerHTML = ""; + document + .getElementById("breakdown-list") + .querySelector(`[data-breakdown-scene="${scene_title}"]`) + .querySelector(".breakdown-block-checks-list") + .replaceWith(new_breakdown_block_checks_list.cloneNode(true)); + } } }); - current_checks = checks.collected; - return; + // current_checks = checks.collected; } async function update_entrances(entrances) { - total_checks = entrances.total; + total_entrances = entrances.total; + + let new_breakdown_block_entrances_list = document + .getElementById("breakdown-list") + .firstElementChild.querySelector(".breakdown-block-entrances-list") + .cloneNode(true); + let breakdown_block_entrances_list_item = document + .getElementById("breakdown-list") + .firstElementChild.querySelector(".breakdown-block-entrances-list") + .firstElementChild.cloneNode(true); + let new_breakdown_block_mapped_list = document + .getElementById("breakdown-list") + .firstElementChild.querySelector(".breakdown-block-mapped-list") + .cloneNode(true); + let breakdown_block_mapped_list_item = document + .getElementById("breakdown-list") + .firstElementChild.querySelector(".breakdown-block-mapped-list") + .firstElementChild.cloneNode(true); // Create new lists with updated data. - Object.keys(current_entrances_list).forEach((scene) => { + let breakdown_list = Array.from( + document.getElementById("breakdown-list").children + ); + breakdown_list.forEach((scene) => { // Create variables for element pointers. + let scene_title = scene.querySelector(".breakdown-block-title").textContent; + if (scene_title) { + const scene_entrances = parseInt( + scene.querySelector(".breakdown-block-entrances-title").dataset + .entrances + ); + if (scene_entrances != entrances.scenes[scene_title].found) { + scene.querySelector(".breakdown-block-checks-title").dataset.entrances = + scene_entrances; + update_summary({ + scene: scene_title, + entrances: entrances.scenes[scene_title].found, + }); + scene.querySelector( + ".breakdown-block-entrances-title" + ).textContent = `Entrances: ${entrances.scenes[scene_title].found}/${entrances.scenes[scene_title].total}`; + + new_breakdown_block_entrances_list.innerHTML = ""; + breakdown_block_entrances_list_item.classList.remove("hidden"); + new_breakdown_block_mapped_list.innerHTML = ""; + breakdown_block_mapped_list_item.classList.remove("hidden"); + + Object.keys(entrances.scenes[scene_title].doors).forEach((entrance) => { + if (entrances.scenes[scene_title].doors[entrance].door == "") { + breakdown_block_entrances_list_item.textContent = `❌ ${entrance}`; + new_breakdown_block_entrances_list.appendChild( + breakdown_block_entrances_list_item.cloneNode(true) + ); + } else { + breakdown_block_mapped_list_item.textContent = `✔️ ${entrance} -> ${entrances.scenes[scene_title].doors[entrance].door}`; + breakdown_block_mapped_list_item.id = `${entrance}-mapped`; + breakdown_block_mapped_list_item.dataset.scene = + entrances.scenes[scene_title].doors[entrance].scene; + new_breakdown_block_mapped_list.appendChild( + breakdown_block_mapped_list_item.cloneNode(true) + ); + } + }); + document + .getElementById("breakdown-list") + .querySelector(`[data-breakdown-scene="${scene_title}"]`) + .querySelector(".breakdown-block-entrances-list").innerHTML = ""; + document + .getElementById("breakdown-list") + .querySelector(`[data-breakdown-scene="${scene_title}"]`) + .querySelector(".breakdown-block-entrances-list") + .replaceWith(new_breakdown_block_entrances_list.cloneNode(true)); + document + .getElementById("breakdown-list") + .querySelector(`[data-breakdown-scene="${scene_title}"]`) + .querySelector(".breakdown-block-mapped-list").innerHTML = ""; + document + .getElementById("breakdown-list") + .querySelector(`[data-breakdown-scene="${scene_title}"]`) + .querySelector(".breakdown-block-mapped-list") + .replaceWith(new_breakdown_block_mapped_list.cloneNode(true)); + } + } }); - return; } async function update_hints(hints) { @@ -231,405 +496,456 @@ async function update_hints(hints) { async function update_scene(scene) { Array.from(document.getElementById("breakdown-list").children).forEach( (breakdown) => { - if ( - breakdown.querySelector(".breakdown-block-title").textContent == scene - ) { - breakdown.classList.remove("hidden"); - breakdown.dataset.current = "true"; - } else if (breakdown.dataset.current == "true") { - breakdown.dataset.current = "false"; - breakdown.classList.add("hidden"); + const breakdown_title = breakdown.querySelector( + ".breakdown-block-title" + ).textContent; + if (breakdown_title == scene) { + document + .getElementById("breakdown-list") + .querySelector(`[data-breakdown-scene="${scene}"]`) + .classList.remove("hidden"); + document + .getElementById("breakdown-list") + .querySelector(`[data-breakdown-scene="${scene}"]`).dataset.current = + "true"; + document + .getElementById("breakdown-list") + .querySelector(`[data-breakdown-scene="${scene}"]`) + .classList.add("order-last"); + } else { + document + .getElementById("breakdown-list") + .querySelector( + `[data-breakdown-scene="${breakdown_title}"]` + ).dataset.current = "false"; + + document + .getElementById("breakdown-list") + .querySelector(`[data-breakdown-scene="${breakdown_title}"]`) + .classList.add("hidden"); + document + .getElementById("breakdown-list") + .querySelector(`[data-breakdown-scene="${breakdown_title}"]`) + .classList.remove("order-last"); } } ); Array.from( document.getElementById("summary-list").firstElementChild.children ).forEach((summary) => { - if (summary.dataset.scene == scene) { - summary.classList.add("hidden"); - } else if (!(summary.dataset.scene == "")) { - summary.classList.remove("hidden"); + const summary_scene = summary.dataset.scene; + if (summary_scene == scene) { + document + .getElementById("summary-list") + .firstElementChild.querySelector(`[data-scene="${scene}"]`) + .classList.add("hidden"); + } else if (!(summary_scene == "")) { + document + .getElementById("summary-list") + .firstElementChild.querySelector(`[data-scene="${summary_scene}"]`) + .classList.remove("hidden"); } }); - current_scene = scene; +} + +async function perform_updates( + changed_seed, + changed_checks, + changed_entrances, + changed_hints +) { + if (changed_seed) { + console.log("Seed changed."); + update_checks(await refresh_checks()); + update_entrances(await refresh_entrances()); + update_hints(await refresh_hints()); + } else { + if (changed_checks) { + refresh_checks().then((data) => update_checks(data)); + } + if (changed_entrances) { + refresh_entrances().then((data) => update_entrances(data)); + } + if (changed_hints) { + refresh_hints().then((data) => update_hints(data)); + } + } } async function refresh_elements() { - fetch(`${server_address}overview`) - .then((response) => response.json()) - .then( - (data) => { - // Attempt to receive response JSON. - const overview = JSON.parse(JSON.stringify(data)); - document.getElementById("status-block").classList.add("hidden"); - if (overview.seed != current_seed) { - current_seed = overview.seed; - current_scene = overview.scene; - current_checks = overview.items; - current_entrances = overview.entrances; - current_hints = overview.hints; - current_codes = overview.codes.length; - refresh_checks().then((data) => update_checks(data)); - update_entrances(refresh_entrances()); - update_hints(refresh_hints()); - } else { - if (overview.scene != current_scene) { - update_scene(overview.scene); - } - if (overview.items != current_checks) { - refresh_checks().then((data) => update_checks(data)); - } - if (overview.entraces != current_entrances) { - update_entrances(refresh_entrances); - } - if (overview.hints != current_hints) { - update_hints(refresh_hints); - } - } + const overview = await refresh_overview(); - // let summary_block = document - // .getElementById("summary-list") - // .firstElementChild.firstElementChild.cloneNode(true); - // let breakdown_block = document - // .getElementById("breakdown-list") - // .firstElementChild.cloneNode(true); - // breakdown_block.id = ""; - // breakdown_block.classList.remove("hidden"); + document.getElementById("status-block").classList.add("hidden"); - // let debug_item = document - // .getElementById("debug-block") - // .querySelector(".debug-list") - // .firstElementChild.cloneNode(true); - // debug_item.classList.remove("hidden"); - // let new_breakdown_list = document - // .getElementById("breakdown-list") - // .cloneNode(true); - // let new_summary_list = document - // .getElementById("summary-list") - // .cloneNode(true); - // let new_debug_block = document - // .getElementById("debug-block") - // .querySelector(".debug-list") - // .cloneNode(true); - // let current_open_breakdown = ""; - // Array.from(new_breakdown_list.children).forEach((scene) => { - // if (!Array.from(scene.classList).includes("hidden")) { - // current_open_breakdown = scene.id; - // } - // }); + const changed_seed = overview.seed != current_seed; + const changed_scene = overview.scene != current_scene; + const changed_checks = overview.items != current_checks; + const changed_entrances = overview.entrances != current_entrances; + const changed_codes = Object.keys(overview.codes).length != current_codes; + const changed_hints = overview.hints != current_hints; + const any_change = + changed_seed || + changed_scene || + changed_checks || + changed_entrances || + changed_codes || + changed_hints; - // Clear out the current lists. - // new_breakdown_list.innerHTML = ""; - // new_summary_list.firstElementChild.innerHTML = ""; - // new_debug_block.innerHTML = ""; - - // Create new lists with updated data. - // Object.keys(current_entrances_list).forEach((scene) => { - // // Create variables for element pointers. - // summary_block = document - // .getElementById("summary-list") - // .firstElementChild.firstElementChild.cloneNode(true); - // summary_block.classList.remove("hidden"); - // let summary_title = summary_block.querySelector(".summary-title"); - // let summary_checks = summary_block.querySelector(".summary-checks"); - // let summary_entrances = - // summary_block.querySelector(".summary-entrances"); - - // breakdown_block = document - // .getElementById("breakdown-list") - // .firstElementChild.cloneNode(true); - // let breakdown_block_title = breakdown_block.querySelector( - // ".breakdown-block-title" - // ); - // let breakdown_block_checks_title = breakdown_block.querySelector( - // ".breakdown-block-checks-title" - // ); - // let new_breakdown_block_checks_list = breakdown_block - // .querySelector(".breakdown-block-checks-list") - // .cloneNode(true); - // let breakdown_block_checks_list_item = breakdown_block - // .querySelector(".breakdown-block-checks-list") - // .firstElementChild.cloneNode(true); - // let breakdown_block_entrances_title = breakdown_block.querySelector( - // ".breakdown-block-entrances-title" - // ); - // let new_breakdown_block_entrances_list = breakdown_block - // .querySelector(".breakdown-block-entrances-list") - // .cloneNode(true); - // let breakdown_block_entrances_list_item = breakdown_block - // .querySelector(".breakdown-block-entrances-list") - // .firstElementChild.cloneNode(true); - // let new_breakdown_block_mapped_list = breakdown_block - // .querySelector(".breakdown-block-mapped-list") - // .cloneNode(true); - // let breakdown_block_mapped_list_item = breakdown_block - // .querySelector(".breakdown-block-mapped-list") - // .firstElementChild.cloneNode(true); - - // // Clear out current list content. - // new_breakdown_block_checks_list.innerHTML = ""; - // new_breakdown_block_entrances_list.innerHTML = ""; - // new_breakdown_block_mapped_list.innerHTML = ""; - // new_breakdown_block_checks_list.appendChild( - // breakdown_block_checks_list_item.cloneNode(true) - // ); - // breakdown_block_checks_list_item.classList.remove("hidden"); - // new_breakdown_block_entrances_list.appendChild( - // breakdown_block_entrances_list_item.cloneNode(true) - // ); - // breakdown_block_entrances_list_item.classList.remove("hidden"); - // new_breakdown_block_mapped_list.appendChild( - // breakdown_block_mapped_list_item.cloneNode(true) - // ); - // breakdown_block_mapped_list_item.classList.remove("hidden"); - - // // Create variables for commonly used values. - // let scene_checks_undiscovered = 0; - // // all_items[scene]; - // let scene_checks_total = 0; //all_scenes[scene].Totals.Checks.Total; - // let scene_entrances_undiscovered = 0; - // // all_scenes[scene].Totals.Entrances.Undiscovered; - // let scene_entrances_total = 0; //all_scenes[scene].Totals.Entrances.Total; - // // let scene_has_codes = Object.keys(cross_codes).includes(scene); - - // // Set textContent. - // summary_title.textContent = scene; - // summary_checks.textContent = `Checks: ${scene_checks_undiscovered}/${scene_checks_total}`; - // summary_checks.dataset.checksUndiscovered = scene_checks_undiscovered; - // summary_checks.dataset.checksTotal = scene_checks_undiscovered; - // summary_entrances.textContent = `Entrances: ${scene_entrances_undiscovered}/${scene_entrances_total}`; - // summary_entrances.dataset.entrancesUndiscovered = - // scene_entrances_undiscovered; - // summary_entrances.dataset.entrancesTotal = scene_entrances_total; - // breakdown_block_title.textContent = scene; - // breakdown_block_checks_title.textContent = `Checks: ${all_scenes[scene].Totals.Checks.Undiscovered}/${all_scenes[scene].Totals.Checks.Total}`; - // breakdown_block_entrances_title.textContent = `Entrances: ${all_scenes[scene].Totals.Entrances.Undiscovered}/${all_scenes[scene].Totals.Entrances.Total}`; - - // // Create checks, entrances, mapped entrances, and cross code lists. - // Object.keys(all_scenes[scene].Checks).forEach((check) => { - // if (!all_scenes[scene].Checks[check]) { - // breakdown_block_checks_list_item.textContent = `❌ ${check}`; - // new_breakdown_block_checks_list.appendChild( - // breakdown_block_checks_list_item.cloneNode(true) - // ); - // } - // }); - // Object.keys(all_scenes[scene].Entrances).forEach((entrances) => { - // if (all_scenes[scene].Entrances[entrances].Door == "") { - // breakdown_block_entrances_list_item.textContent = `❌ ${entrances}`; - // new_breakdown_block_entrances_list.appendChild( - // breakdown_block_entrances_list_item.cloneNode(true) - // ); - // } else { - // breakdown_block_mapped_list_item.textContent = `✔️ ${entrances} -> ${all_scenes[scene].Entrances[entrances].Door}`; - // breakdown_block_mapped_list_item.id = `${entrances}-mapped`; - // breakdown_block_mapped_list_item.dataset.scene = - // all_scenes[scene].Entrances[entrances].Scene; - // new_breakdown_block_mapped_list.appendChild( - // breakdown_block_mapped_list_item.cloneNode(true) - // ); - // } - // }); - - // // Apply color coding to summary block - // summary_block.firstElementChild.classList.remove( - // "from-highlight-both-light", - // "from-highlight-checks-light", - // "from-highlight-entrances-light", - // "from-highlight-empty-light", - // "from-highlight-undiscovered-light", - // "to-highlight-both-dark", - // "to-highlight-checks-dark", - // "to-highlight-entrances-dark", - // "to-highlight-empty-dark", - // "to-highlight-undiscovered-dark", - // "text-highlight-both-text", - // "text-highlight-checks-text", - // "text-highlight-entrances-text", - // "text-highlight-empty-text", - // "text-highlight-undiscovered-text" - // ); - // if ( - // scene_checks_undiscovered > 0 && - // scene_entrances_undiscovered > 0 - // ) { - // if ( - // scene_checks_total == scene_checks_undiscovered && - // scene_entrances_total == scene_entrances_undiscovered - // ) { - // summary_block.firstElementChild.classList.add( - // "from-highlight-undiscovered-light", - // "to-highlight-undiscovered-dark", - // "text-highlight-undiscovered-text" - // ); - // } else { - // summary_block.firstElementChild.classList.add( - // "from-highlight-both-light", - // "to-highlight-both-dark", - // "text-highlight-both-text" - // ); - // } - // } else if (scene_checks_undiscovered > 0) { - // summary_block.firstElementChild.classList.add( - // "from-highlight-checks-light", - // "to-highlight-checks-dark", - // "text-highlight-checks-text" - // ); - // } else if (scene_entrances_undiscovered > 0) { - // summary_block.firstElementChild.classList.add( - // "from-highlight-entrances-light", - // "to-highlight-entrances-dark", - // "text-highlight-entrances-text" - // ); - // } else { - // summary_block.firstElementChild.classList.add( - // "from-highlight-empty-light", - // "to-highlight-empty-dark", - // "text-highlight-empty-text" - // ); - // } - - // // Replace lists - // breakdown_block - // .querySelector(".breakdown-block-checks-list") - // .replaceWith(new_breakdown_block_checks_list); - // breakdown_block - // .querySelector(".breakdown-block-entrances-list") - // .replaceWith(new_breakdown_block_entrances_list); - // breakdown_block - // .querySelector(".breakdown-block-mapped-list") - // .replaceWith(new_breakdown_block_mapped_list); - - // breakdown_block.id = `${ - // breakdown_block.querySelector(".breakdown-block-title").textContent - // }-breakdown`; - // breakdown_block.classList.add("hidden"); - - // // Append relevant elements to lists. - // if (current_open_breakdown == breakdown_block.id) { - // breakdown_block.classList.remove("hidden"); - // } - // if (scene == current_scene_name) { - // summary_block.classList.add("hidden"); - // breakdown_block.classList.remove("hidden"); - // document - // .getElementById("breakdown-current") - // .firstElementChild.replaceWith(breakdown_block.cloneNode(true)); - // breakdown_block.classList.add("hidden"); - // } else if ( - // scene_checks_undiscovered <= 0 && - // scene_entrances_total <= 0 - // ) { - // summary_block.classList.add("hidden"); - // } - // if (document.getElementById("hideDone").checked) { - // if ( - // scene_checks_undiscovered <= 0 && - // scene_entrances_undiscovered <= 0 - // ) { - // summary_block.classList.add("hidden"); - // } - // } - // summary_block.dataset.scene = scene; - // new_summary_list.firstElementChild.appendChild( - // summary_block.cloneNode(true) - // ); - // new_breakdown_list.appendChild(breakdown_block.cloneNode(true)); - // }); - // let new_cross_codes_block_list = document - // .getElementById("codes-list") - // .cloneNode(true); - // let cross_codes_block_list_item = document - // .getElementById("codes-list") - // .firstElementChild.cloneNode(true); - // new_cross_codes_block_list.innerHTML = ""; - - // Object.keys(default_cross_codes).forEach((code) => { - // cross_codes_block_list_item.querySelector( - // ".codes-list-item-title" - // ).textContent = code; - // cross_codes_block_list_item.querySelector( - // ".codes-list-item-code" - // ).textContent = default_cross_codes[code] - // .replace(/U/g, "⬆️") - // .replace(/R/g, "➡️") - // .replace(/D/g, "⬇️") - // .replace(/L/g, "⬅️"); - // new_cross_codes_block_list.appendChild( - // cross_codes_block_list_item.cloneNode(true) - // ); - // }); - // Object.keys(global_cross_codes).forEach((code) => { - // cross_codes_block_list_item.querySelector( - // ".codes-list-item-title" - // ).textContent = code; - // cross_codes_block_list_item.querySelector( - // ".codes-list-item-code" - // ).textContent = global_cross_codes[code] - // .replace(/U/g, "⬆️") - // .replace(/R/g, "➡️") - // .replace(/D/g, "⬇️") - // .replace(/L/g, "⬅️"); - // if (cross_codes_entered.Global[code]) { - // cross_codes_block_list_item.classList.add("hidden"); - // } else { - // cross_codes_block_list_item.classList.remove("hidden"); - // } - // new_cross_codes_block_list.appendChild( - // cross_codes_block_list_item.cloneNode(true) - // ); - // }); - // if (!(typeof cross_codes[current_scene_name] === "undefined")) { - // Object.keys(cross_codes[current_scene_name]).forEach((code) => { - // cross_codes_block_list_item.querySelector( - // ".codes-list-item-title" - // ).textContent = code; - // cross_codes_block_list_item.querySelector( - // ".codes-list-item-code" - // ).textContent = cross_codes[current_scene_name][code] - // .replace(/U/g, "⬆️") - // .replace(/R/g, "➡️") - // .replace(/D/g, "⬇️") - // .replace(/L/g, "⬅️"); - // if (cross_codes_entered[current_scene_name][code]) { - // cross_codes_block_list_item.classList.add("hidden"); - // } else { - // cross_codes_block_list_item.classList.remove("hidden"); - // } - // new_cross_codes_block_list.appendChild( - // cross_codes_block_list_item.cloneNode(true) - // ); - // }); - // } - // document - // .getElementById("codes-list") - // .replaceWith(new_cross_codes_block_list); - - // // Object.keys(debug_info).forEach((item) => { - // // debug_item.querySelector( - // // ".debug-item" - // // ).textContent = `${item}: ${debug_info[item]}`; - // // new_debug_block.appendChild(debug_item.cloneNode(true)); - // // }); - - // // Replace with new data. - // document - // .getElementById("summary-list") - // .replaceWith(new_summary_list.cloneNode(true)); - // document - // .getElementById("breakdown-list") - // .replaceWith(new_breakdown_list.cloneNode(true)); - // // document - // // .getElementById("debug-block") - // // .querySelector(".debug-list") - // // .replaceWith(new_debug_block.cloneNode(true)); - }, - (error) => { - document.getElementById("status-block").classList.remove("hidden"); - get_updated_server_address(); - return error; - } + if (any_change) { + await perform_updates( + changed_seed, + changed_checks, + changed_entrances, + changed_hints ); + update_overview(overview, changed_scene, changed_codes); + } + // refresh_overview().then( + // (overview) => { + + // let summary_block = document + // .getElementById("summary-list") + // .firstElementChild.firstElementChild.cloneNode(true); + // let breakdown_block = document + // .getElementById("breakdown-list") + // .firstElementChild.cloneNode(true); + // breakdown_block.id = ""; + // breakdown_block.classList.remove("hidden"); + + // let debug_item = document + // .getElementById("debug-block") + // .querySelector(".debug-list") + // .firstElementChild.cloneNode(true); + // debug_item.classList.remove("hidden"); + // let new_breakdown_list = document + // .getElementById("breakdown-list") + // .cloneNode(true); + // let new_summary_list = document + // .getElementById("summary-list") + // .cloneNode(true); + // let new_debug_block = document + // .getElementById("debug-block") + // .querySelector(".debug-list") + // .cloneNode(true); + // let current_open_breakdown = ""; + // Array.from(new_breakdown_list.children).forEach((scene) => { + // if (!Array.from(scene.classList).includes("hidden")) { + // current_open_breakdown = scene.id; + // } + // }); + + // Clear out the current lists. + // new_breakdown_list.innerHTML = ""; + // new_summary_list.firstElementChild.innerHTML = ""; + // new_debug_block.innerHTML = ""; + + // Create new lists with updated data. + // Object.keys(current_entrances_list).forEach((scene) => { + // // Create variables for element pointers. + // summary_block = document + // .getElementById("summary-list") + // .firstElementChild.firstElementChild.cloneNode(true); + // summary_block.classList.remove("hidden"); + // let summary_title = summary_block.querySelector(".summary-title"); + // let summary_checks = summary_block.querySelector(".summary-checks"); + // let summary_entrances = + // summary_block.querySelector(".summary-entrances"); + + // breakdown_block = document + // .getElementById("breakdown-list") + // .firstElementChild.cloneNode(true); + // let breakdown_block_title = breakdown_block.querySelector( + // ".breakdown-block-title" + // ); + // let breakdown_block_checks_title = breakdown_block.querySelector( + // ".breakdown-block-checks-title" + // ); + // let new_breakdown_block_checks_list = breakdown_block + // .querySelector(".breakdown-block-checks-list") + // .cloneNode(true); + // let breakdown_block_checks_list_item = breakdown_block + // .querySelector(".breakdown-block-checks-list") + // .firstElementChild.cloneNode(true); + // let breakdown_block_entrances_title = breakdown_block.querySelector( + // ".breakdown-block-entrances-title" + // ); + // let new_breakdown_block_entrances_list = breakdown_block + // .querySelector(".breakdown-block-entrances-list") + // .cloneNode(true); + // let breakdown_block_entrances_list_item = breakdown_block + // .querySelector(".breakdown-block-entrances-list") + // .firstElementChild.cloneNode(true); + // let new_breakdown_block_mapped_list = breakdown_block + // .querySelector(".breakdown-block-mapped-list") + // .cloneNode(true); + // let breakdown_block_mapped_list_item = breakdown_block + // .querySelector(".breakdown-block-mapped-list") + // .firstElementChild.cloneNode(true); + + // // Clear out current list content. + // new_breakdown_block_checks_list.innerHTML = ""; + // new_breakdown_block_entrances_list.innerHTML = ""; + // new_breakdown_block_mapped_list.innerHTML = ""; + // new_breakdown_block_checks_list.appendChild( + // breakdown_block_checks_list_item.cloneNode(true) + // ); + // breakdown_block_checks_list_item.classList.remove("hidden"); + // new_breakdown_block_entrances_list.appendChild( + // breakdown_block_entrances_list_item.cloneNode(true) + // ); + // breakdown_block_entrances_list_item.classList.remove("hidden"); + // new_breakdown_block_mapped_list.appendChild( + // breakdown_block_mapped_list_item.cloneNode(true) + // ); + // breakdown_block_mapped_list_item.classList.remove("hidden"); + + // // Create variables for commonly used values. + // let scene_checks_undiscovered = 0; + // // all_items[scene]; + // let scene_checks_total = 0; //all_scenes[scene].Totals.Checks.Total; + // let scene_entrances_undiscovered = 0; + // // all_scenes[scene].Totals.Entrances.Undiscovered; + // let scene_entrances_total = 0; //all_scenes[scene].Totals.Entrances.Total; + // // let scene_has_codes = Object.keys(cross_codes).includes(scene); + + // // Set textContent. + // summary_title.textContent = scene; + // summary_checks.textContent = `Checks: ${scene_checks_undiscovered}/${scene_checks_total}`; + // summary_checks.dataset.checksUndiscovered = scene_checks_undiscovered; + // summary_checks.dataset.checksTotal = scene_checks_undiscovered; + // summary_entrances.textContent = `Entrances: ${scene_entrances_undiscovered}/${scene_entrances_total}`; + // summary_entrances.dataset.entrancesUndiscovered = + // scene_entrances_undiscovered; + // summary_entrances.dataset.entrancesTotal = scene_entrances_total; + // breakdown_block_title.textContent = scene; + // breakdown_block_checks_title.textContent = `Checks: ${all_scenes[scene].Totals.Checks.Undiscovered}/${all_scenes[scene].Totals.Checks.Total}`; + // breakdown_block_entrances_title.textContent = `Entrances: ${all_scenes[scene].Totals.Entrances.Undiscovered}/${all_scenes[scene].Totals.Entrances.Total}`; + + // // Create checks, entrances, mapped entrances, and cross code lists. + // Object.keys(all_scenes[scene].Checks).forEach((check) => { + // if (!all_scenes[scene].Checks[check]) { + // breakdown_block_checks_list_item.textContent = `❌ ${check}`; + // new_breakdown_block_checks_list.appendChild( + // breakdown_block_checks_list_item.cloneNode(true) + // ); + // } + // }); + // Object.keys(all_scenes[scene].Entrances).forEach((entrances) => { + // if (all_scenes[scene].Entrances[entrances].Door == "") { + // breakdown_block_entrances_list_item.textContent = `❌ ${entrances}`; + // new_breakdown_block_entrances_list.appendChild( + // breakdown_block_entrances_list_item.cloneNode(true) + // ); + // } else { + // breakdown_block_mapped_list_item.textContent = `✔️ ${entrances} -> ${all_scenes[scene].Entrances[entrances].Door}`; + // breakdown_block_mapped_list_item.id = `${entrances}-mapped`; + // breakdown_block_mapped_list_item.dataset.scene = + // all_scenes[scene].Entrances[entrances].Scene; + // new_breakdown_block_mapped_list.appendChild( + // breakdown_block_mapped_list_item.cloneNode(true) + // ); + // } + // }); + + // // Apply color coding to summary block + // summary_block.firstElementChild.classList.remove( + // "from-highlight-both-light", + // "from-highlight-checks-light", + // "from-highlight-entrances-light", + // "from-highlight-empty-light", + // "from-highlight-undiscovered-light", + // "to-highlight-both-dark", + // "to-highlight-checks-dark", + // "to-highlight-entrances-dark", + // "to-highlight-empty-dark", + // "to-highlight-undiscovered-dark", + // "text-highlight-both-text", + // "text-highlight-checks-text", + // "text-highlight-entrances-text", + // "text-highlight-empty-text", + // "text-highlight-undiscovered-text" + // ); + // if ( + // scene_checks_undiscovered > 0 && + // scene_entrances_undiscovered > 0 + // ) { + // if ( + // scene_checks_total == scene_checks_undiscovered && + // scene_entrances_total == scene_entrances_undiscovered + // ) { + // summary_block.firstElementChild.classList.add( + // "from-highlight-undiscovered-light", + // "to-highlight-undiscovered-dark", + // "text-highlight-undiscovered-text" + // ); + // } else { + // summary_block.firstElementChild.classList.add( + // "from-highlight-both-light", + // "to-highlight-both-dark", + // "text-highlight-both-text" + // ); + // } + // } else if (scene_checks_undiscovered > 0) { + // summary_block.firstElementChild.classList.add( + // "from-highlight-checks-light", + // "to-highlight-checks-dark", + // "text-highlight-checks-text" + // ); + // } else if (scene_entrances_undiscovered > 0) { + // summary_block.firstElementChild.classList.add( + // "from-highlight-entrances-light", + // "to-highlight-entrances-dark", + // "text-highlight-entrances-text" + // ); + // } else { + // summary_block.firstElementChild.classList.add( + // "from-highlight-empty-light", + // "to-highlight-empty-dark", + // "text-highlight-empty-text" + // ); + // } + + // // Replace lists + // breakdown_block + // .querySelector(".breakdown-block-checks-list") + // .replaceWith(new_breakdown_block_checks_list); + // breakdown_block + // .querySelector(".breakdown-block-entrances-list") + // .replaceWith(new_breakdown_block_entrances_list); + // breakdown_block + // .querySelector(".breakdown-block-mapped-list") + // .replaceWith(new_breakdown_block_mapped_list); + + // breakdown_block.id = `${ + // breakdown_block.querySelector(".breakdown-block-title").textContent + // }-breakdown`; + // breakdown_block.classList.add("hidden"); + + // // Append relevant elements to lists. + // if (current_open_breakdown == breakdown_block.id) { + // breakdown_block.classList.remove("hidden"); + // } + // if (scene == current_scene_name) { + // summary_block.classList.add("hidden"); + // breakdown_block.classList.remove("hidden"); + // document + // .getElementById("breakdown-current") + // .firstElementChild.replaceWith(breakdown_block.cloneNode(true)); + // breakdown_block.classList.add("hidden"); + // } else if ( + // scene_checks_undiscovered <= 0 && + // scene_entrances_total <= 0 + // ) { + // summary_block.classList.add("hidden"); + // } + // if (document.getElementById("hideDone").checked) { + // if ( + // scene_checks_undiscovered <= 0 && + // scene_entrances_undiscovered <= 0 + // ) { + // summary_block.classList.add("hidden"); + // } + // } + // summary_block.dataset.scene = scene; + // new_summary_list.firstElementChild.appendChild( + // summary_block.cloneNode(true) + // ); + // new_breakdown_list.appendChild(breakdown_block.cloneNode(true)); + // }); + // let new_cross_codes_block_list = document + // .getElementById("codes-list") + // .cloneNode(true); + // let cross_codes_block_list_item = document + // .getElementById("codes-list") + // .firstElementChild.cloneNode(true); + // new_cross_codes_block_list.innerHTML = ""; + + // Object.keys(default_cross_codes).forEach((code) => { + // cross_codes_block_list_item.querySelector( + // ".codes-list-item-title" + // ).textContent = code; + // cross_codes_block_list_item.querySelector( + // ".codes-list-item-code" + // ).textContent = default_cross_codes[code] + // .replace(/U/g, "⬆️") + // .replace(/R/g, "➡️") + // .replace(/D/g, "⬇️") + // .replace(/L/g, "⬅️"); + // new_cross_codes_block_list.appendChild( + // cross_codes_block_list_item.cloneNode(true) + // ); + // }); + // Object.keys(global_cross_codes).forEach((code) => { + // cross_codes_block_list_item.querySelector( + // ".codes-list-item-title" + // ).textContent = code; + // cross_codes_block_list_item.querySelector( + // ".codes-list-item-code" + // ).textContent = global_cross_codes[code] + // .replace(/U/g, "⬆️") + // .replace(/R/g, "➡️") + // .replace(/D/g, "⬇️") + // .replace(/L/g, "⬅️"); + // if (cross_codes_entered.Global[code]) { + // cross_codes_block_list_item.classList.add("hidden"); + // } else { + // cross_codes_block_list_item.classList.remove("hidden"); + // } + // new_cross_codes_block_list.appendChild( + // cross_codes_block_list_item.cloneNode(true) + // ); + // }); + // if (!(typeof cross_codes[current_scene_name] === "undefined")) { + // Object.keys(cross_codes[current_scene_name]).forEach((code) => { + // cross_codes_block_list_item.querySelector( + // ".codes-list-item-title" + // ).textContent = code; + // cross_codes_block_list_item.querySelector( + // ".codes-list-item-code" + // ).textContent = cross_codes[current_scene_name][code] + // .replace(/U/g, "⬆️") + // .replace(/R/g, "➡️") + // .replace(/D/g, "⬇️") + // .replace(/L/g, "⬅️"); + // if (cross_codes_entered[current_scene_name][code]) { + // cross_codes_block_list_item.classList.add("hidden"); + // } else { + // cross_codes_block_list_item.classList.remove("hidden"); + // } + // new_cross_codes_block_list.appendChild( + // cross_codes_block_list_item.cloneNode(true) + // ); + // }); + // } + // document + // .getElementById("codes-list") + // .replaceWith(new_cross_codes_block_list); + + // // Object.keys(debug_info).forEach((item) => { + // // debug_item.querySelector( + // // ".debug-item" + // // ).textContent = `${item}: ${debug_info[item]}`; + // // new_debug_block.appendChild(debug_item.cloneNode(true)); + // // }); + + // // Replace with new data. + // document + // .getElementById("summary-list") + // .replaceWith(new_summary_list.cloneNode(true)); + // document + // .getElementById("breakdown-list") + // .replaceWith(new_breakdown_list.cloneNode(true)); + // // document + // // .getElementById("debug-block") + // // .querySelector(".debug-list") + // // .replaceWith(new_debug_block.cloneNode(true)); + // }, + // (error) => { + // document.getElementById("status-block").classList.remove("hidden"); + // get_updated_server_address(); + // return error; + // } + // ); } // Outdated funcion to log the data gathered from the backend. diff --git a/tunictracker/tracker/static/tracker/data/holy_cross_codes.json b/tunictracker/tracker/static/tracker/data/holy_cross_codes.json index 7bf8252..595a04e 100644 --- a/tunictracker/tracker/static/tracker/data/holy_cross_codes.json +++ b/tunictracker/tracker/static/tracker/data/holy_cross_codes.json @@ -2,7 +2,8 @@ "Default": { "Speedrunner Code": "RULDDRULU", "Seeking Spell": "ULURDR", - "Healing Spell": "DRDLURU" + "Healing Spell": "DRDLURU", + "Plushie Code": "URRDLDRURRDLDRULDRDLLULDRDLLL" }, "Cathedral": { "Secret Legend Door": "LULURULURDRRURDLDRDLDL" diff --git a/tunictracker/tracker/templates/tracker/breakdown/block.html b/tunictracker/tracker/templates/tracker/breakdown/block.html index 93473cc..612cac8 100644 --- a/tunictracker/tracker/templates/tracker/breakdown/block.html +++ b/tunictracker/tracker/templates/tracker/breakdown/block.html @@ -1,10 +1,13 @@ -