]>
git.ipfire.org Git - ipfire.org.git/blob - src/web/wiki.py
a3d4e65bd67f7d211641fd41121680ed3c4b7e6d
7 from . import ui_modules
9 class PageHandler(auth
.CacheMixin
, base
.BaseHandler
):
12 return self
.get_argument("action", None)
14 def write_error(self
, status_code
, **kwargs
):
15 # Render a custom page for 404
16 if status_code
== 404:
17 self
.render("wiki/404.html", **kwargs
)
20 # Otherwise raise this to one layer above
21 super().write_error(status_code
, **kwargs
)
23 @tornado.web
.removeslash
25 # Check if we are asked to render a certain revision
26 revision
= self
.get_argument("revision", None)
29 page
= self
.backend
.wiki
.get_page(page
, revision
=revision
)
32 if self
.action
== "edit":
33 if not self
.current_user
:
34 raise tornado
.web
.HTTPError(401)
36 # Empty page if it was deleted
37 if page
and page
.was_deleted():
41 self
.render("wiki/edit.html", page
=page
)
45 elif self
.action
== "revisions":
46 self
.render("wiki/revisions.html", page
=page
)
49 # If the page does not exist, we send 404
50 if not page
or page
.was_deleted():
51 raise tornado
.web
.HTTPError(404)
53 # Fetch the latest revision
54 latest_revision
= page
.get_latest_revision()
57 self
.render("wiki/page.html", page
=page
, latest_revision
=latest_revision
)
59 @tornado.web
.authenticated
61 content
= self
.get_argument("content", None)
62 changes
= self
.get_argument("changes")
64 # Create a new page in the database
65 with self
.db
.transaction():
66 page
= self
.backend
.wiki
.create_page(page
,
67 self
.current_user
, content
, changes
=changes
, address
=self
.get_remote_ip())
70 if page
.was_deleted():
73 self
.redirect(page
.url
)
75 # Update the search index
76 with self
.db
.transaction():
77 self
.backend
.wiki
.refresh()
80 class SearchHandler(auth
.CacheMixin
, base
.BaseHandler
):
83 q
= self
.get_argument("q")
85 pages
= self
.backend
.wiki
.search(q
, limit
=50)
87 self
.render("wiki/search-results.html", q
=q
, pages
=pages
)
90 class RecentChangesHandler(auth
.CacheMixin
, base
.BaseHandler
):
92 recent_changes
= self
.backend
.wiki
.get_recent_changes(limit
=50)
94 self
.render("wiki/recent-changes.html", recent_changes
=recent_changes
)
97 class WikiListModule(ui_modules
.UIModule
):
98 def render(self
, pages
, link_revision
=False, show_breadcrumbs
=True, show_changes
=False):
99 return self
.render_string("wiki/modules/list.html", link_revision
=link_revision
,
100 pages
=pages
, show_breadcrumbs
=show_breadcrumbs
, show_changes
=show_changes
)
103 class WikiNavbarModule(ui_modules
.UIModule
):
104 def render(self
, page
, suffix
=None):
105 breadcrumbs
= self
.backend
.wiki
.make_breadcrumbs(page
.url
)
107 return self
.render_string("wiki/modules/navbar.html",
108 breadcrumbs
=breadcrumbs
, page_title
=page
.title
, suffix
=suffix
)