pico
created pr with
15.1
added 15.2
1: 866976a = 1: 866976a feat(prose): live journal
-: ------- > 2: b82b2f7 chore: diff in post
cmds
checkout latest patchset:
ssh pr.pico.sh print 15 | git am -3checkout any patchset in a patch request:
ssh pr.pico.sh print 15.[rev] | git am -3add changes to patch request:
git format-patch main --stdout | ssh pr.pico.sh pr add 15
Patchset
15.2
chore: diff in post
Eric Bower
2024-08-01T15:29:31ZSemantic diff summary
1 added,
7 modified,
0 signature changed,
0 removed
across 4 analyzed files
(1 file skipped: unsupported file type)
+1
-0
filehandlers/post_handler.go
#
+11
-0
prose/api.go
#
| ... | ... | @@ -399,6 +400,7 @@ func postHandler(w http.ResponseWriter, r *http.Request) { | |
| 399 | 400 | favicon = readmeParsed.Favicon | |
| 400 | 401 | } | |
| 401 | 402 | ||
| 403 | + | diff := "" | |
| 402 | 404 | post, err := dbpool.FindPostWithSlug(slug, user.ID, cfg.Space) | |
| 403 | 405 | if err == nil { | |
| 404 | 406 | parsedText, err := shared.ParseText(post.Text) |
| ... | ... | @@ -414,6 +416,14 @@ func postHandler(w http.ResponseWriter, r *http.Request) { | |
| 414 | 416 | ogImageCard = parsedText.ImageCard | |
| 415 | 417 | } | |
| 416 | 418 | ||
| 419 | + | // if parsedText.Live { | |
| 420 | + | if post.Data.Diff != "" { | |
| 421 | + | str := "```diff\n" + post.Data.Diff + "\n```" | |
| 422 | + | diffParsed, _ := shared.ParseText(str) | |
| 423 | + | diff = diffParsed.Html | |
| 424 | + | } | |
| 425 | + | // } | |
| 426 | + | ||
| 417 | 427 | // track visit | |
| 418 | 428 | view, err := shared.AnalyticsVisitFromRequest(r, user.ID, cfg.Secret) | |
| 419 | 429 | if err == nil { |
+8
-1
prose/html/post.page.tmpl
#
| ... | ... | @@ -62,9 +62,16 @@ | |
| 62 | 62 | </div> | |
| 63 | 63 | </header> | |
| 64 | 64 | <main> | |
| 65 | + | {{if .Diff}} | |
| 66 | + | <details> | |
| 67 | + | <summary>diff</summary> | |
| 68 | + | <div class="md">{{.Diff}}</div> | |
| 69 | + | </details> | |
| 70 | + | {{end}} | |
| 71 | + | ||
| 65 | 72 | <article class="md"> | |
| 66 | 73 | {{.Contents}} | |
| 67 | - | <div id="post-footer">{{.Footer}}</div> | |
| 74 | + | <div id="post-footer" class="box">{{.Footer}}</div> | |
| 68 | 75 | </article> | |
| 69 | 76 | </main> | |
| 70 | 77 | {{template "footer" .}} |
+28
-3
prose/scp_hooks.go
#
| ... | ... | @@ -47,6 +48,26 @@ func (p *MarkdownHooks) FileValidate(s ssh.Session, data *filehandlers.PostMetaD | |
| 47 | 48 | return true, nil | |
| 48 | 49 | } | |
| 49 | 50 | ||
| 51 | + | func diffText(diffs []diffmatchpatch.Diff) string { | |
| 52 | + | var buff bytes.Buffer | |
| 53 | + | for _, diff := range diffs { | |
| 54 | + | text := diff.Text | |
| 55 | + | ||
| 56 | + | switch diff.Type { | |
| 57 | + | case diffmatchpatch.DiffInsert: | |
| 58 | + | _, _ = buff.WriteString("+") | |
| 59 | + | _, _ = buff.WriteString(text) | |
| 60 | + | case diffmatchpatch.DiffDelete: | |
| 61 | + | _, _ = buff.WriteString("-") | |
| 62 | + | _, _ = buff.WriteString(text) | |
| 63 | + | case diffmatchpatch.DiffEqual: | |
| 64 | + | _, _ = buff.WriteString(text) | |
| 65 | + | } | |
| 66 | + | } | |
| 67 | + | ||
| 68 | + | return buff.String() | |
| 69 | + | } | |
| 70 | + | ||
| 50 | 71 | func (p *MarkdownHooks) FileMeta(s ssh.Session, data *filehandlers.PostMetaData) error { | |
| 51 | 72 | parsedText, err := shared.ParseText(data.Text) | |
| 52 | 73 | if err != nil { |
| ... | ... | @@ -63,9 +84,13 @@ func (p *MarkdownHooks) FileMeta(s ssh.Session, data *filehandlers.PostMetaData) | |
| 63 | 84 | data.Tags = parsedText.Tags | |
| 64 | 85 | data.Description = parsedText.Description | |
| 65 | 86 | ||
| 66 | - | dmp := diffmatchpatch.New() | |
| 67 | - | diffs := dmp.DiffMain(data.Cur.Text, data.Text, false) | |
| 68 | - | data.Data.Diff = dmp.DiffPrettyText(diffs) | |
| 87 | + | if data.Cur.Text == data.Text { | |
| 88 | + | } else { | |
| 89 | + | dmp := diffmatchpatch.New() | |
| 90 | + | diffs := dmp.DiffMain(data.Cur.Text, data.Text, false) | |
| 91 | + | fmt.Println(diffs) | |
| 92 | + | data.Data.Diff = diffText(diffs) | |
| 93 | + | } | |
| 69 | 94 | ||
| 70 | 95 | if parsedText.PublishAt != nil && !parsedText.PublishAt.IsZero() { | |
| 71 | 96 | data.PublishAt = parsedText.MetaData.PublishAt |