detached cff892b

fix(web): keep the MR refresh anchored, draft safe and lean

Probe below sticky file headers for the reader's line, follow the new
page's diff layout, defer every refresh and reload while a comment draft
exists, refresh the loose comments, adopt parsed nodes instead of
reserializing them, and announce updates in a persistent status region.
commit
cff892ba7f9dd173844d1dcb932f9914809ab5b0
author
brice · · 2026-10-20 05:55 UTC
parent
e97c08e
signature
GPG VerifiedCD88F9E564E0102646FB6077A1A07C7C7C3E349D · arch-gpg Verified for the committer email
7 files · +448 -384
M docs/merge-requests.md +3 -4
@@ -128,7 +128,6 @@ The page request still reads only one 25-file window of hunks; the visible
128128 anchor's window is fetched too if needed, and other windows remain lazy.
129129
130130 While a comment is focused or has unsent edits, the refresh waits. A small
131-“branch updated” status offers **refresh now**, which also refreshes in place
132-and keeps unsent forms (including a comment whose old line disappeared).
133-Emptying or cancelling the draft lets the pending refresh proceed. Submitting
134-an ordinary comment navigates to the server's current review as usual.
131+“branch updated — refreshing after your comment” status explains the delay.
132+Sending, cancelling, or reverting the draft and leaving its form lets the
133+pending refresh proceed. Refresh never preserves or discards an unsent draft.
@@ -128,7 +128,6 @@ The page request still reads only one 25-file window of hunks; the visible
128 anchor's window is fetched too if needed, and other windows remain lazy.128 anchor's window is fetched too if needed, and other windows remain lazy.
129 129
130 While a comment is focused or has unsent edits, the refresh waits. A small130 While a comment is focused or has unsent edits, the refresh waits. A small
131-“branch updated” status offers **refresh now**, which also refreshes in place131+“branch updated — refreshing after your comment” status explains the delay.
132-and keeps unsent forms (including a comment whose old line disappeared).132+Sending, cancelling, or reverting the draft and leaving its form lets the
133-Emptying or cancelling the draft lets the pending refresh proceed. Submitting133+pending refresh proceed. Refresh never preserves or discards an unsent draft.
134-an ordinary comment navigates to the server's current review as usual.
M internal/adapters/web/events_test.go +25 -0
@@ -502,3 +502,28 @@ func TestMRPushEventsKeepMergeability(t *testing.T) {
502502 }
503503 }
504504 }
505+
506+func TestMRPushBothBranches(t *testing.T) {
507+ t.Parallel()
508+ for _, refs := range [][]string{{"feature", "main"}, {"main", "feature"}} {
509+ t.Run(strings.Join(refs, "-"), func(t *testing.T) {
510+ svc := mocks.NewMergeRequestService(t)
511+ svc.EXPECT().Mergeability(mock.Anything, mock.Anything, mock.Anything, int64(1)).Return(domain.Mergeability{State: domain.MergeabilityUpToDate}, nil).Once()
512+ l := liveStream{s: &Server{cfg: Config{MergeRequests: svc}}, repo: "demo", view: "mr", n: "1", ref: "feature", target: "main"}
513+ ctx := context.WithValue(t.Context(), signedInKey{}, struct{}{})
514+ fs, err := l.mrPushed(ctx, domain.PushEvent{Updates: []domain.RefUpdate{{Ref: "refs/heads/" + refs[0]}, {Ref: "refs/heads/" + refs[1]}}})
515+ require.NoError(t, err)
516+ require.Len(t, fs, 2)
517+ assert.Equal(t, "mr-head", fs[0].event)
518+ assert.Equal(t, "mr-mergeability", fs[1].event)
519+ })
520+ }
521+}
522+
523+func TestNonMRPushRoutingNeverEmitsMRHead(t *testing.T) {
524+ t.Parallel()
525+ l := liveStream{s: &Server{}, repo: "demo", view: "mrs", n: "1", ref: "feature", target: "main"}
526+ fs, err := l.render(t.Context(), ports.WatchEvent{Event: domain.PushEvent{Repo: repoName(t, "demo"), Updates: []domain.RefUpdate{{Ref: "refs/heads/feature"}}}})
527+ require.NoError(t, err)
528+ assert.Empty(t, fs)
529+}
@@ -502,3 +502,28 @@ func TestMRPushEventsKeepMergeability(t *testing.T) {
502 }502 }
503 }503 }
504 }504 }
505+
506+func TestMRPushBothBranches(t *testing.T) {
507+ t.Parallel()
508+ for _, refs := range [][]string{{"feature", "main"}, {"main", "feature"}} {
509+ t.Run(strings.Join(refs, "-"), func(t *testing.T) {
510+ svc := mocks.NewMergeRequestService(t)
511+ svc.EXPECT().Mergeability(mock.Anything, mock.Anything, mock.Anything, int64(1)).Return(domain.Mergeability{State: domain.MergeabilityUpToDate}, nil).Once()
512+ l := liveStream{s: &Server{cfg: Config{MergeRequests: svc}}, repo: "demo", view: "mr", n: "1", ref: "feature", target: "main"}
513+ ctx := context.WithValue(t.Context(), signedInKey{}, struct{}{})
514+ fs, err := l.mrPushed(ctx, domain.PushEvent{Updates: []domain.RefUpdate{{Ref: "refs/heads/" + refs[0]}, {Ref: "refs/heads/" + refs[1]}}})
515+ require.NoError(t, err)
516+ require.Len(t, fs, 2)
517+ assert.Equal(t, "mr-head", fs[0].event)
518+ assert.Equal(t, "mr-mergeability", fs[1].event)
519+ })
520+ }
521+}
522+
523+func TestNonMRPushRoutingNeverEmitsMRHead(t *testing.T) {
524+ t.Parallel()
525+ l := liveStream{s: &Server{}, repo: "demo", view: "mrs", n: "1", ref: "feature", target: "main"}
526+ fs, err := l.render(t.Context(), ports.WatchEvent{Event: domain.PushEvent{Repo: repoName(t, "demo"), Updates: []domain.RefUpdate{{Ref: "refs/heads/feature"}}}})
527+ require.NoError(t, err)
528+ assert.Empty(t, fs)
529+}
M internal/adapters/web/jstest/mr.test.mjs +54 -9
@@ -304,10 +304,10 @@ test('touch control: lazy links enable toolbar; ordinary taps pass through; rang
304304 // Deterministic timers: no sleeps, and each test restores every mocked global.
305305 function clock() {
306306 const saved = { setTimeout: globalThis.setTimeout, clearTimeout: globalThis.clearTimeout };
307- const tasks = new Map(); let n = 0;
308- globalThis.setTimeout = (fn) => { tasks.set(++n, fn); return n; };
307+ const tasks = new Map(); let n = 0, now = 0;
308+ globalThis.setTimeout = (fn, delay = 0) => { tasks.set(++n, { fn, at: now + delay }); return n; };
309309 globalThis.clearTimeout = (id) => tasks.delete(id);
310- return { async tick() { const batch = [...tasks.values()]; tasks.clear(); for (const fn of batch) await fn(); },
310+ return { async tick(ms = 300) { now += ms; const batch = [...tasks].filter(([, t]) => t.at <= now); for (const [id] of batch) tasks.delete(id); for (const [, t] of batch) await t.fn(); },
311311 size: () => tasks.size, restore() { Object.assign(globalThis, saved); } };
312312 }
313313
@@ -336,7 +336,9 @@ test('head refresh debounces bursts, serializes requests, and reruns after an in
336336 apply: () => applied++, notice() {}, failed: () => assert.fail('unexpected failure') });
337337 try {
338338 r.request(); r.request(); r.request(); assert.equal(c.size(), 1);
339- const first = c.tick(); assert.equal(fetched, 1);
339+ await c.tick(299); assert.equal(fetched, 0);
340+ await c.tick(0); assert.equal(fetched, 0);
341+ const first = c.tick(1); assert.equal(fetched, 1);
340342 r.request(); await c.tick(); assert.equal(fetched, 1, 'one fetch in flight');
341343 resolve('one'); await first; assert.equal(applied, 1); assert.equal(c.size(), 1);
342344 const second = c.tick(); assert.equal(fetched, 2); resolve('two'); await second;
@@ -344,15 +346,16 @@ test('head refresh debounces bursts, serializes requests, and reruns after an in
344346 } finally { c.restore(); }
345347 });
346348
347-test('typing during fetch defers the swap; manual refresh bypasses deferral', async () => {
349+test('typing during fetch defers even manual refresh until the draft ends', async () => {
348350 const c = clock(); let blocked = false, applied = 0, resolve; const notices = [];
349351 const r = window.ermiteMR.refresher({ blocked: () => blocked,
350- fetchPage: () => new Promise((r) => { resolve = r; }), apply: (_page, manual) => { applied++; assert.equal(manual, true); },
352+ fetchPage: () => new Promise((r) => { resolve = r; }), apply: () => { applied++; },
351353 notice: (v) => notices.push(v), failed: () => assert.fail('unexpected failure') });
352354 try {
353355 r.request(); const first = c.tick(); blocked = true; resolve('page'); await first;
354356 assert.equal(applied, 0); assert.deepEqual(notices, [true]);
355- r.request(true); const second = c.tick(); resolve('new page'); await second;
357+ r.request(true); await c.tick(); assert.equal(applied, 0);
358+ blocked = false; r.resume(); const second = c.tick(); resolve('new page'); await second;
356359 assert.equal(applied, 1); assert.equal(notices.at(-1), false);
357360 } finally { c.restore(); }
358361 });
@@ -386,8 +389,8 @@ test('viewport probe finds a stable path/side/line and restores its offset witho
386389 let lineTop = 160, headerTop = -200, found = true; const calls = [];
387390 const header = { getBoundingClientRect: () => rect(headerTop) };
388391 const row = { getBoundingClientRect: () => rect(lineTop), querySelector: () => link };
389- const link = { href: 'https://forge.test/demo/merge-requests/1?on=new:42:a.go#f2', closest: () => row };
390- const file = { id: 'f2', dataset: { file: 'a.go' }, querySelector: (s) => s.includes('summary') ? header : s.includes('href$') ? (assert.ok(s.includes('on=new:42:a.go#f3')), found ? link : null) : null };
392+ const link = { href: 'https://forge.test/demo/merge-requests/1?on=new:42:a.go#f2', closest: () => row, getAttribute: () => link.href };
393+ const file = { getBoundingClientRect: () => rect(headerTop), id: 'f2', dataset: { file: 'a.go' }, querySelector: (s) => s.includes('summary') ? header : s.includes('href$') ? (assert.ok(s.includes('on=new:42:a.go#f3')), found ? link : null) : null };
391394 const hit = { closest: (s) => s === 'tr' ? row : file };
392395 const diffs = { dataset: { diff: 'unified' }, getBoundingClientRect: () => rect(120), contains: () => true };
393396 globalThis.document = {
@@ -408,3 +411,45 @@ test('viewport probe finds a stable path/side/line and restores its offset witho
408411 assert.deepEqual(calls.pop(), ['to', { top: 9200, behavior: 'instant' }]);
409412 } finally { for (const [k,v] of Object.entries(saved)) { if (v === undefined) delete globalThis[k]; else globalThis[k] = v; } }
410413 });
414+
415+test('empty edited default and focused cform controls protect drafts', () => {
416+ const saved = document;
417+ try {
418+ globalThis.document = { querySelectorAll: () => [{ value: '', defaultValue: 'existing' }], activeElement: null };
419+ assert.equal(window.ermiteMR.hasDraft(), true);
420+ document.querySelectorAll = () => [];
421+ document.activeElement = { closest: (s) => s === '.cform' ? {} : null };
422+ assert.equal(window.ermiteMR.hasDraft(), true);
423+ } finally { globalThis.document = saved; }
424+});
425+
426+test('failure during a draft keeps pending and resumes after the draft ends', async () => {
427+ const c = clock(); let blocked = false, reject, applied = 0, count = 0;
428+ const r = window.ermiteMR.refresher({ blocked: () => blocked,
429+ fetchPage: () => ++count === 1 ? new Promise((_, no) => { reject = no; }) : Promise.resolve('page'),
430+ apply: () => applied++, notice() {}, failed: () => assert.fail('draft must defer fallback') });
431+ try {
432+ r.request(); const first = c.tick(); blocked = true; reject(new Error('offline')); await first;
433+ assert.equal(r.pending(), true); assert.equal(applied, 0);
434+ blocked = false; r.resume(); await c.tick(); assert.equal(applied, 1);
435+ } finally { c.restore(); }
436+});
437+
438+test('anchor restoration retains the server encoding of tilde and star paths', () => {
439+ const saved = { document, CSS: globalThis.CSS, scrollBy: globalThis.scrollBy };
440+ try {
441+ globalThis.CSS = { escape: (s) => s };
442+ globalThis.scrollBy = () => {};
443+ for (const path of ['a~.go', 'a*.go']) {
444+ const encoded = path.replace('*', '%2A');
445+ const row = { getBoundingClientRect: () => ({ top: 5 }) };
446+ const file = { id: 'f9', dataset: { file: path }, querySelector: (s) => {
447+ if (s === '.dt.uni') return file;
448+ assert.equal(s, 'a[href$="on=new:12:' + encoded + '#f9"]');
449+ return { closest: () => row };
450+ } };
451+ globalThis.document = { querySelectorAll: () => [file], querySelector: () => ({ dataset: { diff: 'unified' } }) };
452+ window.ermiteMR.restoreAnchor({ file: path, suffix: 'new:12:' + encoded, on: 'new:12:' + path, offset: 5 });
453+ }
454+ } finally { Object.assign(globalThis, saved); }
455+});
@@ -304,10 +304,10 @@ test('touch control: lazy links enable toolbar; ordinary taps pass through; rang
304 // Deterministic timers: no sleeps, and each test restores every mocked global.304 // Deterministic timers: no sleeps, and each test restores every mocked global.
305 function clock() {305 function clock() {
306 const saved = { setTimeout: globalThis.setTimeout, clearTimeout: globalThis.clearTimeout };306 const saved = { setTimeout: globalThis.setTimeout, clearTimeout: globalThis.clearTimeout };
307- const tasks = new Map(); let n = 0;307+ const tasks = new Map(); let n = 0, now = 0;
308- globalThis.setTimeout = (fn) => { tasks.set(++n, fn); return n; };308+ globalThis.setTimeout = (fn, delay = 0) => { tasks.set(++n, { fn, at: now + delay }); return n; };
309 globalThis.clearTimeout = (id) => tasks.delete(id);309 globalThis.clearTimeout = (id) => tasks.delete(id);
310- return { async tick() { const batch = [...tasks.values()]; tasks.clear(); for (const fn of batch) await fn(); },310+ return { async tick(ms = 300) { now += ms; const batch = [...tasks].filter(([, t]) => t.at <= now); for (const [id] of batch) tasks.delete(id); for (const [, t] of batch) await t.fn(); },
311 size: () => tasks.size, restore() { Object.assign(globalThis, saved); } };311 size: () => tasks.size, restore() { Object.assign(globalThis, saved); } };
312 }312 }
313 313
@@ -336,7 +336,9 @@ test('head refresh debounces bursts, serializes requests, and reruns after an in
336 apply: () => applied++, notice() {}, failed: () => assert.fail('unexpected failure') });336 apply: () => applied++, notice() {}, failed: () => assert.fail('unexpected failure') });
337 try {337 try {
338 r.request(); r.request(); r.request(); assert.equal(c.size(), 1);338 r.request(); r.request(); r.request(); assert.equal(c.size(), 1);
339- const first = c.tick(); assert.equal(fetched, 1);339+ await c.tick(299); assert.equal(fetched, 0);
340+ await c.tick(0); assert.equal(fetched, 0);
341+ const first = c.tick(1); assert.equal(fetched, 1);
340 r.request(); await c.tick(); assert.equal(fetched, 1, 'one fetch in flight');342 r.request(); await c.tick(); assert.equal(fetched, 1, 'one fetch in flight');
341 resolve('one'); await first; assert.equal(applied, 1); assert.equal(c.size(), 1);343 resolve('one'); await first; assert.equal(applied, 1); assert.equal(c.size(), 1);
342 const second = c.tick(); assert.equal(fetched, 2); resolve('two'); await second;344 const second = c.tick(); assert.equal(fetched, 2); resolve('two'); await second;
@@ -344,15 +346,16 @@ test('head refresh debounces bursts, serializes requests, and reruns after an in
344 } finally { c.restore(); }346 } finally { c.restore(); }
345 });347 });
346 348
347-test('typing during fetch defers the swap; manual refresh bypasses deferral', async () => {349+test('typing during fetch defers even manual refresh until the draft ends', async () => {
348 const c = clock(); let blocked = false, applied = 0, resolve; const notices = [];350 const c = clock(); let blocked = false, applied = 0, resolve; const notices = [];
349 const r = window.ermiteMR.refresher({ blocked: () => blocked,351 const r = window.ermiteMR.refresher({ blocked: () => blocked,
350- fetchPage: () => new Promise((r) => { resolve = r; }), apply: (_page, manual) => { applied++; assert.equal(manual, true); },352+ fetchPage: () => new Promise((r) => { resolve = r; }), apply: () => { applied++; },
351 notice: (v) => notices.push(v), failed: () => assert.fail('unexpected failure') });353 notice: (v) => notices.push(v), failed: () => assert.fail('unexpected failure') });
352 try {354 try {
353 r.request(); const first = c.tick(); blocked = true; resolve('page'); await first;355 r.request(); const first = c.tick(); blocked = true; resolve('page'); await first;
354 assert.equal(applied, 0); assert.deepEqual(notices, [true]);356 assert.equal(applied, 0); assert.deepEqual(notices, [true]);
355- r.request(true); const second = c.tick(); resolve('new page'); await second;357+ r.request(true); await c.tick(); assert.equal(applied, 0);
358+ blocked = false; r.resume(); const second = c.tick(); resolve('new page'); await second;
356 assert.equal(applied, 1); assert.equal(notices.at(-1), false);359 assert.equal(applied, 1); assert.equal(notices.at(-1), false);
357 } finally { c.restore(); }360 } finally { c.restore(); }
358 });361 });
@@ -386,8 +389,8 @@ test('viewport probe finds a stable path/side/line and restores its offset witho
386 let lineTop = 160, headerTop = -200, found = true; const calls = [];389 let lineTop = 160, headerTop = -200, found = true; const calls = [];
387 const header = { getBoundingClientRect: () => rect(headerTop) };390 const header = { getBoundingClientRect: () => rect(headerTop) };
388 const row = { getBoundingClientRect: () => rect(lineTop), querySelector: () => link };391 const row = { getBoundingClientRect: () => rect(lineTop), querySelector: () => link };
389- const link = { href: 'https://forge.test/demo/merge-requests/1?on=new:42:a.go#f2', closest: () => row };392+ const link = { href: 'https://forge.test/demo/merge-requests/1?on=new:42:a.go#f2', closest: () => row, getAttribute: () => link.href };
390- const file = { id: 'f2', dataset: { file: 'a.go' }, querySelector: (s) => s.includes('summary') ? header : s.includes('href$') ? (assert.ok(s.includes('on=new:42:a.go#f3')), found ? link : null) : null };393+ const file = { getBoundingClientRect: () => rect(headerTop), id: 'f2', dataset: { file: 'a.go' }, querySelector: (s) => s.includes('summary') ? header : s.includes('href$') ? (assert.ok(s.includes('on=new:42:a.go#f3')), found ? link : null) : null };
391 const hit = { closest: (s) => s === 'tr' ? row : file };394 const hit = { closest: (s) => s === 'tr' ? row : file };
392 const diffs = { dataset: { diff: 'unified' }, getBoundingClientRect: () => rect(120), contains: () => true };395 const diffs = { dataset: { diff: 'unified' }, getBoundingClientRect: () => rect(120), contains: () => true };
393 globalThis.document = {396 globalThis.document = {
@@ -408,3 +411,45 @@ test('viewport probe finds a stable path/side/line and restores its offset witho
408 assert.deepEqual(calls.pop(), ['to', { top: 9200, behavior: 'instant' }]);411 assert.deepEqual(calls.pop(), ['to', { top: 9200, behavior: 'instant' }]);
409 } finally { for (const [k,v] of Object.entries(saved)) { if (v === undefined) delete globalThis[k]; else globalThis[k] = v; } }412 } finally { for (const [k,v] of Object.entries(saved)) { if (v === undefined) delete globalThis[k]; else globalThis[k] = v; } }
410 });413 });
414+
415+test('empty edited default and focused cform controls protect drafts', () => {
416+ const saved = document;
417+ try {
418+ globalThis.document = { querySelectorAll: () => [{ value: '', defaultValue: 'existing' }], activeElement: null };
419+ assert.equal(window.ermiteMR.hasDraft(), true);
420+ document.querySelectorAll = () => [];
421+ document.activeElement = { closest: (s) => s === '.cform' ? {} : null };
422+ assert.equal(window.ermiteMR.hasDraft(), true);
423+ } finally { globalThis.document = saved; }
424+});
425+
426+test('failure during a draft keeps pending and resumes after the draft ends', async () => {
427+ const c = clock(); let blocked = false, reject, applied = 0, count = 0;
428+ const r = window.ermiteMR.refresher({ blocked: () => blocked,
429+ fetchPage: () => ++count === 1 ? new Promise((_, no) => { reject = no; }) : Promise.resolve('page'),
430+ apply: () => applied++, notice() {}, failed: () => assert.fail('draft must defer fallback') });
431+ try {
432+ r.request(); const first = c.tick(); blocked = true; reject(new Error('offline')); await first;
433+ assert.equal(r.pending(), true); assert.equal(applied, 0);
434+ blocked = false; r.resume(); await c.tick(); assert.equal(applied, 1);
435+ } finally { c.restore(); }
436+});
437+
438+test('anchor restoration retains the server encoding of tilde and star paths', () => {
439+ const saved = { document, CSS: globalThis.CSS, scrollBy: globalThis.scrollBy };
440+ try {
441+ globalThis.CSS = { escape: (s) => s };
442+ globalThis.scrollBy = () => {};
443+ for (const path of ['a~.go', 'a*.go']) {
444+ const encoded = path.replace('*', '%2A');
445+ const row = { getBoundingClientRect: () => ({ top: 5 }) };
446+ const file = { id: 'f9', dataset: { file: path }, querySelector: (s) => {
447+ if (s === '.dt.uni') return file;
448+ assert.equal(s, 'a[href$="on=new:12:' + encoded + '#f9"]');
449+ return { closest: () => row };
450+ } };
451+ globalThis.document = { querySelectorAll: () => [file], querySelector: () => ({ dataset: { diff: 'unified' } }) };
452+ window.ermiteMR.restoreAnchor({ file: path, suffix: 'new:12:' + encoded, on: 'new:12:' + path, offset: 5 });
453+ }
454+ } finally { Object.assign(globalThis, saved); }
455+});
M internal/adapters/web/mr.templ +4 -0
@@ -13,6 +13,7 @@ templ MRList(l Layout, p MRListPage) {
1313 @Shell(l, mrListRail(p)) {
1414 if p.Live {
1515 @LiveSlot("mr-notice")
16+ <div id="mr-refresh-status" role="status" aria-live="polite"></div>
1617 }
1718 <div class="filter">
1819 <label for="mr-filter" class="sr">filter</label>
@@ -157,6 +158,7 @@ templ MergeRequest(l Layout, p MRPage) {
157158 <p class="d-err" role="alert">{ p.MergeError }</p>
158159 }
159160 @LiveSlot("mr-notice")
161+ <div id="mr-refresh-status" role="status" aria-live="polite"></div>
160162 <div id="mr-range" hidden?={ p.Since == nil && p.SinceNote == "" }>
161163 if p.Since != nil {
162164 <nav class="since" aria-label="Diff range">
@@ -212,6 +214,7 @@ templ MergeRequest(l Layout, p MRPage) {
212214 <p class="note">no changed files.</p>
213215 }
214216 </div>
217+ <div id="mr-comments">
215218 <h2 class="rule-h" id="comments"><span>Comments</span><span class="count">{ itoa(p.NUnresolved) } open / { itoa(p.NComments) }</span></h2>
216219 for _, c := range p.Loose {
217220 @commentView(c, "")
@@ -225,6 +228,7 @@ templ MergeRequest(l Layout, p MRPage) {
225228 if p.GeneralForm != nil {
226229 @commentForm(*p.GeneralForm, "")
227230 }
231+ </div>
228232 }
229233 }
230234
@@ -13,6 +13,7 @@ templ MRList(l Layout, p MRListPage) {
13 @Shell(l, mrListRail(p)) {13 @Shell(l, mrListRail(p)) {
14 if p.Live {14 if p.Live {
15 @LiveSlot("mr-notice")15 @LiveSlot("mr-notice")
16+ <div id="mr-refresh-status" role="status" aria-live="polite"></div>
16 }17 }
17 <div class="filter">18 <div class="filter">
18 <label for="mr-filter" class="sr">filter</label>19 <label for="mr-filter" class="sr">filter</label>
@@ -157,6 +158,7 @@ templ MergeRequest(l Layout, p MRPage) {
157 <p class="d-err" role="alert">{ p.MergeError }</p>158 <p class="d-err" role="alert">{ p.MergeError }</p>
158 }159 }
159 @LiveSlot("mr-notice")160 @LiveSlot("mr-notice")
161+ <div id="mr-refresh-status" role="status" aria-live="polite"></div>
160 <div id="mr-range" hidden?={ p.Since == nil && p.SinceNote == "" }>162 <div id="mr-range" hidden?={ p.Since == nil && p.SinceNote == "" }>
161 if p.Since != nil {163 if p.Since != nil {
162 <nav class="since" aria-label="Diff range">164 <nav class="since" aria-label="Diff range">
@@ -212,6 +214,7 @@ templ MergeRequest(l Layout, p MRPage) {
212 <p class="note">no changed files.</p>214 <p class="note">no changed files.</p>
213 }215 }
214 </div>216 </div>
217+ <div id="mr-comments">
215 <h2 class="rule-h" id="comments"><span>Comments</span><span class="count">{ itoa(p.NUnresolved) } open / { itoa(p.NComments) }</span></h2>218 <h2 class="rule-h" id="comments"><span>Comments</span><span class="count">{ itoa(p.NUnresolved) } open / { itoa(p.NComments) }</span></h2>
216 for _, c := range p.Loose {219 for _, c := range p.Loose {
217 @commentView(c, "")220 @commentView(c, "")
@@ -225,6 +228,7 @@ templ MergeRequest(l Layout, p MRPage) {
225 if p.GeneralForm != nil {228 if p.GeneralForm != nil {
226 @commentForm(*p.GeneralForm, "")229 @commentForm(*p.GeneralForm, "")
227 }230 }
231+ </div>
228 }232 }
229 }233 }
230 234
M internal/adapters/web/mr_templ.go +280 -280
@@ -55,26 +55,30 @@ func MRList(l Layout, p MRListPage) templ.Component {
5555 if templ_7745c5c3_Err != nil {
5656 return templ_7745c5c3_Err
5757 }
58+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 1, " <div id=\"mr-refresh-status\" role=\"status\" aria-live=\"polite\"></div>")
59+ if templ_7745c5c3_Err != nil {
60+ return templ_7745c5c3_Err
61+ }
5862 }
59- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 1, " <div class=\"filter\"><label for=\"mr-filter\" class=\"sr\">filter</label> <input id=\"mr-filter\" type=\"search\" data-filter=\".mrs tbody tr\" placeholder=\"Filter by title, branch, author or state…\" autocomplete=\"off\" hx-on:input=\"ermite.filter(this)\"></div>")
63+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 2, " <div class=\"filter\"><label for=\"mr-filter\" class=\"sr\">filter</label> <input id=\"mr-filter\" type=\"search\" data-filter=\".mrs tbody tr\" placeholder=\"Filter by title, branch, author or state…\" autocomplete=\"off\" hx-on:input=\"ermite.filter(this)\"></div>")
6064 if templ_7745c5c3_Err != nil {
6165 return templ_7745c5c3_Err
6266 }
6367 if p.Newest == "" {
64- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 2, "<h2 class=\"rule-h\"><span>Open</span><span class=\"count\">")
68+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 3, "<h2 class=\"rule-h\"><span>Open</span><span class=\"count\">")
6569 if templ_7745c5c3_Err != nil {
6670 return templ_7745c5c3_Err
6771 }
6872 var templ_7745c5c3_Var3 string
6973 templ_7745c5c3_Var3, templ_7745c5c3_Err = templ.JoinStringErrs(itoa(len(p.Open)))
7074 if templ_7745c5c3_Err != nil {
71- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 29, Col: 78}
75+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 30, Col: 78}
7276 }
7377 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var3))
7478 if templ_7745c5c3_Err != nil {
7579 return templ_7745c5c3_Err
7680 }
77- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 3, "</span></h2>")
81+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 4, "</span></h2>")
7882 if templ_7745c5c3_Err != nil {
7983 return templ_7745c5c3_Err
8084 }
@@ -82,54 +86,54 @@ func MRList(l Layout, p MRListPage) templ.Component {
8286 if templ_7745c5c3_Err != nil {
8387 return templ_7745c5c3_Err
8488 }
85- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 4, " ")
89+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 5, " ")
8690 if templ_7745c5c3_Err != nil {
8791 return templ_7745c5c3_Err
8892 }
8993 if len(p.Open) == 0 {
90- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 5, "<p class=\"lede dim\">no open merge requests.</p>")
94+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 6, "<p class=\"lede dim\">no open merge requests.</p>")
9195 if templ_7745c5c3_Err != nil {
9296 return templ_7745c5c3_Err
9397 }
9498 }
95- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 6, " ")
99+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 7, " ")
96100 if templ_7745c5c3_Err != nil {
97101 return templ_7745c5c3_Err
98102 }
99103 if p.OpenNote != "" {
100- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 7, "<p class=\"note\">")
104+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 8, "<p class=\"note\">")
101105 if templ_7745c5c3_Err != nil {
102106 return templ_7745c5c3_Err
103107 }
104108 var templ_7745c5c3_Var4 string
105109 templ_7745c5c3_Var4, templ_7745c5c3_Err = templ.JoinStringErrs(p.OpenNote)
106110 if templ_7745c5c3_Err != nil {
107- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 35, Col: 32}
111+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 36, Col: 32}
108112 }
109113 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var4))
110114 if templ_7745c5c3_Err != nil {
111115 return templ_7745c5c3_Err
112116 }
113- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 8, "</p>")
117+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 9, "</p>")
114118 if templ_7745c5c3_Err != nil {
115119 return templ_7745c5c3_Err
116120 }
117121 }
118122 }
119- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 9, " <h2 class=\"rule-h\"><span>Merged and closed</span><span class=\"count\">")
123+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 10, " <h2 class=\"rule-h\"><span>Merged and closed</span><span class=\"count\">")
120124 if templ_7745c5c3_Err != nil {
121125 return templ_7745c5c3_Err
122126 }
123127 var templ_7745c5c3_Var5 string
124128 templ_7745c5c3_Var5, templ_7745c5c3_Err = templ.JoinStringErrs(itoa(len(p.Done)))
125129 if templ_7745c5c3_Err != nil {
126- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 38, Col: 90}
130+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 39, Col: 90}
127131 }
128132 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var5))
129133 if templ_7745c5c3_Err != nil {
130134 return templ_7745c5c3_Err
131135 }
132- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 10, "</span></h2>")
136+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 11, "</span></h2>")
133137 if templ_7745c5c3_Err != nil {
134138 return templ_7745c5c3_Err
135139 }
@@ -137,74 +141,74 @@ func MRList(l Layout, p MRListPage) templ.Component {
137141 if templ_7745c5c3_Err != nil {
138142 return templ_7745c5c3_Err
139143 }
140- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 11, " ")
144+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 12, " ")
141145 if templ_7745c5c3_Err != nil {
142146 return templ_7745c5c3_Err
143147 }
144148 if len(p.Done) == 0 {
145- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 12, "<p class=\"lede dim\">nothing merged or closed yet.</p>")
149+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 13, "<p class=\"lede dim\">nothing merged or closed yet.</p>")
146150 if templ_7745c5c3_Err != nil {
147151 return templ_7745c5c3_Err
148152 }
149153 }
150- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 13, " ")
154+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 14, " ")
151155 if templ_7745c5c3_Err != nil {
152156 return templ_7745c5c3_Err
153157 }
154158 if p.Older != "" || p.Newest != "" {
155- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 14, "<nav class=\"pager\" aria-label=\"Pages\">")
159+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 15, "<nav class=\"pager\" aria-label=\"Pages\">")
156160 if templ_7745c5c3_Err != nil {
157161 return templ_7745c5c3_Err
158162 }
159163 if p.Newest != "" {
160- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 15, "<a class=\"btn\" href=\"")
164+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 16, "<a class=\"btn\" href=\"")
161165 if templ_7745c5c3_Err != nil {
162166 return templ_7745c5c3_Err
163167 }
164168 var templ_7745c5c3_Var6 templ.SafeURL
165169 templ_7745c5c3_Var6, templ_7745c5c3_Err = templ.JoinURLErrs(templ.SafeURL(p.Newest))
166170 if templ_7745c5c3_Err != nil {
167- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 46, Col: 50}
171+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 47, Col: 50}
168172 }
169173 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var6))
170174 if templ_7745c5c3_Err != nil {
171175 return templ_7745c5c3_Err
172176 }
173- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 16, "\">← Newest</a> ")
177+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 17, "\">← Newest</a> ")
174178 if templ_7745c5c3_Err != nil {
175179 return templ_7745c5c3_Err
176180 }
177181 } else {
178- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 17, "<span class=\"btn\" aria-disabled=\"true\">← Newest</span> ")
182+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 18, "<span class=\"btn\" aria-disabled=\"true\">← Newest</span> ")
179183 if templ_7745c5c3_Err != nil {
180184 return templ_7745c5c3_Err
181185 }
182186 }
183187 if p.Older != "" {
184- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 18, "<a class=\"btn\" href=\"")
188+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 19, "<a class=\"btn\" href=\"")
185189 if templ_7745c5c3_Err != nil {
186190 return templ_7745c5c3_Err
187191 }
188192 var templ_7745c5c3_Var7 templ.SafeURL
189193 templ_7745c5c3_Var7, templ_7745c5c3_Err = templ.JoinURLErrs(templ.SafeURL(p.Older))
190194 if templ_7745c5c3_Err != nil {
191- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 51, Col: 49}
195+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 52, Col: 49}
192196 }
193197 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var7))
194198 if templ_7745c5c3_Err != nil {
195199 return templ_7745c5c3_Err
196200 }
197- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 19, "\" rel=\"next\">Older →</a>")
201+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 20, "\" rel=\"next\">Older →</a>")
198202 if templ_7745c5c3_Err != nil {
199203 return templ_7745c5c3_Err
200204 }
201205 } else {
202- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 20, "<span class=\"btn\" aria-disabled=\"true\">Older →</span>")
206+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 21, "<span class=\"btn\" aria-disabled=\"true\">Older →</span>")
203207 if templ_7745c5c3_Err != nil {
204208 return templ_7745c5c3_Err
205209 }
206210 }
207- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 21, "</nav>")
211+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 22, "</nav>")
208212 if templ_7745c5c3_Err != nil {
209213 return templ_7745c5c3_Err
210214 }
@@ -241,180 +245,180 @@ func mrRows(rows []MRRow, label string) templ.Component {
241245 }
242246 ctx = templ.ClearChildren(ctx)
243247 if len(rows) > 0 {
244- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 22, "<table class=\"list mrs\" aria-label=\"")
248+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 23, "<table class=\"list mrs\" aria-label=\"")
245249 if templ_7745c5c3_Err != nil {
246250 return templ_7745c5c3_Err
247251 }
248252 var templ_7745c5c3_Var9 string
249253 templ_7745c5c3_Var9, templ_7745c5c3_Err = templ.ResolveAttributeValue(label)
250254 if templ_7745c5c3_Err != nil {
251- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 62, Col: 44}
255+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 63, Col: 44}
252256 }
253257 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ_7745c5c3_Var9)
254258 if templ_7745c5c3_Err != nil {
255259 return templ_7745c5c3_Err
256260 }
257- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 23, "\"><tbody data-rows>")
261+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 24, "\"><tbody data-rows>")
258262 if templ_7745c5c3_Err != nil {
259263 return templ_7745c5c3_Err
260264 }
261265 for _, m := range rows {
262- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 24, "<tr")
266+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 25, "<tr")
263267 if templ_7745c5c3_Err != nil {
264268 return templ_7745c5c3_Err
265269 }
266270 if m.Cursor {
267- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 25, " data-cursor")
271+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 26, " data-cursor")
268272 if templ_7745c5c3_Err != nil {
269273 return templ_7745c5c3_Err
270274 }
271275 }
272- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 26, " data-state=\"")
276+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 27, " data-state=\"")
273277 if templ_7745c5c3_Err != nil {
274278 return templ_7745c5c3_Err
275279 }
276280 var templ_7745c5c3_Var10 string
277281 templ_7745c5c3_Var10, templ_7745c5c3_Err = templ.ResolveAttributeValue(m.State)
278282 if templ_7745c5c3_Err != nil {
279- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 65, Col: 55}
283+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 66, Col: 55}
280284 }
281285 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ_7745c5c3_Var10)
282286 if templ_7745c5c3_Err != nil {
283287 return templ_7745c5c3_Err
284288 }
285- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 27, "\"><td class=\"c-n mute\">")
289+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 28, "\"><td class=\"c-n mute\">")
286290 if templ_7745c5c3_Err != nil {
287291 return templ_7745c5c3_Err
288292 }
289293 var templ_7745c5c3_Var11 string
290294 templ_7745c5c3_Var11, templ_7745c5c3_Err = templ.JoinStringErrs(m.Number)
291295 if templ_7745c5c3_Err != nil {
292- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 66, Col: 37}
296+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 67, Col: 37}
293297 }
294298 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var11))
295299 if templ_7745c5c3_Err != nil {
296300 return templ_7745c5c3_Err
297301 }
298- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 28, "</td><td class=\"c-state\">")
302+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 29, "</td><td class=\"c-state\">")
299303 if templ_7745c5c3_Err != nil {
300304 return templ_7745c5c3_Err
301305 }
302306 var templ_7745c5c3_Var12 string
303307 templ_7745c5c3_Var12, templ_7745c5c3_Err = templ.JoinStringErrs(m.State)
304308 if templ_7745c5c3_Err != nil {
305- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 67, Col: 35}
309+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 68, Col: 35}
306310 }
307311 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var12))
308312 if templ_7745c5c3_Err != nil {
309313 return templ_7745c5c3_Err
310314 }
311- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 29, "</td><td class=\"c-subject\"><a href=\"")
315+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 30, "</td><td class=\"c-subject\"><a href=\"")
312316 if templ_7745c5c3_Err != nil {
313317 return templ_7745c5c3_Err
314318 }
315319 var templ_7745c5c3_Var13 templ.SafeURL
316320 templ_7745c5c3_Var13, templ_7745c5c3_Err = templ.JoinURLErrs(templ.SafeURL(m.Href))
317321 if templ_7745c5c3_Err != nil {
318- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 68, Col: 59}
322+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 69, Col: 59}
319323 }
320324 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var13))
321325 if templ_7745c5c3_Err != nil {
322326 return templ_7745c5c3_Err
323327 }
324- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 30, "\">")
328+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 31, "\">")
325329 if templ_7745c5c3_Err != nil {
326330 return templ_7745c5c3_Err
327331 }
328332 var templ_7745c5c3_Var14 string
329333 templ_7745c5c3_Var14, templ_7745c5c3_Err = templ.JoinStringErrs(m.Title)
330334 if templ_7745c5c3_Err != nil {
331- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 68, Col: 71}
335+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 69, Col: 71}
332336 }
333337 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var14))
334338 if templ_7745c5c3_Err != nil {
335339 return templ_7745c5c3_Err
336340 }
337- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 31, "</a> <span class=\"mute\">")
341+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 32, "</a> <span class=\"mute\">")
338342 if templ_7745c5c3_Err != nil {
339343 return templ_7745c5c3_Err
340344 }
341345 var templ_7745c5c3_Var15 string
342346 templ_7745c5c3_Var15, templ_7745c5c3_Err = templ.JoinStringErrs(m.Branches)
343347 if templ_7745c5c3_Err != nil {
344- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 68, Col: 109}
348+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 69, Col: 109}
345349 }
346350 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var15))
347351 if templ_7745c5c3_Err != nil {
348352 return templ_7745c5c3_Err
349353 }
350- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 32, "</span></td><td class=\"c-who dim\">")
354+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 33, "</span></td><td class=\"c-who dim\">")
351355 if templ_7745c5c3_Err != nil {
352356 return templ_7745c5c3_Err
353357 }
354358 var templ_7745c5c3_Var16 string
355359 templ_7745c5c3_Var16, templ_7745c5c3_Err = templ.JoinStringErrs(m.Author)
356360 if templ_7745c5c3_Err != nil {
357- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 69, Col: 38}
361+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 70, Col: 38}
358362 }
359363 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var16))
360364 if templ_7745c5c3_Err != nil {
361365 return templ_7745c5c3_Err
362366 }
363- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 33, "</td><td class=\"c-when nowrap dim\">")
367+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 34, "</td><td class=\"c-when nowrap dim\">")
364368 if templ_7745c5c3_Err != nil {
365369 return templ_7745c5c3_Err
366370 }
367371 if m.WhenAt != "" {
368- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 34, "<time datetime=\"")
372+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 35, "<time datetime=\"")
369373 if templ_7745c5c3_Err != nil {
370374 return templ_7745c5c3_Err
371375 }
372376 var templ_7745c5c3_Var17 string
373377 templ_7745c5c3_Var17, templ_7745c5c3_Err = templ.ResolveAttributeValue(m.WhenAt)
374378 if templ_7745c5c3_Err != nil {
375- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 72, Col: 33}
379+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 73, Col: 33}
376380 }
377381 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ_7745c5c3_Var17)
378382 if templ_7745c5c3_Err != nil {
379383 return templ_7745c5c3_Err
380384 }
381- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 35, "\" title=\"")
385+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 36, "\" title=\"")
382386 if templ_7745c5c3_Err != nil {
383387 return templ_7745c5c3_Err
384388 }
385389 var templ_7745c5c3_Var18 string
386390 templ_7745c5c3_Var18, templ_7745c5c3_Err = templ.ResolveAttributeValue(m.WhenAt)
387391 if templ_7745c5c3_Err != nil {
388- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 72, Col: 52}
392+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 73, Col: 52}
389393 }
390394 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ_7745c5c3_Var18)
391395 if templ_7745c5c3_Err != nil {
392396 return templ_7745c5c3_Err
393397 }
394- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 36, "\">")
398+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 37, "\">")
395399 if templ_7745c5c3_Err != nil {
396400 return templ_7745c5c3_Err
397401 }
398402 var templ_7745c5c3_Var19 string
399403 templ_7745c5c3_Var19, templ_7745c5c3_Err = templ.JoinStringErrs(m.When)
400404 if templ_7745c5c3_Err != nil {
401- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 72, Col: 63}
405+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 73, Col: 63}
402406 }
403407 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var19))
404408 if templ_7745c5c3_Err != nil {
405409 return templ_7745c5c3_Err
406410 }
407- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 37, "</time>")
411+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 38, "</time>")
408412 if templ_7745c5c3_Err != nil {
409413 return templ_7745c5c3_Err
410414 }
411415 }
412- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 38, "</td></tr>")
416+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 39, "</td></tr>")
413417 if templ_7745c5c3_Err != nil {
414418 return templ_7745c5c3_Err
415419 }
416420 }
417- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 39, "</tbody></table>")
421+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 40, "</tbody></table>")
418422 if templ_7745c5c3_Err != nil {
419423 return templ_7745c5c3_Err
420424 }
@@ -444,66 +448,66 @@ func mrListRail(p MRListPage) templ.Component {
444448 templ_7745c5c3_Var20 = templ.NopComponent
445449 }
446450 ctx = templ.ClearChildren(ctx)
447- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 40, "<section aria-labelledby=\"r-states\"><h2 id=\"r-states\">States</h2><dl class=\"kv\"><dt>open</dt><dd>awaits review</dd><dt>merged</dt><dd>the target took the branch</dd><dt>closed</dt><dd>refused, branch kept</dd></dl></section><section aria-labelledby=\"r-new\"><h2 id=\"r-new\">Open one</h2>")
451+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 41, "<section aria-labelledby=\"r-states\"><h2 id=\"r-states\">States</h2><dl class=\"kv\"><dt>open</dt><dd>awaits review</dd><dt>merged</dt><dd>the target took the branch</dd><dt>closed</dt><dd>refused, branch kept</dd></dl></section><section aria-labelledby=\"r-new\"><h2 id=\"r-new\">Open one</h2>")
448452 if templ_7745c5c3_Err != nil {
449453 return templ_7745c5c3_Err
450454 }
451455 if len(p.Branches) > 0 {
452- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 41, "<p class=\"dim\">compare a branch with ")
456+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 42, "<p class=\"dim\">compare a branch with ")
453457 if templ_7745c5c3_Err != nil {
454458 return templ_7745c5c3_Err
455459 }
456460 var templ_7745c5c3_Var21 string
457461 templ_7745c5c3_Var21, templ_7745c5c3_Err = templ.JoinStringErrs(p.Default)
458462 if templ_7745c5c3_Err != nil {
459- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 97, Col: 51}
463+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 98, Col: 51}
460464 }
461465 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var21))
462466 if templ_7745c5c3_Err != nil {
463467 return templ_7745c5c3_Err
464468 }
465- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 42, ":</p><nav class=\"outline\" aria-label=\"Branches\">")
469+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 43, ":</p><nav class=\"outline\" aria-label=\"Branches\">")
466470 if templ_7745c5c3_Err != nil {
467471 return templ_7745c5c3_Err
468472 }
469473 for _, b := range p.Branches {
470- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 43, "<a href=\"")
474+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 44, "<a href=\"")
471475 if templ_7745c5c3_Err != nil {
472476 return templ_7745c5c3_Err
473477 }
474478 var templ_7745c5c3_Var22 templ.SafeURL
475479 templ_7745c5c3_Var22, templ_7745c5c3_Err = templ.JoinURLErrs(templ.SafeURL(b.Href))
476480 if templ_7745c5c3_Err != nil {
477- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 100, Col: 36}
481+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 101, Col: 36}
478482 }
479483 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var22))
480484 if templ_7745c5c3_Err != nil {
481485 return templ_7745c5c3_Err
482486 }
483- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 44, "\">")
487+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 45, "\">")
484488 if templ_7745c5c3_Err != nil {
485489 return templ_7745c5c3_Err
486490 }
487491 var templ_7745c5c3_Var23 string
488492 templ_7745c5c3_Var23, templ_7745c5c3_Err = templ.JoinStringErrs(b.Name)
489493 if templ_7745c5c3_Err != nil {
490- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 100, Col: 47}
494+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 101, Col: 47}
491495 }
492496 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var23))
493497 if templ_7745c5c3_Err != nil {
494498 return templ_7745c5c3_Err
495499 }
496- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 45, "</a>")
500+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 46, "</a>")
497501 if templ_7745c5c3_Err != nil {
498502 return templ_7745c5c3_Err
499503 }
500504 }
501- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 46, "</nav>")
505+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 47, "</nav>")
502506 if templ_7745c5c3_Err != nil {
503507 return templ_7745c5c3_Err
504508 }
505509 } else {
506- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 47, "<p class=\"dim\">there is no other branch to merge yet.</p>")
510+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 48, "<p class=\"dim\">there is no other branch to merge yet.</p>")
507511 if templ_7745c5c3_Err != nil {
508512 return templ_7745c5c3_Err
509513 }
@@ -512,7 +516,7 @@ func mrListRail(p MRListPage) templ.Component {
512516 if templ_7745c5c3_Err != nil {
513517 return templ_7745c5c3_Err
514518 }
515- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 48, "</section>")
519+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 49, "</section>")
516520 if templ_7745c5c3_Err != nil {
517521 return templ_7745c5c3_Err
518522 }
@@ -557,59 +561,59 @@ func MergeRequest(l Layout, p MRPage) templ.Component {
557561 }()
558562 }
559563 ctx = templ.InitializeContext(ctx)
560- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 49, "<section class=\"mr-card\"><header class=\"show mr-h\"><h1><span class=\"mute\">")
564+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 50, "<section class=\"mr-card\"><header class=\"show mr-h\"><h1><span class=\"mute\">")
561565 if templ_7745c5c3_Err != nil {
562566 return templ_7745c5c3_Err
563567 }
564568 var templ_7745c5c3_Var26 string
565569 templ_7745c5c3_Var26, templ_7745c5c3_Err = templ.JoinStringErrs(p.Number)
566570 if templ_7745c5c3_Err != nil {
567- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 118, Col: 37}
571+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 119, Col: 37}
568572 }
569573 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var26))
570574 if templ_7745c5c3_Err != nil {
571575 return templ_7745c5c3_Err
572576 }
573- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 50, "</span> ")
577+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 51, "</span> ")
574578 if templ_7745c5c3_Err != nil {
575579 return templ_7745c5c3_Err
576580 }
577581 var templ_7745c5c3_Var27 string
578582 templ_7745c5c3_Var27, templ_7745c5c3_Err = templ.JoinStringErrs(p.Title)
579583 if templ_7745c5c3_Err != nil {
580- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 118, Col: 56}
584+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 119, Col: 56}
581585 }
582586 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var27))
583587 if templ_7745c5c3_Err != nil {
584588 return templ_7745c5c3_Err
585589 }
586- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 51, "</h1><dl class=\"kv show-kv\"><dt>state</dt><dd class=\"mr-state\" data-state=\"")
590+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 52, "</h1><dl class=\"kv show-kv\"><dt>state</dt><dd class=\"mr-state\" data-state=\"")
587591 if templ_7745c5c3_Err != nil {
588592 return templ_7745c5c3_Err
589593 }
590594 var templ_7745c5c3_Var28 string
591595 templ_7745c5c3_Var28, templ_7745c5c3_Err = templ.ResolveAttributeValue(p.State)
592596 if templ_7745c5c3_Err != nil {
593- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 121, Col: 46}
597+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 122, Col: 46}
594598 }
595599 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ_7745c5c3_Var28)
596600 if templ_7745c5c3_Err != nil {
597601 return templ_7745c5c3_Err
598602 }
599- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 52, "\">")
603+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 53, "\">")
600604 if templ_7745c5c3_Err != nil {
601605 return templ_7745c5c3_Err
602606 }
603607 var templ_7745c5c3_Var29 string
604608 templ_7745c5c3_Var29, templ_7745c5c3_Err = templ.JoinStringErrs(p.State)
605609 if templ_7745c5c3_Err != nil {
606- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 122, Col: 15}
610+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 123, Col: 15}
607611 }
608612 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var29))
609613 if templ_7745c5c3_Err != nil {
610614 return templ_7745c5c3_Err
611615 }
612- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 53, " ")
616+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 54, " ")
613617 if templ_7745c5c3_Err != nil {
614618 return templ_7745c5c3_Err
615619 }
@@ -617,53 +621,53 @@ func MergeRequest(l Layout, p MRPage) templ.Component {
617621 var templ_7745c5c3_Var30 string
618622 templ_7745c5c3_Var30, templ_7745c5c3_Err = templ.JoinStringErrs(" · ")
619623 if templ_7745c5c3_Err != nil {
620- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 124, Col: 15}
624+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 125, Col: 15}
621625 }
622626 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var30))
623627 if templ_7745c5c3_Err != nil {
624628 return templ_7745c5c3_Err
625629 }
626- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 54, "<a href=\"")
630+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 55, "<a href=\"")
627631 if templ_7745c5c3_Err != nil {
628632 return templ_7745c5c3_Err
629633 }
630634 var templ_7745c5c3_Var31 templ.SafeURL
631635 templ_7745c5c3_Var31, templ_7745c5c3_Err = templ.JoinURLErrs(templ.SafeURL(p.MergedHref))
632636 if templ_7745c5c3_Err != nil {
633- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 124, Col: 54}
637+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 125, Col: 54}
634638 }
635639 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var31))
636640 if templ_7745c5c3_Err != nil {
637641 return templ_7745c5c3_Err
638642 }
639- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 55, "\">")
643+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 56, "\">")
640644 if templ_7745c5c3_Err != nil {
641645 return templ_7745c5c3_Err
642646 }
643647 var templ_7745c5c3_Var32 string
644648 templ_7745c5c3_Var32, templ_7745c5c3_Err = templ.JoinStringErrs(p.MergedShort)
645649 if templ_7745c5c3_Err != nil {
646- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 124, Col: 72}
650+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 125, Col: 72}
647651 }
648652 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var32))
649653 if templ_7745c5c3_Err != nil {
650654 return templ_7745c5c3_Err
651655 }
652- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 56, "</a>")
656+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 57, "</a>")
653657 if templ_7745c5c3_Err != nil {
654658 return templ_7745c5c3_Err
655659 }
656660 var templ_7745c5c3_Var33 string
657661 templ_7745c5c3_Var33, templ_7745c5c3_Err = templ.JoinStringErrs(" · " + p.MergeMode)
658662 if templ_7745c5c3_Err != nil {
659- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 124, Col: 100}
663+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 125, Col: 100}
660664 }
661665 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var33))
662666 if templ_7745c5c3_Err != nil {
663667 return templ_7745c5c3_Err
664668 }
665669 }
666- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 57, "</dd><dt>branch</dt><dd>")
670+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 58, "</dd><dt>branch</dt><dd>")
667671 if templ_7745c5c3_Err != nil {
668672 return templ_7745c5c3_Err
669673 }
@@ -674,7 +678,7 @@ func MergeRequest(l Layout, p MRPage) templ.Component {
674678 var templ_7745c5c3_Var34 string
675679 templ_7745c5c3_Var34, templ_7745c5c3_Err = templ.JoinStringErrs(" → ")
676680 if templ_7745c5c3_Err != nil {
677- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 130, Col: 15}
681+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 131, Col: 15}
678682 }
679683 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var34))
680684 if templ_7745c5c3_Err != nil {
@@ -684,20 +688,20 @@ func MergeRequest(l Layout, p MRPage) templ.Component {
684688 if templ_7745c5c3_Err != nil {
685689 return templ_7745c5c3_Err
686690 }
687- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 58, "</dd><dt>opened</dt><dd>")
691+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 59, "</dd><dt>opened</dt><dd>")
688692 if templ_7745c5c3_Err != nil {
689693 return templ_7745c5c3_Err
690694 }
691695 var templ_7745c5c3_Var35 string
692696 templ_7745c5c3_Var35, templ_7745c5c3_Err = templ.JoinStringErrs(p.Opened.Name)
693697 if templ_7745c5c3_Err != nil {
694- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 135, Col: 21}
698+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 136, Col: 21}
695699 }
696700 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var35))
697701 if templ_7745c5c3_Err != nil {
698702 return templ_7745c5c3_Err
699703 }
700- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 59, " ")
704+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 60, " ")
701705 if templ_7745c5c3_Err != nil {
702706 return templ_7745c5c3_Err
703707 }
@@ -705,98 +709,98 @@ func MergeRequest(l Layout, p MRPage) templ.Component {
705709 var templ_7745c5c3_Var36 string
706710 templ_7745c5c3_Var36, templ_7745c5c3_Err = templ.JoinStringErrs(" · ")
707711 if templ_7745c5c3_Err != nil {
708- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 137, Col: 15}
712+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 138, Col: 15}
709713 }
710714 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var36))
711715 if templ_7745c5c3_Err != nil {
712716 return templ_7745c5c3_Err
713717 }
714- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 60, "<time datetime=\"")
718+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 61, "<time datetime=\"")
715719 if templ_7745c5c3_Err != nil {
716720 return templ_7745c5c3_Err
717721 }
718722 var templ_7745c5c3_Var37 string
719723 templ_7745c5c3_Var37, templ_7745c5c3_Err = templ.ResolveAttributeValue(p.Opened.WhenAt)
720724 if templ_7745c5c3_Err != nil {
721- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 137, Col: 49}
725+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 138, Col: 49}
722726 }
723727 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ_7745c5c3_Var37)
724728 if templ_7745c5c3_Err != nil {
725729 return templ_7745c5c3_Err
726730 }
727- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 61, "\" title=\"")
731+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 62, "\" title=\"")
728732 if templ_7745c5c3_Err != nil {
729733 return templ_7745c5c3_Err
730734 }
731735 var templ_7745c5c3_Var38 string
732736 templ_7745c5c3_Var38, templ_7745c5c3_Err = templ.ResolveAttributeValue(p.Opened.Abs)
733737 if templ_7745c5c3_Err != nil {
734- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 137, Col: 72}
738+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 138, Col: 72}
735739 }
736740 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ_7745c5c3_Var38)
737741 if templ_7745c5c3_Err != nil {
738742 return templ_7745c5c3_Err
739743 }
740- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 62, "\">")
744+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 63, "\">")
741745 if templ_7745c5c3_Err != nil {
742746 return templ_7745c5c3_Err
743747 }
744748 var templ_7745c5c3_Var39 string
745749 templ_7745c5c3_Var39, templ_7745c5c3_Err = templ.JoinStringErrs(p.Opened.When)
746750 if templ_7745c5c3_Err != nil {
747- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 137, Col: 90}
751+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 138, Col: 90}
748752 }
749753 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var39))
750754 if templ_7745c5c3_Err != nil {
751755 return templ_7745c5c3_Err
752756 }
753- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 63, "</time>")
757+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 64, "</time>")
754758 if templ_7745c5c3_Err != nil {
755759 return templ_7745c5c3_Err
756760 }
757761 }
758- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 64, "</dd>")
762+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 65, "</dd>")
759763 if templ_7745c5c3_Err != nil {
760764 return templ_7745c5c3_Err
761765 }
762766 if p.UpdatedAt != "" {
763- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 65, "<dt>updated</dt><dd><time datetime=\"")
767+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 66, "<dt>updated</dt><dd><time datetime=\"")
764768 if templ_7745c5c3_Err != nil {
765769 return templ_7745c5c3_Err
766770 }
767771 var templ_7745c5c3_Var40 string
768772 templ_7745c5c3_Var40, templ_7745c5c3_Err = templ.ResolveAttributeValue(p.UpdatedAt)
769773 if templ_7745c5c3_Err != nil {
770- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 142, Col: 38}
774+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 143, Col: 38}
771775 }
772776 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ_7745c5c3_Var40)
773777 if templ_7745c5c3_Err != nil {
774778 return templ_7745c5c3_Err
775779 }
776- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 66, "\">")
780+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 67, "\">")
777781 if templ_7745c5c3_Err != nil {
778782 return templ_7745c5c3_Err
779783 }
780784 var templ_7745c5c3_Var41 string
781785 templ_7745c5c3_Var41, templ_7745c5c3_Err = templ.JoinStringErrs(p.Updated)
782786 if templ_7745c5c3_Err != nil {
783- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 142, Col: 52}
787+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 143, Col: 52}
784788 }
785789 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var41))
786790 if templ_7745c5c3_Err != nil {
787791 return templ_7745c5c3_Err
788792 }
789- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 67, "</time></dd>")
793+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 68, "</time></dd>")
790794 if templ_7745c5c3_Err != nil {
791795 return templ_7745c5c3_Err
792796 }
793797 }
794- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 68, "</dl></header>")
798+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 69, "</dl></header>")
795799 if templ_7745c5c3_Err != nil {
796800 return templ_7745c5c3_Err
797801 }
798802 if p.Desc != "" {
799- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 69, "<article class=\"mr-desc prose\" aria-label=\"description\" hx-ignore>")
803+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 70, "<article class=\"mr-desc prose\" aria-label=\"description\" hx-ignore>")
800804 if templ_7745c5c3_Err != nil {
801805 return templ_7745c5c3_Err
802806 }
@@ -804,7 +808,7 @@ func MergeRequest(l Layout, p MRPage) templ.Component {
804808 if templ_7745c5c3_Err != nil {
805809 return templ_7745c5c3_Err
806810 }
807- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 70, "</article>")
811+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 71, "</article>")
808812 if templ_7745c5c3_Err != nil {
809813 return templ_7745c5c3_Err
810814 }
@@ -813,53 +817,53 @@ func MergeRequest(l Layout, p MRPage) templ.Component {
813817 if templ_7745c5c3_Err != nil {
814818 return templ_7745c5c3_Err
815819 }
816- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 71, "</section>")
820+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 72, "</section>")
817821 if templ_7745c5c3_Err != nil {
818822 return templ_7745c5c3_Err
819823 }
820824 if p.Deleting != "" {
821- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 72, "<p class=\"note\" role=\"status\">merged. the branch ")
825+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 73, "<p class=\"note\" role=\"status\">merged. the branch ")
822826 if templ_7745c5c3_Err != nil {
823827 return templ_7745c5c3_Err
824828 }
825829 var templ_7745c5c3_Var42 string
826830 templ_7745c5c3_Var42, templ_7745c5c3_Err = templ.JoinStringErrs(p.Deleting)
827831 if templ_7745c5c3_Err != nil {
828- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 154, Col: 64}
832+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 155, Col: 64}
829833 }
830834 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var42))
831835 if templ_7745c5c3_Err != nil {
832836 return templ_7745c5c3_Err
833837 }
834- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 73, " is being deleted.</p>")
838+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 74, " is being deleted.</p>")
835839 if templ_7745c5c3_Err != nil {
836840 return templ_7745c5c3_Err
837841 }
838842 }
839- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 74, " ")
843+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 75, " ")
840844 if templ_7745c5c3_Err != nil {
841845 return templ_7745c5c3_Err
842846 }
843847 if p.MergeError != "" {
844- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 75, "<p class=\"d-err\" role=\"alert\">")
848+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 76, "<p class=\"d-err\" role=\"alert\">")
845849 if templ_7745c5c3_Err != nil {
846850 return templ_7745c5c3_Err
847851 }
848852 var templ_7745c5c3_Var43 string
849853 templ_7745c5c3_Var43, templ_7745c5c3_Err = templ.JoinStringErrs(p.MergeError)
850854 if templ_7745c5c3_Err != nil {
851- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 157, Col: 47}
855+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 158, Col: 47}
852856 }
853857 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var43))
854858 if templ_7745c5c3_Err != nil {
855859 return templ_7745c5c3_Err
856860 }
857- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 76, "</p>")
861+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 77, "</p>")
858862 if templ_7745c5c3_Err != nil {
859863 return templ_7745c5c3_Err
860864 }
861865 }
862- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 77, " ")
866+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 78, " ")
863867 if templ_7745c5c3_Err != nil {
864868 return templ_7745c5c3_Err
865869 }
@@ -867,131 +871,131 @@ func MergeRequest(l Layout, p MRPage) templ.Component {
867871 if templ_7745c5c3_Err != nil {
868872 return templ_7745c5c3_Err
869873 }
870- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 78, " <div id=\"mr-range\"")
874+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 79, " <div id=\"mr-refresh-status\" role=\"status\" aria-live=\"polite\"></div><div id=\"mr-range\"")
871875 if templ_7745c5c3_Err != nil {
872876 return templ_7745c5c3_Err
873877 }
874878 if p.Since == nil && p.SinceNote == "" {
875- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 79, " hidden")
879+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 80, " hidden")
876880 if templ_7745c5c3_Err != nil {
877881 return templ_7745c5c3_Err
878882 }
879883 }
880- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 80, ">")
884+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 81, ">")
881885 if templ_7745c5c3_Err != nil {
882886 return templ_7745c5c3_Err
883887 }
884888 if p.Since != nil {
885- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 81, "<nav class=\"since\" aria-label=\"Diff range\"><a href=\"")
889+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 82, "<nav class=\"since\" aria-label=\"Diff range\"><a href=\"")
886890 if templ_7745c5c3_Err != nil {
887891 return templ_7745c5c3_Err
888892 }
889893 var templ_7745c5c3_Var44 templ.SafeURL
890894 templ_7745c5c3_Var44, templ_7745c5c3_Err = templ.JoinURLErrs(templ.SafeURL(p.Since.AllHref))
891895 if templ_7745c5c3_Err != nil {
892- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 164, Col: 43}
896+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 166, Col: 43}
893897 }
894898 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var44))
895899 if templ_7745c5c3_Err != nil {
896900 return templ_7745c5c3_Err
897901 }
898- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 82, "\"")
902+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 83, "\"")
899903 if templ_7745c5c3_Err != nil {
900904 return templ_7745c5c3_Err
901905 }
902906 if !p.Since.Current {
903- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 83, " aria-current=\"page\"")
907+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 84, " aria-current=\"page\"")
904908 if templ_7745c5c3_Err != nil {
905909 return templ_7745c5c3_Err
906910 }
907911 }
908- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 84, ">all changes <span class=\"mute\">vs ")
912+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 85, ">all changes <span class=\"mute\">vs ")
909913 if templ_7745c5c3_Err != nil {
910914 return templ_7745c5c3_Err
911915 }
912916 var templ_7745c5c3_Var45 string
913917 templ_7745c5c3_Var45, templ_7745c5c3_Err = templ.JoinStringErrs(p.Target)
914918 if templ_7745c5c3_Err != nil {
915- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 168, Col: 50}
919+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 170, Col: 50}
916920 }
917921 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var45))
918922 if templ_7745c5c3_Err != nil {
919923 return templ_7745c5c3_Err
920924 }
921- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 85, "</span></a> <a href=\"")
925+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 86, "</span></a> <a href=\"")
922926 if templ_7745c5c3_Err != nil {
923927 return templ_7745c5c3_Err
924928 }
925929 var templ_7745c5c3_Var46 templ.SafeURL
926930 templ_7745c5c3_Var46, templ_7745c5c3_Err = templ.JoinURLErrs(templ.SafeURL(p.Since.SinceHref))
927931 if templ_7745c5c3_Err != nil {
928- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 170, Col: 45}
932+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 172, Col: 45}
929933 }
930934 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var46))
931935 if templ_7745c5c3_Err != nil {
932936 return templ_7745c5c3_Err
933937 }
934- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 86, "\"")
938+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 87, "\"")
935939 if templ_7745c5c3_Err != nil {
936940 return templ_7745c5c3_Err
937941 }
938942 if p.Since.Current {
939- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 87, " aria-current=\"page\"")
943+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 88, " aria-current=\"page\"")
940944 if templ_7745c5c3_Err != nil {
941945 return templ_7745c5c3_Err
942946 }
943947 }
944- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 88, ">since your last read <span class=\"mute\">")
948+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 89, ">since your last read <span class=\"mute\">")
945949 if templ_7745c5c3_Err != nil {
946950 return templ_7745c5c3_Err
947951 }
948952 var templ_7745c5c3_Var47 string
949953 templ_7745c5c3_Var47, templ_7745c5c3_Err = templ.JoinStringErrs(p.Since.ReadShort)
950954 if templ_7745c5c3_Err != nil {
951- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 174, Col: 65}
955+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 176, Col: 65}
952956 }
953957 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var47))
954958 if templ_7745c5c3_Err != nil {
955959 return templ_7745c5c3_Err
956960 }
957- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 89, " → ")
961+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 90, " → ")
958962 if templ_7745c5c3_Err != nil {
959963 return templ_7745c5c3_Err
960964 }
961965 var templ_7745c5c3_Var48 string
962966 templ_7745c5c3_Var48, templ_7745c5c3_Err = templ.JoinStringErrs(p.Since.HeadShort)
963967 if templ_7745c5c3_Err != nil {
964- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 174, Col: 91}
968+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 176, Col: 91}
965969 }
966970 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var48))
967971 if templ_7745c5c3_Err != nil {
968972 return templ_7745c5c3_Err
969973 }
970- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 90, "</span></a></nav>")
974+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 91, "</span></a></nav>")
971975 if templ_7745c5c3_Err != nil {
972976 return templ_7745c5c3_Err
973977 }
974978 }
975979 if p.SinceNote != "" {
976- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 91, "<p class=\"notice\">")
980+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 92, "<p class=\"notice\">")
977981 if templ_7745c5c3_Err != nil {
978982 return templ_7745c5c3_Err
979983 }
980984 var templ_7745c5c3_Var49 string
981985 templ_7745c5c3_Var49, templ_7745c5c3_Err = templ.JoinStringErrs(p.SinceNote)
982986 if templ_7745c5c3_Err != nil {
983- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 178, Col: 35}
987+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 180, Col: 35}
984988 }
985989 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var49))
986990 if templ_7745c5c3_Err != nil {
987991 return templ_7745c5c3_Err
988992 }
989- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 92, "</p>")
993+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 93, "</p>")
990994 if templ_7745c5c3_Err != nil {
991995 return templ_7745c5c3_Err
992996 }
993997 }
994- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 93, "</div>")
998+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 94, "</div>")
995999 if templ_7745c5c3_Err != nil {
9961000 return templ_7745c5c3_Err
9971001 }
@@ -999,112 +1003,112 @@ func MergeRequest(l Layout, p MRPage) templ.Component {
9991003 if templ_7745c5c3_Err != nil {
10001004 return templ_7745c5c3_Err
10011005 }
1002- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 94, " <div id=\"mr-diff-notices\"")
1006+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 95, " <div id=\"mr-diff-notices\"")
10031007 if templ_7745c5c3_Err != nil {
10041008 return templ_7745c5c3_Err
10051009 }
10061010 if !p.Invisible && p.Note == "" {
1007- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 95, " hidden")
1011+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 96, " hidden")
10081012 if templ_7745c5c3_Err != nil {
10091013 return templ_7745c5c3_Err
10101014 }
10111015 }
1012- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 96, ">")
1016+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 97, ">")
10131017 if templ_7745c5c3_Err != nil {
10141018 return templ_7745c5c3_Err
10151019 }
10161020 if p.Invisible {
1017- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 97, "<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>")
1021+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 98, "<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>")
10181022 if templ_7745c5c3_Err != nil {
10191023 return templ_7745c5c3_Err
10201024 }
10211025 }
10221026 if p.Note != "" {
1023- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 98, "<p class=\"notice\">")
1027+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 99, "<p class=\"notice\">")
10241028 if templ_7745c5c3_Err != nil {
10251029 return templ_7745c5c3_Err
10261030 }
10271031 var templ_7745c5c3_Var50 string
10281032 templ_7745c5c3_Var50, templ_7745c5c3_Err = templ.JoinStringErrs(p.Note)
10291033 if templ_7745c5c3_Err != nil {
1030- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 190, Col: 30}
1034+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 192, Col: 30}
10311035 }
10321036 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var50))
10331037 if templ_7745c5c3_Err != nil {
10341038 return templ_7745c5c3_Err
10351039 }
1036- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 99, "</p>")
1040+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 100, "</p>")
10371041 if templ_7745c5c3_Err != nil {
10381042 return templ_7745c5c3_Err
10391043 }
10401044 }
1041- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 100, "</div><div id=\"diffs\" data-mr")
1045+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 101, "</div><div id=\"diffs\" data-mr")
10421046 if templ_7745c5c3_Err != nil {
10431047 return templ_7745c5c3_Err
10441048 }
10451049 if p.Canonical != "" {
1046- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 101, " data-canonical=\"")
1050+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 102, " data-canonical=\"")
10471051 if templ_7745c5c3_Err != nil {
10481052 return templ_7745c5c3_Err
10491053 }
10501054 var templ_7745c5c3_Var51 string
10511055 templ_7745c5c3_Var51, templ_7745c5c3_Err = templ.ResolveAttributeValue(p.Canonical)
10521056 if templ_7745c5c3_Err != nil {
1053- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 197, Col: 32}
1057+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 199, Col: 32}
10541058 }
10551059 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ_7745c5c3_Var51)
10561060 if templ_7745c5c3_Err != nil {
10571061 return templ_7745c5c3_Err
10581062 }
1059- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 102, "\"")
1063+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 103, "\"")
10601064 if templ_7745c5c3_Err != nil {
10611065 return templ_7745c5c3_Err
10621066 }
10631067 }
10641068 if p.Both {
1065- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 103, " data-diff=\"")
1069+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 104, " data-diff=\"")
10661070 if templ_7745c5c3_Err != nil {
10671071 return templ_7745c5c3_Err
10681072 }
10691073 var templ_7745c5c3_Var52 string
10701074 templ_7745c5c3_Var52, templ_7745c5c3_Err = templ.ResolveAttributeValue(p.View)
10711075 if templ_7745c5c3_Err != nil {
1072- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 200, Col: 22}
1076+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 202, Col: 22}
10731077 }
10741078 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ_7745c5c3_Var52)
10751079 if templ_7745c5c3_Err != nil {
10761080 return templ_7745c5c3_Err
10771081 }
1078- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 104, "\"")
1082+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 105, "\"")
10791083 if templ_7745c5c3_Err != nil {
10801084 return templ_7745c5c3_Err
10811085 }
10821086 } else {
1083- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 105, " data-view=\"")
1087+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 106, " data-view=\"")
10841088 if templ_7745c5c3_Err != nil {
10851089 return templ_7745c5c3_Err
10861090 }
10871091 var templ_7745c5c3_Var53 string
10881092 templ_7745c5c3_Var53, templ_7745c5c3_Err = templ.ResolveAttributeValue(p.View)
10891093 if templ_7745c5c3_Err != nil {
1090- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 202, Col: 22}
1094+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 204, Col: 22}
10911095 }
10921096 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ_7745c5c3_Var53)
10931097 if templ_7745c5c3_Err != nil {
10941098 return templ_7745c5c3_Err
10951099 }
1096- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 106, "\"")
1100+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 107, "\"")
10971101 if templ_7745c5c3_Err != nil {
10981102 return templ_7745c5c3_Err
10991103 }
11001104 }
11011105 if p.Both && !p.Pinned {
1102- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 107, " hx-live=\"this.dataset.diff = sessionStorage.getItem('diff') || this.dataset.diff\"")
1106+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 108, " hx-live=\"this.dataset.diff = sessionStorage.getItem('diff') || this.dataset.diff\"")
11031107 if templ_7745c5c3_Err != nil {
11041108 return templ_7745c5c3_Err
11051109 }
11061110 }
1107- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 108, ">")
1111+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 109, ">")
11081112 if templ_7745c5c3_Err != nil {
11091113 return templ_7745c5c3_Err
11101114 }
@@ -1115,38 +1119,38 @@ func MergeRequest(l Layout, p MRPage) templ.Component {
11151119 }
11161120 }
11171121 if len(p.Files) == 0 {
1118- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 109, "<p class=\"note\">no changed files.</p>")
1122+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 110, "<p class=\"note\">no changed files.</p>")
11191123 if templ_7745c5c3_Err != nil {
11201124 return templ_7745c5c3_Err
11211125 }
11221126 }
1123- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 110, "</div><h2 class=\"rule-h\" id=\"comments\"><span>Comments</span><span class=\"count\">")
1127+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 111, "</div><div id=\"mr-comments\"><h2 class=\"rule-h\" id=\"comments\"><span>Comments</span><span class=\"count\">")
11241128 if templ_7745c5c3_Err != nil {
11251129 return templ_7745c5c3_Err
11261130 }
11271131 var templ_7745c5c3_Var54 string
11281132 templ_7745c5c3_Var54, templ_7745c5c3_Err = templ.JoinStringErrs(itoa(p.NUnresolved))
11291133 if templ_7745c5c3_Err != nil {
1130- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 215, Col: 97}
1134+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 218, Col: 97}
11311135 }
11321136 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var54))
11331137 if templ_7745c5c3_Err != nil {
11341138 return templ_7745c5c3_Err
11351139 }
1136- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 111, " open / ")
1140+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 112, " open / ")
11371141 if templ_7745c5c3_Err != nil {
11381142 return templ_7745c5c3_Err
11391143 }
11401144 var templ_7745c5c3_Var55 string
11411145 templ_7745c5c3_Var55, templ_7745c5c3_Err = templ.JoinStringErrs(itoa(p.NComments))
11421146 if templ_7745c5c3_Err != nil {
1143- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 215, Col: 126}
1147+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 218, Col: 126}
11441148 }
11451149 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var55))
11461150 if templ_7745c5c3_Err != nil {
11471151 return templ_7745c5c3_Err
11481152 }
1149- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 112, "</span></h2>")
1153+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 113, "</span></h2>")
11501154 if templ_7745c5c3_Err != nil {
11511155 return templ_7745c5c3_Err
11521156 }
@@ -1162,26 +1166,22 @@ func MergeRequest(l Layout, p MRPage) templ.Component {
11621166 return templ_7745c5c3_Err
11631167 }
11641168 }
1165- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 113, " ")
1166- if templ_7745c5c3_Err != nil {
1167- return templ_7745c5c3_Err
1168- }
11691169 if p.NComments == 0 {
11701170 templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 114, "<p class=\"dim\">no comments yet.</p>")
11711171 if templ_7745c5c3_Err != nil {
11721172 return templ_7745c5c3_Err
11731173 }
11741174 }
1175- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 115, " ")
1176- if templ_7745c5c3_Err != nil {
1177- return templ_7745c5c3_Err
1178- }
11791175 if p.GeneralForm != nil {
11801176 templ_7745c5c3_Err = commentForm(*p.GeneralForm, "").Render(ctx, templ_7745c5c3_Buffer)
11811177 if templ_7745c5c3_Err != nil {
11821178 return templ_7745c5c3_Err
11831179 }
11841180 }
1181+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 115, "</div>")
1182+ if templ_7745c5c3_Err != nil {
1183+ return templ_7745c5c3_Err
1184+ }
11851185 return nil
11861186 })
11871187 templ_7745c5c3_Err = Shell(l, mrRail(p)).Render(templ.WithChildren(ctx, templ_7745c5c3_Var25), templ_7745c5c3_Buffer)
@@ -1221,7 +1221,7 @@ func branchLink(name, href string) templ.Component {
12211221 var templ_7745c5c3_Var57 templ.SafeURL
12221222 templ_7745c5c3_Var57, templ_7745c5c3_Err = templ.JoinURLErrs(templ.SafeURL(href))
12231223 if templ_7745c5c3_Err != nil {
1224- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 233, Col: 31}
1224+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 237, Col: 31}
12251225 }
12261226 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var57))
12271227 if templ_7745c5c3_Err != nil {
@@ -1234,7 +1234,7 @@ func branchLink(name, href string) templ.Component {
12341234 var templ_7745c5c3_Var58 string
12351235 templ_7745c5c3_Var58, templ_7745c5c3_Err = templ.JoinStringErrs(name)
12361236 if templ_7745c5c3_Err != nil {
1237- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 233, Col: 40}
1237+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 237, Col: 40}
12381238 }
12391239 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var58))
12401240 if templ_7745c5c3_Err != nil {
@@ -1248,7 +1248,7 @@ func branchLink(name, href string) templ.Component {
12481248 var templ_7745c5c3_Var59 string
12491249 templ_7745c5c3_Var59, templ_7745c5c3_Err = templ.JoinStringErrs(name)
12501250 if templ_7745c5c3_Err != nil {
1251- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 235, Col: 8}
1251+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 239, Col: 8}
12521252 }
12531253 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var59))
12541254 if templ_7745c5c3_Err != nil {
@@ -1329,7 +1329,7 @@ func commentView(c CommentView, suffix string) templ.Component {
13291329 var templ_7745c5c3_Var62 string
13301330 templ_7745c5c3_Var62, templ_7745c5c3_Err = templ.ResolveAttributeValue("c" + c.ID + suffix)
13311331 if templ_7745c5c3_Err != nil {
1332- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 254, Col: 42}
1332+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 258, Col: 42}
13331333 }
13341334 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ_7745c5c3_Var62)
13351335 if templ_7745c5c3_Err != nil {
@@ -1342,7 +1342,7 @@ func commentView(c CommentView, suffix string) templ.Component {
13421342 var templ_7745c5c3_Var63 string
13431343 templ_7745c5c3_Var63, templ_7745c5c3_Err = templ.ResolveAttributeValue(boolText(c.Resolved))
13441344 if templ_7745c5c3_Err != nil {
1345- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 254, Col: 81}
1345+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 258, Col: 81}
13461346 }
13471347 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ_7745c5c3_Var63)
13481348 if templ_7745c5c3_Err != nil {
@@ -1365,7 +1365,7 @@ func commentView(c CommentView, suffix string) templ.Component {
13651365 var templ_7745c5c3_Var64 string
13661366 templ_7745c5c3_Var64, templ_7745c5c3_Err = templ.JoinStringErrs(c.Author)
13671367 if templ_7745c5c3_Err != nil {
1368- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 256, Col: 33}
1368+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 260, Col: 33}
13691369 }
13701370 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var64))
13711371 if templ_7745c5c3_Err != nil {
@@ -1379,7 +1379,7 @@ func commentView(c CommentView, suffix string) templ.Component {
13791379 var templ_7745c5c3_Var65 string
13801380 templ_7745c5c3_Var65, templ_7745c5c3_Err = templ.JoinStringErrs(" ")
13811381 if templ_7745c5c3_Err != nil {
1382- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 258, Col: 9}
1382+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 262, Col: 9}
13831383 }
13841384 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var65))
13851385 if templ_7745c5c3_Err != nil {
@@ -1392,7 +1392,7 @@ func commentView(c CommentView, suffix string) templ.Component {
13921392 var templ_7745c5c3_Var66 string
13931393 templ_7745c5c3_Var66, templ_7745c5c3_Err = templ.ResolveAttributeValue(c.WhenAt)
13941394 if templ_7745c5c3_Err != nil {
1395- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 258, Col: 49}
1395+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 262, Col: 49}
13961396 }
13971397 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ_7745c5c3_Var66)
13981398 if templ_7745c5c3_Err != nil {
@@ -1405,7 +1405,7 @@ func commentView(c CommentView, suffix string) templ.Component {
14051405 var templ_7745c5c3_Var67 string
14061406 templ_7745c5c3_Var67, templ_7745c5c3_Err = templ.ResolveAttributeValue(c.Abs)
14071407 if templ_7745c5c3_Err != nil {
1408- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 258, Col: 65}
1408+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 262, Col: 65}
14091409 }
14101410 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ_7745c5c3_Var67)
14111411 if templ_7745c5c3_Err != nil {
@@ -1418,7 +1418,7 @@ func commentView(c CommentView, suffix string) templ.Component {
14181418 var templ_7745c5c3_Var68 string
14191419 templ_7745c5c3_Var68, templ_7745c5c3_Err = templ.JoinStringErrs(c.When)
14201420 if templ_7745c5c3_Err != nil {
1421- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 258, Col: 76}
1421+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 262, Col: 76}
14221422 }
14231423 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var68))
14241424 if templ_7745c5c3_Err != nil {
@@ -1433,7 +1433,7 @@ func commentView(c CommentView, suffix string) templ.Component {
14331433 var templ_7745c5c3_Var69 string
14341434 templ_7745c5c3_Var69, templ_7745c5c3_Err = templ.JoinStringErrs(" ")
14351435 if templ_7745c5c3_Err != nil {
1436- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 261, Col: 9}
1436+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 265, Col: 9}
14371437 }
14381438 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var69))
14391439 if templ_7745c5c3_Err != nil {
@@ -1448,7 +1448,7 @@ func commentView(c CommentView, suffix string) templ.Component {
14481448 var templ_7745c5c3_Var70 string
14491449 templ_7745c5c3_Var70, templ_7745c5c3_Err = templ.JoinStringErrs(" ")
14501450 if templ_7745c5c3_Err != nil {
1451- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 264, Col: 9}
1451+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 268, Col: 9}
14521452 }
14531453 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var70))
14541454 if templ_7745c5c3_Err != nil {
@@ -1463,7 +1463,7 @@ func commentView(c CommentView, suffix string) templ.Component {
14631463 var templ_7745c5c3_Var71 string
14641464 templ_7745c5c3_Var71, templ_7745c5c3_Err = templ.JoinStringErrs(" ")
14651465 if templ_7745c5c3_Err != nil {
1466- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 267, Col: 9}
1466+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 271, Col: 9}
14671467 }
14681468 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var71))
14691469 if templ_7745c5c3_Err != nil {
@@ -1476,7 +1476,7 @@ func commentView(c CommentView, suffix string) templ.Component {
14761476 var templ_7745c5c3_Var72 string
14771477 templ_7745c5c3_Var72, templ_7745c5c3_Err = templ.JoinStringErrs(c.Where)
14781478 if templ_7745c5c3_Err != nil {
1479- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 267, Col: 47}
1479+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 271, Col: 47}
14801480 }
14811481 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var72))
14821482 if templ_7745c5c3_Err != nil {
@@ -1551,7 +1551,7 @@ func commentView(c CommentView, suffix string) templ.Component {
15511551 var templ_7745c5c3_Var73 string
15521552 templ_7745c5c3_Var73, templ_7745c5c3_Err = templ.JoinStringErrs(c.Verdict)
15531553 if templ_7745c5c3_Err != nil {
1554- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 291, Col: 36}
1554+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 295, Col: 36}
15551555 }
15561556 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var73))
15571557 if templ_7745c5c3_Err != nil {
@@ -1570,7 +1570,7 @@ func commentView(c CommentView, suffix string) templ.Component {
15701570 var templ_7745c5c3_Var74 string
15711571 templ_7745c5c3_Var74, templ_7745c5c3_Err = templ.JoinStringErrs(c.Range)
15721572 if templ_7745c5c3_Err != nil {
1573- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 294, Col: 31}
1573+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 298, Col: 31}
15741574 }
15751575 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var74))
15761576 if templ_7745c5c3_Err != nil {
@@ -1589,7 +1589,7 @@ func commentView(c CommentView, suffix string) templ.Component {
15891589 var templ_7745c5c3_Var75 string
15901590 templ_7745c5c3_Var75, templ_7745c5c3_Err = templ.ResolveAttributeValue(c.Quote)
15911591 if templ_7745c5c3_Err != nil {
1592- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 297, Col: 65}
1592+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 301, Col: 65}
15931593 }
15941594 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ_7745c5c3_Var75)
15951595 if templ_7745c5c3_Err != nil {
@@ -1608,7 +1608,7 @@ func commentView(c CommentView, suffix string) templ.Component {
16081608 var templ_7745c5c3_Var76 templ.SafeURL
16091609 templ_7745c5c3_Var76, templ_7745c5c3_Err = templ.JoinURLErrs(templ.SafeURL(c.Edit.Action))
16101610 if templ_7745c5c3_Err != nil {
1611- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 300, Col: 92}
1611+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 304, Col: 92}
16121612 }
16131613 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var76))
16141614 if templ_7745c5c3_Err != nil {
@@ -1621,7 +1621,7 @@ func commentView(c CommentView, suffix string) templ.Component {
16211621 var templ_7745c5c3_Var77 string
16221622 templ_7745c5c3_Var77, templ_7745c5c3_Err = templ.ResolveAttributeValue(itoa(c.Edit.From))
16231623 if templ_7745c5c3_Err != nil {
1624- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 300, Col: 153}
1624+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 304, Col: 153}
16251625 }
16261626 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ_7745c5c3_Var77)
16271627 if templ_7745c5c3_Err != nil {
@@ -1634,7 +1634,7 @@ func commentView(c CommentView, suffix string) templ.Component {
16341634 var templ_7745c5c3_Var78 string
16351635 templ_7745c5c3_Var78, templ_7745c5c3_Err = templ.JoinStringErrs(c.Edit.Text)
16361636 if templ_7745c5c3_Err != nil {
1637- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 300, Col: 209}
1637+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 304, Col: 209}
16381638 }
16391639 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var78))
16401640 if templ_7745c5c3_Err != nil {
@@ -1653,7 +1653,7 @@ func commentView(c CommentView, suffix string) templ.Component {
16531653 var templ_7745c5c3_Var79 templ.SafeURL
16541654 templ_7745c5c3_Var79, templ_7745c5c3_Err = templ.JoinURLErrs(templ.SafeURL(c.Delete.Action))
16551655 if templ_7745c5c3_Err != nil {
1656- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 303, Col: 96}
1656+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 307, Col: 96}
16571657 }
16581658 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var79))
16591659 if templ_7745c5c3_Err != nil {
@@ -1666,7 +1666,7 @@ func commentView(c CommentView, suffix string) templ.Component {
16661666 var templ_7745c5c3_Var80 string
16671667 templ_7745c5c3_Var80, templ_7745c5c3_Err = templ.ResolveAttributeValue(itoa(c.Delete.From))
16681668 if templ_7745c5c3_Err != nil {
1669- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 303, Col: 159}
1669+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 307, Col: 159}
16701670 }
16711671 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ_7745c5c3_Var80)
16721672 if templ_7745c5c3_Err != nil {
@@ -1705,7 +1705,7 @@ func commentView(c CommentView, suffix string) templ.Component {
17051705 var templ_7745c5c3_Var81 templ.SafeURL
17061706 templ_7745c5c3_Var81, templ_7745c5c3_Err = templ.JoinURLErrs(templ.SafeURL(c.Resolve.Action))
17071707 if templ_7745c5c3_Err != nil {
1708- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 314, Col: 77}
1708+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 318, Col: 77}
17091709 }
17101710 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var81))
17111711 if templ_7745c5c3_Err != nil {
@@ -1718,7 +1718,7 @@ func commentView(c CommentView, suffix string) templ.Component {
17181718 var templ_7745c5c3_Var82 string
17191719 templ_7745c5c3_Var82, templ_7745c5c3_Err = templ.ResolveAttributeValue(boolText(c.Resolve.Value))
17201720 if templ_7745c5c3_Err != nil {
1721- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 315, Col: 74}
1721+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 319, Col: 74}
17221722 }
17231723 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ_7745c5c3_Var82)
17241724 if templ_7745c5c3_Err != nil {
@@ -1736,7 +1736,7 @@ func commentView(c CommentView, suffix string) templ.Component {
17361736 var templ_7745c5c3_Var83 string
17371737 templ_7745c5c3_Var83, templ_7745c5c3_Err = templ.ResolveAttributeValue(itoa(c.Resolve.From))
17381738 if templ_7745c5c3_Err != nil {
1739- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 317, Col: 66}
1739+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 321, Col: 66}
17401740 }
17411741 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ_7745c5c3_Var83)
17421742 if templ_7745c5c3_Err != nil {
@@ -1754,7 +1754,7 @@ func commentView(c CommentView, suffix string) templ.Component {
17541754 var templ_7745c5c3_Var84 string
17551755 templ_7745c5c3_Var84, templ_7745c5c3_Err = templ.JoinStringErrs(c.Resolve.Label)
17561756 if templ_7745c5c3_Err != nil {
1757- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 319, Col: 55}
1757+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 323, Col: 55}
17581758 }
17591759 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var84))
17601760 if templ_7745c5c3_Err != nil {
@@ -1809,7 +1809,7 @@ func commentForm(f CommentForm, suffix string) templ.Component {
18091809 var templ_7745c5c3_Var86 templ.SafeURL
18101810 templ_7745c5c3_Var86, templ_7745c5c3_Err = templ.JoinURLErrs(templ.SafeURL(f.Action))
18111811 if templ_7745c5c3_Err != nil {
1812- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 334, Col: 67}
1812+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 338, Col: 67}
18131813 }
18141814 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var86))
18151815 if templ_7745c5c3_Err != nil {
@@ -1822,7 +1822,7 @@ func commentForm(f CommentForm, suffix string) templ.Component {
18221822 var templ_7745c5c3_Var87 string
18231823 templ_7745c5c3_Var87, templ_7745c5c3_Err = templ.ResolveAttributeValue(f.ID + suffix)
18241824 if templ_7745c5c3_Err != nil {
1825- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 335, Col: 28}
1825+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 339, Col: 28}
18261826 }
18271827 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ_7745c5c3_Var87)
18281828 if templ_7745c5c3_Err != nil {
@@ -1835,7 +1835,7 @@ func commentForm(f CommentForm, suffix string) templ.Component {
18351835 var templ_7745c5c3_Var88 string
18361836 templ_7745c5c3_Var88, templ_7745c5c3_Err = templ.JoinStringErrs(f.Title)
18371837 if templ_7745c5c3_Err != nil {
1838- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 335, Col: 40}
1838+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 339, Col: 40}
18391839 }
18401840 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var88))
18411841 if templ_7745c5c3_Err != nil {
@@ -1848,7 +1848,7 @@ func commentForm(f CommentForm, suffix string) templ.Component {
18481848 var templ_7745c5c3_Var89 string
18491849 templ_7745c5c3_Var89, templ_7745c5c3_Err = templ.ResolveAttributeValue(f.ID + suffix)
18501850 if templ_7745c5c3_Err != nil {
1851- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 337, Col: 21}
1851+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 341, Col: 21}
18521852 }
18531853 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ_7745c5c3_Var89)
18541854 if templ_7745c5c3_Err != nil {
@@ -1887,7 +1887,7 @@ func commentForm(f CommentForm, suffix string) templ.Component {
18871887 var templ_7745c5c3_Var90 string
18881888 templ_7745c5c3_Var90, templ_7745c5c3_Err = templ.ResolveAttributeValue(f.Path)
18891889 if templ_7745c5c3_Err != nil {
1890- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 352, Col: 50}
1890+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 356, Col: 50}
18911891 }
18921892 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ_7745c5c3_Var90)
18931893 if templ_7745c5c3_Err != nil {
@@ -1900,7 +1900,7 @@ func commentForm(f CommentForm, suffix string) templ.Component {
19001900 var templ_7745c5c3_Var91 string
19011901 templ_7745c5c3_Var91, templ_7745c5c3_Err = templ.ResolveAttributeValue(f.Line)
19021902 if templ_7745c5c3_Err != nil {
1903- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 353, Col: 50}
1903+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 357, Col: 50}
19041904 }
19051905 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ_7745c5c3_Var91)
19061906 if templ_7745c5c3_Err != nil {
@@ -1913,7 +1913,7 @@ func commentForm(f CommentForm, suffix string) templ.Component {
19131913 var templ_7745c5c3_Var92 string
19141914 templ_7745c5c3_Var92, templ_7745c5c3_Err = templ.ResolveAttributeValue(f.Side)
19151915 if templ_7745c5c3_Err != nil {
1916- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 354, Col: 50}
1916+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 358, Col: 50}
19171917 }
19181918 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ_7745c5c3_Var92)
19191919 if templ_7745c5c3_Err != nil {
@@ -1926,7 +1926,7 @@ func commentForm(f CommentForm, suffix string) templ.Component {
19261926 var templ_7745c5c3_Var93 string
19271927 templ_7745c5c3_Var93, templ_7745c5c3_Err = templ.ResolveAttributeValue(f.StartLine)
19281928 if templ_7745c5c3_Err != nil {
1929- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 355, Col: 86}
1929+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 359, Col: 86}
19301930 }
19311931 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ_7745c5c3_Var93)
19321932 if templ_7745c5c3_Err != nil {
@@ -1945,7 +1945,7 @@ func commentForm(f CommentForm, suffix string) templ.Component {
19451945 var templ_7745c5c3_Var94 string
19461946 templ_7745c5c3_Var94, templ_7745c5c3_Err = templ.ResolveAttributeValue(f.ReplyTo)
19471947 if templ_7745c5c3_Err != nil {
1948- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 358, Col: 57}
1948+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 362, Col: 57}
19491949 }
19501950 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ_7745c5c3_Var94)
19511951 if templ_7745c5c3_Err != nil {
@@ -1970,7 +1970,7 @@ func commentForm(f CommentForm, suffix string) templ.Component {
19701970 var templ_7745c5c3_Var95 string
19711971 templ_7745c5c3_Var95, templ_7745c5c3_Err = templ.ResolveAttributeValue(itoa(f.From))
19721972 if templ_7745c5c3_Err != nil {
1973- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 364, Col: 56}
1973+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 368, Col: 56}
19741974 }
19751975 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ_7745c5c3_Var95)
19761976 if templ_7745c5c3_Err != nil {
@@ -1993,7 +1993,7 @@ func commentForm(f CommentForm, suffix string) templ.Component {
19931993 var templ_7745c5c3_Var96 templ.SafeURL
19941994 templ_7745c5c3_Var96, templ_7745c5c3_Err = templ.JoinURLErrs(templ.SafeURL(f.Cancel))
19951995 if templ_7745c5c3_Err != nil {
1996- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 369, Col: 49}
1996+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 373, Col: 49}
19971997 }
19981998 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var96))
19991999 if templ_7745c5c3_Err != nil {
@@ -2040,7 +2040,7 @@ func mrFooter(p MRPage) templ.Component {
20402040 var templ_7745c5c3_Var98 string
20412041 templ_7745c5c3_Var98, templ_7745c5c3_Err = templ.JoinStringErrs(p.CommitCount)
20422042 if templ_7745c5c3_Err != nil {
2043- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 378, Col: 55}
2043+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 382, Col: 55}
20442044 }
20452045 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var98))
20462046 if templ_7745c5c3_Err != nil {
@@ -2053,7 +2053,7 @@ func mrFooter(p MRPage) templ.Component {
20532053 var templ_7745c5c3_Var99 string
20542054 templ_7745c5c3_Var99, templ_7745c5c3_Err = templ.JoinStringErrs(p.CommitCount)
20552055 if templ_7745c5c3_Err != nil {
2056- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 380, Col: 89}
2056+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 384, Col: 89}
20572057 }
20582058 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var99))
20592059 if templ_7745c5c3_Err != nil {
@@ -2066,7 +2066,7 @@ func mrFooter(p MRPage) templ.Component {
20662066 var templ_7745c5c3_Var100 string
20672067 templ_7745c5c3_Var100, templ_7745c5c3_Err = templ.JoinStringErrs("Checks ")
20682068 if templ_7745c5c3_Err != nil {
2069- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 382, Col: 16}
2069+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 386, Col: 16}
20702070 }
20712071 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var100))
20722072 if templ_7745c5c3_Err != nil {
@@ -2080,7 +2080,7 @@ func mrFooter(p MRPage) templ.Component {
20802080 var templ_7745c5c3_Var101 string
20812081 templ_7745c5c3_Var101, templ_7745c5c3_Err = templ.JoinStringErrs(p.ChecksSum.Title)
20822082 if templ_7745c5c3_Err != nil {
2083- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 385, Col: 26}
2083+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 389, Col: 26}
20842084 }
20852085 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var101))
20862086 if templ_7745c5c3_Err != nil {
@@ -2114,7 +2114,7 @@ func mrFooter(p MRPage) templ.Component {
21142114 var templ_7745c5c3_Var102 templ.SafeURL
21152115 templ_7745c5c3_Var102, templ_7745c5c3_Err = templ.JoinURLErrs(templ.SafeURL(c.Href))
21162116 if templ_7745c5c3_Err != nil {
2117- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 398, Col: 43}
2117+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 402, Col: 43}
21182118 }
21192119 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var102))
21202120 if templ_7745c5c3_Err != nil {
@@ -2127,7 +2127,7 @@ func mrFooter(p MRPage) templ.Component {
21272127 var templ_7745c5c3_Var103 string
21282128 templ_7745c5c3_Var103, templ_7745c5c3_Err = templ.JoinStringErrs(c.Short)
21292129 if templ_7745c5c3_Err != nil {
2130- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 398, Col: 55}
2130+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 402, Col: 55}
21312131 }
21322132 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var103))
21332133 if templ_7745c5c3_Err != nil {
@@ -2140,7 +2140,7 @@ func mrFooter(p MRPage) templ.Component {
21402140 var templ_7745c5c3_Var104 string
21412141 templ_7745c5c3_Var104, templ_7745c5c3_Err = templ.JoinStringErrs(c.Subject)
21422142 if templ_7745c5c3_Err != nil {
2143- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 399, Col: 23}
2143+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 403, Col: 23}
21442144 }
21452145 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var104))
21462146 if templ_7745c5c3_Err != nil {
@@ -2153,7 +2153,7 @@ func mrFooter(p MRPage) templ.Component {
21532153 var templ_7745c5c3_Var105 string
21542154 templ_7745c5c3_Var105, templ_7745c5c3_Err = templ.JoinStringErrs(c.Author)
21552155 if templ_7745c5c3_Err != nil {
2156- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 400, Col: 22}
2156+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 404, Col: 22}
21572157 }
21582158 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var105))
21592159 if templ_7745c5c3_Err != nil {
@@ -2171,7 +2171,7 @@ func mrFooter(p MRPage) templ.Component {
21712171 var templ_7745c5c3_Var106 string
21722172 templ_7745c5c3_Var106, templ_7745c5c3_Err = templ.ResolveAttributeValue(c.WhenAt)
21732173 if templ_7745c5c3_Err != nil {
2174- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 403, Col: 35}
2174+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 407, Col: 35}
21752175 }
21762176 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ_7745c5c3_Var106)
21772177 if templ_7745c5c3_Err != nil {
@@ -2184,7 +2184,7 @@ func mrFooter(p MRPage) templ.Component {
21842184 var templ_7745c5c3_Var107 string
21852185 templ_7745c5c3_Var107, templ_7745c5c3_Err = templ.JoinStringErrs(c.When)
21862186 if templ_7745c5c3_Err != nil {
2187- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 403, Col: 46}
2187+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 407, Col: 46}
21882188 }
21892189 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var107))
21902190 if templ_7745c5c3_Err != nil {
@@ -2238,7 +2238,7 @@ func mrFooter(p MRPage) templ.Component {
22382238 var templ_7745c5c3_Var108 string
22392239 templ_7745c5c3_Var108, templ_7745c5c3_Err = templ.JoinStringErrs(p.CommitsNote)
22402240 if templ_7745c5c3_Err != nil {
2241- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 424, Col: 36}
2241+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 428, Col: 36}
22422242 }
22432243 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var108))
22442244 if templ_7745c5c3_Err != nil {
@@ -2293,7 +2293,7 @@ func mrRail(p MRPage) templ.Component {
22932293 var templ_7745c5c3_Var110 string
22942294 templ_7745c5c3_Var110, templ_7745c5c3_Err = templ.JoinStringErrs(itoa(len(p.Files)))
22952295 if templ_7745c5c3_Err != nil {
2296- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 437, Col: 49}
2296+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 441, Col: 49}
22972297 }
22982298 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var110))
22992299 if templ_7745c5c3_Err != nil {
@@ -2324,7 +2324,7 @@ func mrRail(p MRPage) templ.Component {
23242324 var templ_7745c5c3_Var111 templ.SafeURL
23252325 templ_7745c5c3_Var111, templ_7745c5c3_Err = templ.JoinURLErrs(templ.SafeURL(v.Href))
23262326 if templ_7745c5c3_Err != nil {
2327- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 450, Col: 37}
2327+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 454, Col: 37}
23282328 }
23292329 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var111))
23302330 if templ_7745c5c3_Err != nil {
@@ -2337,7 +2337,7 @@ func mrRail(p MRPage) templ.Component {
23372337 var templ_7745c5c3_Var112 string
23382338 templ_7745c5c3_Var112, templ_7745c5c3_Err = templ.JoinStringErrs(v.Author)
23392339 if templ_7745c5c3_Err != nil {
2340- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 450, Col: 50}
2340+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 454, Col: 50}
23412341 }
23422342 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var112))
23432343 if templ_7745c5c3_Err != nil {
@@ -2350,7 +2350,7 @@ func mrRail(p MRPage) templ.Component {
23502350 var templ_7745c5c3_Var113 string
23512351 templ_7745c5c3_Var113, templ_7745c5c3_Err = templ.JoinStringErrs(v.Label)
23522352 if templ_7745c5c3_Err != nil {
2353- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 450, Col: 63}
2353+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 454, Col: 63}
23542354 }
23552355 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var113))
23562356 if templ_7745c5c3_Err != nil {
@@ -2412,7 +2412,7 @@ func mrBar(p MRPage) templ.Component {
24122412 var templ_7745c5c3_Var115 string
24132413 templ_7745c5c3_Var115, templ_7745c5c3_Err = templ.JoinStringErrs(plural(p.NFiles, "file", "files"))
24142414 if templ_7745c5c3_Err != nil {
2415- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 467, Col: 55}
2415+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 471, Col: 55}
24162416 }
24172417 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var115))
24182418 if templ_7745c5c3_Err != nil {
@@ -2425,7 +2425,7 @@ func mrBar(p MRPage) templ.Component {
24252425 var templ_7745c5c3_Var116 string
24262426 templ_7745c5c3_Var116, templ_7745c5c3_Err = templ.JoinStringErrs(itoa(p.Adds))
24272427 if templ_7745c5c3_Err != nil {
2428- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 467, Col: 95}
2428+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 471, Col: 95}
24292429 }
24302430 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var116))
24312431 if templ_7745c5c3_Err != nil {
@@ -2438,7 +2438,7 @@ func mrBar(p MRPage) templ.Component {
24382438 var templ_7745c5c3_Var117 string
24392439 templ_7745c5c3_Var117, templ_7745c5c3_Err = templ.JoinStringErrs(itoa(p.Dels))
24402440 if templ_7745c5c3_Err != nil {
2441- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 467, Col: 140}
2441+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 471, Col: 140}
24422442 }
24432443 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var117))
24442444 if templ_7745c5c3_Err != nil {
@@ -2550,7 +2550,7 @@ func mergeMenu(p MRPage) templ.Component {
25502550 var templ_7745c5c3_Var119 string
25512551 templ_7745c5c3_Var119, templ_7745c5c3_Err = templ.JoinStringErrs(p.Box.Error)
25522552 if templ_7745c5c3_Err != nil {
2553- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 501, Col: 47}
2553+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 505, Col: 47}
25542554 }
25552555 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var119))
25562556 if templ_7745c5c3_Err != nil {
@@ -2569,7 +2569,7 @@ func mergeMenu(p MRPage) templ.Component {
25692569 var templ_7745c5c3_Var120 templ.SafeURL
25702570 templ_7745c5c3_Var120, templ_7745c5c3_Err = templ.JoinURLErrs(templ.SafeURL(p.Box.ReadyAction))
25712571 if templ_7745c5c3_Err != nil {
2572- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 505, Col: 80}
2572+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 509, Col: 80}
25732573 }
25742574 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var120))
25752575 if templ_7745c5c3_Err != nil {
@@ -2591,7 +2591,7 @@ func mergeMenu(p MRPage) templ.Component {
25912591 var templ_7745c5c3_Var121 templ.SafeURL
25922592 templ_7745c5c3_Var121, templ_7745c5c3_Err = templ.JoinURLErrs(templ.SafeURL(p.Box.MergeAction))
25932593 if templ_7745c5c3_Err != nil {
2594- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 510, Col: 80}
2594+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 514, Col: 80}
25952595 }
25962596 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var121))
25972597 if templ_7745c5c3_Err != nil {
@@ -2604,7 +2604,7 @@ func mergeMenu(p MRPage) templ.Component {
26042604 var templ_7745c5c3_Var122 string
26052605 templ_7745c5c3_Var122, templ_7745c5c3_Err = templ.ResolveAttributeValue(p.Box.Head)
26062606 if templ_7745c5c3_Err != nil {
2607- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 511, Col: 59}
2607+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 515, Col: 59}
26082608 }
26092609 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ_7745c5c3_Var122)
26102610 if templ_7745c5c3_Err != nil {
@@ -2622,7 +2622,7 @@ func mergeMenu(p MRPage) templ.Component {
26222622 var templ_7745c5c3_Var123 string
26232623 templ_7745c5c3_Var123, templ_7745c5c3_Err = templ.ResolveAttributeValue(m.Value)
26242624 if templ_7745c5c3_Err != nil {
2625- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 519, Col: 24}
2625+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 523, Col: 24}
26262626 }
26272627 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ_7745c5c3_Var123)
26282628 if templ_7745c5c3_Err != nil {
@@ -2651,7 +2651,7 @@ func mergeMenu(p MRPage) templ.Component {
26512651 var templ_7745c5c3_Var124 string
26522652 templ_7745c5c3_Var124, templ_7745c5c3_Err = templ.ResolveAttributeValue(m.Reason)
26532653 if templ_7745c5c3_Err != nil {
2654- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 522, Col: 25}
2654+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 526, Col: 25}
26552655 }
26562656 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ_7745c5c3_Var124)
26572657 if templ_7745c5c3_Err != nil {
@@ -2664,7 +2664,7 @@ func mergeMenu(p MRPage) templ.Component {
26642664 var templ_7745c5c3_Var125 string
26652665 templ_7745c5c3_Var125, templ_7745c5c3_Err = templ.JoinStringErrs(m.Label)
26662666 if templ_7745c5c3_Err != nil {
2667- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 526, Col: 17}
2667+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 530, Col: 17}
26682668 }
26692669 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var125))
26702670 if templ_7745c5c3_Err != nil {
@@ -2682,7 +2682,7 @@ func mergeMenu(p MRPage) templ.Component {
26822682 var templ_7745c5c3_Var126 string
26832683 templ_7745c5c3_Var126, templ_7745c5c3_Err = templ.JoinStringErrs(itoa(i + 1))
26842684 if templ_7745c5c3_Err != nil {
2685- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 528, Col: 46}
2685+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 532, Col: 46}
26862686 }
26872687 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var126))
26882688 if templ_7745c5c3_Err != nil {
@@ -2710,7 +2710,7 @@ func mergeMenu(p MRPage) templ.Component {
27102710 var templ_7745c5c3_Var127 string
27112711 templ_7745c5c3_Var127, templ_7745c5c3_Err = templ.JoinStringErrs(p.Source)
27122712 if templ_7745c5c3_Err != nil {
2713- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 534, Col: 102}
2713+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 538, Col: 102}
27142714 }
27152715 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var127))
27162716 if templ_7745c5c3_Err != nil {
@@ -2738,7 +2738,7 @@ func mergeMenu(p MRPage) templ.Component {
27382738 var templ_7745c5c3_Var128 string
27392739 templ_7745c5c3_Var128, templ_7745c5c3_Err = templ.ResolveAttributeValue(p.Box.MergeTitle())
27402740 if templ_7745c5c3_Err != nil {
2741- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 542, Col: 33}
2741+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 546, Col: 33}
27422742 }
27432743 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ_7745c5c3_Var128)
27442744 if templ_7745c5c3_Err != nil {
@@ -2751,7 +2751,7 @@ func mergeMenu(p MRPage) templ.Component {
27512751 var templ_7745c5c3_Var129 string
27522752 templ_7745c5c3_Var129, templ_7745c5c3_Err = templ.JoinStringErrs(p.Target)
27532753 if templ_7745c5c3_Err != nil {
2754- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 545, Col: 28}
2754+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 549, Col: 28}
27552755 }
27562756 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var129))
27572757 if templ_7745c5c3_Err != nil {
@@ -2800,7 +2800,7 @@ func MRMergeability(v MergeabilityView) templ.Component {
28002800 var templ_7745c5c3_Var131 string
28012801 templ_7745c5c3_Var131, templ_7745c5c3_Err = templ.ResolveAttributeValue(v.State)
28022802 if templ_7745c5c3_Err != nil {
2803- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 558, Col: 22}
2803+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 562, Col: 22}
28042804 }
28052805 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ_7745c5c3_Var131)
28062806 if templ_7745c5c3_Err != nil {
@@ -2813,7 +2813,7 @@ func MRMergeability(v MergeabilityView) templ.Component {
28132813 var templ_7745c5c3_Var132 string
28142814 templ_7745c5c3_Var132, templ_7745c5c3_Err = templ.ResolveAttributeValue(strconv.FormatBool(v.FFOk))
28152815 if templ_7745c5c3_Err != nil {
2816- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 559, Col: 41}
2816+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 563, Col: 41}
28172817 }
28182818 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ_7745c5c3_Var132)
28192819 if templ_7745c5c3_Err != nil {
@@ -2826,7 +2826,7 @@ func MRMergeability(v MergeabilityView) templ.Component {
28262826 var templ_7745c5c3_Var133 string
28272827 templ_7745c5c3_Var133, templ_7745c5c3_Err = templ.ResolveAttributeValue(strconv.FormatBool(v.MergeOk))
28282828 if templ_7745c5c3_Err != nil {
2829- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 560, Col: 47}
2829+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 564, Col: 47}
28302830 }
28312831 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ_7745c5c3_Var133)
28322832 if templ_7745c5c3_Err != nil {
@@ -2839,7 +2839,7 @@ func MRMergeability(v MergeabilityView) templ.Component {
28392839 var templ_7745c5c3_Var134 string
28402840 templ_7745c5c3_Var134, templ_7745c5c3_Err = templ.ResolveAttributeValue(v.FFReason)
28412841 if templ_7745c5c3_Err != nil {
2842- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 561, Col: 29}
2842+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 565, Col: 29}
28432843 }
28442844 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ_7745c5c3_Var134)
28452845 if templ_7745c5c3_Err != nil {
@@ -2852,7 +2852,7 @@ func MRMergeability(v MergeabilityView) templ.Component {
28522852 var templ_7745c5c3_Var135 string
28532853 templ_7745c5c3_Var135, templ_7745c5c3_Err = templ.ResolveAttributeValue(v.MergeReason)
28542854 if templ_7745c5c3_Err != nil {
2855- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 562, Col: 35}
2855+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 566, Col: 35}
28562856 }
28572857 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ_7745c5c3_Var135)
28582858 if templ_7745c5c3_Err != nil {
@@ -2865,7 +2865,7 @@ func MRMergeability(v MergeabilityView) templ.Component {
28652865 var templ_7745c5c3_Var136 string
28662866 templ_7745c5c3_Var136, templ_7745c5c3_Err = templ.ResolveAttributeValue(v.State)
28672867 if templ_7745c5c3_Err != nil {
2868- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 564, Col: 42}
2868+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 568, Col: 42}
28692869 }
28702870 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ_7745c5c3_Var136)
28712871 if templ_7745c5c3_Err != nil {
@@ -2878,7 +2878,7 @@ func MRMergeability(v MergeabilityView) templ.Component {
28782878 var templ_7745c5c3_Var137 string
28792879 templ_7745c5c3_Var137, templ_7745c5c3_Err = templ.JoinStringErrs(v.Label)
28802880 if templ_7745c5c3_Err != nil {
2881- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 564, Col: 54}
2881+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 568, Col: 54}
28822882 }
28832883 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var137))
28842884 if templ_7745c5c3_Err != nil {
@@ -2892,7 +2892,7 @@ func MRMergeability(v MergeabilityView) templ.Component {
28922892 var templ_7745c5c3_Var138 string
28932893 templ_7745c5c3_Var138, templ_7745c5c3_Err = templ.JoinStringErrs(" ")
28942894 if templ_7745c5c3_Err != nil {
2895- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 566, Col: 8}
2895+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 570, Col: 8}
28962896 }
28972897 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var138))
28982898 if templ_7745c5c3_Err != nil {
@@ -2905,7 +2905,7 @@ func MRMergeability(v MergeabilityView) templ.Component {
29052905 var templ_7745c5c3_Var139 string
29062906 templ_7745c5c3_Var139, templ_7745c5c3_Err = templ.JoinStringErrs(v.Detail)
29072907 if templ_7745c5c3_Err != nil {
2908- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 566, Col: 38}
2908+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 570, Col: 38}
29092909 }
29102910 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var139))
29112911 if templ_7745c5c3_Err != nil {
@@ -2933,7 +2933,7 @@ func MRMergeability(v MergeabilityView) templ.Component {
29332933 var templ_7745c5c3_Var140 string
29342934 templ_7745c5c3_Var140, templ_7745c5c3_Err = templ.JoinStringErrs(path)
29352935 if templ_7745c5c3_Err != nil {
2936- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 572, Col: 20}
2936+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 576, Col: 20}
29372937 }
29382938 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var140))
29392939 if templ_7745c5c3_Err != nil {
@@ -2957,7 +2957,7 @@ func MRMergeability(v MergeabilityView) templ.Component {
29572957 var templ_7745c5c3_Var141 string
29582958 templ_7745c5c3_Var141, templ_7745c5c3_Err = templ.JoinStringErrs(v.PathsNote)
29592959 if templ_7745c5c3_Err != nil {
2960- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 577, Col: 30}
2960+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 581, Col: 30}
29612961 }
29622962 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var141))
29632963 if templ_7745c5c3_Err != nil {
@@ -3071,7 +3071,7 @@ func moreMenu(p MRPage) templ.Component {
30713071 var templ_7745c5c3_Var145 string
30723072 templ_7745c5c3_Var145, templ_7745c5c3_Err = templ.JoinStringErrs(strings.Join(p.Modes, ", "))
30733073 if templ_7745c5c3_Err != nil {
3074- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 604, Col: 38}
3074+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 608, Col: 38}
30753075 }
30763076 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var145))
30773077 if templ_7745c5c3_Err != nil {
@@ -3110,7 +3110,7 @@ func moreMenu(p MRPage) templ.Component {
31103110 var templ_7745c5c3_Var146 string
31113111 templ_7745c5c3_Var146, templ_7745c5c3_Err = templ.JoinStringErrs(p.Box.Fingerprint)
31123112 if templ_7745c5c3_Err != nil {
3113- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 620, Col: 44}
3113+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 624, Col: 44}
31143114 }
31153115 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var146))
31163116 if templ_7745c5c3_Err != nil {
@@ -3138,7 +3138,7 @@ func moreMenu(p MRPage) templ.Component {
31383138 var templ_7745c5c3_Var147 templ.SafeURL
31393139 templ_7745c5c3_Var147, templ_7745c5c3_Err = templ.JoinURLErrs(templ.SafeURL(p.Box.ReadAction))
31403140 if templ_7745c5c3_Err != nil {
3141- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 626, Col: 65}
3141+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 630, Col: 65}
31423142 }
31433143 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var147))
31443144 if templ_7745c5c3_Err != nil {
@@ -3151,7 +3151,7 @@ func moreMenu(p MRPage) templ.Component {
31513151 var templ_7745c5c3_Var148 string
31523152 templ_7745c5c3_Var148, templ_7745c5c3_Err = templ.ResolveAttributeValue(p.Box.Head)
31533153 if templ_7745c5c3_Err != nil {
3154- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 627, Col: 60}
3154+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 631, Col: 60}
31553155 }
31563156 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ_7745c5c3_Var148)
31573157 if templ_7745c5c3_Err != nil {
@@ -3169,7 +3169,7 @@ func moreMenu(p MRPage) templ.Component {
31693169 var templ_7745c5c3_Var149 templ.SafeURL
31703170 templ_7745c5c3_Var149, templ_7745c5c3_Err = templ.JoinURLErrs(templ.SafeURL(p.Box.CloseAction))
31713171 if templ_7745c5c3_Err != nil {
3172- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 631, Col: 65}
3172+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 635, Col: 65}
31733173 }
31743174 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var149))
31753175 if templ_7745c5c3_Err != nil {
@@ -3242,7 +3242,7 @@ func Compare(l Layout, p ComparePage) templ.Component {
32423242 var templ_7745c5c3_Var152 string
32433243 templ_7745c5c3_Var152, templ_7745c5c3_Err = templ.JoinStringErrs(p.Source)
32443244 if templ_7745c5c3_Err != nil {
3245- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 648, Col: 17}
3245+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 652, Col: 17}
32463246 }
32473247 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var152))
32483248 if templ_7745c5c3_Err != nil {
@@ -3255,7 +3255,7 @@ func Compare(l Layout, p ComparePage) templ.Component {
32553255 var templ_7745c5c3_Var153 string
32563256 templ_7745c5c3_Var153, templ_7745c5c3_Err = templ.JoinStringErrs(p.Target)
32573257 if templ_7745c5c3_Err != nil {
3258- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 648, Col: 34}
3258+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 652, Col: 34}
32593259 }
32603260 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var153))
32613261 if templ_7745c5c3_Err != nil {
@@ -3268,7 +3268,7 @@ func Compare(l Layout, p ComparePage) templ.Component {
32683268 var templ_7745c5c3_Var154 templ.SafeURL
32693269 templ_7745c5c3_Var154, templ_7745c5c3_Err = templ.JoinURLErrs(templ.SafeURL(p.SourceHref))
32703270 if templ_7745c5c3_Err != nil {
3271- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 651, Col: 45}
3271+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 655, Col: 45}
32723272 }
32733273 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var154))
32743274 if templ_7745c5c3_Err != nil {
@@ -3281,7 +3281,7 @@ func Compare(l Layout, p ComparePage) templ.Component {
32813281 var templ_7745c5c3_Var155 string
32823282 templ_7745c5c3_Var155, templ_7745c5c3_Err = templ.JoinStringErrs(p.Source)
32833283 if templ_7745c5c3_Err != nil {
3284- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 651, Col: 58}
3284+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 655, Col: 58}
32853285 }
32863286 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var155))
32873287 if templ_7745c5c3_Err != nil {
@@ -3294,7 +3294,7 @@ func Compare(l Layout, p ComparePage) templ.Component {
32943294 var templ_7745c5c3_Var156 templ.SafeURL
32953295 templ_7745c5c3_Var156, templ_7745c5c3_Err = templ.JoinURLErrs(templ.SafeURL(p.TargetHref))
32963296 if templ_7745c5c3_Err != nil {
3297- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 653, Col: 45}
3297+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 657, Col: 45}
32983298 }
32993299 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var156))
33003300 if templ_7745c5c3_Err != nil {
@@ -3307,7 +3307,7 @@ func Compare(l Layout, p ComparePage) templ.Component {
33073307 var templ_7745c5c3_Var157 string
33083308 templ_7745c5c3_Var157, templ_7745c5c3_Err = templ.JoinStringErrs(p.Target)
33093309 if templ_7745c5c3_Err != nil {
3310- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 653, Col: 58}
3310+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 657, Col: 58}
33113311 }
33123312 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var157))
33133313 if templ_7745c5c3_Err != nil {
@@ -3320,7 +3320,7 @@ func Compare(l Layout, p ComparePage) templ.Component {
33203320 var templ_7745c5c3_Var158 string
33213321 templ_7745c5c3_Var158, templ_7745c5c3_Err = templ.JoinStringErrs(p.AheadText)
33223322 if templ_7745c5c3_Err != nil {
3323- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 655, Col: 21}
3323+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 659, Col: 21}
33243324 }
33253325 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var158))
33263326 if templ_7745c5c3_Err != nil {
@@ -3338,7 +3338,7 @@ func Compare(l Layout, p ComparePage) templ.Component {
33383338 var templ_7745c5c3_Var159 string
33393339 templ_7745c5c3_Var159, templ_7745c5c3_Err = templ.JoinStringErrs(p.Note)
33403340 if templ_7745c5c3_Err != nil {
3341- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 659, Col: 29}
3341+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 663, Col: 29}
33423342 }
33433343 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var159))
33443344 if templ_7745c5c3_Err != nil {
@@ -3361,7 +3361,7 @@ func Compare(l Layout, p ComparePage) templ.Component {
33613361 var templ_7745c5c3_Var160 templ.SafeURL
33623362 templ_7745c5c3_Var160, templ_7745c5c3_Err = templ.JoinURLErrs(templ.SafeURL(p.Existing.Href))
33633363 if templ_7745c5c3_Err != nil {
3364- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 662, Col: 114}
3364+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 666, Col: 114}
33653365 }
33663366 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var160))
33673367 if templ_7745c5c3_Err != nil {
@@ -3374,7 +3374,7 @@ func Compare(l Layout, p ComparePage) templ.Component {
33743374 var templ_7745c5c3_Var161 string
33753375 templ_7745c5c3_Var161, templ_7745c5c3_Err = templ.JoinStringErrs(p.Existing.Label)
33763376 if templ_7745c5c3_Err != nil {
3377- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 662, Col: 135}
3377+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 666, Col: 135}
33783378 }
33793379 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var161))
33803380 if templ_7745c5c3_Err != nil {
@@ -3397,7 +3397,7 @@ func Compare(l Layout, p ComparePage) templ.Component {
33973397 var templ_7745c5c3_Var162 templ.SafeURL
33983398 templ_7745c5c3_Var162, templ_7745c5c3_Err = templ.JoinURLErrs(templ.SafeURL(p.Create.Action))
33993399 if templ_7745c5c3_Err != nil {
3400- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 665, Col: 83}
3400+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 669, Col: 83}
34013401 }
34023402 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var162))
34033403 if templ_7745c5c3_Err != nil {
@@ -3410,7 +3410,7 @@ func Compare(l Layout, p ComparePage) templ.Component {
34103410 var templ_7745c5c3_Var163 string
34113411 templ_7745c5c3_Var163, templ_7745c5c3_Err = templ.ResolveAttributeValue(p.Create.Source)
34123412 if templ_7745c5c3_Err != nil {
3413- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 666, Col: 62}
3413+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 670, Col: 62}
34143414 }
34153415 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ_7745c5c3_Var163)
34163416 if templ_7745c5c3_Err != nil {
@@ -3423,7 +3423,7 @@ func Compare(l Layout, p ComparePage) templ.Component {
34233423 var templ_7745c5c3_Var164 string
34243424 templ_7745c5c3_Var164, templ_7745c5c3_Err = templ.ResolveAttributeValue(p.Create.Target)
34253425 if templ_7745c5c3_Err != nil {
3426- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 667, Col: 62}
3426+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 671, Col: 62}
34273427 }
34283428 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ_7745c5c3_Var164)
34293429 if templ_7745c5c3_Err != nil {
@@ -3436,7 +3436,7 @@ func Compare(l Layout, p ComparePage) templ.Component {
34363436 var templ_7745c5c3_Var165 string
34373437 templ_7745c5c3_Var165, templ_7745c5c3_Err = templ.ResolveAttributeValue(p.Create.Title)
34383438 if templ_7745c5c3_Err != nil {
3439- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 669, Col: 97}
3439+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 673, Col: 97}
34403440 }
34413441 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ_7745c5c3_Var165)
34423442 if templ_7745c5c3_Err != nil {
@@ -3459,7 +3459,7 @@ func Compare(l Layout, p ComparePage) templ.Component {
34593459 var templ_7745c5c3_Var166 string
34603460 templ_7745c5c3_Var166, templ_7745c5c3_Err = templ.JoinStringErrs(plural(p.NFiles, "file", "files"))
34613461 if templ_7745c5c3_Err != nil {
3462- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 679, Col: 57}
3462+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 683, Col: 57}
34633463 }
34643464 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var166))
34653465 if templ_7745c5c3_Err != nil {
@@ -3472,7 +3472,7 @@ func Compare(l Layout, p ComparePage) templ.Component {
34723472 var templ_7745c5c3_Var167 string
34733473 templ_7745c5c3_Var167, templ_7745c5c3_Err = templ.JoinStringErrs(itoa(p.Adds))
34743474 if templ_7745c5c3_Err != nil {
3475- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 679, Col: 97}
3475+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 683, Col: 97}
34763476 }
34773477 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var167))
34783478 if templ_7745c5c3_Err != nil {
@@ -3485,7 +3485,7 @@ func Compare(l Layout, p ComparePage) templ.Component {
34853485 var templ_7745c5c3_Var168 string
34863486 templ_7745c5c3_Var168, templ_7745c5c3_Err = templ.JoinStringErrs(itoa(p.Dels))
34873487 if templ_7745c5c3_Err != nil {
3488- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 679, Col: 142}
3488+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 683, Col: 142}
34893489 }
34903490 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var168))
34913491 if templ_7745c5c3_Err != nil {
@@ -3521,7 +3521,7 @@ func Compare(l Layout, p ComparePage) templ.Component {
35213521 var templ_7745c5c3_Var169 string
35223522 templ_7745c5c3_Var169, templ_7745c5c3_Err = templ.ResolveAttributeValue(p.View)
35233523 if templ_7745c5c3_Err != nil {
3524- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 692, Col: 23}
3524+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 696, Col: 23}
35253525 }
35263526 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ_7745c5c3_Var169)
35273527 if templ_7745c5c3_Err != nil {
@@ -3539,7 +3539,7 @@ func Compare(l Layout, p ComparePage) templ.Component {
35393539 var templ_7745c5c3_Var170 string
35403540 templ_7745c5c3_Var170, templ_7745c5c3_Err = templ.ResolveAttributeValue(p.View)
35413541 if templ_7745c5c3_Err != nil {
3542- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 694, Col: 23}
3542+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 698, Col: 23}
35433543 }
35443544 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ_7745c5c3_Var170)
35453545 if templ_7745c5c3_Err != nil {
@@ -3609,7 +3609,7 @@ func compareRail(p ComparePage) templ.Component {
36093609 var templ_7745c5c3_Var172 string
36103610 templ_7745c5c3_Var172, templ_7745c5c3_Err = templ.JoinStringErrs(itoa(len(p.Ahead)))
36113611 if templ_7745c5c3_Err != nil {
3612- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 710, Col: 67}
3612+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 714, Col: 67}
36133613 }
36143614 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var172))
36153615 if templ_7745c5c3_Err != nil {
@@ -3627,7 +3627,7 @@ func compareRail(p ComparePage) templ.Component {
36273627 var templ_7745c5c3_Var173 templ.SafeURL
36283628 templ_7745c5c3_Var173, templ_7745c5c3_Err = templ.JoinURLErrs(templ.SafeURL(c.CHref))
36293629 if templ_7745c5c3_Err != nil {
3630- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 714, Col: 37}
3630+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 718, Col: 37}
36313631 }
36323632 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var173))
36333633 if templ_7745c5c3_Err != nil {
@@ -3640,7 +3640,7 @@ func compareRail(p ComparePage) templ.Component {
36403640 var templ_7745c5c3_Var174 string
36413641 templ_7745c5c3_Var174, templ_7745c5c3_Err = templ.JoinStringErrs(c.Short)
36423642 if templ_7745c5c3_Err != nil {
3643- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 714, Col: 49}
3643+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 718, Col: 49}
36443644 }
36453645 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var174))
36463646 if templ_7745c5c3_Err != nil {
@@ -3653,7 +3653,7 @@ func compareRail(p ComparePage) templ.Component {
36533653 var templ_7745c5c3_Var175 string
36543654 templ_7745c5c3_Var175, templ_7745c5c3_Err = templ.JoinStringErrs(c.Subject)
36553655 if templ_7745c5c3_Err != nil {
3656- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 715, Col: 32}
3656+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 719, Col: 32}
36573657 }
36583658 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var175))
36593659 if templ_7745c5c3_Err != nil {
@@ -3666,7 +3666,7 @@ func compareRail(p ComparePage) templ.Component {
36663666 var templ_7745c5c3_Var176 string
36673667 templ_7745c5c3_Var176, templ_7745c5c3_Err = templ.JoinStringErrs(c.Author)
36683668 if templ_7745c5c3_Err != nil {
3669- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 717, Col: 16}
3669+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 721, Col: 16}
36703670 }
36713671 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var176))
36723672 if templ_7745c5c3_Err != nil {
@@ -3680,7 +3680,7 @@ func compareRail(p ComparePage) templ.Component {
36803680 var templ_7745c5c3_Var177 string
36813681 templ_7745c5c3_Var177, templ_7745c5c3_Err = templ.JoinStringErrs(" · ")
36823682 if templ_7745c5c3_Err != nil {
3683- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 719, Col: 15}
3683+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 723, Col: 15}
36843684 }
36853685 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var177))
36863686 if templ_7745c5c3_Err != nil {
@@ -3693,7 +3693,7 @@ func compareRail(p ComparePage) templ.Component {
36933693 var templ_7745c5c3_Var178 string
36943694 templ_7745c5c3_Var178, templ_7745c5c3_Err = templ.ResolveAttributeValue(c.WhenAt)
36953695 if templ_7745c5c3_Err != nil {
3696- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 719, Col: 42}
3696+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 723, Col: 42}
36973697 }
36983698 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ_7745c5c3_Var178)
36993699 if templ_7745c5c3_Err != nil {
@@ -3706,7 +3706,7 @@ func compareRail(p ComparePage) templ.Component {
37063706 var templ_7745c5c3_Var179 string
37073707 templ_7745c5c3_Var179, templ_7745c5c3_Err = templ.JoinStringErrs(c.When)
37083708 if templ_7745c5c3_Err != nil {
3709- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 719, Col: 53}
3709+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 723, Col: 53}
37103710 }
37113711 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var179))
37123712 if templ_7745c5c3_Err != nil {
@@ -3734,7 +3734,7 @@ func compareRail(p ComparePage) templ.Component {
37343734 var templ_7745c5c3_Var180 string
37353735 templ_7745c5c3_Var180, templ_7745c5c3_Err = templ.JoinStringErrs(p.Target)
37363736 if templ_7745c5c3_Err != nil {
3737- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 726, Col: 47}
3737+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 730, Col: 47}
37383738 }
37393739 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var180))
37403740 if templ_7745c5c3_Err != nil {
@@ -3757,7 +3757,7 @@ func compareRail(p ComparePage) templ.Component {
37573757 var templ_7745c5c3_Var181 string
37583758 templ_7745c5c3_Var181, templ_7745c5c3_Err = templ.JoinStringErrs(itoa(len(p.Files)))
37593759 if templ_7745c5c3_Err != nil {
3760- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 731, Col: 66}
3760+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 735, Col: 66}
37613761 }
37623762 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var181))
37633763 if templ_7745c5c3_Err != nil {
@@ -55,26 +55,30 @@ func MRList(l Layout, p MRListPage) templ.Component {
55 if templ_7745c5c3_Err != nil {55 if templ_7745c5c3_Err != nil {
56 return templ_7745c5c3_Err56 return templ_7745c5c3_Err
57 }57 }
58+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 1, " <div id=\"mr-refresh-status\" role=\"status\" aria-live=\"polite\"></div>")
59+ if templ_7745c5c3_Err != nil {
60+ return templ_7745c5c3_Err
61+ }
58 }62 }
59- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 1, " <div class=\"filter\"><label for=\"mr-filter\" class=\"sr\">filter</label> <input id=\"mr-filter\" type=\"search\" data-filter=\".mrs tbody tr\" placeholder=\"Filter by title, branch, author or state…\" autocomplete=\"off\" hx-on:input=\"ermite.filter(this)\"></div>")63+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 2, " <div class=\"filter\"><label for=\"mr-filter\" class=\"sr\">filter</label> <input id=\"mr-filter\" type=\"search\" data-filter=\".mrs tbody tr\" placeholder=\"Filter by title, branch, author or state…\" autocomplete=\"off\" hx-on:input=\"ermite.filter(this)\"></div>")
60 if templ_7745c5c3_Err != nil {64 if templ_7745c5c3_Err != nil {
61 return templ_7745c5c3_Err65 return templ_7745c5c3_Err
62 }66 }
63 if p.Newest == "" {67 if p.Newest == "" {
64- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 2, "<h2 class=\"rule-h\"><span>Open</span><span class=\"count\">")68+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 3, "<h2 class=\"rule-h\"><span>Open</span><span class=\"count\">")
65 if templ_7745c5c3_Err != nil {69 if templ_7745c5c3_Err != nil {
66 return templ_7745c5c3_Err70 return templ_7745c5c3_Err
67 }71 }
68 var templ_7745c5c3_Var3 string72 var templ_7745c5c3_Var3 string
69 templ_7745c5c3_Var3, templ_7745c5c3_Err = templ.JoinStringErrs(itoa(len(p.Open)))73 templ_7745c5c3_Var3, templ_7745c5c3_Err = templ.JoinStringErrs(itoa(len(p.Open)))
70 if templ_7745c5c3_Err != nil {74 if templ_7745c5c3_Err != nil {
71- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 29, Col: 78}75+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 30, Col: 78}
72 }76 }
73 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var3))77 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var3))
74 if templ_7745c5c3_Err != nil {78 if templ_7745c5c3_Err != nil {
75 return templ_7745c5c3_Err79 return templ_7745c5c3_Err
76 }80 }
77- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 3, "</span></h2>")81+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 4, "</span></h2>")
78 if templ_7745c5c3_Err != nil {82 if templ_7745c5c3_Err != nil {
79 return templ_7745c5c3_Err83 return templ_7745c5c3_Err
80 }84 }
@@ -82,54 +86,54 @@ func MRList(l Layout, p MRListPage) templ.Component {
82 if templ_7745c5c3_Err != nil {86 if templ_7745c5c3_Err != nil {
83 return templ_7745c5c3_Err87 return templ_7745c5c3_Err
84 }88 }
85- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 4, " ")89+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 5, " ")
86 if templ_7745c5c3_Err != nil {90 if templ_7745c5c3_Err != nil {
87 return templ_7745c5c3_Err91 return templ_7745c5c3_Err
88 }92 }
89 if len(p.Open) == 0 {93 if len(p.Open) == 0 {
90- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 5, "<p class=\"lede dim\">no open merge requests.</p>")94+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 6, "<p class=\"lede dim\">no open merge requests.</p>")
91 if templ_7745c5c3_Err != nil {95 if templ_7745c5c3_Err != nil {
92 return templ_7745c5c3_Err96 return templ_7745c5c3_Err
93 }97 }
94 }98 }
95- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 6, " ")99+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 7, " ")
96 if templ_7745c5c3_Err != nil {100 if templ_7745c5c3_Err != nil {
97 return templ_7745c5c3_Err101 return templ_7745c5c3_Err
98 }102 }
99 if p.OpenNote != "" {103 if p.OpenNote != "" {
100- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 7, "<p class=\"note\">")104+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 8, "<p class=\"note\">")
101 if templ_7745c5c3_Err != nil {105 if templ_7745c5c3_Err != nil {
102 return templ_7745c5c3_Err106 return templ_7745c5c3_Err
103 }107 }
104 var templ_7745c5c3_Var4 string108 var templ_7745c5c3_Var4 string
105 templ_7745c5c3_Var4, templ_7745c5c3_Err = templ.JoinStringErrs(p.OpenNote)109 templ_7745c5c3_Var4, templ_7745c5c3_Err = templ.JoinStringErrs(p.OpenNote)
106 if templ_7745c5c3_Err != nil {110 if templ_7745c5c3_Err != nil {
107- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 35, Col: 32}111+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 36, Col: 32}
108 }112 }
109 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var4))113 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var4))
110 if templ_7745c5c3_Err != nil {114 if templ_7745c5c3_Err != nil {
111 return templ_7745c5c3_Err115 return templ_7745c5c3_Err
112 }116 }
113- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 8, "</p>")117+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 9, "</p>")
114 if templ_7745c5c3_Err != nil {118 if templ_7745c5c3_Err != nil {
115 return templ_7745c5c3_Err119 return templ_7745c5c3_Err
116 }120 }
117 }121 }
118 }122 }
119- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 9, " <h2 class=\"rule-h\"><span>Merged and closed</span><span class=\"count\">")123+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 10, " <h2 class=\"rule-h\"><span>Merged and closed</span><span class=\"count\">")
120 if templ_7745c5c3_Err != nil {124 if templ_7745c5c3_Err != nil {
121 return templ_7745c5c3_Err125 return templ_7745c5c3_Err
122 }126 }
123 var templ_7745c5c3_Var5 string127 var templ_7745c5c3_Var5 string
124 templ_7745c5c3_Var5, templ_7745c5c3_Err = templ.JoinStringErrs(itoa(len(p.Done)))128 templ_7745c5c3_Var5, templ_7745c5c3_Err = templ.JoinStringErrs(itoa(len(p.Done)))
125 if templ_7745c5c3_Err != nil {129 if templ_7745c5c3_Err != nil {
126- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 38, Col: 90}130+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 39, Col: 90}
127 }131 }
128 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var5))132 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var5))
129 if templ_7745c5c3_Err != nil {133 if templ_7745c5c3_Err != nil {
130 return templ_7745c5c3_Err134 return templ_7745c5c3_Err
131 }135 }
132- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 10, "</span></h2>")136+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 11, "</span></h2>")
133 if templ_7745c5c3_Err != nil {137 if templ_7745c5c3_Err != nil {
134 return templ_7745c5c3_Err138 return templ_7745c5c3_Err
135 }139 }
@@ -137,74 +141,74 @@ func MRList(l Layout, p MRListPage) templ.Component {
137 if templ_7745c5c3_Err != nil {141 if templ_7745c5c3_Err != nil {
138 return templ_7745c5c3_Err142 return templ_7745c5c3_Err
139 }143 }
140- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 11, " ")144+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 12, " ")
141 if templ_7745c5c3_Err != nil {145 if templ_7745c5c3_Err != nil {
142 return templ_7745c5c3_Err146 return templ_7745c5c3_Err
143 }147 }
144 if len(p.Done) == 0 {148 if len(p.Done) == 0 {
145- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 12, "<p class=\"lede dim\">nothing merged or closed yet.</p>")149+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 13, "<p class=\"lede dim\">nothing merged or closed yet.</p>")
146 if templ_7745c5c3_Err != nil {150 if templ_7745c5c3_Err != nil {
147 return templ_7745c5c3_Err151 return templ_7745c5c3_Err
148 }152 }
149 }153 }
150- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 13, " ")154+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 14, " ")
151 if templ_7745c5c3_Err != nil {155 if templ_7745c5c3_Err != nil {
152 return templ_7745c5c3_Err156 return templ_7745c5c3_Err
153 }157 }
154 if p.Older != "" || p.Newest != "" {158 if p.Older != "" || p.Newest != "" {
155- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 14, "<nav class=\"pager\" aria-label=\"Pages\">")159+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 15, "<nav class=\"pager\" aria-label=\"Pages\">")
156 if templ_7745c5c3_Err != nil {160 if templ_7745c5c3_Err != nil {
157 return templ_7745c5c3_Err161 return templ_7745c5c3_Err
158 }162 }
159 if p.Newest != "" {163 if p.Newest != "" {
160- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 15, "<a class=\"btn\" href=\"")164+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 16, "<a class=\"btn\" href=\"")
161 if templ_7745c5c3_Err != nil {165 if templ_7745c5c3_Err != nil {
162 return templ_7745c5c3_Err166 return templ_7745c5c3_Err
163 }167 }
164 var templ_7745c5c3_Var6 templ.SafeURL168 var templ_7745c5c3_Var6 templ.SafeURL
165 templ_7745c5c3_Var6, templ_7745c5c3_Err = templ.JoinURLErrs(templ.SafeURL(p.Newest))169 templ_7745c5c3_Var6, templ_7745c5c3_Err = templ.JoinURLErrs(templ.SafeURL(p.Newest))
166 if templ_7745c5c3_Err != nil {170 if templ_7745c5c3_Err != nil {
167- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 46, Col: 50}171+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 47, Col: 50}
168 }172 }
169 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var6))173 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var6))
170 if templ_7745c5c3_Err != nil {174 if templ_7745c5c3_Err != nil {
171 return templ_7745c5c3_Err175 return templ_7745c5c3_Err
172 }176 }
173- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 16, "\">← Newest</a> ")177+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 17, "\">← Newest</a> ")
174 if templ_7745c5c3_Err != nil {178 if templ_7745c5c3_Err != nil {
175 return templ_7745c5c3_Err179 return templ_7745c5c3_Err
176 }180 }
177 } else {181 } else {
178- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 17, "<span class=\"btn\" aria-disabled=\"true\">← Newest</span> ")182+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 18, "<span class=\"btn\" aria-disabled=\"true\">← Newest</span> ")
179 if templ_7745c5c3_Err != nil {183 if templ_7745c5c3_Err != nil {
180 return templ_7745c5c3_Err184 return templ_7745c5c3_Err
181 }185 }
182 }186 }
183 if p.Older != "" {187 if p.Older != "" {
184- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 18, "<a class=\"btn\" href=\"")188+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 19, "<a class=\"btn\" href=\"")
185 if templ_7745c5c3_Err != nil {189 if templ_7745c5c3_Err != nil {
186 return templ_7745c5c3_Err190 return templ_7745c5c3_Err
187 }191 }
188 var templ_7745c5c3_Var7 templ.SafeURL192 var templ_7745c5c3_Var7 templ.SafeURL
189 templ_7745c5c3_Var7, templ_7745c5c3_Err = templ.JoinURLErrs(templ.SafeURL(p.Older))193 templ_7745c5c3_Var7, templ_7745c5c3_Err = templ.JoinURLErrs(templ.SafeURL(p.Older))
190 if templ_7745c5c3_Err != nil {194 if templ_7745c5c3_Err != nil {
191- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 51, Col: 49}195+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 52, Col: 49}
192 }196 }
193 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var7))197 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var7))
194 if templ_7745c5c3_Err != nil {198 if templ_7745c5c3_Err != nil {
195 return templ_7745c5c3_Err199 return templ_7745c5c3_Err
196 }200 }
197- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 19, "\" rel=\"next\">Older →</a>")201+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 20, "\" rel=\"next\">Older →</a>")
198 if templ_7745c5c3_Err != nil {202 if templ_7745c5c3_Err != nil {
199 return templ_7745c5c3_Err203 return templ_7745c5c3_Err
200 }204 }
201 } else {205 } else {
202- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 20, "<span class=\"btn\" aria-disabled=\"true\">Older →</span>")206+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 21, "<span class=\"btn\" aria-disabled=\"true\">Older →</span>")
203 if templ_7745c5c3_Err != nil {207 if templ_7745c5c3_Err != nil {
204 return templ_7745c5c3_Err208 return templ_7745c5c3_Err
205 }209 }
206 }210 }
207- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 21, "</nav>")211+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 22, "</nav>")
208 if templ_7745c5c3_Err != nil {212 if templ_7745c5c3_Err != nil {
209 return templ_7745c5c3_Err213 return templ_7745c5c3_Err
210 }214 }
@@ -241,180 +245,180 @@ func mrRows(rows []MRRow, label string) templ.Component {
241 }245 }
242 ctx = templ.ClearChildren(ctx)246 ctx = templ.ClearChildren(ctx)
243 if len(rows) > 0 {247 if len(rows) > 0 {
244- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 22, "<table class=\"list mrs\" aria-label=\"")248+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 23, "<table class=\"list mrs\" aria-label=\"")
245 if templ_7745c5c3_Err != nil {249 if templ_7745c5c3_Err != nil {
246 return templ_7745c5c3_Err250 return templ_7745c5c3_Err
247 }251 }
248 var templ_7745c5c3_Var9 string252 var templ_7745c5c3_Var9 string
249 templ_7745c5c3_Var9, templ_7745c5c3_Err = templ.ResolveAttributeValue(label)253 templ_7745c5c3_Var9, templ_7745c5c3_Err = templ.ResolveAttributeValue(label)
250 if templ_7745c5c3_Err != nil {254 if templ_7745c5c3_Err != nil {
251- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 62, Col: 44}255+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 63, Col: 44}
252 }256 }
253 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ_7745c5c3_Var9)257 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ_7745c5c3_Var9)
254 if templ_7745c5c3_Err != nil {258 if templ_7745c5c3_Err != nil {
255 return templ_7745c5c3_Err259 return templ_7745c5c3_Err
256 }260 }
257- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 23, "\"><tbody data-rows>")261+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 24, "\"><tbody data-rows>")
258 if templ_7745c5c3_Err != nil {262 if templ_7745c5c3_Err != nil {
259 return templ_7745c5c3_Err263 return templ_7745c5c3_Err
260 }264 }
261 for _, m := range rows {265 for _, m := range rows {
262- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 24, "<tr")266+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 25, "<tr")
263 if templ_7745c5c3_Err != nil {267 if templ_7745c5c3_Err != nil {
264 return templ_7745c5c3_Err268 return templ_7745c5c3_Err
265 }269 }
266 if m.Cursor {270 if m.Cursor {
267- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 25, " data-cursor")271+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 26, " data-cursor")
268 if templ_7745c5c3_Err != nil {272 if templ_7745c5c3_Err != nil {
269 return templ_7745c5c3_Err273 return templ_7745c5c3_Err
270 }274 }
271 }275 }
272- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 26, " data-state=\"")276+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 27, " data-state=\"")
273 if templ_7745c5c3_Err != nil {277 if templ_7745c5c3_Err != nil {
274 return templ_7745c5c3_Err278 return templ_7745c5c3_Err
275 }279 }
276 var templ_7745c5c3_Var10 string280 var templ_7745c5c3_Var10 string
277 templ_7745c5c3_Var10, templ_7745c5c3_Err = templ.ResolveAttributeValue(m.State)281 templ_7745c5c3_Var10, templ_7745c5c3_Err = templ.ResolveAttributeValue(m.State)
278 if templ_7745c5c3_Err != nil {282 if templ_7745c5c3_Err != nil {
279- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 65, Col: 55}283+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 66, Col: 55}
280 }284 }
281 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ_7745c5c3_Var10)285 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ_7745c5c3_Var10)
282 if templ_7745c5c3_Err != nil {286 if templ_7745c5c3_Err != nil {
283 return templ_7745c5c3_Err287 return templ_7745c5c3_Err
284 }288 }
285- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 27, "\"><td class=\"c-n mute\">")289+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 28, "\"><td class=\"c-n mute\">")
286 if templ_7745c5c3_Err != nil {290 if templ_7745c5c3_Err != nil {
287 return templ_7745c5c3_Err291 return templ_7745c5c3_Err
288 }292 }
289 var templ_7745c5c3_Var11 string293 var templ_7745c5c3_Var11 string
290 templ_7745c5c3_Var11, templ_7745c5c3_Err = templ.JoinStringErrs(m.Number)294 templ_7745c5c3_Var11, templ_7745c5c3_Err = templ.JoinStringErrs(m.Number)
291 if templ_7745c5c3_Err != nil {295 if templ_7745c5c3_Err != nil {
292- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 66, Col: 37}296+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 67, Col: 37}
293 }297 }
294 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var11))298 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var11))
295 if templ_7745c5c3_Err != nil {299 if templ_7745c5c3_Err != nil {
296 return templ_7745c5c3_Err300 return templ_7745c5c3_Err
297 }301 }
298- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 28, "</td><td class=\"c-state\">")302+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 29, "</td><td class=\"c-state\">")
299 if templ_7745c5c3_Err != nil {303 if templ_7745c5c3_Err != nil {
300 return templ_7745c5c3_Err304 return templ_7745c5c3_Err
301 }305 }
302 var templ_7745c5c3_Var12 string306 var templ_7745c5c3_Var12 string
303 templ_7745c5c3_Var12, templ_7745c5c3_Err = templ.JoinStringErrs(m.State)307 templ_7745c5c3_Var12, templ_7745c5c3_Err = templ.JoinStringErrs(m.State)
304 if templ_7745c5c3_Err != nil {308 if templ_7745c5c3_Err != nil {
305- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 67, Col: 35}309+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 68, Col: 35}
306 }310 }
307 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var12))311 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var12))
308 if templ_7745c5c3_Err != nil {312 if templ_7745c5c3_Err != nil {
309 return templ_7745c5c3_Err313 return templ_7745c5c3_Err
310 }314 }
311- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 29, "</td><td class=\"c-subject\"><a href=\"")315+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 30, "</td><td class=\"c-subject\"><a href=\"")
312 if templ_7745c5c3_Err != nil {316 if templ_7745c5c3_Err != nil {
313 return templ_7745c5c3_Err317 return templ_7745c5c3_Err
314 }318 }
315 var templ_7745c5c3_Var13 templ.SafeURL319 var templ_7745c5c3_Var13 templ.SafeURL
316 templ_7745c5c3_Var13, templ_7745c5c3_Err = templ.JoinURLErrs(templ.SafeURL(m.Href))320 templ_7745c5c3_Var13, templ_7745c5c3_Err = templ.JoinURLErrs(templ.SafeURL(m.Href))
317 if templ_7745c5c3_Err != nil {321 if templ_7745c5c3_Err != nil {
318- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 68, Col: 59}322+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 69, Col: 59}
319 }323 }
320 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var13))324 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var13))
321 if templ_7745c5c3_Err != nil {325 if templ_7745c5c3_Err != nil {
322 return templ_7745c5c3_Err326 return templ_7745c5c3_Err
323 }327 }
324- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 30, "\">")328+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 31, "\">")
325 if templ_7745c5c3_Err != nil {329 if templ_7745c5c3_Err != nil {
326 return templ_7745c5c3_Err330 return templ_7745c5c3_Err
327 }331 }
328 var templ_7745c5c3_Var14 string332 var templ_7745c5c3_Var14 string
329 templ_7745c5c3_Var14, templ_7745c5c3_Err = templ.JoinStringErrs(m.Title)333 templ_7745c5c3_Var14, templ_7745c5c3_Err = templ.JoinStringErrs(m.Title)
330 if templ_7745c5c3_Err != nil {334 if templ_7745c5c3_Err != nil {
331- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 68, Col: 71}335+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 69, Col: 71}
332 }336 }
333 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var14))337 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var14))
334 if templ_7745c5c3_Err != nil {338 if templ_7745c5c3_Err != nil {
335 return templ_7745c5c3_Err339 return templ_7745c5c3_Err
336 }340 }
337- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 31, "</a> <span class=\"mute\">")341+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 32, "</a> <span class=\"mute\">")
338 if templ_7745c5c3_Err != nil {342 if templ_7745c5c3_Err != nil {
339 return templ_7745c5c3_Err343 return templ_7745c5c3_Err
340 }344 }
341 var templ_7745c5c3_Var15 string345 var templ_7745c5c3_Var15 string
342 templ_7745c5c3_Var15, templ_7745c5c3_Err = templ.JoinStringErrs(m.Branches)346 templ_7745c5c3_Var15, templ_7745c5c3_Err = templ.JoinStringErrs(m.Branches)
343 if templ_7745c5c3_Err != nil {347 if templ_7745c5c3_Err != nil {
344- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 68, Col: 109}348+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 69, Col: 109}
345 }349 }
346 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var15))350 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var15))
347 if templ_7745c5c3_Err != nil {351 if templ_7745c5c3_Err != nil {
348 return templ_7745c5c3_Err352 return templ_7745c5c3_Err
349 }353 }
350- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 32, "</span></td><td class=\"c-who dim\">")354+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 33, "</span></td><td class=\"c-who dim\">")
351 if templ_7745c5c3_Err != nil {355 if templ_7745c5c3_Err != nil {
352 return templ_7745c5c3_Err356 return templ_7745c5c3_Err
353 }357 }
354 var templ_7745c5c3_Var16 string358 var templ_7745c5c3_Var16 string
355 templ_7745c5c3_Var16, templ_7745c5c3_Err = templ.JoinStringErrs(m.Author)359 templ_7745c5c3_Var16, templ_7745c5c3_Err = templ.JoinStringErrs(m.Author)
356 if templ_7745c5c3_Err != nil {360 if templ_7745c5c3_Err != nil {
357- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 69, Col: 38}361+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 70, Col: 38}
358 }362 }
359 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var16))363 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var16))
360 if templ_7745c5c3_Err != nil {364 if templ_7745c5c3_Err != nil {
361 return templ_7745c5c3_Err365 return templ_7745c5c3_Err
362 }366 }
363- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 33, "</td><td class=\"c-when nowrap dim\">")367+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 34, "</td><td class=\"c-when nowrap dim\">")
364 if templ_7745c5c3_Err != nil {368 if templ_7745c5c3_Err != nil {
365 return templ_7745c5c3_Err369 return templ_7745c5c3_Err
366 }370 }
367 if m.WhenAt != "" {371 if m.WhenAt != "" {
368- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 34, "<time datetime=\"")372+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 35, "<time datetime=\"")
369 if templ_7745c5c3_Err != nil {373 if templ_7745c5c3_Err != nil {
370 return templ_7745c5c3_Err374 return templ_7745c5c3_Err
371 }375 }
372 var templ_7745c5c3_Var17 string376 var templ_7745c5c3_Var17 string
373 templ_7745c5c3_Var17, templ_7745c5c3_Err = templ.ResolveAttributeValue(m.WhenAt)377 templ_7745c5c3_Var17, templ_7745c5c3_Err = templ.ResolveAttributeValue(m.WhenAt)
374 if templ_7745c5c3_Err != nil {378 if templ_7745c5c3_Err != nil {
375- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 72, Col: 33}379+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 73, Col: 33}
376 }380 }
377 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ_7745c5c3_Var17)381 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ_7745c5c3_Var17)
378 if templ_7745c5c3_Err != nil {382 if templ_7745c5c3_Err != nil {
379 return templ_7745c5c3_Err383 return templ_7745c5c3_Err
380 }384 }
381- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 35, "\" title=\"")385+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 36, "\" title=\"")
382 if templ_7745c5c3_Err != nil {386 if templ_7745c5c3_Err != nil {
383 return templ_7745c5c3_Err387 return templ_7745c5c3_Err
384 }388 }
385 var templ_7745c5c3_Var18 string389 var templ_7745c5c3_Var18 string
386 templ_7745c5c3_Var18, templ_7745c5c3_Err = templ.ResolveAttributeValue(m.WhenAt)390 templ_7745c5c3_Var18, templ_7745c5c3_Err = templ.ResolveAttributeValue(m.WhenAt)
387 if templ_7745c5c3_Err != nil {391 if templ_7745c5c3_Err != nil {
388- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 72, Col: 52}392+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 73, Col: 52}
389 }393 }
390 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ_7745c5c3_Var18)394 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ_7745c5c3_Var18)
391 if templ_7745c5c3_Err != nil {395 if templ_7745c5c3_Err != nil {
392 return templ_7745c5c3_Err396 return templ_7745c5c3_Err
393 }397 }
394- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 36, "\">")398+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 37, "\">")
395 if templ_7745c5c3_Err != nil {399 if templ_7745c5c3_Err != nil {
396 return templ_7745c5c3_Err400 return templ_7745c5c3_Err
397 }401 }
398 var templ_7745c5c3_Var19 string402 var templ_7745c5c3_Var19 string
399 templ_7745c5c3_Var19, templ_7745c5c3_Err = templ.JoinStringErrs(m.When)403 templ_7745c5c3_Var19, templ_7745c5c3_Err = templ.JoinStringErrs(m.When)
400 if templ_7745c5c3_Err != nil {404 if templ_7745c5c3_Err != nil {
401- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 72, Col: 63}405+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 73, Col: 63}
402 }406 }
403 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var19))407 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var19))
404 if templ_7745c5c3_Err != nil {408 if templ_7745c5c3_Err != nil {
405 return templ_7745c5c3_Err409 return templ_7745c5c3_Err
406 }410 }
407- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 37, "</time>")411+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 38, "</time>")
408 if templ_7745c5c3_Err != nil {412 if templ_7745c5c3_Err != nil {
409 return templ_7745c5c3_Err413 return templ_7745c5c3_Err
410 }414 }
411 }415 }
412- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 38, "</td></tr>")416+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 39, "</td></tr>")
413 if templ_7745c5c3_Err != nil {417 if templ_7745c5c3_Err != nil {
414 return templ_7745c5c3_Err418 return templ_7745c5c3_Err
415 }419 }
416 }420 }
417- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 39, "</tbody></table>")421+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 40, "</tbody></table>")
418 if templ_7745c5c3_Err != nil {422 if templ_7745c5c3_Err != nil {
419 return templ_7745c5c3_Err423 return templ_7745c5c3_Err
420 }424 }
@@ -444,66 +448,66 @@ func mrListRail(p MRListPage) templ.Component {
444 templ_7745c5c3_Var20 = templ.NopComponent448 templ_7745c5c3_Var20 = templ.NopComponent
445 }449 }
446 ctx = templ.ClearChildren(ctx)450 ctx = templ.ClearChildren(ctx)
447- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 40, "<section aria-labelledby=\"r-states\"><h2 id=\"r-states\">States</h2><dl class=\"kv\"><dt>open</dt><dd>awaits review</dd><dt>merged</dt><dd>the target took the branch</dd><dt>closed</dt><dd>refused, branch kept</dd></dl></section><section aria-labelledby=\"r-new\"><h2 id=\"r-new\">Open one</h2>")451+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 41, "<section aria-labelledby=\"r-states\"><h2 id=\"r-states\">States</h2><dl class=\"kv\"><dt>open</dt><dd>awaits review</dd><dt>merged</dt><dd>the target took the branch</dd><dt>closed</dt><dd>refused, branch kept</dd></dl></section><section aria-labelledby=\"r-new\"><h2 id=\"r-new\">Open one</h2>")
448 if templ_7745c5c3_Err != nil {452 if templ_7745c5c3_Err != nil {
449 return templ_7745c5c3_Err453 return templ_7745c5c3_Err
450 }454 }
451 if len(p.Branches) > 0 {455 if len(p.Branches) > 0 {
452- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 41, "<p class=\"dim\">compare a branch with ")456+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 42, "<p class=\"dim\">compare a branch with ")
453 if templ_7745c5c3_Err != nil {457 if templ_7745c5c3_Err != nil {
454 return templ_7745c5c3_Err458 return templ_7745c5c3_Err
455 }459 }
456 var templ_7745c5c3_Var21 string460 var templ_7745c5c3_Var21 string
457 templ_7745c5c3_Var21, templ_7745c5c3_Err = templ.JoinStringErrs(p.Default)461 templ_7745c5c3_Var21, templ_7745c5c3_Err = templ.JoinStringErrs(p.Default)
458 if templ_7745c5c3_Err != nil {462 if templ_7745c5c3_Err != nil {
459- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 97, Col: 51}463+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 98, Col: 51}
460 }464 }
461 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var21))465 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var21))
462 if templ_7745c5c3_Err != nil {466 if templ_7745c5c3_Err != nil {
463 return templ_7745c5c3_Err467 return templ_7745c5c3_Err
464 }468 }
465- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 42, ":</p><nav class=\"outline\" aria-label=\"Branches\">")469+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 43, ":</p><nav class=\"outline\" aria-label=\"Branches\">")
466 if templ_7745c5c3_Err != nil {470 if templ_7745c5c3_Err != nil {
467 return templ_7745c5c3_Err471 return templ_7745c5c3_Err
468 }472 }
469 for _, b := range p.Branches {473 for _, b := range p.Branches {
470- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 43, "<a href=\"")474+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 44, "<a href=\"")
471 if templ_7745c5c3_Err != nil {475 if templ_7745c5c3_Err != nil {
472 return templ_7745c5c3_Err476 return templ_7745c5c3_Err
473 }477 }
474 var templ_7745c5c3_Var22 templ.SafeURL478 var templ_7745c5c3_Var22 templ.SafeURL
475 templ_7745c5c3_Var22, templ_7745c5c3_Err = templ.JoinURLErrs(templ.SafeURL(b.Href))479 templ_7745c5c3_Var22, templ_7745c5c3_Err = templ.JoinURLErrs(templ.SafeURL(b.Href))
476 if templ_7745c5c3_Err != nil {480 if templ_7745c5c3_Err != nil {
477- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 100, Col: 36}481+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 101, Col: 36}
478 }482 }
479 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var22))483 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var22))
480 if templ_7745c5c3_Err != nil {484 if templ_7745c5c3_Err != nil {
481 return templ_7745c5c3_Err485 return templ_7745c5c3_Err
482 }486 }
483- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 44, "\">")487+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 45, "\">")
484 if templ_7745c5c3_Err != nil {488 if templ_7745c5c3_Err != nil {
485 return templ_7745c5c3_Err489 return templ_7745c5c3_Err
486 }490 }
487 var templ_7745c5c3_Var23 string491 var templ_7745c5c3_Var23 string
488 templ_7745c5c3_Var23, templ_7745c5c3_Err = templ.JoinStringErrs(b.Name)492 templ_7745c5c3_Var23, templ_7745c5c3_Err = templ.JoinStringErrs(b.Name)
489 if templ_7745c5c3_Err != nil {493 if templ_7745c5c3_Err != nil {
490- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 100, Col: 47}494+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 101, Col: 47}
491 }495 }
492 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var23))496 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var23))
493 if templ_7745c5c3_Err != nil {497 if templ_7745c5c3_Err != nil {
494 return templ_7745c5c3_Err498 return templ_7745c5c3_Err
495 }499 }
496- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 45, "</a>")500+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 46, "</a>")
497 if templ_7745c5c3_Err != nil {501 if templ_7745c5c3_Err != nil {
498 return templ_7745c5c3_Err502 return templ_7745c5c3_Err
499 }503 }
500 }504 }
501- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 46, "</nav>")505+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 47, "</nav>")
502 if templ_7745c5c3_Err != nil {506 if templ_7745c5c3_Err != nil {
503 return templ_7745c5c3_Err507 return templ_7745c5c3_Err
504 }508 }
505 } else {509 } else {
506- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 47, "<p class=\"dim\">there is no other branch to merge yet.</p>")510+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 48, "<p class=\"dim\">there is no other branch to merge yet.</p>")
507 if templ_7745c5c3_Err != nil {511 if templ_7745c5c3_Err != nil {
508 return templ_7745c5c3_Err512 return templ_7745c5c3_Err
509 }513 }
@@ -512,7 +516,7 @@ func mrListRail(p MRListPage) templ.Component {
512 if templ_7745c5c3_Err != nil {516 if templ_7745c5c3_Err != nil {
513 return templ_7745c5c3_Err517 return templ_7745c5c3_Err
514 }518 }
515- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 48, "</section>")519+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 49, "</section>")
516 if templ_7745c5c3_Err != nil {520 if templ_7745c5c3_Err != nil {
517 return templ_7745c5c3_Err521 return templ_7745c5c3_Err
518 }522 }
@@ -557,59 +561,59 @@ func MergeRequest(l Layout, p MRPage) templ.Component {
557 }()561 }()
558 }562 }
559 ctx = templ.InitializeContext(ctx)563 ctx = templ.InitializeContext(ctx)
560- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 49, "<section class=\"mr-card\"><header class=\"show mr-h\"><h1><span class=\"mute\">")564+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 50, "<section class=\"mr-card\"><header class=\"show mr-h\"><h1><span class=\"mute\">")
561 if templ_7745c5c3_Err != nil {565 if templ_7745c5c3_Err != nil {
562 return templ_7745c5c3_Err566 return templ_7745c5c3_Err
563 }567 }
564 var templ_7745c5c3_Var26 string568 var templ_7745c5c3_Var26 string
565 templ_7745c5c3_Var26, templ_7745c5c3_Err = templ.JoinStringErrs(p.Number)569 templ_7745c5c3_Var26, templ_7745c5c3_Err = templ.JoinStringErrs(p.Number)
566 if templ_7745c5c3_Err != nil {570 if templ_7745c5c3_Err != nil {
567- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 118, Col: 37}571+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 119, Col: 37}
568 }572 }
569 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var26))573 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var26))
570 if templ_7745c5c3_Err != nil {574 if templ_7745c5c3_Err != nil {
571 return templ_7745c5c3_Err575 return templ_7745c5c3_Err
572 }576 }
573- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 50, "</span> ")577+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 51, "</span> ")
574 if templ_7745c5c3_Err != nil {578 if templ_7745c5c3_Err != nil {
575 return templ_7745c5c3_Err579 return templ_7745c5c3_Err
576 }580 }
577 var templ_7745c5c3_Var27 string581 var templ_7745c5c3_Var27 string
578 templ_7745c5c3_Var27, templ_7745c5c3_Err = templ.JoinStringErrs(p.Title)582 templ_7745c5c3_Var27, templ_7745c5c3_Err = templ.JoinStringErrs(p.Title)
579 if templ_7745c5c3_Err != nil {583 if templ_7745c5c3_Err != nil {
580- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 118, Col: 56}584+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 119, Col: 56}
581 }585 }
582 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var27))586 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var27))
583 if templ_7745c5c3_Err != nil {587 if templ_7745c5c3_Err != nil {
584 return templ_7745c5c3_Err588 return templ_7745c5c3_Err
585 }589 }
586- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 51, "</h1><dl class=\"kv show-kv\"><dt>state</dt><dd class=\"mr-state\" data-state=\"")590+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 52, "</h1><dl class=\"kv show-kv\"><dt>state</dt><dd class=\"mr-state\" data-state=\"")
587 if templ_7745c5c3_Err != nil {591 if templ_7745c5c3_Err != nil {
588 return templ_7745c5c3_Err592 return templ_7745c5c3_Err
589 }593 }
590 var templ_7745c5c3_Var28 string594 var templ_7745c5c3_Var28 string
591 templ_7745c5c3_Var28, templ_7745c5c3_Err = templ.ResolveAttributeValue(p.State)595 templ_7745c5c3_Var28, templ_7745c5c3_Err = templ.ResolveAttributeValue(p.State)
592 if templ_7745c5c3_Err != nil {596 if templ_7745c5c3_Err != nil {
593- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 121, Col: 46}597+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 122, Col: 46}
594 }598 }
595 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ_7745c5c3_Var28)599 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ_7745c5c3_Var28)
596 if templ_7745c5c3_Err != nil {600 if templ_7745c5c3_Err != nil {
597 return templ_7745c5c3_Err601 return templ_7745c5c3_Err
598 }602 }
599- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 52, "\">")603+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 53, "\">")
600 if templ_7745c5c3_Err != nil {604 if templ_7745c5c3_Err != nil {
601 return templ_7745c5c3_Err605 return templ_7745c5c3_Err
602 }606 }
603 var templ_7745c5c3_Var29 string607 var templ_7745c5c3_Var29 string
604 templ_7745c5c3_Var29, templ_7745c5c3_Err = templ.JoinStringErrs(p.State)608 templ_7745c5c3_Var29, templ_7745c5c3_Err = templ.JoinStringErrs(p.State)
605 if templ_7745c5c3_Err != nil {609 if templ_7745c5c3_Err != nil {
606- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 122, Col: 15}610+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 123, Col: 15}
607 }611 }
608 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var29))612 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var29))
609 if templ_7745c5c3_Err != nil {613 if templ_7745c5c3_Err != nil {
610 return templ_7745c5c3_Err614 return templ_7745c5c3_Err
611 }615 }
612- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 53, " ")616+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 54, " ")
613 if templ_7745c5c3_Err != nil {617 if templ_7745c5c3_Err != nil {
614 return templ_7745c5c3_Err618 return templ_7745c5c3_Err
615 }619 }
@@ -617,53 +621,53 @@ func MergeRequest(l Layout, p MRPage) templ.Component {
617 var templ_7745c5c3_Var30 string621 var templ_7745c5c3_Var30 string
618 templ_7745c5c3_Var30, templ_7745c5c3_Err = templ.JoinStringErrs(" · ")622 templ_7745c5c3_Var30, templ_7745c5c3_Err = templ.JoinStringErrs(" · ")
619 if templ_7745c5c3_Err != nil {623 if templ_7745c5c3_Err != nil {
620- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 124, Col: 15}624+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 125, Col: 15}
621 }625 }
622 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var30))626 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var30))
623 if templ_7745c5c3_Err != nil {627 if templ_7745c5c3_Err != nil {
624 return templ_7745c5c3_Err628 return templ_7745c5c3_Err
625 }629 }
626- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 54, "<a href=\"")630+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 55, "<a href=\"")
627 if templ_7745c5c3_Err != nil {631 if templ_7745c5c3_Err != nil {
628 return templ_7745c5c3_Err632 return templ_7745c5c3_Err
629 }633 }
630 var templ_7745c5c3_Var31 templ.SafeURL634 var templ_7745c5c3_Var31 templ.SafeURL
631 templ_7745c5c3_Var31, templ_7745c5c3_Err = templ.JoinURLErrs(templ.SafeURL(p.MergedHref))635 templ_7745c5c3_Var31, templ_7745c5c3_Err = templ.JoinURLErrs(templ.SafeURL(p.MergedHref))
632 if templ_7745c5c3_Err != nil {636 if templ_7745c5c3_Err != nil {
633- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 124, Col: 54}637+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 125, Col: 54}
634 }638 }
635 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var31))639 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var31))
636 if templ_7745c5c3_Err != nil {640 if templ_7745c5c3_Err != nil {
637 return templ_7745c5c3_Err641 return templ_7745c5c3_Err
638 }642 }
639- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 55, "\">")643+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 56, "\">")
640 if templ_7745c5c3_Err != nil {644 if templ_7745c5c3_Err != nil {
641 return templ_7745c5c3_Err645 return templ_7745c5c3_Err
642 }646 }
643 var templ_7745c5c3_Var32 string647 var templ_7745c5c3_Var32 string
644 templ_7745c5c3_Var32, templ_7745c5c3_Err = templ.JoinStringErrs(p.MergedShort)648 templ_7745c5c3_Var32, templ_7745c5c3_Err = templ.JoinStringErrs(p.MergedShort)
645 if templ_7745c5c3_Err != nil {649 if templ_7745c5c3_Err != nil {
646- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 124, Col: 72}650+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 125, Col: 72}
647 }651 }
648 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var32))652 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var32))
649 if templ_7745c5c3_Err != nil {653 if templ_7745c5c3_Err != nil {
650 return templ_7745c5c3_Err654 return templ_7745c5c3_Err
651 }655 }
652- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 56, "</a>")656+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 57, "</a>")
653 if templ_7745c5c3_Err != nil {657 if templ_7745c5c3_Err != nil {
654 return templ_7745c5c3_Err658 return templ_7745c5c3_Err
655 }659 }
656 var templ_7745c5c3_Var33 string660 var templ_7745c5c3_Var33 string
657 templ_7745c5c3_Var33, templ_7745c5c3_Err = templ.JoinStringErrs(" · " + p.MergeMode)661 templ_7745c5c3_Var33, templ_7745c5c3_Err = templ.JoinStringErrs(" · " + p.MergeMode)
658 if templ_7745c5c3_Err != nil {662 if templ_7745c5c3_Err != nil {
659- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 124, Col: 100}663+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 125, Col: 100}
660 }664 }
661 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var33))665 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var33))
662 if templ_7745c5c3_Err != nil {666 if templ_7745c5c3_Err != nil {
663 return templ_7745c5c3_Err667 return templ_7745c5c3_Err
664 }668 }
665 }669 }
666- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 57, "</dd><dt>branch</dt><dd>")670+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 58, "</dd><dt>branch</dt><dd>")
667 if templ_7745c5c3_Err != nil {671 if templ_7745c5c3_Err != nil {
668 return templ_7745c5c3_Err672 return templ_7745c5c3_Err
669 }673 }
@@ -674,7 +678,7 @@ func MergeRequest(l Layout, p MRPage) templ.Component {
674 var templ_7745c5c3_Var34 string678 var templ_7745c5c3_Var34 string
675 templ_7745c5c3_Var34, templ_7745c5c3_Err = templ.JoinStringErrs(" → ")679 templ_7745c5c3_Var34, templ_7745c5c3_Err = templ.JoinStringErrs(" → ")
676 if templ_7745c5c3_Err != nil {680 if templ_7745c5c3_Err != nil {
677- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 130, Col: 15}681+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 131, Col: 15}
678 }682 }
679 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var34))683 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var34))
680 if templ_7745c5c3_Err != nil {684 if templ_7745c5c3_Err != nil {
@@ -684,20 +688,20 @@ func MergeRequest(l Layout, p MRPage) templ.Component {
684 if templ_7745c5c3_Err != nil {688 if templ_7745c5c3_Err != nil {
685 return templ_7745c5c3_Err689 return templ_7745c5c3_Err
686 }690 }
687- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 58, "</dd><dt>opened</dt><dd>")691+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 59, "</dd><dt>opened</dt><dd>")
688 if templ_7745c5c3_Err != nil {692 if templ_7745c5c3_Err != nil {
689 return templ_7745c5c3_Err693 return templ_7745c5c3_Err
690 }694 }
691 var templ_7745c5c3_Var35 string695 var templ_7745c5c3_Var35 string
692 templ_7745c5c3_Var35, templ_7745c5c3_Err = templ.JoinStringErrs(p.Opened.Name)696 templ_7745c5c3_Var35, templ_7745c5c3_Err = templ.JoinStringErrs(p.Opened.Name)
693 if templ_7745c5c3_Err != nil {697 if templ_7745c5c3_Err != nil {
694- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 135, Col: 21}698+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 136, Col: 21}
695 }699 }
696 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var35))700 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var35))
697 if templ_7745c5c3_Err != nil {701 if templ_7745c5c3_Err != nil {
698 return templ_7745c5c3_Err702 return templ_7745c5c3_Err
699 }703 }
700- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 59, " ")704+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 60, " ")
701 if templ_7745c5c3_Err != nil {705 if templ_7745c5c3_Err != nil {
702 return templ_7745c5c3_Err706 return templ_7745c5c3_Err
703 }707 }
@@ -705,98 +709,98 @@ func MergeRequest(l Layout, p MRPage) templ.Component {
705 var templ_7745c5c3_Var36 string709 var templ_7745c5c3_Var36 string
706 templ_7745c5c3_Var36, templ_7745c5c3_Err = templ.JoinStringErrs(" · ")710 templ_7745c5c3_Var36, templ_7745c5c3_Err = templ.JoinStringErrs(" · ")
707 if templ_7745c5c3_Err != nil {711 if templ_7745c5c3_Err != nil {
708- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 137, Col: 15}712+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 138, Col: 15}
709 }713 }
710 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var36))714 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var36))
711 if templ_7745c5c3_Err != nil {715 if templ_7745c5c3_Err != nil {
712 return templ_7745c5c3_Err716 return templ_7745c5c3_Err
713 }717 }
714- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 60, "<time datetime=\"")718+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 61, "<time datetime=\"")
715 if templ_7745c5c3_Err != nil {719 if templ_7745c5c3_Err != nil {
716 return templ_7745c5c3_Err720 return templ_7745c5c3_Err
717 }721 }
718 var templ_7745c5c3_Var37 string722 var templ_7745c5c3_Var37 string
719 templ_7745c5c3_Var37, templ_7745c5c3_Err = templ.ResolveAttributeValue(p.Opened.WhenAt)723 templ_7745c5c3_Var37, templ_7745c5c3_Err = templ.ResolveAttributeValue(p.Opened.WhenAt)
720 if templ_7745c5c3_Err != nil {724 if templ_7745c5c3_Err != nil {
721- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 137, Col: 49}725+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 138, Col: 49}
722 }726 }
723 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ_7745c5c3_Var37)727 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ_7745c5c3_Var37)
724 if templ_7745c5c3_Err != nil {728 if templ_7745c5c3_Err != nil {
725 return templ_7745c5c3_Err729 return templ_7745c5c3_Err
726 }730 }
727- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 61, "\" title=\"")731+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 62, "\" title=\"")
728 if templ_7745c5c3_Err != nil {732 if templ_7745c5c3_Err != nil {
729 return templ_7745c5c3_Err733 return templ_7745c5c3_Err
730 }734 }
731 var templ_7745c5c3_Var38 string735 var templ_7745c5c3_Var38 string
732 templ_7745c5c3_Var38, templ_7745c5c3_Err = templ.ResolveAttributeValue(p.Opened.Abs)736 templ_7745c5c3_Var38, templ_7745c5c3_Err = templ.ResolveAttributeValue(p.Opened.Abs)
733 if templ_7745c5c3_Err != nil {737 if templ_7745c5c3_Err != nil {
734- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 137, Col: 72}738+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 138, Col: 72}
735 }739 }
736 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ_7745c5c3_Var38)740 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ_7745c5c3_Var38)
737 if templ_7745c5c3_Err != nil {741 if templ_7745c5c3_Err != nil {
738 return templ_7745c5c3_Err742 return templ_7745c5c3_Err
739 }743 }
740- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 62, "\">")744+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 63, "\">")
741 if templ_7745c5c3_Err != nil {745 if templ_7745c5c3_Err != nil {
742 return templ_7745c5c3_Err746 return templ_7745c5c3_Err
743 }747 }
744 var templ_7745c5c3_Var39 string748 var templ_7745c5c3_Var39 string
745 templ_7745c5c3_Var39, templ_7745c5c3_Err = templ.JoinStringErrs(p.Opened.When)749 templ_7745c5c3_Var39, templ_7745c5c3_Err = templ.JoinStringErrs(p.Opened.When)
746 if templ_7745c5c3_Err != nil {750 if templ_7745c5c3_Err != nil {
747- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 137, Col: 90}751+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 138, Col: 90}
748 }752 }
749 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var39))753 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var39))
750 if templ_7745c5c3_Err != nil {754 if templ_7745c5c3_Err != nil {
751 return templ_7745c5c3_Err755 return templ_7745c5c3_Err
752 }756 }
753- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 63, "</time>")757+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 64, "</time>")
754 if templ_7745c5c3_Err != nil {758 if templ_7745c5c3_Err != nil {
755 return templ_7745c5c3_Err759 return templ_7745c5c3_Err
756 }760 }
757 }761 }
758- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 64, "</dd>")762+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 65, "</dd>")
759 if templ_7745c5c3_Err != nil {763 if templ_7745c5c3_Err != nil {
760 return templ_7745c5c3_Err764 return templ_7745c5c3_Err
761 }765 }
762 if p.UpdatedAt != "" {766 if p.UpdatedAt != "" {
763- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 65, "<dt>updated</dt><dd><time datetime=\"")767+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 66, "<dt>updated</dt><dd><time datetime=\"")
764 if templ_7745c5c3_Err != nil {768 if templ_7745c5c3_Err != nil {
765 return templ_7745c5c3_Err769 return templ_7745c5c3_Err
766 }770 }
767 var templ_7745c5c3_Var40 string771 var templ_7745c5c3_Var40 string
768 templ_7745c5c3_Var40, templ_7745c5c3_Err = templ.ResolveAttributeValue(p.UpdatedAt)772 templ_7745c5c3_Var40, templ_7745c5c3_Err = templ.ResolveAttributeValue(p.UpdatedAt)
769 if templ_7745c5c3_Err != nil {773 if templ_7745c5c3_Err != nil {
770- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 142, Col: 38}774+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 143, Col: 38}
771 }775 }
772 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ_7745c5c3_Var40)776 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ_7745c5c3_Var40)
773 if templ_7745c5c3_Err != nil {777 if templ_7745c5c3_Err != nil {
774 return templ_7745c5c3_Err778 return templ_7745c5c3_Err
775 }779 }
776- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 66, "\">")780+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 67, "\">")
777 if templ_7745c5c3_Err != nil {781 if templ_7745c5c3_Err != nil {
778 return templ_7745c5c3_Err782 return templ_7745c5c3_Err
779 }783 }
780 var templ_7745c5c3_Var41 string784 var templ_7745c5c3_Var41 string
781 templ_7745c5c3_Var41, templ_7745c5c3_Err = templ.JoinStringErrs(p.Updated)785 templ_7745c5c3_Var41, templ_7745c5c3_Err = templ.JoinStringErrs(p.Updated)
782 if templ_7745c5c3_Err != nil {786 if templ_7745c5c3_Err != nil {
783- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 142, Col: 52}787+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 143, Col: 52}
784 }788 }
785 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var41))789 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var41))
786 if templ_7745c5c3_Err != nil {790 if templ_7745c5c3_Err != nil {
787 return templ_7745c5c3_Err791 return templ_7745c5c3_Err
788 }792 }
789- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 67, "</time></dd>")793+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 68, "</time></dd>")
790 if templ_7745c5c3_Err != nil {794 if templ_7745c5c3_Err != nil {
791 return templ_7745c5c3_Err795 return templ_7745c5c3_Err
792 }796 }
793 }797 }
794- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 68, "</dl></header>")798+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 69, "</dl></header>")
795 if templ_7745c5c3_Err != nil {799 if templ_7745c5c3_Err != nil {
796 return templ_7745c5c3_Err800 return templ_7745c5c3_Err
797 }801 }
798 if p.Desc != "" {802 if p.Desc != "" {
799- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 69, "<article class=\"mr-desc prose\" aria-label=\"description\" hx-ignore>")803+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 70, "<article class=\"mr-desc prose\" aria-label=\"description\" hx-ignore>")
800 if templ_7745c5c3_Err != nil {804 if templ_7745c5c3_Err != nil {
801 return templ_7745c5c3_Err805 return templ_7745c5c3_Err
802 }806 }
@@ -804,7 +808,7 @@ func MergeRequest(l Layout, p MRPage) templ.Component {
804 if templ_7745c5c3_Err != nil {808 if templ_7745c5c3_Err != nil {
805 return templ_7745c5c3_Err809 return templ_7745c5c3_Err
806 }810 }
807- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 70, "</article>")811+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 71, "</article>")
808 if templ_7745c5c3_Err != nil {812 if templ_7745c5c3_Err != nil {
809 return templ_7745c5c3_Err813 return templ_7745c5c3_Err
810 }814 }
@@ -813,53 +817,53 @@ func MergeRequest(l Layout, p MRPage) templ.Component {
813 if templ_7745c5c3_Err != nil {817 if templ_7745c5c3_Err != nil {
814 return templ_7745c5c3_Err818 return templ_7745c5c3_Err
815 }819 }
816- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 71, "</section>")820+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 72, "</section>")
817 if templ_7745c5c3_Err != nil {821 if templ_7745c5c3_Err != nil {
818 return templ_7745c5c3_Err822 return templ_7745c5c3_Err
819 }823 }
820 if p.Deleting != "" {824 if p.Deleting != "" {
821- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 72, "<p class=\"note\" role=\"status\">merged. the branch ")825+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 73, "<p class=\"note\" role=\"status\">merged. the branch ")
822 if templ_7745c5c3_Err != nil {826 if templ_7745c5c3_Err != nil {
823 return templ_7745c5c3_Err827 return templ_7745c5c3_Err
824 }828 }
825 var templ_7745c5c3_Var42 string829 var templ_7745c5c3_Var42 string
826 templ_7745c5c3_Var42, templ_7745c5c3_Err = templ.JoinStringErrs(p.Deleting)830 templ_7745c5c3_Var42, templ_7745c5c3_Err = templ.JoinStringErrs(p.Deleting)
827 if templ_7745c5c3_Err != nil {831 if templ_7745c5c3_Err != nil {
828- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 154, Col: 64}832+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 155, Col: 64}
829 }833 }
830 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var42))834 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var42))
831 if templ_7745c5c3_Err != nil {835 if templ_7745c5c3_Err != nil {
832 return templ_7745c5c3_Err836 return templ_7745c5c3_Err
833 }837 }
834- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 73, " is being deleted.</p>")838+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 74, " is being deleted.</p>")
835 if templ_7745c5c3_Err != nil {839 if templ_7745c5c3_Err != nil {
836 return templ_7745c5c3_Err840 return templ_7745c5c3_Err
837 }841 }
838 }842 }
839- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 74, " ")843+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 75, " ")
840 if templ_7745c5c3_Err != nil {844 if templ_7745c5c3_Err != nil {
841 return templ_7745c5c3_Err845 return templ_7745c5c3_Err
842 }846 }
843 if p.MergeError != "" {847 if p.MergeError != "" {
844- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 75, "<p class=\"d-err\" role=\"alert\">")848+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 76, "<p class=\"d-err\" role=\"alert\">")
845 if templ_7745c5c3_Err != nil {849 if templ_7745c5c3_Err != nil {
846 return templ_7745c5c3_Err850 return templ_7745c5c3_Err
847 }851 }
848 var templ_7745c5c3_Var43 string852 var templ_7745c5c3_Var43 string
849 templ_7745c5c3_Var43, templ_7745c5c3_Err = templ.JoinStringErrs(p.MergeError)853 templ_7745c5c3_Var43, templ_7745c5c3_Err = templ.JoinStringErrs(p.MergeError)
850 if templ_7745c5c3_Err != nil {854 if templ_7745c5c3_Err != nil {
851- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 157, Col: 47}855+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 158, Col: 47}
852 }856 }
853 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var43))857 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var43))
854 if templ_7745c5c3_Err != nil {858 if templ_7745c5c3_Err != nil {
855 return templ_7745c5c3_Err859 return templ_7745c5c3_Err
856 }860 }
857- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 76, "</p>")861+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 77, "</p>")
858 if templ_7745c5c3_Err != nil {862 if templ_7745c5c3_Err != nil {
859 return templ_7745c5c3_Err863 return templ_7745c5c3_Err
860 }864 }
861 }865 }
862- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 77, " ")866+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 78, " ")
863 if templ_7745c5c3_Err != nil {867 if templ_7745c5c3_Err != nil {
864 return templ_7745c5c3_Err868 return templ_7745c5c3_Err
865 }869 }
@@ -867,131 +871,131 @@ func MergeRequest(l Layout, p MRPage) templ.Component {
867 if templ_7745c5c3_Err != nil {871 if templ_7745c5c3_Err != nil {
868 return templ_7745c5c3_Err872 return templ_7745c5c3_Err
869 }873 }
870- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 78, " <div id=\"mr-range\"")874+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 79, " <div id=\"mr-refresh-status\" role=\"status\" aria-live=\"polite\"></div><div id=\"mr-range\"")
871 if templ_7745c5c3_Err != nil {875 if templ_7745c5c3_Err != nil {
872 return templ_7745c5c3_Err876 return templ_7745c5c3_Err
873 }877 }
874 if p.Since == nil && p.SinceNote == "" {878 if p.Since == nil && p.SinceNote == "" {
875- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 79, " hidden")879+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 80, " hidden")
876 if templ_7745c5c3_Err != nil {880 if templ_7745c5c3_Err != nil {
877 return templ_7745c5c3_Err881 return templ_7745c5c3_Err
878 }882 }
879 }883 }
880- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 80, ">")884+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 81, ">")
881 if templ_7745c5c3_Err != nil {885 if templ_7745c5c3_Err != nil {
882 return templ_7745c5c3_Err886 return templ_7745c5c3_Err
883 }887 }
884 if p.Since != nil {888 if p.Since != nil {
885- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 81, "<nav class=\"since\" aria-label=\"Diff range\"><a href=\"")889+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 82, "<nav class=\"since\" aria-label=\"Diff range\"><a href=\"")
886 if templ_7745c5c3_Err != nil {890 if templ_7745c5c3_Err != nil {
887 return templ_7745c5c3_Err891 return templ_7745c5c3_Err
888 }892 }
889 var templ_7745c5c3_Var44 templ.SafeURL893 var templ_7745c5c3_Var44 templ.SafeURL
890 templ_7745c5c3_Var44, templ_7745c5c3_Err = templ.JoinURLErrs(templ.SafeURL(p.Since.AllHref))894 templ_7745c5c3_Var44, templ_7745c5c3_Err = templ.JoinURLErrs(templ.SafeURL(p.Since.AllHref))
891 if templ_7745c5c3_Err != nil {895 if templ_7745c5c3_Err != nil {
892- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 164, Col: 43}896+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 166, Col: 43}
893 }897 }
894 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var44))898 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var44))
895 if templ_7745c5c3_Err != nil {899 if templ_7745c5c3_Err != nil {
896 return templ_7745c5c3_Err900 return templ_7745c5c3_Err
897 }901 }
898- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 82, "\"")902+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 83, "\"")
899 if templ_7745c5c3_Err != nil {903 if templ_7745c5c3_Err != nil {
900 return templ_7745c5c3_Err904 return templ_7745c5c3_Err
901 }905 }
902 if !p.Since.Current {906 if !p.Since.Current {
903- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 83, " aria-current=\"page\"")907+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 84, " aria-current=\"page\"")
904 if templ_7745c5c3_Err != nil {908 if templ_7745c5c3_Err != nil {
905 return templ_7745c5c3_Err909 return templ_7745c5c3_Err
906 }910 }
907 }911 }
908- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 84, ">all changes <span class=\"mute\">vs ")912+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 85, ">all changes <span class=\"mute\">vs ")
909 if templ_7745c5c3_Err != nil {913 if templ_7745c5c3_Err != nil {
910 return templ_7745c5c3_Err914 return templ_7745c5c3_Err
911 }915 }
912 var templ_7745c5c3_Var45 string916 var templ_7745c5c3_Var45 string
913 templ_7745c5c3_Var45, templ_7745c5c3_Err = templ.JoinStringErrs(p.Target)917 templ_7745c5c3_Var45, templ_7745c5c3_Err = templ.JoinStringErrs(p.Target)
914 if templ_7745c5c3_Err != nil {918 if templ_7745c5c3_Err != nil {
915- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 168, Col: 50}919+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 170, Col: 50}
916 }920 }
917 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var45))921 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var45))
918 if templ_7745c5c3_Err != nil {922 if templ_7745c5c3_Err != nil {
919 return templ_7745c5c3_Err923 return templ_7745c5c3_Err
920 }924 }
921- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 85, "</span></a> <a href=\"")925+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 86, "</span></a> <a href=\"")
922 if templ_7745c5c3_Err != nil {926 if templ_7745c5c3_Err != nil {
923 return templ_7745c5c3_Err927 return templ_7745c5c3_Err
924 }928 }
925 var templ_7745c5c3_Var46 templ.SafeURL929 var templ_7745c5c3_Var46 templ.SafeURL
926 templ_7745c5c3_Var46, templ_7745c5c3_Err = templ.JoinURLErrs(templ.SafeURL(p.Since.SinceHref))930 templ_7745c5c3_Var46, templ_7745c5c3_Err = templ.JoinURLErrs(templ.SafeURL(p.Since.SinceHref))
927 if templ_7745c5c3_Err != nil {931 if templ_7745c5c3_Err != nil {
928- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 170, Col: 45}932+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 172, Col: 45}
929 }933 }
930 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var46))934 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var46))
931 if templ_7745c5c3_Err != nil {935 if templ_7745c5c3_Err != nil {
932 return templ_7745c5c3_Err936 return templ_7745c5c3_Err
933 }937 }
934- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 86, "\"")938+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 87, "\"")
935 if templ_7745c5c3_Err != nil {939 if templ_7745c5c3_Err != nil {
936 return templ_7745c5c3_Err940 return templ_7745c5c3_Err
937 }941 }
938 if p.Since.Current {942 if p.Since.Current {
939- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 87, " aria-current=\"page\"")943+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 88, " aria-current=\"page\"")
940 if templ_7745c5c3_Err != nil {944 if templ_7745c5c3_Err != nil {
941 return templ_7745c5c3_Err945 return templ_7745c5c3_Err
942 }946 }
943 }947 }
944- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 88, ">since your last read <span class=\"mute\">")948+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 89, ">since your last read <span class=\"mute\">")
945 if templ_7745c5c3_Err != nil {949 if templ_7745c5c3_Err != nil {
946 return templ_7745c5c3_Err950 return templ_7745c5c3_Err
947 }951 }
948 var templ_7745c5c3_Var47 string952 var templ_7745c5c3_Var47 string
949 templ_7745c5c3_Var47, templ_7745c5c3_Err = templ.JoinStringErrs(p.Since.ReadShort)953 templ_7745c5c3_Var47, templ_7745c5c3_Err = templ.JoinStringErrs(p.Since.ReadShort)
950 if templ_7745c5c3_Err != nil {954 if templ_7745c5c3_Err != nil {
951- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 174, Col: 65}955+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 176, Col: 65}
952 }956 }
953 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var47))957 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var47))
954 if templ_7745c5c3_Err != nil {958 if templ_7745c5c3_Err != nil {
955 return templ_7745c5c3_Err959 return templ_7745c5c3_Err
956 }960 }
957- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 89, " → ")961+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 90, " → ")
958 if templ_7745c5c3_Err != nil {962 if templ_7745c5c3_Err != nil {
959 return templ_7745c5c3_Err963 return templ_7745c5c3_Err
960 }964 }
961 var templ_7745c5c3_Var48 string965 var templ_7745c5c3_Var48 string
962 templ_7745c5c3_Var48, templ_7745c5c3_Err = templ.JoinStringErrs(p.Since.HeadShort)966 templ_7745c5c3_Var48, templ_7745c5c3_Err = templ.JoinStringErrs(p.Since.HeadShort)
963 if templ_7745c5c3_Err != nil {967 if templ_7745c5c3_Err != nil {
964- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 174, Col: 91}968+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 176, Col: 91}
965 }969 }
966 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var48))970 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var48))
967 if templ_7745c5c3_Err != nil {971 if templ_7745c5c3_Err != nil {
968 return templ_7745c5c3_Err972 return templ_7745c5c3_Err
969 }973 }
970- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 90, "</span></a></nav>")974+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 91, "</span></a></nav>")
971 if templ_7745c5c3_Err != nil {975 if templ_7745c5c3_Err != nil {
972 return templ_7745c5c3_Err976 return templ_7745c5c3_Err
973 }977 }
974 }978 }
975 if p.SinceNote != "" {979 if p.SinceNote != "" {
976- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 91, "<p class=\"notice\">")980+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 92, "<p class=\"notice\">")
977 if templ_7745c5c3_Err != nil {981 if templ_7745c5c3_Err != nil {
978 return templ_7745c5c3_Err982 return templ_7745c5c3_Err
979 }983 }
980 var templ_7745c5c3_Var49 string984 var templ_7745c5c3_Var49 string
981 templ_7745c5c3_Var49, templ_7745c5c3_Err = templ.JoinStringErrs(p.SinceNote)985 templ_7745c5c3_Var49, templ_7745c5c3_Err = templ.JoinStringErrs(p.SinceNote)
982 if templ_7745c5c3_Err != nil {986 if templ_7745c5c3_Err != nil {
983- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 178, Col: 35}987+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 180, Col: 35}
984 }988 }
985 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var49))989 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var49))
986 if templ_7745c5c3_Err != nil {990 if templ_7745c5c3_Err != nil {
987 return templ_7745c5c3_Err991 return templ_7745c5c3_Err
988 }992 }
989- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 92, "</p>")993+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 93, "</p>")
990 if templ_7745c5c3_Err != nil {994 if templ_7745c5c3_Err != nil {
991 return templ_7745c5c3_Err995 return templ_7745c5c3_Err
992 }996 }
993 }997 }
994- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 93, "</div>")998+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 94, "</div>")
995 if templ_7745c5c3_Err != nil {999 if templ_7745c5c3_Err != nil {
996 return templ_7745c5c3_Err1000 return templ_7745c5c3_Err
997 }1001 }
@@ -999,112 +1003,112 @@ func MergeRequest(l Layout, p MRPage) templ.Component {
999 if templ_7745c5c3_Err != nil {1003 if templ_7745c5c3_Err != nil {
1000 return templ_7745c5c3_Err1004 return templ_7745c5c3_Err
1001 }1005 }
1002- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 94, " <div id=\"mr-diff-notices\"")1006+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 95, " <div id=\"mr-diff-notices\"")
1003 if templ_7745c5c3_Err != nil {1007 if templ_7745c5c3_Err != nil {
1004 return templ_7745c5c3_Err1008 return templ_7745c5c3_Err
1005 }1009 }
1006 if !p.Invisible && p.Note == "" {1010 if !p.Invisible && p.Note == "" {
1007- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 95, " hidden")1011+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 96, " hidden")
1008 if templ_7745c5c3_Err != nil {1012 if templ_7745c5c3_Err != nil {
1009 return templ_7745c5c3_Err1013 return templ_7745c5c3_Err
1010 }1014 }
1011 }1015 }
1012- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 96, ">")1016+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 97, ">")
1013 if templ_7745c5c3_Err != nil {1017 if templ_7745c5c3_Err != nil {
1014 return templ_7745c5c3_Err1018 return templ_7745c5c3_Err
1015 }1019 }
1016 if p.Invisible {1020 if p.Invisible {
1017- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 97, "<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>")1021+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 98, "<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>")
1018 if templ_7745c5c3_Err != nil {1022 if templ_7745c5c3_Err != nil {
1019 return templ_7745c5c3_Err1023 return templ_7745c5c3_Err
1020 }1024 }
1021 }1025 }
1022 if p.Note != "" {1026 if p.Note != "" {
1023- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 98, "<p class=\"notice\">")1027+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 99, "<p class=\"notice\">")
1024 if templ_7745c5c3_Err != nil {1028 if templ_7745c5c3_Err != nil {
1025 return templ_7745c5c3_Err1029 return templ_7745c5c3_Err
1026 }1030 }
1027 var templ_7745c5c3_Var50 string1031 var templ_7745c5c3_Var50 string
1028 templ_7745c5c3_Var50, templ_7745c5c3_Err = templ.JoinStringErrs(p.Note)1032 templ_7745c5c3_Var50, templ_7745c5c3_Err = templ.JoinStringErrs(p.Note)
1029 if templ_7745c5c3_Err != nil {1033 if templ_7745c5c3_Err != nil {
1030- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 190, Col: 30}1034+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 192, Col: 30}
1031 }1035 }
1032 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var50))1036 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var50))
1033 if templ_7745c5c3_Err != nil {1037 if templ_7745c5c3_Err != nil {
1034 return templ_7745c5c3_Err1038 return templ_7745c5c3_Err
1035 }1039 }
1036- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 99, "</p>")1040+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 100, "</p>")
1037 if templ_7745c5c3_Err != nil {1041 if templ_7745c5c3_Err != nil {
1038 return templ_7745c5c3_Err1042 return templ_7745c5c3_Err
1039 }1043 }
1040 }1044 }
1041- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 100, "</div><div id=\"diffs\" data-mr")1045+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 101, "</div><div id=\"diffs\" data-mr")
1042 if templ_7745c5c3_Err != nil {1046 if templ_7745c5c3_Err != nil {
1043 return templ_7745c5c3_Err1047 return templ_7745c5c3_Err
1044 }1048 }
1045 if p.Canonical != "" {1049 if p.Canonical != "" {
1046- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 101, " data-canonical=\"")1050+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 102, " data-canonical=\"")
1047 if templ_7745c5c3_Err != nil {1051 if templ_7745c5c3_Err != nil {
1048 return templ_7745c5c3_Err1052 return templ_7745c5c3_Err
1049 }1053 }
1050 var templ_7745c5c3_Var51 string1054 var templ_7745c5c3_Var51 string
1051 templ_7745c5c3_Var51, templ_7745c5c3_Err = templ.ResolveAttributeValue(p.Canonical)1055 templ_7745c5c3_Var51, templ_7745c5c3_Err = templ.ResolveAttributeValue(p.Canonical)
1052 if templ_7745c5c3_Err != nil {1056 if templ_7745c5c3_Err != nil {
1053- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 197, Col: 32}1057+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 199, Col: 32}
1054 }1058 }
1055 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ_7745c5c3_Var51)1059 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ_7745c5c3_Var51)
1056 if templ_7745c5c3_Err != nil {1060 if templ_7745c5c3_Err != nil {
1057 return templ_7745c5c3_Err1061 return templ_7745c5c3_Err
1058 }1062 }
1059- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 102, "\"")1063+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 103, "\"")
1060 if templ_7745c5c3_Err != nil {1064 if templ_7745c5c3_Err != nil {
1061 return templ_7745c5c3_Err1065 return templ_7745c5c3_Err
1062 }1066 }
1063 }1067 }
1064 if p.Both {1068 if p.Both {
1065- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 103, " data-diff=\"")1069+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 104, " data-diff=\"")
1066 if templ_7745c5c3_Err != nil {1070 if templ_7745c5c3_Err != nil {
1067 return templ_7745c5c3_Err1071 return templ_7745c5c3_Err
1068 }1072 }
1069 var templ_7745c5c3_Var52 string1073 var templ_7745c5c3_Var52 string
1070 templ_7745c5c3_Var52, templ_7745c5c3_Err = templ.ResolveAttributeValue(p.View)1074 templ_7745c5c3_Var52, templ_7745c5c3_Err = templ.ResolveAttributeValue(p.View)
1071 if templ_7745c5c3_Err != nil {1075 if templ_7745c5c3_Err != nil {
1072- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 200, Col: 22}1076+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 202, Col: 22}
1073 }1077 }
1074 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ_7745c5c3_Var52)1078 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ_7745c5c3_Var52)
1075 if templ_7745c5c3_Err != nil {1079 if templ_7745c5c3_Err != nil {
1076 return templ_7745c5c3_Err1080 return templ_7745c5c3_Err
1077 }1081 }
1078- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 104, "\"")1082+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 105, "\"")
1079 if templ_7745c5c3_Err != nil {1083 if templ_7745c5c3_Err != nil {
1080 return templ_7745c5c3_Err1084 return templ_7745c5c3_Err
1081 }1085 }
1082 } else {1086 } else {
1083- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 105, " data-view=\"")1087+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 106, " data-view=\"")
1084 if templ_7745c5c3_Err != nil {1088 if templ_7745c5c3_Err != nil {
1085 return templ_7745c5c3_Err1089 return templ_7745c5c3_Err
1086 }1090 }
1087 var templ_7745c5c3_Var53 string1091 var templ_7745c5c3_Var53 string
1088 templ_7745c5c3_Var53, templ_7745c5c3_Err = templ.ResolveAttributeValue(p.View)1092 templ_7745c5c3_Var53, templ_7745c5c3_Err = templ.ResolveAttributeValue(p.View)
1089 if templ_7745c5c3_Err != nil {1093 if templ_7745c5c3_Err != nil {
1090- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 202, Col: 22}1094+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 204, Col: 22}
1091 }1095 }
1092 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ_7745c5c3_Var53)1096 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ_7745c5c3_Var53)
1093 if templ_7745c5c3_Err != nil {1097 if templ_7745c5c3_Err != nil {
1094 return templ_7745c5c3_Err1098 return templ_7745c5c3_Err
1095 }1099 }
1096- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 106, "\"")1100+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 107, "\"")
1097 if templ_7745c5c3_Err != nil {1101 if templ_7745c5c3_Err != nil {
1098 return templ_7745c5c3_Err1102 return templ_7745c5c3_Err
1099 }1103 }
1100 }1104 }
1101 if p.Both && !p.Pinned {1105 if p.Both && !p.Pinned {
1102- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 107, " hx-live=\"this.dataset.diff = sessionStorage.getItem('diff') || this.dataset.diff\"")1106+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 108, " hx-live=\"this.dataset.diff = sessionStorage.getItem('diff') || this.dataset.diff\"")
1103 if templ_7745c5c3_Err != nil {1107 if templ_7745c5c3_Err != nil {
1104 return templ_7745c5c3_Err1108 return templ_7745c5c3_Err
1105 }1109 }
1106 }1110 }
1107- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 108, ">")1111+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 109, ">")
1108 if templ_7745c5c3_Err != nil {1112 if templ_7745c5c3_Err != nil {
1109 return templ_7745c5c3_Err1113 return templ_7745c5c3_Err
1110 }1114 }
@@ -1115,38 +1119,38 @@ func MergeRequest(l Layout, p MRPage) templ.Component {
1115 }1119 }
1116 }1120 }
1117 if len(p.Files) == 0 {1121 if len(p.Files) == 0 {
1118- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 109, "<p class=\"note\">no changed files.</p>")1122+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 110, "<p class=\"note\">no changed files.</p>")
1119 if templ_7745c5c3_Err != nil {1123 if templ_7745c5c3_Err != nil {
1120 return templ_7745c5c3_Err1124 return templ_7745c5c3_Err
1121 }1125 }
1122 }1126 }
1123- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 110, "</div><h2 class=\"rule-h\" id=\"comments\"><span>Comments</span><span class=\"count\">")1127+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 111, "</div><div id=\"mr-comments\"><h2 class=\"rule-h\" id=\"comments\"><span>Comments</span><span class=\"count\">")
1124 if templ_7745c5c3_Err != nil {1128 if templ_7745c5c3_Err != nil {
1125 return templ_7745c5c3_Err1129 return templ_7745c5c3_Err
1126 }1130 }
1127 var templ_7745c5c3_Var54 string1131 var templ_7745c5c3_Var54 string
1128 templ_7745c5c3_Var54, templ_7745c5c3_Err = templ.JoinStringErrs(itoa(p.NUnresolved))1132 templ_7745c5c3_Var54, templ_7745c5c3_Err = templ.JoinStringErrs(itoa(p.NUnresolved))
1129 if templ_7745c5c3_Err != nil {1133 if templ_7745c5c3_Err != nil {
1130- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 215, Col: 97}1134+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 218, Col: 97}
1131 }1135 }
1132 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var54))1136 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var54))
1133 if templ_7745c5c3_Err != nil {1137 if templ_7745c5c3_Err != nil {
1134 return templ_7745c5c3_Err1138 return templ_7745c5c3_Err
1135 }1139 }
1136- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 111, " open / ")1140+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 112, " open / ")
1137 if templ_7745c5c3_Err != nil {1141 if templ_7745c5c3_Err != nil {
1138 return templ_7745c5c3_Err1142 return templ_7745c5c3_Err
1139 }1143 }
1140 var templ_7745c5c3_Var55 string1144 var templ_7745c5c3_Var55 string
1141 templ_7745c5c3_Var55, templ_7745c5c3_Err = templ.JoinStringErrs(itoa(p.NComments))1145 templ_7745c5c3_Var55, templ_7745c5c3_Err = templ.JoinStringErrs(itoa(p.NComments))
1142 if templ_7745c5c3_Err != nil {1146 if templ_7745c5c3_Err != nil {
1143- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 215, Col: 126}1147+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 218, Col: 126}
1144 }1148 }
1145 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var55))1149 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var55))
1146 if templ_7745c5c3_Err != nil {1150 if templ_7745c5c3_Err != nil {
1147 return templ_7745c5c3_Err1151 return templ_7745c5c3_Err
1148 }1152 }
1149- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 112, "</span></h2>")1153+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 113, "</span></h2>")
1150 if templ_7745c5c3_Err != nil {1154 if templ_7745c5c3_Err != nil {
1151 return templ_7745c5c3_Err1155 return templ_7745c5c3_Err
1152 }1156 }
@@ -1162,26 +1166,22 @@ func MergeRequest(l Layout, p MRPage) templ.Component {
1162 return templ_7745c5c3_Err1166 return templ_7745c5c3_Err
1163 }1167 }
1164 }1168 }
1165- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 113, " ")
1166- if templ_7745c5c3_Err != nil {
1167- return templ_7745c5c3_Err
1168- }
1169 if p.NComments == 0 {1169 if p.NComments == 0 {
1170 templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 114, "<p class=\"dim\">no comments yet.</p>")1170 templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 114, "<p class=\"dim\">no comments yet.</p>")
1171 if templ_7745c5c3_Err != nil {1171 if templ_7745c5c3_Err != nil {
1172 return templ_7745c5c3_Err1172 return templ_7745c5c3_Err
1173 }1173 }
1174 }1174 }
1175- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 115, " ")
1176- if templ_7745c5c3_Err != nil {
1177- return templ_7745c5c3_Err
1178- }
1179 if p.GeneralForm != nil {1175 if p.GeneralForm != nil {
1180 templ_7745c5c3_Err = commentForm(*p.GeneralForm, "").Render(ctx, templ_7745c5c3_Buffer)1176 templ_7745c5c3_Err = commentForm(*p.GeneralForm, "").Render(ctx, templ_7745c5c3_Buffer)
1181 if templ_7745c5c3_Err != nil {1177 if templ_7745c5c3_Err != nil {
1182 return templ_7745c5c3_Err1178 return templ_7745c5c3_Err
1183 }1179 }
1184 }1180 }
1181+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 115, "</div>")
1182+ if templ_7745c5c3_Err != nil {
1183+ return templ_7745c5c3_Err
1184+ }
1185 return nil1185 return nil
1186 })1186 })
1187 templ_7745c5c3_Err = Shell(l, mrRail(p)).Render(templ.WithChildren(ctx, templ_7745c5c3_Var25), templ_7745c5c3_Buffer)1187 templ_7745c5c3_Err = Shell(l, mrRail(p)).Render(templ.WithChildren(ctx, templ_7745c5c3_Var25), templ_7745c5c3_Buffer)
@@ -1221,7 +1221,7 @@ func branchLink(name, href string) templ.Component {
1221 var templ_7745c5c3_Var57 templ.SafeURL1221 var templ_7745c5c3_Var57 templ.SafeURL
1222 templ_7745c5c3_Var57, templ_7745c5c3_Err = templ.JoinURLErrs(templ.SafeURL(href))1222 templ_7745c5c3_Var57, templ_7745c5c3_Err = templ.JoinURLErrs(templ.SafeURL(href))
1223 if templ_7745c5c3_Err != nil {1223 if templ_7745c5c3_Err != nil {
1224- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 233, Col: 31}1224+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 237, Col: 31}
1225 }1225 }
1226 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var57))1226 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var57))
1227 if templ_7745c5c3_Err != nil {1227 if templ_7745c5c3_Err != nil {
@@ -1234,7 +1234,7 @@ func branchLink(name, href string) templ.Component {
1234 var templ_7745c5c3_Var58 string1234 var templ_7745c5c3_Var58 string
1235 templ_7745c5c3_Var58, templ_7745c5c3_Err = templ.JoinStringErrs(name)1235 templ_7745c5c3_Var58, templ_7745c5c3_Err = templ.JoinStringErrs(name)
1236 if templ_7745c5c3_Err != nil {1236 if templ_7745c5c3_Err != nil {
1237- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 233, Col: 40}1237+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 237, Col: 40}
1238 }1238 }
1239 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var58))1239 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var58))
1240 if templ_7745c5c3_Err != nil {1240 if templ_7745c5c3_Err != nil {
@@ -1248,7 +1248,7 @@ func branchLink(name, href string) templ.Component {
1248 var templ_7745c5c3_Var59 string1248 var templ_7745c5c3_Var59 string
1249 templ_7745c5c3_Var59, templ_7745c5c3_Err = templ.JoinStringErrs(name)1249 templ_7745c5c3_Var59, templ_7745c5c3_Err = templ.JoinStringErrs(name)
1250 if templ_7745c5c3_Err != nil {1250 if templ_7745c5c3_Err != nil {
1251- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 235, Col: 8}1251+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 239, Col: 8}
1252 }1252 }
1253 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var59))1253 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var59))
1254 if templ_7745c5c3_Err != nil {1254 if templ_7745c5c3_Err != nil {
@@ -1329,7 +1329,7 @@ func commentView(c CommentView, suffix string) templ.Component {
1329 var templ_7745c5c3_Var62 string1329 var templ_7745c5c3_Var62 string
1330 templ_7745c5c3_Var62, templ_7745c5c3_Err = templ.ResolveAttributeValue("c" + c.ID + suffix)1330 templ_7745c5c3_Var62, templ_7745c5c3_Err = templ.ResolveAttributeValue("c" + c.ID + suffix)
1331 if templ_7745c5c3_Err != nil {1331 if templ_7745c5c3_Err != nil {
1332- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 254, Col: 42}1332+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 258, Col: 42}
1333 }1333 }
1334 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ_7745c5c3_Var62)1334 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ_7745c5c3_Var62)
1335 if templ_7745c5c3_Err != nil {1335 if templ_7745c5c3_Err != nil {
@@ -1342,7 +1342,7 @@ func commentView(c CommentView, suffix string) templ.Component {
1342 var templ_7745c5c3_Var63 string1342 var templ_7745c5c3_Var63 string
1343 templ_7745c5c3_Var63, templ_7745c5c3_Err = templ.ResolveAttributeValue(boolText(c.Resolved))1343 templ_7745c5c3_Var63, templ_7745c5c3_Err = templ.ResolveAttributeValue(boolText(c.Resolved))
1344 if templ_7745c5c3_Err != nil {1344 if templ_7745c5c3_Err != nil {
1345- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 254, Col: 81}1345+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 258, Col: 81}
1346 }1346 }
1347 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ_7745c5c3_Var63)1347 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ_7745c5c3_Var63)
1348 if templ_7745c5c3_Err != nil {1348 if templ_7745c5c3_Err != nil {
@@ -1365,7 +1365,7 @@ func commentView(c CommentView, suffix string) templ.Component {
1365 var templ_7745c5c3_Var64 string1365 var templ_7745c5c3_Var64 string
1366 templ_7745c5c3_Var64, templ_7745c5c3_Err = templ.JoinStringErrs(c.Author)1366 templ_7745c5c3_Var64, templ_7745c5c3_Err = templ.JoinStringErrs(c.Author)
1367 if templ_7745c5c3_Err != nil {1367 if templ_7745c5c3_Err != nil {
1368- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 256, Col: 33}1368+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 260, Col: 33}
1369 }1369 }
1370 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var64))1370 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var64))
1371 if templ_7745c5c3_Err != nil {1371 if templ_7745c5c3_Err != nil {
@@ -1379,7 +1379,7 @@ func commentView(c CommentView, suffix string) templ.Component {
1379 var templ_7745c5c3_Var65 string1379 var templ_7745c5c3_Var65 string
1380 templ_7745c5c3_Var65, templ_7745c5c3_Err = templ.JoinStringErrs(" ")1380 templ_7745c5c3_Var65, templ_7745c5c3_Err = templ.JoinStringErrs(" ")
1381 if templ_7745c5c3_Err != nil {1381 if templ_7745c5c3_Err != nil {
1382- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 258, Col: 9}1382+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 262, Col: 9}
1383 }1383 }
1384 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var65))1384 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var65))
1385 if templ_7745c5c3_Err != nil {1385 if templ_7745c5c3_Err != nil {
@@ -1392,7 +1392,7 @@ func commentView(c CommentView, suffix string) templ.Component {
1392 var templ_7745c5c3_Var66 string1392 var templ_7745c5c3_Var66 string
1393 templ_7745c5c3_Var66, templ_7745c5c3_Err = templ.ResolveAttributeValue(c.WhenAt)1393 templ_7745c5c3_Var66, templ_7745c5c3_Err = templ.ResolveAttributeValue(c.WhenAt)
1394 if templ_7745c5c3_Err != nil {1394 if templ_7745c5c3_Err != nil {
1395- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 258, Col: 49}1395+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 262, Col: 49}
1396 }1396 }
1397 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ_7745c5c3_Var66)1397 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ_7745c5c3_Var66)
1398 if templ_7745c5c3_Err != nil {1398 if templ_7745c5c3_Err != nil {
@@ -1405,7 +1405,7 @@ func commentView(c CommentView, suffix string) templ.Component {
1405 var templ_7745c5c3_Var67 string1405 var templ_7745c5c3_Var67 string
1406 templ_7745c5c3_Var67, templ_7745c5c3_Err = templ.ResolveAttributeValue(c.Abs)1406 templ_7745c5c3_Var67, templ_7745c5c3_Err = templ.ResolveAttributeValue(c.Abs)
1407 if templ_7745c5c3_Err != nil {1407 if templ_7745c5c3_Err != nil {
1408- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 258, Col: 65}1408+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 262, Col: 65}
1409 }1409 }
1410 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ_7745c5c3_Var67)1410 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ_7745c5c3_Var67)
1411 if templ_7745c5c3_Err != nil {1411 if templ_7745c5c3_Err != nil {
@@ -1418,7 +1418,7 @@ func commentView(c CommentView, suffix string) templ.Component {
1418 var templ_7745c5c3_Var68 string1418 var templ_7745c5c3_Var68 string
1419 templ_7745c5c3_Var68, templ_7745c5c3_Err = templ.JoinStringErrs(c.When)1419 templ_7745c5c3_Var68, templ_7745c5c3_Err = templ.JoinStringErrs(c.When)
1420 if templ_7745c5c3_Err != nil {1420 if templ_7745c5c3_Err != nil {
1421- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 258, Col: 76}1421+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 262, Col: 76}
1422 }1422 }
1423 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var68))1423 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var68))
1424 if templ_7745c5c3_Err != nil {1424 if templ_7745c5c3_Err != nil {
@@ -1433,7 +1433,7 @@ func commentView(c CommentView, suffix string) templ.Component {
1433 var templ_7745c5c3_Var69 string1433 var templ_7745c5c3_Var69 string
1434 templ_7745c5c3_Var69, templ_7745c5c3_Err = templ.JoinStringErrs(" ")1434 templ_7745c5c3_Var69, templ_7745c5c3_Err = templ.JoinStringErrs(" ")
1435 if templ_7745c5c3_Err != nil {1435 if templ_7745c5c3_Err != nil {
1436- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 261, Col: 9}1436+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 265, Col: 9}
1437 }1437 }
1438 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var69))1438 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var69))
1439 if templ_7745c5c3_Err != nil {1439 if templ_7745c5c3_Err != nil {
@@ -1448,7 +1448,7 @@ func commentView(c CommentView, suffix string) templ.Component {
1448 var templ_7745c5c3_Var70 string1448 var templ_7745c5c3_Var70 string
1449 templ_7745c5c3_Var70, templ_7745c5c3_Err = templ.JoinStringErrs(" ")1449 templ_7745c5c3_Var70, templ_7745c5c3_Err = templ.JoinStringErrs(" ")
1450 if templ_7745c5c3_Err != nil {1450 if templ_7745c5c3_Err != nil {
1451- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 264, Col: 9}1451+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 268, Col: 9}
1452 }1452 }
1453 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var70))1453 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var70))
1454 if templ_7745c5c3_Err != nil {1454 if templ_7745c5c3_Err != nil {
@@ -1463,7 +1463,7 @@ func commentView(c CommentView, suffix string) templ.Component {
1463 var templ_7745c5c3_Var71 string1463 var templ_7745c5c3_Var71 string
1464 templ_7745c5c3_Var71, templ_7745c5c3_Err = templ.JoinStringErrs(" ")1464 templ_7745c5c3_Var71, templ_7745c5c3_Err = templ.JoinStringErrs(" ")
1465 if templ_7745c5c3_Err != nil {1465 if templ_7745c5c3_Err != nil {
1466- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 267, Col: 9}1466+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 271, Col: 9}
1467 }1467 }
1468 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var71))1468 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var71))
1469 if templ_7745c5c3_Err != nil {1469 if templ_7745c5c3_Err != nil {
@@ -1476,7 +1476,7 @@ func commentView(c CommentView, suffix string) templ.Component {
1476 var templ_7745c5c3_Var72 string1476 var templ_7745c5c3_Var72 string
1477 templ_7745c5c3_Var72, templ_7745c5c3_Err = templ.JoinStringErrs(c.Where)1477 templ_7745c5c3_Var72, templ_7745c5c3_Err = templ.JoinStringErrs(c.Where)
1478 if templ_7745c5c3_Err != nil {1478 if templ_7745c5c3_Err != nil {
1479- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 267, Col: 47}1479+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 271, Col: 47}
1480 }1480 }
1481 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var72))1481 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var72))
1482 if templ_7745c5c3_Err != nil {1482 if templ_7745c5c3_Err != nil {
@@ -1551,7 +1551,7 @@ func commentView(c CommentView, suffix string) templ.Component {
1551 var templ_7745c5c3_Var73 string1551 var templ_7745c5c3_Var73 string
1552 templ_7745c5c3_Var73, templ_7745c5c3_Err = templ.JoinStringErrs(c.Verdict)1552 templ_7745c5c3_Var73, templ_7745c5c3_Err = templ.JoinStringErrs(c.Verdict)
1553 if templ_7745c5c3_Err != nil {1553 if templ_7745c5c3_Err != nil {
1554- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 291, Col: 36}1554+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 295, Col: 36}
1555 }1555 }
1556 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var73))1556 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var73))
1557 if templ_7745c5c3_Err != nil {1557 if templ_7745c5c3_Err != nil {
@@ -1570,7 +1570,7 @@ func commentView(c CommentView, suffix string) templ.Component {
1570 var templ_7745c5c3_Var74 string1570 var templ_7745c5c3_Var74 string
1571 templ_7745c5c3_Var74, templ_7745c5c3_Err = templ.JoinStringErrs(c.Range)1571 templ_7745c5c3_Var74, templ_7745c5c3_Err = templ.JoinStringErrs(c.Range)
1572 if templ_7745c5c3_Err != nil {1572 if templ_7745c5c3_Err != nil {
1573- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 294, Col: 31}1573+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 298, Col: 31}
1574 }1574 }
1575 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var74))1575 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var74))
1576 if templ_7745c5c3_Err != nil {1576 if templ_7745c5c3_Err != nil {
@@ -1589,7 +1589,7 @@ func commentView(c CommentView, suffix string) templ.Component {
1589 var templ_7745c5c3_Var75 string1589 var templ_7745c5c3_Var75 string
1590 templ_7745c5c3_Var75, templ_7745c5c3_Err = templ.ResolveAttributeValue(c.Quote)1590 templ_7745c5c3_Var75, templ_7745c5c3_Err = templ.ResolveAttributeValue(c.Quote)
1591 if templ_7745c5c3_Err != nil {1591 if templ_7745c5c3_Err != nil {
1592- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 297, Col: 65}1592+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 301, Col: 65}
1593 }1593 }
1594 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ_7745c5c3_Var75)1594 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ_7745c5c3_Var75)
1595 if templ_7745c5c3_Err != nil {1595 if templ_7745c5c3_Err != nil {
@@ -1608,7 +1608,7 @@ func commentView(c CommentView, suffix string) templ.Component {
1608 var templ_7745c5c3_Var76 templ.SafeURL1608 var templ_7745c5c3_Var76 templ.SafeURL
1609 templ_7745c5c3_Var76, templ_7745c5c3_Err = templ.JoinURLErrs(templ.SafeURL(c.Edit.Action))1609 templ_7745c5c3_Var76, templ_7745c5c3_Err = templ.JoinURLErrs(templ.SafeURL(c.Edit.Action))
1610 if templ_7745c5c3_Err != nil {1610 if templ_7745c5c3_Err != nil {
1611- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 300, Col: 92}1611+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 304, Col: 92}
1612 }1612 }
1613 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var76))1613 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var76))
1614 if templ_7745c5c3_Err != nil {1614 if templ_7745c5c3_Err != nil {
@@ -1621,7 +1621,7 @@ func commentView(c CommentView, suffix string) templ.Component {
1621 var templ_7745c5c3_Var77 string1621 var templ_7745c5c3_Var77 string
1622 templ_7745c5c3_Var77, templ_7745c5c3_Err = templ.ResolveAttributeValue(itoa(c.Edit.From))1622 templ_7745c5c3_Var77, templ_7745c5c3_Err = templ.ResolveAttributeValue(itoa(c.Edit.From))
1623 if templ_7745c5c3_Err != nil {1623 if templ_7745c5c3_Err != nil {
1624- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 300, Col: 153}1624+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 304, Col: 153}
1625 }1625 }
1626 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ_7745c5c3_Var77)1626 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ_7745c5c3_Var77)
1627 if templ_7745c5c3_Err != nil {1627 if templ_7745c5c3_Err != nil {
@@ -1634,7 +1634,7 @@ func commentView(c CommentView, suffix string) templ.Component {
1634 var templ_7745c5c3_Var78 string1634 var templ_7745c5c3_Var78 string
1635 templ_7745c5c3_Var78, templ_7745c5c3_Err = templ.JoinStringErrs(c.Edit.Text)1635 templ_7745c5c3_Var78, templ_7745c5c3_Err = templ.JoinStringErrs(c.Edit.Text)
1636 if templ_7745c5c3_Err != nil {1636 if templ_7745c5c3_Err != nil {
1637- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 300, Col: 209}1637+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 304, Col: 209}
1638 }1638 }
1639 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var78))1639 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var78))
1640 if templ_7745c5c3_Err != nil {1640 if templ_7745c5c3_Err != nil {
@@ -1653,7 +1653,7 @@ func commentView(c CommentView, suffix string) templ.Component {
1653 var templ_7745c5c3_Var79 templ.SafeURL1653 var templ_7745c5c3_Var79 templ.SafeURL
1654 templ_7745c5c3_Var79, templ_7745c5c3_Err = templ.JoinURLErrs(templ.SafeURL(c.Delete.Action))1654 templ_7745c5c3_Var79, templ_7745c5c3_Err = templ.JoinURLErrs(templ.SafeURL(c.Delete.Action))
1655 if templ_7745c5c3_Err != nil {1655 if templ_7745c5c3_Err != nil {
1656- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 303, Col: 96}1656+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 307, Col: 96}
1657 }1657 }
1658 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var79))1658 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var79))
1659 if templ_7745c5c3_Err != nil {1659 if templ_7745c5c3_Err != nil {
@@ -1666,7 +1666,7 @@ func commentView(c CommentView, suffix string) templ.Component {
1666 var templ_7745c5c3_Var80 string1666 var templ_7745c5c3_Var80 string
1667 templ_7745c5c3_Var80, templ_7745c5c3_Err = templ.ResolveAttributeValue(itoa(c.Delete.From))1667 templ_7745c5c3_Var80, templ_7745c5c3_Err = templ.ResolveAttributeValue(itoa(c.Delete.From))
1668 if templ_7745c5c3_Err != nil {1668 if templ_7745c5c3_Err != nil {
1669- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 303, Col: 159}1669+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 307, Col: 159}
1670 }1670 }
1671 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ_7745c5c3_Var80)1671 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ_7745c5c3_Var80)
1672 if templ_7745c5c3_Err != nil {1672 if templ_7745c5c3_Err != nil {
@@ -1705,7 +1705,7 @@ func commentView(c CommentView, suffix string) templ.Component {
1705 var templ_7745c5c3_Var81 templ.SafeURL1705 var templ_7745c5c3_Var81 templ.SafeURL
1706 templ_7745c5c3_Var81, templ_7745c5c3_Err = templ.JoinURLErrs(templ.SafeURL(c.Resolve.Action))1706 templ_7745c5c3_Var81, templ_7745c5c3_Err = templ.JoinURLErrs(templ.SafeURL(c.Resolve.Action))
1707 if templ_7745c5c3_Err != nil {1707 if templ_7745c5c3_Err != nil {
1708- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 314, Col: 77}1708+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 318, Col: 77}
1709 }1709 }
1710 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var81))1710 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var81))
1711 if templ_7745c5c3_Err != nil {1711 if templ_7745c5c3_Err != nil {
@@ -1718,7 +1718,7 @@ func commentView(c CommentView, suffix string) templ.Component {
1718 var templ_7745c5c3_Var82 string1718 var templ_7745c5c3_Var82 string
1719 templ_7745c5c3_Var82, templ_7745c5c3_Err = templ.ResolveAttributeValue(boolText(c.Resolve.Value))1719 templ_7745c5c3_Var82, templ_7745c5c3_Err = templ.ResolveAttributeValue(boolText(c.Resolve.Value))
1720 if templ_7745c5c3_Err != nil {1720 if templ_7745c5c3_Err != nil {
1721- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 315, Col: 74}1721+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 319, Col: 74}
1722 }1722 }
1723 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ_7745c5c3_Var82)1723 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ_7745c5c3_Var82)
1724 if templ_7745c5c3_Err != nil {1724 if templ_7745c5c3_Err != nil {
@@ -1736,7 +1736,7 @@ func commentView(c CommentView, suffix string) templ.Component {
1736 var templ_7745c5c3_Var83 string1736 var templ_7745c5c3_Var83 string
1737 templ_7745c5c3_Var83, templ_7745c5c3_Err = templ.ResolveAttributeValue(itoa(c.Resolve.From))1737 templ_7745c5c3_Var83, templ_7745c5c3_Err = templ.ResolveAttributeValue(itoa(c.Resolve.From))
1738 if templ_7745c5c3_Err != nil {1738 if templ_7745c5c3_Err != nil {
1739- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 317, Col: 66}1739+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 321, Col: 66}
1740 }1740 }
1741 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ_7745c5c3_Var83)1741 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ_7745c5c3_Var83)
1742 if templ_7745c5c3_Err != nil {1742 if templ_7745c5c3_Err != nil {
@@ -1754,7 +1754,7 @@ func commentView(c CommentView, suffix string) templ.Component {
1754 var templ_7745c5c3_Var84 string1754 var templ_7745c5c3_Var84 string
1755 templ_7745c5c3_Var84, templ_7745c5c3_Err = templ.JoinStringErrs(c.Resolve.Label)1755 templ_7745c5c3_Var84, templ_7745c5c3_Err = templ.JoinStringErrs(c.Resolve.Label)
1756 if templ_7745c5c3_Err != nil {1756 if templ_7745c5c3_Err != nil {
1757- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 319, Col: 55}1757+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 323, Col: 55}
1758 }1758 }
1759 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var84))1759 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var84))
1760 if templ_7745c5c3_Err != nil {1760 if templ_7745c5c3_Err != nil {
@@ -1809,7 +1809,7 @@ func commentForm(f CommentForm, suffix string) templ.Component {
1809 var templ_7745c5c3_Var86 templ.SafeURL1809 var templ_7745c5c3_Var86 templ.SafeURL
1810 templ_7745c5c3_Var86, templ_7745c5c3_Err = templ.JoinURLErrs(templ.SafeURL(f.Action))1810 templ_7745c5c3_Var86, templ_7745c5c3_Err = templ.JoinURLErrs(templ.SafeURL(f.Action))
1811 if templ_7745c5c3_Err != nil {1811 if templ_7745c5c3_Err != nil {
1812- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 334, Col: 67}1812+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 338, Col: 67}
1813 }1813 }
1814 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var86))1814 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var86))
1815 if templ_7745c5c3_Err != nil {1815 if templ_7745c5c3_Err != nil {
@@ -1822,7 +1822,7 @@ func commentForm(f CommentForm, suffix string) templ.Component {
1822 var templ_7745c5c3_Var87 string1822 var templ_7745c5c3_Var87 string
1823 templ_7745c5c3_Var87, templ_7745c5c3_Err = templ.ResolveAttributeValue(f.ID + suffix)1823 templ_7745c5c3_Var87, templ_7745c5c3_Err = templ.ResolveAttributeValue(f.ID + suffix)
1824 if templ_7745c5c3_Err != nil {1824 if templ_7745c5c3_Err != nil {
1825- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 335, Col: 28}1825+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 339, Col: 28}
1826 }1826 }
1827 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ_7745c5c3_Var87)1827 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ_7745c5c3_Var87)
1828 if templ_7745c5c3_Err != nil {1828 if templ_7745c5c3_Err != nil {
@@ -1835,7 +1835,7 @@ func commentForm(f CommentForm, suffix string) templ.Component {
1835 var templ_7745c5c3_Var88 string1835 var templ_7745c5c3_Var88 string
1836 templ_7745c5c3_Var88, templ_7745c5c3_Err = templ.JoinStringErrs(f.Title)1836 templ_7745c5c3_Var88, templ_7745c5c3_Err = templ.JoinStringErrs(f.Title)
1837 if templ_7745c5c3_Err != nil {1837 if templ_7745c5c3_Err != nil {
1838- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 335, Col: 40}1838+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 339, Col: 40}
1839 }1839 }
1840 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var88))1840 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var88))
1841 if templ_7745c5c3_Err != nil {1841 if templ_7745c5c3_Err != nil {
@@ -1848,7 +1848,7 @@ func commentForm(f CommentForm, suffix string) templ.Component {
1848 var templ_7745c5c3_Var89 string1848 var templ_7745c5c3_Var89 string
1849 templ_7745c5c3_Var89, templ_7745c5c3_Err = templ.ResolveAttributeValue(f.ID + suffix)1849 templ_7745c5c3_Var89, templ_7745c5c3_Err = templ.ResolveAttributeValue(f.ID + suffix)
1850 if templ_7745c5c3_Err != nil {1850 if templ_7745c5c3_Err != nil {
1851- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 337, Col: 21}1851+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 341, Col: 21}
1852 }1852 }
1853 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ_7745c5c3_Var89)1853 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ_7745c5c3_Var89)
1854 if templ_7745c5c3_Err != nil {1854 if templ_7745c5c3_Err != nil {
@@ -1887,7 +1887,7 @@ func commentForm(f CommentForm, suffix string) templ.Component {
1887 var templ_7745c5c3_Var90 string1887 var templ_7745c5c3_Var90 string
1888 templ_7745c5c3_Var90, templ_7745c5c3_Err = templ.ResolveAttributeValue(f.Path)1888 templ_7745c5c3_Var90, templ_7745c5c3_Err = templ.ResolveAttributeValue(f.Path)
1889 if templ_7745c5c3_Err != nil {1889 if templ_7745c5c3_Err != nil {
1890- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 352, Col: 50}1890+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 356, Col: 50}
1891 }1891 }
1892 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ_7745c5c3_Var90)1892 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ_7745c5c3_Var90)
1893 if templ_7745c5c3_Err != nil {1893 if templ_7745c5c3_Err != nil {
@@ -1900,7 +1900,7 @@ func commentForm(f CommentForm, suffix string) templ.Component {
1900 var templ_7745c5c3_Var91 string1900 var templ_7745c5c3_Var91 string
1901 templ_7745c5c3_Var91, templ_7745c5c3_Err = templ.ResolveAttributeValue(f.Line)1901 templ_7745c5c3_Var91, templ_7745c5c3_Err = templ.ResolveAttributeValue(f.Line)
1902 if templ_7745c5c3_Err != nil {1902 if templ_7745c5c3_Err != nil {
1903- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 353, Col: 50}1903+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 357, Col: 50}
1904 }1904 }
1905 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ_7745c5c3_Var91)1905 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ_7745c5c3_Var91)
1906 if templ_7745c5c3_Err != nil {1906 if templ_7745c5c3_Err != nil {
@@ -1913,7 +1913,7 @@ func commentForm(f CommentForm, suffix string) templ.Component {
1913 var templ_7745c5c3_Var92 string1913 var templ_7745c5c3_Var92 string
1914 templ_7745c5c3_Var92, templ_7745c5c3_Err = templ.ResolveAttributeValue(f.Side)1914 templ_7745c5c3_Var92, templ_7745c5c3_Err = templ.ResolveAttributeValue(f.Side)
1915 if templ_7745c5c3_Err != nil {1915 if templ_7745c5c3_Err != nil {
1916- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 354, Col: 50}1916+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 358, Col: 50}
1917 }1917 }
1918 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ_7745c5c3_Var92)1918 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ_7745c5c3_Var92)
1919 if templ_7745c5c3_Err != nil {1919 if templ_7745c5c3_Err != nil {
@@ -1926,7 +1926,7 @@ func commentForm(f CommentForm, suffix string) templ.Component {
1926 var templ_7745c5c3_Var93 string1926 var templ_7745c5c3_Var93 string
1927 templ_7745c5c3_Var93, templ_7745c5c3_Err = templ.ResolveAttributeValue(f.StartLine)1927 templ_7745c5c3_Var93, templ_7745c5c3_Err = templ.ResolveAttributeValue(f.StartLine)
1928 if templ_7745c5c3_Err != nil {1928 if templ_7745c5c3_Err != nil {
1929- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 355, Col: 86}1929+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 359, Col: 86}
1930 }1930 }
1931 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ_7745c5c3_Var93)1931 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ_7745c5c3_Var93)
1932 if templ_7745c5c3_Err != nil {1932 if templ_7745c5c3_Err != nil {
@@ -1945,7 +1945,7 @@ func commentForm(f CommentForm, suffix string) templ.Component {
1945 var templ_7745c5c3_Var94 string1945 var templ_7745c5c3_Var94 string
1946 templ_7745c5c3_Var94, templ_7745c5c3_Err = templ.ResolveAttributeValue(f.ReplyTo)1946 templ_7745c5c3_Var94, templ_7745c5c3_Err = templ.ResolveAttributeValue(f.ReplyTo)
1947 if templ_7745c5c3_Err != nil {1947 if templ_7745c5c3_Err != nil {
1948- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 358, Col: 57}1948+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 362, Col: 57}
1949 }1949 }
1950 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ_7745c5c3_Var94)1950 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ_7745c5c3_Var94)
1951 if templ_7745c5c3_Err != nil {1951 if templ_7745c5c3_Err != nil {
@@ -1970,7 +1970,7 @@ func commentForm(f CommentForm, suffix string) templ.Component {
1970 var templ_7745c5c3_Var95 string1970 var templ_7745c5c3_Var95 string
1971 templ_7745c5c3_Var95, templ_7745c5c3_Err = templ.ResolveAttributeValue(itoa(f.From))1971 templ_7745c5c3_Var95, templ_7745c5c3_Err = templ.ResolveAttributeValue(itoa(f.From))
1972 if templ_7745c5c3_Err != nil {1972 if templ_7745c5c3_Err != nil {
1973- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 364, Col: 56}1973+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 368, Col: 56}
1974 }1974 }
1975 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ_7745c5c3_Var95)1975 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ_7745c5c3_Var95)
1976 if templ_7745c5c3_Err != nil {1976 if templ_7745c5c3_Err != nil {
@@ -1993,7 +1993,7 @@ func commentForm(f CommentForm, suffix string) templ.Component {
1993 var templ_7745c5c3_Var96 templ.SafeURL1993 var templ_7745c5c3_Var96 templ.SafeURL
1994 templ_7745c5c3_Var96, templ_7745c5c3_Err = templ.JoinURLErrs(templ.SafeURL(f.Cancel))1994 templ_7745c5c3_Var96, templ_7745c5c3_Err = templ.JoinURLErrs(templ.SafeURL(f.Cancel))
1995 if templ_7745c5c3_Err != nil {1995 if templ_7745c5c3_Err != nil {
1996- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 369, Col: 49}1996+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 373, Col: 49}
1997 }1997 }
1998 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var96))1998 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var96))
1999 if templ_7745c5c3_Err != nil {1999 if templ_7745c5c3_Err != nil {
@@ -2040,7 +2040,7 @@ func mrFooter(p MRPage) templ.Component {
2040 var templ_7745c5c3_Var98 string2040 var templ_7745c5c3_Var98 string
2041 templ_7745c5c3_Var98, templ_7745c5c3_Err = templ.JoinStringErrs(p.CommitCount)2041 templ_7745c5c3_Var98, templ_7745c5c3_Err = templ.JoinStringErrs(p.CommitCount)
2042 if templ_7745c5c3_Err != nil {2042 if templ_7745c5c3_Err != nil {
2043- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 378, Col: 55}2043+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 382, Col: 55}
2044 }2044 }
2045 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var98))2045 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var98))
2046 if templ_7745c5c3_Err != nil {2046 if templ_7745c5c3_Err != nil {
@@ -2053,7 +2053,7 @@ func mrFooter(p MRPage) templ.Component {
2053 var templ_7745c5c3_Var99 string2053 var templ_7745c5c3_Var99 string
2054 templ_7745c5c3_Var99, templ_7745c5c3_Err = templ.JoinStringErrs(p.CommitCount)2054 templ_7745c5c3_Var99, templ_7745c5c3_Err = templ.JoinStringErrs(p.CommitCount)
2055 if templ_7745c5c3_Err != nil {2055 if templ_7745c5c3_Err != nil {
2056- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 380, Col: 89}2056+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 384, Col: 89}
2057 }2057 }
2058 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var99))2058 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var99))
2059 if templ_7745c5c3_Err != nil {2059 if templ_7745c5c3_Err != nil {
@@ -2066,7 +2066,7 @@ func mrFooter(p MRPage) templ.Component {
2066 var templ_7745c5c3_Var100 string2066 var templ_7745c5c3_Var100 string
2067 templ_7745c5c3_Var100, templ_7745c5c3_Err = templ.JoinStringErrs("Checks ")2067 templ_7745c5c3_Var100, templ_7745c5c3_Err = templ.JoinStringErrs("Checks ")
2068 if templ_7745c5c3_Err != nil {2068 if templ_7745c5c3_Err != nil {
2069- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 382, Col: 16}2069+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 386, Col: 16}
2070 }2070 }
2071 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var100))2071 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var100))
2072 if templ_7745c5c3_Err != nil {2072 if templ_7745c5c3_Err != nil {
@@ -2080,7 +2080,7 @@ func mrFooter(p MRPage) templ.Component {
2080 var templ_7745c5c3_Var101 string2080 var templ_7745c5c3_Var101 string
2081 templ_7745c5c3_Var101, templ_7745c5c3_Err = templ.JoinStringErrs(p.ChecksSum.Title)2081 templ_7745c5c3_Var101, templ_7745c5c3_Err = templ.JoinStringErrs(p.ChecksSum.Title)
2082 if templ_7745c5c3_Err != nil {2082 if templ_7745c5c3_Err != nil {
2083- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 385, Col: 26}2083+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 389, Col: 26}
2084 }2084 }
2085 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var101))2085 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var101))
2086 if templ_7745c5c3_Err != nil {2086 if templ_7745c5c3_Err != nil {
@@ -2114,7 +2114,7 @@ func mrFooter(p MRPage) templ.Component {
2114 var templ_7745c5c3_Var102 templ.SafeURL2114 var templ_7745c5c3_Var102 templ.SafeURL
2115 templ_7745c5c3_Var102, templ_7745c5c3_Err = templ.JoinURLErrs(templ.SafeURL(c.Href))2115 templ_7745c5c3_Var102, templ_7745c5c3_Err = templ.JoinURLErrs(templ.SafeURL(c.Href))
2116 if templ_7745c5c3_Err != nil {2116 if templ_7745c5c3_Err != nil {
2117- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 398, Col: 43}2117+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 402, Col: 43}
2118 }2118 }
2119 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var102))2119 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var102))
2120 if templ_7745c5c3_Err != nil {2120 if templ_7745c5c3_Err != nil {
@@ -2127,7 +2127,7 @@ func mrFooter(p MRPage) templ.Component {
2127 var templ_7745c5c3_Var103 string2127 var templ_7745c5c3_Var103 string
2128 templ_7745c5c3_Var103, templ_7745c5c3_Err = templ.JoinStringErrs(c.Short)2128 templ_7745c5c3_Var103, templ_7745c5c3_Err = templ.JoinStringErrs(c.Short)
2129 if templ_7745c5c3_Err != nil {2129 if templ_7745c5c3_Err != nil {
2130- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 398, Col: 55}2130+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 402, Col: 55}
2131 }2131 }
2132 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var103))2132 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var103))
2133 if templ_7745c5c3_Err != nil {2133 if templ_7745c5c3_Err != nil {
@@ -2140,7 +2140,7 @@ func mrFooter(p MRPage) templ.Component {
2140 var templ_7745c5c3_Var104 string2140 var templ_7745c5c3_Var104 string
2141 templ_7745c5c3_Var104, templ_7745c5c3_Err = templ.JoinStringErrs(c.Subject)2141 templ_7745c5c3_Var104, templ_7745c5c3_Err = templ.JoinStringErrs(c.Subject)
2142 if templ_7745c5c3_Err != nil {2142 if templ_7745c5c3_Err != nil {
2143- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 399, Col: 23}2143+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 403, Col: 23}
2144 }2144 }
2145 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var104))2145 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var104))
2146 if templ_7745c5c3_Err != nil {2146 if templ_7745c5c3_Err != nil {
@@ -2153,7 +2153,7 @@ func mrFooter(p MRPage) templ.Component {
2153 var templ_7745c5c3_Var105 string2153 var templ_7745c5c3_Var105 string
2154 templ_7745c5c3_Var105, templ_7745c5c3_Err = templ.JoinStringErrs(c.Author)2154 templ_7745c5c3_Var105, templ_7745c5c3_Err = templ.JoinStringErrs(c.Author)
2155 if templ_7745c5c3_Err != nil {2155 if templ_7745c5c3_Err != nil {
2156- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 400, Col: 22}2156+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 404, Col: 22}
2157 }2157 }
2158 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var105))2158 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var105))
2159 if templ_7745c5c3_Err != nil {2159 if templ_7745c5c3_Err != nil {
@@ -2171,7 +2171,7 @@ func mrFooter(p MRPage) templ.Component {
2171 var templ_7745c5c3_Var106 string2171 var templ_7745c5c3_Var106 string
2172 templ_7745c5c3_Var106, templ_7745c5c3_Err = templ.ResolveAttributeValue(c.WhenAt)2172 templ_7745c5c3_Var106, templ_7745c5c3_Err = templ.ResolveAttributeValue(c.WhenAt)
2173 if templ_7745c5c3_Err != nil {2173 if templ_7745c5c3_Err != nil {
2174- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 403, Col: 35}2174+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 407, Col: 35}
2175 }2175 }
2176 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ_7745c5c3_Var106)2176 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ_7745c5c3_Var106)
2177 if templ_7745c5c3_Err != nil {2177 if templ_7745c5c3_Err != nil {
@@ -2184,7 +2184,7 @@ func mrFooter(p MRPage) templ.Component {
2184 var templ_7745c5c3_Var107 string2184 var templ_7745c5c3_Var107 string
2185 templ_7745c5c3_Var107, templ_7745c5c3_Err = templ.JoinStringErrs(c.When)2185 templ_7745c5c3_Var107, templ_7745c5c3_Err = templ.JoinStringErrs(c.When)
2186 if templ_7745c5c3_Err != nil {2186 if templ_7745c5c3_Err != nil {
2187- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 403, Col: 46}2187+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 407, Col: 46}
2188 }2188 }
2189 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var107))2189 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var107))
2190 if templ_7745c5c3_Err != nil {2190 if templ_7745c5c3_Err != nil {
@@ -2238,7 +2238,7 @@ func mrFooter(p MRPage) templ.Component {
2238 var templ_7745c5c3_Var108 string2238 var templ_7745c5c3_Var108 string
2239 templ_7745c5c3_Var108, templ_7745c5c3_Err = templ.JoinStringErrs(p.CommitsNote)2239 templ_7745c5c3_Var108, templ_7745c5c3_Err = templ.JoinStringErrs(p.CommitsNote)
2240 if templ_7745c5c3_Err != nil {2240 if templ_7745c5c3_Err != nil {
2241- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 424, Col: 36}2241+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 428, Col: 36}
2242 }2242 }
2243 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var108))2243 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var108))
2244 if templ_7745c5c3_Err != nil {2244 if templ_7745c5c3_Err != nil {
@@ -2293,7 +2293,7 @@ func mrRail(p MRPage) templ.Component {
2293 var templ_7745c5c3_Var110 string2293 var templ_7745c5c3_Var110 string
2294 templ_7745c5c3_Var110, templ_7745c5c3_Err = templ.JoinStringErrs(itoa(len(p.Files)))2294 templ_7745c5c3_Var110, templ_7745c5c3_Err = templ.JoinStringErrs(itoa(len(p.Files)))
2295 if templ_7745c5c3_Err != nil {2295 if templ_7745c5c3_Err != nil {
2296- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 437, Col: 49}2296+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 441, Col: 49}
2297 }2297 }
2298 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var110))2298 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var110))
2299 if templ_7745c5c3_Err != nil {2299 if templ_7745c5c3_Err != nil {
@@ -2324,7 +2324,7 @@ func mrRail(p MRPage) templ.Component {
2324 var templ_7745c5c3_Var111 templ.SafeURL2324 var templ_7745c5c3_Var111 templ.SafeURL
2325 templ_7745c5c3_Var111, templ_7745c5c3_Err = templ.JoinURLErrs(templ.SafeURL(v.Href))2325 templ_7745c5c3_Var111, templ_7745c5c3_Err = templ.JoinURLErrs(templ.SafeURL(v.Href))
2326 if templ_7745c5c3_Err != nil {2326 if templ_7745c5c3_Err != nil {
2327- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 450, Col: 37}2327+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 454, Col: 37}
2328 }2328 }
2329 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var111))2329 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var111))
2330 if templ_7745c5c3_Err != nil {2330 if templ_7745c5c3_Err != nil {
@@ -2337,7 +2337,7 @@ func mrRail(p MRPage) templ.Component {
2337 var templ_7745c5c3_Var112 string2337 var templ_7745c5c3_Var112 string
2338 templ_7745c5c3_Var112, templ_7745c5c3_Err = templ.JoinStringErrs(v.Author)2338 templ_7745c5c3_Var112, templ_7745c5c3_Err = templ.JoinStringErrs(v.Author)
2339 if templ_7745c5c3_Err != nil {2339 if templ_7745c5c3_Err != nil {
2340- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 450, Col: 50}2340+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 454, Col: 50}
2341 }2341 }
2342 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var112))2342 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var112))
2343 if templ_7745c5c3_Err != nil {2343 if templ_7745c5c3_Err != nil {
@@ -2350,7 +2350,7 @@ func mrRail(p MRPage) templ.Component {
2350 var templ_7745c5c3_Var113 string2350 var templ_7745c5c3_Var113 string
2351 templ_7745c5c3_Var113, templ_7745c5c3_Err = templ.JoinStringErrs(v.Label)2351 templ_7745c5c3_Var113, templ_7745c5c3_Err = templ.JoinStringErrs(v.Label)
2352 if templ_7745c5c3_Err != nil {2352 if templ_7745c5c3_Err != nil {
2353- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 450, Col: 63}2353+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 454, Col: 63}
2354 }2354 }
2355 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var113))2355 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var113))
2356 if templ_7745c5c3_Err != nil {2356 if templ_7745c5c3_Err != nil {
@@ -2412,7 +2412,7 @@ func mrBar(p MRPage) templ.Component {
2412 var templ_7745c5c3_Var115 string2412 var templ_7745c5c3_Var115 string
2413 templ_7745c5c3_Var115, templ_7745c5c3_Err = templ.JoinStringErrs(plural(p.NFiles, "file", "files"))2413 templ_7745c5c3_Var115, templ_7745c5c3_Err = templ.JoinStringErrs(plural(p.NFiles, "file", "files"))
2414 if templ_7745c5c3_Err != nil {2414 if templ_7745c5c3_Err != nil {
2415- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 467, Col: 55}2415+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 471, Col: 55}
2416 }2416 }
2417 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var115))2417 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var115))
2418 if templ_7745c5c3_Err != nil {2418 if templ_7745c5c3_Err != nil {
@@ -2425,7 +2425,7 @@ func mrBar(p MRPage) templ.Component {
2425 var templ_7745c5c3_Var116 string2425 var templ_7745c5c3_Var116 string
2426 templ_7745c5c3_Var116, templ_7745c5c3_Err = templ.JoinStringErrs(itoa(p.Adds))2426 templ_7745c5c3_Var116, templ_7745c5c3_Err = templ.JoinStringErrs(itoa(p.Adds))
2427 if templ_7745c5c3_Err != nil {2427 if templ_7745c5c3_Err != nil {
2428- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 467, Col: 95}2428+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 471, Col: 95}
2429 }2429 }
2430 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var116))2430 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var116))
2431 if templ_7745c5c3_Err != nil {2431 if templ_7745c5c3_Err != nil {
@@ -2438,7 +2438,7 @@ func mrBar(p MRPage) templ.Component {
2438 var templ_7745c5c3_Var117 string2438 var templ_7745c5c3_Var117 string
2439 templ_7745c5c3_Var117, templ_7745c5c3_Err = templ.JoinStringErrs(itoa(p.Dels))2439 templ_7745c5c3_Var117, templ_7745c5c3_Err = templ.JoinStringErrs(itoa(p.Dels))
2440 if templ_7745c5c3_Err != nil {2440 if templ_7745c5c3_Err != nil {
2441- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 467, Col: 140}2441+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 471, Col: 140}
2442 }2442 }
2443 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var117))2443 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var117))
2444 if templ_7745c5c3_Err != nil {2444 if templ_7745c5c3_Err != nil {
@@ -2550,7 +2550,7 @@ func mergeMenu(p MRPage) templ.Component {
2550 var templ_7745c5c3_Var119 string2550 var templ_7745c5c3_Var119 string
2551 templ_7745c5c3_Var119, templ_7745c5c3_Err = templ.JoinStringErrs(p.Box.Error)2551 templ_7745c5c3_Var119, templ_7745c5c3_Err = templ.JoinStringErrs(p.Box.Error)
2552 if templ_7745c5c3_Err != nil {2552 if templ_7745c5c3_Err != nil {
2553- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 501, Col: 47}2553+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 505, Col: 47}
2554 }2554 }
2555 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var119))2555 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var119))
2556 if templ_7745c5c3_Err != nil {2556 if templ_7745c5c3_Err != nil {
@@ -2569,7 +2569,7 @@ func mergeMenu(p MRPage) templ.Component {
2569 var templ_7745c5c3_Var120 templ.SafeURL2569 var templ_7745c5c3_Var120 templ.SafeURL
2570 templ_7745c5c3_Var120, templ_7745c5c3_Err = templ.JoinURLErrs(templ.SafeURL(p.Box.ReadyAction))2570 templ_7745c5c3_Var120, templ_7745c5c3_Err = templ.JoinURLErrs(templ.SafeURL(p.Box.ReadyAction))
2571 if templ_7745c5c3_Err != nil {2571 if templ_7745c5c3_Err != nil {
2572- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 505, Col: 80}2572+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 509, Col: 80}
2573 }2573 }
2574 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var120))2574 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var120))
2575 if templ_7745c5c3_Err != nil {2575 if templ_7745c5c3_Err != nil {
@@ -2591,7 +2591,7 @@ func mergeMenu(p MRPage) templ.Component {
2591 var templ_7745c5c3_Var121 templ.SafeURL2591 var templ_7745c5c3_Var121 templ.SafeURL
2592 templ_7745c5c3_Var121, templ_7745c5c3_Err = templ.JoinURLErrs(templ.SafeURL(p.Box.MergeAction))2592 templ_7745c5c3_Var121, templ_7745c5c3_Err = templ.JoinURLErrs(templ.SafeURL(p.Box.MergeAction))
2593 if templ_7745c5c3_Err != nil {2593 if templ_7745c5c3_Err != nil {
2594- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 510, Col: 80}2594+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 514, Col: 80}
2595 }2595 }
2596 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var121))2596 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var121))
2597 if templ_7745c5c3_Err != nil {2597 if templ_7745c5c3_Err != nil {
@@ -2604,7 +2604,7 @@ func mergeMenu(p MRPage) templ.Component {
2604 var templ_7745c5c3_Var122 string2604 var templ_7745c5c3_Var122 string
2605 templ_7745c5c3_Var122, templ_7745c5c3_Err = templ.ResolveAttributeValue(p.Box.Head)2605 templ_7745c5c3_Var122, templ_7745c5c3_Err = templ.ResolveAttributeValue(p.Box.Head)
2606 if templ_7745c5c3_Err != nil {2606 if templ_7745c5c3_Err != nil {
2607- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 511, Col: 59}2607+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 515, Col: 59}
2608 }2608 }
2609 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ_7745c5c3_Var122)2609 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ_7745c5c3_Var122)
2610 if templ_7745c5c3_Err != nil {2610 if templ_7745c5c3_Err != nil {
@@ -2622,7 +2622,7 @@ func mergeMenu(p MRPage) templ.Component {
2622 var templ_7745c5c3_Var123 string2622 var templ_7745c5c3_Var123 string
2623 templ_7745c5c3_Var123, templ_7745c5c3_Err = templ.ResolveAttributeValue(m.Value)2623 templ_7745c5c3_Var123, templ_7745c5c3_Err = templ.ResolveAttributeValue(m.Value)
2624 if templ_7745c5c3_Err != nil {2624 if templ_7745c5c3_Err != nil {
2625- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 519, Col: 24}2625+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 523, Col: 24}
2626 }2626 }
2627 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ_7745c5c3_Var123)2627 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ_7745c5c3_Var123)
2628 if templ_7745c5c3_Err != nil {2628 if templ_7745c5c3_Err != nil {
@@ -2651,7 +2651,7 @@ func mergeMenu(p MRPage) templ.Component {
2651 var templ_7745c5c3_Var124 string2651 var templ_7745c5c3_Var124 string
2652 templ_7745c5c3_Var124, templ_7745c5c3_Err = templ.ResolveAttributeValue(m.Reason)2652 templ_7745c5c3_Var124, templ_7745c5c3_Err = templ.ResolveAttributeValue(m.Reason)
2653 if templ_7745c5c3_Err != nil {2653 if templ_7745c5c3_Err != nil {
2654- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 522, Col: 25}2654+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 526, Col: 25}
2655 }2655 }
2656 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ_7745c5c3_Var124)2656 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ_7745c5c3_Var124)
2657 if templ_7745c5c3_Err != nil {2657 if templ_7745c5c3_Err != nil {
@@ -2664,7 +2664,7 @@ func mergeMenu(p MRPage) templ.Component {
2664 var templ_7745c5c3_Var125 string2664 var templ_7745c5c3_Var125 string
2665 templ_7745c5c3_Var125, templ_7745c5c3_Err = templ.JoinStringErrs(m.Label)2665 templ_7745c5c3_Var125, templ_7745c5c3_Err = templ.JoinStringErrs(m.Label)
2666 if templ_7745c5c3_Err != nil {2666 if templ_7745c5c3_Err != nil {
2667- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 526, Col: 17}2667+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 530, Col: 17}
2668 }2668 }
2669 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var125))2669 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var125))
2670 if templ_7745c5c3_Err != nil {2670 if templ_7745c5c3_Err != nil {
@@ -2682,7 +2682,7 @@ func mergeMenu(p MRPage) templ.Component {
2682 var templ_7745c5c3_Var126 string2682 var templ_7745c5c3_Var126 string
2683 templ_7745c5c3_Var126, templ_7745c5c3_Err = templ.JoinStringErrs(itoa(i + 1))2683 templ_7745c5c3_Var126, templ_7745c5c3_Err = templ.JoinStringErrs(itoa(i + 1))
2684 if templ_7745c5c3_Err != nil {2684 if templ_7745c5c3_Err != nil {
2685- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 528, Col: 46}2685+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 532, Col: 46}
2686 }2686 }
2687 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var126))2687 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var126))
2688 if templ_7745c5c3_Err != nil {2688 if templ_7745c5c3_Err != nil {
@@ -2710,7 +2710,7 @@ func mergeMenu(p MRPage) templ.Component {
2710 var templ_7745c5c3_Var127 string2710 var templ_7745c5c3_Var127 string
2711 templ_7745c5c3_Var127, templ_7745c5c3_Err = templ.JoinStringErrs(p.Source)2711 templ_7745c5c3_Var127, templ_7745c5c3_Err = templ.JoinStringErrs(p.Source)
2712 if templ_7745c5c3_Err != nil {2712 if templ_7745c5c3_Err != nil {
2713- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 534, Col: 102}2713+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 538, Col: 102}
2714 }2714 }
2715 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var127))2715 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var127))
2716 if templ_7745c5c3_Err != nil {2716 if templ_7745c5c3_Err != nil {
@@ -2738,7 +2738,7 @@ func mergeMenu(p MRPage) templ.Component {
2738 var templ_7745c5c3_Var128 string2738 var templ_7745c5c3_Var128 string
2739 templ_7745c5c3_Var128, templ_7745c5c3_Err = templ.ResolveAttributeValue(p.Box.MergeTitle())2739 templ_7745c5c3_Var128, templ_7745c5c3_Err = templ.ResolveAttributeValue(p.Box.MergeTitle())
2740 if templ_7745c5c3_Err != nil {2740 if templ_7745c5c3_Err != nil {
2741- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 542, Col: 33}2741+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 546, Col: 33}
2742 }2742 }
2743 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ_7745c5c3_Var128)2743 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ_7745c5c3_Var128)
2744 if templ_7745c5c3_Err != nil {2744 if templ_7745c5c3_Err != nil {
@@ -2751,7 +2751,7 @@ func mergeMenu(p MRPage) templ.Component {
2751 var templ_7745c5c3_Var129 string2751 var templ_7745c5c3_Var129 string
2752 templ_7745c5c3_Var129, templ_7745c5c3_Err = templ.JoinStringErrs(p.Target)2752 templ_7745c5c3_Var129, templ_7745c5c3_Err = templ.JoinStringErrs(p.Target)
2753 if templ_7745c5c3_Err != nil {2753 if templ_7745c5c3_Err != nil {
2754- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 545, Col: 28}2754+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 549, Col: 28}
2755 }2755 }
2756 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var129))2756 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var129))
2757 if templ_7745c5c3_Err != nil {2757 if templ_7745c5c3_Err != nil {
@@ -2800,7 +2800,7 @@ func MRMergeability(v MergeabilityView) templ.Component {
2800 var templ_7745c5c3_Var131 string2800 var templ_7745c5c3_Var131 string
2801 templ_7745c5c3_Var131, templ_7745c5c3_Err = templ.ResolveAttributeValue(v.State)2801 templ_7745c5c3_Var131, templ_7745c5c3_Err = templ.ResolveAttributeValue(v.State)
2802 if templ_7745c5c3_Err != nil {2802 if templ_7745c5c3_Err != nil {
2803- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 558, Col: 22}2803+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 562, Col: 22}
2804 }2804 }
2805 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ_7745c5c3_Var131)2805 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ_7745c5c3_Var131)
2806 if templ_7745c5c3_Err != nil {2806 if templ_7745c5c3_Err != nil {
@@ -2813,7 +2813,7 @@ func MRMergeability(v MergeabilityView) templ.Component {
2813 var templ_7745c5c3_Var132 string2813 var templ_7745c5c3_Var132 string
2814 templ_7745c5c3_Var132, templ_7745c5c3_Err = templ.ResolveAttributeValue(strconv.FormatBool(v.FFOk))2814 templ_7745c5c3_Var132, templ_7745c5c3_Err = templ.ResolveAttributeValue(strconv.FormatBool(v.FFOk))
2815 if templ_7745c5c3_Err != nil {2815 if templ_7745c5c3_Err != nil {
2816- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 559, Col: 41}2816+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 563, Col: 41}
2817 }2817 }
2818 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ_7745c5c3_Var132)2818 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ_7745c5c3_Var132)
2819 if templ_7745c5c3_Err != nil {2819 if templ_7745c5c3_Err != nil {
@@ -2826,7 +2826,7 @@ func MRMergeability(v MergeabilityView) templ.Component {
2826 var templ_7745c5c3_Var133 string2826 var templ_7745c5c3_Var133 string
2827 templ_7745c5c3_Var133, templ_7745c5c3_Err = templ.ResolveAttributeValue(strconv.FormatBool(v.MergeOk))2827 templ_7745c5c3_Var133, templ_7745c5c3_Err = templ.ResolveAttributeValue(strconv.FormatBool(v.MergeOk))
2828 if templ_7745c5c3_Err != nil {2828 if templ_7745c5c3_Err != nil {
2829- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 560, Col: 47}2829+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 564, Col: 47}
2830 }2830 }
2831 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ_7745c5c3_Var133)2831 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ_7745c5c3_Var133)
2832 if templ_7745c5c3_Err != nil {2832 if templ_7745c5c3_Err != nil {
@@ -2839,7 +2839,7 @@ func MRMergeability(v MergeabilityView) templ.Component {
2839 var templ_7745c5c3_Var134 string2839 var templ_7745c5c3_Var134 string
2840 templ_7745c5c3_Var134, templ_7745c5c3_Err = templ.ResolveAttributeValue(v.FFReason)2840 templ_7745c5c3_Var134, templ_7745c5c3_Err = templ.ResolveAttributeValue(v.FFReason)
2841 if templ_7745c5c3_Err != nil {2841 if templ_7745c5c3_Err != nil {
2842- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 561, Col: 29}2842+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 565, Col: 29}
2843 }2843 }
2844 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ_7745c5c3_Var134)2844 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ_7745c5c3_Var134)
2845 if templ_7745c5c3_Err != nil {2845 if templ_7745c5c3_Err != nil {
@@ -2852,7 +2852,7 @@ func MRMergeability(v MergeabilityView) templ.Component {
2852 var templ_7745c5c3_Var135 string2852 var templ_7745c5c3_Var135 string
2853 templ_7745c5c3_Var135, templ_7745c5c3_Err = templ.ResolveAttributeValue(v.MergeReason)2853 templ_7745c5c3_Var135, templ_7745c5c3_Err = templ.ResolveAttributeValue(v.MergeReason)
2854 if templ_7745c5c3_Err != nil {2854 if templ_7745c5c3_Err != nil {
2855- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 562, Col: 35}2855+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 566, Col: 35}
2856 }2856 }
2857 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ_7745c5c3_Var135)2857 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ_7745c5c3_Var135)
2858 if templ_7745c5c3_Err != nil {2858 if templ_7745c5c3_Err != nil {
@@ -2865,7 +2865,7 @@ func MRMergeability(v MergeabilityView) templ.Component {
2865 var templ_7745c5c3_Var136 string2865 var templ_7745c5c3_Var136 string
2866 templ_7745c5c3_Var136, templ_7745c5c3_Err = templ.ResolveAttributeValue(v.State)2866 templ_7745c5c3_Var136, templ_7745c5c3_Err = templ.ResolveAttributeValue(v.State)
2867 if templ_7745c5c3_Err != nil {2867 if templ_7745c5c3_Err != nil {
2868- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 564, Col: 42}2868+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 568, Col: 42}
2869 }2869 }
2870 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ_7745c5c3_Var136)2870 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ_7745c5c3_Var136)
2871 if templ_7745c5c3_Err != nil {2871 if templ_7745c5c3_Err != nil {
@@ -2878,7 +2878,7 @@ func MRMergeability(v MergeabilityView) templ.Component {
2878 var templ_7745c5c3_Var137 string2878 var templ_7745c5c3_Var137 string
2879 templ_7745c5c3_Var137, templ_7745c5c3_Err = templ.JoinStringErrs(v.Label)2879 templ_7745c5c3_Var137, templ_7745c5c3_Err = templ.JoinStringErrs(v.Label)
2880 if templ_7745c5c3_Err != nil {2880 if templ_7745c5c3_Err != nil {
2881- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 564, Col: 54}2881+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 568, Col: 54}
2882 }2882 }
2883 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var137))2883 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var137))
2884 if templ_7745c5c3_Err != nil {2884 if templ_7745c5c3_Err != nil {
@@ -2892,7 +2892,7 @@ func MRMergeability(v MergeabilityView) templ.Component {
2892 var templ_7745c5c3_Var138 string2892 var templ_7745c5c3_Var138 string
2893 templ_7745c5c3_Var138, templ_7745c5c3_Err = templ.JoinStringErrs(" ")2893 templ_7745c5c3_Var138, templ_7745c5c3_Err = templ.JoinStringErrs(" ")
2894 if templ_7745c5c3_Err != nil {2894 if templ_7745c5c3_Err != nil {
2895- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 566, Col: 8}2895+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 570, Col: 8}
2896 }2896 }
2897 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var138))2897 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var138))
2898 if templ_7745c5c3_Err != nil {2898 if templ_7745c5c3_Err != nil {
@@ -2905,7 +2905,7 @@ func MRMergeability(v MergeabilityView) templ.Component {
2905 var templ_7745c5c3_Var139 string2905 var templ_7745c5c3_Var139 string
2906 templ_7745c5c3_Var139, templ_7745c5c3_Err = templ.JoinStringErrs(v.Detail)2906 templ_7745c5c3_Var139, templ_7745c5c3_Err = templ.JoinStringErrs(v.Detail)
2907 if templ_7745c5c3_Err != nil {2907 if templ_7745c5c3_Err != nil {
2908- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 566, Col: 38}2908+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 570, Col: 38}
2909 }2909 }
2910 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var139))2910 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var139))
2911 if templ_7745c5c3_Err != nil {2911 if templ_7745c5c3_Err != nil {
@@ -2933,7 +2933,7 @@ func MRMergeability(v MergeabilityView) templ.Component {
2933 var templ_7745c5c3_Var140 string2933 var templ_7745c5c3_Var140 string
2934 templ_7745c5c3_Var140, templ_7745c5c3_Err = templ.JoinStringErrs(path)2934 templ_7745c5c3_Var140, templ_7745c5c3_Err = templ.JoinStringErrs(path)
2935 if templ_7745c5c3_Err != nil {2935 if templ_7745c5c3_Err != nil {
2936- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 572, Col: 20}2936+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 576, Col: 20}
2937 }2937 }
2938 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var140))2938 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var140))
2939 if templ_7745c5c3_Err != nil {2939 if templ_7745c5c3_Err != nil {
@@ -2957,7 +2957,7 @@ func MRMergeability(v MergeabilityView) templ.Component {
2957 var templ_7745c5c3_Var141 string2957 var templ_7745c5c3_Var141 string
2958 templ_7745c5c3_Var141, templ_7745c5c3_Err = templ.JoinStringErrs(v.PathsNote)2958 templ_7745c5c3_Var141, templ_7745c5c3_Err = templ.JoinStringErrs(v.PathsNote)
2959 if templ_7745c5c3_Err != nil {2959 if templ_7745c5c3_Err != nil {
2960- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 577, Col: 30}2960+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 581, Col: 30}
2961 }2961 }
2962 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var141))2962 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var141))
2963 if templ_7745c5c3_Err != nil {2963 if templ_7745c5c3_Err != nil {
@@ -3071,7 +3071,7 @@ func moreMenu(p MRPage) templ.Component {
3071 var templ_7745c5c3_Var145 string3071 var templ_7745c5c3_Var145 string
3072 templ_7745c5c3_Var145, templ_7745c5c3_Err = templ.JoinStringErrs(strings.Join(p.Modes, ", "))3072 templ_7745c5c3_Var145, templ_7745c5c3_Err = templ.JoinStringErrs(strings.Join(p.Modes, ", "))
3073 if templ_7745c5c3_Err != nil {3073 if templ_7745c5c3_Err != nil {
3074- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 604, Col: 38}3074+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 608, Col: 38}
3075 }3075 }
3076 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var145))3076 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var145))
3077 if templ_7745c5c3_Err != nil {3077 if templ_7745c5c3_Err != nil {
@@ -3110,7 +3110,7 @@ func moreMenu(p MRPage) templ.Component {
3110 var templ_7745c5c3_Var146 string3110 var templ_7745c5c3_Var146 string
3111 templ_7745c5c3_Var146, templ_7745c5c3_Err = templ.JoinStringErrs(p.Box.Fingerprint)3111 templ_7745c5c3_Var146, templ_7745c5c3_Err = templ.JoinStringErrs(p.Box.Fingerprint)
3112 if templ_7745c5c3_Err != nil {3112 if templ_7745c5c3_Err != nil {
3113- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 620, Col: 44}3113+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 624, Col: 44}
3114 }3114 }
3115 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var146))3115 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var146))
3116 if templ_7745c5c3_Err != nil {3116 if templ_7745c5c3_Err != nil {
@@ -3138,7 +3138,7 @@ func moreMenu(p MRPage) templ.Component {
3138 var templ_7745c5c3_Var147 templ.SafeURL3138 var templ_7745c5c3_Var147 templ.SafeURL
3139 templ_7745c5c3_Var147, templ_7745c5c3_Err = templ.JoinURLErrs(templ.SafeURL(p.Box.ReadAction))3139 templ_7745c5c3_Var147, templ_7745c5c3_Err = templ.JoinURLErrs(templ.SafeURL(p.Box.ReadAction))
3140 if templ_7745c5c3_Err != nil {3140 if templ_7745c5c3_Err != nil {
3141- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 626, Col: 65}3141+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 630, Col: 65}
3142 }3142 }
3143 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var147))3143 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var147))
3144 if templ_7745c5c3_Err != nil {3144 if templ_7745c5c3_Err != nil {
@@ -3151,7 +3151,7 @@ func moreMenu(p MRPage) templ.Component {
3151 var templ_7745c5c3_Var148 string3151 var templ_7745c5c3_Var148 string
3152 templ_7745c5c3_Var148, templ_7745c5c3_Err = templ.ResolveAttributeValue(p.Box.Head)3152 templ_7745c5c3_Var148, templ_7745c5c3_Err = templ.ResolveAttributeValue(p.Box.Head)
3153 if templ_7745c5c3_Err != nil {3153 if templ_7745c5c3_Err != nil {
3154- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 627, Col: 60}3154+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 631, Col: 60}
3155 }3155 }
3156 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ_7745c5c3_Var148)3156 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ_7745c5c3_Var148)
3157 if templ_7745c5c3_Err != nil {3157 if templ_7745c5c3_Err != nil {
@@ -3169,7 +3169,7 @@ func moreMenu(p MRPage) templ.Component {
3169 var templ_7745c5c3_Var149 templ.SafeURL3169 var templ_7745c5c3_Var149 templ.SafeURL
3170 templ_7745c5c3_Var149, templ_7745c5c3_Err = templ.JoinURLErrs(templ.SafeURL(p.Box.CloseAction))3170 templ_7745c5c3_Var149, templ_7745c5c3_Err = templ.JoinURLErrs(templ.SafeURL(p.Box.CloseAction))
3171 if templ_7745c5c3_Err != nil {3171 if templ_7745c5c3_Err != nil {
3172- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 631, Col: 65}3172+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 635, Col: 65}
3173 }3173 }
3174 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var149))3174 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var149))
3175 if templ_7745c5c3_Err != nil {3175 if templ_7745c5c3_Err != nil {
@@ -3242,7 +3242,7 @@ func Compare(l Layout, p ComparePage) templ.Component {
3242 var templ_7745c5c3_Var152 string3242 var templ_7745c5c3_Var152 string
3243 templ_7745c5c3_Var152, templ_7745c5c3_Err = templ.JoinStringErrs(p.Source)3243 templ_7745c5c3_Var152, templ_7745c5c3_Err = templ.JoinStringErrs(p.Source)
3244 if templ_7745c5c3_Err != nil {3244 if templ_7745c5c3_Err != nil {
3245- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 648, Col: 17}3245+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 652, Col: 17}
3246 }3246 }
3247 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var152))3247 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var152))
3248 if templ_7745c5c3_Err != nil {3248 if templ_7745c5c3_Err != nil {
@@ -3255,7 +3255,7 @@ func Compare(l Layout, p ComparePage) templ.Component {
3255 var templ_7745c5c3_Var153 string3255 var templ_7745c5c3_Var153 string
3256 templ_7745c5c3_Var153, templ_7745c5c3_Err = templ.JoinStringErrs(p.Target)3256 templ_7745c5c3_Var153, templ_7745c5c3_Err = templ.JoinStringErrs(p.Target)
3257 if templ_7745c5c3_Err != nil {3257 if templ_7745c5c3_Err != nil {
3258- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 648, Col: 34}3258+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 652, Col: 34}
3259 }3259 }
3260 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var153))3260 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var153))
3261 if templ_7745c5c3_Err != nil {3261 if templ_7745c5c3_Err != nil {
@@ -3268,7 +3268,7 @@ func Compare(l Layout, p ComparePage) templ.Component {
3268 var templ_7745c5c3_Var154 templ.SafeURL3268 var templ_7745c5c3_Var154 templ.SafeURL
3269 templ_7745c5c3_Var154, templ_7745c5c3_Err = templ.JoinURLErrs(templ.SafeURL(p.SourceHref))3269 templ_7745c5c3_Var154, templ_7745c5c3_Err = templ.JoinURLErrs(templ.SafeURL(p.SourceHref))
3270 if templ_7745c5c3_Err != nil {3270 if templ_7745c5c3_Err != nil {
3271- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 651, Col: 45}3271+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 655, Col: 45}
3272 }3272 }
3273 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var154))3273 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var154))
3274 if templ_7745c5c3_Err != nil {3274 if templ_7745c5c3_Err != nil {
@@ -3281,7 +3281,7 @@ func Compare(l Layout, p ComparePage) templ.Component {
3281 var templ_7745c5c3_Var155 string3281 var templ_7745c5c3_Var155 string
3282 templ_7745c5c3_Var155, templ_7745c5c3_Err = templ.JoinStringErrs(p.Source)3282 templ_7745c5c3_Var155, templ_7745c5c3_Err = templ.JoinStringErrs(p.Source)
3283 if templ_7745c5c3_Err != nil {3283 if templ_7745c5c3_Err != nil {
3284- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 651, Col: 58}3284+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 655, Col: 58}
3285 }3285 }
3286 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var155))3286 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var155))
3287 if templ_7745c5c3_Err != nil {3287 if templ_7745c5c3_Err != nil {
@@ -3294,7 +3294,7 @@ func Compare(l Layout, p ComparePage) templ.Component {
3294 var templ_7745c5c3_Var156 templ.SafeURL3294 var templ_7745c5c3_Var156 templ.SafeURL
3295 templ_7745c5c3_Var156, templ_7745c5c3_Err = templ.JoinURLErrs(templ.SafeURL(p.TargetHref))3295 templ_7745c5c3_Var156, templ_7745c5c3_Err = templ.JoinURLErrs(templ.SafeURL(p.TargetHref))
3296 if templ_7745c5c3_Err != nil {3296 if templ_7745c5c3_Err != nil {
3297- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 653, Col: 45}3297+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 657, Col: 45}
3298 }3298 }
3299 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var156))3299 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var156))
3300 if templ_7745c5c3_Err != nil {3300 if templ_7745c5c3_Err != nil {
@@ -3307,7 +3307,7 @@ func Compare(l Layout, p ComparePage) templ.Component {
3307 var templ_7745c5c3_Var157 string3307 var templ_7745c5c3_Var157 string
3308 templ_7745c5c3_Var157, templ_7745c5c3_Err = templ.JoinStringErrs(p.Target)3308 templ_7745c5c3_Var157, templ_7745c5c3_Err = templ.JoinStringErrs(p.Target)
3309 if templ_7745c5c3_Err != nil {3309 if templ_7745c5c3_Err != nil {
3310- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 653, Col: 58}3310+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 657, Col: 58}
3311 }3311 }
3312 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var157))3312 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var157))
3313 if templ_7745c5c3_Err != nil {3313 if templ_7745c5c3_Err != nil {
@@ -3320,7 +3320,7 @@ func Compare(l Layout, p ComparePage) templ.Component {
3320 var templ_7745c5c3_Var158 string3320 var templ_7745c5c3_Var158 string
3321 templ_7745c5c3_Var158, templ_7745c5c3_Err = templ.JoinStringErrs(p.AheadText)3321 templ_7745c5c3_Var158, templ_7745c5c3_Err = templ.JoinStringErrs(p.AheadText)
3322 if templ_7745c5c3_Err != nil {3322 if templ_7745c5c3_Err != nil {
3323- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 655, Col: 21}3323+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 659, Col: 21}
3324 }3324 }
3325 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var158))3325 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var158))
3326 if templ_7745c5c3_Err != nil {3326 if templ_7745c5c3_Err != nil {
@@ -3338,7 +3338,7 @@ func Compare(l Layout, p ComparePage) templ.Component {
3338 var templ_7745c5c3_Var159 string3338 var templ_7745c5c3_Var159 string
3339 templ_7745c5c3_Var159, templ_7745c5c3_Err = templ.JoinStringErrs(p.Note)3339 templ_7745c5c3_Var159, templ_7745c5c3_Err = templ.JoinStringErrs(p.Note)
3340 if templ_7745c5c3_Err != nil {3340 if templ_7745c5c3_Err != nil {
3341- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 659, Col: 29}3341+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 663, Col: 29}
3342 }3342 }
3343 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var159))3343 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var159))
3344 if templ_7745c5c3_Err != nil {3344 if templ_7745c5c3_Err != nil {
@@ -3361,7 +3361,7 @@ func Compare(l Layout, p ComparePage) templ.Component {
3361 var templ_7745c5c3_Var160 templ.SafeURL3361 var templ_7745c5c3_Var160 templ.SafeURL
3362 templ_7745c5c3_Var160, templ_7745c5c3_Err = templ.JoinURLErrs(templ.SafeURL(p.Existing.Href))3362 templ_7745c5c3_Var160, templ_7745c5c3_Err = templ.JoinURLErrs(templ.SafeURL(p.Existing.Href))
3363 if templ_7745c5c3_Err != nil {3363 if templ_7745c5c3_Err != nil {
3364- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 662, Col: 114}3364+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 666, Col: 114}
3365 }3365 }
3366 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var160))3366 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var160))
3367 if templ_7745c5c3_Err != nil {3367 if templ_7745c5c3_Err != nil {
@@ -3374,7 +3374,7 @@ func Compare(l Layout, p ComparePage) templ.Component {
3374 var templ_7745c5c3_Var161 string3374 var templ_7745c5c3_Var161 string
3375 templ_7745c5c3_Var161, templ_7745c5c3_Err = templ.JoinStringErrs(p.Existing.Label)3375 templ_7745c5c3_Var161, templ_7745c5c3_Err = templ.JoinStringErrs(p.Existing.Label)
3376 if templ_7745c5c3_Err != nil {3376 if templ_7745c5c3_Err != nil {
3377- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 662, Col: 135}3377+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 666, Col: 135}
3378 }3378 }
3379 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var161))3379 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var161))
3380 if templ_7745c5c3_Err != nil {3380 if templ_7745c5c3_Err != nil {
@@ -3397,7 +3397,7 @@ func Compare(l Layout, p ComparePage) templ.Component {
3397 var templ_7745c5c3_Var162 templ.SafeURL3397 var templ_7745c5c3_Var162 templ.SafeURL
3398 templ_7745c5c3_Var162, templ_7745c5c3_Err = templ.JoinURLErrs(templ.SafeURL(p.Create.Action))3398 templ_7745c5c3_Var162, templ_7745c5c3_Err = templ.JoinURLErrs(templ.SafeURL(p.Create.Action))
3399 if templ_7745c5c3_Err != nil {3399 if templ_7745c5c3_Err != nil {
3400- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 665, Col: 83}3400+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 669, Col: 83}
3401 }3401 }
3402 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var162))3402 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var162))
3403 if templ_7745c5c3_Err != nil {3403 if templ_7745c5c3_Err != nil {
@@ -3410,7 +3410,7 @@ func Compare(l Layout, p ComparePage) templ.Component {
3410 var templ_7745c5c3_Var163 string3410 var templ_7745c5c3_Var163 string
3411 templ_7745c5c3_Var163, templ_7745c5c3_Err = templ.ResolveAttributeValue(p.Create.Source)3411 templ_7745c5c3_Var163, templ_7745c5c3_Err = templ.ResolveAttributeValue(p.Create.Source)
3412 if templ_7745c5c3_Err != nil {3412 if templ_7745c5c3_Err != nil {
3413- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 666, Col: 62}3413+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 670, Col: 62}
3414 }3414 }
3415 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ_7745c5c3_Var163)3415 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ_7745c5c3_Var163)
3416 if templ_7745c5c3_Err != nil {3416 if templ_7745c5c3_Err != nil {
@@ -3423,7 +3423,7 @@ func Compare(l Layout, p ComparePage) templ.Component {
3423 var templ_7745c5c3_Var164 string3423 var templ_7745c5c3_Var164 string
3424 templ_7745c5c3_Var164, templ_7745c5c3_Err = templ.ResolveAttributeValue(p.Create.Target)3424 templ_7745c5c3_Var164, templ_7745c5c3_Err = templ.ResolveAttributeValue(p.Create.Target)
3425 if templ_7745c5c3_Err != nil {3425 if templ_7745c5c3_Err != nil {
3426- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 667, Col: 62}3426+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 671, Col: 62}
3427 }3427 }
3428 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ_7745c5c3_Var164)3428 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ_7745c5c3_Var164)
3429 if templ_7745c5c3_Err != nil {3429 if templ_7745c5c3_Err != nil {
@@ -3436,7 +3436,7 @@ func Compare(l Layout, p ComparePage) templ.Component {
3436 var templ_7745c5c3_Var165 string3436 var templ_7745c5c3_Var165 string
3437 templ_7745c5c3_Var165, templ_7745c5c3_Err = templ.ResolveAttributeValue(p.Create.Title)3437 templ_7745c5c3_Var165, templ_7745c5c3_Err = templ.ResolveAttributeValue(p.Create.Title)
3438 if templ_7745c5c3_Err != nil {3438 if templ_7745c5c3_Err != nil {
3439- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 669, Col: 97}3439+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 673, Col: 97}
3440 }3440 }
3441 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ_7745c5c3_Var165)3441 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ_7745c5c3_Var165)
3442 if templ_7745c5c3_Err != nil {3442 if templ_7745c5c3_Err != nil {
@@ -3459,7 +3459,7 @@ func Compare(l Layout, p ComparePage) templ.Component {
3459 var templ_7745c5c3_Var166 string3459 var templ_7745c5c3_Var166 string
3460 templ_7745c5c3_Var166, templ_7745c5c3_Err = templ.JoinStringErrs(plural(p.NFiles, "file", "files"))3460 templ_7745c5c3_Var166, templ_7745c5c3_Err = templ.JoinStringErrs(plural(p.NFiles, "file", "files"))
3461 if templ_7745c5c3_Err != nil {3461 if templ_7745c5c3_Err != nil {
3462- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 679, Col: 57}3462+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 683, Col: 57}
3463 }3463 }
3464 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var166))3464 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var166))
3465 if templ_7745c5c3_Err != nil {3465 if templ_7745c5c3_Err != nil {
@@ -3472,7 +3472,7 @@ func Compare(l Layout, p ComparePage) templ.Component {
3472 var templ_7745c5c3_Var167 string3472 var templ_7745c5c3_Var167 string
3473 templ_7745c5c3_Var167, templ_7745c5c3_Err = templ.JoinStringErrs(itoa(p.Adds))3473 templ_7745c5c3_Var167, templ_7745c5c3_Err = templ.JoinStringErrs(itoa(p.Adds))
3474 if templ_7745c5c3_Err != nil {3474 if templ_7745c5c3_Err != nil {
3475- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 679, Col: 97}3475+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 683, Col: 97}
3476 }3476 }
3477 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var167))3477 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var167))
3478 if templ_7745c5c3_Err != nil {3478 if templ_7745c5c3_Err != nil {
@@ -3485,7 +3485,7 @@ func Compare(l Layout, p ComparePage) templ.Component {
3485 var templ_7745c5c3_Var168 string3485 var templ_7745c5c3_Var168 string
3486 templ_7745c5c3_Var168, templ_7745c5c3_Err = templ.JoinStringErrs(itoa(p.Dels))3486 templ_7745c5c3_Var168, templ_7745c5c3_Err = templ.JoinStringErrs(itoa(p.Dels))
3487 if templ_7745c5c3_Err != nil {3487 if templ_7745c5c3_Err != nil {
3488- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 679, Col: 142}3488+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 683, Col: 142}
3489 }3489 }
3490 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var168))3490 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var168))
3491 if templ_7745c5c3_Err != nil {3491 if templ_7745c5c3_Err != nil {
@@ -3521,7 +3521,7 @@ func Compare(l Layout, p ComparePage) templ.Component {
3521 var templ_7745c5c3_Var169 string3521 var templ_7745c5c3_Var169 string
3522 templ_7745c5c3_Var169, templ_7745c5c3_Err = templ.ResolveAttributeValue(p.View)3522 templ_7745c5c3_Var169, templ_7745c5c3_Err = templ.ResolveAttributeValue(p.View)
3523 if templ_7745c5c3_Err != nil {3523 if templ_7745c5c3_Err != nil {
3524- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 692, Col: 23}3524+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 696, Col: 23}
3525 }3525 }
3526 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ_7745c5c3_Var169)3526 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ_7745c5c3_Var169)
3527 if templ_7745c5c3_Err != nil {3527 if templ_7745c5c3_Err != nil {
@@ -3539,7 +3539,7 @@ func Compare(l Layout, p ComparePage) templ.Component {
3539 var templ_7745c5c3_Var170 string3539 var templ_7745c5c3_Var170 string
3540 templ_7745c5c3_Var170, templ_7745c5c3_Err = templ.ResolveAttributeValue(p.View)3540 templ_7745c5c3_Var170, templ_7745c5c3_Err = templ.ResolveAttributeValue(p.View)
3541 if templ_7745c5c3_Err != nil {3541 if templ_7745c5c3_Err != nil {
3542- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 694, Col: 23}3542+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 698, Col: 23}
3543 }3543 }
3544 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ_7745c5c3_Var170)3544 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ_7745c5c3_Var170)
3545 if templ_7745c5c3_Err != nil {3545 if templ_7745c5c3_Err != nil {
@@ -3609,7 +3609,7 @@ func compareRail(p ComparePage) templ.Component {
3609 var templ_7745c5c3_Var172 string3609 var templ_7745c5c3_Var172 string
3610 templ_7745c5c3_Var172, templ_7745c5c3_Err = templ.JoinStringErrs(itoa(len(p.Ahead)))3610 templ_7745c5c3_Var172, templ_7745c5c3_Err = templ.JoinStringErrs(itoa(len(p.Ahead)))
3611 if templ_7745c5c3_Err != nil {3611 if templ_7745c5c3_Err != nil {
3612- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 710, Col: 67}3612+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 714, Col: 67}
3613 }3613 }
3614 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var172))3614 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var172))
3615 if templ_7745c5c3_Err != nil {3615 if templ_7745c5c3_Err != nil {
@@ -3627,7 +3627,7 @@ func compareRail(p ComparePage) templ.Component {
3627 var templ_7745c5c3_Var173 templ.SafeURL3627 var templ_7745c5c3_Var173 templ.SafeURL
3628 templ_7745c5c3_Var173, templ_7745c5c3_Err = templ.JoinURLErrs(templ.SafeURL(c.CHref))3628 templ_7745c5c3_Var173, templ_7745c5c3_Err = templ.JoinURLErrs(templ.SafeURL(c.CHref))
3629 if templ_7745c5c3_Err != nil {3629 if templ_7745c5c3_Err != nil {
3630- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 714, Col: 37}3630+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 718, Col: 37}
3631 }3631 }
3632 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var173))3632 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var173))
3633 if templ_7745c5c3_Err != nil {3633 if templ_7745c5c3_Err != nil {
@@ -3640,7 +3640,7 @@ func compareRail(p ComparePage) templ.Component {
3640 var templ_7745c5c3_Var174 string3640 var templ_7745c5c3_Var174 string
3641 templ_7745c5c3_Var174, templ_7745c5c3_Err = templ.JoinStringErrs(c.Short)3641 templ_7745c5c3_Var174, templ_7745c5c3_Err = templ.JoinStringErrs(c.Short)
3642 if templ_7745c5c3_Err != nil {3642 if templ_7745c5c3_Err != nil {
3643- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 714, Col: 49}3643+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 718, Col: 49}
3644 }3644 }
3645 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var174))3645 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var174))
3646 if templ_7745c5c3_Err != nil {3646 if templ_7745c5c3_Err != nil {
@@ -3653,7 +3653,7 @@ func compareRail(p ComparePage) templ.Component {
3653 var templ_7745c5c3_Var175 string3653 var templ_7745c5c3_Var175 string
3654 templ_7745c5c3_Var175, templ_7745c5c3_Err = templ.JoinStringErrs(c.Subject)3654 templ_7745c5c3_Var175, templ_7745c5c3_Err = templ.JoinStringErrs(c.Subject)
3655 if templ_7745c5c3_Err != nil {3655 if templ_7745c5c3_Err != nil {
3656- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 715, Col: 32}3656+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 719, Col: 32}
3657 }3657 }
3658 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var175))3658 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var175))
3659 if templ_7745c5c3_Err != nil {3659 if templ_7745c5c3_Err != nil {
@@ -3666,7 +3666,7 @@ func compareRail(p ComparePage) templ.Component {
3666 var templ_7745c5c3_Var176 string3666 var templ_7745c5c3_Var176 string
3667 templ_7745c5c3_Var176, templ_7745c5c3_Err = templ.JoinStringErrs(c.Author)3667 templ_7745c5c3_Var176, templ_7745c5c3_Err = templ.JoinStringErrs(c.Author)
3668 if templ_7745c5c3_Err != nil {3668 if templ_7745c5c3_Err != nil {
3669- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 717, Col: 16}3669+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 721, Col: 16}
3670 }3670 }
3671 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var176))3671 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var176))
3672 if templ_7745c5c3_Err != nil {3672 if templ_7745c5c3_Err != nil {
@@ -3680,7 +3680,7 @@ func compareRail(p ComparePage) templ.Component {
3680 var templ_7745c5c3_Var177 string3680 var templ_7745c5c3_Var177 string
3681 templ_7745c5c3_Var177, templ_7745c5c3_Err = templ.JoinStringErrs(" · ")3681 templ_7745c5c3_Var177, templ_7745c5c3_Err = templ.JoinStringErrs(" · ")
3682 if templ_7745c5c3_Err != nil {3682 if templ_7745c5c3_Err != nil {
3683- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 719, Col: 15}3683+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 723, Col: 15}
3684 }3684 }
3685 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var177))3685 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var177))
3686 if templ_7745c5c3_Err != nil {3686 if templ_7745c5c3_Err != nil {
@@ -3693,7 +3693,7 @@ func compareRail(p ComparePage) templ.Component {
3693 var templ_7745c5c3_Var178 string3693 var templ_7745c5c3_Var178 string
3694 templ_7745c5c3_Var178, templ_7745c5c3_Err = templ.ResolveAttributeValue(c.WhenAt)3694 templ_7745c5c3_Var178, templ_7745c5c3_Err = templ.ResolveAttributeValue(c.WhenAt)
3695 if templ_7745c5c3_Err != nil {3695 if templ_7745c5c3_Err != nil {
3696- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 719, Col: 42}3696+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 723, Col: 42}
3697 }3697 }
3698 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ_7745c5c3_Var178)3698 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ_7745c5c3_Var178)
3699 if templ_7745c5c3_Err != nil {3699 if templ_7745c5c3_Err != nil {
@@ -3706,7 +3706,7 @@ func compareRail(p ComparePage) templ.Component {
3706 var templ_7745c5c3_Var179 string3706 var templ_7745c5c3_Var179 string
3707 templ_7745c5c3_Var179, templ_7745c5c3_Err = templ.JoinStringErrs(c.When)3707 templ_7745c5c3_Var179, templ_7745c5c3_Err = templ.JoinStringErrs(c.When)
3708 if templ_7745c5c3_Err != nil {3708 if templ_7745c5c3_Err != nil {
3709- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 719, Col: 53}3709+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 723, Col: 53}
3710 }3710 }
3711 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var179))3711 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var179))
3712 if templ_7745c5c3_Err != nil {3712 if templ_7745c5c3_Err != nil {
@@ -3734,7 +3734,7 @@ func compareRail(p ComparePage) templ.Component {
3734 var templ_7745c5c3_Var180 string3734 var templ_7745c5c3_Var180 string
3735 templ_7745c5c3_Var180, templ_7745c5c3_Err = templ.JoinStringErrs(p.Target)3735 templ_7745c5c3_Var180, templ_7745c5c3_Err = templ.JoinStringErrs(p.Target)
3736 if templ_7745c5c3_Err != nil {3736 if templ_7745c5c3_Err != nil {
3737- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 726, Col: 47}3737+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 730, Col: 47}
3738 }3738 }
3739 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var180))3739 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var180))
3740 if templ_7745c5c3_Err != nil {3740 if templ_7745c5c3_Err != nil {
@@ -3757,7 +3757,7 @@ func compareRail(p ComparePage) templ.Component {
3757 var templ_7745c5c3_Var181 string3757 var templ_7745c5c3_Var181 string
3758 templ_7745c5c3_Var181, templ_7745c5c3_Err = templ.JoinStringErrs(itoa(len(p.Files)))3758 templ_7745c5c3_Var181, templ_7745c5c3_Err = templ.JoinStringErrs(itoa(len(p.Files)))
3759 if templ_7745c5c3_Err != nil {3759 if templ_7745c5c3_Err != nil {
3760- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 731, Col: 66}3760+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 735, Col: 66}
3761 }3761 }
3762 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var181))3762 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var181))
3763 if templ_7745c5c3_Err != nil {3763 if templ_7745c5c3_Err != nil {
M internal/adapters/web/static/js/ermite.js +4 -1
@@ -965,7 +965,10 @@ window.ermiteLive = (() => {
965965 reload() {
966966 if (reloading) return;
967967 reloading = true;
968- setTimeout(() => location.reload(), 300);
968+ setTimeout(() => {
969+ reloading = false;
970+ if (window.ermiteLive.canReload?.() !== false) location.reload();
971+ }, 300);
969972 },
970973 // error handles htmx:sse:error (detail.status is the status of a refused
971974 // reconnection). hx-sse retries for ever; a 404 or a 401 will not change by
@@ -965,7 +965,10 @@ window.ermiteLive = (() => {
965 reload() {965 reload() {
966 if (reloading) return;966 if (reloading) return;
967 reloading = true;967 reloading = true;
968- setTimeout(() => location.reload(), 300);968+ setTimeout(() => {
969+ reloading = false;
970+ if (window.ermiteLive.canReload?.() !== false) location.reload();
971+ }, 300);
969 },972 },
970 // error handles htmx:sse:error (detail.status is the status of a refused973 // error handles htmx:sse:error (detail.status is the status of a refused
971 // reconnection). hx-sse retries for ever; a 404 or a 401 will not change by974 // reconnection). hx-sse retries for ever; a 404 or a 401 will not change by
M internal/adapters/web/static/js/mr.js +78 -90
@@ -430,34 +430,33 @@ window.ermiteMR = (() => {
430430 // a dirty bit for pushes received during that request. Drafts are checked
431431 // again after the fetch: typing while the network is slow is safe too.
432432 function refresher({ blocked, fetchPage, apply, notice, failed, delay = 300 }) {
433- let timer, busy = false, pending = false, force = false;
433+ let timer, busy = false, pending = false;
434434 const schedule = () => { clearTimeout(timer); timer = setTimeout(run, delay); };
435435 async function run() {
436436 if (busy || !pending) return;
437- if (!force && blocked()) { notice(true); return; }
437+ if (blocked()) { notice(true); return; }
438438 busy = true;
439439 pending = false;
440- const manual = force; force = false;
441440 try {
442441 const page = await fetchPage();
443- if (!manual && blocked()) { pending = true; notice(true); return; }
444- if (await apply(page, manual) === false) { pending = true; notice(true); }
442+ if (blocked()) { pending = true; notice(true); return; }
443+ if (await apply(page) === false) { pending = true; notice(true); }
445444 else notice(false);
446- } catch { failed(); }
445+ } catch { if (blocked()) { pending = true; notice(true); } else failed(); }
447446 finally {
448447 busy = false;
449- if (pending && (force || !blocked())) schedule();
448+ if (pending && !blocked()) schedule();
450449 }
451450 }
452451 return {
453- request(manual = false) { pending = true; force ||= manual; schedule(); },
452+ request() { pending = true; schedule(); },
454453 resume() { if (pending) schedule(); },
455454 pending() { return pending || busy; },
456455 };
457456 }
458457
459458 function hasDraft() {
460- return $$('textarea').some((t) => (t.value.length > 0 && t.value !== t.defaultValue) || document.activeElement === t) ||
459+ return $$('textarea').some((t) => (t.value !== t.defaultValue) || document.activeElement === t) ||
461460 !!document.activeElement?.closest?.('.cform');
462461 }
463462
@@ -470,19 +469,24 @@ window.ermiteMR = (() => {
470469 const bounds = diffs.getBoundingClientRect();
471470 const x = Math.max(1, Math.min(innerWidth - 1, bounds.left + Math.min(100, bounds.width / 2)));
472471 // A bounded number of probes, independent of the number of diff lines.
473- for (const y of [top + 2, top + 24, top + 64, top + 128]) {
474- if (y >= innerHeight) break;
472+ let y = top + 2, fallback;
473+ for (let probe = 0; probe < 6 && y < innerHeight; probe++) {
475474 const hit = document.elementFromPoint(x, y);
476475 const file = hit?.closest('details.dfile');
477- if (!file || !diffs.contains(file)) continue;
476+ if (!file || !diffs.contains(file)) { y += 32; continue; }
478477 const row = hit.closest('tr');
479478 const link = row && $('.ln a[href*="on="]', row);
480479 const header = $(':scope > summary', file);
481- return { file: file.dataset.file,
482- on: link && new URL(link.href, location.href).searchParams.get('on'),
483- offset: (link ? row : header).getBoundingClientRect().top,
484- headerOffset: header.getBoundingClientRect().top, y: scrollY };
480+ const headerOffset = file.getBoundingClientRect().top;
481+ fallback = { file: file.dataset.file, offset: headerOffset, headerOffset, y: scrollY };
482+ if (link) return { ...fallback,
483+ on: new URL(link.href, location.href).searchParams.get('on'),
484+ suffix: link.getAttribute('href').split('on=')[1].split('#')[0],
485+ offset: row.getBoundingClientRect().top };
486+ if (file.open && header) y = Math.max(y + 24, header.getBoundingClientRect().bottom + 2);
487+ else return fallback;
485488 }
489+ if (fallback) return fallback;
486490 return { y: scrollY };
487491 }
488492
@@ -490,110 +494,92 @@ window.ermiteMR = (() => {
490494 const file = $$('#diffs details.dfile').find((f) => f.dataset.file === anchor.file);
491495 let el, offset = anchor.offset;
492496 if (file && anchor.on) {
493- // Exact href suffix: no traversal or measurement of every line. URLSearchParams
494- // uses the same form encoding as the Go line links (space is '+').
495- const parts = /^(new|old):(\d+):(.+)$/.exec(anchor.on);
496- const path = parts && new URLSearchParams({ path: parts[3] }).toString().slice(5);
497- const suffix = parts && 'on=' + parts[1] + ':' + parts[2] + ':' + path + '#' + file.id;
497+ const suffix = anchor.suffix && 'on=' + anchor.suffix + '#' + file.id;
498498 const layout = $('#diffs').dataset.diff || $('#diffs').dataset.view;
499499 const table = $(layout === 'split' && !window.matchMedia?.('(max-width: 720px)').matches ? '.dt.spl' : '.dt.uni', file) || file;
500500 if (suffix) el = $('a[href$="' + CSS.escape(suffix) + '"]', table)?.closest('tr');
501501 }
502- if (!el && file) { el = $(':scope > summary', file); offset = anchor.headerOffset ?? anchor.offset; }
502+ if (!el && file) { el = file; offset = anchor.headerOffset ?? anchor.offset; }
503503 if (el) window.scrollBy({ top: el.getBoundingClientRect().top - offset, behavior: 'instant' });
504504 else window.scrollTo({ top: Math.max(0, Math.min(anchor.y, document.documentElement.scrollHeight - innerHeight)), behavior: 'instant' });
505505 }
506506
507- async function fetchPage() {
508- const res = await fetch(location.href, { credentials: 'same-origin', headers: { Accept: 'text/html' } });
507+ async function fetchPage(url = location.href, mobileRetry = false) {
508+ const res = await fetch(url, { credentials: 'same-origin', headers: { Accept: 'text/html' } });
509509 if (!res.ok || res.redirected) throw new Error('MR refresh refused');
510510 const page = new DOMParser().parseFromString(await res.text(), 'text/html');
511511 if (!$('#diffs[data-mr]', page) || !$('.mr-bar', page) || !$('.hint-live', page)) throw new Error('not an MR page');
512+ const unified = core.mobileURL(url, $('#diffs', page).dataset.view,
513+ !!window.matchMedia?.('(max-width: 720px)').matches);
514+ if (unified && !mobileRetry) return fetchPage(unified, true);
512515 return page;
513516 }
514517
515- // Use htmx's swap rather than replaceWith: its cleanup retires the old SSE
516- // reader and hx-live bindings, and process activates the inserted controls.
518+ // htmx 4's public delete swap invokes recursive before:cleanup (including
519+ // hx-sse's abort/reader.cancel and hx-live's binding disposal). Only an empty
520+ // string is parsed; the fetched nodes themselves are adopted, never serialized.
517521 async function replaceRegion(old, fresh) {
518522 if (!old || !fresh) throw new Error('missing MR refresh region');
519523 for (const el of $$('[autofocus]', fresh)) el.removeAttribute('autofocus');
520- await window.htmx.swap({ sourceElement: old, target: old, text: fresh.outerHTML,
521- swap: 'outerHTML settle:0 transition:false focusScroll:false', push: false, replace: false });
524+ const marker = document.createComment('MR region');
525+ old.before(marker);
526+ await window.htmx.swap({ sourceElement: old, target: old, text: '',
527+ swap: 'delete settle:0 transition:false', push: false, replace: false });
528+ const node = document.adoptNode(fresh);
529+ marker.replaceWith(node);
530+ window.htmx.process(node);
522531 }
523532
524- async function refreshPage(page, manual = false) {
525- const regions = ['.mr-footer', '#mr-range', '.mr-bar', '#mr-diff-notices', '#diffs', '.rail', '.hint-live'];
533+ async function refreshPage(page) {
534+ const regions = ['.mr-footer', '#mr-range', '.mr-bar', '#mr-diff-notices', '#diffs', '#mr-comments', '.rail', '.hint-live'];
526535 for (const sel of regions) if (!$(sel) || !$(sel, page)) throw new Error('missing MR region');
527536 let anchor = scrollAnchor();
537+ const nextDiffs = $('#diffs', page);
538+ const mobile = !!window.matchMedia?.('(max-width: 720px)').matches;
539+ const chosen = mobile ? 'unified' : ($('#diffs').dataset.diff || $('#diffs').dataset.view);
540+ if (nextDiffs.dataset.diff) nextDiffs.dataset.diff = chosen;
541+ // A one-layout response must use its own contract, never the old page's.
542+ if (mobile && nextDiffs.dataset.view === 'split') throw new Error('mobile needs unified');
528543 const anchorFile = $$('#diffs details.dfile', page).find((f) => f.dataset.file === anchor.file);
529544 const placeholder = anchorFile && $('.dlazy[data-src]', anchorFile);
530545 if (placeholder) {
531- const d = $('#diffs').dataset;
546+ const d = nextDiffs.dataset;
532547 const url = placeholder.dataset.src + '&view=' + encodeURIComponent(d.diff || d.view || 'unified') + '&layouts=' + (d.diff ? 'both' : 'one');
533548 const res = await fetch(url, { credentials: 'same-origin', headers: { Accept: 'text/html' } });
534549 if (!res.ok || res.redirected) throw new Error('anchor window changed');
535- const windowPage = new DOMParser().parseFromString(await res.text(), 'text/html');
536- const byID = new Map($$('#diffs details.dfile', page).map((f) => [f.id, f]));
537- for (const f of $$('details.dfile', windowPage)) byID.get(f.id)?.replaceWith(f);
538- if (!manual && hasDraft()) return false;
550+ let windowPage = new DOMParser().parseFromString(await res.text(), 'text/html');
551+ if (hasDraft()) return false;
539552 anchor = scrollAnchor();
553+ const windowFiles = $$('details.dfile', windowPage);
554+ // If the reader moved outside this window, discard it; lazy loading will
555+ // fetch the new position rather than committing an unrelated window.
556+ if (windowFiles.some((f) => f.dataset.file === anchor.file)) {
557+ const byID = new Map($$('#diffs details.dfile', page).map((f) => [f.id, f]));
558+ for (const f of windowFiles) byID.get(f.id)?.replaceWith(f);
559+ }
560+ windowPage = null;
540561 }
562+ if (hasDraft()) return false;
541563 const files = new Map($$('#diffs details.dfile').map((f) => [f.dataset.file, f.open]));
542564 const folded = $('.r-files')?.hasAttribute('data-folded');
543565 const railY = $('.rail')?.scrollTop, filesY = $('.r-files .files')?.scrollTop;
544566 const footerOpen = $('#mr-panels')?.open;
545567 const tab = $('[data-mr-tabs] [aria-selected="true"]')?.id;
546568 const active = document.activeElement;
547- const focus = active && { menu: active.closest?.('details.menu')?.id, id: active.id, tag: active.tagName, name: active.getAttribute('name'), href: active.getAttribute('href') };
548- // Manual refresh keeps even an active draft whose line disappeared. It
549- // stays an ordinary form, under an explicit previous-diff label.
550- const drafts = [...new Set($$('#diffs textarea').filter((t) => t.value !== t.defaultValue || t === active || t.closest('form')?.contains(active)).map((t) => t.closest('form')).filter(Boolean))];
551- let draftID = 0;
552- for (const form of drafts) {
553- for (const t of $$('textarea', form)) {
554- if (!t.id) t.id = 'mr-preserved-draft-' + (++draftID);
555- if (t === active) focus.id = t.id;
556- }
557- const id = $('textarea', form)?.id;
558- const replacement = id && $$('textarea', page).find((t) => t.id === id)?.closest('.cform');
559- const copy = form.cloneNode(true);
560- const originalFields = $$('textarea, input, select', form);
561- $$('textarea, input, select', copy).forEach((field, i) => {
562- const original = originalFields[i];
563- if (field.tagName === 'TEXTAREA') field.textContent = original.defaultValue;
564- else if (field.tagName === 'INPUT') { field.setAttribute('value', original.value); field.toggleAttribute('checked', original.checked); }
565- });
566- if (replacement) replacement.replaceWith(copy);
567- else {
568- const box = page.createElement('div');
569- const label = page.createElement('p'); label.className = 'notice';
570- label.textContent = 'Unsent comment on the previous diff (the line may have moved).';
571- box.append(label, copy); $('#diffs', page).prepend(box);
572- }
573- }
574- // Serializing markup does not retain textarea.value or selection. Restore
575- // values after the htmx swap, without ever clearing the source drafts.
576- const values = drafts.flatMap((f) => $$('textarea', f).map((t) => ({ id: t.id, value: t.value, start: t.selectionStart, end: t.selectionEnd })));
569+ const focus = active && { file: active.closest?.('.files a')?.getAttribute('title'), region: regions.find((sel) => $(sel)?.contains(active)), menu: active.closest?.('details.menu')?.id, id: active.id, tag: active.tagName, name: active.getAttribute('name'), href: active.getAttribute('href') };
577570 for (const f of $$('#diffs details.dfile', page)) if (files.has(f.dataset.file)) f.open = files.get(f.dataset.file);
578571 ++diffGeneration; ++revealGen; moved = false; loading.clear(); lazyIO?.disconnect();
579- // Keep the chosen client-side layout when the URL was not pinned.
580- const layout = $('#diffs')?.dataset;
581- if (layout?.diff && $('#diffs', page).dataset.diff) $('#diffs', page).dataset.diff = layout.diff;
582572 $('#diffs', page).dataset.mrStarted = 'true';
583573 for (const sel of regions) {
584574 const fresh = $(sel, page);
585575 await replaceRegion($(sel), fresh);
586- fresh.remove(); // release each parsed region as soon as it is consumed
587- }
588- for (const v of values) {
589- const t = document.getElementById(v.id);
590- if (t) { t.value = v.value; t.setSelectionRange(v.start, v.end); }
591576 }
592577 for (const key of ['ref', 'sha', 'paths', 'blob']) {
593578 if (page.body.dataset[key] !== undefined) document.body.dataset[key] = page.body.dataset[key];
594579 }
595580 const oldSHA = $('.hdr .ref .sha'), newSHA = $('.hdr .ref .sha', page);
596581 if (oldSHA && newSHA) oldSHA.textContent = newSHA.textContent;
582+ page = null;
597583 panels();
598584 if (tab) {
599585 const oldURL = location.href;
@@ -609,38 +595,40 @@ window.ermiteMR = (() => {
609595 window.ermite?.refreshFiles?.();
610596 watch();
611597 if (focus && active !== document.body) {
612- const same = (e) => e.tagName === focus.tag && (focus.id ? e.id === focus.id :
613- focus.href ? e.getAttribute('href') === focus.href : focus.name && e.getAttribute('name') === focus.name);
614- const el = focus.menu && !focus.id && !focus.name && !focus.href ? document.getElementById(focus.menu)?.querySelector(':scope > summary') : focus.id ? document.getElementById(focus.id) : focus.href ? $('a[href="' + CSS.escape(focus.href) + '"]') : focus.name ? $('[name="' + CSS.escape(focus.name) + '"]') : null;
615- if (el && (same(el) || focus.menu)) el.focus({ preventScroll: true });
598+ const region = focus.region ? $(focus.region) : document;
599+ const menu = focus.menu && document.getElementById(focus.menu);
600+ if (menu) menu.open = true;
601+ const el = focus.file ? $('a[title="' + CSS.escape(focus.file) + '"]', region) :
602+ focus.id ? document.getElementById(focus.id) :
603+ focus.href ? $('a[href="' + CSS.escape(focus.href) + '"]', region) :
604+ focus.name ? $('[name="' + CSS.escape(focus.name) + '"]', region) :
605+ menu?.querySelector(':scope > summary');
606+ el?.focus({ preventScroll: true });
616607 }
617608 restoreAnchor(anchor);
618609 }
619610
620611 function refreshNotice(deferred) {
621- let slot = $('#mr-refresh-status');
622- if (!slot) {
623- slot = document.createElement('div'); slot.id = 'mr-refresh-status'; slot.className = 'live-slot';
624- slot.setAttribute('role', 'status'); slot.setAttribute('aria-live', 'polite');
625- $('#mr-notice')?.after(slot);
626- }
627- slot.className = deferred ? 'live-slot' : 'sr';
612+ const slot = $('#mr-refresh-status');
613+ if (!slot) return;
628614 slot.replaceChildren();
629615 if (!deferred) {
630- const text = document.createElement('span'); text.textContent = 'branch updated'; slot.append(text);
616+ const text = document.createElement('span'); text.className = 'sr'; text.textContent = 'branch updated'; slot.append(text);
631617 return;
632618 }
633619 slot.append('branch updated — refreshing after your comment. ');
634- const a = document.createElement('a'); a.href = location.href; a.textContent = 'refresh now';
635- a.addEventListener('click', (e) => { e.preventDefault(); headRefresh.request(true); });
636- slot.append(a);
620+
637621 }
638622 const headRefresh = refresher({ blocked: hasDraft, fetchPage, apply: refreshPage, notice: refreshNotice,
639- failed: () => { if (hasDraft()) refreshNotice(true); else window.ermiteLive?.reload(); } });
623+ failed: () => window.ermiteLive?.reload() });
640624 function headChanged() { if ($('#diffs[data-mr]')) headRefresh.request(); }
641625
642626 function start() {
643627 if (!$('#diffs[data-mr]')) return;
628+ if (window.ermiteLive) window.ermiteLive.canReload = () => {
629+ if (!hasDraft()) return true;
630+ headRefresh.request(); refreshNotice(true); return false;
631+ };
644632 // Global delegation is installed once; replacement regions have their own
645633 // disposable panel/touch hooks below.
646634 if ($('#diffs').dataset.mrStarted) return;
@@ -651,7 +639,7 @@ window.ermiteMR = (() => {
651639 if (!cancel || !headRefresh.pending() || e.ctrlKey || e.metaKey || e.shiftKey || e.altKey) return;
652640 e.preventDefault();
653641 const form = cancel.closest('.cform');
654- for (const t of $$('textarea', form)) t.value = '';
642+ for (const t of $$('textarea', form)) t.value = t.defaultValue;
655643 if (form.contains(document.activeElement)) document.activeElement.blur();
656644 headRefresh.resume();
657645 });
@@ -430,34 +430,33 @@ window.ermiteMR = (() => {
430 // a dirty bit for pushes received during that request. Drafts are checked430 // a dirty bit for pushes received during that request. Drafts are checked
431 // again after the fetch: typing while the network is slow is safe too.431 // again after the fetch: typing while the network is slow is safe too.
432 function refresher({ blocked, fetchPage, apply, notice, failed, delay = 300 }) {432 function refresher({ blocked, fetchPage, apply, notice, failed, delay = 300 }) {
433- let timer, busy = false, pending = false, force = false;433+ let timer, busy = false, pending = false;
434 const schedule = () => { clearTimeout(timer); timer = setTimeout(run, delay); };434 const schedule = () => { clearTimeout(timer); timer = setTimeout(run, delay); };
435 async function run() {435 async function run() {
436 if (busy || !pending) return;436 if (busy || !pending) return;
437- if (!force && blocked()) { notice(true); return; }437+ if (blocked()) { notice(true); return; }
438 busy = true;438 busy = true;
439 pending = false;439 pending = false;
440- const manual = force; force = false;
441 try {440 try {
442 const page = await fetchPage();441 const page = await fetchPage();
443- if (!manual && blocked()) { pending = true; notice(true); return; }442+ if (blocked()) { pending = true; notice(true); return; }
444- if (await apply(page, manual) === false) { pending = true; notice(true); }443+ if (await apply(page) === false) { pending = true; notice(true); }
445 else notice(false);444 else notice(false);
446- } catch { failed(); }445+ } catch { if (blocked()) { pending = true; notice(true); } else failed(); }
447 finally {446 finally {
448 busy = false;447 busy = false;
449- if (pending && (force || !blocked())) schedule();448+ if (pending && !blocked()) schedule();
450 }449 }
451 }450 }
452 return {451 return {
453- request(manual = false) { pending = true; force ||= manual; schedule(); },452+ request() { pending = true; schedule(); },
454 resume() { if (pending) schedule(); },453 resume() { if (pending) schedule(); },
455 pending() { return pending || busy; },454 pending() { return pending || busy; },
456 };455 };
457 }456 }
458 457
459 function hasDraft() {458 function hasDraft() {
460- return $$('textarea').some((t) => (t.value.length > 0 && t.value !== t.defaultValue) || document.activeElement === t) ||459+ return $$('textarea').some((t) => (t.value !== t.defaultValue) || document.activeElement === t) ||
461 !!document.activeElement?.closest?.('.cform');460 !!document.activeElement?.closest?.('.cform');
462 }461 }
463 462
@@ -470,19 +469,24 @@ window.ermiteMR = (() => {
470 const bounds = diffs.getBoundingClientRect();469 const bounds = diffs.getBoundingClientRect();
471 const x = Math.max(1, Math.min(innerWidth - 1, bounds.left + Math.min(100, bounds.width / 2)));470 const x = Math.max(1, Math.min(innerWidth - 1, bounds.left + Math.min(100, bounds.width / 2)));
472 // A bounded number of probes, independent of the number of diff lines.471 // A bounded number of probes, independent of the number of diff lines.
473- for (const y of [top + 2, top + 24, top + 64, top + 128]) {472+ let y = top + 2, fallback;
474- if (y >= innerHeight) break;473+ for (let probe = 0; probe < 6 && y < innerHeight; probe++) {
475 const hit = document.elementFromPoint(x, y);474 const hit = document.elementFromPoint(x, y);
476 const file = hit?.closest('details.dfile');475 const file = hit?.closest('details.dfile');
477- if (!file || !diffs.contains(file)) continue;476+ if (!file || !diffs.contains(file)) { y += 32; continue; }
478 const row = hit.closest('tr');477 const row = hit.closest('tr');
479 const link = row && $('.ln a[href*="on="]', row);478 const link = row && $('.ln a[href*="on="]', row);
480 const header = $(':scope > summary', file);479 const header = $(':scope > summary', file);
481- return { file: file.dataset.file,480+ const headerOffset = file.getBoundingClientRect().top;
482- on: link && new URL(link.href, location.href).searchParams.get('on'),481+ fallback = { file: file.dataset.file, offset: headerOffset, headerOffset, y: scrollY };
483- offset: (link ? row : header).getBoundingClientRect().top,482+ if (link) return { ...fallback,
484- headerOffset: header.getBoundingClientRect().top, y: scrollY };483+ on: new URL(link.href, location.href).searchParams.get('on'),
484+ suffix: link.getAttribute('href').split('on=')[1].split('#')[0],
485+ offset: row.getBoundingClientRect().top };
486+ if (file.open && header) y = Math.max(y + 24, header.getBoundingClientRect().bottom + 2);
487+ else return fallback;
485 }488 }
489+ if (fallback) return fallback;
486 return { y: scrollY };490 return { y: scrollY };
487 }491 }
488 492
@@ -490,110 +494,92 @@ window.ermiteMR = (() => {
490 const file = $$('#diffs details.dfile').find((f) => f.dataset.file === anchor.file);494 const file = $$('#diffs details.dfile').find((f) => f.dataset.file === anchor.file);
491 let el, offset = anchor.offset;495 let el, offset = anchor.offset;
492 if (file && anchor.on) {496 if (file && anchor.on) {
493- // Exact href suffix: no traversal or measurement of every line. URLSearchParams497+ const suffix = anchor.suffix && 'on=' + anchor.suffix + '#' + file.id;
494- // uses the same form encoding as the Go line links (space is '+').
495- const parts = /^(new|old):(\d+):(.+)$/.exec(anchor.on);
496- const path = parts && new URLSearchParams({ path: parts[3] }).toString().slice(5);
497- const suffix = parts && 'on=' + parts[1] + ':' + parts[2] + ':' + path + '#' + file.id;
498 const layout = $('#diffs').dataset.diff || $('#diffs').dataset.view;498 const layout = $('#diffs').dataset.diff || $('#diffs').dataset.view;
499 const table = $(layout === 'split' && !window.matchMedia?.('(max-width: 720px)').matches ? '.dt.spl' : '.dt.uni', file) || file;499 const table = $(layout === 'split' && !window.matchMedia?.('(max-width: 720px)').matches ? '.dt.spl' : '.dt.uni', file) || file;
500 if (suffix) el = $('a[href$="' + CSS.escape(suffix) + '"]', table)?.closest('tr');500 if (suffix) el = $('a[href$="' + CSS.escape(suffix) + '"]', table)?.closest('tr');
501 }501 }
502- if (!el && file) { el = $(':scope > summary', file); offset = anchor.headerOffset ?? anchor.offset; }502+ if (!el && file) { el = file; offset = anchor.headerOffset ?? anchor.offset; }
503 if (el) window.scrollBy({ top: el.getBoundingClientRect().top - offset, behavior: 'instant' });503 if (el) window.scrollBy({ top: el.getBoundingClientRect().top - offset, behavior: 'instant' });
504 else window.scrollTo({ top: Math.max(0, Math.min(anchor.y, document.documentElement.scrollHeight - innerHeight)), behavior: 'instant' });504 else window.scrollTo({ top: Math.max(0, Math.min(anchor.y, document.documentElement.scrollHeight - innerHeight)), behavior: 'instant' });
505 }505 }
506 506
507- async function fetchPage() {507+ async function fetchPage(url = location.href, mobileRetry = false) {
508- const res = await fetch(location.href, { credentials: 'same-origin', headers: { Accept: 'text/html' } });508+ const res = await fetch(url, { credentials: 'same-origin', headers: { Accept: 'text/html' } });
509 if (!res.ok || res.redirected) throw new Error('MR refresh refused');509 if (!res.ok || res.redirected) throw new Error('MR refresh refused');
510 const page = new DOMParser().parseFromString(await res.text(), 'text/html');510 const page = new DOMParser().parseFromString(await res.text(), 'text/html');
511 if (!$('#diffs[data-mr]', page) || !$('.mr-bar', page) || !$('.hint-live', page)) throw new Error('not an MR page');511 if (!$('#diffs[data-mr]', page) || !$('.mr-bar', page) || !$('.hint-live', page)) throw new Error('not an MR page');
512+ const unified = core.mobileURL(url, $('#diffs', page).dataset.view,
513+ !!window.matchMedia?.('(max-width: 720px)').matches);
514+ if (unified && !mobileRetry) return fetchPage(unified, true);
512 return page;515 return page;
513 }516 }
514 517
515- // Use htmx's swap rather than replaceWith: its cleanup retires the old SSE518+ // htmx 4's public delete swap invokes recursive before:cleanup (including
516- // reader and hx-live bindings, and process activates the inserted controls.519+ // hx-sse's abort/reader.cancel and hx-live's binding disposal). Only an empty
520+ // string is parsed; the fetched nodes themselves are adopted, never serialized.
517 async function replaceRegion(old, fresh) {521 async function replaceRegion(old, fresh) {
518 if (!old || !fresh) throw new Error('missing MR refresh region');522 if (!old || !fresh) throw new Error('missing MR refresh region');
519 for (const el of $$('[autofocus]', fresh)) el.removeAttribute('autofocus');523 for (const el of $$('[autofocus]', fresh)) el.removeAttribute('autofocus');
520- await window.htmx.swap({ sourceElement: old, target: old, text: fresh.outerHTML,524+ const marker = document.createComment('MR region');
521- swap: 'outerHTML settle:0 transition:false focusScroll:false', push: false, replace: false });525+ old.before(marker);
526+ await window.htmx.swap({ sourceElement: old, target: old, text: '',
527+ swap: 'delete settle:0 transition:false', push: false, replace: false });
528+ const node = document.adoptNode(fresh);
529+ marker.replaceWith(node);
530+ window.htmx.process(node);
522 }531 }
523 532
524- async function refreshPage(page, manual = false) {533+ async function refreshPage(page) {
525- const regions = ['.mr-footer', '#mr-range', '.mr-bar', '#mr-diff-notices', '#diffs', '.rail', '.hint-live'];534+ const regions = ['.mr-footer', '#mr-range', '.mr-bar', '#mr-diff-notices', '#diffs', '#mr-comments', '.rail', '.hint-live'];
526 for (const sel of regions) if (!$(sel) || !$(sel, page)) throw new Error('missing MR region');535 for (const sel of regions) if (!$(sel) || !$(sel, page)) throw new Error('missing MR region');
527 let anchor = scrollAnchor();536 let anchor = scrollAnchor();
537+ const nextDiffs = $('#diffs', page);
538+ const mobile = !!window.matchMedia?.('(max-width: 720px)').matches;
539+ const chosen = mobile ? 'unified' : ($('#diffs').dataset.diff || $('#diffs').dataset.view);
540+ if (nextDiffs.dataset.diff) nextDiffs.dataset.diff = chosen;
541+ // A one-layout response must use its own contract, never the old page's.
542+ if (mobile && nextDiffs.dataset.view === 'split') throw new Error('mobile needs unified');
528 const anchorFile = $$('#diffs details.dfile', page).find((f) => f.dataset.file === anchor.file);543 const anchorFile = $$('#diffs details.dfile', page).find((f) => f.dataset.file === anchor.file);
529 const placeholder = anchorFile && $('.dlazy[data-src]', anchorFile);544 const placeholder = anchorFile && $('.dlazy[data-src]', anchorFile);
530 if (placeholder) {545 if (placeholder) {
531- const d = $('#diffs').dataset;546+ const d = nextDiffs.dataset;
532 const url = placeholder.dataset.src + '&view=' + encodeURIComponent(d.diff || d.view || 'unified') + '&layouts=' + (d.diff ? 'both' : 'one');547 const url = placeholder.dataset.src + '&view=' + encodeURIComponent(d.diff || d.view || 'unified') + '&layouts=' + (d.diff ? 'both' : 'one');
533 const res = await fetch(url, { credentials: 'same-origin', headers: { Accept: 'text/html' } });548 const res = await fetch(url, { credentials: 'same-origin', headers: { Accept: 'text/html' } });
534 if (!res.ok || res.redirected) throw new Error('anchor window changed');549 if (!res.ok || res.redirected) throw new Error('anchor window changed');
535- const windowPage = new DOMParser().parseFromString(await res.text(), 'text/html');550+ let windowPage = new DOMParser().parseFromString(await res.text(), 'text/html');
536- const byID = new Map($$('#diffs details.dfile', page).map((f) => [f.id, f]));551+ if (hasDraft()) return false;
537- for (const f of $$('details.dfile', windowPage)) byID.get(f.id)?.replaceWith(f);
538- if (!manual && hasDraft()) return false;
539 anchor = scrollAnchor();552 anchor = scrollAnchor();
553+ const windowFiles = $$('details.dfile', windowPage);
554+ // If the reader moved outside this window, discard it; lazy loading will
555+ // fetch the new position rather than committing an unrelated window.
556+ if (windowFiles.some((f) => f.dataset.file === anchor.file)) {
557+ const byID = new Map($$('#diffs details.dfile', page).map((f) => [f.id, f]));
558+ for (const f of windowFiles) byID.get(f.id)?.replaceWith(f);
559+ }
560+ windowPage = null;
540 }561 }
562+ if (hasDraft()) return false;
541 const files = new Map($$('#diffs details.dfile').map((f) => [f.dataset.file, f.open]));563 const files = new Map($$('#diffs details.dfile').map((f) => [f.dataset.file, f.open]));
542 const folded = $('.r-files')?.hasAttribute('data-folded');564 const folded = $('.r-files')?.hasAttribute('data-folded');
543 const railY = $('.rail')?.scrollTop, filesY = $('.r-files .files')?.scrollTop;565 const railY = $('.rail')?.scrollTop, filesY = $('.r-files .files')?.scrollTop;
544 const footerOpen = $('#mr-panels')?.open;566 const footerOpen = $('#mr-panels')?.open;
545 const tab = $('[data-mr-tabs] [aria-selected="true"]')?.id;567 const tab = $('[data-mr-tabs] [aria-selected="true"]')?.id;
546 const active = document.activeElement;568 const active = document.activeElement;
547- const focus = active && { menu: active.closest?.('details.menu')?.id, id: active.id, tag: active.tagName, name: active.getAttribute('name'), href: active.getAttribute('href') };569+ const focus = active && { file: active.closest?.('.files a')?.getAttribute('title'), region: regions.find((sel) => $(sel)?.contains(active)), menu: active.closest?.('details.menu')?.id, id: active.id, tag: active.tagName, name: active.getAttribute('name'), href: active.getAttribute('href') };
548- // Manual refresh keeps even an active draft whose line disappeared. It
549- // stays an ordinary form, under an explicit previous-diff label.
550- const drafts = [...new Set($$('#diffs textarea').filter((t) => t.value !== t.defaultValue || t === active || t.closest('form')?.contains(active)).map((t) => t.closest('form')).filter(Boolean))];
551- let draftID = 0;
552- for (const form of drafts) {
553- for (const t of $$('textarea', form)) {
554- if (!t.id) t.id = 'mr-preserved-draft-' + (++draftID);
555- if (t === active) focus.id = t.id;
556- }
557- const id = $('textarea', form)?.id;
558- const replacement = id && $$('textarea', page).find((t) => t.id === id)?.closest('.cform');
559- const copy = form.cloneNode(true);
560- const originalFields = $$('textarea, input, select', form);
561- $$('textarea, input, select', copy).forEach((field, i) => {
562- const original = originalFields[i];
563- if (field.tagName === 'TEXTAREA') field.textContent = original.defaultValue;
564- else if (field.tagName === 'INPUT') { field.setAttribute('value', original.value); field.toggleAttribute('checked', original.checked); }
565- });
566- if (replacement) replacement.replaceWith(copy);
567- else {
568- const box = page.createElement('div');
569- const label = page.createElement('p'); label.className = 'notice';
570- label.textContent = 'Unsent comment on the previous diff (the line may have moved).';
571- box.append(label, copy); $('#diffs', page).prepend(box);
572- }
573- }
574- // Serializing markup does not retain textarea.value or selection. Restore
575- // values after the htmx swap, without ever clearing the source drafts.
576- const values = drafts.flatMap((f) => $$('textarea', f).map((t) => ({ id: t.id, value: t.value, start: t.selectionStart, end: t.selectionEnd })));
577 for (const f of $$('#diffs details.dfile', page)) if (files.has(f.dataset.file)) f.open = files.get(f.dataset.file);570 for (const f of $$('#diffs details.dfile', page)) if (files.has(f.dataset.file)) f.open = files.get(f.dataset.file);
578 ++diffGeneration; ++revealGen; moved = false; loading.clear(); lazyIO?.disconnect();571 ++diffGeneration; ++revealGen; moved = false; loading.clear(); lazyIO?.disconnect();
579- // Keep the chosen client-side layout when the URL was not pinned.
580- const layout = $('#diffs')?.dataset;
581- if (layout?.diff && $('#diffs', page).dataset.diff) $('#diffs', page).dataset.diff = layout.diff;
582 $('#diffs', page).dataset.mrStarted = 'true';572 $('#diffs', page).dataset.mrStarted = 'true';
583 for (const sel of regions) {573 for (const sel of regions) {
584 const fresh = $(sel, page);574 const fresh = $(sel, page);
585 await replaceRegion($(sel), fresh);575 await replaceRegion($(sel), fresh);
586- fresh.remove(); // release each parsed region as soon as it is consumed
587- }
588- for (const v of values) {
589- const t = document.getElementById(v.id);
590- if (t) { t.value = v.value; t.setSelectionRange(v.start, v.end); }
591 }576 }
592 for (const key of ['ref', 'sha', 'paths', 'blob']) {577 for (const key of ['ref', 'sha', 'paths', 'blob']) {
593 if (page.body.dataset[key] !== undefined) document.body.dataset[key] = page.body.dataset[key];578 if (page.body.dataset[key] !== undefined) document.body.dataset[key] = page.body.dataset[key];
594 }579 }
595 const oldSHA = $('.hdr .ref .sha'), newSHA = $('.hdr .ref .sha', page);580 const oldSHA = $('.hdr .ref .sha'), newSHA = $('.hdr .ref .sha', page);
596 if (oldSHA && newSHA) oldSHA.textContent = newSHA.textContent;581 if (oldSHA && newSHA) oldSHA.textContent = newSHA.textContent;
582+ page = null;
597 panels();583 panels();
598 if (tab) {584 if (tab) {
599 const oldURL = location.href;585 const oldURL = location.href;
@@ -609,38 +595,40 @@ window.ermiteMR = (() => {
609 window.ermite?.refreshFiles?.();595 window.ermite?.refreshFiles?.();
610 watch();596 watch();
611 if (focus && active !== document.body) {597 if (focus && active !== document.body) {
612- const same = (e) => e.tagName === focus.tag && (focus.id ? e.id === focus.id :598+ const region = focus.region ? $(focus.region) : document;
613- focus.href ? e.getAttribute('href') === focus.href : focus.name && e.getAttribute('name') === focus.name);599+ const menu = focus.menu && document.getElementById(focus.menu);
614- const el = focus.menu && !focus.id && !focus.name && !focus.href ? document.getElementById(focus.menu)?.querySelector(':scope > summary') : focus.id ? document.getElementById(focus.id) : focus.href ? $('a[href="' + CSS.escape(focus.href) + '"]') : focus.name ? $('[name="' + CSS.escape(focus.name) + '"]') : null;600+ if (menu) menu.open = true;
615- if (el && (same(el) || focus.menu)) el.focus({ preventScroll: true });601+ const el = focus.file ? $('a[title="' + CSS.escape(focus.file) + '"]', region) :
602+ focus.id ? document.getElementById(focus.id) :
603+ focus.href ? $('a[href="' + CSS.escape(focus.href) + '"]', region) :
604+ focus.name ? $('[name="' + CSS.escape(focus.name) + '"]', region) :
605+ menu?.querySelector(':scope > summary');
606+ el?.focus({ preventScroll: true });
616 }607 }
617 restoreAnchor(anchor);608 restoreAnchor(anchor);
618 }609 }
619 610
620 function refreshNotice(deferred) {611 function refreshNotice(deferred) {
621- let slot = $('#mr-refresh-status');612+ const slot = $('#mr-refresh-status');
622- if (!slot) {613+ if (!slot) return;
623- slot = document.createElement('div'); slot.id = 'mr-refresh-status'; slot.className = 'live-slot';
624- slot.setAttribute('role', 'status'); slot.setAttribute('aria-live', 'polite');
625- $('#mr-notice')?.after(slot);
626- }
627- slot.className = deferred ? 'live-slot' : 'sr';
628 slot.replaceChildren();614 slot.replaceChildren();
629 if (!deferred) {615 if (!deferred) {
630- const text = document.createElement('span'); text.textContent = 'branch updated'; slot.append(text);616+ const text = document.createElement('span'); text.className = 'sr'; text.textContent = 'branch updated'; slot.append(text);
631 return;617 return;
632 }618 }
633 slot.append('branch updated — refreshing after your comment. ');619 slot.append('branch updated — refreshing after your comment. ');
634- const a = document.createElement('a'); a.href = location.href; a.textContent = 'refresh now';620+
635- a.addEventListener('click', (e) => { e.preventDefault(); headRefresh.request(true); });
636- slot.append(a);
637 }621 }
638 const headRefresh = refresher({ blocked: hasDraft, fetchPage, apply: refreshPage, notice: refreshNotice,622 const headRefresh = refresher({ blocked: hasDraft, fetchPage, apply: refreshPage, notice: refreshNotice,
639- failed: () => { if (hasDraft()) refreshNotice(true); else window.ermiteLive?.reload(); } });623+ failed: () => window.ermiteLive?.reload() });
640 function headChanged() { if ($('#diffs[data-mr]')) headRefresh.request(); }624 function headChanged() { if ($('#diffs[data-mr]')) headRefresh.request(); }
641 625
642 function start() {626 function start() {
643 if (!$('#diffs[data-mr]')) return;627 if (!$('#diffs[data-mr]')) return;
628+ if (window.ermiteLive) window.ermiteLive.canReload = () => {
629+ if (!hasDraft()) return true;
630+ headRefresh.request(); refreshNotice(true); return false;
631+ };
644 // Global delegation is installed once; replacement regions have their own632 // Global delegation is installed once; replacement regions have their own
645 // disposable panel/touch hooks below.633 // disposable panel/touch hooks below.
646 if ($('#diffs').dataset.mrStarted) return;634 if ($('#diffs').dataset.mrStarted) return;
@@ -651,7 +639,7 @@ window.ermiteMR = (() => {
651 if (!cancel || !headRefresh.pending() || e.ctrlKey || e.metaKey || e.shiftKey || e.altKey) return;639 if (!cancel || !headRefresh.pending() || e.ctrlKey || e.metaKey || e.shiftKey || e.altKey) return;
652 e.preventDefault();640 e.preventDefault();
653 const form = cancel.closest('.cform');641 const form = cancel.closest('.cform');
654- for (const t of $$('textarea', form)) t.value = '';642+ for (const t of $$('textarea', form)) t.value = t.defaultValue;
655 if (form.contains(document.activeElement)) document.activeElement.blur();643 if (form.contains(document.activeElement)) document.activeElement.blur();
656 headRefresh.resume();644 headRefresh.resume();
657 });645 });

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