Rietveld Code Review Tool
Help | Bug tracker | Discussion group | Source code

Unified Diff: cms/converters.py

Issue 29933596: Issue 5333 - Allow cms to generate relative pages (Closed) Base URL: https://hg.adblockplus.org/cms/
Patch Set: Address comments on PS2, rearrange test files (again) Created Nov. 7, 2018, 4:14 p.m.
Use n/p to move between diff chunks; N/P to move between comments.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: cms/converters.py
===================================================================
--- a/cms/converters.py
+++ b/cms/converters.py
@@ -19,6 +19,7 @@
import HTMLParser
import re
import urlparse
+from posixpath import relpath
import jinja2
import markdown
@@ -298,6 +299,12 @@
)
def process_links(self, text):
+ def make_relative(base_url, target):
+ if not target.startswith('/'):
+ # Links to an external resource
+ return target
+ return relpath(target, base_url.rsplit('/', 1)[0])
+
def process_link(match):
pre, attr, url, post = match.groups()
url = jinja2.Markup(url).unescape()
@@ -312,6 +319,13 @@
post += ' hreflang="{}"'\
.format(jinja2.Markup.escape(locale))
+ if self._params['relative']:
+ current_path = '/' + self._params['locale']
+ path = re.search(r'.*/pages(/.*)',
Vasily Kuznetsov 2018/11/07 18:03:02 This seems fragile: there could be more than one "
rhowell 2018/11/07 20:05:25 Thanks, that's how I had it in patch set 1, but wa
+ self._params['pagedata'][1])
+ current_path += path.groups()[0]
+ url = make_relative(current_path, url)
+
return ''.join((pre, jinja2.Markup.escape(url), post))
text = re.sub(r'(<a\s[^<>]*\b(href)=\")([^<>\"]+)(\")',
@@ -432,6 +446,7 @@
'get_page_content': self.get_page_content,
'get_pages_metadata': self.get_pages_metadata,
'get_canonical_url': self.get_canonical_url,
+ 'relative': self._params['relative'],
}
for dirname, dictionary in [('filters', filters),
« no previous file with comments | « cms/bin/generate_static_pages.py ('k') | cms/utils.py » ('j') | tests/test_page_outputs.py » ('J')

Powered by Google App Engine
This is Rietveld