diff --git a/tunictracker/empty_spoiler.json b/tunictracker/empty_spoiler.json new file mode 100644 index 0000000..5f223ce --- /dev/null +++ b/tunictracker/empty_spoiler.json @@ -0,0 +1,33 @@ +{ + "Debug": { + "Name": "", + "Seed": "", + "SpoilerSeed": "", + "Archipelago": false, + "Randomized": false, + "HexQuest": false, + "EntranceRando": false, + "FixedShops": false + }, + "Totals": { + "Entrances": { "Total": 0, "Undiscovered": 0 }, + "Checks": { "Total": 0, "Undiscovered": 0 } + }, + "Current": { + "Scene": "No Scene", + "Respawn": "", + "Dath": "", + "HasLaurels": false, + "HasDath": false + }, + "Scenes": { + "No Scene": { + "Totals": { + "Entrances": { "Total": 0, "Undiscovered": 0 }, + "Checks": { "Total": 0, "Undiscovered": 0 } + }, + "Checks": {}, + "Entrances": {} + } + } +} diff --git a/tunictracker/tracker/static/tracker/assets/refresh.js b/tunictracker/tracker/static/tracker/assets/refresh.js index b9dccdf..de07229 100644 --- a/tunictracker/tracker/static/tracker/assets/refresh.js +++ b/tunictracker/tracker/static/tracker/assets/refresh.js @@ -1,182 +1,216 @@ window.onload = () => { - let overview = { - checks: document.getElementById("overview_checks"), - entrances: document.getElementById("overview_entrances"), - summary: document.getElementById("summary"), - }; - let current_scene = { - name: document.getElementById("current_scene_text"), - checks: { - title: document.getElementById("current_scene_checks_title"), - list: document.getElementById("current_scene_checks_list"), - }, - entrances: { - title: document.getElementById("current_scene_entrances_title"), - list: document.getElementById("current_scene_entrances_list"), - mapped: document.getElementById("current_scene_entrances_mapped"), - }, - }; - let line_elem = document - .getElementById("current_scene_checks_list") - .firstElementChild.cloneNode(true); - let mapped_line_elem = document - .getElementById("current_scene_entrances_mapped") - .firstElementChild.cloneNode(true); - let summary_element = document - .getElementById("summary") - .firstElementChild.cloneNode(true); - summary_element.classList.forEach((class_name) => { - if (class_name == "bg-green-900") { - summary_element.classList.remove(class_name); - } else if (class_name == "bg-yellow-900") { - summary_element.classList.remove(class_name); - } else if (class_name == "bg-blue-900") { - summary_element.classList.remove(class_name); - } - }); + // + let overview = document.getElementById("overview"); + let summary_list = overview.querySelector(".summary-list"); + let breakdown_list = overview.querySelector(".breakdown-list"); + let breakdown_current = document.getElementById("breakdown-current"); const refresh_interval = setInterval( refresh_elements, 500, overview, - current_scene, - line_elem, - mapped_line_elem, - summary_element + summary_list, + breakdown_list, + breakdown_current ); }; async function refresh_elements( overview, - current_scene, - line_elem, - mapped_line_elem, - summary_element + summary_list, + breakdown_list, + breakdown_current ) { fetch("http://localhost:8000/spoiler") .then((response) => response.json()) - .then((data) => { - const response_object = JSON.parse(JSON.stringify(data)); - const overview_checks_undiscovered = - response_object.Totals.Checks.Undiscovered; - const overview_checks_total = response_object.Totals.Checks.Total; - const overview_entrances_undiscovered = - response_object.Totals.Entrances.Undiscovered; - const overview_entrances_total = response_object.Totals.Entrances.Total; - const current_scene_name = response_object.Current.Scene; - const current_scene_checks_undiscovered = - response_object.Scenes[current_scene_name].Totals.Checks.Undiscovered; - const current_scene_checks_total = - response_object.Scenes[current_scene_name].Totals.Checks.Total; - const current_scene_entrances_undiscovered = - response_object.Scenes[current_scene_name].Totals.Entrances - .Undiscovered; - const current_scene_entrances_total = - response_object.Scenes[current_scene_name].Totals.Entrances.Total; - const current_scene_checks_list = - response_object.Scenes[current_scene_name].Checks; - const current_scene_entrances_list = - response_object.Scenes[current_scene_name].Entrances; - const all_scenes = response_object.Scenes; - overview.checks.textContent = `Checks: ${overview_checks_undiscovered}/${overview_checks_total}`; - overview.entrances.textContent = `Entrances: ${overview_entrances_undiscovered}/${overview_entrances_total}`; - current_scene.name.textContent = current_scene_name; - current_scene.checks.title.textContent = `Checks: ${current_scene_checks_undiscovered}/${current_scene_checks_total}`; - current_scene.entrances.title.textContent = `Entrances: ${current_scene_entrances_undiscovered}/${current_scene_entrances_total}`; - current_scene.checks.list.innerHTML = ""; - current_scene.entrances.list.innerHTML = ""; - current_scene.entrances.mapped.innerHTML = ""; - overview.summary.innerHTML = ""; - Object.keys(current_scene_checks_list).forEach((check) => { - if (!current_scene_checks_list[check]) { - line_elem.textContent = `❌ ${check}`; - current_scene.checks.list.appendChild(line_elem.cloneNode(true)); - } - }); - Object.keys(current_scene_entrances_list).forEach((entrances) => { - if (current_scene_entrances_list[entrances] == "") { - line_elem.textContent = `❌ ${entrances}`; - current_scene.entrances.list.appendChild(line_elem.cloneNode(true)); - } else { - mapped_line_elem.textContent = `✔️ ${entrances} -> ${current_scene_entrances_list[entrances]}`; - current_scene.entrances.mapped.appendChild( - mapped_line_elem.cloneNode(true) + .then( + (data) => { + // Attempt to receive response JSON. + const response_object = JSON.parse(JSON.stringify(data)); + + // Parse out data from the back-end into variables. + const overview_checks_undiscovered = + response_object.Totals.Checks.Undiscovered; + const overview_checks_total = response_object.Totals.Checks.Total; + const overview_entrances_undiscovered = + response_object.Totals.Entrances.Undiscovered; + const overview_entrances_total = response_object.Totals.Entrances.Total; + const current_scene_name = response_object.Current.Scene; + const all_scenes = response_object.Scenes; + let new_breakdown_list = overview + .querySelector(".breakdown-list") + .cloneNode(true); + let new_summary_list = overview + .querySelector(".summary-list") + .cloneNode(true); + new_breakdown_list.innerHTML = ""; + new_summary_list.firstElementChild.innerHTML = ""; + + // Refresh elements with new data from the back end. + + // Clone all the needed elements for updating. + let overview_checks_title = overview.querySelector(".overview-checks"); + let overview_entrances_title = overview.querySelector( + ".overview-entrances" + ); + let summary_block = + summary_list.firstElementChild.firstElementChild.cloneNode(true); + let breakdown_block = breakdown_list.firstElementChild.cloneNode(true); + breakdown_block.classList.remove("hidden"); + + // Set content to updated data. + overview_checks_title.textContent = `Checks: ${overview_checks_undiscovered}/${overview_checks_total}`; + overview_entrances_title.textContent = `Entrances: ${overview_entrances_undiscovered}/${overview_entrances_total}`; + + // Create new lists with updated data. + Object.keys(all_scenes).forEach((scene) => { + // Create variables for element pointers. + summary_block = + 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 = breakdown_list.firstElementChild.cloneNode(true); + breakdown_block.classList.remove("hidden"); + let breakdown_block_title = breakdown_block.querySelector( + ".breakdown-block-title" ); - } - }); - let scene_div = document.createElement("div"); - let checks_div = document.createElement("div"); - let entrances_div = document.createElement("div"); - let scene_checks_undiscovered = 0; - let scene_checks_total = 0; - let scene_entrances_undiscovered = 0; - let scene_entrances_total = 0; - Object.keys(all_scenes).forEach((scene) => { - summary_element.innerHTML = ""; - scene_div.textContent = scene; - scene_checks_undiscovered = - all_scenes[scene]["Totals"]["Checks"]["Undiscovered"]; - scene_checks_total = all_scenes[scene]["Totals"]["Checks"]["Total"]; - scene_entrances_undiscovered = - all_scenes[scene]["Totals"]["Entrances"]["Undiscovered"]; - scene_entrances_total = - all_scenes[scene]["Totals"]["Entrances"]["Total"]; - if (scene_entrances_total <= 0) { - return; - } - if (scene == current_scene.name.textContent) { - return; - } - checks_div.textContent = `Checks: ${scene_checks_undiscovered}/${scene_checks_total}`; - entrances_div.textContent = `Entrances: ${scene_entrances_undiscovered}/${scene_entrances_total}`; - if (scene_checks_undiscovered > 0 && scene_entrances_undiscovered > 0) { - if (scene_entrances_undiscovered == scene_entrances_total) { - summary_element.classList.add("bg-red-900"); - summary_element.classList.remove( - "bg-green-900", - "bg-yellow-900", - "bg-blue-900" - ); - } else { - summary_element.classList.add("bg-green-900"); - summary_element.classList.remove( - "bg-blue-900", - "bg-yellow-900", - "bg-red-900" - ); + 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); + breakdown_block_checks_list_item.classList.remove("hidden"); + 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); + breakdown_block_entrances_list_item.classList.remove("hidden"); + 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); + breakdown_block_mapped_list_item.classList.remove("hidden"); + + // Create variables for commonly used values. + let scene_checks_undiscovered = + all_scenes[scene].Totals.Checks.Undiscovered; + let scene_checks_total = all_scenes[scene].Totals.Checks.Total; + let scene_entrances_undiscovered = + all_scenes[scene].Totals.Entrances.Undiscovered; + let scene_entrances_total = all_scenes[scene].Totals.Entrances.Total; + + // Set textContent. + summary_title.textContent = scene; + summary_checks.textContent = `Checks: ${scene_checks_undiscovered}/${scene_checks_total}`; + summary_entrances.textContent = `Entrances: ${scene_entrances_undiscovered}/${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, and mapped entrances 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] == "") { + 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]}`; + new_breakdown_block_mapped_list.appendChild( + breakdown_block_mapped_list_item.cloneNode(true) + ); + } + }); + + // Apply color coding to summary block + summary_block.classList.remove( + "bg-green-900", + "bg-yellow-900", + "bg-blue-900", + "bg-red-900" + ); + if ( + scene_checks_undiscovered > 0 && + scene_entrances_undiscovered > 0 + ) { + if (scene_entrances_undiscovered == scene_entrances_total) { + summary_block.classList.add("bg-red-900"); + } else { + summary_block.classList.add("bg-green-900"); + } + } else if (scene_checks_undiscovered > 0) { + summary_block.classList.add("bg-yellow-900"); + } else if (scene_entrances_undiscovered > 0) { + summary_block.classList.add("bg-blue-900"); } - } else if (scene_checks_undiscovered > 0) { - summary_element.classList.add("bg-yellow-900"); - summary_element.classList.remove( - "bg-blue-900", - "bg-green-900", - "bg-red-900" + + // 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); + + // Append relevant elements to lists. + if (scene == current_scene_name) { + summary_block.classList.add("hidden"); + breakdown_current.firstElementChild.replaceWith( + breakdown_block.cloneNode(true) + ); + breakdown_block.classList.add("hidden"); + } else if ( + scene_checks_undiscovered <= 0 && + scene_entrances_undiscovered <= 0 + ) { + summary_block.classList.add("hidden"); + breakdown_block.classList.add("hidden"); + } + new_summary_list.firstElementChild.appendChild( + summary_block.cloneNode(true) ); - } else if (scene_entrances_undiscovered > 0) { - summary_element.classList.add("bg-blue-900"); - summary_element.classList.remove( - "bg-green-900", - "bg-yellow-900", - "bg-red-900" - ); - } else { - summary_element.classList.remove( - "bg-green-900", - "bg-yellow-900", - "bg-blue-900", - "bg-red-900" - ); - } - summary_element.appendChild(scene_div.cloneNode(true)); - summary_element.appendChild(checks_div.cloneNode(true)); - summary_element.appendChild(entrances_div.cloneNode(true)); - overview.summary.appendChild(summary_element.cloneNode(true)); - }); - }) - .catch((err) => { - console.log(err); - }); + new_breakdown_list.appendChild(breakdown_block.cloneNode(true)); + }); + + // Replace with new data. + summary_list.replaceWith(new_summary_list.cloneNode(true)); + breakdown_list.replaceWith(new_breakdown_list.cloneNode(true)); + document + .getElementById("breakdown-current") + .replaceWith(breakdown_current.cloneNode(true)); + }, + (error) => { + return error; + } + ); } +// Outdated funcion to log the data gathered from the backend. function log_elements() { console.log(overview.checks.textContent); console.log(overview.entrances.textContent); diff --git a/tunictracker/tracker/templates/index.html b/tunictracker/tracker/templates/index.html index ee64ed6..b0603e3 100644 --- a/tunictracker/tracker/templates/index.html +++ b/tunictracker/tracker/templates/index.html @@ -1,7 +1,9 @@ - + Tunic Tracker Redux + + @@ -9,11 +11,10 @@ {% load static tailwind_tags %} {% tailwind_css %} {% load static %} - + {% block content %} - - {% endblock %} + {% endblock content %} diff --git a/tunictracker/tracker/templates/tracker/breakdown/block.html b/tunictracker/tracker/templates/tracker/breakdown/block.html new file mode 100644 index 0000000..f077320 --- /dev/null +++ b/tunictracker/tracker/templates/tracker/breakdown/block.html @@ -0,0 +1,60 @@ +
+
{{ scene_title }}
+
+
+
+
+ Checks: {{ scene_data.Totals.Checks.Undiscovered }}/{{ scene_data.Totals.Checks.Total }} +
+
+
+
+ + {% for check_name, check in scene_data.Checks.items %} + {% if not check %} +
    + ❌ {{ check_name }} +
+ {% endif %} + {% endfor %} +
+
+
+
+
+ Entrances: {{ scene_data.Totals.Entrances.Undiscovered }}/{{ scene_data.Totals.Entrances.Total }} +
+
+
+
+ + {% for entrance_origin, entrance_destination in scene_data.Entrances.items %} + {% if entrance_destination == "" %} +
    + ❌ {{ entrance_origin }} +
+ {% else %} + + {% endif %} + {% endfor %} +
+
+
+
+
+ + {% for entrance_origin, entrance_destination in scene_data.Entrances.items %} + {% if entrance_destination %} +
    + ✔️ {{ entrance_origin }} -> {{ entrance_destination }} +
+ {% endif %} + {% endfor %} +
+
+
diff --git a/tunictracker/tracker/templates/tracker/index.html b/tunictracker/tracker/templates/tracker/index.html index 0eadb77..b56a53f 100644 --- a/tunictracker/tracker/templates/tracker/index.html +++ b/tunictracker/tracker/templates/tracker/index.html @@ -1,134 +1,80 @@ -{% extends 'index.html' %} +{% extends "index.html" %} {% load static %} - {% block content %} -
-
- {% if debug != '' %} -
-
- A trans pride fox emoji. -  Tunic Transition Tracker -
-
-
-
Overview
-
-
Checks: {{ totals.Checks.Undiscovered }}/{{ totals.Checks.Total }}
-
Entrances: {{ totals.Entrances.Undiscovered }}/{{ totals.Entrances.Total }}
-
-
-
- Breakdown -
- {% for scene, scene_totals in totals.items %} - {% if scene == current_scene %} -
-
-
-
{{ current_scene }}
-
-
-
-
Checks: {{ scene_data.Totals.Checks.Undiscovered }}/{{ scene_data.Totals.Checks.Total }}
-
+
+
+ Summary +
{% include "tracker/summary/list.html" %}
+
+
+ Breakdown +
+ {% include "tracker/breakdown/block.html" with extra_classes="hidden" %} + {% for scene_title, scene_data in scenes.items %} + {% include "tracker/breakdown/block.html" %} + {% endfor %} +
+
+
+
+ {% include "tracker/breakdown/block.html" with scene_title=current_scene.title scene_data=current_scene.data %} +
+
+ Tracker Debug +
+
+
    + Name: {{ debug.Name }} +
+
    + Seed: {{ debug.Seed }} +
+
    + Spoiler Seed: {{ debug.SpoilerSeed }} +
+
    + Archipelago: {{ debug.Archipelago }} +
+
    + Randomized: {{ debug.Randomized }} +
+
    + Hex Quest: {{ debug.HexQuest }} +
+
    + Entrance Randomizer: {{ debug.EntranceRando }} +
+
    + Fixed Shops: {{ debug.FixedShops }} +
+
+
+
-
- {% if scene_data.Totals.Checks.Total > 0 %} - {% for check_name, check in scene_data.Checks.items %} - {% if not check.Check %} -
    ❌ {{ check_name }}
- {% endif %} - {% endfor %} - {% else %} - - {% endif %} -
-
-
-
-
Entrances: {{ scene_data.Totals.Entrances.Undiscovered }}/{{ scene_data.Totals.Entrances.Total }}
-
-
-
- {% if scene_data.Totals.Entrances.Total > 0 %} - {% for entrance_origin, entrance_destination in scene_data.Entrances.items %} - {% if not entrance_destination.Entrance != '' %} -
    ❌ {{ entrance_origin }}
- {% else %} - - {% endif %} - {% endfor %} - {% else %} - - {% endif %} -
-
-
-
-
- {% for entrance_origin, entrance_destination in scene_data.Entrances.items %} - {% if entrance_destination.Entrance %} -
    ✔️ {{ entrance_origin }} -> {{ entrance_destination.Entrance }}
- {% endif %} - {% endfor %} -
-
-
-
- Tracker Debug -
-
-
    Name: {{ debug.Name }}
-
    Seed: {{ debug.Seed }}
-
    Spoiler Seed: {{ debug.SpoilerSeed }}
-
    Archipelago: {{ debug.Archipelago }}
-
    Randomized: {{ debug.Randomized }}
-
    Hex Quest: {{ debug.HexQuest }}
-
    Entrance Randomizer: {{ debug.EntranceRando }}
-
    Fixed Shops: {{ debug.FixedShops }}
-
-
-
-
- {% else %} -
- {% endif %} + {% else %} +
{% endif %}
-
-{% endblock %} +{% endblock content %} diff --git a/tunictracker/tracker/templates/tracker/summary/block.html b/tunictracker/tracker/templates/tracker/summary/block.html new file mode 100644 index 0000000..b29c713 --- /dev/null +++ b/tunictracker/tracker/templates/tracker/summary/block.html @@ -0,0 +1,9 @@ +
+
{{ scene }}:
+
+ Checks: {{ scene_data.Totals.Checks.Undiscovered }}/{{ scene_data.Totals.Checks.Total }} +
+
+ Entrances: {{ scene_data.Totals.Entrances.Undiscovered }}/{{ scene_data.Totals.Entrances.Total }} +
+
diff --git a/tunictracker/tracker/templates/tracker/summary/list.html b/tunictracker/tracker/templates/tracker/summary/list.html new file mode 100644 index 0000000..400b0cb --- /dev/null +++ b/tunictracker/tracker/templates/tracker/summary/list.html @@ -0,0 +1,20 @@ +
+ {% include "tracker/summary/block.html" with extra_classes="hidden" %} + {% for scene, scene_data in scenes.items %} + {% if scene == current_scene.title %} + {% include "tracker/summary/block.html" with extra_classes="hidden" %} + {% elif scene != "Entrances" and scene != "Checks" %} + {% if scene_data.Totals.Checks.Undiscovered > 0 and scene_data.Totals.Entrances.Undiscovered > 0 %} + {% if scene_data.Totals.Entrances.Undiscovered == scene_data.Totals.Entrances.Total %} + {% include "tracker/summary/block.html" with extra_classes="bg-red-900" %} + {% else %} + {% include "tracker/summary/block.html" with extra_classes="bg-green-900" %} + {% endif %} + {% elif scene_data.Totals.Checks.Undiscovered > 0 %} + {% include "tracker/summary/block.html" with extra_classes="bg-yellow-900" %} + {% elif scene_data.Totals.Entrances.Undiscovered > 0 %} + {% include "tracker/summary/block.html" with extra_classes="bg-blue-900" %} + {% endif %} + {% endif %} + {% endfor %} +
diff --git a/tunictracker/tracker/views.py b/tunictracker/tracker/views.py index 3a95710..b8c1e45 100644 --- a/tunictracker/tracker/views.py +++ b/tunictracker/tracker/views.py @@ -13,58 +13,32 @@ def index(request): try: request_data = requests.get('http://localhost:8000/spoiler').text except: - context = { - "debug": "", - "totals": "", - "scene": "", - "scene_data": "" - } - template = loader.get_template("tracker/index.html") - return HttpResponse(template.render(context, request)) - tracker_output = loads(request_data) - # with open('spoiler.json', 'r') as t: - # tracker_output = loads(t.read()) + with open('empty_spoiler.json', 'r') as t: + try: + tracker_output = loads(t.read()) + except: + return + try: + tracker_output = loads(request_data) + except: + with open('empty_spoiler.json', 'r') as t: + try: + tracker_output = loads(t.read()) + except: + return tracker_debug = tracker_output["Debug"] tracker_totals = tracker_output["Totals"] tracker_current_scene = tracker_output["Current"]["Scene"] - tracker_current_scene_data = tracker_output["Scenes"][tracker_current_scene] + tracker_current_scane_data = tracker_output["Scenes"][tracker_current_scene] + tracker_scenes = tracker_output["Scenes"] template = loader.get_template("tracker/index.html") - for i in tracker_output["Scenes"]: - checks_total = tracker_output["Scenes"][i]["Totals"]["Checks"]["Total"] - checks_undiscovered = tracker_output["Scenes"][i]["Totals"]["Checks"]["Undiscovered"] - entrances_total = tracker_output["Scenes"][i]["Totals"]["Entrances"]["Total"] - entrances_undiscovered = tracker_output["Scenes"][i]["Totals"]["Entrances"]["Undiscovered"] - temp_data = { - "Checks": { - "Total": checks_total, - "Undiscovered": checks_undiscovered - }, - "Entrances": { - "Total": entrances_total, - "Undiscovered": entrances_undiscovered - } - } - tracker_totals[i] = temp_data - temp_tracker_checks = tracker_current_scene_data["Checks"] - for i, check in enumerate(temp_tracker_checks.keys()): - temp_data = { - "Check": temp_tracker_checks[check], - "CheckNum": floor(int(i) % 3) - } - temp_tracker_checks[check] = temp_data - tracker_current_scene_data["Checks"] = temp_tracker_checks - temp_tracker_entrances = tracker_current_scene_data["Entrances"] - for i, entrance in enumerate(temp_tracker_entrances.keys()): - temp_data = { - "Entrance": temp_tracker_entrances[entrance], - "EntranceNum": floor(int(i) % 3) - } - temp_tracker_entrances[entrance] = temp_data - tracker_current_scene_data["Entrances"] = temp_tracker_entrances context = { "debug": tracker_debug, "totals": tracker_totals, - "current_scene": tracker_current_scene, - "scene_data": tracker_current_scene_data + "scenes": tracker_scenes, + "current_scene": { + "title": tracker_current_scene, + "data": tracker_current_scane_data + } } return HttpResponse(template.render(context, request))