diff --git a/server.py b/server.py index bb4c04e4e1c360fa13ce2c3472573134319dc11c..8dfe5c75bfdd7f723fbbbf48839e4c1a92587f9e 100755 --- a/server.py +++ b/server.py @@ -114,7 +114,7 @@ def merge_todos(): @manager.command def runserver(): - app.run() + app.run(host="192.168.0.13") make_scheduler() # cause uwsgi currently has a bug @@ -430,7 +430,7 @@ def list_protocols(): "<b>{}</b>".format(text) if matched else text for text, matched in parts ])) - search_results[protocol] = "<br />\n".join(formatted_lines) + search_results[protocol] = " …<br />\n".join(formatted_lines) protocols = sorted(protocols, key=lambda protocol: protocol.date, reverse=True) page = _get_page() page_count = int(math.ceil(len(protocols) / config.PAGE_LENGTH)) diff --git a/templates/index.html b/templates/index.html index 461f743a8e9c97ca3eeeee4b059e46306f3f2172..fc3356acf62d01c54bbb6544f9cc59d7c38d4ac3 100644 --- a/templates/index.html +++ b/templates/index.html @@ -3,7 +3,7 @@ {% block title %}Startseite{% endblock %} {% block content %} -{% if protocol is not none %} +{% if check_login() %} <div class="row"> <div id="left-column" class="col-lg-6"> {% endif %} @@ -25,56 +25,56 @@ {% endif %} {% endif %} </ul> - {% if check_login() %} - <h3>Offene Todos <a href="{{url_for("list_todos")}}">Alle</a></h3> - <ul> - {% if todos|length > 0 %} - {% for todo in todos %} - <li>{{todo.render_html()|safe}} ({{todo.protocoltype.name}})</li> - {% endfor %} - {% else %} - <li>Keine Todos</li> + {% if protocol is not none %} + <h3>Letztes Protokoll</h3> + <div class="well"> + <div class="btn-group"> + <a class="btn btn-primary" href="{{url_for("show_protocol", protocol_id=protocol.id)}}">Details anzeigen</a> + {% if protocol.protocoltype.has_modify_right(current_user()) %} + <a class="btn btn-default" href="{{url_for("update_protocol", protocol_id=protocol.id)}}">Protokoll editieren</a> + {% endif %} + {% if protocol.has_compiled_document() %} + <a class="btn btn-success" href="{{url_for("download_document", document_id=protocol.get_compiled_document().id)}}">Download</a> + {% endif %} + </div> + <h2>Protokoll: {{protocol.protocoltype.name}} {% if protocol.date is not none %}vom {{protocol.date|datify}}{% endif %}</h2> + {% if protocol.date is not none %} + <p><strong>Datum:</strong> {{protocol.date|datify_long}}</p> {% endif %} - </ul> + {% if protocol.start_time is not none and protocol.end_time is not none %} + <p><strong>Zeit:</strong> von {{protocol.start_time|timify}} bis {{protocol.end_time|timify}}</p> + {% endif %} + {% for meta in protocol.metas %} + <p><strong>{{meta.name}}:</strong> {{meta.value}}</p> + {% endfor %} + <h3>Tagesordnung{% if has_modify_right and not protocol.has_nonplanned_tops() %} <a href="{{url_for("new_top", protocol_id=protocol.id)}}">Top hinzufügen</a>{% endif %}</h3> + {% include "protocol-tops-include.html" %} + + <h3>Beschlüsse</h3> + <ul> + {% if protocol.decisions|length > 0 %} + {% for decision in protocol.decisions %} + <li>{{decision.content}}</li> + {% endfor %} + {% else %} + <li>Keine Beschlüsse</li> + {% endif %} + </ul> + </div> {% endif %} -{% if protocol is not none %} +{% if check_login() %} </div> <div id="right-column" class="col-lg-6"> - <h3>Letztes Protokoll</h3> - <div class="well"> - <div class="btn-group"> - <a class="btn btn-primary" href="{{url_for("show_protocol", protocol_id=protocol.id)}}">Details anzeigen</a> - {% if protocol.protocoltype.has_modify_right(current_user()) %} - <a class="btn btn-default" href="{{url_for("update_protocol", protocol_id=protocol.id)}}">Protokoll editieren</a> - {% endif %} - {% if protocol.has_compiled_document() %} - <a class="btn btn-success" href="{{url_for("download_document", document_id=protocol.get_compiled_document().id)}}">Download</a> - {% endif %} - </div> - <h2>Protokoll: {{protocol.protocoltype.name}} {% if protocol.date is not none %}vom {{protocol.date|datify}}{% endif %}</h2> - {% if protocol.date is not none %} - <p><strong>Datum:</strong> {{protocol.date|datify_long}}</p> - {% endif %} - {% if protocol.start_time is not none and protocol.end_time is not none %} - <p><strong>Zeit:</strong> von {{protocol.start_time|timify}} bis {{protocol.end_time|timify}}</p> + <h3>Offene Todos <a href="{{url_for("list_todos")}}">Alle</a></h3> + <ul> + {% if todos|length > 0 %} + {% for todo in todos %} + <li>{{todo.render_html()|safe}} ({{todo.protocoltype.name}})</li> + {% endfor %} + {% else %} + <li>Keine Todos</li> {% endif %} - {% for meta in protocol.metas %} - <p><strong>{{meta.name}}:</strong> {{meta.value}}</p> - {% endfor %} - <h3>Tagesordnung{% if has_modify_right and not protocol.has_nonplanned_tops() %} <a href="{{url_for("new_top", protocol_id=protocol.id)}}">Top hinzufügen</a>{% endif %}</h3> - {% include "protocol-tops-include.html" %} - - <h3>Beschlüsse</h3> - <ul> - {% if protocol.decisions|length > 0 %} - {% for decision in protocol.decisions %} - <li>{{decision.content}}</li> - {% endfor %} - {% else %} - <li>Keine Beschlüsse</li> - {% endif %} - </ul> - </div> + </ul> </div> </div> {% endif %} diff --git a/templates/macros.html b/templates/macros.html index 6898077ecace3a383fc642466842132b738256b1..ca64d1fc627763d59d9d05476f01de21c1cc4046 100644 --- a/templates/macros.html +++ b/templates/macros.html @@ -109,6 +109,7 @@ to not render a label for the CRSFTokenField --> {%- endmacro %} {% macro render_table(table) -%} + {% set classes = table.classes() %} <h3> {{table.title}} {% if table.newlink is not none %} @@ -118,16 +119,16 @@ to not render a label for the CRSFTokenField --> <table class="table table-striped"> <thead> <tr> - {% for header in table.headers() %} - <th>{{header}}</th> + {% for (header, class) in zip(table.headers(), classes) %} + <th{% if class is not none %} class="{{class}}"{% endif %}>{{header}}</th> {% endfor %} </tr> </thead> <tbody> {% for row in table.rows() %} <tr> - {% for entry in row %} - <td>{{entry}}</td> + {% for (entry, class) in zip(row, classes) %} + <td{% if class is not none %} class="{{class}}"{% endif %}>{{entry}}</td> {% endfor %} </tr> {% endfor %} diff --git a/views/tables.py b/views/tables.py index 0faf6030f1793c5f75f3537a68b04efdc07898f0..9c69b66e03745f1977d40c661f543c18e681eb15 100644 --- a/views/tables.py +++ b/views/tables.py @@ -15,6 +15,9 @@ class Table: def rows(self): return [row for row in [self.row(value) for value in self.values] if row is not None] + def classes(self): + return [None for header in self.headers()] + @staticmethod def link(target, text, confirm=None): confirmation = "" @@ -55,7 +58,7 @@ class ProtocolsTable(Table): self.search_results = search_results def headers(self): - result = ["ID", "Sitzung", "Datum"] + result = ["ID", "Sitzung", "Sitzung", "Datum"] state_part = ["Status"] search_part = ["Suchergebnis"] login_part = ["Typ", "Löschen"] @@ -67,11 +70,22 @@ class ProtocolsTable(Table): result.extend(login_part) return result + def classes(self): + state_or_search_class = "hidden-xs" if self.search_results is None else None + result = ["hidden-xs", "hidden-sm hidden-md hidden-lg", "hidden-xs", "hidden-xs", None] + #result.append(state_or_search_class) + login_part = ["hidden-xs", "hidden-xs"] + if check_login(): + result.extend(login_part) + return result + def row(self, protocol): user = current_user() + protocol_link = url_for("show_protocol", protocol_id=protocol.id) result = [ - Table.link(url_for("show_protocol", protocol_id=protocol.id), str(protocol.id)), - Table.link(url_for("show_protocol", protocol_id=protocol.id), protocol.protocoltype.name), + Table.link(protocol_link, str(protocol.id)), + Markup("<br>").join([Table.link(protocol_link, protocol.protocoltype.name), date_filter(protocol.date)]), + Table.link(protocol_link, protocol.protocoltype.name), date_filter(protocol.date), ] if self.search_results is None: @@ -92,19 +106,41 @@ class ProtocolTypesTable(Table): super().__init__("Protokolltypen", types, newlink=url_for("new_type")) def headers(self): - return ["Typ", "Name", "Neuestes Protokoll", ""] + return [ + "Typ", "Protokoll", + "Typ", "Name", "Neuestes Protokoll", "" + ] + + def classes(self): + return [ + "hidden-sm hidden-md hidden-lg", "hidden-sm hidden-md hidden-lg", + "hidden-xs", "hidden-xs", "hidden-xs", "hidden-xs" + ] def row(self, protocoltype): protocol = protocoltype.get_latest_protocol() user = current_user() + has_private_view_right = protocoltype.has_private_view_right(user) has_modify_right = protocoltype.has_modify_right(user) - return [ - Table.link(url_for("show_type", protocoltype_id=protocoltype.id), protocoltype.short_name) if has_modify_right else protocoltype.short_name, + protocoltype_link = url_for("show_type", protocoltype_id=protocoltype.id) + protocol_link = url_for("show_protocol", protocol_id=protocol.id) + new_protocol_link = url_for("new_protocol", type_id=protocoltype.id) + mobile_name = "{} ({})".format(protocoltype.name, protocoltype.short_name) + mobile_links = [Table.link(protocol_link, protocol.get_identifier())] + if has_modify_right: + mobile_links.append(Table.link(new_protocol_link, "Neues Protokoll")) + mobile_part = [ + Table.link(protocoltype_link, mobile_name) if has_private_view_right else mobile_name, + Markup("<br>".join(mobile_links)) + ] + desktop_part = [ + Table.link(protocoltype_link, protocoltype.short_name) if has_private_view_right else protocoltype.short_name, protocoltype.name, - Table.link(url_for("show_protocol", protocol_id=protocol.id), protocol.get_identifier()) if protocol is not None else "Noch kein Protokoll", - Table.link(url_for("new_protocol", type_id=protocoltype.id), "Neues Protokoll") if has_modify_right else "" + Table.link(protocol_link, protocol.get_identifier()) if protocol is not None else "Noch kein Protokoll", + Table.link(new_protocol_link, "Neues Protokoll") if has_modify_right else "" "" # TODO: add link for modify, delete ] + return mobile_part + desktop_part class ProtocolTypeTable(SingleValueTable): def __init__(self, protocoltype): @@ -229,6 +265,9 @@ class ErrorsTable(Table): def headers(self): return ["Protokoll", "Aktion", "Fehler", "Zeitpunkt", "Beschreibung", ""] + def classes(self): + return [None, None, None, None, "hidden-xs"] + def row(self, error): return [ Table.link(url_for("show_protocol", protocol_id=error.protocol.id), error.protocol.get_identifier()), @@ -260,12 +299,20 @@ class TodosTable(Table): super().__init__("Todos", todos, newlink=url_for("new_todo")) def headers(self): - return ["ID", "Status", "Sitzung", "Name", "Aufgabe", ""] + return ["Todo", "ID", "Status", "Sitzung", "Name", "Aufgabe", ""] + + def classes(self): + return ["hidden-sm hidden-md hidden-lg", "hidden-xs", "hidden-xs", "hidden-xs", "hidden-xs", None, "hidden-xs"] def row(self, todo): user = current_user() protocol = todo.get_first_protocol() row = [ + Markup("<br>").join([ + Table.link(url_for("show_todo", todo_id=todo.id), todo.get_state()), + Table.link(url_for("show_protocol", protocol_id=protocol.id), todo.protocoltype.short_name), + todo.who + ]), Table.link(url_for("show_todo", todo_id=todo.id), todo.get_id()), todo.get_state(), Table.link(url_for("show_protocol", protocol_id=protocol.id), protocol.get_identifier()) @@ -338,6 +385,9 @@ class DocumentsTable(Table): def headers(self): return ["ID", "Name", ""] + def classes(self): + return [None, None, "hidden-xs"] + def row(self, document): user = current_user() links = []