From 5f4e8985f2ad6cc1d907e141f220df958c55a5d4 Mon Sep 17 00:00:00 2001 From: Ada Werefox Date: Sat, 9 Mar 2024 23:20:35 -0600 Subject: [PATCH] Updating settings through backend API should work now. Fixed issues with setting the listening address. --- package-lock.json | 13 +++ package.json | 1 + tunictracker/tracker/forms.py | 13 ++- .../tracker/static/tracker/assets/refresh.js | 63 ++++++++++---- tunictracker/tracker/templates/index.html | 2 +- .../templates/tracker/address/index.html | 21 ++--- .../templates/tracker/breakdown/block.html | 6 +- .../templates/tracker/codes/index.html | 4 +- .../tracker/templates/tracker/index.html | 12 ++- .../templates/tracker/settings/index.html | 14 ++++ tunictracker/tracker/urls.py | 2 + tunictracker/tracker/views.py | 82 +++++++++++-------- .../static_src/tailwind.config.js | 1 + 13 files changed, 160 insertions(+), 74 deletions(-) create mode 100644 tunictracker/tracker/templates/tracker/settings/index.html diff --git a/package-lock.json b/package-lock.json index 6193eab..b68accf 100644 --- a/package-lock.json +++ b/package-lock.json @@ -10,6 +10,7 @@ "@tailwindcss/typography": "^0.5.10", "cross-env": "^7.0.3", "postcss-simple-vars": "^7.0.1", + "tailwind-scrollbar": "^3.1.0", "tailwindcss": "^3.4.1" } }, @@ -1287,6 +1288,18 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/tailwind-scrollbar": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/tailwind-scrollbar/-/tailwind-scrollbar-3.1.0.tgz", + "integrity": "sha512-pmrtDIZeHyu2idTejfV59SbaJyvp1VRjYxAjZBH0jnyrPRo6HL1kD5Glz8VPagasqr6oAx6M05+Tuw429Z8jxg==", + "dev": true, + "engines": { + "node": ">=12.13.0" + }, + "peerDependencies": { + "tailwindcss": "3.x" + } + }, "node_modules/tailwindcss": { "version": "3.4.1", "resolved": "https://registry.npmjs.org/tailwindcss/-/tailwindcss-3.4.1.tgz", diff --git a/package.json b/package.json index ac6537b..33f3302 100644 --- a/package.json +++ b/package.json @@ -5,6 +5,7 @@ "@tailwindcss/typography": "^0.5.10", "cross-env": "^7.0.3", "postcss-simple-vars": "^7.0.1", + "tailwind-scrollbar": "^3.1.0", "tailwindcss": "^3.4.1" } } diff --git a/tunictracker/tracker/forms.py b/tunictracker/tracker/forms.py index 21f0762..87f5cc8 100644 --- a/tunictracker/tracker/forms.py +++ b/tunictracker/tracker/forms.py @@ -3,12 +3,11 @@ from json import loads class ServerAddressForm(forms.Form): - # with open('tracker/static/tracker/data/listen_address.json', 'r') as address: - # read_address = loads(address.read()) - # if (read_address['address']['user'] != ""): - # server_address = read_address['address']['user'] - # else: - # server_address = read_address['address']['default'] server_address_form = forms.URLField( - max_length=1312, initial="http://localhost:8000/spoiler", empty_value="http://localhost:8000/spoiler", label="") + max_length=1312, initial="http://localhost:8000/", empty_value="http://localhost:8000/", label="") server_address_form.widget.attrs["class"] = "w-full text-sm rounded-md border-2 border-bluelight-dark bg-[#242424]/10" + + +class BackendFilepathForm(forms.Form): + backend_filepath_form = forms.CharField() + backend_filepath_form.widget.attrs["class"] = "w-full text-sm rounded-md border-2 border-bluelight-dark bg-[#242424]/10" diff --git a/tunictracker/tracker/static/tracker/assets/refresh.js b/tunictracker/tracker/static/tracker/assets/refresh.js index 4767b30..f46b7bc 100644 --- a/tunictracker/tracker/static/tracker/assets/refresh.js +++ b/tunictracker/tracker/static/tracker/assets/refresh.js @@ -20,25 +20,58 @@ window.onload = () => { ); }; +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); + } + ); +} + +// This won't work properly. For now, the user will need to input themselves. +// async function get_filepath() { +// try { +// const filepath_selection = await window.showDirectoryPicker(); +// console.log(filepath_selection); +// } catch { +// console.log("Browser does not support showDirectoryPicker()"); +// } +// } + async function get_updated_server_address() { - try { - fetch(`${document.URL}get/address`) - .then((response) => response.json()) - .then( - (data) => { - server_address = JSON.parse(JSON.stringify(data)); - }, - (error) => { - console.log(error); - } - ); - } catch { - console.log("Are you sure the front end is up?"); - } + fetch(`${document.URL}get/address`) + .then( + (response) => response.json(), + (error) => { + console.log("Are you sure the front end is up?"); + } + ) + .then( + (data) => { + server_address = JSON.parse(JSON.stringify(data)); + get_updated_filepath(); + }, + (error) => { + console.log(error); + } + ); } async function refresh_elements(cross_codes) { - fetch(server_address) + fetch(`${server_address}spoiler`) .then((response) => response.json()) .then( (data) => { diff --git a/tunictracker/tracker/templates/index.html b/tunictracker/tracker/templates/index.html index 2047c78..7e835cb 100644 --- a/tunictracker/tracker/templates/index.html +++ b/tunictracker/tracker/templates/index.html @@ -2,7 +2,7 @@ - Tunic Tracker Redux + Tunic Transition Tracker diff --git a/tunictracker/tracker/templates/tracker/address/index.html b/tunictracker/tracker/templates/tracker/address/index.html index 398f3e9..3295702 100644 --- a/tunictracker/tracker/templates/tracker/address/index.html +++ b/tunictracker/tracker/templates/tracker/address/index.html @@ -1,13 +1,14 @@
- - {% csrf_token %} - - {% for field in form %}{{ field }}{% endfor %} - + class="flex flex-row space-x-2"> + + {% csrf_token %} + + {% for field in server_address_form %}{{ field }}{% endfor %} +
diff --git a/tunictracker/tracker/templates/tracker/breakdown/block.html b/tunictracker/tracker/templates/tracker/breakdown/block.html index d7476a7..0a0a85e 100644 --- a/tunictracker/tracker/templates/tracker/breakdown/block.html +++ b/tunictracker/tracker/templates/tracker/breakdown/block.html @@ -8,7 +8,7 @@
-
+
{% for check_name, check in scene_data.Checks.items %} @@ -27,7 +27,7 @@

-
+
{% for entrance_origin, entrance_destination in scene_data.Entrances.items %} @@ -44,7 +44,7 @@
-
+
diff --git a/tunictracker/tracker/templates/tracker/codes/index.html b/tunictracker/tracker/templates/tracker/codes/index.html index 49a05a7..fefba43 100644 --- a/tunictracker/tracker/templates/tracker/codes/index.html +++ b/tunictracker/tracker/templates/tracker/codes/index.html @@ -1,5 +1,5 @@ -
- Holy Cross Codes +
+
Holy Cross Codes
    {% for name, code in default_codes.items %} diff --git a/tunictracker/tracker/templates/tracker/index.html b/tunictracker/tracker/templates/tracker/index.html index 48aa444..7e3c650 100644 --- a/tunictracker/tracker/templates/tracker/index.html +++ b/tunictracker/tracker/templates/tracker/index.html @@ -5,7 +5,7 @@
    {% if debug != '' %}
    -
    +

    A trans pride fox emoji.  Tunic Transition Tracker -

    +
    - {% include "tracker/address/index.html" %} +
    + Settings +
    + {% include "tracker/settings/index.html" %} + {% include "tracker/address/index.html" %} +
    +
    {% include "tracker/status/index.html" %}
    diff --git a/tunictracker/tracker/templates/tracker/settings/index.html b/tunictracker/tracker/templates/tracker/settings/index.html new file mode 100644 index 0000000..753a936 --- /dev/null +++ b/tunictracker/tracker/templates/tracker/settings/index.html @@ -0,0 +1,14 @@ +
    + + {% csrf_token %} + + {% for field in backend_filepath_form %}{{ field }}{% endfor %} + +
    diff --git a/tunictracker/tracker/urls.py b/tunictracker/tracker/urls.py index 99575cd..21bb82c 100644 --- a/tunictracker/tracker/urls.py +++ b/tunictracker/tracker/urls.py @@ -6,4 +6,6 @@ urlpatterns = [ path("", views.index, name="index"), path("set/address/", views.set_address, name="set_address"), path("get/address/", views.get_address, name="get_address"), + path("set/settings/", views.set_settings, name="set_settings"), + path("get/settings/", views.get_settings, name="get_settings"), ] \ No newline at end of file diff --git a/tunictracker/tracker/views.py b/tunictracker/tracker/views.py index c26e87c..0b16766 100644 --- a/tunictracker/tracker/views.py +++ b/tunictracker/tracker/views.py @@ -4,39 +4,41 @@ from django.template import loader from json import loads, dumps from math import floor import requests -from .forms import ServerAddressForm +from .forms import ServerAddressForm, BackendFilepathForm import logging # Create your views here. -default_address = 'http://localhost:8000/spoiler' +# Debug and defaults. +defaults = { + 'listen_address': 'http://localhost:8000/', + 'backend_filepath': '' +} +# default_address = 'http://localhost:8000/' # logging.basicConfig(encoding='utf-8', level=logging.DEBUG) +def session_key(session, key): + if key not in session.keys(): + session[key] = defaults[key] + + # TODO: consider serializing user sessions for debugging in the future. + logging.info( + f'Session {key} set to: {session[key]}') + return session[key] + + is_hidden = True + + def index(request): request_data = None - # with open('tracker/static/tracker/data/listen_address.json', 'r') as address: - # read_address = loads(address.read()) - # if (read_address['address']['user'] != ''): - # server_address = read_address['address']['user'] - # else: - # server_address = read_address['address']['default'] - if 'listen_address' in request.session.keys(): - server_address = request.session['listen_address'] + listen_address = session_key(request.session, 'listen_address') + backend_filepath = session_key(request.session, 'backend_filepath') - # TODO: consider serializing user sessions for debugging in the future. - logging.info( - f'Session listen address changed to: {server_address}') - else: - request.session['listen_address'] = default_address - server_address = default_address - logging.info( - f'Session listen address for {request.session} set to: {server_address}') - is_hidden = True try: request_data = requests.get( - server_address, timeout=5, verify=True).text + f'{server_address}spoiler', timeout=5, verify=True).text except: with open('empty_spoiler.json', 'r') as t: try: @@ -75,10 +77,13 @@ def index(request): current_cross_codes = {} # print(e) template = loader.get_template('tracker/index.html') - form = ServerAddressForm() - form.fields['server_address_form'].initial = server_address + server_address_form = ServerAddressForm() + server_address_form.fields['server_address_form'].initial = listen_address + backend_filepath_form = BackendFilepathForm() + backend_filepath_form.fields['backend_filepath_form'].initial = backend_filepath context = { - 'server_address': server_address, + 'backend_filepath': backend_filepath, + 'server_address': listen_address, 'is_hidden': is_hidden, 'debug': tracker_debug, 'default_codes': cross_codes['Default'], @@ -89,7 +94,8 @@ def index(request): 'title': tracker_current_scene, 'data': tracker_current_scene_data }, - 'form': form + 'server_address_form': server_address_form, + 'backend_filepath_form': backend_filepath_form } return HttpResponse(template.render(context, request)) @@ -104,17 +110,27 @@ def get_address(request): def set_address(request): if request.method == 'POST': form = ServerAddressForm(request.POST) - form.label_classes = ('p-2') if form.is_valid(): - # with open('tracker/static/tracker/data/listen_address.json', 'r') as la: - # listen_address = loads(la.read()) - # listen_address['address']['user'] = form.cleaned_data['server_address_form'] - - # with open('tracker/static/tracker/data/listen_address.json', 'w') as la: - # la.write(dumps(listen_address)) - server_address = form.cleaned_data['server_address_form'] request.session['listen_address'] = form.cleaned_data['server_address_form'] return HttpResponseRedirect('/') else: form = ServerAddressForm() - return render(request, 'tracker/index.html', {'form': form}) + return render(request, 'tracker/index.html', {'server_address_form': form}) + + +def set_settings(request): + if request.method == 'POST': + form = BackendFilepathForm(request.POST) + if form.is_valid(): + request.session['backend_filepath'] = form.cleaned_data['backend_filepath_form'] + return HttpResponseRedirect('/') + else: + form = BackendFilepathForm() + return render(request, 'tracker/index.html', {'backend_filepath_form': form}) + + +def get_settings(request): + if request.method == 'GET': + return HttpResponse(dumps(request.session['backend_filepath']), content_type="application/json") + else: + return render(request, 'tracker/index.html') \ No newline at end of file diff --git a/tunictracker/werefoxtheme/static_src/tailwind.config.js b/tunictracker/werefoxtheme/static_src/tailwind.config.js index 06da26e..f082ece 100644 --- a/tunictracker/werefoxtheme/static_src/tailwind.config.js +++ b/tunictracker/werefoxtheme/static_src/tailwind.config.js @@ -92,5 +92,6 @@ module.exports = { require("@tailwindcss/forms"), require("@tailwindcss/typography"), require("@tailwindcss/aspect-ratio"), + require("tailwind-scrollbar") ], };