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 .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 # Byte-compiled / optimized / DLL files
__pycache__/ __pycache__/

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

@ -1,7 +1,7 @@
{% extends 'base.html' %} {% extends 'base.html' %}
{% load i18n %} {% load i18n %}
{% load bootstrap4 %} {% load bootstrap4 %}
{% load font_awesome %} {% load fontawesome_5 %}
{% load guardian_tags %} {% load guardian_tags %}
{% get_obj_perms user for object as "obj_perms" %} {% get_obj_perms user for object as "obj_perms" %}
@ -14,10 +14,10 @@
{% get_obj_perms user for object as "obj_perms" %} {% get_obj_perms user for object as "obj_perms" %}
<div class="col-auto"> <div class="col-auto">
{% if "change_restreamconfig" in obj_perms %} {% 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 %} {% endif %}
{% if "delete_restreamconfig" in obj_perms %} {% 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 %} {% endif %}
</div> </div>
</div> </div>

View File

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

View File

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

View File

@ -1,7 +1,7 @@
{% extends 'base.html' %} {% extends 'base.html' %}
{% load i18n %} {% load i18n %}
{% load bootstrap4 %} {% load bootstrap4 %}
{% load font_awesome %} {% load fontawesome_5 %}
{% load guardian_tags %} {% load guardian_tags %}
{% get_obj_perms user for object as "obj_perms" %} {% get_obj_perms user for object as "obj_perms" %}
@ -13,12 +13,12 @@
</div> </div>
{% get_obj_perms user for object as "obj_perms" %} {% get_obj_perms user for object as "obj_perms" %}
<div class="col-auto"> <div class="col-auto">
{% if "change_stream" in obj_perms %} {% 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> <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 %} {% endif %}
{% if "delete_stream" in obj_perms %} {% 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> <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 %} {% endif %}
</div> </div>
</div> </div>
<hr class="my-4"> <hr class="my-4">

View File

@ -1,22 +1,28 @@
{% extends 'base.html' %} {% extends 'base.html' %}
{% load i18n %} {% load i18n %}
{% load bootstrap4 %} {% load bootstrap4 %}
{% load font_awesome %} {% load fontawesome_5 %}
{% load guardian_tags %} {% load guardian_tags %}
{% block 'content' %} {% block 'content' %}
<h6>{% trans "stream_configuration_header" %}</h6> <div class="row justify-content-between">
<hr class="my-4"> <div class="col">
<div class="btn-toolbar mb-4" role="toolbar"> <h6>{% trans "stream_configuration_header" %}</h6>
<div class="btn-group" role="group"> </div>
<a href="{% url 'rtmp:stream_create' %}" type="button" class="btn btn-sm btn-outline-success">{% fa 'plus' %} {% trans "create" %}</a> <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>
</div> </div>
<hr class="my-4">
<table class="table"> <table class="table">
<thead class="thead-dark"> <thead class="thead-light">
<tr> <tr>
<th scope="col">{% trans "name" %}</th> <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> <th scope="col" class="text-right">{% trans "actions" %}</th>
</tr> </tr>
</thead> </thead>
@ -28,16 +34,16 @@
<th scope="ro">{{ object.name }}</th> <th scope="ro">{{ object.name }}</th>
<td> <td>
{% if object.publish_counter > 0 %} {% if object.publish_counter > 0 %}
<span class="text-success">{% fa 'check-circle' %}</span> <span class="text-success">{% fa5_icon 'check-circle' %}</span>
{% else %} {% else %}
<span class="text-danger">{% fa 'times-circle' %}</span> <span class="text-danger">{% fa5_icon 'times-circle' %}</span>
{% endif %} {% endif %}
</td> </td>
<td align="right"> <td align="right">
<div class="btn-group" role="group"> <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 %} {% 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 %} {% endif %}
</div> </div>
</td> </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 static %}
{% load i18n %} {% load i18n %}
{% load bootstrap4 %} {% load bootstrap4 %}
{% load font_awesome %} {% load fontawesome_5 %}
<!DOCTYPE html> <!DOCTYPE html>
<html lang="en"> <html lang="en">
@ -11,9 +11,12 @@
<meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no"> <meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
<title>{% block 'title' %}portier{% endblock %}</title> <title>{% block 'title' %}portier{% endblock %}</title>
{% bootstrap_css %} <link rel="stylesheet" href="{% static 'fonts/inter.css' %}"></link>
{% fa_css %} <link rel="stylesheet" href="{% static 'css/bootstrap.min.css' %}"></link>
{% bootstrap_javascript jquery='full' %} <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> </head>
<body> <body>
@ -32,25 +35,46 @@
<ul class="navbar-nav"> <ul class="navbar-nav">
{% if user.is_authenticated %} {% if user.is_authenticated %}
<li class="nav-item dropdown"> <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"> <a class="nav-link dropdown-toggle" href="#" id="navbarStreamingDropdown" role="button" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false">
{% trans "navbar_configuration" %} {% trans "navbar_streaming" %}
</a> </a>
<div class="dropdown-menu dropdown-menu-right" aria-labelledby="navbarDropdown"> <div class="dropdown-menu dropdown-menu-right" aria-labelledby="navbarStreamingDropdown">
<h6 class="dropdown-header">{% trans "navbar_configuration_streaming_header" %}</h6> <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" 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>
<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> </div>
</li> </li>
{% endif %} {% endif %}
<li class="nav-item">
{% if user.is_authenticated %} {% 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 %} {% else %}
<li class="nav-item">
<a class="nav-link login" href="{% url 'login' %}?next={% url 'index' %}">{% trans "navbar_login" %}</a> <a class="nav-link login" href="{% url 'login' %}?next={% url 'index' %}">{% trans "navbar_login" %}</a>
</li>
{% endif %} {% 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> </li>
</ul> </ul>
</div> </div>
@ -62,6 +86,7 @@
</main> </main>
<footer class="text-muted"> <footer class="text-muted">
<div class="container"> <div class="container">
</div> </div>
</footer> </footer>
</body> </body>

View File

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

View File

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

View File

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

View File

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