templates_wiki_DATA = \
src/templates/wiki/base.html \
- src/templates/wiki/page.html
+ src/templates/wiki/page.html \
+ src/templates/wiki/recent-changes.html
templates_wikidir = $(templatesdir)/wiki
templates_wiki_modules_DATA = \
+ src/templates/wiki/modules/list.html \
src/templates/wiki/modules/navbar.html
templates_wiki_modulesdir = $(templates_wikidir)/modules
if res:
return Page(self.backend, res.id, data=res)
- def get_recent_changes(self):
+ def get_recent_changes(self, limit=None):
return self._get_pages("SELECT * FROM wiki \
- WHERE timestamp >= NOW() - INTERVAL '4 weeks' ORDER BY timestamp DESC")
+ WHERE timestamp >= NOW() - INTERVAL '4 weeks' \
+ ORDER BY timestamp DESC LIMIT %s", limit)
def create_page(self, page, author, markdown):
page = Page.sanitise_page_name(page)
</button>
<div class="collapse navbar-collapse" id="navbar">
- <form class="form-inline ml-lg-auto my-2 my-lg-0" action="/search" method="GET">
+ <ul class="navbar-nav ml-auto">
+ <li class="nav-item">
+ <a class="nav-link {% if request.path == "/recent-changes" %}active{% end %}" href="/recent-changes">
+ {{ _("Recent Changes") }}
+ </a>
+ </li>
+ </ul>
+
+ <form class="form-inline my-2 my-lg-0" action="/search" method="GET">
<input class="form-control form-control-sm" type="search" name="q"
placeholder="{{ _("Search...") }}" aria-label="{{ _("Search") }}" value="{% try %}{{ q }}{% except %}{% end %}">
</form>
--- /dev/null
+{% for page in pages %}
+ <strong class="mb-0">
+ <a href="{{ page.url }}">{{ page.title }}</a>
+ </strong>
+
+ <p class="text-muted small">
+ {{ locale.format_date(page.timestamp, shorter=True, relative=False) }}
+
+ {% if page.author %}
+ {{ _("by") }}
+ <a href="/users/{{ page.author.uid }}">{{ page.author }}</a>
+ {% end %}
+ </p>
+{% end %}
--- /dev/null
+{% extends "../base.html" %}
+
+{% block title %}{{ _("Recent Changes") }}{% end block %}
+
+{% block content %}
+ <section>
+ <div class="container">
+ <div class="row">
+ <div class="col col-lg-6">
+ <h1>{{ _("Recent Changes") }}</h1>
+ </div>
+ </div>
+ </div>
+ </section>
+
+ <div class="card">
+ <div class="card-body">
+ {% module WikiList(recent_changes) %}
+ </div>
+ </div>
+{% end block %}
# Wiki
"WikiNavbar" : wiki.WikiNavbarModule,
+ "WikiList" : wiki.WikiListModule,
# Misc
"Map" : ui_modules.MapModule,
self.add_handlers(r"wiki(\.dev)?\.ipfire\.org",
authentication_handlers + [
+ # Handlers
+ (r"/recent\-changes", wiki.RecentChangesHandler),
(r"/search", wiki.SearchHandler),
+
+ # Render pages
(r"([A-Za-z0-9\-_\/]+)?", wiki.PageHandler),
])
self.render("wiki/search-results.html", q=q, pages=pages)
+class RecentChangesHandler(auth.CacheMixin, base.BaseHandler):
+ def get(self):
+ recent_changes = self.backend.wiki.get_recent_changes(limit=50)
+
+ self.render("wiki/recent-changes.html", recent_changes=recent_changes)
+
+
+class WikiListModule(ui_modules.UIModule):
+ def render(self, pages):
+ return self.render_string("wiki/modules/list.html", pages=pages)
+
+
class WikiNavbarModule(ui_modules.UIModule):
def render(self, page, suffix=None):
breadcrumbs = self.backend.wiki.make_breadcrumbs(page.url)