2020-12-15 13:56:17 +01:00
{% macro render_errors(field) %}
{% for e in field.errors %}
< p class = "invalid-feedback" style = "display: block;" > {{ e }}< / p >
{% endfor %}
{% endmacro %}
2023-08-21 00:33:39 +02:00
{% macro render_label(field, label=None, label_visible=true) %}
{% if field.type != 'HiddenField' %}
{% if not label and label != "" %}{% set label=field.label.text %}{% endif %}
{% if label %}
2023-08-22 20:58:43 +02:00
< label for = "{{ field.id }}" { % if not label_visible % } class = "visually-hidden" { % else % } class = "form-label" { % endif % } >
2023-08-21 00:33:39 +02:00
{{ label|safe }}
< / label >
{% if field.flags.required and label_visible %}
2023-08-22 20:58:43 +02:00
< span class = "ms-1 text-danger" >
2023-08-21 00:33:39 +02:00
< small >
< i class = "fas fa-asterisk" > < / i >
< / small >
< / span >
2023-08-22 20:58:43 +02:00
< span class = "ms-3 text-muted" >
2023-08-21 00:33:39 +02:00
{{ _("Required") }}
< / span >
{% endif %}
{% endif %}
{% endif %}
{% endmacro %}
2023-08-22 20:58:43 +02:00
{% macro render_field(field, label=None, label_visible=true, right_url=None, right_label=None, fieldclass=None, hint=None, no_class=False) -%}
< div class = "{% if not no_class %}form-group mb-3{% endif %} {% if field.errors %}has-danger{% endif %} {{ kwargs.pop('class_', '') }}" >
2023-08-21 00:33:39 +02:00
{{ render_label(field, label, label_visible) }}
2018-12-22 23:29:30 +01:00
{{ field(class_=fieldclass or 'form-control', **kwargs) }}
2021-01-30 16:22:19 +01:00
{% if hint %}
< small class = "form-text text-muted" > {{ hint | safe }}< / small >
{% endif %}
2020-12-15 13:56:17 +01:00
{{ render_errors(field) }}
2018-05-25 17:53:25 +02:00
< / div >
2018-03-18 19:14:55 +01:00
{%- endmacro %}
2020-12-10 00:59:31 +01:00
{% macro render_field_prefix(field, label=None, prefix="@", label_visible=true, right_url=None, right_label=None, fieldclass=None) -%}
2023-08-22 20:58:43 +02:00
< div class = "form-group mb-3 {% if field.errors %}has-danger{% endif %} {{ kwargs.pop('class_', '') }}" >
2023-08-21 00:33:39 +02:00
{{ render_label(field, label, label_visible) }}
2020-12-10 00:59:31 +01:00
< div class = "input-group mb-3" >
2023-08-22 20:58:43 +02:00
< span class = "input-group-text" id = "basic-addon1" > {{ prefix }}< / span >
2020-12-10 00:59:31 +01:00
{{ field(class_=fieldclass or 'form-control', **kwargs) }}
< / div >
2020-12-15 13:56:17 +01:00
{{ render_errors(field) }}
2020-12-10 00:59:31 +01:00
< / div >
{%- endmacro %}
2023-08-16 01:52:10 +02:00
{% macro render_field_prefix_button(field, label=None, prefix="@", label_visible=true, right_url=None, right_label=None, fieldclass=None, has_view=False, hint=None) -%}
2023-08-22 20:58:43 +02:00
< div class = "form-group mb-3 {% if field.errors %}has-danger{% endif %} {{ kwargs.pop('class_', '') }}" >
2023-08-21 00:33:39 +02:00
{{ render_label(field, label, label_visible) }}
2023-08-16 01:52:10 +02:00
< div class = "input-group mb-1" >
2023-08-22 20:58:43 +02:00
< span class = "input-group-text" id = "basic-addon1" > {{ prefix }}< / span >
2020-12-10 00:59:31 +01:00
{{ field(class_=fieldclass or 'form-control', **kwargs) }}
2023-08-16 01:52:10 +02:00
{% if has_view %}
< a class = "btn btn-secondary" id = "{{ field.name }}-button" >
{{ _("View") }}
< / a >
{% endif %}
2020-12-10 00:59:31 +01:00
< / div >
2020-12-15 13:56:17 +01:00
{{ render_errors(field) }}
2023-08-16 01:52:10 +02:00
{% if hint %}
< small class = "form-text text-muted" > {{ hint | safe }}< / small >
{% endif %}
2020-12-10 00:59:31 +01:00
< / div >
{%- endmacro %}
2018-12-22 12:23:58 +01:00
{% macro form_scripts() -%}
2023-08-25 21:49:17 +02:00
< link href = "/static/libs/jquery-ui.min.css?v=2" rel = "stylesheet" type = "text/css" >
2023-08-26 13:34:55 +02:00
< script src = "/static/libs/jquery.min.js?v=2" > < / script >
2023-08-25 21:49:17 +02:00
< script src = "/static/libs/jquery-ui.min.js?v=2" > < / script >
2023-08-26 14:08:11 +02:00
< script src = "/static/js/tagselector.js" > < / script >
2018-05-25 17:53:25 +02:00
{% endmacro %}
2023-12-16 01:57:13 +01:00
{% macro easymde_scripts() %}
< link rel = "stylesheet" type = "text/css" href = "/static/libs/easymde.min.css" >
< script src = "/static/libs/easymde.min.js" > < / script >
< script src = "/static/js/markdowntextarea.js?v=2" > < / script >
{% endmacro %}
2018-05-29 21:51:42 +02:00
{% macro package_lists() -%}
< script >
meta_packages = [
2022-09-01 23:45:53 +02:00
{% for m in modnames %}
2018-05-29 21:51:42 +02:00
{# This is safe as name can only contain `[a-z0-9_]` #}
{
id: "{{ m.name }}",
value: "{{ m.name }}",
toString: function() { return "{{ m.name }}"; },
},
{% endfor %}
]
function escape(unsafe) {
return unsafe
.replace(/& /g, "& ")
.replace(/< /g, "< ")
.replace(/>/g, "> ")
.replace(/"/g, "" ")
.replace(/'/g, "' ");
}
all_packages = meta_packages.slice();
{% for p in packages %}
all_packages.push({
id: "{{ p.author.username }}/{{ p.name }}",
value: escape({{ p.title | tojson }} + " by " + {{ p.author.display_name | tojson }}),
toString: function() { return escape({{ p.title | tojson }} + " by " + {{ p.author.display_name | tojson }} + " only"); },
});
{% endfor %}
< / script >
{% endmacro %}
2018-05-25 17:53:25 +02:00
{% macro render_multiselect_field(field, label=None, label_visible=true, right_url=None, right_label=None) -%}
2023-08-22 20:58:43 +02:00
< div class = "form-group mb-3 {% if field.errors %}has-danger{% endif %} {{ kwargs.pop('class_', '') }}" >
2023-08-21 00:33:39 +02:00
{{ render_label(field, label, label_visible) }}
2018-12-22 12:23:58 +01:00
< div class = "multichoice_selector bulletselector form-control" >
2022-01-08 00:27:00 +01:00
< input type = "text" placeholder = "{{ _('Start typing to see suggestions') }}" >
2018-05-25 17:53:25 +02:00
< div class = "clearboth" > < / div >
< / div >
2018-12-22 12:23:58 +01:00
< div class = "invalid-remaining invalid-feedback" > < / div >
2018-05-25 17:53:25 +02:00
{{ field(class_='form-control', **kwargs) }}
2020-12-15 13:56:17 +01:00
{{ render_errors(field) }}
2018-05-27 18:58:09 +02:00
< / div >
{% endmacro %}
2018-03-18 19:14:55 +01:00
{% macro render_checkbox_field(field, label=None) -%}
2018-05-25 17:53:25 +02:00
{% if not label %}{% set label=field.label.text %}{% endif %}
2023-08-22 20:58:43 +02:00
< div class = "form-check {{ kwargs.pop('class_', '') }}" >
{{ field(type='checkbox', class_="form-check-input", **kwargs) }}
< label class = "form-check-label" for = "{{ field.name }}" >
{{ label }}
2018-05-25 17:53:25 +02:00
< / label >
< / div >
2018-03-18 19:14:55 +01:00
{%- endmacro %}
2021-01-30 16:41:55 +01:00
{% macro render_radio_field(field, hint=None, label=None, label_visible=true) -%}
2023-08-22 20:58:43 +02:00
< div class = "form-group mb-3 {% if field.errors %}has-danger{% endif %} {{ kwargs.pop('class_', '') }}" >
2023-08-21 00:33:39 +02:00
{{ render_label(field, label, label_visible) }}
2024-05-24 02:31:33 +02:00
{% for value, label, checked, render_kw in field.iter_choices() %}
2021-01-30 16:41:55 +01:00
< div class = "form-check my-1" >
< label class = "form-check-label" >
< input class = "form-check-input" type = "radio" name = "{{ field.id }}" id = "{{ field.id }}" value = "{{ value }}" { % if checked % } checked { % endif % } >
{{ label }}
< / label >
< / div >
{% endfor %}
{% if hint %}
< small class = "form-text text-muted" > {{ hint | safe }}< / small >
{% endif %}
{{ render_errors(field) }}
< / div >
2018-03-18 19:14:55 +01:00
{%- endmacro %}
2020-07-10 21:47:03 +02:00
{% macro render_toggle_field(field, icons=[]) -%}
2023-08-22 20:58:43 +02:00
< div class = "btn-group" role = "group" >
2024-05-24 02:31:33 +02:00
{% for value, label, checked, render_kw in field.iter_choices() %}
2023-08-22 20:58:43 +02:00
< input type = "radio" class = "btn-check" name = "{{ field.id }}" id = "{{ field.id }}-{{ value }}" value = "{{ value }}" autocomplete = "off" { % if checked % } checked { % endif % } >
< label class = "btn btn-primary" for = "{{ field.id }}-{{ value }}" >
{% set icon = icons[value] %}
{% if icon %}
< i class = "fas {{ icon }} me-2" > < / i >
{% endif %}
{{ label }}
< / label >
{% endfor %}
2020-07-10 21:47:03 +02:00
< / div >
{%- endmacro %}
2020-12-15 22:22:17 +01:00
{% macro render_submit_field(field, label=None, tabindex=None, class_=None) -%}
2018-05-25 17:53:25 +02:00
{% if not label %}{% set label=field.label.text %}{% endif %}
{#< button type = "submit" class = "form-control btn btn-default btn-primary" > {{label}}< / button > #}
2020-12-15 22:22:17 +01:00
< input type = "submit" name = "{{ field.name }}" value = "{{ label }}" class = "{{ class_ or 'btn btn-primary' }}"
{% if tabindex %}tabindex="{{ tabindex }}"{% endif %}>
2018-03-18 19:14:55 +01:00
{%- endmacro %}