aboutsummaryrefslogtreecommitdiffstats
path: root/pydis_site/templates
diff options
context:
space:
mode:
Diffstat (limited to 'pydis_site/templates')
-rw-r--r--pydis_site/templates/base/base.html17
-rw-r--r--pydis_site/templates/base/navbar.html70
-rw-r--r--pydis_site/templates/content/base.html41
-rw-r--r--pydis_site/templates/content/dropdown.html17
-rw-r--r--pydis_site/templates/content/listing.html27
-rw-r--r--pydis_site/templates/content/page.html41
-rw-r--r--pydis_site/templates/events/_base.html33
-rw-r--r--pydis_site/templates/events/base.html7
-rw-r--r--pydis_site/templates/events/base_sidebar.html12
-rw-r--r--pydis_site/templates/events/index.html123
-rw-r--r--pydis_site/templates/events/pages/code-jams/1.html82
-rw-r--r--pydis_site/templates/events/pages/code-jams/2.html72
-rw-r--r--pydis_site/templates/events/pages/code-jams/3.html81
-rw-r--r--pydis_site/templates/events/pages/code-jams/4.html93
-rw-r--r--pydis_site/templates/events/pages/code-jams/5.html80
-rw-r--r--pydis_site/templates/events/pages/code-jams/6/_index.html93
-rw-r--r--pydis_site/templates/events/pages/code-jams/6/rules.html80
-rw-r--r--pydis_site/templates/events/pages/code-jams/7/_index.html85
-rw-r--r--pydis_site/templates/events/pages/code-jams/7/rules.html68
-rw-r--r--pydis_site/templates/events/pages/code-jams/_index.html72
-rw-r--r--pydis_site/templates/events/pages/code-jams/judging.html110
-rw-r--r--pydis_site/templates/events/pages/code-jams/pull-request.html235
-rw-r--r--pydis_site/templates/events/pages/code-jams/using-git.html61
-rw-r--r--pydis_site/templates/events/pages/game-jams/2020/_index.html104
-rw-r--r--pydis_site/templates/events/pages/game-jams/2020/judging.html68
-rw-r--r--pydis_site/templates/events/pages/game-jams/2020/project-setup.html57
-rw-r--r--pydis_site/templates/events/pages/game-jams/2020/rules.html31
-rw-r--r--pydis_site/templates/events/pages/game-jams/2020/technical-requirements.html41
-rw-r--r--pydis_site/templates/events/pages/game-jams/_index.html12
-rw-r--r--pydis_site/templates/events/sidebar/code-jams/6.html6
-rw-r--r--pydis_site/templates/events/sidebar/code-jams/7.html12
-rw-r--r--pydis_site/templates/events/sidebar/code-jams/previous-code-jams.html11
-rw-r--r--pydis_site/templates/events/sidebar/code-jams/upcoming-code-jam.html8
-rw-r--r--pydis_site/templates/events/sidebar/code-jams/useful-information.html8
-rw-r--r--pydis_site/templates/events/sidebar/events-list.html10
-rw-r--r--pydis_site/templates/events/sidebar/game-jams/2020.html14
-rw-r--r--pydis_site/templates/events/sidebar/upcoming-event.html8
-rw-r--r--pydis_site/templates/events/test-pages/my-event/_index.html1
-rw-r--r--pydis_site/templates/events/test-pages/my-event/subpage.html1
-rw-r--r--pydis_site/templates/home/account/delete.html47
-rw-r--r--pydis_site/templates/home/account/settings.html136
-rw-r--r--pydis_site/templates/home/index.html17
-rw-r--r--pydis_site/templates/home/timeline.html951
-rw-r--r--pydis_site/templates/resources/resource_box.html22
-rw-r--r--pydis_site/templates/resources/resource_box_header.html24
-rw-r--r--pydis_site/templates/resources/resources.html90
-rw-r--r--pydis_site/templates/resources/resources_list.html52
-rw-r--r--pydis_site/templates/wiki/article.html24
-rw-r--r--pydis_site/templates/wiki/base.html44
-rw-r--r--pydis_site/templates/wiki/create.html42
-rw-r--r--pydis_site/templates/wiki/create_root.html48
-rw-r--r--pydis_site/templates/wiki/delete.html90
-rw-r--r--pydis_site/templates/wiki/deleted.html62
-rw-r--r--pydis_site/templates/wiki/deleted_list.html45
-rw-r--r--pydis_site/templates/wiki/dir.html103
-rw-r--r--pydis_site/templates/wiki/edit.html95
-rw-r--r--pydis_site/templates/wiki/error.html51
-rw-r--r--pydis_site/templates/wiki/forms/fields/boolean.html49
-rw-r--r--pydis_site/templates/wiki/forms/fields/char.html57
-rw-r--r--pydis_site/templates/wiki/forms/fields/image.html53
-rw-r--r--pydis_site/templates/wiki/forms/fields/in_place_render.html33
-rw-r--r--pydis_site/templates/wiki/forms/fields/model_choice.html71
-rw-r--r--pydis_site/templates/wiki/forms/fields/wiki_slug_render.html48
-rw-r--r--pydis_site/templates/wiki/history.html126
-rw-r--r--pydis_site/templates/wiki/includes/article_menu.html78
-rw-r--r--pydis_site/templates/wiki/includes/breadcrumbs.html95
-rw-r--r--pydis_site/templates/wiki/includes/editor.html4
-rw-r--r--pydis_site/templates/wiki/includes/editor_sidebar.html38
-rw-r--r--pydis_site/templates/wiki/includes/editormedia.html17
-rw-r--r--pydis_site/templates/wiki/includes/form.html16
-rw-r--r--pydis_site/templates/wiki/includes/formerrors.html15
-rw-r--r--pydis_site/templates/wiki/includes/formfield.html7
-rw-r--r--pydis_site/templates/wiki/includes/messages.html0
-rw-r--r--pydis_site/templates/wiki/includes/pagination.html27
-rw-r--r--pydis_site/templates/wiki/includes/render.html28
-rw-r--r--pydis_site/templates/wiki/includes/revision_info.html24
-rw-r--r--pydis_site/templates/wiki/includes/searchresult.html33
-rw-r--r--pydis_site/templates/wiki/move.html72
-rw-r--r--pydis_site/templates/wiki/permission_denied.html36
-rw-r--r--pydis_site/templates/wiki/plugins/images/index.html171
-rw-r--r--pydis_site/templates/wiki/plugins/images/purge.html42
-rw-r--r--pydis_site/templates/wiki/plugins/images/render.html25
-rw-r--r--pydis_site/templates/wiki/plugins/images/revision_add.html43
-rw-r--r--pydis_site/templates/wiki/plugins/images/sidebar.html206
-rw-r--r--pydis_site/templates/wiki/plugins/links/sidebar.html56
-rw-r--r--pydis_site/templates/wiki/preview_inline.html73
-rw-r--r--pydis_site/templates/wiki/root_missing.html41
-rw-r--r--pydis_site/templates/wiki/search.html64
-rw-r--r--pydis_site/templates/wiki/settings.html30
-rw-r--r--pydis_site/templates/wiki/source.html14
90 files changed, 2674 insertions, 2953 deletions
diff --git a/pydis_site/templates/base/base.html b/pydis_site/templates/base/base.html
index 70426dc1..906fc577 100644
--- a/pydis_site/templates/base/base.html
+++ b/pydis_site/templates/base/base.html
@@ -1,6 +1,5 @@
{# Base template, with a few basic style definitions. #}
{% load django_simple_bulma %}
-{% load sekizai_tags %}
{% load static %}
<!DOCTYPE html>
@@ -28,30 +27,15 @@
{# Font-awesome here is defined explicitly so that we can have Pro #}
<script src="https://kit.fontawesome.com/ae6a3152d8.js"></script>
- <script src="{% static "js/base/modal.js" %}"></script>
<link rel="stylesheet" href="{% static "css/base/base.css" %}">
- <link rel="stylesheet" href="{% static "css/base/notification.css" %}">
{% block head %}{% endblock %}
- {% render_block "css" %}
</head>
<body class="site">
<!-- Git hash for this release: {{ git_sha }} -->
<main class="site-content">
- {% if messages %}
- <div class="messages">
- {% for message in messages %}
- <div class="notification {% if message.tags %}is-{{ message.tags }}{% endif %}">
- <button class="delete"></button>
-
- {{ message }}
- </div>
- {% endfor %}
- </div>
- {% endif %}
-
{% block content %}
{{ block.super }}
{% endblock %}
@@ -61,6 +45,5 @@
{% include "base/footer.html" %}
{% endblock %}
-{% render_block "js" %}
</body>
</html>
diff --git a/pydis_site/templates/base/navbar.html b/pydis_site/templates/base/navbar.html
index 64e3654b..4cc49dc6 100644
--- a/pydis_site/templates/base/navbar.html
+++ b/pydis_site/templates/base/navbar.html
@@ -1,4 +1,3 @@
-{% load socialaccount %}
{% load static %}
<nav class="navbar is-primary" role="navigation" aria-label="main navigation">
@@ -65,64 +64,40 @@
More
</a>
<div class="navbar-dropdown">
- <a class="navbar-item" href="{% url 'wiki:get' path="resources/" %}">
+ <a class="navbar-item" href="{% url "resources:index" %}">
Resources
</a>
- <a class="navbar-item" href="{% url 'wiki:get' path="resources/tools/" %}">
+ <a class="navbar-item" href="{% url "resources:resources" category="tools" %}">
Tools
</a>
- <a class="navbar-item" href="{% url 'wiki:get' path="contributing/" %}">
+ <a class="navbar-item" href="{% url "content:page_category" location="guides/pydis-guides/contributing"%}">
Contributing
</a>
- <a class="navbar-item" href="{% url 'wiki:get' path="frequently-asked-questions/" %}">
+ <a class="navbar-item" href="{% url "content:page_category" location="frequently-asked-questions" %}">
FAQ
</a>
- <a class="navbar-item" href="{% url 'wiki:get' path="rules/" %}">
+ <a class="navbar-item" href="{% url 'timeline' %}">
+ Timeline
+ </a>
+ <a class="navbar-item" href="{% url "content:page_category" location="rules" %}">
Rules
</a>
- <a class="navbar-item" href="{% url 'wiki:get' path="code-of-conduct/" %}">
+ <a class="navbar-item" href="{% url "content:page_category" location="code-of-conduct" %}">
Code of Conduct
</a>
- <a class="navbar-item" href="{% url 'wiki:get' path="privacy/" %}">
+ <a class="navbar-item" href="{% url "content:page_category" location="privacy" %}">
Privacy
</a>
<hr class="navbar-divider">
<div class="navbar-item">
<strong>Events</strong>
</div>
- <a class="navbar-item" href="{% url 'wiki:get' path="code-jams/code-jam-7/" %}">
+ <a class="navbar-item" href="{% url "events:page" path="code-jams/7" %}">
Most Recent: Code Jam 7
</a>
- <a class="navbar-item" href="{% url 'wiki:get' path="events/" %}">
+ <a class="navbar-item" href="{% url "events:index" %}">
All events
</a>
- <hr class="navbar-divider">
-
- {% if not user.is_authenticated %}
- {% get_providers as socialaccount_providers %}
-
- {% for provider in socialaccount_providers %}
- {% if provider.id == "discord" %}
- <a class="navbar-item"
- href="{% provider_login_url provider.id process="login" scope=scope auth_params=auth_params %}"
- >Login with {{ provider.name }}</a>
- {% endif %}
- {% endfor %}
- {% else %}
- <form method="post" action="{% url 'logout' %}">
- {% csrf_token %}
-
- <div class="field navbar-item is-paddingless is-fullwidth is-grouped">
- <button type="submit" class="button is-white is-inline is-fullwidth has-text-left is-size-navbar-menu has-text-grey-dark">Logout</button>
- <a title="Settings" class="button is-white is-inline has-text-right is-size-navbar-menu has-text-grey-dark modal-button" data-target="account-modal">
- <span class="is-icon">
- <i class="fas fa-cog"></i>
- </span>
- </a>
- </div>
- </form>
- {% endif %}
-
</div>
</div>
@@ -135,24 +110,3 @@
</div>
</nav>
-
-{% if user.is_authenticated %}
- <script defer type="text/javascript">
- // Script which loads and sets up the account settings modal.
- // This script must be placed in a template, or rewritten to take the fetch
- // URL as a function argument, in order to be used.
-
- "use strict";
-
- // Create and prepend a new div for this modal
- let element = document.createElement("div");
- document.body.prepend(element);
-
- fetch("{% url "account_settings" %}") // Fetch the URL
- .then((response) => response.text()) // Read in the data stream as text
- .then((text) => {
- element.outerHTML = text; // Replace the div's HTML with the loaded modal HTML
- setupModal(document.getElementById("account-modal")); // Set up the modal
- });
- </script>
-{% endif %}
diff --git a/pydis_site/templates/content/base.html b/pydis_site/templates/content/base.html
new file mode 100644
index 00000000..21895479
--- /dev/null
+++ b/pydis_site/templates/content/base.html
@@ -0,0 +1,41 @@
+{% extends 'base/base.html' %}
+{% load static %}
+
+{% block title %}{{ page_title }}{% endblock %}
+{% block head %}
+ <meta property="og:title" content="Python Discord - {{ page_title }}" />
+ <meta property="og:type" content="website" />
+ <meta property="og:description" content="{{ page_description }}" />
+ <link rel="stylesheet" href="{% static "css/content/page.css" %}">
+{% endblock %}
+
+{% block content %}
+ {% include "base/navbar.html" %}
+
+ <section class="breadcrumb-section section">
+ <div class="container">
+ {# Article breadcrumb #}
+ <nav class="breadcrumb is-pulled-left" aria-label="breadcrumbs">
+ <ul>
+ {% for item in breadcrumb_items %}
+ <li><a href="{% url "content:page_category" location=item.path %}">{{ item.name }}</a></li>
+ {% endfor %}
+ <li class="is-active"><a href="#">{{ page_title }}</a></li>
+ </ul>
+ </nav>
+ {# Sub-Article dropdown for category pages #}
+ {% if subarticles %}
+ {% include "content/dropdown.html" %}
+ {% endif %}
+ </div>
+ </section>
+
+ <section class="section">
+ <div class="container">
+ <div class="content">
+ <h1 class="title">{{ page_title }}</h1>
+ {% block page_content %}{% endblock %}
+ </div>
+ </div>
+ </section>
+{% endblock %}
diff --git a/pydis_site/templates/content/dropdown.html b/pydis_site/templates/content/dropdown.html
new file mode 100644
index 00000000..d81e29dc
--- /dev/null
+++ b/pydis_site/templates/content/dropdown.html
@@ -0,0 +1,17 @@
+<div class="dropdown is-pulled-right is-right" id="dropdown">
+ <div class="dropdown-trigger">
+ <a aria-haspopup="true" aria-controls="subarticle-menu">
+ <span>Sub-Articles</span>
+ <span class="icon is-small">
+ <i class="fas fa-angle-down" aria-hidden="true"></i>
+ </span>
+ </a>
+ </div>
+ <div class="dropdown-menu" id="subarticle-menu" role="menu">
+ <div class="dropdown-content">
+ {% for page in subarticles|dictsort:"name" %}
+ <a href="{{ page.path }}" class="dropdown-item">{{ page.name }}</a>
+ {% endfor %}
+ </div>
+ </div>
+</div>
diff --git a/pydis_site/templates/content/listing.html b/pydis_site/templates/content/listing.html
new file mode 100644
index 00000000..ef0ef919
--- /dev/null
+++ b/pydis_site/templates/content/listing.html
@@ -0,0 +1,27 @@
+{% extends 'content/base.html' %}
+
+{% block page_content %}
+ {% for category, data in categories.items %}
+ <div class="box" style="max-width: 800px;">
+ <span class="icon is-size-4 is-medium">
+ <i class="{{ data.icon|default:"fas fa-folder" }} is-size-3 is-black has-icon-padding" aria-hidden="true"></i>
+ </span>
+
+ <a href="{% url "content:page_category" location=path|add:category %}">
+ <span class="is-size-4 has-text-weight-bold">{{ data.title }}</span>
+ </a>
+ <p class="is-italic">{{ data.description }}</p>
+ </div>
+ {% endfor %}
+ {% for page, data in pages.items %}
+ <div class="box" style="max-width: 800px;">
+ <span class="icon is-size-4 is-medium">
+ <i class="{{ data.icon|default:"fab fa-python" }} is-size-3 is-black has-icon-padding" aria-hidden="true"></i>
+ </span>
+ <a href="{% url "content:page_category" location=path|add:page %}">
+ <span class="is-size-4 has-text-weight-bold">{{ data.title }}</span>
+ </a>
+ <p class="is-italic">{{ data.description }}</p>
+ </div>
+ {% endfor %}
+{% endblock %}
diff --git a/pydis_site/templates/content/page.html b/pydis_site/templates/content/page.html
new file mode 100644
index 00000000..759286f6
--- /dev/null
+++ b/pydis_site/templates/content/page.html
@@ -0,0 +1,41 @@
+{% extends 'content/base.html' %}
+
+{% block head %}
+ {{ block.super }}
+ <link rel="stylesheet"
+ href="//cdnjs.cloudflare.com/ajax/libs/highlight.js/10.7.1/styles/atom-one-dark.min.css">
+ <script src="//cdnjs.cloudflare.com/ajax/libs/highlight.js/10.7.1/highlight.min.js"></script>
+ <script>hljs.initHighlightingOnLoad();</script>
+{% endblock %}
+
+{% block page_content %}
+ {% if relevant_links or toc %}
+ <div class="columns is-variable is-8">
+ <div class="column is-two-thirds">
+ {{ page|safe }}
+ </div>
+ <div class="column">
+ {% if toc %}
+ <div class="box">
+ <p class="menu-label">Table of Contents</p>
+ <ul class="menu-list toc">
+ {{ toc|safe }}
+ </ul>
+ </div>
+ {% endif %}
+ {% if relevant_links %}
+ <div class="box">
+ <p class="menu-label">Relevant links</p>
+ <ul class="menu-list">
+ {% for value, link in relevant_links.items %}
+ <li><a class="has-text-link" href="{{link}}">{{ value }}</a></li>
+ {% endfor %}
+ </ul>
+ </div>
+ {% endif %}
+ </div>
+ </div>
+ {% else %}
+ <div>{{ page|safe }}</div>
+ {% endif %}
+{% endblock %}
diff --git a/pydis_site/templates/events/_base.html b/pydis_site/templates/events/_base.html
new file mode 100644
index 00000000..ff78d944
--- /dev/null
+++ b/pydis_site/templates/events/_base.html
@@ -0,0 +1,33 @@
+{% extends "base/base.html" %}
+{% load static %}
+
+{% block head %}
+ <link rel="stylesheet" href="{% static "css/events/base.css" %}">
+ <link rel="stylesheet"
+ href="//cdnjs.cloudflare.com/ajax/libs/highlight.js/10.4.0/styles/atom-one-dark.min.css">
+ <script src="//cdnjs.cloudflare.com/ajax/libs/highlight.js/10.4.0/highlight.min.js"></script>
+ <script>hljs.initHighlightingOnLoad();</script>
+{% endblock %}
+
+{% block content %}
+ {% include "base/navbar.html" %}
+
+ <section class="breadcrumb-section section">
+ <div class="container">
+ <nav class="breadcrumb is-pulled-left" aria-label="breadcrumbs">
+ <ul>
+ {% block breadcrumb %}{% endblock %}
+ </ul>
+ </nav>
+ </div>
+ </section>
+
+ <section class="section">
+ <div class="container">
+ <div class="content">
+ <h1>{% block title %}{% endblock %}</h1>
+ <div>{% block event_base_content %}{% endblock %}</div>
+ </div>
+ </div>
+ </section>
+{% endblock %}
diff --git a/pydis_site/templates/events/base.html b/pydis_site/templates/events/base.html
new file mode 100644
index 00000000..c9a963e7
--- /dev/null
+++ b/pydis_site/templates/events/base.html
@@ -0,0 +1,7 @@
+{% extends "events/_base.html" %}
+
+{% block event_base_content %}
+<div>
+ {% block event_content %}{% endblock %}
+</div>
+{% endblock %}
diff --git a/pydis_site/templates/events/base_sidebar.html b/pydis_site/templates/events/base_sidebar.html
new file mode 100644
index 00000000..8ce6ad65
--- /dev/null
+++ b/pydis_site/templates/events/base_sidebar.html
@@ -0,0 +1,12 @@
+{% extends "events/base.html" %}
+
+{% block event_base_content %}
+<div class="columns is-variable is-8">
+ <div class="column is-two-thirds">
+ {% block event_content %}{% endblock %}
+ </div>
+ <div class="column">
+ {% block sidebar %}{% endblock %}
+ </div>
+</div>
+{% endblock %}
diff --git a/pydis_site/templates/events/index.html b/pydis_site/templates/events/index.html
new file mode 100644
index 00000000..024e7fdc
--- /dev/null
+++ b/pydis_site/templates/events/index.html
@@ -0,0 +1,123 @@
+{% extends "events/base_sidebar.html" %}
+
+{% block title %}Events{% endblock %}
+
+{% block breadcrumb %}
+ <li class="is-active"><a href="#">Events</a></li>
+{% endblock %}
+
+{% block event_content %}
+ <div class="box">
+ <h2 class="title is-4">Code Jams</h2>
+ <p>Each year, we organize a Winter Code Jam and a Summer Code Jam. During these events, members of our community will work together in teams to create something amazing using a technology we picked for them. One such technology that was picked for the Winter Code Jam 2020 was Kivy, a cross-platform GUI framework.</p>
+ <p>To help fuel the creative process, we provide a specific theme, like <strong>Ancient Technology</strong> or <strong>This App Hates You</strong>. At the end of the Code Jam, the projects are judged by Python Discord server staff members and guest judges from the larger Python community. The judges will consider creativity, code quality, teamwork, and adherence to the theme.</p>
+ <p>If you want to read more about Code Jams, visit our <a href="{% url "events:page" path="code-jams" %}">Code Jam info page</a> or watch this video showcasing the best projects created during the <strong>Winter Code Jam 2020: Ancient Technology</strong>:</p>
+ <iframe width="560" height="315" src="https://www.youtube.com/embed/8fbZsGrqBzo" frameborder="0" allow="accelerometer; autoplay; encrypted-media; gyroscope; picture-in-picture" allowfullscreen=""></iframe>
+ </div>
+
+ <div class="box">
+ <h2 class="title is-4">Game Jam</h2>
+ <div class="columns is-3" style="--columnGap: 0.75rem;">
+ <div class="column">
+ <p>
+ The Game Jam is similar to our Code Jams, but smaller in scope. Instead of having to complete a qualifier
+ and being teamed up with random strangers, members of our community can just sign-up individually or pair up
+ with whoever they like.
+ </p>
+ <p>
+ The participants will have ten days to create a game using the technology we've selected, and drawing
+ inspiration from a provided theme. After the event, a panel of judges will play all the games and select a
+ winner. The top 5 will featured in a special video on our <a href="https://www.youtube.com/channel/UCQsrA4xo6jvdgsJZhKaBL6w">YouTube channel</a>.
+ </p>
+ <p>
+ The <a class="has-text-link" href="{% url "events:page" path="game-jams/2020" %}">first edition of the Game Jam</a> ran from
+ <strong>April 17, 2020 to April 26, 2020</strong>.
+ </p>
+ </div>
+ <div class="column is-3">
+ <img src="https://user-images.githubusercontent.com/33516116/77593036-5fb09780-6eeb-11ea-9feb-336b2e5e23de.png" style="border-radius: 10px;" alt="">
+ </div>
+ </div>
+ </div>
+
+ <div class="box">
+ <h2 class="title is-4">Hacktoberfest</h2>
+ <div class="columns is-3" style="--columnGap: 0.75rem;">
+ <div class="column">
+ <p>
+ This event revolves around the annual <a href="https://hacktoberfest.digitalocean.com/">Hacktoberfest
+ event</a> organized by Digital Ocean. In addition to promoting Hacktoberfest in our community and supporting
+ those who choose to take their first steps into the world of open source, we will also ease our members into
+ contributing to open source by starting a low-entry, beginner-friendly open source project where we will
+ guide our members through the open source process in a safe environment.
+ </p>
+ <p>
+ The exact form this event will take has not been decided yet, but we'll make sure to keep you updated in
+ our community announcements!
+ </p>
+ </div>
+ <div class="column is-3">
+ <img src="https://raw.githubusercontent.com/python-discord/branding/master/seasonal/halloween/hacktoberfest/2020/animated_server_icon.gif" style="border-radius: 10px;" alt="">
+ </div>
+ </div>
+ </div>
+
+ <div class="box">
+ <h2 class="title is-4">Advent of Code</h2>
+ <div class="columns is-3" style="--columnGap: 0.75rem;">
+ <div class="column">
+ <p>
+ Each year, many of our members take part of an online coding competition called
+ <a href="https://adventofcode.com/">Advent of Code</a> that takes place in December. Advent of Code is an
+ Advent calendar of small programming puzzles for a variety of skill sets and skill levels that can be solved
+ in any programming language you like, including Python.
+ </p>
+ <p>
+ During the event, we will open a special discussion channel in which our members can discuss the puzzles
+ and compare their solutions. We will also open a private leaderboard and may even reward the best scoring
+ members on that board with prizes!
+ </p>
+ <p>
+ However, this event isn't purely competitive. You can also join in just to see how far you'll get, to
+ challenge yourself, as a way of learning Python, or just for the fun of it. In 2019, almost 200 members
+ signed up for our private leaderboard, but many more took on the challenge without focusing on the
+ competitive aspect.
+ </p>
+ </div>
+ <div class="column is-3">
+ <img src="https://raw.githubusercontent.com/python-discord/branding/master/seasonal/christmas/2019/festive_256.gif" style="border-radius: 10px;" alt="">
+ </div>
+ </div>
+ </div>
+
+ <div class="box">
+ <h2 class="title is-4">PyWeek</h2>
+ <div class="columns is-3" style="--columnGap: 0.75rem;">
+ <div class="column">
+ <p>
+ For the past 15 years, <a href="https://pyweek.org">PyWeek</a> has been running a bi-annual game jam for the
+ Python language. As of 2020, we are excited to say we are officially partnered with PyWeek to co-run these
+ events.
+ </p>
+ <p>
+ During each PyWeek event, we open a special discussion channel in which our members can discuss their
+ submissions, meet other participants, and talk to PyWeek staff. The PyWeek organizer,
+ Daniel Pope (<a href="https://twitter.com/lordmauve">@lordmauve</a>) will be present during the entire event to answer
+ questions and post announcements and information in our community.
+ </p>
+ <p>
+ Unlike our other events, the <strong>community</strong> will select the winner from all the submissions
+ during PyWeek. We may release YouTube content showcasing the best submissions after the events are finished.
+ </p>
+ </div>
+ <div class="column is-3">
+ <img src="https://pyweek.readthedocs.io/en/latest/_static/pyweek.svg" style="border-radius: 10px;" alt="">
+ </div>
+ </div>
+ </div>
+{% endblock %}
+
+{% block sidebar %}
+ {% include "events/sidebar/upcoming-event.html" %}
+ {% include "events/sidebar/events-list.html" %}
+{% endblock %}
diff --git a/pydis_site/templates/events/pages/code-jams/1.html b/pydis_site/templates/events/pages/code-jams/1.html
new file mode 100644
index 00000000..bde4e0b4
--- /dev/null
+++ b/pydis_site/templates/events/pages/code-jams/1.html
@@ -0,0 +1,82 @@
+{% extends "events/base.html" %}
+
+{% block title %}Code Jam 1: Snakes{% endblock %}
+
+{% block breadcrumb %}
+ <li><a href="{% url "events:index" %}">Events</a></li>
+ <li><a href="{% url "events:page" path="code-jams" %}">Code Jams</a></li>
+ <li class="is-active"><a href="#">Code Jam 1: Snakes</a></li>
+{% endblock %}
+
+{% block event_content %}
+ <p>
+ The theme of the code jam was <strong>snakes</strong> Participants were assigned a random partner,
+ and used Git to submit code to us. Staff members reviewed the code both during and after the code jam,
+ and provided suggestions for changes and improvements.
+ The best submissions were implemented into our community bot.
+ Winners recieved a special Code Jam Champion title.
+ </p>
+
+ <h2 id="task-description" class="title is-4"><a href="#task-description">Task description</a></h2>
+ <p>Here is the original task description which was posted on the code-jam-1 GitHub repo:</p>
+
+ <blockquote>
+ <p>
+ For this code jam, your task will be to create a Snake cog for a Discord.py rewrite bot.
+ <a href="https://discordpy.readthedocs.io/en/rewrite/">You can find the documentation for Discord.py rewrite here</a>.
+ The best cog commands will be added to the official Python Discord bot and made available to everyone on the server.
+ The overall best cog will be awarded custom Code Jam Champion roles,
+ but the best commands from the teams who did not win will also be added to our bot,
+ and any users who write something that ends up in the bot will be awarded Contributor roles on the server.
+ </p>
+ <p>
+ Your initial task will be to write <code>get_snek()</code>. This is the minimum requirement for this contest,
+ and everyone must do it. <code>get_snek()</code> should be a method that goes online and fetches information about a snake.
+ If you run it without providing an argument, it should fetch information about a random snake,
+ including the name of the snake, a picture of the snake, and various information about it.
+ Is it venomous? Where can it be found? What information you choose to get is up to you.
+ </p>
+ <p>
+ <code>get_snek()</code> should also take an optional argument name, which should be a string that represents the name of a snake.
+ For example, the call <code>get_snek('cobra')</code> should get information about a cobra. name should be case insensitive.
+ </p>
+ <p>
+ If <code>get_snek('Python')</code> is called, the method should instead return information about the programming language,
+ but making sure to return the same type of information as for all the other snakes.
+ Fill in this information in any way you want, try to have some fun with it.
+ </p>
+ <p>
+ Once you have finished <code>get_snek()</code>, you should make at least two bot commands.
+ The first command, <code>get()</code>, should simply call <code>get_snek()</code> with whatever arguments the user provided,
+ and then make a nice embed that it returns to Discord.
+ For example, if the user in the Discord channel says bot.snakes.get('anaconda'),
+ the bot should post an embed that shows a picture of an anaconda and some information about the snake.
+ </p>
+ <p>
+ The second command is entirely up to you. You can choose to use <code>get_snek</code> for this command as well,
+ or you can come up with something entirely different.
+ The only requirement is that it is snake related in some way or other.
+ Here is your chance to be creative. It is these commands that will win or lose you this code jam.
+ The best original ideas for these commands will walk away with the victory.
+ </p>
+ </blockquote>
+
+ <h2 id="result" class="title is-4"><a href="#result">Result</a></h2>
+ <p><strong>The Winning Team: Team 23, kel and Momo!</strong></p>
+ <p>
+ These two experts worked together to create what can only be described as a flawless submission.
+ The staff were unable to find a single thing to complain about in the 1100 lines that were committed.
+ Here are some of the features they created for their snake cog:
+ </p>
+ <ul>
+ <li>A fully functional implementation of Snakes and Ladders</li>
+ <li>A feature that uses perlin noise to draw a random snake, and posts the picture in the chat.</li>
+ <li>Hatch your very own baby snake!</li>
+ <li>Snakify your post history with a Markov chain</li>
+ <li>Rattlesnake sound effects in the voice channels</li>
+ </ul>
+ <p>
+ These features, as well as the best ones from the other teams,
+ have been implemented into our community bot. Use <code>.snakes</code> in <code>#sir-lancebot-commands</code> to play with it.
+ </p>
+{% endblock %}
diff --git a/pydis_site/templates/events/pages/code-jams/2.html b/pydis_site/templates/events/pages/code-jams/2.html
new file mode 100644
index 00000000..602a1c66
--- /dev/null
+++ b/pydis_site/templates/events/pages/code-jams/2.html
@@ -0,0 +1,72 @@
+{% extends "events/base.html" %}
+
+{% block title %}Code Jam 2: Mythological API{% endblock %}
+
+{% block breadcrumb %}
+ <li><a href="{% url "events:index" %}">Events</a></li>
+ <li><a href="{% url "events:page" path="code-jams" %}">Code Jams</a></li>
+ <li class="is-active"><a href="#">Code Jam 2: Mythological API</a></li>
+{% endblock %}
+
+{% block event_content %}
+ <p>
+ The theme for this code jam will be <strong>mythology</strong>.
+ That means you're going to be creating a <strong>RESTful API in Flask with a mythology theme</strong>.
+ </p>
+ <p>
+ For example, you might create the The Mimír API,
+ an API used to look up information about norse gods and godesses.
+ </p>
+
+ <pre><code class="lang-json">{
+ "name": "Kvasir",
+ "parents": "Born from the saliva of the Æsir and the Vanir",
+ "type": "A god of wisdom and knowledge"
+}</code></pre>
+
+ <p>
+ The API must respond with json data, but this is not limited to text.
+ It could respond with bytedata, with a URL to an image, a video or some audio,
+ or with any other form of data you deem interesting.
+ </p>
+ <p>
+ The API should accept at least a GET or a POST request with JSON data.
+ You are allowed to use any third party libraries you want.
+ </p>
+ <p>
+ Remember, creativity counts. Try to have fun with it.
+ We're not necessarily looking for dead serious solutions only,
+ and it's okay if your solution is only tangentially related to the theme,
+ so long as there's a relationship of some sort.
+ </p>
+
+ <h2 id="results" class="title is-4"><a href="#results">Results</a></h2>
+ <p>The winner of the second code jam is <strong>Defiant Sails</strong>, with Momo, WrongEnd, and SharpBit! Congratulations!</p>
+
+ <p>
+ They've written a phenomenal API with OAuth authentication, a multiplayer RPG,
+ and a feature to procedurally generate a random mythologically themed story.
+ This story can be played as a video,
+ where they use Text-To-Speech to read the story out loud while epic music plays in the background.
+ The music is different for each play, and the audio is visualized in a video.
+ </p>
+ <p>
+ The team will receive the grand prize of 12-month PyCharm Pro licenses,
+ and will also receive the honorary Code Jam Champions role.
+ </p>
+ <hr>
+ <p>
+ In second place with another really excellent submission, we have the team <strong>Rude Interests</strong>,
+ consisting of Lord Bisk, Runew0lf and Nix. They've got procedurally generated rune images,
+ procedural mythologies with gods with procedural relationships, descriptions, genders, and names.
+ A super fun idea which nearly ended up taking the first place.
+ </p>
+ <hr>
+ <p>
+ In third place, we have <strong>Overconfident Ideas</strong>, with Martmists, Casterly and eivl.
+ They did relationship trees with a number of different visualization options,
+ a fantastic myth lookup feature to find a great deal of details about a mythological figure,
+ a mythology trivia feature, and a markov chain string generator.
+ It also had a very comprehensive framework and it was clear that a great deal of work had gone into it.
+ </p>
+{% endblock %}
diff --git a/pydis_site/templates/events/pages/code-jams/3.html b/pydis_site/templates/events/pages/code-jams/3.html
new file mode 100644
index 00000000..0bd293db
--- /dev/null
+++ b/pydis_site/templates/events/pages/code-jams/3.html
@@ -0,0 +1,81 @@
+{% extends "events/base.html" %}
+
+{% block title %}Code Jam 3: Games!{% endblock %}
+
+{% block breadcrumb %}
+ <li><a href="{% url "events:index" %}">Events</a></li>
+ <li><a href="{% url "events:page" path="code-jams" %}">Code Jams</a></li>
+ <li class="is-active"><a href="#">Code Jam 3: Games!</a></li>
+{% endblock %}
+
+{% block event_content %}
+ <p>
+ The theme for code jam 3 was creating a <strong>game</strong> with the theme <strong>the world ends in 10 minutes</strong>.
+ The teams of three could live out their creativity here - any form of game was fine,
+ as long as they fit the theme. The jam started at <strong>Monday, the 22nd October 2018, 12:00 PM UTC</strong>.
+ </p>
+
+ <h2 id="task-description" class="title is-4"><a href="#task-description">Task Description</a></h2>
+ <p>The <a href="https://github.com/python-discord/code-jam-3">original task description</a> was as follows:</p>
+ <blockquote>
+ <p>
+ This task is a little more freeform than the other code jams we've had so far -
+ we're happy to accept games in any form, as long as they fit that theme.
+ You may use PyGame, Kivy, Curses/Unicurses, Pyxel, web frameworks like Flask,
+ or anything else your team desires.
+ Please provide instructions on how to set up and run your game within the README where necessary.
+ Remember that teamwork is paramount - You will need to work together.
+ For this jam, we've assigned a leader for each team based on their responses to the application form.
+ Remember to listen to your leader, and communicate with the rest of your team!
+ </p>
+ </blockquote>
+
+ <h2 id="results" class="title is-4"><a href="#results">Results</a></h2>
+ <p>
+ The <strong>winning team</strong> for this jam was Certain Horses, consisting of Wattle, Scragly, and Mark.
+ They made a 2D platformer where the player had to collect lemons in order to earn points.
+ Below the player was an ocean of lemon juice that caused instant death if you touched it.
+ </p>
+ <p>
+ Every time you collected a lemon, the lemon juice water level would raise up,
+ so you had to be tactical about which lemons you could collect
+ without dying and which of the branching paths you'd have to select to avoid the sea of lemon juice rushing up to meet you.
+ </p>
+ <p>
+ You can play the game by yourself here:
+ <a href="https://github.com/MarkKoz/code-jam-3">https://github.com/MarkKoz/code-jam-3</a>
+ </p>
+
+ <h2 id="runner-up-1" class="title is-4"><a href="#runner-up-1">Runner up 1: Successful Toads</a></h2>
+ <p>
+ The <strong>first runner up</strong> for this jam was team Successful Toads,
+ whose code can be found at <a href="https://gitlab.com/biskette/code-jam-3/">https://gitlab.com/biskette/code-jam-3/</a>.
+ They wrote a flask app game which was about deciding who to let into the last nuclear bunker on the planet.
+ Like Tinder, but for nuclear holocaust gatekeepers.
+ The game had procedurally generated graphics which were absolutely hilarious,
+ and you would swipe right or left to decide whether or not to let someone into your bunker.
+ Each person had certain traits which could either save or destroy your bunker.
+ </p>
+ <p>
+ In order to win, you had to balance stuff like medical expertise with combat experience
+ and make sure that your bunker would survive into the post-apocalypse.
+ </p>
+
+ <h2 id="runner-up-2" class="title is-4"><a href="#runner-up-2">Runner up 2: Misty Hats</a></h2>
+ <p>
+ The second runner up for this jam was team Misty Hats,
+ with code available at <a href="https://gitlab.com/JannesJ/code-jam-3">https://gitlab.com/JannesJ/code-jam-3</a>.
+ They made an excellent shoot-em-up in the style of Gradius,
+ with a long intro cinematic, lots of original graphics assets,
+ and a whole bunch of different power-ups. Other features included:
+ </p>
+ <ul>
+ <li><p>Fighter enemy: A tiny spaceship that will follow you and try to take you down.</p></li>
+ <li><p>Pythonic mines: Space mines shaped like Python logos that damage you if you touch them.</p></li>
+ <li><p>Defensive Structures: Semi-Stationary defensive structures that will shoot you on sight</p></li>
+ <li><p>8 different power-ups: Extra damage, armor, hp, shield, double shot.. and more!</p></li>
+ <li><p>Timers: A ten minute timer and small timers for temporary power ups.</p></li>
+ <li><p>Different size/color blaster projectiles</p></li>
+ <li><p>Wave system</p></li>
+ </ul>
+{% endblock %}
diff --git a/pydis_site/templates/events/pages/code-jams/4.html b/pydis_site/templates/events/pages/code-jams/4.html
new file mode 100644
index 00000000..f3d750bc
--- /dev/null
+++ b/pydis_site/templates/events/pages/code-jams/4.html
@@ -0,0 +1,93 @@
+{% extends "events/base.html" %}
+
+{% block title %}Code Jam 4: This Apps Hates You{% endblock %}
+
+{% block breadcrumb %}
+ <li><a href="{% url "events:index" %}">Events</a></li>
+ <li><a href="{% url "events:page" path="code-jams" %}">Code Jams</a></li>
+ <li class="is-active"><a href="#">Code Jam 4: This Apps Hates You</a></li>
+{% endblock %}
+
+{% block event_content %}
+ <p>
+ The theme for code jam 4 was creating a <strong>GUI application</strong> with the theme <strong>this app hates you</strong>.
+ 19 randomly assembled teams worked on this task for three days from the 22nd of February, 00:00 UTC.
+ </p>
+
+ <h2 id="task-description" class="title is-4"><a href="#task-description">Task Description</a></h2>
+ <p>
+ The original task description,
+ as found in the <a href="https://github.com/python-discord/code-jam-4">repository</a> was as follows:
+ </p>
+ <blockquote>
+ <p>
+ The theme for this code jam will be <strong>This app hates you!</strong>.
+ You will be creating an application using a GUI library of your choice in Python.
+ The application must serve a real purpose, but must also fit the theme.
+ </p>
+ <p>
+ Here are a couple of examples of what we mean by an application that "serves a real purpose but also fits the theme":
+ </p>
+ <ul>
+ <li><p>A calculator app that calculates the right answers, but represents the answer in a way that's completely impractical.</p></li>
+ <li>
+ <p>
+ An image resizer where you have to specify which part of the image to resize,
+ specify how much force to apply to the resize operation in newtons,
+ and then manually resize the image by turning a crank.
+ </p>
+ </li>
+ <li>
+ <p>
+ An alarm clock app that plays a very loud sound effect every 5 minutes reminding you that your alarm will ring in 6 hours.
+ The closer it gets to the 6 hour mark, the lower the volume of the sound effect.
+ When the time is up, the sound effect is virtually inaudible.
+ </p>
+ </li>
+ </ul>
+ </blockquote>
+
+ <h2 id="judging-stream" class="title is-4"><a href="#judging-stream">Judging stream</a></h2>
+ <p>
+ If you want to watch the original code jam judging stream,
+ you can find it on YouTube - all of the submissions are showcased in the stream.
+ The winning project is showcased at around the 40 minute mark.
+ </p>
+ <iframe width="560" height="315" src="https://www.youtube.com/embed/TlU6GPGbSuY?start=805" frameborder="0" allow="accelerometer; autoplay; encrypted-media; gyroscope; picture-in-picture" allowfullscreen></iframe>
+
+ <h2 id="results" class="title is-4"><a href="#results">Results</a></h2>
+ <p>
+ The <strong>winning team</strong> for this code jam was the team <strong>Cool Crocodiles</strong>,
+ consisting of Runew0lf, gl4cial, and syntaxaire.
+ They created a text editor called CrocPad++ featuring an infuriating troubleshooter that would pop up every five or so characters,
+ sound effects when you type, the ability to insert symbols by turning a dial,
+ a theme "for blind users", and many more features.
+ </p>
+
+ <h2 id="runner-up-1" class="title is-4"><a href="#runner-up-1">Runner up 1: Team Enthusiastic Electricians</a></h2>
+ <p>
+ The <strong>first runner up</strong> for this code jam was the team <strong>Enthusiastic Electricians</strong>,
+ who made a paint tool called <i>ArtiQule</i> where the pencil point would break,
+ colors would blend together on your palette, and the paint brush would drip onto the canvas.
+ </p>
+
+ <h2 id="runner-up-2" class="title is-4"><a href="#runner-up-2">Runner up 2: Team Slithering Snacks</a></h2>
+ <p>
+ The <strong>second runner up</strong> for this code jam was the team <strong>Slithering Snacks</strong>.
+ They ade a media player where you had to fill out a CAPTCHA every time you wanted to load a file,
+ register an account, and confirm your password to log in by typing it with all the characters <i>in alphabetic order</i>.
+ </p>
+
+ <h2 id="honorable-mentions" class="title is-4"><a href="#honorable-mentions">Honorable mentions</a></h2>
+ <p>While they didn't make it on top of the ladder, the following submissions have stood out exceptionally:</p>
+ <ul>
+ <li><p>Team <strong>Blue Buckets</strong> won best code quality with their <i>Tinder for Cats</i>.</p></li>
+ <li>
+ <p>
+ Team <strong>Overjoyed <a href="https://wiki.teamfortress.com/wiki/Otolaryngologist%27s_Mirror">Otolaryngologists</a></strong>
+ won best looking UI with their sleek <i>Minesweeper</i> game where you had to press each tile up to 100 times to break it and only got one flag.
+ </p>
+ </li>
+ <li><p>Team <strong>High Houses</strong> won best idea with an <i>on-screen keyboard</i> where you only got some of the keys and additional keys had to be unlocked by gaining XP, leveling up, and getting loot boxes.</p></li>
+ </ul>
+{% endblock %}
diff --git a/pydis_site/templates/events/pages/code-jams/5.html b/pydis_site/templates/events/pages/code-jams/5.html
new file mode 100644
index 00000000..ba6928c7
--- /dev/null
+++ b/pydis_site/templates/events/pages/code-jams/5.html
@@ -0,0 +1,80 @@
+{% extends "events/base.html" %}
+
+{% block title %}Code Jam 5: Climate Change{% endblock %}
+
+{% block breadcrumb %}
+ <li><a href="{% url "events:index" %}">Events</a></li>
+ <li><a href="{% url "events:page" path="code-jams" %}">Code Jams</a></li>
+ <li class="is-active"><a href="#"></a>Code Jam 5: Climate Change</li>
+{% endblock %}
+
+{% block event_content %}
+ <p>
+ The theme for code jam 5 was <strong>climate change</strong>.
+ Similar to <a href="https://pythondiscord.com/pages/code-jams/code-jam-3/">code jam 3</a>,
+ teams could live out their creativity here, as long as it fits the theme.
+ The code jam started on July 20, 2019 at 12 PM UTC,
+ and with more than 117 sign-ups and 27 teams competing,
+ this was our biggest code jam ever (so far)!
+ </p>
+
+ <h2 id="task-description" class="title is-4"><a href="#task-description">Task Description</a></h2>
+ <p>The original task description, as found in <a href="https://github.com/python-discord/code-jam-5">the repository</a>, was as follows:</p>
+ <blockquote>
+ <p>
+ Your theme for this code jam is <strong>climate change</strong>.
+ </p>
+ <p>
+ Because this is a free-for-all, you are free to make anything you want,
+ as long as it fits this theme.
+ We'd love if you created something that might help raise awareness,
+ but first and foremost, we want you to create something <i>fun</i>.
+ </p>
+ </blockquote>
+
+ <h2 id="judging-stream" class="title is-4"><a href="#judging-stream">Judging stream</a></h2>
+ <p>
+ If you want to watch the original code jam judging stream,
+ you can find it on YouTube - all of the submissions are showcased in the stream.
+ The winning project is showcased at around the 30 minute mark.
+ </p>
+ <iframe width="560" height="315" src="https://www.youtube.com/embed/drBKNU73Ss4" frameborder="0" allow="accelerometer; autoplay; encrypted-media; gyroscope; picture-in-picture" allowfullscreen></iframe>
+
+ <h2 id="results" class="title is-4"><a href="#results">Results</a></h2>
+ <p>
+ While it was a difficult decision, the winners were Team <strong>Combined Crusader</strong>,
+ consisting of Makusu, Mahabama, and missingfragment.
+ They made a really addicting <i>Climate Clicker game</i> that surprised us for being extremely responsive,
+ having beautiful, original art assets, and, most of all, being really fun to play.
+ The code quality of this project was good and they used Pythonic techniques like the LRU cache to make the game behave extremely snappy.
+ </p>
+ <p>
+ You can check out their entry in the
+ <a href="https://github.com/python-discord/code-jam-5/tree/master/combined_crusaders">repository</a>
+ and watch us doing so in the <a href="https://www.youtube.com/watch?v=drBKNU73Ss4&t=1815s">livestream</a>.
+ </p>
+
+ <h2 id="runner-up-1" class="title is-4"><a href="#runner-up-1">Runner up 1: Various Vipers</a></h2>
+ <p>
+ Team <strong>Various Vipers</strong> produced a game consisting of various mini-games that had an excellent graphical user interface.
+ The fact that the project had accompanying game design documents showed how well-organized this project was.
+ Combined with good code quality, this thematic project deserves the second place in this code jam.
+ </p>
+ <p>
+ Feel free to check out their submission in the code jam <a href="https://github.com/python-discord/code-jam-5/tree/master/various_vipers">repository</a>
+ and watch us inspecting it in the <a href="https://www.youtube.com/watch?time_continue=1&v=drBKNU73Ss4&feature=emb_logo">livestream</a>.
+ </p>
+
+ <h2 id="runner-up-2" class="title is-4"><a href="#runner-up-2">Runner up 2: Gentle Gnomes</a></h2>
+ <p>
+ The <strong>Gentle Gnomes</strong> ended up in the third spot.
+ Their web app allowed the user to search for a location and would then show climate-related statistics,
+ plots as well as projections for the future for the specified location.
+ The code quality of this project was outstanding and the web app was extremely useful and interesting.
+ </p>
+ <p>
+ Again, you can view their submission on the
+ <a href="https://github.com/python-discord/code-jam-5/tree/master/gentle_gnomes">repository</a>
+ or view it live on the <a href="https://www.youtube.com/watch?v=drBKNU73Ss4&t=7800s">livestream</a>.
+ </p>
+{% endblock %}
diff --git a/pydis_site/templates/events/pages/code-jams/6/_index.html b/pydis_site/templates/events/pages/code-jams/6/_index.html
new file mode 100644
index 00000000..256914b6
--- /dev/null
+++ b/pydis_site/templates/events/pages/code-jams/6/_index.html
@@ -0,0 +1,93 @@
+{% extends "events/base_sidebar.html" %}
+
+{% block title %}Winter Code Jam 2020: Ancient Technology{% endblock %}
+
+{% block breadcrumb %}
+ <li><a href="{% url "events:index" %}">Events</a></li>
+ <li><a href="{% url "events:page" path="code-jams" %}">Code Jams</a></li>
+ <li class="is-active"><a href="#"></a>Winter Code Jam 2020: Ancient Technology</li>
+{% endblock %}
+
+{% block event_content %}
+ <p>
+ The theme for the Winter Code Jam 2020, the sixth Python Discord Code Jam,
+ was utilizing the <strong>Kivy Framework</strong> to create <strong>Ancient Technology</strong>.
+ The jam lasted for 9 days from January 17, 2020 to January 26, 2020 with 16 teams competing against each other.
+ </p>
+
+ <h2 id="task-description" class="title is-4"><a href="#task-description">Task Description</a></h2>
+ <p>
+ The original task description, as found in the <a href="https://github.com/python-discord/code-jam-6">repository</a>, was as follows:
+ </p>
+ <blockquote>
+ <p>By popular choice, the theme for this code jam is <strong>Ancient Technology</strong>.</p>
+ <p>
+ What you do with this theme or how you interpret it is up to you,
+ but it will be your task to come up with something fun using this theme.
+ </p>
+ </blockquote>
+
+ <h2 id="judging-stream" class="title is-4"><a href="#judging-stream">Judging Stream</a></h2>
+ <p>
+ If you want to watch the original code jam judging stream,
+ you can find it on YouTube - all of the submissions are showcased in the stream.
+ The winning project is showcased at the <a href="https://youtu.be/I97L_Y3rhvc?t=13710">03:48:30</a> timestamp.
+ </p>
+ <iframe width="560" height="315" src="https://www.youtube.com/embed/I97L_Y3rhvc" frameborder="0" allow="accelerometer; autoplay; encrypted-media; gyroscope; picture-in-picture" allowfullscreen></iframe>
+
+ <h2 id="results" class="title is-4"><a href="#results">Results</a></h2>
+ <p>
+ The <strong>winning team</strong> for this code jam was team <strong>Tactless Tricksters</strong>,
+ consisting of GoBig87, Kan, sposker, DomicidalManiac, and Inventor.
+ They created an incredible morse code chatting app, with a plethora of different features.
+ Morse code training, morse code audio encoding/decoding, audio input sensitivity calibration,
+ and a morse code messaging system are all features of this project.
+ The beautiful and intuitive UI paired with all these features was what won them this jam.
+ With the given amount of time during this jam, this was quite the impressive project.
+ </p>
+ <p>
+ You can check out their entry in the
+ <a href="https://github.com/python-discord/code-jam-6/tree/master/tactless-tricksters">repository</a>
+ and watch us doing so in the <a href="https://youtu.be/I97L_Y3rhvc?t=13710">livestream</a>.
+ The top 3 winning teams' projects are also displayed on the <a href="https://kivy.org#gallery">Kivy Gallery</a>.
+ </p>
+
+ <h2 id="runner-up-1" class="title is-4"><a href="#runner-up-1">Runner up 1: Circumstancial Champions</a></h2>
+ <p>
+ The <strong>Circumstantial Champions</strong> (salt-die, david987, & Music)
+ created a game in which players go back in time to smash and carve out rocks,
+ just like cavemen. The combination of their execellent graphical interface, animations,
+ and satisfying sounds made this one of the most polished projects in the jam.
+ </p>
+ <p>
+ Check out their submission in the code jam
+ <a href="https://github.com/python-discord/code-jam-6/tree/master/circumstantial-companions">repository</a>
+ and view it live on the <a href="https://youtu.be/I97L_Y3rhvc?t=2854">livestream</a>.
+ </p>
+
+ <h2 id="runner-up-2" class="title is-4"><a href="#runner-up-2">Runner up 2: Inquisitive Investigators</a></h2>
+ <p>
+ Team <strong>Inquisitive Investigators</strong> (f1re & Monika) ended up in third place with their retro TUI file explorer.
+ The simple, easy-to-use file explorer along with their built-in terminal, text editor,
+ and photo viewer made this a very feature packed project.
+ </p>
+ <p>
+ Feel free to view their submission on the
+ <a href="https://github.com/python-discord/code-jam-6/tree/master/inquisitive-investigators">repository</a>
+ and watch us review it on the <a href="https://youtu.be/I97L_Y3rhvc?t=6545">livestream</a>.
+ </p>
+
+ <img src="https://raw.githubusercontent.com/python-discord/code-jam-6/master/ancient%20tech.png?token=AAQAKVPQ55SEFWYYLYO5YV26ETLTC" alt="Code Jam Banner" style="max-width:100%;">
+{% endblock %}
+
+{% block sidebar %}
+ {% include "events/sidebar/code-jams/6.html" %}
+ <div class="box">
+ <p class="menu-label">Relevant Links</p>
+ <ul class="menu-list">
+ <li><a class="has-text-link" href="{% url "events:page" path="code-jams/6/rules" %}">Rules</a></li>
+ <li><a class="has-text-link" href="https://github.com/python-discord/code-jam-6-qualifier">Qualifier</a></li>
+ <li><a class="has-text-link" href="{% url "events:page" path="code-jams" %}">About Code Jams</a></li>
+ </ul>
+ </div>
+{% endblock %}
diff --git a/pydis_site/templates/events/pages/code-jams/6/rules.html b/pydis_site/templates/events/pages/code-jams/6/rules.html
new file mode 100644
index 00000000..dfb1586f
--- /dev/null
+++ b/pydis_site/templates/events/pages/code-jams/6/rules.html
@@ -0,0 +1,80 @@
+{% extends "events/base_sidebar.html" %}
+
+{% block title %}Rules{% endblock %}
+
+{% block breadcrumb %}
+ <li><a href="{% url "events:index" %}">Events</a></li>
+ <li><a href="{% url "events:page" path="code-jams" %}">Code Jams</a></li>
+ <li><a href="{% url "events:page" path="code-jams/6" %}">Winter Code Jam 2020: Ancient Technology</a></li>
+ <li class="is-active"><a href="#">Rules</a></li>
+{% endblock %}
+
+{% block event_content %}
+ <ol>
+ <li>
+ <p>
+ The majority of your project must be Python.
+ We will use the GitHub language details for this,
+ so just <strong>make sure your repo contains at least 51% Python</strong>, and you'll be okay.
+ </p>
+ </li>
+ <li>
+ <p>
+ Your solution must use the Kivy framework.
+ It is not permitted to work around this by e.g. using Kivy as a wrapper for another framework.
+ </p>
+ </li>
+ <li>
+ <p>
+ Your solution should be platform agnostic.
+ For example, if you use filepaths in your submission,
+ use <code>pathlib</code> to create platform agnostic Path objects instead of hardcoding the paths.
+ </p>
+ </li>
+ <li>
+ <p>
+ Your project must be feasible to run and simple to set up <strong>on a desktop computer</strong>
+ - which means you should almost certainly use some sort of dependency manager,
+ like <code>pipenv</code>, <code>poetry</code>, or a strictly pinned <code>requirements.txt</code>.
+ </p>
+ </li>
+ <li>
+ <p>
+ You must get contributions from every member of your team,
+ if you have an issue with someone on your team please contact a member of the administration team.
+ These contributions do not necessarily have to be code,
+ for example it's absolutely fine for someone to contribute management, documentation, graphics or audio.
+ <strong>
+ Team members that do not contribute will be removed from the Code Jam,
+ and will not receive their share of any prizes the team may win.
+ They may also be barred from entering future events.
+ </strong>.
+ </p>
+ </li>
+ <li>
+ <p>You must use GitHub as source control.</p>
+ </li>
+ <li>
+ <p>
+ All code must be written and committed within the time constrictions of the jam
+ <ul><li>Late commits may be reverted, so make sure you leave enough time to bug test your program</li></ul>
+ </p>
+ </li>
+ </ol>
+
+ <blockquote>
+ Please note that our regular <a href="/pages/rules/">community rules</a> and <a href="/pages/code-of-conduct/">code of conduct</a>
+ also apply during the event and that we reserve the right to make changes to these rules at any time.
+ </blockquote>
+{% endblock %}
+
+{% block sidebar %}
+ {% include "events/sidebar/code-jams/6.html" %}
+ <div class="box">
+ <p class="menu-label">Relevant Links</p>
+ <ul class="menu-list">
+ <li><a class="has-text-link" href="{% url "events:page" path="code-jams/6" %}">Winter Code Jam 2020</a></li>
+ <li><a class="has-text-link" href="https://github.com/python-discord/code-jam-6-qualifier">Code Jam Qualifier</a></li>
+ </ul>
+ </div>
+{% endblock %}
diff --git a/pydis_site/templates/events/pages/code-jams/7/_index.html b/pydis_site/templates/events/pages/code-jams/7/_index.html
new file mode 100644
index 00000000..1f0b0909
--- /dev/null
+++ b/pydis_site/templates/events/pages/code-jams/7/_index.html
@@ -0,0 +1,85 @@
+{% extends "events/base_sidebar.html" %}
+
+{% block title %}Summer Code Jam 2020: Early Internet{% endblock %}
+
+{% block breadcrumb %}
+ <li><a href="{% url "events:index" %}">Events</a></li>
+ <li><a href="{% url "events:page" path="code-jams" %}">Code Jams</a></li>
+ <li class="is-active"><a href="#">Summer Code Jam 2020: Early Internet</a></li>
+{% endblock %}
+
+{% block event_content %}
+ <p>
+ For Python Discord's 7<sup>th</sup> biannual code jam, contestants utilized the <strong>Django</strong> framework
+ to create a web application. The theme for this event was <strong>Early Internet</strong>, lasting from
+ July 31<sup>st</sup> to August 9<sup>th</sup>. This was our largest event ever, with over 50 teams competing
+ for prizes from our prize pool along with the illustrious role of <code>Code Jam Champions</code> on our server.
+ </p>
+
+ <h3 id="task-description"><a href="#task-description">Task Description</a></h3>
+ <p>
+ The original task description, as found in the <a href="https://github.com/python-discord/summer-code-jam-2020">repository</a>, was as follows:
+ </p>
+ <blockquote>
+ <strong>The theme for this code jam is Early Internet.</strong>
+ <p>
+ What you do with this theme or how you interpret it is up to you, but it will be your task to come up with something fun using this theme.
+ </p>
+
+ <strong>The chosen technology for this game jam is <a href="https://www.djangoproject.com/">Django</a>.</strong>
+ <p>
+ Django is a high-level Python Web framework that encourages rapid development and clean, pragmatic design. It comes "batteries included" with a slew of incredibly polished features, including database migrations, an excellent CRM, access control, security features to prevent you from making expensive mistakes, and
+ <a href="https://docs.djangoproject.com/en/3.0/">probably the best documentation on the internet</a>.
+ </p>
+ </blockquote>
+
+ <h3 id="judging-stream"><a href="#judging-stream">Judging Stream</a></h3>
+ <p>
+ If you want to watch the original code jam judging stream, you can find it on YouTube - all of the submissions are showcased in the stream. The winning project is showcased at the <a href="https://youtu.be/OFtm8f2iu6c?t=6443">01:47:23</a> timestamp.
+ </p>
+
+ <iframe width="560" height="315" src="https://www.youtube.com/embed/OFtm8f2iu6c" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture" allowfullscreen></iframe>
+
+ <h3 id="results"><a href="#results">Results</a></h3>
+ <p>
+ The <strong>winning team</strong> for this code jam was the <strong>Juicy Jaguars</strong>, consisting of charlotte, joshuqa, and dang.
+ They created an incredible Windows 95 web application, named Web95. It included a plethora of features, such as movable windows,
+ a start menu, a recreation of Internet Explorer, different themes & wallpapers, and a couple of fun easter eggs. The killer feature of this project was Internet Explorer. It processed the fonts, images, and colors of each webpage visited to make the experience feel as if
+ it were from the 90s! This was an incredibly novel idea, which was executed beautifully.
+ </p>
+ <p>
+ Check out their submission in our <a href="https://github.com/python-discord/summer-code-jam-2020/tree/master/juicy-jaguars">repository</a>
+ and watch us review it on the <a href="https://youtu.be/OFtm8f2iu6c?t=6443">livestream</a>!
+ </p>
+
+ <h3 id="runner-up-1"><a href="#runner-up-1">Runner up 1: Annoyed Alligators</a></h3>
+ <p>
+ The <strong>Annoyed Alligators</strong> (i..kun, gkrou, SurvivingOnNaps, corner, and pykam) created a social media platform which is controllable by
+ a command line interface, named SoCommandLine Media (SoCL). Users can signup to create posts and view what others have posted already, all via the
+ command line. It evens supports direct messaging other users and getting the latest news articles for you to read!
+ </p>
+ <p>
+ Have a look at their submission in our <a href="https://github.com/python-discord/summer-code-jam-2020/tree/master/annoyed-alligators">repository</a>
+ and view it on the <a href="https://youtu.be/OFtm8f2iu6c?t=2200">livestream</a>!
+ </p>
+
+ <h3 id="runner-up-2"><a href="#runner-up-2">Runner up 2: Mysterious Mice</a></h3>
+ <p>
+ The <strong>Mysterious Mice</strong> (rryyaann, onatoko, n0remac, and venturafranklin) created a social media site for NASA's rovers, named SpaceBook. It included profiles and photos of each rover, showed what the weather was like on Mars, and even had a text-based adventure game in a terminal! The beautiful, retro UI along with the animated space background made it a pleasure to use.
+ </p>
+ <p>
+ Feel free to check out their submission in our <a href="https://github.com/python-discord/summer-code-jam-2020/tree/master/mysterious-mice">repository</a>
+ and watch us use it on the <a href="https://youtu.be/OFtm8f2iu6c?t=7624">livestream</a>!
+ </p>
+{% endblock %}
+
+{% block sidebar %}
+ {% include "events/sidebar/code-jams/7.html" %}
+ <div class="box">
+ <p class="menu-label">Relevant Links</p>
+ <ul class="menu-list">
+ <!-- Add other items when they become available -->
+ <li><a class="has-text-link" href="{% url "events:page" path="code-jams/7/rules" %}">Rules</a></li>
+ </ul>
+ </div>
+{% endblock %}
diff --git a/pydis_site/templates/events/pages/code-jams/7/rules.html b/pydis_site/templates/events/pages/code-jams/7/rules.html
new file mode 100644
index 00000000..5979fbe6
--- /dev/null
+++ b/pydis_site/templates/events/pages/code-jams/7/rules.html
@@ -0,0 +1,68 @@
+{% extends "events/base_sidebar.html" %}
+
+{% block title %}Rules{% endblock %}
+
+{% block breadcrumb %}
+ <li><a href="{% url "events:index" %}">Events</a></li>
+ <li><a href="{% url "events:page" path="code-jams" %}">Code Jams</a></li>
+ <li><a href="{% url "events:page" path="code-jams/7" %}">Summer Code Jam 2020</a></li>
+ <li class="is-active"><a href="#">Rules</a></li>
+{% endblock %}
+
+{% block event_content %}
+ <ol>
+ <li><p>Your solution must use the Django framework. It is not permitted to circumvent this rule by e.g. using Django as a wrapper for another framework.</p></li>
+ <li><p>Your solution should be platform agnostic. For example, if you use filepaths in your submission, use <code>pathlib</code> to create platform agnostic Path objects instead of hardcoding the paths.</p></li>
+ <li><p>Your project should be a web app which can be run in a <em>standard web browser</em>.</p></li>
+ <li>
+ <p>
+ You must document precisely how to install and run your project.
+ This should be as easy as possible, which means you should consider using dependency managers like <code>pipenv</code>, and <code>npm</code>.
+ We would also encourage you to use <code>docker</code> and <code>docker-compose</code> to containerize your project, but this isn't a requirement.
+ </p>
+ </li>
+ <li>
+ You must get contributions from every member of your team, if you have an issue with someone on your team please contact a member of the administration team.
+ These contributions do not necessarily have to be code, for example it's absolutely fine for someone to contribute management, documentation, graphics or audio.
+ <strong>
+ Team members that do not contribute will be removed from the Code Jam, and will not receive their share of any prizes the team may win.
+ They may also be barred from entering future events.
+ </strong>
+ </li>
+ <li><p>You must use GitHub as source control.</p></li>
+ <li>
+ <p>
+ All code and assets must be compatible with the <a href="https://en.wikipedia.org/wiki/MIT_License">MIT license</a>.
+ This is because we will be merging your submission into our <code>summer-code-jam-2020</code> repo at the end of the jam,
+ and this repo is licensed with the MIT license.
+ <strong>Projects that include assets that are incompatible with this license may be disqualified.</strong>
+ </p>
+ </li>
+ <li><p>All code must be written and committed within the time constrictions of the jam. Late commits may be reverted, so make sure you leave enough time to bug test your program.</p></li>
+ <li>
+ <p>
+ Use English as the main language for your project, including names, comments, documentation, and commit messages.
+ The text displayed in your web application should also be in English,
+ although you are allowed to provide the user with options for internationalisation and translation.
+ </p>
+ </li>
+ </ol>
+
+ <!-- Change links after migrating them is done. -->
+ <blockquote>
+ Please note that our regular
+ <a href="/pages/rules">community rules</a> and <a href="/pages/code-of-conduct">code of conduct</a>
+ also apply during the event and that we reserve the right to make changes to these rules at any time.
+ </blockquote>
+{% endblock %}
+
+{% block sidebar %}
+ {% include "events/sidebar/code-jams/7.html" %}
+ <div class="box">
+ <p class="menu-label">Relevant Links</p>
+ <ul class="menu-list">
+ <li><a class="has-text-link" href="{% url "events:page" path="code-jams/7" %}">Summer Code Jam 2020</a></li>
+ <li><a class="has-text-link" href="https://github.com/python-discord/summer-code-jam-2020-qualifier/">Code Jam Qualifier</a></li>
+ </ul>
+ </div>
+{% endblock %}
diff --git a/pydis_site/templates/events/pages/code-jams/_index.html b/pydis_site/templates/events/pages/code-jams/_index.html
new file mode 100644
index 00000000..fcbfa4d9
--- /dev/null
+++ b/pydis_site/templates/events/pages/code-jams/_index.html
@@ -0,0 +1,72 @@
+{% extends "events/base_sidebar.html" %}
+
+{% block breadcrumb %}
+ <li><a href="{% url "events:index" %}">Events</a></li>
+ <li class="is-active"><a href="#">Code Jams</a></li>
+{% endblock %}
+
+{% block title %}Code Jams{% endblock %}
+
+{% block event_content %}
+ <p>
+ If you've been around the server for a while, or you just happened to join at the right time,
+ you may have heard of something known as a Code Jam.
+ This page will help answer some questions you may have about them.
+ </p>
+
+ <h2 class="title is-4" id="what-is-code-jam"><a href="#what-is-code-jam">What is a Code Jam?</a></h2>
+ <p>
+ This is the question you might be asking yourself right now.
+ A Code Jam is a chance to create something with a team.
+ In each jam, you are paired up with a group of other users just like yourself who will then be given a type of program to make and a theme to help guide it.
+ You then have a little over a week's time to create the best project you can.
+ </p>
+
+ <h2 class="title is-4" id="how-do-i-join"><a href="#how-do-i-join">How do I join?</a></h2>
+ <p>
+ Before each Code Jam, we open up a Qualifier.
+ The Qualifier is a challenge program that you have to write yourself and has to meet certain criteria in order to, well, qualify.
+ The kinds of qualifiers can vary from something like making an RPG inventory layout to making a password generator that meets certain conditions.
+ </p>
+
+ <h2 class="title is-4" id="how-often-do-these-happen"><a href="#how-often-do-these-happen">How often do these happen?</a></h2>
+ <p>
+ Our Code Jams happen twice a year. We have a Winter Jam and a Summer Jam.
+ </p>
+
+ <h2 class="title is-4" id="what-happens-if-i-have-to-drop-out"><a href="#what-happens-if-i-have-to-drop-out">What happens if I have to drop out?</a></h2>
+ <p>
+ This does happen from time to time.
+ Life gets in the way, we find out that relative passed away or your significant other RSVP'd you to a wedding you didn't know about until a week before.
+ Ideally we'd like to know about dropouts before the jam starts.
+ But if something does come up, please make sure to communicate that fact to any of our Event Coordinators, Moderators, or Admins.
+ The worst thing you could do is simply abandon your team, and doing so may hurt your chances for participating in future jams.
+ </p>
+
+ <h2 class="title is-4" id="how-experienced-do-i-need-to-be-to-join-a-code-jam">
+ <a href="#how-experienced-do-i-need-to-be-to-join-a-code-jam">How experienced do I need to be to join a Code Jam?</a>
+ </h2>
+ <p>
+ This is a question that we get asked a lot but is very difficult to answer.
+ Creating something fun with a team can be a great experience for almost everyone,
+ including relative beginners and more experienced developers.
+ That said, to make it a fun experience for everyone in the team,
+ we do require participants to complete a qualifier task so we can ensure that everyone
+ who enters the jam knows enough of the basics to activily participate in the development process.
+ </p>
+ <p>
+ Participating in a Code Jam often turns out to be a great learning experience.
+ Not only do you typically get to use packages and libraries you haven't touched before,
+ it will also increase your experience with developing an application in a team.
+ If you have never really done this before,
+ then you'll notice that collaborating with others adds a whole new dimension to the development process.
+ Even if you do have a lot of experience with working in teams,
+ having to collaborate with relative strangers of varying skill levels may provide a different experience than what you're used to.
+ </p>
+{% endblock %}
+
+{% block sidebar %}
+ {% include "events/sidebar/code-jams/upcoming-code-jam.html" %}
+ {% include "events/sidebar/code-jams/previous-code-jams.html" %}
+ {% include "events/sidebar/code-jams/useful-information.html" %}
+{% endblock %}
diff --git a/pydis_site/templates/events/pages/code-jams/judging.html b/pydis_site/templates/events/pages/code-jams/judging.html
new file mode 100644
index 00000000..6c6531d9
--- /dev/null
+++ b/pydis_site/templates/events/pages/code-jams/judging.html
@@ -0,0 +1,110 @@
+{% extends "events/base_sidebar.html" %}
+
+{% block breadcrumb %}
+ <li><a href="{% url "events:index" %}">Events</a></li>
+ <li><a href="{% url "events:page" path="code-jams" %}">Code Jams</a></li>
+ <li class="is-active"><a href="#">How does judging work?</a></li>
+{% endblock %}
+
+{% block title %}How does judging work?{% endblock %}
+
+{% block event_content %}
+ <p>
+ Here at Python Discord, judging the code jam is a process that continues throughout the entire event.
+ This document seeks to detail exactly what the judges will consider when attempting to determine the winner of the code jam.
+ </p>
+ <p>
+ Because programming is full of subtleties and judging is not an exact science, this document will inevitably fall short of being an exact guide for how to win, but it should at least give you an idea of what you should be mindful of as a participant.
+ </p>
+
+ <h2 class="title is-4" id="style"><a href="#style">Style</a></h2>
+ <p>
+ Python is a language in which code style matters more than what someone might be used to coming from other languages.
+ We believe that good code is code that is easy to read, pleasant to work with,
+ and self-documenting. Here are some of the things we'll consider when judging your submission:
+ </p>
+ <ul>
+ <li>
+ Do variables have good names that make it obvious what they are going to be used for?
+ </li>
+ <li>
+ Are files organized in a way that makes the project easy to navigate?
+ </li>
+ <li>
+ Does the code follow the conventions of <a href="https://www.python.org/dev/peps/pep-0008/">the official Python style guide</a>?
+ </li>
+ <li>
+ Does your project have good git commit messages that explain not only what you were doing, but why?
+ </li>
+ <li>
+ Are there enough comments in the code?
+ A good rule of thumb for this is to make sure it's easy to <em>skim through the code</em>.
+ Another programmer should not have to read every line of code in a section in order to determine what it does.
+ </li>
+ <li>
+ Does your code use blank lines and block comments in order to split up large chunks of code into smaller, logically separated sections?
+ </li>
+ <li>
+ Are your comments and docstrings free of poor formulations and typos?
+ </li>
+ </ul>
+ <p>
+ If you can answer yes to all of the above, you will probably score well on style.
+ Using a linter (such as <code>flake8</code>) can be an easy way to greatly improve your style.
+ </p>
+ <p>
+ If your submission contains other languages than Python,
+ <em>please keep in mind that we will only review the Python code</em>.
+ This means that it is a good idea for you to solve as much of your submission as possible using Python.
+ For example, if you're making a webapp with a Python backend, make sure you solve all the interesting stuff in the backend, not in the frontend.
+ </p>
+
+ <h2 class="title is-4" id="originality"><a href="#originality">Originality</a></h2>
+ <p>
+ In order to level the playing field a bit, we've decided that this is the most important factor of all in our code jams.
+ If your idea is an exceptionally good one and you are a beginner,
+ we will cut you some slack on style and execution.
+ You may be able to walk away victorious even though the other teams have far more experienced Python professionals.
+ It is therefore crucial that you consider <em>what to do more</em> carefully than exactly <em>how to do it</em>.
+ </p>
+ <p>
+ That said, experienced Python developers will always have an advantage,
+ so don't expect to win with a lazy or ugly implementation just because your idea is brilliant.
+ </p>
+
+ <h2 class="title is-4" id="execution"><a href="#execution">Execution</a></h2>
+ <p>
+ An important factor is whether your solution is the best solution to the problem you are solving.
+ If your solution is overly convoluted, this will count against you in our evaluation.
+ </p>
+ <p>
+ While the code jam is ongoing, staff will be available to you both inside your team channel and in the common code jam channels.
+ Staff may drop by your team channel to make helpful suggestions, answer questions, or just ask you how it's going.
+ Feel free to grab a staff member and ask a question at any point if you're unsure about something.
+ </p>
+ <p>
+ Our talented team of Helpers will also be available during the code jam,
+ so if there is a part of your code you're unsure about, feel free to bring it to a help channel.
+ We will be happy to provide advice on how to improve it.
+ Do not, however, post your entire program; help requests should be bite-sized.
+ </p>
+
+ <h2 class="title is-4" id="teamwork"><a href="#teamwork">Teamwork</a></h2>
+ <p>
+ During the code jam, you will be assigned teammates. It is crucial that you find a way to work with your teammates,
+ as we will be evaluating your ability to work as a team.
+ Team members who constantly bicker, complain about each other,
+ or fail to divide up tasks so that everyone can contribute will be penalized when we evaluate the code jam.
+ </p>
+ <p>
+ This does not, however, mean that a team that has a "bad egg" will automatically be unable to win the code-jam.
+ If a team member refuses to play well with the rest of the team or does not participate in the jam,
+ we will usually remove that person from the team and attempt to find a new teammate for the team to replace them.
+ This will also lead to an infraction against the offending team member,
+ which may make it impossible for them to join some (or all) future code jams.
+ </p>
+{% endblock %}
+
+{% block sidebar %}
+ {% include "events/sidebar/code-jams/useful-information.html" %}
+{% endblock %}
diff --git a/pydis_site/templates/events/pages/code-jams/pull-request.html b/pydis_site/templates/events/pages/code-jams/pull-request.html
new file mode 100644
index 00000000..c276fd12
--- /dev/null
+++ b/pydis_site/templates/events/pages/code-jams/pull-request.html
@@ -0,0 +1,235 @@
+{% extends "events/base_sidebar.html" %}
+
+{% block breadcrumb %}
+ <li><a href="{% url "events:index" %}">Events</a></li>
+ <li><a href="{% url "events:page" path="code-jams" %}">Code Jams</a></li>
+ <li class="is-active"><a href="#">Opening a Pull Request</a></li>
+{% endblock %}
+
+{% block title %}Opening a Pull Request{% endblock %}
+
+{% block event_content %}
+ <p>
+ When you start out with a jam we ask your team leader to fork the code jam brief repository to their account for your to work on your code.
+ </p>
+ <p>
+ In this guide we're going to go over:
+ </p>
+ <ul>
+ <li>
+ <a href="#forking-the-repository">Forking the repository</a>
+ </li>
+ <li>
+ <a href="#opening-a-pull-request">Opening a pull request back to the code jam brief on python-discord</a>
+ </li>
+ <li>
+ <a href="#adding-collaborators">Adding collaborators</a>
+ </li>
+ <li>
+ <a href="#adding-a-github-webhook">Adding a GitHub webhook to your teams Discord channel</a>
+ </li>
+ </ul>
+
+ <h2 class="title is-4" id="forking-the-repository"><a href="#forking-the-repository">Forking the repository</a></h2>
+ <p>
+ When you browse to the code jam brief repository you will be presented with the project root.
+ </p>
+ <p>
+ You want to fork the repository to your account using the button shown in the image below:
+ </p>
+ <p>
+ <img alt="fork button" src="https://raw.githubusercontent.com/wiki/python-discord/code-jam-5/images/fork-button.png">
+ </p>
+ <p>
+ If you see a dialog like this one, just select your user.
+ </p>
+ <p>
+ <img alt="where to fork" src="https://raw.githubusercontent.com/wiki/python-discord/code-jam-5/images/where-to-fork.png">
+ </p>
+ <p>
+ Once you've done this you'll be redirected to a page like this:
+ </p>
+ <p>
+ <img alt="example fork" src="https://raw.githubusercontent.com/wiki/python-discord/code-jam-5/images/my-fork.png">
+ </p>
+ <p>
+ And that's it! You've forked the repo!
+ </p>
+
+ <h2 class="title is-4" id="opening-a-pull-request"><a href="#opening-a-pull-request">Opening a Pull Request</a></h2>
+ <p>
+ Before we can open a Pull Request you need to have something to actually compare against the brief repo.
+ </p>
+ <p>
+ In the actual jam you should fill in the Project information section of the README.md, but for now I'm just going to add a line to the README.
+ </p>
+ <p>
+ <img alt="image" src="https://raw.githubusercontent.com/wiki/python-discord/code-jam-5/images/commit.png">
+ </p>
+ <p>
+ Once you've made your commit, navigate back to the project root where you will see this button above your commit bar:
+ </p>
+ <p>
+ <img alt="image" src="https://raw.githubusercontent.com/wiki/python-discord/code-jam-5/images/pull-request-button.png">
+ </p>
+ <p>
+ You should click on this pull request button. When you do you will see something like this, just click the Create pull request button:
+ </p>
+ <p>
+ <img alt="image" src="https://raw.githubusercontent.com/wiki/python-discord/code-jam-5/images/compare-changes.png">
+ </p>
+ <p>
+ Next up you'll see a form like this:
+ </p>
+ <p>
+ <img alt="image" src="https://raw.githubusercontent.com/wiki/python-discord/code-jam-5/images/pull-request-form.png">
+ </p>
+ <p>
+ You should fill it in like so:
+ </p>
+ <li>
+ <strong>Title</strong> should be your team's name
+ </li>
+ <li>
+ <strong>Description</strong> does not have to be filled in
+ </li>
+ <li>
+ Make sure to <strong>select the "allow edits from maintainers" option</strong>
+ </li>
+ <li>
+ Make sure to open a pull request and not a draft pull request
+ </li>
+ <p>
+ That's it! You've opened your pull request and should see something like this:
+ </p>
+ <p>
+ <img alt="image" src="https://raw.githubusercontent.com/wiki/python-discord/code-jam-5/images/pull-request.png">
+ </p>
+
+ <h2 class="title is-4" id="adding-collaborators"><a href="#adding-collaborators">Adding collaborators</a></h2>
+ <p>
+ Obviously your fork is no good if your team members cannot make edits to it.
+ To allow your team mates to edit you need to add them to the project as collaborators.
+ </p>
+ <p>
+ We're going to start off by heading to our fork of the repository (this is the one with your username in it, not python-discord) and head to the settings page.
+ </p>
+ <p>
+ <img alt="image" src="https://raw.githubusercontent.com/wiki/python-discord/code-jam-5/images/settings-page.png">
+ </p>
+ <p>
+ Click on collaborators. GitHub will ask you to enter your password now for security. Enter it and proceed.
+ </p>
+ <p>
+ You should see a page like this:
+ </p>
+ <p>
+ <img alt="image" src="https://raw.githubusercontent.com/wiki/python-discord/code-jam-5/images/collabs-page.png">
+ </p>
+ <p>
+ Add your team members using this form and use the copy invite button to copy an invite link they can then use.
+ You should send this to them in your team channel on Discord.
+ </p>
+ <p>
+ <img alt="image" src="https://raw.githubusercontent.com/wiki/python-discord/code-jam-5/images/invites.png">
+ </p>
+ <p>
+ <img alt="image" src="https://raw.githubusercontent.com/wiki/python-discord/code-jam-5/images/invited-discord.png">
+ </p>
+ <p>
+ Once your team mates have joined you'll see this:
+ </p>
+ <p>
+ <img alt="image" src="https://raw.githubusercontent.com/wiki/python-discord/code-jam-5/images/accepted.png">
+ </p>
+ <p>
+ That's all! Your teammates have access to the repository now!
+ </p>
+
+ <h2 class="title is-4" id="adding-a-github-webhook"><a href="#adding-a-github-webhook">Add a GitHub webhook to Discord</a></h2>
+ <p>
+ It may be useful to keep up on your GitHub repository updates right from your Discord channel.
+ For that reason, we've assigned all team leaders webhook creation permissions inside your team channel.
+ </p>
+ <h3 class="title is-5">Webhook creation</h3>
+ <p>
+ To make use of this we're going to start out by making a webhook inside the channel.
+ </p>
+ <p>
+ To do this go to your team channel and click on the gear that appears when you mouse-over it.
+ </p>
+ <p>
+ <img alt="image" src="https://raw.githubusercontent.com/wiki/python-discord/code-jam-5/images/channel-gear.png">
+ </p>
+ <p>
+ Navigate to the Webhooks section of the settings page and click <code>Create Webhook</code>.
+ </p>
+ <p>
+ <img alt="image" src="https://raw.githubusercontent.com/wiki/python-discord/code-jam-5/images/webhook-creation-page.png">
+ </p>
+ <p>
+ You'll see something like this:
+ </p>
+ <p>
+ <img alt="image" src="https://raw.githubusercontent.com/wiki/python-discord/code-jam-5/images/webhook-modal.png">
+ </p>
+ <p>
+ You can edit the name to 'GitHub' or anything, but GitHub will do this anyway.
+ </p>
+ <p>
+ Copy the link to the clipboard, you will get something like this:
+ </p>
+ <p>
+ <code>https://canary.discordapp.com/api/webhooks/548221675087462410/h7lkQ7cX5-95J8CLMNCGXTEBrWOmXYFWv7N4MqsFtV-D8F0W8Rf3rWj4dPAEFGspm7EZ</code>
+ </p>
+ <p>
+ By default this is not configured to respond to GitHub payloads so you will need to add a <code>/github</code> to the end of the URL.
+ </p>
+ <p>
+ Your new URL should look like:
+ </p>
+ <p>
+ <code>https://canary.discordapp.com/api/webhooks/548221675087462410/h7lkQ7cX5-95J8CLMNCGXTEBrWOmXYFWv7N4MqsFtV-D8F0W8Rf3rWj4dPAEFGspm7EZ/github</code>
+ </p>
+ <h3 class="title is-5">Adding to GitHub</h3>
+ <p>
+ Next up we will head over to our GitHub project settings (on our fork) and go to the webhooks section:
+ </p>
+ <p>
+ <img alt="image" src="https://raw.githubusercontent.com/wiki/python-discord/code-jam-5/images/webhooks-settings.png">
+ </p>
+ <p>
+ Click on the Add Webhook button and paste in your URL to the <code>Payload URL</code> section.
+ </p>
+ <p>
+ Set the <code>Content Type</code> to <code>application/json</code> otherwise Discord cannot interpret your request.
+ </p>
+ <p>
+ You can select either just the push or everything depending on how much information you want.
+ </p>
+ <p>
+ Make sure <code>Active</code> is ticked and click <code>Add webhook</code>.
+ </p>
+ <p>
+ And that's it! You've added a Discord webhook to your GitHub repository!
+ </p>
+ <p>
+ <img alt="image" src="https://raw.githubusercontent.com/wiki/python-discord/code-jam-5/images/added.png">
+ </p>
+ <p>
+ As you can see here, my teammate has commited a change to our fork:
+ </p>
+ <p>
+ <img alt="image" src="https://raw.githubusercontent.com/wiki/python-discord/code-jam-5/images/aperture-commit.png">
+ </p>
+ <p>
+ In our Discord channel, you can see the following:
+ </p>
+ <p>
+ <img alt="image" src="https://raw.githubusercontent.com/wiki/python-discord/code-jam-5/images/webhook-channel.png">
+ </p>
+{% endblock %}
+
+{% block sidebar %}
+ {% include "events/sidebar/code-jams/useful-information.html" %}
+{% endblock %}
diff --git a/pydis_site/templates/events/pages/code-jams/using-git.html b/pydis_site/templates/events/pages/code-jams/using-git.html
new file mode 100644
index 00000000..19c4a08f
--- /dev/null
+++ b/pydis_site/templates/events/pages/code-jams/using-git.html
@@ -0,0 +1,61 @@
+{% extends "events/base_sidebar.html" %}
+
+{% block breadcrumb %}
+ <li><a href="{% url "events:index" %}">Events</a></li>
+ <li><a href="{% url "events:page" path="code-jams" %}">Code Jams</a></li>
+ <li class="is-active"><a href="#">How to use git</a></li>
+{% endblock %}
+
+{% block title %}How to use git{% endblock %}
+
+{% block event_content %}
+ <p>
+ We require all participants to use Git for source control.
+ This means that you will need to learn a bit of Git to participate in the code jam,
+ if you're not already familiar with it. Git is incredibly useful,
+ and an essential skill to master if you ever want to write code out there in the real world.
+ If you don't yet have Git installed...
+ </p>
+
+ <ul>
+ <li>
+ <strong>Windows</strong>: Install git using <a href="https://gitforwindows.org/">Git for Windows</a> - you can leave all of the options at their defaults, if you wish
+ </li>
+ <li>
+ <strong>Mac</strong>: Install git using <a href="https://brew.sh/">Homebrew</a>
+ </li>
+ <li>
+ <strong>Linux</strong>: Install git using your Linux distro's package manager
+ </li>
+ </ul>
+
+ <p>
+ In order to make the learning process easier, we've included some Git learning resources below...
+ </p>
+ <ul>
+ <li>
+ Roger Dudler has <a href="https://rogerdudler.github.io/git-guide/">an excellent crash</a> course that will show you the most important commands. This can be used as a cheat sheet once you're starting to actually use Git.
+ </li>
+ <li>
+ If you'd like a wordier introduction, Prithaj Nath (who participated in our first code jam) wrote a more in-depth guide called <a href="https://medium.com/@prithajnath/getting-started-with-git-7aae82dd3599">Let's Git Started!</a> for <a href="https://medium.com">medium.com</a> that might be worth a read.
+ </li>
+ <li>
+ The ever-excellent Corey Schafer has a 30-minute YouTube tutorial called <a href="https://www.youtube.com/watch?v=HVsySz-h9r4">Git Tutorial for Beginners</a> which should teach you everything you need to know to participate in our jams.
+ </li>
+ </ul>
+
+ <p>
+ Optionally, certain IDEs and editors will be able to handle Git for you,
+ and tools like GitKraken are also permitted.
+ Make sure you familiarize yourself with the client of your choice before the code jam starts
+ so you don't need to spend time learning this while the clock is running.
+ </p>
+ <p>
+ For more information on GUI clients you can use,
+ <a href="https://about.gitlab.com/applications/#gui-git-clients">please see this page</a>.
+ </p>
+{% endblock %}
+
+{% block sidebar %}
+ {% include "events/sidebar/code-jams/useful-information.html" %}
+{% endblock %}
diff --git a/pydis_site/templates/events/pages/game-jams/2020/_index.html b/pydis_site/templates/events/pages/game-jams/2020/_index.html
new file mode 100644
index 00000000..136c9f4d
--- /dev/null
+++ b/pydis_site/templates/events/pages/game-jams/2020/_index.html
@@ -0,0 +1,104 @@
+{% extends "events/base_sidebar.html" %}
+
+{% block title %}Game Jam 2020: Three of a Kind{% endblock %}
+
+{% block breadcrumb %}
+ <li><a href="{% url "events:index" %}">Events</a></li>
+ <li><a href="{% url "events:page" path="game-jams" %}">Game Jams</a></li>
+ <li class="is-active"><a href="#">Game Jam 2020: Three of a Kind</a></li>
+{% endblock %}
+
+{% block event_content %}
+ <p>
+ During the first ever Python Discord Game Jam,
+ 23 teams signed up to create a game using the <a href="https://arcade.academy/">Python Arcade Library</a>.
+ Each team consisted of 1-3 people and teammates were chosen by the participants themselves,
+ unlike in our <a href="{% url "events:page" path="code-jams" %}">Code Jams</a>.
+ The Game Jam ran from <strong>April 17, 12:00 UTC to April 26, 18:00 UTC</strong>.
+ </p>
+
+ <h2 class="title is-4" id="task-description"><a href="#task-description">Task Description</a></h2>
+ <blockquote>
+ <p>The theme for this game jam is <strong>Three-of-a-kind</strong>.</p>
+ <p>
+ What you do with this theme or how you interpret it is up to you,
+ but it will be your task to come up with something fun using this theme.
+ </p>
+ </blockquote>
+
+ <h2 class="title is-4" id="judging-stream"><a href="#judging-stream">Judging Stream and Interview</a></h2>
+ <p>
+ The original Game Jam live stream is shown below,
+ where the top ten submissions were reviewed and showcased.
+ There was also an interview with <strong>Paul Craven</strong>,
+ the creator of the <a href="https://arcade.academy/">Python Arcade Library</a>,
+ where he answered many questions about his origin/backstory,
+ the development of the Arcade library, and general programming.
+ </p>
+ <iframe width="560" height="315" src="https://www.youtube.com/embed/KkLXMvKfEgs" frameborder="0" allow="accelerometer; autoplay; encrypted-media; gyroscope; picture-in-picture" allowfullscreen></iframe>
+
+ <blockquote>
+ <p>
+ You can also see the top ten submissions shown
+ <a href="https://arcade.academy/game_jam_2020.html">here</a>
+ on the Arcade website and all submissions were submitted
+ <a href="https://github.com/python-discord/game-jam-2020">here</a> to the repository.
+ </p>
+ </blockquote>
+
+ <h2 class="title is-4" id="results"><a href="#results">Results</a></h2>
+ <p>
+ The <strong>winning team</strong> for our first ever Game Jam was team <strong>Score AAA</strong>,
+ consisting of one person, <strong>EmberDuck</strong>. He created a very polished game,
+ focusing in on one core idea and just nailing it perfectly.
+ This is a game where the player controls <strong>3</strong> different characters which need to jump over obstacles.
+ The concept itself may seem simple, but EmberDuck kept iterating on the idea, making it better and better,
+ taking it to the point of perfection. The graphics were phenomenal, the UI was beautiful and intuitive, and the animations were just fantastic.
+ The parallax effect in the background was mesmerizing, which was an element that was unique and different from other submissions.
+ Taking this project to another level, all art assets for this submission were made by EmberDuck himself.
+ This was an incredible project, especially for a one-man-team. <strong>Congratulations EmberDuck!</strong>
+ </p>
+
+ <p>
+ Check out their submission
+ <a href="https://github.com/python-discord/game-jam-2020/tree/master/Finalists/Score_AAA/">here</a>
+ and watch it being played live <a href="https://youtu.be/KkLXMvKfEgs?t=7600">here</a>!
+ </p>
+
+ <h2 class="title is-4" id="runner-up-1"><a href="#runner-up-1">Runner Up 1: Gamer Gang</a></h2>
+ <p>
+ The <strong>Gamer Gang</strong> (SansPapyrus683, Blue Bird, & SimplyNarwell) created a platformer game where the player controls
+ <strong>3</strong> different slimes to get through 6 different levels.
+ The slimes can either move together in a stack, or the player can split them apart to control each of them one by one.
+ The physics in this game was a nice addition and tied the game together nicely.
+ The graphics in this game were quite beautiful and the UI complemented it well.
+ This game scored quite high on many factors, and was a very fun game overall. Excellent job!
+ </p>
+ <p>
+ Feel free to look at their submission
+ <a href="https://github.com/python-discord/game-jam-2020/tree/master/Finalists/gamer_gang/">here</a>
+ and watch it being played on stream <a href="https://youtu.be/KkLXMvKfEgs?t=3812">here</a>!
+ </p>
+
+ <h2 class="title is-4" id="runner-up-2"><a href="#runner-up-2">Runner Up 2: Monkeys and Frogs on Fire</a></h2>
+ <p>
+ Team <strong>Monkeys and Frogs on Fire</strong> (BrainDead, F4zi, & f1re)
+ created a dungeon-crawler type of game where the player can switch between
+ <strong>3</strong> different wizards, each having their own special abilities.
+ The red wizard has great strength, while the green wizard has a lot of defense and the blue wizard is quick and fast.
+ A unique and exceptional feature of this game was the backend server which allowed a player to register/login.
+ The goal of this game was to survive as long as you can to get the highest score,
+ which is then uploaded to the server and can be seen on the leaderboard.
+ This game had a crisp and smooth UI along with nice graphics and fantastic animations,
+ bringing this game together. Phenomenol work!
+ </p>
+ <p>
+ Have a look at this submission <a href="https://github.com/Den4200/game-jam-2020">here</a>
+ and watch this game played live on stream <a href="https://youtu.be/KkLXMvKfEgs?t=5188">here</a>!
+ </p>
+ <img src="https://user-images.githubusercontent.com/33516116/77762078-e02ce080-7030-11ea-947a-9c6733d4f33d.png" alt="">
+{% endblock %}
+
+{% block sidebar %}
+ {% include "events/sidebar/game-jams/2020.html" %}
+{% endblock %}
diff --git a/pydis_site/templates/events/pages/game-jams/2020/judging.html b/pydis_site/templates/events/pages/game-jams/2020/judging.html
new file mode 100644
index 00000000..1ec836ac
--- /dev/null
+++ b/pydis_site/templates/events/pages/game-jams/2020/judging.html
@@ -0,0 +1,68 @@
+{% extends "events/base_sidebar.html" %}
+
+{% block title %}Judging{% endblock %}
+
+{% block breadcrumb %}
+ <li><a href="{% url "events:index" %}">Events</a></li>
+ <li><a href="{% url "events:page" path="game-jams" %}">Game Jams</a></li>
+ <li><a href="{% url "events:page" path="game-jams/2020" %}">Game Jam 2020: Three of a Kind</a></li>
+ <li class="is-active"><a href="#">Judging</a></li>
+{% endblock %}
+
+{% block event_content %}
+ <img src="https://user-images.githubusercontent.com/33516116/77762078-e02ce080-7030-11ea-947a-9c6733d4f33d.png">
+ <p>
+ The game jam has a greatly simplified judging process compared to the <a href="/events/code-jams/">Code Jam events</a>. We will not be evaluating your code quality, your commit history, or your teamwork. We will instead evaluate your project based on a few simple factors, which are outlined in this document.
+ </p>
+
+
+ <!-- Novelty -->
+ <h2>Creativity & Novelty Factor</h2>
+ <p>
+ The theme and the tech that we provide are provided as limitations, because we believe that <em>limitations breed creativity</em>. One of the big factors we consider when we judge these projects is the novelty factor. If you've created something truly unique, you've got a leg up on someone who made a very polished version of something that's very familiar. This means that even if you're not an expert programmer or experienced game dev, the right idea (and that ideas' adherence to the theme) might still net you a win!
+ </p>
+ <p>
+ Please try to spend some time coming up with the most fun and novel idea you can before diving into your actual programming. If you're not sure how, try googling for <strong>game dev ideation techniques</strong>. Professional game developers frequently make use of these techniques in order to help spin the wheels of creativity.
+ </p>
+ <p>
+ For example, you can try to write down a bunch of different adjectives (like "yellow" or "terrified") on red notes, nouns (like "lemon" or "snowman") on blue notes, and modifiers (like "in space!" or "the floor is lava!") on yellow notes. Then select a random note from each color, put them together in different orders and think about how you can create a game idea around it that fits the theme.
+ </p>
+
+ <!-- Execution-->
+ <h2>Execution</h2>
+ <p>
+ We will of course be evaluating the execution. How well does the game perform? How is the user experience? Is it fun? Is it easy to play? Does it look good, sound good, and feel good? The performance and interaction are probably the most important factors, but polish is nice, too!
+ </p>
+ <p>
+ We're going to try to do this in an objective way, but stuff like fun is always going to be a somewhat subjective thing to evaluate, and for that reason, this is not the single most critical criteria in the judging process, like it might have been in other game jams. To be more precise - A really fun and novel idea that ticks all the other boxes but has somewhat mediocre execution will still have a very good chance of doing well in this event.
+ </p>
+
+ <!-- Adherence-->
+ <h2>Theme Adherence</h2>
+ <p>Your submission must adhere to the theme we will present on the day the jam starts. There are different degrees of adherence here, and quite a lot of room to be creative, but a deeply thematic submission will be scored higher than a barely thematic submission, and a submission that does not adhere to the theme at all <strong>may be disqualified</strong>.
+ </p>
+ <p>
+ We love seeing multiple <em>layers</em> of thematic adherence - For example, your theme could play a part in your team name, your art style, your story, your sound effects, and of course, in the gameplay. You might even try to inject your theme into your documentation!
+ </p>
+
+ <!-- Documentation via README.md-->
+ <h2>Documentation</h2>
+ <p>We require that you make the project easy to comprehend, easy to install, and easy to run. To ensure this, your submission must contain a <code>README.md</code> in your team folder which clearly documents how to interact with it.
+ </p>
+ <p>
+ First of all, you need to include instructions on exactly how to get your game running. We require that you use a <strong>dependency manager</strong> and encourage you to make a <strong>click-and-play option</strong>, and these should be documented in this section. Please see <a href="/events/game-jam-2020/technical-requirements/">our technical requirements page</a> for more information on this. Remember, we have to judge dozens of submissions, so if every submission can be set up and run by just doing <code>pipenv install</code> and then <code>pipenv run start</code>, it will make our job significantly easier.
+ </p>
+ <p>
+ The readme should also contain information about the game, screenshots, a logo if you got it, your team name, instructions on how to play and anything else that helps provide a high-level overview over the game. This is also extremely helpful when we are judging so many projects, so that we can easily see which is which by looking through readmes. For an example of an excellent readme, check out <a href="https://github.com/python-discord/code-jam-6/blob/master/amphibian-alchemists/README.md">this readme created by the Amphibian Alchemists team during Code Jam 6</a>.
+ </p>
+
+ <!-- Team size-->
+ <h2>Team size</h2>
+ <p>
+ For this game jam, we are allowing you to sign up either by yourself, or with one or two friends. But, of course, it wouldn't be fair if we judged all entries the same regardless of team size - so we will be expecting slightly more from a team of 3 than from a solo team. To be more precise, we will not be expecting <em>three times as much</em> - working in a team has its own set of unique setbacks as well as advantages, and two developers does not equal 200% the output of one - but we will be expecting a full team to be able to deliver more content in ten days than a single person can.
+ </p>
+{% endblock %}
+
+{% block sidebar %}
+ {% include "events/sidebar/game-jams/2020.html" %}
+{% endblock %}
diff --git a/pydis_site/templates/events/pages/game-jams/2020/project-setup.html b/pydis_site/templates/events/pages/game-jams/2020/project-setup.html
new file mode 100644
index 00000000..962cd556
--- /dev/null
+++ b/pydis_site/templates/events/pages/game-jams/2020/project-setup.html
@@ -0,0 +1,57 @@
+{% extends "events/base_sidebar.html" %}
+
+{% block title %}Project Setup{% endblock %}
+
+{% block breadcrumb %}
+ <li><a href="{% url "events:index" %}">Events</a></li>
+ <li><a href="{% url "events:page" path="game-jams" %}">Game Jams</a></li>
+ <li><a href="{% url "events:page" path="game-jams/2020" %}">Game Jam 2020: Three of a Kind</a></li>
+ <li class="is-active"><a href="#">Project Setup</a></li>
+{% endblock %}
+
+{% block event_content %}
+ <img src="https://user-images.githubusercontent.com/33516116/77762078-e02ce080-7030-11ea-947a-9c6733d4f33d.png">
+ <br></br>
+ <p>
+ The first step is to fork our repository: <a href="https://github.com/python-discord/game-jam-2020/">python-discord/game-jam-2020</a>. You can learn how to do this in our
+ <a href="https://pythondiscord.com/pages/guides/pydis-guides/contributing/forking-repository/">contributing guidelines</a>.
+ </p>
+
+ <p>
+ Alternatively, GitHub has a <a href="https://help.github.com/en/github/getting-started-with-github/fork-a-repo">detailed suite of tutorials explaining forking</a> as well as other technical terms that you may come across. If you get
+ stuck at any point, you are always welcome to ask for help at Python Discord.
+ </p>
+
+ <p>Once the fork is created, each team will make a directory for their project. The directory should be named after the team. For example, team <strong>Precise Rabbits</strong> will set up a directory as follows:</p>
+
+ <pre><code>game-jam-2020/
+ └── precise-rabbits/
+ └── game/
+ ├── __init__.py
+ ├── __main__.py
+ └── rabbits.py
+ ├── config.json
+ ├── Pipfile
+ ├── Pipfile.lock
+ └── README.md</code></pre>
+
+ <p><strong>Do not make any changes to other teams' project directories.</strong></p>
+
+ <p>
+ Each team will then develop their game within their fork. You are encouraged to use git to its full potential - feature branches will help you keep your commit history clean, and prevent annoying conflicts. Feel free to refer to
+ <a href="https://pythondiscord.com/pages/guides/pydis-guides/contributing/working-with-git/">our guidelines on the topic</a>, or any other resources that you may find useful. Version control is an important aspect of software development, and code jams are
+ a great opportunity to improve skills in the area.
+ </p>
+
+ <p>
+ Once the project is finished, a pull request will be opened against the upstream repository. All of your projects will be merged to the upstream repository, which means that you will be credited as a contributor to an open source
+ project. The final version <strong>must be committed by the jam's deadline</strong>. Any changes beyond this point will not be considered in the judging process.
+ </p>
+
+ <p>Please ensure that your final version is well tested, and satisfies our <a href="https://pythondiscord.com/events/game-jams/2020/technical-requirements/">technical requirements</a>.</p>
+
+{% endblock %}
+
+{% block sidebar %}
+ {% include "events/sidebar/game-jams/2020.html" %}
+{% endblock %}
diff --git a/pydis_site/templates/events/pages/game-jams/2020/rules.html b/pydis_site/templates/events/pages/game-jams/2020/rules.html
new file mode 100644
index 00000000..33eccf63
--- /dev/null
+++ b/pydis_site/templates/events/pages/game-jams/2020/rules.html
@@ -0,0 +1,31 @@
+{% extends "events/base_sidebar.html" %}
+
+{% block title %}Game Jam Rules{% endblock %}
+
+{% block breadcrumb %}
+ <li><a href="{% url "events:index" %}">Events</a></li>
+ <li><a href="{% url "events:page" path="game-jams" %}">Game Jams</a></li>
+ <li><a href="{% url "events:page" path="game-jams/2020" %}">Game Jam 2020: Three of a Kind</a></li>
+ <li class="is-active"><a href="#">Game Jam Rules</a></li>
+{% endblock %}
+
+{% block event_content %}
+ <img src="https://user-images.githubusercontent.com/33516116/77762078-e02ce080-7030-11ea-947a-9c6733d4f33d.png">
+ <ol>
+ <li>You may enter individually or with up to two friends.</li>
+ <li>All members of your team must be members of our Discord community.</li>
+ <li>Your project must use the <a href="https://arcade.academy/">Python Arcade Library</a>. It is not permitted to work around this by, e.g., using the Python Arcade Libary as a wrapper for another framework.</li>
+ <li>The majority of your project must be written in Python.</li>
+ <li>Your project must be feasible to run and simple to set up on a <strong>desktop computer</strong>.</li>
+ <li>You are allowed to use existing assets, like images and sound effects, as long as the licenses of those assets permit it. Typically, this means that the assets are licensed under an OSI-approved or Creative Commons license, or is in the public domain.</li>
+ <li>All projects should start from scratch and all code must be written within the time constrictions of the jam.</li>
+ <li>You retain all copyrights to entries you submit. By submitting your entry, you grant a transferrable, irrevocable license to redistribute, copy and run your entry without modification, and to distribute screenshots and other forms of gameplay captures of the entry, provided no fee is charged.</li>
+ </ol>
+ <blockquote>
+ Please note that our regular <a href="/pages/rules/">community rules</a> and <a href="/pages/code-of-conduct/">code of conduct</a> also apply during the event and that we reserve the right to make changes to these rules at any time.
+ </blockquote>
+{% endblock %}
+
+{% block sidebar %}
+ {% include "events/sidebar/game-jams/2020.html" %}
+{% endblock %}
diff --git a/pydis_site/templates/events/pages/game-jams/2020/technical-requirements.html b/pydis_site/templates/events/pages/game-jams/2020/technical-requirements.html
new file mode 100644
index 00000000..4a44e7db
--- /dev/null
+++ b/pydis_site/templates/events/pages/game-jams/2020/technical-requirements.html
@@ -0,0 +1,41 @@
+{% extends "events/base_sidebar.html" %}
+
+{% block title %}Technical Requirements{% endblock %}
+
+{% block breadcrumb %}
+ <li><a href="{% url "events:index" %}">Events</a></li>
+ <li><a href="{% url "events:page" path="game-jams" %}">Game Jams</a></li>
+ <li><a href="{% url "events:page" path="game-jams/2020" %}">Game Jam 2020: Three of a Kind</a></li>
+ <li class="is-active"><a href="#">Technical Requirements</a></li>
+{% endblock %}
+
+{% block event_content %}
+ <img src="https://user-images.githubusercontent.com/33516116/77762078-e02ce080-7030-11ea-947a-9c6733d4f33d.png">
+
+ <br></br>
+
+ <p>The technological theme of this game jam is <a href="https://arcade.academy/">Arcade</a>. As per <a href="https://pythondiscord.com/events/game-jams/2020/rules/">rule 3</a>, please ensure that you use Arcade as your project's main framework. Your project can use other dependencies, as long as they do not violate rule 3. If you're unsure about a potential dependency, consult us in the discussion channel.</p>
+
+ <h2>Dependency management</h2>
+
+ <p>Participating teams are asked to provide a <em>click-and-play</em> option to launch their project. There should be no complicated process to install dependencies, or otherwise prepare the environment, before the project can be started. This will allow us to spend more time evaluating the actual game. Ideally, projects will make use of <a href="https://github.com/pypa/pipenv">Pipenv</a> to both install dependencies and launch the game, but it is also acceptable to solve this with other dependency managers, or even with a <code>requirements.txt</code> file and a great readme. <strong>Ideally, it should only take a judge 2-3 commands to get your game ready to run, and these should be clearly documented in your readme.</strong></p>
+
+ <p>Working with Pipenv is not difficult, and existing Python Discord projects can be used for reference. For example, <a href="https://github.com/python-discord/seasonalbot/">Seasonalbot's</a> <code>Pipfile</code> and <code>Pipfile.lock</code> list all necessary dependencies and provide a run script. As a result, a virtual environment with all necessary dependencies can be conveniently created with <code>pipenv install</code>, and the project can be launched with <code>pipenv run start</code>.</p>
+
+ <p>In simple terms, emulating this workflow would be the ideal way to handle dependency management for this game jam.</p>
+
+ <p>If you're unfamiliar with Pipenv, we recommend Corey Schafer's excellent video as a learning resource.</p>
+
+ <iframe width="560" height="315" src="https://www.youtube.com/embed/zDYL22QNiWk" frameborder="0" allow="accelerometer; autoplay; encrypted-media; gyroscope; picture-in-picture" allowfullscreen></iframe>
+
+ </br>
+ </br>
+
+ <h2>Target platform</h2>
+
+ <p>All submissions will be evaluated on Windows 10. This does not necessarily mean that all development must take place on Windows, but all submissions should be functional and well tested on the target platform. This is also something to keep in mind in the initial stages of development - make sure you don't accidentally build your project around a dependency that isn't available on Windows.</p>
+{% endblock %}
+
+{% block sidebar %}
+ {% include "events/sidebar/game-jams/2020.html" %}
+{% endblock %}
diff --git a/pydis_site/templates/events/pages/game-jams/_index.html b/pydis_site/templates/events/pages/game-jams/_index.html
new file mode 100644
index 00000000..85048cf1
--- /dev/null
+++ b/pydis_site/templates/events/pages/game-jams/_index.html
@@ -0,0 +1,12 @@
+{% extends "events/base.html" %}
+
+{% block title %}Game Jams{% endblock %}
+
+{% block breadcrumb %}
+ <li><a href="{% url "events:index" %}">Events</a></li>
+ <li class="is-active"><a href="#">Game Jams</a></li>
+{% endblock %}
+
+{% block event_content %}
+ <p>Sorry, this page is not ready yet.</p>
+{% endblock %}
diff --git a/pydis_site/templates/events/sidebar/code-jams/6.html b/pydis_site/templates/events/sidebar/code-jams/6.html
new file mode 100644
index 00000000..95a1f247
--- /dev/null
+++ b/pydis_site/templates/events/sidebar/code-jams/6.html
@@ -0,0 +1,6 @@
+<div class="box">
+ <img src="https://raw.githubusercontent.com/python-discord/branding/master/events/winer_code_jam_2020/code%20jam%206%20-%20website%20banner.png" alt="">
+ <p class="menu-label">Sponsors:</p>
+ <p><a href="https://do.co/devmeetup" target="_new"><img src="https://d9hhrg4mnvzow.cloudfront.net/try.digitalocean.com/developer-cloud/3f06d1cb-do-logo-blue-svg.svg" style="width: 100%;" alt=""></a></p>
+ <p><a href="https://jetbrains.com" target="_new"><img src="https://pythondiscord.com/static/images/sponsors/jetbrains.png" alt=""></a></p>
+</div>
diff --git a/pydis_site/templates/events/sidebar/code-jams/7.html b/pydis_site/templates/events/sidebar/code-jams/7.html
new file mode 100644
index 00000000..d4615c2a
--- /dev/null
+++ b/pydis_site/templates/events/sidebar/code-jams/7.html
@@ -0,0 +1,12 @@
+{% load static %}
+
+<div class="box">
+ <img src="https://raw.githubusercontent.com/python-discord/branding/master/events/summer_code_jam_2020/summer%20cj%202020%20discord%20banner.png" alt="Summer Code Jam 2020">
+ <p class="menu-label">Sponsors</p>
+ <a href="https://www.djangoproject.com/" target="_blank">
+ <img src="https://static.djangoproject.com/img/logos/django-logo-positive.png" alt="Django">
+ </a>
+ <a href="https://jetbrains.com" target="_blank">
+ <img src="{% static "images/sponsors/jetbrains.png" %}" alt="JetBrains">
+ </a>
+</div>
diff --git a/pydis_site/templates/events/sidebar/code-jams/previous-code-jams.html b/pydis_site/templates/events/sidebar/code-jams/previous-code-jams.html
new file mode 100644
index 00000000..154f6ac4
--- /dev/null
+++ b/pydis_site/templates/events/sidebar/code-jams/previous-code-jams.html
@@ -0,0 +1,11 @@
+<div class="box">
+ <p class="menu-label">Previous Code Jams</p>
+ <ul class="menu-list">
+ <li><a class="has-text-link" href="{% url "events:page" path="code-jams/6" %}">Code Jam 6: Ancient Technology</a></li>
+ <li><a class="has-text-link" href="{% url "events:page" path="code-jams/5" %}">Code Jam 5: Climate Change</a></li>
+ <li><a class="has-text-link" href="{% url "events:page" path="code-jams/4" %}">Code Jam 4: This App Hates You</a></li>
+ <li><a class="has-text-link" href="{% url "events:page" path="code-jams/3" %}">Code Jam 3: Games!</a></li>
+ <li><a class="has-text-link" href="{% url "events:page" path="code-jams/2" %}">Code Jam 2: Mythology API</a></li>
+ <li><a class="has-text-link" href="{% url "events:page" path="code-jams/1" %}">Code Jam 1: Snake Bot</a></li>
+ </ul>
+</div>
diff --git a/pydis_site/templates/events/sidebar/code-jams/upcoming-code-jam.html b/pydis_site/templates/events/sidebar/code-jams/upcoming-code-jam.html
new file mode 100644
index 00000000..914a9545
--- /dev/null
+++ b/pydis_site/templates/events/sidebar/code-jams/upcoming-code-jam.html
@@ -0,0 +1,8 @@
+{% load static %}
+
+<div class="box">
+ <p class="menu-label">Upcoming Code Jam</p>
+ <a href="{% url "events:page" path="code-jams/7" %}">
+ <img src="{% static "images/events/summer_code_jam_2020.png" %}" alt="">
+ </a>
+</div>
diff --git a/pydis_site/templates/events/sidebar/code-jams/useful-information.html b/pydis_site/templates/events/sidebar/code-jams/useful-information.html
new file mode 100644
index 00000000..c4e665e6
--- /dev/null
+++ b/pydis_site/templates/events/sidebar/code-jams/useful-information.html
@@ -0,0 +1,8 @@
+<div class="box">
+ <p class="menu-label">Useful information for code jam participants</p>
+ <ul class="menu-list">
+ <li><a class="has-text-link" href="{% url "events:page" path="code-jams/using-git" %}">How to use git</a></li>
+ <li><a class="has-text-link" href="{% url "events:page" path="code-jams/judging" %}">How does judging work?</a></li>
+ <li><a class="has-text-link" href="{% url "events:page" path="code-jams/pull-request" %}">Opening a Pull Request</a></li>
+ </ul>
+</div>
diff --git a/pydis_site/templates/events/sidebar/events-list.html b/pydis_site/templates/events/sidebar/events-list.html
new file mode 100644
index 00000000..327b0e77
--- /dev/null
+++ b/pydis_site/templates/events/sidebar/events-list.html
@@ -0,0 +1,10 @@
+<div class="box">
+ <p class="menu-label">Event Calendar 2020</p>
+ <ul class="menu-list">
+ <li><a class="has-text-link" href="{% url "events:page" path="code-jams/6" %}">January 17-January 26: Winter Code Jam</a></li>
+ <li><a class="has-text-link" href="{% url "events:page" path="game-jams/2020" %}">April 17-April 26: Game Jam</a></li>
+ <li><a class="has-text-link" href="{% url "events:page" path="code-jams/7" %}">July 31-August 9: Summer Code Jam</a></li>
+ <li><a class="has-text-black" style="cursor: default;">October: Hacktoberfest</a></li>
+ <li><a class="has-text-black" style="cursor: default;">December: Advent of Code</a></li>
+ </ul>
+</div>
diff --git a/pydis_site/templates/events/sidebar/game-jams/2020.html b/pydis_site/templates/events/sidebar/game-jams/2020.html
new file mode 100644
index 00000000..30042d2b
--- /dev/null
+++ b/pydis_site/templates/events/sidebar/game-jams/2020.html
@@ -0,0 +1,14 @@
+<div class="box">
+ <p class="menu-label">Partners</p>
+ <p><a href="https://arcade.academy/" target="_new"><img src="https://i.imgur.com/CtY3Siv.png" style="width: 100%;" alt=""></a></p>
+</div>
+
+<div class="box">
+ <p class="menu-label">Relevant Links</p>
+ <ul class="menu-list">
+ <li><a class="has-text-link" href="{% url "events:page" path="game-jams/2020/rules" %}">Rules</a></li>
+ <li><a class="has-text-link" href="{% url "events:page" path="game-jams/2020/project-setup" %}">Project Setup</a></li>
+ <li><a class="has-text-link" href="{% url "events:page" path="game-jams/2020/technical-requirements" %}">Technical Requirements</a></li>
+ <li><a class="has-text-link" href="{% url "events:page" path="game-jams/2020/judging" %}">Judging</a></li>
+ </ul>
+</div>
diff --git a/pydis_site/templates/events/sidebar/upcoming-event.html b/pydis_site/templates/events/sidebar/upcoming-event.html
new file mode 100644
index 00000000..5c1d925a
--- /dev/null
+++ b/pydis_site/templates/events/sidebar/upcoming-event.html
@@ -0,0 +1,8 @@
+{% load static %}
+
+<div class="box">
+ <p class="menu-label">Upcoming Event</p>
+ <a href="{% url "events:page" path="code-jams/7" %}">
+ <img src="{% static "images/events/summer_code_jam_2020.png" %}" alt="">
+ </a>
+</div>
diff --git a/pydis_site/templates/events/test-pages/my-event/_index.html b/pydis_site/templates/events/test-pages/my-event/_index.html
new file mode 100644
index 00000000..1a859fdd
--- /dev/null
+++ b/pydis_site/templates/events/test-pages/my-event/_index.html
@@ -0,0 +1 @@
+{% extends "events/base.html" %}
diff --git a/pydis_site/templates/events/test-pages/my-event/subpage.html b/pydis_site/templates/events/test-pages/my-event/subpage.html
new file mode 100644
index 00000000..1a859fdd
--- /dev/null
+++ b/pydis_site/templates/events/test-pages/my-event/subpage.html
@@ -0,0 +1 @@
+{% extends "events/base.html" %}
diff --git a/pydis_site/templates/home/account/delete.html b/pydis_site/templates/home/account/delete.html
deleted file mode 100644
index 0d44e32a..00000000
--- a/pydis_site/templates/home/account/delete.html
+++ /dev/null
@@ -1,47 +0,0 @@
-{% extends 'base/base.html' %}
-{% load static %}
-
-{% block title %}Delete Account{% endblock %}
-
-{% block content %}
- {% include "base/navbar.html" %}
-
- <section class="section content">
- <div class="container">
- <h2 class="is-size-2 has-text-centered">Account Deletion</h2>
-
- <div class="columns is-centered">
- <div class="column is-half-desktop is-full-tablet is-full-mobile">
-
- <article class="message is-danger">
- <div class="message-body">
- <p>
- You have requested to delete the account with username
- <strong><span class="has-text-dark is-family-monospace">{{ user.username }}</span></strong>.
- </p>
-
- <p>
- Please note that this <strong>cannot be undone</strong>.
- </p>
-
- <p>
- To verify that you'd like to remove your account, please type your username into the box below.
- </p>
- </div>
- </article>
- </div>
- </div>
-
- <div class="columns is-centered">
- <div class="column is-half-desktop is-full-tablet is-full-mobile">
- <form method="post">
- {% csrf_token %}
- <label for="id_username" class="label requiredField">Username</label>
- <input id="id_username" class="input" type="text" required name="username">
- <input style="margin-top: 1em;" type="submit" value="I understand, delete my account" class="button is-primary">
- </form>
- </div>
- </div>
- </div>
- </section>
-{% endblock %}
diff --git a/pydis_site/templates/home/account/settings.html b/pydis_site/templates/home/account/settings.html
deleted file mode 100644
index ed59b052..00000000
--- a/pydis_site/templates/home/account/settings.html
+++ /dev/null
@@ -1,136 +0,0 @@
-{% load socialaccount %}
-
-{# This template is just for a modal, which is actually inserted into the navbar #}
-{# template. Take a look at `navbar.html` to see how it's inserted. #}
-
-<div class="modal" id="account-modal">
- <div class="modal-background"></div>
- <div class="modal-card">
- <div class="modal-card-head">
- <div class="modal-card-title">Settings for {{ user.username }}</div>
-
- {% if groups %}
- <div>
- {% for group in groups %}
- <span class="tag is-primary">{{ group.name }}</span>
- {% endfor %}
- </div>
- {% else %}
- <span class="tag is-dark">No groups</span>
- {% endif %}
- </div>
- <div class="modal-card-body">
- <h3 class="title">Connections</h3>
- <div class="columns">
- {% if discord_provider is not None %}
- <div class="column">
- <div class="box">
- {% if not discord %}
- <div class="media">
- <div class="media-left">
- <div class="image">
- <i class="fab fa-discord fa-3x has-text-primary"></i>
- </div>
- </div>
- <div class="media-content">
- <div class="title is-5">Discord</div>
- <div class="subtitle is-6">Not connected</div>
- </div>
- </div>
- <div>
- <br />
- <a class="button is-primary" href="{% provider_login_url "discord" process="connect" %}">
- <span class="icon">
- <i class="fad fa-link"></i>
- </span>
- <span>Connect</span>
- </a>
- </div>
- {% else %}
- <div class="media">
- <div class="media-left">
- <div class="image">
- <i class="fab fa-discord fa-3x has-text-primary"></i>
- </div>
- </div>
- <div class="media-content">
- <div class="title is-5">Discord</div>
- <div class="subtitle is-6">{{ user.username }}</div>
- </div>
- </div>
- <div>
- <br />
- <button class="button" disabled>
- <span class="icon">
- <i class="fas fa-check"></i>
- </span>
- <span>Connected</span>
- </button>
- </div>
- {% endif %}
- </div>
- </div>
- {% endif %}
-
- {% if github_provider is not None %}
- <div class="column">
- <div class="box">
- {% if not github %}
- <div class="media">
- <div class="media-left">
- <div class="image">
- <i class="fab fa-github fa-3x"></i>
- </div>
- </div>
- <div class="media-content">
- <div class="title is-5">GitHub</div>
- <div class="subtitle is-6">Not connected</div>
- </div>
- </div>
- <div>
- <br />
- <a class="button is-primary" href="{% provider_login_url "github" process="connect" %}">
- <span class="icon">
- <i class="fad fa-link"></i>
- </span>
- <span>Connect</span>
- </a>
- </div>
- {% else %}
- <div class="media">
- <div class="media-left">
- <div class="image">
- <i class="fab fa-github fa-3x"></i>
- </div>
- </div>
- <div class="media-content">
- <div class="title is-5">GitHub</div>
- <div class="subtitle is-6">{{ github.extra_data.name }}</div>
- </div>
- </div>
- <div>
- <form method="post" action="{% url "account_settings" %}" type="submit">
- {% csrf_token %}
-
- <input type="hidden" name="provider" value="github" />
-
- <br />
- <button type="submit" class="button is-danger">
- <span class="icon">
- <i class="fas fa-times"></i>
- </span>
- <span>Disconnect</span>
- </button>
- </form>
- </div>
- {% endif %}
- </div>
- </div>
- {% endif %}
- </div>
- </div>
- <div class="modal-card-foot">
- <a class="button is-danger" href="{% url "account_delete" %}">Delete Account</a>
- </div>
- </div>
-</div>
diff --git a/pydis_site/templates/home/index.html b/pydis_site/templates/home/index.html
index 04815b7f..18f6b77b 100644
--- a/pydis_site/templates/home/index.html
+++ b/pydis_site/templates/home/index.html
@@ -29,7 +29,7 @@
<div class="columns is-variable is-8">
{# Embedded Welcome video #}
- <div id="wave-hero-left" class="column is-half">
+ <div id="wave-hero-centered" class="column is-half">
<div class="force-aspect-container">
<iframe
class="force-aspect-content"
@@ -50,12 +50,6 @@
></iframe>
</div>
</div>
-
- {# Right side content #}
- <div id="wave-hero-right" class="column is-half">
- <img src="{% static "images/events/100k.png" %}" alt="100K members!">
- </div>
-
</div>
</div>
@@ -88,7 +82,7 @@
</p>
<p>
You can find help with most Python-related problems in one of our help channels.
- Our staff of over 90 dedicated expert Helpers are available around the clock
+ Our staff of over 100 dedicated expert Helpers are available around the clock
in every timezone. Whether you're looking to learn the language or working on a
complex project, we've got someone who can help you if you get stuck.
</p>
@@ -98,7 +92,7 @@
<section id="showcase" class="column is-half-desktop has-text-centered">
<article class="box">
- <header class="title">New Timeline!</header>
+ <header class="title">Interactive timeline</header>
<div class="mini-timeline">
<i class="fa fa-asterisk"></i>
@@ -110,7 +104,7 @@
</div>
<p class="subtitle">
- Start from our humble beginnings to discover the events that made our community what it is today.
+ Discover the history of our community, and learn about the events that made our community what it is today.
</p>
<div class="buttons are-large is-centered">
@@ -204,6 +198,9 @@
<a href="https://notion.so" class="column is-narrow">
<img src="{% static "images/sponsors/notion.png" %}" alt="Notion"/>
</a>
+ <a href="https://streamyard.com" class="column is-narrow">
+ <img src="{% static "images/sponsors/streamyard.png" %}" alt="StreamYard"/>
+ </a>
</div>
</div>
</div>
diff --git a/pydis_site/templates/home/timeline.html b/pydis_site/templates/home/timeline.html
index f3c58fc2..d9069aca 100644
--- a/pydis_site/templates/home/timeline.html
+++ b/pydis_site/templates/home/timeline.html
@@ -3,518 +3,691 @@
{% block title %}Timeline{% endblock %}
{% block head %}
-<link rel="stylesheet" href="{% static "css/home/timeline.css" %}">
-<link rel="stylesheet" href="{% static "css/home/index.css" %}">
+ <link rel="stylesheet" href="{% static "css/home/timeline.css" %}">
+ <link rel="stylesheet" href="{% static "css/home/index.css" %}">
{% endblock %}
{% block content %}
-{% include "base/navbar.html" %}
+ {% include "base/navbar.html" %}
-<section class="cd-timeline js-cd-timeline">
+ <section class="cd-timeline js-cd-timeline">
<div class="container max-width-lg cd-timeline__container">
- <div class="cd-timeline__block">
- <div class="cd-timeline__img cd-timeline__img--picture">
- <img src="{% static "images/timeline/cd-icon-picture.svg" %}" alt="Picture">
- </div>
+ <div class="cd-timeline__block">
+ <div class="cd-timeline__img cd-timeline__img--picture">
+ <img src="{% static "images/timeline/cd-icon-picture.svg" %}" alt="Picture">
+ </div>
- <div class="cd-timeline__content text-component">
- <h2>Python Discord is created</h2>
- <p class="color-contrast-medium"><strong>joe</strong> becomes one of the owners around 3 days after it
- is created, and <strong>lemon</strong> joins the owner team later in the year, when the community
- has around 300 members.</p>
+ <div class="cd-timeline__content text-component">
+ <h2>Python Discord is created</h2>
+ <p class="color-contrast-medium"><strong>Joe Banks</strong> becomes one of the owners around 3 days after it
+ is created, and <strong>Leon Sandøy</strong> (lemon) joins the owner team later in the year, when the community
+ has around 300 members.</p>
- <div class="flex justify-between items-center">
- <span class="cd-timeline__date">Jan 8th, 2017</span>
- </div>
- </div>
+ <div class="flex justify-between items-center">
+ <span class="cd-timeline__date">Jan 8th, 2017</span>
+ </div>
</div>
+ </div>
- <div class="cd-timeline__block">
- <div class="cd-timeline__img pastel-dark-blue cd-timeline__img--picture">
- <i class="fa fa-users"></i>
- </div>
+ <div class="cd-timeline__block">
+ <div class="cd-timeline__img pastel-dark-blue cd-timeline__img--picture">
+ <i class="fa fa-users"></i>
+ </div>
- <div class="cd-timeline__content text-component">
- <h2>Python Discord hits 1,000 members</h2>
- <p class="color-contrast-medium">Our main source of new users at this point is a post on Reddit that
- happens to get very good SEO. We are one of the top 10 search engine hits for the search term
- "python discord".</p>
+ <div class="cd-timeline__content text-component">
+ <h2>Python Discord hits 1,000 members</h2>
+ <p class="color-contrast-medium">Our main source of new users at this point is a post on Reddit that
+ happens to get very good SEO. We are one of the top 10 search engine hits for the search term
+ "python discord".</p>
- <div class="flex justify-between items-center">
- <span class="cd-timeline__date">Nov 10th, 2017</span>
- </div>
- </div>
+ <div class="flex justify-between items-center">
+ <span class="cd-timeline__date">Nov 10th, 2017</span>
+ </div>
</div>
+ </div>
- <div class="cd-timeline__block">
- <div class="cd-timeline__img cd-timeline__img--picture">
- <img src={% static "images/timeline/cd-icon-picture.svg" %} alt="Picture">
- </div>
+ <div class="cd-timeline__block">
+ <div class="cd-timeline__img cd-timeline__img--picture">
+ <img src={% static "images/timeline/cd-icon-picture.svg" %} alt="Picture">
+ </div>
<div class="cd-timeline__content text-component">
<h2>Our logo is born. Thanks @Aperture!</h2>
<p class="pydis-logo-banner"><img
- src="https://raw.githubusercontent.com/python-discord/branding/master/logos/logo_banner/logo_site_banner.svg">
+ src="https://raw.githubusercontent.com/python-discord/branding/main/logos/logo_banner/logo_site_banner.svg">
</p>
- <div class="flex justify-between items-center">
- <span class="cd-timeline__date">Feb 3rd, 2018</span>
- </div>
- </div>
+ <div class="flex justify-between items-center">
+ <span class="cd-timeline__date">Feb 3rd, 2018</span>
+ </div>
</div>
+ </div>
- <div class="cd-timeline__block">
- <div class="cd-timeline__img pastel-dark-blue cd-timeline__img--picture">
- <i class="fa fa-users"></i>
- </div>
+ <div class="cd-timeline__block">
+ <div class="cd-timeline__img pastel-dark-blue cd-timeline__img--picture">
+ <i class="fa fa-users"></i>
+ </div>
- <div class="cd-timeline__content text-component">
- <h2>PyDis hits 2,000 members; pythondiscord.com and @Python are live</h2>
- <p class="color-contrast-medium">The public moderation bot we're using at the time, Rowboat, announces
- it will be shutting down. We decide that we'll write our own bot to handle moderation, so that we
- can have more control over its features. We also buy a domain and start making a website in Flask.
- </p>
+ <div class="cd-timeline__content text-component">
+ <h2>PyDis hits 2,000 members; pythondiscord.com and @Python are live</h2>
+ <p class="color-contrast-medium">The public moderation bot we're using at the time, Rowboat, announces
+ it will be shutting down. We decide that we'll write our own bot to handle moderation, so that we
+ can have more control over its features. We also buy a domain and start making a website in Flask.
+ </p>
- <div class="flex justify-between items-center">
- <span class="cd-timeline__date">Mar 4th, 2018</span>
- </div>
- </div>
+ <div class="flex justify-between items-center">
+ <span class="cd-timeline__date">Mar 4th, 2018</span>
+ </div>
</div>
+ </div>
- <div class="cd-timeline__block">
- <div class="cd-timeline__img pastel-blue cd-timeline__img--picture">
- <i class="fa fa-dice"></i>
- </div>
+ <div class="cd-timeline__block">
+ <div class="cd-timeline__img pastel-blue cd-timeline__img--picture">
+ <i class="fa fa-dice"></i>
+ </div>
- <div class="cd-timeline__content text-component">
- <h2>First code jam with the theme “snakes”</h2>
- <p class="color-contrast-medium">Our very first Code Jam attracts a handful of users who work in random
- teams of 2. We ask our participants to write a snake-themed Discord bot. Most of the code written
- for this jam still lives on in SeasonalBot, and you can play with it by using the
- <code>.snakes</code> command. For more information on this event, see <a
- href="https://pythondiscord.com/pages/code-jams/code-jam-1-snakes-bot/">the event page</a></p>
+ <div class="cd-timeline__content text-component">
+ <h2>First code jam with the theme “snakes”</h2>
+ <p class="color-contrast-medium">Our very first Code Jam attracts a handful of users who work in random
+ teams of 2. We ask our participants to write a snake-themed Discord bot. Most of the code written
+ for this jam still lives on in Sir Lancebot, and you can play with it by using the
+ <code>.snakes</code> command. For more information on this event, see <a
+ href="https://pythondiscord.com/pages/code-jams/code-jam-1-snakes-bot/">the event page</a></p>
+
+ <div class="flex justify-between items-center">
+ <span class="cd-timeline__date">Mar 23rd, 2018</span>
+ </div>
+ </div>
+ </div>
- <div class="flex justify-between items-center">
- <span class="cd-timeline__date">Mar 23rd, 2018</span>
- </div>
- </div>
+ <div class="cd-timeline__block">
+ <div class="cd-timeline__img pastel-lime cd-timeline__img--picture">
+ <i class="fa fa-scroll"></i>
</div>
- <div class="cd-timeline__block">
- <div class="cd-timeline__img pastel-lime cd-timeline__img--picture">
- <i class="fa fa-scroll"></i>
- </div>
+ <div class="cd-timeline__content text-component">
+ <h2>The privacy policy is created</h2>
+ <p class="color-contrast-medium">Since data privacy is quite important to us, we create a privacy page
+ pretty much as soon as our new bot and site starts collecting some data. To this day, we keep <a
+ href="https://pythondiscord.com/pages/privacy/">our privacy policy</a> up to date with all
+ changes, and since April 2020 we've started doing <a
+ href="https://pythondiscord.com/pages/data-reviews/">monthly data reviews</a>.</p>
+
+ <div class="flex justify-between items-center">
+ <span class="cd-timeline__date">May 21st, 2018</span>
+ </div>
+ </div>
+ </div>
- <div class="cd-timeline__content text-component">
- <h2>The privacy policy is created</h2>
- <p class="color-contrast-medium">Since data privacy is quite important to us, we create a privacy page
- pretty much as soon as our new bot and site starts collecting some data. To this day, we keep <a
- href="https://pythondiscord.com/pages/privacy/">our privacy policy</a> up to date with all
- changes, and since April 2020 we've started doing <a
- href="https://pythondiscord.com/pages/data-reviews/">monthly data reviews</a>.</p>
+ <div class="cd-timeline__block">
+ <div class="cd-timeline__img pastel-pink cd-timeline__img--picture">
+ <i class="fa fa-handshake"></i>
+ </div>
- <div class="flex justify-between items-center">
- <span class="cd-timeline__date">May 21st, 2018</span>
- </div>
- </div>
+ <div class="cd-timeline__content text-component">
+ <h2>Do You Even Python and PyDis merger</h2>
+ <p class="color-contrast-medium">At this point in time, there are only two serious Python communities on
+ Discord - Ours, and one called Do You Even Python. We approach the owners of DYEP with a bold
+ proposal - let's shut down their community, replace it with links to ours, and in return we will let
+ their staff join our staff. This gives us a big boost in members, and eventually leads to @eivl and
+ @Mr. Hemlock joining our Admin team</p>
+
+ <div class="flex justify-between items-center">
+ <span class="cd-timeline__date">Jun 9th, 2018</span>
+ </div>
</div>
+ </div>
- <div class="cd-timeline__block">
- <div class="cd-timeline__img pastel-pink cd-timeline__img--picture">
- <i class="fa fa-handshake"></i>
- </div>
+ <div class="cd-timeline__block">
+ <div class="cd-timeline__img pastel-dark-blue cd-timeline__img--picture">
+ <i class="fa fa-users"></i>
+ </div>
- <div class="cd-timeline__content text-component">
- <h2>Do You Even Python and PyDis merger</h2>
- <p class="color-contrast-medium">At this point in time, there are only two serious Python communities on
- Discord - Ours, and one called Do You Even Python. We approach the owners of DYEP with a bold
- proposal - let's shut down their community, replace it with links to ours, and in return we will let
- their staff join our staff. This gives us a big boost in members, and eventually leads to @eivl and
- @Mr. Hemlock joining our Admin team</p>
+ <div class="cd-timeline__content text-component">
+ <h2>PyDis hits 5,000 members and partners with r/Python</h2>
+ <p class="color-contrast-medium">As we continue to grow, we approach the r/Python subreddit and ask to
+ become their official Discord community. They agree, and we become listed in their sidebar, giving
+ us yet another source of new members.</p>
- <div class="flex justify-between items-center">
- <span class="cd-timeline__date">Jun 9th, 2018</span>
- </div>
- </div>
+ <div class="flex justify-between items-center">
+ <span class="cd-timeline__date">Jun 20th, 2018</span>
+ </div>
</div>
+ </div>
- <div class="cd-timeline__block">
- <div class="cd-timeline__img pastel-dark-blue cd-timeline__img--picture">
- <i class="fa fa-users"></i>
- </div>
+ <div class="cd-timeline__block">
+ <div class="cd-timeline__img pastel-pink cd-timeline__img--picture">
+ <i class="fa fa-handshake"></i>
+ </div>
- <div class="cd-timeline__content text-component">
- <h2>PyDis hits 5,000 members and partners with r/Python</h2>
- <p class="color-contrast-medium">As we continue to grow, we approach the r/Python subreddit and ask to
- become their official Discord community. They agree, and we become listed in their sidebar, giving
- us yet another source of new members.</p>
+ <div class="cd-timeline__content text-component">
+ <h2>PyDis is now partnered with Discord; the vanity URL discord.gg/python is created</h2>
+ <p class="color-contrast-medium">After being rejected for their Partner program several times, we
+ finally get approved. The recent partnership with the r/Python subreddit plays a significant role in
+ qualifying us for this partnership.</p>
- <div class="flex justify-between items-center">
- <span class="cd-timeline__date">Jun 20th, 2018</span>
- </div>
- </div>
+ <div class="flex justify-between items-center">
+ <span class="cd-timeline__date">Jul 10th, 2018</span>
+ </div>
</div>
+ </div>
- <div class="cd-timeline__block">
- <div class="cd-timeline__img pastel-pink cd-timeline__img--picture">
- <i class="fa fa-handshake"></i>
- </div>
+ <div class="cd-timeline__block">
+ <div class="cd-timeline__img pastel-blue cd-timeline__img--picture">
+ <i class="fa fa-dice"></i>
+ </div>
- <div class="cd-timeline__content text-component">
- <h2>PyDis is now partnered with Discord; the vanity URL discord.gg/python is created</h2>
- <p class="color-contrast-medium">After being rejected for their Partner program several times, we
- finally get approved. The recent partnership with the r/Python subreddit plays a significant role in
- qualifying us for this partnership.</p>
+ <div class="cd-timeline__content text-component">
+ <h2>First Hacktoberfest PyDis event; @Sir Lancebot is created</h2>
+ <p class="color-contrast-medium">We create a second bot for our community and fill it up with simple,
+ fun and relatively easy issues. The idea is to create an approachable arena for our members to cut
+ their open-source teeth on, and to provide lots of help and hand-holding for those who get stuck.
+ We're training our members to be productive contributors in the open-source ecosystem.</p>
- <div class="flex justify-between items-center">
- <span class="cd-timeline__date">Jul 10th, 2018</span>
- </div>
- </div>
+ <div class="flex justify-between items-center">
+ <span class="cd-timeline__date">Oct 1st, 2018</span>
+ </div>
</div>
+ </div>
- <div class="cd-timeline__block">
- <div class="cd-timeline__img pastel-blue cd-timeline__img--picture">
- <i class="fa fa-dice"></i>
- </div>
+ <div class="cd-timeline__block">
+ <div class="cd-timeline__img pastel-dark-blue cd-timeline__img--picture">
+ <i class="fa fa-users"></i>
+ </div>
- <div class="cd-timeline__content text-component">
- <h2>First Hacktoberfest PyDis event; @SeasonalBot is created</h2>
- <p class="color-contrast-medium">We create a second bot for our community and fill it up with simple,
- fun and relatively easy issues. The idea is to create an approachable arena for our members to cut
- their open-source teeth on, and to provide lots of help and hand-holding for those who get stuck.
- We're training our members to be productive contributors in the open-source ecosystem.</p>
+ <div class="cd-timeline__content text-component">
+ <h2>PyDis hits 10,000 members</h2>
+ <p class="color-contrast-medium">We partner with RLBot, move from GitLab to GitHub, and start putting
+ together the first Advent of Code event.</p>
- <div class="flex justify-between items-center">
- <span class="cd-timeline__date">Oct 1st, 2018</span>
- </div>
- </div>
+ <div class="flex justify-between items-center">
+ <span class="cd-timeline__date">Nov 24th, 2018</span>
+ </div>
</div>
+ </div>
- <div class="cd-timeline__block">
- <div class="cd-timeline__img pastel-dark-blue cd-timeline__img--picture">
- <i class="fa fa-users"></i>
- </div>
+ <div class="cd-timeline__block">
+ <div class="cd-timeline__img pastel-orange cd-timeline__img--picture">
+ <i class="fa fa-code"></i>
+ </div>
- <div class="cd-timeline__content text-component">
- <h2>PyDis hits 10,000 members</h2>
- <p class="color-contrast-medium">We partner with RLBot, move from GitLab to GitHub, and start putting
- together the first Advent of Code event.</p>
+ <div class="cd-timeline__content text-component">
+ <h2>django-simple-bulma is released on PyPi</h2>
+ <p class="color-contrast-medium">Our very first package on PyPI, <a
+ href="https://pypi.org/project/django-simple-bulma/">django-simple-bulma</a> is a package that
+ sets up the Bulma CSS framework for your Django application and lets you configure everything in
+ settings.py.</p>
- <div class="flex justify-between items-center">
- <span class="cd-timeline__date">Nov 24th, 2018</span>
- </div>
- </div>
+ <div class="flex justify-between items-center">
+ <span class="cd-timeline__date">Dec 19th, 2018</span>
+ </div>
</div>
+ </div>
- <div class="cd-timeline__block">
- <div class="cd-timeline__img pastel-orange cd-timeline__img--picture">
- <i class="fa fa-code"></i>
- </div>
+ <div class="cd-timeline__block">
+ <div class="cd-timeline__img pastel-dark-blue cd-timeline__img--picture">
+ <i class="fa fa-users"></i>
+ </div>
- <div class="cd-timeline__content text-component">
- <h2>django-simple-bulma is released on PyPi</h2>
- <p class="color-contrast-medium">Our very first package on PyPI, <a
- href="https://pypi.org/project/django-simple-bulma/">django-simple-bulma</a> is a package that
- sets up the Bulma CSS framework for your Django application and lets you configure everything in
- settings.py.</p>
+ <div class="cd-timeline__content text-component">
+ <h2>PyDis hits 15,000 members; the “hot ones special” video is released</h2>
+ <div class="force-aspect-container">
+ <iframe class="force-aspect-content" src="https://www.youtube.com/embed/DIBXg8Qh7bA" frameborder="0"
+ allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture"
+ allowfullscreen></iframe>
+ </div>
+
+ <div class="flex justify-between items-center">
+ <span class="cd-timeline__date">Apr 8th, 2019</span>
+ </div>
+ </div>
+ </div>
- <div class="flex justify-between items-center">
- <span class="cd-timeline__date">Dec 19th, 2018</span>
- </div>
- </div>
+ <div class="cd-timeline__block">
+ <div class="cd-timeline__img pastel-orange cd-timeline__img--picture">
+ <i class="fa fa-code"></i>
</div>
- <div class="cd-timeline__block">
- <div class="cd-timeline__img pastel-dark-blue cd-timeline__img--picture">
- <i class="fa fa-users"></i>
- </div>
+ <div class="cd-timeline__content text-component">
+ <h2>The Django rewrite of pythondiscord.com is now live!</h2>
+ <p class="color-contrast-medium">The site is getting more and more complex, and it's time for a rewrite.
+ We decide to go for a different stack, and build a website based on Django, DRF, Bulma and
+ PostgreSQL.</p>
- <div class="cd-timeline__content text-component">
- <h2>PyDis hits 15,000 members; the “hot ones special” video is released</h2>
- <div class="force-aspect-container">
- <iframe class="force-aspect-content" src="https://www.youtube.com/embed/DIBXg8Qh7bA" frameborder="0"
- allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture"
- allowfullscreen></iframe>
- </div>
+ <div class="flex justify-between items-center">
+ <span class="cd-timeline__date">Sep 15, 2019</span>
+ </div>
+ </div>
+ </div>
- <div class="flex justify-between items-center">
- <span class="cd-timeline__date">Apr 8th, 2019</span>
- </div>
- </div>
+ <div class="cd-timeline__block">
+ <div class="cd-timeline__img pastel-lime cd-timeline__img--picture">
+ <i class="fa fa-scroll"></i>
</div>
- <div class="cd-timeline__block">
- <div class="cd-timeline__img pastel-orange cd-timeline__img--picture">
- <i class="fa fa-code"></i>
- </div>
+ <div class="cd-timeline__content text-component">
+ <h2>The code of conduct is created</h2>
+ <p class="color-contrast-medium">Inspired by the Adafruit, Rust and Django communities, an essential
+ community pillar is created; Our <a href="https://pythondiscord.com/pages/code-of-conduct/">Code of
+ Conduct.</a></p>
- <div class="cd-timeline__content text-component">
- <h2>The Django rewrite of pythondiscord.com is now live!</h2>
- <p class="color-contrast-medium">The site is getting more and more complex, and it's time for a rewrite.
- We decide to go for a different stack, and build a website based on Django, DRF, Bulma and
- PostgreSQL.</p>
+ <div class="flex justify-between items-center">
+ <span class="cd-timeline__date">Oct 26th, 2019</span>
+ </div>
+ </div>
+ </div>
- <div class="flex justify-between items-center">
- <span class="cd-timeline__date">Sep 15, 2019</span>
- </div>
- </div>
+ <div class="cd-timeline__block">
+ <div class="cd-timeline__img cd-timeline__img--picture">
+ <img src={% static "images/timeline/cd-icon-picture.svg" %} alt="Picture">
</div>
- <div class="cd-timeline__block">
- <div class="cd-timeline__img pastel-lime cd-timeline__img--picture">
- <i class="fa fa-scroll"></i>
- </div>
+ <div class="cd-timeline__content text-component">
+ <h2>Sebastiaan Zeef becomes an owner</h2>
+ <p class="color-contrast-medium">After being a long time active contributor to our projects and the driving
+ force behind many of our events, Sebastiaan Zeef joins the Owners Team alongside Joe & Leon.</p>
- <div class="cd-timeline__content text-component">
- <h2>The code of conduct is created</h2>
- <p class="color-contrast-medium">Inspired by the Adafruit, Rust and Django communities, an essential
- community pillar is created; Our <a href="https://pythondiscord.com/pages/code-of-conduct/">Code of
- Conduct.</a></p>
+ <div class="flex justify-between items-center">
+ <span class="cd-timeline__date">Sept 22nd, 2019</span>
+ </div>
+ </div>
+ </div>
- <div class="flex justify-between items-center">
- <span class="cd-timeline__date">Oct 26th, 2019</span>
- </div>
- </div>
+ <div class="cd-timeline__block">
+ <div class="cd-timeline__img pastel-dark-blue cd-timeline__img--picture">
+ <i class="fa fa-users"></i>
</div>
- <div class="cd-timeline__block">
- <div class="cd-timeline__img cd-timeline__img--picture">
- <img src={% static "images/timeline/cd-icon-picture.svg" %} alt="Picture">
- </div>
+ <div class="cd-timeline__content text-component">
+ <h2>PyDis hits 30,000 members</h2>
+ <p class="color-contrast-medium">More than tripling in size since the year before, the community hits
+ 30000 users. At this point, we're probably the largest Python chat community on the planet.</p>
- <div class="cd-timeline__content text-component">
- <h2>Ves Zappa becomes an owner</h2>
- <p class="color-contrast-medium">After being a long time active contributor to our projects and the driving force behind our events, Ves Zappa joined the Owners team alongside joe & lemon.</p>
+ <div class="flex justify-between items-center">
+ <span class="cd-timeline__date">Dec 22nd, 2019</span>
+ </div>
+ </div>
+ </div>
- <div class="flex justify-between items-center">
- <span class="cd-timeline__date">Sept 22nd, 2019</span>
- </div>
- </div>
+ <div class="cd-timeline__block">
+ <div class="cd-timeline__img pastel-blue cd-timeline__img--picture">
+ <i class="fa fa-dice"></i>
</div>
- <div class="cd-timeline__block">
- <div class="cd-timeline__img pastel-dark-blue cd-timeline__img--picture">
- <i class="fa fa-users"></i>
- </div>
+ <div class="cd-timeline__content text-component">
+ <h2>PyDis sixth code jam with the theme “Ancient technology” and the technology Kivy</h2>
+ <p class="color-contrast-medium">Our Code Jams are becoming an increasingly big deal, and the Kivy core
+ developers join us to judge the event and help out our members during the event. One of them,
+ @tshirtman, even joins our staff!</p>
+
+ <div class="force-aspect-container">
+ <iframe class="force-aspect-content" src="https://www.youtube.com/embed/8fbZsGrqBzo" frameborder="0"
+ allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture"
+ allowfullscreen></iframe>
+ </div>
+
+ <div class="flex justify-between items-center">
+ <span class="cd-timeline__date">Jan 17, 2020</span>
+ </div>
+ </div>
+ </div>
- <div class="cd-timeline__content text-component">
- <h2>PyDis hits 30,000 members</h2>
- <p class="color-contrast-medium">More than tripling in size since the year before, the community hits
- 30000 users. At this point, we're probably the largest Python chat community on the planet.</p>
+ <div class="cd-timeline__block">
+ <div class="cd-timeline__img pastel-green cd-timeline__img--picture">
+ <i class="fa fa-comments"></i>
+ </div>
+
+ <div class="cd-timeline__content text-component">
+ <h2>The new help channel system is live</h2>
+ <p class="color-contrast-medium">We release our dynamic help-channel system, which allows you to claim
+ your very own help channel instead of fighting over the static help channels. We release a <a
+ href="https://pythondiscord.com/pages/resources/guides/help-channels/">Help Channel Guide</a> to
+ help our members fully understand how the system works.</p>
- <div class="flex justify-between items-center">
- <span class="cd-timeline__date">Dec 22nd, 2019</span>
- </div>
- </div>
+ <div class="flex justify-between items-center">
+ <span class="cd-timeline__date">Apr 5th, 2020</span>
+ </div>
</div>
+ </div>
- <div class="cd-timeline__block">
- <div class="cd-timeline__img pastel-blue cd-timeline__img--picture">
- <i class="fa fa-dice"></i>
- </div>
+ <div class="cd-timeline__block">
+ <div class="cd-timeline__img pastel-dark-blue cd-timeline__img--picture">
+ <i class="fa fa-users"></i>
+ </div>
- <div class="cd-timeline__content text-component">
- <h2>PyDis sixth code jam with the theme “Ancient technology” and the technology Kivy</h2>
- <p class="color-contrast-medium">Our Code Jams are becoming an increasingly big deal, and the Kivy core
- developers join us to judge the event and help out our members during the event. One of them,
- @tshirtman, even joins our staff!</p>
+ <div class="cd-timeline__content text-component">
+ <h2>Python Discord hits 40,000 members, and is now bigger than Liechtenstein.</h2>
+ <p class="color-contrast-medium"><img
+ src="https://cdn.discordapp.com/attachments/354619224620138496/699666518476324954/unknown.png">
+ </p>
- <div class="force-aspect-container">
- <iframe class="force-aspect-content" src="https://www.youtube.com/embed/8fbZsGrqBzo" frameborder="0"
- allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture"
- allowfullscreen></iframe>
- </div>
+ <div class="flex justify-between items-center">
+ <span class="cd-timeline__date">Apr 14, 2020</span>
+ </div>
+ </div>
+ </div>
- <div class="flex justify-between items-center">
- <span class="cd-timeline__date">Jan 17, 2020</span>
- </div>
- </div>
+ <div class="cd-timeline__block">
+ <div class="cd-timeline__img pastel-purple cd-timeline__img--picture">
+ <i class="fa fa-gamepad"></i>
</div>
- <div class="cd-timeline__block">
- <div class="cd-timeline__img pastel-green cd-timeline__img--picture">
- <i class="fa fa-comments"></i>
- </div>
+ <div class="cd-timeline__content text-component">
+ <h2>PyDis Game Jam 2020 with the “Three of a Kind” theme and Arcade as the technology</h2>
+ <p class="color-contrast-medium">The creator of Arcade, Paul Vincent Craven, joins us as a judge.
+ Several of the Code Jam participants also end up getting involved contributing to the Arcade
+ repository.</p>
+
+ <div class="force-aspect-container">
+ <iframe class="force-aspect-content" src="https://www.youtube.com/embed/KkLXMvKfEgs" frameborder="0"
+ allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture"
+ allowfullscreen></iframe>
+ </div>
+
+ <div class="flex justify-between items-center">
+ <span class="cd-timeline__date">Apr 17th, 2020</span>
+ </div>
+ </div>
+ </div>
- <div class="cd-timeline__content text-component">
- <h2>The new help channel system is live</h2>
- <p class="color-contrast-medium">We release our dynamic help-channel system, which allows you to claim
- your very own help channel instead of fighting over the static help channels. We release a <a
- href="https://pythondiscord.com/pages/resources/guides/help-channels/">Help Channel Guide</a> to
- help our members fully understand how the system works.</p>
+ <div class="cd-timeline__block">
+ <div class="cd-timeline__img pastel-green cd-timeline__img--picture">
+ <i class="fa fa-comments"></i>
+ </div>
- <div class="flex justify-between items-center">
- <span class="cd-timeline__date">Apr 5th, 2020</span>
- </div>
- </div>
+ <div class="cd-timeline__content text-component">
+ <h2>ModMail is now live</h2>
+ <p class="color-contrast-medium">Having originally planned to write our own ModMail bot from scratch, we
+ come across an exceptionally good <a href="https://github.com/kyb3r/modmail">ModMail bot by
+ kyb3r</a> and decide to just self-host that one instead.</p>
+
+ <div class="flex justify-between items-center">
+ <span class="cd-timeline__date">May 25th, 2020</span>
+ </div>
</div>
+ </div>
- <div class="cd-timeline__block">
- <div class="cd-timeline__img pastel-dark-blue cd-timeline__img--picture">
- <i class="fa fa-users"></i>
- </div>
+ <div class="cd-timeline__block">
+ <div class="cd-timeline__img pastel-pink cd-timeline__img--picture">
+ <i class="fa fa-handshake"></i>
+ </div>
- <div class="cd-timeline__content text-component">
- <h2>Python Discord hits 40,000 members, and is now bigger than Liechtenstein.</h2>
- <p class="color-contrast-medium"><img
- src="https://cdn.discordapp.com/attachments/354619224620138496/699666518476324954/unknown.png">
- </p>
+ <div class="cd-timeline__content text-component">
+ <h2>Python Discord is now listed on python.org/community</h2>
+ <p class="color-contrast-medium">After working towards this goal for months, we finally work out an
+ arrangement with the PSF that allows us to be listed on that most holiest of websites:
+ https://python.org/. <a href="https://youtu.be/yciX2meIkXI?t=3">There was much rejoicing.</a></p>
- <div class="flex justify-between items-center">
- <span class="cd-timeline__date">Apr 14, 2020</span>
- </div>
- </div>
+ <div class="flex justify-between items-center">
+ <span class="cd-timeline__date">May 28th, 2020</span>
+ </div>
</div>
+ </div>
- <div class="cd-timeline__block">
- <div class="cd-timeline__img pastel-purple cd-timeline__img--picture">
- <i class="fa fa-gamepad"></i>
- </div>
+ <div class="cd-timeline__block">
+ <div class="cd-timeline__img pastel-red cd-timeline__img--picture">
+ <i class="fa fa-chart-bar"></i>
+ </div>
- <div class="cd-timeline__content text-component">
- <h2>PyDis Game Jam 2020 with the “Three of a Kind” theme and Arcade as the technology</h2>
- <p class="color-contrast-medium">The creator of Arcade, Paul Vincent Craven, joins us as a judge.
- Several of the Code Jam participants also end up getting involved contributing to the Arcade
- repository.</p>
+ <div class="cd-timeline__content text-component">
+ <h2>Python Discord Public Statistics are now live</h2>
+ <p class="color-contrast-medium">After getting numerous requests to publish beautiful data on member
+ count and channel use, we create <a href="https://stats.pythondiscord.com/">stats.pythondiscord.com</a> for
+ all to enjoy.</p>
- <div class="force-aspect-container">
- <iframe class="force-aspect-content" src="https://www.youtube.com/embed/KkLXMvKfEgs" frameborder="0"
- allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture"
- allowfullscreen></iframe>
- </div>
+ <div class="flex justify-between items-center">
+ <span class="cd-timeline__date">Jun 4th, 2020</span>
+ </div>
+ </div>
+ </div>
- <div class="flex justify-between items-center">
- <span class="cd-timeline__date">Apr 17th, 2020</span>
- </div>
- </div>
+ <div class="cd-timeline__block">
+ <div class="cd-timeline__img pastel-blue cd-timeline__img--picture">
+ <i class="fa fa-dice"></i>
</div>
- <div class="cd-timeline__block">
- <div class="cd-timeline__img pastel-green cd-timeline__img--picture">
- <i class="fa fa-comments"></i>
- </div>
+ <div class="cd-timeline__content text-component">
+ <h2>PyDis summer code jam 2020 with the theme “Early Internet” and Django as the technology</h2>
+ <p class="color-contrast-medium">Sponsored by the Django Software Foundation and JetBrains, the Summer
+ Code Jam for 2020 attracts hundreds of participants, and sees the creation of some fantastic
+ projects. Check them out in our judge stream below:</p>
+
+ <div class="force-aspect-container">
+ <iframe class="force-aspect-content" src="https://www.youtube.com/embed/OFtm8f2iu6c" frameborder="0"
+ allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture"
+ allowfullscreen></iframe>
+ </div>
+
+ <div class="flex justify-between items-center">
+ <span class="cd-timeline__date">Jul 31st, 2020</span>
+ </div>
+ </div>
+ </div>
- <div class="cd-timeline__content text-component">
- <h2>ModMail is now live</h2>
- <p class="color-contrast-medium">Having originally planned to write our own ModMail bot from scratch, we
- come across an exceptionally good <a href="https://github.com/kyb3r/modmail">ModMail bot by
- kyb3r</a> and decide to just self-host that one instead.</p>
+ <div class="cd-timeline__block">
+ <div class="cd-timeline__img pastel-pink cd-timeline__img--picture">
+ <i class="fa fa-handshake"></i>
+ </div>
+
+ <div class="cd-timeline__content text-component">
+ <h2>Python Discord is now the new home of the PyWeek event!</h2>
+ <p class="color-contrast-medium">PyWeek, a game jam that has been running since 2005, joins Python
+ Discord as one of our official events. Find more information about PyWeek on <a
+ href="https://pyweek.org/">their official website</a>.</p>
- <div class="flex justify-between items-center">
- <span class="cd-timeline__date">May 25th, 2020</span>
- </div>
- </div>
+ <div class="flex justify-between items-center">
+ <span class="cd-timeline__date">Aug 16th, 2020</span>
+ </div>
</div>
+ </div>
- <div class="cd-timeline__block">
- <div class="cd-timeline__img pastel-pink cd-timeline__img--picture">
- <i class="fa fa-handshake"></i>
- </div>
+ <div class="cd-timeline__block">
+ <div class="cd-timeline__img cd-timeline__img--picture">
+ <img src="{% static "images/timeline/cd-icon-picture.svg" %}" alt="Picture">
+ </div>
- <div class="cd-timeline__content text-component">
- <h2>Python Discord is now listed on python.org/community</h2>
- <p class="color-contrast-medium">After working towards this goal for months, we finally work out an
- arrangement with the PSF that allows us to be listed on that most holiest of websites:
- https://python.org/. <a href="https://youtu.be/yciX2meIkXI?t=3">There was much rejoicing.</a></p>
+ <div class="cd-timeline__content text-component">
+ <h2>Python Discord hosts the 2020 CPython Core Developer Q&A</h2>
+ <div class="force-aspect-container">
+ <iframe class="force-aspect-content" src="https://www.youtube.com/embed/gXMdfBTcOfQ" frameborder="0"
+ allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture"
+ allowfullscreen></iframe>
+ </div>
+
+ <div class="flex justify-between items-center">
+ <span class="cd-timeline__date">Oct 21st, 2020</span>
+ </div>
+ </div>
+ </div>
- <div class="flex justify-between items-center">
- <span class="cd-timeline__date">May 28th, 2020</span>
- </div>
- </div>
+ <div class="cd-timeline__block">
+ <div class="cd-timeline__img pastel-dark-blue cd-timeline__img--picture">
+ <i class="fa fa-users"></i>
</div>
- <div class="cd-timeline__block">
- <div class="cd-timeline__img pastel-red cd-timeline__img--picture">
- <i class="fa fa-chart-bar"></i>
- </div>
+ <div class="cd-timeline__content text-component">
+ <h2>Python Discord hits 100,000 members!</h2>
+ <p class="color-contrast-medium">Only six months after hitting 40,000 users, we hit 100,000 users. A
+ monumental milestone,
+ and one we're very proud of. To commemorate it, we create this timeline.</p>
- <div class="cd-timeline__content text-component">
- <h2>Python Discord Public Statistics are now live</h2>
- <p class="color-contrast-medium">After getting numerous requests to publish beautiful data on member
- count and channel use, we create <a href="https://stats.pythondiscord.com/">stats.pythondiscord.com</a> for all to enjoy.</p>
+ <div class="flex justify-between items-center">
+ <span class="cd-timeline__date">Oct 22nd, 2020</span>
+ </div>
+ </div>
+ </div>
- <div class="flex justify-between items-center">
- <span class="cd-timeline__date">Jun 4th, 2020</span>
- </div>
- </div>
+ <div class="cd-timeline__block">
+ <div class="cd-timeline__img pastel-orange cd-timeline__img--picture">
+ <i class="fa fa-wrench"></i>
</div>
- <div class="cd-timeline__block">
- <div class="cd-timeline__img pastel-blue cd-timeline__img--picture">
- <i class="fa fa-dice"></i>
- </div>
+ <div class="cd-timeline__content text-component">
+ <h2>We migrate all our infrastructure to Kubernetes</h2>
+ <p class="color-contrast-medium">As our tech stack grows, we decide to migrate all our services over to a
+ container orchestration paradigm via Kubernetes. This gives us better control and scalability.
+ <b>Joe Banks</b> takes on the role as DevOps Lead.
+ </p>
- <div class="cd-timeline__content text-component">
- <h2>PyDis summer code jam 2020 with the theme “Early Internet” and Django as the technology</h2>
- <p class="color-contrast-medium">Sponsored by the Django Software Foundation and JetBrains, the Summer
- Code Jam for 2020 attracts hundreds of participants, and sees the creation of some fantastic
- projects. Check them out in our judge stream below:</p>
+ <div class="flex justify-between items-center">
+ <span class="cd-timeline__date">Nov 29th, 2020</span>
+ </div>
+ </div>
+ </div>
- <div class="force-aspect-container">
- <iframe class="force-aspect-content" src="https://www.youtube.com/embed/OFtm8f2iu6c" frameborder="0"
- allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture"
- allowfullscreen></iframe>
- </div>
+ <div class="cd-timeline__block">
+ <div class="cd-timeline__img pastel-red cd-timeline__img--picture">
+ <i class="fa fa-snowflake-o"></i>
+ </div>
+
+ <div class="cd-timeline__content text-component">
+ <h2>Advent of Code attracts hundreds of participants</h2>
+ <p class="color-contrast-medium">
+ A total of 443 Python Discord members sign up to be part of
+ <a href="https://adventofcode.com/">Eric Wastl's excellent Advent of Code event</a>.
+ As always, we provide dedicated announcements, scoreboards, bot commands and channels for our members
+ to enjoy the event in.
+
+ </p>
- <div class="flex justify-between items-center">
- <span class="cd-timeline__date">Jul 31st, 2020</span>
- </div>
- </div>
+ <div class="flex justify-between items-center">
+ <span class="cd-timeline__date">December 1st - 25th, 2020</span>
+ </div>
</div>
+ </div>
- <div class="cd-timeline__block">
- <div class="cd-timeline__img pastel-pink cd-timeline__img--picture">
- <i class="fa fa-handshake"></i>
- </div>
- <div class="cd-timeline__content text-component">
- <h2>Python Discord is now the new home of the PyWeek event!</h2>
- <p class="color-contrast-medium">PyWeek, a game jam that has been running since 2005, joins Python
- Discord as one of our official events. Find more information about PyWeek on <a
- href="https://pyweek.org/">their official website</a>.</p>
+ <div class="cd-timeline__block">
+ <div class="cd-timeline__img pastel-blue cd-timeline__img--picture">
+ <i class="fa fa-music"></i>
+ </div>
- <div class="flex justify-between items-center">
- <span class="cd-timeline__date">Aug 16th, 2020</span>
- </div>
- </div>
+ <div class="cd-timeline__content text-component">
+ <h2>We release The PEP 8 song</h2>
+ <p class="color-contrast-medium">We release the PEP 8 song on our YouTube channel, which finds tens of
+ thousands of listeners!</p>
+
+ <div class="force-aspect-container">
+ <iframe class="force-aspect-content" src="https://www.youtube.com/embed/hgI0p1zf31k" frameborder="0"
+ allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture"
+ allowfullscreen></iframe>
+ </div>
+
+ <div class="flex justify-between items-center">
+ <span class="cd-timeline__date">February 8th, 2021</span>
+ </div>
</div>
+ </div>
- <div class="cd-timeline__block">
- <div class="cd-timeline__img cd-timeline__img--picture">
- <img src="{% static "images/timeline/cd-icon-picture.svg" %}" alt="Picture">
- </div>
+ <div class="cd-timeline__block">
+ <div class="cd-timeline__img pastel-dark-blue cd-timeline__img--picture">
+ <i class="fa fa-users"></i>
+ </div>
- <div class="cd-timeline__content text-component">
- <h2>Python Discord hosts the 2020 CPython Core Developer Q&A</h2>
- <div class="force-aspect-container">
- <iframe class="force-aspect-content" src="https://www.youtube.com/embed/gXMdfBTcOfQ" frameborder="0"
- allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture"
- allowfullscreen></iframe>
- </div>
+ <div class="cd-timeline__content text-component">
+ <h2>We now have 150,000 members!</h2>
+ <p class="color-contrast-medium">Our growth continues to accelerate.</p>
- <div class="flex justify-between items-center">
- <span class="cd-timeline__date">Oct 21st, 2020</span>
- </div>
- </div>
+ <div class="flex justify-between items-center">
+ <span class="cd-timeline__date">Feb 18th, 2021</span>
+ </div>
</div>
+ </div>
- <div class="cd-timeline__block">
- <div class="cd-timeline__img pastel-dark-blue cd-timeline__img--picture">
- <i class="fa fa-users"></i>
- </div>
+ <div class="cd-timeline__block">
+ <div class="cd-timeline__img pastel-green cd-timeline__img--picture">
+ <i class="fa fa-microphone"></i>
+ </div>
- <div class="cd-timeline__content text-component">
- <h2>Python Discord hits 100,000 members.</h2>
- <p class="color-contrast-medium">After years of hard work, we hit 100,000 users. A monumental milestone,
- and one we're very proud of. To commemorate it, we create this timeline.</p>
+ <div class="cd-timeline__content text-component">
+ <h2>Leon Sandøy appears on Talk Python To Me</h2>
+ <p class="color-contrast-medium">Leon goes on the Talk Python to Me podcast with Michael Kennedy
+ to discuss the history of Python Discord, the critical importance of culture, and how to run a massive
+ community. You can find the episode <a href="https://talkpython.fm/episodes/show/305/python-community-at-python-discord"> at talkpython.fm</a>.
+ </p>
+
+ <iframe width="100%" height="166" scrolling="no" frameborder="no"
+ src="https://w.soundcloud.com/player/?url=https%3A//api.soundcloud.com/tracks/996083146&color=ff5500&auto_play=false&hide_related=false&show_comments=true&show_user=true&show_reposts=false">
+ </iframe>
+
+ <div class="flex justify-between items-center">
+ <span class="cd-timeline__date">Mar 1st, 2021</span>
+ </div>
+ </div>
+ </div>
+
+ <div class="cd-timeline__block">
+ <div class="cd-timeline__img pastel-pink cd-timeline__img--picture">
+ <i class="fa fa-microphone"></i>
+ </div>
- <div class="flex justify-between items-center">
- <span class="cd-timeline__date">Oct 22nd, 2020</span>
- </div>
- </div>
+ <div class="cd-timeline__content text-component">
+ <h2>We're on the Teaching Python podcast!</h2>
+ <p class="color-contrast-medium">Leon joins Sean and Kelly on the Teaching Python podcast to discuss how the pandemic has
+ changed the way we learn, and what role communities like Python Discord can play in this new world.
+ You can find the episode <a href="https://teachingpython.fm/63"> at teachingpython.fm</a>.
+ </p>
+
+ <iframe width="100%" height="166" frameborder="0" scrolling="no"
+ src="https://player.fireside.fm/v2/UIYXtbeL+qOjGAsKi?theme=dark"
+ ></iframe>
+
+ <div class="flex justify-between items-center">
+ <span class="cd-timeline__date">Mar 13th, 2021</span>
+ </div>
+ </div>
+ </div>
+
+ <div class="cd-timeline__block">
+ <div class="cd-timeline__img pastel-purple cd-timeline__img--picture">
+ <i class="fa fa-comment"></i>
+ </div>
+
+ <div class="cd-timeline__content text-component">
+ <h2>New feature: Weekly discussion channel</h2>
+ <p class="color-contrast-medium">Every week (or two weeks), we'll be posting a new topic to discuss in a
+ channel called <b>#weekly-topic-discussion</b>. Our inaugural topic is a PyCon talk by Anthony Shaw called
+ <b>Wily Python: Writing simpler and more maintainable Python.</b></a>.
+ </p>
+
+ <div class="force-aspect-container">
+ <iframe class="force-aspect-content" src="https://www.youtube.com/embed/dqdsNoApJ80" frameborder="0"
+ allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture"
+ allowfullscreen></iframe>
+ </div>
+
+ <div class="flex justify-between items-center">
+ <span class="cd-timeline__date">Mar 13th, 2021</span>
+ </div>
</div>
+ </div>
+
+ <div class="cd-timeline__block">
+ <div class="cd-timeline__img pastel-red cd-timeline__img--picture">
+ <i class="fa fa-youtube-play"></i>
+ </div>
+
+ <div class="cd-timeline__content text-component">
+ <h2>Summer Code Jam 2020 Highlights</h2>
+ <p class="color-contrast-medium">
+ We release a new video to our YouTube showing the best projects from the Summer Code Jam 2020.
+ Better late than never!
+ </p>
+
+ <div class="force-aspect-container">
+ <iframe class="force-aspect-content" src="https://www.youtube.com/embed/g9cnp4W0P54" frameborder="0"
+ allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture"
+ allowfullscreen></iframe>
+ </div>
+
+ <div class="flex justify-between items-center">
+ <span class="cd-timeline__date">Mar 21st, 2021</span>
+ </div>
+ </div>
+ </div>
+
</div>
-</section>
+ </section>
-<script src="{% static "js/timeline/main.js" %}"></script>
+ <script src="{% static "js/timeline/main.js" %}"></script>
{% endblock %}
diff --git a/pydis_site/templates/resources/resource_box.html b/pydis_site/templates/resources/resource_box.html
new file mode 100644
index 00000000..af7c8d65
--- /dev/null
+++ b/pydis_site/templates/resources/resource_box.html
@@ -0,0 +1,22 @@
+{% load as_icon %}
+
+<div class="box" style="max-width: 800px;">
+ {% if 'title_url' in resource %}
+ <a href="{{ resource.title_url }}">
+ {% include "resources/resource_box_header.html" %}
+ </a>
+ {% else %}
+ {% include "resources/resource_box_header.html" %}
+ {% endif %}
+
+ <p class="is-italic">{{ resource.description|safe }}</p>
+
+ {# Icons #}
+ {% for icon in resource.urls %}
+ <span class="icon is-size-4 is-medium" style="margin: 5px;">
+ <a href="{{ icon.url }}">
+ <i class="{{ icon.icon|as_icon }} is-size-3 resource-icon is-{{ icon.color }}"></i>
+ </a>
+ </span>
+ {% endfor %}
+</div>
diff --git a/pydis_site/templates/resources/resource_box_header.html b/pydis_site/templates/resources/resource_box_header.html
new file mode 100644
index 00000000..84e1a79b
--- /dev/null
+++ b/pydis_site/templates/resources/resource_box_header.html
@@ -0,0 +1,24 @@
+{% load as_icon %}
+
+{# Icon section #}
+{% if 'icon_image' in resource %}
+ <img src="{{ resource.icon_image }}" alt="" style="height: {{ resource.icon_size|default:30 }}px;">
+{% elif 'title_icon' in resource %}
+ <span class="icon is-size-4 is-medium">
+ <i class="{{ resource.title_icon|as_icon }} is-size-3 resource-icon has-icon-padding is-{{ resource.title_icon_color }}"></i>
+ </span>
+{% elif 'default_icon' in category_info %}
+ <span class="icon is-size-4 is-medium">
+ <i class="{{ category_info.default_icon|as_icon }} is-size-3 resource-icon has-icon-padding is-{{ category_info.default_icon_color }}"></i>
+ </span>
+{% endif %}
+
+{# Title section #}
+<span class="is-size-4 has-text-weight-bold">
+ {% if 'title_image' in resource %}
+ <img src="{{ resource.title_image }}" alt="" style="height: 50px; {{ resource.title_image_style }}">
+ {% endif %}
+ {% if 'name' in resource %}
+ {{ resource.name }}
+ {% endif %}
+</span>
diff --git a/pydis_site/templates/resources/resources.html b/pydis_site/templates/resources/resources.html
new file mode 100644
index 00000000..f1f487cf
--- /dev/null
+++ b/pydis_site/templates/resources/resources.html
@@ -0,0 +1,90 @@
+{% extends 'base/base.html' %}
+{% load static %}
+
+{% block title %}Resources{% endblock %}
+{% block head %}
+ <link rel="stylesheet" href="{% static "css/resources/resources.css" %}">
+{% endblock %}
+
+{% block content %}
+ {% include "base/navbar.html" %}
+
+ <section class="section">
+ <div class="container">
+ <div class="content">
+ <h1>Resources</h1>
+
+ <div class="tile is-ancestor">
+ <a class="tile is-parent" href="{% url "content:page_category" location="guides" %}">
+ <article class="tile is-child box hero is-primary is-bold">
+ <p class="title is-size-1"><i class="fad fa-info-circle" aria-hidden="true"></i> Guides</p>
+ <p class="subtitle is-size-4">Made by us, for you</p>
+ </article>
+ </a>
+
+ <div class="tile is-vertical is-9">
+ <div class="tile">
+ <a class="tile is-8 is-parent" href="{% url "resources:resources" category="reading" %}">
+ <article class="tile is-child box hero is-black" id="readingBlock">
+ <p class="title is-size-1"><i class="fad fa-book-alt" aria-hidden="true"></i> Read</p>
+ <p class="subtitle is-size-4">Lovingly curated books to explore</p>
+ </article>
+ </a>
+
+ <div class="tile">
+ <a class="tile is-parent" href="{% url "resources:resources" category="videos" %}">
+ <article class="tile is-child box hero is-danger is-bold">
+ <p class="title is-size-1"><i class="fad fa-video" aria-hidden="true"></i> Watch</p>
+ <p class="subtitle is-size-4">Visually engaging</p>
+ </article>
+ </a>
+ </div>
+ </div>
+
+ <div class="tile">
+ <a class="tile is-parent" href="{% url "resources:resources" category="interactive" %}">
+ <article class="tile is-child box hero is-black" id="interactiveBlock">
+ <p class="title is-size-1"><i class="fad fa-code" aria-hidden="true"></i> Try</p>
+ <p class="subtitle is-size-4">Interactively discover the possibilities</p>
+ </article>
+ </a>
+ <a class="tile is-8 is-parent" href="{% url "resources:resources" category="courses" %}">
+ <article class="tile is-child box hero is-success is-bold">
+ <p class="title is-size-1"><i class="fad fa-graduation-cap" aria-hidden="true"></i> Learn</p>
+ <p class="subtitle is-size-4">Structured courses with clear goals</p>
+ </article>
+ </a>
+ </div>
+ </div>
+ </div>
+
+ <div class="tile is-ancestor">
+ <div class="tile is-vertical is-9">
+ <div class="tile">
+ <a class="tile is-8 is-parent" href="{% url "resources:resources" category="communities" %}">
+ <article class="tile is-child box hero is-black" id="communitiesBlock">
+ <p class="title is-size-1"><i class="fad fa-users" aria-hidden="true"></i> Communities</p>
+ <p class="subtitle is-size-4">Some of our best friends</p>
+ </article>
+ </a>
+ <div class="tile">
+ <a class="tile is-parent" href="{% url "resources:resources" category="podcasts" %}">
+ <article class="tile is-child box hero is-black" id="podcastsBlock">
+ <p class="title is-size-1"><i class="fad fa-podcast" aria-hidden="true"></i> Listen</p>
+ <p class="subtitle is-size-4">Regular podcasts to follow</p>
+ </article>
+ </a>
+ </div>
+ </div>
+ </div>
+ <a class="tile is-parent" href="{% url "resources:resources" category="tools" %}">
+ <article class="tile is-child box hero is-dark">
+ <p class="title is-size-1"><i class="fad fa-tools" aria-hidden="true"></i> Tools</p>
+ <p class="subtitle is-size-4">Things we love to use</p>
+ </article>
+ </a>
+ </div>
+ </div>
+ </div>
+ </section>
+{% endblock %}
diff --git a/pydis_site/templates/resources/resources_list.html b/pydis_site/templates/resources/resources_list.html
new file mode 100644
index 00000000..e2be3cb7
--- /dev/null
+++ b/pydis_site/templates/resources/resources_list.html
@@ -0,0 +1,52 @@
+{% extends "base/base.html" %}
+{% load as_icon %}
+{% load static %}
+
+{% block title %}{{ category_info.name }}{% endblock %}
+{% block head %}
+ <link rel="stylesheet" href="{% static "css/resources/resources_list.css" %}">
+{% endblock %}
+
+{% block content %}
+ {% include "base/navbar.html" %}
+
+ <section class="section breadcrumb-section">
+ <div class="container">
+ <nav class="breadcrumb is-pulled-left" aria-label="breadcrumbs">
+ <ul>
+ <li><a href="{% url "resources:index" %}">Resources</a></li>
+ <li class="is-active"><a href="#">{{ category_info.name }}</a></li>
+ </ul>
+ </nav>
+ </div>
+ </section>
+
+ <section class="section">
+ <div class="container">
+ <div class="content">
+ <h1>{{ category_info.name }}</h1>
+ <p>{{ category_info.description|safe }}</p>
+ <div>
+ {% for resource in resources|dictsort:"position" %}
+ {% include "resources/resource_box.html" %}
+ {% endfor %}
+
+ {% for subcategory in subcategories|dictsort:"category_info.position" %}
+ <h2 id="{{ subcategory.category_info.raw_name }}">
+ <a href="{% url "resources:resources" category=category_info.raw_name %}#{{ subcategory.category_info.raw_name }}">
+ {{ subcategory.category_info.name }}
+ </a>
+ </h2>
+ <p>{{ subcategory.category_info.description|safe }}</p>
+
+ {% for resource in subcategory.resources|dictsort:"position" %}
+ {% with category_info=subcategory.category_info %}
+ {% include "resources/resource_box.html" %}
+ {% endwith %}
+ {% endfor %}
+ {% endfor %}
+ </div>
+ </div>
+ </div>
+ </section>
+{% endblock %}
diff --git a/pydis_site/templates/wiki/article.html b/pydis_site/templates/wiki/article.html
deleted file mode 100644
index 7f2b3af6..00000000
--- a/pydis_site/templates/wiki/article.html
+++ /dev/null
@@ -1,24 +0,0 @@
-{% extends "wiki/base.html" %}
-{% load wiki_tags %}
-
-{% block wiki_pagetitle %}{{ article.current_revision.title }}{% endblock %}
-
-{% block wiki_navbar %}
- {% include "wiki/includes/article_menu.html" %}
-{% endblock %}
-
-{% block wiki_breadcrumbs %}
- {% include "wiki/includes/breadcrumbs.html" %}
-{% endblock %}
-
-{% block wiki_contents %}
- <div id="article-container">
- <h1 id="article-title">
- {{ article.current_revision.title }}
- </h1>
- <div>
- {% block wiki_contents_tab %}
- {% endblock %}
- </div>
- </div>
-{% endblock %}
diff --git a/pydis_site/templates/wiki/base.html b/pydis_site/templates/wiki/base.html
deleted file mode 100644
index 846492ab..00000000
--- a/pydis_site/templates/wiki/base.html
+++ /dev/null
@@ -1,44 +0,0 @@
-{% extends "base/base.html" %}
-{% load static %}
-{% load wiki_tags %}
-
-{% block title %}{% block wiki_pagetitle %}{% endblock %}{% block wiki_site_title %}{% endblock %}{% endblock %}
-
-{% block head %}
- {{ block.super }}
-
- <script src="{% static "wiki/js/jquery-3.4.1.min.js" %}" type="text/javascript"></script>
- <script src="{% static "wiki/js/core.js" %}" type="text/javascript"></script>
- <script src="{% static "js/wiki/simplemde.min.js" %}" type="text/javascript"></script>
-
- <link rel="stylesheet" href="{% static "css/wiki/simplemde.min.css" %}">
- <link rel="stylesheet" href="{% static "css/wiki/simplemde-fixes.css" %}">
- <link rel="stylesheet" href="{% static "css/wiki/style.css" %}">
- <link rel="stylesheet" href="{% static "css/pygments/darcula.css" %}">
- <link rel="stylesheet" href="{% static "css/base/notification.css" %}">
-{% endblock %}
-
-{% block content %}
- {% block site_navbar %}
- {% include "base/navbar.html" %}
- {% endblock %}
-
- {% block wiki_navbar %}{% endblock %}
-
- {% block wiki_breadcrumbs %}
- {% include "wiki/includes/breadcrumbs.html" %}
- {% endblock %}
-
- {% block wiki_body %}
- <section class="section">
- <div class="container">
- <div class="content">
- {% block wiki_contents %}{% endblock %}
- </div>
- </div>
- </section>
- {% endblock %}
-
- <script src="{% static "js/wiki/dropdown.js" %}" type="text/javascript"></script>
- <script src="{% static "js/wiki/load_editor.js" %}" type="text/javascript"></script>
-{% endblock %}
diff --git a/pydis_site/templates/wiki/create.html b/pydis_site/templates/wiki/create.html
deleted file mode 100644
index 3fbba969..00000000
--- a/pydis_site/templates/wiki/create.html
+++ /dev/null
@@ -1,42 +0,0 @@
-{% extends "wiki/base.html" %}
-{% load sekizai_tags %}
-{% load static %}
-{% load wiki_tags %}
-
-{% block wiki_pagetitle %}Add new article{% endblock %}
-
-{% block wiki_contents %}
- {% addtoblock "js" %}
- <script type="text/javascript" src="{% static "admin/js/urlify.js" %}"></script>
-
- {% if not create_form.slug.value %}
- <script type="text/javascript" src="{% static "js/wiki/create.js" %}"></script>
- {% endif %}
- {% endaddtoblock %}
-
- {% include "wiki/includes/editormedia.html" %}
- <h1 class="page-header">Add new article</h1>
-
- <form method="POST" class="form-horizontal">
- {% wiki_form create_form %}
-
- <div class="field is-horizontal is-grouped">
- <div class="control">
- <a href="{% url 'wiki:get' path=parent_urlpath.path %}" class="button is-light">
- <span class="icon">
- <i class="fa fa-arrow-left"></i>
- </span>
- <span>Go back</span>
- </a>
- </div>
- <div class="control">
- <button type="submit" name="save_changes" class="button is-primary">
- <span class="icon">
- <i class="fa fa-plus"></i>
- </span>
- <span>Create Article</span>
- </button>
- </div>
- </div>
- </form>
-{% endblock %}
diff --git a/pydis_site/templates/wiki/create_root.html b/pydis_site/templates/wiki/create_root.html
deleted file mode 100644
index 2d09089d..00000000
--- a/pydis_site/templates/wiki/create_root.html
+++ /dev/null
@@ -1,48 +0,0 @@
-{% extends "wiki/base.html" %}
-{% load static %}
-{% load wiki_tags %}
-
-{% block wiki_pagetitle %}{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 %}
- <h2 class="title is-2">Create First Article</h2>
-
- <p>
- Please create the root article. This article will be available at the root of your wiki,
- so consider creating a landing page here.
- </p>
- <p>
- Please note that, to begin with, this article may only be modified by wiki administrators.
- Once it's been created, you may edit the permissions and set up plugins, metadata, and so on.
- </p>
-
- <form method="POST" class="form-horizontal">
- {% wiki_form form %}
- <div class="field is-horizontal">
- <div class="field-body">
- <div class="control">
- <button type="submit" class="button is-primary" name="save_changes">
- <span class="icon">
- <i class="fas fa-plus"></i>
- </span>
- <span>Create</span>
- </button>
- </div>
- </div>
- </div>
- </form>
-{% endblock %}
diff --git a/pydis_site/templates/wiki/delete.html b/pydis_site/templates/wiki/delete.html
deleted file mode 100644
index bb7a7966..00000000
--- a/pydis_site/templates/wiki/delete.html
+++ /dev/null
@@ -1,90 +0,0 @@
-{% extends "wiki/base.html" %}
-{% load static %}
-{% load wiki_tags %}
-
-{% block wiki_pagetitle %}Delete Article{% endblock %}
-
-{% block wiki_contents %}
- <h1 class="title is-1">Delete "{{ article.current_revision.title }}"</h1>
-
- {% if cannot_delete_root %}
- <article class="message is-warning">
- <div class="message-body">
- <p>
- You cannot delete the root article.
- </p>
-
- <a href="{% url 'wiki:get' path=urlpath.path article_id=article.id %}" class="button is-primary">
- <span class="icon">
- <i class="fas fa-arrow-left"></i>
- </span>
- <span>Go back</span>
- </a>
- </div>
- </article>
- {% else %}
- {% if cannot_delete_children %}
- <article class="message is-warning">
- <div class="message-body">
- <p>
- You do not have permission to delete articles that have children.
- </p>
-
- <a href="{% url 'wiki:get' path=urlpath.path article_id=article.id %}" class="button is-primary">
- <span class="icon">
- <i class="fas fa-arrow-left"></i>
- </span>
- <span>Go back</span>
- </a>
- </div>
- </article>
- {% endif %}
-
- {% if delete_children %}
- <div class="message is-danger">
- <div class="message-body">
- <p>
- You are deleting an article with children. If you delete this article, then its children will also be deleted.
- </p>
- <p>
- If you choose to purge this article, note that its children will also be purged.
- </p>
- </div>
- </div>
-
- <h2 class="title is-2">Child articles</h2>
-
- <ul>
- {% for child in delete_children %}
- <li><a href="{% url 'wiki:get' article_id=child.article.id %}" target="_blank">{{ child.article }}</a></li>
- {% endfor %}
-
- {% if delete_children_more %}
- <li><em>"...and more!"</em></li>
- {% endif %}
- </ul>
-
- {% endif %}
-
- {% if not cannot_delete_children %}
- <p>Please confirm that you would like to delete this article.</p>
-
- <form method="POST">
- {% wiki_form delete_form %}
-
- <a href="{% url 'wiki:get' path=urlpath.path article_id=article.id %}" class="button is-white">
- <span class="icon">
- <i class="fas fa-arrow-left"></i>
- </span>
- <span>Go back</span>
- </a>
- <button type="submit" name="save_changes" class="button is-danger">
- <span class="icon">
- <i class="fas fa-trash"></i>
- </span>
- <span>Delete Article</span>
- </button>
- </form>
- {% endif %}
- {% endif %}
-{% endblock %}
diff --git a/pydis_site/templates/wiki/deleted.html b/pydis_site/templates/wiki/deleted.html
deleted file mode 100644
index cdde2c47..00000000
--- a/pydis_site/templates/wiki/deleted.html
+++ /dev/null
@@ -1,62 +0,0 @@
-{% extends "wiki/base.html" %}
-{% load wiki_tags %}
-
-{% block wiki_pagetitle %}Article deleted{% endblock %}
-
-{% block wiki_contents %}
- <article class="message is-warning">
- <div class="message-header">
- <p>Article deleted</p>
- </div>
- <div class="message-body">
- <p>
- The article you were looking for has been deleted.
- </p>
- </div>
- </article>
-
- {% if not article.current_revision.locked or article|can_delete:user %}
- <h2 class="title is-2">
- Restore Article
- </h2>
-
- <p>
- To restore this article and any child articles, click the restore button below.
- </p>
- <a href="?restore=1" class="button is-primary">
- <span class="icon">
- <i class="fa fa-sync"></i>
- </span>
- <span>Restore</span>
- </a>
- {% endif %}
-
- {% if article|can_moderate:user %}
- <h2 class="title is-2">
- Purge Article
- </h2>
-
- <p>
- To permanently remove this article and any child articles, click the purge button below. This will
- allow you to free up the slugs assigned to these articles, so that they may be used for other
- articles.
- </p>
- <p>
- Please note: <span class="has-text-danger">This action cannot be undone</span>.
- </p>
-
- <form method="POST" class="form form-inline">
- {% csrf_token %}
- {% wiki_form purge_form %}
- <button class="button is-danger" type="submit">
- <span class="icon">
- <i class="fas fa-trash"></i>
- </span>
- <span>
- Purge
- </span>
- </button>
- </form>
- {% endif %}
-
-{% endblock %}
diff --git a/pydis_site/templates/wiki/deleted_list.html b/pydis_site/templates/wiki/deleted_list.html
deleted file mode 100644
index 1a8d203c..00000000
--- a/pydis_site/templates/wiki/deleted_list.html
+++ /dev/null
@@ -1,45 +0,0 @@
-{% extends "wiki/base.html" %}
-{% load wiki_tags %}
-
-{% block wiki_pagetitle %}Deleted Articles{% endblock %}
-
-{% block wiki_contents %}
- <h1 class="title is-1">Deleted Articles</h1>
-
- {% if deleted_articles %}
- <table class="table table-striped">
- <thead>
- <tr>
- <th>Page Title</th>
- <th>Date Deleted</th>
- <th>Restore Article</th>
- </tr>
- </thead>
-
- <tbody>
- {% for article in deleted_articles %}
- <tr>
- <td>
- <a href="{{article.get_absolute_url}}">{{ article }}</a>
- </td>
- <td>
- {{article.modified}}
- </td>
- <td>
- <a href="{% url 'wiki:deleted' article_id=article.id %}?restore=1" class="button is-primary">
- <span class="icon">
- <i class="fas fa-sync"></i>
- </span>
- <span>Restore</span>
- </a>
- </td>
- </tr>
- {% endfor %}
- </tbody>
- </table>
- {% else %}
- <p>
- No deleted articles to display.
- </p>
- {% endif %}
-{% endblock %}
diff --git a/pydis_site/templates/wiki/dir.html b/pydis_site/templates/wiki/dir.html
deleted file mode 100644
index 5a30de7b..00000000
--- a/pydis_site/templates/wiki/dir.html
+++ /dev/null
@@ -1,103 +0,0 @@
-{% extends "wiki/article.html" %}
-{% load humanize %}
-{% load i18n %}
-{% load wiki_extra %}
-{% load wiki_tags %}
-
-{% block wiki_pagetitle %}Listing articles in {{ article.current_revision.title }}{% endblock %}
-
-{% block wiki_contents_tab %}
- {% url 'wiki:dir' urlpath.path as self_url %}
-
- <form class="form-search directory-toolbar">
- <div class="is-pulled-right">
- {% render_field filter_form.query render_labels=False %}
- </div>
-
- <div class="field is-grouped">
- <div class="field-body">
- <div class="control">
- {% if urlpath.parent %}
- <a href="{% url 'wiki:dir' path=urlpath.parent.path %}" class="button">
- <span class="icon">
- <i class="fas fa-arrow-up"></i>
- </span>
- <span>Up one level</span>
- </a>
- {% endif %}
- </div>
- <div class="control">
- <a href="{% url 'wiki:create' path=urlpath.path %}" class="button is-primary">
- <span class="icon">
- <i class="fas fa-plus"></i>
- </span>
- <span>Add Article</span>
- </a>
- </div>
- </div>
- </div>
- </form>
-
- <br />
-
- <p>
- {% with paginator.object_list.count as cnt %}
- {% blocktrans with urlpath.path as path and cnt|pluralize:_("article,articles") as articles_plur and cnt|pluralize:_("is,are") as articles_plur_verb trimmed %}
- Browsing <strong><a href="{{ self_url }}">/{{ path }}</a></strong>. There {{ articles_plur_verb }} <strong>{{ cnt }} {{ articles_plur }}</strong> in this level.
- {% endblocktrans %}
- {% endwith %}
- </p>
-
- {% include "wiki/includes/pagination.html" %}
-
- <table class="table is-striped">
- <tr>
- <th>Title</th>
- <th>Slug</th>
- <th>Last modified</th>
- </tr>
-
- {% for urlpath in directory %}
- <tr>
- <td>
- <a href="{% url 'wiki:get' path=urlpath.path %}">{{ urlpath.article.current_revision.title }}</a>
-
- <a href="{% url 'wiki:dir' path=urlpath.path %}" class="list-children">
- <span class="icon">
- <i class="fas fa-arrow-right"></i>
- </span>
- </a>
-
- {% if urlpath.article.current_revision.deleted %}
- <span class="icon tooltip" data-tooltip="This article has been deleted">
- <i class="fas fa-trash"></i>
- </span>
- {% endif %}
-
- {% if urlpath.article.current_revision.locked %}
- <span class="icon tooltip" data-tooltip="This article is locked">
- <i class="fas fa-lock"></i>
- </span>
- {% endif %}
- </td>
-
- <td>
- {{ urlpath.slug }}
- </td>
-
- <td>
- {{ urlpath.article.current_revision.created|naturaltime }}
- </td>
- </tr>
-
- {% empty %}
- <tr>
- <td colspan="3">
- <em>There are no articles at this level</em>
- </td>
- </tr>
- {% endfor %}
- </table>
-
- {% include "wiki/includes/pagination.html" %}
-{% endblock %}
diff --git a/pydis_site/templates/wiki/edit.html b/pydis_site/templates/wiki/edit.html
deleted file mode 100644
index c378362a..00000000
--- a/pydis_site/templates/wiki/edit.html
+++ /dev/null
@@ -1,95 +0,0 @@
-{% extends "wiki/article.html" %}
-{% load static %}
-{% load wiki_tags %}
-
-{% block wiki_pagetitle %}
- Edit: {{ article.current_revision.title }}
-{% endblock %}
-
-{% block wiki_contents_tab %}
- <div class="columns">
- <div class="column is-two-thirds">
- <form method="POST" class="form-horizontal" id="article_edit_form">
- {% with edit_form as form %}
- {% include "wiki/includes/editor.html" %}
- {% endwith %}
-
- <button class="button is-light" type="submit" name="preview" value="1" id="id_preview"
- formaction="{% url 'wiki:preview' path=urlpath.path article_id=article.id %}"
- formtarget="previewWindow"
- >
- <span class="icon">
- <i class="fas fa-eye"></i>
- </span>
- <span>Preview</span>
- </button>
- <button class="button is-primary" type="submit" name="save" value="1" id="id_save">
- <span class="icon">
- <i class="fas fa-save"></i>
- </span>
- <span>Save Changes</span>
- </button>
-
- <div class="is-pulled-right">
- {% if user.is_authenticated and urlpath.path %}
- <a href="{% url 'wiki:move' path=urlpath.path article_id=article.id %}" class="button is-warning ">
- <span class="icon">
- <i class="fas fa-random"></i>
- </span>
- <span>Move Article</span>
- </a>
- {% endif %}
- {% if article|can_delete:user %}
- <a href="{% url 'wiki:delete' path=urlpath.path article_id=article.id %}" class="button is-danger">
- <span class="icon">
- <i class="fas fa-trash"></i>
- </span>
- <span>Delete Article</span>
- </a>
- {% endif %}
- </div>
-
- <br />
- <br />
- </form>
- </div>
-
- <div class="column is-one-third" id="wiki-edit-sidebar">
- {% include "wiki/includes/editor_sidebar.html" %}
- </div>
- </div>
-
- <div class="modal" id="previewModal">
- <div class="modal-background"></div>
- <div class="modal-card" style="height: 80%; width: 80%;">
- <div class="modal-card-head">
- <p class="modal-card-title">Article Preview</p>
- </div>
- <div class="modal-card-body" style="padding: 0; overflow: hidden;">
- <iframe name="previewWindow" frameborder="0" style="width: 100%; height: 100%;"></iframe>
- </div>
- <div class="modal-card-foot">
- <button class="button is-light" aria-label="close">
- <span class="icon">
- <i class="fas fa-arrow-left"></i>
- </span>
- <span>Back</span>
- </button>
- <a class="button is-primary" id="id_preview_save_changes">
- <span class="icon">
- <i class="fas fa-save"></i>
- </span>
- <span>Save Changes</span>
- </a>
- </div>
- </div>
- </div>
-
- <script src="{% static "js/wiki/modal.js" %}" type="text/javascript"></script>
- <script src="{% static "js/wiki/edit.js" %}" type="text/javascript"></script>
- <script type="text/javascript">
- $(document).ready(function() {
- $("#id_revision").val('{{ article.current_revision.id }}');
- });
- </script>
-{% endblock %}
diff --git a/pydis_site/templates/wiki/error.html b/pydis_site/templates/wiki/error.html
deleted file mode 100644
index d7ee70fd..00000000
--- a/pydis_site/templates/wiki/error.html
+++ /dev/null
@@ -1,51 +0,0 @@
-{% extends "wiki/base.html" %}
-{% load wiki_tags %}
-
-{% block wiki_pagetitle %}{% if article %}{{ article.current_revision.title }}{% else %}Error{% endif %}{% endblock %}
-
-{% block wiki_breadcrumbs %}
- {% include "wiki/includes/breadcrumbs.html" %}
-{% endblock %}
-
-{% block wiki_contents %}
- {% if error_type == "ancestors_missing" %}
- <h1 class="title">Not Found</h1>
-
- <article class="message is-primary">
- <div class="message-body">
- <p>
- We were unable to find that page. If you think this was in error, please let us know!
- </p>
- <a href="{% url 'wiki:get' path='' %}" class="button is-primary">
- <span class="icon">
- <i class="fas fa-arrow-left"></i>
- </span>
- <span>Back to homepage</span>
- </a>
- </div>
- </article>
- {% else %}
- <h1 class="title">Error</h1>
-
- <article class="message is-danger">
- <div class="message-body">
- <p>
- {% if not error_msg %}
- Unfortunately, an error occurred while retrieving that page. Please let us know!
- {% else %}
- {{ error_msg }}
- {% endif %}
- </p>
-
- {% if article %}
- <a href="{% url 'wiki:get' path=urlpath.path article_id=article.id %}" class="button is-primary">
- <span class="icon">
- <i class="fas fa-arrow-left"></i>
- </span>
- <span>Back to {{ article.current_revision.title }}</span>
- </a>
- {% endif %}
- </div>
- </article>
- {% endif %}
-{% endblock %}
diff --git a/pydis_site/templates/wiki/forms/fields/boolean.html b/pydis_site/templates/wiki/forms/fields/boolean.html
deleted file mode 100644
index 9a8470be..00000000
--- a/pydis_site/templates/wiki/forms/fields/boolean.html
+++ /dev/null
@@ -1,49 +0,0 @@
-<div id="div_{{ field.auto_id }}" class="field is-horizontal{% if field.errors %} is-danger{% endif %}">
- {% if render_labels %}
- <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>
- {% endif %}
-
- <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 %}">
- {% if not render_labels %}
- {{ field.label | safe }} {% if field.field.required %}<span class="asterisk has-text-danger">*</span>{% endif %}
- {% else %}
- &nbsp;
- {% endif %}
- </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
deleted file mode 100644
index 06e9f1b7..00000000
--- a/pydis_site/templates/wiki/forms/fields/char.html
+++ /dev/null
@@ -1,57 +0,0 @@
-<div id="div_{{ field.auto_id }}" class="field is-horizontal{% if field.errors %} is-danger{% endif %}">
- {% if render_labels and not is_markitup %}
- <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.help_text %}
- <p id="hint_{{ field.auto_id }}" class="help has-text-grey">
- {{ field.help_text|safe }}
- </p>
- {% endif %}
- </div>
- {% endif %}
-
- <div class="field-body"{% if is_markitup %} style="display: block; width: 100%;"{% endif %}>
- <div class="field">
- <div class="control">
- {% if is_markitup %}
- <textarea class="simple-mde textarea is-family-monospace{% if field.errors %} is-danger{% endif %}"
- 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.field.widget.attrs.placeholder %}placeholder="{{ field.field.widget.attrs.placeholderplaceholder }}"{% 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.field.widget.attrs.placeholder %}placeholder="{{ field.field.widget.attrs.placeholder }}"{% 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/image.html b/pydis_site/templates/wiki/forms/fields/image.html
deleted file mode 100644
index ce5402be..00000000
--- a/pydis_site/templates/wiki/forms/fields/image.html
+++ /dev/null
@@ -1,53 +0,0 @@
-<div id="div_{{ field.auto_id }}" class="field is-horizontal{% if field.errors %} is-danger{% endif %}">
- {% if render_labels %}
- <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.help_text %}
- <p id="hint_{{ field.auto_id }}" class="help has-text-grey">
- {{ field.help_text|safe }}
- </p>
- {% endif %}
- </div>
- {% endif %}
-
- <div class="field-body">
- <div class="field">
- <div class="control">
- <div class="file has-name is-fullwidth">
- <label class="file-label">
- <input class="file-input"
- type="file"
- id="{{ field.auto_id }}"
- name="{{ field.name }}"
- accept="image/*"
-
- {% if field.required %}required{% endif %}
- />
- <span class="file-cta">
- <span class="file-icon">
- <i class="fas fa-image"></i>
- </span>
- <span class="file-label">
- Choose
- </span>
- </span>
- <span class="file-name"></span>
- </label>
- </div>
- </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
deleted file mode 100644
index 8591f547..00000000
--- a/pydis_site/templates/wiki/forms/fields/in_place_render.html
+++ /dev/null
@@ -1,33 +0,0 @@
-<div id="div_{{ field.auto_id }}" class="field is-horizontal{% if field.errors %} is-danger{% endif %}">
- {% if render_labels %}
- <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>
- {% endif %}
-
- <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
deleted file mode 100644
index 58c55e04..00000000
--- a/pydis_site/templates/wiki/forms/fields/model_choice.html
+++ /dev/null
@@ -1,71 +0,0 @@
-{% load wiki_extra %}
-
-<div id="div_{{ field.auto_id }}" class="field is-horizontal{% if field.errors %} is-danger{% endif %}">
- {% if render_labels %}
- <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.help_text %}
- <p id="hint_{{ field.auto_id }}" class="help has-text-grey">
- {{ field.help_text|safe }}
- </p>
- {% endif %}
- </div>
- {% endif %}
-
- <div class="field-body">
- <div class="field">
- <div class="control">
- <div class="select">
- {% get_field_options field %}
-
- <select {% if not options %}disabled{% endif %}
- id="{{ field.auto_id }}"
- name="{{ field.name }}"
-
- {% if field.required %}required{% endif %}
- >
- {% if options %}
- {% for group_name, group_choices, group_index in options %}
- {% if group_name %}
- <optgroup label="{{ group_name }}">
- {% endif %}
- {% for option in group_choices %}
- <option {% if option.value == field.value %}selected{% endif %}
- value="{{ option.value|stringformat:'s' }}"
- >
- {{ option.label }}
- </option>
- {% endfor %}
- {% if group_name %}
- </optgroup>
- {% endif %}
- {% endfor %}
- {% else %}
- <option value="">
- {% if field.field.empty_label %}
- {{ field.field.empty_label }}
- {% else %}
- N/A
- {% endif %}
- </option>
- {% endif %}
- </select>
- </div>
-
- </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/wiki_slug_render.html b/pydis_site/templates/wiki/forms/fields/wiki_slug_render.html
deleted file mode 100644
index ff5c8528..00000000
--- a/pydis_site/templates/wiki/forms/fields/wiki_slug_render.html
+++ /dev/null
@@ -1,48 +0,0 @@
-{% load wiki_extra %}
-
-<div id="div_{{ field.auto_id }}" class="field is-horizontal{% if field.errors %} is-danger{% endif %}">
- {% if render_labels %}
- <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.help_text %}
- <p id="hint_{{ field.auto_id }}" class="help has-text-grey">
- {{ field.help_text|safe }}
- </p>
- {% endif %}
- </div>
- {% endif %}
-
- <div class="field-body">
- <div class="field has-addons">
- <div class="control">
- <a class="button is-static">{{ field.form.urlpath_parent | render_urlpath }}</a>
- </div>
- <div class="control is-expanded">
- <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 %}
- >
- </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/history.html b/pydis_site/templates/wiki/history.html
deleted file mode 100644
index ee297bdd..00000000
--- a/pydis_site/templates/wiki/history.html
+++ /dev/null
@@ -1,126 +0,0 @@
-{% extends "wiki/article.html" %}
-{% load sekizai_tags %}
-{% load static %}
-{% load wiki_tags %}
-
-{% block wiki_pagetitle %}History: {{ article.current_revision.title }}{% endblock %}
-
-{% block wiki_contents_tab %}
- {% include "wiki/includes/modals.html" %}
-
- {% addtoblock "js" %}
- <script type="text/javascript" src="{% static "wiki/js/diffview.js" %}"></script>
- <script type="text/javascript" src="{% static "wiki/js/diff.js" %}"></script>
- {% endaddtoblock %}
-
- <p>
- Click each revision to see a list of edited lines. Click the Preview
- button to see how the article looked at this stage. At the bottom of
- this page, you can change to a particular revision or merge an old
- revision with the current one.
- </p>
-
- {% include "wiki/includes/pagination.html" %}
-
- <form method="GET" id="historyForm">
- <table class="table is-striped">
- <thead>
- <tr>
- <th>Updated</th>
- <th>Summary</th>
- <th class="has-text-right">Actions</th>
- </tr>
- </thead>
- <tbody>
- {% for revision in revisions %}
- <tr {% if revision == article.current_revision %}class="is-selected"{% endif %}>
- <td>
- {% include "wiki/includes/revision_info.html" with current_revision=article.current_revision %}
- </td>
- <td>
- {% if revision.user_message %}
- {{ revision.user_message }}
- {% elif revision.automatic_log %}
- {{ revision.automatic_log }}
- {% else %}
- <em>No summary</em>
- {% endif %}
- </td>
- <td class="has-text-right">
- {% if revision == article.current_revision %}
- <a class="button is-static has-text-grey">
- <span class="icon">
- <i class="fas fa-eye"></i>
- </span>
- <span>Preview</span>
- </a>
- <a class="button is-static has-text-grey">
- <span class="icon">
- <i class="fas fa-sync"></i>
- </span>
- <span>Switch</span>
- </a>
- {% else %}
- <button type="submit" class="button" onclick="showPreviewModal('{{ revision.id }}', '{% url 'wiki:preview_revision' article.id %}', '{% url 'wiki:change_revision' path=urlpath.path article_id=article.id revision_id=revision.id %}'); event.preventDefault();">
- <span class="icon">
- <i class="fas fa-eye"></i>
- </span>
- <span>Preview</span>
- </button>
- <a class="button is-primary" href="{% url 'wiki:change_revision' path=urlpath.path article_id=article.id revision_id=revision.id %}">
- <span class="icon">
- <i class="fas fa-sync"></i>
- </span>
- <span>Switch</span>
- </a>
- {% endif %}
- </td>
- </tr>
- {% endfor %}
- </tbody>
- </table>
-
- {% include "wiki/includes/pagination.html" %}
-
- <input type="hidden" name="r" value="" id="r" />
-
- <div class="modal" id="previewModal">
- <div class="modal-background"></div>
- <div class="modal-card" style="height: 80%; width: 80%;">
- <div class="modal-card-head">
- <p class="modal-card-title">Revision Preview</p>
- </div>
- <div class="modal-card-body" style="padding: 0; overflow: hidden;">
- <iframe name="previewWindow" id="previewWindow" frameborder="0" style="width: 100%; height: 100%;"></iframe>
- </div>
- <div class="modal-card-foot">
- <button class="button is-light" aria-label="close">
- <span class="icon">
- <i class="fas fa-arrow-left"></i>
- </span>
- <span>Back</span>
- </button>
-
- {% if article|can_write:user %}
- <a href="#" class="button is-primary switch-to-revision">
- <span class="icon">
- <i class="fas fa-sync"></i>
- </span>
- <span>Switch to this version</span>
- </a>
- {% else %}
- <a class="button is-static">
- <span class="icon">
- <i class="fas fa-check"></i>
- </span>
- <span>Switch to this version</span>
- </a>
- {% endif %}
- </div>
- </div>
- </div>
- </form>
-
- <script src="{% static "js/wiki/modal.js" %}" type="text/javascript"></script>
- <script src="{% static "js/wiki/history.js" %}" type="text/javascript"></script>
-{% endblock %}
diff --git a/pydis_site/templates/wiki/includes/article_menu.html b/pydis_site/templates/wiki/includes/article_menu.html
deleted file mode 100644
index 966e8120..00000000
--- a/pydis_site/templates/wiki/includes/article_menu.html
+++ /dev/null
@@ -1,78 +0,0 @@
-{% load wiki_tags %}
-
-{% if article|can_write:user %}
- {% with selected_tab as selected %}
- <nav class="navbar is-light" role="navigation" aria-label="wiki navigation" id="wikiNavbar">
- <div class="container">
- <div class="navbar-brand">
- {% if not user.is_anonymous %}
- <a class="navbar-item{% if selected == "settings" %} is-active{% endif %}"
- href="{% url 'wiki:settings' article_id=article.id path=urlpath.path %}"
- >
- <span class="icon">
- <i class="fas fa-wrench"></i>
- </span>
-
- <span class="is-hidden-mobile">&nbsp;Settings</span>
- </a>
- {% endif %}
-
- {% for plugin in article_tabs %}
- <a class="navbar-item{% if selected == plugin.slug %} is-active{% endif %}"
- href="{% url 'wiki:plugin' slug=plugin.slug article_id=article.id path=urlpath.path %}"
- >
- <span class="icon">
- <i class="{{ plugin.article_tab.1 }}"></i>
- </span>
-
- <span class="is-hidden-mobile">&nbsp;{{ plugin.article_tab.0 }}</span>
- </a>
- {% endfor %}
-
- <a class="navbar-item{% if selected == "history" %} is-active{% endif %}"
- href="{% url 'wiki:history' article_id=article.id path=urlpath.path %}"
- >
- <span class="icon">
- <i class="fas fa-clock"></i>
- </span>
-
- <span class="is-hidden-mobile">&nbsp;Changes</span>
- </a>
-
- {% if article|can_write:user and not article.current_revision.locked %}
- <a class="navbar-item{% if selected == "edit" %} is-active{% endif %}"
- href="{% url 'wiki:edit' article_id=article.id path=urlpath.path %}"
- >
- <span class="icon">
- <i class="fas fa-edit"></i>
- </span>
-
- <span class="is-hidden-mobile">&nbsp;Edit</span>
- </a>
- {% else %}
- <a class="navbar-item{% if selected == "source" %} is-active{% endif %}"
- href="{% url 'wiki:source' article_id=article.id path=urlpath.path %}"
- >
- <span class="icon">
- <i class="fas fa-book-spells"></i>
- </span>
-
- <span class="is-hidden-mobile">&nbsp;View Source</span>
- </a>
- {% endif %}
-
- <a class="navbar-item{% if selected == "view" %} is-active{% endif %}"
- href="{% url 'wiki:get' article_id=article.id path=urlpath.path %}"
- >
- <span class="icon">
- <i class="fas fa-book-open"></i>
- </span>
-
- <span class="is-hidden-mobile">&nbsp;View</span>
- </a>
- </div>
-
- </div>
- </nav>
- {% endwith %}
-{% endif %}
diff --git a/pydis_site/templates/wiki/includes/breadcrumbs.html b/pydis_site/templates/wiki/includes/breadcrumbs.html
deleted file mode 100644
index 1b268e11..00000000
--- a/pydis_site/templates/wiki/includes/breadcrumbs.html
+++ /dev/null
@@ -1,95 +0,0 @@
-{% load wiki_tags %}
-
-{% if urlpath and article %}
- <section class="breadcrumb-section section">
- <div class="container">
- <nav class="breadcrumb is-pulled-left" aria-label="breadcrumbs">
- <ul>
- {% for ancestor in urlpath.cached_ancestors %}
- {% if forloop.first and not article|can_write:user %}
- {# Continue, we don't want to show the root element #}
- {% else %}
- <li>
- <a href="{% url 'wiki:get' path=ancestor.path %}">{{ ancestor.article.current_revision.title }}</a>
- </li>
- {% endif %}
- {% endfor %}
-
- <li class="is-active">
- <a href="{% url 'wiki:get' path=article.path %}">{{ article.current_revision.title }}</a>
- </li>
- </ul>
- </nav>
-
- {% if article|can_write:user %}
- <div class="dropdown is-pulled-right is-right">
- <div class="dropdown-trigger">
- <a aria-haspopup="true" aria-controls="sub-article-dropdown">
- <span>Sub-Articles</span>
- <span class="icon">
- <i class="fas fa-angle-down"></i>
- </span>
- </a>
- </div>
- <div class="dropdown-menu" id="sub-article-dropdown" role="menu">
- <div class="dropdown-content">
- {% if children_slice %}
- {% for child in children_slice %}
- <a class="dropdown-item" href="{% url 'wiki:get' path=child.path %}">
- {{ child.article.current_revision.title }}
- </a>
- {% endfor %}
-
- {% if children_slice_more %}
- <a class="dropdown-item" href="{% url 'wiki:dir' path=urlpath.path %}">
- ...and more.
- </a>
- {% endif %}
-
- <hr class="dropdown-divider">
- {% endif %}
-
- <a class="dropdown-item" href="{% url 'wiki:dir' path=urlpath.path %}">
- Browse other articles
- </a>
- </div>
- </div>
- </div>
-
- {% if request.user.is_authenticated %}
- <div class="dropdown is-pulled-right is-right">
- <div class="dropdown-trigger">
- <a aria-haspopup="true" aria-controls="sub-article-dropdown">
- <span>Create Article</span>
- <span class="icon">
- <i class="fas fa-angle-down"></i>
- </span>
- &nbsp;
- </a>
- </div>
- <div class="dropdown-menu" id="sub-article-dropdown" role="menu">
- <div class="dropdown-content">
- {% if urlpath.parent %}
- <a class="dropdown-item" href="{% url 'wiki:create' path=urlpath.parent.path %}">
- <span class="icon">
- <i class="fas fa-arrow-right"></i>
- </span>
- <span>At current level</span>
- </a>
- {% endif %}
-
- <a class="dropdown-item" href="{% url 'wiki:create' path=urlpath.path %}">
- <span class="icon">
- <i class="fas fa-arrow-down"></i>
- </span>
- <span>Below current level</span>
- </a>
- </div>
- </div>
- </div>
- {% endif %}
- {% endif %}
-
- </div>
- </section>
-{% endif %}
diff --git a/pydis_site/templates/wiki/includes/editor.html b/pydis_site/templates/wiki/includes/editor.html
deleted file mode 100644
index 6eb6cd45..00000000
--- a/pydis_site/templates/wiki/includes/editor.html
+++ /dev/null
@@ -1,4 +0,0 @@
-{% load wiki_tags %}
-{% include "wiki/includes/editormedia.html" %}
-
-{% wiki_form form %}
diff --git a/pydis_site/templates/wiki/includes/editor_sidebar.html b/pydis_site/templates/wiki/includes/editor_sidebar.html
deleted file mode 100644
index 45ac87a1..00000000
--- a/pydis_site/templates/wiki/includes/editor_sidebar.html
+++ /dev/null
@@ -1,38 +0,0 @@
-{% load static %}
-
-<section class="accordions">
- {% for plugin, plugin_form in sidebar %}
- <article class="accordion is-primary">
- <div class="accordion-header toggle">
- <p>
- {% if plugin.sidebar.icon_class %}
- <span class="icon">
- {% if plugin.sidebar.icon_class == "fa-picture-o" %}
- <i class="fas fa-images"></i>
- {% else %}
- <i class="fas {{ plugin.sidebar.icon_class }}"></i>
- {% endif %}
- </span>
- {% endif %}
-
- {{ plugin.sidebar.headline }}
- </p>
-
- </div>
- <div class="accordion-body">
- <div class="accordion-content">
- {% if plugin.sidebar.template %}
- {% with plugin_form as form %}
- <form method="POST" class="form-horizontal sidebar-form" action="?f={{ plugin_form.form_id }}" enctype="multipart/form-data">
- {% csrf_token %}
- {% include plugin.sidebar.template %}
- </form>
- {% endwith %}
- {% endif %}
- </div>
- </div>
- </article>
- {% endfor %}
-</section>
-
-<script type="application/javascript" src="{% static "js/wiki/editor_sidebar.js" %}"></script>
diff --git a/pydis_site/templates/wiki/includes/editormedia.html b/pydis_site/templates/wiki/includes/editormedia.html
deleted file mode 100644
index c10fbef8..00000000
--- a/pydis_site/templates/wiki/includes/editormedia.html
+++ /dev/null
@@ -1,17 +0,0 @@
-{% load sekizai_tags %}
-{% load static %}
-
-{% addtoblock "js" %}
- <script type="text/javascript" src="{% static "wiki/js/editor.js" %}"></script>
- {% for js in editor.Media.js %}
- <script type="text/javascript" src="{% static js %}"></script>
- {% endfor %}
-{% endaddtoblock %}
-
-{% addtoblock "css" %}
- {% for media, srcs in editor.Media.css.items %}
- {% for src in srcs %}
- <link rel="stylesheet" media="{{ media }}" href="{% static src %}" />
- {% endfor %}
- {% endfor %}
-{% endaddtoblock %}
diff --git a/pydis_site/templates/wiki/includes/form.html b/pydis_site/templates/wiki/includes/form.html
deleted file mode 100644
index 4ea08de4..00000000
--- a/pydis_site/templates/wiki/includes/form.html
+++ /dev/null
@@ -1,16 +0,0 @@
-{% load sekizai_tags %}
-{% csrf_token %}
-
-{% include "wiki/includes/formerrors.html" %}
-
-{% addtoblock "js" %}
- {{ form.media.js }}
-{% endaddtoblock %}
-
-{% addtoblock "css" %}
- {{ form.media.css }}
-{% endaddtoblock %}
-
-{% for field in form %}
- {% include "wiki/includes/formfield.html" %}
-{% endfor %}
diff --git a/pydis_site/templates/wiki/includes/formerrors.html b/pydis_site/templates/wiki/includes/formerrors.html
deleted file mode 100644
index c6df2637..00000000
--- a/pydis_site/templates/wiki/includes/formerrors.html
+++ /dev/null
@@ -1,15 +0,0 @@
-{% if form.non_field_errors %}
- <article class="message is-danger">
- {% if form_error_title %}
- <div class="message-header">
- <p>{{ form_error_title }}</p>
- </div>
- {% endif %}
-
- <div class="message-body">
- {% for error_message in form.non_field_errors %}
- <p>{{ error_message }}</p>
- {% endfor %}
- </div>
- </article>
-{% endif %}
diff --git a/pydis_site/templates/wiki/includes/formfield.html b/pydis_site/templates/wiki/includes/formfield.html
deleted file mode 100644
index 8c42cfbf..00000000
--- a/pydis_site/templates/wiki/includes/formfield.html
+++ /dev/null
@@ -1,7 +0,0 @@
-{% load wiki_extra %}
-
-{% if field.is_hidden %}
- {{ field }}
-{% else %}
- {% render_field field render_labels %}
-{% endif %}
diff --git a/pydis_site/templates/wiki/includes/messages.html b/pydis_site/templates/wiki/includes/messages.html
deleted file mode 100644
index e69de29b..00000000
--- a/pydis_site/templates/wiki/includes/messages.html
+++ /dev/null
diff --git a/pydis_site/templates/wiki/includes/pagination.html b/pydis_site/templates/wiki/includes/pagination.html
deleted file mode 100644
index 35dac538..00000000
--- a/pydis_site/templates/wiki/includes/pagination.html
+++ /dev/null
@@ -1,27 +0,0 @@
-{% load i18n %}
-
-{% if is_paginated %}
- <nav class="pagination" role="navigation" aria-label="pagination">
- {% if page_obj.has_previous %}
- <a class="pagination-previous" href="?{% if search_query %}q={{ search_query }}&{% endif %}page={{ page_obj.previous_page_number }}{% if appended_key %}&{{ appended_key }}={{ appended_value }}{% endif %}">Previous</a>
- {% else %}
- <a class="pagination-previous tooltip" data-tooltip="This is the first page" disabled>Previous</a>
- {% endif %}
-
- {% if page_obj.has_next %}
- <a class="pagination-next" href="?{% if search_query %}q={{ search_query }}&{% endif %}page={{ page_obj.next_page_number }}{% if appended_key %}&{{ appended_key }}={{ appended_value }}{% endif %}">Next</a>
- {% else %}
- <a class="pagination-next tooltip" data-tooltip="This is the last page" disabled>Older</a>
- {% endif %}
-
- <ul class="pagination-list">
- {% for pc in paginator.page_range %}
- {% if pc == 0 %}
- <li><span class="pagination-ellipsis">&hellip;</span></li>
- {% else %}
- <li><a class="pagination-link{% if pc == page_obj.number %} is-current{% endif %}" href="?{% if search_query %}q={{ search_query }}&{% endif %}page={{ pc }}{% if appended_key %}&{{ appended_key }}={{ appended_value }}{% endif %}">{{ pc }}</a></li>
- {% endif %}
- {% endfor %}
- </ul>
- </nav>
-{% endif %}
diff --git a/pydis_site/templates/wiki/includes/render.html b/pydis_site/templates/wiki/includes/render.html
deleted file mode 100644
index c0334d98..00000000
--- a/pydis_site/templates/wiki/includes/render.html
+++ /dev/null
@@ -1,28 +0,0 @@
-{% load sekizai_tags %}
-{% load static %}
-
-{% addtoblock "js" %}
- <script type="text/javascript" src="{% static "wiki/js/article.js" %}"></script>
-{% endaddtoblock %}
-
-<div class="wiki-article">
- {{ content|default:"" }}
-</div>
-
-{% for plugin in plugins %}
- {% if plugin.RenderMedia.css %}
- {% addtoblock "css" %}
- {% for media, url in plugin.RenderMedia.css.items %}
- <link rel="stylesheet" href="{% static url %}" />
- {% endfor %}
- {% endaddtoblock %}
- {% endif %}
-
- {% if plugin.RenderMedia.js %}
- {% addtoblock "js" %}
- {% for url in plugin.RenderMedia.js %}
- <script type="text/javascript" src="{% static url %}"></script>
- {% endfor %}
- {% endaddtoblock %}
- {% endif %}
-{% endfor %}
diff --git a/pydis_site/templates/wiki/includes/revision_info.html b/pydis_site/templates/wiki/includes/revision_info.html
deleted file mode 100644
index f2964034..00000000
--- a/pydis_site/templates/wiki/includes/revision_info.html
+++ /dev/null
@@ -1,24 +0,0 @@
-{% comment %}
- This reusable code is shared between different templates and different inheritors of
- BaseRevision.
-{% endcomment %}
-
-{% load wiki_tags %}
-
-{% if not hidedate %}{{ revision.created }}{% endif %} {% if not hidenumber %}(#{{ revision.revision_number }}) by{% endif %} {% if revision.user %}{{ revision.user }}{% else %}{% if article|can_moderate:user %}{{ revision.ip_address|default:"anonymous (IP not logged)" }}{% else %}anonymous (IP logged){% endif %}{% endif %}
-
-{% if revision.deleted %}
- <span class="tag is-danger">deleted</span>
-{% endif %}
-
-{% if revision.previous_revision.deleted and not revision.deleted %}
- <span class="tag is-success">restored</span>
-{% endif %}
-
-{% if revision.locked %}
- <span class="tag is-danger">locked</span>
-{% endif %}
-
-{% if revision.previous_revision.locked and not revision.locked %}
- <span class="tag is-success">unlocked</span>
-{% endif %}
diff --git a/pydis_site/templates/wiki/includes/searchresult.html b/pydis_site/templates/wiki/includes/searchresult.html
deleted file mode 100644
index 897ee4a6..00000000
--- a/pydis_site/templates/wiki/includes/searchresult.html
+++ /dev/null
@@ -1,33 +0,0 @@
-{% load humanize %}
-
-<tr>
- <td>
- {% for urlpath in article.urlpath_set.all %}
- <a href="{% url 'wiki:get' path=urlpath.path %}">
- {{ article.current_revision.title }}
- <br />
- <small class="has-text-grey">Slug: /{{ urlpath.path }}</small>
- </a>
- {% empty %}
- <a href="{% url 'wiki:get' article_id=article.id %}">
- {{ article.current_revision.title }}
- </a>
- {% endfor %}
-
- {% if article.current_revision.deleted %}
- <span class="icon">
- <i class="fas fa-trash"></i>
- </span>
- {% endif %}
-
- {% if article.current_revision.locked %}
- <span class="icon">
- <i class="fas fa-lock"></i>
- </span>
- {% endif %}
- </td>
-
- <td class="has-text-right">
- {{ article.current_revision.created|naturaltime }}
- </td>
-</tr>
diff --git a/pydis_site/templates/wiki/move.html b/pydis_site/templates/wiki/move.html
deleted file mode 100644
index a3f7a5d8..00000000
--- a/pydis_site/templates/wiki/move.html
+++ /dev/null
@@ -1,72 +0,0 @@
-{% extends "wiki/article.html" %}
-{% load i18n %}
-{% load sekizai_tags %}
-{% load static %}
-{% load wiki_tags %}
-
-{% block wiki_pagetitle %}Move: {{ article.current_revision.title }}{% endblock %}
-
-{% block wiki_contents_tab %}
- <article class="message is-warning">
- <div class="message-body">
- {% if urlpath.get_descendants %}
- {% blocktrans count cnt=urlpath.get_descendants.count trimmed %}
- <p>
- Please note that this article has {{ cnt }} child article. If you
- decide to move this article, then links to any child articles will
- not be updated.
- </p>
- {% plural %}
- <p>
- Please note that this article has {{ cnt }} child articles. If you
- decide to move this article, then links to any child articles will
- not be updated.
- </p>
- {% endblocktrans %}
- {% endif %}
- <p>
- Remember: Any links to this article will not be automatically updated. You
- may leave behind a redirect page by specifying that option below, but these
- are temporary - so it's better to update the links directly.
- </p>
- </div>
- </article>
-
- <form method="POST" class="form-horizontal" id="article_move_form">
- {% wiki_form form %}
-
- {# Not gonna lie, I have no idea what this is or what it's for #}
- <div class="btn-group" id="dest_selector">
- <a class="btn btn-default dropdown-toggle" data-toggle="dropdown" href="#">
- <span class="dest_selector_title"></span>
- <span class="caret"></span>
- </a>
-
- <ul class="dropdown-menu" role="menu" aria-labelledby="dLabel">
- {% with current_path=root_path %}{% include "wiki/includes/move_tree.html" %}{% endwith %}
- </ul>
- </div>
-
- <a href="{% url 'wiki:get' path=urlpath.path article_id=article.id %}" class="button is-white">
- <span class="icon">
- <i class="fas fa-arrow-left"></i>
- </span>
- <span>Go back</span>
- </a>
-
- <button class="button is-warning" type="submit" name="move" id="id_move">
- <span class="icon">
- <i class="fas fa-random"></i>
- </span>
- <span>Move article</span>
- </button>
- </form>
-
- {% addtoblock "js" %}
- <script type="text/javascript" src="{% static "js/wiki/move.js" %}"></script>
- <script type="text/javascript">
- $('#id_slug').val('{{ urlpath.slug }}');
- select_path('{{urlpath.parent.pk}}', '{{urlpath.parent}}');
- </script>
- {% endaddtoblock %}
-{% endblock %}
diff --git a/pydis_site/templates/wiki/permission_denied.html b/pydis_site/templates/wiki/permission_denied.html
deleted file mode 100644
index 58394c8f..00000000
--- a/pydis_site/templates/wiki/permission_denied.html
+++ /dev/null
@@ -1,36 +0,0 @@
-{% extends "wiki/base.html" %}
-{% load wiki_tags %}
-
-{% block wiki_pagetitle %}Permission Denied{% endblock %}
-
-{% block wiki_contents %}
- <article class="message is-danger">
- <div class="message-header">
- <p>Permission Denied</p>
- </div>
-
- <div class="message-body">
- <p>
- Sorry, you don't have permission to access this page.
- </p>
- {% if article.current_revision.locked %}
- <p>This article is locked for editing.</p>
- {% endif %}
- {% if not read_denied %}
- <a href="{% url 'wiki:get' article_id=article.id path=urlpath.path %}" class="button is-primary">
- <span class="icon">
- <i class="fas fa-arrow-left"></i>
- </span>
- <span>Back to article</span>
- </a>
- {% elif urlpath.parent %}
- <a href="{% url 'wiki:get' path=urlpath.parent.path %}" class="button is-primary">
- <span class="icon">
- <i class="fas fa-arrow-left"></i>
- </span>
- <span>Back to article</span>
- </a>
- {% endif %}
- </div>
- </article>
-{% endblock %}
diff --git a/pydis_site/templates/wiki/plugins/images/index.html b/pydis_site/templates/wiki/plugins/images/index.html
deleted file mode 100644
index a76703aa..00000000
--- a/pydis_site/templates/wiki/plugins/images/index.html
+++ /dev/null
@@ -1,171 +0,0 @@
-{% extends "wiki/article.html" %}
-{% load humanize %}
-{% load wiki_tags %}
-{% load wiki_thumbnails %}
-
-{# TODO: This page needs re-styling, but it's functional for now so we're not touching it until after wiki completion #}
-
-{% block wiki_pagetitle %}Images: {{ article.current_revision.title }}{% endblock %}
-
-{% block wiki_contents_tab %}
- <p>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 %}" class="button is-white">
- <span class="icon">
- <i class="fas fa-arrow-left"></i>
- </span>
- <span>Back to edit page</span>
- </a>
- </p>
-
- {% include "wiki/includes/pagination.html" %}
-
- <table class="table is-fullwidth">
- {% for image in images %}
- {% with image.current_revision.imagerevision as revision %}
- <thead>
- <tr>
- <th>{{ revision.get_filename|default:_("No filename") }}</th>
- <th>Tag</th>
- <th colspan="3">Updated</th>
- <th>Size</th>
- </tr>
- </thead>
-
- <tbody>
- <tr>
- <td rowspan="3">
- <figure class="image is-128x128">
- {% thumbnail revision.image "128x128" as thumb %}
- <a href="{{ revision.image.url }}">
- <img src="{{ thumb.url }}" alt="{{ revision.get_filename }}" title="{{ revision.get_filename }}" />
- </a>
- {% endthumbnail %}
- </figure>
-
- {% if image|can_write:user %}
- {% if revision.deleted %}
- <a class="button is-success" title="Upload and publish new image" href="{% url 'wiki:images_add_revision' path=urlpath.path article_id=article.id image_id=image.id %}">
- <span class="icon">
- <i class="fas fa-upload"></i>
- </span>
- <span>Upload</span>
- </a>
- <a class="button is-primary" title="Restore deleted image" href="{% url 'wiki:images_restore' path=urlpath.path article_id=article.id image_id=image.id %}">
- <span class="icon">
- <i class="fas fa-sync"></i>
- </span>
- <span>Restore</span>
- </a>
- {% else %}
- <a class="button is-success" title="Upload replacement image" href="{% url 'wiki:images_add_revision' path=urlpath.path article_id=article.id image_id=image.id %}">
- <span class="icon">
- <i class="fas fa-upload"></i>
- </span>
- <span>Upload</span>
- </a>
- <a class="button is-warning" title="Remove image" href="{% url 'wiki:images_delete' path=urlpath.path article_id=article.id image_id=image.id %}">
- <span class="icon">
- <i class="fas fa-times"></i>
- </span>
- <span>Remove</span>
- </a>
- {% endif %}
- {% if article|can_moderate:user %}
- <a class="button is-danger" href="{% url 'wiki:images_purge' path=urlpath.path article_id=article.id image_id=image.id %}">
- <span class="icon">
- <i class="fas fa-trash"></i>
- </span>
- <span>Delete</span>
- </a>
- {% endif %}
- {% endif %}
- </td>
-
- <td>
- <code>[image:{{ image.id }}]</code>
- </td>
-
- <td colspan="3">
- {% include "wiki/includes/revision_info.html" %}
- </td>
-
- <td>
- {{ revision.get_size|filesizeformat }}<br />{{ revision.width }}x{{ revision.height }} pixels
- </td>
- </tr>
-
- <tr>
- <th colspan="5">
- History
- </th>
- </tr>
-
- <tr>
- <td class="is-paddingless" colspan="5">
- <table class="table is-striped">
- <thead>
- <tr>
- <th></th>
- <th>Updated</th>
- <th>Size</th>
- <th>Dimensions</th>
- <th></th>
- </tr>
- </thead>
- <tbody>
- {% for old_revision in image.revision_set.all %}
- <tr {% if forloop.first %}class="is-selected"{% endif %}>
- <td>
- <figure class="image">
- {% thumbnail old_revision.imagerevision.image "50x50" crop="center" as thumb %}
- <a href="{{ old_revision.imagerevision.image.url }}">
- <img src="{{ thumb.url }}" alt="{{ revision.imagerevision.get_filename }}" />
- </a>
- {% endthumbnail %}
- </figure>
- </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 }} pixels
- </td>
-
- <td>
- {% if image|can_write:user and old_revision != image.current_revision %}
- <a class="button is-primary" href="{% url 'wiki:images_set_revision' path=urlpath.path article_id=article.id image_id=image.id rev_id=old_revision.id %}">
- <span class="icon">
- <i class="fas fa-sync"></i>
- </span>
- <span>Restore</span>
- </a>
- {% else %}
- <a class="button is-static has-text-grey">
- <span class="icon">
- <i class="fas fa-times"></i>
- </span>
- <span>Current</span>
- </a>
- {% endif %}
- </td>
- </tr>
- {% endfor %}
- </tbody>
- </table>
- </td>
- </tr>
- </tbody>
- {% endwith %}
- {% 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
deleted file mode 100644
index 3b514e4c..00000000
--- a/pydis_site/templates/wiki/plugins/images/purge.html
+++ /dev/null
@@ -1,42 +0,0 @@
-{% extends "wiki/article.html" %}
-{% load wiki_tags %}
-{% load wiki_thumbnails %}
-
-{% block wiki_pagetitle %}Purge image: {{ image }}{% endblock %}
-
-{% block wiki_contents_tab %}
- <div class="columns">
- <div class="column is-two-thirds">
- <p>
- Purge image: Completely remove image file and all revisions
- </p>
- <form method="POST" class="form-horizontal" enctype="multipart/form-data">
- {% wiki_form form %}
-
- <a href="{% url 'wiki:images_index' path=urlpath.path article_id=article.id %}" class="button is-white">
- <span class="icon">
- <i class="fas fa-arrow-left"></i>
- </span>
- <span>Go Back</span>
- </a>
-
- <button class="button is-danger" type="submit">
- <span class="icon">
- <i class="fas fa-trash"></i>
- </span>
- <span>Permanently remove</span>
- </button>
- </form>
- </div>
-
- <div class="column is-one-third">
- {% thumbnail image.current_revision.imagerevision.image "250x250" as thumb %}
- <figure class="image">
- <a href="{{ image.current_revision.imagerevision.image.url }}">
- <img src="{{ thumb.url }}" alt="{{ revision.get_filename }}" title="{{ revision.get_filename }}" />
- </a>
- </figure>
- {% endthumbnail %}
- </div>
- </div>
-{% endblock %}
diff --git a/pydis_site/templates/wiki/plugins/images/render.html b/pydis_site/templates/wiki/plugins/images/render.html
deleted file mode 100644
index d14b3de4..00000000
--- a/pydis_site/templates/wiki/plugins/images/render.html
+++ /dev/null
@@ -1,25 +0,0 @@
-{% load wiki_thumbnails %}{% 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="image{% if align %} is-pulled-{{ 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 %}
- <figcaption>
- <em>Image not found</em>
- </figcaption>
- {% endthumbnail %}
- {% else %}
- <img src="{{ revision.image.url }}" alt="{{ revision.get_filename }}" />
- {% endif %}
- </a>
- <figcaption>{{ 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
deleted file mode 100644
index eb872eab..00000000
--- a/pydis_site/templates/wiki/plugins/images/revision_add.html
+++ /dev/null
@@ -1,43 +0,0 @@
-{% extends "wiki/article.html" %}
-{% load wiki_tags %}
-{% load wiki_thumbnails %}
-
-{% block wiki_pagetitle %}Replace Image: {{ image }}{% endblock %}
-
-{% block wiki_contents_tab %}
- <div class="columns">
- <div class="column is-two-thirds">
- <p>
- Upload an image to replace the current one.
- </p>
-
- <form method="POST" class="form-horizontal" enctype="multipart/form-data">
- {% wiki_form form %}
-
- <a href="{% url 'wiki:images_index' path=urlpath.path article_id=article.id %}" class="button is-white">
- <span class="icon">
- <i class="fas fa-arrow-left"></i>
- </span>
- <span>Go Back</span>
- </a>
-
- <button class="button is-primary" type="submit">
- <span class="icon">
- <i class="fas fa-upload"></i>
- </span>
- <span>Upload</span>
- </button>
- </form>
- </div>
-
- <div class="column is-one-third">
- {% thumbnail image.current_revision.imagerevision.image "250x250" as thumb %}
- <figure class="image">
- <a href="{{ image.current_revision.imagerevision.image.url }}">
- <img src="{{ thumb.url }}" alt="{{ revision.get_filename }}" title="{{ revision.get_filename }}" />
- </a>
- </figure>
- {% endthumbnail %}
- </div>
- </div>
-{% endblock %}
diff --git a/pydis_site/templates/wiki/plugins/images/sidebar.html b/pydis_site/templates/wiki/plugins/images/sidebar.html
deleted file mode 100644
index b29ef240..00000000
--- a/pydis_site/templates/wiki/plugins/images/sidebar.html
+++ /dev/null
@@ -1,206 +0,0 @@
-{% load static %}
-{% load wiki_images_tags %}
-{% load wiki_tags %}
-{% load wiki_thumbnails %}
-
-{% with article|images_for_article as images %}
- {% if article|images_can_add:user %}
- {% include "wiki/includes/formerrors.html" %}
-
- {# Include the hidden fields #}
- {% for hidden in form.hidden_fields %}
- {{ hidden }}
- {% endfor %}
-
- {% for field in form.visible_fields %}
- {% include "wiki/includes/formfield.html" with render_labels=False %}
- {% endfor %}
-
- <button type="button" onClick="add_image(this.form)" name="{{ plugin.slug }}_save" value="1" class="button is-primary is-fullwidth">
- <span class="icon">
- <i class="fas fa-upload"></i>
- </span>
- <span>Upload</span>
- </button>
-
- <br />
- {% endif %}
-
- {% for image in images %}
- {% with image.current_revision.imagerevision as revision %}
- {% thumbnail revision.image "100x100" crop="center" as thumb %}
- <div class="columns">
- <div class="column is-half">
- <img src="{{ thumb.url }}" alt="{{ revision.get_filename }}" title="{{ revision.get_filename }}" />
- </div>
- <div class="column is-half has-text-right">
- <div class="tags is-right">
- <span class="tag is-dark is-medium">Image ID: {{ image.id }}</span>
- </div>
-
- <p>
- <a class="button is-primary" title="Insert image" href="javascript:void(insert_image({{ image.id }}))">
- <span class="icon">
- <i class="fa fa-paste"></i>
- </span>
- </a>
-
- {% if image|can_write:user %}
- <a class="button is-primary" title="Replace" href="{% url 'wiki:images_add_revision' path=urlpath.path article_id=article.id image_id=image.id %}">
- <span class="icon">
- <i class="fas fa-upload"></i>
- </span>
- </a>
- {% endif %}
- </p>
- </div>
- </div>
- {% endthumbnail %}
- {% endwith %}
-
- {% empty %}
- <div class="has-text-centered">
- No images found for this article.
- </div>
- <br />
- {% endfor %}
-
- <p>
- <a class="button is-primary is-fullwidth" href="{% url 'wiki:images_index' path=urlpath.path article_id=article.id %}">
- <span>Manage Images</span>
- <span class="icon">
- <i class="fas fa-arrow-right"></i>
- </span>
- </a>
- </p>
-
- <h4 class="title is-4">How to use images</h4>
-
- <p>
- Images are local to the article, and may only be used in the article they are
- uploaded to. Images may be replaced by clicking the upload button next to it
- above, but note that image revisions are kept and can be found on the
- <a href="{% url 'wiki:images_index' path=urlpath.path article_id=article.id %}">Manage Images page</a>.
- </p>
-
- <p>
- To make use of images in an article, use the <code>image</code> wiki tag in
- your Markdown. These tags take some arguments for customisation, and you can
- also include a caption on the next line, indented by four spaces. Note that
- the <code>align</code> and <code>size</code> options are optional.
- </p>
- <p>
- Syntax: <code>[image:ID align:x size:y]</code>
- </p>
- <p>
- The ID to use is the image ID shown next to the image in the list above.
- You can click on the insert button if you'd like to insert an image into the
- editor without manually typing the tag.
- </p>
-
- <h5 class="title is-5">Example tag</h5>
-
- <pre>
- [image:1 align:left size:orig]
- Python Discord logo
- </pre>
-
- <h5 class="title is-5">Options for align</h5>
-
- <div class="tags">
- <span class="tag is-primary">left</span>
- <span class="tag is-primary">right</span>
- </div>
-
- <h5 class="title is-5">Options for size</h5>
-
- <div class="tags">
- <span class="tag is-primary">small</span>
- <span class="tag is-primary">medium</span>
- <span class="tag is-primary">large</span>
- <span class="tag is-primary">orig</span>
- <span class="tag is-primary">default</span>
- </div>
-{% endwith %}
-
-<div class="modal" id="imgModal">
- <div class="modal-background"></div>
- <div class="modal-card" style="height: 80%; width: 80%;">
- <div class="modal-card-head">
- <p class="modal-card-title">Insert Image</p>
- </div>
- <div class="modal-card-body" style="padding: 0; overflow: hidden;">
- <section class="section">
- <input type="hidden" value="0" id="img_id" />
- <div class="field is-horizontal">
- <div class="field-label">
- <label for="img_align">Image alignment</label>
- </div>
- <div class="field-body">
- <div class="control has-icons-left is-fullwidth">
- <div class="select is-fullwidth">
- <select id="img_align">
- <option selected value="">Default</option>
- <option value="left">Left</option>
- <option value="right">Right</option>
- </select>
- </div>
-
- <span class="icon is-left">
- <i class="fas fa-align-center"></i>
- </span>
- </div>
- </div>
- </div>
-
- <div class="field is-horizontal">
- <div class="field-label">
- <label for="img_size">Image size</label>
- </div>
- <div class="field-body">
- <div class="control has-icons-left is-fullwidth">
- <div class="select is-fullwidth">
- <select id="img_size">
- <option selected value="">Default</option>
- <option value="orig">Original</option>
-
- <option value="small">Small</option>
- <option value="medium">Medium</option>
- <option value="large">Large</option>
- </select>
- </div>
- <span class="icon is-left">
- <i class="fas fa-expand-arrows"></i>
- </span>
- </div>
- </div>
- </div>
-
- <div class="field is-horizontal">
- <div class="field-label">
- <label for="img_caption">Image caption</label>
- </div>
- <div class="field-body">
- <input class="input" type="text" placeholder="Enter Caption" id="img_caption" />
- </div>
- </div>
- </section>
- </div>
- <div class="modal-card-foot">
- <button class="button is-light" aria-label="close">
- <span class="icon">
- <i class="fas fa-arrow-left"></i>
- </span>
- <span>Back</span>
- </button>
- <button class="button is-primary" id="id_image_insert">
- <span class="icon">
- <i class="fas fa-paste"></i>
- </span>
- <span>Insert</span>
- </button>
- </div>
- </div>
-</div>
-
-<script type="text/javascript" src="{% static "js/wiki/image_sidebar.js" %}"></script>
diff --git a/pydis_site/templates/wiki/plugins/links/sidebar.html b/pydis_site/templates/wiki/plugins/links/sidebar.html
deleted file mode 100644
index 4fdbac72..00000000
--- a/pydis_site/templates/wiki/plugins/links/sidebar.html
+++ /dev/null
@@ -1,56 +0,0 @@
-{% load sekizai_tags %}
-{% load static %}
-
-<h4 class="title is-4">Link to another wiki page</h4>
-
-<p>
- 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>
-
-{# We do this to prevent accidental form submission - this isn't _really_ a form #}
-<input type="submit" disabled style="display: none" aria-hidden="true" />
-
-<div class="field">
- <div class="control has-icons-left">
- <div class="dropdown">
- <div class="dropdown-trigger">
- <input class="input" type="text" id="page_title_input" value="" placeholder="Search: 3+ chars" aria-haspopup="true" aria-controls="page_title_menu">
- </div>
- <div class="dropdown-menu" id="page_title_menu" role="menu"></div>
- </div>
-
- <span class="icon is-small is-left">
- <i class="fas fa-search"></i>
- </span>
- </div>
-</div>
-
-<div class="is-divider"></div>
-
-<h4 class="title is-4">An external link</h4>
-
-<p>
- 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" %}
- {% comment %}
- So, for whatever reason, bulmahead doesn't have a LICENSE file. There is one in
- the package.json, but that isn't a standard most projects adhere to - so I've
- declined to include it within the project directly.
-
- The package.json states MIT - but there is no prose or license
- text available for the project itself.
- {% endcomment %}
-
- <script src="https://cdn.rawgit.com/mattmezza/bulmahead/master/dist/bulmahead.bundle.js"></script>
- <script src="{% static "js/wiki/links_sidebar.js" %}"></script>
-
- <script type="text/javascript">
- setFetchURL("{% url 'wiki:links_query_urlpath' path=urlpath.path article_id=article.id %}");
- </script>
-{% endaddtoblock %}
diff --git a/pydis_site/templates/wiki/preview_inline.html b/pydis_site/templates/wiki/preview_inline.html
deleted file mode 100644
index a01c963a..00000000
--- a/pydis_site/templates/wiki/preview_inline.html
+++ /dev/null
@@ -1,73 +0,0 @@
-{% extends "wiki/base.html" %}
-{% load sekizai_tags %}
-{% load static %}
-{% load wiki_tags %}
-
-{# We make these empty so they don't appear in the preview #}
-{% block site_navbar %}{% endblock %}
-{% block site_footer %}{% endblock %}
-{% block wiki_breadcrumbs %}{% endblock %}
-
-{% block wiki_body %}
- {% if revision %}
- <div class="container">
- <div class="message">
- <div class="message-header">
- <p>Previewing Revision</p>
- </div>
- <div class="message-body">
- {% include "wiki/includes/revision_info.html" %}
- </div>
- </div>
- </div>
- {% endif %}
-
- {% if merge %}
- <div class="alert alert-info">
- <strong>Previewing merge between:</strong>
- {% include "wiki/includes/revision_info.html" with revision=merge1 %}
- <strong>and</strong>
- {% include "wiki/includes/revision_info.html" with revision=merge2 %}
- </div>
-
- {% if merge1.deleted %}
- <div class="alert alert-danger">
- <strong>You cannot merge with a deleted revision</strong>
- </div>
- {% endif %}
- {% endif %}
-
- {% if revision and revision.deleted %}
- <div class="warning">
- <strong>This revision has been deleted.</strong>
- <p>Restoring to this revision will mark the article as deleted.</p>
- </div>
- {% else %}
- <section class="section">
- <div class="container">
- <div class="content">
- <h1 class="title">{{ article.current_revision.title }}</h1>
-
- {% wiki_render article content %}
- </div>
- </div>
- </section>
-
- {% for plugin in plugins %}
- {% if plugin.RenderMedia.css %}
- {% addtoblock "css" %}
- {% for media, url in plugin.RenderMedia.css.items %}
- <link rel="stylesheet" href="{% static url %}" />
- {% endfor %}
- {% endaddtoblock %}
- {% endif %}
- {% if plugin.RenderMedia.js %}
- {% addtoblock "js" %}
- {% for url in plugin.RenderMedia.js %}
- <script type="text/javascript" src="{% static url %}"></script>
- {% endfor %}
- {% endaddtoblock %}
- {% endif %}
- {% endfor %}
- {% endif %}
-{% endblock %}
diff --git a/pydis_site/templates/wiki/root_missing.html b/pydis_site/templates/wiki/root_missing.html
deleted file mode 100644
index 31ef2eab..00000000
--- a/pydis_site/templates/wiki/root_missing.html
+++ /dev/null
@@ -1,41 +0,0 @@
-{% extends "wiki/create_root.html" %}
-{% load wiki_tags %}
-
-{% block wiki_contents %}
- <div class="columns">
- <div class="column is-two-thirds is-offset-2">
- <article class="message is-primary">
- <div class="message-header">
- <p>No articles found</p>
- </div>
- <div class="message-body">
- <p>
- It appears that there are no articles available on this wiki.
- </p>
-
- {% if not user.is_superuser %}
- <p>
- To get started, please login with a superuser account.
- </p>
-
- {% login_url as wiki_login_url %}
-
- {% if wiki_login_url %}
- <div class="has-text-centered">
- <a href="{{ wiki_login_url }}" class="button is-primary">Login</a>
- </div>
- {% endif %}
- {% else %}
- <p>
- Let's get started - click below to create the first article, or to read up on the
- <code>django-wiki</code> documentation.
- </p>
-
- <a class="button is-primary" href="{% url 'wiki:root_create' %}">Create Article</a>
- <a class="button is-info" href="http://django-wiki.readthedocs.org/">Documentation</a>
- {% endif %}
- </div>
- </article>
- </div>
- </div>
-{% endblock %}
diff --git a/pydis_site/templates/wiki/search.html b/pydis_site/templates/wiki/search.html
deleted file mode 100644
index 154b6934..00000000
--- a/pydis_site/templates/wiki/search.html
+++ /dev/null
@@ -1,64 +0,0 @@
-{% extends "wiki/base.html" %}
-{% load i18n %}
-{% load wiki_tags %}
-
-
-{% block wiki_pagetitle %}Search results for: "{{ search_query }}"{% endblock %}
-
-{% block wiki_contents %}
- <h1 class="page-header">Search results for: "{{ search_query }}"</h1>
-
- <form class="form-search directory-toolbar">
- <p>
- {% if urlpath %}
- Searching: <strong>in {{ urlpath.article }}</strong>
- {% else %}
- Searching: <strong>everywhere</strong>
- {% endif %}
- </p>
-
- <div class="field has-addons">
- <div class="control has-icons-left is-expanded">
- <input type="search" class="input" name="q" value="{{ search_query }}" />
- <span class="icon is-left">
- <i class="fas fa-search"></i>
- </span>
- </div>
- <div class="control">
- <button class="button is-primary" type="submit">
- Search
- </button>
- </div>
- </div>
-
- <p>
- {% blocktrans with paginator.object_list.count as cnt %}
- Your search returned <strong>{{ cnt }}</strong> results.
- {% endblocktrans %}
- </p>
- </form>
-
- {% include "wiki/includes/pagination.html" %}
-
- <table class="table is-striped">
- <tr>
- <th>Title</th>
- <th class="has-text-right">Last modified</th>
- </tr>
-
- {% for article in articles %}
- {% block wiki_search_loop %}
- {% include "wiki/includes/searchresult.html" %}
- {% endblock %}
-
- {% empty %}
- <tr>
- <td colspan="2">
- <em>No articles were found for that search query.</em>
- </td>
- </tr>
- {% endfor %}
- </table>
-
- {% include "wiki/includes/pagination.html" %}
-{% endblock %}
diff --git a/pydis_site/templates/wiki/settings.html b/pydis_site/templates/wiki/settings.html
deleted file mode 100644
index e291621d..00000000
--- a/pydis_site/templates/wiki/settings.html
+++ /dev/null
@@ -1,30 +0,0 @@
-{% extends "wiki/article.html" %}
-{% load wiki_tags %}
-
-{% block wiki_pagetitle %}Settings: {{ article.current_revision.title }}{% endblock %}
-
-{% block wiki_contents_tab %}
- {% for form in forms %}
- <form method="POST" class="form-horizontal" action="?f={{form.action}}">
- <h3 class="page-header">{{ form.settings_form_headline }}</h3>
-
- {% wiki_form form %}
-
- <div class="field is-horizontal">
- <div class="field-label">
- {# Empty for spacing #}
- </div>
- <div class="field-body">
- <div class="control">
- <button type="submit" class="button is-primary" name="save">
- <span class="icon">
- <i class="fas fa-save"></i>
- </span>
- <span>Save Changes</span>
- </button>
- </div>
- </div>
- </div>
- </form>
- {% endfor %}
-{% endblock %}
diff --git a/pydis_site/templates/wiki/source.html b/pydis_site/templates/wiki/source.html
deleted file mode 100644
index a6611233..00000000
--- a/pydis_site/templates/wiki/source.html
+++ /dev/null
@@ -1,14 +0,0 @@
-{% extends "wiki/article.html" %}
-{% load wiki_tags %}
-
-{% block wiki_pagetitle %}Source of "{{ article.current_revision.title }}"{% endblock %}
-
-{% block wiki_contents_tab %}
- {% if article.current_revision.locked %}
- <p>This article is currently locked for editing.</p>
- {% endif %}
-
- <pre class="is-fullwidth">
-{{ article.current_revision.content }}
- </pre>
-{% endblock %}