]> git.ipfire.org Git - ipfire.org.git/commitdiff
wiki: Add page that lists revisions of a page
authorMichael Tremer <michael.tremer@ipfire.org>
Mon, 12 Nov 2018 21:19:52 +0000 (21:19 +0000)
committerMichael Tremer <michael.tremer@ipfire.org>
Mon, 12 Nov 2018 21:19:52 +0000 (21:19 +0000)
Signed-off-by: Michael Tremer <michael.tremer@ipfire.org>
Makefile.am
src/backend/wiki.py
src/templates/wiki/modules/list.html
src/templates/wiki/revisions.html [new file with mode: 0644]
src/web/wiki.py

index 244722a938e77aa26e5e59a302ee840987ea2c17..b6c8025c3462c09bdcce6e42afaea4577f491e7a 100644 (file)
@@ -258,7 +258,8 @@ templates_wiki_DATA = \
        src/templates/wiki/base.html \
        src/templates/wiki/edit.html \
        src/templates/wiki/page.html \
-       src/templates/wiki/recent-changes.html
+       src/templates/wiki/recent-changes.html \
+       src/templates/wiki/revisions.html
 
 templates_wikidir = $(templatesdir)/wiki
 
index 5a285ea8f88e3e639db3d6082e1be048126965a5..4a782a8e03cd66721a124ea3c0ab65b258d8bde4 100644 (file)
@@ -170,7 +170,15 @@ class Page(misc.Object):
                return self.backend.wiki.make_breadcrumbs(self.page)
 
        def get_latest_revision(self):
-               return self.backend.wiki.get_page(self.page)
+               revisions = self.get_revisions()
+
+               # Return first object
+               for rev in revisions:
+                       return rev
+
+       def get_revisions(self):
+               return self.backend.wiki._get_pages("SELECT * FROM wiki \
+                       WHERE page = %s ORDER BY timestamp DESC", self.page)
 
        @property
        def changes(self):
index 625e1dd79ec70890592db9e765aa783f799df6d9..f7a67c15854af9b58786e537fdd702979cf8cbdd 100644 (file)
@@ -6,7 +6,7 @@
                        {% end %}
                {% end %}
 
-               <a href="{{ page.url }}">{{ page.title }}</a>
+               <a href="{{ page.url }}{% if link_revision %}?revision={{ page.timestamp.isoformat() }}{% end %}">{{ page.title }}</a>
        </strong>
 
        <p class="text-muted small">
diff --git a/src/templates/wiki/revisions.html b/src/templates/wiki/revisions.html
new file mode 100644 (file)
index 0000000..524813d
--- /dev/null
@@ -0,0 +1,17 @@
+{% extends "page.html" %}
+
+{% block title %}{{ _("Revisions of %s") % page.title }}{% end block %}
+
+{% block main %}
+       {% if not request.path == "/" %}
+               {% module WikiNavbar(page) %}
+       {% end %}
+
+       <div class="card mb-3">
+               <div class="card-body">
+            <h4 class="card-title">{{ _("Revisions of %s") % page.title }}</h4>
+
+                       {% module WikiList(page.get_revisions(), show_breadcrumbs=False, link_revision=True) %}
+               </div>
+       </div>
+{% end block %}
index 916db35812a2244161158cb52091cfd6fe950ba5..12aa9c0770a8b13a6c3b11cb0c8d4c6d3a7da8d3 100644 (file)
@@ -22,7 +22,11 @@ class PageHandler(auth.CacheMixin, base.BaseHandler):
 
        @tornado.web.removeslash
        def get(self, page):
-               page = self.backend.wiki.get_page(page)
+               # Check if we are asked to render a certain revision
+               revision = self.get_argument("revision", None)
+
+               # Fetch the wiki page
+               page = self.backend.wiki.get_page(page, revision=revision)
 
                # Edit
                if self.action == "edit":
@@ -33,8 +37,14 @@ class PageHandler(auth.CacheMixin, base.BaseHandler):
                        if page and page.was_deleted():
                                page = None
 
-                       # Render login
-                       return self.render("wiki/edit.html", page=page)
+                       # Render page
+                       self.render("wiki/edit.html", page=page)
+                       return
+
+               # Revisions
+               elif self.action == "revisions":
+                       self.render("wiki/revisions.html", page=page)
+                       return
 
                # If the page does not exist, we send 404
                if not page or page.was_deleted():
@@ -83,8 +93,8 @@ class RecentChangesHandler(auth.CacheMixin, base.BaseHandler):
 
 
 class WikiListModule(ui_modules.UIModule):
-       def render(self, pages, show_breadcrumbs=True, show_changes=False):
-               return self.render_string("wiki/modules/list.html",
+       def render(self, pages, link_revision=False, show_breadcrumbs=True, show_changes=False):
+               return self.render_string("wiki/modules/list.html", link_revision=link_revision,
                        pages=pages, show_breadcrumbs=show_breadcrumbs, show_changes=show_changes)