From f4835ffdcb80ed5fa711ea9b33b295dae36258b2 Mon Sep 17 00:00:00 2001 From: "user@node5.net" Date: Mon, 29 Jun 2026 23:03:07 +0200 Subject: web: fetch with js to avoid flickering --- src/static/main.js | 36 +++++++----------------------------- src/templates/base.html | 5 ++--- src/templates/index.html | 8 ++++---- src/templates/program.html | 1 + src/text_tv.py | 4 ++++ 5 files changed, 18 insertions(+), 36 deletions(-) create mode 100644 src/templates/program.html diff --git a/src/static/main.js b/src/static/main.js index 7bea389..86cda7e 100644 --- a/src/static/main.js +++ b/src/static/main.js @@ -1,31 +1,9 @@ -const url = '/text'; -const parts = ["top", "program"]; -const elements = {}; - -function get_element(part){ - elements[part] = document.getElementById(part); -} - -const program_element = parts.forEach(get_element); - -function set_element_text(part, text){ - elements[part].innerHTML = text; +async function update() { + const html = await (await fetch("/update")).text(); + document.querySelector("#top").innerHTML = html.split("\n").slice(0, 1)[0]; + document.querySelector("#program").innerHTML = html.split("\n").slice(1).join("\n"); } -async function getEvents() { - try { - const response = await fetch(url); - if (!response.ok) { - throw new Error(`Response status: ${response.status}`); - } - - const events = await response.json(); - console.log(events) - - } catch (error) { - console.error(error.message); - } -} - -getEvents(); - +setInterval(() => { + update() +}, 5000); diff --git a/src/templates/base.html b/src/templates/base.html index 54c9c5e..c600ebf 100644 --- a/src/templates/base.html +++ b/src/templates/base.html @@ -9,12 +9,11 @@ {% endblock %} - - +
- + {% block content %} {% endblock %} diff --git a/src/templates/index.html b/src/templates/index.html index 85fe385..f076d32 100644 --- a/src/templates/index.html +++ b/src/templates/index.html @@ -3,13 +3,13 @@ {% block content %}
{{parts.top}}
- + -
{% for event in parts.program %}{% if loop.previtem and loop.previtem.day != event.day %}
{{ event.day }}
{% endif %}
{{event.title}} {{ event.time}} {{ event.icon }}

{% endfor %}
+ {% include 'program.html' %} {# - +
{{parts.news}}
-->
@@ -18,7 +18,7 @@
- + #}
diff --git a/src/templates/program.html b/src/templates/program.html new file mode 100644 index 0000000..2b455dc --- /dev/null +++ b/src/templates/program.html @@ -0,0 +1 @@ +
{% for event in parts.program %}{% if loop.previtem and loop.previtem.day != event.day %}
{{ event.day }}
{% endif %}
{{event.title}} {{ event.time}} {{ event.icon }}

{% endfor %}
diff --git a/src/text_tv.py b/src/text_tv.py index c0baf90..30b885a 100644 --- a/src/text_tv.py +++ b/src/text_tv.py @@ -18,6 +18,10 @@ def top(): now = datetime.datetime.now() if not program_parser.override_date else program_parser.override_date return f'BornHack S105 {now.strftime("%a %d %b %R:%S")} ' +@app.route('/update') +def update(): + return top() + '\n' + flask.render_template('program.html', parts=text()) + @app.route('/program.json') def program(): -- cgit v1.3.1