detached 32e9fe7

fix(web): match loaded lines to a selection by file key, keep the focus on a closing menu, close menus with escape on every page and restore the hunk header contrast

commit
32e9fe75d911f4768e499992c6eb8716e5562f14
author
brice · · 2026-10-19 15:52 UTC
parent
4277264
signature
GPG VerifiedCD88F9E564E0102646FB6077A1A07C7C7C3E349D · arch-gpg Verified for the committer email
13 files · +267 -244
M internal/adapters/web/diff.templ +1 -1
@@ -221,7 +221,7 @@ templ DiffFileView(f DiffFile, p DiffView) {
221221 <details
222222 class={ "dfile", "lnw-" + itoa(f.Digits) }
223223 id={ f.ID }
224- data-file
224+ data-file={ f.Key }
225225 if f.Open {
226226 open
227227 }
@@ -221,7 +221,7 @@ templ DiffFileView(f DiffFile, p DiffView) {
221 <details221 <details
222 class={ "dfile", "lnw-" + itoa(f.Digits) }222 class={ "dfile", "lnw-" + itoa(f.Digits) }
223 id={ f.ID }223 id={ f.ID }
224- data-file224+ data-file={ f.Key }
225 if f.Open {225 if f.Open {
226 open226 open
227 }227 }
M internal/adapters/web/diff_templ.go +229 -216
@@ -1201,234 +1201,247 @@ func DiffFileView(f DiffFile, p DiffView) templ.Component {
12011201 if templ_7745c5c3_Err != nil {
12021202 return templ_7745c5c3_Err
12031203 }
1204- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 104, "\" data-file")
1204+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 104, "\" data-file=\"")
1205+ if templ_7745c5c3_Err != nil {
1206+ return templ_7745c5c3_Err
1207+ }
1208+ var templ_7745c5c3_Var60 string
1209+ templ_7745c5c3_Var60, templ_7745c5c3_Err = templ.ResolveAttributeValue(f.Key)
1210+ if templ_7745c5c3_Err != nil {
1211+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/diff.templ`, Line: 224, Col: 19}
1212+ }
1213+ _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ_7745c5c3_Var60)
1214+ if templ_7745c5c3_Err != nil {
1215+ return templ_7745c5c3_Err
1216+ }
1217+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 105, "\"")
12051218 if templ_7745c5c3_Err != nil {
12061219 return templ_7745c5c3_Err
12071220 }
12081221 if f.Open {
1209- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 105, " open")
1222+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 106, " open")
12101223 if templ_7745c5c3_Err != nil {
12111224 return templ_7745c5c3_Err
12121225 }
12131226 }
1214- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 106, "><summary><span class=\"st\">")
1227+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 107, "><summary><span class=\"st\">")
12151228 if templ_7745c5c3_Err != nil {
12161229 return templ_7745c5c3_Err
12171230 }
1218- var templ_7745c5c3_Var60 string
1219- templ_7745c5c3_Var60, templ_7745c5c3_Err = templ.JoinStringErrs(f.Status)
1231+ var templ_7745c5c3_Var61 string
1232+ templ_7745c5c3_Var61, templ_7745c5c3_Err = templ.JoinStringErrs(f.Status)
12201233 if templ_7745c5c3_Err != nil {
12211234 return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/diff.templ`, Line: 230, Col: 30}
12221235 }
1223- _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var60))
1236+ _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var61))
12241237 if templ_7745c5c3_Err != nil {
12251238 return templ_7745c5c3_Err
12261239 }
1227- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 107, "</span>")
1240+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 108, "</span>")
12281241 if templ_7745c5c3_Err != nil {
12291242 return templ_7745c5c3_Err
12301243 }
1231- var templ_7745c5c3_Var61 string
1232- templ_7745c5c3_Var61, templ_7745c5c3_Err = templ.JoinStringErrs(" ")
1244+ var templ_7745c5c3_Var62 string
1245+ templ_7745c5c3_Var62, templ_7745c5c3_Err = templ.JoinStringErrs(" ")
12331246 if templ_7745c5c3_Err != nil {
12341247 return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/diff.templ`, Line: 230, Col: 44}
12351248 }
1236- _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var61))
1249+ _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var62))
12371250 if templ_7745c5c3_Err != nil {
12381251 return templ_7745c5c3_Err
12391252 }
1240- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 108, "<span class=\"p\">")
1253+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 109, "<span class=\"p\">")
12411254 if templ_7745c5c3_Err != nil {
12421255 return templ_7745c5c3_Err
12431256 }
1244- var templ_7745c5c3_Var62 string
1245- templ_7745c5c3_Var62, templ_7745c5c3_Err = templ.JoinStringErrs(f.Path)
1257+ var templ_7745c5c3_Var63 string
1258+ templ_7745c5c3_Var63, templ_7745c5c3_Err = templ.JoinStringErrs(f.Path)
12461259 if templ_7745c5c3_Err != nil {
12471260 return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/diff.templ`, Line: 230, Col: 70}
12481261 }
1249- _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var62))
1262+ _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var63))
12501263 if templ_7745c5c3_Err != nil {
12511264 return templ_7745c5c3_Err
12521265 }
1253- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 109, "</span>")
1266+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 110, "</span>")
12541267 if templ_7745c5c3_Err != nil {
12551268 return templ_7745c5c3_Err
12561269 }
1257- var templ_7745c5c3_Var63 string
1258- templ_7745c5c3_Var63, templ_7745c5c3_Err = templ.JoinStringErrs(" ")
1270+ var templ_7745c5c3_Var64 string
1271+ templ_7745c5c3_Var64, templ_7745c5c3_Err = templ.JoinStringErrs(" ")
12591272 if templ_7745c5c3_Err != nil {
12601273 return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/diff.templ`, Line: 230, Col: 84}
12611274 }
1262- _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var63))
1275+ _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var64))
12631276 if templ_7745c5c3_Err != nil {
12641277 return templ_7745c5c3_Err
12651278 }
1266- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 110, "<span class=\"plus\">+")
1279+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 111, "<span class=\"plus\">+")
12671280 if templ_7745c5c3_Err != nil {
12681281 return templ_7745c5c3_Err
12691282 }
1270- var templ_7745c5c3_Var64 string
1271- templ_7745c5c3_Var64, templ_7745c5c3_Err = templ.JoinStringErrs(itoa(f.Add))
1283+ var templ_7745c5c3_Var65 string
1284+ templ_7745c5c3_Var65, templ_7745c5c3_Err = templ.JoinStringErrs(itoa(f.Add))
12721285 if templ_7745c5c3_Err != nil {
12731286 return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/diff.templ`, Line: 230, Col: 119}
12741287 }
1275- _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var64))
1288+ _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var65))
12761289 if templ_7745c5c3_Err != nil {
12771290 return templ_7745c5c3_Err
12781291 }
1279- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 111, "</span>")
1292+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 112, "</span>")
12801293 if templ_7745c5c3_Err != nil {
12811294 return templ_7745c5c3_Err
12821295 }
1283- var templ_7745c5c3_Var65 string
1284- templ_7745c5c3_Var65, templ_7745c5c3_Err = templ.JoinStringErrs(" ")
1296+ var templ_7745c5c3_Var66 string
1297+ templ_7745c5c3_Var66, templ_7745c5c3_Err = templ.JoinStringErrs(" ")
12851298 if templ_7745c5c3_Err != nil {
12861299 return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/diff.templ`, Line: 230, Col: 133}
12871300 }
1288- _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var65))
1301+ _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var66))
12891302 if templ_7745c5c3_Err != nil {
12901303 return templ_7745c5c3_Err
12911304 }
1292- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 112, "<span class=\"minus\">-")
1305+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 113, "<span class=\"minus\">-")
12931306 if templ_7745c5c3_Err != nil {
12941307 return templ_7745c5c3_Err
12951308 }
1296- var templ_7745c5c3_Var66 string
1297- templ_7745c5c3_Var66, templ_7745c5c3_Err = templ.JoinStringErrs(itoa(f.Del))
1309+ var templ_7745c5c3_Var67 string
1310+ templ_7745c5c3_Var67, templ_7745c5c3_Err = templ.JoinStringErrs(itoa(f.Del))
12981311 if templ_7745c5c3_Err != nil {
12991312 return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/diff.templ`, Line: 230, Col: 169}
13001313 }
1301- _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var66))
1314+ _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var67))
13021315 if templ_7745c5c3_Err != nil {
13031316 return templ_7745c5c3_Err
13041317 }
1305- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 113, "</span> ")
1318+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 114, "</span> ")
13061319 if templ_7745c5c3_Err != nil {
13071320 return templ_7745c5c3_Err
13081321 }
13091322 if f.Note != "" {
1310- var templ_7745c5c3_Var67 string
1311- templ_7745c5c3_Var67, templ_7745c5c3_Err = templ.JoinStringErrs(" ")
1323+ var templ_7745c5c3_Var68 string
1324+ templ_7745c5c3_Var68, templ_7745c5c3_Err = templ.JoinStringErrs(" ")
13121325 if templ_7745c5c3_Err != nil {
13131326 return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/diff.templ`, Line: 232, Col: 9}
13141327 }
1315- _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var67))
1328+ _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var68))
13161329 if templ_7745c5c3_Err != nil {
13171330 return templ_7745c5c3_Err
13181331 }
1319- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 114, "<span class=\"note\">")
1332+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 115, "<span class=\"note\">")
13201333 if templ_7745c5c3_Err != nil {
13211334 return templ_7745c5c3_Err
13221335 }
1323- var templ_7745c5c3_Var68 string
1324- templ_7745c5c3_Var68, templ_7745c5c3_Err = templ.JoinStringErrs(f.Note)
1336+ var templ_7745c5c3_Var69 string
1337+ templ_7745c5c3_Var69, templ_7745c5c3_Err = templ.JoinStringErrs(f.Note)
13251338 if templ_7745c5c3_Err != nil {
13261339 return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/diff.templ`, Line: 232, Col: 38}
13271340 }
1328- _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var68))
1341+ _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var69))
13291342 if templ_7745c5c3_Err != nil {
13301343 return templ_7745c5c3_Err
13311344 }
1332- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 115, "</span>")
1345+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 116, "</span>")
13331346 if templ_7745c5c3_Err != nil {
13341347 return templ_7745c5c3_Err
13351348 }
13361349 }
1337- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 116, "</summary> ")
1350+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 117, "</summary> ")
13381351 if templ_7745c5c3_Err != nil {
13391352 return templ_7745c5c3_Err
13401353 }
13411354 if f.Lazy {
1342- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 117, " ")
1355+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 118, " ")
13431356 if templ_7745c5c3_Err != nil {
13441357 return templ_7745c5c3_Err
13451358 }
1346- var templ_7745c5c3_Var69 = []any{"dlazy", "dlazy-" + itoa(f.Height)}
1347- templ_7745c5c3_Err = templ.RenderCSSItems(ctx, templ_7745c5c3_Buffer, templ_7745c5c3_Var69...)
1359+ var templ_7745c5c3_Var70 = []any{"dlazy", "dlazy-" + itoa(f.Height)}
1360+ templ_7745c5c3_Err = templ.RenderCSSItems(ctx, templ_7745c5c3_Buffer, templ_7745c5c3_Var70...)
13481361 if templ_7745c5c3_Err != nil {
13491362 return templ_7745c5c3_Err
13501363 }
1351- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 118, "<div class=\"")
1364+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 119, "<div class=\"")
13521365 if templ_7745c5c3_Err != nil {
13531366 return templ_7745c5c3_Err
13541367 }
1355- var templ_7745c5c3_Var70 string
1356- templ_7745c5c3_Var70, templ_7745c5c3_Err = templ.ResolveAttributeValue(templ.CSSClasses(templ_7745c5c3_Var69).String())
1368+ var templ_7745c5c3_Var71 string
1369+ templ_7745c5c3_Var71, templ_7745c5c3_Err = templ.ResolveAttributeValue(templ.CSSClasses(templ_7745c5c3_Var70).String())
13571370 if templ_7745c5c3_Err != nil {
13581371 return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/diff.templ`, Line: 1, Col: 0}
13591372 }
1360- _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ_7745c5c3_Var70)
1373+ _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ_7745c5c3_Var71)
13611374 if templ_7745c5c3_Err != nil {
13621375 return templ_7745c5c3_Err
13631376 }
1364- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 119, "\" data-src=\"")
1377+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 120, "\" data-src=\"")
13651378 if templ_7745c5c3_Err != nil {
13661379 return templ_7745c5c3_Err
13671380 }
1368- var templ_7745c5c3_Var71 string
1369- templ_7745c5c3_Var71, templ_7745c5c3_Err = templ.ResolveAttributeValue(f.Src)
1381+ var templ_7745c5c3_Var72 string
1382+ templ_7745c5c3_Var72, templ_7745c5c3_Err = templ.ResolveAttributeValue(f.Src)
13701383 if templ_7745c5c3_Err != nil {
13711384 return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/diff.templ`, Line: 239, Col: 69}
13721385 }
1373- _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ_7745c5c3_Var71)
1386+ _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ_7745c5c3_Var72)
13741387 if templ_7745c5c3_Err != nil {
13751388 return templ_7745c5c3_Err
13761389 }
1377- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 120, "\" data-notes=\"")
1390+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 121, "\" data-notes=\"")
13781391 if templ_7745c5c3_Err != nil {
13791392 return templ_7745c5c3_Err
13801393 }
1381- var templ_7745c5c3_Var72 string
1382- templ_7745c5c3_Var72, templ_7745c5c3_Err = templ.ResolveAttributeValue(f.Comments)
1394+ var templ_7745c5c3_Var73 string
1395+ templ_7745c5c3_Var73, templ_7745c5c3_Err = templ.ResolveAttributeValue(f.Comments)
13831396 if templ_7745c5c3_Err != nil {
13841397 return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/diff.templ`, Line: 239, Col: 95}
13851398 }
1386- _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ_7745c5c3_Var72)
1399+ _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ_7745c5c3_Var73)
13871400 if templ_7745c5c3_Err != nil {
13881401 return templ_7745c5c3_Err
13891402 }
1390- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 121, "\"><a href=\"")
1403+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 122, "\"><a href=\"")
13911404 if templ_7745c5c3_Err != nil {
13921405 return templ_7745c5c3_Err
13931406 }
1394- var templ_7745c5c3_Var73 templ.SafeURL
1395- templ_7745c5c3_Var73, templ_7745c5c3_Err = templ.JoinURLErrs(templ.SafeURL("?from=" + itoa(f.From) + "#" + f.ID))
1407+ var templ_7745c5c3_Var74 templ.SafeURL
1408+ templ_7745c5c3_Var74, templ_7745c5c3_Err = templ.JoinURLErrs(templ.SafeURL("?from=" + itoa(f.From) + "#" + f.ID))
13961409 if templ_7745c5c3_Err != nil {
13971410 return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/diff.templ`, Line: 240, Col: 65}
13981411 }
1399- _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var73))
1412+ _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var74))
14001413 if templ_7745c5c3_Err != nil {
14011414 return templ_7745c5c3_Err
14021415 }
1403- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 122, "\">show this file</a></div>")
1416+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 123, "\">show this file</a></div>")
14041417 if templ_7745c5c3_Err != nil {
14051418 return templ_7745c5c3_Err
14061419 }
14071420 } else if len(f.Hunks) > 0 {
1408- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 123, "<div class=\"dscroll\">")
1421+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 124, "<div class=\"dscroll\">")
14091422 if templ_7745c5c3_Err != nil {
14101423 return templ_7745c5c3_Err
14111424 }
14121425 if p.ShowUnified {
1413- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 124, "<table class=\"dt uni\" aria-label=\"")
1426+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 125, "<table class=\"dt uni\" aria-label=\"")
14141427 if templ_7745c5c3_Err != nil {
14151428 return templ_7745c5c3_Err
14161429 }
1417- var templ_7745c5c3_Var74 string
1418- templ_7745c5c3_Var74, templ_7745c5c3_Err = templ.ResolveAttributeValue(f.Path + ", unified")
1430+ var templ_7745c5c3_Var75 string
1431+ templ_7745c5c3_Var75, templ_7745c5c3_Err = templ.ResolveAttributeValue(f.Path + ", unified")
14191432 if templ_7745c5c3_Err != nil {
14201433 return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/diff.templ`, Line: 245, Col: 60}
14211434 }
1422- _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ_7745c5c3_Var74)
1435+ _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ_7745c5c3_Var75)
14231436 if templ_7745c5c3_Err != nil {
14241437 return templ_7745c5c3_Err
14251438 }
1426- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 125, "\">")
1439+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 126, "\">")
14271440 if templ_7745c5c3_Err != nil {
14281441 return templ_7745c5c3_Err
14291442 }
14301443 for _, h := range f.Hunks {
1431- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 126, "<tbody>")
1444+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 127, "<tbody>")
14321445 if templ_7745c5c3_Err != nil {
14331446 return templ_7745c5c3_Err
14341447 }
@@ -1438,43 +1451,43 @@ func DiffFileView(f DiffFile, p DiffView) templ.Component {
14381451 return templ_7745c5c3_Err
14391452 }
14401453 }
1441- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 127, "<tr class=\"hunk\"><td colspan=\"4\">")
1454+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 128, "<tr class=\"hunk\"><td colspan=\"4\">")
14421455 if templ_7745c5c3_Err != nil {
14431456 return templ_7745c5c3_Err
14441457 }
1445- var templ_7745c5c3_Var75 string
1446- templ_7745c5c3_Var75, templ_7745c5c3_Err = templ.JoinStringErrs(h.Header)
1458+ var templ_7745c5c3_Var76 string
1459+ templ_7745c5c3_Var76, templ_7745c5c3_Err = templ.JoinStringErrs(h.Header)
14471460 if templ_7745c5c3_Err != nil {
14481461 return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/diff.templ`, Line: 251, Col: 51}
14491462 }
1450- _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var75))
1463+ _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var76))
14511464 if templ_7745c5c3_Err != nil {
14521465 return templ_7745c5c3_Err
14531466 }
1454- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 128, "</td></tr>")
1467+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 129, "</td></tr>")
14551468 if templ_7745c5c3_Err != nil {
14561469 return templ_7745c5c3_Err
14571470 }
14581471 for _, ln := range h.Lines {
1459- var templ_7745c5c3_Var76 = []any{ln.Kind, templ.KV("sel", ln.Selected)}
1460- templ_7745c5c3_Err = templ.RenderCSSItems(ctx, templ_7745c5c3_Buffer, templ_7745c5c3_Var76...)
1472+ var templ_7745c5c3_Var77 = []any{ln.Kind, templ.KV("sel", ln.Selected)}
1473+ templ_7745c5c3_Err = templ.RenderCSSItems(ctx, templ_7745c5c3_Buffer, templ_7745c5c3_Var77...)
14611474 if templ_7745c5c3_Err != nil {
14621475 return templ_7745c5c3_Err
14631476 }
1464- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 129, "<tr class=\"")
1477+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 130, "<tr class=\"")
14651478 if templ_7745c5c3_Err != nil {
14661479 return templ_7745c5c3_Err
14671480 }
1468- var templ_7745c5c3_Var77 string
1469- templ_7745c5c3_Var77, templ_7745c5c3_Err = templ.ResolveAttributeValue(templ.CSSClasses(templ_7745c5c3_Var76).String())
1481+ var templ_7745c5c3_Var78 string
1482+ templ_7745c5c3_Var78, templ_7745c5c3_Err = templ.ResolveAttributeValue(templ.CSSClasses(templ_7745c5c3_Var77).String())
14701483 if templ_7745c5c3_Err != nil {
14711484 return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/diff.templ`, Line: 1, Col: 0}
14721485 }
1473- _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ_7745c5c3_Var77)
1486+ _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ_7745c5c3_Var78)
14741487 if templ_7745c5c3_Err != nil {
14751488 return templ_7745c5c3_Err
14761489 }
1477- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 130, "\"><td class=\"ln\">")
1490+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 131, "\"><td class=\"ln\">")
14781491 if templ_7745c5c3_Err != nil {
14791492 return templ_7745c5c3_Err
14801493 }
@@ -1482,7 +1495,7 @@ func DiffFileView(f DiffFile, p DiffView) templ.Component {
14821495 if templ_7745c5c3_Err != nil {
14831496 return templ_7745c5c3_Err
14841497 }
1485- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 131, "</td><td class=\"ln\">")
1498+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 132, "</td><td class=\"ln\">")
14861499 if templ_7745c5c3_Err != nil {
14871500 return templ_7745c5c3_Err
14881501 }
@@ -1490,20 +1503,20 @@ func DiffFileView(f DiffFile, p DiffView) templ.Component {
14901503 if templ_7745c5c3_Err != nil {
14911504 return templ_7745c5c3_Err
14921505 }
1493- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 132, "</td><td class=\"m\">")
1506+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 133, "</td><td class=\"m\">")
14941507 if templ_7745c5c3_Err != nil {
14951508 return templ_7745c5c3_Err
14961509 }
1497- var templ_7745c5c3_Var78 string
1498- templ_7745c5c3_Var78, templ_7745c5c3_Err = templ.JoinStringErrs(ln.Mark)
1510+ var templ_7745c5c3_Var79 string
1511+ templ_7745c5c3_Var79, templ_7745c5c3_Err = templ.JoinStringErrs(ln.Mark)
14991512 if templ_7745c5c3_Err != nil {
15001513 return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/diff.templ`, Line: 256, Col: 33}
15011514 }
1502- _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var78))
1515+ _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var79))
15031516 if templ_7745c5c3_Err != nil {
15041517 return templ_7745c5c3_Err
15051518 }
1506- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 133, "</td><td class=\"tx chroma\">")
1519+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 134, "</td><td class=\"tx chroma\">")
15071520 if templ_7745c5c3_Err != nil {
15081521 return templ_7745c5c3_Err
15091522 }
@@ -1511,12 +1524,12 @@ func DiffFileView(f DiffFile, p DiffView) templ.Component {
15111524 if templ_7745c5c3_Err != nil {
15121525 return templ_7745c5c3_Err
15131526 }
1514- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 134, "</td></tr>")
1527+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 135, "</td></tr>")
15151528 if templ_7745c5c3_Err != nil {
15161529 return templ_7745c5c3_Err
15171530 }
15181531 if len(ln.Notes) > 0 || ln.Form != nil {
1519- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 135, "<tr class=\"fnote\"><td colspan=\"3\"></td><td>")
1532+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 136, "<tr class=\"fnote\"><td colspan=\"3\"></td><td>")
15201533 if templ_7745c5c3_Err != nil {
15211534 return templ_7745c5c3_Err
15221535 }
@@ -1524,19 +1537,19 @@ func DiffFileView(f DiffFile, p DiffView) templ.Component {
15241537 if templ_7745c5c3_Err != nil {
15251538 return templ_7745c5c3_Err
15261539 }
1527- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 136, "</td></tr>")
1540+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 137, "</td></tr>")
15281541 if templ_7745c5c3_Err != nil {
15291542 return templ_7745c5c3_Err
15301543 }
15311544 }
15321545 }
1533- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 137, "</tbody> ")
1546+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 138, "</tbody> ")
15341547 if templ_7745c5c3_Err != nil {
15351548 return templ_7745c5c3_Err
15361549 }
15371550 }
15381551 if f.Tail != nil {
1539- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 138, "<tbody>")
1552+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 139, "<tbody>")
15401553 if templ_7745c5c3_Err != nil {
15411554 return templ_7745c5c3_Err
15421555 }
@@ -1544,36 +1557,36 @@ func DiffFileView(f DiffFile, p DiffView) templ.Component {
15441557 if templ_7745c5c3_Err != nil {
15451558 return templ_7745c5c3_Err
15461559 }
1547- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 139, "</tbody>")
1560+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 140, "</tbody>")
15481561 if templ_7745c5c3_Err != nil {
15491562 return templ_7745c5c3_Err
15501563 }
15511564 }
1552- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 140, "</table>")
1565+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 141, "</table>")
15531566 if templ_7745c5c3_Err != nil {
15541567 return templ_7745c5c3_Err
15551568 }
15561569 }
15571570 if p.ShowSplit {
1558- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 141, "<table class=\"dt spl\" aria-label=\"")
1571+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 142, "<table class=\"dt spl\" aria-label=\"")
15591572 if templ_7745c5c3_Err != nil {
15601573 return templ_7745c5c3_Err
15611574 }
1562- var templ_7745c5c3_Var79 string
1563- templ_7745c5c3_Var79, templ_7745c5c3_Err = templ.ResolveAttributeValue(f.Path + ", split")
1575+ var templ_7745c5c3_Var80 string
1576+ templ_7745c5c3_Var80, templ_7745c5c3_Err = templ.ResolveAttributeValue(f.Path + ", split")
15641577 if templ_7745c5c3_Err != nil {
15651578 return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/diff.templ`, Line: 276, Col: 58}
15661579 }
1567- _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ_7745c5c3_Var79)
1580+ _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ_7745c5c3_Var80)
15681581 if templ_7745c5c3_Err != nil {
15691582 return templ_7745c5c3_Err
15701583 }
1571- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 142, "\"><colgroup><col class=\"c-ln\"><col class=\"c-m\"><col><col class=\"c-ln\"><col class=\"c-m\"><col></colgroup> ")
1584+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 143, "\"><colgroup><col class=\"c-ln\"><col class=\"c-m\"><col><col class=\"c-ln\"><col class=\"c-m\"><col></colgroup> ")
15721585 if templ_7745c5c3_Err != nil {
15731586 return templ_7745c5c3_Err
15741587 }
15751588 for _, h := range f.Hunks {
1576- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 143, "<tbody>")
1589+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 144, "<tbody>")
15771590 if templ_7745c5c3_Err != nil {
15781591 return templ_7745c5c3_Err
15791592 }
@@ -1583,25 +1596,25 @@ func DiffFileView(f DiffFile, p DiffView) templ.Component {
15831596 return templ_7745c5c3_Err
15841597 }
15851598 }
1586- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 144, "<tr class=\"hunk\"><td colspan=\"6\">")
1599+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 145, "<tr class=\"hunk\"><td colspan=\"6\">")
15871600 if templ_7745c5c3_Err != nil {
15881601 return templ_7745c5c3_Err
15891602 }
1590- var templ_7745c5c3_Var80 string
1591- templ_7745c5c3_Var80, templ_7745c5c3_Err = templ.JoinStringErrs(h.Header)
1603+ var templ_7745c5c3_Var81 string
1604+ templ_7745c5c3_Var81, templ_7745c5c3_Err = templ.JoinStringErrs(h.Header)
15921605 if templ_7745c5c3_Err != nil {
15931606 return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/diff.templ`, Line: 283, Col: 51}
15941607 }
1595- _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var80))
1608+ _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var81))
15961609 if templ_7745c5c3_Err != nil {
15971610 return templ_7745c5c3_Err
15981611 }
1599- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 145, "</td></tr>")
1612+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 146, "</td></tr>")
16001613 if templ_7745c5c3_Err != nil {
16011614 return templ_7745c5c3_Err
16021615 }
16031616 for _, row := range h.Split {
1604- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 146, "<tr>")
1617+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 147, "<tr>")
16051618 if templ_7745c5c3_Err != nil {
16061619 return templ_7745c5c3_Err
16071620 }
@@ -1613,12 +1626,12 @@ func DiffFileView(f DiffFile, p DiffView) templ.Component {
16131626 if templ_7745c5c3_Err != nil {
16141627 return templ_7745c5c3_Err
16151628 }
1616- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 147, "</tr>")
1629+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 148, "</tr>")
16171630 if templ_7745c5c3_Err != nil {
16181631 return templ_7745c5c3_Err
16191632 }
16201633 if notes, form := row.Notes(), row.Form(); len(notes) > 0 || form != nil {
1621- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 148, "<tr class=\"fnote\"><td colspan=\"6\">")
1634+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 149, "<tr class=\"fnote\"><td colspan=\"6\">")
16221635 if templ_7745c5c3_Err != nil {
16231636 return templ_7745c5c3_Err
16241637 }
@@ -1626,19 +1639,19 @@ func DiffFileView(f DiffFile, p DiffView) templ.Component {
16261639 if templ_7745c5c3_Err != nil {
16271640 return templ_7745c5c3_Err
16281641 }
1629- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 149, "</td></tr>")
1642+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 150, "</td></tr>")
16301643 if templ_7745c5c3_Err != nil {
16311644 return templ_7745c5c3_Err
16321645 }
16331646 }
16341647 }
1635- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 150, "</tbody> ")
1648+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 151, "</tbody> ")
16361649 if templ_7745c5c3_Err != nil {
16371650 return templ_7745c5c3_Err
16381651 }
16391652 }
16401653 if f.Tail != nil {
1641- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 151, "<tbody>")
1654+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 152, "<tbody>")
16421655 if templ_7745c5c3_Err != nil {
16431656 return templ_7745c5c3_Err
16441657 }
@@ -1646,48 +1659,48 @@ func DiffFileView(f DiffFile, p DiffView) templ.Component {
16461659 if templ_7745c5c3_Err != nil {
16471660 return templ_7745c5c3_Err
16481661 }
1649- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 152, "</tbody>")
1662+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 153, "</tbody>")
16501663 if templ_7745c5c3_Err != nil {
16511664 return templ_7745c5c3_Err
16521665 }
16531666 }
1654- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 153, "</table>")
1667+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 154, "</table>")
16551668 if templ_7745c5c3_Err != nil {
16561669 return templ_7745c5c3_Err
16571670 }
16581671 }
1659- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 154, "</div>")
1672+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 155, "</div>")
16601673 if templ_7745c5c3_Err != nil {
16611674 return templ_7745c5c3_Err
16621675 }
16631676 } else {
1664- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 155, "<p class=\"note pad\">")
1677+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 156, "<p class=\"note pad\">")
16651678 if templ_7745c5c3_Err != nil {
16661679 return templ_7745c5c3_Err
16671680 }
16681681 if f.Note != "" {
1669- var templ_7745c5c3_Var81 string
1670- templ_7745c5c3_Var81, templ_7745c5c3_Err = templ.JoinStringErrs(f.Note)
1682+ var templ_7745c5c3_Var82 string
1683+ templ_7745c5c3_Var82, templ_7745c5c3_Err = templ.JoinStringErrs(f.Note)
16711684 if templ_7745c5c3_Err != nil {
16721685 return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/diff.templ`, Line: 308, Col: 13}
16731686 }
1674- _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var81))
1687+ _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var82))
16751688 if templ_7745c5c3_Err != nil {
16761689 return templ_7745c5c3_Err
16771690 }
16781691 } else {
1679- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 156, "no textual change.")
1692+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 157, "no textual change.")
16801693 if templ_7745c5c3_Err != nil {
16811694 return templ_7745c5c3_Err
16821695 }
16831696 }
1684- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 157, "</p>")
1697+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 158, "</p>")
16851698 if templ_7745c5c3_Err != nil {
16861699 return templ_7745c5c3_Err
16871700 }
16881701 }
16891702 if len(f.Loose) > 0 {
1690- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 158, "<div class=\"dloose\">")
1703+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 159, "<div class=\"dloose\">")
16911704 if templ_7745c5c3_Err != nil {
16921705 return templ_7745c5c3_Err
16931706 }
@@ -1697,12 +1710,12 @@ func DiffFileView(f DiffFile, p DiffView) templ.Component {
16971710 return templ_7745c5c3_Err
16981711 }
16991712 }
1700- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 159, "</div>")
1713+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 160, "</div>")
17011714 if templ_7745c5c3_Err != nil {
17021715 return templ_7745c5c3_Err
17031716 }
17041717 }
1705- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 160, "</details>")
1718+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 161, "</details>")
17061719 if templ_7745c5c3_Err != nil {
17071720 return templ_7745c5c3_Err
17081721 }
@@ -1728,9 +1741,9 @@ func MRFiles(p MRFilesPage) templ.Component {
17281741 }()
17291742 }
17301743 ctx = templ.InitializeContext(ctx)
1731- templ_7745c5c3_Var82 := templ.GetChildren(ctx)
1732- if templ_7745c5c3_Var82 == nil {
1733- templ_7745c5c3_Var82 = templ.NopComponent
1744+ templ_7745c5c3_Var83 := templ.GetChildren(ctx)
1745+ if templ_7745c5c3_Var83 == nil {
1746+ templ_7745c5c3_Var83 = templ.NopComponent
17341747 }
17351748 ctx = templ.ClearChildren(ctx)
17361749 for _, f := range p.Files {
@@ -1761,12 +1774,12 @@ func MRFilesMoved() templ.Component {
17611774 }()
17621775 }
17631776 ctx = templ.InitializeContext(ctx)
1764- templ_7745c5c3_Var83 := templ.GetChildren(ctx)
1765- if templ_7745c5c3_Var83 == nil {
1766- templ_7745c5c3_Var83 = templ.NopComponent
1777+ templ_7745c5c3_Var84 := templ.GetChildren(ctx)
1778+ if templ_7745c5c3_Var84 == nil {
1779+ templ_7745c5c3_Var84 = templ.NopComponent
17671780 }
17681781 ctx = templ.ClearChildren(ctx)
1769- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 161, "<p class=\"notice\" data-moved>this merge request changed since the page was loaded — <a href=\"\">reload</a></p>")
1782+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 162, "<p class=\"notice\" data-moved>this merge request changed since the page was loaded — <a href=\"\">reload</a></p>")
17701783 if templ_7745c5c3_Err != nil {
17711784 return templ_7745c5c3_Err
17721785 }
@@ -1793,64 +1806,64 @@ func gapRow(g DiffGap, cols int) templ.Component {
17931806 }()
17941807 }
17951808 ctx = templ.InitializeContext(ctx)
1796- templ_7745c5c3_Var84 := templ.GetChildren(ctx)
1797- if templ_7745c5c3_Var84 == nil {
1798- templ_7745c5c3_Var84 = templ.NopComponent
1809+ templ_7745c5c3_Var85 := templ.GetChildren(ctx)
1810+ if templ_7745c5c3_Var85 == nil {
1811+ templ_7745c5c3_Var85 = templ.NopComponent
17991812 }
18001813 ctx = templ.ClearChildren(ctx)
1801- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 162, "<tr class=\"gap\" data-js data-gap=\"")
1814+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 163, "<tr class=\"gap\" data-js data-gap=\"")
18021815 if templ_7745c5c3_Err != nil {
18031816 return templ_7745c5c3_Err
18041817 }
1805- var templ_7745c5c3_Var85 string
1806- templ_7745c5c3_Var85, templ_7745c5c3_Err = templ.ResolveAttributeValue(g.Key)
1818+ var templ_7745c5c3_Var86 string
1819+ templ_7745c5c3_Var86, templ_7745c5c3_Err = templ.ResolveAttributeValue(g.Key)
18071820 if templ_7745c5c3_Err != nil {
18081821 return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/diff.templ`, Line: 342, Col: 41}
18091822 }
1810- _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ_7745c5c3_Var85)
1823+ _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ_7745c5c3_Var86)
18111824 if templ_7745c5c3_Err != nil {
18121825 return templ_7745c5c3_Err
18131826 }
1814- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 163, "\"><td colspan=\"")
1827+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 164, "\"><td colspan=\"")
18151828 if templ_7745c5c3_Err != nil {
18161829 return templ_7745c5c3_Err
18171830 }
1818- var templ_7745c5c3_Var86 string
1819- templ_7745c5c3_Var86, templ_7745c5c3_Err = templ.ResolveAttributeValue(itoa(cols))
1831+ var templ_7745c5c3_Var87 string
1832+ templ_7745c5c3_Var87, templ_7745c5c3_Err = templ.ResolveAttributeValue(itoa(cols))
18201833 if templ_7745c5c3_Err != nil {
18211834 return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/diff.templ`, Line: 343, Col: 26}
18221835 }
1823- _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ_7745c5c3_Var86)
1836+ _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ_7745c5c3_Var87)
18241837 if templ_7745c5c3_Err != nil {
18251838 return templ_7745c5c3_Err
18261839 }
1827- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 164, "\"><button type=\"button\" data-src=\"")
1840+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 165, "\"><button type=\"button\" data-src=\"")
18281841 if templ_7745c5c3_Err != nil {
18291842 return templ_7745c5c3_Err
18301843 }
1831- var templ_7745c5c3_Var87 string
1832- templ_7745c5c3_Var87, templ_7745c5c3_Err = templ.ResolveAttributeValue(g.Src)
1844+ var templ_7745c5c3_Var88 string
1845+ templ_7745c5c3_Var88, templ_7745c5c3_Err = templ.ResolveAttributeValue(g.Src)
18331846 if templ_7745c5c3_Err != nil {
18341847 return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/diff.templ`, Line: 344, Col: 41}
18351848 }
1836- _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ_7745c5c3_Var87)
1849+ _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ_7745c5c3_Var88)
18371850 if templ_7745c5c3_Err != nil {
18381851 return templ_7745c5c3_Err
18391852 }
1840- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 165, "\"><span aria-hidden=\"true\">⋯</span> ")
1853+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 166, "\"><span aria-hidden=\"true\">⋯</span> ")
18411854 if templ_7745c5c3_Err != nil {
18421855 return templ_7745c5c3_Err
18431856 }
1844- var templ_7745c5c3_Var88 string
1845- templ_7745c5c3_Var88, templ_7745c5c3_Err = templ.JoinStringErrs(g.Label())
1857+ var templ_7745c5c3_Var89 string
1858+ templ_7745c5c3_Var89, templ_7745c5c3_Err = templ.JoinStringErrs(g.Label())
18461859 if templ_7745c5c3_Err != nil {
18471860 return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/diff.templ`, Line: 345, Col: 51}
18481861 }
1849- _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var88))
1862+ _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var89))
18501863 if templ_7745c5c3_Err != nil {
18511864 return templ_7745c5c3_Err
18521865 }
1853- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 166, "</button></td></tr>")
1866+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 167, "</button></td></tr>")
18541867 if templ_7745c5c3_Err != nil {
18551868 return templ_7745c5c3_Err
18561869 }
@@ -1876,56 +1889,56 @@ func DiffContext(c ContextRows) templ.Component {
18761889 }()
18771890 }
18781891 ctx = templ.InitializeContext(ctx)
1879- templ_7745c5c3_Var89 := templ.GetChildren(ctx)
1880- if templ_7745c5c3_Var89 == nil {
1881- templ_7745c5c3_Var89 = templ.NopComponent
1892+ templ_7745c5c3_Var90 := templ.GetChildren(ctx)
1893+ if templ_7745c5c3_Var90 == nil {
1894+ templ_7745c5c3_Var90 = templ.NopComponent
18821895 }
18831896 ctx = templ.ClearChildren(ctx)
1884- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 167, "<table><tbody data-for=\"uni\">")
1897+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 168, "<table><tbody data-for=\"uni\">")
18851898 if templ_7745c5c3_Err != nil {
18861899 return templ_7745c5c3_Err
18871900 }
18881901 for _, ln := range c.Lines {
1889- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 168, "<tr class=\"ctx\"><td class=\"ln\">")
1902+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 169, "<tr class=\"ctx\"><td class=\"ln\">")
18901903 if templ_7745c5c3_Err != nil {
18911904 return templ_7745c5c3_Err
18921905 }
1893- var templ_7745c5c3_Var90 string
1894- templ_7745c5c3_Var90, templ_7745c5c3_Err = templ.JoinStringErrs(ln.Old)
1906+ var templ_7745c5c3_Var91 string
1907+ templ_7745c5c3_Var91, templ_7745c5c3_Err = templ.JoinStringErrs(ln.Old)
18951908 if templ_7745c5c3_Err != nil {
18961909 return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/diff.templ`, Line: 358, Col: 28}
18971910 }
1898- _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var90))
1911+ _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var91))
18991912 if templ_7745c5c3_Err != nil {
19001913 return templ_7745c5c3_Err
19011914 }
1902- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 169, "</td><td class=\"ln\">")
1915+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 170, "</td><td class=\"ln\">")
19031916 if templ_7745c5c3_Err != nil {
19041917 return templ_7745c5c3_Err
19051918 }
1906- var templ_7745c5c3_Var91 string
1907- templ_7745c5c3_Var91, templ_7745c5c3_Err = templ.JoinStringErrs(ln.New)
1919+ var templ_7745c5c3_Var92 string
1920+ templ_7745c5c3_Var92, templ_7745c5c3_Err = templ.JoinStringErrs(ln.New)
19081921 if templ_7745c5c3_Err != nil {
19091922 return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/diff.templ`, Line: 359, Col: 28}
19101923 }
1911- _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var91))
1924+ _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var92))
19121925 if templ_7745c5c3_Err != nil {
19131926 return templ_7745c5c3_Err
19141927 }
1915- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 170, "</td><td class=\"m\">")
1928+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 171, "</td><td class=\"m\">")
19161929 if templ_7745c5c3_Err != nil {
19171930 return templ_7745c5c3_Err
19181931 }
1919- var templ_7745c5c3_Var92 string
1920- templ_7745c5c3_Var92, templ_7745c5c3_Err = templ.JoinStringErrs(ln.Mark)
1932+ var templ_7745c5c3_Var93 string
1933+ templ_7745c5c3_Var93, templ_7745c5c3_Err = templ.JoinStringErrs(ln.Mark)
19211934 if templ_7745c5c3_Err != nil {
19221935 return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/diff.templ`, Line: 360, Col: 28}
19231936 }
1924- _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var92))
1937+ _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var93))
19251938 if templ_7745c5c3_Err != nil {
19261939 return templ_7745c5c3_Err
19271940 }
1928- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 171, "</td><td class=\"tx chroma\">")
1941+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 172, "</td><td class=\"tx chroma\">")
19291942 if templ_7745c5c3_Err != nil {
19301943 return templ_7745c5c3_Err
19311944 }
@@ -1933,7 +1946,7 @@ func DiffContext(c ContextRows) templ.Component {
19331946 if templ_7745c5c3_Err != nil {
19341947 return templ_7745c5c3_Err
19351948 }
1936- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 172, "</td></tr>")
1949+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 173, "</td></tr>")
19371950 if templ_7745c5c3_Err != nil {
19381951 return templ_7745c5c3_Err
19391952 }
@@ -1944,12 +1957,12 @@ func DiffContext(c ContextRows) templ.Component {
19441957 return templ_7745c5c3_Err
19451958 }
19461959 }
1947- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 173, "</tbody> <tbody data-for=\"spl\">")
1960+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 174, "</tbody> <tbody data-for=\"spl\">")
19481961 if templ_7745c5c3_Err != nil {
19491962 return templ_7745c5c3_Err
19501963 }
19511964 for i := range c.Lines {
1952- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 174, "<tr>")
1965+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 175, "<tr>")
19531966 if templ_7745c5c3_Err != nil {
19541967 return templ_7745c5c3_Err
19551968 }
@@ -1961,7 +1974,7 @@ func DiffContext(c ContextRows) templ.Component {
19611974 if templ_7745c5c3_Err != nil {
19621975 return templ_7745c5c3_Err
19631976 }
1964- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 175, "</tr>")
1977+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 176, "</tr>")
19651978 if templ_7745c5c3_Err != nil {
19661979 return templ_7745c5c3_Err
19671980 }
@@ -1972,7 +1985,7 @@ func DiffContext(c ContextRows) templ.Component {
19721985 return templ_7745c5c3_Err
19731986 }
19741987 }
1975- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 176, "</tbody></table>")
1988+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 177, "</tbody></table>")
19761989 if templ_7745c5c3_Err != nil {
19771990 return templ_7745c5c3_Err
19781991 }
@@ -1998,36 +2011,36 @@ func splitSide(ln *DiffLine, old bool) templ.Component {
19982011 }()
19992012 }
20002013 ctx = templ.InitializeContext(ctx)
2001- templ_7745c5c3_Var93 := templ.GetChildren(ctx)
2002- if templ_7745c5c3_Var93 == nil {
2003- templ_7745c5c3_Var93 = templ.NopComponent
2014+ templ_7745c5c3_Var94 := templ.GetChildren(ctx)
2015+ if templ_7745c5c3_Var94 == nil {
2016+ templ_7745c5c3_Var94 = templ.NopComponent
20042017 }
20052018 ctx = templ.ClearChildren(ctx)
20062019 if ln == nil {
2007- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 177, "<td class=\"ln none\"></td><td class=\"m none\"></td><td class=\"tx none\"></td>")
2020+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 178, "<td class=\"ln none\"></td><td class=\"m none\"></td><td class=\"tx none\"></td>")
20082021 if templ_7745c5c3_Err != nil {
20092022 return templ_7745c5c3_Err
20102023 }
20112024 } else {
2012- var templ_7745c5c3_Var94 = []any{"ln", ln.Kind, templ.KV("sel", ln.Selected)}
2013- templ_7745c5c3_Err = templ.RenderCSSItems(ctx, templ_7745c5c3_Buffer, templ_7745c5c3_Var94...)
2025+ var templ_7745c5c3_Var95 = []any{"ln", ln.Kind, templ.KV("sel", ln.Selected)}
2026+ templ_7745c5c3_Err = templ.RenderCSSItems(ctx, templ_7745c5c3_Buffer, templ_7745c5c3_Var95...)
20142027 if templ_7745c5c3_Err != nil {
20152028 return templ_7745c5c3_Err
20162029 }
2017- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 178, "<td class=\"")
2030+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 179, "<td class=\"")
20182031 if templ_7745c5c3_Err != nil {
20192032 return templ_7745c5c3_Err
20202033 }
2021- var templ_7745c5c3_Var95 string
2022- templ_7745c5c3_Var95, templ_7745c5c3_Err = templ.ResolveAttributeValue(templ.CSSClasses(templ_7745c5c3_Var94).String())
2034+ var templ_7745c5c3_Var96 string
2035+ templ_7745c5c3_Var96, templ_7745c5c3_Err = templ.ResolveAttributeValue(templ.CSSClasses(templ_7745c5c3_Var95).String())
20232036 if templ_7745c5c3_Err != nil {
20242037 return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/diff.templ`, Line: 1, Col: 0}
20252038 }
2026- _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ_7745c5c3_Var95)
2039+ _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ_7745c5c3_Var96)
20272040 if templ_7745c5c3_Err != nil {
20282041 return templ_7745c5c3_Err
20292042 }
2030- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 179, "\">")
2043+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 180, "\">")
20312044 if templ_7745c5c3_Err != nil {
20322045 return templ_7745c5c3_Err
20332046 }
@@ -2042,64 +2055,64 @@ func splitSide(ln *DiffLine, old bool) templ.Component {
20422055 return templ_7745c5c3_Err
20432056 }
20442057 }
2045- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 180, "</td>")
2058+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 181, "</td>")
20462059 if templ_7745c5c3_Err != nil {
20472060 return templ_7745c5c3_Err
20482061 }
2049- var templ_7745c5c3_Var96 = []any{"m", ln.Kind, templ.KV("sel", ln.Selected)}
2050- templ_7745c5c3_Err = templ.RenderCSSItems(ctx, templ_7745c5c3_Buffer, templ_7745c5c3_Var96...)
2062+ var templ_7745c5c3_Var97 = []any{"m", ln.Kind, templ.KV("sel", ln.Selected)}
2063+ templ_7745c5c3_Err = templ.RenderCSSItems(ctx, templ_7745c5c3_Buffer, templ_7745c5c3_Var97...)
20512064 if templ_7745c5c3_Err != nil {
20522065 return templ_7745c5c3_Err
20532066 }
2054- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 181, "<td class=\"")
2067+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 182, "<td class=\"")
20552068 if templ_7745c5c3_Err != nil {
20562069 return templ_7745c5c3_Err
20572070 }
2058- var templ_7745c5c3_Var97 string
2059- templ_7745c5c3_Var97, templ_7745c5c3_Err = templ.ResolveAttributeValue(templ.CSSClasses(templ_7745c5c3_Var96).String())
2071+ var templ_7745c5c3_Var98 string
2072+ templ_7745c5c3_Var98, templ_7745c5c3_Err = templ.ResolveAttributeValue(templ.CSSClasses(templ_7745c5c3_Var97).String())
20602073 if templ_7745c5c3_Err != nil {
20612074 return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/diff.templ`, Line: 1, Col: 0}
20622075 }
2063- _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ_7745c5c3_Var97)
2076+ _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ_7745c5c3_Var98)
20642077 if templ_7745c5c3_Err != nil {
20652078 return templ_7745c5c3_Err
20662079 }
2067- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 182, "\">")
2080+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 183, "\">")
20682081 if templ_7745c5c3_Err != nil {
20692082 return templ_7745c5c3_Err
20702083 }
2071- var templ_7745c5c3_Var98 string
2072- templ_7745c5c3_Var98, templ_7745c5c3_Err = templ.JoinStringErrs(ln.Mark)
2084+ var templ_7745c5c3_Var99 string
2085+ templ_7745c5c3_Var99, templ_7745c5c3_Err = templ.JoinStringErrs(ln.Mark)
20732086 if templ_7745c5c3_Err != nil {
20742087 return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/diff.templ`, Line: 397, Col: 68}
20752088 }
2076- _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var98))
2089+ _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var99))
20772090 if templ_7745c5c3_Err != nil {
20782091 return templ_7745c5c3_Err
20792092 }
2080- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 183, "</td>")
2093+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 184, "</td>")
20812094 if templ_7745c5c3_Err != nil {
20822095 return templ_7745c5c3_Err
20832096 }
2084- var templ_7745c5c3_Var99 = []any{"tx", "chroma", ln.Kind, templ.KV("sel", ln.Selected)}
2085- templ_7745c5c3_Err = templ.RenderCSSItems(ctx, templ_7745c5c3_Buffer, templ_7745c5c3_Var99...)
2097+ var templ_7745c5c3_Var100 = []any{"tx", "chroma", ln.Kind, templ.KV("sel", ln.Selected)}
2098+ templ_7745c5c3_Err = templ.RenderCSSItems(ctx, templ_7745c5c3_Buffer, templ_7745c5c3_Var100...)
20862099 if templ_7745c5c3_Err != nil {
20872100 return templ_7745c5c3_Err
20882101 }
2089- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 184, "<td class=\"")
2102+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 185, "<td class=\"")
20902103 if templ_7745c5c3_Err != nil {
20912104 return templ_7745c5c3_Err
20922105 }
2093- var templ_7745c5c3_Var100 string
2094- templ_7745c5c3_Var100, templ_7745c5c3_Err = templ.ResolveAttributeValue(templ.CSSClasses(templ_7745c5c3_Var99).String())
2106+ var templ_7745c5c3_Var101 string
2107+ templ_7745c5c3_Var101, templ_7745c5c3_Err = templ.ResolveAttributeValue(templ.CSSClasses(templ_7745c5c3_Var100).String())
20952108 if templ_7745c5c3_Err != nil {
20962109 return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/diff.templ`, Line: 1, Col: 0}
20972110 }
2098- _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ_7745c5c3_Var100)
2111+ _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ_7745c5c3_Var101)
20992112 if templ_7745c5c3_Err != nil {
21002113 return templ_7745c5c3_Err
21012114 }
2102- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 185, "\">")
2115+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 186, "\">")
21032116 if templ_7745c5c3_Err != nil {
21042117 return templ_7745c5c3_Err
21052118 }
@@ -2107,7 +2120,7 @@ func splitSide(ln *DiffLine, old bool) templ.Component {
21072120 if templ_7745c5c3_Err != nil {
21082121 return templ_7745c5c3_Err
21092122 }
2110- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 186, "</td>")
2123+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 187, "</td>")
21112124 if templ_7745c5c3_Err != nil {
21122125 return templ_7745c5c3_Err
21132126 }
@@ -2134,49 +2147,49 @@ func gutter(n, href string) templ.Component {
21342147 }()
21352148 }
21362149 ctx = templ.InitializeContext(ctx)
2137- templ_7745c5c3_Var101 := templ.GetChildren(ctx)
2138- if templ_7745c5c3_Var101 == nil {
2139- templ_7745c5c3_Var101 = templ.NopComponent
2150+ templ_7745c5c3_Var102 := templ.GetChildren(ctx)
2151+ if templ_7745c5c3_Var102 == nil {
2152+ templ_7745c5c3_Var102 = templ.NopComponent
21402153 }
21412154 ctx = templ.ClearChildren(ctx)
21422155 if href != "" {
2143- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 187, "<a href=\"")
2156+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 188, "<a href=\"")
21442157 if templ_7745c5c3_Err != nil {
21452158 return templ_7745c5c3_Err
21462159 }
2147- var templ_7745c5c3_Var102 templ.SafeURL
2148- templ_7745c5c3_Var102, templ_7745c5c3_Err = templ.JoinURLErrs(templ.SafeURL(href))
2160+ var templ_7745c5c3_Var103 templ.SafeURL
2161+ templ_7745c5c3_Var103, templ_7745c5c3_Err = templ.JoinURLErrs(templ.SafeURL(href))
21492162 if templ_7745c5c3_Err != nil {
21502163 return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/diff.templ`, Line: 406, Col: 31}
21512164 }
2152- _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var102))
2165+ _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var103))
21532166 if templ_7745c5c3_Err != nil {
21542167 return templ_7745c5c3_Err
21552168 }
2156- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 188, "\" title=\"comment on this line\">")
2169+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 189, "\" title=\"comment on this line\">")
21572170 if templ_7745c5c3_Err != nil {
21582171 return templ_7745c5c3_Err
21592172 }
2160- var templ_7745c5c3_Var103 string
2161- templ_7745c5c3_Var103, templ_7745c5c3_Err = templ.JoinStringErrs(n)
2173+ var templ_7745c5c3_Var104 string
2174+ templ_7745c5c3_Var104, templ_7745c5c3_Err = templ.JoinStringErrs(n)
21622175 if templ_7745c5c3_Err != nil {
21632176 return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/diff.templ`, Line: 406, Col: 66}
21642177 }
2165- _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var103))
2178+ _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var104))
21662179 if templ_7745c5c3_Err != nil {
21672180 return templ_7745c5c3_Err
21682181 }
2169- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 189, "</a>")
2182+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 190, "</a>")
21702183 if templ_7745c5c3_Err != nil {
21712184 return templ_7745c5c3_Err
21722185 }
21732186 } else {
2174- var templ_7745c5c3_Var104 string
2175- templ_7745c5c3_Var104, templ_7745c5c3_Err = templ.JoinStringErrs(n)
2187+ var templ_7745c5c3_Var105 string
2188+ templ_7745c5c3_Var105, templ_7745c5c3_Err = templ.JoinStringErrs(n)
21762189 if templ_7745c5c3_Err != nil {
21772190 return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/diff.templ`, Line: 408, Col: 5}
21782191 }
2179- _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var104))
2192+ _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var105))
21802193 if templ_7745c5c3_Err != nil {
21812194 return templ_7745c5c3_Err
21822195 }
@@ -1201,234 +1201,247 @@ func DiffFileView(f DiffFile, p DiffView) templ.Component {
1201 if templ_7745c5c3_Err != nil {1201 if templ_7745c5c3_Err != nil {
1202 return templ_7745c5c3_Err1202 return templ_7745c5c3_Err
1203 }1203 }
1204- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 104, "\" data-file")1204+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 104, "\" data-file=\"")
1205+ if templ_7745c5c3_Err != nil {
1206+ return templ_7745c5c3_Err
1207+ }
1208+ var templ_7745c5c3_Var60 string
1209+ templ_7745c5c3_Var60, templ_7745c5c3_Err = templ.ResolveAttributeValue(f.Key)
1210+ if templ_7745c5c3_Err != nil {
1211+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/diff.templ`, Line: 224, Col: 19}
1212+ }
1213+ _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ_7745c5c3_Var60)
1214+ if templ_7745c5c3_Err != nil {
1215+ return templ_7745c5c3_Err
1216+ }
1217+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 105, "\"")
1205 if templ_7745c5c3_Err != nil {1218 if templ_7745c5c3_Err != nil {
1206 return templ_7745c5c3_Err1219 return templ_7745c5c3_Err
1207 }1220 }
1208 if f.Open {1221 if f.Open {
1209- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 105, " open")1222+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 106, " open")
1210 if templ_7745c5c3_Err != nil {1223 if templ_7745c5c3_Err != nil {
1211 return templ_7745c5c3_Err1224 return templ_7745c5c3_Err
1212 }1225 }
1213 }1226 }
1214- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 106, "><summary><span class=\"st\">")1227+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 107, "><summary><span class=\"st\">")
1215 if templ_7745c5c3_Err != nil {1228 if templ_7745c5c3_Err != nil {
1216 return templ_7745c5c3_Err1229 return templ_7745c5c3_Err
1217 }1230 }
1218- var templ_7745c5c3_Var60 string1231+ var templ_7745c5c3_Var61 string
1219- templ_7745c5c3_Var60, templ_7745c5c3_Err = templ.JoinStringErrs(f.Status)1232+ templ_7745c5c3_Var61, templ_7745c5c3_Err = templ.JoinStringErrs(f.Status)
1220 if templ_7745c5c3_Err != nil {1233 if templ_7745c5c3_Err != nil {
1221 return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/diff.templ`, Line: 230, Col: 30}1234 return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/diff.templ`, Line: 230, Col: 30}
1222 }1235 }
1223- _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var60))1236+ _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var61))
1224 if templ_7745c5c3_Err != nil {1237 if templ_7745c5c3_Err != nil {
1225 return templ_7745c5c3_Err1238 return templ_7745c5c3_Err
1226 }1239 }
1227- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 107, "</span>")1240+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 108, "</span>")
1228 if templ_7745c5c3_Err != nil {1241 if templ_7745c5c3_Err != nil {
1229 return templ_7745c5c3_Err1242 return templ_7745c5c3_Err
1230 }1243 }
1231- var templ_7745c5c3_Var61 string1244+ var templ_7745c5c3_Var62 string
1232- templ_7745c5c3_Var61, templ_7745c5c3_Err = templ.JoinStringErrs(" ")1245+ templ_7745c5c3_Var62, templ_7745c5c3_Err = templ.JoinStringErrs(" ")
1233 if templ_7745c5c3_Err != nil {1246 if templ_7745c5c3_Err != nil {
1234 return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/diff.templ`, Line: 230, Col: 44}1247 return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/diff.templ`, Line: 230, Col: 44}
1235 }1248 }
1236- _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var61))1249+ _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var62))
1237 if templ_7745c5c3_Err != nil {1250 if templ_7745c5c3_Err != nil {
1238 return templ_7745c5c3_Err1251 return templ_7745c5c3_Err
1239 }1252 }
1240- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 108, "<span class=\"p\">")1253+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 109, "<span class=\"p\">")
1241 if templ_7745c5c3_Err != nil {1254 if templ_7745c5c3_Err != nil {
1242 return templ_7745c5c3_Err1255 return templ_7745c5c3_Err
1243 }1256 }
1244- var templ_7745c5c3_Var62 string1257+ var templ_7745c5c3_Var63 string
1245- templ_7745c5c3_Var62, templ_7745c5c3_Err = templ.JoinStringErrs(f.Path)1258+ templ_7745c5c3_Var63, templ_7745c5c3_Err = templ.JoinStringErrs(f.Path)
1246 if templ_7745c5c3_Err != nil {1259 if templ_7745c5c3_Err != nil {
1247 return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/diff.templ`, Line: 230, Col: 70}1260 return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/diff.templ`, Line: 230, Col: 70}
1248 }1261 }
1249- _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var62))1262+ _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var63))
1250 if templ_7745c5c3_Err != nil {1263 if templ_7745c5c3_Err != nil {
1251 return templ_7745c5c3_Err1264 return templ_7745c5c3_Err
1252 }1265 }
1253- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 109, "</span>")1266+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 110, "</span>")
1254 if templ_7745c5c3_Err != nil {1267 if templ_7745c5c3_Err != nil {
1255 return templ_7745c5c3_Err1268 return templ_7745c5c3_Err
1256 }1269 }
1257- var templ_7745c5c3_Var63 string1270+ var templ_7745c5c3_Var64 string
1258- templ_7745c5c3_Var63, templ_7745c5c3_Err = templ.JoinStringErrs(" ")1271+ templ_7745c5c3_Var64, templ_7745c5c3_Err = templ.JoinStringErrs(" ")
1259 if templ_7745c5c3_Err != nil {1272 if templ_7745c5c3_Err != nil {
1260 return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/diff.templ`, Line: 230, Col: 84}1273 return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/diff.templ`, Line: 230, Col: 84}
1261 }1274 }
1262- _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var63))1275+ _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var64))
1263 if templ_7745c5c3_Err != nil {1276 if templ_7745c5c3_Err != nil {
1264 return templ_7745c5c3_Err1277 return templ_7745c5c3_Err
1265 }1278 }
1266- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 110, "<span class=\"plus\">+")1279+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 111, "<span class=\"plus\">+")
1267 if templ_7745c5c3_Err != nil {1280 if templ_7745c5c3_Err != nil {
1268 return templ_7745c5c3_Err1281 return templ_7745c5c3_Err
1269 }1282 }
1270- var templ_7745c5c3_Var64 string1283+ var templ_7745c5c3_Var65 string
1271- templ_7745c5c3_Var64, templ_7745c5c3_Err = templ.JoinStringErrs(itoa(f.Add))1284+ templ_7745c5c3_Var65, templ_7745c5c3_Err = templ.JoinStringErrs(itoa(f.Add))
1272 if templ_7745c5c3_Err != nil {1285 if templ_7745c5c3_Err != nil {
1273 return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/diff.templ`, Line: 230, Col: 119}1286 return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/diff.templ`, Line: 230, Col: 119}
1274 }1287 }
1275- _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var64))1288+ _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var65))
1276 if templ_7745c5c3_Err != nil {1289 if templ_7745c5c3_Err != nil {
1277 return templ_7745c5c3_Err1290 return templ_7745c5c3_Err
1278 }1291 }
1279- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 111, "</span>")1292+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 112, "</span>")
1280 if templ_7745c5c3_Err != nil {1293 if templ_7745c5c3_Err != nil {
1281 return templ_7745c5c3_Err1294 return templ_7745c5c3_Err
1282 }1295 }
1283- var templ_7745c5c3_Var65 string1296+ var templ_7745c5c3_Var66 string
1284- templ_7745c5c3_Var65, templ_7745c5c3_Err = templ.JoinStringErrs(" ")1297+ templ_7745c5c3_Var66, templ_7745c5c3_Err = templ.JoinStringErrs(" ")
1285 if templ_7745c5c3_Err != nil {1298 if templ_7745c5c3_Err != nil {
1286 return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/diff.templ`, Line: 230, Col: 133}1299 return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/diff.templ`, Line: 230, Col: 133}
1287 }1300 }
1288- _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var65))1301+ _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var66))
1289 if templ_7745c5c3_Err != nil {1302 if templ_7745c5c3_Err != nil {
1290 return templ_7745c5c3_Err1303 return templ_7745c5c3_Err
1291 }1304 }
1292- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 112, "<span class=\"minus\">-")1305+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 113, "<span class=\"minus\">-")
1293 if templ_7745c5c3_Err != nil {1306 if templ_7745c5c3_Err != nil {
1294 return templ_7745c5c3_Err1307 return templ_7745c5c3_Err
1295 }1308 }
1296- var templ_7745c5c3_Var66 string1309+ var templ_7745c5c3_Var67 string
1297- templ_7745c5c3_Var66, templ_7745c5c3_Err = templ.JoinStringErrs(itoa(f.Del))1310+ templ_7745c5c3_Var67, templ_7745c5c3_Err = templ.JoinStringErrs(itoa(f.Del))
1298 if templ_7745c5c3_Err != nil {1311 if templ_7745c5c3_Err != nil {
1299 return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/diff.templ`, Line: 230, Col: 169}1312 return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/diff.templ`, Line: 230, Col: 169}
1300 }1313 }
1301- _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var66))1314+ _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var67))
1302 if templ_7745c5c3_Err != nil {1315 if templ_7745c5c3_Err != nil {
1303 return templ_7745c5c3_Err1316 return templ_7745c5c3_Err
1304 }1317 }
1305- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 113, "</span> ")1318+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 114, "</span> ")
1306 if templ_7745c5c3_Err != nil {1319 if templ_7745c5c3_Err != nil {
1307 return templ_7745c5c3_Err1320 return templ_7745c5c3_Err
1308 }1321 }
1309 if f.Note != "" {1322 if f.Note != "" {
1310- var templ_7745c5c3_Var67 string1323+ var templ_7745c5c3_Var68 string
1311- templ_7745c5c3_Var67, templ_7745c5c3_Err = templ.JoinStringErrs(" ")1324+ templ_7745c5c3_Var68, templ_7745c5c3_Err = templ.JoinStringErrs(" ")
1312 if templ_7745c5c3_Err != nil {1325 if templ_7745c5c3_Err != nil {
1313 return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/diff.templ`, Line: 232, Col: 9}1326 return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/diff.templ`, Line: 232, Col: 9}
1314 }1327 }
1315- _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var67))1328+ _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var68))
1316 if templ_7745c5c3_Err != nil {1329 if templ_7745c5c3_Err != nil {
1317 return templ_7745c5c3_Err1330 return templ_7745c5c3_Err
1318 }1331 }
1319- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 114, "<span class=\"note\">")1332+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 115, "<span class=\"note\">")
1320 if templ_7745c5c3_Err != nil {1333 if templ_7745c5c3_Err != nil {
1321 return templ_7745c5c3_Err1334 return templ_7745c5c3_Err
1322 }1335 }
1323- var templ_7745c5c3_Var68 string1336+ var templ_7745c5c3_Var69 string
1324- templ_7745c5c3_Var68, templ_7745c5c3_Err = templ.JoinStringErrs(f.Note)1337+ templ_7745c5c3_Var69, templ_7745c5c3_Err = templ.JoinStringErrs(f.Note)
1325 if templ_7745c5c3_Err != nil {1338 if templ_7745c5c3_Err != nil {
1326 return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/diff.templ`, Line: 232, Col: 38}1339 return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/diff.templ`, Line: 232, Col: 38}
1327 }1340 }
1328- _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var68))1341+ _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var69))
1329 if templ_7745c5c3_Err != nil {1342 if templ_7745c5c3_Err != nil {
1330 return templ_7745c5c3_Err1343 return templ_7745c5c3_Err
1331 }1344 }
1332- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 115, "</span>")1345+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 116, "</span>")
1333 if templ_7745c5c3_Err != nil {1346 if templ_7745c5c3_Err != nil {
1334 return templ_7745c5c3_Err1347 return templ_7745c5c3_Err
1335 }1348 }
1336 }1349 }
1337- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 116, "</summary> ")1350+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 117, "</summary> ")
1338 if templ_7745c5c3_Err != nil {1351 if templ_7745c5c3_Err != nil {
1339 return templ_7745c5c3_Err1352 return templ_7745c5c3_Err
1340 }1353 }
1341 if f.Lazy {1354 if f.Lazy {
1342- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 117, " ")1355+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 118, " ")
1343 if templ_7745c5c3_Err != nil {1356 if templ_7745c5c3_Err != nil {
1344 return templ_7745c5c3_Err1357 return templ_7745c5c3_Err
1345 }1358 }
1346- var templ_7745c5c3_Var69 = []any{"dlazy", "dlazy-" + itoa(f.Height)}1359+ var templ_7745c5c3_Var70 = []any{"dlazy", "dlazy-" + itoa(f.Height)}
1347- templ_7745c5c3_Err = templ.RenderCSSItems(ctx, templ_7745c5c3_Buffer, templ_7745c5c3_Var69...)1360+ templ_7745c5c3_Err = templ.RenderCSSItems(ctx, templ_7745c5c3_Buffer, templ_7745c5c3_Var70...)
1348 if templ_7745c5c3_Err != nil {1361 if templ_7745c5c3_Err != nil {
1349 return templ_7745c5c3_Err1362 return templ_7745c5c3_Err
1350 }1363 }
1351- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 118, "<div class=\"")1364+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 119, "<div class=\"")
1352 if templ_7745c5c3_Err != nil {1365 if templ_7745c5c3_Err != nil {
1353 return templ_7745c5c3_Err1366 return templ_7745c5c3_Err
1354 }1367 }
1355- var templ_7745c5c3_Var70 string1368+ var templ_7745c5c3_Var71 string
1356- templ_7745c5c3_Var70, templ_7745c5c3_Err = templ.ResolveAttributeValue(templ.CSSClasses(templ_7745c5c3_Var69).String())1369+ templ_7745c5c3_Var71, templ_7745c5c3_Err = templ.ResolveAttributeValue(templ.CSSClasses(templ_7745c5c3_Var70).String())
1357 if templ_7745c5c3_Err != nil {1370 if templ_7745c5c3_Err != nil {
1358 return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/diff.templ`, Line: 1, Col: 0}1371 return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/diff.templ`, Line: 1, Col: 0}
1359 }1372 }
1360- _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ_7745c5c3_Var70)1373+ _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ_7745c5c3_Var71)
1361 if templ_7745c5c3_Err != nil {1374 if templ_7745c5c3_Err != nil {
1362 return templ_7745c5c3_Err1375 return templ_7745c5c3_Err
1363 }1376 }
1364- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 119, "\" data-src=\"")1377+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 120, "\" data-src=\"")
1365 if templ_7745c5c3_Err != nil {1378 if templ_7745c5c3_Err != nil {
1366 return templ_7745c5c3_Err1379 return templ_7745c5c3_Err
1367 }1380 }
1368- var templ_7745c5c3_Var71 string1381+ var templ_7745c5c3_Var72 string
1369- templ_7745c5c3_Var71, templ_7745c5c3_Err = templ.ResolveAttributeValue(f.Src)1382+ templ_7745c5c3_Var72, templ_7745c5c3_Err = templ.ResolveAttributeValue(f.Src)
1370 if templ_7745c5c3_Err != nil {1383 if templ_7745c5c3_Err != nil {
1371 return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/diff.templ`, Line: 239, Col: 69}1384 return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/diff.templ`, Line: 239, Col: 69}
1372 }1385 }
1373- _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ_7745c5c3_Var71)1386+ _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ_7745c5c3_Var72)
1374 if templ_7745c5c3_Err != nil {1387 if templ_7745c5c3_Err != nil {
1375 return templ_7745c5c3_Err1388 return templ_7745c5c3_Err
1376 }1389 }
1377- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 120, "\" data-notes=\"")1390+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 121, "\" data-notes=\"")
1378 if templ_7745c5c3_Err != nil {1391 if templ_7745c5c3_Err != nil {
1379 return templ_7745c5c3_Err1392 return templ_7745c5c3_Err
1380 }1393 }
1381- var templ_7745c5c3_Var72 string1394+ var templ_7745c5c3_Var73 string
1382- templ_7745c5c3_Var72, templ_7745c5c3_Err = templ.ResolveAttributeValue(f.Comments)1395+ templ_7745c5c3_Var73, templ_7745c5c3_Err = templ.ResolveAttributeValue(f.Comments)
1383 if templ_7745c5c3_Err != nil {1396 if templ_7745c5c3_Err != nil {
1384 return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/diff.templ`, Line: 239, Col: 95}1397 return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/diff.templ`, Line: 239, Col: 95}
1385 }1398 }
1386- _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ_7745c5c3_Var72)1399+ _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ_7745c5c3_Var73)
1387 if templ_7745c5c3_Err != nil {1400 if templ_7745c5c3_Err != nil {
1388 return templ_7745c5c3_Err1401 return templ_7745c5c3_Err
1389 }1402 }
1390- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 121, "\"><a href=\"")1403+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 122, "\"><a href=\"")
1391 if templ_7745c5c3_Err != nil {1404 if templ_7745c5c3_Err != nil {
1392 return templ_7745c5c3_Err1405 return templ_7745c5c3_Err
1393 }1406 }
1394- var templ_7745c5c3_Var73 templ.SafeURL1407+ var templ_7745c5c3_Var74 templ.SafeURL
1395- templ_7745c5c3_Var73, templ_7745c5c3_Err = templ.JoinURLErrs(templ.SafeURL("?from=" + itoa(f.From) + "#" + f.ID))1408+ templ_7745c5c3_Var74, templ_7745c5c3_Err = templ.JoinURLErrs(templ.SafeURL("?from=" + itoa(f.From) + "#" + f.ID))
1396 if templ_7745c5c3_Err != nil {1409 if templ_7745c5c3_Err != nil {
1397 return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/diff.templ`, Line: 240, Col: 65}1410 return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/diff.templ`, Line: 240, Col: 65}
1398 }1411 }
1399- _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var73))1412+ _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var74))
1400 if templ_7745c5c3_Err != nil {1413 if templ_7745c5c3_Err != nil {
1401 return templ_7745c5c3_Err1414 return templ_7745c5c3_Err
1402 }1415 }
1403- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 122, "\">show this file</a></div>")1416+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 123, "\">show this file</a></div>")
1404 if templ_7745c5c3_Err != nil {1417 if templ_7745c5c3_Err != nil {
1405 return templ_7745c5c3_Err1418 return templ_7745c5c3_Err
1406 }1419 }
1407 } else if len(f.Hunks) > 0 {1420 } else if len(f.Hunks) > 0 {
1408- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 123, "<div class=\"dscroll\">")1421+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 124, "<div class=\"dscroll\">")
1409 if templ_7745c5c3_Err != nil {1422 if templ_7745c5c3_Err != nil {
1410 return templ_7745c5c3_Err1423 return templ_7745c5c3_Err
1411 }1424 }
1412 if p.ShowUnified {1425 if p.ShowUnified {
1413- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 124, "<table class=\"dt uni\" aria-label=\"")1426+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 125, "<table class=\"dt uni\" aria-label=\"")
1414 if templ_7745c5c3_Err != nil {1427 if templ_7745c5c3_Err != nil {
1415 return templ_7745c5c3_Err1428 return templ_7745c5c3_Err
1416 }1429 }
1417- var templ_7745c5c3_Var74 string1430+ var templ_7745c5c3_Var75 string
1418- templ_7745c5c3_Var74, templ_7745c5c3_Err = templ.ResolveAttributeValue(f.Path + ", unified")1431+ templ_7745c5c3_Var75, templ_7745c5c3_Err = templ.ResolveAttributeValue(f.Path + ", unified")
1419 if templ_7745c5c3_Err != nil {1432 if templ_7745c5c3_Err != nil {
1420 return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/diff.templ`, Line: 245, Col: 60}1433 return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/diff.templ`, Line: 245, Col: 60}
1421 }1434 }
1422- _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ_7745c5c3_Var74)1435+ _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ_7745c5c3_Var75)
1423 if templ_7745c5c3_Err != nil {1436 if templ_7745c5c3_Err != nil {
1424 return templ_7745c5c3_Err1437 return templ_7745c5c3_Err
1425 }1438 }
1426- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 125, "\">")1439+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 126, "\">")
1427 if templ_7745c5c3_Err != nil {1440 if templ_7745c5c3_Err != nil {
1428 return templ_7745c5c3_Err1441 return templ_7745c5c3_Err
1429 }1442 }
1430 for _, h := range f.Hunks {1443 for _, h := range f.Hunks {
1431- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 126, "<tbody>")1444+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 127, "<tbody>")
1432 if templ_7745c5c3_Err != nil {1445 if templ_7745c5c3_Err != nil {
1433 return templ_7745c5c3_Err1446 return templ_7745c5c3_Err
1434 }1447 }
@@ -1438,43 +1451,43 @@ func DiffFileView(f DiffFile, p DiffView) templ.Component {
1438 return templ_7745c5c3_Err1451 return templ_7745c5c3_Err
1439 }1452 }
1440 }1453 }
1441- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 127, "<tr class=\"hunk\"><td colspan=\"4\">")1454+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 128, "<tr class=\"hunk\"><td colspan=\"4\">")
1442 if templ_7745c5c3_Err != nil {1455 if templ_7745c5c3_Err != nil {
1443 return templ_7745c5c3_Err1456 return templ_7745c5c3_Err
1444 }1457 }
1445- var templ_7745c5c3_Var75 string1458+ var templ_7745c5c3_Var76 string
1446- templ_7745c5c3_Var75, templ_7745c5c3_Err = templ.JoinStringErrs(h.Header)1459+ templ_7745c5c3_Var76, templ_7745c5c3_Err = templ.JoinStringErrs(h.Header)
1447 if templ_7745c5c3_Err != nil {1460 if templ_7745c5c3_Err != nil {
1448 return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/diff.templ`, Line: 251, Col: 51}1461 return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/diff.templ`, Line: 251, Col: 51}
1449 }1462 }
1450- _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var75))1463+ _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var76))
1451 if templ_7745c5c3_Err != nil {1464 if templ_7745c5c3_Err != nil {
1452 return templ_7745c5c3_Err1465 return templ_7745c5c3_Err
1453 }1466 }
1454- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 128, "</td></tr>")1467+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 129, "</td></tr>")
1455 if templ_7745c5c3_Err != nil {1468 if templ_7745c5c3_Err != nil {
1456 return templ_7745c5c3_Err1469 return templ_7745c5c3_Err
1457 }1470 }
1458 for _, ln := range h.Lines {1471 for _, ln := range h.Lines {
1459- var templ_7745c5c3_Var76 = []any{ln.Kind, templ.KV("sel", ln.Selected)}1472+ var templ_7745c5c3_Var77 = []any{ln.Kind, templ.KV("sel", ln.Selected)}
1460- templ_7745c5c3_Err = templ.RenderCSSItems(ctx, templ_7745c5c3_Buffer, templ_7745c5c3_Var76...)1473+ templ_7745c5c3_Err = templ.RenderCSSItems(ctx, templ_7745c5c3_Buffer, templ_7745c5c3_Var77...)
1461 if templ_7745c5c3_Err != nil {1474 if templ_7745c5c3_Err != nil {
1462 return templ_7745c5c3_Err1475 return templ_7745c5c3_Err
1463 }1476 }
1464- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 129, "<tr class=\"")1477+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 130, "<tr class=\"")
1465 if templ_7745c5c3_Err != nil {1478 if templ_7745c5c3_Err != nil {
1466 return templ_7745c5c3_Err1479 return templ_7745c5c3_Err
1467 }1480 }
1468- var templ_7745c5c3_Var77 string1481+ var templ_7745c5c3_Var78 string
1469- templ_7745c5c3_Var77, templ_7745c5c3_Err = templ.ResolveAttributeValue(templ.CSSClasses(templ_7745c5c3_Var76).String())1482+ templ_7745c5c3_Var78, templ_7745c5c3_Err = templ.ResolveAttributeValue(templ.CSSClasses(templ_7745c5c3_Var77).String())
1470 if templ_7745c5c3_Err != nil {1483 if templ_7745c5c3_Err != nil {
1471 return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/diff.templ`, Line: 1, Col: 0}1484 return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/diff.templ`, Line: 1, Col: 0}
1472 }1485 }
1473- _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ_7745c5c3_Var77)1486+ _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ_7745c5c3_Var78)
1474 if templ_7745c5c3_Err != nil {1487 if templ_7745c5c3_Err != nil {
1475 return templ_7745c5c3_Err1488 return templ_7745c5c3_Err
1476 }1489 }
1477- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 130, "\"><td class=\"ln\">")1490+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 131, "\"><td class=\"ln\">")
1478 if templ_7745c5c3_Err != nil {1491 if templ_7745c5c3_Err != nil {
1479 return templ_7745c5c3_Err1492 return templ_7745c5c3_Err
1480 }1493 }
@@ -1482,7 +1495,7 @@ func DiffFileView(f DiffFile, p DiffView) templ.Component {
1482 if templ_7745c5c3_Err != nil {1495 if templ_7745c5c3_Err != nil {
1483 return templ_7745c5c3_Err1496 return templ_7745c5c3_Err
1484 }1497 }
1485- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 131, "</td><td class=\"ln\">")1498+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 132, "</td><td class=\"ln\">")
1486 if templ_7745c5c3_Err != nil {1499 if templ_7745c5c3_Err != nil {
1487 return templ_7745c5c3_Err1500 return templ_7745c5c3_Err
1488 }1501 }
@@ -1490,20 +1503,20 @@ func DiffFileView(f DiffFile, p DiffView) templ.Component {
1490 if templ_7745c5c3_Err != nil {1503 if templ_7745c5c3_Err != nil {
1491 return templ_7745c5c3_Err1504 return templ_7745c5c3_Err
1492 }1505 }
1493- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 132, "</td><td class=\"m\">")1506+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 133, "</td><td class=\"m\">")
1494 if templ_7745c5c3_Err != nil {1507 if templ_7745c5c3_Err != nil {
1495 return templ_7745c5c3_Err1508 return templ_7745c5c3_Err
1496 }1509 }
1497- var templ_7745c5c3_Var78 string1510+ var templ_7745c5c3_Var79 string
1498- templ_7745c5c3_Var78, templ_7745c5c3_Err = templ.JoinStringErrs(ln.Mark)1511+ templ_7745c5c3_Var79, templ_7745c5c3_Err = templ.JoinStringErrs(ln.Mark)
1499 if templ_7745c5c3_Err != nil {1512 if templ_7745c5c3_Err != nil {
1500 return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/diff.templ`, Line: 256, Col: 33}1513 return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/diff.templ`, Line: 256, Col: 33}
1501 }1514 }
1502- _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var78))1515+ _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var79))
1503 if templ_7745c5c3_Err != nil {1516 if templ_7745c5c3_Err != nil {
1504 return templ_7745c5c3_Err1517 return templ_7745c5c3_Err
1505 }1518 }
1506- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 133, "</td><td class=\"tx chroma\">")1519+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 134, "</td><td class=\"tx chroma\">")
1507 if templ_7745c5c3_Err != nil {1520 if templ_7745c5c3_Err != nil {
1508 return templ_7745c5c3_Err1521 return templ_7745c5c3_Err
1509 }1522 }
@@ -1511,12 +1524,12 @@ func DiffFileView(f DiffFile, p DiffView) templ.Component {
1511 if templ_7745c5c3_Err != nil {1524 if templ_7745c5c3_Err != nil {
1512 return templ_7745c5c3_Err1525 return templ_7745c5c3_Err
1513 }1526 }
1514- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 134, "</td></tr>")1527+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 135, "</td></tr>")
1515 if templ_7745c5c3_Err != nil {1528 if templ_7745c5c3_Err != nil {
1516 return templ_7745c5c3_Err1529 return templ_7745c5c3_Err
1517 }1530 }
1518 if len(ln.Notes) > 0 || ln.Form != nil {1531 if len(ln.Notes) > 0 || ln.Form != nil {
1519- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 135, "<tr class=\"fnote\"><td colspan=\"3\"></td><td>")1532+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 136, "<tr class=\"fnote\"><td colspan=\"3\"></td><td>")
1520 if templ_7745c5c3_Err != nil {1533 if templ_7745c5c3_Err != nil {
1521 return templ_7745c5c3_Err1534 return templ_7745c5c3_Err
1522 }1535 }
@@ -1524,19 +1537,19 @@ func DiffFileView(f DiffFile, p DiffView) templ.Component {
1524 if templ_7745c5c3_Err != nil {1537 if templ_7745c5c3_Err != nil {
1525 return templ_7745c5c3_Err1538 return templ_7745c5c3_Err
1526 }1539 }
1527- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 136, "</td></tr>")1540+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 137, "</td></tr>")
1528 if templ_7745c5c3_Err != nil {1541 if templ_7745c5c3_Err != nil {
1529 return templ_7745c5c3_Err1542 return templ_7745c5c3_Err
1530 }1543 }
1531 }1544 }
1532 }1545 }
1533- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 137, "</tbody> ")1546+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 138, "</tbody> ")
1534 if templ_7745c5c3_Err != nil {1547 if templ_7745c5c3_Err != nil {
1535 return templ_7745c5c3_Err1548 return templ_7745c5c3_Err
1536 }1549 }
1537 }1550 }
1538 if f.Tail != nil {1551 if f.Tail != nil {
1539- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 138, "<tbody>")1552+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 139, "<tbody>")
1540 if templ_7745c5c3_Err != nil {1553 if templ_7745c5c3_Err != nil {
1541 return templ_7745c5c3_Err1554 return templ_7745c5c3_Err
1542 }1555 }
@@ -1544,36 +1557,36 @@ func DiffFileView(f DiffFile, p DiffView) templ.Component {
1544 if templ_7745c5c3_Err != nil {1557 if templ_7745c5c3_Err != nil {
1545 return templ_7745c5c3_Err1558 return templ_7745c5c3_Err
1546 }1559 }
1547- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 139, "</tbody>")1560+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 140, "</tbody>")
1548 if templ_7745c5c3_Err != nil {1561 if templ_7745c5c3_Err != nil {
1549 return templ_7745c5c3_Err1562 return templ_7745c5c3_Err
1550 }1563 }
1551 }1564 }
1552- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 140, "</table>")1565+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 141, "</table>")
1553 if templ_7745c5c3_Err != nil {1566 if templ_7745c5c3_Err != nil {
1554 return templ_7745c5c3_Err1567 return templ_7745c5c3_Err
1555 }1568 }
1556 }1569 }
1557 if p.ShowSplit {1570 if p.ShowSplit {
1558- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 141, "<table class=\"dt spl\" aria-label=\"")1571+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 142, "<table class=\"dt spl\" aria-label=\"")
1559 if templ_7745c5c3_Err != nil {1572 if templ_7745c5c3_Err != nil {
1560 return templ_7745c5c3_Err1573 return templ_7745c5c3_Err
1561 }1574 }
1562- var templ_7745c5c3_Var79 string1575+ var templ_7745c5c3_Var80 string
1563- templ_7745c5c3_Var79, templ_7745c5c3_Err = templ.ResolveAttributeValue(f.Path + ", split")1576+ templ_7745c5c3_Var80, templ_7745c5c3_Err = templ.ResolveAttributeValue(f.Path + ", split")
1564 if templ_7745c5c3_Err != nil {1577 if templ_7745c5c3_Err != nil {
1565 return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/diff.templ`, Line: 276, Col: 58}1578 return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/diff.templ`, Line: 276, Col: 58}
1566 }1579 }
1567- _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ_7745c5c3_Var79)1580+ _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ_7745c5c3_Var80)
1568 if templ_7745c5c3_Err != nil {1581 if templ_7745c5c3_Err != nil {
1569 return templ_7745c5c3_Err1582 return templ_7745c5c3_Err
1570 }1583 }
1571- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 142, "\"><colgroup><col class=\"c-ln\"><col class=\"c-m\"><col><col class=\"c-ln\"><col class=\"c-m\"><col></colgroup> ")1584+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 143, "\"><colgroup><col class=\"c-ln\"><col class=\"c-m\"><col><col class=\"c-ln\"><col class=\"c-m\"><col></colgroup> ")
1572 if templ_7745c5c3_Err != nil {1585 if templ_7745c5c3_Err != nil {
1573 return templ_7745c5c3_Err1586 return templ_7745c5c3_Err
1574 }1587 }
1575 for _, h := range f.Hunks {1588 for _, h := range f.Hunks {
1576- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 143, "<tbody>")1589+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 144, "<tbody>")
1577 if templ_7745c5c3_Err != nil {1590 if templ_7745c5c3_Err != nil {
1578 return templ_7745c5c3_Err1591 return templ_7745c5c3_Err
1579 }1592 }
@@ -1583,25 +1596,25 @@ func DiffFileView(f DiffFile, p DiffView) templ.Component {
1583 return templ_7745c5c3_Err1596 return templ_7745c5c3_Err
1584 }1597 }
1585 }1598 }
1586- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 144, "<tr class=\"hunk\"><td colspan=\"6\">")1599+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 145, "<tr class=\"hunk\"><td colspan=\"6\">")
1587 if templ_7745c5c3_Err != nil {1600 if templ_7745c5c3_Err != nil {
1588 return templ_7745c5c3_Err1601 return templ_7745c5c3_Err
1589 }1602 }
1590- var templ_7745c5c3_Var80 string1603+ var templ_7745c5c3_Var81 string
1591- templ_7745c5c3_Var80, templ_7745c5c3_Err = templ.JoinStringErrs(h.Header)1604+ templ_7745c5c3_Var81, templ_7745c5c3_Err = templ.JoinStringErrs(h.Header)
1592 if templ_7745c5c3_Err != nil {1605 if templ_7745c5c3_Err != nil {
1593 return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/diff.templ`, Line: 283, Col: 51}1606 return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/diff.templ`, Line: 283, Col: 51}
1594 }1607 }
1595- _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var80))1608+ _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var81))
1596 if templ_7745c5c3_Err != nil {1609 if templ_7745c5c3_Err != nil {
1597 return templ_7745c5c3_Err1610 return templ_7745c5c3_Err
1598 }1611 }
1599- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 145, "</td></tr>")1612+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 146, "</td></tr>")
1600 if templ_7745c5c3_Err != nil {1613 if templ_7745c5c3_Err != nil {
1601 return templ_7745c5c3_Err1614 return templ_7745c5c3_Err
1602 }1615 }
1603 for _, row := range h.Split {1616 for _, row := range h.Split {
1604- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 146, "<tr>")1617+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 147, "<tr>")
1605 if templ_7745c5c3_Err != nil {1618 if templ_7745c5c3_Err != nil {
1606 return templ_7745c5c3_Err1619 return templ_7745c5c3_Err
1607 }1620 }
@@ -1613,12 +1626,12 @@ func DiffFileView(f DiffFile, p DiffView) templ.Component {
1613 if templ_7745c5c3_Err != nil {1626 if templ_7745c5c3_Err != nil {
1614 return templ_7745c5c3_Err1627 return templ_7745c5c3_Err
1615 }1628 }
1616- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 147, "</tr>")1629+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 148, "</tr>")
1617 if templ_7745c5c3_Err != nil {1630 if templ_7745c5c3_Err != nil {
1618 return templ_7745c5c3_Err1631 return templ_7745c5c3_Err
1619 }1632 }
1620 if notes, form := row.Notes(), row.Form(); len(notes) > 0 || form != nil {1633 if notes, form := row.Notes(), row.Form(); len(notes) > 0 || form != nil {
1621- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 148, "<tr class=\"fnote\"><td colspan=\"6\">")1634+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 149, "<tr class=\"fnote\"><td colspan=\"6\">")
1622 if templ_7745c5c3_Err != nil {1635 if templ_7745c5c3_Err != nil {
1623 return templ_7745c5c3_Err1636 return templ_7745c5c3_Err
1624 }1637 }
@@ -1626,19 +1639,19 @@ func DiffFileView(f DiffFile, p DiffView) templ.Component {
1626 if templ_7745c5c3_Err != nil {1639 if templ_7745c5c3_Err != nil {
1627 return templ_7745c5c3_Err1640 return templ_7745c5c3_Err
1628 }1641 }
1629- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 149, "</td></tr>")1642+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 150, "</td></tr>")
1630 if templ_7745c5c3_Err != nil {1643 if templ_7745c5c3_Err != nil {
1631 return templ_7745c5c3_Err1644 return templ_7745c5c3_Err
1632 }1645 }
1633 }1646 }
1634 }1647 }
1635- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 150, "</tbody> ")1648+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 151, "</tbody> ")
1636 if templ_7745c5c3_Err != nil {1649 if templ_7745c5c3_Err != nil {
1637 return templ_7745c5c3_Err1650 return templ_7745c5c3_Err
1638 }1651 }
1639 }1652 }
1640 if f.Tail != nil {1653 if f.Tail != nil {
1641- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 151, "<tbody>")1654+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 152, "<tbody>")
1642 if templ_7745c5c3_Err != nil {1655 if templ_7745c5c3_Err != nil {
1643 return templ_7745c5c3_Err1656 return templ_7745c5c3_Err
1644 }1657 }
@@ -1646,48 +1659,48 @@ func DiffFileView(f DiffFile, p DiffView) templ.Component {
1646 if templ_7745c5c3_Err != nil {1659 if templ_7745c5c3_Err != nil {
1647 return templ_7745c5c3_Err1660 return templ_7745c5c3_Err
1648 }1661 }
1649- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 152, "</tbody>")1662+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 153, "</tbody>")
1650 if templ_7745c5c3_Err != nil {1663 if templ_7745c5c3_Err != nil {
1651 return templ_7745c5c3_Err1664 return templ_7745c5c3_Err
1652 }1665 }
1653 }1666 }
1654- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 153, "</table>")1667+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 154, "</table>")
1655 if templ_7745c5c3_Err != nil {1668 if templ_7745c5c3_Err != nil {
1656 return templ_7745c5c3_Err1669 return templ_7745c5c3_Err
1657 }1670 }
1658 }1671 }
1659- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 154, "</div>")1672+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 155, "</div>")
1660 if templ_7745c5c3_Err != nil {1673 if templ_7745c5c3_Err != nil {
1661 return templ_7745c5c3_Err1674 return templ_7745c5c3_Err
1662 }1675 }
1663 } else {1676 } else {
1664- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 155, "<p class=\"note pad\">")1677+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 156, "<p class=\"note pad\">")
1665 if templ_7745c5c3_Err != nil {1678 if templ_7745c5c3_Err != nil {
1666 return templ_7745c5c3_Err1679 return templ_7745c5c3_Err
1667 }1680 }
1668 if f.Note != "" {1681 if f.Note != "" {
1669- var templ_7745c5c3_Var81 string1682+ var templ_7745c5c3_Var82 string
1670- templ_7745c5c3_Var81, templ_7745c5c3_Err = templ.JoinStringErrs(f.Note)1683+ templ_7745c5c3_Var82, templ_7745c5c3_Err = templ.JoinStringErrs(f.Note)
1671 if templ_7745c5c3_Err != nil {1684 if templ_7745c5c3_Err != nil {
1672 return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/diff.templ`, Line: 308, Col: 13}1685 return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/diff.templ`, Line: 308, Col: 13}
1673 }1686 }
1674- _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var81))1687+ _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var82))
1675 if templ_7745c5c3_Err != nil {1688 if templ_7745c5c3_Err != nil {
1676 return templ_7745c5c3_Err1689 return templ_7745c5c3_Err
1677 }1690 }
1678 } else {1691 } else {
1679- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 156, "no textual change.")1692+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 157, "no textual change.")
1680 if templ_7745c5c3_Err != nil {1693 if templ_7745c5c3_Err != nil {
1681 return templ_7745c5c3_Err1694 return templ_7745c5c3_Err
1682 }1695 }
1683 }1696 }
1684- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 157, "</p>")1697+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 158, "</p>")
1685 if templ_7745c5c3_Err != nil {1698 if templ_7745c5c3_Err != nil {
1686 return templ_7745c5c3_Err1699 return templ_7745c5c3_Err
1687 }1700 }
1688 }1701 }
1689 if len(f.Loose) > 0 {1702 if len(f.Loose) > 0 {
1690- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 158, "<div class=\"dloose\">")1703+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 159, "<div class=\"dloose\">")
1691 if templ_7745c5c3_Err != nil {1704 if templ_7745c5c3_Err != nil {
1692 return templ_7745c5c3_Err1705 return templ_7745c5c3_Err
1693 }1706 }
@@ -1697,12 +1710,12 @@ func DiffFileView(f DiffFile, p DiffView) templ.Component {
1697 return templ_7745c5c3_Err1710 return templ_7745c5c3_Err
1698 }1711 }
1699 }1712 }
1700- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 159, "</div>")1713+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 160, "</div>")
1701 if templ_7745c5c3_Err != nil {1714 if templ_7745c5c3_Err != nil {
1702 return templ_7745c5c3_Err1715 return templ_7745c5c3_Err
1703 }1716 }
1704 }1717 }
1705- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 160, "</details>")1718+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 161, "</details>")
1706 if templ_7745c5c3_Err != nil {1719 if templ_7745c5c3_Err != nil {
1707 return templ_7745c5c3_Err1720 return templ_7745c5c3_Err
1708 }1721 }
@@ -1728,9 +1741,9 @@ func MRFiles(p MRFilesPage) templ.Component {
1728 }()1741 }()
1729 }1742 }
1730 ctx = templ.InitializeContext(ctx)1743 ctx = templ.InitializeContext(ctx)
1731- templ_7745c5c3_Var82 := templ.GetChildren(ctx)1744+ templ_7745c5c3_Var83 := templ.GetChildren(ctx)
1732- if templ_7745c5c3_Var82 == nil {1745+ if templ_7745c5c3_Var83 == nil {
1733- templ_7745c5c3_Var82 = templ.NopComponent1746+ templ_7745c5c3_Var83 = templ.NopComponent
1734 }1747 }
1735 ctx = templ.ClearChildren(ctx)1748 ctx = templ.ClearChildren(ctx)
1736 for _, f := range p.Files {1749 for _, f := range p.Files {
@@ -1761,12 +1774,12 @@ func MRFilesMoved() templ.Component {
1761 }()1774 }()
1762 }1775 }
1763 ctx = templ.InitializeContext(ctx)1776 ctx = templ.InitializeContext(ctx)
1764- templ_7745c5c3_Var83 := templ.GetChildren(ctx)1777+ templ_7745c5c3_Var84 := templ.GetChildren(ctx)
1765- if templ_7745c5c3_Var83 == nil {1778+ if templ_7745c5c3_Var84 == nil {
1766- templ_7745c5c3_Var83 = templ.NopComponent1779+ templ_7745c5c3_Var84 = templ.NopComponent
1767 }1780 }
1768 ctx = templ.ClearChildren(ctx)1781 ctx = templ.ClearChildren(ctx)
1769- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 161, "<p class=\"notice\" data-moved>this merge request changed since the page was loaded — <a href=\"\">reload</a></p>")1782+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 162, "<p class=\"notice\" data-moved>this merge request changed since the page was loaded — <a href=\"\">reload</a></p>")
1770 if templ_7745c5c3_Err != nil {1783 if templ_7745c5c3_Err != nil {
1771 return templ_7745c5c3_Err1784 return templ_7745c5c3_Err
1772 }1785 }
@@ -1793,64 +1806,64 @@ func gapRow(g DiffGap, cols int) templ.Component {
1793 }()1806 }()
1794 }1807 }
1795 ctx = templ.InitializeContext(ctx)1808 ctx = templ.InitializeContext(ctx)
1796- templ_7745c5c3_Var84 := templ.GetChildren(ctx)1809+ templ_7745c5c3_Var85 := templ.GetChildren(ctx)
1797- if templ_7745c5c3_Var84 == nil {1810+ if templ_7745c5c3_Var85 == nil {
1798- templ_7745c5c3_Var84 = templ.NopComponent1811+ templ_7745c5c3_Var85 = templ.NopComponent
1799 }1812 }
1800 ctx = templ.ClearChildren(ctx)1813 ctx = templ.ClearChildren(ctx)
1801- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 162, "<tr class=\"gap\" data-js data-gap=\"")1814+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 163, "<tr class=\"gap\" data-js data-gap=\"")
1802 if templ_7745c5c3_Err != nil {1815 if templ_7745c5c3_Err != nil {
1803 return templ_7745c5c3_Err1816 return templ_7745c5c3_Err
1804 }1817 }
1805- var templ_7745c5c3_Var85 string1818+ var templ_7745c5c3_Var86 string
1806- templ_7745c5c3_Var85, templ_7745c5c3_Err = templ.ResolveAttributeValue(g.Key)1819+ templ_7745c5c3_Var86, templ_7745c5c3_Err = templ.ResolveAttributeValue(g.Key)
1807 if templ_7745c5c3_Err != nil {1820 if templ_7745c5c3_Err != nil {
1808 return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/diff.templ`, Line: 342, Col: 41}1821 return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/diff.templ`, Line: 342, Col: 41}
1809 }1822 }
1810- _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ_7745c5c3_Var85)1823+ _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ_7745c5c3_Var86)
1811 if templ_7745c5c3_Err != nil {1824 if templ_7745c5c3_Err != nil {
1812 return templ_7745c5c3_Err1825 return templ_7745c5c3_Err
1813 }1826 }
1814- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 163, "\"><td colspan=\"")1827+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 164, "\"><td colspan=\"")
1815 if templ_7745c5c3_Err != nil {1828 if templ_7745c5c3_Err != nil {
1816 return templ_7745c5c3_Err1829 return templ_7745c5c3_Err
1817 }1830 }
1818- var templ_7745c5c3_Var86 string1831+ var templ_7745c5c3_Var87 string
1819- templ_7745c5c3_Var86, templ_7745c5c3_Err = templ.ResolveAttributeValue(itoa(cols))1832+ templ_7745c5c3_Var87, templ_7745c5c3_Err = templ.ResolveAttributeValue(itoa(cols))
1820 if templ_7745c5c3_Err != nil {1833 if templ_7745c5c3_Err != nil {
1821 return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/diff.templ`, Line: 343, Col: 26}1834 return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/diff.templ`, Line: 343, Col: 26}
1822 }1835 }
1823- _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ_7745c5c3_Var86)1836+ _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ_7745c5c3_Var87)
1824 if templ_7745c5c3_Err != nil {1837 if templ_7745c5c3_Err != nil {
1825 return templ_7745c5c3_Err1838 return templ_7745c5c3_Err
1826 }1839 }
1827- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 164, "\"><button type=\"button\" data-src=\"")1840+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 165, "\"><button type=\"button\" data-src=\"")
1828 if templ_7745c5c3_Err != nil {1841 if templ_7745c5c3_Err != nil {
1829 return templ_7745c5c3_Err1842 return templ_7745c5c3_Err
1830 }1843 }
1831- var templ_7745c5c3_Var87 string1844+ var templ_7745c5c3_Var88 string
1832- templ_7745c5c3_Var87, templ_7745c5c3_Err = templ.ResolveAttributeValue(g.Src)1845+ templ_7745c5c3_Var88, templ_7745c5c3_Err = templ.ResolveAttributeValue(g.Src)
1833 if templ_7745c5c3_Err != nil {1846 if templ_7745c5c3_Err != nil {
1834 return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/diff.templ`, Line: 344, Col: 41}1847 return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/diff.templ`, Line: 344, Col: 41}
1835 }1848 }
1836- _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ_7745c5c3_Var87)1849+ _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ_7745c5c3_Var88)
1837 if templ_7745c5c3_Err != nil {1850 if templ_7745c5c3_Err != nil {
1838 return templ_7745c5c3_Err1851 return templ_7745c5c3_Err
1839 }1852 }
1840- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 165, "\"><span aria-hidden=\"true\">⋯</span> ")1853+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 166, "\"><span aria-hidden=\"true\">⋯</span> ")
1841 if templ_7745c5c3_Err != nil {1854 if templ_7745c5c3_Err != nil {
1842 return templ_7745c5c3_Err1855 return templ_7745c5c3_Err
1843 }1856 }
1844- var templ_7745c5c3_Var88 string1857+ var templ_7745c5c3_Var89 string
1845- templ_7745c5c3_Var88, templ_7745c5c3_Err = templ.JoinStringErrs(g.Label())1858+ templ_7745c5c3_Var89, templ_7745c5c3_Err = templ.JoinStringErrs(g.Label())
1846 if templ_7745c5c3_Err != nil {1859 if templ_7745c5c3_Err != nil {
1847 return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/diff.templ`, Line: 345, Col: 51}1860 return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/diff.templ`, Line: 345, Col: 51}
1848 }1861 }
1849- _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var88))1862+ _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var89))
1850 if templ_7745c5c3_Err != nil {1863 if templ_7745c5c3_Err != nil {
1851 return templ_7745c5c3_Err1864 return templ_7745c5c3_Err
1852 }1865 }
1853- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 166, "</button></td></tr>")1866+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 167, "</button></td></tr>")
1854 if templ_7745c5c3_Err != nil {1867 if templ_7745c5c3_Err != nil {
1855 return templ_7745c5c3_Err1868 return templ_7745c5c3_Err
1856 }1869 }
@@ -1876,56 +1889,56 @@ func DiffContext(c ContextRows) templ.Component {
1876 }()1889 }()
1877 }1890 }
1878 ctx = templ.InitializeContext(ctx)1891 ctx = templ.InitializeContext(ctx)
1879- templ_7745c5c3_Var89 := templ.GetChildren(ctx)1892+ templ_7745c5c3_Var90 := templ.GetChildren(ctx)
1880- if templ_7745c5c3_Var89 == nil {1893+ if templ_7745c5c3_Var90 == nil {
1881- templ_7745c5c3_Var89 = templ.NopComponent1894+ templ_7745c5c3_Var90 = templ.NopComponent
1882 }1895 }
1883 ctx = templ.ClearChildren(ctx)1896 ctx = templ.ClearChildren(ctx)
1884- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 167, "<table><tbody data-for=\"uni\">")1897+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 168, "<table><tbody data-for=\"uni\">")
1885 if templ_7745c5c3_Err != nil {1898 if templ_7745c5c3_Err != nil {
1886 return templ_7745c5c3_Err1899 return templ_7745c5c3_Err
1887 }1900 }
1888 for _, ln := range c.Lines {1901 for _, ln := range c.Lines {
1889- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 168, "<tr class=\"ctx\"><td class=\"ln\">")1902+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 169, "<tr class=\"ctx\"><td class=\"ln\">")
1890 if templ_7745c5c3_Err != nil {1903 if templ_7745c5c3_Err != nil {
1891 return templ_7745c5c3_Err1904 return templ_7745c5c3_Err
1892 }1905 }
1893- var templ_7745c5c3_Var90 string1906+ var templ_7745c5c3_Var91 string
1894- templ_7745c5c3_Var90, templ_7745c5c3_Err = templ.JoinStringErrs(ln.Old)1907+ templ_7745c5c3_Var91, templ_7745c5c3_Err = templ.JoinStringErrs(ln.Old)
1895 if templ_7745c5c3_Err != nil {1908 if templ_7745c5c3_Err != nil {
1896 return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/diff.templ`, Line: 358, Col: 28}1909 return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/diff.templ`, Line: 358, Col: 28}
1897 }1910 }
1898- _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var90))1911+ _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var91))
1899 if templ_7745c5c3_Err != nil {1912 if templ_7745c5c3_Err != nil {
1900 return templ_7745c5c3_Err1913 return templ_7745c5c3_Err
1901 }1914 }
1902- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 169, "</td><td class=\"ln\">")1915+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 170, "</td><td class=\"ln\">")
1903 if templ_7745c5c3_Err != nil {1916 if templ_7745c5c3_Err != nil {
1904 return templ_7745c5c3_Err1917 return templ_7745c5c3_Err
1905 }1918 }
1906- var templ_7745c5c3_Var91 string1919+ var templ_7745c5c3_Var92 string
1907- templ_7745c5c3_Var91, templ_7745c5c3_Err = templ.JoinStringErrs(ln.New)1920+ templ_7745c5c3_Var92, templ_7745c5c3_Err = templ.JoinStringErrs(ln.New)
1908 if templ_7745c5c3_Err != nil {1921 if templ_7745c5c3_Err != nil {
1909 return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/diff.templ`, Line: 359, Col: 28}1922 return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/diff.templ`, Line: 359, Col: 28}
1910 }1923 }
1911- _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var91))1924+ _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var92))
1912 if templ_7745c5c3_Err != nil {1925 if templ_7745c5c3_Err != nil {
1913 return templ_7745c5c3_Err1926 return templ_7745c5c3_Err
1914 }1927 }
1915- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 170, "</td><td class=\"m\">")1928+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 171, "</td><td class=\"m\">")
1916 if templ_7745c5c3_Err != nil {1929 if templ_7745c5c3_Err != nil {
1917 return templ_7745c5c3_Err1930 return templ_7745c5c3_Err
1918 }1931 }
1919- var templ_7745c5c3_Var92 string1932+ var templ_7745c5c3_Var93 string
1920- templ_7745c5c3_Var92, templ_7745c5c3_Err = templ.JoinStringErrs(ln.Mark)1933+ templ_7745c5c3_Var93, templ_7745c5c3_Err = templ.JoinStringErrs(ln.Mark)
1921 if templ_7745c5c3_Err != nil {1934 if templ_7745c5c3_Err != nil {
1922 return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/diff.templ`, Line: 360, Col: 28}1935 return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/diff.templ`, Line: 360, Col: 28}
1923 }1936 }
1924- _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var92))1937+ _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var93))
1925 if templ_7745c5c3_Err != nil {1938 if templ_7745c5c3_Err != nil {
1926 return templ_7745c5c3_Err1939 return templ_7745c5c3_Err
1927 }1940 }
1928- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 171, "</td><td class=\"tx chroma\">")1941+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 172, "</td><td class=\"tx chroma\">")
1929 if templ_7745c5c3_Err != nil {1942 if templ_7745c5c3_Err != nil {
1930 return templ_7745c5c3_Err1943 return templ_7745c5c3_Err
1931 }1944 }
@@ -1933,7 +1946,7 @@ func DiffContext(c ContextRows) templ.Component {
1933 if templ_7745c5c3_Err != nil {1946 if templ_7745c5c3_Err != nil {
1934 return templ_7745c5c3_Err1947 return templ_7745c5c3_Err
1935 }1948 }
1936- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 172, "</td></tr>")1949+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 173, "</td></tr>")
1937 if templ_7745c5c3_Err != nil {1950 if templ_7745c5c3_Err != nil {
1938 return templ_7745c5c3_Err1951 return templ_7745c5c3_Err
1939 }1952 }
@@ -1944,12 +1957,12 @@ func DiffContext(c ContextRows) templ.Component {
1944 return templ_7745c5c3_Err1957 return templ_7745c5c3_Err
1945 }1958 }
1946 }1959 }
1947- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 173, "</tbody> <tbody data-for=\"spl\">")1960+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 174, "</tbody> <tbody data-for=\"spl\">")
1948 if templ_7745c5c3_Err != nil {1961 if templ_7745c5c3_Err != nil {
1949 return templ_7745c5c3_Err1962 return templ_7745c5c3_Err
1950 }1963 }
1951 for i := range c.Lines {1964 for i := range c.Lines {
1952- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 174, "<tr>")1965+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 175, "<tr>")
1953 if templ_7745c5c3_Err != nil {1966 if templ_7745c5c3_Err != nil {
1954 return templ_7745c5c3_Err1967 return templ_7745c5c3_Err
1955 }1968 }
@@ -1961,7 +1974,7 @@ func DiffContext(c ContextRows) templ.Component {
1961 if templ_7745c5c3_Err != nil {1974 if templ_7745c5c3_Err != nil {
1962 return templ_7745c5c3_Err1975 return templ_7745c5c3_Err
1963 }1976 }
1964- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 175, "</tr>")1977+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 176, "</tr>")
1965 if templ_7745c5c3_Err != nil {1978 if templ_7745c5c3_Err != nil {
1966 return templ_7745c5c3_Err1979 return templ_7745c5c3_Err
1967 }1980 }
@@ -1972,7 +1985,7 @@ func DiffContext(c ContextRows) templ.Component {
1972 return templ_7745c5c3_Err1985 return templ_7745c5c3_Err
1973 }1986 }
1974 }1987 }
1975- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 176, "</tbody></table>")1988+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 177, "</tbody></table>")
1976 if templ_7745c5c3_Err != nil {1989 if templ_7745c5c3_Err != nil {
1977 return templ_7745c5c3_Err1990 return templ_7745c5c3_Err
1978 }1991 }
@@ -1998,36 +2011,36 @@ func splitSide(ln *DiffLine, old bool) templ.Component {
1998 }()2011 }()
1999 }2012 }
2000 ctx = templ.InitializeContext(ctx)2013 ctx = templ.InitializeContext(ctx)
2001- templ_7745c5c3_Var93 := templ.GetChildren(ctx)2014+ templ_7745c5c3_Var94 := templ.GetChildren(ctx)
2002- if templ_7745c5c3_Var93 == nil {2015+ if templ_7745c5c3_Var94 == nil {
2003- templ_7745c5c3_Var93 = templ.NopComponent2016+ templ_7745c5c3_Var94 = templ.NopComponent
2004 }2017 }
2005 ctx = templ.ClearChildren(ctx)2018 ctx = templ.ClearChildren(ctx)
2006 if ln == nil {2019 if ln == nil {
2007- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 177, "<td class=\"ln none\"></td><td class=\"m none\"></td><td class=\"tx none\"></td>")2020+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 178, "<td class=\"ln none\"></td><td class=\"m none\"></td><td class=\"tx none\"></td>")
2008 if templ_7745c5c3_Err != nil {2021 if templ_7745c5c3_Err != nil {
2009 return templ_7745c5c3_Err2022 return templ_7745c5c3_Err
2010 }2023 }
2011 } else {2024 } else {
2012- var templ_7745c5c3_Var94 = []any{"ln", ln.Kind, templ.KV("sel", ln.Selected)}2025+ var templ_7745c5c3_Var95 = []any{"ln", ln.Kind, templ.KV("sel", ln.Selected)}
2013- templ_7745c5c3_Err = templ.RenderCSSItems(ctx, templ_7745c5c3_Buffer, templ_7745c5c3_Var94...)2026+ templ_7745c5c3_Err = templ.RenderCSSItems(ctx, templ_7745c5c3_Buffer, templ_7745c5c3_Var95...)
2014 if templ_7745c5c3_Err != nil {2027 if templ_7745c5c3_Err != nil {
2015 return templ_7745c5c3_Err2028 return templ_7745c5c3_Err
2016 }2029 }
2017- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 178, "<td class=\"")2030+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 179, "<td class=\"")
2018 if templ_7745c5c3_Err != nil {2031 if templ_7745c5c3_Err != nil {
2019 return templ_7745c5c3_Err2032 return templ_7745c5c3_Err
2020 }2033 }
2021- var templ_7745c5c3_Var95 string2034+ var templ_7745c5c3_Var96 string
2022- templ_7745c5c3_Var95, templ_7745c5c3_Err = templ.ResolveAttributeValue(templ.CSSClasses(templ_7745c5c3_Var94).String())2035+ templ_7745c5c3_Var96, templ_7745c5c3_Err = templ.ResolveAttributeValue(templ.CSSClasses(templ_7745c5c3_Var95).String())
2023 if templ_7745c5c3_Err != nil {2036 if templ_7745c5c3_Err != nil {
2024 return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/diff.templ`, Line: 1, Col: 0}2037 return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/diff.templ`, Line: 1, Col: 0}
2025 }2038 }
2026- _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ_7745c5c3_Var95)2039+ _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ_7745c5c3_Var96)
2027 if templ_7745c5c3_Err != nil {2040 if templ_7745c5c3_Err != nil {
2028 return templ_7745c5c3_Err2041 return templ_7745c5c3_Err
2029 }2042 }
2030- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 179, "\">")2043+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 180, "\">")
2031 if templ_7745c5c3_Err != nil {2044 if templ_7745c5c3_Err != nil {
2032 return templ_7745c5c3_Err2045 return templ_7745c5c3_Err
2033 }2046 }
@@ -2042,64 +2055,64 @@ func splitSide(ln *DiffLine, old bool) templ.Component {
2042 return templ_7745c5c3_Err2055 return templ_7745c5c3_Err
2043 }2056 }
2044 }2057 }
2045- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 180, "</td>")2058+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 181, "</td>")
2046 if templ_7745c5c3_Err != nil {2059 if templ_7745c5c3_Err != nil {
2047 return templ_7745c5c3_Err2060 return templ_7745c5c3_Err
2048 }2061 }
2049- var templ_7745c5c3_Var96 = []any{"m", ln.Kind, templ.KV("sel", ln.Selected)}2062+ var templ_7745c5c3_Var97 = []any{"m", ln.Kind, templ.KV("sel", ln.Selected)}
2050- templ_7745c5c3_Err = templ.RenderCSSItems(ctx, templ_7745c5c3_Buffer, templ_7745c5c3_Var96...)2063+ templ_7745c5c3_Err = templ.RenderCSSItems(ctx, templ_7745c5c3_Buffer, templ_7745c5c3_Var97...)
2051 if templ_7745c5c3_Err != nil {2064 if templ_7745c5c3_Err != nil {
2052 return templ_7745c5c3_Err2065 return templ_7745c5c3_Err
2053 }2066 }
2054- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 181, "<td class=\"")2067+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 182, "<td class=\"")
2055 if templ_7745c5c3_Err != nil {2068 if templ_7745c5c3_Err != nil {
2056 return templ_7745c5c3_Err2069 return templ_7745c5c3_Err
2057 }2070 }
2058- var templ_7745c5c3_Var97 string2071+ var templ_7745c5c3_Var98 string
2059- templ_7745c5c3_Var97, templ_7745c5c3_Err = templ.ResolveAttributeValue(templ.CSSClasses(templ_7745c5c3_Var96).String())2072+ templ_7745c5c3_Var98, templ_7745c5c3_Err = templ.ResolveAttributeValue(templ.CSSClasses(templ_7745c5c3_Var97).String())
2060 if templ_7745c5c3_Err != nil {2073 if templ_7745c5c3_Err != nil {
2061 return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/diff.templ`, Line: 1, Col: 0}2074 return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/diff.templ`, Line: 1, Col: 0}
2062 }2075 }
2063- _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ_7745c5c3_Var97)2076+ _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ_7745c5c3_Var98)
2064 if templ_7745c5c3_Err != nil {2077 if templ_7745c5c3_Err != nil {
2065 return templ_7745c5c3_Err2078 return templ_7745c5c3_Err
2066 }2079 }
2067- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 182, "\">")2080+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 183, "\">")
2068 if templ_7745c5c3_Err != nil {2081 if templ_7745c5c3_Err != nil {
2069 return templ_7745c5c3_Err2082 return templ_7745c5c3_Err
2070 }2083 }
2071- var templ_7745c5c3_Var98 string2084+ var templ_7745c5c3_Var99 string
2072- templ_7745c5c3_Var98, templ_7745c5c3_Err = templ.JoinStringErrs(ln.Mark)2085+ templ_7745c5c3_Var99, templ_7745c5c3_Err = templ.JoinStringErrs(ln.Mark)
2073 if templ_7745c5c3_Err != nil {2086 if templ_7745c5c3_Err != nil {
2074 return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/diff.templ`, Line: 397, Col: 68}2087 return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/diff.templ`, Line: 397, Col: 68}
2075 }2088 }
2076- _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var98))2089+ _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var99))
2077 if templ_7745c5c3_Err != nil {2090 if templ_7745c5c3_Err != nil {
2078 return templ_7745c5c3_Err2091 return templ_7745c5c3_Err
2079 }2092 }
2080- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 183, "</td>")2093+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 184, "</td>")
2081 if templ_7745c5c3_Err != nil {2094 if templ_7745c5c3_Err != nil {
2082 return templ_7745c5c3_Err2095 return templ_7745c5c3_Err
2083 }2096 }
2084- var templ_7745c5c3_Var99 = []any{"tx", "chroma", ln.Kind, templ.KV("sel", ln.Selected)}2097+ var templ_7745c5c3_Var100 = []any{"tx", "chroma", ln.Kind, templ.KV("sel", ln.Selected)}
2085- templ_7745c5c3_Err = templ.RenderCSSItems(ctx, templ_7745c5c3_Buffer, templ_7745c5c3_Var99...)2098+ templ_7745c5c3_Err = templ.RenderCSSItems(ctx, templ_7745c5c3_Buffer, templ_7745c5c3_Var100...)
2086 if templ_7745c5c3_Err != nil {2099 if templ_7745c5c3_Err != nil {
2087 return templ_7745c5c3_Err2100 return templ_7745c5c3_Err
2088 }2101 }
2089- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 184, "<td class=\"")2102+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 185, "<td class=\"")
2090 if templ_7745c5c3_Err != nil {2103 if templ_7745c5c3_Err != nil {
2091 return templ_7745c5c3_Err2104 return templ_7745c5c3_Err
2092 }2105 }
2093- var templ_7745c5c3_Var100 string2106+ var templ_7745c5c3_Var101 string
2094- templ_7745c5c3_Var100, templ_7745c5c3_Err = templ.ResolveAttributeValue(templ.CSSClasses(templ_7745c5c3_Var99).String())2107+ templ_7745c5c3_Var101, templ_7745c5c3_Err = templ.ResolveAttributeValue(templ.CSSClasses(templ_7745c5c3_Var100).String())
2095 if templ_7745c5c3_Err != nil {2108 if templ_7745c5c3_Err != nil {
2096 return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/diff.templ`, Line: 1, Col: 0}2109 return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/diff.templ`, Line: 1, Col: 0}
2097 }2110 }
2098- _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ_7745c5c3_Var100)2111+ _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ_7745c5c3_Var101)
2099 if templ_7745c5c3_Err != nil {2112 if templ_7745c5c3_Err != nil {
2100 return templ_7745c5c3_Err2113 return templ_7745c5c3_Err
2101 }2114 }
2102- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 185, "\">")2115+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 186, "\">")
2103 if templ_7745c5c3_Err != nil {2116 if templ_7745c5c3_Err != nil {
2104 return templ_7745c5c3_Err2117 return templ_7745c5c3_Err
2105 }2118 }
@@ -2107,7 +2120,7 @@ func splitSide(ln *DiffLine, old bool) templ.Component {
2107 if templ_7745c5c3_Err != nil {2120 if templ_7745c5c3_Err != nil {
2108 return templ_7745c5c3_Err2121 return templ_7745c5c3_Err
2109 }2122 }
2110- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 186, "</td>")2123+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 187, "</td>")
2111 if templ_7745c5c3_Err != nil {2124 if templ_7745c5c3_Err != nil {
2112 return templ_7745c5c3_Err2125 return templ_7745c5c3_Err
2113 }2126 }
@@ -2134,49 +2147,49 @@ func gutter(n, href string) templ.Component {
2134 }()2147 }()
2135 }2148 }
2136 ctx = templ.InitializeContext(ctx)2149 ctx = templ.InitializeContext(ctx)
2137- templ_7745c5c3_Var101 := templ.GetChildren(ctx)2150+ templ_7745c5c3_Var102 := templ.GetChildren(ctx)
2138- if templ_7745c5c3_Var101 == nil {2151+ if templ_7745c5c3_Var102 == nil {
2139- templ_7745c5c3_Var101 = templ.NopComponent2152+ templ_7745c5c3_Var102 = templ.NopComponent
2140 }2153 }
2141 ctx = templ.ClearChildren(ctx)2154 ctx = templ.ClearChildren(ctx)
2142 if href != "" {2155 if href != "" {
2143- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 187, "<a href=\"")2156+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 188, "<a href=\"")
2144 if templ_7745c5c3_Err != nil {2157 if templ_7745c5c3_Err != nil {
2145 return templ_7745c5c3_Err2158 return templ_7745c5c3_Err
2146 }2159 }
2147- var templ_7745c5c3_Var102 templ.SafeURL2160+ var templ_7745c5c3_Var103 templ.SafeURL
2148- templ_7745c5c3_Var102, templ_7745c5c3_Err = templ.JoinURLErrs(templ.SafeURL(href))2161+ templ_7745c5c3_Var103, templ_7745c5c3_Err = templ.JoinURLErrs(templ.SafeURL(href))
2149 if templ_7745c5c3_Err != nil {2162 if templ_7745c5c3_Err != nil {
2150 return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/diff.templ`, Line: 406, Col: 31}2163 return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/diff.templ`, Line: 406, Col: 31}
2151 }2164 }
2152- _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var102))2165+ _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var103))
2153 if templ_7745c5c3_Err != nil {2166 if templ_7745c5c3_Err != nil {
2154 return templ_7745c5c3_Err2167 return templ_7745c5c3_Err
2155 }2168 }
2156- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 188, "\" title=\"comment on this line\">")2169+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 189, "\" title=\"comment on this line\">")
2157 if templ_7745c5c3_Err != nil {2170 if templ_7745c5c3_Err != nil {
2158 return templ_7745c5c3_Err2171 return templ_7745c5c3_Err
2159 }2172 }
2160- var templ_7745c5c3_Var103 string2173+ var templ_7745c5c3_Var104 string
2161- templ_7745c5c3_Var103, templ_7745c5c3_Err = templ.JoinStringErrs(n)2174+ templ_7745c5c3_Var104, templ_7745c5c3_Err = templ.JoinStringErrs(n)
2162 if templ_7745c5c3_Err != nil {2175 if templ_7745c5c3_Err != nil {
2163 return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/diff.templ`, Line: 406, Col: 66}2176 return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/diff.templ`, Line: 406, Col: 66}
2164 }2177 }
2165- _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var103))2178+ _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var104))
2166 if templ_7745c5c3_Err != nil {2179 if templ_7745c5c3_Err != nil {
2167 return templ_7745c5c3_Err2180 return templ_7745c5c3_Err
2168 }2181 }
2169- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 189, "</a>")2182+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 190, "</a>")
2170 if templ_7745c5c3_Err != nil {2183 if templ_7745c5c3_Err != nil {
2171 return templ_7745c5c3_Err2184 return templ_7745c5c3_Err
2172 }2185 }
2173 } else {2186 } else {
2174- var templ_7745c5c3_Var104 string2187+ var templ_7745c5c3_Var105 string
2175- templ_7745c5c3_Var104, templ_7745c5c3_Err = templ.JoinStringErrs(n)2188+ templ_7745c5c3_Var105, templ_7745c5c3_Err = templ.JoinStringErrs(n)
2176 if templ_7745c5c3_Err != nil {2189 if templ_7745c5c3_Err != nil {
2177 return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/diff.templ`, Line: 408, Col: 5}2190 return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/diff.templ`, Line: 408, Col: 5}
2178 }2191 }
2179- _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var104))2192+ _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var105))
2180 if templ_7745c5c3_Err != nil {2193 if templ_7745c5c3_Err != nil {
2181 return templ_7745c5c3_Err2194 return templ_7745c5c3_Err
2182 }2195 }
M internal/adapters/web/static/css/50-code.css +1 -1
@@ -82,7 +82,7 @@
8282 /* the hunk headers and the hidden lines stay quiet: a faint band between
8383 the code, so that the eye keeps reading */
8484 & .hunk td, & .gap td { background: color-mix(in srgb, var(--paper-alt) 35%, var(--paper)); }
85- & .hunk td { color: color-mix(in srgb, var(--ink-mute) 70%, transparent); padding: 0 1ch; }
85+ & .hunk td { color: var(--ink-mute); padding: 0 1ch; }
8686 /* a run of hidden lines: the whole row loads them */
8787 & .gap td { padding: 0; }
8888 & .gap button {
@@ -82,7 +82,7 @@
82 /* the hunk headers and the hidden lines stay quiet: a faint band between82 /* the hunk headers and the hidden lines stay quiet: a faint band between
83 the code, so that the eye keeps reading */83 the code, so that the eye keeps reading */
84 & .hunk td, & .gap td { background: color-mix(in srgb, var(--paper-alt) 35%, var(--paper)); }84 & .hunk td, & .gap td { background: color-mix(in srgb, var(--paper-alt) 35%, var(--paper)); }
85- & .hunk td { color: color-mix(in srgb, var(--ink-mute) 70%, transparent); padding: 0 1ch; }85+ & .hunk td { color: var(--ink-mute); padding: 0 1ch; }
86 /* a run of hidden lines: the whole row loads them */86 /* a run of hidden lines: the whole row loads them */
87 & .gap td { padding: 0; }87 & .gap td { padding: 0; }
88 & .gap button {88 & .gap button {
M internal/adapters/web/static/js/ermite.js +20 -4
@@ -407,7 +407,8 @@
407407 // The loaded rows are context lines, the same on both sides.
408408 function selectLoaded(file, rows) {
409409 const m = /^(new|old):(?:(\d+)-)?(\d+):(.+)$/.exec(new URLSearchParams(location.search).get('on') || '');
410- if (!m || file.querySelector('summary .p')?.textContent !== m[4]) return;
410+ // data-file is the path comments name (the new path of a rename), as ?on=
411+ if (!m || file.dataset.file !== m[4]) return;
411412 const end = Number(m[3]);
412413 const start = m[2] ? Number(m[2]) : end;
413414 for (const r of rows) {
@@ -593,6 +594,21 @@
593594 return { toggle, apply };
594595 })();
595596
597+ // The menus of the bars (<details class="menu">: the diff view, the merge
598+ // menu): closing one hands the focus back to its button when it was inside,
599+ // so that a keyboard user keeps their place.
600+ function closeMenu(d) {
601+ const had = d.contains(document.activeElement);
602+ d.open = false;
603+ if (had) $('summary', d)?.focus();
604+ }
605+ // closeMenus closes every open menu (escape); true when one was open.
606+ function closeMenus() {
607+ const open = $$('details.menu[open]');
608+ for (const d of open) closeMenu(d);
609+ return open.length > 0;
610+ }
611+
596612 // 1. Keys.
597613 const single = { j: 'j', k: 'k', G: 'bottom', '/': 'filter', '?': 'help', b: 'refs', f: 'cmd', ':': 'cmd', y: 'permalink',
598614 s: 's', t: 't', c: 'c', r: 'r', m: 'm', i: 'i', n: 'next', h: 'left', l: 'right', d: 'split', u: 'unified', x: 'collapse', w: 'wide', e: 'expand', E: 'expandAll', Enter: 'open', Escape: 'esc',
@@ -611,7 +627,7 @@
611627 const mr = window.ermiteMR;
612628 if (e.key === 'Escape') {
613629 pending = 0;
614- if (mr?.closeMenus() || mr?.leaveFiles()) return;
630+ if (closeMenus() || mr?.leaveFiles()) return;
615631 if (typing) e.target.blur();
616632 return ermite.fire('esc');
617633 }
@@ -651,9 +667,9 @@
651667 if (!el || e.button || e.ctrlKey || e.metaKey || e.shiftKey || e.altKey) return;
652668 e.preventDefault();
653669 ermite.fire(el.dataset.fire);
654- // A choice in a menu closes it.
670+ // A choice in a menu closes it; the focus goes back to its button.
655671 const menu = el.closest('details.menu');
656- if (menu) menu.open = false;
672+ if (menu) closeMenu(menu);
657673 });
658674 // A click outside an open menu closes it.
659675 addEventListener('click', (e) => {
@@ -407,7 +407,8 @@
407 // The loaded rows are context lines, the same on both sides.407 // The loaded rows are context lines, the same on both sides.
408 function selectLoaded(file, rows) {408 function selectLoaded(file, rows) {
409 const m = /^(new|old):(?:(\d+)-)?(\d+):(.+)$/.exec(new URLSearchParams(location.search).get('on') || '');409 const m = /^(new|old):(?:(\d+)-)?(\d+):(.+)$/.exec(new URLSearchParams(location.search).get('on') || '');
410- if (!m || file.querySelector('summary .p')?.textContent !== m[4]) return;410+ // data-file is the path comments name (the new path of a rename), as ?on=
411+ if (!m || file.dataset.file !== m[4]) return;
411 const end = Number(m[3]);412 const end = Number(m[3]);
412 const start = m[2] ? Number(m[2]) : end;413 const start = m[2] ? Number(m[2]) : end;
413 for (const r of rows) {414 for (const r of rows) {
@@ -593,6 +594,21 @@
593 return { toggle, apply };594 return { toggle, apply };
594 })();595 })();
595 596
597+ // The menus of the bars (<details class="menu">: the diff view, the merge
598+ // menu): closing one hands the focus back to its button when it was inside,
599+ // so that a keyboard user keeps their place.
600+ function closeMenu(d) {
601+ const had = d.contains(document.activeElement);
602+ d.open = false;
603+ if (had) $('summary', d)?.focus();
604+ }
605+ // closeMenus closes every open menu (escape); true when one was open.
606+ function closeMenus() {
607+ const open = $$('details.menu[open]');
608+ for (const d of open) closeMenu(d);
609+ return open.length > 0;
610+ }
611+
596 // 1. Keys.612 // 1. Keys.
597 const single = { j: 'j', k: 'k', G: 'bottom', '/': 'filter', '?': 'help', b: 'refs', f: 'cmd', ':': 'cmd', y: 'permalink',613 const single = { j: 'j', k: 'k', G: 'bottom', '/': 'filter', '?': 'help', b: 'refs', f: 'cmd', ':': 'cmd', y: 'permalink',
598 s: 's', t: 't', c: 'c', r: 'r', m: 'm', i: 'i', n: 'next', h: 'left', l: 'right', d: 'split', u: 'unified', x: 'collapse', w: 'wide', e: 'expand', E: 'expandAll', Enter: 'open', Escape: 'esc',614 s: 's', t: 't', c: 'c', r: 'r', m: 'm', i: 'i', n: 'next', h: 'left', l: 'right', d: 'split', u: 'unified', x: 'collapse', w: 'wide', e: 'expand', E: 'expandAll', Enter: 'open', Escape: 'esc',
@@ -611,7 +627,7 @@
611 const mr = window.ermiteMR;627 const mr = window.ermiteMR;
612 if (e.key === 'Escape') {628 if (e.key === 'Escape') {
613 pending = 0;629 pending = 0;
614- if (mr?.closeMenus() || mr?.leaveFiles()) return;630+ if (closeMenus() || mr?.leaveFiles()) return;
615 if (typing) e.target.blur();631 if (typing) e.target.blur();
616 return ermite.fire('esc');632 return ermite.fire('esc');
617 }633 }
@@ -651,9 +667,9 @@
651 if (!el || e.button || e.ctrlKey || e.metaKey || e.shiftKey || e.altKey) return;667 if (!el || e.button || e.ctrlKey || e.metaKey || e.shiftKey || e.altKey) return;
652 e.preventDefault();668 e.preventDefault();
653 ermite.fire(el.dataset.fire);669 ermite.fire(el.dataset.fire);
654- // A choice in a menu closes it.670+ // A choice in a menu closes it; the focus goes back to its button.
655 const menu = el.closest('details.menu');671 const menu = el.closest('details.menu');
656- if (menu) menu.open = false;672+ if (menu) closeMenu(menu);
657 });673 });
658 // A click outside an open menu closes it.674 // A click outside an open menu closes it.
659 addEventListener('click', (e) => {675 addEventListener('click', (e) => {
M internal/adapters/web/static/js/mr.js +1 -7
@@ -196,12 +196,6 @@ window.ermiteMR = (() => {
196196 $('[data-default]', m)?.focus();
197197 return true;
198198 }
199- function closeMenus() {
200- const open = $$('details.menu[open]');
201- for (const d of open) d.open = false;
202- if (open.length) $('summary', open[0])?.focus();
203- return open.length > 0;
204- }
205199 // menuKey handles a key while the merge menu is open; true when it used it.
206200 function menuKey(e) {
207201 const m = menu();
@@ -313,7 +307,7 @@ window.ermiteMR = (() => {
313307 });
314308 }
315309
316- return { core, start, load, reveal, openMerge, closeMenus, menuKey, markRead, focusFiles, stepFiles, leaveFiles, foldFiles, openFile };
310+ return { core, start, load, reveal, openMerge, menuKey, markRead, focusFiles, stepFiles, leaveFiles, foldFiles, openFile };
317311 })();
318312
319313 if (document.readyState === 'loading') document.addEventListener('DOMContentLoaded', () => window.ermiteMR.start());
@@ -196,12 +196,6 @@ window.ermiteMR = (() => {
196 $('[data-default]', m)?.focus();196 $('[data-default]', m)?.focus();
197 return true;197 return true;
198 }198 }
199- function closeMenus() {
200- const open = $$('details.menu[open]');
201- for (const d of open) d.open = false;
202- if (open.length) $('summary', open[0])?.focus();
203- return open.length > 0;
204- }
205 // menuKey handles a key while the merge menu is open; true when it used it.199 // menuKey handles a key while the merge menu is open; true when it used it.
206 function menuKey(e) {200 function menuKey(e) {
207 const m = menu();201 const m = menu();
@@ -313,7 +307,7 @@ window.ermiteMR = (() => {
313 });307 });
314 }308 }
315 309
316- return { core, start, load, reveal, openMerge, closeMenus, menuKey, markRead, focusFiles, stepFiles, leaveFiles, foldFiles, openFile };310+ return { core, start, load, reveal, openMerge, menuKey, markRead, focusFiles, stepFiles, leaveFiles, foldFiles, openFile };
317 })();311 })();
318 312
319 if (document.readyState === 'loading') document.addEventListener('DOMContentLoaded', () => window.ermiteMR.start());313 if (document.readyState === 'loading') document.addEventListener('DOMContentLoaded', () => window.ermiteMR.start());
M internal/app/testdata/web/commit-big.html +1 -1
@@ -143,7 +143,7 @@
143143 </div>
144144 <p class="notice">this diff is incomplete: 1 file is too large to show. the totals above count everything; clone the repository to read the rest.</p>
145145 <div id="diffs" data-diff="unified" hx-live="this.dataset.diff = sessionStorage.getItem('diff') || this.dataset.diff">
146-<details class="dfile lnw-2" id="f1" data-file>
146+<details class="dfile lnw-2" id="f1" data-file="big.txt">
147147 <summary>
148148 <span class="st">A</span>
149149 <span class="p">big.txt</span>
@@ -143,7 +143,7 @@
143 </div>143 </div>
144 <p class="notice">this diff is incomplete: 1 file is too large to show. the totals above count everything; clone the repository to read the rest.</p>144 <p class="notice">this diff is incomplete: 1 file is too large to show. the totals above count everything; clone the repository to read the rest.</p>
145 <div id="diffs" data-diff="unified" hx-live="this.dataset.diff = sessionStorage.getItem('diff') || this.dataset.diff">145 <div id="diffs" data-diff="unified" hx-live="this.dataset.diff = sessionStorage.getItem('diff') || this.dataset.diff">
146-<details class="dfile lnw-2" id="f1" data-file>146+<details class="dfile lnw-2" id="f1" data-file="big.txt">
147 <summary>147 <summary>
148 <span class="st">A</span>148 <span class="st">A</span>
149 <span class="p">big.txt</span>149 <span class="p">big.txt</span>
M internal/app/testdata/web/commit-binary.html +1 -1
@@ -138,7 +138,7 @@
138138 </details>
139139 </div>
140140 <div id="diffs" data-diff="unified" hx-live="this.dataset.diff = sessionStorage.getItem('diff') || this.dataset.diff">
141-<details class="dfile lnw-2" id="f1" data-file>
141+<details class="dfile lnw-2" id="f1" data-file="logo.bin">
142142 <summary>
143143 <span class="st">M</span>
144144 <span class="p">logo.bin</span>
@@ -138,7 +138,7 @@
138 </details>138 </details>
139 </div>139 </div>
140 <div id="diffs" data-diff="unified" hx-live="this.dataset.diff = sessionStorage.getItem('diff') || this.dataset.diff">140 <div id="diffs" data-diff="unified" hx-live="this.dataset.diff = sessionStorage.getItem('diff') || this.dataset.diff">
141-<details class="dfile lnw-2" id="f1" data-file>141+<details class="dfile lnw-2" id="f1" data-file="logo.bin">
142 <summary>142 <summary>
143 <span class="st">M</span>143 <span class="st">M</span>
144 <span class="p">logo.bin</span>144 <span class="p">logo.bin</span>
M internal/app/testdata/web/commit-merge.html +1 -1
@@ -137,7 +137,7 @@
137137 </details>
138138 </div>
139139 <div id="diffs" data-diff="unified" hx-live="this.dataset.diff = sessionStorage.getItem('diff') || this.dataset.diff">
140-<details class="dfile lnw-2" id="f1" data-file open>
140+<details class="dfile lnw-2" id="f1" data-file="side.txt" open>
141141 <summary>
142142 <span class="st">A</span>
143143 <span class="p">side.txt</span>
@@ -137,7 +137,7 @@
137 </details>137 </details>
138 </div>138 </div>
139 <div id="diffs" data-diff="unified" hx-live="this.dataset.diff = sessionStorage.getItem('diff') || this.dataset.diff">139 <div id="diffs" data-diff="unified" hx-live="this.dataset.diff = sessionStorage.getItem('diff') || this.dataset.diff">
140-<details class="dfile lnw-2" id="f1" data-file open>140+<details class="dfile lnw-2" id="f1" data-file="side.txt" open>
141 <summary>141 <summary>
142 <span class="st">A</span>142 <span class="st">A</span>
143 <span class="p">side.txt</span>143 <span class="p">side.txt</span>
M internal/app/testdata/web/commit-modify-split.html +2 -2
@@ -144,7 +144,7 @@ And &lt;b&gt;html&lt;/b&gt; &amp; &#34;quotes&#34;.</pre>
144144 </details>
145145 </div>
146146 <div id="diffs" data-diff="split">
147-<details class="dfile lnw-2" id="f1" data-file open>
147+<details class="dfile lnw-2" id="f1" data-file="a.txt" open>
148148 <summary>
149149 <span class="st">M</span>
150150 <span class="p">a.txt</span>
@@ -284,7 +284,7 @@ And &lt;b&gt;html&lt;/b&gt; &amp; &#34;quotes&#34;.</pre>
284284 </table>
285285 </div>
286286 </details>
287-<details class="dfile lnw-2" id="f2" data-file>
287+<details class="dfile lnw-2" id="f2" data-file="run.sh">
288288 <summary>
289289 <span class="st">M</span>
290290 <span class="p">run.sh</span>
@@ -144,7 +144,7 @@ And &lt;b&gt;html&lt;/b&gt; &amp; &#34;quotes&#34;.</pre>
144 </details>144 </details>
145 </div>145 </div>
146 <div id="diffs" data-diff="split">146 <div id="diffs" data-diff="split">
147-<details class="dfile lnw-2" id="f1" data-file open>147+<details class="dfile lnw-2" id="f1" data-file="a.txt" open>
148 <summary>148 <summary>
149 <span class="st">M</span>149 <span class="st">M</span>
150 <span class="p">a.txt</span>150 <span class="p">a.txt</span>
@@ -284,7 +284,7 @@ And &lt;b&gt;html&lt;/b&gt; &amp; &#34;quotes&#34;.</pre>
284 </table>284 </table>
285 </div>285 </div>
286 </details>286 </details>
287-<details class="dfile lnw-2" id="f2" data-file>287+<details class="dfile lnw-2" id="f2" data-file="run.sh">
288 <summary>288 <summary>
289 <span class="st">M</span>289 <span class="st">M</span>
290 <span class="p">run.sh</span>290 <span class="p">run.sh</span>
M internal/app/testdata/web/commit-modify.html +2 -2
@@ -144,7 +144,7 @@ And &lt;b&gt;html&lt;/b&gt; &amp; &#34;quotes&#34;.</pre>
144144 </details>
145145 </div>
146146 <div id="diffs" data-diff="unified" hx-live="this.dataset.diff = sessionStorage.getItem('diff') || this.dataset.diff">
147-<details class="dfile lnw-2" id="f1" data-file open>
147+<details class="dfile lnw-2" id="f1" data-file="a.txt" open>
148148 <summary>
149149 <span class="st">M</span>
150150 <span class="p">a.txt</span>
@@ -284,7 +284,7 @@ And &lt;b&gt;html&lt;/b&gt; &amp; &#34;quotes&#34;.</pre>
284284 </table>
285285 </div>
286286 </details>
287-<details class="dfile lnw-2" id="f2" data-file>
287+<details class="dfile lnw-2" id="f2" data-file="run.sh">
288288 <summary>
289289 <span class="st">M</span>
290290 <span class="p">run.sh</span>
@@ -144,7 +144,7 @@ And &lt;b&gt;html&lt;/b&gt; &amp; &#34;quotes&#34;.</pre>
144 </details>144 </details>
145 </div>145 </div>
146 <div id="diffs" data-diff="unified" hx-live="this.dataset.diff = sessionStorage.getItem('diff') || this.dataset.diff">146 <div id="diffs" data-diff="unified" hx-live="this.dataset.diff = sessionStorage.getItem('diff') || this.dataset.diff">
147-<details class="dfile lnw-2" id="f1" data-file open>147+<details class="dfile lnw-2" id="f1" data-file="a.txt" open>
148 <summary>148 <summary>
149 <span class="st">M</span>149 <span class="st">M</span>
150 <span class="p">a.txt</span>150 <span class="p">a.txt</span>
@@ -284,7 +284,7 @@ And &lt;b&gt;html&lt;/b&gt; &amp; &#34;quotes&#34;.</pre>
284 </table>284 </table>
285 </div>285 </div>
286 </details>286 </details>
287-<details class="dfile lnw-2" id="f2" data-file>287+<details class="dfile lnw-2" id="f2" data-file="run.sh">
288 <summary>288 <summary>
289 <span class="st">M</span>289 <span class="st">M</span>
290 <span class="p">run.sh</span>290 <span class="p">run.sh</span>
M internal/app/testdata/web/commit-rename.html +2 -2
@@ -138,7 +138,7 @@
138138 </details>
139139 </div>
140140 <div id="diffs" data-diff="unified" hx-live="this.dataset.diff = sessionStorage.getItem('diff') || this.dataset.diff">
141-<details class="dfile lnw-2" id="f1" data-file>
141+<details class="dfile lnw-2" id="f1" data-file="docs-old.txt">
142142 <summary>
143143 <span class="st">R</span>
144144 <span class="p">old.txt → docs-old.txt</span>
@@ -148,7 +148,7 @@
148148 </summary>
149149 <p class="note pad">renamed, 100% similar</p>
150150 </details>
151-<details class="dfile lnw-2" id="f2" data-file open>
151+<details class="dfile lnw-2" id="f2" data-file="gone.txt" open>
152152 <summary>
153153 <span class="st">D</span>
154154 <span class="p">gone.txt</span>
@@ -138,7 +138,7 @@
138 </details>138 </details>
139 </div>139 </div>
140 <div id="diffs" data-diff="unified" hx-live="this.dataset.diff = sessionStorage.getItem('diff') || this.dataset.diff">140 <div id="diffs" data-diff="unified" hx-live="this.dataset.diff = sessionStorage.getItem('diff') || this.dataset.diff">
141-<details class="dfile lnw-2" id="f1" data-file>141+<details class="dfile lnw-2" id="f1" data-file="docs-old.txt">
142 <summary>142 <summary>
143 <span class="st">R</span>143 <span class="st">R</span>
144 <span class="p">old.txt → docs-old.txt</span>144 <span class="p">old.txt → docs-old.txt</span>
@@ -148,7 +148,7 @@
148 </summary>148 </summary>
149 <p class="note pad">renamed, 100% similar</p>149 <p class="note pad">renamed, 100% similar</p>
150 </details>150 </details>
151-<details class="dfile lnw-2" id="f2" data-file open>151+<details class="dfile lnw-2" id="f2" data-file="gone.txt" open>
152 <summary>152 <summary>
153 <span class="st">D</span>153 <span class="st">D</span>
154 <span class="p">gone.txt</span>154 <span class="p">gone.txt</span>
M internal/app/testdata/web/commit-root.html +5 -5
@@ -136,7 +136,7 @@
136136 </details>
137137 </div>
138138 <div id="diffs" data-diff="unified" hx-live="this.dataset.diff = sessionStorage.getItem('diff') || this.dataset.diff">
139-<details class="dfile lnw-2" id="f1" data-file open>
139+<details class="dfile lnw-2" id="f1" data-file="a.txt" open>
140140 <summary>
141141 <span class="st">A</span>
142142 <span class="p">a.txt</span>
@@ -258,7 +258,7 @@
258258 </table>
259259 </div>
260260 </details>
261-<details class="dfile lnw-2" id="f2" data-file open>
261+<details class="dfile lnw-2" id="f2" data-file="gone.txt" open>
262262 <summary>
263263 <span class="st">A</span>
264264 <span class="p">gone.txt</span>
@@ -308,7 +308,7 @@
308308 </table>
309309 </div>
310310 </details>
311-<details class="dfile lnw-2" id="f3" data-file>
311+<details class="dfile lnw-2" id="f3" data-file="logo.bin">
312312 <summary>
313313 <span class="st">A</span>
314314 <span class="p">logo.bin</span>
@@ -318,7 +318,7 @@
318318 </summary>
319319 <p class="note pad">binary file: no text diff</p>
320320 </details>
321-<details class="dfile lnw-2" id="f4" data-file open>
321+<details class="dfile lnw-2" id="f4" data-file="old.txt" open>
322322 <summary>
323323 <span class="st">A</span>
324324 <span class="p">old.txt</span>
@@ -404,7 +404,7 @@
404404 </table>
405405 </div>
406406 </details>
407-<details class="dfile lnw-2" id="f5" data-file open>
407+<details class="dfile lnw-2" id="f5" data-file="run.sh" open>
408408 <summary>
409409 <span class="st">A</span>
410410 <span class="p">run.sh</span>
@@ -136,7 +136,7 @@
136 </details>136 </details>
137 </div>137 </div>
138 <div id="diffs" data-diff="unified" hx-live="this.dataset.diff = sessionStorage.getItem('diff') || this.dataset.diff">138 <div id="diffs" data-diff="unified" hx-live="this.dataset.diff = sessionStorage.getItem('diff') || this.dataset.diff">
139-<details class="dfile lnw-2" id="f1" data-file open>139+<details class="dfile lnw-2" id="f1" data-file="a.txt" open>
140 <summary>140 <summary>
141 <span class="st">A</span>141 <span class="st">A</span>
142 <span class="p">a.txt</span>142 <span class="p">a.txt</span>
@@ -258,7 +258,7 @@
258 </table>258 </table>
259 </div>259 </div>
260 </details>260 </details>
261-<details class="dfile lnw-2" id="f2" data-file open>261+<details class="dfile lnw-2" id="f2" data-file="gone.txt" open>
262 <summary>262 <summary>
263 <span class="st">A</span>263 <span class="st">A</span>
264 <span class="p">gone.txt</span>264 <span class="p">gone.txt</span>
@@ -308,7 +308,7 @@
308 </table>308 </table>
309 </div>309 </div>
310 </details>310 </details>
311-<details class="dfile lnw-2" id="f3" data-file>311+<details class="dfile lnw-2" id="f3" data-file="logo.bin">
312 <summary>312 <summary>
313 <span class="st">A</span>313 <span class="st">A</span>
314 <span class="p">logo.bin</span>314 <span class="p">logo.bin</span>
@@ -318,7 +318,7 @@
318 </summary>318 </summary>
319 <p class="note pad">binary file: no text diff</p>319 <p class="note pad">binary file: no text diff</p>
320 </details>320 </details>
321-<details class="dfile lnw-2" id="f4" data-file open>321+<details class="dfile lnw-2" id="f4" data-file="old.txt" open>
322 <summary>322 <summary>
323 <span class="st">A</span>323 <span class="st">A</span>
324 <span class="p">old.txt</span>324 <span class="p">old.txt</span>
@@ -404,7 +404,7 @@
404 </table>404 </table>
405 </div>405 </div>
406 </details>406 </details>
407-<details class="dfile lnw-2" id="f5" data-file open>407+<details class="dfile lnw-2" id="f5" data-file="run.sh" open>
408 <summary>408 <summary>
409 <span class="st">A</span>409 <span class="st">A</span>
410 <span class="p">run.sh</span>410 <span class="p">run.sh</span>
M internal/app/testdata/web/commit-trojan.html +1 -1
@@ -140,7 +140,7 @@
140140 </div>
141141 <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>
142142 <div id="diffs" data-diff="unified" hx-live="this.dataset.diff = sessionStorage.getItem('diff') || this.dataset.diff">
143-<details class="dfile lnw-2" id="f1" data-file open>
143+<details class="dfile lnw-2" id="f1" data-file="evil.go" open>
144144 <summary>
145145 <span class="st">A</span>
146146 <span class="p">evil.go</span>
@@ -140,7 +140,7 @@
140 </div>140 </div>
141 <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>141 <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>
142 <div id="diffs" data-diff="unified" hx-live="this.dataset.diff = sessionStorage.getItem('diff') || this.dataset.diff">142 <div id="diffs" data-diff="unified" hx-live="this.dataset.diff = sessionStorage.getItem('diff') || this.dataset.diff">
143-<details class="dfile lnw-2" id="f1" data-file open>143+<details class="dfile lnw-2" id="f1" data-file="evil.go" open>
144 <summary>144 <summary>
145 <span class="st">A</span>145 <span class="st">A</span>
146 <span class="p">evil.go</span>146 <span class="p">evil.go</span>

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 45

↑↓ moveenter openesc close