diff options
Diffstat (limited to 'pysite/views/wiki/edit.py')
-rw-r--r-- | pysite/views/wiki/edit.py | 35 |
1 files changed, 23 insertions, 12 deletions
diff --git a/pysite/views/wiki/edit.py b/pysite/views/wiki/edit.py index 1a100b8b..0a0af15b 100644 --- a/pysite/views/wiki/edit.py +++ b/pysite/views/wiki/edit.py @@ -1,9 +1,10 @@ # 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 -from pysite.constants import ALL_STAFF_ROLES +from pysite.constants import EDITOR_ROLES from pysite.decorators import csrf, require_roles from pysite.mixins import DBMixin @@ -15,28 +16,38 @@ class EditView(RouteView, DBMixin): table_name = "wiki" table_primary_key = "slug" - @require_roles(*ALL_STAFF_ROLES) + @require_roles(*EDITOR_ROLES) def get(self, page): rst = "" title = "" + preview = "<p>Preview will appear here.</p>" obj = self.db.get(self.table_name, page) if obj: rst = obj["rst"] title = obj["title"] + preview = obj["html"] - return self.render("wiki/page_edit.html", page=page, rst=rst, title=title) + return self.render("wiki/page_edit.html", page=page, rst=rst, title=title, preview=preview) - @require_roles(*ALL_STAFF_ROLES) + @require_roles(*EDITOR_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 |