detached 302b124

feat(web): announce the Shift+I shortcut on the inbox button

commit
302b124894f5046544f45426778f17d06092d41c
author
brice · · 2026-10-22 00:52 UTC
parent
0f18a24
signature
GPG VerifiedCD88F9E564E0102646FB6077A1A07C7C7C3E349D · arch-gpg Verified for the committer email
checks
4/4
2 files · +20 -19
M internal/adapters/web/shell.templ +2 -1
@@ -90,7 +90,8 @@ templ Header(l Layout) {
9090 <a
9191 class="btn inbox-btn"
9292 href={ templ.SafeURL(l.Inbox.Href) }
93- title="inbox"
93+ title="inbox (I)"
94+ aria-keyshortcuts="Shift+I"
9495 >
9596 <span class="ico i-mailbox" aria-hidden="true"></span>
9697 Inbox
@@ -90,7 +90,8 @@ templ Header(l Layout) {
90 <a90 <a
91 class="btn inbox-btn"91 class="btn inbox-btn"
92 href={ templ.SafeURL(l.Inbox.Href) }92 href={ templ.SafeURL(l.Inbox.Href) }
93- title="inbox"93+ title="inbox (I)"
94+ aria-keyshortcuts="Shift+I"
94 >95 >
95 <span class="ico i-mailbox" aria-hidden="true"></span>96 <span class="ico i-mailbox" aria-hidden="true"></span>
96 Inbox97 Inbox
M internal/adapters/web/shell_templ.go +18 -18
@@ -510,7 +510,7 @@ func Header(l Layout) templ.Component {
510510 if templ_7745c5c3_Err != nil {
511511 return templ_7745c5c3_Err
512512 }
513- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 43, "\" title=\"inbox\"><span class=\"ico i-mailbox\" aria-hidden=\"true\"></span> Inbox ")
513+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 43, "\" title=\"inbox (I)\" aria-keyshortcuts=\"Shift+I\"><span class=\"ico i-mailbox\" aria-hidden=\"true\"></span> Inbox ")
514514 if templ_7745c5c3_Err != nil {
515515 return templ_7745c5c3_Err
516516 }
@@ -522,7 +522,7 @@ func Header(l Layout) templ.Component {
522522 var templ_7745c5c3_Var29 string
523523 templ_7745c5c3_Var29, templ_7745c5c3_Err = templ.JoinStringErrs(itoa(l.Inbox.Count))
524524 if templ_7745c5c3_Err != nil {
525- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/shell.templ`, Line: 98, Col: 47}
525+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/shell.templ`, Line: 99, Col: 47}
526526 }
527527 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var29))
528528 if templ_7745c5c3_Err != nil {
@@ -556,7 +556,7 @@ func Header(l Layout) templ.Component {
556556 var templ_7745c5c3_Var30 templ.SafeURL
557557 templ_7745c5c3_Var30, templ_7745c5c3_Err = templ.JoinURLErrs(templ.SafeURL(c.Href))
558558 if templ_7745c5c3_Err != nil {
559- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/shell.templ`, Line: 109, Col: 38}
559+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/shell.templ`, Line: 110, Col: 38}
560560 }
561561 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var30))
562562 if templ_7745c5c3_Err != nil {
@@ -579,7 +579,7 @@ func Header(l Layout) templ.Component {
579579 var templ_7745c5c3_Var31 string
580580 templ_7745c5c3_Var31, templ_7745c5c3_Err = templ.JoinStringErrs(c.Label)
581581 if templ_7745c5c3_Err != nil {
582- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/shell.templ`, Line: 113, Col: 19}
582+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/shell.templ`, Line: 114, Col: 19}
583583 }
584584 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var31))
585585 if templ_7745c5c3_Err != nil {
@@ -607,7 +607,7 @@ func Header(l Layout) templ.Component {
607607 var templ_7745c5c3_Var32 string
608608 templ_7745c5c3_Var32, templ_7745c5c3_Err = templ.JoinStringErrs(c.Label)
609609 if templ_7745c5c3_Err != nil {
610- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/shell.templ`, Line: 119, Col: 19}
610+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/shell.templ`, Line: 120, Col: 19}
611611 }
612612 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var32))
613613 if templ_7745c5c3_Err != nil {
@@ -640,7 +640,7 @@ func Header(l Layout) templ.Component {
640640 var templ_7745c5c3_Var33 templ.SafeURL
641641 templ_7745c5c3_Var33, templ_7745c5c3_Err = templ.JoinURLErrs(templ.SafeURL(repoHref(l.Repo, "refs")))
642642 if templ_7745c5c3_Err != nil {
643- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/shell.templ`, Line: 130, Col: 52}
643+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/shell.templ`, Line: 131, Col: 52}
644644 }
645645 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var33))
646646 if templ_7745c5c3_Err != nil {
@@ -653,7 +653,7 @@ func Header(l Layout) templ.Component {
653653 var templ_7745c5c3_Var34 string
654654 templ_7745c5c3_Var34, templ_7745c5c3_Err = templ.JoinStringErrs(l.Ref)
655655 if templ_7745c5c3_Err != nil {
656- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/shell.templ`, Line: 136, Col: 36}
656+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/shell.templ`, Line: 137, Col: 36}
657657 }
658658 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var34))
659659 if templ_7745c5c3_Err != nil {
@@ -666,7 +666,7 @@ func Header(l Layout) templ.Component {
666666 var templ_7745c5c3_Var35 string
667667 templ_7745c5c3_Var35, templ_7745c5c3_Err = templ.JoinStringErrs(l.Short)
668668 if templ_7745c5c3_Err != nil {
669- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/shell.templ`, Line: 137, Col: 33}
669+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/shell.templ`, Line: 138, Col: 33}
670670 }
671671 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var35))
672672 if templ_7745c5c3_Err != nil {
@@ -689,7 +689,7 @@ func Header(l Layout) templ.Component {
689689 var templ_7745c5c3_Var36 string
690690 templ_7745c5c3_Var36, templ_7745c5c3_Err = templ.JoinStringErrs(l.Owner)
691691 if templ_7745c5c3_Err != nil {
692- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/shell.templ`, Line: 156, Col: 123}
692+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/shell.templ`, Line: 157, Col: 123}
693693 }
694694 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var36))
695695 if templ_7745c5c3_Err != nil {
@@ -732,7 +732,7 @@ func Header(l Layout) templ.Component {
732732 var templ_7745c5c3_Var37 templ.SafeURL
733733 templ_7745c5c3_Var37, templ_7745c5c3_Err = templ.JoinURLErrs(templ.SafeURL(s.Href))
734734 if templ_7745c5c3_Err != nil {
735- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/shell.templ`, Line: 173, Col: 36}
735+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/shell.templ`, Line: 174, Col: 36}
736736 }
737737 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var37))
738738 if templ_7745c5c3_Err != nil {
@@ -745,7 +745,7 @@ func Header(l Layout) templ.Component {
745745 var templ_7745c5c3_Var38 string
746746 templ_7745c5c3_Var38, templ_7745c5c3_Err = templ.ResolveAttributeValue(s.Key)
747747 if templ_7745c5c3_Err != nil {
748- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/shell.templ`, Line: 174, Col: 24}
748+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/shell.templ`, Line: 175, Col: 24}
749749 }
750750 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ_7745c5c3_Var38)
751751 if templ_7745c5c3_Err != nil {
@@ -758,7 +758,7 @@ func Header(l Layout) templ.Component {
758758 var templ_7745c5c3_Var39 string
759759 templ_7745c5c3_Var39, templ_7745c5c3_Err = templ.ResolveAttributeValue(s.Key)
760760 if templ_7745c5c3_Err != nil {
761- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/shell.templ`, Line: 175, Col: 33}
761+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/shell.templ`, Line: 176, Col: 33}
762762 }
763763 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ_7745c5c3_Var39)
764764 if templ_7745c5c3_Err != nil {
@@ -781,7 +781,7 @@ func Header(l Layout) templ.Component {
781781 var templ_7745c5c3_Var40 string
782782 templ_7745c5c3_Var40, templ_7745c5c3_Err = templ.JoinStringErrs(s.Label)
783783 if templ_7745c5c3_Err != nil {
784- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/shell.templ`, Line: 180, Col: 17}
784+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/shell.templ`, Line: 181, Col: 17}
785785 }
786786 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var40))
787787 if templ_7745c5c3_Err != nil {
@@ -799,7 +799,7 @@ func Header(l Layout) templ.Component {
799799 var templ_7745c5c3_Var41 string
800800 templ_7745c5c3_Var41, templ_7745c5c3_Err = templ.JoinStringErrs(s.Count)
801801 if templ_7745c5c3_Err != nil {
802- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/shell.templ`, Line: 182, Col: 38}
802+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/shell.templ`, Line: 183, Col: 38}
803803 }
804804 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var41))
805805 if templ_7745c5c3_Err != nil {
@@ -812,7 +812,7 @@ func Header(l Layout) templ.Component {
812812 var templ_7745c5c3_Var42 string
813813 templ_7745c5c3_Var42, templ_7745c5c3_Err = templ.JoinStringErrs(" open")
814814 if templ_7745c5c3_Err != nil {
815- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/shell.templ`, Line: 182, Col: 66}
815+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/shell.templ`, Line: 183, Col: 66}
816816 }
817817 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var42))
818818 if templ_7745c5c3_Err != nil {
@@ -830,7 +830,7 @@ func Header(l Layout) templ.Component {
830830 var templ_7745c5c3_Var43 string
831831 templ_7745c5c3_Var43, templ_7745c5c3_Err = templ.JoinStringErrs(s.Key)
832832 if templ_7745c5c3_Err != nil {
833- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/shell.templ`, Line: 184, Col: 39}
833+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/shell.templ`, Line: 185, Col: 39}
834834 }
835835 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var43))
836836 if templ_7745c5c3_Err != nil {
@@ -884,7 +884,7 @@ func Footer(l Layout) templ.Component {
884884 var templ_7745c5c3_Var45 string
885885 templ_7745c5c3_Var45, templ_7745c5c3_Err = templ.JoinStringErrs(l.Version)
886886 if templ_7745c5c3_Err != nil {
887- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/shell.templ`, Line: 198, Col: 26}
887+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/shell.templ`, Line: 199, Col: 26}
888888 }
889889 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var45))
890890 if templ_7745c5c3_Err != nil {
@@ -897,7 +897,7 @@ func Footer(l Layout) templ.Component {
897897 var templ_7745c5c3_Var46 templ.SafeURL
898898 templ_7745c5c3_Var46, templ_7745c5c3_Err = templ.JoinURLErrs(templ.SafeURL(l.SourceURL))
899899 if templ_7745c5c3_Err != nil {
900- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/shell.templ`, Line: 199, Col: 38}
900+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/shell.templ`, Line: 200, Col: 38}
901901 }
902902 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var46))
903903 if templ_7745c5c3_Err != nil {
@@ -510,7 +510,7 @@ func Header(l Layout) templ.Component {
510 if templ_7745c5c3_Err != nil {510 if templ_7745c5c3_Err != nil {
511 return templ_7745c5c3_Err511 return templ_7745c5c3_Err
512 }512 }
513- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 43, "\" title=\"inbox\"><span class=\"ico i-mailbox\" aria-hidden=\"true\"></span> Inbox ")513+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 43, "\" title=\"inbox (I)\" aria-keyshortcuts=\"Shift+I\"><span class=\"ico i-mailbox\" aria-hidden=\"true\"></span> Inbox ")
514 if templ_7745c5c3_Err != nil {514 if templ_7745c5c3_Err != nil {
515 return templ_7745c5c3_Err515 return templ_7745c5c3_Err
516 }516 }
@@ -522,7 +522,7 @@ func Header(l Layout) templ.Component {
522 var templ_7745c5c3_Var29 string522 var templ_7745c5c3_Var29 string
523 templ_7745c5c3_Var29, templ_7745c5c3_Err = templ.JoinStringErrs(itoa(l.Inbox.Count))523 templ_7745c5c3_Var29, templ_7745c5c3_Err = templ.JoinStringErrs(itoa(l.Inbox.Count))
524 if templ_7745c5c3_Err != nil {524 if templ_7745c5c3_Err != nil {
525- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/shell.templ`, Line: 98, Col: 47}525+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/shell.templ`, Line: 99, Col: 47}
526 }526 }
527 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var29))527 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var29))
528 if templ_7745c5c3_Err != nil {528 if templ_7745c5c3_Err != nil {
@@ -556,7 +556,7 @@ func Header(l Layout) templ.Component {
556 var templ_7745c5c3_Var30 templ.SafeURL556 var templ_7745c5c3_Var30 templ.SafeURL
557 templ_7745c5c3_Var30, templ_7745c5c3_Err = templ.JoinURLErrs(templ.SafeURL(c.Href))557 templ_7745c5c3_Var30, templ_7745c5c3_Err = templ.JoinURLErrs(templ.SafeURL(c.Href))
558 if templ_7745c5c3_Err != nil {558 if templ_7745c5c3_Err != nil {
559- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/shell.templ`, Line: 109, Col: 38}559+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/shell.templ`, Line: 110, Col: 38}
560 }560 }
561 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var30))561 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var30))
562 if templ_7745c5c3_Err != nil {562 if templ_7745c5c3_Err != nil {
@@ -579,7 +579,7 @@ func Header(l Layout) templ.Component {
579 var templ_7745c5c3_Var31 string579 var templ_7745c5c3_Var31 string
580 templ_7745c5c3_Var31, templ_7745c5c3_Err = templ.JoinStringErrs(c.Label)580 templ_7745c5c3_Var31, templ_7745c5c3_Err = templ.JoinStringErrs(c.Label)
581 if templ_7745c5c3_Err != nil {581 if templ_7745c5c3_Err != nil {
582- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/shell.templ`, Line: 113, Col: 19}582+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/shell.templ`, Line: 114, Col: 19}
583 }583 }
584 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var31))584 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var31))
585 if templ_7745c5c3_Err != nil {585 if templ_7745c5c3_Err != nil {
@@ -607,7 +607,7 @@ func Header(l Layout) templ.Component {
607 var templ_7745c5c3_Var32 string607 var templ_7745c5c3_Var32 string
608 templ_7745c5c3_Var32, templ_7745c5c3_Err = templ.JoinStringErrs(c.Label)608 templ_7745c5c3_Var32, templ_7745c5c3_Err = templ.JoinStringErrs(c.Label)
609 if templ_7745c5c3_Err != nil {609 if templ_7745c5c3_Err != nil {
610- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/shell.templ`, Line: 119, Col: 19}610+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/shell.templ`, Line: 120, Col: 19}
611 }611 }
612 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var32))612 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var32))
613 if templ_7745c5c3_Err != nil {613 if templ_7745c5c3_Err != nil {
@@ -640,7 +640,7 @@ func Header(l Layout) templ.Component {
640 var templ_7745c5c3_Var33 templ.SafeURL640 var templ_7745c5c3_Var33 templ.SafeURL
641 templ_7745c5c3_Var33, templ_7745c5c3_Err = templ.JoinURLErrs(templ.SafeURL(repoHref(l.Repo, "refs")))641 templ_7745c5c3_Var33, templ_7745c5c3_Err = templ.JoinURLErrs(templ.SafeURL(repoHref(l.Repo, "refs")))
642 if templ_7745c5c3_Err != nil {642 if templ_7745c5c3_Err != nil {
643- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/shell.templ`, Line: 130, Col: 52}643+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/shell.templ`, Line: 131, Col: 52}
644 }644 }
645 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var33))645 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var33))
646 if templ_7745c5c3_Err != nil {646 if templ_7745c5c3_Err != nil {
@@ -653,7 +653,7 @@ func Header(l Layout) templ.Component {
653 var templ_7745c5c3_Var34 string653 var templ_7745c5c3_Var34 string
654 templ_7745c5c3_Var34, templ_7745c5c3_Err = templ.JoinStringErrs(l.Ref)654 templ_7745c5c3_Var34, templ_7745c5c3_Err = templ.JoinStringErrs(l.Ref)
655 if templ_7745c5c3_Err != nil {655 if templ_7745c5c3_Err != nil {
656- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/shell.templ`, Line: 136, Col: 36}656+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/shell.templ`, Line: 137, Col: 36}
657 }657 }
658 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var34))658 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var34))
659 if templ_7745c5c3_Err != nil {659 if templ_7745c5c3_Err != nil {
@@ -666,7 +666,7 @@ func Header(l Layout) templ.Component {
666 var templ_7745c5c3_Var35 string666 var templ_7745c5c3_Var35 string
667 templ_7745c5c3_Var35, templ_7745c5c3_Err = templ.JoinStringErrs(l.Short)667 templ_7745c5c3_Var35, templ_7745c5c3_Err = templ.JoinStringErrs(l.Short)
668 if templ_7745c5c3_Err != nil {668 if templ_7745c5c3_Err != nil {
669- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/shell.templ`, Line: 137, Col: 33}669+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/shell.templ`, Line: 138, Col: 33}
670 }670 }
671 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var35))671 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var35))
672 if templ_7745c5c3_Err != nil {672 if templ_7745c5c3_Err != nil {
@@ -689,7 +689,7 @@ func Header(l Layout) templ.Component {
689 var templ_7745c5c3_Var36 string689 var templ_7745c5c3_Var36 string
690 templ_7745c5c3_Var36, templ_7745c5c3_Err = templ.JoinStringErrs(l.Owner)690 templ_7745c5c3_Var36, templ_7745c5c3_Err = templ.JoinStringErrs(l.Owner)
691 if templ_7745c5c3_Err != nil {691 if templ_7745c5c3_Err != nil {
692- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/shell.templ`, Line: 156, Col: 123}692+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/shell.templ`, Line: 157, Col: 123}
693 }693 }
694 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var36))694 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var36))
695 if templ_7745c5c3_Err != nil {695 if templ_7745c5c3_Err != nil {
@@ -732,7 +732,7 @@ func Header(l Layout) templ.Component {
732 var templ_7745c5c3_Var37 templ.SafeURL732 var templ_7745c5c3_Var37 templ.SafeURL
733 templ_7745c5c3_Var37, templ_7745c5c3_Err = templ.JoinURLErrs(templ.SafeURL(s.Href))733 templ_7745c5c3_Var37, templ_7745c5c3_Err = templ.JoinURLErrs(templ.SafeURL(s.Href))
734 if templ_7745c5c3_Err != nil {734 if templ_7745c5c3_Err != nil {
735- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/shell.templ`, Line: 173, Col: 36}735+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/shell.templ`, Line: 174, Col: 36}
736 }736 }
737 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var37))737 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var37))
738 if templ_7745c5c3_Err != nil {738 if templ_7745c5c3_Err != nil {
@@ -745,7 +745,7 @@ func Header(l Layout) templ.Component {
745 var templ_7745c5c3_Var38 string745 var templ_7745c5c3_Var38 string
746 templ_7745c5c3_Var38, templ_7745c5c3_Err = templ.ResolveAttributeValue(s.Key)746 templ_7745c5c3_Var38, templ_7745c5c3_Err = templ.ResolveAttributeValue(s.Key)
747 if templ_7745c5c3_Err != nil {747 if templ_7745c5c3_Err != nil {
748- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/shell.templ`, Line: 174, Col: 24}748+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/shell.templ`, Line: 175, Col: 24}
749 }749 }
750 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ_7745c5c3_Var38)750 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ_7745c5c3_Var38)
751 if templ_7745c5c3_Err != nil {751 if templ_7745c5c3_Err != nil {
@@ -758,7 +758,7 @@ func Header(l Layout) templ.Component {
758 var templ_7745c5c3_Var39 string758 var templ_7745c5c3_Var39 string
759 templ_7745c5c3_Var39, templ_7745c5c3_Err = templ.ResolveAttributeValue(s.Key)759 templ_7745c5c3_Var39, templ_7745c5c3_Err = templ.ResolveAttributeValue(s.Key)
760 if templ_7745c5c3_Err != nil {760 if templ_7745c5c3_Err != nil {
761- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/shell.templ`, Line: 175, Col: 33}761+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/shell.templ`, Line: 176, Col: 33}
762 }762 }
763 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ_7745c5c3_Var39)763 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ_7745c5c3_Var39)
764 if templ_7745c5c3_Err != nil {764 if templ_7745c5c3_Err != nil {
@@ -781,7 +781,7 @@ func Header(l Layout) templ.Component {
781 var templ_7745c5c3_Var40 string781 var templ_7745c5c3_Var40 string
782 templ_7745c5c3_Var40, templ_7745c5c3_Err = templ.JoinStringErrs(s.Label)782 templ_7745c5c3_Var40, templ_7745c5c3_Err = templ.JoinStringErrs(s.Label)
783 if templ_7745c5c3_Err != nil {783 if templ_7745c5c3_Err != nil {
784- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/shell.templ`, Line: 180, Col: 17}784+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/shell.templ`, Line: 181, Col: 17}
785 }785 }
786 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var40))786 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var40))
787 if templ_7745c5c3_Err != nil {787 if templ_7745c5c3_Err != nil {
@@ -799,7 +799,7 @@ func Header(l Layout) templ.Component {
799 var templ_7745c5c3_Var41 string799 var templ_7745c5c3_Var41 string
800 templ_7745c5c3_Var41, templ_7745c5c3_Err = templ.JoinStringErrs(s.Count)800 templ_7745c5c3_Var41, templ_7745c5c3_Err = templ.JoinStringErrs(s.Count)
801 if templ_7745c5c3_Err != nil {801 if templ_7745c5c3_Err != nil {
802- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/shell.templ`, Line: 182, Col: 38}802+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/shell.templ`, Line: 183, Col: 38}
803 }803 }
804 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var41))804 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var41))
805 if templ_7745c5c3_Err != nil {805 if templ_7745c5c3_Err != nil {
@@ -812,7 +812,7 @@ func Header(l Layout) templ.Component {
812 var templ_7745c5c3_Var42 string812 var templ_7745c5c3_Var42 string
813 templ_7745c5c3_Var42, templ_7745c5c3_Err = templ.JoinStringErrs(" open")813 templ_7745c5c3_Var42, templ_7745c5c3_Err = templ.JoinStringErrs(" open")
814 if templ_7745c5c3_Err != nil {814 if templ_7745c5c3_Err != nil {
815- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/shell.templ`, Line: 182, Col: 66}815+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/shell.templ`, Line: 183, Col: 66}
816 }816 }
817 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var42))817 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var42))
818 if templ_7745c5c3_Err != nil {818 if templ_7745c5c3_Err != nil {
@@ -830,7 +830,7 @@ func Header(l Layout) templ.Component {
830 var templ_7745c5c3_Var43 string830 var templ_7745c5c3_Var43 string
831 templ_7745c5c3_Var43, templ_7745c5c3_Err = templ.JoinStringErrs(s.Key)831 templ_7745c5c3_Var43, templ_7745c5c3_Err = templ.JoinStringErrs(s.Key)
832 if templ_7745c5c3_Err != nil {832 if templ_7745c5c3_Err != nil {
833- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/shell.templ`, Line: 184, Col: 39}833+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/shell.templ`, Line: 185, Col: 39}
834 }834 }
835 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var43))835 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var43))
836 if templ_7745c5c3_Err != nil {836 if templ_7745c5c3_Err != nil {
@@ -884,7 +884,7 @@ func Footer(l Layout) templ.Component {
884 var templ_7745c5c3_Var45 string884 var templ_7745c5c3_Var45 string
885 templ_7745c5c3_Var45, templ_7745c5c3_Err = templ.JoinStringErrs(l.Version)885 templ_7745c5c3_Var45, templ_7745c5c3_Err = templ.JoinStringErrs(l.Version)
886 if templ_7745c5c3_Err != nil {886 if templ_7745c5c3_Err != nil {
887- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/shell.templ`, Line: 198, Col: 26}887+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/shell.templ`, Line: 199, Col: 26}
888 }888 }
889 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var45))889 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var45))
890 if templ_7745c5c3_Err != nil {890 if templ_7745c5c3_Err != nil {
@@ -897,7 +897,7 @@ func Footer(l Layout) templ.Component {
897 var templ_7745c5c3_Var46 templ.SafeURL897 var templ_7745c5c3_Var46 templ.SafeURL
898 templ_7745c5c3_Var46, templ_7745c5c3_Err = templ.JoinURLErrs(templ.SafeURL(l.SourceURL))898 templ_7745c5c3_Var46, templ_7745c5c3_Err = templ.JoinURLErrs(templ.SafeURL(l.SourceURL))
899 if templ_7745c5c3_Err != nil {899 if templ_7745c5c3_Err != nil {
900- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/shell.templ`, Line: 199, Col: 38}900+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/shell.templ`, Line: 200, Col: 38}
901 }901 }
902 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var46))902 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var46))
903 if templ_7745c5c3_Err != nil {903 if templ_7745c5c3_Err != nil {

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