fontawesome5;interfont;local frontend resources;languages

This commit is contained in:
Jan Koppe 2020-05-01 21:40:43 +02:00
parent 621771c391
commit 0400e85f89
Signed by: thunfisch
GPG Key ID: BE935B0735A2129B
21 changed files with 288 additions and 183 deletions

4
.gitignore vendored
View File

@ -1,4 +1,8 @@
.env
static/css/font-awesome.min.css
static/js/bootstrap.bundle.min.js
static/js/jquery.min.js
static/fonts
# Byte-compiled / optimized / DLL files
__pycache__/

View File

@ -5,6 +5,11 @@ WORKDIR /app
ENV PYTHONDONTWRITEBYTECODE 1
ENV PYTHONUNBUFFERED 1
# https://github.com/twbs/bootstrap/issues/30553 don't upgrade jquery to 3.5.0 yet
ENV JQUERY_VERSION=3.4.1
ENV BOOTSTRAP_VERSION=4.4.1
ENV INTER_VERSION=3.13
# install required packages
RUN apk add --no-cache postgresql-dev gcc python3-dev musl-dev gettext postgresql-client nginx supervisor
@ -21,6 +26,18 @@ RUN addgroup -S portier && adduser -S portier -G portier
# add code
ADD --chown=portier:portier . /app
# add static external libraries for frontend
ADD --chown=portier:portier http://code.jquery.com/jquery-${JQUERY_VERSION}.min.js /app/static/js/jquery.min.js
ADD --chown=portier:portier https://stackpath.bootstrapcdn.com/bootstrap/${BOOTSTRAP_VERSION}/js/bootstrap.bundle.min.js /app/static/js/bootstrap.bundle.min.js
RUN mkdir -p /tmp/inter /app/static/fonts \
&& cd /tmp/inter && wget https://github.com/rsms/inter/releases/download/v${INTER_VERSION}/Inter-${INTER_VERSION}.zip \
&& unzip Inter-${INTER_VERSION}.zip && mv /tmp/inter/Inter\ Web/* /app/static/fonts/ \
&& cd - \
&& rm -rf /tmp/inter \
&& chown -R portier:portier /app/static/fonts/
# collect static files and compile localized strings
RUN ./manage.py collectstatic --noinput --link
RUN ./manage.py compilemessages

6
bootstrap_variables.scss vendored Normal file
View File

@ -0,0 +1,6 @@
$primary: rgb(17, 114, 26);
$font-family-sans-serif: Inter,-apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, "Noto Sans", sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji";
$enable-shadows: true;
$enable-responsive-font-sizes: true;
$enable-rounded: false;

View File

@ -8,7 +8,7 @@ msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2020-05-01 12:17+0000\n"
"POT-Creation-Date: 2020-05-01 17:01+0000\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <LL@li.org>\n"
@ -18,6 +18,14 @@ msgstr ""
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
#: portier/settings.py:139
msgid "German"
msgstr "Deutsch"
#: portier/settings.py:140
msgid "English"
msgstr "Englisch"
#: restream/models.py:11
msgid "restreamconfig_stream_help"
msgstr ""
@ -49,19 +57,20 @@ msgstr ""
#: restream/templates/restream/restreamconfig_confirm_delete.html:6
#: rtmp/templates/rtmp/stream_confirm_delete.html:6
msgid "confirm_delete_header"
msgstr ""
msgstr "Löschen bestätigen"
#: restream/templates/restream/restreamconfig_confirm_delete.html:12
#, python-format
msgid "are_you_sure_you_want_to_delete_\"%(restreamconfig_config_name)s\"?"
msgstr ""
"Bist du sicher, dass du \"%(restreamconfig_config_name)s\" löschen willst?"
#: restream/templates/restream/restreamconfig_confirm_delete.html:15
#: restream/templates/restream/restreamconfig_detail.html:20
#: rtmp/templates/rtmp/stream_confirm_delete.html:18
#: rtmp/templates/rtmp/stream_detail.html:20
msgid "delete"
msgstr ""
msgstr "Löschen"
#: restream/templates/restream/restreamconfig_detail.html:12
msgid "restreamconfig_configuration_details_header"
@ -70,26 +79,26 @@ msgstr ""
#: restream/templates/restream/restreamconfig_detail.html:17
#: rtmp/templates/rtmp/stream_detail.html:17
msgid "change"
msgstr ""
msgstr "Ändern"
#: restream/templates/restream/restreamconfig_detail.html:28
#: restream/templates/restream/restreamconfig_list.html:18
#: rtmp/templates/rtmp/stream_detail.html:28
#: rtmp/templates/rtmp/stream_list.html:18
msgid "name"
msgstr ""
msgstr "Name"
#: restream/templates/restream/restreamconfig_detail.html:30
msgid "stream"
msgstr ""
msgstr "Stream"
#: restream/templates/restream/restreamconfig_detail.html:35
msgid "configured_target_url"
msgstr ""
msgstr "Konfigurierte Ziel-URL"
#: restream/templates/restream/restreamconfig_form.html:5
msgid "create_new_restreamconfig_configuration_header"
msgstr ""
msgstr "Neue Restream Konfiguration erstellen"
#: restream/templates/restream/restreamconfig_form.html:14
#: restream/templates/restream/restreamconfig_update_form.html:14
@ -98,7 +107,7 @@ msgstr ""
#: templates/registration/password_change_form.html:13
#: templates/registration/password_reset_form.html:13
msgid "submit"
msgstr ""
msgstr "Abschicken"
#: restream/templates/restream/restreamconfig_form.html:21
msgid "create_new_restreamconfig_configuration_text_html"
@ -106,30 +115,30 @@ msgstr ""
#: restream/templates/restream/restreamconfig_list.html:8
msgid "restreamconfig_configuration_header"
msgstr ""
msgstr "Restream Konfiguration"
#: restream/templates/restream/restreamconfig_list.html:12
#: rtmp/templates/rtmp/stream_list.html:12
msgid "create"
msgstr ""
msgstr "Erstellen"
#: restream/templates/restream/restreamconfig_list.html:19
msgid "active"
msgstr ""
msgstr "Aktiv"
#: restream/templates/restream/restreamconfig_list.html:20
#: rtmp/templates/rtmp/stream_list.html:20
msgid "actions"
msgstr ""
msgstr "Aktionen"
#: restream/templates/restream/restreamconfig_list.html:38
#: rtmp/templates/rtmp/stream_list.html:38
msgid "details"
msgstr ""
msgstr "Details"
#: restream/templates/restream/restreamconfig_update_form.html:5
msgid "update_restreamconfig_configuration_header"
msgstr ""
msgstr "Restream Konfiguration anpassen"
#: restream/templates/restream/restreamconfig_update_form.html:21
msgid "update_restreamconfig_configuration_text_html"
@ -137,80 +146,82 @@ msgstr ""
#: rtmp/models.py:13
msgid "rtmp_application_name"
msgstr ""
msgstr "RTMP Application Name"
#: rtmp/models.py:16
msgid "application_verbose_name"
msgstr ""
msgstr "Application"
#: rtmp/models.py:17
msgid "application_verbose_name_plural"
msgstr ""
msgstr "Applications"
#: rtmp/models.py:20
msgid "aplication_class_name"
msgstr ""
msgstr "Application"
#: rtmp/models.py:27
msgid "stream_application_help"
msgstr ""
msgstr "Unter welcher RTMP Application gilt diese Stream ID"
#: rtmp/models.py:28
msgid "stream_stream_help"
msgstr ""
msgstr "RTMP Stream ID"
#: rtmp/models.py:29
msgid "stream_name_help"
msgstr ""
msgstr "Name für diesen Stream"
#: rtmp/models.py:68
msgid "stream_class_name"
msgstr ""
msgstr "Stream"
#: rtmp/templates/rtmp/stream_confirm_delete.html:13
msgid "deleting_stream_configuration_will_also_delete_all_depending_confgurations_warning"
msgstr ""
"Achtung! Beim Löschen dieser Stream Konfiguration werden auch alle "
"abhängigen Konfigurationen gelöscht."
#: rtmp/templates/rtmp/stream_confirm_delete.html:15
#, python-format
msgid "are_you_sure_you_want_to_delete_\"%(stream_config_name)s\"?"
msgstr ""
msgstr "Willst du wirklich \"%(stream_config_name)s\" löschen?"
#: rtmp/templates/rtmp/stream_confirm_delete.html:25
msgid "deleting_configurations_list_header"
msgstr ""
msgstr "Diese Konfigurationen werden gelöscht"
#: rtmp/templates/rtmp/stream_detail.html:12
msgid "stream_configuration_details_header"
msgstr ""
msgstr "Stream Konfiguration Details"
#: rtmp/templates/rtmp/stream_detail.html:30
msgid "application"
msgstr ""
msgstr "Application"
#: rtmp/templates/rtmp/stream_detail.html:33
msgid "stream_configuration_do_not_share_warning"
msgstr ""
msgstr "Achtung! Gebe diese Stream ID niemals weiter."
#: rtmp/templates/rtmp/stream_detail.html:36
msgid "how_to_configure_your_encoder_header"
msgstr ""
msgstr "Wie du deinen Encoder konfigurierst"
#: rtmp/templates/rtmp/stream_detail.html:38
msgid "set_this_stream_server_in_encoder"
msgstr ""
msgstr "Stelle diesen Stream Server in deinem Encoder ein"
#: rtmp/templates/rtmp/stream_detail.html:40
msgid "set_this_stream_id_in_encoder"
msgstr ""
msgstr "Stelle diese Stream ID in deinem Encoder ein"
#: rtmp/templates/rtmp/stream_detail.html:48
msgid "you_may_need_to_use_this_full_url_instead"
msgstr ""
msgstr "Vielleicht musst du diese volle URL verwenden"
#: rtmp/templates/rtmp/stream_form.html:5
msgid "create_new_stream_configuration_header"
msgstr ""
msgstr "Neue Stream Konfiguration erstellen"
#: rtmp/templates/rtmp/stream_form.html:21
msgid "create_new_stream_configuration_text_html"
@ -218,63 +229,60 @@ msgstr ""
#: rtmp/templates/rtmp/stream_list.html:8
msgid "stream_configuration_header"
msgstr ""
msgstr "Stream Konfiguration"
#: rtmp/templates/rtmp/stream_list.html:19
msgid "publishing"
msgstr ""
msgid "receiving"
msgstr "Empfängt"
#: rtmp/templates/rtmp/stream_update_form.html:5
msgid "update_stream_configuration_header"
msgstr ""
msgstr "Stream Konfiguration anpassen"
#: rtmp/templates/rtmp/stream_update_form.html:21
msgid "update_stream_configuration_text_html"
msgstr ""
#: templates/base.html:36
msgid "navbar_configuration"
msgstr ""
msgid "navbar_streaming"
msgstr "Streaming"
#: templates/base.html:39
msgid "navbar_configuration_streaming_header"
msgstr ""
msgid "navbar_configuration_streams"
msgstr "Streams"
#: templates/base.html:40
msgid "navbar_configuration_streams"
msgstr ""
#: templates/base.html:41
msgid "navbar_configuration_restreams"
msgstr ""
msgstr "Restreams"
#: templates/base.html:43
msgid "navbar_configuration_account_header"
msgstr ""
#: templates/base.html:44
msgid "navbar_configuration_password_change"
msgstr ""
#: templates/base.html:47
#, python-format
msgid "hello_%(username)s"
msgstr "Hallo, %(username)s!"
#: templates/base.html:50
msgid "navbar_logout"
msgstr ""
msgid "navbar_account_password_change"
msgstr "Passwort ändern"
#: templates/base.html:52
#: templates/base.html:51
msgid "navbar_account_logout"
msgstr "Abmelden"
#: templates/base.html:55
msgid "navbar_login"
msgstr ""
msgstr "Anmelden"
#: templates/registration/login.html:5 templates/registration/login.html:13
msgid "login"
msgstr ""
msgstr "Anmelden"
#: templates/registration/login.html:18
msgid "forgot_password_q"
msgstr ""
msgstr "Passwort vergessen?"
#: templates/registration/password_change_done.html:5
msgid "password_change_successful"
msgstr ""
msgstr "Passwort erfolgreich geändert"
#: templates/registration/password_change_done.html:6
msgid "password_change_successful_text"
@ -282,11 +290,11 @@ msgstr ""
#: templates/registration/password_change_done.html:7
msgid "take_me_to_safety"
msgstr ""
msgstr "Bring mich in Sicherheit!"
#: templates/registration/password_change_form.html:5
msgid "change_password"
msgstr ""
msgstr "Passwort ändern"
#: templates/registration/password_change_form.html:20
msgid "change_password_text_html"

View File

@ -8,7 +8,7 @@ msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2020-05-01 12:17+0000\n"
"POT-Creation-Date: 2020-05-01 17:01+0000\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <LL@li.org>\n"
@ -18,6 +18,14 @@ msgstr ""
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
#: portier/settings.py:139
msgid "German"
msgstr "German"
#: portier/settings.py:140
msgid "English"
msgstr "English"
#: restream/models.py:11
msgid "restreamconfig_stream_help"
msgstr ""
@ -36,60 +44,60 @@ msgstr ""
#: restream/models.py:17
msgid "restreamconfig_verbose_name"
msgstr ""
msgstr "Restream configuration"
#: restream/models.py:18
msgid "restreamconfig_verbose_name_plural"
msgstr ""
msgstr "Restream configurations"
#: restream/models.py:21
msgid "restreamconfig_class_name"
msgstr ""
msgstr "Restream configuration"
#: restream/templates/restream/restreamconfig_confirm_delete.html:6
#: rtmp/templates/rtmp/stream_confirm_delete.html:6
msgid "confirm_delete_header"
msgstr ""
msgstr "Confirm deletion"
#: restream/templates/restream/restreamconfig_confirm_delete.html:12
#, python-format
msgid "are_you_sure_you_want_to_delete_\"%(restreamconfig_config_name)s\"?"
msgstr ""
msgstr "Are you sure you want to delete \"%(restreamconfig_config_name)s\"?"
#: restream/templates/restream/restreamconfig_confirm_delete.html:15
#: restream/templates/restream/restreamconfig_detail.html:20
#: rtmp/templates/rtmp/stream_confirm_delete.html:18
#: rtmp/templates/rtmp/stream_detail.html:20
msgid "delete"
msgstr ""
msgstr "Delete"
#: restream/templates/restream/restreamconfig_detail.html:12
msgid "restreamconfig_configuration_details_header"
msgstr ""
msgstr "Restream configuration details"
#: restream/templates/restream/restreamconfig_detail.html:17
#: rtmp/templates/rtmp/stream_detail.html:17
msgid "change"
msgstr ""
msgstr "Change"
#: restream/templates/restream/restreamconfig_detail.html:28
#: restream/templates/restream/restreamconfig_list.html:18
#: rtmp/templates/rtmp/stream_detail.html:28
#: rtmp/templates/rtmp/stream_list.html:18
msgid "name"
msgstr ""
msgstr "Name"
#: restream/templates/restream/restreamconfig_detail.html:30
msgid "stream"
msgstr ""
msgstr "Stream"
#: restream/templates/restream/restreamconfig_detail.html:35
msgid "configured_target_url"
msgstr ""
msgstr "Configured target URL"
#: restream/templates/restream/restreamconfig_form.html:5
msgid "create_new_restreamconfig_configuration_header"
msgstr ""
msgstr "Create new restream configuration"
#: restream/templates/restream/restreamconfig_form.html:14
#: restream/templates/restream/restreamconfig_update_form.html:14
@ -98,7 +106,7 @@ msgstr ""
#: templates/registration/password_change_form.html:13
#: templates/registration/password_reset_form.html:13
msgid "submit"
msgstr ""
msgstr "Submit"
#: restream/templates/restream/restreamconfig_form.html:21
msgid "create_new_restreamconfig_configuration_text_html"
@ -106,30 +114,30 @@ msgstr ""
#: restream/templates/restream/restreamconfig_list.html:8
msgid "restreamconfig_configuration_header"
msgstr ""
msgstr "Restream configuration"
#: restream/templates/restream/restreamconfig_list.html:12
#: rtmp/templates/rtmp/stream_list.html:12
msgid "create"
msgstr ""
msgstr "Create"
#: restream/templates/restream/restreamconfig_list.html:19
msgid "active"
msgstr ""
msgstr "Active"
#: restream/templates/restream/restreamconfig_list.html:20
#: rtmp/templates/rtmp/stream_list.html:20
msgid "actions"
msgstr ""
msgstr "Actions"
#: restream/templates/restream/restreamconfig_list.html:38
#: rtmp/templates/rtmp/stream_list.html:38
msgid "details"
msgstr ""
msgstr "Details"
#: restream/templates/restream/restreamconfig_update_form.html:5
msgid "update_restreamconfig_configuration_header"
msgstr ""
msgstr "Update restream configuration"
#: restream/templates/restream/restreamconfig_update_form.html:21
msgid "update_restreamconfig_configuration_text_html"
@ -137,80 +145,82 @@ msgstr ""
#: rtmp/models.py:13
msgid "rtmp_application_name"
msgstr ""
msgstr "RTMP application name"
#: rtmp/models.py:16
msgid "application_verbose_name"
msgstr ""
msgstr "RTMP application"
#: rtmp/models.py:17
msgid "application_verbose_name_plural"
msgstr ""
msgstr "RTMP applications"
#: rtmp/models.py:20
msgid "aplication_class_name"
msgstr ""
msgstr "Application"
#: rtmp/models.py:27
msgid "stream_application_help"
msgstr ""
msgstr "Application which the stream is assigned to"
#: rtmp/models.py:28
msgid "stream_stream_help"
msgstr ""
msgstr "Stream ID for this stream"
#: rtmp/models.py:29
msgid "stream_name_help"
msgstr ""
msgstr "Name for this stream"
#: rtmp/models.py:68
msgid "stream_class_name"
msgstr ""
msgstr "Stream"
#: rtmp/templates/rtmp/stream_confirm_delete.html:13
msgid "deleting_stream_configuration_will_also_delete_all_depending_confgurations_warning"
msgstr ""
"Attention! Deleting this stream configuration will also delete all depending "
"configurations."
#: rtmp/templates/rtmp/stream_confirm_delete.html:15
#, python-format
msgid "are_you_sure_you_want_to_delete_\"%(stream_config_name)s\"?"
msgstr ""
msgstr "Are you sure you want to delete \"%(stream_config_name)s\"?"
#: rtmp/templates/rtmp/stream_confirm_delete.html:25
msgid "deleting_configurations_list_header"
msgstr ""
msgstr "List of deleted configurations"
#: rtmp/templates/rtmp/stream_detail.html:12
msgid "stream_configuration_details_header"
msgstr ""
msgstr "Stream configuration details"
#: rtmp/templates/rtmp/stream_detail.html:30
msgid "application"
msgstr ""
msgstr "Application"
#: rtmp/templates/rtmp/stream_detail.html:33
msgid "stream_configuration_do_not_share_warning"
msgstr ""
msgstr "Attention! Do not share this stream ID with anyone."
#: rtmp/templates/rtmp/stream_detail.html:36
msgid "how_to_configure_your_encoder_header"
msgstr ""
msgstr "How to configure your encoder"
#: rtmp/templates/rtmp/stream_detail.html:38
msgid "set_this_stream_server_in_encoder"
msgstr ""
msgstr "Set this stream server in your encoder"
#: rtmp/templates/rtmp/stream_detail.html:40
msgid "set_this_stream_id_in_encoder"
msgstr ""
msgstr "Set this stream ID in your encoder"
#: rtmp/templates/rtmp/stream_detail.html:48
msgid "you_may_need_to_use_this_full_url_instead"
msgstr ""
msgstr "You may need to use this full URL instead"
#: rtmp/templates/rtmp/stream_form.html:5
msgid "create_new_stream_configuration_header"
msgstr ""
msgstr "Create new stream configuration"
#: rtmp/templates/rtmp/stream_form.html:21
msgid "create_new_stream_configuration_text_html"
@ -218,63 +228,60 @@ msgstr ""
#: rtmp/templates/rtmp/stream_list.html:8
msgid "stream_configuration_header"
msgstr ""
msgstr "Stream configuration"
#: rtmp/templates/rtmp/stream_list.html:19
msgid "publishing"
msgstr ""
msgid "receiving"
msgstr "Receiving"
#: rtmp/templates/rtmp/stream_update_form.html:5
msgid "update_stream_configuration_header"
msgstr ""
msgstr "Change stream configuration"
#: rtmp/templates/rtmp/stream_update_form.html:21
msgid "update_stream_configuration_text_html"
msgstr ""
#: templates/base.html:36
msgid "navbar_configuration"
msgstr ""
msgid "navbar_streaming"
msgstr "Streaming"
#: templates/base.html:39
msgid "navbar_configuration_streaming_header"
msgstr ""
msgid "navbar_configuration_streams"
msgstr "Streams"
#: templates/base.html:40
msgid "navbar_configuration_streams"
msgstr ""
#: templates/base.html:41
msgid "navbar_configuration_restreams"
msgstr ""
msgstr "Restreams"
#: templates/base.html:43
msgid "navbar_configuration_account_header"
msgstr ""
#: templates/base.html:44
msgid "navbar_configuration_password_change"
msgstr ""
#: templates/base.html:47
#, python-format
msgid "hello_%(username)s"
msgstr "Hello, %(username)s!"
#: templates/base.html:50
msgid "navbar_logout"
msgstr ""
msgid "navbar_account_password_change"
msgstr "Change password"
#: templates/base.html:52
#: templates/base.html:51
msgid "navbar_account_logout"
msgstr "Logout"
#: templates/base.html:55
msgid "navbar_login"
msgstr ""
msgstr "Login"
#: templates/registration/login.html:5 templates/registration/login.html:13
msgid "login"
msgstr ""
msgstr "Login"
#: templates/registration/login.html:18
msgid "forgot_password_q"
msgstr ""
msgstr "Did you forget your password?"
#: templates/registration/password_change_done.html:5
msgid "password_change_successful"
msgstr ""
msgstr "Password change was successful"
#: templates/registration/password_change_done.html:6
msgid "password_change_successful_text"
@ -282,11 +289,11 @@ msgstr ""
#: templates/registration/password_change_done.html:7
msgid "take_me_to_safety"
msgstr ""
msgstr "Help! Take me back to safety!"
#: templates/registration/password_change_form.html:5
msgid "change_password"
msgstr ""
msgstr "Change password"
#: templates/registration/password_change_form.html:20
msgid "change_password_text_html"

View File

@ -11,6 +11,7 @@ https://docs.djangoproject.com/en/3.0/ref/settings/
"""
import os
from django.utils.translation import gettext_lazy as _
# Build paths inside the project like this: os.path.join(BASE_DIR, ...)
BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
@ -42,7 +43,7 @@ INSTALLED_APPS = [
'guardian',
'django_registration',
'bootstrap4',
'fa',
'fontawesome_5',
'core.apps.CoreConfig',
'portal.apps.PortalConfig',
'rtmp.apps.RtmpConfig',
@ -53,6 +54,7 @@ INSTALLED_APPS = [
MIDDLEWARE = [
'django.middleware.security.SecurityMiddleware',
'django.contrib.sessions.middleware.SessionMiddleware',
'django.middleware.locale.LocaleMiddleware',
'django.middleware.common.CommonMiddleware',
'django.middleware.csrf.CsrfViewMiddleware',
'django.contrib.auth.middleware.AuthenticationMiddleware',
@ -133,6 +135,16 @@ USE_I18N = True
USE_L10N = True
USE_TZ = True
LANGUAGES = [
('de', _('German')),
('en', _('English')),
]
LOCALE_PATHS = (
os.path.join(BASE_DIR, 'locale'),
)
# Static files (CSS, JavaScript, Images)
# https://docs.djangoproject.com/en/3.0/howto/static-files/

View File

@ -19,6 +19,7 @@ from django.urls import include, path
urlpatterns = [
path('accounts/', include('django_registration.backends.activation.urls')),
path('accounts/', include('django.contrib.auth.urls')),
path('i18n/', include('django.conf.urls.i18n')),
path('admin/', admin.site.urls),
path('rtmp/', include('rtmp.urls')),
path('restream/', include('restream.urls')),

View File

@ -2,7 +2,7 @@ django>=3.0
django-registration>=3.1
django-bootstrap4
django-guardian
django-fa
django-fontawesome-5
celery>=4.4
gunicorn>=20
psycopg2-binary

View File

@ -1,7 +1,7 @@
{% extends 'base.html' %}
{% load i18n %}
{% load bootstrap4 %}
{% load font_awesome %}
{% load fontawesome_5 %}
{% block 'content' %}
<h6>{% trans "confirm_delete_header" %}</h6>
<hr class="my-4">
@ -12,7 +12,7 @@
<p>{% blocktrans with restreamconfig_config_name=object.name %}are_you_sure_you_want_to_delete_"{{ restreamconfig_config_name }}"?{% endblocktrans %}</p>
{% buttons %}
<button type="submit" class="btn btn-danger" value="login">
{% fa 'trash' %} {% trans "delete" %}
{% fa5_icon 'trash' %} {% trans "delete" %}
</button>
{% endbuttons %}
<input type="hidden" name="next" value="{{ next }}">

View File

@ -1,7 +1,7 @@
{% extends 'base.html' %}
{% load i18n %}
{% load bootstrap4 %}
{% load font_awesome %}
{% load fontawesome_5 %}
{% load guardian_tags %}
{% get_obj_perms user for object as "obj_perms" %}
@ -14,10 +14,10 @@
{% get_obj_perms user for object as "obj_perms" %}
<div class="col-auto">
{% if "change_restreamconfig" in obj_perms %}
<a href="{% url 'restream:restreamconfig_change' pk=object.pk %}" type="button" class="btn btn-primary">{% fa 'pencil' %} {% trans 'change' %}</a>
<a href="{% url 'restream:restreamconfig_change' pk=object.pk %}" type="button" class="btn btn-sm btn-outline-primary">{% fa5_icon 'edit' %} {% trans 'change' %}</a>
{% endif %}
{% if "delete_restreamconfig" in obj_perms %}
<a href="{% url 'restream:restreamconfig_delete' pk=object.pk %}" type="button" class="btn btn-danger">{% fa 'trash' %} {% trans 'delete' %}</a>
<a href="{% url 'restream:restreamconfig_delete' pk=object.pk %}" type="button" class="btn btn-sm btn-outline-danger">{% fa5_icon 'trash' %} {% trans 'delete' %}</a>
{% endif %}
</div>
</div>

View File

@ -1,19 +1,26 @@
{% extends 'base.html' %}
{% load i18n %}
{% load bootstrap4 %}
{% load font_awesome %}
{% load fontawesome_5 %}
{% load guardian_tags %}
{% block 'content' %}
<h6>{% trans "restreamconfig_configuration_header" %}</h6>
<hr class="my-4">
<div class="btn-toolbar mb-4" role="toolbar">
<div class="btn-group" role="group">
<a href="{% url 'restream:restreamconfig_create' %}" type="button" class="btn btn-sm btn-outline-success">{% fa 'plus' %} {% trans "create" %}</a>
<div class="row justify-content-between">
<div class="col">
<h6>{% trans "restreamconfig_configuration_header" %}</h6>
</div>
<div class="col-auto">
<div class="btn-toolbar" role="toolbar">
<div class="btn-group" role="group">
<a href="{% url 'restream:restreamconfig_create' %}" type="button" class="btn btn-sm btn-outline-primary">{% fa5_icon 'plus' %} {% trans "create" %}</a>
</div>
</div>
</div>
</div>
<hr class="my-4">
<table class="table">
<thead class="thead-dark">
<thead class="thead-light">
<tr>
<th scope="col">{% trans "name" %}</th>
<th scope="col">{% trans "active" %}</th>
@ -28,16 +35,16 @@
<th scope="row">{{ object.name }}</th>
<td>
{% if object.active %}
<span class="text-success">{% fa 'check-circle' %}</span>
<span class="text-success">{% fa5_icon 'check-circle' %}</span>
{% else %}
<span class="text-danger">{% fa 'times-circle' %}</span>
<span class="text-danger">{% fa5_icon 'times-circle' %}</span>
{% endif %}
</td>
<td align="right">
<div class="btn-group" role="group">
<a href="{% url 'restream:restreamconfig_detail' pk=object.pk %}" type="button" class="btn btn-sm btn-primary">{% trans "details" %}</a>
<a href="{% url 'restream:restreamconfig_detail' pk=object.pk %}" type="button" class="btn btn-sm btn-outline-primary">{% trans "details" %}</a>
{% if "delete_restreamconfig" in obj_perms %}
<a href="{% url 'restream:restreamconfig_delete' pk=object.pk %}" type="button" class="btn btn-sm btn-danger">{% fa 'trash' %}</a>
<a href="{% url 'restream:restreamconfig_delete' pk=object.pk %}" type="button" class="btn btn-sm btn-outline-danger">{% fa5_icon 'trash' %}</a>
{% endif %}
</div>
</td>

View File

@ -1,7 +1,7 @@
{% extends 'base.html' %}
{% load i18n %}
{% load bootstrap4 %}
{% load font_awesome %}
{% load fontawesome_5 %}
{% block 'content' %}
<h6>{% trans "confirm_delete_header" %}</h6>
<hr class="my-4">
@ -15,7 +15,7 @@
<p>{% blocktrans with stream_config_name=object.name %}are_you_sure_you_want_to_delete_"{{ stream_config_name }}"?{% endblocktrans %}</p>
{% buttons %}
<button type="submit" class="btn btn-danger" value="login">
{% fa 'trash' %} {% trans "delete" %}
{% fa5_icon 'trash' %} {% trans "delete" %}
</button>
{% endbuttons %}
<input type="hidden" name="next" value="{{ next }}">

View File

@ -1,7 +1,7 @@
{% extends 'base.html' %}
{% load i18n %}
{% load bootstrap4 %}
{% load font_awesome %}
{% load fontawesome_5 %}
{% load guardian_tags %}
{% get_obj_perms user for object as "obj_perms" %}
@ -13,12 +13,12 @@
</div>
{% get_obj_perms user for object as "obj_perms" %}
<div class="col-auto">
{% if "change_stream" in obj_perms %}
<a href="{% url 'rtmp:stream_change' pk=object.pk %}" type="button" class="btn btn-primary">{% fa 'pencil' %} {% trans 'change' %}</a>
{% endif %}
{% if "delete_stream" in obj_perms %}
<a href="{% url 'rtmp:stream_delete' pk=object.pk %}" type="button" class="btn btn-danger">{% fa 'trash' %} {% trans 'delete' %}</a>
{% endif %}
{% if "change_stream" in obj_perms %}
<a href="{% url 'rtmp:stream_change' pk=object.pk %}" type="button" class="btn btn-sm btn-outline-primary">{% fa5_icon 'edit' %} {% trans 'change' %}</a>
{% endif %}
{% if "delete_stream" in obj_perms %}
<a href="{% url 'rtmp:stream_delete' pk=object.pk %}" type="button" class="btn btn-sm btn-outline-danger">{% fa5_icon 'trash' %} {% trans 'delete' %}</a>
{% endif %}
</div>
</div>
<hr class="my-4">

View File

@ -1,22 +1,28 @@
{% extends 'base.html' %}
{% load i18n %}
{% load bootstrap4 %}
{% load font_awesome %}
{% load fontawesome_5 %}
{% load guardian_tags %}
{% block 'content' %}
<h6>{% trans "stream_configuration_header" %}</h6>
<hr class="my-4">
<div class="btn-toolbar mb-4" role="toolbar">
<div class="btn-group" role="group">
<a href="{% url 'rtmp:stream_create' %}" type="button" class="btn btn-sm btn-outline-success">{% fa 'plus' %} {% trans "create" %}</a>
<div class="row justify-content-between">
<div class="col">
<h6>{% trans "stream_configuration_header" %}</h6>
</div>
<div class="col-auto">
<div class="btn-toolbar" role="toolbar">
<div class="btn-group" role="group">
<a href="{% url 'rtmp:stream_create' %}" type="button" class="btn btn-sm btn-outline-primary">{% fa5_icon 'plus' %} {% trans "create" %}</a>
</div>
</div>
</div>
</div>
<hr class="my-4">
<table class="table">
<thead class="thead-dark">
<thead class="thead-light">
<tr>
<th scope="col">{% trans "name" %}</th>
<th scope="col">{% trans "publishing" %}</th>
<th scope="col">{% trans "receiving" %}</th>
<th scope="col" class="text-right">{% trans "actions" %}</th>
</tr>
</thead>
@ -28,16 +34,16 @@
<th scope="ro">{{ object.name }}</th>
<td>
{% if object.publish_counter > 0 %}
<span class="text-success">{% fa 'check-circle' %}</span>
<span class="text-success">{% fa5_icon 'check-circle' %}</span>
{% else %}
<span class="text-danger">{% fa 'times-circle' %}</span>
<span class="text-danger">{% fa5_icon 'times-circle' %}</span>
{% endif %}
</td>
<td align="right">
<div class="btn-group" role="group">
<a href="{% url 'rtmp:stream_detail' pk=object.pk %}" type="button" class="btn btn-sm btn-primary">{% trans "details" %}</a>
<a href="{% url 'rtmp:stream_detail' pk=object.pk %}" type="button" class="btn btn-sm btn-outline-primary ">{% trans "details" %}</a>
{% if "delete_stream" in obj_perms %}
<a href="{% url 'rtmp:stream_delete' pk=object.pk %}" type="button" class="btn btn-sm btn-danger">{% fa 'trash' %}</a>
<a href="{% url 'rtmp:stream_delete' pk=object.pk %}" type="button" class="btn btn-sm btn-outline-danger">{% fa5_icon 'trash' %}</a>
{% endif %}
</div>
</td>

1
static/css/bootstrap.min.css vendored Normal file

File diff suppressed because one or more lines are too long

7
static/js/bootstrap.bundle.min.js vendored Normal file

File diff suppressed because one or more lines are too long

View File

@ -1,7 +1,7 @@
{% load static %}
{% load i18n %}
{% load bootstrap4 %}
{% load font_awesome %}
{% load fontawesome_5 %}
<!DOCTYPE html>
<html lang="en">
@ -11,9 +11,12 @@
<meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
<title>{% block 'title' %}portier{% endblock %}</title>
{% bootstrap_css %}
{% fa_css %}
{% bootstrap_javascript jquery='full' %}
<link rel="stylesheet" href="{% static 'fonts/inter.css' %}"></link>
<link rel="stylesheet" href="{% static 'css/bootstrap.min.css' %}"></link>
<link rel="stylesheet" href="{% static 'css/font-awesome.min.css' %}"></link>
{% fontawesome_5_static %}
<script src="{% static 'js/jquery.min.js' %}"></script>
<script src="{% static 'js/bootstrap.bundle.min.js' %}"></script>
</head>
<body>
@ -32,25 +35,46 @@
<ul class="navbar-nav">
{% if user.is_authenticated %}
<li class="nav-item dropdown">
<a class="nav-link dropdown-toggle" href="#" id="navbarDropdown" role="button" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false">
{% trans "navbar_configuration" %}
<a class="nav-link dropdown-toggle" href="#" id="navbarStreamingDropdown" role="button" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false">
{% trans "navbar_streaming" %}
</a>
<div class="dropdown-menu dropdown-menu-right" aria-labelledby="navbarDropdown">
<h6 class="dropdown-header">{% trans "navbar_configuration_streaming_header" %}</h6>
<a class="dropdown-item" href="{% url 'rtmp:stream_list' %}">{% trans "navbar_configuration_streams" %}</a>
<a class="dropdown-item" href="{% url 'restream:restreamconfig_list' %}">{% trans "navbar_configuration_restreams" %}</a>
<div class="dropdown-divider"></div>
<h6 class="dropdown-header">{% trans "navbar_configuration_account_header" %}</h6>
<a class="dropdown-item" href="{% url 'password_change' %}">{% trans "navbar_configuration_password_change" %}</a>
<div class="dropdown-menu dropdown-menu-right" aria-labelledby="navbarStreamingDropdown">
<a class="dropdown-item{% if not perms.rtmp.add_stream %} disabled{% endif %}" href="{% url 'rtmp:stream_list' %}">{% trans "navbar_configuration_streams" %}</a>
<a class="dropdown-item{% if not perms.restream.add_restreamconfig %} disabled{% endif %}" href="{% url 'restream:restreamconfig_list' %}">{% trans "navbar_configuration_restreams" %}</a>
</div>
</li>
{% endif %}
<li class="nav-item">
{% if user.is_authenticated %}
<a class="nav-link logout" href="{% url 'logout' %}?next={% url 'index' %}">{% trans "navbar_logout" %}</a>
<li class="nav-item dropdown border-left">
<a class="nav-link dropdown-toggle" href="#" id="navbarAccountDropdown" role="button" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false">
{% blocktrans with username=user.get_username %}hello_{{ username }}{% endblocktrans %}
</a>
<div class="dropdown-menu dropdown-menu-right" aria-labelledby="navbarAccountDropdown">
<a class="dropdown-item" href="{% url 'password_change' %}">{% trans "navbar_account_password_change" %}</a>
<a class="dropdown-item" href="{% url 'logout' %}?next={% url 'index' %}">{% trans "navbar_account_logout" %}</a>
</li>
{% else %}
<li class="nav-item">
<a class="nav-link login" href="{% url 'login' %}?next={% url 'index' %}">{% trans "navbar_login" %}</a>
</li>
{% endif %}
<li class="nav-item dropdown border-left">
<a class="nav-link dropdown-toggle" id="languageSelectDropdown" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false">
{% fa5_icon 'language' %}
</a>
<div class="dropdown-menu dropdown-menu-right" aria-labelledby="languageSelectDropdown">
{% get_current_language as LANGUAGE_CODE %}
{% get_available_languages as LANGUAGES %}
{% get_language_info_list for LANGUAGES as languages %}
{% for language in languages %}
<a class="dropdown-item{% if language.code == LANGUAGE_CODE %} font-weight-bold{% endif %}" onclick="$('#languageSelectInput').val('{{ language.code }}'); $('#languageSelectForm').submit()">{{ language.name_local}} ({{ language.code }})</a>
{% endfor %}
</div>
<form action="{% url 'set_language' %}" method="post" id="languageSelectForm">
{% csrf_token %}
<input name="next" type="hidden" value="{{ redirect_to }}">
<input name="language" type="hidden" value="" id="languageSelectInput">
</form>
</li>
</ul>
</div>
@ -62,6 +86,7 @@
</main>
<footer class="text-muted">
<div class="container">
</div>
</footer>
</body>

View File

@ -3,6 +3,7 @@
{% load bootstrap4 %}
{% block 'content' %}
<h6>{% trans "login" %}</h6>
<hr class="my-4">
<div class="row">
<div class="col-sm border-right">
<form method="post">

View File

@ -3,6 +3,7 @@
{% load bootstrap4 %}
{% block 'content' %}
<h6>{% trans "password_change_successful" %}</h6>
<hr class="my-4">
<p>{% trans "password_change_successful_text" %}</p>
<a class="btn btn-primary btn-lg" href="{% url 'index' %}">{% trans "take_me_to_safety" %}</a>
{% endblock %}

View File

@ -3,6 +3,7 @@
{% load bootstrap4 %}
{% block 'content' %}
<h6>{% trans "change_password" %}</h6>
<hr class="my-4">
<div class="row">
<div class="col-sm border-right">
<form method="post">

View File

@ -3,6 +3,7 @@
{% load bootstrap4 %}
{% block 'content' %}
<h6>{% trans "reset_password"}</h6>
<hr class="my-4">
<div class="row">
<div class="col-sm border-right">
<form method="post">