{% macro render_errors(field) %}
	{% for e in field.errors %}
		<p class="invalid-feedback" style="display: block;">{{ e }}</p>
	{% endfor %}
{% endmacro %}

{% macro render_field(field, label=None, label_visible=true, right_url=None, right_label=None, fieldclass=None) -%}
	<div class="form-group {% if field.errors %}has-danger{% endif %} {{ kwargs.pop('class_', '') }}">
		{% 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 %}
		{{ field(class_=fieldclass or 'form-control', **kwargs) }}
		{{ render_errors(field) }}
	</div>
{%- endmacro %}

{% macro render_field_prefix(field, label=None, prefix="@", label_visible=true, right_url=None, right_label=None, fieldclass=None) -%}
	<div class="form-group {% if field.errors %}has-danger{% endif %} {{ kwargs.pop('class_', '') }}">
		{% 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>

		{{ render_errors(field) }}
	</div>
{%- endmacro %}

{% macro render_field_prefix_button(field, label=None, prefix="@", label_visible=true, right_url=None, right_label=None, fieldclass=None) -%}
	<div class="form-group {% if field.errors %}has-danger{% endif %} {{ kwargs.pop('class_', '') }}">
		{% 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>

		{{ render_errors(field) }}
	</div>
{%- endmacro %}

{% macro form_scripts() -%}
	<link href="/static/jquery-ui.min.css?v=2" rel="stylesheet" type="text/css">
	<script src="/static/jquery-ui.min.js?v=2"></script>
	<script src="/static/tagselector.js?v=3"></script>
{% endmacro %}

{% 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, "&amp;")
				.replace(/</g, "&lt;")
				.replace(/>/g, "&gt;")
				.replace(/"/g, "&quot;")
				.replace(/'/g, "&#039;");
		}

		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 %}

{% macro render_multiselect_field(field, label=None, label_visible=true, right_url=None, right_label=None) -%}
	<div class="form-group {% if field.errors %}has-danger{% endif %} {{ kwargs.pop('class_', '') }}">
		{% if field.type != 'HiddenField' and label_visible %}
			{% if not label %}{% set label=field.label.text %}{% endif %}
			<label for="{{ field.id }}">{{ label|safe }}</label>
		{% endif %}
		<div class="multichoice_selector bulletselector form-control">
			<input type="text" placeholder="Start typing to see suggestions">
			<div class="clearboth"></div>
		</div>
		<div class="invalid-remaining invalid-feedback"></div>
		{{ field(class_='form-control', **kwargs) }}
		{{ render_errors(field) }}
	</div>
{% endmacro %}

{% macro render_mpackage_field(field, label=None, label_visible=true, right_url=None, right_label=None) -%}
	<div class="form-group {% if field.errors %}has-danger{% endif %} {{ kwargs.pop('class_', '') }}">
		{% if field.type != 'HiddenField' and label_visible %}
			{% if not label %}{% set label=field.label.text %}{% endif %}
			<label for="{{ field.id }}">{{ label|safe }}</label>
		{% endif %}
		<div class="metapackage_selector bulletselector form-control">
			<input type="text" placeholder="Comma-seperated values">
			<div class="clearboth"></div>
		</div>
		{{ field(class_='form-control', **kwargs) }}
		<div class="invalid-remaining invalid-feedback"></div>
		{{ render_errors(field) }}
	</div>
{% endmacro %}

{% macro render_deps_field(field, label=None, label_visible=true, right_url=None, right_label=None) -%}
	<div class="form-group {% if field.errors %}has-danger{% endif %} {{ kwargs.pop('class_', '') }}">
		{% if field.type != 'HiddenField' and label_visible %}
			{% if not label %}{% set label=field.label.text %}{% endif %}
			<label for="{{ field.id }}">{{ label|safe }}</label>
		{% endif %}
		<div class="deps_selector bulletselector form-control">
			<input type="text" placeholder="Comma-seperated values">
			<div class="clearboth"></div>
		</div>
		{{ field(class_='form-control', **kwargs) }}
		<div class="invalid-remaining invalid-feedback"></div>
		{{ render_errors(field) }}
	</div>
{% endmacro %}

{% macro render_checkbox_field(field, label=None) -%}
	{% if not label %}{% set label=field.label.text %}{% endif %}
	<div class="checkbox {{ kwargs.pop('class_', '') }}">
		<label>
			{{ field(type='checkbox', **kwargs) }} {{ label }}
		</label>
	</div>
{%- endmacro %}

{% macro render_radio_field(field) -%}
	{% for value, label, checked in field.iter_choices() %}
		<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 %}
{%- endmacro %}

{% macro render_toggle_field(field, icons=[]) -%}
<div class="btn-group btn-group-toggle" data-toggle="buttons">
	{% for value, label, checked in field.iter_choices() %}
		<label class="btn btn-primary{% if checked %} active{% endif %}">
			{% 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 %}

{% macro render_submit_field(field, label=None, tabindex=None, class_=None) -%}
	{% if not label %}{% set label=field.label.text %}{% endif %}
	{#<button type="submit" class="form-control btn btn-default btn-primary">{{label}}</button>#}
	<input type="submit" name="{{ field.name }}" value="{{ label }}" class="{{ class_ or 'btn btn-primary' }}"
			{% if tabindex %}tabindex="{{ tabindex }}"{% endif %}>
{%- endmacro %}