diff options
author | Matthew Lemon <y@yulqen.org> | 2024-04-23 11:16:38 +0100 |
---|---|---|
committer | Matthew Lemon <y@yulqen.org> | 2024-04-23 11:16:38 +0100 |
commit | 0f951dcf029d4af284467543a3afdf5bf6581a20 (patch) | |
tree | a48384210cdc168e3bd3ccff6d6d516eeed9e748 /templates | |
parent | 8b084e9fe7a5f3a04c32daf9a24f7f2cf67300f9 (diff) |
switched to Django
Diffstat (limited to 'templates')
40 files changed, 653 insertions, 0 deletions
diff --git a/templates/w3/accordion-group.html b/templates/w3/accordion-group.html new file mode 100644 index 0000000..3d4f5e8 --- /dev/null +++ b/templates/w3/accordion-group.html @@ -0,0 +1,17 @@ +<div class="card mb-2"> + <div class="card-header" role="tab"> + <h5 class="mb-0"> + <a data-toggle="collapse" href="#{{ div.css_id }}" aria-expanded="true" + aria-controls="{{ div.css_id }}"> + {{ div.name }} + </a> + </h5> + </div> + + <div id="{{ div.css_id }}" class="collapse{% if div.active %} show{% endif %}" role="tabpanel" + aria-labelledby="{{ div.css_id }}" data-parent="#{{ div.data_parent }}"> + <div class="card-body"> + {{ fields }} + </div> + </div> +</div> diff --git a/templates/w3/accordion.html b/templates/w3/accordion.html new file mode 100644 index 0000000..f3a9859 --- /dev/null +++ b/templates/w3/accordion.html @@ -0,0 +1,3 @@ +<div id="{{ accordion.css_id }}" role="tablist"> + {{ content }} +</div> diff --git a/templates/w3/betterform.html b/templates/w3/betterform.html new file mode 100644 index 0000000..4516291 --- /dev/null +++ b/templates/w3/betterform.html @@ -0,0 +1,21 @@ +{% for fieldset in form.fieldsets %} + <fieldset class="fieldset-{{ forloop.counter }} {{ fieldset.classes }}"> + {% if fieldset.legend %} + <legend>{{ fieldset.legend }}</legend> + {% endif %} + + {% if fieldset.description %} + <p class="description">{{ fieldset.description }}</p> + {% endif %} + + {% for field in fieldset %} + {% if field.is_hidden %} + {{ field }} + {% else %} + {% include "w3/field.html" %} + {% endif %} + {% endfor %} + {% if not forloop.last or not fieldset_open %} + </fieldset> + {% endif %} +{% endfor %} diff --git a/templates/w3/display_form.html b/templates/w3/display_form.html new file mode 100644 index 0000000..9c891dd --- /dev/null +++ b/templates/w3/display_form.html @@ -0,0 +1,9 @@ +{% if form.form_html %} + {% if include_media %}{{ form.media }}{% endif %} + {% if form_show_errors %} + {% include "w3/errors.html" %} + {% endif %} + {{ form.form_html }} +{% else %} + {% include "w3/uni_form.html" %} +{% endif %} diff --git a/templates/w3/errors.html b/templates/w3/errors.html new file mode 100644 index 0000000..db09490 --- /dev/null +++ b/templates/w3/errors.html @@ -0,0 +1,8 @@ +{% if form.non_field_errors %} + <div class="w3-red"> + {% if form_error_title %}<h4>{{ form_error_title }}</h4>{% endif %} + <ul> + {{ form.non_field_errors|unordered_list }} + </ul> + </div> +{% endif %} diff --git a/templates/w3/errors_formset.html b/templates/w3/errors_formset.html new file mode 100644 index 0000000..0382973 --- /dev/null +++ b/templates/w3/errors_formset.html @@ -0,0 +1,8 @@ +{% if formset.non_form_errors %} + <div class="alert alert-block alert-danger"> + {% if formset_error_title %}<h4 class="alert-heading">{{ formset_error_title }}</h4>{% endif %} + <ul class="m-0"> + {{ formset.non_form_errors|unordered_list }} + </ul> + </div> +{% endif %} diff --git a/templates/w3/field.html b/templates/w3/field.html new file mode 100644 index 0000000..f73441f --- /dev/null +++ b/templates/w3/field.html @@ -0,0 +1,81 @@ +{% load crispy_forms_field %} + +{% if field.is_hidden %} + {{ field }} +{% else %} + {% if field|is_checkbox %} + <div class="w3-input"> + {% if label_class %} + <div class="{% for offset in bootstrap_checkbox_offsets %}{{ offset }} {% endfor %}{{ field_class }}"> + {% endif %} + {% endif %} + <{% if tag %}{{ tag }}{% else %}div{% endif %} id="div_{{ field.auto_id }}" class="{% if not field|is_checkbox %}w3-input{% if 'form-horizontal' in form_class %} row{% endif %}{% else %}{%if use_custom_control%}{% if tag != 'td' %}custom-control {%endif%} custom-checkbox{% else %}form-check{% endif %}{% endif %}{% if wrapper_class %} {{ wrapper_class }}{% endif %}{% if field.css_classes %} {{ field.css_classes }}{% endif %}"> + {% if field.label and not field|is_checkbox and form_show_labels %} + {# not field|is_radioselect in row below can be removed once Django 3.2 is no longer supported #} + <label {% if field.id_for_label and not field|is_radioselect %}for="{{ field.id_for_label }}" {% endif %}class="{% if 'form-horizontal' in form_class %}col-form-label {% endif %}{{ label_class }}{% if field.field.required %} requiredField{% endif %}"> + {{ field.label }}{% if field.field.required %}<span class="asteriskField">*</span>{% endif %} + </label> + {% endif %} + + {% if field|is_checkboxselectmultiple %} + {% include 'w3/layout/checkboxselectmultiple.html' %} + {% endif %} + + {% if field|is_radioselect %} + {% include 'w3/layout/radioselect.html' %} + {% endif %} + + {% if not field|is_checkboxselectmultiple and not field|is_radioselect %} + {% if field|is_checkbox and form_show_labels %} + {%if use_custom_control%} + {% if field.errors %} + {% crispy_field field 'class' 'custom-control-input is-invalid' %} + {% else %} + {% crispy_field field 'class' 'custom-control-input' %} + {% endif %} + {% else %} + {% if field.errors %} + {% crispy_field field 'class' 'form-check-input is-invalid' %} + {% else %} + {% crispy_field field 'class' 'form-check-input' %} + {% endif %} + {% endif %} + <label for="{{ field.id_for_label }}" class="{%if use_custom_control%}custom-control-label{% else %}form-check-label{% endif %}{% if field.field.required %} requiredField{% endif %}"> + {{ field.label }}{% if field.field.required %}<span class="asteriskField">*</span>{% endif %} + </label> + {% include 'w3/layout/help_text_and_errors.html' %} + {% elif field|is_file and use_custom_control %} + {% include 'w3/layout/field_file.html' %} + {% else %} + <div{% if field_class %} class="{{ field_class }}"{% endif %}> + {% if field|is_select and use_custom_control %} + {% if field.errors %} + {% crispy_field field 'class' 'custom-select is-invalid' %} + {% else %} + {% crispy_field field 'class' 'custom-select' %} + {% endif %} + {% elif field|is_file %} + {% if field.errors %} + {% crispy_field field 'class' 'form-control-file is-invalid' %} + {% else %} + {% crispy_field field 'class' 'form-control-file' %} + {% endif %} + {% else %} + {% if field.errors %} + {% crispy_field field 'class' 'form-control is-invalid' %} + {% else %} + {% crispy_field field 'class' 'form-control' %} + {% endif %} + {% endif %} + {% include 'w3/layout/help_text_and_errors.html' %} + </div> + {% endif %} + {% endif %} + </{% if tag %}{{ tag }}{% else %}div{% endif %}> + {% if field|is_checkbox %} + {% if label_class %} + </div> + {% endif %} + </div> + {% endif %} +{% endif %} diff --git a/templates/w3/inputs.html b/templates/w3/inputs.html new file mode 100644 index 0000000..250031c --- /dev/null +++ b/templates/w3/inputs.html @@ -0,0 +1,13 @@ +{% if inputs %} + <div class="w3-input"> + {% if label_class %} + <div class="aab {{ label_class }}"></div> + {% endif %} + + <div class="{{ field_class }}"> + {% for input in inputs %} + {% include "w3/layout/baseinput.html" %} + {% endfor %} + </div> + </div> +{% endif %} diff --git a/templates/w3/layout/alert.html b/templates/w3/layout/alert.html new file mode 100644 index 0000000..ba20ae9 --- /dev/null +++ b/templates/w3/layout/alert.html @@ -0,0 +1,4 @@ +<div{% if alert.css_id %} id="{{ alert.css_id }}"{% endif %}{% if alert.css_class %} class="{{ alert.css_class }}"{% endif %}> + {% if dismiss %}<button type="button" class="close" data-dismiss="alert">×</button>{% endif %} + {{ content }} +</div> diff --git a/templates/w3/layout/attrs.html b/templates/w3/layout/attrs.html new file mode 100644 index 0000000..c52de9e --- /dev/null +++ b/templates/w3/layout/attrs.html @@ -0,0 +1 @@ +{% for name, value in widget.attrs.items %}{% if value is not False %} {{ name }}{% if value is not True %}="{{ value|stringformat:'s' }}"{% endif %}{% endif %}{% endfor %} diff --git a/templates/w3/layout/baseinput.html b/templates/w3/layout/baseinput.html new file mode 100644 index 0000000..ffde644 --- /dev/null +++ b/templates/w3/layout/baseinput.html @@ -0,0 +1,9 @@ +<input type="{{ input.input_type }}" + name="{% if input.name|wordcount > 1 %}{{ input.name|slugify }}{% else %}{{ input.name }}{% endif %}" + value="{{ input.value }}" + {% if input.input_type != "hidden" %} + class="{{ input.field_classes }}" + id="{{ input.id }}" + {% endif %} + {{ input.flat_attrs }} + /> diff --git a/templates/w3/layout/button.html b/templates/w3/layout/button.html new file mode 100644 index 0000000..f41f9cf --- /dev/null +++ b/templates/w3/layout/button.html @@ -0,0 +1 @@ +<button {{ button.flat_attrs }}>{{ button.content }}</button> diff --git a/templates/w3/layout/buttonholder.html b/templates/w3/layout/buttonholder.html new file mode 100644 index 0000000..bad9405 --- /dev/null +++ b/templates/w3/layout/buttonholder.html @@ -0,0 +1,4 @@ +<div {% if buttonholder.css_id %}id="{{ buttonholder.css_id }}"{% endif %} + class="buttonHolder{% if buttonholder.css_class %} {{ buttonholder.css_class }}{% endif %}"> + {{ fields_output }} +</div> diff --git a/templates/w3/layout/checkboxselectmultiple.html b/templates/w3/layout/checkboxselectmultiple.html new file mode 100644 index 0000000..c943fc4 --- /dev/null +++ b/templates/w3/layout/checkboxselectmultiple.html @@ -0,0 +1,29 @@ +{% load crispy_forms_filters %} +{% load l10n %} + +<div {% if field_class %}class="{{ field_class }}"{% endif %}{% if flat_attrs %} {{ flat_attrs }}{% endif %}> + + {% for group, options, index in field|optgroups %} + {% if group %}<strong>{{ group }}</strong>{% endif %} + {% for option in options %} + <div class="{%if use_custom_control%}custom-control custom-checkbox{% if inline_class %} custom-control-inline{% endif %}{% else %}form-check{% if inline_class %} form-check-inline{% endif %}{% endif %}"> + <input type="checkbox" class="{%if use_custom_control%}custom-control-input{% else %}form-check-input{% endif %}{% if field.errors %} is-invalid{% endif %}" name="{{ field.html_name }}" value="{{ option.value|unlocalize }}" {% include "w3/layout/attrs.html" with widget=option %}> + <label class="{%if use_custom_control%}custom-control-label{% else %}form-check-label{% endif %}" for="{{ option.attrs.id }}"> + {{ option.label|unlocalize }} + </label> + {% if field.errors and forloop.last and not inline_class and forloop.parentloop.last %} + {% include 'w3/layout/field_errors_block.html' %} + {% endif %} + </div> + {% endfor %} + {% endfor %} + {% if field.errors and inline_class %} + <div class="w-100 {%if use_custom_control%}custom-control custom-checkbox{% if inline_class %} custom-control-inline{% endif %}{% else %}form-check{% if inline_class %} form-check-inline{% endif %}{% endif %}"> + {# the following input is only meant to allow boostrap to render the error message as it has to be after an invalid input. As the input has no name, no data will be sent. #} + <input type="checkbox" class="custom-control-input {% if field.errors %}is-invalid{%endif%}"> + {% include 'w3/layout/field_errors_block.html' %} + </div> + {% endif %} + + {% include 'w3/layout/help_text.html' %} +</div> diff --git a/templates/w3/layout/checkboxselectmultiple_inline.html b/templates/w3/layout/checkboxselectmultiple_inline.html new file mode 100644 index 0000000..10f0e9e --- /dev/null +++ b/templates/w3/layout/checkboxselectmultiple_inline.html @@ -0,0 +1,14 @@ +{% if field.is_hidden %} + {{ field }} +{% else %} + <div id="div_{{ field.auto_id }}" class="form-group{% if 'form-horizontal' in form_class %} row{% endif %}{% if wrapper_class %} {{ wrapper_class }}{% endif %}{% if field.css_classes %} {{ field.css_classes }}{% endif %}"> + + {% if field.label %} + <label {% if field.id_for_label %}for="{{ field.id_for_label }}" {% endif %} class="{{ label_class }}{% if not inline_class %} col-form-label{% endif %}{% if field.field.required %} requiredField{% endif %}"> + {{ field.label }}{% if field.field.required %}<span class="asteriskField">*</span>{% endif %} + </label> + {% endif %} + + {% include 'w3/layout/checkboxselectmultiple.html' %} + </div> +{% endif %} diff --git a/templates/w3/layout/column.html b/templates/w3/layout/column.html new file mode 100644 index 0000000..e372c38 --- /dev/null +++ b/templates/w3/layout/column.html @@ -0,0 +1,4 @@ +<div {% if div.css_id %}id="{{ div.css_id }}"{% endif %} + class="{% if 'col' in div.css_class %}{{ div.css_class|default:'' }}{% else %}col-md {{ div.css_class|default:'' }}{% endif %}" {{ div.flat_attrs }}> + {{ fields }} +</div> diff --git a/templates/w3/layout/div.html b/templates/w3/layout/div.html new file mode 100644 index 0000000..1651ddc --- /dev/null +++ b/templates/w3/layout/div.html @@ -0,0 +1,4 @@ +<div {% if div.css_id %}id="{{ div.css_id }}"{% endif %} + {% if div.css_class %}class="{{ div.css_class }}"{% endif %} {{ div.flat_attrs }}> + {{ fields }} +</div> diff --git a/templates/w3/layout/field_errors.html b/templates/w3/layout/field_errors.html new file mode 100644 index 0000000..f649872 --- /dev/null +++ b/templates/w3/layout/field_errors.html @@ -0,0 +1,5 @@ +{% if form_show_errors and field.errors %} + {% for error in field.errors %} + <span id="error_{{ forloop.counter }}_{{ field.auto_id }}" class="invalid-feedback"><strong>{{ error }}</strong></span> + {% endfor %} +{% endif %} diff --git a/templates/w3/layout/field_errors_block.html b/templates/w3/layout/field_errors_block.html new file mode 100644 index 0000000..e788b79 --- /dev/null +++ b/templates/w3/layout/field_errors_block.html @@ -0,0 +1,5 @@ +{% if form_show_errors and field.errors %} + {% for error in field.errors %} + <p id="error_{{ forloop.counter }}_{{ field.auto_id }}" class="invalid-feedback"><strong>{{ error }}</strong></p> + {% endfor %} +{% endif %} diff --git a/templates/w3/layout/field_file.html b/templates/w3/layout/field_file.html new file mode 100644 index 0000000..f58268a --- /dev/null +++ b/templates/w3/layout/field_file.html @@ -0,0 +1,52 @@ +{% load crispy_forms_field %} + +<div class="{{ field_class }} mb-2"> +{% for widget in field.subwidgets %} +{% if widget.data.is_initial %} +<div class="input-group mb-2"> + <div class="input-group-prepend"> + <span class="input-group-text">{{ widget.data.initial_text }}</span> + </div> + <div class="form-control d-flex h-auto"> + <span class="text-break" style="flex-grow:1;min-width:0"> + <a href="{{ field.value.url }}">{{ field.value }}</a> + </span> + {% if not widget.data.required %} + <span class="align-self-center ml-2"> + <span class="custom-control custom-checkbox"> + <input type="checkbox" name="{{ widget.data.checkbox_name }}" id="{{ widget.data.checkbox_id }}" class="custom-control-input"{% if field.field.disabled %} disabled{% endif %} > + <label class="custom-control-label mb-0" for="{{ widget.data.checkbox_id }}">{{ widget.data.clear_checkbox_label }}</label> + </span> + </span> + {% endif %} + </div> +</div> +<div class="input-group mb-0"> + <div class="input-group-prepend"> + <span class="input-group-text">{{ widget.data.input_text }}</span> + </div> +{% endif %} + <div class="form-control custom-file{% if field.errors %} is-invalid{%endif%}" style="border:0"> + <input type="{{ widget.data.type }}" name="{{ widget.data.name }}" class="custom-file-input{% if widget.data.attrs.class %} {{ widget.data.attrs.class }}{% endif %}{% if field.errors %} is-invalid{%endif%}"{% if field.field.disabled %} disabled{% endif %}{% for name, value in widget.data.attrs.items %}{% if value is not False and name != 'class' %} {{ name }}{% if value is not True %}="{{ value|stringformat:'s' }}"{% endif %}{% endif %}{% endfor %}> + <label class="custom-file-label text-truncate" for="{{ field.id_for_label }}">---</label> + <script type="text/javascript" id="script-{{ field.id_for_label }}"> + document.getElementById("script-{{ field.id_for_label }}").parentNode.querySelector('.custom-file-input').onchange = function (e){ + var filenames = ""; + for (let i=0;i<e.target.files.length;i++){ + filenames+=(i>0?", ":"")+e.target.files[i].name; + } + e.target.parentNode.querySelector('.custom-file-label').textContent=filenames; + } + </script> + </div> + {% if not widget.data.is_initial %} + {% include 'w3/layout/help_text_and_errors.html' %} + {% endif %} +{% if widget.data.is_initial %} +</div> +<div class="input-group mb-0"> +{% include 'w3/layout/help_text_and_errors.html' %} +</div> +{% endif %} +{% endfor %} +</div> diff --git a/templates/w3/layout/field_with_buttons.html b/templates/w3/layout/field_with_buttons.html new file mode 100644 index 0000000..234b310 --- /dev/null +++ b/templates/w3/layout/field_with_buttons.html @@ -0,0 +1,17 @@ +{% load crispy_forms_field %} + +<div{% if div.css_id %} id="{{ div.css_id }}"{% endif %} class="form-group{% if 'form-horizontal' in form_class %} row{% endif %}{% if wrapper_class %} {{ wrapper_class }}{% endif %}{% if field.css_classes %} {{ field.css_classes }}{% endif %}{% if div.css_class %} {{ div.css_class }}{% endif %}" {{ div.flat_attrs }}> + {% if field.label and form_show_labels %} + <label for="{{ field.id_for_label }}" class="{% if 'form-horizontal' in form_class %}col-form-label {% endif %}{{ label_class }}{% if field.field.required %} requiredField{% endif %}"> + {{ field.label }}{% if field.field.required %}<span class="asteriskField">*</span>{% endif %} + </label> + {% endif %} + + <div class="{{ field_class }}"> + <div class="input-group {% if div.input_size %} {{ div.input_size }}{% endif %}"> + {% crispy_field field 'class' 'form-control' %} + <span class="input-group-append{% if active %} active{% endif %}">{{ buttons }}</span> + </div> + {% include 'w3/layout/help_text_and_errors.html' %} + </div> +</div> diff --git a/templates/w3/layout/fieldset.html b/templates/w3/layout/fieldset.html new file mode 100644 index 0000000..85ae30b --- /dev/null +++ b/templates/w3/layout/fieldset.html @@ -0,0 +1,6 @@ +<fieldset {% if fieldset.css_id %}id="{{ fieldset.css_id }}"{% endif %} + {% if fieldset.css_class%}class="{{ fieldset.css_class }}"{% endif %} + {{ fieldset.flat_attrs }}> + {% if legend %}<legend>{{ legend }}</legend>{% endif %} + {{ fields }} +</fieldset> diff --git a/templates/w3/layout/formactions.html b/templates/w3/layout/formactions.html new file mode 100644 index 0000000..04fed0b --- /dev/null +++ b/templates/w3/layout/formactions.html @@ -0,0 +1,9 @@ +<div{% if formactions.flat_attrs %} {{ formactions.flat_attrs }}{% endif %} class="form-group{% if 'form-horizontal' in form_class %} row{% endif %} {{ formactions.css_class }}" {% if formactions.id %} id="{{ formactions.id }}"{% endif %}> + {% if label_class %} + <div class="aab {{ label_class }}"></div> + {% endif %} + + <div class="{{ field_class }}"> + {{ fields_output }} + </div> +</div> diff --git a/templates/w3/layout/help_text.html b/templates/w3/layout/help_text.html new file mode 100644 index 0000000..3b5695c --- /dev/null +++ b/templates/w3/layout/help_text.html @@ -0,0 +1,7 @@ +{% if field.help_text %} + {% if help_text_inline %} + <span id="hint_{{ field.auto_id }}" class="text-muted">{{ field.help_text|safe }}</span> + {% else %} + <small id="hint_{{ field.auto_id }}" class="form-text text-muted">{{ field.help_text|safe }}</small> + {% endif %} +{% endif %} diff --git a/templates/w3/layout/help_text_and_errors.html b/templates/w3/layout/help_text_and_errors.html new file mode 100644 index 0000000..7313246 --- /dev/null +++ b/templates/w3/layout/help_text_and_errors.html @@ -0,0 +1,13 @@ +{% if help_text_inline and not error_text_inline %} + {% include 'w3/layout/help_text.html' %} +{% endif %} + +{% if error_text_inline %} + {% include 'w3/layout/field_errors.html' %} +{% else %} + {% include 'w3/layout/field_errors_block.html' %} +{% endif %} + +{% if not help_text_inline %} + {% include 'w3/layout/help_text.html' %} +{% endif %} diff --git a/templates/w3/layout/inline_field.html b/templates/w3/layout/inline_field.html new file mode 100644 index 0000000..aff23bb --- /dev/null +++ b/templates/w3/layout/inline_field.html @@ -0,0 +1,29 @@ +{% load crispy_forms_field %} + +{% if field.is_hidden %} + {{ field }} +{% else %} + {% if field|is_checkbox %} + <div id="div_{{ field.auto_id }}" class="form-check form-check-inline{% if wrapper_class %} {{ wrapper_class }}{% endif %}"> + <label for="{{ field.id_for_label }}" class="form-check-label{% if field.field.required %} requiredField{% endif %}"> + {% if field.errors %} + {% crispy_field field 'class' 'form-check-input is-invalid' %} + {% else %} + {% crispy_field field 'class' 'form-check-input' %} + {% endif %} + {{ field.label }} + </label> + </div> + {% else %} + <div id="div_{{ field.auto_id }}" class="input-group{% if wrapper_class %} {{ wrapper_class }}{% endif %}"> + <label for="{{ field.id_for_label }}" class="sr-only{% if field.field.required %} requiredField{% endif %}"> + {{ field.label }} + </label> + {% if field.errors %} + {% crispy_field field 'placeholder' field.label 'class' 'form-control is-invalid' %} + {% else %} + {% crispy_field field 'placeholder' field.label 'class' 'form-control' %} + {% endif %} + </div> + {% endif %} +{% endif %} diff --git a/templates/w3/layout/modal.html b/templates/w3/layout/modal.html new file mode 100644 index 0000000..ab18198 --- /dev/null +++ b/templates/w3/layout/modal.html @@ -0,0 +1,15 @@ +<div id="{{ modal.css_id }}" class="modal fade {{ modal.css_class }}" {{ modal.flat_attrs }}> + <div class="modal-dialog modal-lg" role="document"> + <div class="modal-content"> + <div class="modal-header"> + <h5 class="modal-title {{ modal.title_class }}" id="{{ modal.title_id }}">{{ modal.title }}</h5> + <button type="button" class="close" data-dismiss="modal" aria-label="Close"> + <span aria-hidden="true" style="float: left">×</span> + </button> + </div> + <div class="modal-body"> + {{ fields }} + </div> + </div> + </div> +</div> diff --git a/templates/w3/layout/multifield.html b/templates/w3/layout/multifield.html new file mode 100644 index 0000000..0a2c050 --- /dev/null +++ b/templates/w3/layout/multifield.html @@ -0,0 +1,27 @@ +{% load crispy_forms_field %} + +{% if field.is_hidden %} + {{ field }} +{% else %} + + {% if field.label %} + <label for="{{ field.id_for_label }}"{% if labelclass %} class="{{ labelclass }}"{% endif %}> + {% endif %} + + {% if field|is_checkbox %} + {% crispy_field field %} + {% endif %} + + {% if field.label %} + {{ field.label }} + {% endif %} + + {% if not field|is_checkbox %} + {% crispy_field field %} + {% endif %} + + {% if field.label %} + </label> + {% endif %} + +{% endif %} diff --git a/templates/w3/layout/prepended_appended_text.html b/templates/w3/layout/prepended_appended_text.html new file mode 100644 index 0000000..1cccf79 --- /dev/null +++ b/templates/w3/layout/prepended_appended_text.html @@ -0,0 +1,51 @@ +{% load crispy_forms_field %} + +{% if field.is_hidden %} + {{ field }} +{% else %} + <div id="div_{{ field.auto_id }}" class="form-group{% if wrapper_class %} {{ wrapper_class }}{% endif %}{% if 'form-horizontal' in form_class %} row{% endif %}{% if form_group_wrapper_class %} {{ form_group_wrapper_class }}{% endif %}{% if field.css_classes %} {{ field.css_classes }}{% endif %}"> + + {% if field.label and form_show_labels %} + <label for="{{ field.id_for_label }}" class="{% if 'form-horizontal' in form_class %}col-form-label {% endif %}{{ label_class }}{% if field.field.required %} requiredField{% endif %}"> + {{ field.label }}{% if field.field.required %}<span class="asteriskField">*</span>{% endif %} + </label> + {% endif %} + + <div class="{{ field_class }}"> + <div class="input-group{% if input_size %} {{ input_size }}{% endif %}"> + {% if crispy_prepended_text %} + <div class="input-group-prepend{% if active %} active{% endif %}"> + <span class="input-group-text">{{ crispy_prepended_text }}</span> + </div> + {% endif %} + {% if field|is_select and use_custom_control %} + {% if field.errors %} + {% crispy_field field 'class' 'custom-select is-invalid' %} + {% else %} + {% crispy_field field 'class' 'custom-select' %} + {% endif %} + {% else %} + {% if field.errors %} + {% crispy_field field 'class' 'form-control is-invalid' %} + {% else %} + {% crispy_field field 'class' 'form-control' %} + {% endif %} + {% endif %} + {% if crispy_appended_text %} + <div class="input-group-append{% if active %} active{% endif %}"> + <span class="input-group-text">{{ crispy_appended_text }}</span> + </div> + {% endif %} + {% if error_text_inline %} + {% include 'w3/layout/field_errors.html' %} + {% else %} + {% include 'w3/layout/field_errors_block.html' %} + {% endif %} + </div> + {% if not help_text_inline %} + {% include 'w3/layout/help_text.html' %} + {% endif %} + </div> + + </div> +{% endif %} diff --git a/templates/w3/layout/radioselect.html b/templates/w3/layout/radioselect.html new file mode 100644 index 0000000..d9c9e5a --- /dev/null +++ b/templates/w3/layout/radioselect.html @@ -0,0 +1,29 @@ +{% load crispy_forms_filters %} +{% load l10n %} + +<div {% if field_class %}class="{{ field_class }}"{% endif %}{% if flat_attrs %} {{ flat_attrs }}{% endif %}> + + {% for group, options, index in field|optgroups %} + {% if group %}<strong>{{ group }}</strong>{% endif %} + {% for option in options %} + <div class="{%if use_custom_control%}custom-control custom-radio{% if inline_class %} custom-control-inline{% endif %}{% else %}form-check{% if inline_class %} form-check-inline{% endif %}{% endif %}"> + <input type="radio" class="{%if use_custom_control%}custom-control-input{% else %}form-check-input{% endif %}{% if field.errors %} is-invalid{% endif %}" name="{{ field.html_name }}" value="{{ option.value|unlocalize }}" {% include "w3/layout/attrs.html" with widget=option %}> + <label class="{%if use_custom_control%}custom-control-label{% else %}form-check-label{% endif %}" for="{{ option.attrs.id }}"> + {{ option.label|unlocalize }} + </label> + {% if field.errors and forloop.last and not inline_class and forloop.parentloop.last %} + {% include 'w3/layout/field_errors_block.html' %} + {% endif %} + </div> + {% endfor %} + {% endfor %} + {% if field.errors and inline_class %} + <div class="w-100 {%if use_custom_control%}custom-control custom-radio{% if inline_class %} custom-control-inline{% endif %}{% else %}form-check{% if inline_class %} form-check-inline{% endif %}{% endif %}"> + {# the following input is only meant to allow boostrap to render the error message as it has to be after an invalid input. As the input has no name, no data will be sent. #} + <input type="checkbox" class="custom-control-input {% if field.errors %}is-invalid{%endif%}"> + {% include 'w3/layout/field_errors_block.html' %} + </div> + {% endif %} + + {% include 'w3/layout/help_text.html' %} +</div> diff --git a/templates/w3/layout/radioselect_inline.html b/templates/w3/layout/radioselect_inline.html new file mode 100644 index 0000000..22ba321 --- /dev/null +++ b/templates/w3/layout/radioselect_inline.html @@ -0,0 +1,14 @@ +{% if field.is_hidden %} + {{ field }} +{% else %} + <div id="div_{{ field.auto_id }}" class="form-group{% if 'form-horizontal' in form_class %} row{% endif %}{% if wrapper_class %} {{ wrapper_class }}{% endif %}{% if field.css_classes %} {{ field.css_classes }}{% endif %}"> + + {% if field.label %} + <label {% if field.id_for_label %}for="{{ field.id_for_label }}" {% endif %}class="{{ label_class }}{% if not inline_class %} col-form-label{% endif %}{% if field.field.required %} requiredField{% endif %}"> + {{ field.label }}{% if field.field.required %}<span class="asteriskField">*</span>{% endif %} + </label> + {% endif %} + + {% include 'w3/layout/radioselect.html' %} + </div> +{% endif %} diff --git a/templates/w3/layout/row.html b/templates/w3/layout/row.html new file mode 100644 index 0000000..6922605 --- /dev/null +++ b/templates/w3/layout/row.html @@ -0,0 +1,3 @@ +<div {% if div.css_id %}id="{{ div.css_id }}"{% endif %} class="form-row {{ div.css_class|default:'' }}" {{ div.flat_attrs }}> + {{ fields }} +</div> diff --git a/templates/w3/layout/tab-link.html b/templates/w3/layout/tab-link.html new file mode 100644 index 0000000..8f68f7c --- /dev/null +++ b/templates/w3/layout/tab-link.html @@ -0,0 +1 @@ +<li class="nav-item"><a class="nav-link{% if 'active' in link.css_class %} active{% endif %}" href="#{{ link.css_id }}" data-toggle="tab">{{ link.name|capfirst }}{% if tab.errors %}!{% endif %}</a></li> diff --git a/templates/w3/layout/tab.html b/templates/w3/layout/tab.html new file mode 100644 index 0000000..59a03bd --- /dev/null +++ b/templates/w3/layout/tab.html @@ -0,0 +1,6 @@ +<ul{% if tabs.css_id %} id="{{ tabs.css_id }}"{% endif %} class="nav nav-tabs"> + {{ links }} +</ul> +<div class="tab-content card-body"> + {{ content }} +</div> diff --git a/templates/w3/layout/uneditable_input.html b/templates/w3/layout/uneditable_input.html new file mode 100644 index 0000000..0af45e4 --- /dev/null +++ b/templates/w3/layout/uneditable_input.html @@ -0,0 +1,14 @@ +{% load crispy_forms_field %} +<div id="div_{{ field.auto_id }}" class="form-group{% if 'form-horizontal' in form_class %} row{% endif %}{% if form_show_errors and field.errors %} error{% endif %}{% if field.css_classes %} {{ field.css_classes }}{% endif %}"> + <label class="{% if 'form-horizontal' in form_class %}col-form-label {% endif %}{{ label_class }}{% if field.field.required %} requiredField{% endif %}">{{ field.label }}{% if field.field.required %}<span class="asteriskField">*</span>{% endif %}</label> + <div class="{{ field_class }}"> + {% if field|is_select and use_custom_control %} + {% crispy_field field 'class' 'custom-select' 'disabled' 'disabled' %} + {% elif field|is_file %} + {% crispy_field field 'class' 'form-control-file' 'disabled' 'disabled' %} + {% else %} + {% crispy_field field 'class' 'form-control' 'disabled' 'disabled' %} + {% endif %} + {% include 'w3/layout/help_text.html' %} + </div> +</div> diff --git a/templates/w3/table_inline_formset.html b/templates/w3/table_inline_formset.html new file mode 100644 index 0000000..a4b951d --- /dev/null +++ b/templates/w3/table_inline_formset.html @@ -0,0 +1,57 @@ +{% load crispy_forms_tags %} +{% load crispy_forms_utils %} +{% load crispy_forms_field %} + +{% specialspaceless %} +{% if formset_tag %} +<form {{ flat_attrs }} method="{{ form_method }}" {% if formset.is_multipart %} enctype="multipart/form-data"{% endif %}> +{% endif %} + {% if formset_method|lower == 'post' and not disable_csrf %} + {% csrf_token %} + {% endif %} + + <div> + {{ formset.management_form|crispy }} + </div> + + <table{% if form_id %} id="{{ form_id }}_table"{% endif%} class="table table-striped table-sm"> + <thead> + {% if formset.readonly and not formset.queryset.exists %} + {% else %} + <tr> + {% for field in formset.forms.0 %} + {% if field.label and not field.is_hidden %} + <th for="{{ field.auto_id }}" class="col-form-label {% if field.field.required %}requiredField{% endif %}"> + {{ field.label }}{% if field.field.required and not field|is_checkbox %}<span class="asteriskField">*</span>{% endif %} + </th> + {% endif %} + {% endfor %} + </tr> + {% endif %} + </thead> + + <tbody> + <tr class="d-none empty-form"> + {% for field in formset.empty_form %} + {% include 'w3/field.html' with tag="td" form_show_labels=False %} + {% endfor %} + </tr> + + {% for form in formset %} + {% if form_show_errors and not form.is_extra %} + {% include "w3/errors.html" %} + {% endif %} + + <tr> + {% for field in form %} + {% include 'w3/field.html' with tag="td" form_show_labels=False %} + {% endfor %} + </tr> + {% endfor %} + </tbody> + </table> + + {% include "w3/inputs.html" %} + +{% if formset_tag %}</form>{% endif %} +{% endspecialspaceless %} diff --git a/templates/w3/uni_form.html b/templates/w3/uni_form.html new file mode 100644 index 0000000..6b63a3f --- /dev/null +++ b/templates/w3/uni_form.html @@ -0,0 +1,11 @@ +{% load crispy_forms_utils %} + +{% specialspaceless %} + {% if include_media %}{{ form.media }}{% endif %} + {% if form_show_errors %} + {% include "w3/errors.html" %} + {% endif %} + {% for field in form %} + {% include field_template %} + {% endfor %} +{% endspecialspaceless %} diff --git a/templates/w3/uni_formset.html b/templates/w3/uni_formset.html new file mode 100644 index 0000000..5c6cd36 --- /dev/null +++ b/templates/w3/uni_formset.html @@ -0,0 +1,8 @@ +{% with formset.management_form as form %} + {% include 'w3/uni_form.html' %} +{% endwith %} +{% for form in formset %} + <div class="multiField"> + {% include 'w3/uni_form.html' %} + </div> +{% endfor %} diff --git a/templates/w3/whole_uni_form.html b/templates/w3/whole_uni_form.html new file mode 100644 index 0000000..df71b0b --- /dev/null +++ b/templates/w3/whole_uni_form.html @@ -0,0 +1,14 @@ +{% load crispy_forms_utils %} + +{% specialspaceless %} +{% if form_tag %}<form {{ flat_attrs }} method="{{ form_method }}" {% if form.is_multipart %} enctype="multipart/form-data"{% endif %}>{% endif %} + {% if form_method|lower == 'post' and not disable_csrf %} + {% csrf_token %} + {% endif %} + + {% include "w3/display_form.html" %} + + {% include "w3/inputs.html" %} + +{% if form_tag %}</form>{% endif %} +{% endspecialspaceless %} diff --git a/templates/w3/whole_uni_formset.html b/templates/w3/whole_uni_formset.html new file mode 100644 index 0000000..ba40759 --- /dev/null +++ b/templates/w3/whole_uni_formset.html @@ -0,0 +1,30 @@ +{% load crispy_forms_tags %} +{% load crispy_forms_utils %} + +{% specialspaceless %} +{% if formset_tag %} +<form {{ flat_attrs }} method="{{ form_method }}" {% if formset.is_multipart %} enctype="multipart/form-data"{% endif %}> +{% endif %} + {% if formset_method|lower == 'post' and not disable_csrf %} + {% csrf_token %} + {% endif %} + + <div> + {{ formset.management_form|crispy }} + </div> + + {% include "w3/errors_formset.html" %} + + {% for form in formset %} + {% include "w3/display_form.html" %} + {% endfor %} + + {% if inputs %} + <div class="form-actions"> + {% for input in inputs %} + {% include "w3/layout/baseinput.html" %} + {% endfor %} + </div> + {% endif %} +{% if formset_tag %}</form>{% endif %} +{% endspecialspaceless %} |