From b0aeb6011a866b0f60ce81adbefd074e68870c8d Mon Sep 17 00:00:00 2001 From: YSelf Tool <yselftool@gmail.com> Date: Fri, 11 Sep 2015 16:46:43 +0200 Subject: [PATCH] Added time view, single template for update javascript files --- modules/admin.py | 20 ++++++++-------- modules/speech.py | 17 +++++++++----- server.py | 30 +++++++++++++++++------- shared.py | 7 +++++- templates/content_time.html | 1 + templates/layout.html | 5 ++++ templates/{update_index.js => update.js} | 7 +++--- templates/update_show.js | 30 ------------------------ 8 files changed, 58 insertions(+), 59 deletions(-) create mode 100644 templates/content_time.html rename templates/{update_index.js => update.js} (76%) delete mode 100644 templates/update_show.js diff --git a/modules/admin.py b/modules/admin.py index 876457f..d18ca5c 100644 --- a/modules/admin.py +++ b/modules/admin.py @@ -1,11 +1,11 @@ -from flask import Blueprint, render_template, redirect, url_for, request, flash, abort, send_file, Response +from flask import Blueprint, redirect, url_for, request, flash, abort, send_file, Response from flask.ext.login import login_required from passlib.hash import pbkdf2_sha256 from models.database import User, Event from models.forms import AdminUserForm, NewUserForm, NewEventForm -from shared import db, admin_permission +from shared import db, admin_permission, render_layout admin = Blueprint("admin", __name__) @@ -16,14 +16,14 @@ admin = Blueprint("admin", __name__) def index(): users = User.query.limit(10).all() events = Event.query.limit(10).all() - return render_template("admin_index.html", users=users, events=events) + return render_layout("admin_index.html", users=users, events=events) @admin.route("/user/") @login_required @admin_permission.require() def user(): users = User.query.all() - return render_template("admin_user_index.html", users=users) + return render_layout("admin_user_index.html", users=users) @admin.route("/user/edit", methods=["GET", "POST"]) @login_required @@ -38,7 +38,7 @@ def user_edit(): db.session.commit() return redirect(url_for(".index")) else: - return render_template("admin_user_edit.html", form=form, id=user_id) + return render_layout("admin_user_edit.html", form=form, id=user_id) else: return redirect(url_for(".index")) @@ -66,7 +66,7 @@ def user_new(): db.session.add(user) db.session.commit() return redirect(url_for(".user")) - return render_template("admin_user_new.html", form=form) + return render_layout("admin_user_new.html", form=form) @admin.route("/event/new", methods=["GET", "POST"]) @@ -77,12 +77,12 @@ def event_new(): if form.validate_on_submit(): if Event.query.filter_by(name=form.name.data).count() > 0: flash("There already is an event with that name.", "alert-error") - return render_template("admin_event_new.html", form=form) + return render_layout("admin_event_new.html", form=form) event = Event(form.name.data, form.date.data) db.session.add(event) db.session.commit() return redirect(url_for(".event")) - return render_template("admin_event_new.html", form=form) + return render_layout("admin_event_new.html", form=form) @admin.route("/event/delete") @login_required @@ -109,7 +109,7 @@ def event_edit(): db.session.commit() return redirect(url_for(".index")) else: - return render_template("admin_event_edit.html", form=form, id=event_id) + return render_layout("admin_event_edit.html", form=form, id=event_id) else: return redirect(url_for(".index")) @@ -119,4 +119,4 @@ def event_edit(): def event(): events = Event.query.all() print(events) - return render_template("admin_event_index.html", events=events) + return render_layout("admin_event_index.html", events=events) diff --git a/modules/speech.py b/modules/speech.py index dc76132..56b2bb4 100644 --- a/modules/speech.py +++ b/modules/speech.py @@ -1,14 +1,16 @@ -from flask import Blueprint, render_template, redirect, url_for, request, flash, abort, send_file, Response +from flask import Blueprint, redirect, url_for, request, flash, abort, send_file, Response from flask.ext.login import login_required from models.database import User, Statement, Speaker, Event from models.forms import AddStatementForm -from shared import db, admin_permission, user_permission +from shared import db, admin_permission, user_permission, render_layout from datetime import datetime import json +import config + speech = Blueprint("speech", __name__) def transpose(arr): @@ -41,7 +43,7 @@ def index(): form.event.data = event.id meta.append((query_statements(mode, event.id), form, event)) event_id = -1 - return render_template("speech_index.html", meta=meta, event_id=event_id) + return render_layout("speech_index.html", meta=meta, event_id=event_id) @speech.route("/show") def show(): @@ -54,7 +56,7 @@ def show(): else: for event in Event.query.all(): meta.append((query_statements(mode, event.id), event)) - return render_template("speech_show.html", mode=mode, meta=meta, event_id=event_id) + return render_layout("speech_show.html", mode=mode, meta=meta, event_id=event_id) @speech.route("/update") def update(): @@ -67,7 +69,7 @@ def update(): else: for event in Event.query.all(): meta.append((query_statements(mode, event.id), event)) - return render_template("speech_content_show.html", mode=mode, meta=meta) + return render_layout("speech_content_show.html", mode=mode, meta=meta) @speech.route("/add", methods=["GET", "POST"]) @@ -130,7 +132,10 @@ def done(): @speech.route("/update_show.js") def update_show_js(): + update_interval = config.UPDATE_SHOW_INTERVAL or 1 + div = "rede-content-div" mode = request.args.get("mode", "pending") event_id = request.args.get("event", -1) - return render_template("update_show.js", mode=mode, event_id=event_id) + target_url = url_for(".update", mode=mode, event=event_id) + return render_layout("update.js", update_interval=update_interval, div=div, target_url=target_url) diff --git a/server.py b/server.py index d1a7a22..42c4241 100755 --- a/server.py +++ b/server.py @@ -1,12 +1,12 @@ #!/usr/bin/env python3 -from flask import Flask, g, current_app, request, render_template, session, flash, redirect, url_for, abort +from flask import Flask, g, current_app, request, session, flash, redirect, url_for, abort from flask.ext.login import login_user, logout_user, login_required, current_user from flask.ext.principal import Principal, Identity, AnonymousIdentity, identity_changed, identity_loaded, UserNeed, RoleNeed from passlib.hash import pbkdf2_sha256 import config -from shared import db, login_manager +from shared import db, login_manager, render_layout from models.forms import LoginForm, NewUserForm from models.database import User, Statement, Speaker, Event @@ -41,7 +41,7 @@ def index(): no_speaker = Speaker("No Speaker", event) no_statement = Statement(no_speaker, event) meta.append((ls[0] if len(ls) > 0 else (no_statement, no_speaker, ()), event)) - return render_template("index.html", meta=meta) + return render_layout("index.html", meta=meta) @app.route("/update") def update(): @@ -52,11 +52,25 @@ def update(): no_speaker = Speaker("No Speaker", event) no_statement = Statement(no_speaker, event) meta.append((ls[0] if len(ls) > 0 else (no_statement, no_speaker, ()), event)) - return render_template("content_index.html", meta=meta) + return render_layout("content_index.html", meta=meta) @app.route("/update.js") def update_js(): - return render_template("update_index.js") + update_interval = config.UPDATE_INDEX_INTERVAL or 1 + div = "rede-content-div" + target_url = url_for(".update") + return render_layout("update.js", update_interval=update_interval, div=div, target=target_url) + +@app.route("/update_time") +def update_time(): + return render_layout("content_time.html") + +@app.route("/update_time.js") +def update_time_js(): + update_interval = config.UPDATE_TIME_INTERVAL or 10 + div = "rede-time-div" + target_url = url_for("update_time") + return render_layout("update.js", update_interval=update_interval, div=div, target_url=target_url) @app.route("/login", methods=["GET", "POST"]) def login(): @@ -70,7 +84,7 @@ def login(): return redirect(request.args.get("next") or url_for(".index")) else: flash("Invalid username or wrong password", "alert-error") - return render_template("login.html", form=form) + return render_layout("login.html", form=form) @app.route("/logout", methods=["GET", "POST"]) @login_required @@ -89,14 +103,14 @@ def register(): length = len(db.session.query(User).filter_by(username=form.username.data).all()) if length > 0: flash("There already is a user with that name.") - return render_template("register.html", form=form) + return render_layout("register.html", form=form) password = pbkdf2_sha256.encrypt(form.password.data, rounds=200000, salt_size=16) user = User(fullname, username, password, []) db.session.add(user) db.session.commit() flash("Your account has been created, you may now log in with it.") return redirect(url_for(".login")) - return render_template("register.html", form=form) + return render_layout("register.html", form=form) @identity_loaded.connect_via(app) def on_identity_loaded(sender, identity): diff --git a/shared.py b/shared.py index dcb2bc7..9235757 100644 --- a/shared.py +++ b/shared.py @@ -1,7 +1,8 @@ -from flask import abort +from flask import abort, render_template from flask.ext.sqlalchemy import SQLAlchemy from flask.ext.login import LoginManager from flask.ext.principal import Permission, RoleNeed +from datetime import datetime db = SQLAlchemy() login_manager = LoginManager() @@ -9,3 +10,7 @@ login_manager = LoginManager() admin_permission = Permission(RoleNeed("admin")) user_permission = Permission(RoleNeed("user")) roles = ["user", "admin"] + +def render_layout(template, **kwargs): + current_time = datetime.now() + return render_template(template, current_time=current_time, **kwargs) diff --git a/templates/content_time.html b/templates/content_time.html new file mode 100644 index 0000000..475a692 --- /dev/null +++ b/templates/content_time.html @@ -0,0 +1 @@ +{{ current_time.strftime("%H:%M") }} diff --git a/templates/layout.html b/templates/layout.html index 41c8ead..ddb82e4 100644 --- a/templates/layout.html +++ b/templates/layout.html @@ -12,6 +12,7 @@ <meta name="mobile-web-app-capable" content="yes"> <link rel="stylesheet" href="{{ url_for('static', filename='css/style.css') }}" /> <title>{% block title %}Unknown Page{% endblock %} - Redeleitsystem</title> + <script src="{{ url_for("update_time_js") }}" async></script> {% block additional_js %} <!-- Place to insert more .js-files --> {% endblock %} @@ -23,6 +24,10 @@ <div class="mdl-layout__header-row"> <a href="{{ url_for('index') }}"><span class="mdl-layout-title">Redeleitsystem</span></a> <div class="mdl-layout-spacer"></div> + <span id="rede-time-div" class="mdl-layout-title"> + {% include "content_time.html" %} + </span> + <div class="mdl-layout-spacer"></div> <button class="mdl-button mdl-js-button mdl-js-ripple-effet mdl-button--icon" id="hdrbtn"> <i class="material-icons">more_vert</i> </button> diff --git a/templates/update_index.js b/templates/update.js similarity index 76% rename from templates/update_index.js rename to templates/update.js index ee2e39c..c6634de 100644 --- a/templates/update_index.js +++ b/templates/update.js @@ -11,20 +11,19 @@ function request() { update(xmlhttp.responseText); } }; - var target = "{{ url_for('.update') }}"; + var target = "{{ target_url }}"; xmlhttp.open("GET", target, true); xmlhttp.send(); } function update(data) { if (data != last_content) { - document.getElementById("rede-content-div").innerHTML = data; + document.getElementById("{{ div }}").innerHTML = data; last_content = data; } } window.onload=function() { - window.setInterval(request, 1000); + window.setInterval(request, 1000 * {{ update_interval }}); } - diff --git a/templates/update_show.js b/templates/update_show.js deleted file mode 100644 index 54ec839..0000000 --- a/templates/update_show.js +++ /dev/null @@ -1,30 +0,0 @@ -var returned = true; -var last_content = ""; -function request() { - if (!returned) - return; - returned = false; - var xmlhttp = new XMLHttpRequest(); - xmlhttp.onreadystatechange=function() { - if (xmlhttp.readyState == 4 && xmlhttp.status == 200) { - returned = true; - update(xmlhttp.responseText); - } - }; - var target = "{{ url_for('.update', mode=mode, event=event_id) }}"; - xmlhttp.open("GET", target, true); - xmlhttp.send(); -} - -function update(data) { - if (data != last_content) { - document.getElementById("rede-content-div").innerHTML = data; - last_content = data; - } -} - -window.onload=function() { - window.setInterval(request, 1000); -} - - -- GitLab