aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorGravatar Gareth Coles <[email protected]>2019-04-11 20:34:18 +0100
committerGravatar Gareth Coles <[email protected]>2019-04-11 20:34:18 +0100
commited8311057579de883fc010f9dd5e1bb331970418 (patch)
treee5b6d1ad7b2f9aa1758c8946b8b08356a2075453
parentSome work towards initial pages and forms (diff)
Lots of extra form input handling.
But now the root article creator form renders nicely!
Diffstat (limited to '')
-rw-r--r--pydis_site/apps/home/templatetags/wiki_extra.py66
-rw-r--r--pydis_site/templates/wiki/base.html7
-rw-r--r--pydis_site/templates/wiki/create_root.html15
-rw-r--r--pydis_site/templates/wiki/forms/fields/char.html21
-rw-r--r--pydis_site/templates/wiki/includes/formfield.html27
5 files changed, 114 insertions, 22 deletions
diff --git a/pydis_site/apps/home/templatetags/wiki_extra.py b/pydis_site/apps/home/templatetags/wiki_extra.py
new file mode 100644
index 00000000..9749a411
--- /dev/null
+++ b/pydis_site/apps/home/templatetags/wiki_extra.py
@@ -0,0 +1,66 @@
+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)
+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
+
+TEMPLATE_PATH = "wiki/forms/fields/{0}.html"
+
+TEMPLATES = {
+ BooleanField: TEMPLATE_PATH.format("boolean"),
+ CharField: TEMPLATE_PATH.format("char"),
+ ChoiceField: TEMPLATE_PATH.format("choice"),
+ TypedChoiceField: TEMPLATE_PATH.format("typed_choice"),
+ DateField: TEMPLATE_PATH.format("date"),
+ DateTimeField: TEMPLATE_PATH.format("date_time"),
+ DecimalField: TEMPLATE_PATH.format("decimal"),
+ DurationField: TEMPLATE_PATH.format("duration"),
+ EmailField: TEMPLATE_PATH.format("email"),
+ FileField: TEMPLATE_PATH.format("file"),
+ FilePathField: TEMPLATE_PATH.format("file_path"),
+ FloatField: TEMPLATE_PATH.format("float"),
+ ImageField: TEMPLATE_PATH.format("image"),
+ IntegerField: TEMPLATE_PATH.format("integer"),
+ GenericIPAddressField: TEMPLATE_PATH.format("generic_ip_address"),
+ MultipleChoiceField: TEMPLATE_PATH.format("multiple_choice"),
+ TypedMultipleChoiceField: TEMPLATE_PATH.format("typed_multiple_choice"),
+ NullBooleanField: TEMPLATE_PATH.format("null_boolean"),
+ RegexField: TEMPLATE_PATH.format("regex"),
+ SlugField: TEMPLATE_PATH.format("slug"),
+ TimeField: TEMPLATE_PATH.format("time"),
+ URLField: TEMPLATE_PATH.format("url"),
+ UUIDField: TEMPLATE_PATH.format("uuid"),
+
+ ComboField: TEMPLATE_PATH.format("combo"),
+ MultiValueField: TEMPLATE_PATH.format("multi_value"),
+ SplitDateTimeField: TEMPLATE_PATH.format("split_date_time"),
+
+ ModelChoiceField: TEMPLATE_PATH.format("model_choice"),
+ ModelMultipleChoiceField: TEMPLATE_PATH.format("model_multiple_choice"),
+}
+
+
+register = template.Library()
+
+
+def render_field(field: Field):
+ if isinstance(field, BoundField):
+ template_path = TEMPLATES.get(field.field.__class__)
+ is_markitup = isinstance(field.field.widget, MarkItUpWidget)
+ else:
+ template_path = TEMPLATES.get(field.__class__)
+ is_markitup = isinstance(field.widget, MarkItUpWidget)
+
+ if not template_path:
+ raise NotImplementedError(f"Unknown field type: {field.__class__}")
+
+ template_obj: Template = get_template(template_path)
+ context = {"field": field, "is_markitup": is_markitup}
+
+ return mark_safe(template_obj.render(context))
diff --git a/pydis_site/templates/wiki/base.html b/pydis_site/templates/wiki/base.html
index 95b0186d..44ad8353 100644
--- a/pydis_site/templates/wiki/base.html
+++ b/pydis_site/templates/wiki/base.html
@@ -5,6 +5,13 @@
Wiki | {% block wiki_pagetitle %}{% endblock %}{% block wiki_site_title %}{% endblock %}
{% endblock %}
+{% block head %}
+ {{ block.super }}
+
+ <script src="{% static "wiki/js/jquery-3.3.1.min.js" %}" type="text/javascript"></script>
+ <script src="{% static "wiki/js/core.js" %}" type="text/javascript"></script>
+{% endblock %}
+
{% block content %}
{% include "base/navbar.html" with active_item=True dropdowns=True icon_weight="far" use_logo=True %}
diff --git a/pydis_site/templates/wiki/create_root.html b/pydis_site/templates/wiki/create_root.html
index 7b677d47..0d7662ec 100644
--- a/pydis_site/templates/wiki/create_root.html
+++ b/pydis_site/templates/wiki/create_root.html
@@ -3,6 +3,21 @@
{% block wiki_pagetitle %}{% trans "Create root article" %}{% endblock %}
+{% block head %}
+ {{ block.super }}
+
+ {% for js in editor.Media.js %}
+ <script type="text/javascript" src="{% static js %}"></script>
+ {% endfor %}
+
+ {% for media, srcs in editor.Media.css.items %}
+ {% for src in srcs %}
+ <link rel="stylesheet" media="{{ media }}" href="{% static src %}" />
+ {% endfor %}
+ {% endfor %}
+{% endblock %}
+
+
{% block wiki_contents %}
<div class="columns">
<div class="column is-two-thirds is-offset-2">
diff --git a/pydis_site/templates/wiki/forms/fields/char.html b/pydis_site/templates/wiki/forms/fields/char.html
new file mode 100644
index 00000000..c94f5771
--- /dev/null
+++ b/pydis_site/templates/wiki/forms/fields/char.html
@@ -0,0 +1,21 @@
+{% if is_markitup %}
+ <textarea class="textarea is-family-monospace{% if field.errors %} is-danger{% endif %}"
+ id="{{ field.auto_id }}"
+ rows = 10
+
+ {% if field.required %}required{% endif %}
+ {% if field.max_length %}maxlength="{{ field.maxlength }}"{% endif %}
+ {% if field.min_length %}minlength="{{ field.minelength }}"{% 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.required %}required{% endif %}
+ {% if field.max_length %}maxlength="{{ field.maxlength }}"{% endif %}
+ {% if field.min_length %}minlength="{{ field.minelength }}"{% endif %}
+ {% if field.empty_value %}placeholder="{{ field.empty_value }}"{% endif %}
+ />
+{% endif %}
diff --git a/pydis_site/templates/wiki/includes/formfield.html b/pydis_site/templates/wiki/includes/formfield.html
index 9ca88d4a..0176f9d4 100644
--- a/pydis_site/templates/wiki/includes/formfield.html
+++ b/pydis_site/templates/wiki/includes/formfield.html
@@ -1,3 +1,5 @@
+{% load wiki_extra %}
+
{% if field.is_hidden %}
{{ field }}
{% else %}
@@ -8,16 +10,18 @@
{{ field.label | safe }} {% if field.field.required %}<span class="asterisk">*</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">
- {{ field }}
+ {% render_field field %}
</div>
</div>
@@ -30,25 +34,4 @@
{% endif %}
</div>
</div>
-
-{#<div id="div_{{ field.auto_id }}" class="form-group{% if field.errors %} has-error{% endif %}">#}
-{# <div class="wiki-label col-xs-3 col-lg-2">#}
-{# {% if field.label %}#}
-{# <label for="{{ field.id_for_label }}" class="control-label {% if field.field.required %}requiredField{% endif %}">#}
-{# {{ field.label|safe }}#}
-{# </label>#}
-{# {% endif %}#}
-{# </div>#}
-{# <div class="wiki-control col-xs-9 col-lg-10">#}
-{# {{ field }} {% if field.field.required %}<span class="asteriskField">*</span>{% endif %}#}
-{# {% if field.errors %}#}
-{# {% for error in field.errors %}#}
-{# <div id="error_{{ forloop.counter }}_{{ field.auto_id }}" class="help-block"><strong>{{ error }}</strong></div>#}
-{# {% endfor %}#}
-{# {% endif %}#}
-{# {% if field.help_text %}#}
-{# <p id="hint_{{ field.auto_id }}" class="help-block">{{ field.help_text|safe }}</p>#}
-{# {% endif %}#}
-{# </div>#}
-{#</div>#}
{% endif %}