aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--pydis_site/settings.py5
-rw-r--r--pydis_site/templates/wiki/plugins/images/index.html110
-rw-r--r--pydis_site/templates/wiki/plugins/images/purge.html33
-rw-r--r--pydis_site/templates/wiki/plugins/images/render.html22
-rw-r--r--pydis_site/templates/wiki/plugins/images/revision_add.html33
-rw-r--r--pydis_site/templates/wiki/plugins/images/sidebar.html188
-rw-r--r--pydis_site/templates/wiki/plugins/links/sidebar.html44
-rw-r--r--pydis_site/templates/wiki/plugins/macros/article_list.html14
-rw-r--r--pydis_site/templates/wiki/plugins/macros/sidebar.html20
-rw-r--r--pydis_site/templates/wiki/plugins/notifications/menubaritem.html25
-rw-r--r--pydis_site/templates/wiki/plugins/notifications/settings.html44
-rw-r--r--pydis_site/templates/wiki/plugins/templatetags/article_list.html20
12 files changed, 556 insertions, 2 deletions
diff --git a/pydis_site/settings.py b/pydis_site/settings.py
index 46d49f44..f7cca777 100644
--- a/pydis_site/settings.py
+++ b/pydis_site/settings.py
@@ -87,9 +87,10 @@ INSTALLED_APPS = [
'sorl.thumbnail',
'wiki.apps.WikiConfig',
- 'wiki.plugins.attachments.apps.AttachmentsConfig',
- 'wiki.plugins.notifications.apps.NotificationsConfig',
+
'wiki.plugins.images.apps.ImagesConfig',
+ 'wiki.plugins.links.apps.LinksConfig',
+ 'wiki.plugins.redlinks.apps.RedlinksConfig',
'wiki.plugins.macros.apps.MacrosConfig',
]
diff --git a/pydis_site/templates/wiki/plugins/images/index.html b/pydis_site/templates/wiki/plugins/images/index.html
new file mode 100644
index 00000000..191d5533
--- /dev/null
+++ b/pydis_site/templates/wiki/plugins/images/index.html
@@ -0,0 +1,110 @@
+{% extends "wiki/article.html" %}
+{% load wiki_tags i18n humanize wiki_thumbnails %}
+
+
+{% block wiki_pagetitle %}{% trans "Images" %}: {{ article.current_revision.title }}{% endblock %}
+
+{% block wiki_contents_tab %}
+ <p class="lead">{% trans "The following images are available for this article. Copy the markdown tag to directly refer to an image from the article text." %}</p>
+ <p>
+ <a href="{% url 'wiki:edit' path=urlpath.path article_id=article.id %}">
+ <span class="fa fa-arrow-left"></span>
+ {% trans "Back to edit page" %}
+ </a>
+ </p>
+ <table class="table table-bordered table-striped" style="width: 100%;">
+ {% for image in images %}
+ {% with image.current_revision.imagerevision as revision %}
+ <tr>
+ <th>{{ revision.get_filename|default:_("No file") }}</th>
+ <th>{% trans "Markdown tag" %}</th>
+ <th>{% trans "Uploaded by" %}</th>
+ <th>{% trans "Size" %}</th>
+ </tr>
+ <tr>
+ <td rowspan="3">
+ <p class="thumbnail">
+ {% thumbnail revision.image "250x250" as thumb %}
+ <img src="{{ thumb.url }}" alt="{{ revision.get_filename }}" />
+ {% endthumbnail %}
+ </p>
+ {% if image|can_write:user %}
+ <p>
+ {% if revision.deleted %}
+ <a href="{% url 'wiki:images_add_revision' path=urlpath.path article_id=article.id image_id=image.id %}">
+ <span class="fa fa-upload"></span>
+ {% trans "Upload and publish new image" %}
+ </a> <br />
+ <a href="{% url 'wiki:images_restore' path=urlpath.path article_id=article.id image_id=image.id %}">
+ <span class="fa fa-refresh"></span>
+ {% trans "Restore image" %}
+ </a>
+ {% else %}
+ <a href="{% url 'wiki:images_add_revision' path=urlpath.path article_id=article.id image_id=image.id %}">
+ <span class="fa fa-upload"></span>
+ {% trans "Upload replacement" %}
+ </a> <br />
+ <a href="{% url 'wiki:images_delete' path=urlpath.path article_id=article.id image_id=image.id %}">
+ <span class="fa fa-remove"></span>
+ {% trans "Remove image" %}
+ </a>
+ {% endif %}
+ {% if article|can_moderate:user %}
+ <br />
+ <a href="{% url 'wiki:images_purge' path=urlpath.path article_id=article.id image_id=image.id %}">
+ <span class="fa fa-trash"></span>
+ {% trans "Completely delete" %}
+ </a>
+ {% endif %}
+ </p>
+ {% endif %}
+ </td>
+ <td><code>[image:{{ image.id }}]</code></td>
+ <td>
+ <p>{% include "wiki/includes/revision_info.html" %}</p>
+ </td>
+ <td>{{ revision.get_size|filesizeformat }}<br />{{ revision.width }}x{{ revision.height }} pixels
+ </td>
+ </tr>
+ <tr>
+ <th colspan="100">{% trans "History" %}</th>
+ </tr>
+ <tr>
+ <td colspan="100">
+ <table class="table">
+ {% for old_revision in image.revision_set.all %}
+ <tr>
+ <td>
+ {% thumbnail old_revision.imagerevision.image "50x50" crop="center" as thumb %}
+ <img src="{{ thumb.url }}" alt="{{ revision.imagerevision.get_filename }}" />
+ {% endthumbnail %}
+ </td>
+ <td>{% include "wiki/includes/revision_info.html" with current_revision=image.current_revision revision=old_revision %}</td>
+ <td>{{ old_revision.imagerevision.get_size|filesizeformat }}</td>
+ <td>{{ old_revision.imagerevision.width }}x{{ old_revision.imagerevision.height }}</td>
+ <td>
+ {% if image|can_write:user and old_revision != image.current_revision %}
+ <a href="{% url 'wiki:images_set_revision' path=urlpath.path article_id=article.id image_id=image.id rev_id=old_revision.id %}">
+ <span class="fa fa-refresh"></span>
+ {% trans "Revert to this version" %}
+ </a>
+ {% endif %}
+ </td>
+ </tr>
+ {% endfor %}
+ </table>
+ </td>
+ </tr>
+ {% endwith %}
+ {% empty %}
+ <tr>
+ <td colspan="100">
+ <p style="margin-bottom: 20px;"><em>{% trans "There are no images for this article." %}</em></p>
+ </td>
+ {% endfor %}
+
+ </table>
+
+ {% include "wiki/includes/pagination.html" %}
+
+{% endblock %}
diff --git a/pydis_site/templates/wiki/plugins/images/purge.html b/pydis_site/templates/wiki/plugins/images/purge.html
new file mode 100644
index 00000000..28b8b476
--- /dev/null
+++ b/pydis_site/templates/wiki/plugins/images/purge.html
@@ -0,0 +1,33 @@
+{% extends "wiki/article.html" %}
+{% load wiki_tags i18n humanize wiki_thumbnails %}
+
+
+{% block wiki_pagetitle %}{% trans "Purge deletion" %}: {{ image }}{% endblock %}
+
+{% block wiki_contents_tab %}
+ {% thumbnail image.current_revision.imagerevision.image "250x250" as thumb %}
+ <p class="thumbnail pull-right">
+ <img src="{{ thumb.url }}" alt="{{ revision.get_filename }}" />
+ </p>
+ {% endthumbnail %}
+ <p class="lead">
+ {% trans "Purge image: Completely remove image file and all revisions." %}
+ </p>
+ <form method="POST" class="form-horizontal" enctype="multipart/form-data">
+ {% wiki_form form %}
+ <div class="form-group form-actions">
+ <div class="col-lg-2"></div>
+ <div class="col-lg-10">
+ <a href="{% url 'wiki:images_index' path=urlpath.path article_id=article.id %}" class="btn btn-default">
+ <span class="fa fa-arrow-left"></span>
+ {% trans "Go back" %}
+ </a>
+ <button class="btn btn-primary">
+ <span class="fa fa-trash"></span>
+ {% trans "Remove it completely!" %}
+ </button>
+ </div>
+ </div>
+ </form>
+
+{% endblock %}
diff --git a/pydis_site/templates/wiki/plugins/images/render.html b/pydis_site/templates/wiki/plugins/images/render.html
new file mode 100644
index 00000000..d4470d98
--- /dev/null
+++ b/pydis_site/templates/wiki/plugins/images/render.html
@@ -0,0 +1,22 @@
+{% load wiki_thumbnails i18n %}{% comment %}
+ This template is used for the markdown extension that renders images and captions.
+
+ NB! Watch out for line breaks, markdown might add <br />s and <p>s.
+{% endcomment %}{% with image.current_revision.imagerevision as revision %}{% spaceless %}
+<figure class="thumbnail{% if align %} pull-{{ align }}{% endif %}" {% if width %} style="width: {{ width }}px;" {% endif %}>
+ <a href="{{ revision.image.url }}">
+{% if size %}
+ {% thumbnail revision.image size upscale=False as thumb %}
+ <img src="{{ thumb.url }}" alt="{{ revision.get_filename }}" />
+ {% empty %}
+ <div class="caption">
+ <em>{% trans "Image not found" %}</em>
+ </div>
+ {% endthumbnail %}
+{% else %}
+ <img src="{{ revision.image.url }}" alt="{{ revision.get_filename }}" />
+{% endif %}
+ </a>
+ <figcaption class="caption">{{ caption|safe }}</figcaption>
+</figure>
+{% endspaceless %}{% endwith %}
diff --git a/pydis_site/templates/wiki/plugins/images/revision_add.html b/pydis_site/templates/wiki/plugins/images/revision_add.html
new file mode 100644
index 00000000..87ca7a08
--- /dev/null
+++ b/pydis_site/templates/wiki/plugins/images/revision_add.html
@@ -0,0 +1,33 @@
+{% extends "wiki/article.html" %}
+{% load wiki_tags i18n humanize wiki_thumbnails %}
+
+
+{% block wiki_pagetitle %}{% trans "Replace image" %}: {{ image }}{% endblock %}
+
+{% block wiki_contents_tab %}
+ {% thumbnail image.current_revision.imagerevision.image "250x250" as thumb %}
+ <p class="thumbnail pull-right">
+ <img src="{{ thumb.url }}" alt="{{ revision.get_filename }}" />
+ </p>
+ {% endthumbnail %}
+ <p class="lead">
+ {% trans "Choose an image file to replace current image." %}
+ </p>
+ <form method="POST" class="form-horizontal" enctype="multipart/form-data">
+ {% wiki_form form %}
+ <div class="form-group form-actions">
+ <div class="col-lg-2"></div>
+ <div class="col-lg-10">
+ <a href="{% url 'wiki:images_index' path=urlpath.path article_id=article.id %}" class="btn btn-default">
+ <span class="fa fa-arrow-left"></span>
+ {% trans "Go back" %}
+ </a>
+ <button class="btn btn-primary">
+ <span class="fa fa-upload"></span>
+ {% trans "Upload replacement" %}
+ </button>
+ </div>
+ </div>
+ </form>
+
+{% endblock %}
diff --git a/pydis_site/templates/wiki/plugins/images/sidebar.html b/pydis_site/templates/wiki/plugins/images/sidebar.html
new file mode 100644
index 00000000..909bf6c9
--- /dev/null
+++ b/pydis_site/templates/wiki/plugins/images/sidebar.html
@@ -0,0 +1,188 @@
+{% load i18n wiki_tags wiki_images_tags humanize wiki_thumbnails sekizai_tags %}
+
+
+{% addtoblock "js" %}
+<script type="text/javascript">
+function insert_image(data) {
+ if (typeof data == "number") {
+ image_id = data;
+ $("#img_title").text(" {{ _("Insert Image")|escapejs }} " + image_id);
+ $("#img_modal").on('shown.bs.modal', function(){
+ $(this).find('#img_caption').focus();
+ });
+ $("#img_modal").modal();
+ } else {
+ align = data.img_align.options[data.img_align.selectedIndex].text;
+ size = data.img_size.options[data.img_size.selectedIndex].text;
+ caption = data.img_caption.value;
+
+ data.img_align.selectedIndex = 0;
+ data.img_size.selectedIndex = 0;
+ data.img_caption.value = "";
+
+ tag = '\n[image:'+image_id;
+ if (align != "center") tag = tag + ' align:'+align;
+ if (size != "default") tag = tag + ' size:'+size;
+
+ if (caption == '')
+ $('#id_content').insertAtCaret(tag+']\n\n');
+ else
+ $('#id_content').insertAtCaret(tag+']\n '+caption+'\n\n');
+ }
+}
+function add_image(form) {
+ $(form).submit();
+}
+</script>
+{% endaddtoblock %}
+
+{% with article|images_for_article as images %}
+<style type="text/css">
+ #image-list tr:first-child td {border:0;}
+</style>
+<div style="max-height: 300px; overflow: auto;">
+ <table class="table table-responsive table-bordered" id="image-list">
+ {% for image in images %}
+ {% with image.current_revision.imagerevision as revision %}
+ {% thumbnail revision.image "50x50" crop="center" as thumb %}
+ <tr>
+ <td style="white-space: nowrap;">
+ <p>{% trans "Image id" %}: {{ image.id }}</p>
+ <p>
+ <a href="javascript:void(insert_image({{ image.id }}))"><span class="fa fa-edit"></span> {% trans "Insert" %}</a><br />
+ {% if image|can_write:user %}
+ <a href="{% url 'wiki:images_add_revision' path=urlpath.path article_id=article.id image_id=image.id %}"><span class="fa fa-upload"></span> {% trans "Replace" %}</a>
+ {% endif %}
+ </p>
+ </td>
+ <td>
+ <div class="thumbnail">
+ <img src="{{ thumb.url }}" alt="{{ revision.get_filename }}" />
+ </div>
+ </td>
+ </tr>
+ {% endthumbnail %}
+ {% endwith %}
+ {% empty %}
+ <tr>
+ <td><em>{% trans "No images found for this article" %}</em></td>
+ </tr>
+ {% endfor %}
+ </table>
+</div>
+
+<p>
+ <a href="{% url 'wiki:images_index' path=urlpath.path article_id=article.id %}">
+ {% trans "Manage images" %} &raquo;
+ </a>
+</p>
+<hr />
+
+<h4>{% trans "Add new image" %}</h4>
+
+{% if article|images_can_add:user %}
+ {% if form.non_field_errors %}
+ {% if form_error_title %}<h4 class="alert-heading">{{ form_error_title }}</h4>{% endif %}
+ {% for error_message in form.non_field_errors %}
+ <div class="alert alert-block alert-danger">
+ {{ error_message }}
+ </div>
+ {% endfor %}
+ {% endif %}
+
+ {# Include the hidden fields #}
+ {% for hidden in form.hidden_fields %}
+ {{ hidden }}
+ {% endfor %}
+
+ <p>
+ {% for field in form.visible_fields %}
+ <fieldset id="div_{{ field.auto_id }}" class="control-group fields {% if field.errors %} error{% endif %}">
+ {% if field.label %}
+ <!--<label for="{{ field.id_for_label }}" class="{% if field.field.required %}requiredField{% endif %}">
+ {{ field.label|safe }}
+ </label>-->
+ {% endif %}
+ {{ field }}
+ {% if field.errors %}
+ <div id="error_{{ forloop.counter }}_{{ field.auto_id }}" class="help-block">
+ {% for error in field.errors %}
+ <div>{{ error }}</div>
+ {% endfor %}
+ </div>
+ {% endif %}
+ </fieldset>
+ {% if field.help_text %}
+ <p id="hint_{{ field.auto_id }}" class="help-block">{{ field.help_text|safe }}</p>
+ {% endif %}
+ {% endfor %}
+ </p>
+
+ <p>
+ <button type="button" onClick="add_image(this.form)" name="{{ plugin.slug }}_save" value="1" class="btn btn-default btn-md">
+ <span class="fa fa-upload"></span>
+ {% trans "Add image" %}
+ </button>
+ </p>
+{% else %}
+
+ {% if user.is_anonymous %}
+ {% include "wiki/includes/anonymous_blocked.html" %}
+ {% else %}
+ <p><em>{% trans "You do not have permissions to add images." %}</em></p>
+ {% endif %}
+{% endif %}
+
+<hr />
+
+<h4>
+ {% trans "How to use images" %}
+</h4>
+
+<p>{% trans "After uploading an image, it is attached to this particular article and can be used only here. Other users may replace the image, but older versions are kept. To show the image press the Insert button and select the options you want to use. You can use Markdown in the caption. The Markdown code syntax for images looks like this" %}<br/>
+<pre>[image:id align:right size:orig]
+ caption indented by 4 spaces</pre>
+{% trans "Possible values for align are" %} <pre>left | right</pre>
+{% trans "Possible values for size are" %} <pre>small | medium | large | orig | default</pre>
+</p>
+{% endwith %}
+
+<div class="modal" id="img_modal" role="dialog">
+ <div class="modal-dialog">
+ <div class="modal-content" style="position:relative !important;">
+ <div class="modal-header">
+ <h4 id="img_title"></h4>
+ </div>
+ <div class="modal-body">
+ <form role="form">
+ <div class="form-group" style="margin-left:0; margin-right:0;">
+ <label for="img_align">{% trans "Alignment" %}</label>
+ <select class="form-control" id="img_align">
+ <option>center</option>
+ <option>left</option>
+ <option>right</option>
+ </select>
+ </div>
+ <div class="form-group" style="margin-left:0; margin-right:0;">
+ <label for="img_size">{% trans "Size" %}</label>
+ <select class="form-control" id="img_size">
+ <option>default</option>
+ <option>small</option>
+ <option>medium</option>
+ <option>large</option>
+ <option>orig</option>
+ </select>
+ </div>
+ <div class="form-group" style="margin-left:0; margin-right:0;">
+ <label for="img_caption">{% trans "Caption" %}</label>
+ <input type="text" class="form-control" id="img_caption" placeholder="{% trans "Enter caption" %}">
+ </div>
+ </form>
+ </div>
+ <div class="modal-footer">
+ <button class="btn btn-success btn-default" data-dismiss="modal" onClick="insert_image(this.form)"> {% trans "Insert image" %} </button>
+ <button class="btn btn-danger" data-dismiss="modal"> {% trans "Cancel" %} </button>
+ </div>
+ </div>
+ </div>
+</div>
diff --git a/pydis_site/templates/wiki/plugins/links/sidebar.html b/pydis_site/templates/wiki/plugins/links/sidebar.html
new file mode 100644
index 00000000..45096edd
--- /dev/null
+++ b/pydis_site/templates/wiki/plugins/links/sidebar.html
@@ -0,0 +1,44 @@
+{% load i18n sekizai_tags static %}
+
+<h4>{% trans "Link to another wiki page" %}</h4>
+
+<p>
+ {% trans "Type in something from another wiki page's title and auto-complete will help you create a tag for your wiki link. Tags for links look like this:" %}<br />
+</p>
+
+<pre>[Title of link](wiki:ArticleSlug)</pre>
+
+<div class="input-group">
+ <input type="text" class="page_title_query form-control" id="links_page_title_query" value="" placeholder="Type to search..." />
+ <span class="input-group-btn">
+ <button type="button" class="btn btn-default" onclick="wikiInsertLink()">
+ {% trans "Insert" %}
+ </button>
+ </span>
+</div>
+
+<hr />
+
+<h4>{% trans "An external link" %}</h4>
+
+<p>
+ {% trans "You can link to another website simply by inserting an address example.com or http://example.com or by using the markdown syntax:" %}<br />
+</p>
+<pre>[Clickable text](http://example.com)</pre>
+
+{% addtoblock "js" %}<script type="text/javascript" src="{% static "wiki/js/typeahead.min.js" %}"></script>{% endaddtoblock %}
+{% addtoblock "js" %}
+<script type="text/javascript">
+ $(document).ready(function() {
+ $('.page_title_query').typeahead({
+ remote: "{% url 'wiki:links_query_urlpath' path=urlpath.path article_id=article.id %}?query=%QUERY",
+ dataType: String
+ });
+ });
+
+function wikiInsertLink() {
+ $('#id_content').insertAtCaret($('#links_page_title_query').val());
+}
+
+</script>
+{% endaddtoblock %}
diff --git a/pydis_site/templates/wiki/plugins/macros/article_list.html b/pydis_site/templates/wiki/plugins/macros/article_list.html
new file mode 100644
index 00000000..c9261f1e
--- /dev/null
+++ b/pydis_site/templates/wiki/plugins/macros/article_list.html
@@ -0,0 +1,14 @@
+{% load i18n wiki_macro_tags %}
+
+{% if article_children %}
+ <div class="article-list">
+ <ul>
+ <li class="nav-header">{% trans "Article index" %} <i class="fa fa-list"></i></li>
+ {% for child in article_children %}
+ {% article_list child depth %}
+ {% empty %}
+ <i>{% trans "Nothing below this level" %}</i>
+ {% endfor %}
+ </ul>
+ </div>
+{% endif %}
diff --git a/pydis_site/templates/wiki/plugins/macros/sidebar.html b/pydis_site/templates/wiki/plugins/macros/sidebar.html
new file mode 100644
index 00000000..31b68520
--- /dev/null
+++ b/pydis_site/templates/wiki/plugins/macros/sidebar.html
@@ -0,0 +1,20 @@
+{% load i18n wiki_macro_tags %}
+{% allowed_macros as macros %}
+
+{% for macro in macros %}
+<h4>{{ macro.short_description }}</h4>
+{{ macro.help_text|safe|linebreaks }}
+{% if macro.example_code %}
+<pre>{{ macro.example_code }}</pre>
+{% endif %}
+{% if macro.args %}
+<table class="table table-compact">
+{% for arg,description in macro.args.items %}
+ <tr>
+ <th>{{ arg }}</th>
+ <td>{{ description }}</td>
+ </tr>
+{% endfor %}
+</table>
+{% endif %}
+{% endfor %}
diff --git a/pydis_site/templates/wiki/plugins/notifications/menubaritem.html b/pydis_site/templates/wiki/plugins/notifications/menubaritem.html
new file mode 100644
index 00000000..6f1b6000
--- /dev/null
+++ b/pydis_site/templates/wiki/plugins/notifications/menubaritem.html
@@ -0,0 +1,25 @@
+{% load i18n sekizai_tags static %}
+
+ <li class="divider notification-before-list"></li>
+ <li class="notifications-empty"><a href="#"><em>{% trans "No notifications" %}</em></a></li>
+ <li class="divider"></li>
+ <li>
+ <a href="#" onclick="notify_mark_read()">
+ <i class="fa fa-check-square-o"></i>
+ {% trans "Clear notifications list" %}
+ </a>
+ </li>
+ <li>
+ <a href="{% url 'wiki:notification_settings' %}">
+ <i class="fa fa-wrench"></i>
+ {% trans "Notification settings" %}
+ </a>
+ </li>
+{% addtoblock "js" %}
+<script type="text/javascript">
+ URL_NOTIFY_GET_NEW = "{% url "nyt:json_get" %}";
+ URL_NOTIFY_MARK_READ = "{% url "nyt:json_mark_read_base" %}";
+ URL_NOTIFY_GOTO = "{% url "nyt:goto_base" %}";
+</script>
+{% endaddtoblock %}
+{% addtoblock "js" %}<script type="text/javascript" src="{% static "wiki/plugins/notifications/js/ui.js" %}"></script>{% endaddtoblock %}
diff --git a/pydis_site/templates/wiki/plugins/notifications/settings.html b/pydis_site/templates/wiki/plugins/notifications/settings.html
new file mode 100644
index 00000000..51b0245e
--- /dev/null
+++ b/pydis_site/templates/wiki/plugins/notifications/settings.html
@@ -0,0 +1,44 @@
+{% extends "wiki/base.html" %}
+{% load wiki_tags i18n humanize %}
+
+
+{% block wiki_pagetitle %}{% trans "Notifications" %}: {{ article.current_revision.title }}{% endblock %}
+
+{% block wiki_contents %}
+
+<h1>{% trans "Your notification settings" %}</h1>
+<p class="lead">
+ {% trans "Manage how often you receive notifications" %}
+</p>
+
+<form method="POST" class="form-horizontal">
+ {% include "wiki/includes/formerrors.html" with form=formset.management_form %}
+ {% csrf_token %}
+ {{ formset.management_form }}
+ {% for form in formset %}
+ <fieldset>
+ <legend>{% trans "Settings for" %} {{ form.instance.articlesubscriptions.count }} {% trans "articles" %}</legend>
+ {% include "wiki/includes/formerrors.html" with form=form %}
+ {% for field in form %}
+ {% include "wiki/includes/formfield.html" %}
+ {% endfor %}
+ </fieldset>
+ {% empty %}
+ <em>{% trans "You are not subscribed to any notifications yet." %}</em>
+ {% endfor %}
+ {% if formset.forms %}
+ <div class="form-group form-actions">
+ <div class="col-lg-2"></div>
+ <div class="col-lg-10">
+ <button type="submit" class="btn btn-primary">
+ <span class="fa fa-check"></span>
+ {% trans "Save changes" %}
+ </button>
+ </div>
+ </div>
+ {% endif %}
+</form>
+
+<div class="row">
+</div>
+{% endblock %}
diff --git a/pydis_site/templates/wiki/plugins/templatetags/article_list.html b/pydis_site/templates/wiki/plugins/templatetags/article_list.html
new file mode 100644
index 00000000..842ac3cb
--- /dev/null
+++ b/pydis_site/templates/wiki/plugins/templatetags/article_list.html
@@ -0,0 +1,20 @@
+{% load wiki_macro_tags %}
+
+
+<li>
+ <a href="{% url 'wiki:get' path=parent.path article_id=parent.article.id %}">
+ {{ parent.article.current_revision.title }}
+ {% if not parent.article.other_read %}<i class="fa fa-lock"></i>{% endif %}
+ </a>
+{% if parent.article.other_read %}
+ {% with parent.children.active.default_order as children %}
+ {% if parent.level < depth and children.count %}
+ <ul>
+ {% for child in children %}
+ {% article_list child depth %}
+ {% endfor %}
+ </ul>
+ {% endif %}
+ {% endwith %}
+{% endif %}
+</li>