aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorEarl Warren <109468362+earl-warren@users.noreply.github.com>2023-07-27 16:15:31 +0200
committerGitHub <noreply@github.com>2023-07-27 14:15:31 +0000
commiteaea530d6bc84b23e6ff14ff8c2a74aa3b67ecd0 (patch)
tree9ee6346b7a2f8832b5c1ba37d2d9b969238ec537
parent16afe4f63181a68565785c04885ed7d38b408fa9 (diff)
downloadgitea-eaea530d6bc84b23e6ff14ff8c2a74aa3b67ecd0.tar.gz
gitea-eaea530d6bc84b23e6ff14ff8c2a74aa3b67ecd0.zip
Render plaintext task list items for markdown files (#26186)
- The library that's being used for org-mode, [doesn't render the status of list items](https://github.com/niklasfasching/go-org/issues/63). - Add a modified version of the proposed CSS snippet to still display the status for the list items. The alternative was parsing HTML and transforming it, which is too complicated for this small task. - Resolves https://codeberg.org/Codeberg/Community/issues/1099 (cherry picked from commit 9753c7e4b8490b8f1e3d19cb06187503b88afb88) Refs: https://codeberg.org/forgejo/forgejo/pulls/1071 Co-authored-by: Gusted <postmaster@gusted.xyz>
-rw-r--r--modules/markup/sanitizer.go3
-rw-r--r--modules/markup/sanitizer_test.go5
-rw-r--r--web_src/css/markup/content.css23
3 files changed, 31 insertions, 0 deletions
diff --git a/modules/markup/sanitizer.go b/modules/markup/sanitizer.go
index 9f97f1d5b1..48c08831f1 100644
--- a/modules/markup/sanitizer.go
+++ b/modules/markup/sanitizer.go
@@ -96,6 +96,9 @@ func createDefaultPolicy() *bluemonday.Policy {
// Allow classes for task lists
policy.AllowAttrs("class").Matching(regexp.MustCompile(`task-list-item`)).OnElements("li")
+ // Allow classes for org mode list item status.
+ policy.AllowAttrs("class").Matching(regexp.MustCompile(`^(unchecked|checked|indeterminate)$`)).OnElements("li")
+
// Allow icons
policy.AllowAttrs("class").Matching(regexp.MustCompile(`^icon(\s+[\p{L}\p{N}_-]+)+$`)).OnElements("i")
diff --git a/modules/markup/sanitizer_test.go b/modules/markup/sanitizer_test.go
index 4d85cbf9f3..0bc63ff0a7 100644
--- a/modules/markup/sanitizer_test.go
+++ b/modules/markup/sanitizer_test.go
@@ -53,6 +53,11 @@ func Test_Sanitizer(t *testing.T) {
`<p style="bad-color: red">Hello World</p>`, `<p>Hello World</p>`,
`<code style="bad-color: red">Hello World</code>`, `<code>Hello World</code>`,
+ // Org mode status of list items.
+ `<li class="checked"></li>`, `<li class="checked"></li>`,
+ `<li class="unchecked"></li>`, `<li class="unchecked"></li>`,
+ `<li class="indeterminate"></li>`, `<li class="indeterminate"></li>`,
+
// URLs
`<a href="cbthunderlink://somebase64string)">my custom URL scheme</a>`, `<a href="cbthunderlink://somebase64string)" rel="nofollow">my custom URL scheme</a>`,
`<a href="matrix:roomid/psumPMeAfzgAeQpXMG:feneas.org?action=join">my custom URL scheme</a>`, `<a href="matrix:roomid/psumPMeAfzgAeQpXMG:feneas.org?action=join" rel="nofollow">my custom URL scheme</a>`,
diff --git a/web_src/css/markup/content.css b/web_src/css/markup/content.css
index 2a645e522a..d89e02c640 100644
--- a/web_src/css/markup/content.css
+++ b/web_src/css/markup/content.css
@@ -556,3 +556,26 @@
border-top-left-radius: 0 !important;
border-top-right-radius: 0 !important;
}
+
+.file-view.markup.orgmode li.unchecked::before {
+ content: "[ ] ";
+}
+
+.file-view.markup.orgmode li.checked::before {
+ content: "[x] ";
+}
+
+.file-view.markup.orgmode li.indeterminate::before {
+ content: "[-] ";
+}
+
+/* This is only needed for <p> because they are literally acting as paragraphs,
+ * and thus having an ::before on the same line would force the paragraph to
+ * move to the next line. This can be avoided by an inline-block display that
+ * avoids that property while still having the other properties of the block
+ * display. */
+.file-view.markup.orgmode li.unchecked > p,
+.file-view.markup.orgmode li.checked > p,
+.file-view.markup.orgmode li.indeterminate > p {
+ display: inline-block;
+}