]>
Commit | Line | Data |
---|---|---|
181d08f3 MT |
1 | #!/usr/bin/python3 |
2 | ||
3 | import tornado.web | |
4 | ||
5 | from . import auth | |
6 | from . import base | |
6ac7e934 | 7 | from . import ui_modules |
181d08f3 MT |
8 | |
9 | class PageHandler(auth.CacheMixin, base.BaseHandler): | |
a446dcb9 MT |
10 | def write_error(self, status_code, **kwargs): |
11 | # Render a custom page for 404 | |
12 | if status_code == 404: | |
13 | self.render("wiki/404.html", **kwargs) | |
14 | return | |
15 | ||
16 | # Otherwise raise this to one layer above | |
17 | super().write_error(status_code, **kwargs) | |
18 | ||
181d08f3 MT |
19 | @tornado.web.removeslash |
20 | def get(self, page): | |
21 | page = self.backend.wiki.get_page(page) | |
22 | ||
23 | # If the page does not exist, we send 404 | |
24 | if not page or page.was_deleted(): | |
25 | raise tornado.web.HTTPError(404) | |
26 | ||
27 | # Fetch the latest revision | |
28 | latest_revision = page.get_latest_revision() | |
29 | ||
30 | # Render page | |
31 | self.render("wiki/page.html", page=page, latest_revision=latest_revision) | |
32 | ||
33 | @tornado.web.authenticated | |
34 | def post(self, page): | |
35 | content = self.get_argument("content", None) | |
36 | ||
37 | # Delete the page if content is empty | |
38 | if not content: | |
39 | with self.db.transaction(): | |
40 | self.backend.wiki.delete_page(page, self.current_user) | |
41 | ||
42 | return self.redirect("/") | |
43 | ||
44 | # Create a new page in the database | |
45 | page = self.backend.wiki.create_page(page, self.current_user, content) | |
46 | ||
47 | # Redirect | |
48 | self.redirect(page.url) | |
49 | ||
50 | ||
51 | class SearchHandler(auth.CacheMixin, base.BaseHandler): | |
52 | @base.blacklisted | |
53 | def get(self): | |
54 | q = self.get_argument("q") | |
55 | ||
56 | pages = self.backend.wiki.search(q, limit=50) | |
57 | if not pages: | |
58 | raise tornado.web.HTTPError(404, "Nothing found") | |
59 | ||
60 | self.render("wiki/search-results.html", q=q, pages=pages) | |
6ac7e934 MT |
61 | |
62 | ||
f9db574a MT |
63 | class RecentChangesHandler(auth.CacheMixin, base.BaseHandler): |
64 | def get(self): | |
65 | recent_changes = self.backend.wiki.get_recent_changes(limit=50) | |
66 | ||
67 | self.render("wiki/recent-changes.html", recent_changes=recent_changes) | |
68 | ||
69 | ||
70 | class WikiListModule(ui_modules.UIModule): | |
71 | def render(self, pages): | |
72 | return self.render_string("wiki/modules/list.html", pages=pages) | |
73 | ||
74 | ||
6ac7e934 MT |
75 | class WikiNavbarModule(ui_modules.UIModule): |
76 | def render(self, page, suffix=None): | |
77 | breadcrumbs = self.backend.wiki.make_breadcrumbs(page.url) | |
78 | ||
79 | return self.render_string("wiki/modules/navbar.html", | |
80 | breadcrumbs=breadcrumbs, page_title=page.title, suffix=suffix) |