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/templates/protocol.tex b/templates/protocol.tex index 206a7510a89280ee30f69a34b4929248acd61487..bc289ba5688c0428d70728a076a696911868b06f 100644 --- a/templates/protocol.tex +++ b/templates/protocol.tex @@ -5,7 +5,9 @@ \usepackage{pdfpages} \usepackage{eurosym} %\usepackage[utf8]{inputenc} -\usepackage[pdfborder={0 0 0}]{hyperref} +\usepackage[hyphens]{url} +\usepackage[pdfborder={0 0 0},breaklinks=true]{hyperref} +\def\UrlBreaks{\do\/\do-\do\&\do.\do,\do;\do\_\do?\do\#} %\usepackage{ngerman} % \usepackage[left]{lineno} %\usepackage{footnote} diff --git a/templates/protokoll2.cls b/templates/protokoll2.cls index b181f14dd0dbc3b1384f852151bcfad58782a947..9acc5a80f72227f1c5ea2d0d7183897bbb1263e5 100644 --- a/templates/protokoll2.cls +++ b/templates/protokoll2.cls @@ -1,7 +1,7 @@ % protokoll.cls -- version 0.1 -- last changed: see mtime of the file ;) % % -% Author: Sebastian G�nther <samson@asta.rwth-aachen.de> +% Author: Sebastian Günther <samson@asta.rwth-aachen.de> % zuerst mal LaTeX's formalzeug \NeedsTeXFormat{LaTeX2e} @@ -126,7 +126,7 @@ \renewcommand{\thesubsection}{TOP~\arabic{section}~(\alph{subsection})} \newcommand{\TOP}[1]{\section{#1}} \newcommand{\unterTOP}[1]{\subsection{#1}} -% F�rs Inhaltsverzeichnisanpassen +% Fürs Inhaltsverzeichnisanpassen \renewcommand{\l@section}{\@dottedtocline{1}{1.5em}{4em}} \renewcommand{\l@subsection}{\@dottedtocline{2}{5.5em}{5.2em}} \renewcommand{\contentsname}{Tagesordnung} @@ -166,7 +166,7 @@ }% {\end{list}} -% Abk�rzungen +% Abkürzungen \newenvironment{Abk}{% \begin{list}{}{% Abkürzungen: @@ -183,7 +183,7 @@ }% {\end{list}} -% Unterschriften f�r eine und zwei Personen +% Unterschriften für eine und zwei Personen \newcommand{\Unterschrift}[2]{ \vspace*{1.4cm} \begin{center} diff --git a/views/forms.py b/views/forms.py index fe3a2affd485bf0e7d3c6f2a83d2d655e3946bd5..276a8bfbd35920df774d19a51537943c6401fdfa 100644 --- a/views/forms.py +++ b/views/forms.py @@ -99,8 +99,13 @@ 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): + kwargs['autofocus'] = True + return super().__call__(**kwargs) + 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?")