From 2ad0889025599bca772c5921c404d7ad66616a8c Mon Sep 17 00:00:00 2001 From: Wojtek Kosior Date: Sat, 29 Oct 2022 12:28:26 +0200 Subject: make common Jinja templates repo usable as a Python package module --- LICENSES/CC0-1.0.txt | 121 +++++++++ __init__.py | 7 + base.html.jinja | 305 ---------------------- import/checkbox_tricks.html.jinja | 42 --- include/checkbox_tricks_style.css.jinja | 45 ---- include/item_list_style.css.jinja | 57 ---- loaders.py | 16 ++ templates/base.html.jinja | 305 ++++++++++++++++++++++ templates/import/checkbox_tricks.html.jinja | 42 +++ templates/include/checkbox_tricks_style.css.jinja | 45 ++++ templates/include/item_list_style.css.jinja | 57 ++++ 11 files changed, 593 insertions(+), 449 deletions(-) create mode 100644 LICENSES/CC0-1.0.txt create mode 100644 __init__.py delete mode 100644 base.html.jinja delete mode 100644 import/checkbox_tricks.html.jinja delete mode 100644 include/checkbox_tricks_style.css.jinja delete mode 100644 include/item_list_style.css.jinja create mode 100644 loaders.py create mode 100644 templates/base.html.jinja create mode 100644 templates/import/checkbox_tricks.html.jinja create mode 100644 templates/include/checkbox_tricks_style.css.jinja create mode 100644 templates/include/item_list_style.css.jinja diff --git a/LICENSES/CC0-1.0.txt b/LICENSES/CC0-1.0.txt new file mode 100644 index 0000000..0e259d4 --- /dev/null +++ b/LICENSES/CC0-1.0.txt @@ -0,0 +1,121 @@ +Creative Commons Legal Code + +CC0 1.0 Universal + + CREATIVE COMMONS CORPORATION IS NOT A LAW FIRM AND DOES NOT PROVIDE + LEGAL SERVICES. DISTRIBUTION OF THIS DOCUMENT DOES NOT CREATE AN + ATTORNEY-CLIENT RELATIONSHIP. CREATIVE COMMONS PROVIDES THIS + INFORMATION ON AN "AS-IS" BASIS. CREATIVE COMMONS MAKES NO WARRANTIES + REGARDING THE USE OF THIS DOCUMENT OR THE INFORMATION OR WORKS + PROVIDED HEREUNDER, AND DISCLAIMS LIABILITY FOR DAMAGES RESULTING FROM + THE USE OF THIS DOCUMENT OR THE INFORMATION OR WORKS PROVIDED + HEREUNDER. + +Statement of Purpose + +The laws of most jurisdictions throughout the world automatically confer +exclusive Copyright and Related Rights (defined below) upon the creator +and subsequent owner(s) (each and all, an "owner") of an original work of +authorship and/or a database (each, a "Work"). + +Certain owners wish to permanently relinquish those rights to a Work for +the purpose of contributing to a commons of creative, cultural and +scientific works ("Commons") that the public can reliably and without fear +of later claims of infringement build upon, modify, incorporate in other +works, reuse and redistribute as freely as possible in any form whatsoever +and for any purposes, including without limitation commercial purposes. +These owners may contribute to the Commons to promote the ideal of a free +culture and the further production of creative, cultural and scientific +works, or to gain reputation or greater distribution for their Work in +part through the use and efforts of others. + +For these and/or other purposes and motivations, and without any +expectation of additional consideration or compensation, the person +associating CC0 with a Work (the "Affirmer"), to the extent that he or she +is an owner of Copyright and Related Rights in the Work, voluntarily +elects to apply CC0 to the Work and publicly distribute the Work under its +terms, with knowledge of his or her Copyright and Related Rights in the +Work and the meaning and intended legal effect of CC0 on those rights. + +1. Copyright and Related Rights. A Work made available under CC0 may be +protected by copyright and related or neighboring rights ("Copyright and +Related Rights"). Copyright and Related Rights include, but are not +limited to, the following: + + i. the right to reproduce, adapt, distribute, perform, display, + communicate, and translate a Work; + ii. moral rights retained by the original author(s) and/or performer(s); +iii. publicity and privacy rights pertaining to a person's image or + likeness depicted in a Work; + iv. rights protecting against unfair competition in regards to a Work, + subject to the limitations in paragraph 4(a), below; + v. rights protecting the extraction, dissemination, use and reuse of data + in a Work; + vi. database rights (such as those arising under Directive 96/9/EC of the + European Parliament and of the Council of 11 March 1996 on the legal + protection of databases, and under any national implementation + thereof, including any amended or successor version of such + directive); and +vii. other similar, equivalent or corresponding rights throughout the + world based on applicable law or treaty, and any national + implementations thereof. + +2. Waiver. To the greatest extent permitted by, but not in contravention +of, applicable law, Affirmer hereby overtly, fully, permanently, +irrevocably and unconditionally waives, abandons, and surrenders all of +Affirmer's Copyright and Related Rights and associated claims and causes +of action, whether now known or unknown (including existing as well as +future claims and causes of action), in the Work (i) in all territories +worldwide, (ii) for the maximum duration provided by applicable law or +treaty (including future time extensions), (iii) in any current or future +medium and for any number of copies, and (iv) for any purpose whatsoever, +including without limitation commercial, advertising or promotional +purposes (the "Waiver"). Affirmer makes the Waiver for the benefit of each +member of the public at large and to the detriment of Affirmer's heirs and +successors, fully intending that such Waiver shall not be subject to +revocation, rescission, cancellation, termination, or any other legal or +equitable action to disrupt the quiet enjoyment of the Work by the public +as contemplated by Affirmer's express Statement of Purpose. + +3. Public License Fallback. Should any part of the Waiver for any reason +be judged legally invalid or ineffective under applicable law, then the +Waiver shall be preserved to the maximum extent permitted taking into +account Affirmer's express Statement of Purpose. In addition, to the +extent the Waiver is so judged Affirmer hereby grants to each affected +person a royalty-free, non transferable, non sublicensable, non exclusive, +irrevocable and unconditional license to exercise Affirmer's Copyright and +Related Rights in the Work (i) in all territories worldwide, (ii) for the +maximum duration provided by applicable law or treaty (including future +time extensions), (iii) in any current or future medium and for any number +of copies, and (iv) for any purpose whatsoever, including without +limitation commercial, advertising or promotional purposes (the +"License"). The License shall be deemed effective as of the date CC0 was +applied by Affirmer to the Work. Should any part of the License for any +reason be judged legally invalid or ineffective under applicable law, such +partial invalidity or ineffectiveness shall not invalidate the remainder +of the License, and in such case Affirmer hereby affirms that he or she +will not (i) exercise any of his or her remaining Copyright and Related +Rights in the Work or (ii) assert any associated claims and causes of +action with respect to the Work, in either case contrary to Affirmer's +express Statement of Purpose. + +4. Limitations and Disclaimers. + + a. No trademark or patent rights held by Affirmer are waived, abandoned, + surrendered, licensed or otherwise affected by this document. + b. Affirmer offers the Work as-is and makes no representations or + warranties of any kind concerning the Work, express, implied, + statutory or otherwise, including without limitation warranties of + title, merchantability, fitness for a particular purpose, non + infringement, or the absence of latent or other defects, accuracy, or + the present or absence of errors, whether or not discoverable, all to + the greatest extent permissible under applicable law. + c. Affirmer disclaims responsibility for clearing rights of other persons + that may apply to the Work or any use thereof, including without + limitation any person's Copyright and Related Rights in the Work. + Further, Affirmer disclaims responsibility for obtaining any necessary + consents, permissions or other rights required for any use of the + Work. + d. Affirmer understands and acknowledges that Creative Commons is not a + party to this document and has no duty or obligation with respect to + this CC0 or use of the Work. diff --git a/__init__.py b/__init__.py new file mode 100644 index 0000000..7072cda --- /dev/null +++ b/__init__.py @@ -0,0 +1,7 @@ +# SPDX-License-Identifier: CC0-1.0 + +# Copyright (C) 2022 Wojtek Kosior +# +# Available under the terms of Creative Commons Zero v1.0 Universal. + +from .loaders import loader, combine_with_loaders diff --git a/base.html.jinja b/base.html.jinja deleted file mode 100644 index c4d288b..0000000 --- a/base.html.jinja +++ /dev/null @@ -1,305 +0,0 @@ -{# -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, - initial_value = none - ) -%} -
- {% - set attrs = { - 'id': field_name + '_field', - 'name': field_name, - 'required': '' if required else none, - 'rows': height - } - %} - - {% if height is none %} - {% do attrs.update({'value': initial_value}) %} - - {% else %} - {% set value = initial_value|default('', true) %} - {{ value }} - {% endif %} -
- - {% if sep_after %} -
- {% endif %} -{% endmacro %} - -{% macro verbatim() %} -
{{ caller()|safe }}
-{% endmacro %} - -{% macro unordered_list() %} - -{% endmacro %} - -{% macro list_entry() %} - -{% endmacro %} - -{% macro doc_link(doc_url) %} - -{% endmacro %} - - - - {% block head %} - {% if style_nonce is defined %} - {% set style_attrs = {'nonce': style_nonce} %} - {% endif %} - - {% block style %} - body { - color: #444; - margin: 0; - } - - #main { - max-width: 750px; - margin: auto; - padding: 0 5px; - } - - a { - text-decoration: inherit; - color: inherit; - } - - .has-colored-links a { - color: #557b8e; - } - - .small-print { - font-size: 80%; - color: #555; - } - - .error-note { - display: block; - border-left: 5px solid #a33; - padding: 10px; - background-color: #fcc; - } - - #main > .error-note:first-child { - margin-top: 10px; - } - - .block-with-bottom-margin, .section-label, .flex-row, aside, p { - display: block; - margin: 0 0 10px 0; - } - - .section-label > span:first-child { - font-style: italic; - text-decoration: underline #ccc; - } - - .flex-row { - display: flex; - padding: 0; - } - - .flex-row > * { - flex: 1 1 0; - } - - .flex-row > .flex-row { - margin: 0; - } - - .button-row-separator { - background-color: #888; - flex: 0 0 2px; - } - - div.horizontal-separator { - display: block; - background-color: #e3e3e3; - height: 1px; - margin: 0 0 10px 0; - } - - textarea { - resize: none; - } - - .green-button, .red-button, .blue-button { - border: none; - border-radius: 2px; - color: white; - text-align: center; - text-decoration: none; - display: block; - padding: 5px 10px; - -moz-user-select: none; - user-select: none; - cursor: pointer; - font: 400 0.9em sans-serif; - } - - .green-button { - background-color: #4caf50; - } - - .red-button { - background-color: #af504c; - } - - .blue-button { - background-color: #504caf; - } - - .disabled-button { - background-color: #aaa; - cursor: default; - } - - .button-bordering-right { - border-radius: 2px 0 0 2px; - } - - .button-bordering-left { - border-radius: 0 2px 2px 0; - } - - .button-bordering-left.button-bordering-right { - border-radius: 0; - } - - .doc-link { - display: inline-block; - width: 1.2em; - height: 1em; - } - - .doc-link::after { - content: "?"; - position:absolute; - display: inline-block; - width:1.2em; - height:1.2em; - line-height: 1.2em; - border: 2px solid #ffffff88; - border-radius: 1em; - transform: translate(1px, calc(-0.1em - 1px)); - background-color: #4caf50; - color:white; - text-align: center; - font-style: normal; - font-family: initial; - font-size: 90%; - font-weight:bold; - } - - .doc-link:hover::after { - color: #ffffffaa; - border-color: #4caf50; - } - - code > pre { - overflow-x: auto; - background-color: #f0f0f0; - padding: 5px; - border: 1px solid #e3e3e3; - } - - .bold { - font-weight: bold; - } - - .hide { - display: none !important; - } - {% endblock style %} - - {% endblock head %} - - - {% block body %} -
{% block main required %}{% endblock %}
- {% endblock body %} - - diff --git a/import/checkbox_tricks.html.jinja b/import/checkbox_tricks.html.jinja deleted file mode 100644 index 4ad9ca1..0000000 --- a/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/include/checkbox_tricks_style.css.jinja b/include/checkbox_tricks_style.css.jinja deleted file mode 100644 index a47a438..0000000 --- a/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/include/item_list_style.css.jinja b/include/item_list_style.css.jinja deleted file mode 100644 index 66fcf10..0000000 --- a/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: auto; - 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/loaders.py b/loaders.py new file mode 100644 index 0000000..9aaa95d --- /dev/null +++ b/loaders.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__) + +def combine_with_loaders(loaders: t.Iterable[BaseLoader]) -> BaseLoader: + return ChoiceLoader([loader(), *loaders]) diff --git a/templates/base.html.jinja b/templates/base.html.jinja new file mode 100644 index 0000000..c4d288b --- /dev/null +++ b/templates/base.html.jinja @@ -0,0 +1,305 @@ +{# +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, + initial_value = none + ) +%} +
+ {% + set attrs = { + 'id': field_name + '_field', + 'name': field_name, + 'required': '' if required else none, + 'rows': height + } + %} + + {% if height is none %} + {% do attrs.update({'value': initial_value}) %} + + {% else %} + {% set value = initial_value|default('', true) %} + {{ value }} + {% endif %} +
+ + {% if sep_after %} +
+ {% endif %} +{% endmacro %} + +{% macro verbatim() %} +
{{ caller()|safe }}
+{% endmacro %} + +{% macro unordered_list() %} +
    + {{ caller() }} +
+{% endmacro %} + +{% macro list_entry() %} + +{% endmacro %} + +{% macro doc_link(doc_url) %} + +{% endmacro %} + + + + {% block head %} + {% if style_nonce is defined %} + {% set style_attrs = {'nonce': style_nonce} %} + {% endif %} + + {% block style %} + body { + color: #444; + margin: 0; + } + + #main { + max-width: 750px; + margin: auto; + padding: 0 5px; + } + + a { + text-decoration: inherit; + color: inherit; + } + + .has-colored-links a { + color: #557b8e; + } + + .small-print { + font-size: 80%; + color: #555; + } + + .error-note { + display: block; + border-left: 5px solid #a33; + padding: 10px; + background-color: #fcc; + } + + #main > .error-note:first-child { + margin-top: 10px; + } + + .block-with-bottom-margin, .section-label, .flex-row, aside, p { + display: block; + margin: 0 0 10px 0; + } + + .section-label > span:first-child { + font-style: italic; + text-decoration: underline #ccc; + } + + .flex-row { + display: flex; + padding: 0; + } + + .flex-row > * { + flex: 1 1 0; + } + + .flex-row > .flex-row { + margin: 0; + } + + .button-row-separator { + background-color: #888; + flex: 0 0 2px; + } + + div.horizontal-separator { + display: block; + background-color: #e3e3e3; + height: 1px; + margin: 0 0 10px 0; + } + + textarea { + resize: none; + } + + .green-button, .red-button, .blue-button { + border: none; + border-radius: 2px; + color: white; + text-align: center; + text-decoration: none; + display: block; + padding: 5px 10px; + -moz-user-select: none; + user-select: none; + cursor: pointer; + font: 400 0.9em sans-serif; + } + + .green-button { + background-color: #4caf50; + } + + .red-button { + background-color: #af504c; + } + + .blue-button { + background-color: #504caf; + } + + .disabled-button { + background-color: #aaa; + cursor: default; + } + + .button-bordering-right { + border-radius: 2px 0 0 2px; + } + + .button-bordering-left { + border-radius: 0 2px 2px 0; + } + + .button-bordering-left.button-bordering-right { + border-radius: 0; + } + + .doc-link { + display: inline-block; + width: 1.2em; + height: 1em; + } + + .doc-link::after { + content: "?"; + position:absolute; + display: inline-block; + width:1.2em; + height:1.2em; + line-height: 1.2em; + border: 2px solid #ffffff88; + border-radius: 1em; + transform: translate(1px, calc(-0.1em - 1px)); + background-color: #4caf50; + color:white; + text-align: center; + font-style: normal; + font-family: initial; + font-size: 90%; + font-weight:bold; + } + + .doc-link:hover::after { + color: #ffffffaa; + border-color: #4caf50; + } + + code > pre { + overflow-x: auto; + background-color: #f0f0f0; + padding: 5px; + border: 1px solid #e3e3e3; + } + + .bold { + font-weight: bold; + } + + .hide { + display: none !important; + } + {% endblock style %} + + {% endblock head %} + + + {% block body %} +
{% block main required %}{% endblock %}
+ {% endblock body %} + + diff --git a/templates/import/checkbox_tricks.html.jinja b/templates/import/checkbox_tricks.html.jinja new file mode 100644 index 0000000..4ad9ca1 --- /dev/null +++ b/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/templates/include/checkbox_tricks_style.css.jinja b/templates/include/checkbox_tricks_style.css.jinja new file mode 100644 index 0000000..a47a438 --- /dev/null +++ b/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/templates/include/item_list_style.css.jinja b/templates/include/item_list_style.css.jinja new file mode 100644 index 0000000..66fcf10 --- /dev/null +++ b/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: auto; + 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; +} -- cgit v1.2.3