Mercurial > wikked
changeset 474:db73b12ad212
web: Give special pages a linkable URL.
All special pages are now in the built-in `special` endpoint, at URLs like
`special:/Broken Links`. This makes it possible to link to them from other
pages, especially help pages.
author | Ludovic Chabant <ludovic@chabant.com> |
---|---|
date | Mon, 08 Oct 2018 23:49:09 -0700 |
parents | 93d84f2c2b31 |
children | 0ecf8303a135 |
files | wikked/endpoint.py wikked/resolver.py wikked/views/history.py wikked/views/special.py |
diffstat | 4 files changed, 21 insertions(+), 12 deletions(-) [+] |
line wrap: on
line diff
--- a/wikked/endpoint.py Mon Oct 08 23:47:02 2018 -0700 +++ b/wikked/endpoint.py Mon Oct 08 23:49:09 2018 -0700 @@ -14,6 +14,9 @@ _resources_root_dir = os.path.join(os.path.dirname(__file__), 'resources') +SPECIAL_ENDPOINT = 'special' + + def create_endpoint_infos(config): endpoints = {} sections = [s for s in config.sections() if s.startswith('endpoint:')]
--- a/wikked/resolver.py Mon Oct 08 23:47:02 2018 -0700 +++ b/wikked/resolver.py Mon Oct 08 23:49:09 2018 -0700 @@ -4,6 +4,7 @@ import logging import jinja2 from wikked.formatter import PageFormatter, FormattingContext +from wikked.endpoint import SPECIAL_ENDPOINT from wikked.utils import ( PageNotFoundError, get_meta_name_and_modifiers, get_absolute_url, split_page_url, @@ -232,9 +233,14 @@ endpoint = m.group('endpoint') is_edit = bool(m.group('isedit')) url = self.ctx.getAbsoluteUrl(raw_url, force_endpoint=endpoint) - validated_url = self.wiki.db.validateUrl(url) - if validated_url: - url = validated_url + + if endpoint != SPECIAL_ENDPOINT: + validated_url = self.wiki.db.validateUrl(url) + if validated_url: + url = validated_url + else: + # TODO: check the URL against a list of known special URLs. + validated_url = url self.output.out_links.append(url) action = 'edit' if is_edit else 'read'
--- a/wikked/views/history.py Mon Oct 08 23:47:02 2018 -0700 +++ b/wikked/views/history.py Mon Oct 08 23:49:09 2018 -0700 @@ -10,7 +10,7 @@ read_page_rev, diff_revs, diff_page_revs) -@app.route('/special/history') +@app.route('/read/special:/History') @requires_permission('wikihistory') def site_history(): wiki = get_wiki()
--- a/wikked/views/special.py Mon Oct 08 23:47:02 2018 -0700 +++ b/wikked/views/special.py Mon Oct 08 23:49:09 2018 -0700 @@ -54,7 +54,7 @@ "template": "special-double-redirects.html" }, 'dead-ends': { - "title": "Dead-End Pages", + "title": "Dead Ends", "view": 'special_list_dead_ends', "description": ("Lists pages that don't have any " "outgoing links."), @@ -85,7 +85,7 @@ } -@app.route('/special') +@app.route('/read/special:/Dashboard') @requires_permission('read') def special_pages_dashboard(): data = { @@ -134,42 +134,42 @@ return render_template(info['template'], **data) -@app.route('/special/list/orphans') +@app.route('/read/special:/Orphaned Pages') @requires_permission('read') def special_list_orphans(): return call_api('orphans', get_orphans, raw_url='/api/orphans') -@app.route('/special/list/broken-redirects') +@app.route('/read/special:/Broken Redirects') @requires_permission('read') def special_list_broken_redirects(): return call_api('broken-redirects', get_broken_redirects, raw_url='/api/broken-redirects') -@app.route('/special/list/double-redirects') +@app.route('/read/special:/Double Redirects') @requires_permission('read') def special_list_double_redirects(): return call_api('double-redirects', get_double_redirects, raw_url='/api/double-redirects') -@app.route('/special/list/dead-ends') +@app.route('/read/special:/Dead Ends') @requires_permission('read') def special_list_dead_ends(): return call_api('dead-ends', get_dead_ends, raw_url='/api/dead-ends') -@app.route('/special/list/broken-links') +@app.route('/read/special:/Broken Links') @requires_permission('read') def special_list_broken_links(): return call_api('broken-links', get_broken_links, raw_url='/api/broken-links') -@app.route('/special/list/wanted-pages') +@app.route('/read/special:/Wanted Pages') @requires_permission('read') def special_list_wanted_pages(): return call_api('wanted-pages', get_wanted_pages,