add intern design

This commit is contained in:
2022-03-21 12:49:27 +00:00
parent f518e98aba
commit 7b07d253c8
13 changed files with 498 additions and 392 deletions

View File

@@ -152,14 +152,14 @@ class TopicCreateForm(forms.ModelForm):
model = Topic model = Topic
fields = [ fields = [
"title", "title",
"slug", "shortterm",
"description", "description",
"topic_group", "topic_group",
] ]
labels = { labels = {
"title": _("Titel"), "title": _("Titel"),
"slug": _("Permalink"), "shortterm": _("Kürzel für den Link"),
"description": _("Beschreibung"), "description": _("Beschreibung"),
} }
@@ -173,14 +173,14 @@ class TopicUpdateForm(forms.ModelForm):
model = Topic model = Topic
fields = [ fields = [
"title", "title",
"slug", "shortterm",
"description", "description",
"topic_group", "topic_group",
] ]
labels = { labels = {
"title": _("Titel"), "title": _("Titel"),
"slug": _("Permalink"), "shortterm": _("Kürzel für den Link"),
"description": _("Beschreibung"), "description": _("Beschreibung"),
} }
@@ -195,14 +195,14 @@ class AttachmentCreateForm(forms.ModelForm):
fields = [ fields = [
"title", "title",
"slug", "shortterm",
"description", "description",
"topic", "topic",
] ]
labels = { labels = {
"title": _("Titel"), "title": _("Titel"),
"slug": _("Permalink"), "shortterm": _("Kürzel für den Link"),
"description": _("Beschreibung"), "description": _("Beschreibung"),
} }
@@ -217,14 +217,14 @@ class AttachmentUpdateForm(forms.ModelForm):
fields = [ fields = [
"title", "title",
"slug", "shortterm",
"description", "description",
"topic", "topic",
] ]
labels = { labels = {
"title": _("Titel"), "title": _("Titel"),
"slug": _("Permalink"), "shortterm": _("Kürzel für den Link"),
"description": _("Beschreibung"), "description": _("Beschreibung"),
} }

View File

@@ -156,19 +156,14 @@ class TopicCreateView(LoginRequiredMixin, CreateView):
def get_context_data(self, **kwargs): def get_context_data(self, **kwargs):
context = super().get_context_data(**kwargs) context = super().get_context_data(**kwargs)
context["topic_group"] = self.slug
topic_group = TopicGroup.objects.filter(slug=self.slug).first()
context["topic_group"] = topic_group
return context return context
def get_initial(self): def get_initial(self):
self.slug = self.kwargs.get("topic_group") self.slug = self.kwargs.get("topic_group")
topic_group = TopicGroup.objects.filter(slug=self.slug).first()
context = {
"topic_group": topic_group,
}
return context
class TopicUpdateView(LoginRequiredMixin, UpdateView): class TopicUpdateView(LoginRequiredMixin, UpdateView):
model = Topic model = Topic
@@ -180,17 +175,14 @@ class TopicUpdateView(LoginRequiredMixin, UpdateView):
def get_context_data(self, **kwargs): def get_context_data(self, **kwargs):
context = super().get_context_data(**kwargs) context = super().get_context_data(**kwargs)
context["slug"] = self.slug context["slug"] = self.slug
topic = Topic.objects.filter(slug=self.slug).first()
context["topic"] = topic
return context return context
def get_initial(self): def get_initial(self):
self.slug = self.kwargs.get("slug") self.slug = self.kwargs.get("slug")
topic = Topic.objects.filter(slug=self.slug).first()
context = {
"topic": topic,
}
return context
def get_success_url(self): def get_success_url(self):
context = { context = {
@@ -210,17 +202,14 @@ class AttachmentCreateView(LoginRequiredMixin, CreateView):
def get_context_data(self, **kwargs): def get_context_data(self, **kwargs):
context = super().get_context_data(**kwargs) context = super().get_context_data(**kwargs)
context["slug"] = self.slug context["slug"] = self.slug
topic = Topic.objects.filter(slug=self.slug).first()
context["topic"]= topic
return context return context
def get_initial(self): def get_initial(self):
self.slug = self.kwargs.get("slug") self.slug = self.kwargs.get("slug")
topic = Topic.objects.filter(slug=self.slug).first()
context = {
"topic": topic,
}
return context
def get_success_url(self): def get_success_url(self):
context = { context = {
@@ -242,19 +231,15 @@ class AttachmentUpdateView(LoginRequiredMixin, UpdateView):
context = super().get_context_data(**kwargs) context = super().get_context_data(**kwargs)
context["topic_slug"] = self.topic_slug context["topic_slug"] = self.topic_slug
context["slug"] = self.slug context["slug"] = self.slug
attachment = Attachment.objects.filter(slug=self.slug).first()
context["attachment"] = attachment
return context return context
def get_initial(self): def get_initial(self):
self.topic_slug = self.kwargs.get("topic_slug") self.topic_slug = self.kwargs.get("topic_slug")
self.slug = self.kwargs.get("slug") self.slug = self.kwargs.get("slug")
attachment = Attachment.objects.filter(slug=self.slug).first()
context = {
"attachment": attachment,
}
return context
def get_success_url(self): def get_success_url(self):
context = { context = {
"topic_slug": self.topic_slug, "topic_slug": self.topic_slug,
@@ -274,21 +259,22 @@ class EtherpadCreateView(LoginRequiredMixin, CreateView):
def get_context_data(self, **kwargs): def get_context_data(self, **kwargs):
context = super().get_context_data(**kwargs) context = super().get_context_data(**kwargs)
self.topic_slug = self.kwargs.get("topic_slug")
self.slug = self.kwargs.get("slug")
context["topic_slug"] = self.topic_slug context["topic_slug"] = self.topic_slug
context["slug"] = self.slug context["slug"] = self.slug
attachment = Attachment.objects.filter(slug=self.slug).first()
context["attachment"] = attachment
return context return context
def get_initial(self): def get_initial(self):
self.topic_slug = self.kwargs.get("topic_slug") self.topic_slug = self.kwargs.get("topic_slug")
self.slug = self.kwargs.get("slug") self.slug = self.kwargs.get("slug")
attachment = Attachment.objects.filter(slug=self.slug).first()
context = {
"attachment": attachment,
}
return context
def get_success_url(self): def get_success_url(self):
context = { context = {
"topic_slug": self.topic_slug, "topic_slug": self.topic_slug,
@@ -308,22 +294,19 @@ class FileUploadCreateView(LoginRequiredMixin, CreateView):
def get_context_data(self, **kwargs): def get_context_data(self, **kwargs):
context = super().get_context_data(**kwargs) context = super().get_context_data(**kwargs)
context["topic_slug"] = self.topic_slug context["topic_slug"] = self.topic_slug
context["slug"] = self.slug context["slug"] = self.slug
attachment = Attachment.objects.filter(slug=self.kwargs.get("slug")).first()
context["attachment"] = attachment
return context return context
def get_initial(self): def get_initial(self):
self.topic_slug = self.kwargs.get("topic_slug") self.topic_slug = self.kwargs.get("topic_slug")
self.slug = self.kwargs.get("slug") self.slug = self.kwargs.get("slug")
attachment = Attachment.objects.filter(slug=self.kwargs.get("slug")).first()
context = {
"attachment": attachment,
}
return context
def get_success_url(self): def get_success_url(self):
context = { context = {
"topic_slug": self.topic_slug, "topic_slug": self.topic_slug,
@@ -348,18 +331,15 @@ class TaskCreateView(LoginRequiredMixin, CreateView):
def get_context_data(self, **kwargs): def get_context_data(self, **kwargs):
context = super().get_context_data(**kwargs) context = super().get_context_data(**kwargs)
context["slug"] = self.slug context["slug"] = self.slug
topic = Topic.objects.filter(slug=self.slug).first()
context["topic"] = topic
context["task_list"] = topic.task_list
return context return context
def get_initial(self): def get_initial(self):
self.slug = self.kwargs.get("slug") self.slug = self.kwargs.get("slug")
topic = Topic.objects.filter(slug=self.slug).first()
context = {
"topic": topic,
"task_list": topic.task_list,
}
return context
def get_success_url(self): def get_success_url(self):
context = { context = {

View File

@@ -175,6 +175,7 @@ class InternTaskCreateForm(TaskCreateForm):
fields = [ fields = [
"title", "title",
"shortterm",
"task_list", "task_list",
"due_date", "due_date",
"assigned_to", "assigned_to",
@@ -183,6 +184,7 @@ class InternTaskCreateForm(TaskCreateForm):
labels = { labels = {
"title": _("Titel des Tasks"), "title": _("Titel des Tasks"),
"shortterm": _("Kürzel für den Link"),
"task_list": _("Task-Gruppe"), "task_list": _("Task-Gruppe"),
"due_date": _("Fälligkeitsdatum"), "due_date": _("Fälligkeitsdatum"),
"assigned_to": _("Zuweisen an"), "assigned_to": _("Zuweisen an"),

View File

@@ -1,81 +1,62 @@
{% extends "layout.html" %} {% extends "base.html" %}
{% block content %} {% block content %}
<div class="grid-container"> <!-- Main Content -->
<div class="grid-x grid-padding-x"> <main class="container mx-auto w-full px-4 my-8 flex-1">
<div class="cell padding-top-1"> <h1 class="page-title">Intern</h1>
<h3> <div class="flex flex-col gap-y-4 max-w-prose mx-auto text-gray-700 dark:text-gray-300">
<a href="{% url 'intern:index' %}#{{ active_topic.topic_group.slug }}">{{ active_topic.topic_group.title }}</a> <aside class="flex gap-2 flex-wrap align-bottom text-sm sm:text-base text-gray-600 dark:text-gray-300">
/ <a href="{% url 'intern:topic' active_topic.slug %}">{{ active_topic.title }}</a> <a class="underline hover:text-gray-900 dark:hover:text-gray-100" href="{% url 'intern:index' %}#{{ active_topic.topic_group.slug }}">{{ active_topic.topic_group.title }}</a>
/ {{ attachment.title }} <span><i class="fa-solid fa-angle-right"></i></span>
</h3> <a class="underline hover:text-gray-900 dark:hover:text-gray-100" href="{% url 'intern:topic' active_topic.slug %}">{{ active_topic.title }}</a>
</div> <span><i class="fa-solid fa-angle-right"></i></span>
</div> <span class="cursor-default">{{ attachment.title }}</span>
</aside>
<div class="intern-hero">
{% if request.user.is_authenticated %}
<div class="grid-x grid-padding-x padding-top-1">
<div class="cell large-3 medium-4 small-12">
<a class="button" href="{% url 'intern:attachment-update' active_topic.slug attachment.slug %}">Beschreibung bearbeiten</a>
</div>
</div>
{% endif %}
{% if attachment.description %} {% if attachment.description %}
<div class="padding-top-1 padding-left-1 padding-right-1"> <div class="db-page-content-left mt-2">
{{ attachment.description|safe }} {{ attachment.description|safe }}
<hr>
</div> </div>
{% endif %} {% endif %}
<div class="grid-x grid-padding-x"> <section>
<div class="cell"> <div class="sm:flex flex-row justify-between">
Etherpad Dokumente: <h2 class="text-lg font-medium text-gray-900 dark:text-gray-100">Etherpad Dokumente:</h2>
<a href="{% url 'intern:etherpad-create' active_topic.slug attachment.slug %}"> <!-- <a href="#" class="border border-gray-700 dark:border-gray-300 rounded px-1 py-0.5 hidden sm:block">
<div class="news-hero-compact"> <i class="fa-solid fa-plus mr-1"></i>Neues Etherpad erstellen
<div class="news-hero-compact-text"> </a> -->
<p style="margin-bottom: 0rem;">+ neues Etherpad erstellen</p>
</div>
</div> </div>
<div class="documentList rounded divide-y divide-gray-300 dark:divide-gray-600">
<a href="{% url 'intern:etherpad-create' active_topic.slug attachment.slug %}" class="flex justify-between">
<h3 class="text-gray-800 dark:text-gray-200"><i class="fa-solid fa-plus fa-fw mr-1"></i>Neues Etherpad erstellen</h2>
</a> </a>
{% for etherpad in etherpads %} {% for etherpad in etherpads %}
<a href="{{ etherpad.etherpad_key }}"> <a href="{{ etherpad.etherpad_key }}" class="flex justify-between items-center gap-2">
<div class="news-hero-compact"> <h3 class="text-gray-800 dark:text-gray-200">{{ etherpad.title }}</h2>
<div class="news-hero-compact-text"> <span class=" text-gray-700 dark:text-gray-300">{{ etherpad.date }}<span class="ml-2 hidden sm:inline-block"><i class="fas fa-angle-right text-gray-400 dark:text-gray-600"></i></span>
<p style="margin-bottom: 0rem;">{{ etherpad.title }}</p>
</div>
<div class="news-hero-compact-right">
<p style="margin-bottom: 0rem;">{{ etherpad.date }}</p>
</div>
</div>
</a> </a>
{% endfor %} {% endfor %}
</div>
</section>
Dokumente: <section>
<a href="{% url 'intern:file-create' active_topic.slug attachment.slug %}"> <h2 class="text-lg font-medium text-gray-900 dark:text-gray-100">Dokumente:</h2>
<div class="news-hero-compact"> <div class="documentList rounded divide-y divide-gray-300 dark:divide-gray-600">
<div class="news-hero-compact-text"> <a href="{% url 'intern:file-create' active_topic.slug attachment.slug %}" class="flex justify-between">
<p style="margin-bottom: 0rem;">+ neue Datei hochladen</p> <h3 class="text-gray-800 dark:text-gray-200"><i class="fa-solid fa-plus fa-fw mr-1"></i>Neues Dokument hochladen</h2>
</div>
</div>
</a> </a>
{% for file in files %} {% for file in files %}
<a href="{{ file.file_field.url }}" target="_blank"> <a href="{{ file.file_field.url }}" target="_blank" class="flex justify-between items-center gap-2">
<div class="news-hero-compact"> <h3 class="text-gray-800 dark:text-gray-200"><i class="fa-solid fa-file-pdf fa-fw mr-1 hidden sm:inline-block"></i>{{ file.title }}</h2>
<div class="news-hero-compact-text"> <span class=" text-gray-700 dark:text-gray-300">{{ file.date }}<span class="ml-2 hidden sm:inline-block"><i class="fas fa-angle-right text-gray-400 dark:text-gray-600"></i></span>
<p style="margin-bottom: 0rem;"><i class="far fa-file"></i> {{ file.title }}</p>
</div>
<div class="news-hero-compact-right">
<p style="margin-bottom: 0rem;">{{ file.date }}</p>
</div>
</div>
</a> </a>
{% endfor %} {% endfor %}
</div> </div>
</section>
<a href="{% url 'intern:attachment-update' active_topic.slug attachment.slug %}" class="btn btn-primary block place-self-end"><i class="fas fa-pen-to-square mr-2"></i>Beschreibung bearbeiten</a>
</div> </div>
</div> </main>
</div>
{% endblock %} {% endblock %}

View File

@@ -1,23 +1,45 @@
{% extends "layout.html" %} {% extends 'base.html' %}
{% block content %} {% block content %}
<div class="grid-container"> <!-- Main Content -->
<div class="grid-x padding-top-1"> <main class="container mx-auto w-full px-4 my-8 flex-1">
<div class="cell large-3 medium-4 small-12"> <h1 class="page-title">Anhang Ordner hinzufügen</h1>
<a class="button" href="{% url 'intern:topic' slug %}">Zurück</a> <div class="w-full h-full flex-1 flex justify-center items-center">
</div> <form action="" method="POST" enctype="multipart/form-data" class="w-full max-w-prose sm:px-28 sm:py-4 grid grid-cols-1 gap-y-3 sm:gap-y-6 text-gray-900">
</div>
<hr>
<h2>Neuen Anhang Ordner erstellen</h2>
<div class="grid-x">
<div class="cell">
<form action="" method="post" enctype="multipart/form-data">
{% csrf_token %} {% csrf_token %}
{{ form }}
<input type="submit" class="button" name="btn_input" value="Hinzufügen"> {% if form.non_field_errors %}
<div class="alert alert-danger">
<i class="alert-icon fas fa-check-circle"></i>
<h2 class="alert-title">Fehler:</h2>
<div class="alert-body">{{ form.non_field_errors }}</div>
</div>
{% endif %}
<label class="block">
<span class="text-gray-700 dark:text-gray-200">{{ form.title.label }}</span>
{% if form.title.errors %}
<div class="alert alert-danger">
<div class="alert-body">{{ form.title.errors }}</div>
</div>
{% endif %}
<input type="text" id="id_title" name="title" class="mt-1 block w-full rounded-md border-gray-300 dark:border-none shadow-sm focus:border-none focus:ring focus:ring-blue-200 dark:focus:ring-sky-700 focus:ring-opacity-50" required>
</label>
<label class="block">
<span class="text-gray-700 dark:text-gray-200">{{ form.shortterm.label }}</span>
{% if form.shortterm.errors %}
<div class="alert alert-danger">
<div class="alert-body">{{ form.shortterm.errors }}</div>
</div>
{% endif %}
<input type="text" id="id_shortterm" name="shortterm" class="mt-1 block w-full rounded-md border-gray-300 dark:border-none shadow-sm focus:border-none focus:ring focus:ring-blue-200 dark:focus:ring-sky-700 focus:ring-opacity-50" required>
</label>
<input type="hidden" name="topic" value="{{ topic.id }}" id="id_topic">
<input type="submit" class="block btn btn-primary" value="Hinzufügen">
</form> </form>
</div> </div>
</div> </main>
</div>
{% endblock %} {% endblock %}

View File

@@ -1,26 +1,45 @@
{% extends "layout.html" %} {% extends 'base.html' %}
{% block content %} {% block content %}
<div class="grid-container"> <!-- Main Content -->
<div class="grid-x padding-top-1"> <main class="container mx-auto w-full px-4 my-8 flex-1">
<div class="cell large-3 medium-4 small-12"> <h1 class="page-title">Anhang Ordner '{{ attachment.title }}' bearbeiten</h1>
<a class="button" href="{% url 'intern:attachment' topic_slug slug %}">Zurück</a> <div class="w-full h-full flex-1 flex justify-center items-center">
</div> <form action="" method="POST" enctype="multipart/form-data" class="w-full max-w-prose sm:px-28 sm:py-4 grid grid-cols-1 gap-y-3 sm:gap-y-6 text-gray-900">
<div class="cell large-3 medium-4 small-12">
<a class="button" href="{% url 'admin:intern_attachment_change' attachment.id %}">Anhang Ordner im Admin bearbeiten</a>
</div>
</div>
<hr>
<h2>Anhang Ordner '{{ attachment.title }}' bearbeiten</h2>
<div class="grid-x">
<div class="cell">
<form action="" method="post" enctype="multipart/form-data">
{% csrf_token %} {% csrf_token %}
{{ form }}
<input type="submit" class="button" name="btn_input" value="Bearbeiten"> {% if form.non_field_errors %}
<div class="alert alert-danger">
<i class="alert-icon fas fa-check-circle"></i>
<h2 class="alert-title">Fehler:</h2>
<div class="alert-body">{{ form.non_field_errors }}</div>
</div>
{% endif %}
<label class="block">
<span class="text-gray-700 dark:text-gray-200">{{ form.title.label }}</span>
{% if form.title.errors %}
<div class="alert alert-danger">
<div class="alert-body">{{ form.title.errors }}</div>
</div>
{% endif %}
<input type="text" id="id_title" name="title" value="{{ attachment.title }}" class="mt-1 block w-full rounded-md border-gray-300 dark:border-none shadow-sm focus:border-none focus:ring focus:ring-blue-200 dark:focus:ring-sky-700 focus:ring-opacity-50" required>
</label>
<label class="block">
<span class="text-gray-700 dark:text-gray-200">{{ form.shortterm.label }}</span>
{% if form.shortterm.errors %}
<div class="alert alert-danger">
<div class="alert-body">{{ form.shortterm.errors }}</div>
</div>
{% endif %}
<input type="text" id="id_shortterm" name="shortterm" value="{{ attachment.shortterm }}" class="mt-1 block w-full rounded-md border-gray-300 dark:border-none shadow-sm focus:border-none focus:ring focus:ring-blue-200 dark:focus:ring-sky-700 focus:ring-opacity-50" required>
</label>
<input type="hidden" name="topic" value="{{ topic.id }}" id="id_topic">
<input type="submit" class="block btn btn-primary" value="Bearbeiten">
</form> </form>
</div> </div>
</div> </main>
</div>
{% endblock %} {% endblock %}

View File

@@ -1,23 +1,40 @@
{% extends "layout.html" %} {% extends 'base.html' %}
{% block content %} {% block content %}
<div class="grid-container"> <!-- Main Content -->
<div class="grid-x padding-top-1"> <main class="container mx-auto w-full px-4 my-8 flex-1">
<div class="cell large-3 medium-4 small-12"> <h1 class="page-title">Etherpad hinzufügen</h1>
<a class="button" href="{% url 'intern:attachment' topic_slug slug %}">Zurück</a> <div class="w-full h-full flex-1 flex justify-center items-center">
</div> <form action="" method="POST" enctype="multipart/form-data" class="w-full max-w-prose sm:px-28 sm:py-4 grid grid-cols-1 gap-y-3 sm:gap-y-6 text-gray-900">
</div>
<hr>
<h2>Neues Etherpad erstellen</h2>
<div class="grid-x">
<div class="cell">
<form action="" method="post" enctype="multipart/form-data">
{% csrf_token %} {% csrf_token %}
{{ form }}
<input type="submit" class="button" name="btn_input" value="Hinzufügen"> {% if form.non_field_errors %}
<div class="alert alert-danger">
<i class="alert-icon fas fa-check-circle"></i>
<h2 class="alert-title">Fehler:</h2>
<div class="alert-body">{{ form.non_field_errors }}</div>
</div>
{% endif %}
<label class="block">
<span class="text-gray-700 dark:text-gray-200">{{ form.title.label }}</span>
{% if form.title.errors %}
<div class="alert alert-danger">
<div class="alert-body">{{ form.title.errors }}</div>
</div>
{% endif %}
<input type="text" id="id_title" name="title" class="mt-1 block w-full rounded-md border-gray-300 dark:border-none shadow-sm focus:border-none focus:ring focus:ring-blue-200 dark:focus:ring-sky-700 focus:ring-opacity-50" required>
</label>
<label>
<span class="text-gray-700 dark:text-gray-200">{{ form.date.label }}</span>
<input type="date" id="id_date" name="date" class="block w-full mt-1 rounded-md border-gray-300 dark:border-none shadow-sm focus:border-none focus:ring focus:ring-blue-200 dark:focus:ring-sky-700 focus:ring-opacity-50" required>
</label>
<input type="hidden" name="attachment" value="{{ attachment.id }}" id="id_attachment">
<input type="submit" class="block btn btn-primary" value="Hinzufügen">
</form> </form>
</div> </div>
</div> </main>
</div>
{% endblock %} {% endblock %}

View File

@@ -1,23 +1,40 @@
{% extends "layout.html" %} {% extends 'base.html' %}
{% block content %} {% block content %}
<div class="grid-container"> <!-- Main Content -->
<div class="grid-x padding-top-1"> <main class="container mx-auto w-full px-4 my-8 flex-1">
<div class="cell large-3 medium-4 small-12"> <h1 class="page-title">Datei hinzufügen</h1>
<a class="button" href="{% url 'intern:attachment' topic_slug slug %}">Zurück</a> <div class="w-full h-full flex-1 flex justify-center items-center">
</div> <form action="" method="POST" enctype="multipart/form-data" class="w-full max-w-prose sm:px-28 sm:py-4 grid grid-cols-1 gap-y-3 sm:gap-y-6 text-gray-900">
</div>
<hr>
<h2>Neue Datei hochladen</h2>
<div class="grid-x">
<div class="cell">
<form action="" method="post" enctype="multipart/form-data">
{% csrf_token %} {% csrf_token %}
{{ form }}
<input type="submit" class="button" name="btn_input" value="Hinzufügen"> {% if form.non_field_errors %}
<div class="alert alert-danger">
<i class="alert-icon fas fa-check-circle"></i>
<h2 class="alert-title">Fehler:</h2>
<div class="alert-body">{{ form.non_field_errors }}</div>
</div>
{% endif %}
<label class="block">
<span class="text-gray-700 dark:text-gray-200">{{ form.title.label }}</span>
{% if form.title.errors %}
<div class="alert alert-danger">
<div class="alert-body">{{ form.title.errors }}</div>
</div>
{% endif %}
<input type="text" id="id_title" name="title" class="mt-1 block w-full rounded-md border-gray-300 dark:border-none shadow-sm focus:border-none focus:ring focus:ring-blue-200 dark:focus:ring-sky-700 focus:ring-opacity-50" required>
</label>
<label>
<span class="text-gray-700 dark:text-gray-200">{{ form.file_field.label }}</span>
<input type="file" id="id_file_field" name="file_field" class="text-gray-700 dark:text-gray-200 block w-full mt-1 rounded-md border-gray-300 dark:border-none shadow-sm focus:border-none focus:ring focus:ring-blue-200 dark:focus:ring-sky-700 focus:ring-opacity-50" required>
</label>
<input type="hidden" name="attachment" value="{{ attachment.id }}" id="id_attachment">
<input type="submit" class="block btn btn-primary" value="Hinzufügen">
</form> </form>
</div> </div>
</div> </main>
</div>
{% endblock %} {% endblock %}

View File

@@ -1,85 +1,91 @@
{% extends "layout.html" %} {% extends "base.html" %}
{% block content %} {% block content %}
<div class="grid-container"> <!-- Main Content -->
<div class="grid-x padding-top-1"> <main class="container mx-auto w-full px-4 my-8 flex-1">
{% if request.user.is_authenticated %} <h1 class="page-title">Intern</h1>
<div class="cell large-3 medium-4 small-12"> <div class="flex flex-col gap-y-4 max-w-prose mx-auto text-gray-700 dark:text-gray-300">
<a class="button" href="{% url 'admin:intern_topicgroup_add' %}">neuen Themenbereich hinzufügen</a> {% regroup topic by topic_group as topic_group_list %}
</div> {% for topic_group in topic_group_list %}
{% endif %} <section x-data="{ expandList: $persist(true).as('expandListState-{{ topic_group.grouper.title }}') }">
</div> <div class="flex gap-x-6">
<h2 class="text-lg font-medium text-gray-900 dark:text-gray-100 cursor-pointer" @click="expandList = ! expandList">
{% regroup topic by topic_group as topic_list %} <i class="fa-fw fa-solid fa-angle-right transition transform origin-center"
{% for topic in topic_list %} :class="expandList ? 'rotate-90' : ''"
<div class="internheader"> ></i>
<h3>{{ topic.grouper.title }}<a class="headerlink" id="{{ topic.list.0.topic_group.slug }}" href="#{{ topic.list.0.topic_group.slug }}" title="Permalink to {{ topic.grouper }}" style="color: lightgrey;"> #</a></h3> {{ topic_group.grouper.title }}
</div> </h2>
<button class="border border-gray-700 dark:border-gray-300 rounded px-1.5 text-sm hidden sm:block"
{% if topic.grouper.short_description %} x-show="expandList"
{{ topic.grouper.short_description }} x-transition:enter="transition ease-out duration-300"
{% endif %} x-transition:enter-start="transform origin-top opacity-0 -translate-x-6"
x-transition:enter-end="transform origin-top opacity-100 translate-x-0"
<div class="grid-x grid-padding-x"> x-transition:leave="transition ease-in duration-150"
{% for tp in topic.list %} x-transition:leave-start="transform origin-top opacity-100 translate-x-0"
<div class="cell large-2 medium-4 small-6"> x-transition:leave-end="transform origin-top opacity-0 -translate-x-6"
<a href="{% url 'intern:topic' tp.slug %}"> ><a href="{% url 'intern:topic-create' topic_group.grouper.slug %}"><i class="fa-solid fa-plus mr-1"></i>Eintrag hinzufügen</a></button>
<div class="intern-topic">
<div class="intern-topic-text">
{{ tp.title }}
</div>
</div>
</a>
</div> </div>
<ul class="ml-7 w-fit" x-show="expandList" x-collapse>
{% for topic in topic_group.list %}
<li><a href="{% url 'intern:topic' topic.slug %}" class="w-full py-1 inline-block">{{ topic.title }}</a></li>
{% endfor %} {% endfor %}
<div class="cell large-2 medium-4 small-6"> <li class="py-1">
<a href="{% url 'intern:topic-create' topic.list.0.topic_group.slug %}"> <a href="{% url 'intern:topic-create' topic_group.grouper.slug %}" class="border border-gray-700 dark:border-gray-300 rounded px-1.5 py-1 text-sm sm:hidden">
<div class="intern-topic"> <i class="fa-solid fa-plus mr-1"></i>Eintrag hinzufügen
<div class="intern-topic-text">
+
</div>
</div>
</a> </a>
</div> </li>
</div> </ul>
</section>
{% endfor %} {% endfor %}
{% for topic_group in empty_topic_groups %} {% for topic_group in empty_topic_groups %}
<div class="internheader"> <section x-data="{ expandList: $persist(true).as('expandListState-{{ topic_group.title }}') }">
<h3>{{ topic_group.title }}<a class="headerlink" id="{{ topic_group.slug }}" href="#{{ topic_group.slug }}" title="Permalink to {{ topic_group.title }}" style="color: lightgrey;"> #</a></h3> <div class="flex gap-x-6">
</div> <h2 class="text-lg font-medium text-gray-900 dark:text-gray-100 cursor-pointer" @click="expandList = ! expandList">
<i class="fa-fw fa-solid fa-angle-right transition transform origin-center"
<div class="grid-x grid-padding-x"> :class="expandList ? 'rotate-90' : ''"
<div class="cell large-2 medium-4 small-6"> ></i>
<a href="{% url 'intern:topic-create' topic_group.slug %}"> {{ topic_group.title }}
<div class="intern-topic"> </h2>
<div class="intern-topic-text"> <button class="border border-gray-700 dark:border-gray-300 rounded px-1.5 text-sm hidden sm:block"
+ x-show="expandList"
</div> x-transition:enter="transition ease-out duration-300"
x-transition:enter-start="transform origin-top opacity-0 -translate-x-6"
x-transition:enter-end="transform origin-top opacity-100 translate-x-0"
x-transition:leave="transition ease-in duration-150"
x-transition:leave-start="transform origin-top opacity-100 translate-x-0"
x-transition:leave-end="transform origin-top opacity-0 -translate-x-6"
><a href="{% url 'intern:topic-create' topic_group.slug %}"><i class="fa-solid fa-plus mr-1"></i>Eintrag hinzufügen</a></button>
</div> </div>
<ul class="ml-7 w-fit" x-show="expandList" x-collapse>
<li class="py-1">
<a href="{% url 'intern:topic-create' topic_group.slug %}" class="border border-gray-700 dark:border-gray-300 rounded px-1.5 py-1 text-sm sm:hidden">
<i class="fa-solid fa-plus mr-1"></i>Eintrag hinzufügen
</a> </a>
</div> </li>
</div> </ul>
</section>
{% endfor %} {% endfor %}
{% if archive_topic %} {% if archive_topic %}
<div class="internheader"> <section x-data="{ expandList: $persist(true).as('expandListState-Archive') }">
<h3>Archiv<a class="headerlink" id="archive" href="#archive" title="Permalink to Archiv" style="color: lightgrey;"> #</a></h3> <div class="flex gap-x-6">
</div> <h2 class="text-lg font-medium text-gray-900 dark:text-gray-100 cursor-pointer" @click="expandList = ! expandList">
<i class="fa-fw fa-solid fa-angle-right transition transform origin-center"
<div class="grid-x grid-padding-x"> :class="expandList ? 'rotate-90' : ''"
{% for tp in archive_topic %} ></i>
<div class="cell large-2 medium-4 small-6"> Archiv
<a href="{% url 'intern:topic' tp.slug %}"> </h2>
<div class="intern-topic">
<div class="intern-topic-text">
{{ tp.title }}
</div>
</div>
</a>
</div> </div>
<ul class="ml-7 w-fit" x-show="expandList" x-collapse>
{% for topic in archive_topic %}
<li><a href="{% url 'intern:topic' topic.slug %}" class="w-full py-1 inline-block">{{ topic.title }}</a></li>
{% endfor %} {% endfor %}
</div> </ul>
</section>
{% endif %} {% endif %}
</div>
<a href="{% url 'admin:intern_topicgroup_add' %}" class="btn btn-primary block w-full"><i class="fas fa-plus-square mr-2"></i>Neuer Themenbereich</a>
</div>
</main>
{% endblock %} {% endblock %}

View File

@@ -1,23 +1,68 @@
{% extends 'layout.html' %} {% extends 'base.html' %}
{% block content %} {% block content %}
<div class="grid-container"> <!-- Main Content -->
<div class="grid-x padding-top-1"> <main class="container mx-auto w-full px-4 my-8 flex-1">
<div class="cell large-3 medium-4 small-12"> <h1 class="page-title">Task hinzufügen</h1>
<a class="button" href="{% url 'intern:topic' slug %}">Zurück</a> <div class="w-full h-full flex-1 flex justify-center items-center">
</div> <form action="" method="POST" enctype="multipart/form-data" class="w-full max-w-prose sm:px-28 sm:py-4 grid grid-cols-1 gap-y-3 sm:gap-y-6 text-gray-900">
</div>
<hr>
<h2>Neuen Task hinzufügen</h2>
<div class="grid-x">
<div class="cell">
<form action="" method="post">
{% csrf_token %} {% csrf_token %}
{{ form }}
<input type="submit" class="button" name="btn_input" value="Hinzufügen"> {% if form.non_field_errors %}
<div class="alert alert-danger">
<i class="alert-icon fas fa-check-circle"></i>
<h2 class="alert-title">Fehler:</h2>
<div class="alert-body">{{ form.non_field_errors }}</div>
</div>
{% endif %}
<label class="block">
<span class="text-gray-700 dark:text-gray-200">{{ form.title.label }}</span>
{% if form.title.errors %}
<div class="alert alert-danger">
<div class="alert-body">{{ form.title.errors }}</div>
</div>
{% endif %}
<input type="text" id="id_title" name="title" class="mt-1 block w-full rounded-md border-gray-300 dark:border-none shadow-sm focus:border-none focus:ring focus:ring-blue-200 dark:focus:ring-sky-700 focus:ring-opacity-50" required>
</label>
<label class="block">
<span class="text-gray-700 dark:text-gray-200">{{ form.shortterm.label }}</span>
{% if form.shortterm.errors %}
<div class="alert alert-danger">
<div class="alert-body">{{ form.shortterm.errors }}</div>
</div>
{% endif %}
<input type="text" id="id_shortterm" name="shortterm" class="mt-1 block w-full rounded-md border-gray-300 dark:border-none shadow-sm focus:border-none focus:ring focus:ring-blue-200 dark:focus:ring-sky-700 focus:ring-opacity-50" required>
</label>
<label>
<span class="text-gray-700 dark:text-gray-200">{{ form.due_date.label }}</span>
<input type="date" id="id_due_date" name="due_date" class="block w-full mt-1 rounded-md border-gray-300 dark:border-none shadow-sm focus:border-none focus:ring focus:ring-blue-200 dark:focus:ring-sky-700 focus:ring-opacity-50">
</label>
<label>
<span class="text-gray-700 dark:text-gray-200">{{ form.assigned_to.label }}</span>
{% if form.assigned_to.errors %}
<div class="alert alert-danger">
<div class="alert-body">{{ form.assigned_to.errors }}</div>
</div>
{% endif %}
<select id="id_assigned_to" name="assigned_to" class="block w-full mt-1 rounded-md border-gray-300 dark:border-none shadow-sm focus:border-none focus:ring focus:ring-blue-200 dark:focus:ring-sky-700 focus:ring-opacity-50">
{% for elem in form.assigned_to %}
{% if forloop.first %}
<option value="">Alle</option>
{% else %}
{{ elem }}
{% endif %}
{% endfor %}
</select>
</label>
<input type="hidden" name="task_list" value="{{ task_list.id }}" id="id_task_list">
<input type="submit" class="block btn btn-primary" value="Hinzufügen">
</form> </form>
</div> </div>
</div> </main>
</div>
{% endblock %} {% endblock %}

View File

@@ -1,71 +1,47 @@
{% extends "layout.html" %} {% extends "base.html" %}
{% block content %} {% block content %}
<div class="grid-container"> <!-- Main Content -->
<div class="grid-x grid-padding-x"> <main class="container mx-auto w-full px-4 my-8 flex-1">
<div class="cell padding-top-1"> <h1 class="page-title">Intern</h1>
<h3> <div class="flex flex-col gap-y-8 max-w-prose mx-auto text-gray-700 dark:text-gray-300">
<a href="{% url 'intern:index' %}#{{ active_topic.topic_group.slug }}">{{ active_topic.topic_group.title }}</a> <aside class="flex gap-2 flex-wrap align-bottom text-sm sm:text-base text-gray-600 dark:text-gray-300">
/ {{ active_topic.title }} <a class="underline hover:text-gray-900 dark:hover:text-gray-100" href="{% url 'intern:index' %}#{{ active_topic.topic_group.slug }}">{{ active_topic.topic_group.title }}</a>
</h3> <span><i class="fa-solid fa-angle-right"></i></span>
</div> <span class="cursor-default">{{ active_topic.title }}</span>
</div> </aside>
<div class="intern-hero">
<div class="grid-x padding-top-1 padding-left-1 padding-right-1">
<div class="cell large-3 medium-4 small-10">
<a class="button" href="{% url 'intern:topic-update' active_topic.slug %}">Thema bearbeiten</a>
</div>
{% if active_topic.task_list %}
<div class="cell large-3 medium-4 small-10">
<a class="button" href="{% url 'intern:task-create' active_topic.slug %}">neuen Task hinzufügen</a>
</div>
{% endif %}
</div>
<!-- TODO: description -->
{% if active_topic.description %} {% if active_topic.description %}
<div class="padding-top-1 padding-left-1 padding-right-1"> <div class="db-page-content-left">
{{ active_topic.description|safe }} {{ active_topic.description|safe }}
<hr>
</div> </div>
{% endif %} {% endif %}
{% if tasks %} <!-- TODO: tasks -->
<div class="grid-x grid-padding-x">
<div class="cell">offene Tasks:</div>
{% for task in tasks %} <ul class="flex flex-col gap-1 max-w-fit">
<div class="cell">
<a href="{% url 'tasks:task-detail' task.id %}">{{ task }}</a>
</div>
{% endfor %}
</div>
<hr>
{% endif %}
<div class="grid-x grid-padding-x">
{% for attachment in attachments %} {% for attachment in attachments %}
<div class="cell large-2 medium-4 small-6"> <li><a href="{% url 'intern:attachment' active_topic.slug attachment.slug %}" class="py-1 inline-block">{{ attachment.title }}</a></li>
<a href="{% url 'intern:attachment' active_topic.slug attachment.slug %}">
<div class="intern-topic">
<div class="intern-topic-text">
{{ attachment.title }}
</div>
</div>
</a>
</div>
{% endfor %} {% endfor %}
<div class="cell large-2 medium-4 small-6"> <li class="mt-2">
<a href="{% url 'intern:attachment-create' active_topic.slug %}"> <a href="{% url 'intern:attachment-create' active_topic.slug %}" class="border border-gray-700 dark:border-gray-300 rounded px-1.5 py-1">
<div class="intern-topic"> <i class="fa-solid fa-plus mr-1"></i>Eintrag hinzufügen
<div class="intern-topic-text">
+
</div>
</div>
</a> </a>
</li>
</ul>
<section class="flex flex-col sm:flex-row justify-end gap-4">
<a href="{% url 'intern:topic-update' active_topic.slug %}" class="btn btn-primary block"><i class="fas fa-pen-to-square mr-2"></i>Thema bearbeiten</a>
{% if active_topic.task_list %}
<a href="{% url 'intern:task-create' active_topic.slug %}" class="btn btn-primary block"><i class="fas fa-plus-square mr-2"></i>Task hinzufügen</a>
{% endif %}
</section>
</div> </div>
</div> </main>
</div>
</div>
{% endblock %} {% endblock %}

View File

@@ -1,23 +1,45 @@
{% extends "layout.html" %} {% extends 'base.html' %}
{% block content %} {% block content %}
<div class="grid-container"> <!-- Main Content -->
<div class="grid-x padding-top-1"> <main class="container mx-auto w-full px-4 my-8 flex-1">
<div class="cell large-3 medium-4 small-12"> <h1 class="page-title">Thema hinzufügen</h1>
<a class="button" href="{% url 'intern:index' %}">Zurück</a> <div class="w-full h-full flex-1 flex justify-center items-center">
</div> <form action="" method="POST" enctype="multipart/form-data" class="w-full max-w-prose sm:px-28 sm:py-4 grid grid-cols-1 gap-y-3 sm:gap-y-6 text-gray-900">
</div>
<hr>
<h2>Neues Thema erstellen</h2>
<div class="grid-x">
<div class="cell">
<form action="" method="post" enctype="multipart/form-data">
{% csrf_token %} {% csrf_token %}
{{ form }}
<input type="submit" class="button" name="btn_input" value="Hinzufügen"> {% if form.non_field_errors %}
<div class="alert alert-danger">
<i class="alert-icon fas fa-check-circle"></i>
<h2 class="alert-title">Fehler:</h2>
<div class="alert-body">{{ form.non_field_errors }}</div>
</div>
{% endif %}
<label class="block">
<span class="text-gray-700 dark:text-gray-200">{{ form.title.label }}</span>
{% if form.title.errors %}
<div class="alert alert-danger">
<div class="alert-body">{{ form.title.errors }}</div>
</div>
{% endif %}
<input type="text" id="id_title" name="title" class="mt-1 block w-full rounded-md border-gray-300 dark:border-none shadow-sm focus:border-none focus:ring focus:ring-blue-200 dark:focus:ring-sky-700 focus:ring-opacity-50" required>
</label>
<label class="block">
<span class="text-gray-700 dark:text-gray-200">{{ form.shortterm.label }}</span>
{% if form.shortterm.errors %}
<div class="alert alert-danger">
<div class="alert-body">{{ form.shortterm.errors }}</div>
</div>
{% endif %}
<input type="text" id="id_shortterm" name="shortterm" class="mt-1 block w-full rounded-md border-gray-300 dark:border-none shadow-sm focus:border-none focus:ring focus:ring-blue-200 dark:focus:ring-sky-700 focus:ring-opacity-50" required>
</label>
<input type="hidden" name="topic_group" value="{{ topic_group.id }}" id="id_topic_group">
<input type="submit" class="block btn btn-primary" value="Hinzufügen">
</form> </form>
</div> </div>
</div> </main>
</div>
{% endblock %} {% endblock %}

View File

@@ -1,26 +1,45 @@
{% extends "layout.html" %} {% extends 'base.html' %}
{% block content %} {% block content %}
<div class="grid-container"> <!-- Main Content -->
<div class="grid-x padding-top-1"> <main class="container mx-auto w-full px-4 my-8 flex-1">
<div class="cell large-3 medium-4 small-12"> <h1 class="page-title">Thema '{{ topic.title }}' bearbeiten</h1>
<a class="button" href="{% url 'intern:topic' slug %}">Zurück</a> <div class="w-full h-full flex-1 flex justify-center items-center">
</div> <form action="" method="POST" enctype="multipart/form-data" class="w-full max-w-prose sm:px-28 sm:py-4 grid grid-cols-1 gap-y-3 sm:gap-y-6 text-gray-900">
<div class="cell large-3 medium-4 small-12">
<a class="button" href="{% url 'admin:intern_topic_change' topic.id %}">Thema im Admin bearbeiten</a>
</div>
</div>
<hr>
<h2>Thema '{{ topic.title }}' bearbeiten</h2>
<div class="grid-x">
<div class="cell">
<form action="" method="post" enctype="multipart/form-data">
{% csrf_token %} {% csrf_token %}
{{ form }}
<input type="submit" class="button" name="btn_input" value="Bearbeiten"> {% if form.non_field_errors %}
<div class="alert alert-danger">
<i class="alert-icon fas fa-check-circle"></i>
<h2 class="alert-title">Fehler:</h2>
<div class="alert-body">{{ form.non_field_errors }}</div>
</div>
{% endif %}
<label class="block">
<span class="text-gray-700 dark:text-gray-200">{{ form.title.label }}</span>
{% if form.title.errors %}
<div class="alert alert-danger">
<div class="alert-body">{{ form.title.errors }}</div>
</div>
{% endif %}
<input type="text" id="id_title" name="title" value="{{ topic.title }}" class="mt-1 block w-full rounded-md border-gray-300 dark:border-none shadow-sm focus:border-none focus:ring focus:ring-blue-200 dark:focus:ring-sky-700 focus:ring-opacity-50" required>
</label>
<label class="block">
<span class="text-gray-700 dark:text-gray-200">{{ form.shortterm.label }}</span>
{% if form.shortterm.errors %}
<div class="alert alert-danger">
<div class="alert-body">{{ form.shortterm.errors }}</div>
</div>
{% endif %}
<input type="text" id="id_shortterm" name="shortterm" value="{{ topic.shortterm }}" class="mt-1 block w-full rounded-md border-gray-300 dark:border-none shadow-sm focus:border-none focus:ring focus:ring-blue-200 dark:focus:ring-sky-700 focus:ring-opacity-50" required>
</label>
<input type="hidden" name="topic_group" value="{{ topic.topic_group.id }}" id="id_topic_group">
<input type="submit" class="block btn btn-primary" value="Bearbeiten">
</form> </form>
</div> </div>
</div> </main>
</div>
{% endblock %} {% endblock %}