aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorGravatar Gareth Coles <[email protected]>2018-04-07 15:02:35 +0100
committerGravatar Gareth Coles <[email protected]>2018-04-07 15:02:35 +0100
commitc4e683fff11c3c1bd33c95c1f741eb0c76fd99b2 (patch)
treee3abdf698a0f7e3e58a5df129ca7f90ba16f0541
parentFix stupid error (diff)
Considerable progress on the wiki
-rw-r--r--pysite/views/wiki/edit.py25
-rw-r--r--pysite/views/wiki/page.py3
-rw-r--r--templates/main/base.html6
-rw-r--r--templates/main/navigation.html10
-rw-r--r--templates/wiki/base.html71
-rw-r--r--templates/wiki/index.html4
-rw-r--r--templates/wiki/page_edit.html46
-rw-r--r--templates/wiki/page_missing.html11
-rw-r--r--templates/wiki/page_view.html12
9 files changed, 132 insertions, 56 deletions
diff --git a/pysite/views/wiki/edit.py b/pysite/views/wiki/edit.py
index 1a100b8b..4a87044c 100644
--- a/pysite/views/wiki/edit.py
+++ b/pysite/views/wiki/edit.py
@@ -1,5 +1,6 @@
# coding=utf-8
-from flask import url_for
+from docutils.core import publish_parts
+from flask import request, url_for
from werkzeug.utils import redirect
from pysite.base_route import RouteView
@@ -31,12 +32,20 @@ class EditView(RouteView, DBMixin):
@require_roles(*ALL_STAFF_ROLES)
@csrf
def post(self, page):
- # rst = request.form["rst"]
- # obj = {
- # "slug": page,
- # "title": request.form["title"],
- # "rst": request.form["rst"],
- # "html": ""
- # }
+ rst = request.form["rst"]
+ obj = {
+ "slug": page,
+ "title": request.form["title"],
+ "rst": rst,
+ "html": publish_parts(
+ source=rst, writer_name="html5", settings_overrides={"halt_level": 2}
+ )["html_body"]
+ }
+
+ self.db.insert(
+ self.table_name,
+ obj,
+ conflict="replace"
+ )
return redirect(url_for("wiki.page", page=page), code=303) # Redirect, ensuring a GET
diff --git a/pysite/views/wiki/page.py b/pysite/views/wiki/page.py
index 01c8fa8a..66afd283 100644
--- a/pysite/views/wiki/page.py
+++ b/pysite/views/wiki/page.py
@@ -1,5 +1,6 @@
# coding=utf-8
from flask import redirect, url_for
+from werkzeug.exceptions import NotFound
from pysite.base_route import RouteView
from pysite.constants import ALL_STAFF_ROLES
@@ -20,7 +21,7 @@ class PageView(RouteView, DBMixin):
if self.is_staff():
return redirect(url_for("wiki.edit", page=page))
- return self.render("wiki/page_missing.html", page=page)
+ raise NotFound()
return self.render("wiki/page_view.html", page=page, data=obj)
def is_staff(self):
diff --git a/templates/main/base.html b/templates/main/base.html
index 4978d494..6f5921d9 100644
--- a/templates/main/base.html
+++ b/templates/main/base.html
@@ -47,7 +47,11 @@
<footer>
<div class="uk-section uk-section-secondary uk-container-medium uk-text-meta">
<div class="uk-text-center">
- <p>This website uses <a href="https://python.org">Python</a> and <a href="http://flask.pocoo.org/">Flask</a>, and was developed collaboratively on <a href="https://github.com/discord-python/site">GitHub</a>.</p>
+ <p>
+ This website uses <a href="https://python.org">Python</a> and
+ <a href="http://flask.pocoo.org/">Flask</a>, and was developed collaboratively on
+ <a href="https://github.com/discord-python/site">GitHub</a>.
+ </p>
</div>
</div>
</footer>
diff --git a/templates/main/navigation.html b/templates/main/navigation.html
index eb325a37..0260b051 100644
--- a/templates/main/navigation.html
+++ b/templates/main/navigation.html
@@ -16,9 +16,10 @@
{% if current_page == "index" %}
<li class="uk-active"><a href="{{ url_for('main.index') }}"><i class="uk-icon fas fa-home"></i> &nbsp;Home</a></li>
{% else %}
- <li><a href="{{ url_for('main.index') }}"><i class="uk-icon fas fa-home"></i> &nbsp;Home</a></li>
+ <li><a href="{{ url_for('main.index') }}"><i class="uk-icon fas fa-home fa-fw"></i> &nbsp;Home</a></li>
{% endif %}
- <li><a href="{{ url_for('main.invite') }}"><i class="uk-icon fab fa-discord"></i> &nbsp;Discord</a></li>
+ <li><a href="{{ url_for('wiki.index') }}"><i class="uk-icon fas fa-book fa-fw"></i> &nbsp;Wiki</a></li>
+ <li><a href="{{ url_for('main.invite') }}"><i class="uk-icon fab fa-discord fa-fw"></i> &nbsp;Discord</a></li>
</ul>
<ul class="uk-navbar-nav">
<li>
@@ -26,8 +27,9 @@
<div class="uk-navbar-dropdown uk-background-secondary" uk-dropdown>
<ul class="uk-nav uk-navbar-dropdown-nav">
<li class="uk-nav-header uk-hidden@m">Navigation</li>
- <li class="uk-nav-item uk-hidden@m"><a href="{{ url_for('main.index') }}"><i class="uk-icon fas fa-home"></i> &nbsp;Home</a></li>
- <li class="uk-nav-item uk-hidden@m"><a href="{{ url_for('main.invite') }}"><i class="uk-icon fab fa-discord"></i> &nbsp;Discord</a></li>
+ <li class="uk-nav-item uk-hidden@m"><a href="{{ url_for('main.index') }}"><i class="uk-icon fas fa-home fa-fw"></i> &nbsp;Home</a></li>
+ <li class="uk-nav-item uk-hidden@m"><a href="{{ url_for('wiki.index') }}"><i class="uk-icon fas fa-book fa-fw"></i> &nbsp;Wiki</a></li>
+ <li class="uk-nav-item uk-hidden@m"><a href="{{ url_for('main.invite') }}"><i class="uk-icon fab fa-discord fa-fw"></i> &nbsp;Discord</a></li>
<li class="uk-nav-divider uk-hidden@m"></li>
{% if logged_in %}
diff --git a/templates/wiki/base.html b/templates/wiki/base.html
new file mode 100644
index 00000000..32d58341
--- /dev/null
+++ b/templates/wiki/base.html
@@ -0,0 +1,71 @@
+<!DOCTYPE html>
+<html lang="en">
+ <head>
+ {% block head %}
+ <title>Python Discord | {% block title %}{% endblock %}</title>
+ <meta charset="UTF-8">
+ <meta name="viewport" content="width=device-width, initial-scale=1">
+ <script defer src="https://use.fontawesome.com/releases/v5.0.6/js/all.js"></script>
+ <script src="https://cdnjs.cloudflare.com/ajax/libs/uikit/3.0.0-beta.39/js/uikit.min.js"></script>
+ <link rel="shortcut icon" href="{{ static_file('favicon.ico') }}">
+ <link rel="stylesheet" href="{{ static_file('uikit_blurple.css') }}"/>
+ <link rel="stylesheet" href="{{ static_file('style.css') }}"/>
+
+ <!-- OpenGraph metadata -->
+ <meta property="og:title" content="Python Discord | {% block og_title %}{% endblock %}">
+ <meta property="og:description" content="{% block og_description %}We're a large, friendly community focused around the Python programming language. Our community is open to those who wish to learn the language, as well as those looking to help others.{% endblock %}">
+ <meta content="/static/logos/logo_discord.png" property="og:image">
+ {% endblock %}
+ {% block extra_head %}
+
+ {% endblock %}
+ </head>
+ <body class="page-{{ current_page }}">
+ <div class="uk-offcanvas-content">
+ {% include "main/navigation.html" %}
+ <div class="uk-flex uk-flex-row" style="height: 100%;">
+ <div class="uk-card uk-card-body uk-flex-left uk-flex">
+ <ul class="uk-nav-default uk-nav-parent-icon" uk-nav>
+ <li class="uk-active"><a href="#">Placeholder</a></li>
+ <li class="uk-parent">
+ <a href="#">Parent</a>
+ <ul class="uk-nav-sub">
+ <li><a href="#">Sub item</a></li>
+ <li><a href="#">Sub item</a></li>
+ </ul>
+ </li>
+ <li class="uk-parent">
+ <a href="#">Parent</a>
+ <ul class="uk-nav-sub">
+ <li><a href="#">Sub item</a></li>
+ <li><a href="#">Sub item</a></li>
+ </ul>
+ </li>
+ <li class="uk-nav-header">Header</li>
+ <li><a href="#"><span class="uk-margin-small-right" uk-icon="icon: table"></span> Item</a></li>
+ <li><a href="#"><span class="uk-margin-small-right" uk-icon="icon: thumbnails"></span> Item</a></li>
+ <li class="uk-nav-divider"></li>
+ <li><a href="#"><span class="uk-margin-small-right" uk-icon="icon: trash"></span> Item</a></li>
+ </ul>
+ </div>
+ <div class="uk-section" style="flex-grow: 1; margin: 0 1rem 1rem;">
+ {% block content %}{% endblock %}
+ </div>
+ </div>
+ </div>
+
+ <footer>
+ <div class="uk-section uk-section-secondary uk-container-medium uk-text-meta">
+ <div class="uk-text-center">
+ <p>
+ This website uses <a href="https://python.org">Python</a> and
+ <a href="http://flask.pocoo.org/">Flask</a>, and was developed collaboratively on
+ <a href="https://github.com/discord-python/site">GitHub</a>.
+ </p>
+ </div>
+ </div>
+ </footer>
+
+ <script src='{{ static_file('js/countdown.js') }}'></script>
+ </body>
+</html>
diff --git a/templates/wiki/index.html b/templates/wiki/index.html
index 5601cbbf..27e94d61 100644
--- a/templates/wiki/index.html
+++ b/templates/wiki/index.html
@@ -1,11 +1,9 @@
-{% extends "main/base.html" %}
+{% extends "wiki/base.html" %}
{% block title %}Wiki | Home{% endblock %}
{% block og_title %}Wiki | Home{% endblock %}
{% block og_description %}Landing page for the wiki{% endblock %}
{% block content %}
- <div class="uk-container uk-section">
<h1 class="uk-title uk-text-center">
Placeholder text.
</h1>
- </div>
{% endblock %} \ No newline at end of file
diff --git a/templates/wiki/page_edit.html b/templates/wiki/page_edit.html
index e83676fd..37aadc13 100644
--- a/templates/wiki/page_edit.html
+++ b/templates/wiki/page_edit.html
@@ -1,4 +1,4 @@
-{% extends "main/base.html" %}
+{% extends "wiki/base.html" %}
{% block title %}Wiki | Home{% endblock %}
{% block og_title %}Wiki | Home{% endblock %}
{% block og_description %}Landing page for the wiki{% endblock %}
@@ -6,30 +6,28 @@
<script src="https://cdnjs.cloudflare.com/ajax/libs/ace/1.3.3/ace.js" type="application/javascript"></script>
{% endblock %}
{% block content %}
- <div class="uk-container uk-section">
- <form uk-grid class="uk-grid-small" action="{{ url_for("wiki.edit", page=page) }}" method="post">
- <div class="uk-width-expand">
- <input name="title" id="title" placeholder="Page Title" value="{{ title }}" class="uk-input" />
- </div>
- <div class="uk-width-auto">
- <button class="uk-button uk-button-secondary" type="button" value="Preview" id="preview">Preview</button>
- </div>
- <div class="uk-width-auto">
- <button class="uk-button uk-button-primary" type="submit" value="Save">Save</button>
- </div>
- <div class="uk-width-1-1">
-{# <label for="rst">Document: </label>#}
- <div id="rst" class="uk-textarea" style="resize: vertical; min-height: 10rem;">{{ rst }}</div>
- </div>
+ <form uk-grid class="uk-grid-small" action="{{ url_for("wiki.edit", page=page) }}" method="post">
+ <div class="uk-width-expand">
+ <input name="title" id="title" placeholder="Page Title" value="{{ title }}" class="uk-input" />
+ </div>
+ <div class="uk-width-auto">
+ <button class="uk-button uk-button-secondary" type="button" value="Preview" id="preview">Preview</button>
+ </div>
+ <div class="uk-width-auto">
+ <input class="uk-button uk-button-primary" type="submit" value="Save" />
+ </div>
+ <div class="uk-width-1-1">
+ <div id="editor" class="uk-textarea" style="resize: vertical; min-height: 10rem;">{{ rst }}</div>
+ <input type="hidden" name="rst" id="rst" />
+ </div>
- <input type="hidden" name="csrf_token" value="{{ csrf_token() }}"/>
- </form>
+ <input type="hidden" name="csrf_token" value="{{ csrf_token() }}"/>
+ </form>
- <h2 class="uk-h2">Preview</h2>
+ <h2 class="uk-h2">Preview</h2>
- <div id="preview-div">
- <p>Preview will appear here.</p>
- </div>
+ <div id="preview-div">
+ <p>Preview will appear here.</p>
</div>
<script type="application/javascript">
@@ -67,12 +65,14 @@
return false;
};
- let editor = ace.edit("rst");
+ let editor = ace.edit("editor");
let timer;
editor.session.setMode("ace/mode/rst");
editor.setTheme("ace/theme/iplastic");
editor.on("input", function() {
+ document.getElementById("rst").value = editor.getValue();
+
if (timer !== undefined) {
clearTimeout(timer);
}
diff --git a/templates/wiki/page_missing.html b/templates/wiki/page_missing.html
deleted file mode 100644
index 5601cbbf..00000000
--- a/templates/wiki/page_missing.html
+++ /dev/null
@@ -1,11 +0,0 @@
-{% extends "main/base.html" %}
-{% block title %}Wiki | Home{% endblock %}
-{% block og_title %}Wiki | Home{% endblock %}
-{% block og_description %}Landing page for the wiki{% endblock %}
-{% block content %}
- <div class="uk-container uk-section">
- <h1 class="uk-title uk-text-center">
- Placeholder text.
- </h1>
- </div>
-{% endblock %} \ No newline at end of file
diff --git a/templates/wiki/page_view.html b/templates/wiki/page_view.html
index 5601cbbf..98c6f4cd 100644
--- a/templates/wiki/page_view.html
+++ b/templates/wiki/page_view.html
@@ -1,11 +1,13 @@
-{% extends "main/base.html" %}
+{% extends "wiki/base.html" %}
{% block title %}Wiki | Home{% endblock %}
{% block og_title %}Wiki | Home{% endblock %}
{% block og_description %}Landing page for the wiki{% endblock %}
{% block content %}
- <div class="uk-container uk-section">
- <h1 class="uk-title uk-text-center">
- Placeholder text.
- </h1>
+ <div class="uk-container uk-container-small">
+ <h2 class="uk-title">
+ {{ data["title"] }}
+ </h2>
+
+ {{ data["html"] | safe }}
</div>
{% endblock %} \ No newline at end of file