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 %}
|
|
|
|
|
2018-12-22 23:29:30 +01:00
|
|
|
{% macro render_field(field, label=None, label_visible=true, right_url=None, right_label=None, fieldclass=None) -%}
|
2020-12-15 13:56:17 +01:00
|
|
|
<div class="form-group {% if field.errors %}has-danger{% endif %} {{ kwargs.pop('class_', '') }}">
|
2018-05-25 17:53:25 +02:00
|
|
|
{% if field.type != 'HiddenField' and label_visible %}
|
2018-12-22 23:29:30 +01:00
|
|
|
{% if not label and label != "" %}{% set label=field.label.text %}{% endif %}
|
|
|
|
{% if label %}<label for="{{ field.id }}">{{ label|safe }}</label>{% endif %}
|
2018-05-25 17:53:25 +02:00
|
|
|
{% endif %}
|
2018-12-22 23:29:30 +01:00
|
|
|
{{ field(class_=fieldclass or 'form-control', **kwargs) }}
|
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) -%}
|
2020-12-15 13:56:17 +01:00
|
|
|
<div class="form-group {% if field.errors %}has-danger{% endif %} {{ kwargs.pop('class_', '') }}">
|
2020-12-10 00:59:31 +01:00
|
|
|
{% if field.type != 'HiddenField' and label_visible %}
|
|
|
|
{% if not label and label != "" %}{% set label=field.label.text %}{% endif %}
|
|
|
|
{% if label %}<label for="{{ field.id }}">{{ label|safe }}</label>{% endif %}
|
|
|
|
{% endif %}
|
|
|
|
|
|
|
|
<div class="input-group mb-3">
|
|
|
|
<div class="input-group-prepend">
|
|
|
|
<span class="input-group-text" id="basic-addon1">{{ prefix }}</span>
|
|
|
|
</div>
|
|
|
|
{{ 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 %}
|
|
|
|
|
|
|
|
{% macro render_field_prefix_button(field, label=None, prefix="@", label_visible=true, right_url=None, right_label=None, fieldclass=None) -%}
|
2020-12-15 13:56:17 +01:00
|
|
|
<div class="form-group {% if field.errors %}has-danger{% endif %} {{ kwargs.pop('class_', '') }}">
|
2020-12-10 00:59:31 +01:00
|
|
|
{% if field.type != 'HiddenField' and label_visible %}
|
|
|
|
{% if not label and label != "" %}{% set label=field.label.text %}{% endif %}
|
|
|
|
{% if label %}<label for="{{ field.id }}">{{ label|safe }}</label>{% endif %}
|
|
|
|
{% endif %}
|
|
|
|
|
|
|
|
<div class="input-group mb-3">
|
|
|
|
<div class="input-group-prepend">
|
|
|
|
<span class="input-group-text" id="basic-addon1">{{ prefix }}</span>
|
|
|
|
</div>
|
|
|
|
{{ field(class_=fieldclass or 'form-control', **kwargs) }}
|
|
|
|
<a class="btn btn-secondary" id="{{ field.name }}-button">
|
|
|
|
View
|
|
|
|
</a>
|
|
|
|
</div>
|
|
|
|
|
2020-12-15 13:56:17 +01:00
|
|
|
{{ render_errors(field) }}
|
2020-12-10 00:59:31 +01:00
|
|
|
</div>
|
|
|
|
{%- endmacro %}
|
|
|
|
|
2018-12-22 12:23:58 +01:00
|
|
|
{% macro form_scripts() -%}
|
2020-12-07 11:10:52 +01:00
|
|
|
<link href="/static/jquery-ui.min.css?v=2" rel="stylesheet" type="text/css">
|
|
|
|
<script src="/static/jquery-ui.min.js?v=2"></script>
|
2020-07-17 23:08:34 +02:00
|
|
|
<script src="/static/tagselector.js?v=3"></script>
|
2018-05-25 17:53:25 +02:00
|
|
|
{% endmacro %}
|
|
|
|
|
2018-05-29 21:51:42 +02:00
|
|
|
{% macro package_lists() -%}
|
|
|
|
<script>
|
|
|
|
meta_packages = [
|
|
|
|
{% for m in mpackages %}
|
|
|
|
{# 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) -%}
|
2020-12-15 13:56:17 +01:00
|
|
|
<div class="form-group {% if field.errors %}has-danger{% endif %} {{ kwargs.pop('class_', '') }}">
|
2018-05-25 17:53:25 +02:00
|
|
|
{% if field.type != 'HiddenField' and label_visible %}
|
|
|
|
{% if not label %}{% set label=field.label.text %}{% endif %}
|
2018-12-22 12:23:58 +01:00
|
|
|
<label for="{{ field.id }}">{{ label|safe }}</label>
|
2018-05-25 17:53:25 +02:00
|
|
|
{% endif %}
|
2018-12-22 12:23:58 +01:00
|
|
|
<div class="multichoice_selector bulletselector form-control">
|
2018-05-25 17:53:25 +02:00
|
|
|
<input type="text" placeholder="Start typing to see suggestions">
|
|
|
|
<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 %}
|
|
|
|
|
|
|
|
{% macro render_mpackage_field(field, label=None, label_visible=true, right_url=None, right_label=None) -%}
|
2020-12-15 13:56:17 +01:00
|
|
|
<div class="form-group {% if field.errors %}has-danger{% endif %} {{ kwargs.pop('class_', '') }}">
|
2018-05-27 18:58:09 +02:00
|
|
|
{% if field.type != 'HiddenField' and label_visible %}
|
|
|
|
{% if not label %}{% set label=field.label.text %}{% endif %}
|
2018-12-22 12:23:58 +01:00
|
|
|
<label for="{{ field.id }}">{{ label|safe }}</label>
|
2018-05-27 18:58:09 +02:00
|
|
|
{% endif %}
|
2018-12-22 12:23:58 +01:00
|
|
|
<div class="metapackage_selector bulletselector form-control">
|
2018-05-27 22:36:58 +02:00
|
|
|
<input type="text" placeholder="Comma-seperated values">
|
2018-05-27 18:58:09 +02:00
|
|
|
<div class="clearboth"></div>
|
|
|
|
</div>
|
|
|
|
{{ field(class_='form-control', **kwargs) }}
|
2018-12-22 12:23:58 +01:00
|
|
|
<div class="invalid-remaining invalid-feedback"></div>
|
2020-12-15 13:56:17 +01:00
|
|
|
{{ render_errors(field) }}
|
2018-05-27 22:31:11 +02:00
|
|
|
</div>
|
|
|
|
{% endmacro %}
|
|
|
|
|
|
|
|
{% macro render_deps_field(field, label=None, label_visible=true, right_url=None, right_label=None) -%}
|
2020-12-15 13:56:17 +01:00
|
|
|
<div class="form-group {% if field.errors %}has-danger{% endif %} {{ kwargs.pop('class_', '') }}">
|
2018-05-27 22:31:11 +02:00
|
|
|
{% if field.type != 'HiddenField' and label_visible %}
|
|
|
|
{% if not label %}{% set label=field.label.text %}{% endif %}
|
2018-12-22 12:23:58 +01:00
|
|
|
<label for="{{ field.id }}">{{ label|safe }}</label>
|
2018-05-27 22:31:11 +02:00
|
|
|
{% endif %}
|
2018-12-22 12:23:58 +01:00
|
|
|
<div class="deps_selector bulletselector form-control">
|
2018-05-27 22:36:58 +02:00
|
|
|
<input type="text" placeholder="Comma-seperated values">
|
2018-05-27 22:31:11 +02:00
|
|
|
<div class="clearboth"></div>
|
|
|
|
</div>
|
|
|
|
{{ field(class_='form-control', **kwargs) }}
|
2018-12-22 12:23:58 +01:00
|
|
|
<div class="invalid-remaining invalid-feedback"></div>
|
2020-12-15 13:56:17 +01:00
|
|
|
{{ render_errors(field) }}
|
2018-05-25 17:53:25 +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 %}
|
2019-01-28 22:49:29 +01:00
|
|
|
<div class="checkbox {{ kwargs.pop('class_', '') }}">
|
2018-05-25 17:53:25 +02:00
|
|
|
<label>
|
|
|
|
{{ field(type='checkbox', **kwargs) }} {{ label }}
|
|
|
|
</label>
|
|
|
|
</div>
|
2018-03-18 19:14:55 +01:00
|
|
|
{%- endmacro %}
|
|
|
|
|
|
|
|
{% macro render_radio_field(field) -%}
|
2018-05-25 17:53:25 +02:00
|
|
|
{% for value, label, checked in field.iter_choices() %}
|
2018-12-22 23:29:30 +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 %}>
|
2018-05-25 17:53:25 +02:00
|
|
|
{{ label }}
|
|
|
|
</label>
|
|
|
|
</div>
|
|
|
|
{% endfor %}
|
2018-03-18 19:14:55 +01:00
|
|
|
{%- endmacro %}
|
|
|
|
|
2020-07-10 21:47:03 +02:00
|
|
|
{% macro render_toggle_field(field, icons=[]) -%}
|
|
|
|
<div class="btn-group btn-group-toggle" data-toggle="buttons">
|
|
|
|
{% for value, label, checked in field.iter_choices() %}
|
2020-07-11 00:55:46 +02:00
|
|
|
<label class="btn btn-primary{% if checked %} active{% endif %}">
|
2020-07-10 21:47:03 +02:00
|
|
|
{% set icon = icons[value] %}
|
|
|
|
{% if icon %}
|
|
|
|
<i class="fas {{ icon }} mr-2"></i>
|
|
|
|
{% endif %}
|
|
|
|
<input type="radio" name="{{ field.id }}" id="{{ field.id }}" value="{{ value }}" autocomplete="off" {% if checked %} checked{% endif %}>
|
|
|
|
{{ label }}
|
|
|
|
</label>
|
|
|
|
{% endfor %}
|
|
|
|
</div>
|
|
|
|
{%- endmacro %}
|
|
|
|
|
2018-03-18 19:14:55 +01:00
|
|
|
{% macro render_submit_field(field, label=None, tabindex=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>#}
|
2018-12-22 12:23:58 +01:00
|
|
|
<input type="submit" value="{{label}}" class="btn btn-primary"
|
2018-05-25 17:53:25 +02:00
|
|
|
{% if tabindex %}tabindex="{{ tabindex }}"{% endif %}
|
|
|
|
>
|
2018-03-18 19:14:55 +01:00
|
|
|
{%- endmacro %}
|