Commit e76ebbe8 authored by markus scheller's avatar markus scheller

Merge branch '172-dokumentation-ueberarbeiten' into 'master'

Resolve "Dokumentation überarbeiten"

Closes #172

See merge request !11
parents 23b68036 50e1f117
......@@ -26,7 +26,7 @@ from shared import (
date_filter_short, time_filter, time_filter_short, user_manager,
security_manager, current_user, check_login, login_required,
class_filter, needs_date_test, todostate_name_filter,
code_filter, indent_tab_filter)
code_filter, code_key_filter, indent_tab_filter)
from utils import (
get_first_unused_int, get_etherpad_text, split_terms, optional_int_arg,
fancy_join, footnote_hash, get_git_revision, get_max_page_length_exp,
......@@ -110,6 +110,7 @@ app.jinja_env.filters["datify_long"] = date_filter_long
app.jinja_env.filters["class"] = class_filter
app.jinja_env.filters["todo_get_name"] = todostate_name_filter
app.jinja_env.filters["code"] = code_filter
app.jinja_env.filters["code_key"] = code_key_filter
app.jinja_env.filters["indent_tab"] = indent_tab_filter
app.jinja_env.filters["fancy_join"] = fancy_join
app.jinja_env.filters["footnote_hash"] = footnote_hash
......@@ -280,17 +281,115 @@ def index():
protocol=protocol, todos=todos, show_private=show_private,
has_public_view_right=has_public_view_right)
@app.route("/documentation")
@back.anchor
@login_required
def documentation():
todostates = list(TodoState)
name_to_state = TodoState.get_name_to_state()
return render_template(
"documentation.html", todostates=todostates,
name_to_state=name_to_state)
"documentation.html")
@app.route("/documentation/sessionmanagement")
@back.anchor
@login_required
def sessionmanagement_documentation():
return render_template(
"documentation-sessionmanagement.html")
@app.route("/documentation/sessionmanagement/plan")
@back.anchor
@login_required
def plan_sessionmanagement_documentation():
return render_template(
"documentation-sessionmanagement-plan.html")
@app.route("/documentation/sessionmanagement/write")
@back.anchor
@login_required
def write_sessionmanagement_documentation():
return render_template(
"documentation-sessionmanagement-write.html")
@app.route("/documentation/sessionmanagement/tracking")
@back.anchor
@login_required
def tracking_sessionmanagement_documentation():
return render_template(
"documentation-sessionmanagement-tracking.html")
@app.route("/documentation/syntax")
@back.anchor
@login_required
def syntax_documentation():
return render_template(
"documentation-syntax.html")
@app.route("/documentation/syntax/meta")
@back.anchor
@login_required
def meta_syntax_documentation():
return render_template(
"documentation-syntax-meta.html")
@app.route("/documentation/syntax/top")
@back.anchor
@login_required
def top_syntax_documentation():
return render_template(
"documentation-syntax-top.html")
@app.route("/documentation/syntax/lists")
@back.anchor
@login_required
def lists_syntax_documentation():
return render_template("documentation-syntax-lists.html")
@app.route("/documentation/syntax/internal")
@back.anchor
@login_required
def internal_syntax_documentation():
return render_template(
"documentation-syntax-internal.html")
@app.route("/documentation/syntax/tags")
@back.anchor
@login_required
def tags_syntax_documentation():
states = {state:[] for state in list(TodoState)}
name_to_state = TodoState.get_name_to_state()
for state_name in name_to_state:
states[name_to_state[state_name]].append(state_name)
return render_template(
"documentation-syntax-tags.html", states=states)
@app.route("/documentation/configuration")
@back.anchor
@login_required
def configuration_documentation():
return render_template(
"documentation-configuration.html")
@app.route("/documentation/configuration/types")
@back.anchor
@login_required
def types_configuration_documentation():
return render_template(
"documentation-configuration-types.html")
@app.route("/documentation/configuration/todomails")
@back.anchor
@login_required
def todomails_configuration_documentation():
return render_template(
"documentation-configuration-todomails.html")
@app.route("/documentation/configuration/settings")
@back.anchor
@login_required
def settings_configuration_documentation():
user = current_user()
return render_template(
"documentation-configuration-settings.html",
system_administrator=(user is not None and config.ADMIN_GROUP in user.groups))
@app.route("/types/list")
@back.anchor
......
......@@ -128,6 +128,8 @@ def class_filter(obj):
def code_filter(text):
return "<code>{}</code>".format(text)
def code_key_filter(text):
return '<code class="highlight" style="color: inherit;"><span class="kr">{}</span></code>'.format(text)
from common.auth import UserManager, SecurityManager, User
max_duration = getattr(config, "AUTH_MAX_DURATION")
......
.highlight .hll { background-color: #ffffcc }
.highlight { background: #f0f3f3; }
.highlight .c { color: #0099FF; font-style: italic } /* Comment */
.highlight .err { color: #AA0000; background-color: #FFAAAA } /* Error */
.highlight .k { color: #006699; font-weight: bold } /* Keyword */
.highlight .o { color: #555555 } /* Operator */
.highlight .ch { color: #0099FF; font-style: italic } /* Comment.Hashbang */
.highlight .cm { color: #0099FF; font-style: italic } /* Comment.Multiline */
.highlight .cp { color: #009999 } /* Comment.Preproc */
.highlight .cpf { color: #0099FF; font-style: italic } /* Comment.PreprocFile */
.highlight .c1 { color: #0099FF; font-style: italic } /* Comment.Single */
.highlight .cs { color: #0099FF; font-weight: bold; font-style: italic } /* Comment.Special */
.highlight .gd { background-color: #FFCCCC; border: 1px solid #CC0000 } /* Generic.Deleted */
.highlight .ge { font-style: italic } /* Generic.Emph */
.highlight .gr { color: #FF0000 } /* Generic.Error */
.highlight .gh { color: #003300; font-weight: bold } /* Generic.Heading */
.highlight .gi { background-color: #CCFFCC; border: 1px solid #00CC00 } /* Generic.Inserted */
.highlight .go { color: #AAAAAA } /* Generic.Output */
.highlight .gp { color: #000099; font-weight: bold } /* Generic.Prompt */
.highlight .gs { font-weight: bold } /* Generic.Strong */
.highlight .gu { color: #003300; font-weight: bold } /* Generic.Subheading */
.highlight .gt { color: #99CC66 } /* Generic.Traceback */
.highlight .kc { color: #006699; font-weight: bold } /* Keyword.Constant */
.highlight .kd { color: #006699; font-weight: bold } /* Keyword.Declaration */
.highlight .kn { color: #006699; font-weight: bold } /* Keyword.Namespace */
.highlight .kp { color: #006699 } /* Keyword.Pseudo */
.highlight .kr { color: #006699; font-weight: bold } /* Keyword.Reserved */
.highlight .kt { color: #007788; font-weight: bold } /* Keyword.Type */
.highlight .m { color: #FF6600 } /* Literal.Number */
.highlight .s { color: #CC3300 } /* Literal.String */
.highlight .na { color: #330099 } /* Name.Attribute */
.highlight .nb { color: #336666 } /* Name.Builtin */
.highlight .nc { color: #00AA88; font-weight: bold } /* Name.Class */
.highlight .no { color: #336600 } /* Name.Constant */
.highlight .nd { color: #9999FF } /* Name.Decorator */
.highlight .ni { color: #999999; font-weight: bold } /* Name.Entity */
.highlight .ne { color: #CC0000; font-weight: bold } /* Name.Exception */
.highlight .nf { color: #CC00FF } /* Name.Function */
.highlight .nl { color: #9999FF } /* Name.Label */
.highlight .nn { color: #00CCFF; font-weight: bold } /* Name.Namespace */
.highlight .nt { color: #330099; font-weight: bold } /* Name.Tag */
.highlight .nv { color: #003333 } /* Name.Variable */
.highlight .ow { color: #000000; font-weight: bold } /* Operator.Word */
.highlight .w { color: #bbbbbb } /* Text.Whitespace */
.highlight .mb { color: #FF6600 } /* Literal.Number.Bin */
.highlight .mf { color: #FF6600 } /* Literal.Number.Float */
.highlight .mh { color: #FF6600 } /* Literal.Number.Hex */
.highlight .mi { color: #FF6600 } /* Literal.Number.Integer */
.highlight .mo { color: #FF6600 } /* Literal.Number.Oct */
.highlight .sa { color: #CC3300 } /* Literal.String.Affix */
.highlight .sb { color: #CC3300 } /* Literal.String.Backtick */
.highlight .sc { color: #CC3300 } /* Literal.String.Char */
.highlight .dl { color: #CC3300 } /* Literal.String.Delimiter */
.highlight .sd { color: #CC3300; font-style: italic } /* Literal.String.Doc */
.highlight .s2 { color: #CC3300 } /* Literal.String.Double */
.highlight .se { color: #CC3300; font-weight: bold } /* Literal.String.Escape */
.highlight .sh { color: #CC3300 } /* Literal.String.Heredoc */
.highlight .si { color: #AA0000 } /* Literal.String.Interpol */
.highlight .sx { color: #CC3300 } /* Literal.String.Other */
.highlight .sr { color: #33AAAA } /* Literal.String.Regex */
.highlight .s1 { color: #CC3300 } /* Literal.String.Single */
.highlight .ss { color: #FFCC33 } /* Literal.String.Symbol */
.highlight .bp { color: #336666 } /* Name.Builtin.Pseudo */
.highlight .fm { color: #CC00FF } /* Name.Function.Magic */
.highlight .vc { color: #003333 } /* Name.Variable.Class */
.highlight .vg { color: #003333 } /* Name.Variable.Global */
.highlight .vi { color: #003333 } /* Name.Variable.Instance */
.highlight .vm { color: #003333 } /* Name.Variable.Magic */
.highlight .il { color: #FF6600 } /* Literal.Number.Integer.Long */
{% extends "layout.html" %}
{% block additional_js %}
<link rel="stylesheet" href="{{url_for('static', filename='css/pygments-manni.css')}}" />
{% endblock %}
{% set navigation_bar = [
('sessionmanagement_documentation', '/documentation/sessionmanagement', 'Sitzungsverwaltung', [
('plan_sessionmanagement_documentation', '/documentation/sessionmanagement/plan', 'Planung'),
('write_sessionmanagement_documentation', '/documentation/sessionmanagement/write', 'Protokollieren'),
('tracking_sessionmanagement_documentation', '/documentation/sessionmanagement/tracking', 'Nachverfolgung')
]),
('syntax_documentation', '/documentation/syntax', 'Syntax', [
('meta_syntax_documentation', '/documentation/syntax/meta', 'Metadaten'),
('top_syntax_documentation', '/documentation/syntax/top', 'Tagesordnungspunkte'),
('lists_syntax_documentation', '/documentation/syntax/lists', 'Listen'),
('internal_syntax_documentation', '/documentation/syntax/internal', 'Interne Abschnitte'),
('tags_syntax_documentation', '/documentation/syntax/tags', 'Tags')
]),
('configuration_documentation', '/documentation/configuration', 'Einrichtung', [
('types_configuration_documentation', '/documentation/configuration/types', 'Typen'),
('todomails_configuration_documentation', '/documentation/configuration/todomails', 'Todo Mails'),
('settings_configuration_documentation', '/documentation/configuration/settings', 'Systemeinstellungen')
])
] -%}
{% set active_page = active_page|default('documentation') -%}
{% block content %}
<div class="row">
<div id="left-column", class="col-lg-3">
<nav class="navbar navbar-default" style="border: none; background-color:white">
<div class="container-fluid">
<div class="navbar-header">
<button type="button" class="navbar-toggle collapsed" data-toggle="collapse" data-target="#documentation-navigation" aria-expanded="false">
<span class="sr-only">Toggle navigation</span>
<span class="icon-bar"></span>
<span class="icon-bar"></span>
<span class="icon-bar"></span>
</button>
<a class="navbar-brand" href="/documentation">Dokumentation</a>
</div>
<div class="collapse navbar-collapse" id="documentation-navigation">
<ul class="nav navbar-nav" style="width:100%">
{% for id, url, caption, children in navigation_bar %}
<li{% if id == active_page %} class="active"{% endif %} style="width:100%">
<div class="btn-group" style="width:100%">
<a class="btn btn-{% if id == active_page %}primary{% else %}default{% endif %}{% if children %} col-xs-10{% endif %}" href="{{url|e}}" role="button" style="font-weight: bold; text-align:left; border: none; padding: 10px 15px">{{caption|e}}</a>
{% if children %}
<button class="btn btn-{% if id == active_page %}primary{% else %}default{% endif %} col-xs-2" type="button" data-toggle="collapse" role="button" data-target="#{{id}}-collapse" aria-expanded="true" style="float:right; border:none; padding: 10px 15px">
<span class="caret"></span>
<span class="sr-only">Toggle Dropdown</span>
</button>
{% endif %}
</div>
{% if children %}
<ul class="collapse{% if active_page.endswith(id) %}.in{% endif %} nav nav-pills nav-stacked" id="{{id}}-collapse">
{% for child_id, child_url, child_caption in children %}
<li{% if child_id == active_page %} class="active"{% endif %}>
<a href="{{child_url|e}}" style="padding-left: 30px">{{child_caption|e}}</a>
</li>
{% endfor %}
</ul>
{% endif %}
</li>
{% endfor %}
</ul>
</div>
</div>
</nav>
</div>
<div id="right-column", class="col-lg-9">
{% block documentation_content %}
Diese Seite ist leer.
{% endblock %}
</div>
</div>
{% endblock %}
{% extends "documentation-base.html" %}
{% set active_page = "settings_configuration_documentation" %}
{% block title %}Einrichtung: Systemeinstellungen{% endblock %}
{% block documentation_content %}
<h3>Einrichtung: Systemeinstellungen</h3>
<p>
Einige Features des Protokollsystems müssen bei der Installation und Einrichtung durch die <a href="mailto:{{config.ADMIN_MAIL}}">Admins</a> aktiviert werden. Dies ist eine Übersicht über die mit diesen Systemeinstellungen verbundenen Features. Sollten einige der angegeben Funktionalitäten aktiviert werden, so wende dich an die <a href="mailto:{{config.ADMIN_MAIL}}">Admins</a>. Bedenke vor deiner Anfrage, dass einige Features eventuell aus wichtigen Gründen bisher noch nicht aktiviert wurden.
</p>
<table class="table table-striped">
<thead>
<tr>
<th>Feature</th>
<th>Aktiviert</th>
<th>Kurzbeschreibung</th>
</tr>
</thead>
<tbody>
<tr>
<td>E-Mailversand</td>
<td><span class="glyphicon glyphicon-{% if config.MAIL_ACTIVE %}ok{% else %}remove{% endif %}" aria-hidden="true"></span></td>
<td>Das System kann selbstständig E-Mails versenden, um über anstehende Sitzungen, neue Protokolle oder Todos zu informieren.</td>
</tr>
<tr>
<td>Druckeranbindung</td>
<td><span class="glyphicon glyphicon-{% if config.PRINTING_ACTIVE %}ok{% else %}remove{% endif %}" aria-hidden="true"></span></td>
<td>Das System kann Druckaufträge starten, um Beschlüsse oder Protokolle direkt über das Webinterface zu drucken.</td>
</tr>
<tr>
<td>Etherpadanbindung</td>
<td><span class="glyphicon glyphicon-{% if config.ETHERPAD_ACTIVE %}ok{% else %}remove{% endif %}" aria-hidden="true"></span></td>
<td>Das System kann mit einem Etherpad interagieren, um das Schreiben von Protokollen dort zu ermöglichen.</td>
</tr>
<tr>
<td>Wikianbindung</td>
<td><span class="glyphicon glyphicon-{% if config.WIKI_ACTIVE %}ok{% else %}remove{% endif %}" aria-hidden="true"></span></td>
<td>Das System kann veröffentlichte Protokolle in ein Wiki übertragen.</td>
</tr>
<tr>
<td>Kalenderanbindung</td>
<td><span class="glyphicon glyphicon-{% if config.CALENDAR_ACTIVE %}ok{% else %}remove{% endif %}" aria-hidden="true"></span></td>
<td>Das System kann eingetragene Sitzungstermine in einen Kalender übertragen.</td>
</tr>
<tr>
<td>Nutzung interner Abschnitte</td>
<td><span class="glyphicon glyphicon-{% if config.PRIVATE_KEYWORDS %}ok{% else %}remove{% endif %}" aria-hidden="true"></span></td>
<td>Das System bietet die Möglichkeit bestimmte Abschnitte als nicht-öffentlich/intern zu kennzeichnen.</td>
</tr>
<tr>
<td>Angepasste Standardvorlage</td>
<td><span class="glyphicon glyphicon-{% if (config.LATEX_LOCAL_TEMPLATES and config.LATEX_LOGO_TEMPLATE) or config.LATEX_GEOMETRY or config.LATEX_PAGESTYLE or config.LATEX_ADDITIONAL_PACKAGES or config.LATEX_HEADER_FOOTER %}ok{% else %}remove{% endif %}" aria-hidden="true"></span></td>
<td>Das System nutzt die Standardprotokollvorlage in einer angepassten Form - ggf. mit Logo, Kopf-/Fußzeile oder anderen Seitenformaten bzw. -abständen</td>
</tr>
<tr>
<td>Individuelle Protokollvorlagen</td>
<td><span class="glyphicon glyphicon-{% if config.LATEX_LOCAL_TEMPLATES and config.LATEX_TEMPLATES %}ok{% else %}remove{% endif %}" aria-hidden="true"></span></td>
<td>Das System stellt zusätzlich zur Standardvorlage individuelle Protokollvorlagen zur Verfügung, die zuvor erstellt und durch die Administratoren eingespielt wurden.</td>
</tr>
</tbody>
</table>
{% if system_administrator and git_revision %}
<h4>Hinweise für Administratoren</h4>
<p>
Eine Beschreibung der Einrichtung des einzelnen Features kann der Projektseite der Software <a href="{{git_revision.url}}">„Protokollsystem 3“</a> entnommen werden. Bitte lies dir die <code>README.md</code> aufmerksam durch und entnimm bei Bedarf Konfigurationsbeispiele aus <code>config.py.example</code>. Bei schwerwiegenden Problemen kontaktiere die <a href="{{git_revision.url}}/project_members">Entwickler</a>.
</p>
{% endif %}
{% endblock %}
{% extends "documentation-base.html" %}
{% set active_page = "todomails_configuration_documentation" %}
{% block title %}Einrichtung: Todo Mails{% endblock %}
{% block documentation_content %}
<h3>Einrichtung: Todo Mails</h3>
{% if config.MAIL_ACTIVE %}
<p>
Werden im Protokollsystem im Rahmen einer Sitzung Aufgaben verwaltet, so kann eingestellt werden, dass die mit der Aufgabe betrauten Personen eine Benachrichtigung erhalten können. Damit diese Personen eine Benachrichtigung erhalten kann, sollten zu jedem genutzten Personenkürzel eine E-Mailadresse hinterlegt werden. Diese Konfiguration erfolgt zentral auf der Übersicht der <a href="{{url_for('list_todomails')}}">Todo-Mail-Zuordnungen</a>.
</p>
<div class="panel panel-default">
<div class="panel-heading">
<h5 class="panel-title"><a data-toggle="collapse" href="#example_todomails_overview">Beispiel - Übersicht Todo-Mail-Zuordnungen</a></h5>
</div>
<div id="example_todomails_overview" class="panel-body panel-collapse collapse">
<h3>Todo-Mail-Zuordnungen <a href="#example_todomails_overview">Neu</a></h3>
<table class="table table-striped">
<thead>
<tr>
<th>Name</th>
<th>Mail</th>
<th></th>
</tr>
</thead>
<tbody>
<tr>
<td>mmustermann</td>
<td>mmustermann@domain.example</td>
<td><a href="#example_todomails_overview">Ändern</a>, <a href="#example_todomails_overview" onclick="return confirm('Bist du dir sicher, dass du die Todomailzuordnung mmustermann zu mmustermann@domain.example löschen willst?');">Löschen</a></td>
</tr>
<tr>
<td>kmusterfrau</td>
<td>kmusterfrau@domain.example</td>
<td><a href="#example_todomails_overview">Ändern</a>, <a href="#example_todomails_overview" onclick="return confirm('Bist du dir sicher, dass du die Todomailzuordnung kmusterfrau zu kmusterfrau@domain.example löschen willst?');">Löschen</a></td>
</tr>
</tbody>
</table>
</div>
</div>
<p>
Auf der <a href="{{url_for('list_todomails')}}">Übersicht</a> kann über die Schaltfläche „neu“ eine entsprechende Todo-Mail-Zuordnungen angelegt werden. Bereits bestehende Belegungen können jederzeit angepasst oder gelöscht werden. Beim Anlegen bzw. der Bearbeitung müssen stets das genutzten Personenkürzel (Name) sowie die korresspondierende E-Mailadresse angegeben werden.
</p>
<div class="panel panel-default">
<div class="panel-heading">
<h5 class="panel-title"><a data-toggle="collapse" href="#example_new_todomail">Beispiel - Todo-Mail anlegen bzw. bearbeiten</a></h5>
</div>
<div id="example_new_todomail" class="panel-body panel-collapse collapse">
<form role="form" class="">
<div class="form-group ">
<label for="name" class="control-label"><label for="name">Name</label></label>
<input class="form-control" id="name" name="name" placeholder="Name" title="" value="" type="text">
</div>
<div class="form-group ">
<label for="mail" class="control-label"><label for="mail">Mail</label></label>
<input class="form-control" id="mail" name="mail" placeholder="Mail" title="" value="" type="text">
</div>
<button type="button" class="btn btn-default">Ändern</button>
</form>
</div>
</div>
{% else %}
<div class="panel panel-warning">
<div class="panel-heading">
<h5 class="panel-title">Nutzung nicht vorgesehen</h5>
</div>
<div class="panel-body ">
<p>
Das Versenden von E-Mails zu offenen Aufgaben ist hier bisher noch nicht vorgesehen. Um den automatischen E-Mailversand nutzen zu können, wende dich bitte an die <a href="mailto:{{config.ADMIN_MAIL}}">Admins</a> und lasse die <a href="/documentation/configuration/settings">Konfiguration</a> durch sie entsprechend anpassen.
</p>
</div>
</div>
{% endif %}
{% endblock %}
This diff is collapsed.
{% extends "documentation-base.html" %}
{% set active_page = "configuration_documentation" %}
{% block title %}Einrichtung{% endblock %}
{% block documentation_content %}
<h3>Einrichtung</h3>
<p>
Eine wichtige Eigenschaft des Protokollsystems ist die Konfigurierbarkeit. Das System lässt sich individuell auf die Bedürfnisse der eigenen Organisationseinheit anpassen. Einige Einstellungen können direkt über die Weboberfläche vorgenommen werden und stehen allen Benutzern zur Verfügung. Dazu gehören:
</p>
<ul>
<li><a href="configuration/types">Protokolltypen</a></li>
<li><a href="configuration/todomails">Todo-Mails</a></li>
</ul>
<p>
Andere Einstellungen werden direkt bei der Installation und Einrichtung des Protokollsystems durch die <a href="mailto:{{config.ADMIN_MAIL}}">Admins</a> vorgenommen. Zu diesen <a href="configuration/settings">Systemeinstellungen</a> zählen unter anderem Features wie das automatische Versenden von E-Mails oder die Nutzung eines Etherpads zum Schreiben von Protokollen.
</p>
{% endblock %}
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
{% extends "documentation-base.html" %}
{% set active_page = "sessionmanagement_documentation" %}
{% block title %}Sitzungsverwaltung{% endblock %}
{% block documentation_content %}
<h3>Sitzungsverwaltung</h3>
<p>
Ein wesentlicher Bestandteil des Protokollsystems ist das Sitzungsmanagement. Neben dem <a href="/documentation/sessionmanagement/plan">Planen und Anlegen</a> verschiedener Sitzungstermine kann zu jeder Sitzung ein <a href="/documentation/sessionmanagement/write">Protokoll</a> verfasst und anschließend durch das System ausgegeben werden. Die <a href="/documentation/sessionmanagement/tracking">Nachverfolgung</a> von Ergebnissen ist im System in Form von Beschlüssen und Todos möglich.
</p>
<h4>Verwaltung im Detail</h4>
<p>
Die einzelnen Funktionen des Sitzungsmanagements werden jeweils auf Unterseiten erläutert. Auch werden die Arbeitsabläufe, wie sie im System vorgesehen sind, vorgestellt.
</p>
<ul>
<li><a href="/documentation/sessionmanagement/plan">Planung</a></li>
<li><a href="/documentation/sessionmanagement/write">Protokollieren</a></li>
<li><a href="/documentation/sessionmanagement/tracking">Nachverfolgung</a></li>
</ul>
<p>
Sollten die genannten Arbeitsabläufe nicht nachvollziehbar oder fehlerhaft sein, dann kontaktiere bitte das Entwicklungsteam der Software. Als Tipp: Je genauer du ein Problem beschreiben kannst, desto einfacher machst du es den betroffenen Personen selbiges zu fixen und desto schneller hast du eine Lösung.
</p>
<h4 id="suche">Suche</h4>
<p>
Einige Elemente der Sitzungsverwaltung sind durchsuchbar - dazu zählen <a href="{{url_for("list_protocols")}}">Protokolle</a>, <a href="{{url_for("list_todos")}}">Todos</a> und <a href="{{url_for("list_decisions")}}">Beschlüsse</a>. Auf jeder der Übersichtsseiten wird ein Suchfeld vorgehalten, das zur Eingabe genutzt werden kann.
</p>
<p>
Im Suchfeld können mehrere durch Leerzeichen getrennte Suchbegriffe angegeben werden: <code>Begriff1 Begriff2</code>.<br/>
Angezeigt werden alle Ergebnisse, die jeden der Suchbegriffe (unabhängig von Groß- oder Kleinschreibung) enthalten.<br/>
Wenn ein Suchbegriff ein Leerzeichen beinhaltet, muss er mit Anführungszeichen umrandet werden: <code>"Begriff1 mit Leerzeichen" Begriff2</code>.
</p>
{% endblock %}
{% extends "documentation-base.html" %}
{% set active_page = "internal_syntax_documentation" %}
{% block title %}Syntax: Interne Abschnitte{% endblock %}
{% block documentation_content %}
<h3>Syntax: Interne Abschnitte</h3>
{% if config.PRIVATE_KEYWORDS %}
<p>
Das Protokollsystem ermöglicht es, in einem Protokoll bestimmte Abschnitte als nicht-öffentlich/intern zu kennzeichnen. Diese Abschnitte werden nur in der internen pdf-Datei gedruckt und nur internen Personen angezeigt - wer das ist lässt sich im System explizit festlegen. Die öffentliche Version des Protokolls enthält dann an betroffenen Stellen einen Hinweis, dass es hier einen internen Abschnitt gibt. Aus Gründen der Transparenz bietet es sich an, vor oder nach dem internen Protokollieren dessen Inhalt zusammenzufassen.
</p>
<p>
Beschlüsse sind im Protokollsystem immer öffentlich, daher ergibt es keinen Sinn diese in einem internen Abschnitt zu protokollieren.
</p>
<h4>Definition</h4>
<div class="row">
<div class="col-sm-9">
<p>
Der interne Abschnitt wird eingeleitet mit einem der folgenden Wörter ({{config.PRIVATE_KEYWORDS|map("code_key")|join(" ")|safe}}) gefolgt von den üblichen geschweiften Klammern <code>{ ... }</code> einer Liste. Zwischen den Klammern wird wie gewöhnlich protokolliert.
</p>
<div class="panel panel-default">
<div class="panel-heading">
<h5 class="panel-title">Beispiel - Interner Bereich</h5>
</div>
<figure id="example_internal" class="panel-body">
<pre class="highlight"><code>{<span class="kr">TOP</span> <span class="sx">Tagesordnungspunkt</span>
<span class="nv">Dieser Punkt ist öffentlich.</span>
<span class="kr">{{config.PRIVATE_KEYWORDS[0]}}</span> {
<span class="nv">Dieser Punkt ist intern.</span>
<span class="nv">Dieser auch, wir diskutieren Kritik an einem namentlich genannten Professor und seiner Vorlesung.</span>
<span class="nv">Hier entwickeln wir eine Strategie.</span>
}
<span class="nv">Dieser ist wieder öffentlich.</span>
<span class="nv">Es wurde die Kritik an einer Vorlesung kritisiert.</span>
}</code></pre>
</figure>
</div>
</div>
<div class="col-sm-3">
<div class="panel panel-warning">
<div class="panel-heading">
<h5 class="panel-title">Zu beachten</h5>
</div>
<div class="panel-body ">
<p>
Ein interner Abschnitt kann keinen Titel haben. Stattdessen wird der Titel durch das entsprechende Schlüsselwort ersetzt.
</p>
</div>
</div>
</div>
</div>
{% else %}
<div class="panel panel-warning">
<div class="panel-heading">
<h5 class="panel-title">Nutzung nicht vorgesehen</h5>
</div>
<div class="panel-body ">
<p>
Die Verwendung von internen Abschnitte ist hier bisher noch nicht vorgesehen. Um interne Abschnitte nutzen zu können, wende dich bitte an die <a href="mailto:{{config.ADMIN_MAIL}}">Admins</a> und lasse die <a href="/documentation/configuration/settings">Konfiguration</a> durch sie entsprechend anpassen.
</p>
</div>
</div>
{% endif %}
{% endblock %}
{% extends "documentation-base.html" %}
{% set active_page = "lists_syntax_documentation" %}
{% block title %}Syntax: Listen{% endblock %}
{% block documentation_content %}
<h3>Syntax: Listen</h3>
<p>
Das Protokollsystem sieht vor, dass Diskussionen in einem Tagesordnungspunkt strukturiert und in Unterpunkte aufgeteilt werden können. Dies wird durch sogenannte Listen umgesetzt. Mit jedem Zeilenumbruch erzeugt das Protokollsystem beim Kompilieren (Übersetzten des Syntax in ein PDF oder die Webseitenanzeige) einen neue Zeile im fertigen Protokoll und setzt ggf. ein Auszählungszeichen an den Anfang der Zeile.
</p>
<p>
Zusätzlich gibt es im Protokollsystem spezielle Listen, die es ermöglichen hinsichtlich der Ausgabe oder des Titels Unterscheidungen vornehmen zu können. {% if config.PRIVATE_KEYWORDS|length > 0 %}Diese Listen sind{% else %}Eine solche Liste ist{% endif %} der <a href="top">Tagesordnungspunkt</a>{% if config.PRIVATE_KEYWORDS|length > 0 %} und der <a href="internal">interne Abschnitt</a>{% endif %}.
</p>
<h4>Definition</h4>
<div class="row">
<div class="col-sm-9">
<p>
Die Liste ist im Protokoll das strukturierende Element. Es beginnt und endet mit einer geschweiften Klammer. Die Elemente der Liste werden durch das Zeilenende getrennt. Es ist möglich Listen beliebig ineinander zuschachteln. Zusätzlich kann eine Liste einen Titel haben, der vor der öffnenden Klammer <code>{</code> steht.
</p>
<div class="panel panel-default">
<div class="panel-heading">
<h5 class="panel-title">Syntax einer Liste</h5>
</div>
<figure class="panel-body">
<pre class="highlight"><code><span class="sx">Titel der Liste</span> {
<span class="c1">Details zu diesem Punkt.</span>
<span class="c1">Mehr Details zu diesen Punkt in einer neuen Zeile.</span>
}</code></pre>
</figure>
</div>
</div>
<div class="col-sm-3">
<div class="panel panel-warning">
<div class="panel-heading">
<h5 class="panel-title">Zu beachten</h5>
</div>
<ul class="list-group">
<li class="list-group-item">Spezielle Listen weisen hinsichtlich des Titels ein anders Verhalten auf.</li>
<li class="list-group-item">Listen in der höchsten Ebene müssen <a href="top">TOPs</a> sein.</li>
</ul>
</div>
</div>
</div>
<div class="panel panel-default">
<div class="panel-heading">
<h5 class="panel-title"><a data-toggle="collapse" href="#example_lists">Beispiel - Verschachtelte Listen</a></h5>
</div>
<figure id="example_lists" class="panel-body panel-collapse collapse">
<pre class="highlight"><code>{<span class="kr">TOP</span> <span class="sx">Bericht</span>
Es wird über die Aktivitäten seit der letzten Sitzung berichtet.
<span class="sx">Erstsemesterarbeit</span>{
Die Vorbereitung für die nächste Erstsemesterwoche laufen. Ab dieser Woche werden auch wieder regelmäßige Planungstreffen stattfinden.
}
<span class="sx">Infrastruktur</span>{
Es fand ein Treffen statt auf dem aktuelle Projekte besprochen wurden.
<span class="sx">Wasserspender</span>{
Es wurden Vorschläge für Aufstellorte von weiteren Wasserspendern gemacht.
Weiteres wird geprüft.
}
<span class="sx">Luftpumpen</span>{
Es sollen Luftpumpen angeschafft werden.
Ein Angebot wird eingeholt
}
<span class="sx">Renovierung</span>{
Eine Renovierung ist geplant.