from . import ui_modules
class PageHandler(auth.CacheMixin, base.BaseHandler):
+ @property
+ def action(self):
+ return self.get_argument("action", None)
+
def write_error(self, status_code, **kwargs):
# Render a custom page for 404
if status_code == 404:
def get(self, page):
page = self.backend.wiki.get_page(page)
+ # Edit
+ if self.action == "edit":
+ if not self.current_user:
+ raise tornado.web.HTTPError(401)
+
+ # Empty page if it was deleted
+ if page.was_deleted():
+ page = None
+
+ # Render login
+ return self.render("wiki/edit.html", page=page)
+
# If the page does not exist, we send 404
if not page or page.was_deleted():
raise tornado.web.HTTPError(404)
self.render("wiki/page.html", page=page, latest_revision=latest_revision)
@tornado.web.authenticated
- def post(self, page):
+ def post(self):
+ page = self.get_argument("page")
+
content = self.get_argument("content", None)
+ changes = self.get_argument("changes")
# Delete the page if content is empty
if not content:
with self.db.transaction():
self.backend.wiki.delete_page(page, self.current_user)
- return self.redirect("/")
+ self.redirect("/")
+ return
# Create a new page in the database
- page = self.backend.wiki.create_page(page, self.current_user, content)
+ with self.db.transaction():
+ page = self.backend.wiki.create_page(page,
+ self.current_user, content, changes=changes)
# Redirect
self.redirect(page.url)
class WikiListModule(ui_modules.UIModule):
- def render(self, pages):
- return self.render_string("wiki/modules/list.html", pages=pages)
+ def render(self, pages, show_changes=False):
+ return self.render_string("wiki/modules/list.html",
+ pages=pages, show_changes=show_changes)
class WikiNavbarModule(ui_modules.UIModule):