detached 06682af

fix(mr): deleted verdict notes, split-layout note links and verdict labels

commit
06682af77afcca45e84c6bb28b8592340fef3853
author
brice · · 2026-10-19 05:58 UTC
parent
3872b20
signature
GPG VerifiedCD88F9E564E0102646FB6077A1A07C7C7C3E349D · arch-gpg Verified for the committer email
12 files · +421 -292
M docs/tokens.md +1 -1
@@ -6,7 +6,7 @@ ermite token list
66 ermite token revoke <id>
77 ```
88
9-The secret is printed once. Presets and `--scope` add up. The full scope list is in [`skills/ermite/CLI.md`](../skills/ermite/CLI.md). `mr:review` lets a token give a merge request verdict (`--approve`, `--request-changes`); the `cli` preset includes it, the `agent` preset does not. A token created before `mr:review` existed lacks it: recreate it with `--preset cli` to keep the owner's rights.
9+The secret is printed once. Presets and `--scope` add up. The full scope list is in [`skills/ermite/CLI.md`](../skills/ermite/CLI.md). `mr:review` lets a token give a merge request verdict (`--approve`, `--request-changes`); the `cli` preset includes it, the `agent` preset does not. A token created before `mr:review` existed lacks it: recreate it with `--preset cli` using the root token or from a signed-in owner web session (an old token lacking `mr:review` cannot grant it), then replace the stored CLI secret and revoke the old token to keep the owner's rights.
1010
1111 | Preset | For |
1212 |---|---|
@@ -6,7 +6,7 @@ ermite token list
6 ermite token revoke <id>6 ermite token revoke <id>
7 ```7 ```
8 8
9-The secret is printed once. Presets and `--scope` add up. The full scope list is in [`skills/ermite/CLI.md`](../skills/ermite/CLI.md). `mr:review` lets a token give a merge request verdict (`--approve`, `--request-changes`); the `cli` preset includes it, the `agent` preset does not. A token created before `mr:review` existed lacks it: recreate it with `--preset cli` to keep the owner's rights.9+The secret is printed once. Presets and `--scope` add up. The full scope list is in [`skills/ermite/CLI.md`](../skills/ermite/CLI.md). `mr:review` lets a token give a merge request verdict (`--approve`, `--request-changes`); the `cli` preset includes it, the `agent` preset does not. A token created before `mr:review` existed lacks it: recreate it with `--preset cli` using the root token or from a signed-in owner web session (an old token lacking `mr:review` cannot grant it), then replace the stored CLI secret and revoke the old token to keep the owner's rights.
10 10
11 | Preset | For |11 | Preset | For |
12 |---|---|12 |---|---|
M internal/adapters/web/jstest/mr.test.mjs +30 -0
@@ -62,3 +62,33 @@ test('quote opens the thread reply and prefills and focuses its textarea', () =>
6262 assert.equal(field.value,'> source\n\n^2 ');
6363 assert.equal(focused,true);
6464 });
65+
66+test('reveal selects the split note, including after lazy loading', async () => {
67+ const saved = globalThis.document;
68+ const savedRAF = globalThis.requestAnimationFrame;
69+ let scrolled = '';
70+ const details = {open:false};
71+ const node = id => ({id, querySelector(){return null;}, closest(){return details;}, scrollIntoView(){scrolled=id;}});
72+ const nodes = new Map([['c12',node('c12')],['c12-s',node('c12-s')]]);
73+ const ph = {dataset:{notes:'c12'}};
74+ globalThis.document = {
75+ querySelector: sel => sel === '#diffs' ? {dataset:{diff:'split'}} : null,
76+ querySelectorAll: () => [ph],
77+ getElementById: id => nodes.get(id),
78+ };
79+ globalThis.requestAnimationFrame = fn => fn();
80+ try {
81+ assert.equal(window.ermiteMR.reveal('c12'),false);
82+ assert.equal(scrolled,'c12-s');
83+ assert.equal(details.open,true);
84+ nodes.clear(); scrolled=''; details.open=false;
85+ assert.equal(window.ermiteMR.reveal('c12'),true);
86+ nodes.set('c12',node('c12')); nodes.set('c12-s',node('c12-s'));
87+ await Promise.resolve();
88+ assert.equal(scrolled,'c12-s');
89+ assert.equal(details.open,true);
90+ } finally {
91+ globalThis.document=saved;
92+ globalThis.requestAnimationFrame=savedRAF;
93+ }
94+});
@@ -62,3 +62,33 @@ test('quote opens the thread reply and prefills and focuses its textarea', () =>
62 assert.equal(field.value,'> source\n\n^2 ');62 assert.equal(field.value,'> source\n\n^2 ');
63 assert.equal(focused,true);63 assert.equal(focused,true);
64 });64 });
65+
66+test('reveal selects the split note, including after lazy loading', async () => {
67+ const saved = globalThis.document;
68+ const savedRAF = globalThis.requestAnimationFrame;
69+ let scrolled = '';
70+ const details = {open:false};
71+ const node = id => ({id, querySelector(){return null;}, closest(){return details;}, scrollIntoView(){scrolled=id;}});
72+ const nodes = new Map([['c12',node('c12')],['c12-s',node('c12-s')]]);
73+ const ph = {dataset:{notes:'c12'}};
74+ globalThis.document = {
75+ querySelector: sel => sel === '#diffs' ? {dataset:{diff:'split'}} : null,
76+ querySelectorAll: () => [ph],
77+ getElementById: id => nodes.get(id),
78+ };
79+ globalThis.requestAnimationFrame = fn => fn();
80+ try {
81+ assert.equal(window.ermiteMR.reveal('c12'),false);
82+ assert.equal(scrolled,'c12-s');
83+ assert.equal(details.open,true);
84+ nodes.clear(); scrolled=''; details.open=false;
85+ assert.equal(window.ermiteMR.reveal('c12'),true);
86+ nodes.set('c12',node('c12')); nodes.set('c12-s',node('c12-s'));
87+ await Promise.resolve();
88+ assert.equal(scrolled,'c12-s');
89+ assert.equal(details.open,true);
90+ } finally {
91+ globalThis.document=saved;
92+ globalThis.requestAnimationFrame=savedRAF;
93+ }
94+});
M internal/adapters/web/mr.go +15 -11
@@ -106,7 +106,7 @@ type CommentView struct {
106106 When string
107107 WhenAt string
108108 Abs string
109- Body template.HTML
109+ Body, BodySplit template.HTML
110110 Replies []CommentView
111111 Edited, Deleted bool
112112 Verdict, Range, Quote string
@@ -796,7 +796,7 @@ func (s *Server) placeComments(p *MRPage, repo string, n int64, comments []domai
796796 exists := noteIDs(comments)
797797 children := map[int64][]domain.Comment{}
798798 for _, c := range comments {
799- if c.ReplyTo != 0 {
799+ if c.ReplyTo != 0 && !c.Deleted {
800800 children[c.ReplyTo] = append(children[c.ReplyTo], c)
801801 }
802802 if !c.Deleted {
@@ -806,14 +806,18 @@ func (s *Server) placeComments(p *MRPage, repo string, n int64, comments []domai
806806 p.NUnresolved++
807807 }
808808 }
809- var view func(domain.Comment) CommentView
810- view = func(c domain.Comment) CommentView {
809+ var view func(domain.Comment, bool) CommentView
810+ view = func(c domain.Comment, replyable bool) CommentView {
811811 cid := strconv.FormatInt(c.ID, 10)
812812 body, err := s.md.renderNote([]byte(c.Text.String()), repo, head, "c"+cid+"-", exists)
813813 if err != nil {
814814 body = ""
815815 }
816- v := CommentView{ID: cid, Author: s.who(c.Author), Body: body, Resolved: c.Resolved, Deleted: c.Deleted, Edited: !c.EditedAt.IsZero(), Verdict: c.Verdict.String(), Outdated: !c.CommitID.IsZero() && c.CommitID.String() != head}
816+ bodySplit, err := s.md.renderNote([]byte(c.Text.String()), repo, head, "c"+cid+"-s-", exists)
817+ if err != nil {
818+ bodySplit = ""
819+ }
820+ v := CommentView{BodySplit: bodySplit, ID: cid, Author: s.who(c.Author), Body: body, Resolved: c.Resolved, Deleted: c.Deleted, Edited: !c.EditedAt.IsZero(), Verdict: c.Verdict.String(), Outdated: !c.CommitID.IsZero() && c.CommitID.String() != head}
817821 v.When, v.WhenAt = whenOf(now, c.CreatedAt)
818822 if !c.CreatedAt.IsZero() {
819823 v.Abs = absolute(c.CreatedAt)
@@ -827,7 +831,9 @@ func (s *Server) placeComments(p *MRPage, repo string, n int64, comments []domai
827831 if c.ReplyTo != 0 {
828832 root = strconv.FormatInt(c.ReplyTo, 10)
829833 }
830- v.Quote = "> " + strings.ReplaceAll(c.Text.String(), "\n", "\n> ") + "\n\n^" + cid + " "
834+ if replyable {
835+ v.Quote = "> " + strings.ReplaceAll(c.Text.String(), "\n", "\n> ") + "\n\n^" + cid + " "
836+ }
831837 if c.ReplyTo == 0 {
832838 v.Reply = &CommentForm{ID: "reply-" + cid, Action: mrHref(repo, n, "comments"), Title: "Reply", ReplyTo: root, From: from}
833839 }
@@ -837,18 +843,16 @@ func (s *Server) placeComments(p *MRPage, repo string, n int64, comments []domai
837843 }
838844 }
839845 for _, reply := range children[c.ID] {
840- if !reply.Deleted {
841- v.Replies = append(v.Replies, view(reply))
842- }
846+ v.Replies = append(v.Replies, view(reply, replyable))
843847 }
844848 return v
845849 }
846850 for _, c := range comments {
847- if c.ReplyTo != 0 || c.Deleted && len(children[c.ID]) == 0 {
851+ if c.ReplyTo != 0 || c.Deleted && c.Verdict == domain.VerdictNone && len(children[c.ID]) == 0 {
848852 continue
849853 }
850854 cid := strconv.FormatInt(c.ID, 10)
851- v := view(c)
855+ v := view(c, canWrite && !c.Deleted)
852856 general := c.Path == ""
853857 fi, listed := fileAt[c.Path]
854858 if !general && listed && p.Files[fi].Lazy {
@@ -106,7 +106,7 @@ type CommentView struct {
106 When string106 When string
107 WhenAt string107 WhenAt string
108 Abs string108 Abs string
109- Body template.HTML109+ Body, BodySplit template.HTML
110 Replies []CommentView110 Replies []CommentView
111 Edited, Deleted bool111 Edited, Deleted bool
112 Verdict, Range, Quote string112 Verdict, Range, Quote string
@@ -796,7 +796,7 @@ func (s *Server) placeComments(p *MRPage, repo string, n int64, comments []domai
796 exists := noteIDs(comments)796 exists := noteIDs(comments)
797 children := map[int64][]domain.Comment{}797 children := map[int64][]domain.Comment{}
798 for _, c := range comments {798 for _, c := range comments {
799- if c.ReplyTo != 0 {799+ if c.ReplyTo != 0 && !c.Deleted {
800 children[c.ReplyTo] = append(children[c.ReplyTo], c)800 children[c.ReplyTo] = append(children[c.ReplyTo], c)
801 }801 }
802 if !c.Deleted {802 if !c.Deleted {
@@ -806,14 +806,18 @@ func (s *Server) placeComments(p *MRPage, repo string, n int64, comments []domai
806 p.NUnresolved++806 p.NUnresolved++
807 }807 }
808 }808 }
809- var view func(domain.Comment) CommentView809+ var view func(domain.Comment, bool) CommentView
810- view = func(c domain.Comment) CommentView {810+ view = func(c domain.Comment, replyable bool) CommentView {
811 cid := strconv.FormatInt(c.ID, 10)811 cid := strconv.FormatInt(c.ID, 10)
812 body, err := s.md.renderNote([]byte(c.Text.String()), repo, head, "c"+cid+"-", exists)812 body, err := s.md.renderNote([]byte(c.Text.String()), repo, head, "c"+cid+"-", exists)
813 if err != nil {813 if err != nil {
814 body = ""814 body = ""
815 }815 }
816- v := CommentView{ID: cid, Author: s.who(c.Author), Body: body, Resolved: c.Resolved, Deleted: c.Deleted, Edited: !c.EditedAt.IsZero(), Verdict: c.Verdict.String(), Outdated: !c.CommitID.IsZero() && c.CommitID.String() != head}816+ bodySplit, err := s.md.renderNote([]byte(c.Text.String()), repo, head, "c"+cid+"-s-", exists)
817+ if err != nil {
818+ bodySplit = ""
819+ }
820+ v := CommentView{BodySplit: bodySplit, ID: cid, Author: s.who(c.Author), Body: body, Resolved: c.Resolved, Deleted: c.Deleted, Edited: !c.EditedAt.IsZero(), Verdict: c.Verdict.String(), Outdated: !c.CommitID.IsZero() && c.CommitID.String() != head}
817 v.When, v.WhenAt = whenOf(now, c.CreatedAt)821 v.When, v.WhenAt = whenOf(now, c.CreatedAt)
818 if !c.CreatedAt.IsZero() {822 if !c.CreatedAt.IsZero() {
819 v.Abs = absolute(c.CreatedAt)823 v.Abs = absolute(c.CreatedAt)
@@ -827,7 +831,9 @@ func (s *Server) placeComments(p *MRPage, repo string, n int64, comments []domai
827 if c.ReplyTo != 0 {831 if c.ReplyTo != 0 {
828 root = strconv.FormatInt(c.ReplyTo, 10)832 root = strconv.FormatInt(c.ReplyTo, 10)
829 }833 }
830- v.Quote = "> " + strings.ReplaceAll(c.Text.String(), "\n", "\n> ") + "\n\n^" + cid + " "834+ if replyable {
835+ v.Quote = "> " + strings.ReplaceAll(c.Text.String(), "\n", "\n> ") + "\n\n^" + cid + " "
836+ }
831 if c.ReplyTo == 0 {837 if c.ReplyTo == 0 {
832 v.Reply = &CommentForm{ID: "reply-" + cid, Action: mrHref(repo, n, "comments"), Title: "Reply", ReplyTo: root, From: from}838 v.Reply = &CommentForm{ID: "reply-" + cid, Action: mrHref(repo, n, "comments"), Title: "Reply", ReplyTo: root, From: from}
833 }839 }
@@ -837,18 +843,16 @@ func (s *Server) placeComments(p *MRPage, repo string, n int64, comments []domai
837 }843 }
838 }844 }
839 for _, reply := range children[c.ID] {845 for _, reply := range children[c.ID] {
840- if !reply.Deleted {846+ v.Replies = append(v.Replies, view(reply, replyable))
841- v.Replies = append(v.Replies, view(reply))
842- }
843 }847 }
844 return v848 return v
845 }849 }
846 for _, c := range comments {850 for _, c := range comments {
847- if c.ReplyTo != 0 || c.Deleted && len(children[c.ID]) == 0 {851+ if c.ReplyTo != 0 || c.Deleted && c.Verdict == domain.VerdictNone && len(children[c.ID]) == 0 {
848 continue852 continue
849 }853 }
850 cid := strconv.FormatInt(c.ID, 10)854 cid := strconv.FormatInt(c.ID, 10)
851- v := view(c)855+ v := view(c, canWrite && !c.Deleted)
852 general := c.Path == ""856 general := c.Path == ""
853 fi, listed := fileAt[c.Path]857 fi, listed := fileAt[c.Path]
854 if !general && listed && p.Files[fi].Lazy {858 if !general && listed && p.Files[fi].Lazy {
M internal/adapters/web/mr.templ +10 -2
@@ -248,10 +248,18 @@ templ commentView(c CommentView, suffix string) {
248248 }
249249 </p>
250250 if c.Deleted {
251- <p class="mute">deleted note</p>
251+ if c.Verdict != "" {
252+ <p class="mute">text deleted</p>
253+ } else {
254+ <p class="mute">deleted note</p>
255+ }
252256 } else {
253257 <div class="c-body prose">
254- @templ.Raw(string(c.Body))
258+ if suffix == "-s" {
259+ @templ.Raw(string(c.BodySplit))
260+ } else {
261+ @templ.Raw(string(c.Body))
262+ }
255263 </div>
256264 }
257265 if c.Edited {
@@ -248,10 +248,18 @@ templ commentView(c CommentView, suffix string) {
248 }248 }
249 </p>249 </p>
250 if c.Deleted {250 if c.Deleted {
251- <p class="mute">deleted note</p>251+ if c.Verdict != "" {
252+ <p class="mute">text deleted</p>
253+ } else {
254+ <p class="mute">deleted note</p>
255+ }
252 } else {256 } else {
253 <div class="c-body prose">257 <div class="c-body prose">
254- @templ.Raw(string(c.Body))258+ if suffix == "-s" {
259+ @templ.Raw(string(c.BodySplit))
260+ } else {
261+ @templ.Raw(string(c.Body))
262+ }
255 </div>263 </div>
256 }264 }
257 if c.Edited {265 if c.Edited {
M internal/adapters/web/mr_notes_test.go +47 -0
@@ -110,3 +110,50 @@ func TestNotePosts(t *testing.T) {
110110 require.NoError(t, err)
111111 assert.Equal(t, "/demo/merge-requests/1#c2", to)
112112 }
113+
114+func TestDeletedNoteRendering(t *testing.T) {
115+ t.Parallel()
116+ text, err := domain.ParsePlainText("surviving reply")
117+ require.NoError(t, err)
118+ s := &Server{cfg: Config{Now: time.Now}, md: newMarkdown()}
119+ p := MRPage{}
120+ s.placeComments(&p, "demo", 1, []domain.Comment{
121+ {ID: 1, Author: "reviewer", Deleted: true, Verdict: domain.VerdictApprove},
122+ {ID: 2, Deleted: true},
123+ {ID: 3, ReplyTo: 2, Deleted: true},
124+ {ID: 4, Deleted: true},
125+ {ID: 5, ReplyTo: 4, Text: text},
126+ }, "", true, true, nil)
127+ require.Len(t, p.General, 2)
128+ assert.Equal(t, "1", p.General[0].ID)
129+ assert.Equal(t, "4", p.General[1].ID)
130+ var b bytes.Buffer
131+ require.NoError(t, commentView(p.General[0], "").Render(context.Background(), &b))
132+ assert.Contains(t, b.String(), `<span class="c-who">owner</span>`)
133+ assert.Contains(t, b.String(), "approve")
134+ assert.Contains(t, b.String(), "text deleted")
135+ b.Reset()
136+ require.NoError(t, commentView(p.General[1], "").Render(context.Background(), &b))
137+ assert.Contains(t, b.String(), "surviving reply")
138+ assert.NotContains(t, b.String(), "Quote")
139+ assert.NotContains(t, b.String(), "data-quote")
140+}
141+
142+func TestInlineNoteHeadingIDs(t *testing.T) {
143+ t.Parallel()
144+ text, err := domain.ParsePlainText("# H\n[jump](#h)")
145+ require.NoError(t, err)
146+ s := &Server{cfg: Config{Now: time.Now}, md: newMarkdown()}
147+ p := MRPage{Files: []DiffFile{{Key: "a", ID: "f1", Hunks: []DiffHunk{{Lines: []DiffLine{{Kind: "add", newN: 1}}}}}}}
148+ s.placeComments(&p, "demo", 1, []domain.Comment{{ID: 12, Path: "a", Side: domain.SideNew, Line: 1, Text: text}}, "", true, true, nil)
149+ notes := p.Files[0].Hunks[0].Lines[0].Notes
150+ require.Len(t, notes, 1)
151+ var b bytes.Buffer
152+ require.NoError(t, commentView(notes[0], "").Render(context.Background(), &b))
153+ require.NoError(t, commentView(notes[0], "-s").Render(context.Background(), &b))
154+ html := b.String()
155+ assert.Equal(t, 1, strings.Count(html, `id="c12-h"`))
156+ assert.Equal(t, 1, strings.Count(html, `id="c12-s-h"`))
157+ assert.Contains(t, html, `href="#c12-h"`)
158+ assert.Contains(t, html, `href="#c12-s-h"`)
159+}
@@ -110,3 +110,50 @@ func TestNotePosts(t *testing.T) {
110 require.NoError(t, err)110 require.NoError(t, err)
111 assert.Equal(t, "/demo/merge-requests/1#c2", to)111 assert.Equal(t, "/demo/merge-requests/1#c2", to)
112 }112 }
113+
114+func TestDeletedNoteRendering(t *testing.T) {
115+ t.Parallel()
116+ text, err := domain.ParsePlainText("surviving reply")
117+ require.NoError(t, err)
118+ s := &Server{cfg: Config{Now: time.Now}, md: newMarkdown()}
119+ p := MRPage{}
120+ s.placeComments(&p, "demo", 1, []domain.Comment{
121+ {ID: 1, Author: "reviewer", Deleted: true, Verdict: domain.VerdictApprove},
122+ {ID: 2, Deleted: true},
123+ {ID: 3, ReplyTo: 2, Deleted: true},
124+ {ID: 4, Deleted: true},
125+ {ID: 5, ReplyTo: 4, Text: text},
126+ }, "", true, true, nil)
127+ require.Len(t, p.General, 2)
128+ assert.Equal(t, "1", p.General[0].ID)
129+ assert.Equal(t, "4", p.General[1].ID)
130+ var b bytes.Buffer
131+ require.NoError(t, commentView(p.General[0], "").Render(context.Background(), &b))
132+ assert.Contains(t, b.String(), `<span class="c-who">owner</span>`)
133+ assert.Contains(t, b.String(), "approve")
134+ assert.Contains(t, b.String(), "text deleted")
135+ b.Reset()
136+ require.NoError(t, commentView(p.General[1], "").Render(context.Background(), &b))
137+ assert.Contains(t, b.String(), "surviving reply")
138+ assert.NotContains(t, b.String(), "Quote")
139+ assert.NotContains(t, b.String(), "data-quote")
140+}
141+
142+func TestInlineNoteHeadingIDs(t *testing.T) {
143+ t.Parallel()
144+ text, err := domain.ParsePlainText("# H\n[jump](#h)")
145+ require.NoError(t, err)
146+ s := &Server{cfg: Config{Now: time.Now}, md: newMarkdown()}
147+ p := MRPage{Files: []DiffFile{{Key: "a", ID: "f1", Hunks: []DiffHunk{{Lines: []DiffLine{{Kind: "add", newN: 1}}}}}}}
148+ s.placeComments(&p, "demo", 1, []domain.Comment{{ID: 12, Path: "a", Side: domain.SideNew, Line: 1, Text: text}}, "", true, true, nil)
149+ notes := p.Files[0].Hunks[0].Lines[0].Notes
150+ require.Len(t, notes, 1)
151+ var b bytes.Buffer
152+ require.NoError(t, commentView(notes[0], "").Render(context.Background(), &b))
153+ require.NoError(t, commentView(notes[0], "-s").Render(context.Background(), &b))
154+ html := b.String()
155+ assert.Equal(t, 1, strings.Count(html, `id="c12-h"`))
156+ assert.Equal(t, 1, strings.Count(html, `id="c12-s-h"`))
157+ assert.Contains(t, html, `href="#c12-h"`)
158+ assert.Contains(t, html, `href="#c12-s-h"`)
159+}
M internal/adapters/web/mr_templ.go +281 -267
@@ -1407,160 +1407,174 @@ func commentView(c CommentView, suffix string) templ.Component {
14071407 return templ_7745c5c3_Err
14081408 }
14091409 if c.Deleted {
1410- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 124, "<p class=\"mute\">deleted note</p>")
1411- if templ_7745c5c3_Err != nil {
1412- return templ_7745c5c3_Err
1410+ if c.Verdict != "" {
1411+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 124, "<p class=\"mute\">text deleted</p>")
1412+ if templ_7745c5c3_Err != nil {
1413+ return templ_7745c5c3_Err
1414+ }
1415+ } else {
1416+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 125, "<p class=\"mute\">deleted note</p>")
1417+ if templ_7745c5c3_Err != nil {
1418+ return templ_7745c5c3_Err
1419+ }
14131420 }
14141421 } else {
1415- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 125, "<div class=\"c-body prose\">")
1422+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 126, "<div class=\"c-body prose\">")
14161423 if templ_7745c5c3_Err != nil {
14171424 return templ_7745c5c3_Err
14181425 }
1419- templ_7745c5c3_Err = templ.Raw(string(c.Body)).Render(ctx, templ_7745c5c3_Buffer)
1420- if templ_7745c5c3_Err != nil {
1421- return templ_7745c5c3_Err
1426+ if suffix == "-s" {
1427+ templ_7745c5c3_Err = templ.Raw(string(c.BodySplit)).Render(ctx, templ_7745c5c3_Buffer)
1428+ if templ_7745c5c3_Err != nil {
1429+ return templ_7745c5c3_Err
1430+ }
1431+ } else {
1432+ templ_7745c5c3_Err = templ.Raw(string(c.Body)).Render(ctx, templ_7745c5c3_Buffer)
1433+ if templ_7745c5c3_Err != nil {
1434+ return templ_7745c5c3_Err
1435+ }
14221436 }
1423- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 126, "</div>")
1437+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 127, "</div>")
14241438 if templ_7745c5c3_Err != nil {
14251439 return templ_7745c5c3_Err
14261440 }
14271441 }
14281442 if c.Edited {
1429- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 127, "<span class=\"mute\">edited</span> ")
1443+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 128, "<span class=\"mute\">edited</span> ")
14301444 if templ_7745c5c3_Err != nil {
14311445 return templ_7745c5c3_Err
14321446 }
14331447 }
14341448 if c.Verdict != "" {
1435- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 128, "<span class=\"c-state\">")
1449+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 129, "<span class=\"c-state\">")
14361450 if templ_7745c5c3_Err != nil {
14371451 return templ_7745c5c3_Err
14381452 }
14391453 var templ_7745c5c3_Var70 string
14401454 templ_7745c5c3_Var70, templ_7745c5c3_Err = templ.JoinStringErrs(c.Verdict)
14411455 if templ_7745c5c3_Err != nil {
1442- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 261, Col: 36}
1456+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 269, Col: 36}
14431457 }
14441458 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var70))
14451459 if templ_7745c5c3_Err != nil {
14461460 return templ_7745c5c3_Err
14471461 }
1448- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 129, "</span> ")
1462+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 130, "</span> ")
14491463 if templ_7745c5c3_Err != nil {
14501464 return templ_7745c5c3_Err
14511465 }
14521466 }
14531467 if c.Range != "" {
1454- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 130, "<span class=\"mute\">")
1468+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 131, "<span class=\"mute\">")
14551469 if templ_7745c5c3_Err != nil {
14561470 return templ_7745c5c3_Err
14571471 }
14581472 var templ_7745c5c3_Var71 string
14591473 templ_7745c5c3_Var71, templ_7745c5c3_Err = templ.JoinStringErrs(c.Range)
14601474 if templ_7745c5c3_Err != nil {
1461- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 264, Col: 31}
1475+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 272, Col: 31}
14621476 }
14631477 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var71))
14641478 if templ_7745c5c3_Err != nil {
14651479 return templ_7745c5c3_Err
14661480 }
1467- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 131, "</span> ")
1481+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 132, "</span> ")
14681482 if templ_7745c5c3_Err != nil {
14691483 return templ_7745c5c3_Err
14701484 }
14711485 }
14721486 if c.Quote != "" {
1473- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 132, "<button type=\"button\" class=\"btn\" data-js data-quote=\"")
1487+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 133, "<button type=\"button\" class=\"btn\" data-js data-quote=\"")
14741488 if templ_7745c5c3_Err != nil {
14751489 return templ_7745c5c3_Err
14761490 }
14771491 var templ_7745c5c3_Var72 string
14781492 templ_7745c5c3_Var72, templ_7745c5c3_Err = templ.ResolveAttributeValue(c.Quote)
14791493 if templ_7745c5c3_Err != nil {
1480- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 267, Col: 65}
1494+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 275, Col: 65}
14811495 }
14821496 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ_7745c5c3_Var72)
14831497 if templ_7745c5c3_Err != nil {
14841498 return templ_7745c5c3_Err
14851499 }
1486- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 133, "\">Quote</button> ")
1500+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 134, "\">Quote</button> ")
14871501 if templ_7745c5c3_Err != nil {
14881502 return templ_7745c5c3_Err
14891503 }
14901504 }
14911505 if c.Edit != nil {
1492- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 134, "<details><summary>Edit</summary><form method=\"post\" action=\"")
1506+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 135, "<details><summary>Edit</summary><form method=\"post\" action=\"")
14931507 if templ_7745c5c3_Err != nil {
14941508 return templ_7745c5c3_Err
14951509 }
14961510 var templ_7745c5c3_Var73 templ.SafeURL
14971511 templ_7745c5c3_Var73, templ_7745c5c3_Err = templ.JoinURLErrs(templ.SafeURL(c.Edit.Action))
14981512 if templ_7745c5c3_Err != nil {
1499- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 270, Col: 92}
1513+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 278, Col: 92}
15001514 }
15011515 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var73))
15021516 if templ_7745c5c3_Err != nil {
15031517 return templ_7745c5c3_Err
15041518 }
1505- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 135, "\"><input type=\"hidden\" name=\"from\" value=\"")
1519+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 136, "\"><input type=\"hidden\" name=\"from\" value=\"")
15061520 if templ_7745c5c3_Err != nil {
15071521 return templ_7745c5c3_Err
15081522 }
15091523 var templ_7745c5c3_Var74 string
15101524 templ_7745c5c3_Var74, templ_7745c5c3_Err = templ.ResolveAttributeValue(itoa(c.Edit.From))
15111525 if templ_7745c5c3_Err != nil {
1512- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 270, Col: 153}
1526+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 278, Col: 153}
15131527 }
15141528 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ_7745c5c3_Var74)
15151529 if templ_7745c5c3_Err != nil {
15161530 return templ_7745c5c3_Err
15171531 }
1518- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 136, "\"><textarea name=\"text\" maxlength=\"8000\">")
1532+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 137, "\"><textarea name=\"text\" maxlength=\"8000\">")
15191533 if templ_7745c5c3_Err != nil {
15201534 return templ_7745c5c3_Err
15211535 }
15221536 var templ_7745c5c3_Var75 string
15231537 templ_7745c5c3_Var75, templ_7745c5c3_Err = templ.JoinStringErrs(c.Edit.Text)
15241538 if templ_7745c5c3_Err != nil {
1525- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 270, Col: 209}
1539+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 278, Col: 209}
15261540 }
15271541 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var75))
15281542 if templ_7745c5c3_Err != nil {
15291543 return templ_7745c5c3_Err
15301544 }
1531- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 137, "</textarea><button class=\"btn\" type=\"submit\">Save</button></form></details> ")
1545+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 138, "</textarea><button class=\"btn\" type=\"submit\">Save</button></form></details> ")
15321546 if templ_7745c5c3_Err != nil {
15331547 return templ_7745c5c3_Err
15341548 }
15351549 }
15361550 if c.Delete != nil {
1537- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 138, "<details><summary>Delete</summary><form method=\"post\" action=\"")
1551+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 139, "<details><summary>Delete</summary><form method=\"post\" action=\"")
15381552 if templ_7745c5c3_Err != nil {
15391553 return templ_7745c5c3_Err
15401554 }
15411555 var templ_7745c5c3_Var76 templ.SafeURL
15421556 templ_7745c5c3_Var76, templ_7745c5c3_Err = templ.JoinURLErrs(templ.SafeURL(c.Delete.Action))
15431557 if templ_7745c5c3_Err != nil {
1544- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 273, Col: 96}
1558+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 281, Col: 96}
15451559 }
15461560 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var76))
15471561 if templ_7745c5c3_Err != nil {
15481562 return templ_7745c5c3_Err
15491563 }
1550- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 139, "\"><input type=\"hidden\" name=\"from\" value=\"")
1564+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 140, "\"><input type=\"hidden\" name=\"from\" value=\"")
15511565 if templ_7745c5c3_Err != nil {
15521566 return templ_7745c5c3_Err
15531567 }
15541568 var templ_7745c5c3_Var77 string
15551569 templ_7745c5c3_Var77, templ_7745c5c3_Err = templ.ResolveAttributeValue(itoa(c.Delete.From))
15561570 if templ_7745c5c3_Err != nil {
1557- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 273, Col: 159}
1571+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 281, Col: 159}
15581572 }
15591573 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ_7745c5c3_Var77)
15601574 if templ_7745c5c3_Err != nil {
15611575 return templ_7745c5c3_Err
15621576 }
1563- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 140, "\"><p>Delete this note?</p><button class=\"btn\" type=\"submit\">Confirm delete</button></form></details> ")
1577+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 141, "\"><p>Delete this note?</p><button class=\"btn\" type=\"submit\">Confirm delete</button></form></details> ")
15641578 if templ_7745c5c3_Err != nil {
15651579 return templ_7745c5c3_Err
15661580 }
@@ -1572,7 +1586,7 @@ func commentView(c CommentView, suffix string) templ.Component {
15721586 }
15731587 }
15741588 if c.Reply != nil {
1575- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 141, "<details data-reply><summary>Reply</summary>")
1589+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 142, "<details data-reply><summary>Reply</summary>")
15761590 if templ_7745c5c3_Err != nil {
15771591 return templ_7745c5c3_Err
15781592 }
@@ -1580,80 +1594,80 @@ func commentView(c CommentView, suffix string) templ.Component {
15801594 if templ_7745c5c3_Err != nil {
15811595 return templ_7745c5c3_Err
15821596 }
1583- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 142, "</details> ")
1597+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 143, "</details> ")
15841598 if templ_7745c5c3_Err != nil {
15851599 return templ_7745c5c3_Err
15861600 }
15871601 }
15881602 if c.Resolve != nil {
1589- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 143, "<form class=\"c-act\" method=\"post\" action=\"")
1603+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 144, "<form class=\"c-act\" method=\"post\" action=\"")
15901604 if templ_7745c5c3_Err != nil {
15911605 return templ_7745c5c3_Err
15921606 }
15931607 var templ_7745c5c3_Var78 templ.SafeURL
15941608 templ_7745c5c3_Var78, templ_7745c5c3_Err = templ.JoinURLErrs(templ.SafeURL(c.Resolve.Action))
15951609 if templ_7745c5c3_Err != nil {
1596- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 284, Col: 77}
1610+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 292, Col: 77}
15971611 }
15981612 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var78))
15991613 if templ_7745c5c3_Err != nil {
16001614 return templ_7745c5c3_Err
16011615 }
1602- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 144, "\"><input type=\"hidden\" name=\"resolved\" value=\"")
1616+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 145, "\"><input type=\"hidden\" name=\"resolved\" value=\"")
16031617 if templ_7745c5c3_Err != nil {
16041618 return templ_7745c5c3_Err
16051619 }
16061620 var templ_7745c5c3_Var79 string
16071621 templ_7745c5c3_Var79, templ_7745c5c3_Err = templ.ResolveAttributeValue(boolText(c.Resolve.Value))
16081622 if templ_7745c5c3_Err != nil {
1609- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 285, Col: 74}
1623+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 293, Col: 74}
16101624 }
16111625 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ_7745c5c3_Var79)
16121626 if templ_7745c5c3_Err != nil {
16131627 return templ_7745c5c3_Err
16141628 }
1615- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 145, "\"> ")
1629+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 146, "\"> ")
16161630 if templ_7745c5c3_Err != nil {
16171631 return templ_7745c5c3_Err
16181632 }
16191633 if c.Resolve.From > 0 {
1620- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 146, "<input type=\"hidden\" name=\"from\" value=\"")
1634+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 147, "<input type=\"hidden\" name=\"from\" value=\"")
16211635 if templ_7745c5c3_Err != nil {
16221636 return templ_7745c5c3_Err
16231637 }
16241638 var templ_7745c5c3_Var80 string
16251639 templ_7745c5c3_Var80, templ_7745c5c3_Err = templ.ResolveAttributeValue(itoa(c.Resolve.From))
16261640 if templ_7745c5c3_Err != nil {
1627- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 287, Col: 66}
1641+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 295, Col: 66}
16281642 }
16291643 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ_7745c5c3_Var80)
16301644 if templ_7745c5c3_Err != nil {
16311645 return templ_7745c5c3_Err
16321646 }
1633- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 147, "\"> ")
1647+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 148, "\"> ")
16341648 if templ_7745c5c3_Err != nil {
16351649 return templ_7745c5c3_Err
16361650 }
16371651 }
1638- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 148, "<button type=\"submit\" class=\"btn\">")
1652+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 149, "<button type=\"submit\" class=\"btn\">")
16391653 if templ_7745c5c3_Err != nil {
16401654 return templ_7745c5c3_Err
16411655 }
16421656 var templ_7745c5c3_Var81 string
16431657 templ_7745c5c3_Var81, templ_7745c5c3_Err = templ.JoinStringErrs(c.Resolve.Label)
16441658 if templ_7745c5c3_Err != nil {
1645- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 289, Col: 55}
1659+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 297, Col: 55}
16461660 }
16471661 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var81))
16481662 if templ_7745c5c3_Err != nil {
16491663 return templ_7745c5c3_Err
16501664 }
1651- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 149, "</button></form>")
1665+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 150, "</button></form>")
16521666 if templ_7745c5c3_Err != nil {
16531667 return templ_7745c5c3_Err
16541668 }
16551669 }
1656- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 150, "</div>")
1670+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 151, "</div>")
16571671 if templ_7745c5c3_Err != nil {
16581672 return templ_7745c5c3_Err
16591673 }
@@ -1690,198 +1704,198 @@ func commentForm(f CommentForm, suffix string) templ.Component {
16901704 templ_7745c5c3_Var82 = templ.NopComponent
16911705 }
16921706 ctx = templ.ClearChildren(ctx)
1693- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 151, "<form class=\"cform\" method=\"post\" action=\"")
1707+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 152, "<form class=\"cform\" method=\"post\" action=\"")
16941708 if templ_7745c5c3_Err != nil {
16951709 return templ_7745c5c3_Err
16961710 }
16971711 var templ_7745c5c3_Var83 templ.SafeURL
16981712 templ_7745c5c3_Var83, templ_7745c5c3_Err = templ.JoinURLErrs(templ.SafeURL(f.Action))
16991713 if templ_7745c5c3_Err != nil {
1700- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 304, Col: 67}
1714+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 312, Col: 67}
17011715 }
17021716 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var83))
17031717 if templ_7745c5c3_Err != nil {
17041718 return templ_7745c5c3_Err
17051719 }
1706- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 152, "\"><label for=\"")
1720+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 153, "\"><label for=\"")
17071721 if templ_7745c5c3_Err != nil {
17081722 return templ_7745c5c3_Err
17091723 }
17101724 var templ_7745c5c3_Var84 string
17111725 templ_7745c5c3_Var84, templ_7745c5c3_Err = templ.ResolveAttributeValue(f.ID + suffix)
17121726 if templ_7745c5c3_Err != nil {
1713- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 305, Col: 28}
1727+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 313, Col: 28}
17141728 }
17151729 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ_7745c5c3_Var84)
17161730 if templ_7745c5c3_Err != nil {
17171731 return templ_7745c5c3_Err
17181732 }
1719- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 153, "\">")
1733+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 154, "\">")
17201734 if templ_7745c5c3_Err != nil {
17211735 return templ_7745c5c3_Err
17221736 }
17231737 var templ_7745c5c3_Var85 string
17241738 templ_7745c5c3_Var85, templ_7745c5c3_Err = templ.JoinStringErrs(f.Title)
17251739 if templ_7745c5c3_Err != nil {
1726- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 305, Col: 40}
1740+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 313, Col: 40}
17271741 }
17281742 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var85))
17291743 if templ_7745c5c3_Err != nil {
17301744 return templ_7745c5c3_Err
17311745 }
1732- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 154, "</label> <textarea id=\"")
1746+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 155, "</label> <textarea id=\"")
17331747 if templ_7745c5c3_Err != nil {
17341748 return templ_7745c5c3_Err
17351749 }
17361750 var templ_7745c5c3_Var86 string
17371751 templ_7745c5c3_Var86, templ_7745c5c3_Err = templ.ResolveAttributeValue(f.ID + suffix)
17381752 if templ_7745c5c3_Err != nil {
1739- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 307, Col: 21}
1753+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 315, Col: 21}
17401754 }
17411755 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ_7745c5c3_Var86)
17421756 if templ_7745c5c3_Err != nil {
17431757 return templ_7745c5c3_Err
17441758 }
1745- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 155, "\" name=\"text\" rows=\"3\" maxlength=\"8000\" placeholder=\"Markdown, 8000 characters at most\"")
1759+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 156, "\" name=\"text\" rows=\"3\" maxlength=\"8000\" placeholder=\"Markdown, 8000 characters at most\"")
17461760 if templ_7745c5c3_Err != nil {
17471761 return templ_7745c5c3_Err
17481762 }
17491763 if f.Focus {
1750- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 156, " autofocus")
1764+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 157, " autofocus")
17511765 if templ_7745c5c3_Err != nil {
17521766 return templ_7745c5c3_Err
17531767 }
17541768 }
1755- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 157, "></textarea> ")
1769+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 158, "></textarea> ")
17561770 if templ_7745c5c3_Err != nil {
17571771 return templ_7745c5c3_Err
17581772 }
17591773 if f.Path != "" {
1760- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 158, "<input type=\"hidden\" name=\"path\" value=\"")
1774+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 159, "<input type=\"hidden\" name=\"path\" value=\"")
17611775 if templ_7745c5c3_Err != nil {
17621776 return templ_7745c5c3_Err
17631777 }
17641778 var templ_7745c5c3_Var87 string
17651779 templ_7745c5c3_Var87, templ_7745c5c3_Err = templ.ResolveAttributeValue(f.Path)
17661780 if templ_7745c5c3_Err != nil {
1767- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 317, Col: 50}
1781+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 325, Col: 50}
17681782 }
17691783 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ_7745c5c3_Var87)
17701784 if templ_7745c5c3_Err != nil {
17711785 return templ_7745c5c3_Err
17721786 }
1773- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 159, "\"> <input type=\"hidden\" name=\"line\" value=\"")
1787+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 160, "\"> <input type=\"hidden\" name=\"line\" value=\"")
17741788 if templ_7745c5c3_Err != nil {
17751789 return templ_7745c5c3_Err
17761790 }
17771791 var templ_7745c5c3_Var88 string
17781792 templ_7745c5c3_Var88, templ_7745c5c3_Err = templ.ResolveAttributeValue(f.Line)
17791793 if templ_7745c5c3_Err != nil {
1780- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 318, Col: 50}
1794+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 326, Col: 50}
17811795 }
17821796 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ_7745c5c3_Var88)
17831797 if templ_7745c5c3_Err != nil {
17841798 return templ_7745c5c3_Err
17851799 }
1786- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 160, "\"> <input type=\"hidden\" name=\"side\" value=\"")
1800+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 161, "\"> <input type=\"hidden\" name=\"side\" value=\"")
17871801 if templ_7745c5c3_Err != nil {
17881802 return templ_7745c5c3_Err
17891803 }
17901804 var templ_7745c5c3_Var89 string
17911805 templ_7745c5c3_Var89, templ_7745c5c3_Err = templ.ResolveAttributeValue(f.Side)
17921806 if templ_7745c5c3_Err != nil {
1793- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 319, Col: 50}
1807+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 327, Col: 50}
17941808 }
17951809 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ_7745c5c3_Var89)
17961810 if templ_7745c5c3_Err != nil {
17971811 return templ_7745c5c3_Err
17981812 }
1799- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 161, "\"> <label>from line <input type=\"number\" name=\"start_line\" min=\"1\" value=\"")
1813+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 162, "\"> <label>from line <input type=\"number\" name=\"start_line\" min=\"1\" value=\"")
18001814 if templ_7745c5c3_Err != nil {
18011815 return templ_7745c5c3_Err
18021816 }
18031817 var templ_7745c5c3_Var90 string
18041818 templ_7745c5c3_Var90, templ_7745c5c3_Err = templ.ResolveAttributeValue(f.StartLine)
18051819 if templ_7745c5c3_Err != nil {
1806- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 320, Col: 86}
1820+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 328, Col: 86}
18071821 }
18081822 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ_7745c5c3_Var90)
18091823 if templ_7745c5c3_Err != nil {
18101824 return templ_7745c5c3_Err
18111825 }
1812- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 162, "\"></label> ")
1826+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 163, "\"></label> ")
18131827 if templ_7745c5c3_Err != nil {
18141828 return templ_7745c5c3_Err
18151829 }
18161830 }
18171831 if f.ReplyTo != "" {
1818- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 163, "<input type=\"hidden\" name=\"reply_to\" value=\"")
1832+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 164, "<input type=\"hidden\" name=\"reply_to\" value=\"")
18191833 if templ_7745c5c3_Err != nil {
18201834 return templ_7745c5c3_Err
18211835 }
18221836 var templ_7745c5c3_Var91 string
18231837 templ_7745c5c3_Var91, templ_7745c5c3_Err = templ.ResolveAttributeValue(f.ReplyTo)
18241838 if templ_7745c5c3_Err != nil {
1825- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 323, Col: 57}
1839+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 331, Col: 57}
18261840 }
18271841 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ_7745c5c3_Var91)
18281842 if templ_7745c5c3_Err != nil {
18291843 return templ_7745c5c3_Err
18301844 }
1831- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 164, "\"> ")
1845+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 165, "\"> ")
18321846 if templ_7745c5c3_Err != nil {
18331847 return templ_7745c5c3_Err
18341848 }
18351849 }
18361850 if f.Path == "" && f.ReplyTo == "" {
1837- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 165, "<fieldset><legend>Verdict</legend><label><input type=\"radio\" name=\"verdict\" value=\"\" checked>Note</label><label><input type=\"radio\" name=\"verdict\" value=\"approve\">Approve</label><label><input type=\"radio\" name=\"verdict\" value=\"changes_requested\">Request changes</label></fieldset>")
1851+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 166, "<fieldset><legend>Verdict</legend><label><input type=\"radio\" name=\"verdict\" value=\"\" checked>Note</label><label><input type=\"radio\" name=\"verdict\" value=\"approve\">Approve</label><label><input type=\"radio\" name=\"verdict\" value=\"changes_requested\">Request changes</label></fieldset>")
18381852 if templ_7745c5c3_Err != nil {
18391853 return templ_7745c5c3_Err
18401854 }
18411855 }
18421856 if f.From > 0 {
1843- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 166, "<input type=\"hidden\" name=\"from\" value=\"")
1857+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 167, "<input type=\"hidden\" name=\"from\" value=\"")
18441858 if templ_7745c5c3_Err != nil {
18451859 return templ_7745c5c3_Err
18461860 }
18471861 var templ_7745c5c3_Var92 string
18481862 templ_7745c5c3_Var92, templ_7745c5c3_Err = templ.ResolveAttributeValue(itoa(f.From))
18491863 if templ_7745c5c3_Err != nil {
1850- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 329, Col: 56}
1864+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 337, Col: 56}
18511865 }
18521866 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ_7745c5c3_Var92)
18531867 if templ_7745c5c3_Err != nil {
18541868 return templ_7745c5c3_Err
18551869 }
1856- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 167, "\">")
1870+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 168, "\">")
18571871 if templ_7745c5c3_Err != nil {
18581872 return templ_7745c5c3_Err
18591873 }
18601874 }
1861- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 168, "<div class=\"f-btns\"><button type=\"submit\" class=\"btn primary\">Comment</button> ")
1875+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 169, "<div class=\"f-btns\"><button type=\"submit\" class=\"btn primary\">Comment</button> ")
18621876 if templ_7745c5c3_Err != nil {
18631877 return templ_7745c5c3_Err
18641878 }
18651879 if f.Cancel != "" {
1866- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 169, "<a class=\"btn\" href=\"")
1880+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 170, "<a class=\"btn\" href=\"")
18671881 if templ_7745c5c3_Err != nil {
18681882 return templ_7745c5c3_Err
18691883 }
18701884 var templ_7745c5c3_Var93 templ.SafeURL
18711885 templ_7745c5c3_Var93, templ_7745c5c3_Err = templ.JoinURLErrs(templ.SafeURL(f.Cancel))
18721886 if templ_7745c5c3_Err != nil {
1873- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 334, Col: 49}
1887+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 342, Col: 49}
18741888 }
18751889 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var93))
18761890 if templ_7745c5c3_Err != nil {
18771891 return templ_7745c5c3_Err
18781892 }
1879- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 170, "\">Cancel</a>")
1893+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 171, "\">Cancel</a>")
18801894 if templ_7745c5c3_Err != nil {
18811895 return templ_7745c5c3_Err
18821896 }
18831897 }
1884- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 171, "</div></form>")
1898+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 172, "</div></form>")
18851899 if templ_7745c5c3_Err != nil {
18861900 return templ_7745c5c3_Err
18871901 }
@@ -1910,20 +1924,20 @@ func mrRail(p MRPage) templ.Component {
19101924 templ_7745c5c3_Var94 = templ.NopComponent
19111925 }
19121926 ctx = templ.ClearChildren(ctx)
1913- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 172, "<section aria-labelledby=\"r-files\" class=\"r-files\"><h2 id=\"r-files\">Files <span class=\"count\">")
1927+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 173, "<section aria-labelledby=\"r-files\" class=\"r-files\"><h2 id=\"r-files\">Files <span class=\"count\">")
19141928 if templ_7745c5c3_Err != nil {
19151929 return templ_7745c5c3_Err
19161930 }
19171931 var templ_7745c5c3_Var95 string
19181932 templ_7745c5c3_Var95, templ_7745c5c3_Err = templ.JoinStringErrs(itoa(len(p.Files)))
19191933 if templ_7745c5c3_Err != nil {
1920- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 343, Col: 49}
1934+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 351, Col: 49}
19211935 }
19221936 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var95))
19231937 if templ_7745c5c3_Err != nil {
19241938 return templ_7745c5c3_Err
19251939 }
1926- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 173, "</span><kbd aria-hidden=\"true\">g f</kbd> <button type=\"button\" class=\"btn icon fold\" data-js aria-expanded=\"true\" title=\"fold the list of files\" hx-on:click=\"ermiteMR.foldFiles()\"><span class=\"ico i-chevron\" aria-hidden=\"true\"></span><span class=\"sr\">fold the list of files</span></button></h2>")
1940+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 174, "</span><kbd aria-hidden=\"true\">g f</kbd> <button type=\"button\" class=\"btn icon fold\" data-js aria-expanded=\"true\" title=\"fold the list of files\" hx-on:click=\"ermiteMR.foldFiles()\"><span class=\"ico i-chevron\" aria-hidden=\"true\"></span><span class=\"sr\">fold the list of files</span></button></h2>")
19271941 if templ_7745c5c3_Err != nil {
19281942 return templ_7745c5c3_Err
19291943 }
@@ -1931,71 +1945,71 @@ func mrRail(p MRPage) templ.Component {
19311945 if templ_7745c5c3_Err != nil {
19321946 return templ_7745c5c3_Err
19331947 }
1934- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 174, "</section>")
1948+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 175, "</section>")
19351949 if templ_7745c5c3_Err != nil {
19361950 return templ_7745c5c3_Err
19371951 }
19381952 if len(p.Verdicts) > 0 {
1939- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 175, "<section><h2>Verdicts</h2><ul>")
1953+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 176, "<section><h2>Verdicts</h2><ul>")
19401954 if templ_7745c5c3_Err != nil {
19411955 return templ_7745c5c3_Err
19421956 }
19431957 for _, v := range p.Verdicts {
1944- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 176, "<li><a href=\"")
1958+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 177, "<li><a href=\"")
19451959 if templ_7745c5c3_Err != nil {
19461960 return templ_7745c5c3_Err
19471961 }
19481962 var templ_7745c5c3_Var96 templ.SafeURL
19491963 templ_7745c5c3_Var96, templ_7745c5c3_Err = templ.JoinURLErrs(templ.SafeURL(v.Href))
19501964 if templ_7745c5c3_Err != nil {
1951- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 356, Col: 37}
1965+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 364, Col: 37}
19521966 }
19531967 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var96))
19541968 if templ_7745c5c3_Err != nil {
19551969 return templ_7745c5c3_Err
19561970 }
1957- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 177, "\">")
1971+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 178, "\">")
19581972 if templ_7745c5c3_Err != nil {
19591973 return templ_7745c5c3_Err
19601974 }
19611975 var templ_7745c5c3_Var97 string
19621976 templ_7745c5c3_Var97, templ_7745c5c3_Err = templ.JoinStringErrs(v.Author)
19631977 if templ_7745c5c3_Err != nil {
1964- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 356, Col: 50}
1978+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 364, Col: 50}
19651979 }
19661980 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var97))
19671981 if templ_7745c5c3_Err != nil {
19681982 return templ_7745c5c3_Err
19691983 }
1970- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 178, ": ")
1984+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 179, ": ")
19711985 if templ_7745c5c3_Err != nil {
19721986 return templ_7745c5c3_Err
19731987 }
19741988 var templ_7745c5c3_Var98 string
19751989 templ_7745c5c3_Var98, templ_7745c5c3_Err = templ.JoinStringErrs(v.Label)
19761990 if templ_7745c5c3_Err != nil {
1977- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 356, Col: 63}
1991+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 364, Col: 63}
19781992 }
19791993 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var98))
19801994 if templ_7745c5c3_Err != nil {
19811995 return templ_7745c5c3_Err
19821996 }
1983- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 179, "</a> ")
1997+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 180, "</a> ")
19841998 if templ_7745c5c3_Err != nil {
19851999 return templ_7745c5c3_Err
19862000 }
19872001 if v.Stale {
1988- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 180, "<span class=\"mute\">(stale)</span>")
2002+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 181, "<span class=\"mute\">(stale)</span>")
19892003 if templ_7745c5c3_Err != nil {
19902004 return templ_7745c5c3_Err
19912005 }
19922006 }
1993- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 181, "</li>")
2007+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 182, "</li>")
19942008 if templ_7745c5c3_Err != nil {
19952009 return templ_7745c5c3_Err
19962010 }
19972011 }
1998- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 182, "</ul></section>")
2012+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 183, "</ul></section>")
19992013 if templ_7745c5c3_Err != nil {
20002014 return templ_7745c5c3_Err
20012015 }
@@ -2004,74 +2018,74 @@ func mrRail(p MRPage) templ.Component {
20042018 if templ_7745c5c3_Err != nil {
20052019 return templ_7745c5c3_Err
20062020 }
2007- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 183, "<section aria-labelledby=\"r-commits\"><h2 id=\"r-commits\">Commits <span class=\"count\">")
2021+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 184, "<section aria-labelledby=\"r-commits\"><h2 id=\"r-commits\">Commits <span class=\"count\">")
20082022 if templ_7745c5c3_Err != nil {
20092023 return templ_7745c5c3_Err
20102024 }
20112025 var templ_7745c5c3_Var99 string
20122026 templ_7745c5c3_Var99, templ_7745c5c3_Err = templ.JoinStringErrs(itoa(len(p.Commits)))
20132027 if templ_7745c5c3_Err != nil {
2014- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 367, Col: 71}
2028+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 375, Col: 71}
20152029 }
20162030 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var99))
20172031 if templ_7745c5c3_Err != nil {
20182032 return templ_7745c5c3_Err
20192033 }
2020- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 184, "</span></h2><ul class=\"pcommits\">")
2034+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 185, "</span></h2><ul class=\"pcommits\">")
20212035 if templ_7745c5c3_Err != nil {
20222036 return templ_7745c5c3_Err
20232037 }
20242038 for _, c := range p.Commits {
2025- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 185, "<li")
2039+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 186, "<li")
20262040 if templ_7745c5c3_Err != nil {
20272041 return templ_7745c5c3_Err
20282042 }
20292043 if c.New {
2030- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 186, " data-new")
2044+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 187, " data-new")
20312045 if templ_7745c5c3_Err != nil {
20322046 return templ_7745c5c3_Err
20332047 }
20342048 }
2035- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 187, "><a href=\"")
2049+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 188, "><a href=\"")
20362050 if templ_7745c5c3_Err != nil {
20372051 return templ_7745c5c3_Err
20382052 }
20392053 var templ_7745c5c3_Var100 templ.SafeURL
20402054 templ_7745c5c3_Var100, templ_7745c5c3_Err = templ.JoinURLErrs(templ.SafeURL(c.Href))
20412055 if templ_7745c5c3_Err != nil {
2042- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 371, Col: 36}
2056+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 379, Col: 36}
20432057 }
20442058 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var100))
20452059 if templ_7745c5c3_Err != nil {
20462060 return templ_7745c5c3_Err
20472061 }
2048- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 188, "\">")
2062+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 189, "\">")
20492063 if templ_7745c5c3_Err != nil {
20502064 return templ_7745c5c3_Err
20512065 }
20522066 var templ_7745c5c3_Var101 string
20532067 templ_7745c5c3_Var101, templ_7745c5c3_Err = templ.JoinStringErrs(c.Short)
20542068 if templ_7745c5c3_Err != nil {
2055- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 371, Col: 48}
2069+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 379, Col: 48}
20562070 }
20572071 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var101))
20582072 if templ_7745c5c3_Err != nil {
20592073 return templ_7745c5c3_Err
20602074 }
2061- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 189, "</a> <span class=\"s\">")
2075+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 190, "</a> <span class=\"s\">")
20622076 if templ_7745c5c3_Err != nil {
20632077 return templ_7745c5c3_Err
20642078 }
20652079 var templ_7745c5c3_Var102 string
20662080 templ_7745c5c3_Var102, templ_7745c5c3_Err = templ.JoinStringErrs(c.Subject)
20672081 if templ_7745c5c3_Err != nil {
2068- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 372, Col: 32}
2082+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 380, Col: 32}
20692083 }
20702084 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var102))
20712085 if templ_7745c5c3_Err != nil {
20722086 return templ_7745c5c3_Err
20732087 }
2074- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 190, "</span> ")
2088+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 191, "</span> ")
20752089 if templ_7745c5c3_Err != nil {
20762090 return templ_7745c5c3_Err
20772091 }
@@ -2081,20 +2095,20 @@ func mrRail(p MRPage) templ.Component {
20812095 return templ_7745c5c3_Err
20822096 }
20832097 }
2084- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 191, "<span class=\"mute\">")
2098+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 192, "<span class=\"mute\">")
20852099 if templ_7745c5c3_Err != nil {
20862100 return templ_7745c5c3_Err
20872101 }
20882102 var templ_7745c5c3_Var103 string
20892103 templ_7745c5c3_Var103, templ_7745c5c3_Err = templ.JoinStringErrs(c.Author)
20902104 if templ_7745c5c3_Err != nil {
2091- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 377, Col: 16}
2105+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 385, Col: 16}
20922106 }
20932107 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var103))
20942108 if templ_7745c5c3_Err != nil {
20952109 return templ_7745c5c3_Err
20962110 }
2097- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 192, " ")
2111+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 193, " ")
20982112 if templ_7745c5c3_Err != nil {
20992113 return templ_7745c5c3_Err
21002114 }
@@ -2102,39 +2116,39 @@ func mrRail(p MRPage) templ.Component {
21022116 var templ_7745c5c3_Var104 string
21032117 templ_7745c5c3_Var104, templ_7745c5c3_Err = templ.JoinStringErrs(" · ")
21042118 if templ_7745c5c3_Err != nil {
2105- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 379, Col: 15}
2119+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 387, Col: 15}
21062120 }
21072121 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var104))
21082122 if templ_7745c5c3_Err != nil {
21092123 return templ_7745c5c3_Err
21102124 }
2111- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 193, "<time datetime=\"")
2125+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 194, "<time datetime=\"")
21122126 if templ_7745c5c3_Err != nil {
21132127 return templ_7745c5c3_Err
21142128 }
21152129 var templ_7745c5c3_Var105 string
21162130 templ_7745c5c3_Var105, templ_7745c5c3_Err = templ.ResolveAttributeValue(c.WhenAt)
21172131 if templ_7745c5c3_Err != nil {
2118- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 379, Col: 42}
2132+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 387, Col: 42}
21192133 }
21202134 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ_7745c5c3_Var105)
21212135 if templ_7745c5c3_Err != nil {
21222136 return templ_7745c5c3_Err
21232137 }
2124- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 194, "\">")
2138+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 195, "\">")
21252139 if templ_7745c5c3_Err != nil {
21262140 return templ_7745c5c3_Err
21272141 }
21282142 var templ_7745c5c3_Var106 string
21292143 templ_7745c5c3_Var106, templ_7745c5c3_Err = templ.JoinStringErrs(c.When)
21302144 if templ_7745c5c3_Err != nil {
2131- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 379, Col: 53}
2145+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 387, Col: 53}
21322146 }
21332147 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var106))
21342148 if templ_7745c5c3_Err != nil {
21352149 return templ_7745c5c3_Err
21362150 }
2137- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 195, "</time> ")
2151+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 196, "</time> ")
21382152 if templ_7745c5c3_Err != nil {
21392153 return templ_7745c5c3_Err
21402154 }
@@ -2143,76 +2157,76 @@ func mrRail(p MRPage) templ.Component {
21432157 var templ_7745c5c3_Var107 string
21442158 templ_7745c5c3_Var107, templ_7745c5c3_Err = templ.JoinStringErrs(" · new")
21452159 if templ_7745c5c3_Err != nil {
2146- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 382, Col: 18}
2160+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 390, Col: 18}
21472161 }
21482162 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var107))
21492163 if templ_7745c5c3_Err != nil {
21502164 return templ_7745c5c3_Err
21512165 }
21522166 }
2153- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 196, "</span></li>")
2167+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 197, "</span></li>")
21542168 if templ_7745c5c3_Err != nil {
21552169 return templ_7745c5c3_Err
21562170 }
21572171 }
2158- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 197, "</ul>")
2172+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 198, "</ul>")
21592173 if templ_7745c5c3_Err != nil {
21602174 return templ_7745c5c3_Err
21612175 }
21622176 if len(p.Commits) == 0 {
2163- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 198, "<p class=\"dim\">no commit to merge.</p>")
2177+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 199, "<p class=\"dim\">no commit to merge.</p>")
21642178 if templ_7745c5c3_Err != nil {
21652179 return templ_7745c5c3_Err
21662180 }
21672181 }
21682182 if p.CommitsNote != "" {
2169- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 199, "<p class=\"note\">")
2183+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 200, "<p class=\"note\">")
21702184 if templ_7745c5c3_Err != nil {
21712185 return templ_7745c5c3_Err
21722186 }
21732187 var templ_7745c5c3_Var108 string
21742188 templ_7745c5c3_Var108, templ_7745c5c3_Err = templ.JoinStringErrs(p.CommitsNote)
21752189 if templ_7745c5c3_Err != nil {
2176- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 392, Col: 34}
2190+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 400, Col: 34}
21772191 }
21782192 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var108))
21792193 if templ_7745c5c3_Err != nil {
21802194 return templ_7745c5c3_Err
21812195 }
2182- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 200, "</p>")
2196+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 201, "</p>")
21832197 if templ_7745c5c3_Err != nil {
21842198 return templ_7745c5c3_Err
21852199 }
21862200 }
2187- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 201, "</section><section aria-labelledby=\"r-settings\"><h2 id=\"r-settings\">Settings</h2><dl class=\"kv\"><dt>modes</dt><dd>")
2201+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 202, "</section><section aria-labelledby=\"r-settings\"><h2 id=\"r-settings\">Settings</h2><dl class=\"kv\"><dt>modes</dt><dd>")
21882202 if templ_7745c5c3_Err != nil {
21892203 return templ_7745c5c3_Err
21902204 }
21912205 var templ_7745c5c3_Var109 string
21922206 templ_7745c5c3_Var109, templ_7745c5c3_Err = templ.JoinStringErrs(strings.Join(p.Modes, ", "))
21932207 if templ_7745c5c3_Err != nil {
2194- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 399, Col: 36}
2208+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 407, Col: 36}
21952209 }
21962210 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var109))
21972211 if templ_7745c5c3_Err != nil {
21982212 return templ_7745c5c3_Err
21992213 }
2200- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 202, "</dd><dt>checks</dt><dd>")
2214+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 203, "</dd><dt>checks</dt><dd>")
22012215 if templ_7745c5c3_Err != nil {
22022216 return templ_7745c5c3_Err
22032217 }
22042218 if p.ChecksBlock {
2205- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 203, "failing ones block the merge")
2219+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 204, "failing ones block the merge")
22062220 if templ_7745c5c3_Err != nil {
22072221 return templ_7745c5c3_Err
22082222 }
22092223 } else {
2210- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 204, "do not block the merge")
2224+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 205, "do not block the merge")
22112225 if templ_7745c5c3_Err != nil {
22122226 return templ_7745c5c3_Err
22132227 }
22142228 }
2215- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 205, "</dd></dl></section>")
2229+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 206, "</dd></dl></section>")
22162230 if templ_7745c5c3_Err != nil {
22172231 return templ_7745c5c3_Err
22182232 }
@@ -2245,46 +2259,46 @@ func mrBar(p MRPage) templ.Component {
22452259 templ_7745c5c3_Var110 = templ.NopComponent
22462260 }
22472261 ctx = templ.ClearChildren(ctx)
2248- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 206, "<div class=\"diff-tools mr-bar\" role=\"group\" aria-label=\"Diff view and merge\"><span class=\"dim\">")
2262+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 207, "<div class=\"diff-tools mr-bar\" role=\"group\" aria-label=\"Diff view and merge\"><span class=\"dim\">")
22492263 if templ_7745c5c3_Err != nil {
22502264 return templ_7745c5c3_Err
22512265 }
22522266 var templ_7745c5c3_Var111 string
22532267 templ_7745c5c3_Var111, templ_7745c5c3_Err = templ.JoinStringErrs(plural(p.NFiles, "file", "files"))
22542268 if templ_7745c5c3_Err != nil {
2255- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 418, Col: 55}
2269+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 426, Col: 55}
22562270 }
22572271 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var111))
22582272 if templ_7745c5c3_Err != nil {
22592273 return templ_7745c5c3_Err
22602274 }
2261- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 207, " · <span class=\"plus\">+")
2275+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 208, " · <span class=\"plus\">+")
22622276 if templ_7745c5c3_Err != nil {
22632277 return templ_7745c5c3_Err
22642278 }
22652279 var templ_7745c5c3_Var112 string
22662280 templ_7745c5c3_Var112, templ_7745c5c3_Err = templ.JoinStringErrs(itoa(p.Adds))
22672281 if templ_7745c5c3_Err != nil {
2268- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 418, Col: 95}
2282+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 426, Col: 95}
22692283 }
22702284 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var112))
22712285 if templ_7745c5c3_Err != nil {
22722286 return templ_7745c5c3_Err
22732287 }
2274- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 208, "</span> <span class=\"minus\">-")
2288+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 209, "</span> <span class=\"minus\">-")
22752289 if templ_7745c5c3_Err != nil {
22762290 return templ_7745c5c3_Err
22772291 }
22782292 var templ_7745c5c3_Var113 string
22792293 templ_7745c5c3_Var113, templ_7745c5c3_Err = templ.JoinStringErrs(itoa(p.Dels))
22802294 if templ_7745c5c3_Err != nil {
2281- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 418, Col: 140}
2295+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 426, Col: 140}
22822296 }
22832297 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var113))
22842298 if templ_7745c5c3_Err != nil {
22852299 return templ_7745c5c3_Err
22862300 }
2287- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 209, "</span></span>")
2301+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 210, "</span></span>")
22882302 if templ_7745c5c3_Err != nil {
22892303 return templ_7745c5c3_Err
22902304 }
@@ -2300,7 +2314,7 @@ func mrBar(p MRPage) templ.Component {
23002314 if templ_7745c5c3_Err != nil {
23012315 return templ_7745c5c3_Err
23022316 }
2303- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 210, "<span class=\"grow\"></span>")
2317+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 211, "<span class=\"grow\"></span>")
23042318 if templ_7745c5c3_Err != nil {
23052319 return templ_7745c5c3_Err
23062320 }
@@ -2313,7 +2327,7 @@ func mrBar(p MRPage) templ.Component {
23132327 if templ_7745c5c3_Err != nil {
23142328 return templ_7745c5c3_Err
23152329 }
2316- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 211, " ")
2330+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 212, " ")
23172331 if templ_7745c5c3_Err != nil {
23182332 return templ_7745c5c3_Err
23192333 }
@@ -2322,7 +2336,7 @@ func mrBar(p MRPage) templ.Component {
23222336 return templ_7745c5c3_Err
23232337 }
23242338 }
2325- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 212, "</div>")
2339+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 213, "</div>")
23262340 if templ_7745c5c3_Err != nil {
23272341 return templ_7745c5c3_Err
23282342 }
@@ -2354,27 +2368,27 @@ func mergeMenu(p MRPage) templ.Component {
23542368 templ_7745c5c3_Var114 = templ.NopComponent
23552369 }
23562370 ctx = templ.ClearChildren(ctx)
2357- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 213, "<details class=\"menu mmenu\" id=\"merge-menu\" data-state=\"open\"><summary class=\"btn primary\" aria-keyshortcuts=\"Shift+M\">")
2371+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 214, "<details class=\"menu mmenu\" id=\"merge-menu\" data-state=\"open\"><summary class=\"btn primary\" aria-keyshortcuts=\"Shift+M\">")
23582372 if templ_7745c5c3_Err != nil {
23592373 return templ_7745c5c3_Err
23602374 }
23612375 if p.Box.ReadyAction != "" {
2362- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 214, "Draft ")
2376+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 215, "Draft ")
23632377 if templ_7745c5c3_Err != nil {
23642378 return templ_7745c5c3_Err
23652379 }
23662380 } else {
2367- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 215, "Merge ")
2381+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 216, "Merge ")
23682382 if templ_7745c5c3_Err != nil {
23692383 return templ_7745c5c3_Err
23702384 }
23712385 }
2372- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 216, "<kbd aria-hidden=\"true\">M</kbd></summary><div class=\"menu-pop\" role=\"group\" aria-label=\"Merge\"><dl class=\"kv\"><dt>head</dt><dd>")
2386+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 217, "<kbd aria-hidden=\"true\">M</kbd></summary><div class=\"menu-pop\" role=\"group\" aria-label=\"Merge\"><dl class=\"kv\"><dt>head</dt><dd>")
23732387 if templ_7745c5c3_Err != nil {
23742388 return templ_7745c5c3_Err
23752389 }
23762390 if p.Box.HeadGone {
2377- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 217, "gone: the source branch was deleted")
2391+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 218, "gone: the source branch was deleted")
23782392 if templ_7745c5c3_Err != nil {
23792393 return templ_7745c5c3_Err
23802394 }
@@ -2382,186 +2396,186 @@ func mergeMenu(p MRPage) templ.Component {
23822396 var templ_7745c5c3_Var115 string
23832397 templ_7745c5c3_Var115, templ_7745c5c3_Err = templ.JoinStringErrs(p.HeadShort)
23842398 if templ_7745c5c3_Err != nil {
2385- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 451, Col: 19}
2399+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 459, Col: 19}
23862400 }
23872401 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var115))
23882402 if templ_7745c5c3_Err != nil {
23892403 return templ_7745c5c3_Err
23902404 }
23912405 }
2392- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 218, "</dd><dt>into</dt><dd>")
2406+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 219, "</dd><dt>into</dt><dd>")
23932407 if templ_7745c5c3_Err != nil {
23942408 return templ_7745c5c3_Err
23952409 }
23962410 var templ_7745c5c3_Var116 string
23972411 templ_7745c5c3_Var116, templ_7745c5c3_Err = templ.JoinStringErrs(p.Target)
23982412 if templ_7745c5c3_Err != nil {
2399- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 455, Col: 18}
2413+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 463, Col: 18}
24002414 }
24012415 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var116))
24022416 if templ_7745c5c3_Err != nil {
24032417 return templ_7745c5c3_Err
24042418 }
2405- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 219, "</dd></dl>")
2419+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 220, "</dd></dl>")
24062420 if templ_7745c5c3_Err != nil {
24072421 return templ_7745c5c3_Err
24082422 }
24092423 if p.Box.ReadyAction != "" {
2410- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 220, "<p class=\"d-draft\">this is a draft: it cannot be merged until it is ready for review.</p><form class=\"d-btns\" method=\"post\" action=\"")
2424+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 221, "<p class=\"d-draft\">this is a draft: it cannot be merged until it is ready for review.</p><form class=\"d-btns\" method=\"post\" action=\"")
24112425 if templ_7745c5c3_Err != nil {
24122426 return templ_7745c5c3_Err
24132427 }
24142428 var templ_7745c5c3_Var117 templ.SafeURL
24152429 templ_7745c5c3_Var117, templ_7745c5c3_Err = templ.JoinURLErrs(templ.SafeURL(p.Box.ReadyAction))
24162430 if templ_7745c5c3_Err != nil {
2417- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 459, Col: 80}
2431+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 467, Col: 80}
24182432 }
24192433 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var117))
24202434 if templ_7745c5c3_Err != nil {
24212435 return templ_7745c5c3_Err
24222436 }
2423- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 221, "\"><button type=\"submit\" class=\"btn primary\" data-default title=\"remove the draft prefix from the title\">Ready for review</button></form>")
2437+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 222, "\"><button type=\"submit\" class=\"btn primary\" data-default title=\"remove the draft prefix from the title\">Ready for review</button></form>")
24242438 if templ_7745c5c3_Err != nil {
24252439 return templ_7745c5c3_Err
24262440 }
24272441 } else if !p.Box.HeadGone {
2428- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 222, "<form class=\"d-acts\" method=\"post\" action=\"")
2442+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 223, "<form class=\"d-acts\" method=\"post\" action=\"")
24292443 if templ_7745c5c3_Err != nil {
24302444 return templ_7745c5c3_Err
24312445 }
24322446 var templ_7745c5c3_Var118 templ.SafeURL
24332447 templ_7745c5c3_Var118, templ_7745c5c3_Err = templ.JoinURLErrs(templ.SafeURL(p.Box.MergeAction))
24342448 if templ_7745c5c3_Err != nil {
2435- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 463, Col: 80}
2449+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 471, Col: 80}
24362450 }
24372451 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var118))
24382452 if templ_7745c5c3_Err != nil {
24392453 return templ_7745c5c3_Err
24402454 }
2441- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 223, "\"><input type=\"hidden\" name=\"head_id\" value=\"")
2455+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 224, "\"><input type=\"hidden\" name=\"head_id\" value=\"")
24422456 if templ_7745c5c3_Err != nil {
24432457 return templ_7745c5c3_Err
24442458 }
24452459 var templ_7745c5c3_Var119 string
24462460 templ_7745c5c3_Var119, templ_7745c5c3_Err = templ.ResolveAttributeValue(p.Box.Head)
24472461 if templ_7745c5c3_Err != nil {
2448- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 464, Col: 59}
2462+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 472, Col: 59}
24492463 }
24502464 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ_7745c5c3_Var119)
24512465 if templ_7745c5c3_Err != nil {
24522466 return templ_7745c5c3_Err
24532467 }
2454- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 224, "\"><fieldset class=\"d-modes\"><legend class=\"sr\">merge mode</legend> ")
2468+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 225, "\"><fieldset class=\"d-modes\"><legend class=\"sr\">merge mode</legend> ")
24552469 if templ_7745c5c3_Err != nil {
24562470 return templ_7745c5c3_Err
24572471 }
24582472 for i, m := range p.Box.Modes {
2459- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 225, "<label><input type=\"radio\" name=\"mode\" value=\"")
2473+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 226, "<label><input type=\"radio\" name=\"mode\" value=\"")
24602474 if templ_7745c5c3_Err != nil {
24612475 return templ_7745c5c3_Err
24622476 }
24632477 var templ_7745c5c3_Var120 string
24642478 templ_7745c5c3_Var120, templ_7745c5c3_Err = templ.ResolveAttributeValue(m.Value)
24652479 if templ_7745c5c3_Err != nil {
2466- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 469, Col: 55}
2480+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 477, Col: 55}
24672481 }
24682482 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ_7745c5c3_Var120)
24692483 if templ_7745c5c3_Err != nil {
24702484 return templ_7745c5c3_Err
24712485 }
2472- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 226, "\"")
2486+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 227, "\"")
24732487 if templ_7745c5c3_Err != nil {
24742488 return templ_7745c5c3_Err
24752489 }
24762490 if i == 0 {
2477- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 227, " checked")
2491+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 228, " checked")
24782492 if templ_7745c5c3_Err != nil {
24792493 return templ_7745c5c3_Err
24802494 }
24812495 }
2482- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 228, "> ")
2496+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 229, "> ")
24832497 if templ_7745c5c3_Err != nil {
24842498 return templ_7745c5c3_Err
24852499 }
24862500 var templ_7745c5c3_Var121 string
24872501 templ_7745c5c3_Var121, templ_7745c5c3_Err = templ.JoinStringErrs(m.Label)
24882502 if templ_7745c5c3_Err != nil {
2489- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 470, Col: 17}
2503+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 478, Col: 17}
24902504 }
24912505 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var121))
24922506 if templ_7745c5c3_Err != nil {
24932507 return templ_7745c5c3_Err
24942508 }
2495- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 229, " ")
2509+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 230, " ")
24962510 if templ_7745c5c3_Err != nil {
24972511 return templ_7745c5c3_Err
24982512 }
24992513 if i < 9 {
2500- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 230, "<kbd aria-hidden=\"true\">")
2514+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 231, "<kbd aria-hidden=\"true\">")
25012515 if templ_7745c5c3_Err != nil {
25022516 return templ_7745c5c3_Err
25032517 }
25042518 var templ_7745c5c3_Var122 string
25052519 templ_7745c5c3_Var122, templ_7745c5c3_Err = templ.JoinStringErrs(itoa(i + 1))
25062520 if templ_7745c5c3_Err != nil {
2507- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 472, Col: 46}
2521+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 480, Col: 46}
25082522 }
25092523 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var122))
25102524 if templ_7745c5c3_Err != nil {
25112525 return templ_7745c5c3_Err
25122526 }
2513- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 231, "</kbd>")
2527+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 232, "</kbd>")
25142528 if templ_7745c5c3_Err != nil {
25152529 return templ_7745c5c3_Err
25162530 }
25172531 }
2518- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 232, "</label>")
2532+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 233, "</label>")
25192533 if templ_7745c5c3_Err != nil {
25202534 return templ_7745c5c3_Err
25212535 }
25222536 }
2523- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 233, "</fieldset>")
2537+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 234, "</fieldset>")
25242538 if templ_7745c5c3_Err != nil {
25252539 return templ_7745c5c3_Err
25262540 }
25272541 if p.Box.CanDeleteBranch {
2528- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 234, "<label class=\"d-check\"><input type=\"checkbox\" name=\"delete_branch\" value=\"1\"> delete ")
2542+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 235, "<label class=\"d-check\"><input type=\"checkbox\" name=\"delete_branch\" value=\"1\"> delete ")
25292543 if templ_7745c5c3_Err != nil {
25302544 return templ_7745c5c3_Err
25312545 }
25322546 var templ_7745c5c3_Var123 string
25332547 templ_7745c5c3_Var123, templ_7745c5c3_Err = templ.JoinStringErrs(p.Source)
25342548 if templ_7745c5c3_Err != nil {
2535- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 478, Col: 102}
2549+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 486, Col: 102}
25362550 }
25372551 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var123))
25382552 if templ_7745c5c3_Err != nil {
25392553 return templ_7745c5c3_Err
25402554 }
2541- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 235, " after the merge <kbd aria-hidden=\"true\">D</kbd></label>")
2555+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 236, " after the merge <kbd aria-hidden=\"true\">D</kbd></label>")
25422556 if templ_7745c5c3_Err != nil {
25432557 return templ_7745c5c3_Err
25442558 }
25452559 }
2546- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 236, "<div class=\"d-btns\"><button type=\"submit\" class=\"btn primary\" data-default>Merge into ")
2560+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 237, "<div class=\"d-btns\"><button type=\"submit\" class=\"btn primary\" data-default>Merge into ")
25472561 if templ_7745c5c3_Err != nil {
25482562 return templ_7745c5c3_Err
25492563 }
25502564 var templ_7745c5c3_Var124 string
25512565 templ_7745c5c3_Var124, templ_7745c5c3_Err = templ.JoinStringErrs(p.Target)
25522566 if templ_7745c5c3_Err != nil {
2553- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 481, Col: 82}
2567+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 489, Col: 82}
25542568 }
25552569 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var124))
25562570 if templ_7745c5c3_Err != nil {
25572571 return templ_7745c5c3_Err
25582572 }
2559- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 237, "</button></div></form>")
2573+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 238, "</button></div></form>")
25602574 if templ_7745c5c3_Err != nil {
25612575 return templ_7745c5c3_Err
25622576 }
25632577 }
2564- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 238, "</div></details>")
2578+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 239, "</div></details>")
25652579 if templ_7745c5c3_Err != nil {
25662580 return templ_7745c5c3_Err
25672581 }
@@ -2592,61 +2606,61 @@ func moreMenu(p MRPage) templ.Component {
25922606 templ_7745c5c3_Var125 = templ.NopComponent
25932607 }
25942608 ctx = templ.ClearChildren(ctx)
2595- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 239, "<details class=\"menu omenu\"><summary class=\"btn icon\" aria-label=\"More actions\" title=\"more actions\">⋯</summary><div class=\"menu-pop\" role=\"group\" aria-label=\"More actions\">")
2609+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 240, "<details class=\"menu omenu\"><summary class=\"btn icon\" aria-label=\"More actions\" title=\"more actions\">⋯</summary><div class=\"menu-pop\" role=\"group\" aria-label=\"More actions\">")
25962610 if templ_7745c5c3_Err != nil {
25972611 return templ_7745c5c3_Err
25982612 }
25992613 if p.Box.CanMarkRead {
2600- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 240, "<form method=\"post\" action=\"")
2614+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 241, "<form method=\"post\" action=\"")
26012615 if templ_7745c5c3_Err != nil {
26022616 return templ_7745c5c3_Err
26032617 }
26042618 var templ_7745c5c3_Var126 templ.SafeURL
26052619 templ_7745c5c3_Var126, templ_7745c5c3_Err = templ.JoinURLErrs(templ.SafeURL(p.Box.ReadAction))
26062620 if templ_7745c5c3_Err != nil {
2607- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 496, Col: 64}
2621+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 504, Col: 64}
26082622 }
26092623 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var126))
26102624 if templ_7745c5c3_Err != nil {
26112625 return templ_7745c5c3_Err
26122626 }
2613- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 241, "\"><input type=\"hidden\" name=\"head_id\" value=\"")
2627+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 242, "\"><input type=\"hidden\" name=\"head_id\" value=\"")
26142628 if templ_7745c5c3_Err != nil {
26152629 return templ_7745c5c3_Err
26162630 }
26172631 var templ_7745c5c3_Var127 string
26182632 templ_7745c5c3_Var127, templ_7745c5c3_Err = templ.ResolveAttributeValue(p.Box.Head)
26192633 if templ_7745c5c3_Err != nil {
2620- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 497, Col: 59}
2634+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 505, Col: 59}
26212635 }
26222636 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ_7745c5c3_Var127)
26232637 if templ_7745c5c3_Err != nil {
26242638 return templ_7745c5c3_Err
26252639 }
2626- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 242, "\"> <button type=\"submit\" title=\"the next visit can show only what changed after this head\" class=\"btn\" aria-keyshortcuts=\"Shift+R\" data-read>Mark read <kbd aria-hidden=\"true\">R</kbd></button></form>")
2640+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 243, "\"> <button type=\"submit\" title=\"the next visit can show only what changed after this head\" class=\"btn\" aria-keyshortcuts=\"Shift+R\" data-read>Mark read <kbd aria-hidden=\"true\">R</kbd></button></form>")
26272641 if templ_7745c5c3_Err != nil {
26282642 return templ_7745c5c3_Err
26292643 }
26302644 }
2631- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 243, "<form method=\"post\" action=\"")
2645+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 244, "<form method=\"post\" action=\"")
26322646 if templ_7745c5c3_Err != nil {
26332647 return templ_7745c5c3_Err
26342648 }
26352649 var templ_7745c5c3_Var128 templ.SafeURL
26362650 templ_7745c5c3_Var128, templ_7745c5c3_Err = templ.JoinURLErrs(templ.SafeURL(p.Box.CloseAction))
26372651 if templ_7745c5c3_Err != nil {
2638- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 501, Col: 64}
2652+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 509, Col: 64}
26392653 }
26402654 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var128))
26412655 if templ_7745c5c3_Err != nil {
26422656 return templ_7745c5c3_Err
26432657 }
2644- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 244, "\"><button type=\"submit\" title=\"close without merging; the branch is kept\" class=\"btn danger\">Close</button></form>")
2658+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 245, "\"><button type=\"submit\" title=\"close without merging; the branch is kept\" class=\"btn danger\">Close</button></form>")
26452659 if templ_7745c5c3_Err != nil {
26462660 return templ_7745c5c3_Err
26472661 }
26482662 if !p.Box.HeadGone && p.Box.ReadyAction == "" {
2649- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 245, "<details class=\"d-or\"><summary class=\"mute\">or from a terminal</summary>")
2663+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 246, "<details class=\"d-or\"><summary class=\"mute\">or from a terminal</summary>")
26502664 if templ_7745c5c3_Err != nil {
26512665 return templ_7745c5c3_Err
26522666 }
@@ -2654,12 +2668,12 @@ func moreMenu(p MRPage) templ.Component {
26542668 if templ_7745c5c3_Err != nil {
26552669 return templ_7745c5c3_Err
26562670 }
2657- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 246, "</details>")
2671+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 247, "</details>")
26582672 if templ_7745c5c3_Err != nil {
26592673 return templ_7745c5c3_Err
26602674 }
26612675 }
2662- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 247, "</div></details>")
2676+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 248, "</div></details>")
26632677 if templ_7745c5c3_Err != nil {
26642678 return templ_7745c5c3_Err
26652679 }
@@ -2700,263 +2714,263 @@ func Compare(l Layout, p ComparePage) templ.Component {
27002714 }()
27012715 }
27022716 ctx = templ.InitializeContext(ctx)
2703- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 248, "<header class=\"show mr-h\"><h1>")
2717+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 249, "<header class=\"show mr-h\"><h1>")
27042718 if templ_7745c5c3_Err != nil {
27052719 return templ_7745c5c3_Err
27062720 }
27072721 var templ_7745c5c3_Var131 string
27082722 templ_7745c5c3_Var131, templ_7745c5c3_Err = templ.JoinStringErrs(p.Source)
27092723 if templ_7745c5c3_Err != nil {
2710- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 517, Col: 17}
2724+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 525, Col: 17}
27112725 }
27122726 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var131))
27132727 if templ_7745c5c3_Err != nil {
27142728 return templ_7745c5c3_Err
27152729 }
2716- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 249, " → ")
2730+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 250, " → ")
27172731 if templ_7745c5c3_Err != nil {
27182732 return templ_7745c5c3_Err
27192733 }
27202734 var templ_7745c5c3_Var132 string
27212735 templ_7745c5c3_Var132, templ_7745c5c3_Err = templ.JoinStringErrs(p.Target)
27222736 if templ_7745c5c3_Err != nil {
2723- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 517, Col: 34}
2737+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 525, Col: 34}
27242738 }
27252739 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var132))
27262740 if templ_7745c5c3_Err != nil {
27272741 return templ_7745c5c3_Err
27282742 }
2729- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 250, "</h1><dl class=\"kv show-kv\"><dt>branch</dt><dd><a href=\"")
2743+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 251, "</h1><dl class=\"kv show-kv\"><dt>branch</dt><dd><a href=\"")
27302744 if templ_7745c5c3_Err != nil {
27312745 return templ_7745c5c3_Err
27322746 }
27332747 var templ_7745c5c3_Var133 templ.SafeURL
27342748 templ_7745c5c3_Var133, templ_7745c5c3_Err = templ.JoinURLErrs(templ.SafeURL(p.SourceHref))
27352749 if templ_7745c5c3_Err != nil {
2736- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 520, Col: 45}
2750+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 528, Col: 45}
27372751 }
27382752 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var133))
27392753 if templ_7745c5c3_Err != nil {
27402754 return templ_7745c5c3_Err
27412755 }
2742- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 251, "\">")
2756+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 252, "\">")
27432757 if templ_7745c5c3_Err != nil {
27442758 return templ_7745c5c3_Err
27452759 }
27462760 var templ_7745c5c3_Var134 string
27472761 templ_7745c5c3_Var134, templ_7745c5c3_Err = templ.JoinStringErrs(p.Source)
27482762 if templ_7745c5c3_Err != nil {
2749- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 520, Col: 58}
2763+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 528, Col: 58}
27502764 }
27512765 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var134))
27522766 if templ_7745c5c3_Err != nil {
27532767 return templ_7745c5c3_Err
27542768 }
2755- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 252, "</a></dd><dt>target</dt><dd><a href=\"")
2769+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 253, "</a></dd><dt>target</dt><dd><a href=\"")
27562770 if templ_7745c5c3_Err != nil {
27572771 return templ_7745c5c3_Err
27582772 }
27592773 var templ_7745c5c3_Var135 templ.SafeURL
27602774 templ_7745c5c3_Var135, templ_7745c5c3_Err = templ.JoinURLErrs(templ.SafeURL(p.TargetHref))
27612775 if templ_7745c5c3_Err != nil {
2762- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 522, Col: 45}
2776+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 530, Col: 45}
27632777 }
27642778 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var135))
27652779 if templ_7745c5c3_Err != nil {
27662780 return templ_7745c5c3_Err
27672781 }
2768- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 253, "\">")
2782+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 254, "\">")
27692783 if templ_7745c5c3_Err != nil {
27702784 return templ_7745c5c3_Err
27712785 }
27722786 var templ_7745c5c3_Var136 string
27732787 templ_7745c5c3_Var136, templ_7745c5c3_Err = templ.JoinStringErrs(p.Target)
27742788 if templ_7745c5c3_Err != nil {
2775- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 522, Col: 58}
2789+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 530, Col: 58}
27762790 }
27772791 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var136))
27782792 if templ_7745c5c3_Err != nil {
27792793 return templ_7745c5c3_Err
27802794 }
2781- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 254, "</a></dd><dt>ahead</dt><dd>")
2795+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 255, "</a></dd><dt>ahead</dt><dd>")
27822796 if templ_7745c5c3_Err != nil {
27832797 return templ_7745c5c3_Err
27842798 }
27852799 var templ_7745c5c3_Var137 string
27862800 templ_7745c5c3_Var137, templ_7745c5c3_Err = templ.JoinStringErrs(p.AheadText)
27872801 if templ_7745c5c3_Err != nil {
2788- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 524, Col: 21}
2802+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 532, Col: 21}
27892803 }
27902804 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var137))
27912805 if templ_7745c5c3_Err != nil {
27922806 return templ_7745c5c3_Err
27932807 }
2794- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 255, "</dd></dl></header>")
2808+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 256, "</dd></dl></header>")
27952809 if templ_7745c5c3_Err != nil {
27962810 return templ_7745c5c3_Err
27972811 }
27982812 if p.Note != "" {
2799- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 256, "<p class=\"notice\">")
2813+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 257, "<p class=\"notice\">")
28002814 if templ_7745c5c3_Err != nil {
28012815 return templ_7745c5c3_Err
28022816 }
28032817 var templ_7745c5c3_Var138 string
28042818 templ_7745c5c3_Var138, templ_7745c5c3_Err = templ.JoinStringErrs(p.Note)
28052819 if templ_7745c5c3_Err != nil {
2806- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 528, Col: 29}
2820+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 536, Col: 29}
28072821 }
28082822 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var138))
28092823 if templ_7745c5c3_Err != nil {
28102824 return templ_7745c5c3_Err
28112825 }
2812- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 257, "</p>")
2826+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 258, "</p>")
28132827 if templ_7745c5c3_Err != nil {
28142828 return templ_7745c5c3_Err
28152829 }
28162830 }
2817- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 258, " ")
2831+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 259, " ")
28182832 if templ_7745c5c3_Err != nil {
28192833 return templ_7745c5c3_Err
28202834 }
28212835 if p.Existing != nil {
2822- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 259, "<p class=\"notice\">an open merge request already covers these branches: <a href=\"")
2836+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 260, "<p class=\"notice\">an open merge request already covers these branches: <a href=\"")
28232837 if templ_7745c5c3_Err != nil {
28242838 return templ_7745c5c3_Err
28252839 }
28262840 var templ_7745c5c3_Var139 templ.SafeURL
28272841 templ_7745c5c3_Var139, templ_7745c5c3_Err = templ.JoinURLErrs(templ.SafeURL(p.Existing.Href))
28282842 if templ_7745c5c3_Err != nil {
2829- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 531, Col: 114}
2843+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 539, Col: 114}
28302844 }
28312845 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var139))
28322846 if templ_7745c5c3_Err != nil {
28332847 return templ_7745c5c3_Err
28342848 }
2835- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 260, "\">")
2849+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 261, "\">")
28362850 if templ_7745c5c3_Err != nil {
28372851 return templ_7745c5c3_Err
28382852 }
28392853 var templ_7745c5c3_Var140 string
28402854 templ_7745c5c3_Var140, templ_7745c5c3_Err = templ.JoinStringErrs(p.Existing.Label)
28412855 if templ_7745c5c3_Err != nil {
2842- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 531, Col: 135}
2856+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 539, Col: 135}
28432857 }
28442858 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var140))
28452859 if templ_7745c5c3_Err != nil {
28462860 return templ_7745c5c3_Err
28472861 }
2848- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 261, "</a></p>")
2862+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 262, "</a></p>")
28492863 if templ_7745c5c3_Err != nil {
28502864 return templ_7745c5c3_Err
28512865 }
28522866 }
2853- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 262, " ")
2867+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 263, " ")
28542868 if templ_7745c5c3_Err != nil {
28552869 return templ_7745c5c3_Err
28562870 }
28572871 if p.Create != nil {
2858- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 263, "<form class=\"cform create\" method=\"post\" action=\"")
2872+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 264, "<form class=\"cform create\" method=\"post\" action=\"")
28592873 if templ_7745c5c3_Err != nil {
28602874 return templ_7745c5c3_Err
28612875 }
28622876 var templ_7745c5c3_Var141 templ.SafeURL
28632877 templ_7745c5c3_Var141, templ_7745c5c3_Err = templ.JoinURLErrs(templ.SafeURL(p.Create.Action))
28642878 if templ_7745c5c3_Err != nil {
2865- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 534, Col: 83}
2879+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 542, Col: 83}
28662880 }
28672881 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var141))
28682882 if templ_7745c5c3_Err != nil {
28692883 return templ_7745c5c3_Err
28702884 }
2871- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 264, "\"><input type=\"hidden\" name=\"source\" value=\"")
2885+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 265, "\"><input type=\"hidden\" name=\"source\" value=\"")
28722886 if templ_7745c5c3_Err != nil {
28732887 return templ_7745c5c3_Err
28742888 }
28752889 var templ_7745c5c3_Var142 string
28762890 templ_7745c5c3_Var142, templ_7745c5c3_Err = templ.ResolveAttributeValue(p.Create.Source)
28772891 if templ_7745c5c3_Err != nil {
2878- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 535, Col: 62}
2892+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 543, Col: 62}
28792893 }
28802894 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ_7745c5c3_Var142)
28812895 if templ_7745c5c3_Err != nil {
28822896 return templ_7745c5c3_Err
28832897 }
2884- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 265, "\"> <input type=\"hidden\" name=\"target\" value=\"")
2898+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 266, "\"> <input type=\"hidden\" name=\"target\" value=\"")
28852899 if templ_7745c5c3_Err != nil {
28862900 return templ_7745c5c3_Err
28872901 }
28882902 var templ_7745c5c3_Var143 string
28892903 templ_7745c5c3_Var143, templ_7745c5c3_Err = templ.ResolveAttributeValue(p.Create.Target)
28902904 if templ_7745c5c3_Err != nil {
2891- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 536, Col: 62}
2905+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 544, Col: 62}
28922906 }
28932907 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ_7745c5c3_Var143)
28942908 if templ_7745c5c3_Err != nil {
28952909 return templ_7745c5c3_Err
28962910 }
2897- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 266, "\"> <label for=\"mr-title\">title</label> <input id=\"mr-title\" name=\"title\" type=\"text\" maxlength=\"120\" required value=\"")
2911+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 267, "\"> <label for=\"mr-title\">title</label> <input id=\"mr-title\" name=\"title\" type=\"text\" maxlength=\"120\" required value=\"")
28982912 if templ_7745c5c3_Err != nil {
28992913 return templ_7745c5c3_Err
29002914 }
29012915 var templ_7745c5c3_Var144 string
29022916 templ_7745c5c3_Var144, templ_7745c5c3_Err = templ.ResolveAttributeValue(p.Create.Title)
29032917 if templ_7745c5c3_Err != nil {
2904- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 538, Col: 97}
2918+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 546, Col: 97}
29052919 }
29062920 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ_7745c5c3_Var144)
29072921 if templ_7745c5c3_Err != nil {
29082922 return templ_7745c5c3_Err
29092923 }
2910- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 267, "\" autocomplete=\"off\"> <label for=\"mr-desc\">description</label> <textarea id=\"mr-desc\" name=\"description\" rows=\"4\" maxlength=\"8000\" placeholder=\"Markdown, optional\"></textarea><div class=\"f-btns\"><button type=\"submit\" class=\"btn primary\">Create merge request</button></div></form>")
2924+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 268, "\" autocomplete=\"off\"> <label for=\"mr-desc\">description</label> <textarea id=\"mr-desc\" name=\"description\" rows=\"4\" maxlength=\"8000\" placeholder=\"Markdown, optional\"></textarea><div class=\"f-btns\"><button type=\"submit\" class=\"btn primary\">Create merge request</button></div></form>")
29112925 if templ_7745c5c3_Err != nil {
29122926 return templ_7745c5c3_Err
29132927 }
29142928 }
2915- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 268, " ")
2929+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 269, " ")
29162930 if templ_7745c5c3_Err != nil {
29172931 return templ_7745c5c3_Err
29182932 }
29192933 if p.HasDiff {
2920- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 269, "<div class=\"diff-tools\" role=\"group\" aria-label=\"Diff view\"><span class=\"dim\">")
2934+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 270, "<div class=\"diff-tools\" role=\"group\" aria-label=\"Diff view\"><span class=\"dim\">")
29212935 if templ_7745c5c3_Err != nil {
29222936 return templ_7745c5c3_Err
29232937 }
29242938 var templ_7745c5c3_Var145 string
29252939 templ_7745c5c3_Var145, templ_7745c5c3_Err = templ.JoinStringErrs(plural(p.NFiles, "file", "files"))
29262940 if templ_7745c5c3_Err != nil {
2927- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 548, Col: 57}
2941+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 556, Col: 57}
29282942 }
29292943 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var145))
29302944 if templ_7745c5c3_Err != nil {
29312945 return templ_7745c5c3_Err
29322946 }
2933- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 270, " · <span class=\"plus\">+")
2947+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 271, " · <span class=\"plus\">+")
29342948 if templ_7745c5c3_Err != nil {
29352949 return templ_7745c5c3_Err
29362950 }
29372951 var templ_7745c5c3_Var146 string
29382952 templ_7745c5c3_Var146, templ_7745c5c3_Err = templ.JoinStringErrs(itoa(p.Adds))
29392953 if templ_7745c5c3_Err != nil {
2940- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 548, Col: 97}
2954+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 556, Col: 97}
29412955 }
29422956 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var146))
29432957 if templ_7745c5c3_Err != nil {
29442958 return templ_7745c5c3_Err
29452959 }
2946- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 271, "</span> <span class=\"minus\">-")
2960+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 272, "</span> <span class=\"minus\">-")
29472961 if templ_7745c5c3_Err != nil {
29482962 return templ_7745c5c3_Err
29492963 }
29502964 var templ_7745c5c3_Var147 string
29512965 templ_7745c5c3_Var147, templ_7745c5c3_Err = templ.JoinStringErrs(itoa(p.Dels))
29522966 if templ_7745c5c3_Err != nil {
2953- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 548, Col: 142}
2967+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 556, Col: 142}
29542968 }
29552969 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var147))
29562970 if templ_7745c5c3_Err != nil {
29572971 return templ_7745c5c3_Err
29582972 }
2959- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 272, "</span></span> <span class=\"grow\"></span>")
2973+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 273, "</span></span> <span class=\"grow\"></span>")
29602974 if templ_7745c5c3_Err != nil {
29612975 return templ_7745c5c3_Err
29622976 }
@@ -2972,64 +2986,64 @@ func Compare(l Layout, p ComparePage) templ.Component {
29722986 if templ_7745c5c3_Err != nil {
29732987 return templ_7745c5c3_Err
29742988 }
2975- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 273, "</div>")
2989+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 274, "</div>")
29762990 if templ_7745c5c3_Err != nil {
29772991 return templ_7745c5c3_Err
29782992 }
29792993 if p.Invisible {
2980- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 274, "<p class=\"notice\">this diff holds invisible characters (direction controls, zero-width characters). They are shown as <span class=\"inv\">&lt;U+XXXX&gt;</span> markers, never applied.</p>")
2994+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 275, "<p class=\"notice\">this diff holds invisible characters (direction controls, zero-width characters). They are shown as <span class=\"inv\">&lt;U+XXXX&gt;</span> markers, never applied.</p>")
29812995 if templ_7745c5c3_Err != nil {
29822996 return templ_7745c5c3_Err
29832997 }
29842998 }
2985- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 275, " <div id=\"diffs\"")
2999+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 276, " <div id=\"diffs\"")
29863000 if templ_7745c5c3_Err != nil {
29873001 return templ_7745c5c3_Err
29883002 }
29893003 if p.Both {
2990- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 276, " data-diff=\"")
3004+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 277, " data-diff=\"")
29913005 if templ_7745c5c3_Err != nil {
29923006 return templ_7745c5c3_Err
29933007 }
29943008 var templ_7745c5c3_Var148 string
29953009 templ_7745c5c3_Var148, templ_7745c5c3_Err = templ.ResolveAttributeValue(p.View)
29963010 if templ_7745c5c3_Err != nil {
2997- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 563, Col: 23}
3011+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 571, Col: 23}
29983012 }
29993013 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ_7745c5c3_Var148)
30003014 if templ_7745c5c3_Err != nil {
30013015 return templ_7745c5c3_Err
30023016 }
3003- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 277, "\"")
3017+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 278, "\"")
30043018 if templ_7745c5c3_Err != nil {
30053019 return templ_7745c5c3_Err
30063020 }
30073021 } else {
3008- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 278, " data-view=\"")
3022+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 279, " data-view=\"")
30093023 if templ_7745c5c3_Err != nil {
30103024 return templ_7745c5c3_Err
30113025 }
30123026 var templ_7745c5c3_Var149 string
30133027 templ_7745c5c3_Var149, templ_7745c5c3_Err = templ.ResolveAttributeValue(p.View)
30143028 if templ_7745c5c3_Err != nil {
3015- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 565, Col: 23}
3029+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 573, Col: 23}
30163030 }
30173031 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ_7745c5c3_Var149)
30183032 if templ_7745c5c3_Err != nil {
30193033 return templ_7745c5c3_Err
30203034 }
3021- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 279, "\"")
3035+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 280, "\"")
30223036 if templ_7745c5c3_Err != nil {
30233037 return templ_7745c5c3_Err
30243038 }
30253039 }
30263040 if p.Both && !p.Pinned {
3027- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 280, " hx-live=\"this.dataset.diff = sessionStorage.getItem('diff') || this.dataset.diff\"")
3041+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 281, " hx-live=\"this.dataset.diff = sessionStorage.getItem('diff') || this.dataset.diff\"")
30283042 if templ_7745c5c3_Err != nil {
30293043 return templ_7745c5c3_Err
30303044 }
30313045 }
3032- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 281, ">")
3046+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 282, ">")
30333047 if templ_7745c5c3_Err != nil {
30343048 return templ_7745c5c3_Err
30353049 }
@@ -3039,7 +3053,7 @@ func Compare(l Layout, p ComparePage) templ.Component {
30393053 return templ_7745c5c3_Err
30403054 }
30413055 }
3042- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 282, "</div>")
3056+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 283, "</div>")
30433057 if templ_7745c5c3_Err != nil {
30443058 return templ_7745c5c3_Err
30453059 }
@@ -3075,77 +3089,77 @@ func compareRail(p ComparePage) templ.Component {
30753089 templ_7745c5c3_Var150 = templ.NopComponent
30763090 }
30773091 ctx = templ.ClearChildren(ctx)
3078- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 283, "<section aria-labelledby=\"r-ahead\"><h2 id=\"r-ahead\">Commits <span class=\"count\">")
3092+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 284, "<section aria-labelledby=\"r-ahead\"><h2 id=\"r-ahead\">Commits <span class=\"count\">")
30793093 if templ_7745c5c3_Err != nil {
30803094 return templ_7745c5c3_Err
30813095 }
30823096 var templ_7745c5c3_Var151 string
30833097 templ_7745c5c3_Var151, templ_7745c5c3_Err = templ.JoinStringErrs(itoa(len(p.Ahead)))
30843098 if templ_7745c5c3_Err != nil {
3085- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 581, Col: 67}
3099+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 589, Col: 67}
30863100 }
30873101 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var151))
30883102 if templ_7745c5c3_Err != nil {
30893103 return templ_7745c5c3_Err
30903104 }
3091- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 284, "</span></h2><ul class=\"pcommits\">")
3105+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 285, "</span></h2><ul class=\"pcommits\">")
30923106 if templ_7745c5c3_Err != nil {
30933107 return templ_7745c5c3_Err
30943108 }
30953109 for _, c := range p.Ahead {
3096- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 285, "<li><a href=\"")
3110+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 286, "<li><a href=\"")
30973111 if templ_7745c5c3_Err != nil {
30983112 return templ_7745c5c3_Err
30993113 }
31003114 var templ_7745c5c3_Var152 templ.SafeURL
31013115 templ_7745c5c3_Var152, templ_7745c5c3_Err = templ.JoinURLErrs(templ.SafeURL(c.CHref))
31023116 if templ_7745c5c3_Err != nil {
3103- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 585, Col: 37}
3117+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 593, Col: 37}
31043118 }
31053119 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var152))
31063120 if templ_7745c5c3_Err != nil {
31073121 return templ_7745c5c3_Err
31083122 }
3109- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 286, "\">")
3123+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 287, "\">")
31103124 if templ_7745c5c3_Err != nil {
31113125 return templ_7745c5c3_Err
31123126 }
31133127 var templ_7745c5c3_Var153 string
31143128 templ_7745c5c3_Var153, templ_7745c5c3_Err = templ.JoinStringErrs(c.Short)
31153129 if templ_7745c5c3_Err != nil {
3116- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 585, Col: 49}
3130+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 593, Col: 49}
31173131 }
31183132 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var153))
31193133 if templ_7745c5c3_Err != nil {
31203134 return templ_7745c5c3_Err
31213135 }
3122- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 287, "</a> <span class=\"s\">")
3136+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 288, "</a> <span class=\"s\">")
31233137 if templ_7745c5c3_Err != nil {
31243138 return templ_7745c5c3_Err
31253139 }
31263140 var templ_7745c5c3_Var154 string
31273141 templ_7745c5c3_Var154, templ_7745c5c3_Err = templ.JoinStringErrs(c.Subject)
31283142 if templ_7745c5c3_Err != nil {
3129- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 586, Col: 32}
3143+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 594, Col: 32}
31303144 }
31313145 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var154))
31323146 if templ_7745c5c3_Err != nil {
31333147 return templ_7745c5c3_Err
31343148 }
3135- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 288, "</span> <span class=\"mute\">")
3149+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 289, "</span> <span class=\"mute\">")
31363150 if templ_7745c5c3_Err != nil {
31373151 return templ_7745c5c3_Err
31383152 }
31393153 var templ_7745c5c3_Var155 string
31403154 templ_7745c5c3_Var155, templ_7745c5c3_Err = templ.JoinStringErrs(c.Author)
31413155 if templ_7745c5c3_Err != nil {
3142- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 588, Col: 16}
3156+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 596, Col: 16}
31433157 }
31443158 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var155))
31453159 if templ_7745c5c3_Err != nil {
31463160 return templ_7745c5c3_Err
31473161 }
3148- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 289, " ")
3162+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 290, " ")
31493163 if templ_7745c5c3_Err != nil {
31503164 return templ_7745c5c3_Err
31513165 }
@@ -3153,90 +3167,90 @@ func compareRail(p ComparePage) templ.Component {
31533167 var templ_7745c5c3_Var156 string
31543168 templ_7745c5c3_Var156, templ_7745c5c3_Err = templ.JoinStringErrs(" · ")
31553169 if templ_7745c5c3_Err != nil {
3156- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 590, Col: 15}
3170+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 598, Col: 15}
31573171 }
31583172 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var156))
31593173 if templ_7745c5c3_Err != nil {
31603174 return templ_7745c5c3_Err
31613175 }
3162- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 290, "<time datetime=\"")
3176+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 291, "<time datetime=\"")
31633177 if templ_7745c5c3_Err != nil {
31643178 return templ_7745c5c3_Err
31653179 }
31663180 var templ_7745c5c3_Var157 string
31673181 templ_7745c5c3_Var157, templ_7745c5c3_Err = templ.ResolveAttributeValue(c.WhenAt)
31683182 if templ_7745c5c3_Err != nil {
3169- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 590, Col: 42}
3183+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 598, Col: 42}
31703184 }
31713185 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ_7745c5c3_Var157)
31723186 if templ_7745c5c3_Err != nil {
31733187 return templ_7745c5c3_Err
31743188 }
3175- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 291, "\">")
3189+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 292, "\">")
31763190 if templ_7745c5c3_Err != nil {
31773191 return templ_7745c5c3_Err
31783192 }
31793193 var templ_7745c5c3_Var158 string
31803194 templ_7745c5c3_Var158, templ_7745c5c3_Err = templ.JoinStringErrs(c.When)
31813195 if templ_7745c5c3_Err != nil {
3182- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 590, Col: 53}
3196+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 598, Col: 53}
31833197 }
31843198 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var158))
31853199 if templ_7745c5c3_Err != nil {
31863200 return templ_7745c5c3_Err
31873201 }
3188- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 292, "</time>")
3202+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 293, "</time>")
31893203 if templ_7745c5c3_Err != nil {
31903204 return templ_7745c5c3_Err
31913205 }
31923206 }
3193- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 293, "</span></li>")
3207+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 294, "</span></li>")
31943208 if templ_7745c5c3_Err != nil {
31953209 return templ_7745c5c3_Err
31963210 }
31973211 }
3198- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 294, "</ul>")
3212+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 295, "</ul>")
31993213 if templ_7745c5c3_Err != nil {
32003214 return templ_7745c5c3_Err
32013215 }
32023216 if len(p.Ahead) == 0 {
3203- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 295, "<p class=\"dim\">no commit ahead of ")
3217+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 296, "<p class=\"dim\">no commit ahead of ")
32043218 if templ_7745c5c3_Err != nil {
32053219 return templ_7745c5c3_Err
32063220 }
32073221 var templ_7745c5c3_Var159 string
32083222 templ_7745c5c3_Var159, templ_7745c5c3_Err = templ.JoinStringErrs(p.Target)
32093223 if templ_7745c5c3_Err != nil {
3210- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 597, Col: 47}
3224+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 605, Col: 47}
32113225 }
32123226 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var159))
32133227 if templ_7745c5c3_Err != nil {
32143228 return templ_7745c5c3_Err
32153229 }
3216- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 296, ".</p>")
3230+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 297, ".</p>")
32173231 if templ_7745c5c3_Err != nil {
32183232 return templ_7745c5c3_Err
32193233 }
32203234 }
3221- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 297, "</section>")
3235+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 298, "</section>")
32223236 if templ_7745c5c3_Err != nil {
32233237 return templ_7745c5c3_Err
32243238 }
32253239 if p.HasDiff {
3226- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 298, "<section aria-labelledby=\"r-files\"><h2 id=\"r-files\">Files <span class=\"count\">")
3240+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 299, "<section aria-labelledby=\"r-files\"><h2 id=\"r-files\">Files <span class=\"count\">")
32273241 if templ_7745c5c3_Err != nil {
32283242 return templ_7745c5c3_Err
32293243 }
32303244 var templ_7745c5c3_Var160 string
32313245 templ_7745c5c3_Var160, templ_7745c5c3_Err = templ.JoinStringErrs(itoa(len(p.Files)))
32323246 if templ_7745c5c3_Err != nil {
3233- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 602, Col: 66}
3247+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 610, Col: 66}
32343248 }
32353249 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var160))
32363250 if templ_7745c5c3_Err != nil {
32373251 return templ_7745c5c3_Err
32383252 }
3239- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 299, "</span></h2>")
3253+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 300, "</span></h2>")
32403254 if templ_7745c5c3_Err != nil {
32413255 return templ_7745c5c3_Err
32423256 }
@@ -3244,12 +3258,12 @@ func compareRail(p ComparePage) templ.Component {
32443258 if templ_7745c5c3_Err != nil {
32453259 return templ_7745c5c3_Err
32463260 }
3247- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 300, "</section>")
3261+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 301, "</section>")
32483262 if templ_7745c5c3_Err != nil {
32493263 return templ_7745c5c3_Err
32503264 }
32513265 }
3252- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 301, "<section aria-labelledby=\"r-cli\"><h2 id=\"r-cli\">From a terminal</h2>")
3266+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 302, "<section aria-labelledby=\"r-cli\"><h2 id=\"r-cli\">From a terminal</h2>")
32533267 if templ_7745c5c3_Err != nil {
32543268 return templ_7745c5c3_Err
32553269 }
@@ -3257,7 +3271,7 @@ func compareRail(p ComparePage) templ.Component {
32573271 if templ_7745c5c3_Err != nil {
32583272 return templ_7745c5c3_Err
32593273 }
3260- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 302, "</section>")
3274+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 303, "</section>")
32613275 if templ_7745c5c3_Err != nil {
32623276 return templ_7745c5c3_Err
32633277 }
@@ -1407,160 +1407,174 @@ func commentView(c CommentView, suffix string) templ.Component {
1407 return templ_7745c5c3_Err1407 return templ_7745c5c3_Err
1408 }1408 }
1409 if c.Deleted {1409 if c.Deleted {
1410- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 124, "<p class=\"mute\">deleted note</p>")1410+ if c.Verdict != "" {
1411- if templ_7745c5c3_Err != nil {1411+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 124, "<p class=\"mute\">text deleted</p>")
1412- return templ_7745c5c3_Err1412+ if templ_7745c5c3_Err != nil {
1413+ return templ_7745c5c3_Err
1414+ }
1415+ } else {
1416+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 125, "<p class=\"mute\">deleted note</p>")
1417+ if templ_7745c5c3_Err != nil {
1418+ return templ_7745c5c3_Err
1419+ }
1413 }1420 }
1414 } else {1421 } else {
1415- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 125, "<div class=\"c-body prose\">")1422+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 126, "<div class=\"c-body prose\">")
1416 if templ_7745c5c3_Err != nil {1423 if templ_7745c5c3_Err != nil {
1417 return templ_7745c5c3_Err1424 return templ_7745c5c3_Err
1418 }1425 }
1419- templ_7745c5c3_Err = templ.Raw(string(c.Body)).Render(ctx, templ_7745c5c3_Buffer)1426+ if suffix == "-s" {
1420- if templ_7745c5c3_Err != nil {1427+ templ_7745c5c3_Err = templ.Raw(string(c.BodySplit)).Render(ctx, templ_7745c5c3_Buffer)
1421- return templ_7745c5c3_Err1428+ if templ_7745c5c3_Err != nil {
1429+ return templ_7745c5c3_Err
1430+ }
1431+ } else {
1432+ templ_7745c5c3_Err = templ.Raw(string(c.Body)).Render(ctx, templ_7745c5c3_Buffer)
1433+ if templ_7745c5c3_Err != nil {
1434+ return templ_7745c5c3_Err
1435+ }
1422 }1436 }
1423- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 126, "</div>")1437+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 127, "</div>")
1424 if templ_7745c5c3_Err != nil {1438 if templ_7745c5c3_Err != nil {
1425 return templ_7745c5c3_Err1439 return templ_7745c5c3_Err
1426 }1440 }
1427 }1441 }
1428 if c.Edited {1442 if c.Edited {
1429- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 127, "<span class=\"mute\">edited</span> ")1443+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 128, "<span class=\"mute\">edited</span> ")
1430 if templ_7745c5c3_Err != nil {1444 if templ_7745c5c3_Err != nil {
1431 return templ_7745c5c3_Err1445 return templ_7745c5c3_Err
1432 }1446 }
1433 }1447 }
1434 if c.Verdict != "" {1448 if c.Verdict != "" {
1435- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 128, "<span class=\"c-state\">")1449+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 129, "<span class=\"c-state\">")
1436 if templ_7745c5c3_Err != nil {1450 if templ_7745c5c3_Err != nil {
1437 return templ_7745c5c3_Err1451 return templ_7745c5c3_Err
1438 }1452 }
1439 var templ_7745c5c3_Var70 string1453 var templ_7745c5c3_Var70 string
1440 templ_7745c5c3_Var70, templ_7745c5c3_Err = templ.JoinStringErrs(c.Verdict)1454 templ_7745c5c3_Var70, templ_7745c5c3_Err = templ.JoinStringErrs(c.Verdict)
1441 if templ_7745c5c3_Err != nil {1455 if templ_7745c5c3_Err != nil {
1442- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 261, Col: 36}1456+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 269, Col: 36}
1443 }1457 }
1444 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var70))1458 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var70))
1445 if templ_7745c5c3_Err != nil {1459 if templ_7745c5c3_Err != nil {
1446 return templ_7745c5c3_Err1460 return templ_7745c5c3_Err
1447 }1461 }
1448- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 129, "</span> ")1462+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 130, "</span> ")
1449 if templ_7745c5c3_Err != nil {1463 if templ_7745c5c3_Err != nil {
1450 return templ_7745c5c3_Err1464 return templ_7745c5c3_Err
1451 }1465 }
1452 }1466 }
1453 if c.Range != "" {1467 if c.Range != "" {
1454- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 130, "<span class=\"mute\">")1468+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 131, "<span class=\"mute\">")
1455 if templ_7745c5c3_Err != nil {1469 if templ_7745c5c3_Err != nil {
1456 return templ_7745c5c3_Err1470 return templ_7745c5c3_Err
1457 }1471 }
1458 var templ_7745c5c3_Var71 string1472 var templ_7745c5c3_Var71 string
1459 templ_7745c5c3_Var71, templ_7745c5c3_Err = templ.JoinStringErrs(c.Range)1473 templ_7745c5c3_Var71, templ_7745c5c3_Err = templ.JoinStringErrs(c.Range)
1460 if templ_7745c5c3_Err != nil {1474 if templ_7745c5c3_Err != nil {
1461- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 264, Col: 31}1475+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 272, Col: 31}
1462 }1476 }
1463 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var71))1477 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var71))
1464 if templ_7745c5c3_Err != nil {1478 if templ_7745c5c3_Err != nil {
1465 return templ_7745c5c3_Err1479 return templ_7745c5c3_Err
1466 }1480 }
1467- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 131, "</span> ")1481+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 132, "</span> ")
1468 if templ_7745c5c3_Err != nil {1482 if templ_7745c5c3_Err != nil {
1469 return templ_7745c5c3_Err1483 return templ_7745c5c3_Err
1470 }1484 }
1471 }1485 }
1472 if c.Quote != "" {1486 if c.Quote != "" {
1473- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 132, "<button type=\"button\" class=\"btn\" data-js data-quote=\"")1487+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 133, "<button type=\"button\" class=\"btn\" data-js data-quote=\"")
1474 if templ_7745c5c3_Err != nil {1488 if templ_7745c5c3_Err != nil {
1475 return templ_7745c5c3_Err1489 return templ_7745c5c3_Err
1476 }1490 }
1477 var templ_7745c5c3_Var72 string1491 var templ_7745c5c3_Var72 string
1478 templ_7745c5c3_Var72, templ_7745c5c3_Err = templ.ResolveAttributeValue(c.Quote)1492 templ_7745c5c3_Var72, templ_7745c5c3_Err = templ.ResolveAttributeValue(c.Quote)
1479 if templ_7745c5c3_Err != nil {1493 if templ_7745c5c3_Err != nil {
1480- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 267, Col: 65}1494+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 275, Col: 65}
1481 }1495 }
1482 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ_7745c5c3_Var72)1496 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ_7745c5c3_Var72)
1483 if templ_7745c5c3_Err != nil {1497 if templ_7745c5c3_Err != nil {
1484 return templ_7745c5c3_Err1498 return templ_7745c5c3_Err
1485 }1499 }
1486- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 133, "\">Quote</button> ")1500+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 134, "\">Quote</button> ")
1487 if templ_7745c5c3_Err != nil {1501 if templ_7745c5c3_Err != nil {
1488 return templ_7745c5c3_Err1502 return templ_7745c5c3_Err
1489 }1503 }
1490 }1504 }
1491 if c.Edit != nil {1505 if c.Edit != nil {
1492- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 134, "<details><summary>Edit</summary><form method=\"post\" action=\"")1506+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 135, "<details><summary>Edit</summary><form method=\"post\" action=\"")
1493 if templ_7745c5c3_Err != nil {1507 if templ_7745c5c3_Err != nil {
1494 return templ_7745c5c3_Err1508 return templ_7745c5c3_Err
1495 }1509 }
1496 var templ_7745c5c3_Var73 templ.SafeURL1510 var templ_7745c5c3_Var73 templ.SafeURL
1497 templ_7745c5c3_Var73, templ_7745c5c3_Err = templ.JoinURLErrs(templ.SafeURL(c.Edit.Action))1511 templ_7745c5c3_Var73, templ_7745c5c3_Err = templ.JoinURLErrs(templ.SafeURL(c.Edit.Action))
1498 if templ_7745c5c3_Err != nil {1512 if templ_7745c5c3_Err != nil {
1499- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 270, Col: 92}1513+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 278, Col: 92}
1500 }1514 }
1501 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var73))1515 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var73))
1502 if templ_7745c5c3_Err != nil {1516 if templ_7745c5c3_Err != nil {
1503 return templ_7745c5c3_Err1517 return templ_7745c5c3_Err
1504 }1518 }
1505- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 135, "\"><input type=\"hidden\" name=\"from\" value=\"")1519+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 136, "\"><input type=\"hidden\" name=\"from\" value=\"")
1506 if templ_7745c5c3_Err != nil {1520 if templ_7745c5c3_Err != nil {
1507 return templ_7745c5c3_Err1521 return templ_7745c5c3_Err
1508 }1522 }
1509 var templ_7745c5c3_Var74 string1523 var templ_7745c5c3_Var74 string
1510 templ_7745c5c3_Var74, templ_7745c5c3_Err = templ.ResolveAttributeValue(itoa(c.Edit.From))1524 templ_7745c5c3_Var74, templ_7745c5c3_Err = templ.ResolveAttributeValue(itoa(c.Edit.From))
1511 if templ_7745c5c3_Err != nil {1525 if templ_7745c5c3_Err != nil {
1512- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 270, Col: 153}1526+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 278, Col: 153}
1513 }1527 }
1514 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ_7745c5c3_Var74)1528 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ_7745c5c3_Var74)
1515 if templ_7745c5c3_Err != nil {1529 if templ_7745c5c3_Err != nil {
1516 return templ_7745c5c3_Err1530 return templ_7745c5c3_Err
1517 }1531 }
1518- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 136, "\"><textarea name=\"text\" maxlength=\"8000\">")1532+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 137, "\"><textarea name=\"text\" maxlength=\"8000\">")
1519 if templ_7745c5c3_Err != nil {1533 if templ_7745c5c3_Err != nil {
1520 return templ_7745c5c3_Err1534 return templ_7745c5c3_Err
1521 }1535 }
1522 var templ_7745c5c3_Var75 string1536 var templ_7745c5c3_Var75 string
1523 templ_7745c5c3_Var75, templ_7745c5c3_Err = templ.JoinStringErrs(c.Edit.Text)1537 templ_7745c5c3_Var75, templ_7745c5c3_Err = templ.JoinStringErrs(c.Edit.Text)
1524 if templ_7745c5c3_Err != nil {1538 if templ_7745c5c3_Err != nil {
1525- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 270, Col: 209}1539+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 278, Col: 209}
1526 }1540 }
1527 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var75))1541 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var75))
1528 if templ_7745c5c3_Err != nil {1542 if templ_7745c5c3_Err != nil {
1529 return templ_7745c5c3_Err1543 return templ_7745c5c3_Err
1530 }1544 }
1531- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 137, "</textarea><button class=\"btn\" type=\"submit\">Save</button></form></details> ")1545+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 138, "</textarea><button class=\"btn\" type=\"submit\">Save</button></form></details> ")
1532 if templ_7745c5c3_Err != nil {1546 if templ_7745c5c3_Err != nil {
1533 return templ_7745c5c3_Err1547 return templ_7745c5c3_Err
1534 }1548 }
1535 }1549 }
1536 if c.Delete != nil {1550 if c.Delete != nil {
1537- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 138, "<details><summary>Delete</summary><form method=\"post\" action=\"")1551+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 139, "<details><summary>Delete</summary><form method=\"post\" action=\"")
1538 if templ_7745c5c3_Err != nil {1552 if templ_7745c5c3_Err != nil {
1539 return templ_7745c5c3_Err1553 return templ_7745c5c3_Err
1540 }1554 }
1541 var templ_7745c5c3_Var76 templ.SafeURL1555 var templ_7745c5c3_Var76 templ.SafeURL
1542 templ_7745c5c3_Var76, templ_7745c5c3_Err = templ.JoinURLErrs(templ.SafeURL(c.Delete.Action))1556 templ_7745c5c3_Var76, templ_7745c5c3_Err = templ.JoinURLErrs(templ.SafeURL(c.Delete.Action))
1543 if templ_7745c5c3_Err != nil {1557 if templ_7745c5c3_Err != nil {
1544- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 273, Col: 96}1558+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 281, Col: 96}
1545 }1559 }
1546 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var76))1560 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var76))
1547 if templ_7745c5c3_Err != nil {1561 if templ_7745c5c3_Err != nil {
1548 return templ_7745c5c3_Err1562 return templ_7745c5c3_Err
1549 }1563 }
1550- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 139, "\"><input type=\"hidden\" name=\"from\" value=\"")1564+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 140, "\"><input type=\"hidden\" name=\"from\" value=\"")
1551 if templ_7745c5c3_Err != nil {1565 if templ_7745c5c3_Err != nil {
1552 return templ_7745c5c3_Err1566 return templ_7745c5c3_Err
1553 }1567 }
1554 var templ_7745c5c3_Var77 string1568 var templ_7745c5c3_Var77 string
1555 templ_7745c5c3_Var77, templ_7745c5c3_Err = templ.ResolveAttributeValue(itoa(c.Delete.From))1569 templ_7745c5c3_Var77, templ_7745c5c3_Err = templ.ResolveAttributeValue(itoa(c.Delete.From))
1556 if templ_7745c5c3_Err != nil {1570 if templ_7745c5c3_Err != nil {
1557- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 273, Col: 159}1571+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 281, Col: 159}
1558 }1572 }
1559 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ_7745c5c3_Var77)1573 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ_7745c5c3_Var77)
1560 if templ_7745c5c3_Err != nil {1574 if templ_7745c5c3_Err != nil {
1561 return templ_7745c5c3_Err1575 return templ_7745c5c3_Err
1562 }1576 }
1563- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 140, "\"><p>Delete this note?</p><button class=\"btn\" type=\"submit\">Confirm delete</button></form></details> ")1577+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 141, "\"><p>Delete this note?</p><button class=\"btn\" type=\"submit\">Confirm delete</button></form></details> ")
1564 if templ_7745c5c3_Err != nil {1578 if templ_7745c5c3_Err != nil {
1565 return templ_7745c5c3_Err1579 return templ_7745c5c3_Err
1566 }1580 }
@@ -1572,7 +1586,7 @@ func commentView(c CommentView, suffix string) templ.Component {
1572 }1586 }
1573 }1587 }
1574 if c.Reply != nil {1588 if c.Reply != nil {
1575- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 141, "<details data-reply><summary>Reply</summary>")1589+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 142, "<details data-reply><summary>Reply</summary>")
1576 if templ_7745c5c3_Err != nil {1590 if templ_7745c5c3_Err != nil {
1577 return templ_7745c5c3_Err1591 return templ_7745c5c3_Err
1578 }1592 }
@@ -1580,80 +1594,80 @@ func commentView(c CommentView, suffix string) templ.Component {
1580 if templ_7745c5c3_Err != nil {1594 if templ_7745c5c3_Err != nil {
1581 return templ_7745c5c3_Err1595 return templ_7745c5c3_Err
1582 }1596 }
1583- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 142, "</details> ")1597+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 143, "</details> ")
1584 if templ_7745c5c3_Err != nil {1598 if templ_7745c5c3_Err != nil {
1585 return templ_7745c5c3_Err1599 return templ_7745c5c3_Err
1586 }1600 }
1587 }1601 }
1588 if c.Resolve != nil {1602 if c.Resolve != nil {
1589- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 143, "<form class=\"c-act\" method=\"post\" action=\"")1603+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 144, "<form class=\"c-act\" method=\"post\" action=\"")
1590 if templ_7745c5c3_Err != nil {1604 if templ_7745c5c3_Err != nil {
1591 return templ_7745c5c3_Err1605 return templ_7745c5c3_Err
1592 }1606 }
1593 var templ_7745c5c3_Var78 templ.SafeURL1607 var templ_7745c5c3_Var78 templ.SafeURL
1594 templ_7745c5c3_Var78, templ_7745c5c3_Err = templ.JoinURLErrs(templ.SafeURL(c.Resolve.Action))1608 templ_7745c5c3_Var78, templ_7745c5c3_Err = templ.JoinURLErrs(templ.SafeURL(c.Resolve.Action))
1595 if templ_7745c5c3_Err != nil {1609 if templ_7745c5c3_Err != nil {
1596- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 284, Col: 77}1610+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 292, Col: 77}
1597 }1611 }
1598 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var78))1612 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var78))
1599 if templ_7745c5c3_Err != nil {1613 if templ_7745c5c3_Err != nil {
1600 return templ_7745c5c3_Err1614 return templ_7745c5c3_Err
1601 }1615 }
1602- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 144, "\"><input type=\"hidden\" name=\"resolved\" value=\"")1616+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 145, "\"><input type=\"hidden\" name=\"resolved\" value=\"")
1603 if templ_7745c5c3_Err != nil {1617 if templ_7745c5c3_Err != nil {
1604 return templ_7745c5c3_Err1618 return templ_7745c5c3_Err
1605 }1619 }
1606 var templ_7745c5c3_Var79 string1620 var templ_7745c5c3_Var79 string
1607 templ_7745c5c3_Var79, templ_7745c5c3_Err = templ.ResolveAttributeValue(boolText(c.Resolve.Value))1621 templ_7745c5c3_Var79, templ_7745c5c3_Err = templ.ResolveAttributeValue(boolText(c.Resolve.Value))
1608 if templ_7745c5c3_Err != nil {1622 if templ_7745c5c3_Err != nil {
1609- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 285, Col: 74}1623+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 293, Col: 74}
1610 }1624 }
1611 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ_7745c5c3_Var79)1625 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ_7745c5c3_Var79)
1612 if templ_7745c5c3_Err != nil {1626 if templ_7745c5c3_Err != nil {
1613 return templ_7745c5c3_Err1627 return templ_7745c5c3_Err
1614 }1628 }
1615- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 145, "\"> ")1629+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 146, "\"> ")
1616 if templ_7745c5c3_Err != nil {1630 if templ_7745c5c3_Err != nil {
1617 return templ_7745c5c3_Err1631 return templ_7745c5c3_Err
1618 }1632 }
1619 if c.Resolve.From > 0 {1633 if c.Resolve.From > 0 {
1620- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 146, "<input type=\"hidden\" name=\"from\" value=\"")1634+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 147, "<input type=\"hidden\" name=\"from\" value=\"")
1621 if templ_7745c5c3_Err != nil {1635 if templ_7745c5c3_Err != nil {
1622 return templ_7745c5c3_Err1636 return templ_7745c5c3_Err
1623 }1637 }
1624 var templ_7745c5c3_Var80 string1638 var templ_7745c5c3_Var80 string
1625 templ_7745c5c3_Var80, templ_7745c5c3_Err = templ.ResolveAttributeValue(itoa(c.Resolve.From))1639 templ_7745c5c3_Var80, templ_7745c5c3_Err = templ.ResolveAttributeValue(itoa(c.Resolve.From))
1626 if templ_7745c5c3_Err != nil {1640 if templ_7745c5c3_Err != nil {
1627- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 287, Col: 66}1641+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 295, Col: 66}
1628 }1642 }
1629 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ_7745c5c3_Var80)1643 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ_7745c5c3_Var80)
1630 if templ_7745c5c3_Err != nil {1644 if templ_7745c5c3_Err != nil {
1631 return templ_7745c5c3_Err1645 return templ_7745c5c3_Err
1632 }1646 }
1633- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 147, "\"> ")1647+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 148, "\"> ")
1634 if templ_7745c5c3_Err != nil {1648 if templ_7745c5c3_Err != nil {
1635 return templ_7745c5c3_Err1649 return templ_7745c5c3_Err
1636 }1650 }
1637 }1651 }
1638- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 148, "<button type=\"submit\" class=\"btn\">")1652+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 149, "<button type=\"submit\" class=\"btn\">")
1639 if templ_7745c5c3_Err != nil {1653 if templ_7745c5c3_Err != nil {
1640 return templ_7745c5c3_Err1654 return templ_7745c5c3_Err
1641 }1655 }
1642 var templ_7745c5c3_Var81 string1656 var templ_7745c5c3_Var81 string
1643 templ_7745c5c3_Var81, templ_7745c5c3_Err = templ.JoinStringErrs(c.Resolve.Label)1657 templ_7745c5c3_Var81, templ_7745c5c3_Err = templ.JoinStringErrs(c.Resolve.Label)
1644 if templ_7745c5c3_Err != nil {1658 if templ_7745c5c3_Err != nil {
1645- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 289, Col: 55}1659+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 297, Col: 55}
1646 }1660 }
1647 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var81))1661 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var81))
1648 if templ_7745c5c3_Err != nil {1662 if templ_7745c5c3_Err != nil {
1649 return templ_7745c5c3_Err1663 return templ_7745c5c3_Err
1650 }1664 }
1651- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 149, "</button></form>")1665+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 150, "</button></form>")
1652 if templ_7745c5c3_Err != nil {1666 if templ_7745c5c3_Err != nil {
1653 return templ_7745c5c3_Err1667 return templ_7745c5c3_Err
1654 }1668 }
1655 }1669 }
1656- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 150, "</div>")1670+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 151, "</div>")
1657 if templ_7745c5c3_Err != nil {1671 if templ_7745c5c3_Err != nil {
1658 return templ_7745c5c3_Err1672 return templ_7745c5c3_Err
1659 }1673 }
@@ -1690,198 +1704,198 @@ func commentForm(f CommentForm, suffix string) templ.Component {
1690 templ_7745c5c3_Var82 = templ.NopComponent1704 templ_7745c5c3_Var82 = templ.NopComponent
1691 }1705 }
1692 ctx = templ.ClearChildren(ctx)1706 ctx = templ.ClearChildren(ctx)
1693- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 151, "<form class=\"cform\" method=\"post\" action=\"")1707+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 152, "<form class=\"cform\" method=\"post\" action=\"")
1694 if templ_7745c5c3_Err != nil {1708 if templ_7745c5c3_Err != nil {
1695 return templ_7745c5c3_Err1709 return templ_7745c5c3_Err
1696 }1710 }
1697 var templ_7745c5c3_Var83 templ.SafeURL1711 var templ_7745c5c3_Var83 templ.SafeURL
1698 templ_7745c5c3_Var83, templ_7745c5c3_Err = templ.JoinURLErrs(templ.SafeURL(f.Action))1712 templ_7745c5c3_Var83, templ_7745c5c3_Err = templ.JoinURLErrs(templ.SafeURL(f.Action))
1699 if templ_7745c5c3_Err != nil {1713 if templ_7745c5c3_Err != nil {
1700- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 304, Col: 67}1714+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 312, Col: 67}
1701 }1715 }
1702 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var83))1716 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var83))
1703 if templ_7745c5c3_Err != nil {1717 if templ_7745c5c3_Err != nil {
1704 return templ_7745c5c3_Err1718 return templ_7745c5c3_Err
1705 }1719 }
1706- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 152, "\"><label for=\"")1720+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 153, "\"><label for=\"")
1707 if templ_7745c5c3_Err != nil {1721 if templ_7745c5c3_Err != nil {
1708 return templ_7745c5c3_Err1722 return templ_7745c5c3_Err
1709 }1723 }
1710 var templ_7745c5c3_Var84 string1724 var templ_7745c5c3_Var84 string
1711 templ_7745c5c3_Var84, templ_7745c5c3_Err = templ.ResolveAttributeValue(f.ID + suffix)1725 templ_7745c5c3_Var84, templ_7745c5c3_Err = templ.ResolveAttributeValue(f.ID + suffix)
1712 if templ_7745c5c3_Err != nil {1726 if templ_7745c5c3_Err != nil {
1713- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 305, Col: 28}1727+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 313, Col: 28}
1714 }1728 }
1715 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ_7745c5c3_Var84)1729 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ_7745c5c3_Var84)
1716 if templ_7745c5c3_Err != nil {1730 if templ_7745c5c3_Err != nil {
1717 return templ_7745c5c3_Err1731 return templ_7745c5c3_Err
1718 }1732 }
1719- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 153, "\">")1733+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 154, "\">")
1720 if templ_7745c5c3_Err != nil {1734 if templ_7745c5c3_Err != nil {
1721 return templ_7745c5c3_Err1735 return templ_7745c5c3_Err
1722 }1736 }
1723 var templ_7745c5c3_Var85 string1737 var templ_7745c5c3_Var85 string
1724 templ_7745c5c3_Var85, templ_7745c5c3_Err = templ.JoinStringErrs(f.Title)1738 templ_7745c5c3_Var85, templ_7745c5c3_Err = templ.JoinStringErrs(f.Title)
1725 if templ_7745c5c3_Err != nil {1739 if templ_7745c5c3_Err != nil {
1726- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 305, Col: 40}1740+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 313, Col: 40}
1727 }1741 }
1728 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var85))1742 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var85))
1729 if templ_7745c5c3_Err != nil {1743 if templ_7745c5c3_Err != nil {
1730 return templ_7745c5c3_Err1744 return templ_7745c5c3_Err
1731 }1745 }
1732- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 154, "</label> <textarea id=\"")1746+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 155, "</label> <textarea id=\"")
1733 if templ_7745c5c3_Err != nil {1747 if templ_7745c5c3_Err != nil {
1734 return templ_7745c5c3_Err1748 return templ_7745c5c3_Err
1735 }1749 }
1736 var templ_7745c5c3_Var86 string1750 var templ_7745c5c3_Var86 string
1737 templ_7745c5c3_Var86, templ_7745c5c3_Err = templ.ResolveAttributeValue(f.ID + suffix)1751 templ_7745c5c3_Var86, templ_7745c5c3_Err = templ.ResolveAttributeValue(f.ID + suffix)
1738 if templ_7745c5c3_Err != nil {1752 if templ_7745c5c3_Err != nil {
1739- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 307, Col: 21}1753+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 315, Col: 21}
1740 }1754 }
1741 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ_7745c5c3_Var86)1755 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ_7745c5c3_Var86)
1742 if templ_7745c5c3_Err != nil {1756 if templ_7745c5c3_Err != nil {
1743 return templ_7745c5c3_Err1757 return templ_7745c5c3_Err
1744 }1758 }
1745- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 155, "\" name=\"text\" rows=\"3\" maxlength=\"8000\" placeholder=\"Markdown, 8000 characters at most\"")1759+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 156, "\" name=\"text\" rows=\"3\" maxlength=\"8000\" placeholder=\"Markdown, 8000 characters at most\"")
1746 if templ_7745c5c3_Err != nil {1760 if templ_7745c5c3_Err != nil {
1747 return templ_7745c5c3_Err1761 return templ_7745c5c3_Err
1748 }1762 }
1749 if f.Focus {1763 if f.Focus {
1750- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 156, " autofocus")1764+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 157, " autofocus")
1751 if templ_7745c5c3_Err != nil {1765 if templ_7745c5c3_Err != nil {
1752 return templ_7745c5c3_Err1766 return templ_7745c5c3_Err
1753 }1767 }
1754 }1768 }
1755- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 157, "></textarea> ")1769+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 158, "></textarea> ")
1756 if templ_7745c5c3_Err != nil {1770 if templ_7745c5c3_Err != nil {
1757 return templ_7745c5c3_Err1771 return templ_7745c5c3_Err
1758 }1772 }
1759 if f.Path != "" {1773 if f.Path != "" {
1760- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 158, "<input type=\"hidden\" name=\"path\" value=\"")1774+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 159, "<input type=\"hidden\" name=\"path\" value=\"")
1761 if templ_7745c5c3_Err != nil {1775 if templ_7745c5c3_Err != nil {
1762 return templ_7745c5c3_Err1776 return templ_7745c5c3_Err
1763 }1777 }
1764 var templ_7745c5c3_Var87 string1778 var templ_7745c5c3_Var87 string
1765 templ_7745c5c3_Var87, templ_7745c5c3_Err = templ.ResolveAttributeValue(f.Path)1779 templ_7745c5c3_Var87, templ_7745c5c3_Err = templ.ResolveAttributeValue(f.Path)
1766 if templ_7745c5c3_Err != nil {1780 if templ_7745c5c3_Err != nil {
1767- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 317, Col: 50}1781+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 325, Col: 50}
1768 }1782 }
1769 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ_7745c5c3_Var87)1783 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ_7745c5c3_Var87)
1770 if templ_7745c5c3_Err != nil {1784 if templ_7745c5c3_Err != nil {
1771 return templ_7745c5c3_Err1785 return templ_7745c5c3_Err
1772 }1786 }
1773- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 159, "\"> <input type=\"hidden\" name=\"line\" value=\"")1787+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 160, "\"> <input type=\"hidden\" name=\"line\" value=\"")
1774 if templ_7745c5c3_Err != nil {1788 if templ_7745c5c3_Err != nil {
1775 return templ_7745c5c3_Err1789 return templ_7745c5c3_Err
1776 }1790 }
1777 var templ_7745c5c3_Var88 string1791 var templ_7745c5c3_Var88 string
1778 templ_7745c5c3_Var88, templ_7745c5c3_Err = templ.ResolveAttributeValue(f.Line)1792 templ_7745c5c3_Var88, templ_7745c5c3_Err = templ.ResolveAttributeValue(f.Line)
1779 if templ_7745c5c3_Err != nil {1793 if templ_7745c5c3_Err != nil {
1780- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 318, Col: 50}1794+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 326, Col: 50}
1781 }1795 }
1782 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ_7745c5c3_Var88)1796 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ_7745c5c3_Var88)
1783 if templ_7745c5c3_Err != nil {1797 if templ_7745c5c3_Err != nil {
1784 return templ_7745c5c3_Err1798 return templ_7745c5c3_Err
1785 }1799 }
1786- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 160, "\"> <input type=\"hidden\" name=\"side\" value=\"")1800+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 161, "\"> <input type=\"hidden\" name=\"side\" value=\"")
1787 if templ_7745c5c3_Err != nil {1801 if templ_7745c5c3_Err != nil {
1788 return templ_7745c5c3_Err1802 return templ_7745c5c3_Err
1789 }1803 }
1790 var templ_7745c5c3_Var89 string1804 var templ_7745c5c3_Var89 string
1791 templ_7745c5c3_Var89, templ_7745c5c3_Err = templ.ResolveAttributeValue(f.Side)1805 templ_7745c5c3_Var89, templ_7745c5c3_Err = templ.ResolveAttributeValue(f.Side)
1792 if templ_7745c5c3_Err != nil {1806 if templ_7745c5c3_Err != nil {
1793- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 319, Col: 50}1807+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 327, Col: 50}
1794 }1808 }
1795 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ_7745c5c3_Var89)1809 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ_7745c5c3_Var89)
1796 if templ_7745c5c3_Err != nil {1810 if templ_7745c5c3_Err != nil {
1797 return templ_7745c5c3_Err1811 return templ_7745c5c3_Err
1798 }1812 }
1799- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 161, "\"> <label>from line <input type=\"number\" name=\"start_line\" min=\"1\" value=\"")1813+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 162, "\"> <label>from line <input type=\"number\" name=\"start_line\" min=\"1\" value=\"")
1800 if templ_7745c5c3_Err != nil {1814 if templ_7745c5c3_Err != nil {
1801 return templ_7745c5c3_Err1815 return templ_7745c5c3_Err
1802 }1816 }
1803 var templ_7745c5c3_Var90 string1817 var templ_7745c5c3_Var90 string
1804 templ_7745c5c3_Var90, templ_7745c5c3_Err = templ.ResolveAttributeValue(f.StartLine)1818 templ_7745c5c3_Var90, templ_7745c5c3_Err = templ.ResolveAttributeValue(f.StartLine)
1805 if templ_7745c5c3_Err != nil {1819 if templ_7745c5c3_Err != nil {
1806- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 320, Col: 86}1820+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 328, Col: 86}
1807 }1821 }
1808 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ_7745c5c3_Var90)1822 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ_7745c5c3_Var90)
1809 if templ_7745c5c3_Err != nil {1823 if templ_7745c5c3_Err != nil {
1810 return templ_7745c5c3_Err1824 return templ_7745c5c3_Err
1811 }1825 }
1812- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 162, "\"></label> ")1826+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 163, "\"></label> ")
1813 if templ_7745c5c3_Err != nil {1827 if templ_7745c5c3_Err != nil {
1814 return templ_7745c5c3_Err1828 return templ_7745c5c3_Err
1815 }1829 }
1816 }1830 }
1817 if f.ReplyTo != "" {1831 if f.ReplyTo != "" {
1818- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 163, "<input type=\"hidden\" name=\"reply_to\" value=\"")1832+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 164, "<input type=\"hidden\" name=\"reply_to\" value=\"")
1819 if templ_7745c5c3_Err != nil {1833 if templ_7745c5c3_Err != nil {
1820 return templ_7745c5c3_Err1834 return templ_7745c5c3_Err
1821 }1835 }
1822 var templ_7745c5c3_Var91 string1836 var templ_7745c5c3_Var91 string
1823 templ_7745c5c3_Var91, templ_7745c5c3_Err = templ.ResolveAttributeValue(f.ReplyTo)1837 templ_7745c5c3_Var91, templ_7745c5c3_Err = templ.ResolveAttributeValue(f.ReplyTo)
1824 if templ_7745c5c3_Err != nil {1838 if templ_7745c5c3_Err != nil {
1825- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 323, Col: 57}1839+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 331, Col: 57}
1826 }1840 }
1827 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ_7745c5c3_Var91)1841 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ_7745c5c3_Var91)
1828 if templ_7745c5c3_Err != nil {1842 if templ_7745c5c3_Err != nil {
1829 return templ_7745c5c3_Err1843 return templ_7745c5c3_Err
1830 }1844 }
1831- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 164, "\"> ")1845+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 165, "\"> ")
1832 if templ_7745c5c3_Err != nil {1846 if templ_7745c5c3_Err != nil {
1833 return templ_7745c5c3_Err1847 return templ_7745c5c3_Err
1834 }1848 }
1835 }1849 }
1836 if f.Path == "" && f.ReplyTo == "" {1850 if f.Path == "" && f.ReplyTo == "" {
1837- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 165, "<fieldset><legend>Verdict</legend><label><input type=\"radio\" name=\"verdict\" value=\"\" checked>Note</label><label><input type=\"radio\" name=\"verdict\" value=\"approve\">Approve</label><label><input type=\"radio\" name=\"verdict\" value=\"changes_requested\">Request changes</label></fieldset>")1851+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 166, "<fieldset><legend>Verdict</legend><label><input type=\"radio\" name=\"verdict\" value=\"\" checked>Note</label><label><input type=\"radio\" name=\"verdict\" value=\"approve\">Approve</label><label><input type=\"radio\" name=\"verdict\" value=\"changes_requested\">Request changes</label></fieldset>")
1838 if templ_7745c5c3_Err != nil {1852 if templ_7745c5c3_Err != nil {
1839 return templ_7745c5c3_Err1853 return templ_7745c5c3_Err
1840 }1854 }
1841 }1855 }
1842 if f.From > 0 {1856 if f.From > 0 {
1843- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 166, "<input type=\"hidden\" name=\"from\" value=\"")1857+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 167, "<input type=\"hidden\" name=\"from\" value=\"")
1844 if templ_7745c5c3_Err != nil {1858 if templ_7745c5c3_Err != nil {
1845 return templ_7745c5c3_Err1859 return templ_7745c5c3_Err
1846 }1860 }
1847 var templ_7745c5c3_Var92 string1861 var templ_7745c5c3_Var92 string
1848 templ_7745c5c3_Var92, templ_7745c5c3_Err = templ.ResolveAttributeValue(itoa(f.From))1862 templ_7745c5c3_Var92, templ_7745c5c3_Err = templ.ResolveAttributeValue(itoa(f.From))
1849 if templ_7745c5c3_Err != nil {1863 if templ_7745c5c3_Err != nil {
1850- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 329, Col: 56}1864+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 337, Col: 56}
1851 }1865 }
1852 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ_7745c5c3_Var92)1866 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ_7745c5c3_Var92)
1853 if templ_7745c5c3_Err != nil {1867 if templ_7745c5c3_Err != nil {
1854 return templ_7745c5c3_Err1868 return templ_7745c5c3_Err
1855 }1869 }
1856- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 167, "\">")1870+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 168, "\">")
1857 if templ_7745c5c3_Err != nil {1871 if templ_7745c5c3_Err != nil {
1858 return templ_7745c5c3_Err1872 return templ_7745c5c3_Err
1859 }1873 }
1860 }1874 }
1861- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 168, "<div class=\"f-btns\"><button type=\"submit\" class=\"btn primary\">Comment</button> ")1875+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 169, "<div class=\"f-btns\"><button type=\"submit\" class=\"btn primary\">Comment</button> ")
1862 if templ_7745c5c3_Err != nil {1876 if templ_7745c5c3_Err != nil {
1863 return templ_7745c5c3_Err1877 return templ_7745c5c3_Err
1864 }1878 }
1865 if f.Cancel != "" {1879 if f.Cancel != "" {
1866- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 169, "<a class=\"btn\" href=\"")1880+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 170, "<a class=\"btn\" href=\"")
1867 if templ_7745c5c3_Err != nil {1881 if templ_7745c5c3_Err != nil {
1868 return templ_7745c5c3_Err1882 return templ_7745c5c3_Err
1869 }1883 }
1870 var templ_7745c5c3_Var93 templ.SafeURL1884 var templ_7745c5c3_Var93 templ.SafeURL
1871 templ_7745c5c3_Var93, templ_7745c5c3_Err = templ.JoinURLErrs(templ.SafeURL(f.Cancel))1885 templ_7745c5c3_Var93, templ_7745c5c3_Err = templ.JoinURLErrs(templ.SafeURL(f.Cancel))
1872 if templ_7745c5c3_Err != nil {1886 if templ_7745c5c3_Err != nil {
1873- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 334, Col: 49}1887+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 342, Col: 49}
1874 }1888 }
1875 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var93))1889 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var93))
1876 if templ_7745c5c3_Err != nil {1890 if templ_7745c5c3_Err != nil {
1877 return templ_7745c5c3_Err1891 return templ_7745c5c3_Err
1878 }1892 }
1879- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 170, "\">Cancel</a>")1893+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 171, "\">Cancel</a>")
1880 if templ_7745c5c3_Err != nil {1894 if templ_7745c5c3_Err != nil {
1881 return templ_7745c5c3_Err1895 return templ_7745c5c3_Err
1882 }1896 }
1883 }1897 }
1884- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 171, "</div></form>")1898+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 172, "</div></form>")
1885 if templ_7745c5c3_Err != nil {1899 if templ_7745c5c3_Err != nil {
1886 return templ_7745c5c3_Err1900 return templ_7745c5c3_Err
1887 }1901 }
@@ -1910,20 +1924,20 @@ func mrRail(p MRPage) templ.Component {
1910 templ_7745c5c3_Var94 = templ.NopComponent1924 templ_7745c5c3_Var94 = templ.NopComponent
1911 }1925 }
1912 ctx = templ.ClearChildren(ctx)1926 ctx = templ.ClearChildren(ctx)
1913- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 172, "<section aria-labelledby=\"r-files\" class=\"r-files\"><h2 id=\"r-files\">Files <span class=\"count\">")1927+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 173, "<section aria-labelledby=\"r-files\" class=\"r-files\"><h2 id=\"r-files\">Files <span class=\"count\">")
1914 if templ_7745c5c3_Err != nil {1928 if templ_7745c5c3_Err != nil {
1915 return templ_7745c5c3_Err1929 return templ_7745c5c3_Err
1916 }1930 }
1917 var templ_7745c5c3_Var95 string1931 var templ_7745c5c3_Var95 string
1918 templ_7745c5c3_Var95, templ_7745c5c3_Err = templ.JoinStringErrs(itoa(len(p.Files)))1932 templ_7745c5c3_Var95, templ_7745c5c3_Err = templ.JoinStringErrs(itoa(len(p.Files)))
1919 if templ_7745c5c3_Err != nil {1933 if templ_7745c5c3_Err != nil {
1920- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 343, Col: 49}1934+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 351, Col: 49}
1921 }1935 }
1922 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var95))1936 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var95))
1923 if templ_7745c5c3_Err != nil {1937 if templ_7745c5c3_Err != nil {
1924 return templ_7745c5c3_Err1938 return templ_7745c5c3_Err
1925 }1939 }
1926- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 173, "</span><kbd aria-hidden=\"true\">g f</kbd> <button type=\"button\" class=\"btn icon fold\" data-js aria-expanded=\"true\" title=\"fold the list of files\" hx-on:click=\"ermiteMR.foldFiles()\"><span class=\"ico i-chevron\" aria-hidden=\"true\"></span><span class=\"sr\">fold the list of files</span></button></h2>")1940+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 174, "</span><kbd aria-hidden=\"true\">g f</kbd> <button type=\"button\" class=\"btn icon fold\" data-js aria-expanded=\"true\" title=\"fold the list of files\" hx-on:click=\"ermiteMR.foldFiles()\"><span class=\"ico i-chevron\" aria-hidden=\"true\"></span><span class=\"sr\">fold the list of files</span></button></h2>")
1927 if templ_7745c5c3_Err != nil {1941 if templ_7745c5c3_Err != nil {
1928 return templ_7745c5c3_Err1942 return templ_7745c5c3_Err
1929 }1943 }
@@ -1931,71 +1945,71 @@ func mrRail(p MRPage) templ.Component {
1931 if templ_7745c5c3_Err != nil {1945 if templ_7745c5c3_Err != nil {
1932 return templ_7745c5c3_Err1946 return templ_7745c5c3_Err
1933 }1947 }
1934- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 174, "</section>")1948+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 175, "</section>")
1935 if templ_7745c5c3_Err != nil {1949 if templ_7745c5c3_Err != nil {
1936 return templ_7745c5c3_Err1950 return templ_7745c5c3_Err
1937 }1951 }
1938 if len(p.Verdicts) > 0 {1952 if len(p.Verdicts) > 0 {
1939- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 175, "<section><h2>Verdicts</h2><ul>")1953+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 176, "<section><h2>Verdicts</h2><ul>")
1940 if templ_7745c5c3_Err != nil {1954 if templ_7745c5c3_Err != nil {
1941 return templ_7745c5c3_Err1955 return templ_7745c5c3_Err
1942 }1956 }
1943 for _, v := range p.Verdicts {1957 for _, v := range p.Verdicts {
1944- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 176, "<li><a href=\"")1958+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 177, "<li><a href=\"")
1945 if templ_7745c5c3_Err != nil {1959 if templ_7745c5c3_Err != nil {
1946 return templ_7745c5c3_Err1960 return templ_7745c5c3_Err
1947 }1961 }
1948 var templ_7745c5c3_Var96 templ.SafeURL1962 var templ_7745c5c3_Var96 templ.SafeURL
1949 templ_7745c5c3_Var96, templ_7745c5c3_Err = templ.JoinURLErrs(templ.SafeURL(v.Href))1963 templ_7745c5c3_Var96, templ_7745c5c3_Err = templ.JoinURLErrs(templ.SafeURL(v.Href))
1950 if templ_7745c5c3_Err != nil {1964 if templ_7745c5c3_Err != nil {
1951- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 356, Col: 37}1965+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 364, Col: 37}
1952 }1966 }
1953 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var96))1967 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var96))
1954 if templ_7745c5c3_Err != nil {1968 if templ_7745c5c3_Err != nil {
1955 return templ_7745c5c3_Err1969 return templ_7745c5c3_Err
1956 }1970 }
1957- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 177, "\">")1971+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 178, "\">")
1958 if templ_7745c5c3_Err != nil {1972 if templ_7745c5c3_Err != nil {
1959 return templ_7745c5c3_Err1973 return templ_7745c5c3_Err
1960 }1974 }
1961 var templ_7745c5c3_Var97 string1975 var templ_7745c5c3_Var97 string
1962 templ_7745c5c3_Var97, templ_7745c5c3_Err = templ.JoinStringErrs(v.Author)1976 templ_7745c5c3_Var97, templ_7745c5c3_Err = templ.JoinStringErrs(v.Author)
1963 if templ_7745c5c3_Err != nil {1977 if templ_7745c5c3_Err != nil {
1964- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 356, Col: 50}1978+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 364, Col: 50}
1965 }1979 }
1966 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var97))1980 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var97))
1967 if templ_7745c5c3_Err != nil {1981 if templ_7745c5c3_Err != nil {
1968 return templ_7745c5c3_Err1982 return templ_7745c5c3_Err
1969 }1983 }
1970- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 178, ": ")1984+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 179, ": ")
1971 if templ_7745c5c3_Err != nil {1985 if templ_7745c5c3_Err != nil {
1972 return templ_7745c5c3_Err1986 return templ_7745c5c3_Err
1973 }1987 }
1974 var templ_7745c5c3_Var98 string1988 var templ_7745c5c3_Var98 string
1975 templ_7745c5c3_Var98, templ_7745c5c3_Err = templ.JoinStringErrs(v.Label)1989 templ_7745c5c3_Var98, templ_7745c5c3_Err = templ.JoinStringErrs(v.Label)
1976 if templ_7745c5c3_Err != nil {1990 if templ_7745c5c3_Err != nil {
1977- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 356, Col: 63}1991+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 364, Col: 63}
1978 }1992 }
1979 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var98))1993 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var98))
1980 if templ_7745c5c3_Err != nil {1994 if templ_7745c5c3_Err != nil {
1981 return templ_7745c5c3_Err1995 return templ_7745c5c3_Err
1982 }1996 }
1983- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 179, "</a> ")1997+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 180, "</a> ")
1984 if templ_7745c5c3_Err != nil {1998 if templ_7745c5c3_Err != nil {
1985 return templ_7745c5c3_Err1999 return templ_7745c5c3_Err
1986 }2000 }
1987 if v.Stale {2001 if v.Stale {
1988- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 180, "<span class=\"mute\">(stale)</span>")2002+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 181, "<span class=\"mute\">(stale)</span>")
1989 if templ_7745c5c3_Err != nil {2003 if templ_7745c5c3_Err != nil {
1990 return templ_7745c5c3_Err2004 return templ_7745c5c3_Err
1991 }2005 }
1992 }2006 }
1993- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 181, "</li>")2007+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 182, "</li>")
1994 if templ_7745c5c3_Err != nil {2008 if templ_7745c5c3_Err != nil {
1995 return templ_7745c5c3_Err2009 return templ_7745c5c3_Err
1996 }2010 }
1997 }2011 }
1998- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 182, "</ul></section>")2012+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 183, "</ul></section>")
1999 if templ_7745c5c3_Err != nil {2013 if templ_7745c5c3_Err != nil {
2000 return templ_7745c5c3_Err2014 return templ_7745c5c3_Err
2001 }2015 }
@@ -2004,74 +2018,74 @@ func mrRail(p MRPage) templ.Component {
2004 if templ_7745c5c3_Err != nil {2018 if templ_7745c5c3_Err != nil {
2005 return templ_7745c5c3_Err2019 return templ_7745c5c3_Err
2006 }2020 }
2007- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 183, "<section aria-labelledby=\"r-commits\"><h2 id=\"r-commits\">Commits <span class=\"count\">")2021+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 184, "<section aria-labelledby=\"r-commits\"><h2 id=\"r-commits\">Commits <span class=\"count\">")
2008 if templ_7745c5c3_Err != nil {2022 if templ_7745c5c3_Err != nil {
2009 return templ_7745c5c3_Err2023 return templ_7745c5c3_Err
2010 }2024 }
2011 var templ_7745c5c3_Var99 string2025 var templ_7745c5c3_Var99 string
2012 templ_7745c5c3_Var99, templ_7745c5c3_Err = templ.JoinStringErrs(itoa(len(p.Commits)))2026 templ_7745c5c3_Var99, templ_7745c5c3_Err = templ.JoinStringErrs(itoa(len(p.Commits)))
2013 if templ_7745c5c3_Err != nil {2027 if templ_7745c5c3_Err != nil {
2014- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 367, Col: 71}2028+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 375, Col: 71}
2015 }2029 }
2016 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var99))2030 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var99))
2017 if templ_7745c5c3_Err != nil {2031 if templ_7745c5c3_Err != nil {
2018 return templ_7745c5c3_Err2032 return templ_7745c5c3_Err
2019 }2033 }
2020- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 184, "</span></h2><ul class=\"pcommits\">")2034+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 185, "</span></h2><ul class=\"pcommits\">")
2021 if templ_7745c5c3_Err != nil {2035 if templ_7745c5c3_Err != nil {
2022 return templ_7745c5c3_Err2036 return templ_7745c5c3_Err
2023 }2037 }
2024 for _, c := range p.Commits {2038 for _, c := range p.Commits {
2025- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 185, "<li")2039+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 186, "<li")
2026 if templ_7745c5c3_Err != nil {2040 if templ_7745c5c3_Err != nil {
2027 return templ_7745c5c3_Err2041 return templ_7745c5c3_Err
2028 }2042 }
2029 if c.New {2043 if c.New {
2030- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 186, " data-new")2044+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 187, " data-new")
2031 if templ_7745c5c3_Err != nil {2045 if templ_7745c5c3_Err != nil {
2032 return templ_7745c5c3_Err2046 return templ_7745c5c3_Err
2033 }2047 }
2034 }2048 }
2035- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 187, "><a href=\"")2049+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 188, "><a href=\"")
2036 if templ_7745c5c3_Err != nil {2050 if templ_7745c5c3_Err != nil {
2037 return templ_7745c5c3_Err2051 return templ_7745c5c3_Err
2038 }2052 }
2039 var templ_7745c5c3_Var100 templ.SafeURL2053 var templ_7745c5c3_Var100 templ.SafeURL
2040 templ_7745c5c3_Var100, templ_7745c5c3_Err = templ.JoinURLErrs(templ.SafeURL(c.Href))2054 templ_7745c5c3_Var100, templ_7745c5c3_Err = templ.JoinURLErrs(templ.SafeURL(c.Href))
2041 if templ_7745c5c3_Err != nil {2055 if templ_7745c5c3_Err != nil {
2042- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 371, Col: 36}2056+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 379, Col: 36}
2043 }2057 }
2044 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var100))2058 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var100))
2045 if templ_7745c5c3_Err != nil {2059 if templ_7745c5c3_Err != nil {
2046 return templ_7745c5c3_Err2060 return templ_7745c5c3_Err
2047 }2061 }
2048- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 188, "\">")2062+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 189, "\">")
2049 if templ_7745c5c3_Err != nil {2063 if templ_7745c5c3_Err != nil {
2050 return templ_7745c5c3_Err2064 return templ_7745c5c3_Err
2051 }2065 }
2052 var templ_7745c5c3_Var101 string2066 var templ_7745c5c3_Var101 string
2053 templ_7745c5c3_Var101, templ_7745c5c3_Err = templ.JoinStringErrs(c.Short)2067 templ_7745c5c3_Var101, templ_7745c5c3_Err = templ.JoinStringErrs(c.Short)
2054 if templ_7745c5c3_Err != nil {2068 if templ_7745c5c3_Err != nil {
2055- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 371, Col: 48}2069+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 379, Col: 48}
2056 }2070 }
2057 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var101))2071 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var101))
2058 if templ_7745c5c3_Err != nil {2072 if templ_7745c5c3_Err != nil {
2059 return templ_7745c5c3_Err2073 return templ_7745c5c3_Err
2060 }2074 }
2061- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 189, "</a> <span class=\"s\">")2075+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 190, "</a> <span class=\"s\">")
2062 if templ_7745c5c3_Err != nil {2076 if templ_7745c5c3_Err != nil {
2063 return templ_7745c5c3_Err2077 return templ_7745c5c3_Err
2064 }2078 }
2065 var templ_7745c5c3_Var102 string2079 var templ_7745c5c3_Var102 string
2066 templ_7745c5c3_Var102, templ_7745c5c3_Err = templ.JoinStringErrs(c.Subject)2080 templ_7745c5c3_Var102, templ_7745c5c3_Err = templ.JoinStringErrs(c.Subject)
2067 if templ_7745c5c3_Err != nil {2081 if templ_7745c5c3_Err != nil {
2068- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 372, Col: 32}2082+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 380, Col: 32}
2069 }2083 }
2070 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var102))2084 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var102))
2071 if templ_7745c5c3_Err != nil {2085 if templ_7745c5c3_Err != nil {
2072 return templ_7745c5c3_Err2086 return templ_7745c5c3_Err
2073 }2087 }
2074- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 190, "</span> ")2088+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 191, "</span> ")
2075 if templ_7745c5c3_Err != nil {2089 if templ_7745c5c3_Err != nil {
2076 return templ_7745c5c3_Err2090 return templ_7745c5c3_Err
2077 }2091 }
@@ -2081,20 +2095,20 @@ func mrRail(p MRPage) templ.Component {
2081 return templ_7745c5c3_Err2095 return templ_7745c5c3_Err
2082 }2096 }
2083 }2097 }
2084- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 191, "<span class=\"mute\">")2098+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 192, "<span class=\"mute\">")
2085 if templ_7745c5c3_Err != nil {2099 if templ_7745c5c3_Err != nil {
2086 return templ_7745c5c3_Err2100 return templ_7745c5c3_Err
2087 }2101 }
2088 var templ_7745c5c3_Var103 string2102 var templ_7745c5c3_Var103 string
2089 templ_7745c5c3_Var103, templ_7745c5c3_Err = templ.JoinStringErrs(c.Author)2103 templ_7745c5c3_Var103, templ_7745c5c3_Err = templ.JoinStringErrs(c.Author)
2090 if templ_7745c5c3_Err != nil {2104 if templ_7745c5c3_Err != nil {
2091- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 377, Col: 16}2105+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 385, Col: 16}
2092 }2106 }
2093 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var103))2107 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var103))
2094 if templ_7745c5c3_Err != nil {2108 if templ_7745c5c3_Err != nil {
2095 return templ_7745c5c3_Err2109 return templ_7745c5c3_Err
2096 }2110 }
2097- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 192, " ")2111+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 193, " ")
2098 if templ_7745c5c3_Err != nil {2112 if templ_7745c5c3_Err != nil {
2099 return templ_7745c5c3_Err2113 return templ_7745c5c3_Err
2100 }2114 }
@@ -2102,39 +2116,39 @@ func mrRail(p MRPage) templ.Component {
2102 var templ_7745c5c3_Var104 string2116 var templ_7745c5c3_Var104 string
2103 templ_7745c5c3_Var104, templ_7745c5c3_Err = templ.JoinStringErrs(" · ")2117 templ_7745c5c3_Var104, templ_7745c5c3_Err = templ.JoinStringErrs(" · ")
2104 if templ_7745c5c3_Err != nil {2118 if templ_7745c5c3_Err != nil {
2105- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 379, Col: 15}2119+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 387, Col: 15}
2106 }2120 }
2107 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var104))2121 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var104))
2108 if templ_7745c5c3_Err != nil {2122 if templ_7745c5c3_Err != nil {
2109 return templ_7745c5c3_Err2123 return templ_7745c5c3_Err
2110 }2124 }
2111- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 193, "<time datetime=\"")2125+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 194, "<time datetime=\"")
2112 if templ_7745c5c3_Err != nil {2126 if templ_7745c5c3_Err != nil {
2113 return templ_7745c5c3_Err2127 return templ_7745c5c3_Err
2114 }2128 }
2115 var templ_7745c5c3_Var105 string2129 var templ_7745c5c3_Var105 string
2116 templ_7745c5c3_Var105, templ_7745c5c3_Err = templ.ResolveAttributeValue(c.WhenAt)2130 templ_7745c5c3_Var105, templ_7745c5c3_Err = templ.ResolveAttributeValue(c.WhenAt)
2117 if templ_7745c5c3_Err != nil {2131 if templ_7745c5c3_Err != nil {
2118- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 379, Col: 42}2132+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 387, Col: 42}
2119 }2133 }
2120 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ_7745c5c3_Var105)2134 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ_7745c5c3_Var105)
2121 if templ_7745c5c3_Err != nil {2135 if templ_7745c5c3_Err != nil {
2122 return templ_7745c5c3_Err2136 return templ_7745c5c3_Err
2123 }2137 }
2124- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 194, "\">")2138+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 195, "\">")
2125 if templ_7745c5c3_Err != nil {2139 if templ_7745c5c3_Err != nil {
2126 return templ_7745c5c3_Err2140 return templ_7745c5c3_Err
2127 }2141 }
2128 var templ_7745c5c3_Var106 string2142 var templ_7745c5c3_Var106 string
2129 templ_7745c5c3_Var106, templ_7745c5c3_Err = templ.JoinStringErrs(c.When)2143 templ_7745c5c3_Var106, templ_7745c5c3_Err = templ.JoinStringErrs(c.When)
2130 if templ_7745c5c3_Err != nil {2144 if templ_7745c5c3_Err != nil {
2131- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 379, Col: 53}2145+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 387, Col: 53}
2132 }2146 }
2133 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var106))2147 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var106))
2134 if templ_7745c5c3_Err != nil {2148 if templ_7745c5c3_Err != nil {
2135 return templ_7745c5c3_Err2149 return templ_7745c5c3_Err
2136 }2150 }
2137- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 195, "</time> ")2151+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 196, "</time> ")
2138 if templ_7745c5c3_Err != nil {2152 if templ_7745c5c3_Err != nil {
2139 return templ_7745c5c3_Err2153 return templ_7745c5c3_Err
2140 }2154 }
@@ -2143,76 +2157,76 @@ func mrRail(p MRPage) templ.Component {
2143 var templ_7745c5c3_Var107 string2157 var templ_7745c5c3_Var107 string
2144 templ_7745c5c3_Var107, templ_7745c5c3_Err = templ.JoinStringErrs(" · new")2158 templ_7745c5c3_Var107, templ_7745c5c3_Err = templ.JoinStringErrs(" · new")
2145 if templ_7745c5c3_Err != nil {2159 if templ_7745c5c3_Err != nil {
2146- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 382, Col: 18}2160+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 390, Col: 18}
2147 }2161 }
2148 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var107))2162 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var107))
2149 if templ_7745c5c3_Err != nil {2163 if templ_7745c5c3_Err != nil {
2150 return templ_7745c5c3_Err2164 return templ_7745c5c3_Err
2151 }2165 }
2152 }2166 }
2153- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 196, "</span></li>")2167+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 197, "</span></li>")
2154 if templ_7745c5c3_Err != nil {2168 if templ_7745c5c3_Err != nil {
2155 return templ_7745c5c3_Err2169 return templ_7745c5c3_Err
2156 }2170 }
2157 }2171 }
2158- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 197, "</ul>")2172+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 198, "</ul>")
2159 if templ_7745c5c3_Err != nil {2173 if templ_7745c5c3_Err != nil {
2160 return templ_7745c5c3_Err2174 return templ_7745c5c3_Err
2161 }2175 }
2162 if len(p.Commits) == 0 {2176 if len(p.Commits) == 0 {
2163- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 198, "<p class=\"dim\">no commit to merge.</p>")2177+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 199, "<p class=\"dim\">no commit to merge.</p>")
2164 if templ_7745c5c3_Err != nil {2178 if templ_7745c5c3_Err != nil {
2165 return templ_7745c5c3_Err2179 return templ_7745c5c3_Err
2166 }2180 }
2167 }2181 }
2168 if p.CommitsNote != "" {2182 if p.CommitsNote != "" {
2169- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 199, "<p class=\"note\">")2183+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 200, "<p class=\"note\">")
2170 if templ_7745c5c3_Err != nil {2184 if templ_7745c5c3_Err != nil {
2171 return templ_7745c5c3_Err2185 return templ_7745c5c3_Err
2172 }2186 }
2173 var templ_7745c5c3_Var108 string2187 var templ_7745c5c3_Var108 string
2174 templ_7745c5c3_Var108, templ_7745c5c3_Err = templ.JoinStringErrs(p.CommitsNote)2188 templ_7745c5c3_Var108, templ_7745c5c3_Err = templ.JoinStringErrs(p.CommitsNote)
2175 if templ_7745c5c3_Err != nil {2189 if templ_7745c5c3_Err != nil {
2176- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 392, Col: 34}2190+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 400, Col: 34}
2177 }2191 }
2178 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var108))2192 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var108))
2179 if templ_7745c5c3_Err != nil {2193 if templ_7745c5c3_Err != nil {
2180 return templ_7745c5c3_Err2194 return templ_7745c5c3_Err
2181 }2195 }
2182- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 200, "</p>")2196+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 201, "</p>")
2183 if templ_7745c5c3_Err != nil {2197 if templ_7745c5c3_Err != nil {
2184 return templ_7745c5c3_Err2198 return templ_7745c5c3_Err
2185 }2199 }
2186 }2200 }
2187- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 201, "</section><section aria-labelledby=\"r-settings\"><h2 id=\"r-settings\">Settings</h2><dl class=\"kv\"><dt>modes</dt><dd>")2201+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 202, "</section><section aria-labelledby=\"r-settings\"><h2 id=\"r-settings\">Settings</h2><dl class=\"kv\"><dt>modes</dt><dd>")
2188 if templ_7745c5c3_Err != nil {2202 if templ_7745c5c3_Err != nil {
2189 return templ_7745c5c3_Err2203 return templ_7745c5c3_Err
2190 }2204 }
2191 var templ_7745c5c3_Var109 string2205 var templ_7745c5c3_Var109 string
2192 templ_7745c5c3_Var109, templ_7745c5c3_Err = templ.JoinStringErrs(strings.Join(p.Modes, ", "))2206 templ_7745c5c3_Var109, templ_7745c5c3_Err = templ.JoinStringErrs(strings.Join(p.Modes, ", "))
2193 if templ_7745c5c3_Err != nil {2207 if templ_7745c5c3_Err != nil {
2194- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 399, Col: 36}2208+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 407, Col: 36}
2195 }2209 }
2196 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var109))2210 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var109))
2197 if templ_7745c5c3_Err != nil {2211 if templ_7745c5c3_Err != nil {
2198 return templ_7745c5c3_Err2212 return templ_7745c5c3_Err
2199 }2213 }
2200- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 202, "</dd><dt>checks</dt><dd>")2214+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 203, "</dd><dt>checks</dt><dd>")
2201 if templ_7745c5c3_Err != nil {2215 if templ_7745c5c3_Err != nil {
2202 return templ_7745c5c3_Err2216 return templ_7745c5c3_Err
2203 }2217 }
2204 if p.ChecksBlock {2218 if p.ChecksBlock {
2205- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 203, "failing ones block the merge")2219+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 204, "failing ones block the merge")
2206 if templ_7745c5c3_Err != nil {2220 if templ_7745c5c3_Err != nil {
2207 return templ_7745c5c3_Err2221 return templ_7745c5c3_Err
2208 }2222 }
2209 } else {2223 } else {
2210- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 204, "do not block the merge")2224+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 205, "do not block the merge")
2211 if templ_7745c5c3_Err != nil {2225 if templ_7745c5c3_Err != nil {
2212 return templ_7745c5c3_Err2226 return templ_7745c5c3_Err
2213 }2227 }
2214 }2228 }
2215- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 205, "</dd></dl></section>")2229+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 206, "</dd></dl></section>")
2216 if templ_7745c5c3_Err != nil {2230 if templ_7745c5c3_Err != nil {
2217 return templ_7745c5c3_Err2231 return templ_7745c5c3_Err
2218 }2232 }
@@ -2245,46 +2259,46 @@ func mrBar(p MRPage) templ.Component {
2245 templ_7745c5c3_Var110 = templ.NopComponent2259 templ_7745c5c3_Var110 = templ.NopComponent
2246 }2260 }
2247 ctx = templ.ClearChildren(ctx)2261 ctx = templ.ClearChildren(ctx)
2248- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 206, "<div class=\"diff-tools mr-bar\" role=\"group\" aria-label=\"Diff view and merge\"><span class=\"dim\">")2262+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 207, "<div class=\"diff-tools mr-bar\" role=\"group\" aria-label=\"Diff view and merge\"><span class=\"dim\">")
2249 if templ_7745c5c3_Err != nil {2263 if templ_7745c5c3_Err != nil {
2250 return templ_7745c5c3_Err2264 return templ_7745c5c3_Err
2251 }2265 }
2252 var templ_7745c5c3_Var111 string2266 var templ_7745c5c3_Var111 string
2253 templ_7745c5c3_Var111, templ_7745c5c3_Err = templ.JoinStringErrs(plural(p.NFiles, "file", "files"))2267 templ_7745c5c3_Var111, templ_7745c5c3_Err = templ.JoinStringErrs(plural(p.NFiles, "file", "files"))
2254 if templ_7745c5c3_Err != nil {2268 if templ_7745c5c3_Err != nil {
2255- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 418, Col: 55}2269+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 426, Col: 55}
2256 }2270 }
2257 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var111))2271 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var111))
2258 if templ_7745c5c3_Err != nil {2272 if templ_7745c5c3_Err != nil {
2259 return templ_7745c5c3_Err2273 return templ_7745c5c3_Err
2260 }2274 }
2261- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 207, " · <span class=\"plus\">+")2275+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 208, " · <span class=\"plus\">+")
2262 if templ_7745c5c3_Err != nil {2276 if templ_7745c5c3_Err != nil {
2263 return templ_7745c5c3_Err2277 return templ_7745c5c3_Err
2264 }2278 }
2265 var templ_7745c5c3_Var112 string2279 var templ_7745c5c3_Var112 string
2266 templ_7745c5c3_Var112, templ_7745c5c3_Err = templ.JoinStringErrs(itoa(p.Adds))2280 templ_7745c5c3_Var112, templ_7745c5c3_Err = templ.JoinStringErrs(itoa(p.Adds))
2267 if templ_7745c5c3_Err != nil {2281 if templ_7745c5c3_Err != nil {
2268- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 418, Col: 95}2282+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 426, Col: 95}
2269 }2283 }
2270 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var112))2284 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var112))
2271 if templ_7745c5c3_Err != nil {2285 if templ_7745c5c3_Err != nil {
2272 return templ_7745c5c3_Err2286 return templ_7745c5c3_Err
2273 }2287 }
2274- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 208, "</span> <span class=\"minus\">-")2288+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 209, "</span> <span class=\"minus\">-")
2275 if templ_7745c5c3_Err != nil {2289 if templ_7745c5c3_Err != nil {
2276 return templ_7745c5c3_Err2290 return templ_7745c5c3_Err
2277 }2291 }
2278 var templ_7745c5c3_Var113 string2292 var templ_7745c5c3_Var113 string
2279 templ_7745c5c3_Var113, templ_7745c5c3_Err = templ.JoinStringErrs(itoa(p.Dels))2293 templ_7745c5c3_Var113, templ_7745c5c3_Err = templ.JoinStringErrs(itoa(p.Dels))
2280 if templ_7745c5c3_Err != nil {2294 if templ_7745c5c3_Err != nil {
2281- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 418, Col: 140}2295+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 426, Col: 140}
2282 }2296 }
2283 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var113))2297 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var113))
2284 if templ_7745c5c3_Err != nil {2298 if templ_7745c5c3_Err != nil {
2285 return templ_7745c5c3_Err2299 return templ_7745c5c3_Err
2286 }2300 }
2287- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 209, "</span></span>")2301+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 210, "</span></span>")
2288 if templ_7745c5c3_Err != nil {2302 if templ_7745c5c3_Err != nil {
2289 return templ_7745c5c3_Err2303 return templ_7745c5c3_Err
2290 }2304 }
@@ -2300,7 +2314,7 @@ func mrBar(p MRPage) templ.Component {
2300 if templ_7745c5c3_Err != nil {2314 if templ_7745c5c3_Err != nil {
2301 return templ_7745c5c3_Err2315 return templ_7745c5c3_Err
2302 }2316 }
2303- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 210, "<span class=\"grow\"></span>")2317+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 211, "<span class=\"grow\"></span>")
2304 if templ_7745c5c3_Err != nil {2318 if templ_7745c5c3_Err != nil {
2305 return templ_7745c5c3_Err2319 return templ_7745c5c3_Err
2306 }2320 }
@@ -2313,7 +2327,7 @@ func mrBar(p MRPage) templ.Component {
2313 if templ_7745c5c3_Err != nil {2327 if templ_7745c5c3_Err != nil {
2314 return templ_7745c5c3_Err2328 return templ_7745c5c3_Err
2315 }2329 }
2316- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 211, " ")2330+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 212, " ")
2317 if templ_7745c5c3_Err != nil {2331 if templ_7745c5c3_Err != nil {
2318 return templ_7745c5c3_Err2332 return templ_7745c5c3_Err
2319 }2333 }
@@ -2322,7 +2336,7 @@ func mrBar(p MRPage) templ.Component {
2322 return templ_7745c5c3_Err2336 return templ_7745c5c3_Err
2323 }2337 }
2324 }2338 }
2325- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 212, "</div>")2339+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 213, "</div>")
2326 if templ_7745c5c3_Err != nil {2340 if templ_7745c5c3_Err != nil {
2327 return templ_7745c5c3_Err2341 return templ_7745c5c3_Err
2328 }2342 }
@@ -2354,27 +2368,27 @@ func mergeMenu(p MRPage) templ.Component {
2354 templ_7745c5c3_Var114 = templ.NopComponent2368 templ_7745c5c3_Var114 = templ.NopComponent
2355 }2369 }
2356 ctx = templ.ClearChildren(ctx)2370 ctx = templ.ClearChildren(ctx)
2357- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 213, "<details class=\"menu mmenu\" id=\"merge-menu\" data-state=\"open\"><summary class=\"btn primary\" aria-keyshortcuts=\"Shift+M\">")2371+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 214, "<details class=\"menu mmenu\" id=\"merge-menu\" data-state=\"open\"><summary class=\"btn primary\" aria-keyshortcuts=\"Shift+M\">")
2358 if templ_7745c5c3_Err != nil {2372 if templ_7745c5c3_Err != nil {
2359 return templ_7745c5c3_Err2373 return templ_7745c5c3_Err
2360 }2374 }
2361 if p.Box.ReadyAction != "" {2375 if p.Box.ReadyAction != "" {
2362- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 214, "Draft ")2376+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 215, "Draft ")
2363 if templ_7745c5c3_Err != nil {2377 if templ_7745c5c3_Err != nil {
2364 return templ_7745c5c3_Err2378 return templ_7745c5c3_Err
2365 }2379 }
2366 } else {2380 } else {
2367- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 215, "Merge ")2381+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 216, "Merge ")
2368 if templ_7745c5c3_Err != nil {2382 if templ_7745c5c3_Err != nil {
2369 return templ_7745c5c3_Err2383 return templ_7745c5c3_Err
2370 }2384 }
2371 }2385 }
2372- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 216, "<kbd aria-hidden=\"true\">M</kbd></summary><div class=\"menu-pop\" role=\"group\" aria-label=\"Merge\"><dl class=\"kv\"><dt>head</dt><dd>")2386+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 217, "<kbd aria-hidden=\"true\">M</kbd></summary><div class=\"menu-pop\" role=\"group\" aria-label=\"Merge\"><dl class=\"kv\"><dt>head</dt><dd>")
2373 if templ_7745c5c3_Err != nil {2387 if templ_7745c5c3_Err != nil {
2374 return templ_7745c5c3_Err2388 return templ_7745c5c3_Err
2375 }2389 }
2376 if p.Box.HeadGone {2390 if p.Box.HeadGone {
2377- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 217, "gone: the source branch was deleted")2391+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 218, "gone: the source branch was deleted")
2378 if templ_7745c5c3_Err != nil {2392 if templ_7745c5c3_Err != nil {
2379 return templ_7745c5c3_Err2393 return templ_7745c5c3_Err
2380 }2394 }
@@ -2382,186 +2396,186 @@ func mergeMenu(p MRPage) templ.Component {
2382 var templ_7745c5c3_Var115 string2396 var templ_7745c5c3_Var115 string
2383 templ_7745c5c3_Var115, templ_7745c5c3_Err = templ.JoinStringErrs(p.HeadShort)2397 templ_7745c5c3_Var115, templ_7745c5c3_Err = templ.JoinStringErrs(p.HeadShort)
2384 if templ_7745c5c3_Err != nil {2398 if templ_7745c5c3_Err != nil {
2385- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 451, Col: 19}2399+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 459, Col: 19}
2386 }2400 }
2387 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var115))2401 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var115))
2388 if templ_7745c5c3_Err != nil {2402 if templ_7745c5c3_Err != nil {
2389 return templ_7745c5c3_Err2403 return templ_7745c5c3_Err
2390 }2404 }
2391 }2405 }
2392- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 218, "</dd><dt>into</dt><dd>")2406+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 219, "</dd><dt>into</dt><dd>")
2393 if templ_7745c5c3_Err != nil {2407 if templ_7745c5c3_Err != nil {
2394 return templ_7745c5c3_Err2408 return templ_7745c5c3_Err
2395 }2409 }
2396 var templ_7745c5c3_Var116 string2410 var templ_7745c5c3_Var116 string
2397 templ_7745c5c3_Var116, templ_7745c5c3_Err = templ.JoinStringErrs(p.Target)2411 templ_7745c5c3_Var116, templ_7745c5c3_Err = templ.JoinStringErrs(p.Target)
2398 if templ_7745c5c3_Err != nil {2412 if templ_7745c5c3_Err != nil {
2399- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 455, Col: 18}2413+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 463, Col: 18}
2400 }2414 }
2401 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var116))2415 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var116))
2402 if templ_7745c5c3_Err != nil {2416 if templ_7745c5c3_Err != nil {
2403 return templ_7745c5c3_Err2417 return templ_7745c5c3_Err
2404 }2418 }
2405- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 219, "</dd></dl>")2419+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 220, "</dd></dl>")
2406 if templ_7745c5c3_Err != nil {2420 if templ_7745c5c3_Err != nil {
2407 return templ_7745c5c3_Err2421 return templ_7745c5c3_Err
2408 }2422 }
2409 if p.Box.ReadyAction != "" {2423 if p.Box.ReadyAction != "" {
2410- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 220, "<p class=\"d-draft\">this is a draft: it cannot be merged until it is ready for review.</p><form class=\"d-btns\" method=\"post\" action=\"")2424+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 221, "<p class=\"d-draft\">this is a draft: it cannot be merged until it is ready for review.</p><form class=\"d-btns\" method=\"post\" action=\"")
2411 if templ_7745c5c3_Err != nil {2425 if templ_7745c5c3_Err != nil {
2412 return templ_7745c5c3_Err2426 return templ_7745c5c3_Err
2413 }2427 }
2414 var templ_7745c5c3_Var117 templ.SafeURL2428 var templ_7745c5c3_Var117 templ.SafeURL
2415 templ_7745c5c3_Var117, templ_7745c5c3_Err = templ.JoinURLErrs(templ.SafeURL(p.Box.ReadyAction))2429 templ_7745c5c3_Var117, templ_7745c5c3_Err = templ.JoinURLErrs(templ.SafeURL(p.Box.ReadyAction))
2416 if templ_7745c5c3_Err != nil {2430 if templ_7745c5c3_Err != nil {
2417- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 459, Col: 80}2431+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 467, Col: 80}
2418 }2432 }
2419 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var117))2433 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var117))
2420 if templ_7745c5c3_Err != nil {2434 if templ_7745c5c3_Err != nil {
2421 return templ_7745c5c3_Err2435 return templ_7745c5c3_Err
2422 }2436 }
2423- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 221, "\"><button type=\"submit\" class=\"btn primary\" data-default title=\"remove the draft prefix from the title\">Ready for review</button></form>")2437+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 222, "\"><button type=\"submit\" class=\"btn primary\" data-default title=\"remove the draft prefix from the title\">Ready for review</button></form>")
2424 if templ_7745c5c3_Err != nil {2438 if templ_7745c5c3_Err != nil {
2425 return templ_7745c5c3_Err2439 return templ_7745c5c3_Err
2426 }2440 }
2427 } else if !p.Box.HeadGone {2441 } else if !p.Box.HeadGone {
2428- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 222, "<form class=\"d-acts\" method=\"post\" action=\"")2442+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 223, "<form class=\"d-acts\" method=\"post\" action=\"")
2429 if templ_7745c5c3_Err != nil {2443 if templ_7745c5c3_Err != nil {
2430 return templ_7745c5c3_Err2444 return templ_7745c5c3_Err
2431 }2445 }
2432 var templ_7745c5c3_Var118 templ.SafeURL2446 var templ_7745c5c3_Var118 templ.SafeURL
2433 templ_7745c5c3_Var118, templ_7745c5c3_Err = templ.JoinURLErrs(templ.SafeURL(p.Box.MergeAction))2447 templ_7745c5c3_Var118, templ_7745c5c3_Err = templ.JoinURLErrs(templ.SafeURL(p.Box.MergeAction))
2434 if templ_7745c5c3_Err != nil {2448 if templ_7745c5c3_Err != nil {
2435- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 463, Col: 80}2449+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 471, Col: 80}
2436 }2450 }
2437 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var118))2451 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var118))
2438 if templ_7745c5c3_Err != nil {2452 if templ_7745c5c3_Err != nil {
2439 return templ_7745c5c3_Err2453 return templ_7745c5c3_Err
2440 }2454 }
2441- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 223, "\"><input type=\"hidden\" name=\"head_id\" value=\"")2455+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 224, "\"><input type=\"hidden\" name=\"head_id\" value=\"")
2442 if templ_7745c5c3_Err != nil {2456 if templ_7745c5c3_Err != nil {
2443 return templ_7745c5c3_Err2457 return templ_7745c5c3_Err
2444 }2458 }
2445 var templ_7745c5c3_Var119 string2459 var templ_7745c5c3_Var119 string
2446 templ_7745c5c3_Var119, templ_7745c5c3_Err = templ.ResolveAttributeValue(p.Box.Head)2460 templ_7745c5c3_Var119, templ_7745c5c3_Err = templ.ResolveAttributeValue(p.Box.Head)
2447 if templ_7745c5c3_Err != nil {2461 if templ_7745c5c3_Err != nil {
2448- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 464, Col: 59}2462+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 472, Col: 59}
2449 }2463 }
2450 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ_7745c5c3_Var119)2464 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ_7745c5c3_Var119)
2451 if templ_7745c5c3_Err != nil {2465 if templ_7745c5c3_Err != nil {
2452 return templ_7745c5c3_Err2466 return templ_7745c5c3_Err
2453 }2467 }
2454- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 224, "\"><fieldset class=\"d-modes\"><legend class=\"sr\">merge mode</legend> ")2468+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 225, "\"><fieldset class=\"d-modes\"><legend class=\"sr\">merge mode</legend> ")
2455 if templ_7745c5c3_Err != nil {2469 if templ_7745c5c3_Err != nil {
2456 return templ_7745c5c3_Err2470 return templ_7745c5c3_Err
2457 }2471 }
2458 for i, m := range p.Box.Modes {2472 for i, m := range p.Box.Modes {
2459- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 225, "<label><input type=\"radio\" name=\"mode\" value=\"")2473+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 226, "<label><input type=\"radio\" name=\"mode\" value=\"")
2460 if templ_7745c5c3_Err != nil {2474 if templ_7745c5c3_Err != nil {
2461 return templ_7745c5c3_Err2475 return templ_7745c5c3_Err
2462 }2476 }
2463 var templ_7745c5c3_Var120 string2477 var templ_7745c5c3_Var120 string
2464 templ_7745c5c3_Var120, templ_7745c5c3_Err = templ.ResolveAttributeValue(m.Value)2478 templ_7745c5c3_Var120, templ_7745c5c3_Err = templ.ResolveAttributeValue(m.Value)
2465 if templ_7745c5c3_Err != nil {2479 if templ_7745c5c3_Err != nil {
2466- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 469, Col: 55}2480+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 477, Col: 55}
2467 }2481 }
2468 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ_7745c5c3_Var120)2482 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ_7745c5c3_Var120)
2469 if templ_7745c5c3_Err != nil {2483 if templ_7745c5c3_Err != nil {
2470 return templ_7745c5c3_Err2484 return templ_7745c5c3_Err
2471 }2485 }
2472- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 226, "\"")2486+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 227, "\"")
2473 if templ_7745c5c3_Err != nil {2487 if templ_7745c5c3_Err != nil {
2474 return templ_7745c5c3_Err2488 return templ_7745c5c3_Err
2475 }2489 }
2476 if i == 0 {2490 if i == 0 {
2477- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 227, " checked")2491+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 228, " checked")
2478 if templ_7745c5c3_Err != nil {2492 if templ_7745c5c3_Err != nil {
2479 return templ_7745c5c3_Err2493 return templ_7745c5c3_Err
2480 }2494 }
2481 }2495 }
2482- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 228, "> ")2496+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 229, "> ")
2483 if templ_7745c5c3_Err != nil {2497 if templ_7745c5c3_Err != nil {
2484 return templ_7745c5c3_Err2498 return templ_7745c5c3_Err
2485 }2499 }
2486 var templ_7745c5c3_Var121 string2500 var templ_7745c5c3_Var121 string
2487 templ_7745c5c3_Var121, templ_7745c5c3_Err = templ.JoinStringErrs(m.Label)2501 templ_7745c5c3_Var121, templ_7745c5c3_Err = templ.JoinStringErrs(m.Label)
2488 if templ_7745c5c3_Err != nil {2502 if templ_7745c5c3_Err != nil {
2489- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 470, Col: 17}2503+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 478, Col: 17}
2490 }2504 }
2491 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var121))2505 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var121))
2492 if templ_7745c5c3_Err != nil {2506 if templ_7745c5c3_Err != nil {
2493 return templ_7745c5c3_Err2507 return templ_7745c5c3_Err
2494 }2508 }
2495- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 229, " ")2509+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 230, " ")
2496 if templ_7745c5c3_Err != nil {2510 if templ_7745c5c3_Err != nil {
2497 return templ_7745c5c3_Err2511 return templ_7745c5c3_Err
2498 }2512 }
2499 if i < 9 {2513 if i < 9 {
2500- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 230, "<kbd aria-hidden=\"true\">")2514+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 231, "<kbd aria-hidden=\"true\">")
2501 if templ_7745c5c3_Err != nil {2515 if templ_7745c5c3_Err != nil {
2502 return templ_7745c5c3_Err2516 return templ_7745c5c3_Err
2503 }2517 }
2504 var templ_7745c5c3_Var122 string2518 var templ_7745c5c3_Var122 string
2505 templ_7745c5c3_Var122, templ_7745c5c3_Err = templ.JoinStringErrs(itoa(i + 1))2519 templ_7745c5c3_Var122, templ_7745c5c3_Err = templ.JoinStringErrs(itoa(i + 1))
2506 if templ_7745c5c3_Err != nil {2520 if templ_7745c5c3_Err != nil {
2507- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 472, Col: 46}2521+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 480, Col: 46}
2508 }2522 }
2509 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var122))2523 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var122))
2510 if templ_7745c5c3_Err != nil {2524 if templ_7745c5c3_Err != nil {
2511 return templ_7745c5c3_Err2525 return templ_7745c5c3_Err
2512 }2526 }
2513- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 231, "</kbd>")2527+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 232, "</kbd>")
2514 if templ_7745c5c3_Err != nil {2528 if templ_7745c5c3_Err != nil {
2515 return templ_7745c5c3_Err2529 return templ_7745c5c3_Err
2516 }2530 }
2517 }2531 }
2518- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 232, "</label>")2532+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 233, "</label>")
2519 if templ_7745c5c3_Err != nil {2533 if templ_7745c5c3_Err != nil {
2520 return templ_7745c5c3_Err2534 return templ_7745c5c3_Err
2521 }2535 }
2522 }2536 }
2523- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 233, "</fieldset>")2537+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 234, "</fieldset>")
2524 if templ_7745c5c3_Err != nil {2538 if templ_7745c5c3_Err != nil {
2525 return templ_7745c5c3_Err2539 return templ_7745c5c3_Err
2526 }2540 }
2527 if p.Box.CanDeleteBranch {2541 if p.Box.CanDeleteBranch {
2528- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 234, "<label class=\"d-check\"><input type=\"checkbox\" name=\"delete_branch\" value=\"1\"> delete ")2542+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 235, "<label class=\"d-check\"><input type=\"checkbox\" name=\"delete_branch\" value=\"1\"> delete ")
2529 if templ_7745c5c3_Err != nil {2543 if templ_7745c5c3_Err != nil {
2530 return templ_7745c5c3_Err2544 return templ_7745c5c3_Err
2531 }2545 }
2532 var templ_7745c5c3_Var123 string2546 var templ_7745c5c3_Var123 string
2533 templ_7745c5c3_Var123, templ_7745c5c3_Err = templ.JoinStringErrs(p.Source)2547 templ_7745c5c3_Var123, templ_7745c5c3_Err = templ.JoinStringErrs(p.Source)
2534 if templ_7745c5c3_Err != nil {2548 if templ_7745c5c3_Err != nil {
2535- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 478, Col: 102}2549+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 486, Col: 102}
2536 }2550 }
2537 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var123))2551 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var123))
2538 if templ_7745c5c3_Err != nil {2552 if templ_7745c5c3_Err != nil {
2539 return templ_7745c5c3_Err2553 return templ_7745c5c3_Err
2540 }2554 }
2541- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 235, " after the merge <kbd aria-hidden=\"true\">D</kbd></label>")2555+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 236, " after the merge <kbd aria-hidden=\"true\">D</kbd></label>")
2542 if templ_7745c5c3_Err != nil {2556 if templ_7745c5c3_Err != nil {
2543 return templ_7745c5c3_Err2557 return templ_7745c5c3_Err
2544 }2558 }
2545 }2559 }
2546- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 236, "<div class=\"d-btns\"><button type=\"submit\" class=\"btn primary\" data-default>Merge into ")2560+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 237, "<div class=\"d-btns\"><button type=\"submit\" class=\"btn primary\" data-default>Merge into ")
2547 if templ_7745c5c3_Err != nil {2561 if templ_7745c5c3_Err != nil {
2548 return templ_7745c5c3_Err2562 return templ_7745c5c3_Err
2549 }2563 }
2550 var templ_7745c5c3_Var124 string2564 var templ_7745c5c3_Var124 string
2551 templ_7745c5c3_Var124, templ_7745c5c3_Err = templ.JoinStringErrs(p.Target)2565 templ_7745c5c3_Var124, templ_7745c5c3_Err = templ.JoinStringErrs(p.Target)
2552 if templ_7745c5c3_Err != nil {2566 if templ_7745c5c3_Err != nil {
2553- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 481, Col: 82}2567+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 489, Col: 82}
2554 }2568 }
2555 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var124))2569 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var124))
2556 if templ_7745c5c3_Err != nil {2570 if templ_7745c5c3_Err != nil {
2557 return templ_7745c5c3_Err2571 return templ_7745c5c3_Err
2558 }2572 }
2559- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 237, "</button></div></form>")2573+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 238, "</button></div></form>")
2560 if templ_7745c5c3_Err != nil {2574 if templ_7745c5c3_Err != nil {
2561 return templ_7745c5c3_Err2575 return templ_7745c5c3_Err
2562 }2576 }
2563 }2577 }
2564- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 238, "</div></details>")2578+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 239, "</div></details>")
2565 if templ_7745c5c3_Err != nil {2579 if templ_7745c5c3_Err != nil {
2566 return templ_7745c5c3_Err2580 return templ_7745c5c3_Err
2567 }2581 }
@@ -2592,61 +2606,61 @@ func moreMenu(p MRPage) templ.Component {
2592 templ_7745c5c3_Var125 = templ.NopComponent2606 templ_7745c5c3_Var125 = templ.NopComponent
2593 }2607 }
2594 ctx = templ.ClearChildren(ctx)2608 ctx = templ.ClearChildren(ctx)
2595- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 239, "<details class=\"menu omenu\"><summary class=\"btn icon\" aria-label=\"More actions\" title=\"more actions\">⋯</summary><div class=\"menu-pop\" role=\"group\" aria-label=\"More actions\">")2609+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 240, "<details class=\"menu omenu\"><summary class=\"btn icon\" aria-label=\"More actions\" title=\"more actions\">⋯</summary><div class=\"menu-pop\" role=\"group\" aria-label=\"More actions\">")
2596 if templ_7745c5c3_Err != nil {2610 if templ_7745c5c3_Err != nil {
2597 return templ_7745c5c3_Err2611 return templ_7745c5c3_Err
2598 }2612 }
2599 if p.Box.CanMarkRead {2613 if p.Box.CanMarkRead {
2600- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 240, "<form method=\"post\" action=\"")2614+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 241, "<form method=\"post\" action=\"")
2601 if templ_7745c5c3_Err != nil {2615 if templ_7745c5c3_Err != nil {
2602 return templ_7745c5c3_Err2616 return templ_7745c5c3_Err
2603 }2617 }
2604 var templ_7745c5c3_Var126 templ.SafeURL2618 var templ_7745c5c3_Var126 templ.SafeURL
2605 templ_7745c5c3_Var126, templ_7745c5c3_Err = templ.JoinURLErrs(templ.SafeURL(p.Box.ReadAction))2619 templ_7745c5c3_Var126, templ_7745c5c3_Err = templ.JoinURLErrs(templ.SafeURL(p.Box.ReadAction))
2606 if templ_7745c5c3_Err != nil {2620 if templ_7745c5c3_Err != nil {
2607- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 496, Col: 64}2621+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 504, Col: 64}
2608 }2622 }
2609 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var126))2623 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var126))
2610 if templ_7745c5c3_Err != nil {2624 if templ_7745c5c3_Err != nil {
2611 return templ_7745c5c3_Err2625 return templ_7745c5c3_Err
2612 }2626 }
2613- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 241, "\"><input type=\"hidden\" name=\"head_id\" value=\"")2627+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 242, "\"><input type=\"hidden\" name=\"head_id\" value=\"")
2614 if templ_7745c5c3_Err != nil {2628 if templ_7745c5c3_Err != nil {
2615 return templ_7745c5c3_Err2629 return templ_7745c5c3_Err
2616 }2630 }
2617 var templ_7745c5c3_Var127 string2631 var templ_7745c5c3_Var127 string
2618 templ_7745c5c3_Var127, templ_7745c5c3_Err = templ.ResolveAttributeValue(p.Box.Head)2632 templ_7745c5c3_Var127, templ_7745c5c3_Err = templ.ResolveAttributeValue(p.Box.Head)
2619 if templ_7745c5c3_Err != nil {2633 if templ_7745c5c3_Err != nil {
2620- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 497, Col: 59}2634+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 505, Col: 59}
2621 }2635 }
2622 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ_7745c5c3_Var127)2636 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ_7745c5c3_Var127)
2623 if templ_7745c5c3_Err != nil {2637 if templ_7745c5c3_Err != nil {
2624 return templ_7745c5c3_Err2638 return templ_7745c5c3_Err
2625 }2639 }
2626- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 242, "\"> <button type=\"submit\" title=\"the next visit can show only what changed after this head\" class=\"btn\" aria-keyshortcuts=\"Shift+R\" data-read>Mark read <kbd aria-hidden=\"true\">R</kbd></button></form>")2640+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 243, "\"> <button type=\"submit\" title=\"the next visit can show only what changed after this head\" class=\"btn\" aria-keyshortcuts=\"Shift+R\" data-read>Mark read <kbd aria-hidden=\"true\">R</kbd></button></form>")
2627 if templ_7745c5c3_Err != nil {2641 if templ_7745c5c3_Err != nil {
2628 return templ_7745c5c3_Err2642 return templ_7745c5c3_Err
2629 }2643 }
2630 }2644 }
2631- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 243, "<form method=\"post\" action=\"")2645+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 244, "<form method=\"post\" action=\"")
2632 if templ_7745c5c3_Err != nil {2646 if templ_7745c5c3_Err != nil {
2633 return templ_7745c5c3_Err2647 return templ_7745c5c3_Err
2634 }2648 }
2635 var templ_7745c5c3_Var128 templ.SafeURL2649 var templ_7745c5c3_Var128 templ.SafeURL
2636 templ_7745c5c3_Var128, templ_7745c5c3_Err = templ.JoinURLErrs(templ.SafeURL(p.Box.CloseAction))2650 templ_7745c5c3_Var128, templ_7745c5c3_Err = templ.JoinURLErrs(templ.SafeURL(p.Box.CloseAction))
2637 if templ_7745c5c3_Err != nil {2651 if templ_7745c5c3_Err != nil {
2638- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 501, Col: 64}2652+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 509, Col: 64}
2639 }2653 }
2640 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var128))2654 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var128))
2641 if templ_7745c5c3_Err != nil {2655 if templ_7745c5c3_Err != nil {
2642 return templ_7745c5c3_Err2656 return templ_7745c5c3_Err
2643 }2657 }
2644- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 244, "\"><button type=\"submit\" title=\"close without merging; the branch is kept\" class=\"btn danger\">Close</button></form>")2658+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 245, "\"><button type=\"submit\" title=\"close without merging; the branch is kept\" class=\"btn danger\">Close</button></form>")
2645 if templ_7745c5c3_Err != nil {2659 if templ_7745c5c3_Err != nil {
2646 return templ_7745c5c3_Err2660 return templ_7745c5c3_Err
2647 }2661 }
2648 if !p.Box.HeadGone && p.Box.ReadyAction == "" {2662 if !p.Box.HeadGone && p.Box.ReadyAction == "" {
2649- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 245, "<details class=\"d-or\"><summary class=\"mute\">or from a terminal</summary>")2663+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 246, "<details class=\"d-or\"><summary class=\"mute\">or from a terminal</summary>")
2650 if templ_7745c5c3_Err != nil {2664 if templ_7745c5c3_Err != nil {
2651 return templ_7745c5c3_Err2665 return templ_7745c5c3_Err
2652 }2666 }
@@ -2654,12 +2668,12 @@ func moreMenu(p MRPage) templ.Component {
2654 if templ_7745c5c3_Err != nil {2668 if templ_7745c5c3_Err != nil {
2655 return templ_7745c5c3_Err2669 return templ_7745c5c3_Err
2656 }2670 }
2657- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 246, "</details>")2671+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 247, "</details>")
2658 if templ_7745c5c3_Err != nil {2672 if templ_7745c5c3_Err != nil {
2659 return templ_7745c5c3_Err2673 return templ_7745c5c3_Err
2660 }2674 }
2661 }2675 }
2662- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 247, "</div></details>")2676+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 248, "</div></details>")
2663 if templ_7745c5c3_Err != nil {2677 if templ_7745c5c3_Err != nil {
2664 return templ_7745c5c3_Err2678 return templ_7745c5c3_Err
2665 }2679 }
@@ -2700,263 +2714,263 @@ func Compare(l Layout, p ComparePage) templ.Component {
2700 }()2714 }()
2701 }2715 }
2702 ctx = templ.InitializeContext(ctx)2716 ctx = templ.InitializeContext(ctx)
2703- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 248, "<header class=\"show mr-h\"><h1>")2717+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 249, "<header class=\"show mr-h\"><h1>")
2704 if templ_7745c5c3_Err != nil {2718 if templ_7745c5c3_Err != nil {
2705 return templ_7745c5c3_Err2719 return templ_7745c5c3_Err
2706 }2720 }
2707 var templ_7745c5c3_Var131 string2721 var templ_7745c5c3_Var131 string
2708 templ_7745c5c3_Var131, templ_7745c5c3_Err = templ.JoinStringErrs(p.Source)2722 templ_7745c5c3_Var131, templ_7745c5c3_Err = templ.JoinStringErrs(p.Source)
2709 if templ_7745c5c3_Err != nil {2723 if templ_7745c5c3_Err != nil {
2710- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 517, Col: 17}2724+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 525, Col: 17}
2711 }2725 }
2712 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var131))2726 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var131))
2713 if templ_7745c5c3_Err != nil {2727 if templ_7745c5c3_Err != nil {
2714 return templ_7745c5c3_Err2728 return templ_7745c5c3_Err
2715 }2729 }
2716- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 249, " → ")2730+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 250, " → ")
2717 if templ_7745c5c3_Err != nil {2731 if templ_7745c5c3_Err != nil {
2718 return templ_7745c5c3_Err2732 return templ_7745c5c3_Err
2719 }2733 }
2720 var templ_7745c5c3_Var132 string2734 var templ_7745c5c3_Var132 string
2721 templ_7745c5c3_Var132, templ_7745c5c3_Err = templ.JoinStringErrs(p.Target)2735 templ_7745c5c3_Var132, templ_7745c5c3_Err = templ.JoinStringErrs(p.Target)
2722 if templ_7745c5c3_Err != nil {2736 if templ_7745c5c3_Err != nil {
2723- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 517, Col: 34}2737+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 525, Col: 34}
2724 }2738 }
2725 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var132))2739 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var132))
2726 if templ_7745c5c3_Err != nil {2740 if templ_7745c5c3_Err != nil {
2727 return templ_7745c5c3_Err2741 return templ_7745c5c3_Err
2728 }2742 }
2729- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 250, "</h1><dl class=\"kv show-kv\"><dt>branch</dt><dd><a href=\"")2743+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 251, "</h1><dl class=\"kv show-kv\"><dt>branch</dt><dd><a href=\"")
2730 if templ_7745c5c3_Err != nil {2744 if templ_7745c5c3_Err != nil {
2731 return templ_7745c5c3_Err2745 return templ_7745c5c3_Err
2732 }2746 }
2733 var templ_7745c5c3_Var133 templ.SafeURL2747 var templ_7745c5c3_Var133 templ.SafeURL
2734 templ_7745c5c3_Var133, templ_7745c5c3_Err = templ.JoinURLErrs(templ.SafeURL(p.SourceHref))2748 templ_7745c5c3_Var133, templ_7745c5c3_Err = templ.JoinURLErrs(templ.SafeURL(p.SourceHref))
2735 if templ_7745c5c3_Err != nil {2749 if templ_7745c5c3_Err != nil {
2736- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 520, Col: 45}2750+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 528, Col: 45}
2737 }2751 }
2738 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var133))2752 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var133))
2739 if templ_7745c5c3_Err != nil {2753 if templ_7745c5c3_Err != nil {
2740 return templ_7745c5c3_Err2754 return templ_7745c5c3_Err
2741 }2755 }
2742- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 251, "\">")2756+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 252, "\">")
2743 if templ_7745c5c3_Err != nil {2757 if templ_7745c5c3_Err != nil {
2744 return templ_7745c5c3_Err2758 return templ_7745c5c3_Err
2745 }2759 }
2746 var templ_7745c5c3_Var134 string2760 var templ_7745c5c3_Var134 string
2747 templ_7745c5c3_Var134, templ_7745c5c3_Err = templ.JoinStringErrs(p.Source)2761 templ_7745c5c3_Var134, templ_7745c5c3_Err = templ.JoinStringErrs(p.Source)
2748 if templ_7745c5c3_Err != nil {2762 if templ_7745c5c3_Err != nil {
2749- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 520, Col: 58}2763+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 528, Col: 58}
2750 }2764 }
2751 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var134))2765 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var134))
2752 if templ_7745c5c3_Err != nil {2766 if templ_7745c5c3_Err != nil {
2753 return templ_7745c5c3_Err2767 return templ_7745c5c3_Err
2754 }2768 }
2755- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 252, "</a></dd><dt>target</dt><dd><a href=\"")2769+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 253, "</a></dd><dt>target</dt><dd><a href=\"")
2756 if templ_7745c5c3_Err != nil {2770 if templ_7745c5c3_Err != nil {
2757 return templ_7745c5c3_Err2771 return templ_7745c5c3_Err
2758 }2772 }
2759 var templ_7745c5c3_Var135 templ.SafeURL2773 var templ_7745c5c3_Var135 templ.SafeURL
2760 templ_7745c5c3_Var135, templ_7745c5c3_Err = templ.JoinURLErrs(templ.SafeURL(p.TargetHref))2774 templ_7745c5c3_Var135, templ_7745c5c3_Err = templ.JoinURLErrs(templ.SafeURL(p.TargetHref))
2761 if templ_7745c5c3_Err != nil {2775 if templ_7745c5c3_Err != nil {
2762- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 522, Col: 45}2776+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 530, Col: 45}
2763 }2777 }
2764 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var135))2778 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var135))
2765 if templ_7745c5c3_Err != nil {2779 if templ_7745c5c3_Err != nil {
2766 return templ_7745c5c3_Err2780 return templ_7745c5c3_Err
2767 }2781 }
2768- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 253, "\">")2782+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 254, "\">")
2769 if templ_7745c5c3_Err != nil {2783 if templ_7745c5c3_Err != nil {
2770 return templ_7745c5c3_Err2784 return templ_7745c5c3_Err
2771 }2785 }
2772 var templ_7745c5c3_Var136 string2786 var templ_7745c5c3_Var136 string
2773 templ_7745c5c3_Var136, templ_7745c5c3_Err = templ.JoinStringErrs(p.Target)2787 templ_7745c5c3_Var136, templ_7745c5c3_Err = templ.JoinStringErrs(p.Target)
2774 if templ_7745c5c3_Err != nil {2788 if templ_7745c5c3_Err != nil {
2775- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 522, Col: 58}2789+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 530, Col: 58}
2776 }2790 }
2777 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var136))2791 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var136))
2778 if templ_7745c5c3_Err != nil {2792 if templ_7745c5c3_Err != nil {
2779 return templ_7745c5c3_Err2793 return templ_7745c5c3_Err
2780 }2794 }
2781- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 254, "</a></dd><dt>ahead</dt><dd>")2795+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 255, "</a></dd><dt>ahead</dt><dd>")
2782 if templ_7745c5c3_Err != nil {2796 if templ_7745c5c3_Err != nil {
2783 return templ_7745c5c3_Err2797 return templ_7745c5c3_Err
2784 }2798 }
2785 var templ_7745c5c3_Var137 string2799 var templ_7745c5c3_Var137 string
2786 templ_7745c5c3_Var137, templ_7745c5c3_Err = templ.JoinStringErrs(p.AheadText)2800 templ_7745c5c3_Var137, templ_7745c5c3_Err = templ.JoinStringErrs(p.AheadText)
2787 if templ_7745c5c3_Err != nil {2801 if templ_7745c5c3_Err != nil {
2788- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 524, Col: 21}2802+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 532, Col: 21}
2789 }2803 }
2790 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var137))2804 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var137))
2791 if templ_7745c5c3_Err != nil {2805 if templ_7745c5c3_Err != nil {
2792 return templ_7745c5c3_Err2806 return templ_7745c5c3_Err
2793 }2807 }
2794- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 255, "</dd></dl></header>")2808+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 256, "</dd></dl></header>")
2795 if templ_7745c5c3_Err != nil {2809 if templ_7745c5c3_Err != nil {
2796 return templ_7745c5c3_Err2810 return templ_7745c5c3_Err
2797 }2811 }
2798 if p.Note != "" {2812 if p.Note != "" {
2799- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 256, "<p class=\"notice\">")2813+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 257, "<p class=\"notice\">")
2800 if templ_7745c5c3_Err != nil {2814 if templ_7745c5c3_Err != nil {
2801 return templ_7745c5c3_Err2815 return templ_7745c5c3_Err
2802 }2816 }
2803 var templ_7745c5c3_Var138 string2817 var templ_7745c5c3_Var138 string
2804 templ_7745c5c3_Var138, templ_7745c5c3_Err = templ.JoinStringErrs(p.Note)2818 templ_7745c5c3_Var138, templ_7745c5c3_Err = templ.JoinStringErrs(p.Note)
2805 if templ_7745c5c3_Err != nil {2819 if templ_7745c5c3_Err != nil {
2806- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 528, Col: 29}2820+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 536, Col: 29}
2807 }2821 }
2808 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var138))2822 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var138))
2809 if templ_7745c5c3_Err != nil {2823 if templ_7745c5c3_Err != nil {
2810 return templ_7745c5c3_Err2824 return templ_7745c5c3_Err
2811 }2825 }
2812- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 257, "</p>")2826+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 258, "</p>")
2813 if templ_7745c5c3_Err != nil {2827 if templ_7745c5c3_Err != nil {
2814 return templ_7745c5c3_Err2828 return templ_7745c5c3_Err
2815 }2829 }
2816 }2830 }
2817- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 258, " ")2831+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 259, " ")
2818 if templ_7745c5c3_Err != nil {2832 if templ_7745c5c3_Err != nil {
2819 return templ_7745c5c3_Err2833 return templ_7745c5c3_Err
2820 }2834 }
2821 if p.Existing != nil {2835 if p.Existing != nil {
2822- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 259, "<p class=\"notice\">an open merge request already covers these branches: <a href=\"")2836+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 260, "<p class=\"notice\">an open merge request already covers these branches: <a href=\"")
2823 if templ_7745c5c3_Err != nil {2837 if templ_7745c5c3_Err != nil {
2824 return templ_7745c5c3_Err2838 return templ_7745c5c3_Err
2825 }2839 }
2826 var templ_7745c5c3_Var139 templ.SafeURL2840 var templ_7745c5c3_Var139 templ.SafeURL
2827 templ_7745c5c3_Var139, templ_7745c5c3_Err = templ.JoinURLErrs(templ.SafeURL(p.Existing.Href))2841 templ_7745c5c3_Var139, templ_7745c5c3_Err = templ.JoinURLErrs(templ.SafeURL(p.Existing.Href))
2828 if templ_7745c5c3_Err != nil {2842 if templ_7745c5c3_Err != nil {
2829- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 531, Col: 114}2843+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 539, Col: 114}
2830 }2844 }
2831 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var139))2845 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var139))
2832 if templ_7745c5c3_Err != nil {2846 if templ_7745c5c3_Err != nil {
2833 return templ_7745c5c3_Err2847 return templ_7745c5c3_Err
2834 }2848 }
2835- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 260, "\">")2849+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 261, "\">")
2836 if templ_7745c5c3_Err != nil {2850 if templ_7745c5c3_Err != nil {
2837 return templ_7745c5c3_Err2851 return templ_7745c5c3_Err
2838 }2852 }
2839 var templ_7745c5c3_Var140 string2853 var templ_7745c5c3_Var140 string
2840 templ_7745c5c3_Var140, templ_7745c5c3_Err = templ.JoinStringErrs(p.Existing.Label)2854 templ_7745c5c3_Var140, templ_7745c5c3_Err = templ.JoinStringErrs(p.Existing.Label)
2841 if templ_7745c5c3_Err != nil {2855 if templ_7745c5c3_Err != nil {
2842- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 531, Col: 135}2856+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 539, Col: 135}
2843 }2857 }
2844 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var140))2858 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var140))
2845 if templ_7745c5c3_Err != nil {2859 if templ_7745c5c3_Err != nil {
2846 return templ_7745c5c3_Err2860 return templ_7745c5c3_Err
2847 }2861 }
2848- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 261, "</a></p>")2862+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 262, "</a></p>")
2849 if templ_7745c5c3_Err != nil {2863 if templ_7745c5c3_Err != nil {
2850 return templ_7745c5c3_Err2864 return templ_7745c5c3_Err
2851 }2865 }
2852 }2866 }
2853- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 262, " ")2867+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 263, " ")
2854 if templ_7745c5c3_Err != nil {2868 if templ_7745c5c3_Err != nil {
2855 return templ_7745c5c3_Err2869 return templ_7745c5c3_Err
2856 }2870 }
2857 if p.Create != nil {2871 if p.Create != nil {
2858- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 263, "<form class=\"cform create\" method=\"post\" action=\"")2872+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 264, "<form class=\"cform create\" method=\"post\" action=\"")
2859 if templ_7745c5c3_Err != nil {2873 if templ_7745c5c3_Err != nil {
2860 return templ_7745c5c3_Err2874 return templ_7745c5c3_Err
2861 }2875 }
2862 var templ_7745c5c3_Var141 templ.SafeURL2876 var templ_7745c5c3_Var141 templ.SafeURL
2863 templ_7745c5c3_Var141, templ_7745c5c3_Err = templ.JoinURLErrs(templ.SafeURL(p.Create.Action))2877 templ_7745c5c3_Var141, templ_7745c5c3_Err = templ.JoinURLErrs(templ.SafeURL(p.Create.Action))
2864 if templ_7745c5c3_Err != nil {2878 if templ_7745c5c3_Err != nil {
2865- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 534, Col: 83}2879+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 542, Col: 83}
2866 }2880 }
2867 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var141))2881 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var141))
2868 if templ_7745c5c3_Err != nil {2882 if templ_7745c5c3_Err != nil {
2869 return templ_7745c5c3_Err2883 return templ_7745c5c3_Err
2870 }2884 }
2871- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 264, "\"><input type=\"hidden\" name=\"source\" value=\"")2885+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 265, "\"><input type=\"hidden\" name=\"source\" value=\"")
2872 if templ_7745c5c3_Err != nil {2886 if templ_7745c5c3_Err != nil {
2873 return templ_7745c5c3_Err2887 return templ_7745c5c3_Err
2874 }2888 }
2875 var templ_7745c5c3_Var142 string2889 var templ_7745c5c3_Var142 string
2876 templ_7745c5c3_Var142, templ_7745c5c3_Err = templ.ResolveAttributeValue(p.Create.Source)2890 templ_7745c5c3_Var142, templ_7745c5c3_Err = templ.ResolveAttributeValue(p.Create.Source)
2877 if templ_7745c5c3_Err != nil {2891 if templ_7745c5c3_Err != nil {
2878- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 535, Col: 62}2892+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 543, Col: 62}
2879 }2893 }
2880 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ_7745c5c3_Var142)2894 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ_7745c5c3_Var142)
2881 if templ_7745c5c3_Err != nil {2895 if templ_7745c5c3_Err != nil {
2882 return templ_7745c5c3_Err2896 return templ_7745c5c3_Err
2883 }2897 }
2884- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 265, "\"> <input type=\"hidden\" name=\"target\" value=\"")2898+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 266, "\"> <input type=\"hidden\" name=\"target\" value=\"")
2885 if templ_7745c5c3_Err != nil {2899 if templ_7745c5c3_Err != nil {
2886 return templ_7745c5c3_Err2900 return templ_7745c5c3_Err
2887 }2901 }
2888 var templ_7745c5c3_Var143 string2902 var templ_7745c5c3_Var143 string
2889 templ_7745c5c3_Var143, templ_7745c5c3_Err = templ.ResolveAttributeValue(p.Create.Target)2903 templ_7745c5c3_Var143, templ_7745c5c3_Err = templ.ResolveAttributeValue(p.Create.Target)
2890 if templ_7745c5c3_Err != nil {2904 if templ_7745c5c3_Err != nil {
2891- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 536, Col: 62}2905+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 544, Col: 62}
2892 }2906 }
2893 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ_7745c5c3_Var143)2907 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ_7745c5c3_Var143)
2894 if templ_7745c5c3_Err != nil {2908 if templ_7745c5c3_Err != nil {
2895 return templ_7745c5c3_Err2909 return templ_7745c5c3_Err
2896 }2910 }
2897- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 266, "\"> <label for=\"mr-title\">title</label> <input id=\"mr-title\" name=\"title\" type=\"text\" maxlength=\"120\" required value=\"")2911+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 267, "\"> <label for=\"mr-title\">title</label> <input id=\"mr-title\" name=\"title\" type=\"text\" maxlength=\"120\" required value=\"")
2898 if templ_7745c5c3_Err != nil {2912 if templ_7745c5c3_Err != nil {
2899 return templ_7745c5c3_Err2913 return templ_7745c5c3_Err
2900 }2914 }
2901 var templ_7745c5c3_Var144 string2915 var templ_7745c5c3_Var144 string
2902 templ_7745c5c3_Var144, templ_7745c5c3_Err = templ.ResolveAttributeValue(p.Create.Title)2916 templ_7745c5c3_Var144, templ_7745c5c3_Err = templ.ResolveAttributeValue(p.Create.Title)
2903 if templ_7745c5c3_Err != nil {2917 if templ_7745c5c3_Err != nil {
2904- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 538, Col: 97}2918+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 546, Col: 97}
2905 }2919 }
2906 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ_7745c5c3_Var144)2920 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ_7745c5c3_Var144)
2907 if templ_7745c5c3_Err != nil {2921 if templ_7745c5c3_Err != nil {
2908 return templ_7745c5c3_Err2922 return templ_7745c5c3_Err
2909 }2923 }
2910- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 267, "\" autocomplete=\"off\"> <label for=\"mr-desc\">description</label> <textarea id=\"mr-desc\" name=\"description\" rows=\"4\" maxlength=\"8000\" placeholder=\"Markdown, optional\"></textarea><div class=\"f-btns\"><button type=\"submit\" class=\"btn primary\">Create merge request</button></div></form>")2924+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 268, "\" autocomplete=\"off\"> <label for=\"mr-desc\">description</label> <textarea id=\"mr-desc\" name=\"description\" rows=\"4\" maxlength=\"8000\" placeholder=\"Markdown, optional\"></textarea><div class=\"f-btns\"><button type=\"submit\" class=\"btn primary\">Create merge request</button></div></form>")
2911 if templ_7745c5c3_Err != nil {2925 if templ_7745c5c3_Err != nil {
2912 return templ_7745c5c3_Err2926 return templ_7745c5c3_Err
2913 }2927 }
2914 }2928 }
2915- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 268, " ")2929+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 269, " ")
2916 if templ_7745c5c3_Err != nil {2930 if templ_7745c5c3_Err != nil {
2917 return templ_7745c5c3_Err2931 return templ_7745c5c3_Err
2918 }2932 }
2919 if p.HasDiff {2933 if p.HasDiff {
2920- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 269, "<div class=\"diff-tools\" role=\"group\" aria-label=\"Diff view\"><span class=\"dim\">")2934+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 270, "<div class=\"diff-tools\" role=\"group\" aria-label=\"Diff view\"><span class=\"dim\">")
2921 if templ_7745c5c3_Err != nil {2935 if templ_7745c5c3_Err != nil {
2922 return templ_7745c5c3_Err2936 return templ_7745c5c3_Err
2923 }2937 }
2924 var templ_7745c5c3_Var145 string2938 var templ_7745c5c3_Var145 string
2925 templ_7745c5c3_Var145, templ_7745c5c3_Err = templ.JoinStringErrs(plural(p.NFiles, "file", "files"))2939 templ_7745c5c3_Var145, templ_7745c5c3_Err = templ.JoinStringErrs(plural(p.NFiles, "file", "files"))
2926 if templ_7745c5c3_Err != nil {2940 if templ_7745c5c3_Err != nil {
2927- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 548, Col: 57}2941+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 556, Col: 57}
2928 }2942 }
2929 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var145))2943 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var145))
2930 if templ_7745c5c3_Err != nil {2944 if templ_7745c5c3_Err != nil {
2931 return templ_7745c5c3_Err2945 return templ_7745c5c3_Err
2932 }2946 }
2933- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 270, " · <span class=\"plus\">+")2947+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 271, " · <span class=\"plus\">+")
2934 if templ_7745c5c3_Err != nil {2948 if templ_7745c5c3_Err != nil {
2935 return templ_7745c5c3_Err2949 return templ_7745c5c3_Err
2936 }2950 }
2937 var templ_7745c5c3_Var146 string2951 var templ_7745c5c3_Var146 string
2938 templ_7745c5c3_Var146, templ_7745c5c3_Err = templ.JoinStringErrs(itoa(p.Adds))2952 templ_7745c5c3_Var146, templ_7745c5c3_Err = templ.JoinStringErrs(itoa(p.Adds))
2939 if templ_7745c5c3_Err != nil {2953 if templ_7745c5c3_Err != nil {
2940- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 548, Col: 97}2954+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 556, Col: 97}
2941 }2955 }
2942 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var146))2956 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var146))
2943 if templ_7745c5c3_Err != nil {2957 if templ_7745c5c3_Err != nil {
2944 return templ_7745c5c3_Err2958 return templ_7745c5c3_Err
2945 }2959 }
2946- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 271, "</span> <span class=\"minus\">-")2960+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 272, "</span> <span class=\"minus\">-")
2947 if templ_7745c5c3_Err != nil {2961 if templ_7745c5c3_Err != nil {
2948 return templ_7745c5c3_Err2962 return templ_7745c5c3_Err
2949 }2963 }
2950 var templ_7745c5c3_Var147 string2964 var templ_7745c5c3_Var147 string
2951 templ_7745c5c3_Var147, templ_7745c5c3_Err = templ.JoinStringErrs(itoa(p.Dels))2965 templ_7745c5c3_Var147, templ_7745c5c3_Err = templ.JoinStringErrs(itoa(p.Dels))
2952 if templ_7745c5c3_Err != nil {2966 if templ_7745c5c3_Err != nil {
2953- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 548, Col: 142}2967+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 556, Col: 142}
2954 }2968 }
2955 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var147))2969 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var147))
2956 if templ_7745c5c3_Err != nil {2970 if templ_7745c5c3_Err != nil {
2957 return templ_7745c5c3_Err2971 return templ_7745c5c3_Err
2958 }2972 }
2959- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 272, "</span></span> <span class=\"grow\"></span>")2973+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 273, "</span></span> <span class=\"grow\"></span>")
2960 if templ_7745c5c3_Err != nil {2974 if templ_7745c5c3_Err != nil {
2961 return templ_7745c5c3_Err2975 return templ_7745c5c3_Err
2962 }2976 }
@@ -2972,64 +2986,64 @@ func Compare(l Layout, p ComparePage) templ.Component {
2972 if templ_7745c5c3_Err != nil {2986 if templ_7745c5c3_Err != nil {
2973 return templ_7745c5c3_Err2987 return templ_7745c5c3_Err
2974 }2988 }
2975- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 273, "</div>")2989+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 274, "</div>")
2976 if templ_7745c5c3_Err != nil {2990 if templ_7745c5c3_Err != nil {
2977 return templ_7745c5c3_Err2991 return templ_7745c5c3_Err
2978 }2992 }
2979 if p.Invisible {2993 if p.Invisible {
2980- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 274, "<p class=\"notice\">this diff holds invisible characters (direction controls, zero-width characters). They are shown as <span class=\"inv\">&lt;U+XXXX&gt;</span> markers, never applied.</p>")2994+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 275, "<p class=\"notice\">this diff holds invisible characters (direction controls, zero-width characters). They are shown as <span class=\"inv\">&lt;U+XXXX&gt;</span> markers, never applied.</p>")
2981 if templ_7745c5c3_Err != nil {2995 if templ_7745c5c3_Err != nil {
2982 return templ_7745c5c3_Err2996 return templ_7745c5c3_Err
2983 }2997 }
2984 }2998 }
2985- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 275, " <div id=\"diffs\"")2999+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 276, " <div id=\"diffs\"")
2986 if templ_7745c5c3_Err != nil {3000 if templ_7745c5c3_Err != nil {
2987 return templ_7745c5c3_Err3001 return templ_7745c5c3_Err
2988 }3002 }
2989 if p.Both {3003 if p.Both {
2990- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 276, " data-diff=\"")3004+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 277, " data-diff=\"")
2991 if templ_7745c5c3_Err != nil {3005 if templ_7745c5c3_Err != nil {
2992 return templ_7745c5c3_Err3006 return templ_7745c5c3_Err
2993 }3007 }
2994 var templ_7745c5c3_Var148 string3008 var templ_7745c5c3_Var148 string
2995 templ_7745c5c3_Var148, templ_7745c5c3_Err = templ.ResolveAttributeValue(p.View)3009 templ_7745c5c3_Var148, templ_7745c5c3_Err = templ.ResolveAttributeValue(p.View)
2996 if templ_7745c5c3_Err != nil {3010 if templ_7745c5c3_Err != nil {
2997- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 563, Col: 23}3011+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 571, Col: 23}
2998 }3012 }
2999 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ_7745c5c3_Var148)3013 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ_7745c5c3_Var148)
3000 if templ_7745c5c3_Err != nil {3014 if templ_7745c5c3_Err != nil {
3001 return templ_7745c5c3_Err3015 return templ_7745c5c3_Err
3002 }3016 }
3003- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 277, "\"")3017+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 278, "\"")
3004 if templ_7745c5c3_Err != nil {3018 if templ_7745c5c3_Err != nil {
3005 return templ_7745c5c3_Err3019 return templ_7745c5c3_Err
3006 }3020 }
3007 } else {3021 } else {
3008- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 278, " data-view=\"")3022+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 279, " data-view=\"")
3009 if templ_7745c5c3_Err != nil {3023 if templ_7745c5c3_Err != nil {
3010 return templ_7745c5c3_Err3024 return templ_7745c5c3_Err
3011 }3025 }
3012 var templ_7745c5c3_Var149 string3026 var templ_7745c5c3_Var149 string
3013 templ_7745c5c3_Var149, templ_7745c5c3_Err = templ.ResolveAttributeValue(p.View)3027 templ_7745c5c3_Var149, templ_7745c5c3_Err = templ.ResolveAttributeValue(p.View)
3014 if templ_7745c5c3_Err != nil {3028 if templ_7745c5c3_Err != nil {
3015- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 565, Col: 23}3029+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 573, Col: 23}
3016 }3030 }
3017 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ_7745c5c3_Var149)3031 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ_7745c5c3_Var149)
3018 if templ_7745c5c3_Err != nil {3032 if templ_7745c5c3_Err != nil {
3019 return templ_7745c5c3_Err3033 return templ_7745c5c3_Err
3020 }3034 }
3021- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 279, "\"")3035+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 280, "\"")
3022 if templ_7745c5c3_Err != nil {3036 if templ_7745c5c3_Err != nil {
3023 return templ_7745c5c3_Err3037 return templ_7745c5c3_Err
3024 }3038 }
3025 }3039 }
3026 if p.Both && !p.Pinned {3040 if p.Both && !p.Pinned {
3027- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 280, " hx-live=\"this.dataset.diff = sessionStorage.getItem('diff') || this.dataset.diff\"")3041+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 281, " hx-live=\"this.dataset.diff = sessionStorage.getItem('diff') || this.dataset.diff\"")
3028 if templ_7745c5c3_Err != nil {3042 if templ_7745c5c3_Err != nil {
3029 return templ_7745c5c3_Err3043 return templ_7745c5c3_Err
3030 }3044 }
3031 }3045 }
3032- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 281, ">")3046+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 282, ">")
3033 if templ_7745c5c3_Err != nil {3047 if templ_7745c5c3_Err != nil {
3034 return templ_7745c5c3_Err3048 return templ_7745c5c3_Err
3035 }3049 }
@@ -3039,7 +3053,7 @@ func Compare(l Layout, p ComparePage) templ.Component {
3039 return templ_7745c5c3_Err3053 return templ_7745c5c3_Err
3040 }3054 }
3041 }3055 }
3042- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 282, "</div>")3056+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 283, "</div>")
3043 if templ_7745c5c3_Err != nil {3057 if templ_7745c5c3_Err != nil {
3044 return templ_7745c5c3_Err3058 return templ_7745c5c3_Err
3045 }3059 }
@@ -3075,77 +3089,77 @@ func compareRail(p ComparePage) templ.Component {
3075 templ_7745c5c3_Var150 = templ.NopComponent3089 templ_7745c5c3_Var150 = templ.NopComponent
3076 }3090 }
3077 ctx = templ.ClearChildren(ctx)3091 ctx = templ.ClearChildren(ctx)
3078- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 283, "<section aria-labelledby=\"r-ahead\"><h2 id=\"r-ahead\">Commits <span class=\"count\">")3092+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 284, "<section aria-labelledby=\"r-ahead\"><h2 id=\"r-ahead\">Commits <span class=\"count\">")
3079 if templ_7745c5c3_Err != nil {3093 if templ_7745c5c3_Err != nil {
3080 return templ_7745c5c3_Err3094 return templ_7745c5c3_Err
3081 }3095 }
3082 var templ_7745c5c3_Var151 string3096 var templ_7745c5c3_Var151 string
3083 templ_7745c5c3_Var151, templ_7745c5c3_Err = templ.JoinStringErrs(itoa(len(p.Ahead)))3097 templ_7745c5c3_Var151, templ_7745c5c3_Err = templ.JoinStringErrs(itoa(len(p.Ahead)))
3084 if templ_7745c5c3_Err != nil {3098 if templ_7745c5c3_Err != nil {
3085- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 581, Col: 67}3099+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 589, Col: 67}
3086 }3100 }
3087 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var151))3101 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var151))
3088 if templ_7745c5c3_Err != nil {3102 if templ_7745c5c3_Err != nil {
3089 return templ_7745c5c3_Err3103 return templ_7745c5c3_Err
3090 }3104 }
3091- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 284, "</span></h2><ul class=\"pcommits\">")3105+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 285, "</span></h2><ul class=\"pcommits\">")
3092 if templ_7745c5c3_Err != nil {3106 if templ_7745c5c3_Err != nil {
3093 return templ_7745c5c3_Err3107 return templ_7745c5c3_Err
3094 }3108 }
3095 for _, c := range p.Ahead {3109 for _, c := range p.Ahead {
3096- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 285, "<li><a href=\"")3110+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 286, "<li><a href=\"")
3097 if templ_7745c5c3_Err != nil {3111 if templ_7745c5c3_Err != nil {
3098 return templ_7745c5c3_Err3112 return templ_7745c5c3_Err
3099 }3113 }
3100 var templ_7745c5c3_Var152 templ.SafeURL3114 var templ_7745c5c3_Var152 templ.SafeURL
3101 templ_7745c5c3_Var152, templ_7745c5c3_Err = templ.JoinURLErrs(templ.SafeURL(c.CHref))3115 templ_7745c5c3_Var152, templ_7745c5c3_Err = templ.JoinURLErrs(templ.SafeURL(c.CHref))
3102 if templ_7745c5c3_Err != nil {3116 if templ_7745c5c3_Err != nil {
3103- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 585, Col: 37}3117+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 593, Col: 37}
3104 }3118 }
3105 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var152))3119 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var152))
3106 if templ_7745c5c3_Err != nil {3120 if templ_7745c5c3_Err != nil {
3107 return templ_7745c5c3_Err3121 return templ_7745c5c3_Err
3108 }3122 }
3109- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 286, "\">")3123+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 287, "\">")
3110 if templ_7745c5c3_Err != nil {3124 if templ_7745c5c3_Err != nil {
3111 return templ_7745c5c3_Err3125 return templ_7745c5c3_Err
3112 }3126 }
3113 var templ_7745c5c3_Var153 string3127 var templ_7745c5c3_Var153 string
3114 templ_7745c5c3_Var153, templ_7745c5c3_Err = templ.JoinStringErrs(c.Short)3128 templ_7745c5c3_Var153, templ_7745c5c3_Err = templ.JoinStringErrs(c.Short)
3115 if templ_7745c5c3_Err != nil {3129 if templ_7745c5c3_Err != nil {
3116- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 585, Col: 49}3130+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 593, Col: 49}
3117 }3131 }
3118 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var153))3132 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var153))
3119 if templ_7745c5c3_Err != nil {3133 if templ_7745c5c3_Err != nil {
3120 return templ_7745c5c3_Err3134 return templ_7745c5c3_Err
3121 }3135 }
3122- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 287, "</a> <span class=\"s\">")3136+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 288, "</a> <span class=\"s\">")
3123 if templ_7745c5c3_Err != nil {3137 if templ_7745c5c3_Err != nil {
3124 return templ_7745c5c3_Err3138 return templ_7745c5c3_Err
3125 }3139 }
3126 var templ_7745c5c3_Var154 string3140 var templ_7745c5c3_Var154 string
3127 templ_7745c5c3_Var154, templ_7745c5c3_Err = templ.JoinStringErrs(c.Subject)3141 templ_7745c5c3_Var154, templ_7745c5c3_Err = templ.JoinStringErrs(c.Subject)
3128 if templ_7745c5c3_Err != nil {3142 if templ_7745c5c3_Err != nil {
3129- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 586, Col: 32}3143+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 594, Col: 32}
3130 }3144 }
3131 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var154))3145 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var154))
3132 if templ_7745c5c3_Err != nil {3146 if templ_7745c5c3_Err != nil {
3133 return templ_7745c5c3_Err3147 return templ_7745c5c3_Err
3134 }3148 }
3135- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 288, "</span> <span class=\"mute\">")3149+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 289, "</span> <span class=\"mute\">")
3136 if templ_7745c5c3_Err != nil {3150 if templ_7745c5c3_Err != nil {
3137 return templ_7745c5c3_Err3151 return templ_7745c5c3_Err
3138 }3152 }
3139 var templ_7745c5c3_Var155 string3153 var templ_7745c5c3_Var155 string
3140 templ_7745c5c3_Var155, templ_7745c5c3_Err = templ.JoinStringErrs(c.Author)3154 templ_7745c5c3_Var155, templ_7745c5c3_Err = templ.JoinStringErrs(c.Author)
3141 if templ_7745c5c3_Err != nil {3155 if templ_7745c5c3_Err != nil {
3142- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 588, Col: 16}3156+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 596, Col: 16}
3143 }3157 }
3144 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var155))3158 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var155))
3145 if templ_7745c5c3_Err != nil {3159 if templ_7745c5c3_Err != nil {
3146 return templ_7745c5c3_Err3160 return templ_7745c5c3_Err
3147 }3161 }
3148- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 289, " ")3162+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 290, " ")
3149 if templ_7745c5c3_Err != nil {3163 if templ_7745c5c3_Err != nil {
3150 return templ_7745c5c3_Err3164 return templ_7745c5c3_Err
3151 }3165 }
@@ -3153,90 +3167,90 @@ func compareRail(p ComparePage) templ.Component {
3153 var templ_7745c5c3_Var156 string3167 var templ_7745c5c3_Var156 string
3154 templ_7745c5c3_Var156, templ_7745c5c3_Err = templ.JoinStringErrs(" · ")3168 templ_7745c5c3_Var156, templ_7745c5c3_Err = templ.JoinStringErrs(" · ")
3155 if templ_7745c5c3_Err != nil {3169 if templ_7745c5c3_Err != nil {
3156- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 590, Col: 15}3170+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 598, Col: 15}
3157 }3171 }
3158 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var156))3172 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var156))
3159 if templ_7745c5c3_Err != nil {3173 if templ_7745c5c3_Err != nil {
3160 return templ_7745c5c3_Err3174 return templ_7745c5c3_Err
3161 }3175 }
3162- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 290, "<time datetime=\"")3176+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 291, "<time datetime=\"")
3163 if templ_7745c5c3_Err != nil {3177 if templ_7745c5c3_Err != nil {
3164 return templ_7745c5c3_Err3178 return templ_7745c5c3_Err
3165 }3179 }
3166 var templ_7745c5c3_Var157 string3180 var templ_7745c5c3_Var157 string
3167 templ_7745c5c3_Var157, templ_7745c5c3_Err = templ.ResolveAttributeValue(c.WhenAt)3181 templ_7745c5c3_Var157, templ_7745c5c3_Err = templ.ResolveAttributeValue(c.WhenAt)
3168 if templ_7745c5c3_Err != nil {3182 if templ_7745c5c3_Err != nil {
3169- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 590, Col: 42}3183+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 598, Col: 42}
3170 }3184 }
3171 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ_7745c5c3_Var157)3185 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ_7745c5c3_Var157)
3172 if templ_7745c5c3_Err != nil {3186 if templ_7745c5c3_Err != nil {
3173 return templ_7745c5c3_Err3187 return templ_7745c5c3_Err
3174 }3188 }
3175- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 291, "\">")3189+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 292, "\">")
3176 if templ_7745c5c3_Err != nil {3190 if templ_7745c5c3_Err != nil {
3177 return templ_7745c5c3_Err3191 return templ_7745c5c3_Err
3178 }3192 }
3179 var templ_7745c5c3_Var158 string3193 var templ_7745c5c3_Var158 string
3180 templ_7745c5c3_Var158, templ_7745c5c3_Err = templ.JoinStringErrs(c.When)3194 templ_7745c5c3_Var158, templ_7745c5c3_Err = templ.JoinStringErrs(c.When)
3181 if templ_7745c5c3_Err != nil {3195 if templ_7745c5c3_Err != nil {
3182- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 590, Col: 53}3196+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 598, Col: 53}
3183 }3197 }
3184 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var158))3198 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var158))
3185 if templ_7745c5c3_Err != nil {3199 if templ_7745c5c3_Err != nil {
3186 return templ_7745c5c3_Err3200 return templ_7745c5c3_Err
3187 }3201 }
3188- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 292, "</time>")3202+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 293, "</time>")
3189 if templ_7745c5c3_Err != nil {3203 if templ_7745c5c3_Err != nil {
3190 return templ_7745c5c3_Err3204 return templ_7745c5c3_Err
3191 }3205 }
3192 }3206 }
3193- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 293, "</span></li>")3207+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 294, "</span></li>")
3194 if templ_7745c5c3_Err != nil {3208 if templ_7745c5c3_Err != nil {
3195 return templ_7745c5c3_Err3209 return templ_7745c5c3_Err
3196 }3210 }
3197 }3211 }
3198- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 294, "</ul>")3212+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 295, "</ul>")
3199 if templ_7745c5c3_Err != nil {3213 if templ_7745c5c3_Err != nil {
3200 return templ_7745c5c3_Err3214 return templ_7745c5c3_Err
3201 }3215 }
3202 if len(p.Ahead) == 0 {3216 if len(p.Ahead) == 0 {
3203- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 295, "<p class=\"dim\">no commit ahead of ")3217+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 296, "<p class=\"dim\">no commit ahead of ")
3204 if templ_7745c5c3_Err != nil {3218 if templ_7745c5c3_Err != nil {
3205 return templ_7745c5c3_Err3219 return templ_7745c5c3_Err
3206 }3220 }
3207 var templ_7745c5c3_Var159 string3221 var templ_7745c5c3_Var159 string
3208 templ_7745c5c3_Var159, templ_7745c5c3_Err = templ.JoinStringErrs(p.Target)3222 templ_7745c5c3_Var159, templ_7745c5c3_Err = templ.JoinStringErrs(p.Target)
3209 if templ_7745c5c3_Err != nil {3223 if templ_7745c5c3_Err != nil {
3210- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 597, Col: 47}3224+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 605, Col: 47}
3211 }3225 }
3212 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var159))3226 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var159))
3213 if templ_7745c5c3_Err != nil {3227 if templ_7745c5c3_Err != nil {
3214 return templ_7745c5c3_Err3228 return templ_7745c5c3_Err
3215 }3229 }
3216- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 296, ".</p>")3230+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 297, ".</p>")
3217 if templ_7745c5c3_Err != nil {3231 if templ_7745c5c3_Err != nil {
3218 return templ_7745c5c3_Err3232 return templ_7745c5c3_Err
3219 }3233 }
3220 }3234 }
3221- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 297, "</section>")3235+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 298, "</section>")
3222 if templ_7745c5c3_Err != nil {3236 if templ_7745c5c3_Err != nil {
3223 return templ_7745c5c3_Err3237 return templ_7745c5c3_Err
3224 }3238 }
3225 if p.HasDiff {3239 if p.HasDiff {
3226- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 298, "<section aria-labelledby=\"r-files\"><h2 id=\"r-files\">Files <span class=\"count\">")3240+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 299, "<section aria-labelledby=\"r-files\"><h2 id=\"r-files\">Files <span class=\"count\">")
3227 if templ_7745c5c3_Err != nil {3241 if templ_7745c5c3_Err != nil {
3228 return templ_7745c5c3_Err3242 return templ_7745c5c3_Err
3229 }3243 }
3230 var templ_7745c5c3_Var160 string3244 var templ_7745c5c3_Var160 string
3231 templ_7745c5c3_Var160, templ_7745c5c3_Err = templ.JoinStringErrs(itoa(len(p.Files)))3245 templ_7745c5c3_Var160, templ_7745c5c3_Err = templ.JoinStringErrs(itoa(len(p.Files)))
3232 if templ_7745c5c3_Err != nil {3246 if templ_7745c5c3_Err != nil {
3233- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 602, Col: 66}3247+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 610, Col: 66}
3234 }3248 }
3235 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var160))3249 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var160))
3236 if templ_7745c5c3_Err != nil {3250 if templ_7745c5c3_Err != nil {
3237 return templ_7745c5c3_Err3251 return templ_7745c5c3_Err
3238 }3252 }
3239- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 299, "</span></h2>")3253+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 300, "</span></h2>")
3240 if templ_7745c5c3_Err != nil {3254 if templ_7745c5c3_Err != nil {
3241 return templ_7745c5c3_Err3255 return templ_7745c5c3_Err
3242 }3256 }
@@ -3244,12 +3258,12 @@ func compareRail(p ComparePage) templ.Component {
3244 if templ_7745c5c3_Err != nil {3258 if templ_7745c5c3_Err != nil {
3245 return templ_7745c5c3_Err3259 return templ_7745c5c3_Err
3246 }3260 }
3247- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 300, "</section>")3261+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 301, "</section>")
3248 if templ_7745c5c3_Err != nil {3262 if templ_7745c5c3_Err != nil {
3249 return templ_7745c5c3_Err3263 return templ_7745c5c3_Err
3250 }3264 }
3251 }3265 }
3252- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 301, "<section aria-labelledby=\"r-cli\"><h2 id=\"r-cli\">From a terminal</h2>")3266+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 302, "<section aria-labelledby=\"r-cli\"><h2 id=\"r-cli\">From a terminal</h2>")
3253 if templ_7745c5c3_Err != nil {3267 if templ_7745c5c3_Err != nil {
3254 return templ_7745c5c3_Err3268 return templ_7745c5c3_Err
3255 }3269 }
@@ -3257,7 +3271,7 @@ func compareRail(p ComparePage) templ.Component {
3257 if templ_7745c5c3_Err != nil {3271 if templ_7745c5c3_Err != nil {
3258 return templ_7745c5c3_Err3272 return templ_7745c5c3_Err
3259 }3273 }
3260- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 302, "</section>")3274+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 303, "</section>")
3261 if templ_7745c5c3_Err != nil {3275 if templ_7745c5c3_Err != nil {
3262 return templ_7745c5c3_Err3276 return templ_7745c5c3_Err
3263 }3277 }
M internal/adapters/web/static/css/60-mr.css +1 -3
@@ -11,7 +11,6 @@
1111 .mr-desc.prose { max-width: none; padding: var(--s4) var(--s5); background: var(--bg-surface); border: 1px solid var(--border); border-radius: var(--r); }
1212 .mr-desc.prose > * { max-width: var(--measure); }
1313 .mr-desc.prose > pre, .mr-desc.prose > table { max-width: 100%; }
14- .c-text a { text-decoration: underline; }
1514
1615 .since {
1716 display: inline-flex; flex-wrap: wrap; gap: var(--s1); padding: var(--s1);
@@ -147,12 +146,11 @@
147146 & p { white-space: normal; }
148147 & .c-who { font-weight: bold; }
149148 & .c-state { color: var(--ink-dim); }
150- & .c-text { white-space: pre-wrap; overflow-wrap: anywhere; }
151149 & .c-where { font-size: var(--fs-s); overflow-wrap: anywhere; }
152150 & .c-act { margin-top: var(--s2); }
153151 & .c-act button { height: 26px; font-size: var(--fs-xs); }
154152 &[data-resolved="true"] { border-left-color: var(--border-strong); }
155- &[data-resolved="true"] .c-text { color: var(--ink-dim); }
153+ &[data-resolved="true"] .c-body { color: var(--ink-dim); }
156154 }
157155 .dt .fnote td { background: var(--bg-canvas); padding: var(--s2) var(--s3); white-space: normal; }
158156 .dt .fnote .cmt, .dt .fnote .cform { margin: 0; }
@@ -11,7 +11,6 @@
11 .mr-desc.prose { max-width: none; padding: var(--s4) var(--s5); background: var(--bg-surface); border: 1px solid var(--border); border-radius: var(--r); }11 .mr-desc.prose { max-width: none; padding: var(--s4) var(--s5); background: var(--bg-surface); border: 1px solid var(--border); border-radius: var(--r); }
12 .mr-desc.prose > * { max-width: var(--measure); }12 .mr-desc.prose > * { max-width: var(--measure); }
13 .mr-desc.prose > pre, .mr-desc.prose > table { max-width: 100%; }13 .mr-desc.prose > pre, .mr-desc.prose > table { max-width: 100%; }
14- .c-text a { text-decoration: underline; }
15 14
16 .since {15 .since {
17 display: inline-flex; flex-wrap: wrap; gap: var(--s1); padding: var(--s1);16 display: inline-flex; flex-wrap: wrap; gap: var(--s1); padding: var(--s1);
@@ -147,12 +146,11 @@
147 & p { white-space: normal; }146 & p { white-space: normal; }
148 & .c-who { font-weight: bold; }147 & .c-who { font-weight: bold; }
149 & .c-state { color: var(--ink-dim); }148 & .c-state { color: var(--ink-dim); }
150- & .c-text { white-space: pre-wrap; overflow-wrap: anywhere; }
151 & .c-where { font-size: var(--fs-s); overflow-wrap: anywhere; }149 & .c-where { font-size: var(--fs-s); overflow-wrap: anywhere; }
152 & .c-act { margin-top: var(--s2); }150 & .c-act { margin-top: var(--s2); }
153 & .c-act button { height: 26px; font-size: var(--fs-xs); }151 & .c-act button { height: 26px; font-size: var(--fs-xs); }
154 &[data-resolved="true"] { border-left-color: var(--border-strong); }152 &[data-resolved="true"] { border-left-color: var(--border-strong); }
155- &[data-resolved="true"] .c-text { color: var(--ink-dim); }153+ &[data-resolved="true"] .c-body { color: var(--ink-dim); }
156 }154 }
157 .dt .fnote td { background: var(--bg-canvas); padding: var(--s2) var(--s3); white-space: normal; }155 .dt .fnote td { background: var(--bg-canvas); padding: var(--s2) var(--s3); white-space: normal; }
158 .dt .fnote .cmt, .dt .fnote .cform { margin: 0; }156 .dt .fnote .cmt, .dt .fnote .cform { margin: 0; }
M internal/adapters/web/static/js/mr.js +17 -2
@@ -126,16 +126,31 @@ window.ermiteMR = (() => {
126126 function reveal(id, scroll = true) {
127127 // Any navigation, loaded or not, makes the reveals still loading stale.
128128 const gen = ++revealGen;
129+ const target = () => {
130+ if (/^c\d+$/.test(id) && $('#diffs')?.dataset.diff === 'split') {
131+ const split = document.getElementById(id + '-s');
132+ if (split) return split;
133+ }
134+ return document.getElementById(id);
135+ };
129136 let ph = document.getElementById(id)?.querySelector(':scope > .dlazy');
130137 if (!ph && /^c\d+/.test(id) && !document.getElementById(id)) {
131138 const base = id.replace(/-s$/, '');
132139 ph = $$('.dlazy[data-notes]').find((p) => p.dataset.notes.split(' ').includes(base));
133140 }
134- if (!ph) return false;
141+ if (!ph) {
142+ const el = target();
143+ if (el && el.id !== id) {
144+ const d = el.closest('details');
145+ if (d) d.open = true;
146+ if (scroll) el.scrollIntoView({ block: 'start' });
147+ }
148+ return false;
149+ }
135150 load(ph).then(() => {
136151 // A later reveal (another file asked meanwhile) owns the view.
137152 if (gen !== revealGen) return;
138- const el = document.getElementById(id);
153+ const el = target();
139154 if (!el) return;
140155 const d = el.closest('details');
141156 if (d) d.open = true;
@@ -126,16 +126,31 @@ window.ermiteMR = (() => {
126 function reveal(id, scroll = true) {126 function reveal(id, scroll = true) {
127 // Any navigation, loaded or not, makes the reveals still loading stale.127 // Any navigation, loaded or not, makes the reveals still loading stale.
128 const gen = ++revealGen;128 const gen = ++revealGen;
129+ const target = () => {
130+ if (/^c\d+$/.test(id) && $('#diffs')?.dataset.diff === 'split') {
131+ const split = document.getElementById(id + '-s');
132+ if (split) return split;
133+ }
134+ return document.getElementById(id);
135+ };
129 let ph = document.getElementById(id)?.querySelector(':scope > .dlazy');136 let ph = document.getElementById(id)?.querySelector(':scope > .dlazy');
130 if (!ph && /^c\d+/.test(id) && !document.getElementById(id)) {137 if (!ph && /^c\d+/.test(id) && !document.getElementById(id)) {
131 const base = id.replace(/-s$/, '');138 const base = id.replace(/-s$/, '');
132 ph = $$('.dlazy[data-notes]').find((p) => p.dataset.notes.split(' ').includes(base));139 ph = $$('.dlazy[data-notes]').find((p) => p.dataset.notes.split(' ').includes(base));
133 }140 }
134- if (!ph) return false;141+ if (!ph) {
142+ const el = target();
143+ if (el && el.id !== id) {
144+ const d = el.closest('details');
145+ if (d) d.open = true;
146+ if (scroll) el.scrollIntoView({ block: 'start' });
147+ }
148+ return false;
149+ }
135 load(ph).then(() => {150 load(ph).then(() => {
136 // A later reveal (another file asked meanwhile) owns the view.151 // A later reveal (another file asked meanwhile) owns the view.
137 if (gen !== revealGen) return;152 if (gen !== revealGen) return;
138- const el = document.getElementById(id);153+ const el = target();
139 if (!el) return;154 if (!el) return;
140 const d = el.closest('details');155 const d = el.closest('details');
141 if (d) d.open = true;156 if (d) d.open = true;
M internal/app/cli_mr.go +7 -2
@@ -562,9 +562,14 @@ func printMRDetail(w io.Writer, d *ermite.GetMergeRequestResponse, withDiff, sin
562562 if len(d.GetVerdicts()) > 0 {
563563 var verdicts []string
564564 for _, v := range d.GetVerdicts() {
565- label := "changes requested"
566- if v.GetVerdict() == ermite.Verdict_VERDICT_APPROVE {
565+ var label string
566+ switch v.GetVerdict() {
567+ case ermite.Verdict_VERDICT_APPROVE:
567568 label = "approved"
569+ case ermite.Verdict_VERDICT_CHANGES_REQUESTED:
570+ label = "changes requested"
571+ default:
572+ label = fmt.Sprintf("verdict %d", v.GetVerdict())
568573 }
569574 if v.GetStale() {
570575 label += " (stale)"
@@ -562,9 +562,14 @@ func printMRDetail(w io.Writer, d *ermite.GetMergeRequestResponse, withDiff, sin
562 if len(d.GetVerdicts()) > 0 {562 if len(d.GetVerdicts()) > 0 {
563 var verdicts []string563 var verdicts []string
564 for _, v := range d.GetVerdicts() {564 for _, v := range d.GetVerdicts() {
565- label := "changes requested"565+ var label string
566- if v.GetVerdict() == ermite.Verdict_VERDICT_APPROVE {566+ switch v.GetVerdict() {
567+ case ermite.Verdict_VERDICT_APPROVE:
567 label = "approved"568 label = "approved"
569+ case ermite.Verdict_VERDICT_CHANGES_REQUESTED:
570+ label = "changes requested"
571+ default:
572+ label = fmt.Sprintf("verdict %d", v.GetVerdict())
568 }573 }
569 if v.GetStale() {574 if v.GetStale() {
570 label += " (stale)"575 label += " (stale)"
M internal/app/cli_mr_test.go +8 -0
@@ -455,6 +455,14 @@ func TestNoteDetailOutput(t *testing.T) {
455455 assert.NotNil(t, got.Comments[2].EditedAt)
456456 }
457457
458+func TestUnknownVerdictDetailOutput(t *testing.T) {
459+ var out strings.Builder
460+ require.NoError(t, printMRDetail(&out, &ermite.GetMergeRequestResponse{MergeRequest: mrOne, Verdicts: []*ermite.AuthorVerdict{{Author: "future", Verdict: ermite.Verdict(99)}}}, false, false))
461+ assert.Contains(t, out.String(), "future verdict 99")
462+ assert.NotContains(t, out.String(), "changes requested")
463+ assert.NotContains(t, out.String(), "approved")
464+}
465+
458466 func TestMRReviewScopeCompletion(t *testing.T) {
459467 cmd := newTokenCreateCmd(&cliEnv{})
460468 complete, ok := cmd.GetFlagCompletionFunc("scope")
@@ -455,6 +455,14 @@ func TestNoteDetailOutput(t *testing.T) {
455 assert.NotNil(t, got.Comments[2].EditedAt)455 assert.NotNil(t, got.Comments[2].EditedAt)
456 }456 }
457 457
458+func TestUnknownVerdictDetailOutput(t *testing.T) {
459+ var out strings.Builder
460+ require.NoError(t, printMRDetail(&out, &ermite.GetMergeRequestResponse{MergeRequest: mrOne, Verdicts: []*ermite.AuthorVerdict{{Author: "future", Verdict: ermite.Verdict(99)}}}, false, false))
461+ assert.Contains(t, out.String(), "future verdict 99")
462+ assert.NotContains(t, out.String(), "changes requested")
463+ assert.NotContains(t, out.String(), "approved")
464+}
465+
458 func TestMRReviewScopeCompletion(t *testing.T) {466 func TestMRReviewScopeCompletion(t *testing.T) {
459 cmd := newTokenCreateCmd(&cliEnv{})467 cmd := newTokenCreateCmd(&cliEnv{})
460 complete, ok := cmd.GetFlagCompletionFunc("scope")468 complete, ok := cmd.GetFlagCompletionFunc("scope")
M internal/domain/event.go +3 -3
@@ -173,7 +173,7 @@ type CommentAdded struct {
173173 // EventKind implements Event.
174174 func (CommentAdded) EventKind() string { return "mr.comment_added" }
175175
176-// CommentEdited is published when a comment was added to a merge request.
176+// CommentEdited is published when the text of a note was edited.
177177 type CommentEdited struct {
178178 Repo RepoName
179179 Number int64
@@ -186,7 +186,7 @@ type CommentEdited struct {
186186 // EventKind implements Event.
187187 func (CommentEdited) EventKind() string { return "mr.comment_edited" }
188188
189-// CommentDeleted is published when a comment was added to a merge request.
189+// CommentDeleted is published when the text of a note was deleted.
190190 type CommentDeleted struct {
191191 Repo RepoName
192192 Number int64
@@ -199,7 +199,7 @@ type CommentDeleted struct {
199199 // EventKind implements Event.
200200 func (CommentDeleted) EventKind() string { return "mr.comment_deleted" }
201201
202-// CommentResolved is published when a comment was added to a merge request.
202+// CommentResolved is published when a thread was resolved or reopened.
203203 type CommentResolved struct {
204204 Repo RepoName
205205 Number int64
@@ -173,7 +173,7 @@ type CommentAdded struct {
173 // EventKind implements Event.173 // EventKind implements Event.
174 func (CommentAdded) EventKind() string { return "mr.comment_added" }174 func (CommentAdded) EventKind() string { return "mr.comment_added" }
175 175
176-// CommentEdited is published when a comment was added to a merge request.176+// CommentEdited is published when the text of a note was edited.
177 type CommentEdited struct {177 type CommentEdited struct {
178 Repo RepoName178 Repo RepoName
179 Number int64179 Number int64
@@ -186,7 +186,7 @@ type CommentEdited struct {
186 // EventKind implements Event.186 // EventKind implements Event.
187 func (CommentEdited) EventKind() string { return "mr.comment_edited" }187 func (CommentEdited) EventKind() string { return "mr.comment_edited" }
188 188
189-// CommentDeleted is published when a comment was added to a merge request.189+// CommentDeleted is published when the text of a note was deleted.
190 type CommentDeleted struct {190 type CommentDeleted struct {
191 Repo RepoName191 Repo RepoName
192 Number int64192 Number int64
@@ -199,7 +199,7 @@ type CommentDeleted struct {
199 // EventKind implements Event.199 // EventKind implements Event.
200 func (CommentDeleted) EventKind() string { return "mr.comment_deleted" }200 func (CommentDeleted) EventKind() string { return "mr.comment_deleted" }
201 201
202-// CommentResolved is published when a comment was added to a merge request.202+// CommentResolved is published when a thread was resolved or reopened.
203 type CommentResolved struct {203 type CommentResolved struct {
204 Repo RepoName204 Repo RepoName
205 Number int64205 Number int64
M skills/ermite/CLI.md +1 -1
@@ -28,7 +28,7 @@ Presets add up with `--scope` (repeatable or comma-separated):
2828
2929 | Preset | Scopes |
3030 |---|---|
31-| `cli` | every scope (including `mr:review`), for the owner's daily use; a token created before `mr:review` existed lacks it and loses owner rights: recreate it with `--preset cli` |
31+| `cli` | every scope (including `mr:review`), for the owner's daily use; a token created before `mr:review` existed lacks it and loses owner rights: recreate it with `--preset cli` using the root token or from a signed-in owner web session (an old token lacking `mr:review` cannot grant it), then replace the stored CLI secret and revoke the old token |
3232 | `agent` | `repo:write`, `mr:write` |
3333 | `ci` | `repo:read` |
3434
@@ -28,7 +28,7 @@ Presets add up with `--scope` (repeatable or comma-separated):
28 28
29 | Preset | Scopes |29 | Preset | Scopes |
30 |---|---|30 |---|---|
31-| `cli` | every scope (including `mr:review`), for the owner's daily use; a token created before `mr:review` existed lacks it and loses owner rights: recreate it with `--preset cli` |31+| `cli` | every scope (including `mr:review`), for the owner's daily use; a token created before `mr:review` existed lacks it and loses owner rights: recreate it with `--preset cli` using the root token or from a signed-in owner web session (an old token lacking `mr:review` cannot grant it), then replace the stored CLI secret and revoke the old token |
32 | `agent` | `repo:write`, `mr:write` |32 | `agent` | `repo:write`, `mr:write` |
33 | `ci` | `repo:read` |33 | `ci` | `repo:read` |
34 34

Keyboard shortcuts

Single-key shortcuts are on. ctrl k and esc work whatever this says.

ctrl k :
go to a section, branch, tag, file or repository
?
this list
j k
move the row cursor down / up
enter
open the row under the cursor; on Files, a directory opens or closes in place
↑ ↓ ← → home end
in the file tree (focus on a row): previous / next row, close / open a directory or go to its parent / first entry, first / last row. They never open a file
l h
on Files: open a directory or a file / close a directory or go up to its parent, then to the parent page. Elsewhere: into the side panel (on a merge request, its files) / back to the content; there j k move between its controls
g g G
first / last row
/
filter the list; on Files, find a file anywhere in the repository (esc clears, enter opens the best match)
b
switch branch or tag
g s g f g c g b g m g i g r g a
tabs: summary, files, commits, branches & tags, merge requests, issues, releases, actions (when available)
g h
home
w
wide mode: use the whole width of the screen, or not (remembered)
y
copy a permalink pinned to the commit
d u x
diff: split / unified / collapse or expand all
e E
diff: the whole file in view / every file, with the lines the hunks hide
n
merge request: next note in the diff
esc
close a dialog, leave a field

Branches 2

Tags 44

↑↓ moveenter openesc close