aboutsummaryrefslogtreecommitdiffstats
path: root/pydis_site
diff options
context:
space:
mode:
authorGravatar Gareth Coles <[email protected]>2019-04-12 14:06:40 +0100
committerGravatar Gareth Coles <[email protected]>2019-04-12 14:06:40 +0100
commitdbe815fd1c148135426edbe15f9dcdf016d689d9 (patch)
tree00a86fc751d2ff3e477b92af6545bc777e1d4562 /pydis_site
parentFinish initial article creation form (diff)
More forms work - Boolean is done!
Diffstat (limited to 'pydis_site')
-rw-r--r--pydis_site/apps/home/templatetags/wiki_extra.py29
-rw-r--r--pydis_site/templates/wiki/forms/fields/boolean.html42
-rw-r--r--pydis_site/templates/wiki/forms/fields/char.html71
-rw-r--r--pydis_site/templates/wiki/forms/fields/in_place_render.html31
-rw-r--r--pydis_site/templates/wiki/forms/fields/model_choice.html31
-rw-r--r--pydis_site/templates/wiki/includes/formfield.html32
6 files changed, 177 insertions, 59 deletions
diff --git a/pydis_site/apps/home/templatetags/wiki_extra.py b/pydis_site/apps/home/templatetags/wiki_extra.py
index 9749a411..03ca8210 100644
--- a/pydis_site/apps/home/templatetags/wiki_extra.py
+++ b/pydis_site/apps/home/templatetags/wiki_extra.py
@@ -1,13 +1,14 @@
from django import template
from django.forms import (
- BooleanField, CharField, ChoiceField, ComboField, DateField, DateTimeField, DecimalField, DurationField, EmailField,
- Field, FileField, FilePathField, FloatField, GenericIPAddressField, ImageField, IntegerField, ModelChoiceField,
- ModelMultipleChoiceField, MultiValueField, MultipleChoiceField, NullBooleanField, RegexField, SlugField,
- SplitDateTimeField, TimeField, TypedChoiceField, TypedMultipleChoiceField, URLField, UUIDField, BoundField)
+ BooleanField, BoundField, CharField, ChoiceField, ComboField, DateField, DateTimeField, DecimalField, DurationField,
+ EmailField, Field, FileField, FilePathField, FloatField, GenericIPAddressField, ImageField, IntegerField,
+ ModelChoiceField, ModelMultipleChoiceField, MultiValueField, MultipleChoiceField, NullBooleanField, RegexField,
+ SlugField, SplitDateTimeField, TimeField, TypedChoiceField, TypedMultipleChoiceField, URLField, UUIDField)
from django.template import Template
from django.template.loader import get_template
from django.utils.safestring import mark_safe
from wiki.editors.markitup import MarkItUpWidget
+from wiki.plugins.notifications.forms import SettingsModelChoiceField
TEMPLATE_PATH = "wiki/forms/fields/{0}.html"
@@ -42,23 +43,33 @@ TEMPLATES = {
ModelChoiceField: TEMPLATE_PATH.format("model_choice"),
ModelMultipleChoiceField: TEMPLATE_PATH.format("model_multiple_choice"),
+
+ SettingsModelChoiceField: TEMPLATE_PATH.format("in_place_render"),
}
register = template.Library()
+def get_unbound_field(field: BoundField):
+ while isinstance(field, BoundField):
+ field = field.field
+
+ return field
+
+
@register.simple_tag
def render_field(field: Field):
if isinstance(field, BoundField):
- template_path = TEMPLATES.get(field.field.__class__)
- is_markitup = isinstance(field.field.widget, MarkItUpWidget)
+ unbound_field = get_unbound_field(field)
else:
- template_path = TEMPLATES.get(field.__class__)
- is_markitup = isinstance(field.widget, MarkItUpWidget)
+ unbound_field = field
+
+ template_path = TEMPLATES.get(unbound_field.__class__)
+ is_markitup = isinstance(unbound_field.widget, MarkItUpWidget)
if not template_path:
- raise NotImplementedError(f"Unknown field type: {field.__class__}")
+ raise NotImplementedError(f"Unknown field type: {unbound_field.__class__}")
template_obj: Template = get_template(template_path)
context = {"field": field, "is_markitup": is_markitup}
diff --git a/pydis_site/templates/wiki/forms/fields/boolean.html b/pydis_site/templates/wiki/forms/fields/boolean.html
new file mode 100644
index 00000000..9d054083
--- /dev/null
+++ b/pydis_site/templates/wiki/forms/fields/boolean.html
@@ -0,0 +1,42 @@
+<div id="div_{{ field.auto_id }}" class="field is-horizontal{% if field.errors %} is-danger{% endif %}">
+ <div class="field-label">
+ <label class="label {% if field.errors %} is-danger{% endif %}">
+ {{ field.label | safe }} {% if field.field.required %}<span class="asterisk has-text-danger">*</span>{% endif %}
+ </label>
+
+ {% if field.help_text %}
+ <p id="hint_{{ field.auto_id }}" class="help has-text-grey">
+ {{ field.help_text|safe }}
+ </p>
+ {% endif %}
+ </div>
+
+ <div class="field-body">
+ <div class="field">
+ <div class="control">
+ <input class="switch is-rounded{% if field.errors %} is-danger{% endif %}"
+ type="checkbox"
+ id="{{ field.auto_id }}"
+ name="{{ field.name }}"
+ {% if field.value %}checked="checked"{% endif %}
+
+ {% if field.required %}required{% endif %}
+ {% if field.max_length %}maxlength="{{ field.max_length }}"{% endif %}
+ {% if field.min_length %}minlength="{{ field.min_length }}"{% endif %}
+ {% if field.empty_value %}placeholder="{{ field.empty_value }}"{% endif %}
+ />
+ <label for="{{ field.auto_id }}" class="label {% if field.errors %} is-danger{% endif %}">
+ &nbsp;
+ </label>
+ </div>
+
+ {% if field.errors %}
+ <p class="help is-danger">
+ {% for error in field.errors %}
+ <span id="error_{{ forloop.counter }}_{{ field.auto_id }}">{{ error }}</span><br />
+ {% endfor %}
+ </p>
+ {% endif %}
+ </div>
+ </div>
+</div>
diff --git a/pydis_site/templates/wiki/forms/fields/char.html b/pydis_site/templates/wiki/forms/fields/char.html
index ccae0630..9539f6eb 100644
--- a/pydis_site/templates/wiki/forms/fields/char.html
+++ b/pydis_site/templates/wiki/forms/fields/char.html
@@ -1,21 +1,54 @@
-{% if is_markitup %}
- <textarea class="textarea is-family-monospace{% if field.errors %} is-danger{% endif %}"
- id="{{ field.auto_id }}"
- rows = 10
+<div id="div_{{ field.auto_id }}" class="field is-horizontal{% if field.errors %} is-danger{% endif %}">
+ <div class="field-label">
+ {% if field.label %}
+ <label for="{{ field.auto_id }}" class="label {% if field.errors %} is-danger{% endif %}">
+ {{ field.label | safe }} {% if field.field.required %}<span class="asterisk has-text-danger">*</span>{% endif %}
+ </label>
+ {% endif %}
- {% if field.required %}required{% endif %}
- {% if field.max_length %}maxlength="{{ field.max_length }}"{% endif %}
- {% if field.min_length %}minlength="{{ field.min_length }}"{% endif %}
- {% if field.empty_value %}placeholder="{{ field.empty_value }}"{% endif %}
- ></textarea>
-{% else %}
- <input class="input{% if field.errors %} is-danger{% endif %}"
- type="text"
- id="{{ field.auto_id }}"
+ {% if field.help_text %}
+ <p id="hint_{{ field.auto_id }}" class="help has-text-grey">
+ {{ field.help_text|safe }}
+ </p>
+ {% endif %}
+ </div>
- {% if field.required %}required{% endif %}
- {% if field.max_length %}maxlength="{{ field.max_length }}"{% endif %}
- {% if field.min_length %}minlength="{{ field.min_length }}"{% endif %}
- {% if field.empty_value %}placeholder="{{ field.empty_value }}"{% endif %}
- />
-{% endif %}
+ <div class="field-body">
+ <div class="field">
+ <div class="control">
+ {% if is_markitup %}
+ <textarea class="textarea is-family-monospace{% if field.errors %} is-danger{% endif %}"
+ id="{{ field.auto_id }}"
+ name="{{ field.name }}"
+ rows = 10
+
+ {% if field.required %}required{% endif %}
+ {% if field.max_length %}maxlength="{{ field.max_length }}"{% endif %}
+ {% if field.min_length %}minlength="{{ field.min_length }}"{% endif %}
+ {% if field.empty_value %}placeholder="{{ field.empty_value }}"{% endif %}
+ >{% if field.value %}{{ field.value }}{% endif %}</textarea>
+ {% else %}
+ <input class="input{% if field.errors %} is-danger{% endif %}"
+ type="text"
+ id="{{ field.auto_id }}"
+ name="{{ field.name }}"
+
+ {% if field.required %}required{% endif %}
+ {% if field.max_length %}maxlength="{{ field.max_length }}"{% endif %}
+ {% if field.min_length %}minlength="{{ field.min_length }}"{% endif %}
+ {% if field.empty_value %}placeholder="{{ field.empty_value }}"{% endif %}
+ {% if field.value %}value="{{ field.value }}"{% endif %}
+ />
+ {% endif %}
+ </div>
+
+ {% if field.errors %}
+ <p class="help is-danger">
+ {% for error in field.errors %}
+ <span id="error_{{ forloop.counter }}_{{ field.auto_id }}">{{ error }}</span><br />
+ {% endfor %}
+ </p>
+ {% endif %}
+ </div>
+ </div>
+</div>
diff --git a/pydis_site/templates/wiki/forms/fields/in_place_render.html b/pydis_site/templates/wiki/forms/fields/in_place_render.html
new file mode 100644
index 00000000..47e115fe
--- /dev/null
+++ b/pydis_site/templates/wiki/forms/fields/in_place_render.html
@@ -0,0 +1,31 @@
+<div id="div_{{ field.auto_id }}" class="field is-horizontal{% if field.errors %} is-danger{% endif %}">
+ <div class="field-label">
+ {% if field.label %}
+ <label for="{{ field.auto_id }}" class="label {% if field.errors %} is-danger{% endif %}">
+ IN PLACE RENDER: {{ field.label | safe }} {% if field.field.required %}<span class="asterisk has-text-danger">*</span>{% endif %}
+ </label>
+ {% endif %}
+
+ {% if field.help_text %}
+ <p id="hint_{{ field.auto_id }}" class="help has-text-grey">
+ {{ field.help_text|safe }}
+ </p>
+ {% endif %}
+ </div>
+
+ <div class="field-body">
+ <div class="field">
+ <div class="control">
+ {{ field }}
+ </div>
+
+ {% if field.errors %}
+ <p class="help is-danger">
+ {% for error in field.errors %}
+ <span id="error_{{ forloop.counter }}_{{ field.auto_id }}">{{ error }}</span><br />
+ {% endfor %}
+ </p>
+ {% endif %}
+ </div>
+ </div>
+</div>
diff --git a/pydis_site/templates/wiki/forms/fields/model_choice.html b/pydis_site/templates/wiki/forms/fields/model_choice.html
new file mode 100644
index 00000000..f1104b98
--- /dev/null
+++ b/pydis_site/templates/wiki/forms/fields/model_choice.html
@@ -0,0 +1,31 @@
+<div id="div_{{ field.auto_id }}" class="field is-horizontal{% if field.errors %} is-danger{% endif %}">
+ <div class="field-label">
+ {% if field.label %}
+ <label for="{{ field.auto_id }}" class="label {% if field.errors %} is-danger{% endif %}">
+ MODEL CHOICE: {{ field.label | safe }} {% if field.field.required %}<span class="asterisk has-text-danger">*</span>{% endif %}
+ </label>
+ {% endif %}
+
+ {% if field.help_text %}
+ <p id="hint_{{ field.auto_id }}" class="help has-text-grey">
+ {{ field.help_text|safe }}
+ </p>
+ {% endif %}
+ </div>
+
+ <div class="field-body">
+ <div class="field">
+ <div class="control">
+ {{ field }}
+ </div>
+
+ {% if field.errors %}
+ <p class="help is-danger">
+ {% for error in field.errors %}
+ <span id="error_{{ forloop.counter }}_{{ field.auto_id }}">{{ error }}</span><br />
+ {% endfor %}
+ </p>
+ {% endif %}
+ </div>
+ </div>
+</div>
diff --git a/pydis_site/templates/wiki/includes/formfield.html b/pydis_site/templates/wiki/includes/formfield.html
index 9f68fb26..c466719b 100644
--- a/pydis_site/templates/wiki/includes/formfield.html
+++ b/pydis_site/templates/wiki/includes/formfield.html
@@ -3,35 +3,5 @@
{% if field.is_hidden %}
{{ field }}
{% else %}
- <div id="div_{{ field.auto_id }}" class="field is-horizontal{% if field.errors %} is-danger{% endif %}">
- <div class="field-label">
- {% if field.label %}
- <label for="div_{{ field.auto_id }}" class="label {% if field.errors %} is-danger{% endif %}">
- {{ field.label | safe }} {% if field.field.required %}<span class="asterisk has-text-danger">*</span>{% endif %}
- </label>
- {% endif %}
-
- {% if field.help_text %}
- <p id="hint_{{ field.auto_id }}" class="help">
- {{ field.help_text|safe }}
- </p>
- {% endif %}
- </div>
-
- <div class="field-body">
- <div class="field">
- <div class="control">
- {% render_field field %}
- </div>
-
- {% if field.errors %}
- <p class="help is-danger">
- {% for error in field.errors %}
- <span id="error_{{ forloop.counter }}_{{ field.auto_id }}">{{ error }}</span><br />
- {% endfor %}
- </p>
- {% endif %}
- </div>
- </div>
- </div>
+ {% render_field field %}
{% endif %}