From 44c09ab27ce8407f4fc5c75df9cdf309df8463eb Mon Sep 17 00:00:00 2001 From: Wojtek Kosior Date: Sat, 22 Oct 2022 14:49:37 +0200 Subject: [proxy] extract potentially reusable HTML jinja templates into a separate directory --- src/hydrilla/common_jinja_templates.py | 16 ++ .../common_jinja_templates/base.html.jinja | 228 ++++++++++++++++++++ .../import/checkbox_tricks.html.jinja | 42 ++++ .../include/checkbox_tricks_style.css.jinja | 45 ++++ .../include/item_list_style.css.jinja | 57 +++++ src/hydrilla/proxy/web_ui/root.py | 6 +- .../proxy/web_ui/templates/base.html.jinja | 233 --------------------- .../web_ui/templates/hkt_mitm_it_base.html.jinja | 2 +- .../templates/import/checkbox_tricks.html.jinja | 42 ---- .../include/checkbox_tricks_style.css.jinja | 45 ---- .../templates/include/item_list_style.css.jinja | 57 ----- .../proxy/web_ui/templates/landing.html.jinja | 2 +- .../proxy/web_ui/templates/web_ui_base.html.jinja | 22 ++ 13 files changed, 417 insertions(+), 380 deletions(-) create mode 100644 src/hydrilla/common_jinja_templates.py create mode 100644 src/hydrilla/common_jinja_templates/base.html.jinja create mode 100644 src/hydrilla/common_jinja_templates/import/checkbox_tricks.html.jinja create mode 100644 src/hydrilla/common_jinja_templates/include/checkbox_tricks_style.css.jinja create mode 100644 src/hydrilla/common_jinja_templates/include/item_list_style.css.jinja delete mode 100644 src/hydrilla/proxy/web_ui/templates/base.html.jinja delete mode 100644 src/hydrilla/proxy/web_ui/templates/import/checkbox_tricks.html.jinja delete mode 100644 src/hydrilla/proxy/web_ui/templates/include/checkbox_tricks_style.css.jinja delete mode 100644 src/hydrilla/proxy/web_ui/templates/include/item_list_style.css.jinja create mode 100644 src/hydrilla/proxy/web_ui/templates/web_ui_base.html.jinja diff --git a/src/hydrilla/common_jinja_templates.py b/src/hydrilla/common_jinja_templates.py new file mode 100644 index 0000000..732db41 --- /dev/null +++ b/src/hydrilla/common_jinja_templates.py @@ -0,0 +1,16 @@ +# SPDX-License-Identifier: CC0-1.0 + +# Copyright (C) 2022 Wojtek Kosior +# +# Available under the terms of Creative Commons Zero v1.0 Universal. + +import typing as t + +from jinja2 import PackageLoader, ChoiceLoader, BaseLoader + + +def loader() -> BaseLoader: + return PackageLoader(__package__, package_path='common_jinja_templates') + +def combine_with_loaders(loaders: t.Iterable[BaseLoader]) -> BaseLoader: + return ChoiceLoader([loader(), *loaders]) diff --git a/src/hydrilla/common_jinja_templates/base.html.jinja b/src/hydrilla/common_jinja_templates/base.html.jinja new file mode 100644 index 0000000..08178b3 --- /dev/null +++ b/src/hydrilla/common_jinja_templates/base.html.jinja @@ -0,0 +1,228 @@ +{# +SPDX-License-Identifier: GPL-3.0-or-later OR CC-BY-SA-4.0 + +Hydrilla&Haketilo reusable base page template. + +This file is part of Hydrilla&Haketilo. + +Copyright (C) 2022 Wojtek Kosior + +Dual licensed under +* GNU General Public License v3.0 or later and +* Creative Commons Attribution Share Alike 4.0 International. + +You can choose to use either of these licenses or both. + + +I, Wojtek Kosior, thereby promise not to sue for violation of this +file's licenses. Although I request that you do not make use of this +code in a proprietary work, I am not going to enforce this in court. +#} + + +{% macro button_row(buttons_data, common_fields={}) %} +
+ {% for classes, text, extra_fields in buttons_data %} + {% if not loop.first %} +
+ {% do classes.append('button-bordering-left') %} + {% endif %} + + {% if not loop.last %} + {% do classes.append('button-bordering-right') %} + {% endif %} + + {% if 'disabled-button' in classes %} + {% set disabled_attr = ' disabled=""' %} + {% else %} + {% set disabled_attr = '' %} + {% endif %} + +
+ {% for name, value in extra_fields.items() %} + + {% endfor %} + {% for name, value in common_fields.items() %} + + {% endfor %} + + +
+ {% endfor %} +
+{% endmacro %} + +{% macro error_note(note_text) %} + +{% endmacro %} + +{% macro label(label_text, label_name=none) %} + {% set for_attr = label_name and (label_name + "_field") %} + +{% endmacro %} + +{% macro form_field(field_name, required=true, sep_after=true, height=none) %} +
+ {% + set attrs = { + 'id': field_name + '_field', + 'name': field_name, + 'required': '' if required else none, + 'rows': height + } + %} + + {% if height is none %} + + {% else %} + + {% endif %} +
+ + {% if sep_after %} +
+ {% endif %} +{% endmacro %} + + + + {% block head %} + + {% endblock head %} + + + {% block body %} +
{% block main required %}{% endblock %}
+ {% endblock body %} + + diff --git a/src/hydrilla/common_jinja_templates/import/checkbox_tricks.html.jinja b/src/hydrilla/common_jinja_templates/import/checkbox_tricks.html.jinja new file mode 100644 index 0000000..4ad9ca1 --- /dev/null +++ b/src/hydrilla/common_jinja_templates/import/checkbox_tricks.html.jinja @@ -0,0 +1,42 @@ +{# +SPDX-License-Identifier: GPL-3.0-or-later OR CC-BY-SA-4.0 + +Proxy web UI reusable macros for checkbox-based dynamically displayed elements. + +This file is part of Hydrilla&Haketilo. + +Copyright (C) 2022 Wojtek Kosior + +Dual licensed under +* GNU General Public License v3.0 or later and +* Creative Commons Attribution Share Alike 4.0 International. + +You can choose to use either of these licenses or both. + + +I, Wojtek Kosior, thereby promise not to sue for violation of this +file's licenses. Although I request that you do not make use of this +code in a proprietary work, I am not going to enforce this in court. +#} + +{% macro hider_id(name) -%} + {{ name }}_chbx +{%- endmacro %} + +{% macro sibling_hider_but(button_text, name, initial_show=false) %} + {% set attrs = {'type': 'checkbox', 'class': 'chbx-tricks-show-hide'} %} + {% do attrs.update({'id': hider_id(name)}) %} + {% do attrs.update({'checked': none if initial_show else ''}) %} + + +{% endmacro %} + +{% macro sibling_hider_radio(name, radio_id, initial_show=false) %} + {% set attrs = {'type': 'radio', 'class': 'chbx-tricks-show'} %} + {% do attrs.update({'name': name, 'id': radio_id}) %} + {% do attrs.update({'checked': '' if initial_show else none}) %} + +{% endmacro %} diff --git a/src/hydrilla/common_jinja_templates/include/checkbox_tricks_style.css.jinja b/src/hydrilla/common_jinja_templates/include/checkbox_tricks_style.css.jinja new file mode 100644 index 0000000..a47a438 --- /dev/null +++ b/src/hydrilla/common_jinja_templates/include/checkbox_tricks_style.css.jinja @@ -0,0 +1,45 @@ +{# +SPDX-License-Identifier: GPL-3.0-or-later OR CC-BY-SA-4.0 + +Proxy web UI reusable stylesheet for checkbox-based dynamically displayed +elements. + +This file is part of Hydrilla&Haketilo. + +Copyright (C) 2022 Wojtek Kosior + +Dual licensed under +* GNU General Public License v3.0 or later and +* Creative Commons Attribution Share Alike 4.0 International. + +You can choose to use either of these licenses or both. + + +I, Wojtek Kosior, thereby promise not to sue for violation of this +file's licenses. Although I request that you do not make use of this +code in a proprietary work, I am not going to enforce this in court. +#} + +input.chbx-tricks-show-hide, input.chbx-tricks-hide-show { + display: none !important; +} + +input.chbx-tricks-show-hide:checked+*+*, +input.chbx-tricks-hide-show:not(:checked)+*+* { + display: none !important; +} + +input.chbx-tricks-hide-show:checked+*, +input.chbx-tricks-show-hide:not(:checked)+* { + display: none !important; +} + + +input.chbx-tricks-show, input.chbx-tricks-hide { + display: none !important; +} + +input.chbx-tricks-hide:checked+*, +input.chbx-tricks-show:not(:checked)+* { + display: none !important; +} diff --git a/src/hydrilla/common_jinja_templates/include/item_list_style.css.jinja b/src/hydrilla/common_jinja_templates/include/item_list_style.css.jinja new file mode 100644 index 0000000..063cd01 --- /dev/null +++ b/src/hydrilla/common_jinja_templates/include/item_list_style.css.jinja @@ -0,0 +1,57 @@ +{# +SPDX-License-Identifier: GPL-3.0-or-later OR CC-BY-SA-4.0 + +Proxy web UI reusable stylesheet for lists. + +This file is part of Hydrilla&Haketilo. + +Copyright (C) 2022 Wojtek Kosior + +Dual licensed under +* GNU General Public License v3.0 or later and +* Creative Commons Attribution Share Alike 4.0 International. + +You can choose to use either of these licenses or both. + + +I, Wojtek Kosior, thereby promise not to sue for violation of this +file's licenses. Although I request that you do not make use of this +code in a proprietary work, I am not going to enforce this in court. +#} +ul.item-list { + padding: 0; +} + +ul.item-list > li { + list-style-type: none; + max-width: 100%; + white-space: nowrap; + margin: 0; +} + +ul.item-list > li > :only-child { + display: block; + padding: 5px; + overflow-x: scroll; + border-bottom: 2px solid #999; +} + +ul.item-list > li.entry-line-dashed > :only-child { + border-bottom-style: dashed +} + +ul.item-list > li.entry-line-green > :only-child { + border-color: #4caf50; +} + +ul.item-list > li.entry-line-blue > :only-child { + border-color: #504caf; +} + +ul.item-list > li.entry-line-red > :only-child { + border-color: #af504c; +} + +ul.item-list > li.invisible-entry-line > :only-child { + border-color: #fff; +} diff --git a/src/hydrilla/proxy/web_ui/root.py b/src/hydrilla/proxy/web_ui/root.py index d775730..4430bb6 100644 --- a/src/hydrilla/proxy/web_ui/root.py +++ b/src/hydrilla/proxy/web_ui/root.py @@ -48,6 +48,7 @@ import werkzeug from ...translations import translation as make_translation from ... import versions from ... import item_infos +from ... import common_jinja_templates from .. import state as st from .. import http_messages from . import rules @@ -93,9 +94,12 @@ class WebUIAppImpl(_app.WebUIApp): self._haketilo_app_lock = Lock() + loader = jinja2.PackageLoader(__package__) + combined_loader = common_jinja_templates.combine_with_loaders([loader]) + self.jinja_options = { **self.jinja_options, - 'loader': jinja2.PackageLoader(__package__), + 'loader': combined_loader, 'autoescape': jinja2.select_autoescape(['html.jinja']), 'lstrip_blocks': True, 'extensions': [ diff --git a/src/hydrilla/proxy/web_ui/templates/base.html.jinja b/src/hydrilla/proxy/web_ui/templates/base.html.jinja deleted file mode 100644 index f89b39a..0000000 --- a/src/hydrilla/proxy/web_ui/templates/base.html.jinja +++ /dev/null @@ -1,233 +0,0 @@ -{# -SPDX-License-Identifier: GPL-3.0-or-later OR CC-BY-SA-4.0 - -Proxy web UI base page template. - -This file is part of Hydrilla&Haketilo. - -Copyright (C) 2022 Wojtek Kosior - -Dual licensed under -* GNU General Public License v3.0 or later and -* Creative Commons Attribution Share Alike 4.0 International. - -You can choose to use either of these licenses or both. - - -I, Wojtek Kosior, thereby promise not to sue for violation of this -file's licenses. Although I request that you do not make use of this -code in a proprietary work, I am not going to enforce this in court. -#} - - -{% macro button_row(buttons_data, common_fields={}) %} -
- {% for classes, text, extra_fields in buttons_data %} - {% if not loop.first %} -
- {% do classes.append('button-bordering-left') %} - {% endif %} - - {% if not loop.last %} - {% do classes.append('button-bordering-right') %} - {% endif %} - - {% if 'disabled-button' in classes %} - {% set disabled_attr = ' disabled=""' %} - {% else %} - {% set disabled_attr = '' %} - {% endif %} - -
- {% for name, value in extra_fields.items() %} - - {% endfor %} - {% for name, value in common_fields.items() %} - - {% endfor %} - - -
- {% endfor %} -
-{% endmacro %} - -{% macro error_note(note_text) %} - -{% endmacro %} - -{% macro label(label_text, label_name=none) %} - {% set for_attr = label_name and (label_name + "_field") %} - -{% endmacro %} - -{% macro form_field(field_name, required=true, sep_after=true, height=none) %} -
- {% - set attrs = { - 'id': field_name + '_field', - 'name': field_name, - 'required': '' if required else none, - 'rows': height - } - %} - - {% if height is none %} - - {% else %} - - {% endif %} -
- - {% if sep_after %} -
- {% endif %} -{% endmacro %} - - - - {% block head %} - - {% block title required %}{% endblock %} - - - {{ _('web_ui.base.title.haketilo_proxy') }} - - - {% endblock head %} - - - {% block body %} -
{% block main required %}{% endblock %}
- {% endblock body %} - - diff --git a/src/hydrilla/proxy/web_ui/templates/hkt_mitm_it_base.html.jinja b/src/hydrilla/proxy/web_ui/templates/hkt_mitm_it_base.html.jinja index 6a6de99..a83d3e8 100644 --- a/src/hydrilla/proxy/web_ui/templates/hkt_mitm_it_base.html.jinja +++ b/src/hydrilla/proxy/web_ui/templates/hkt_mitm_it_base.html.jinja @@ -18,7 +18,7 @@ I, Wojtek Kosior, thereby promise not to sue for violation of this file's licenses. Although I request that you do not make use of this code in a proprietary work, I am not going to enforce this in court. #} -{% extends "base.html.jinja" %} +{% extends "web_ui_base.html.jinja" %} {% set settings = get_settings() %} diff --git a/src/hydrilla/proxy/web_ui/templates/import/checkbox_tricks.html.jinja b/src/hydrilla/proxy/web_ui/templates/import/checkbox_tricks.html.jinja deleted file mode 100644 index 4ad9ca1..0000000 --- a/src/hydrilla/proxy/web_ui/templates/import/checkbox_tricks.html.jinja +++ /dev/null @@ -1,42 +0,0 @@ -{# -SPDX-License-Identifier: GPL-3.0-or-later OR CC-BY-SA-4.0 - -Proxy web UI reusable macros for checkbox-based dynamically displayed elements. - -This file is part of Hydrilla&Haketilo. - -Copyright (C) 2022 Wojtek Kosior - -Dual licensed under -* GNU General Public License v3.0 or later and -* Creative Commons Attribution Share Alike 4.0 International. - -You can choose to use either of these licenses or both. - - -I, Wojtek Kosior, thereby promise not to sue for violation of this -file's licenses. Although I request that you do not make use of this -code in a proprietary work, I am not going to enforce this in court. -#} - -{% macro hider_id(name) -%} - {{ name }}_chbx -{%- endmacro %} - -{% macro sibling_hider_but(button_text, name, initial_show=false) %} - {% set attrs = {'type': 'checkbox', 'class': 'chbx-tricks-show-hide'} %} - {% do attrs.update({'id': hider_id(name)}) %} - {% do attrs.update({'checked': none if initial_show else ''}) %} - - -{% endmacro %} - -{% macro sibling_hider_radio(name, radio_id, initial_show=false) %} - {% set attrs = {'type': 'radio', 'class': 'chbx-tricks-show'} %} - {% do attrs.update({'name': name, 'id': radio_id}) %} - {% do attrs.update({'checked': '' if initial_show else none}) %} - -{% endmacro %} diff --git a/src/hydrilla/proxy/web_ui/templates/include/checkbox_tricks_style.css.jinja b/src/hydrilla/proxy/web_ui/templates/include/checkbox_tricks_style.css.jinja deleted file mode 100644 index a47a438..0000000 --- a/src/hydrilla/proxy/web_ui/templates/include/checkbox_tricks_style.css.jinja +++ /dev/null @@ -1,45 +0,0 @@ -{# -SPDX-License-Identifier: GPL-3.0-or-later OR CC-BY-SA-4.0 - -Proxy web UI reusable stylesheet for checkbox-based dynamically displayed -elements. - -This file is part of Hydrilla&Haketilo. - -Copyright (C) 2022 Wojtek Kosior - -Dual licensed under -* GNU General Public License v3.0 or later and -* Creative Commons Attribution Share Alike 4.0 International. - -You can choose to use either of these licenses or both. - - -I, Wojtek Kosior, thereby promise not to sue for violation of this -file's licenses. Although I request that you do not make use of this -code in a proprietary work, I am not going to enforce this in court. -#} - -input.chbx-tricks-show-hide, input.chbx-tricks-hide-show { - display: none !important; -} - -input.chbx-tricks-show-hide:checked+*+*, -input.chbx-tricks-hide-show:not(:checked)+*+* { - display: none !important; -} - -input.chbx-tricks-hide-show:checked+*, -input.chbx-tricks-show-hide:not(:checked)+* { - display: none !important; -} - - -input.chbx-tricks-show, input.chbx-tricks-hide { - display: none !important; -} - -input.chbx-tricks-hide:checked+*, -input.chbx-tricks-show:not(:checked)+* { - display: none !important; -} diff --git a/src/hydrilla/proxy/web_ui/templates/include/item_list_style.css.jinja b/src/hydrilla/proxy/web_ui/templates/include/item_list_style.css.jinja deleted file mode 100644 index 063cd01..0000000 --- a/src/hydrilla/proxy/web_ui/templates/include/item_list_style.css.jinja +++ /dev/null @@ -1,57 +0,0 @@ -{# -SPDX-License-Identifier: GPL-3.0-or-later OR CC-BY-SA-4.0 - -Proxy web UI reusable stylesheet for lists. - -This file is part of Hydrilla&Haketilo. - -Copyright (C) 2022 Wojtek Kosior - -Dual licensed under -* GNU General Public License v3.0 or later and -* Creative Commons Attribution Share Alike 4.0 International. - -You can choose to use either of these licenses or both. - - -I, Wojtek Kosior, thereby promise not to sue for violation of this -file's licenses. Although I request that you do not make use of this -code in a proprietary work, I am not going to enforce this in court. -#} -ul.item-list { - padding: 0; -} - -ul.item-list > li { - list-style-type: none; - max-width: 100%; - white-space: nowrap; - margin: 0; -} - -ul.item-list > li > :only-child { - display: block; - padding: 5px; - overflow-x: scroll; - border-bottom: 2px solid #999; -} - -ul.item-list > li.entry-line-dashed > :only-child { - border-bottom-style: dashed -} - -ul.item-list > li.entry-line-green > :only-child { - border-color: #4caf50; -} - -ul.item-list > li.entry-line-blue > :only-child { - border-color: #504caf; -} - -ul.item-list > li.entry-line-red > :only-child { - border-color: #af504c; -} - -ul.item-list > li.invisible-entry-line > :only-child { - border-color: #fff; -} diff --git a/src/hydrilla/proxy/web_ui/templates/landing.html.jinja b/src/hydrilla/proxy/web_ui/templates/landing.html.jinja index 6314cfd..9e40ac0 100644 --- a/src/hydrilla/proxy/web_ui/templates/landing.html.jinja +++ b/src/hydrilla/proxy/web_ui/templates/landing.html.jinja @@ -18,7 +18,7 @@ I, Wojtek Kosior, thereby promise not to sue for violation of this file's licenses. Although I request that you do not make use of this code in a proprietary work, I am not going to enforce this in court. #} -{% extends "base.html.jinja" %} +{% extends "web_ui_base.html.jinja" %} {% block title %} {{ _('web_ui.landing.title') }} {% endblock %} diff --git a/src/hydrilla/proxy/web_ui/templates/web_ui_base.html.jinja b/src/hydrilla/proxy/web_ui/templates/web_ui_base.html.jinja new file mode 100644 index 0000000..0d5d582 --- /dev/null +++ b/src/hydrilla/proxy/web_ui/templates/web_ui_base.html.jinja @@ -0,0 +1,22 @@ +{# +SPDX-License-Identifier: CC0-1.0 + +Proxy web UI base page template. + +This file is part of Hydrilla&Haketilo. + +Copyright (C) 2022 Wojtek Kosior + +Available under the terms of Creative Commons Zero v1.0 Universal. +#} +{% extends "base.html.jinja" %} + +{% block head %} + {{ super() }} + + + {% block title required %}{% endblock %} + - + {{ _('web_ui.base.title.haketilo_proxy') }} + +{% endblock head %} -- cgit v1.2.3