From 540e8fa43e64c9fa98fcbd3c9f012574f3bdf068 Mon Sep 17 00:00:00 2001 From: Tulir Asokan Date: Fri, 8 Nov 2024 09:39:58 +0100 Subject: [PATCH] hicli/html: fix extra newlines when copying code blocks --- pkg/hicli/html.go | 16 +++++++++++++++- pkg/hicli/sync.go | 2 +- web/src/ui/timeline/content/index.css | 9 +++++++++ 3 files changed, 25 insertions(+), 2 deletions(-) diff --git a/pkg/hicli/html.go b/pkg/hicli/html.go index d9c78d4..8eaedb1 100644 --- a/pkg/hicli/html.go +++ b/pkg/hicli/html.go @@ -625,6 +625,20 @@ var CodeBlockFormatter = chromahtml.New( chromahtml.WithLineNumbers(true), ) +type lineRewriter struct { + w *strings.Builder +} + +var lineNumberRewriter = regexp.MustCompile(`(\s*\d+)`) +var lineNumberReplacement = []byte(``) + +func (lr *lineRewriter) Write(p []byte) (n int, err error) { + n = len(p) + p = lineNumberRewriter.ReplaceAll(p, lineNumberReplacement) + lr.w.Write(p) + return +} + func writeCodeBlock(w *strings.Builder, language string, block *strings.Builder) { lexer := lexers.Get(language) if lexer == nil { @@ -642,7 +656,7 @@ func writeCodeBlock(w *strings.Builder, language string, block *strings.Builder) w.WriteString("") return } - err = CodeBlockFormatter.Format(w, styles.Fallback, iter) + err = CodeBlockFormatter.Format(&lineRewriter{w}, styles.Fallback, iter) if err != nil { // This should never fail panic(err) diff --git a/pkg/hicli/sync.go b/pkg/hicli/sync.go index 957dc0f..15d0852 100644 --- a/pkg/hicli/sync.go +++ b/pkg/hicli/sync.go @@ -430,7 +430,7 @@ func (h *HiClient) calculateLocalContent(ctx context.Context, dbEvt *database.Ev return nil, nil } -const CurrentHTMLSanitizerVersion = 6 +const CurrentHTMLSanitizerVersion = 7 func (h *HiClient) ReprocessExistingEvent(ctx context.Context, evt *database.Event) { if (evt.Type != event.EventMessage.Type && evt.DecryptedType != event.EventMessage.Type) || diff --git a/web/src/ui/timeline/content/index.css b/web/src/ui/timeline/content/index.css index 7552e5d..b923f1a 100644 --- a/web/src/ui/timeline/content/index.css +++ b/web/src/ui/timeline/content/index.css @@ -113,6 +113,15 @@ div.html-body { &.chroma { background-color: var(--codeblock-background-color); + + span.line > span.ln { + -webkit-user-select: initial; + user-select: initial; + + &::before { + content: attr(data-linenum); + } + } } }