mirror of
				https://github.com/go-gitea/gitea
				synced 2025-11-03 21:08:25 +00:00 
			
		
		
		
	Refactor markup render system (#32589)
This PR mainly moves some code and introduces `RenderContext.WithXxx` functions
This commit is contained in:
		@@ -19,7 +19,7 @@ import (
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
func fullIssuePatternProcessor(ctx *RenderContext, node *html.Node) {
 | 
			
		||||
	if ctx.Metas == nil {
 | 
			
		||||
	if ctx.RenderOptions.Metas == nil {
 | 
			
		||||
		return
 | 
			
		||||
	}
 | 
			
		||||
	next := node.NextSibling
 | 
			
		||||
@@ -36,14 +36,14 @@ func fullIssuePatternProcessor(ctx *RenderContext, node *html.Node) {
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		link := node.Data[m[0]:m[1]]
 | 
			
		||||
		if !httplib.IsCurrentGiteaSiteURL(ctx.Ctx, link) {
 | 
			
		||||
		if !httplib.IsCurrentGiteaSiteURL(ctx, link) {
 | 
			
		||||
			return
 | 
			
		||||
		}
 | 
			
		||||
		text := "#" + node.Data[m[2]:m[3]]
 | 
			
		||||
		// if m[4] and m[5] is not -1, then link is to a comment
 | 
			
		||||
		// indicate that in the text by appending (comment)
 | 
			
		||||
		if m[4] != -1 && m[5] != -1 {
 | 
			
		||||
			if locale, ok := ctx.Ctx.Value(translation.ContextKey).(translation.Locale); ok {
 | 
			
		||||
			if locale, ok := ctx.Value(translation.ContextKey).(translation.Locale); ok {
 | 
			
		||||
				text += " " + locale.TrString("repo.from_comment")
 | 
			
		||||
			} else {
 | 
			
		||||
				text += " (comment)"
 | 
			
		||||
@@ -56,7 +56,7 @@ func fullIssuePatternProcessor(ctx *RenderContext, node *html.Node) {
 | 
			
		||||
		matchOrg := linkParts[len(linkParts)-4]
 | 
			
		||||
		matchRepo := linkParts[len(linkParts)-3]
 | 
			
		||||
 | 
			
		||||
		if matchOrg == ctx.Metas["user"] && matchRepo == ctx.Metas["repo"] {
 | 
			
		||||
		if matchOrg == ctx.RenderOptions.Metas["user"] && matchRepo == ctx.RenderOptions.Metas["repo"] {
 | 
			
		||||
			replaceContent(node, m[0], m[1], createLink(ctx, link, text, "ref-issue"))
 | 
			
		||||
		} else {
 | 
			
		||||
			text = matchOrg + "/" + matchRepo + text
 | 
			
		||||
@@ -67,14 +67,14 @@ func fullIssuePatternProcessor(ctx *RenderContext, node *html.Node) {
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func issueIndexPatternProcessor(ctx *RenderContext, node *html.Node) {
 | 
			
		||||
	if ctx.Metas == nil {
 | 
			
		||||
	if ctx.RenderOptions.Metas == nil {
 | 
			
		||||
		return
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	// crossLinkOnly: do not parse "#123", only parse "owner/repo#123"
 | 
			
		||||
	// if there is no repo in the context, then the "#123" format can't be parsed
 | 
			
		||||
	// old logic: crossLinkOnly := ctx.Metas["mode"] == "document" && !ctx.IsWiki
 | 
			
		||||
	crossLinkOnly := ctx.Metas["markupAllowShortIssuePattern"] != "true"
 | 
			
		||||
	// old logic: crossLinkOnly := ctx.RenderOptions.Metas["mode"] == "document" && !ctx.IsWiki
 | 
			
		||||
	crossLinkOnly := ctx.RenderOptions.Metas["markupAllowShortIssuePattern"] != "true"
 | 
			
		||||
 | 
			
		||||
	var (
 | 
			
		||||
		found bool
 | 
			
		||||
@@ -84,20 +84,20 @@ func issueIndexPatternProcessor(ctx *RenderContext, node *html.Node) {
 | 
			
		||||
	next := node.NextSibling
 | 
			
		||||
 | 
			
		||||
	for node != nil && node != next {
 | 
			
		||||
		_, hasExtTrackFormat := ctx.Metas["format"]
 | 
			
		||||
		_, hasExtTrackFormat := ctx.RenderOptions.Metas["format"]
 | 
			
		||||
 | 
			
		||||
		// Repos with external issue trackers might still need to reference local PRs
 | 
			
		||||
		// We need to concern with the first one that shows up in the text, whichever it is
 | 
			
		||||
		isNumericStyle := ctx.Metas["style"] == "" || ctx.Metas["style"] == IssueNameStyleNumeric
 | 
			
		||||
		isNumericStyle := ctx.RenderOptions.Metas["style"] == "" || ctx.RenderOptions.Metas["style"] == IssueNameStyleNumeric
 | 
			
		||||
		foundNumeric, refNumeric := references.FindRenderizableReferenceNumeric(node.Data, hasExtTrackFormat && !isNumericStyle, crossLinkOnly)
 | 
			
		||||
 | 
			
		||||
		switch ctx.Metas["style"] {
 | 
			
		||||
		switch ctx.RenderOptions.Metas["style"] {
 | 
			
		||||
		case "", IssueNameStyleNumeric:
 | 
			
		||||
			found, ref = foundNumeric, refNumeric
 | 
			
		||||
		case IssueNameStyleAlphanumeric:
 | 
			
		||||
			found, ref = references.FindRenderizableReferenceAlphanumeric(node.Data)
 | 
			
		||||
		case IssueNameStyleRegexp:
 | 
			
		||||
			pattern, err := regexplru.GetCompiled(ctx.Metas["regexp"])
 | 
			
		||||
			pattern, err := regexplru.GetCompiled(ctx.RenderOptions.Metas["regexp"])
 | 
			
		||||
			if err != nil {
 | 
			
		||||
				return
 | 
			
		||||
			}
 | 
			
		||||
@@ -121,9 +121,9 @@ func issueIndexPatternProcessor(ctx *RenderContext, node *html.Node) {
 | 
			
		||||
		var link *html.Node
 | 
			
		||||
		reftext := node.Data[ref.RefLocation.Start:ref.RefLocation.End]
 | 
			
		||||
		if hasExtTrackFormat && !ref.IsPull {
 | 
			
		||||
			ctx.Metas["index"] = ref.Issue
 | 
			
		||||
			ctx.RenderOptions.Metas["index"] = ref.Issue
 | 
			
		||||
 | 
			
		||||
			res, err := vars.Expand(ctx.Metas["format"], ctx.Metas)
 | 
			
		||||
			res, err := vars.Expand(ctx.RenderOptions.Metas["format"], ctx.RenderOptions.Metas)
 | 
			
		||||
			if err != nil {
 | 
			
		||||
				// here we could just log the error and continue the rendering
 | 
			
		||||
				log.Error("unable to expand template vars for ref %s, err: %v", ref.Issue, err)
 | 
			
		||||
@@ -136,9 +136,9 @@ func issueIndexPatternProcessor(ctx *RenderContext, node *html.Node) {
 | 
			
		||||
			// Gitea will redirect on click as appropriate.
 | 
			
		||||
			issuePath := util.Iif(ref.IsPull, "pulls", "issues")
 | 
			
		||||
			if ref.Owner == "" {
 | 
			
		||||
				link = createLink(ctx, util.URLJoin(ctx.Links.Prefix(), ctx.Metas["user"], ctx.Metas["repo"], issuePath, ref.Issue), reftext, "ref-issue")
 | 
			
		||||
				link = createLink(ctx, util.URLJoin(ctx.RenderOptions.Links.Prefix(), ctx.RenderOptions.Metas["user"], ctx.RenderOptions.Metas["repo"], issuePath, ref.Issue), reftext, "ref-issue")
 | 
			
		||||
			} else {
 | 
			
		||||
				link = createLink(ctx, util.URLJoin(ctx.Links.Prefix(), ref.Owner, ref.Name, issuePath, ref.Issue), reftext, "ref-issue")
 | 
			
		||||
				link = createLink(ctx, util.URLJoin(ctx.RenderOptions.Links.Prefix(), ref.Owner, ref.Name, issuePath, ref.Issue), reftext, "ref-issue")
 | 
			
		||||
			}
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
@@ -177,7 +177,7 @@ func commitCrossReferencePatternProcessor(ctx *RenderContext, node *html.Node) {
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		reftext := ref.Owner + "/" + ref.Name + "@" + base.ShortSha(ref.CommitSha)
 | 
			
		||||
		link := createLink(ctx, util.URLJoin(ctx.Links.Prefix(), ref.Owner, ref.Name, "commit", ref.CommitSha), reftext, "commit")
 | 
			
		||||
		link := createLink(ctx, util.URLJoin(ctx.RenderOptions.Links.Prefix(), ref.Owner, ref.Name, "commit", ref.CommitSha), reftext, "commit")
 | 
			
		||||
 | 
			
		||||
		replaceContent(node, ref.RefLocation.Start, ref.RefLocation.End, link)
 | 
			
		||||
		node = node.NextSibling.NextSibling
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user