tenseleyflow/shithub / adf15d6

Browse files

Resolve README-relative links

Authored by espadonne
SHA
adf15d6f685b894d7901ee5062d2b4eb107c2b92
Parents
c79744b
Tree
6d78971

3 changed files

StatusFile+-
M internal/web/handlers/repo/code.go 18 1
A internal/web/handlers/repo/markdown_links.go 81 0
A internal/web/handlers/repo/markdown_links_test.go 77 0
internal/web/handlers/repo/code.gomodified
@@ -230,7 +230,13 @@ func (h *Handlers) findAndRenderREADME(r *http.Request, cc *codeContext, entries
230230
 		if hasExt(lower, []string{".md", ".markdown"}) {
231231
 			out, mderr := mdrender.RenderDocumentHTML(body)
232232
 			if mderr == nil {
233
-				return out
233
+				return rewriteMarkdownRelativeURLs(
234
+					out,
235
+					codeRouteBase(cc.owner, cc.row.Name, "blob", cc.ref, cc.subpath),
236
+					codeRouteBase(cc.owner, cc.row.Name, "blob", cc.ref, ""),
237
+					codeRouteBase(cc.owner, cc.row.Name, "raw", cc.ref, cc.subpath),
238
+					codeRouteBase(cc.owner, cc.row.Name, "raw", cc.ref, ""),
239
+				)
234240
 			}
235241
 		}
236242
 		// Non-markdown plain text: escape + <pre>.
@@ -304,6 +310,17 @@ func (h *Handlers) codeBlob(w http.ResponseWriter, r *http.Request) {
304310
 		data["IsMarkdown"] = true
305311
 		rendered, mderr := mdrender.RenderDocumentHTML(body)
306312
 		if mderr == nil {
313
+			dir := path.Dir(cc.subpath)
314
+			if dir == "." {
315
+				dir = ""
316
+			}
317
+			rendered = rewriteMarkdownRelativeURLs(
318
+				rendered,
319
+				codeRouteBase(cc.owner, cc.row.Name, "blob", cc.ref, dir),
320
+				codeRouteBase(cc.owner, cc.row.Name, "blob", cc.ref, ""),
321
+				codeRouteBase(cc.owner, cc.row.Name, "raw", cc.ref, dir),
322
+				codeRouteBase(cc.owner, cc.row.Name, "raw", cc.ref, ""),
323
+			)
307324
 			data["MarkdownHTML"] = template.HTML(rendered) //nolint:gosec // sanitized
308325
 		}
309326
 		data["RawSource"] = string(body)