+20
-1
appview/pages/markup/markdown.go
+20
-1
appview/pages/markup/markdown.go
···
5
5
"bytes"
6
6
"fmt"
7
7
"io"
8
+
"maps"
8
9
"net/url"
9
10
"path"
10
11
"regexp"
12
+
"slices"
11
13
"strings"
12
14
15
+
"github.com/alecthomas/chroma/v2"
16
+
chromahtml "github.com/alecthomas/chroma/v2/formatters/html"
17
+
"github.com/alecthomas/chroma/v2/styles"
13
18
"github.com/microcosm-cc/bluemonday"
14
19
"github.com/yuin/goldmark"
20
+
highlighting "github.com/yuin/goldmark-highlighting/v2"
15
21
"github.com/yuin/goldmark/ast"
16
22
"github.com/yuin/goldmark/extension"
17
23
"github.com/yuin/goldmark/parser"
···
50
56
51
57
func (rctx *RenderContext) RenderMarkdown(source string) string {
52
58
md := goldmark.New(
53
-
goldmark.WithExtensions(extension.GFM),
59
+
goldmark.WithExtensions(
60
+
extension.GFM,
61
+
highlighting.NewHighlighting(
62
+
highlighting.WithFormatOptions(
63
+
chromahtml.Standalone(false),
64
+
chromahtml.WithClasses(true),
65
+
),
66
+
highlighting.WithCustomStyle(styles.Get("catppuccin-latte")),
67
+
),
68
+
),
54
69
goldmark.WithParserOptions(
55
70
parser.WithAutoHeadingID(),
56
71
),
···
201
216
// checkboxes
202
217
policy.AllowAttrs("type").Matching(regexp.MustCompile(`^checkbox$`)).OnElements("input")
203
218
policy.AllowAttrs("checked", "disabled", "data-source-position").OnElements("input")
219
+
220
+
// for code blocks
221
+
policy.AllowAttrs("class").Matching(regexp.MustCompile(`chroma`)).OnElements("pre")
222
+
policy.AllowAttrs("class").Matching(regexp.MustCompile(strings.Join(slices.Collect(maps.Values(chroma.StandardTypes)), "|"))).OnElements("span")
204
223
205
224
// centering content
206
225
policy.AllowElements("center")
+3
-2
go.mod
+3
-2
go.mod
···
22
22
github.com/go-enry/go-enry/v2 v2.9.2
23
23
github.com/go-git/go-git/v5 v5.14.0
24
24
github.com/google/uuid v1.6.0
25
+
github.com/gorilla/feeds v1.2.0
25
26
github.com/gorilla/sessions v1.4.0
26
27
github.com/gorilla/websocket v1.5.4-0.20250319132907-e064f32e3674
27
28
github.com/hiddeco/sshsig v0.2.0
···
38
39
github.com/stretchr/testify v1.10.0
39
40
github.com/urfave/cli/v3 v3.3.3
40
41
github.com/whyrusleeping/cbor-gen v0.3.1
41
-
github.com/yuin/goldmark v1.4.13
42
+
github.com/yuin/goldmark v1.4.15
43
+
github.com/yuin/goldmark-highlighting/v2 v2.0.0-20230729083705-37449abec8cc
42
44
golang.org/x/crypto v0.40.0
43
45
golang.org/x/net v0.42.0
44
46
golang.org/x/sync v0.16.0
···
88
90
github.com/golang/mock v1.6.0 // indirect
89
91
github.com/google/go-querystring v1.1.0 // indirect
90
92
github.com/gorilla/css v1.0.1 // indirect
91
-
github.com/gorilla/feeds v1.2.0 // indirect
92
93
github.com/gorilla/securecookie v1.1.2 // indirect
93
94
github.com/hashicorp/errwrap v1.1.0 // indirect
94
95
github.com/hashicorp/go-cleanhttp v0.5.2 // indirect
+5
-1
go.sum
+5
-1
go.sum
···
79
79
github.com/dgryski/go-rendezvous v0.0.0-20200823014737-9f7001d12a5f/go.mod h1:cuUVRXasLTGF7a8hSLbxyZXjz+1KgoB3wDUb6vlszIc=
80
80
github.com/distribution/reference v0.6.0 h1:0IXCQ5g4/QMHHkarYzh5l+u8T3t73zM5QvfrDyIgxBk=
81
81
github.com/distribution/reference v0.6.0/go.mod h1:BbU0aIcezP1/5jX/8MP0YiH4SdvB5Y4f/wlDRiLyi3E=
82
+
github.com/dlclark/regexp2 v1.7.0/go.mod h1:DHkYz0B9wPfa6wondMfaivmHpzrQ3v9q8cnmRbL6yW8=
82
83
github.com/dlclark/regexp2 v1.11.5 h1:Q/sSnsKerHeCkc/jSTNq1oCm7KiVgUMZRDUoRu0JQZQ=
83
84
github.com/dlclark/regexp2 v1.11.5/go.mod h1:DHkYz0B9wPfa6wondMfaivmHpzrQ3v9q8cnmRbL6yW8=
84
85
github.com/docker/docker v28.2.2+incompatible h1:CjwRSksz8Yo4+RmQ339Dp/D2tGO5JxwYeqtMOEe0LDw=
···
429
430
github.com/yuin/goldmark v1.2.1/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74=
430
431
github.com/yuin/goldmark v1.3.5/go.mod h1:mwnBkeHKe2W/ZEtQ+71ViKU8L12m81fl3OWwC1Zlc8k=
431
432
github.com/yuin/goldmark v1.4.1/go.mod h1:mwnBkeHKe2W/ZEtQ+71ViKU8L12m81fl3OWwC1Zlc8k=
432
-
github.com/yuin/goldmark v1.4.13 h1:fVcFKWvrslecOb/tg+Cc05dkeYx540o0FuFt3nUVDoE=
433
433
github.com/yuin/goldmark v1.4.13/go.mod h1:6yULJ656Px+3vBD8DxQVa3kxgyrAnzto9xy5taEt/CY=
434
+
github.com/yuin/goldmark v1.4.15 h1:CFa84T0goNn/UIXYS+dmjjVxMyTAvpOmzld40N/nfK0=
435
+
github.com/yuin/goldmark v1.4.15/go.mod h1:6yULJ656Px+3vBD8DxQVa3kxgyrAnzto9xy5taEt/CY=
436
+
github.com/yuin/goldmark-highlighting/v2 v2.0.0-20230729083705-37449abec8cc h1:+IAOyRda+RLrxa1WC7umKOZRsGq4QrFFMYApOeHzQwQ=
437
+
github.com/yuin/goldmark-highlighting/v2 v2.0.0-20230729083705-37449abec8cc/go.mod h1:ovIvrum6DQJA4QsJSovrkC4saKHQVs7TvcaeO8AIl5I=
434
438
gitlab.com/yawning/secp256k1-voi v0.0.0-20230925100816-f2616030848b h1:CzigHMRySiX3drau9C6Q5CAbNIApmLdat5jPMqChvDA=
435
439
gitlab.com/yawning/secp256k1-voi v0.0.0-20230925100816-f2616030848b/go.mod h1:/y/V339mxv2sZmYYR64O07VuCpdNZqCTwO8ZcouTMI8=
436
440
gitlab.com/yawning/tuplehash v0.0.0-20230713102510-df83abbf9a02 h1:qwDnMxjkyLmAFgcfgTnfJrmYKWhHnci3GjDqcZp1M3Q=
+1
-2
input.css
+1
-2
input.css
···
146
146
/* PreWrapper */
147
147
.chroma {
148
148
color: #4c4f69;
149
-
background-color: #eff1f5;
149
+
background-color: #00000000;
150
150
}
151
151
/* Error */
152
152
.chroma .err {
···
483
483
/* PreWrapper */
484
484
.chroma {
485
485
color: #cad3f5;
486
-
background-color: #24273a;
487
486
}
488
487
/* Error */
489
488
.chroma .err {
+5
-2
nix/gomod2nix.toml
+5
-2
nix/gomod2nix.toml
···
426
426
version = "v0.3.1"
427
427
hash = "sha256-PAd8M2Z8t6rVRBII+Rg8Bz+QaJIwbW64bfyqsv31kgc="
428
428
[mod."github.com/yuin/goldmark"]
429
-
version = "v1.4.13"
430
-
hash = "sha256-GVwFKZY6moIS6I0ZGuio/WtDif+lkZRfqWS6b4AAJyI="
429
+
version = "v1.4.15"
430
+
hash = "sha256-MvSOT6dwf5hVYkIg4MnqMpsy5ZtWZ7amAE7Zo9HkEa0="
431
+
[mod."github.com/yuin/goldmark-highlighting/v2"]
432
+
version = "v2.0.0-20230729083705-37449abec8cc"
433
+
hash = "sha256-HpiwU7jIeDUAg2zOpTIiviQir8dpRPuXYh2nqFFccpg="
431
434
[mod."gitlab.com/yawning/secp256k1-voi"]
432
435
version = "v0.0.0-20230925100816-f2616030848b"
433
436
hash = "sha256-X8INg01LTg13iOuwPI3uOhPN7r01sPZtmtwJ2sudjCA="
+1
-3
tailwind.config.js
+1
-3
tailwind.config.js
···
36
36
css: {
37
37
maxWidth: "none",
38
38
pre: {
39
-
backgroundColor: colors.gray[100],
40
-
color: colors.black,
41
-
"@apply font-normal text-black bg-gray-100 dark:bg-gray-900 dark:text-gray-300 dark:border-gray-700 dark:border": {},
39
+
"@apply font-normal text-black bg-gray-100 dark:bg-gray-900 dark:text-gray-300 dark:border-gray-700 border": {},
42
40
},
43
41
code: {
44
42
"@apply font-normal font-mono p-1 rounded text-black bg-gray-100 dark:bg-gray-900 dark:text-gray-300 dark:border-gray-700": {},