diff options
author | 2018-04-07 15:02:35 +0100 | |
---|---|---|
committer | 2018-04-07 15:02:35 +0100 | |
commit | c4e683fff11c3c1bd33c95c1f741eb0c76fd99b2 (patch) | |
tree | e3abdf698a0f7e3e58a5df129ca7f90ba16f0541 | |
parent | Fix stupid error (diff) |
Considerable progress on the wiki
-rw-r--r-- | pysite/views/wiki/edit.py | 25 | ||||
-rw-r--r-- | pysite/views/wiki/page.py | 3 | ||||
-rw-r--r-- | templates/main/base.html | 6 | ||||
-rw-r--r-- | templates/main/navigation.html | 10 | ||||
-rw-r--r-- | templates/wiki/base.html | 71 | ||||
-rw-r--r-- | templates/wiki/index.html | 4 | ||||
-rw-r--r-- | templates/wiki/page_edit.html | 46 | ||||
-rw-r--r-- | templates/wiki/page_missing.html | 11 | ||||
-rw-r--r-- | templates/wiki/page_view.html | 12 |
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> Home</a></li> {% else %} - <li><a href="{{ url_for('main.index') }}"><i class="uk-icon fas fa-home"></i> Home</a></li> + <li><a href="{{ url_for('main.index') }}"><i class="uk-icon fas fa-home fa-fw"></i> Home</a></li> {% endif %} - <li><a href="{{ url_for('main.invite') }}"><i class="uk-icon fab fa-discord"></i> Discord</a></li> + <li><a href="{{ url_for('wiki.index') }}"><i class="uk-icon fas fa-book fa-fw"></i> Wiki</a></li> + <li><a href="{{ url_for('main.invite') }}"><i class="uk-icon fab fa-discord fa-fw"></i> 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> 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> 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> 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> 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> 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 |