From 2301b2dcb48992456ec35613093cd6292c958f56 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tom=C3=A1=C5=A1=20Valenta?= <git@imaniti.org> Date: Fri, 25 Aug 2023 19:05:51 +0200 Subject: [PATCH] nicer UI, ignore hours --- shared/static/shared/timer.webp | Bin 0 -> 29146 bytes shared/templates/shared/base.html | 8 ++- shared/templates/shared/index.html | 20 +++++++ static_src/member_group_size_calc.js | 2 +- static_src/timer.js | 29 +++++++--- timer/consumers.py | 1 - timer/forms.py | 4 -- .../0002_alter_ongoingtimer_name.py | 22 ++++++++ .../0003_remove_ongoingtimer_hours.py | 16 ++++++ timer/models.py | 4 -- timer/templates/timer/edit_timer.html | 52 ++++++++++-------- timer/templates/timer/view_timer.html | 7 +-- 12 files changed, 116 insertions(+), 49 deletions(-) create mode 100644 shared/static/shared/timer.webp create mode 100644 timer/migrations/0002_alter_ongoingtimer_name.py create mode 100644 timer/migrations/0003_remove_ongoingtimer_hours.py diff --git a/shared/static/shared/timer.webp b/shared/static/shared/timer.webp new file mode 100644 index 0000000000000000000000000000000000000000..9671ccf1eab3616ca75d824e4acb77ff52a58823 GIT binary patch literal 29146 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 L-|2Y3r!M~oM~6Sl literal 0 HcmV?d00001 diff --git a/shared/templates/shared/base.html b/shared/templates/shared/base.html index fafea79..e0e1da9 100644 --- a/shared/templates/shared/base.html +++ b/shared/templates/shared/base.html @@ -66,9 +66,11 @@ </ui-app> </nav> {% endblock %} - <div class="container container--default py-8 lg:py-24"> - {% block content %}{% endblock %} - </div> + {% block raw_content %} + <div class="container container--default py-8 lg:py-24"> + {% block content %}{% endblock %} + </div> + {% endblock %} {% block footer %} <footer class="footer bg-grey-700 text-white __js-root hidden lg:block"> <ui-app inline-template> diff --git a/shared/templates/shared/index.html b/shared/templates/shared/index.html index 680242c..9c5c7e4 100644 --- a/shared/templates/shared/index.html +++ b/shared/templates/shared/index.html @@ -77,6 +77,26 @@ </div> </li> + <li class="card"> + <a href="{% url "timer:index" %}"> + <img + src="{% static "shared/timer.webp" %}" + alt="ÄŚasovaÄŤ pro Ĺ™eÄŤnĂky" + class="w-full h-48 object-cover" + > + </a> + <div class="p-4"> + <h2 class="mb-2 text-xl font-bold"> + <a href="{% url "timer:index" %}"> + ÄŚasovaÄŤ pro Ĺ™eÄŤnĂky + </a> + </h2> + <div class="font-light text-sm break-words"> + VzdálenÄ› ovladatelnĂ˝ ÄŤasovaÄŤ pro omezenĂ doby projevu Ĺ™eÄŤnĂkĹŻ. + </div> + </div> + </li> + <li class="card"> <a href="{% url "asset_server_resize:index" %}"> <img diff --git a/static_src/member_group_size_calc.js b/static_src/member_group_size_calc.js index be1f821..8c61aef 100644 --- a/static_src/member_group_size_calc.js +++ b/static_src/member_group_size_calc.js @@ -1,4 +1,4 @@ -import $ from "jquery"; + import $ from "jquery"; $(window).ready( () => { diff --git a/static_src/timer.js b/static_src/timer.js index ba838ff..7a51484 100644 --- a/static_src/timer.js +++ b/static_src/timer.js @@ -5,7 +5,7 @@ const assignEventListeners = (timer) => { timer.addEventListener( 'secondsUpdated', (event) => { - $('#timer .timer-values').html(timer.getTimeValues().toString()) + $('#timer .timer-values').html(timer.getTimeValues().toString(['minutes', 'seconds'])) } ) @@ -17,7 +17,7 @@ const assignEventListeners = (timer) => { } ) - $('#timer .timer-values').html(timer.getTimeValues().toString()) + $('#timer .timer-values').html(timer.getTimeValues().toString(['minutes', 'seconds'])) } $(window).ready( @@ -27,14 +27,16 @@ $(window).ready( let timer = new Timer({ countdown: true, startValues: { - hours: window.startingTime.hours, minutes: window.startingTime.minutes, seconds: window.startingTime.seconds, } }) const timerSocket = new WebSocket( - "wss://" + ( + (window.location.protocol === "https:") ? + "wss://" : "ws://" + ) + window.location.host + "/ws/timer/" ) @@ -45,11 +47,12 @@ $(window).ready( if ("status" in data) { if (data["status"] === "playing") { // Reset if we are playing again. - if (!timer.isRunning()) { + const remainingTime = timer.getTimeValues() + + if (remainingTime.seconds === 0 && remainingTime.minutes === 0) { timer = new Timer({ countdown: true, startValues: { - hours: window.startingTime.hours, minutes: window.startingTime.minutes, seconds: window.startingTime.seconds, } @@ -66,7 +69,6 @@ $(window).ready( timer.pause() window.startingTime = { - hours: data["time"]["hours"], minutes: data["time"]["minutes"], seconds: data["time"]["seconds"] } @@ -74,7 +76,6 @@ $(window).ready( timer = new Timer({ countdown: true, startValues: { - hours: window.startingTime.hours, minutes: window.startingTime.minutes, seconds: window.startingTime.seconds, } @@ -90,14 +91,25 @@ $(window).ready( // --- BEGIN Controls --- + $("#pause_play").on( + "click", + (event) => { + $("#is_counting").click() + } + ) + $("#is_counting").on( "change", (event) => { if (event.target.checked) { + $("#pause_play > .btn__body").html("⏸︎") + timerSocket.send(JSON.stringify({ "status": "playing" })) } else { + $("#pause_play > .btn__body").html("⏵︎") + timerSocket.send(JSON.stringify({ "status": "paused" })) @@ -110,7 +122,6 @@ $(window).ready( (event) => { timerSocket.send(JSON.stringify({ "time": { - "hours": Number($("#hours").val()), "minutes": Number($("#minutes").val()), "seconds": Number($("#seconds").val()) } diff --git a/timer/consumers.py b/timer/consumers.py index 1946e2f..4cdf054 100644 --- a/timer/consumers.py +++ b/timer/consumers.py @@ -27,7 +27,6 @@ class TimerConsumer(WebsocketConsumer): if "time" in json_data: response = { "time": { - "hours": json_data["time"]["hours"], "minutes": json_data["time"]["minutes"], "seconds": json_data["time"]["seconds"], } diff --git a/timer/forms.py b/timer/forms.py index 7214ca8..4ca9fd6 100644 --- a/timer/forms.py +++ b/timer/forms.py @@ -7,10 +7,6 @@ from django.core.validators import ( class TimeOnlyForm(forms.Form): - hours = forms.IntegerField( - label="Hodiny", validators=[MinValueValidator(limit_value=0)] - ) - minutes = forms.IntegerField( label="Minuty", validators=[ diff --git a/timer/migrations/0002_alter_ongoingtimer_name.py b/timer/migrations/0002_alter_ongoingtimer_name.py new file mode 100644 index 0000000..338b6da --- /dev/null +++ b/timer/migrations/0002_alter_ongoingtimer_name.py @@ -0,0 +1,22 @@ +# Generated by Django 4.1.5 on 2023-08-25 11:53 + +import django.core.validators +from django.db import migrations, models + + +class Migration(migrations.Migration): + dependencies = [ + ("timer", "0001_initial"), + ] + + operations = [ + migrations.AlterField( + model_name="ongoingtimer", + name="name", + field=models.CharField( + max_length=64, + validators=[django.core.validators.MinLengthValidator(limit_value=1)], + verbose_name="Název", + ), + ), + ] diff --git a/timer/migrations/0003_remove_ongoingtimer_hours.py b/timer/migrations/0003_remove_ongoingtimer_hours.py new file mode 100644 index 0000000..d3f4014 --- /dev/null +++ b/timer/migrations/0003_remove_ongoingtimer_hours.py @@ -0,0 +1,16 @@ +# Generated by Django 4.1.5 on 2023-08-25 16:47 + +from django.db import migrations + + +class Migration(migrations.Migration): + dependencies = [ + ("timer", "0002_alter_ongoingtimer_name"), + ] + + operations = [ + migrations.RemoveField( + model_name="ongoingtimer", + name="hours", + ), + ] diff --git a/timer/models.py b/timer/models.py index cc97e9b..545cb28 100644 --- a/timer/models.py +++ b/timer/models.py @@ -15,10 +15,6 @@ class OngoingTimer(models.Model): validators=[MinLengthValidator(limit_value=1)], ) - hours = models.IntegerField( - verbose_name="Hodiny", validators=[MinValueValidator(limit_value=0)] - ) - minutes = models.IntegerField( verbose_name="Minuty", validators=[ diff --git a/timer/templates/timer/edit_timer.html b/timer/templates/timer/edit_timer.html index d4d75af..8ae6485 100644 --- a/timer/templates/timer/edit_timer.html +++ b/timer/templates/timer/edit_timer.html @@ -17,43 +17,45 @@ {% block content %} <script> window.startingTime = { - hours: {{ timer.hours }}, minutes: {{ timer.minutes }}, seconds: {{ timer.seconds }}, } </script> <main> - <h1 class="text-6xl font-bebas mb">Ăšprava ÄŤasovaÄŤe {{ timer.name }}</h1> + <h1 class="text-6xl font-bebas">Ăšprava ÄŤasovaÄŤe {{ timer.name }}</h1> - <div> + <hr> + + <div class="text-xl"> <div id="timer"> - <div class="timer-values">{{ timer.hours }}:{{ timer.minutes }}:{{ timer.seconds }}</div> + <div class="timer-values"></div> </div> </div> - <div class="flex flex-col gap-2"> + <hr> + + <div class="flex flex-col gap-5"> <div> - <input - type="checkbox" - id="is_counting" - name="is_counting" - autocomplete="off" - value="false" + <div class="hidden"> + <input + type="checkbox" + id="is_counting" + name="is_counting" + autocomplete="off" + value="false" + > + </div> + <button + id="pause_play" + class="btn w-64 text-xl" > - <label - for="is_counting" - >OdpoÄŤet spuštÄ›nĂ˝</label> + <div class="btn__body">⏵︎</div> + </button> </div> - <div class="flex gap-2"> - <input - type="number" - id="hours" - name="hours" - placeholder="Hodiny" - autocomplete="off" - > + <div class="flex flex-col gap-2"> <input + class="w-64 text-lg" type="number" id="minutes" name="minutes" @@ -61,6 +63,7 @@ autocomplete="off" > <input + class="w-64 text-lg" type="number" id="seconds" name="seconds" @@ -69,7 +72,10 @@ > <button id="update-time" - >Aktualizovat ÄŤas</button> + class="btn w-64" + > + <div class="btn__body">Aktualizovat ÄŤas</div> + </button> </div> </div> </main> diff --git a/timer/templates/timer/view_timer.html b/timer/templates/timer/view_timer.html index 5e11cf3..88feba5 100644 --- a/timer/templates/timer/view_timer.html +++ b/timer/templates/timer/view_timer.html @@ -16,16 +16,15 @@ {% block nav %}{% endblock %} -{% block content %} +{% block raw_content %} <script> window.startingTime = { - hours: {{ timer.hours }}, minutes: {{ timer.minutes }}, seconds: {{ timer.seconds }}, } </script> - <main> + <main class="text-center bg-black text-white h-screen flex flex-col justify-between py-5"> <h1 class="text-6xl font-bebas mb">{{ timer.name }}</h1> <div @@ -38,7 +37,7 @@ </div> <a - class="text-gray-400" + class="text-white opacity-25 text-sm" href="{% url 'timer:edit_timer' timer.id %}" >Upravit</a> </main> -- GitLab