diff --git a/server.py b/server.py index 61eb7e3853dd079bdb09e9e9795bc8860d15f4f6..eec035d5e969bf3d3a5b2d3d1633dd37ae530cdc 100755 --- a/server.py +++ b/server.py @@ -18,6 +18,7 @@ import os from datetime import datetime import math import mimetypes +import subprocess import config from shared import db, date_filter, datetime_filter, date_filter_long, date_filter_short, time_filter, time_filter_short, user_manager, security_manager, current_user, check_login, login_required, group_required, class_filter, needs_date_test, todostate_name_filter, code_filter, indent_tab_filter @@ -80,6 +81,18 @@ app.jinja_env.globals.update(max=max) app.jinja_env.globals.update(dir=dir) app.jinja_env.globals.update(now=datetime.now) +def get_git_revision(): + gitlab_url = "https://git.fsmpi.rwth-aachen.de/protokollsystem/proto3" + commit_hash = subprocess.check_output(["git", "log", "-g", "-1", "--pretty=%H"]).decode("UTF-8").strip() + timestamp = int(subprocess.check_output(["git", "log", "-g", "-1", "--pretty=%at"]).strip()) + commit_date = datetime.fromtimestamp(timestamp) + return {"url": gitlab_url, "hash": commit_hash, "date": commit_date} + +try: + app.jinja_env.globals["git_revision"] = get_git_revision() +except: + pass + # blueprints here @manager.command diff --git a/templates/documentation.html b/templates/documentation.html index 5c6758b5a55867938b6fb45e411f84e2ae5668b8..fd539659aa1c8805ff88fe6d9cd52dd0aadb4c60 100644 --- a/templates/documentation.html +++ b/templates/documentation.html @@ -214,6 +214,11 @@ Optional kann zusätzlich eine Uhrzeit angegeben werden: <code>[sitzung;Datum;Uhrzeit]</code> (z.B. <code>[sitzung;01.01.2018;9:00]</code>). {% endif %} + {% if git_revision %} + <h3 id="version">Version</h4> + Dieses Protokollsystem nutzt die Software <a href="{{git_revision.url}}">„Protokollsystem 3“</a> in der Version vom <a href="{{git_revision.url}}/commit/{{git_revision.hash}}">{{git_revision.date|datify}}</a>. + Alle Änderungen, die seitdem hinzugekommen sind, kannst du <a href="{{git_revision.url}}/compare/{{git_revision.hash}}...master">hier</a> sehen. + {% endif %} </div> </div> {% endblock %} diff --git a/templates/protocol-show.html b/templates/protocol-show.html index 2faf8783bc6b73ffe9c7a11a2941339a46543057..882700c1e0816c0925c015ef2bdfbf02f72f5d5d 100644 --- a/templates/protocol-show.html +++ b/templates/protocol-show.html @@ -26,7 +26,7 @@ {% endif %} {% if not protocol.public %} {% if config.ETHERPAD_ACTIVE %} - <a class="btn btn-primary" href="{{url_for("etherpush_protocol", protocol_id=protocol.id)}}"{% if large_time_diff %} onclick="return confirm('Bist du dir sicher, dass du das Template bereits in das Etherpad kopieren willst? Die Sitzung ist erst in {{time_diff.days}} Tagen.');"{% endif %}>Etherpad</a> + <a class="btn btn-primary" href="{{url_for("etherpush_protocol", protocol_id=protocol.id)}}"{% if large_time_diff %} onclick="return confirm('Bist du dir sicher, dass du das Template bereits in das Etherpad kopieren willst? Die Sitzung ist erst in {{time_diff.days}} Tagen.');"{% endif %} target="_blank">Etherpad</a> {% endif %} {% endif %} {% if not protocol.is_done() %} diff --git a/views/forms.py b/views/forms.py index fe3a2affd485bf0e7d3c6f2a83d2d655e3946bd5..fb65efe28d7753fe04af55fb7943501494462c34 100644 --- a/views/forms.py +++ b/views/forms.py @@ -99,8 +99,12 @@ class IPNetworkField(Field): raise ValueError(self.gettext("Not a valid IP Network: {}".format(str(exc)))) self.data = ",".join(map(str, result_parts)) +class FocusedStringField(StringField): + def __call__(self, **kwargs): + return super().__call__(**kwargs, autofocus=True) + class LoginForm(FlaskForm): - username = StringField("Benutzer", validators=[InputRequired("Bitte gib deinen Benutzernamen ein.")]) + username = FocusedStringField("Benutzer", validators=[InputRequired("Bitte gib deinen Benutzernamen ein.")]) password = PasswordField("Passwort", validators=[InputRequired("Bitte gib dein Passwort ein.")]) permanent = BooleanField("Eingeloggt bleiben?")