diff options
author | Mai-Lapyst <mai-lapyst@noreply.codeberg.org> | 2024-04-19 23:54:46 +0200 |
---|---|---|
committer | Mai-Lapyst <mai-lapyst@noreply.codeberg.org> | 2024-04-19 23:54:46 +0200 |
commit | acfae43253d4f0bb637552bfab7d6fbc57013ed9 (patch) | |
tree | 8df505e520cc48800efbf076c9e647617d727070 | |
parent | Fix issue where rendering stops after the first invalid parmalink (diff) | |
download | forgejo-acfae43253d4f0bb637552bfab7d6fbc57013ed9.tar.xz forgejo-acfae43253d4f0bb637552bfab7d6fbc57013ed9.zip |
Fix panic where now a third link breaks everything
-rw-r--r-- | modules/markup/html.go | 5 | ||||
-rw-r--r-- | modules/markup/html_test.go | 81 |
2 files changed, 84 insertions, 2 deletions
diff --git a/modules/markup/html.go b/modules/markup/html.go index 8851558286..b4fd008aa7 100644 --- a/modules/markup/html.go +++ b/modules/markup/html.go @@ -1086,7 +1086,8 @@ func filePreviewPatternProcessor(ctx *RenderContext, node *html.Node) { // Specialized version of replaceContent, so the parent paragraph element is not destroyed from our div before := node.Data[:(preview.start - offset)] after := node.Data[(preview.end - offset):] - offset += preview.end - 3 + afterPrefix := "<p>" + offset = preview.end - len(afterPrefix) node.Data = before nextSibling := node.NextSibling node.Parent.InsertBefore(&html.Node{ @@ -1096,7 +1097,7 @@ func filePreviewPatternProcessor(ctx *RenderContext, node *html.Node) { node.Parent.InsertBefore(previewNode, nextSibling) afterNode := &html.Node{ Type: html.RawNode, - Data: "<p>" + after, + Data: afterPrefix + after, } node.Parent.InsertBefore(afterNode, nextSibling) node = afterNode diff --git a/modules/markup/html_test.go b/modules/markup/html_test.go index 1b8a92e51f..a1a99c1a7f 100644 --- a/modules/markup/html_test.go +++ b/modules/markup/html_test.go @@ -917,5 +917,86 @@ func TestRender_FilePreview(t *testing.T) { `<p></p>`, localMetas, ) + + testRender( + "first "+commitFilePreview+" second "+commitFilePreview+" third "+commitFilePreview, + `<p>first </p>`+ + `<div class="file-preview-box">`+ + `<div class="header">`+ + `<div>`+ + `<a href="http://localhost:3000/gogits/gogs/src/commit/190d9492934af498c3f669d6a2431dc5459e5b20/path/to/file.go#L2-L3" class="muted" rel="nofollow">path/to/file.go</a>`+ + `</div>`+ + `<span class="text small grey">`+ + `Lines 2 to 3 in <a href="http://localhost:3000/gogits/gogs/src/commit/190d9492934af498c3f669d6a2431dc5459e5b20" class="text black" rel="nofollow">190d949</a>`+ + `</span>`+ + `</div>`+ + `<div class="ui table">`+ + `<table class="file-preview">`+ + `<tbody>`+ + `<tr>`+ + `<td class="lines-num"><span data-line-number="2"></span></td>`+ + `<td class="lines-code chroma"><code class="code-inner"><span class="nx">B</span>`+"\n"+`</code></td>`+ + `</tr>`+ + `<tr>`+ + `<td class="lines-num"><span data-line-number="3"></span></td>`+ + `<td class="lines-code chroma"><code class="code-inner"><span class="nx">C</span>`+"\n"+`</code></td>`+ + `</tr>`+ + `</tbody>`+ + `</table>`+ + `</div>`+ + `</div>`+ + `<p> second </p>`+ + `<div class="file-preview-box">`+ + `<div class="header">`+ + `<div>`+ + `<a href="http://localhost:3000/gogits/gogs/src/commit/190d9492934af498c3f669d6a2431dc5459e5b20/path/to/file.go#L2-L3" class="muted" rel="nofollow">path/to/file.go</a>`+ + `</div>`+ + `<span class="text small grey">`+ + `Lines 2 to 3 in <a href="http://localhost:3000/gogits/gogs/src/commit/190d9492934af498c3f669d6a2431dc5459e5b20" class="text black" rel="nofollow">190d949</a>`+ + `</span>`+ + `</div>`+ + `<div class="ui table">`+ + `<table class="file-preview">`+ + `<tbody>`+ + `<tr>`+ + `<td class="lines-num"><span data-line-number="2"></span></td>`+ + `<td class="lines-code chroma"><code class="code-inner"><span class="nx">B</span>`+"\n"+`</code></td>`+ + `</tr>`+ + `<tr>`+ + `<td class="lines-num"><span data-line-number="3"></span></td>`+ + `<td class="lines-code chroma"><code class="code-inner"><span class="nx">C</span>`+"\n"+`</code></td>`+ + `</tr>`+ + `</tbody>`+ + `</table>`+ + `</div>`+ + `</div>`+ + `<p> third </p>`+ + `<div class="file-preview-box">`+ + `<div class="header">`+ + `<div>`+ + `<a href="http://localhost:3000/gogits/gogs/src/commit/190d9492934af498c3f669d6a2431dc5459e5b20/path/to/file.go#L2-L3" class="muted" rel="nofollow">path/to/file.go</a>`+ + `</div>`+ + `<span class="text small grey">`+ + `Lines 2 to 3 in <a href="http://localhost:3000/gogits/gogs/src/commit/190d9492934af498c3f669d6a2431dc5459e5b20" class="text black" rel="nofollow">190d949</a>`+ + `</span>`+ + `</div>`+ + `<div class="ui table">`+ + `<table class="file-preview">`+ + `<tbody>`+ + `<tr>`+ + `<td class="lines-num"><span data-line-number="2"></span></td>`+ + `<td class="lines-code chroma"><code class="code-inner"><span class="nx">B</span>`+"\n"+`</code></td>`+ + `</tr>`+ + `<tr>`+ + `<td class="lines-num"><span data-line-number="3"></span></td>`+ + `<td class="lines-code chroma"><code class="code-inner"><span class="nx">C</span>`+"\n"+`</code></td>`+ + `</tr>`+ + `</tbody>`+ + `</table>`+ + `</div>`+ + `</div>`+ + `<p></p>`, + localMetas, + ) }) } |