hicli/html: implement shopmuks rendering

This commit is contained in:
Tulir Asokan 2025-04-13 22:49:01 +03:00
parent eb893989bd
commit ef41c20192
6 changed files with 22 additions and 10 deletions

View file

@ -79,7 +79,7 @@ require (
gopkg.in/natefinch/lumberjack.v2 v2.2.1 // indirect
gopkg.in/warnings.v0 v0.1.2 // indirect
gopkg.in/yaml.v3 v3.0.1 // indirect
maunium.net/go/mautrix v0.23.3-0.20250405234116-e675a3c09c38 // indirect
maunium.net/go/mautrix v0.23.3-0.20250413194551-60e14d7dffa4 // indirect
mvdan.cc/xurls/v2 v2.6.0 // indirect
)

View file

@ -260,7 +260,7 @@ gopkg.in/yaml.v2 v2.2.2/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
gopkg.in/yaml.v2 v2.4.0/go.mod h1:RDklbk79AGWmwhnvt/jBztapEOGDOx6ZbXqjP6csGnQ=
gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA=
gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
maunium.net/go/mautrix v0.23.3-0.20250405234116-e675a3c09c38 h1:fIe2+kYndm3Mm/DwQ4FsODk2DjrLeEeW7tKtZjyERqM=
maunium.net/go/mautrix v0.23.3-0.20250405234116-e675a3c09c38/go.mod h1:pCYLHmo02Jauak/9VlTkbGPrBMvLXsGqTGMNOx+L2PE=
maunium.net/go/mautrix v0.23.3-0.20250413194551-60e14d7dffa4 h1:gRz3mMyRgO6O8X9Gy1QjwYlB/dbQtmuegOE0O6a3eQw=
maunium.net/go/mautrix v0.23.3-0.20250413194551-60e14d7dffa4/go.mod h1:pCYLHmo02Jauak/9VlTkbGPrBMvLXsGqTGMNOx+L2PE=
mvdan.cc/xurls/v2 v2.6.0 h1:3NTZpeTxYVWNSokW3MKeyVkz/j7uYXYiMtXRUfmjbgI=
mvdan.cc/xurls/v2 v2.6.0/go.mod h1:bCvEZ1XvdA6wDnxY7jPPjEmigDtvtvPXAD/Exa9IMSk=

2
go.mod
View file

@ -27,7 +27,7 @@ require (
golang.org/x/text v0.23.0
gopkg.in/yaml.v3 v3.0.1
maunium.net/go/mauflag v1.0.0
maunium.net/go/mautrix v0.23.3-0.20250405234116-e675a3c09c38
maunium.net/go/mautrix v0.23.3-0.20250413194551-60e14d7dffa4
mvdan.cc/xurls/v2 v2.6.0
)

4
go.sum
View file

@ -99,7 +99,7 @@ gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA=
gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
maunium.net/go/mauflag v1.0.0 h1:YiaRc0tEI3toYtJMRIfjP+jklH45uDHtT80nUamyD4M=
maunium.net/go/mauflag v1.0.0/go.mod h1:nLivPOpTpHnpzEh8jEdSL9UqO9+/KBJFmNRlwKfkPeA=
maunium.net/go/mautrix v0.23.3-0.20250405234116-e675a3c09c38 h1:fIe2+kYndm3Mm/DwQ4FsODk2DjrLeEeW7tKtZjyERqM=
maunium.net/go/mautrix v0.23.3-0.20250405234116-e675a3c09c38/go.mod h1:pCYLHmo02Jauak/9VlTkbGPrBMvLXsGqTGMNOx+L2PE=
maunium.net/go/mautrix v0.23.3-0.20250413194551-60e14d7dffa4 h1:gRz3mMyRgO6O8X9Gy1QjwYlB/dbQtmuegOE0O6a3eQw=
maunium.net/go/mautrix v0.23.3-0.20250413194551-60e14d7dffa4/go.mod h1:pCYLHmo02Jauak/9VlTkbGPrBMvLXsGqTGMNOx+L2PE=
mvdan.cc/xurls/v2 v2.6.0 h1:3NTZpeTxYVWNSokW3MKeyVkz/j7uYXYiMtXRUfmjbgI=
mvdan.cc/xurls/v2 v2.6.0/go.mod h1:bCvEZ1XvdA6wDnxY7jPPjEmigDtvtvPXAD/Exa9IMSk=

View file

@ -33,7 +33,7 @@ func tagIsAllowed(tag atom.Atom) bool {
atom.A, atom.Ul, atom.Ol, atom.Sup, atom.Sub, atom.Li, atom.B, atom.I, atom.U, atom.Strong,
atom.Em, atom.S, atom.Code, atom.Hr, atom.Br, atom.Div, atom.Table, atom.Thead, atom.Tbody,
atom.Tr, atom.Th, atom.Td, atom.Caption, atom.Pre, atom.Span, atom.Font, atom.Img,
atom.Details, atom.Summary:
atom.Details, atom.Summary, atom.Input:
return true
default:
return false
@ -42,7 +42,7 @@ func tagIsAllowed(tag atom.Atom) bool {
func isSelfClosing(tag atom.Atom) bool {
switch tag {
case atom.Img, atom.Br, atom.Hr:
case atom.Img, atom.Br, atom.Hr, atom.Input:
return true
default:
return false
@ -580,6 +580,17 @@ Loop:
}
case atom.Code:
built.WriteString(`<code class="hicli-inline-code"`)
case atom.Input:
inputType, ok := getAttribute(token.Attr, "type")
if !ok || inputType != "checkbox" {
continue
}
_, checked := getAttribute(token.Attr, "checked")
// TODO allow checking checkboxes on own events
built.WriteString(`<input type="checkbox" class="hicli-checkbox" disabled`)
if checked {
built.WriteString(" checked")
}
default:
built.WriteByte('<')
built.WriteString(token.Data)

View file

@ -16,6 +16,7 @@ import (
"github.com/rs/zerolog"
"github.com/yuin/goldmark"
"github.com/yuin/goldmark/extension"
"go.mau.fi/util/jsontime"
"go.mau.fi/util/ptr"
"maunium.net/go/mautrix"
@ -30,8 +31,8 @@ import (
)
var (
rainbowWithHTML = goldmark.New(format.Extensions, goldmark.WithExtensions(mdext.Math, mdext.CustomEmoji), format.HTMLOptions, goldmark.WithExtensions(rainbow.Extension))
defaultNoHTML = goldmark.New(format.Extensions, goldmark.WithExtensions(mdext.Math, mdext.CustomEmoji, mdext.EscapeHTML), format.HTMLOptions)
rainbowWithHTML = goldmark.New(format.Extensions, goldmark.WithExtensions(mdext.Math, mdext.CustomEmoji, extension.TaskList), format.HTMLOptions, goldmark.WithExtensions(rainbow.Extension))
defaultNoHTML = goldmark.New(format.Extensions, goldmark.WithExtensions(mdext.Math, mdext.CustomEmoji, mdext.EscapeHTML, extension.TaskList), format.HTMLOptions)
)
var htmlToMarkdownForInput = ptr.Clone(format.MarkdownHTMLParser)