From 25e2dbe5672a1fe033992210c305a2c3fb0a3d55 Mon Sep 17 00:00:00 2001 From: Michael Tremer Date: Wed, 20 Dec 2023 15:29:11 +0000 Subject: [PATCH] wiki: Embed the current version of an image Signed-off-by: Michael Tremer --- src/backend/wiki.py | 29 +++++++++++++++++------------ 1 file changed, 17 insertions(+), 12 deletions(-) diff --git a/src/backend/wiki.py b/src/backend/wiki.py index 8d760135..117b72cd 100644 --- a/src/backend/wiki.py +++ b/src/backend/wiki.py @@ -363,8 +363,8 @@ class Wiki(misc.Object): """, path, filename, author.uid, address, mimetype, blob.id, len(data), ) - def render(self, path, text): - return WikiRenderer(self.backend, path, text) + def render(self, path, text, **kwargs): + return WikiRenderer(self.backend, path, text, **kwargs) class Page(misc.Object): @@ -456,7 +456,7 @@ class Page(misc.Object): lines.append(line) - renderer = self.backend.wiki.render(self.page, "\n".join(lines)) + renderer = self.backend.wiki.render(self.page, "\n".join(lines), revision=self.timestamp) return renderer.html @@ -464,7 +464,7 @@ class Page(misc.Object): @property def files(self): - renderer = self.backend.wiki.render(self.page, self.markdown) + renderer = self.backend.wiki.render(self.page, self.markdown, revision=self.timestamp) return renderer.files @@ -631,6 +631,8 @@ class File(misc.Object): def created_at(self): return self.data.created_at + timestamp = created_at + def delete(self, author=None): if not self.can_be_deleted(): raise RuntimeError("Cannot delete %s" % self) @@ -748,10 +750,13 @@ class WikiRenderer(misc.Object): # Images _images = re.compile(r"") - def init(self, path, text): + def init(self, path, text, revision=None): self.path = path self.text = text + # Optionally, the revision of the rendered page + self.revision = revision + # Markdown Renderer self.renderer = markdown.Markdown( extensions=[ @@ -828,7 +833,7 @@ class WikiRenderer(misc.Object): """ # Skip any absolute and external URLs - if url.startswith("/") or url.startswith("https://") or url.startswith("http://"): + if url.startswith("https://") or url.startswith("http://"): return html % { "caption" : caption or "", "id" : id, @@ -843,10 +848,10 @@ class WikiRenderer(misc.Object): args = urllib.parse.parse_qs(qs) # Build absolute path - plain_url = url = self.backend.wiki.make_path(self.path, url) + url = self.backend.wiki.make_path(self.path, url) # Find image - file = self.backend.wiki.get_file_by_path(url) + file = self.backend.wiki.get_file_by_path(url, revision=self.revision) if not file or not file.is_image(): return "" % (url, self.path) @@ -854,15 +859,15 @@ class WikiRenderer(misc.Object): if "s" in args: del args["s"] - # Append arguments to the URL - if args: - url = "%s?%s" % (url, urllib.parse.urlencode(args)) + # Link the image that has been the current version at the time of the page edit + if file: + args["revision"] = file.timestamp return html % { "caption" : caption or "", "id" : id, - "plain_url" : plain_url, "url" : url, + "args" : urllib.parse.urlencode(args), } def _render(self): -- 2.47.3