aboutsummaryrefslogtreecommitdiff
path: root/src/hydrilla/common_jinja_templates/base.html.jinja
diff options
context:
space:
mode:
Diffstat (limited to 'src/hydrilla/common_jinja_templates/base.html.jinja')
-rw-r--r--src/hydrilla/common_jinja_templates/base.html.jinja228
1 files changed, 228 insertions, 0 deletions
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.
+#}
+<!DOCTYPE html>
+
+{% macro button_row(buttons_data, common_fields={}) %}
+ <div class="flex-row">
+ {% for classes, text, extra_fields in buttons_data %}
+ {% if not loop.first %}
+ <div class="button-row-separator"></div>
+ {% 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 %}
+
+ <form method="POST" class="flex-row">
+ {% for name, value in extra_fields.items() %}
+ <input name="{{ name }}" value="{{ value }}" type="hidden">
+ {% endfor %}
+ {% for name, value in common_fields.items() %}
+ <input name="{{ name }}" value="{{ value }}" type="hidden">
+ {% endfor %}
+
+ <button class="{{ classes|join(' ') }}"{{ disabled_attr }}>
+ {{ text }}
+ </button>
+ </form>
+ {% endfor %}
+ </div>
+{% endmacro %}
+
+{% macro error_note(note_text) %}
+ <aside class="error-note">
+ {{ note_text }}
+ </aside>
+{% endmacro %}
+
+{% macro label(label_text, label_name=none) %}
+ {% set for_attr = label_name and (label_name + "_field") %}
+ <label {{ {'for': for_attr, 'class': 'section-label'}|xmlattr }}>
+ {{ label_text }}
+ </label>
+{% endmacro %}
+
+{% macro form_field(field_name, required=true, sep_after=true, height=none) %}
+ <div class="flex-row">
+ {%
+ set attrs = {
+ 'id': field_name + '_field',
+ 'name': field_name,
+ 'required': '' if required else none,
+ 'rows': height
+ }
+ %}
+
+ {% if height is none %}
+ <input{{ attrs|xmlattr }}>
+ {% else %}
+ <textarea{{ attrs|xmlattr }}></textarea>
+ {% endif %}
+ </div>
+
+ {% if sep_after %}
+ <div class="horizontal-separator"></div>
+ {% endif %}
+{% endmacro %}
+
+<html>
+ <head>
+ {% block head %}
+ <style>
+ {% 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 {
+ 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;
+ }
+
+ .hide {
+ display: none !important;
+ }
+ {% endblock style %}
+ </style>
+ {% endblock head %}
+ </head>
+ <body>
+ {% block body %}
+ <div id="main">{% block main required %}{% endblock %}</div>
+ {% endblock body %}
+ </body>
+</html>