mirror of
				https://github.com/go-gitea/gitea.git
				synced 2025-10-31 21:28:11 +09:00 
			
		
		
		
	Use relative links for commits, mentions, and issues in markdown (#29427)
Fixes #29404 Use relative links for - commits - mentions - issues --------- Co-authored-by: silverwind <me@silverwind.io>
This commit is contained in:
		| @@ -609,7 +609,7 @@ func mentionProcessor(ctx *RenderContext, node *html.Node) { | ||||
| 		if ok && strings.Contains(mention, "/") { | ||||
| 			mentionOrgAndTeam := strings.Split(mention, "/") | ||||
| 			if mentionOrgAndTeam[0][1:] == ctx.Metas["org"] && strings.Contains(teams, ","+strings.ToLower(mentionOrgAndTeam[1])+",") { | ||||
| 				replaceContent(node, loc.Start, loc.End, createLink(util.URLJoin(setting.AppURL, "org", ctx.Metas["org"], "teams", mentionOrgAndTeam[1]), mention, "mention")) | ||||
| 				replaceContent(node, loc.Start, loc.End, createLink(util.URLJoin(ctx.Links.Prefix(), "org", ctx.Metas["org"], "teams", mentionOrgAndTeam[1]), mention, "mention")) | ||||
| 				node = node.NextSibling.NextSibling | ||||
| 				start = 0 | ||||
| 				continue | ||||
| @@ -620,7 +620,7 @@ func mentionProcessor(ctx *RenderContext, node *html.Node) { | ||||
| 		mentionedUsername := mention[1:] | ||||
|  | ||||
| 		if DefaultProcessorHelper.IsUsernameMentionable != nil && DefaultProcessorHelper.IsUsernameMentionable(ctx.Ctx, mentionedUsername) { | ||||
| 			replaceContent(node, loc.Start, loc.End, createLink(util.URLJoin(setting.AppURL, mentionedUsername), mention, "mention")) | ||||
| 			replaceContent(node, loc.Start, loc.End, createLink(util.URLJoin(ctx.Links.Prefix(), mentionedUsername), mention, "mention")) | ||||
| 			node = node.NextSibling.NextSibling | ||||
| 		} else { | ||||
| 			node = node.NextSibling | ||||
| @@ -898,9 +898,9 @@ func issueIndexPatternProcessor(ctx *RenderContext, node *html.Node) { | ||||
| 				path = "pulls" | ||||
| 			} | ||||
| 			if ref.Owner == "" { | ||||
| 				link = createLink(util.URLJoin(setting.AppURL, ctx.Metas["user"], ctx.Metas["repo"], path, ref.Issue), reftext, "ref-issue") | ||||
| 				link = createLink(util.URLJoin(ctx.Links.Prefix(), ctx.Metas["user"], ctx.Metas["repo"], path, ref.Issue), reftext, "ref-issue") | ||||
| 			} else { | ||||
| 				link = createLink(util.URLJoin(setting.AppURL, ref.Owner, ref.Name, path, ref.Issue), reftext, "ref-issue") | ||||
| 				link = createLink(util.URLJoin(ctx.Links.Prefix(), ref.Owner, ref.Name, path, ref.Issue), reftext, "ref-issue") | ||||
| 			} | ||||
| 		} | ||||
|  | ||||
| @@ -939,7 +939,7 @@ func commitCrossReferencePatternProcessor(ctx *RenderContext, node *html.Node) { | ||||
| 		} | ||||
|  | ||||
| 		reftext := ref.Owner + "/" + ref.Name + "@" + base.ShortSha(ref.CommitSha) | ||||
| 		link := createLink(util.URLJoin(setting.AppSubURL, ref.Owner, ref.Name, "commit", ref.CommitSha), reftext, "commit") | ||||
| 		link := createLink(util.URLJoin(ctx.Links.Prefix(), ref.Owner, ref.Name, "commit", ref.CommitSha), reftext, "commit") | ||||
|  | ||||
| 		replaceContent(node, ref.RefLocation.Start, ref.RefLocation.End, link) | ||||
| 		node = node.NextSibling.NextSibling | ||||
| @@ -1166,7 +1166,7 @@ func hashCurrentPatternProcessor(ctx *RenderContext, node *html.Node) { | ||||
| 			continue | ||||
| 		} | ||||
|  | ||||
| 		link := util.URLJoin(setting.AppURL, ctx.Metas["user"], ctx.Metas["repo"], "commit", hash) | ||||
| 		link := util.URLJoin(ctx.Links.Prefix(), ctx.Metas["user"], ctx.Metas["repo"], "commit", hash) | ||||
| 		replaceContent(node, m[2], m[3], createCodeLink(link, base.ShortSha(hash), "commit")) | ||||
| 		start = 0 | ||||
| 		node = node.NextSibling.NextSibling | ||||
|   | ||||
| @@ -287,6 +287,7 @@ func TestRender_IssueIndexPattern_Document(t *testing.T) { | ||||
| } | ||||
|  | ||||
| func testRenderIssueIndexPattern(t *testing.T, input, expected string, ctx *RenderContext) { | ||||
| 	ctx.Links.AbsolutePrefix = true | ||||
| 	if ctx.Links.Base == "" { | ||||
| 		ctx.Links.Base = TestRepoURL | ||||
| 	} | ||||
|   | ||||
| @@ -43,7 +43,8 @@ func TestRender_Commits(t *testing.T) { | ||||
| 			Ctx:          git.DefaultContext, | ||||
| 			RelativePath: ".md", | ||||
| 			Links: markup.Links{ | ||||
| 				Base: markup.TestRepoURL, | ||||
| 				AbsolutePrefix: true, | ||||
| 				Base:           markup.TestRepoURL, | ||||
| 			}, | ||||
| 			Metas: localMetas, | ||||
| 		}, input) | ||||
| @@ -96,7 +97,8 @@ func TestRender_CrossReferences(t *testing.T) { | ||||
| 			Ctx:          git.DefaultContext, | ||||
| 			RelativePath: "a.md", | ||||
| 			Links: markup.Links{ | ||||
| 				Base: setting.AppSubURL, | ||||
| 				AbsolutePrefix: true, | ||||
| 				Base:           setting.AppSubURL, | ||||
| 			}, | ||||
| 			Metas: localMetas, | ||||
| 		}, input) | ||||
| @@ -588,7 +590,8 @@ func TestPostProcess_RenderDocument(t *testing.T) { | ||||
| 		err := markup.PostProcess(&markup.RenderContext{ | ||||
| 			Ctx: git.DefaultContext, | ||||
| 			Links: markup.Links{ | ||||
| 				Base: "https://example.com", | ||||
| 				AbsolutePrefix: true, | ||||
| 				Base:           "https://example.com", | ||||
| 			}, | ||||
| 			Metas: localMetas, | ||||
| 		}, strings.NewReader(input), &res) | ||||
|   | ||||
| @@ -130,11 +130,11 @@ func testAnswers(baseURLContent, baseURLImages string) []string { | ||||
| <li><a href="` + baseURLContent + `/Links" rel="nofollow">Links, Language bindings, Engine bindings</a></li> | ||||
| <li><a href="` + baseURLContent + `/Tips" rel="nofollow">Tips</a></li> | ||||
| </ul> | ||||
| <p>See commit <a href="http://localhost:3000/gogits/gogs/commit/65f1bf27bc" rel="nofollow"><code>65f1bf27bc</code></a></p> | ||||
| <p>See commit <a href="/gogits/gogs/commit/65f1bf27bc" rel="nofollow"><code>65f1bf27bc</code></a></p> | ||||
| <p>Ideas and codes</p> | ||||
| <ul> | ||||
| <li>Bezier widget (by <a href="` + AppURL + `r-lyeh" rel="nofollow">@r-lyeh</a>) <a href="http://localhost:3000/ocornut/imgui/issues/786" class="ref-issue" rel="nofollow">ocornut/imgui#786</a></li> | ||||
| <li>Bezier widget (by <a href="` + AppURL + `r-lyeh" rel="nofollow">@r-lyeh</a>) <a href="http://localhost:3000/gogits/gogs/issues/786" class="ref-issue" rel="nofollow">#786</a></li> | ||||
| <li>Bezier widget (by <a href="/r-lyeh" rel="nofollow">@r-lyeh</a>) <a href="http://localhost:3000/ocornut/imgui/issues/786" class="ref-issue" rel="nofollow">ocornut/imgui#786</a></li> | ||||
| <li>Bezier widget (by <a href="/r-lyeh" rel="nofollow">@r-lyeh</a>) <a href="http://localhost:3000/gogits/gogs/issues/786" class="ref-issue" rel="nofollow">#786</a></li> | ||||
| <li>Node graph editors <a href="https://github.com/ocornut/imgui/issues/306" rel="nofollow">https://github.com/ocornut/imgui/issues/306</a></li> | ||||
| <li><a href="` + baseURLContent + `/memory_editor_example" rel="nofollow">Memory Editor</a></li> | ||||
| <li><a href="` + baseURLContent + `/plot_var_example" rel="nofollow">Plot var helper</a></li> | ||||
|   | ||||
| @@ -82,9 +82,17 @@ type RenderContext struct { | ||||
| } | ||||
|  | ||||
| type Links struct { | ||||
| 	Base       string | ||||
| 	BranchPath string | ||||
| 	TreePath   string | ||||
| 	AbsolutePrefix bool | ||||
| 	Base           string | ||||
| 	BranchPath     string | ||||
| 	TreePath       string | ||||
| } | ||||
|  | ||||
| func (l *Links) Prefix() string { | ||||
| 	if l.AbsolutePrefix { | ||||
| 		return setting.AppURL | ||||
| 	} | ||||
| 	return setting.AppSubURL | ||||
| } | ||||
|  | ||||
| func (l *Links) HasBranchInfo() bool { | ||||
|   | ||||
		Reference in New Issue
	
	Block a user