diff --git a/frontend/src/main.less b/frontend/src/main.less index 966bf21fdf405d3ba15668e8397d989ad43d8a92..56468733ef5fce78e6445e901caaf24e5691c9d4 100644 --- a/frontend/src/main.less +++ b/frontend/src/main.less @@ -51,6 +51,16 @@ body, @{inputs}, @{buttons} { @{inputs} { padding: .2rem .3rem; + &.error { + border-color: red; + } +} + +.input-error { + width: 100%; + font-size: .875em; + color: red; + grid-column-start: 2; } @{buttons} { @@ -287,3 +297,39 @@ main { display: none; } } + +.flash { + border: 1px solid transparent; + border-radius: 4px; + padding: 0.5rem 1rem; + + position: relative; + + .flash-background { + opacity: 0.5; + z-index: -1; + position: absolute; + top: 0; + bottom: 0; + left: 0; + right: 0; + } + + &.flash-error { + border-color: red; + .flash-background { + background-color: red; + } + } + + &.flash-message { + border-color: var(--accent2); + .flash-background { + background-color: var(--accent2); + } + } + + & > div { + opacity: 1; + } +} diff --git a/schilder2000/templates/_base.html.j2 b/schilder2000/templates/_base.html.j2 index b27020f841287ef6c6904d240eb6aebbb6aff584..6e6816345ce79a21870d967f99181e60fceffb1c 100644 --- a/schilder2000/templates/_base.html.j2 +++ b/schilder2000/templates/_base.html.j2 @@ -5,6 +5,32 @@ href="{{ url_for(where) }}" {%- endmacro -%} +{%- macro render_field(field, class="") -%} + {% if field.type == "CSRFTokenField" -%} + {{ field }} + {%- else -%} + <div class="box"> + {%- set error = ' error' if field.errors else '' -%} + {{ field.label(class="for-text"+error) }} + {{ field(class=class+error) }} + {%- for err in field.errors -%} + <div class="input-error">{{ err|e }}</div> + {%- endfor -%} + </div> + {%- endif -%} +{%- endmacro -%} + +{%- macro flashes() -%} + {%- with messages = get_flashed_messages(with_categories=true) -%} + {%- for category, m in messages -%} + <div class="flash flash-{{ category }}"> + <div>{{ m }}</div> + <div class="flash-background"></div> + </div> + {%- endfor -%} + {%- endwith -%} +{%- endmacro -%} + <!DOCTYPE HTML> <html lang="{{ lang|default('de') }}"> <head> @@ -40,6 +66,10 @@ {%- endblock nav -%} <main> + <div class="flashes"> + {{ flashes() }} + </div> + {%- block main -%} {%- endblock main -%} </main> diff --git a/schilder2000/templates/schild.html.j2 b/schilder2000/templates/schild.html.j2 index 615a8781823de4c567601591b6f50f8a4939d252..1b256f4ee465e90c5ab2eede3da0bd9f0d7d4d2d 100644 --- a/schilder2000/templates/schild.html.j2 +++ b/schilder2000/templates/schild.html.j2 @@ -1,24 +1,5 @@ {% extends "_base.html.j2" %} -{% macro render_field(field, class="") -%} - {% if field.type == "CSRFTokenField" -%} - {{ field }} - {%- else -%} - <div class="box"> - {%- set error = ' error' if field.errors else '' -%} - {{ field.label(class="for-text"+error) }} - {{ field(class=class+error) }} - {%- if field.errors -%} - <ul class="errors"> - {%- for err in field.errors -%} - <li>{{ err|e }}</li> - {%- endfor -%} - </ul> - {%- endif -%} - </div> - {%- endif -%} -{%- endmacro %} - {% block title -%} {%- if schild -%} {{ schild.title }} @@ -29,18 +10,6 @@ {% block main -%} <div class="section-container"> - <div class="section"> - {%- with messages = get_flashed_messages() -%} - {%- if messages -%} - <ul class="flashes"> - {%- for m in messages -%} - <li>{{ m }}</li> - {%- endfor -%} - </ul> - {%- endif -%} - {%- endwith -%} - </div> - <div class="section"> <form method="post" action=""> {{ form.csrf_token }}