@@ -161,13 +161,20 @@
161 161 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
return f'href="{base}/docs/www/help.wiki"'
162 162 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
# Bare .wiki or .md file paths (from relative link resolution)
163 163 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
m = re.match(r"/([^/]+\.(?:wiki|md|html))", url)
164 164 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if m:
165 165 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
return f'href="{base}/docs/www/{m.group(1)}"'
166 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- # /setup_*, /admin_* -> these are Fossil server routes, link to admin
166 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ # /dir -> our code browser
167 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if url == "/dir" or url.startswith("/dir?"):
168 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ return f'href="{base}/code/"'
169 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ # /builtin/path -> code file (these are embedded skin files)
170 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ m = re.match(r"/builtin/(.+)", url)
171 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if m:
172 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ return f'href="{base}/code/file/skins/{m.group(1)}"'
173 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ # /setup_*, /admin_* -> Fossil server routes, no mapping
167 174 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if re.match(r"/(setup_|admin_)", url):
168 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- return match.group(0) # Keep as-is, no good mapping
175 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ return match.group(0)
169 176 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
# Keep external and unrecognized links as-is
170 177 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
return match.group(0)
171 178 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
172 179 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
def replace_scheme_link(match):
173 180 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
"""Handle Fossil URI schemes like forum:/forumpost/HASH, wiki:PageName, info:HASH."""
@@ -618,17 +625,23 @@
618 625 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
posts = reader.get_forum_thread(thread_uuid)
619 626 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
620 627 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if not posts:
621 628 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
raise Http404("Forum thread not found")
622 629 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
630 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ # Render each post's body through the content renderer
631 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ rendered_posts = []
632 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ for post in posts:
633 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ body_html = mark_safe(_render_fossil_content(post.body, project_slug=slug)) if post.body else ""
634 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ rendered_posts.append({"post": post, "body_html": body_html})
635 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
623 636 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
return render(
624 637 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
request,
625 638 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
"fossil/forum_thread.html",
626 639 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
{
627 640 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
"project": project,
628 641 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
"fossil_repo": fossil_repo,
629 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- "posts": posts,
642 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ "posts": rendered_posts,
630 643 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
"thread_uuid": thread_uuid,
631 644 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
"active_tab": "forum",
632 645 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
},
633 646 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
)
634 647 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
635 648 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!