diff --git a/models/repo/repo.go b/models/repo/repo.go
index 4776ff0b9ca25..68f8e16a21d58 100644
--- a/models/repo/repo.go
+++ b/models/repo/repo.go
@@ -479,6 +479,7 @@ func (repo *Repository) ComposeMetas(ctx context.Context) map[string]string {
metas := map[string]string{
"user": repo.OwnerName,
"repo": repo.Name,
+ "mode": "comment",
}
unit, err := repo.GetUnit(ctx, unit.TypeExternalTracker)
@@ -520,6 +521,7 @@ func (repo *Repository) ComposeDocumentMetas(ctx context.Context) map[string]str
for k, v := range repo.ComposeMetas(ctx) {
metas[k] = v
}
+ metas["mode"] = "document"
repo.DocumentRenderingMetas = metas
}
return repo.DocumentRenderingMetas
diff --git a/modules/markup/console/console.go b/modules/markup/console/console.go
index d991527b80f59..01653565fe297 100644
--- a/modules/markup/console/console.go
+++ b/modules/markup/console/console.go
@@ -8,6 +8,7 @@ import (
"io"
"path/filepath"
"regexp"
+ "strings"
"code.gitea.io/gitea/modules/markup"
"code.gitea.io/gitea/modules/setting"
@@ -16,6 +17,9 @@ import (
"github.com/go-enry/go-enry/v2"
)
+// MarkupName describes markup's name
+var MarkupName = "console"
+
func init() {
markup.RegisterRenderer(Renderer{})
}
@@ -25,7 +29,7 @@ type Renderer struct{}
// Name implements markup.Renderer
func (Renderer) Name() string {
- return "console"
+ return MarkupName
}
// Extensions implements markup.Renderer
@@ -63,3 +67,20 @@ func (Renderer) Render(ctx *markup.RenderContext, input io.Reader, output io.Wri
_, err = output.Write(buf)
return err
}
+
+// Render renders terminal colors to HTML with all specific handling stuff.
+func Render(ctx *markup.RenderContext, input io.Reader, output io.Writer) error {
+ if ctx.Type == "" {
+ ctx.Type = MarkupName
+ }
+ return markup.Render(ctx, input, output)
+}
+
+// RenderString renders terminal colors in string to HTML with all specific handling stuff and return string
+func RenderString(ctx *markup.RenderContext, content string) (string, error) {
+ var buf strings.Builder
+ if err := Render(ctx, strings.NewReader(content), &buf); err != nil {
+ return "", err
+ }
+ return buf.String(), nil
+}
diff --git a/modules/markup/html.go b/modules/markup/html.go
index 54c65c95d2723..e2eefefc4bafd 100644
--- a/modules/markup/html.go
+++ b/modules/markup/html.go
@@ -442,11 +442,12 @@ func createLink(href, content, class string) *html.Node {
a := &html.Node{
Type: html.ElementNode,
Data: atom.A.String(),
- Attr: []html.Attribute{{Key: "href", Val: href}},
- }
- if !RenderBehaviorForTesting.DisableInternalAttributes {
- a.Attr = append(a.Attr, html.Attribute{Key: "data-markdown-generated-content"})
+ Attr: []html.Attribute{
+ {Key: "href", Val: href},
+ {Key: "data-markdown-generated-content"},
+ },
}
+
if class != "" {
a.Attr = append(a.Attr, html.Attribute{Key: "class", Val: class})
}
diff --git a/modules/markup/html_codepreview_test.go b/modules/markup/html_codepreview_test.go
index 5054627dde6c1..a90de278f57ff 100644
--- a/modules/markup/html_codepreview_test.go
+++ b/modules/markup/html_codepreview_test.go
@@ -11,7 +11,6 @@ import (
"code.gitea.io/gitea/modules/git"
"code.gitea.io/gitea/modules/markup"
- "code.gitea.io/gitea/modules/markup/markdown"
"github.com/stretchr/testify/assert"
)
@@ -24,8 +23,8 @@ func TestRenderCodePreview(t *testing.T) {
})
test := func(input, expected string) {
buffer, err := markup.RenderString(&markup.RenderContext{
- Ctx: git.DefaultContext,
- MarkupType: markdown.MarkupName,
+ Ctx: git.DefaultContext,
+ Type: "markdown",
}, input)
assert.NoError(t, err)
assert.Equal(t, strings.TrimSpace(expected), strings.TrimSpace(buffer))
diff --git a/modules/markup/html_internal_test.go b/modules/markup/html_internal_test.go
index 2fb657f56b6ff..8f516751b08b8 100644
--- a/modules/markup/html_internal_test.go
+++ b/modules/markup/html_internal_test.go
@@ -11,7 +11,6 @@ import (
"code.gitea.io/gitea/modules/git"
"code.gitea.io/gitea/modules/setting"
- testModule "code.gitea.io/gitea/modules/test"
"code.gitea.io/gitea/modules/util"
"github.com/stretchr/testify/assert"
@@ -124,9 +123,8 @@ func TestRender_IssueIndexPattern2(t *testing.T) {
}
expectedNil := fmt.Sprintf(expectedFmt, links...)
testRenderIssueIndexPattern(t, s, expectedNil, &RenderContext{
- Ctx: git.DefaultContext,
- Metas: localMetas,
- ContentMode: RenderContentAsComment,
+ Ctx: git.DefaultContext,
+ Metas: localMetas,
})
class := "ref-issue"
@@ -139,9 +137,8 @@ func TestRender_IssueIndexPattern2(t *testing.T) {
}
expectedNum := fmt.Sprintf(expectedFmt, links...)
testRenderIssueIndexPattern(t, s, expectedNum, &RenderContext{
- Ctx: git.DefaultContext,
- Metas: numericMetas,
- ContentMode: RenderContentAsComment,
+ Ctx: git.DefaultContext,
+ Metas: numericMetas,
})
}
@@ -269,6 +266,7 @@ func TestRender_IssueIndexPattern_Document(t *testing.T) {
"user": "someUser",
"repo": "someRepo",
"style": IssueNameStyleNumeric,
+ "mode": "document",
}
testRenderIssueIndexPattern(t, "#1", "#1", &RenderContext{
@@ -318,8 +316,8 @@ func TestRender_AutoLink(t *testing.T) {
Links: Links{
Base: TestRepoURL,
},
- Metas: localMetas,
- ContentMode: RenderContentAsWiki,
+ Metas: localMetas,
+ IsWiki: true,
}, strings.NewReader(input), &buffer)
assert.Equal(t, err, nil)
assert.Equal(t, strings.TrimSpace(expected), strings.TrimSpace(buffer.String()))
@@ -342,7 +340,7 @@ func TestRender_AutoLink(t *testing.T) {
func TestRender_FullIssueURLs(t *testing.T) {
setting.AppURL = TestAppURL
- defer testModule.MockVariableValue(&RenderBehaviorForTesting.DisableInternalAttributes, true)()
+
test := func(input, expected string) {
var result strings.Builder
err := postProcess(&RenderContext{
@@ -353,7 +351,9 @@ func TestRender_FullIssueURLs(t *testing.T) {
Metas: localMetas,
}, []processor{fullIssuePatternProcessor}, strings.NewReader(input), &result)
assert.NoError(t, err)
- assert.Equal(t, expected, result.String())
+ actual := result.String()
+ actual = strings.ReplaceAll(actual, ` data-markdown-generated-content=""`, "")
+ assert.Equal(t, expected, actual)
}
test("Here is a link https://git.osgeo.org/gogs/postgis/postgis/pulls/6",
"Here is a link https://git.osgeo.org/gogs/postgis/postgis/pulls/6")
diff --git a/modules/markup/html_issue.go b/modules/markup/html_issue.go
index fa630656cef41..b6d4ed6a8e2a3 100644
--- a/modules/markup/html_issue.go
+++ b/modules/markup/html_issue.go
@@ -67,8 +67,9 @@ func issueIndexPatternProcessor(ctx *RenderContext, node *html.Node) {
return
}
- // crossLinkOnly if not comment and not wiki
- crossLinkOnly := ctx.ContentMode != RenderContentAsTitle && ctx.ContentMode != RenderContentAsComment && ctx.ContentMode != RenderContentAsWiki
+ // FIXME: the use of "mode" is quite dirty and hacky, for example: what is a "document"? how should it be rendered?
+ // The "mode" approach should be refactored to some other more clear&reliable way.
+ crossLinkOnly := ctx.Metas["mode"] == "document" && !ctx.IsWiki
var (
found bool
diff --git a/modules/markup/html_link.go b/modules/markup/html_link.go
index 30564da548a66..9350634568317 100644
--- a/modules/markup/html_link.go
+++ b/modules/markup/html_link.go
@@ -20,7 +20,7 @@ func ResolveLink(ctx *RenderContext, link, userContentAnchorPrefix string) (resu
isAnchorFragment := link != "" && link[0] == '#'
if !isAnchorFragment && !IsFullURLString(link) {
linkBase := ctx.Links.Base
- if ctx.ContentMode == RenderContentAsWiki {
+ if ctx.IsWiki {
// no need to check if the link should be resolved as a wiki link or a wiki raw link
// just use wiki link here and it will be redirected to a wiki raw link if necessary
linkBase = ctx.Links.WikiLink()
@@ -147,7 +147,7 @@ func shortLinkProcessor(ctx *RenderContext, node *html.Node) {
}
if image {
if !absoluteLink {
- link = util.URLJoin(ctx.Links.ResolveMediaLink(ctx.ContentMode == RenderContentAsWiki), link)
+ link = util.URLJoin(ctx.Links.ResolveMediaLink(ctx.IsWiki), link)
}
title := props["title"]
if title == "" {
diff --git a/modules/markup/html_node.go b/modules/markup/html_node.go
index c499854053fa2..6d784975b9849 100644
--- a/modules/markup/html_node.go
+++ b/modules/markup/html_node.go
@@ -17,7 +17,7 @@ func visitNodeImg(ctx *RenderContext, img *html.Node) (next *html.Node) {
}
if IsNonEmptyRelativePath(attr.Val) {
- attr.Val = util.URLJoin(ctx.Links.ResolveMediaLink(ctx.ContentMode == RenderContentAsWiki), attr.Val)
+ attr.Val = util.URLJoin(ctx.Links.ResolveMediaLink(ctx.IsWiki), attr.Val)
// By default, the "" tag should also be clickable,
// because frontend use `` to paste the re-scaled image into the markdown,
@@ -53,7 +53,7 @@ func visitNodeVideo(ctx *RenderContext, node *html.Node) (next *html.Node) {
continue
}
if IsNonEmptyRelativePath(attr.Val) {
- attr.Val = util.URLJoin(ctx.Links.ResolveMediaLink(ctx.ContentMode == RenderContentAsWiki), attr.Val)
+ attr.Val = util.URLJoin(ctx.Links.ResolveMediaLink(ctx.IsWiki), attr.Val)
}
attr.Val = camoHandleLink(attr.Val)
node.Attr[i] = attr
diff --git a/modules/markup/html_test.go b/modules/markup/html_test.go
index 262d0fc4dd5d1..82aded4407c2a 100644
--- a/modules/markup/html_test.go
+++ b/modules/markup/html_test.go
@@ -14,7 +14,6 @@ import (
"code.gitea.io/gitea/modules/markup"
"code.gitea.io/gitea/modules/markup/markdown"
"code.gitea.io/gitea/modules/setting"
- testModule "code.gitea.io/gitea/modules/test"
"code.gitea.io/gitea/modules/util"
"github.com/stretchr/testify/assert"
@@ -105,7 +104,7 @@ func TestRender_Commits(t *testing.T) {
func TestRender_CrossReferences(t *testing.T) {
setting.AppURL = markup.TestAppURL
- defer testModule.MockVariableValue(&markup.RenderBehaviorForTesting.DisableInternalAttributes, true)()
+
test := func(input, expected string) {
buffer, err := markup.RenderString(&markup.RenderContext{
Ctx: git.DefaultContext,
@@ -117,7 +116,9 @@ func TestRender_CrossReferences(t *testing.T) {
Metas: localMetas,
}, input)
assert.NoError(t, err)
- assert.Equal(t, strings.TrimSpace(expected), strings.TrimSpace(buffer))
+ actual := strings.TrimSpace(buffer)
+ actual = strings.ReplaceAll(actual, ` data-markdown-generated-content=""`, "")
+ assert.Equal(t, strings.TrimSpace(expected), actual)
}
test(
@@ -147,7 +148,7 @@ func TestRender_CrossReferences(t *testing.T) {
func TestRender_links(t *testing.T) {
setting.AppURL = markup.TestAppURL
- defer testModule.MockVariableValue(&markup.RenderBehaviorForTesting.DisableInternalAttributes, true)()
+
test := func(input, expected string) {
buffer, err := markup.RenderString(&markup.RenderContext{
Ctx: git.DefaultContext,
@@ -157,7 +158,9 @@ func TestRender_links(t *testing.T) {
},
}, input)
assert.NoError(t, err)
- assert.Equal(t, strings.TrimSpace(expected), strings.TrimSpace(buffer))
+ actual := strings.TrimSpace(buffer)
+ actual = strings.ReplaceAll(actual, ` data-markdown-generated-content=""`, "")
+ assert.Equal(t, strings.TrimSpace(expected), actual)
}
oldCustomURLSchemes := setting.Markdown.CustomURLSchemes
@@ -258,7 +261,7 @@ func TestRender_links(t *testing.T) {
func TestRender_email(t *testing.T) {
setting.AppURL = markup.TestAppURL
- defer testModule.MockVariableValue(&markup.RenderBehaviorForTesting.DisableInternalAttributes, true)()
+
test := func(input, expected string) {
res, err := markup.RenderString(&markup.RenderContext{
Ctx: git.DefaultContext,
@@ -268,7 +271,9 @@ func TestRender_email(t *testing.T) {
},
}, input)
assert.NoError(t, err)
- assert.Equal(t, strings.TrimSpace(expected), strings.TrimSpace(res))
+ actual := strings.TrimSpace(res)
+ actual = strings.ReplaceAll(actual, ` data-markdown-generated-content=""`, "")
+ assert.Equal(t, strings.TrimSpace(expected), actual)
}
// Text that should be turned into email link
@@ -297,10 +302,10 @@ func TestRender_email(t *testing.T) {
j.doe@example.com;
j.doe@example.com?
j.doe@example.com!`,
- `
j.doe@example.com,
-j.doe@example.com.
-j.doe@example.com;
-j.doe@example.com?
+ `
j.doe@example.com,
+j.doe@example.com.
+j.doe@example.com;
+j.doe@example.com?
j.doe@example.com!
`)
// Test that should *not* be turned into email links
@@ -413,8 +418,8 @@ func TestRender_ShortLinks(t *testing.T) {
Links: markup.Links{
Base: markup.TestRepoURL,
},
- Metas: localMetas,
- ContentMode: markup.RenderContentAsWiki,
+ Metas: localMetas,
+ IsWiki: true,
}, input)
assert.NoError(t, err)
assert.Equal(t, strings.TrimSpace(expectedWiki), strings.TrimSpace(string(buffer)))
@@ -526,10 +531,10 @@ func TestRender_ShortLinks(t *testing.T) {
func TestRender_RelativeMedias(t *testing.T) {
render := func(input string, isWiki bool, links markup.Links) string {
buffer, err := markdown.RenderString(&markup.RenderContext{
- Ctx: git.DefaultContext,
- Links: links,
- Metas: localMetas,
- ContentMode: util.Iif(isWiki, markup.RenderContentAsWiki, markup.RenderContentAsComment),
+ Ctx: git.DefaultContext,
+ Links: links,
+ Metas: localMetas,
+ IsWiki: isWiki,
}, input)
assert.NoError(t, err)
return strings.TrimSpace(string(buffer))
@@ -599,7 +604,12 @@ func Test_ParseClusterFuzz(t *testing.T) {
func TestPostProcess_RenderDocument(t *testing.T) {
setting.AppURL = markup.TestAppURL
setting.StaticURLPrefix = markup.TestAppURL // can't run standalone
- defer testModule.MockVariableValue(&markup.RenderBehaviorForTesting.DisableInternalAttributes, true)()
+
+ localMetas := map[string]string{
+ "user": "go-gitea",
+ "repo": "gitea",
+ "mode": "document",
+ }
test := func(input, expected string) {
var res strings.Builder
@@ -609,10 +619,12 @@ func TestPostProcess_RenderDocument(t *testing.T) {
AbsolutePrefix: true,
Base: "https://example.com",
},
- Metas: map[string]string{"user": "go-gitea", "repo": "gitea"},
+ Metas: localMetas,
}, strings.NewReader(input), &res)
assert.NoError(t, err)
- assert.Equal(t, strings.TrimSpace(expected), strings.TrimSpace(res.String()))
+ actual := strings.TrimSpace(res.String())
+ actual = strings.ReplaceAll(actual, ` data-markdown-generated-content=""`, "")
+ assert.Equal(t, strings.TrimSpace(expected), actual)
}
// Issue index shouldn't be post processing in a document.
diff --git a/modules/markup/markdown/goldmark.go b/modules/markup/markdown/goldmark.go
index c8488cfb50c37..0cd9dc5f30c61 100644
--- a/modules/markup/markdown/goldmark.go
+++ b/modules/markup/markdown/goldmark.go
@@ -72,12 +72,7 @@ func (g *ASTTransformer) Transform(node *ast.Document, reader text.Reader, pc pa
g.transformList(ctx, v, rc)
case *ast.Text:
if v.SoftLineBreak() && !v.HardLineBreak() {
- // TODO: this was a quite unclear part, old code: `if metas["mode"] != "document" { use comment link break setting }`
- // many places render non-comment contents with no mode=document, then these contents also use comment's hard line break setting
- // especially in many tests.
- if markup.RenderBehaviorForTesting.ForceHardLineBreak {
- v.SetHardLineBreak(true)
- } else if ctx.ContentMode == markup.RenderContentAsComment {
+ if ctx.Metas["mode"] != "document" {
v.SetHardLineBreak(setting.Markdown.EnableHardLineBreakInComments)
} else {
v.SetHardLineBreak(setting.Markdown.EnableHardLineBreakInDocuments)
diff --git a/modules/markup/markdown/markdown.go b/modules/markup/markdown/markdown.go
index 6af0deb27bb2b..db4e5706f6dda 100644
--- a/modules/markup/markdown/markdown.go
+++ b/modules/markup/markdown/markdown.go
@@ -257,7 +257,9 @@ func (Renderer) Render(ctx *markup.RenderContext, input io.Reader, output io.Wri
// Render renders Markdown to HTML with all specific handling stuff.
func Render(ctx *markup.RenderContext, input io.Reader, output io.Writer) error {
- ctx.MarkupType = MarkupName
+ if ctx.Type == "" {
+ ctx.Type = MarkupName
+ }
return markup.Render(ctx, input, output)
}
diff --git a/modules/markup/markdown/markdown_test.go b/modules/markup/markdown/markdown_test.go
index 315eed2e62e7c..ad38e7a088fbf 100644
--- a/modules/markup/markdown/markdown_test.go
+++ b/modules/markup/markdown/markdown_test.go
@@ -16,7 +16,6 @@ import (
"code.gitea.io/gitea/modules/markup/markdown"
"code.gitea.io/gitea/modules/setting"
"code.gitea.io/gitea/modules/svg"
- "code.gitea.io/gitea/modules/test"
"code.gitea.io/gitea/modules/util"
"github.com/stretchr/testify/assert"
@@ -75,7 +74,7 @@ func TestRender_StandardLinks(t *testing.T) {
Links: markup.Links{
Base: FullURL,
},
- ContentMode: markup.RenderContentAsWiki,
+ IsWiki: true,
}, input)
assert.NoError(t, err)
assert.Equal(t, strings.TrimSpace(expectedWiki), strings.TrimSpace(string(buffer)))
@@ -297,22 +296,23 @@ This PR has been generated by [Renovate Bot](https://github.com/renovatebot/reno
}
func TestTotal_RenderWiki(t *testing.T) {
- defer test.MockVariableValue(&markup.RenderBehaviorForTesting.ForceHardLineBreak, true)()
- defer test.MockVariableValue(&markup.RenderBehaviorForTesting.DisableInternalAttributes, true)()
setting.AppURL = AppURL
+
answers := testAnswers(util.URLJoin(FullURL, "wiki"), util.URLJoin(FullURL, "wiki", "raw"))
+
for i := 0; i < len(sameCases); i++ {
line, err := markdown.RenderString(&markup.RenderContext{
Ctx: git.DefaultContext,
Links: markup.Links{
Base: FullURL,
},
- Repo: newMockRepo(testRepoOwnerName, testRepoName),
- Metas: localMetas,
- ContentMode: markup.RenderContentAsWiki,
+ Repo: newMockRepo(testRepoOwnerName, testRepoName),
+ Metas: localMetas,
+ IsWiki: true,
}, sameCases[i])
assert.NoError(t, err)
- assert.Equal(t, answers[i], string(line))
+ actual := strings.ReplaceAll(string(line), ` data-markdown-generated-content=""`, "")
+ assert.Equal(t, answers[i], actual)
}
testCases := []string{
@@ -334,18 +334,19 @@ func TestTotal_RenderWiki(t *testing.T) {
Links: markup.Links{
Base: FullURL,
},
- ContentMode: markup.RenderContentAsWiki,
+ IsWiki: true,
}, testCases[i])
assert.NoError(t, err)
- assert.EqualValues(t, testCases[i+1], string(line))
+ actual := strings.ReplaceAll(string(line), ` data-markdown-generated-content=""`, "")
+ assert.EqualValues(t, testCases[i+1], actual)
}
}
func TestTotal_RenderString(t *testing.T) {
- defer test.MockVariableValue(&markup.RenderBehaviorForTesting.ForceHardLineBreak, true)()
- defer test.MockVariableValue(&markup.RenderBehaviorForTesting.DisableInternalAttributes, true)()
setting.AppURL = AppURL
+
answers := testAnswers(util.URLJoin(FullURL, "src", "master"), util.URLJoin(FullURL, "media", "master"))
+
for i := 0; i < len(sameCases); i++ {
line, err := markdown.RenderString(&markup.RenderContext{
Ctx: git.DefaultContext,
@@ -357,7 +358,8 @@ func TestTotal_RenderString(t *testing.T) {
Metas: localMetas,
}, sameCases[i])
assert.NoError(t, err)
- assert.Equal(t, answers[i], string(line))
+ actual := strings.ReplaceAll(string(line), ` data-markdown-generated-content=""`, "")
+ assert.Equal(t, answers[i], actual)
}
testCases := []string{}
@@ -426,7 +428,6 @@ func TestRenderSiblingImages_Issue12925(t *testing.T) {
expected := `
`
- defer test.MockVariableValue(&markup.RenderBehaviorForTesting.ForceHardLineBreak, true)()
res, err := markdown.RenderRawString(&markup.RenderContext{Ctx: git.DefaultContext}, testcase)
assert.NoError(t, err)
assert.Equal(t, expected, res)
@@ -995,16 +996,11 @@ space
},
}
- defer test.MockVariableValue(&markup.RenderBehaviorForTesting.ForceHardLineBreak, true)()
- defer test.MockVariableValue(&markup.RenderBehaviorForTesting.DisableInternalAttributes, true)()
for i, c := range cases {
- result, err := markdown.RenderString(&markup.RenderContext{
- Ctx: context.Background(),
- Links: c.Links,
- ContentMode: util.Iif(c.IsWiki, markup.RenderContentAsWiki, markup.RenderContentAsDefault),
- }, input)
+ result, err := markdown.RenderString(&markup.RenderContext{Ctx: context.Background(), Links: c.Links, IsWiki: c.IsWiki}, input)
assert.NoError(t, err, "Unexpected error in testcase: %v", i)
- assert.Equal(t, c.Expected, string(result), "Unexpected result in testcase %v", i)
+ actual := strings.ReplaceAll(string(result), ` data-markdown-generated-content=""`, "")
+ assert.Equal(t, c.Expected, actual, "Unexpected result in testcase %v", i)
}
}
diff --git a/modules/markup/markdown/transform_image.go b/modules/markup/markdown/transform_image.go
index 4ed4118854386..812e24f0a2bb4 100644
--- a/modules/markup/markdown/transform_image.go
+++ b/modules/markup/markdown/transform_image.go
@@ -21,7 +21,7 @@ func (g *ASTTransformer) transformImage(ctx *markup.RenderContext, v *ast.Image)
// Check if the destination is a real link
if len(v.Destination) > 0 && !markup.IsFullURLBytes(v.Destination) {
v.Destination = []byte(giteautil.URLJoin(
- ctx.Links.ResolveMediaLink(ctx.ContentMode == markup.RenderContentAsWiki),
+ ctx.Links.ResolveMediaLink(ctx.IsWiki),
strings.TrimLeft(string(v.Destination), "/"),
))
}
diff --git a/modules/markup/orgmode/orgmode.go b/modules/markup/orgmode/orgmode.go
index 6b9c9631575be..25f8d15ef4739 100644
--- a/modules/markup/orgmode/orgmode.go
+++ b/modules/markup/orgmode/orgmode.go
@@ -144,15 +144,14 @@ func (r *Writer) resolveLink(kind, link string) string {
}
base := r.Ctx.Links.Base
- isWiki := r.Ctx.ContentMode == markup.RenderContentAsWiki
- if isWiki {
+ if r.Ctx.IsWiki {
base = r.Ctx.Links.WikiLink()
} else if r.Ctx.Links.HasBranchInfo() {
base = r.Ctx.Links.SrcLink()
}
if kind == "image" || kind == "video" {
- base = r.Ctx.Links.ResolveMediaLink(isWiki)
+ base = r.Ctx.Links.ResolveMediaLink(r.Ctx.IsWiki)
}
link = util.URLJoin(base, link)
diff --git a/modules/markup/orgmode/orgmode_test.go b/modules/markup/orgmode/orgmode_test.go
index b882678c7e20e..75b60ed81f004 100644
--- a/modules/markup/orgmode/orgmode_test.go
+++ b/modules/markup/orgmode/orgmode_test.go
@@ -10,7 +10,6 @@ import (
"code.gitea.io/gitea/modules/git"
"code.gitea.io/gitea/modules/markup"
"code.gitea.io/gitea/modules/setting"
- "code.gitea.io/gitea/modules/util"
"github.com/stretchr/testify/assert"
)
@@ -27,7 +26,7 @@ func TestRender_StandardLinks(t *testing.T) {
Base: "/relative-path",
BranchPath: "branch/main",
},
- ContentMode: util.Iif(isWiki, markup.RenderContentAsWiki, markup.RenderContentAsDefault),
+ IsWiki: isWiki,
}, input)
assert.NoError(t, err)
assert.Equal(t, strings.TrimSpace(expected), strings.TrimSpace(buffer))
diff --git a/modules/markup/render.go b/modules/markup/render.go
index add50f438272a..f2ce9229af64d 100644
--- a/modules/markup/render.go
+++ b/modules/markup/render.go
@@ -5,9 +5,11 @@ package markup
import (
"context"
+ "errors"
"fmt"
"io"
"net/url"
+ "path/filepath"
"strings"
"sync"
@@ -27,44 +29,15 @@ const (
RenderMetaAsTable RenderMetaMode = "table"
)
-type RenderContentMode string
-
-const (
- RenderContentAsDefault RenderContentMode = "" // empty means "default", no special handling, maybe just a simple "document"
- RenderContentAsComment RenderContentMode = "comment"
- RenderContentAsTitle RenderContentMode = "title"
- RenderContentAsWiki RenderContentMode = "wiki"
-)
-
-var RenderBehaviorForTesting struct {
- // Markdown line break rendering has 2 default behaviors:
- // * Use hard: replace "\n" with "
" for comments, setting.Markdown.EnableHardLineBreakInComments=true
- // * Keep soft: "\n" for non-comments (a.k.a. documents), setting.Markdown.EnableHardLineBreakInDocuments=false
- // In history, there was a mess:
- // * The behavior was controlled by `Metas["mode"] != "document",
- // * However, many places render the content without setting "mode" in Metas, all these places used comment line break setting incorrectly
- ForceHardLineBreak bool
-
- // Gitea will emit some internal attributes for various purposes, these attributes don't affect rendering.
- // But there are too many hard-coded test cases, to avoid changing all of them again and again, we can disable emitting these internal attributes.
- DisableInternalAttributes bool
-}
-
// RenderContext represents a render context
type RenderContext struct {
- Ctx context.Context
- RelativePath string // relative path from tree root of the branch
-
- // eg: "orgmode", "asciicast", "console"
- // for file mode, it could be left as empty, and will be detected by file extension in RelativePath
- MarkupType string
-
- // what the content will be used for: eg: for comment or for wiki? or just render a file?
- ContentMode RenderContentMode
-
- Links Links // special link references for rendering, especially when there is a branch/tree path
- Metas map[string]string // user&repo, format&style®exp (for external issue pattern), teams&org (for mention), BranchNameSubURL(for iframe&asciicast)
- DefaultLink string // TODO: need to figure out
+ Ctx context.Context
+ RelativePath string // relative path from tree root of the branch
+ Type string
+ IsWiki bool
+ Links Links
+ Metas map[string]string // user, repo, mode(comment/document)
+ DefaultLink string
GitRepo *git.Repository
Repo gitrepo.Repository
ShaExistCache map[string]bool
@@ -104,29 +77,12 @@ func (ctx *RenderContext) AddCancel(fn func()) {
// Render renders markup file to HTML with all specific handling stuff.
func Render(ctx *RenderContext, input io.Reader, output io.Writer) error {
- if ctx.MarkupType == "" && ctx.RelativePath != "" {
- ctx.MarkupType = DetectMarkupTypeByFileName(ctx.RelativePath)
- if ctx.MarkupType == "" {
- return util.NewInvalidArgumentErrorf("unsupported file to render: %q", ctx.RelativePath)
- }
- }
-
- renderer := renderers[ctx.MarkupType]
- if renderer == nil {
- return util.NewInvalidArgumentErrorf("unsupported markup type: %q", ctx.MarkupType)
- }
-
- if ctx.RelativePath != "" {
- if externalRender, ok := renderer.(ExternalRenderer); ok && externalRender.DisplayInIFrame() {
- if !ctx.InStandalonePage {
- // for an external "DisplayInIFrame" render, it could only output its content in a standalone page
- // otherwise, a