loading up the forgejo repo on tangled to test page performance
0
fork

Configure Feed

Select the types of activity you want to include in your feed.

Improve accessibility when (re-)viewing files (#24817)

Visually, nothing should have changed.
Changes include
- Convert most `<a [no href]>` to `<button>` when (re-)viewing files:
- `<a [no href]>` are, by HTML definition, not a link and hence cannot
be focused
- `<a class="ui button">` can now be clicked (again?) using
<kbd>Enter</kbd>
- Previously, the installed keypress handler on `.ui.button` elements
disabled it for links somehow
- The `(un)escape file`, the `expand section` and the `expand/collapse
file` buttons can now be focused (and subsequently clicked using only
the keyboard)
- You can now press <kbd>Space</kbd> on a focused `View file` checkbox
to mark the file as viewed.
- previously, this was impossible as this checkbox listened on the wrong
event listener

The `add code comment` button has been left inaccessible for now as it
requires quite a bit of extra logic so that it is unhidden when it is
focused (you can otherwise focus it without seeing it as you are not
hovering on the corresponding line).

---------

Co-authored-by: silverwind <me@silverwind.io>

authored by

delvh
silverwind
and committed by
GitHub
e95b42e1 c59a0572

+105 -92
+3 -3
templates/repo/blame.tmpl
··· 11 11 {{end}} 12 12 <a class="ui tiny button" href="{{.RepoLink}}/src/{{.BranchNameSubURL}}/{{.TreePath | PathEscapeSegments}}">{{.locale.Tr "repo.normal_view"}}</a> 13 13 <a class="ui tiny button" href="{{.RepoLink}}/commits/{{.BranchNameSubURL}}/{{.TreePath | PathEscapeSegments}}">{{.locale.Tr "repo.file_history"}}</a> 14 - <a class="ui tiny button unescape-button">{{.locale.Tr "repo.unescape_control_characters"}}</a> 15 - <a class="ui tiny button escape-button gt-hidden">{{.locale.Tr "repo.escape_control_characters"}}</a> 14 + <button class="ui tiny button unescape-button">{{.locale.Tr "repo.unescape_control_characters"}}</button> 15 + <button class="ui tiny button escape-button gt-hidden">{{.locale.Tr "repo.escape_control_characters"}}</button> 16 16 </div> 17 17 </div> 18 18 </h4> ··· 52 52 {{if $.EscapeStatus.Escaped}} 53 53 <td class="lines-escape"> 54 54 {{if $row.EscapeStatus.Escaped}} 55 - <a href="" class="toggle-escape-button" title="{{template "repo/diff/escape_title" dict "diff" $row "locale" $.locale}}"></a> 55 + <button class="toggle-escape-button button button-ghost" title="{{template "repo/diff/escape_title" dict "diff" $row "locale" $.locale}}"></button> 56 56 {{end}} 57 57 </td> 58 58 {{end}}
+28 -24
templates/repo/diff/blob_excerpt.tmpl
··· 3 3 <tr class="{{.GetHTMLDiffLineType}}-code nl-{{$k}} ol-{{$k}}"> 4 4 {{if eq .GetType 4}} 5 5 <td class="lines-num lines-num-old" data-line-num="{{if $line.LeftIdx}}{{$line.LeftIdx}}{{end}}"> 6 + <div class="gt-df"> 6 7 {{if or (eq $line.GetExpandDirection 3) (eq $line.GetExpandDirection 5)}} 7 - <a role="button" class="blob-excerpt" data-url="{{$.RepoLink}}/blob_excerpt/{{PathEscape $.AfterCommitID}}" data-query="{{$line.GetBlobExcerptQuery}}&style=split&direction=down&wiki={{$.PageIsWiki}}" data-anchor="{{$.Anchor}}"> 8 + <button class="code-expander-button" data-url="{{$.RepoLink}}/blob_excerpt/{{PathEscape $.AfterCommitID}}" data-query="{{$line.GetBlobExcerptQuery}}&style=split&direction=down&wiki={{$.PageIsWiki}}" data-anchor="{{$.Anchor}}"> 8 9 {{svg "octicon-fold-down"}} 9 - </a> 10 + </button> 10 11 {{end}} 11 12 {{if or (eq $line.GetExpandDirection 3) (eq $line.GetExpandDirection 4)}} 12 - <a role="button" class="blob-excerpt" data-url="{{$.RepoLink}}/blob_excerpt/{{PathEscape $.AfterCommitID}}" data-query="{{$line.GetBlobExcerptQuery}}&style=split&direction=up&wiki={{$.PageIsWiki}}" data-anchor="{{$.Anchor}}"> 13 + <button class="code-expander-button" data-url="{{$.RepoLink}}/blob_excerpt/{{PathEscape $.AfterCommitID}}" data-query="{{$line.GetBlobExcerptQuery}}&style=split&direction=up&wiki={{$.PageIsWiki}}" data-anchor="{{$.Anchor}}"> 13 14 {{svg "octicon-fold-up"}} 14 - </a> 15 + </button> 15 16 {{end}} 16 17 {{if eq $line.GetExpandDirection 2}} 17 - <a role="button" class="blob-excerpt" data-url="{{$.RepoLink}}/blob_excerpt/{{PathEscape $.AfterCommitID}}" data-query="{{$line.GetBlobExcerptQuery}}&style=split&direction=&wiki={{$.PageIsWiki}}" data-anchor="{{$.Anchor}}"> 18 + <button class="code-expander-button" data-url="{{$.RepoLink}}/blob_excerpt/{{PathEscape $.AfterCommitID}}" data-query="{{$line.GetBlobExcerptQuery}}&style=split&direction=&wiki={{$.PageIsWiki}}" data-anchor="{{$.Anchor}}"> 18 19 {{svg "octicon-fold"}} 19 - </a> 20 + </button> 20 21 {{end}} 22 + </div> 21 23 </td> 22 24 <td colspan="7" class="lines-code lines-code-old ">{{$inlineDiff := $.section.GetComputedInlineDiffFor $line $.locale}}{{/* 23 25 */}}{{template "repo/diff/section_code" dict "diff" $inlineDiff "locale" $.locale}}</td> 24 26 {{else}} 25 27 {{$inlineDiff := $.section.GetComputedInlineDiffFor $line $.locale}} 26 28 <td class="lines-num lines-num-old" data-line-num="{{if $line.LeftIdx}}{{$line.LeftIdx}}{{end}}"><span rel="{{if $line.LeftIdx}}diff-{{$.FileNameHash}}L{{$line.LeftIdx}}{{end}}"></span></td> 27 - <td class="blob-excerpt lines-escape lines-escape-old">{{if and $line.LeftIdx $inlineDiff.EscapeStatus.Escaped}}<a href="" class="toggle-escape-button" title="{{template "repo/diff/escape_title" dict "diff" $inlineDiff "locale" $.locale}}"></a>{{end}}</td> 29 + <td class="blob-excerpt lines-escape lines-escape-old">{{if and $line.LeftIdx $inlineDiff.EscapeStatus.Escaped}}<button class="toggle-escape-button button button-ghost" title="{{template "repo/diff/escape_title" dict "diff" $inlineDiff "locale" $.locale}}"></button>{{end}}</td> 28 30 <td class="blob-excerpt lines-type-marker lines-type-marker-old">{{if $line.LeftIdx}}<span class="gt-mono" data-type-marker=""></span>{{end}}</td> 29 31 <td class="blob-excerpt lines-code lines-code-old">{{/* 30 32 */}}{{if $line.LeftIdx}}{{template "repo/diff/section_code" dict "diff" $inlineDiff "locale" $.locale}}{{else}}{{/* ··· 32 34 */}}{{end}}{{/* 33 35 */}}</td> 34 36 <td class="lines-num lines-num-new" data-line-num="{{if $line.RightIdx}}{{$line.RightIdx}}{{end}}"><span rel="{{if $line.RightIdx}}diff-{{$.FileNameHash}}R{{$line.RightIdx}}{{end}}"></span></td> 35 - <td class="blob-excerpt lines-escape lines-escape-new">{{if and $line.RightIdx $inlineDiff.EscapeStatus.Escaped}}<a href="" class="toggle-escape-button" title="{{template "repo/diff/escape_title" dict "diff" $inlineDiff "locale" $.locale}}"></a>{{end}}</td> 37 + <td class="blob-excerpt lines-escape lines-escape-new">{{if and $line.RightIdx $inlineDiff.EscapeStatus.Escaped}}<button class="toggle-escape-button button button-ghost" title="{{template "repo/diff/escape_title" dict "diff" $inlineDiff "locale" $.locale}}"></button>{{end}}</td> 36 38 <td class="blob-excerpt lines-type-marker lines-type-marker-new">{{if $line.RightIdx}}<span class="gt-mono" data-type-marker=""></span>{{end}}</td> 37 39 <td class="blob-excerpt lines-code lines-code-new">{{/* 38 40 */}}{{if $line.RightIdx}}{{template "repo/diff/section_code" dict "diff" $inlineDiff "locale" $.locale}}{{else}}{{/* ··· 47 49 <tr class="{{.GetHTMLDiffLineType}}-code nl-{{$k}} ol-{{$k}}"> 48 50 {{if eq .GetType 4}} 49 51 <td colspan="2" class="lines-num"> 50 - {{if or (eq $line.GetExpandDirection 3) (eq $line.GetExpandDirection 5)}} 51 - <a role="button" class="blob-excerpt" data-url="{{$.RepoLink}}/blob_excerpt/{{PathEscape $.AfterCommitID}}" data-query="{{$line.GetBlobExcerptQuery}}&style=unified&direction=down&wiki={{$.PageIsWiki}}" data-anchor="{{$.Anchor}}"> 52 - {{svg "octicon-fold-down"}} 53 - </a> 54 - {{end}} 55 - {{if or (eq $line.GetExpandDirection 3) (eq $line.GetExpandDirection 4)}} 56 - <a role="button" class="blob-excerpt" data-url="{{$.RepoLink}}/blob_excerpt/{{PathEscape $.AfterCommitID}}" data-query="{{$line.GetBlobExcerptQuery}}&style=unified&direction=up&wiki={{$.PageIsWiki}}" data-anchor="{{$.Anchor}}"> 57 - {{svg "octicon-fold-up"}} 58 - </a> 59 - {{end}} 60 - {{if eq $line.GetExpandDirection 2}} 61 - <a role="button" class="blob-excerpt" data-url="{{$.RepoLink}}/blob_excerpt/{{PathEscape $.AfterCommitID}}" data-query="{{$line.GetBlobExcerptQuery}}&style=unified&direction=&wiki={{$.PageIsWiki}}" data-anchor="{{$.Anchor}}"> 62 - {{svg "octicon-fold"}} 63 - </a> 64 - {{end}} 52 + <div class="gt-df"> 53 + {{if or (eq $line.GetExpandDirection 3) (eq $line.GetExpandDirection 5)}} 54 + <button class="code-expander-button" data-url="{{$.RepoLink}}/blob_excerpt/{{PathEscape $.AfterCommitID}}" data-query="{{$line.GetBlobExcerptQuery}}&style=unified&direction=down&wiki={{$.PageIsWiki}}" data-anchor="{{$.Anchor}}"> 55 + {{svg "octicon-fold-down"}} 56 + </button> 57 + {{end}} 58 + {{if or (eq $line.GetExpandDirection 3) (eq $line.GetExpandDirection 4)}} 59 + <button class="code-expander-button" data-url="{{$.RepoLink}}/blob_excerpt/{{PathEscape $.AfterCommitID}}" data-query="{{$line.GetBlobExcerptQuery}}&style=unified&direction=up&wiki={{$.PageIsWiki}}" data-anchor="{{$.Anchor}}"> 60 + {{svg "octicon-fold-up"}} 61 + </button> 62 + {{end}} 63 + {{if eq $line.GetExpandDirection 2}} 64 + <button class="code-expander-button" data-url="{{$.RepoLink}}/blob_excerpt/{{PathEscape $.AfterCommitID}}" data-query="{{$line.GetBlobExcerptQuery}}&style=unified&direction=&wiki={{$.PageIsWiki}}" data-anchor="{{$.Anchor}}"> 65 + {{svg "octicon-fold"}} 66 + </button> 67 + {{end}} 68 + </div> 65 69 </td> 66 70 {{else}} 67 71 <td class="lines-num lines-num-old" data-line-num="{{if $line.LeftIdx}}{{$line.LeftIdx}}{{end}}"><span rel="{{if $line.LeftIdx}}diff-{{$.FileNameHash}}L{{$line.LeftIdx}}{{end}}"></span></td> 68 72 <td class="lines-num lines-num-new" data-line-num="{{if $line.RightIdx}}{{$line.RightIdx}}{{end}}"><span rel="{{if $line.RightIdx}}diff-{{$.FileNameHash}}R{{$line.RightIdx}}{{end}}"></span></td> 69 73 {{end}} 70 74 {{$inlineDiff := $.section.GetComputedInlineDiffFor $line $.locale}} 71 - <td class="blob-excerpt lines-escape">{{if $inlineDiff.EscapeStatus.Escaped}}<a href="" class="toggle-escape-button" title="{{template "repo/diff/escape_title" dict "diff" $inlineDiff "locale" $.locale}}"></a>{{end}}</td> 75 + <td class="blob-excerpt lines-escape">{{if $inlineDiff.EscapeStatus.Escaped}}<button class="toggle-escape-button button button-ghost" title="{{template "repo/diff/escape_title" dict "diff" $inlineDiff "locale" $.locale}}"></button>{{end}}</td> 72 76 <td class="blob-excerpt lines-type-marker"><span class="gt-mono" data-type-marker="{{$line.GetLineTypeMarker}}"></span></td> 73 77 <td class="blob-excerpt lines-code{{if (not $line.RightIdx)}} lines-code-old{{end}}"><code {{if $inlineDiff.EscapeStatus.Escaped}}class="code-inner has-escaped" title="{{template "repo/diff/escape_title" dict "diff" $inlineDiff "locale" $.locale}}"{{else}}class="code-inner"{{end}}>{{$inlineDiff.Content}}</code></td> 74 78 </tr>
+4 -4
templates/repo/diff/box.tmpl
··· 90 90 <div class="diff-file-box diff-box file-content {{TabSizeClass $.Editorconfig $file.Name}} gt-mt-3" id="diff-{{$file.NameHash}}" data-old-filename="{{$file.OldName}}" data-new-filename="{{$file.Name}}" {{if or ($file.ShouldBeHidden) (not $isExpandable)}}data-folded="true"{{end}}> 91 91 <h4 class="diff-file-header sticky-2nd-row ui top attached normal header gt-df gt-ac gt-sb"> 92 92 <div class="diff-file-name gt-df gt-ac gt-mr-3"> 93 - <a role="button" class="fold-file muted gt-mr-2" {{if not $isExpandable}}style="visibility: hidden"{{end}}> 93 + <button class="fold-file ui button button-ghost gt-p-0 gt-mr-3{{if not $isExpandable}} gt-invisible{{end}}"> 94 94 {{if $file.ShouldBeHidden}} 95 95 {{svg "octicon-chevron-right" 18}} 96 96 {{else}} 97 97 {{svg "octicon-chevron-down" 18}} 98 98 {{end}} 99 - </a> 99 + </button> 100 100 <div class="gt-bold gt-df gt-ac gt-mono"> 101 101 {{if $file.IsBin}} 102 102 <span class="gt-ml-1 gt-mr-3"> ··· 125 125 <span class="ui basic label">{{$.locale.Tr "repo.diff.protected"}}</span> 126 126 {{end}} 127 127 {{if not (or $file.IsIncomplete $file.IsBin $file.IsSubmodule)}} 128 - <a class="ui basic tiny button unescape-button">{{$.locale.Tr "repo.unescape_control_characters"}}</a> 129 - <a class="ui basic tiny button escape-button gt-hidden">{{$.locale.Tr "repo.escape_control_characters"}}</a> 128 + <button class="ui basic tiny button unescape-button">{{$.locale.Tr "repo.unescape_control_characters"}}</button> 129 + <button class="ui basic tiny button escape-button gt-hidden">{{$.locale.Tr "repo.escape_control_characters"}}</button> 130 130 {{end}} 131 131 {{if and (not $file.IsSubmodule) (not $.PageIsWiki)}} 132 132 {{if $file.IsDeleted}}
+13 -11
templates/repo/diff/section_split.tmpl
··· 16 16 <tr class="{{.GetHTMLDiffLineType}}-code nl-{{$k}} ol-{{$k}}" data-line-type="{{.GetHTMLDiffLineType}}"> 17 17 {{if eq .GetType 4}} 18 18 <td class="lines-num lines-num-old"> 19 + <div class="gt-df"> 19 20 {{if or (eq $line.GetExpandDirection 3) (eq $line.GetExpandDirection 5)}} 20 - <a role="button" class="blob-excerpt" data-url="{{$.root.RepoLink}}/blob_excerpt/{{PathEscape $.root.AfterCommitID}}" data-query="{{$line.GetBlobExcerptQuery}}&style=split&direction=down&wiki={{$.root.PageIsWiki}}" data-anchor="diff-{{$file.NameHash}}K{{$line.SectionInfo.RightIdx}}"> 21 + <button class="code-expander-button" data-url="{{$.root.RepoLink}}/blob_excerpt/{{PathEscape $.root.AfterCommitID}}" data-query="{{$line.GetBlobExcerptQuery}}&style=split&direction=down&wiki={{$.root.PageIsWiki}}" data-anchor="diff-{{$file.NameHash}}K{{$line.SectionInfo.RightIdx}}"> 21 22 {{svg "octicon-fold-down"}} 22 - </a> 23 + </button> 23 24 {{end}} 24 25 {{if or (eq $line.GetExpandDirection 3) (eq $line.GetExpandDirection 4)}} 25 - <a role="button" class="blob-excerpt" data-url="{{$.root.RepoLink}}/blob_excerpt/{{PathEscape $.root.AfterCommitID}}" data-query="{{$line.GetBlobExcerptQuery}}&style=split&direction=up&wiki={{$.root.PageIsWiki}}" data-anchor="diff-{{$file.NameHash}}K{{$line.SectionInfo.RightIdx}}"> 26 + <button class="code-expander-button" data-url="{{$.root.RepoLink}}/blob_excerpt/{{PathEscape $.root.AfterCommitID}}" data-query="{{$line.GetBlobExcerptQuery}}&style=split&direction=up&wiki={{$.root.PageIsWiki}}" data-anchor="diff-{{$file.NameHash}}K{{$line.SectionInfo.RightIdx}}"> 26 27 {{svg "octicon-fold-up"}} 27 - </a> 28 + </button> 28 29 {{end}} 29 30 {{if eq $line.GetExpandDirection 2}} 30 - <a role="button" class="blob-excerpt" data-url="{{$.root.RepoLink}}/blob_excerpt/{{PathEscape $.root.AfterCommitID}}" data-query="{{$line.GetBlobExcerptQuery}}&style=split&direction=&wiki={{$.root.PageIsWiki}}" data-anchor="diff-{{$file.NameHash}}K{{$line.SectionInfo.RightIdx}}"> 31 + <button class="code-expander-button" data-url="{{$.root.RepoLink}}/blob_excerpt/{{PathEscape $.root.AfterCommitID}}" data-query="{{$line.GetBlobExcerptQuery}}&style=split&direction=&wiki={{$.root.PageIsWiki}}" data-anchor="diff-{{$file.NameHash}}K{{$line.SectionInfo.RightIdx}}"> 31 32 {{svg "octicon-fold"}} 32 - </a> 33 + </button> 33 34 {{end}} 35 + </div> 34 36 </td>{{$inlineDiff := $section.GetComputedInlineDiffFor $line $.root.locale}} 35 - <td class="lines-escape lines-escape-old">{{if $inlineDiff.EscapeStatus.Escaped}}<a href="" class="toggle-escape-button" title="{{template "repo/diff/escape_title" dict "diff" $inlineDiff "locale" $.root.locale}}"></a>{{end}}</td> 37 + <td class="lines-escape lines-escape-old">{{if $inlineDiff.EscapeStatus.Escaped}}<button class="toggle-escape-button button button-ghost" title="{{template "repo/diff/escape_title" dict "diff" $inlineDiff "locale" $.root.locale}}"></button>{{end}}</td> 36 38 <td colspan="6" class="lines-code lines-code-old ">{{/* 37 39 */}}{{template "repo/diff/section_code" dict "diff" $inlineDiff "locale" $.root.locale}}{{/* 38 40 */}}</td> ··· 41 43 {{- $leftDiff := ""}}{{if $line.LeftIdx}}{{$leftDiff = $section.GetComputedInlineDiffFor $line $.root.locale}}{{end}} 42 44 {{- $rightDiff := ""}}{{if $match.RightIdx}}{{$rightDiff = $section.GetComputedInlineDiffFor $match $.root.locale}}{{end}} 43 45 <td class="lines-num lines-num-old del-code" data-line-num="{{$line.LeftIdx}}"><span rel="diff-{{$file.NameHash}}L{{$line.LeftIdx}}"></span></td> 44 - <td class="lines-escape del-code lines-escape-old">{{if $line.LeftIdx}}{{if $leftDiff.EscapeStatus.Escaped}}<a href="" class="toggle-escape-button" title="{{template "repo/diff/escape_title" dict "diff" $leftDiff "locale" $.root.locale}}"></a>{{end}}{{end}}</td> 46 + <td class="lines-escape del-code lines-escape-old">{{if $line.LeftIdx}}{{if $leftDiff.EscapeStatus.Escaped}}<button class="toggle-escape-button button button-ghost" title="{{template "repo/diff/escape_title" dict "diff" $leftDiff "locale" $.root.locale}}"></a>{{end}}{{end}}</td> 45 47 <td class="lines-type-marker lines-type-marker-old del-code"><span class="gt-mono" data-type-marker="{{$line.GetLineTypeMarker}}"></span></td> 46 48 <td class="lines-code lines-code-old del-code">{{/* 47 49 */}}{{if and $.root.SignedUserID $.root.PageIsPullFiles}}{{/* ··· 56 58 */}}{{end}}{{/* 57 59 */}}</td> 58 60 <td class="lines-num lines-num-new add-code" data-line-num="{{if $match.RightIdx}}{{$match.RightIdx}}{{end}}"><span rel="{{if $match.RightIdx}}diff-{{$file.NameHash}}R{{$match.RightIdx}}{{end}}"></span></td> 59 - <td class="lines-escape add-code lines-escape-new">{{if $match.RightIdx}}{{if $rightDiff.EscapeStatus.Escaped}}<a href="" class="toggle-escape-button" title="{{template "repo/diff/escape_title" dict "diff" $rightDiff "locale" $.root.locale}}"></a>{{end}}{{end}}</td> 61 + <td class="lines-escape add-code lines-escape-new">{{if $match.RightIdx}}{{if $rightDiff.EscapeStatus.Escaped}}<button class="toggle-escape-button button button-ghost" title="{{template "repo/diff/escape_title" dict "diff" $rightDiff "locale" $.root.locale}}"></button>{{end}}{{end}}</td> 60 62 <td class="lines-type-marker lines-type-marker-new add-code">{{if $match.RightIdx}}<span class="gt-mono" data-type-marker="{{$match.GetLineTypeMarker}}"></span>{{end}}</td> 61 63 <td class="lines-code lines-code-new add-code">{{/* 62 64 */}}{{if and $.root.SignedUserID $.root.PageIsPullFiles}}{{/* ··· 73 75 {{else}} 74 76 {{$inlineDiff := $section.GetComputedInlineDiffFor $line $.root.locale}} 75 77 <td class="lines-num lines-num-old" data-line-num="{{if $line.LeftIdx}}{{$line.LeftIdx}}{{end}}"><span rel="{{if $line.LeftIdx}}diff-{{$file.NameHash}}L{{$line.LeftIdx}}{{end}}"></span></td> 76 - <td class="lines-escape lines-escape-old">{{if $line.LeftIdx}}{{if $inlineDiff.EscapeStatus.Escaped}}<a href="" class="toggle-escape-button" title="{{template "repo/diff/escape_title" dict "diff" $inlineDiff "locale" $.root.locale}}"></a>{{end}}{{end}}</td> 78 + <td class="lines-escape lines-escape-old">{{if $line.LeftIdx}}{{if $inlineDiff.EscapeStatus.Escaped}}<button class="toggle-escape-button button button-ghost" title="{{template "repo/diff/escape_title" dict "diff" $inlineDiff "locale" $.root.locale}}"></button>{{end}}{{end}}</td> 77 79 <td class="lines-type-marker lines-type-marker-old">{{if $line.LeftIdx}}<span class="gt-mono" data-type-marker="{{$line.GetLineTypeMarker}}"></span>{{end}}</td> 78 80 <td class="lines-code lines-code-old">{{/* 79 81 */}}{{if and $.root.SignedUserID $.root.PageIsPullFiles (not (eq .GetType 2))}}{{/* ··· 88 90 */}}{{end}}{{/* 89 91 */}}</td> 90 92 <td class="lines-num lines-num-new" data-line-num="{{if $line.RightIdx}}{{$line.RightIdx}}{{end}}"><span rel="{{if $line.RightIdx}}diff-{{$file.NameHash}}R{{$line.RightIdx}}{{end}}"></span></td> 91 - <td class="lines-escape lines-escape-new">{{if $line.RightIdx}}{{if $inlineDiff.EscapeStatus.Escaped}}<a href="" class="toggle-escape-button" title="{{template "repo/diff/escape_title" dict "diff" $inlineDiff "locale" $.root.locale}}"></a>{{end}}{{end}}</td> 93 + <td class="lines-escape lines-escape-new">{{if $line.RightIdx}}{{if $inlineDiff.EscapeStatus.Escaped}}<button class="toggle-escape-button button button-ghost" title="{{template "repo/diff/escape_title" dict "diff" $inlineDiff "locale" $.root.locale}}"></button>{{end}}{{end}}</td> 92 94 <td class="lines-type-marker lines-type-marker-new">{{if $line.RightIdx}}<span class="gt-mono" data-type-marker="{{$line.GetLineTypeMarker}}"></span>{{end}}</td> 93 95 <td class="lines-code lines-code-new">{{/* 94 96 */}}{{if and $.root.SignedUserID $.root.PageIsPullFiles (not (eq .GetType 3))}}{{/*
+22 -16
templates/repo/diff/section_unified.tmpl
··· 12 12 {{if eq .GetType 4}} 13 13 {{if $.root.AfterCommitID}} 14 14 <td colspan="2" class="lines-num"> 15 - {{if or (eq $line.GetExpandDirection 3) (eq $line.GetExpandDirection 5)}} 16 - <a role="button" class="blob-excerpt" data-url="{{$.root.RepoLink}}/blob_excerpt/{{PathEscape $.root.AfterCommitID}}" data-query="{{$line.GetBlobExcerptQuery}}&style=unified&direction=down&wiki={{$.root.PageIsWiki}}" data-anchor="diff-{{$file.NameHash}}K{{$line.SectionInfo.RightIdx}}"> 17 - {{svg "octicon-fold-down"}} 18 - </a> 19 - {{end}} 20 - {{if or (eq $line.GetExpandDirection 3) (eq $line.GetExpandDirection 4)}} 21 - <a role="button" class="blob-excerpt" data-url="{{$.root.RepoLink}}/blob_excerpt/{{PathEscape $.root.AfterCommitID}}" data-query="{{$line.GetBlobExcerptQuery}}&style=unified&direction=up&wiki={{$.root.PageIsWiki}}" data-anchor="diff-{{$file.NameHash}}K{{$line.SectionInfo.RightIdx}}"> 22 - {{svg "octicon-fold-up"}} 23 - </a> 24 - {{end}} 25 - {{if eq $line.GetExpandDirection 2}} 26 - <a role="button" class="blob-excerpt" data-url="{{$.root.RepoLink}}/blob_excerpt/{{PathEscape $.root.AfterCommitID}}" data-query="{{$line.GetBlobExcerptQuery}}&style=unified&direction=&wiki={{$.root.PageIsWiki}}" data-anchor="diff-{{$file.NameHash}}K{{$line.SectionInfo.RightIdx}}"> 27 - {{svg "octicon-fold"}} 28 - </a> 29 - {{end}} 15 + <div class="gt-df"> 16 + {{if or (eq $line.GetExpandDirection 3) (eq $line.GetExpandDirection 5)}} 17 + <button class="code-expander-button" data-url="{{$.root.RepoLink}}/blob_excerpt/{{PathEscape $.root.AfterCommitID}}" data-query="{{$line.GetBlobExcerptQuery}}&style=unified&direction=down&wiki={{$.root.PageIsWiki}}" data-anchor="diff-{{$file.NameHash}}K{{$line.SectionInfo.RightIdx}}"> 18 + {{svg "octicon-fold-down"}} 19 + </button> 20 + {{end}} 21 + {{if or (eq $line.GetExpandDirection 3) (eq $line.GetExpandDirection 4)}} 22 + <button class="code-expander-button" data-url="{{$.root.RepoLink}}/blob_excerpt/{{PathEscape $.root.AfterCommitID}}" data-query="{{$line.GetBlobExcerptQuery}}&style=unified&direction=up&wiki={{$.root.PageIsWiki}}" data-anchor="diff-{{$file.NameHash}}K{{$line.SectionInfo.RightIdx}}"> 23 + {{svg "octicon-fold-up"}} 24 + </button> 25 + {{end}} 26 + {{if eq $line.GetExpandDirection 2}} 27 + <button class="code-expander-button" data-url="{{$.root.RepoLink}}/blob_excerpt/{{PathEscape $.root.AfterCommitID}}" data-query="{{$line.GetBlobExcerptQuery}}&style=unified&direction=&wiki={{$.root.PageIsWiki}}" data-anchor="diff-{{$file.NameHash}}K{{$line.SectionInfo.RightIdx}}"> 28 + {{svg "octicon-fold"}} 29 + </button> 30 + {{end}} 31 + </div> 30 32 </td> 31 33 {{else}} 32 34 {{/* for code file preview page or comment diffs on pull comment pages, do not show the expansion arrows */}} ··· 37 39 <td class="lines-num lines-num-new" data-line-num="{{if $line.RightIdx}}{{$line.RightIdx}}{{end}}"><span rel="{{if $line.RightIdx}}diff-{{$file.NameHash}}R{{$line.RightIdx}}{{end}}"></span></td> 38 40 {{end}} 39 41 {{$inlineDiff := $section.GetComputedInlineDiffFor $line $.root.locale -}} 40 - <td class="lines-escape">{{if $inlineDiff.EscapeStatus.Escaped}}<a href="" class="toggle-escape-button" title="{{template "repo/diff/escape_title" dict "diff" $inlineDiff "locale" $.root.locale}}"></a>{{end}}</td> 42 + <td class="lines-escape"> 43 + {{- if $inlineDiff.EscapeStatus.Escaped -}} 44 + <button class="toggle-escape-button button button-ghost" title="{{template "repo/diff/escape_title" dict "diff" $inlineDiff "locale" $.root.locale}}"></button> 45 + {{- end -}} 46 + </td> 41 47 <td class="lines-type-marker"><span class="gt-mono" data-type-marker="{{$line.GetLineTypeMarker}}"></span></td> 42 48 {{if eq .GetType 4}} 43 49 <td class="chroma lines-code blob-hunk">{{/*
+2 -2
templates/repo/issue/labels/labels_selector_field.tmpl
··· 1 1 <div class="ui {{if or (not .HasIssuesOrPullsWritePermission) .Repository.IsArchived}}disabled{{end}} floating jump select-label dropdown"> 2 - <a class="text gt-df gt-ac muted"> 2 + <span class="text gt-df gt-ac muted"> 3 3 <strong>{{.locale.Tr "repo.issues.new.labels"}}</strong> 4 4 {{if and .HasIssuesOrPullsWritePermission (not .Repository.IsArchived)}} 5 5 {{svg "octicon-gear" 16 "gt-ml-2"}} 6 6 {{end}} 7 - </a> 7 + </span> 8 8 <div class="filter menu" {{if .Issue}}data-action="update" data-issue-id="{{$.Issue.ID}}" data-update-url="{{$.RepoLink}}/issues/labels"{{else}}data-id="#label_ids"{{end}}> 9 9 <div class="header" style="text-transform: none;font-size:16px;">{{.locale.Tr "repo.issues.new.add_labels_title"}}</div> 10 10 {{if or .Labels .OrgLabels}}
+3 -3
templates/repo/issue/view_title.tmpl
··· 45 45 {{if .Issue.IsPull}} 46 46 {{$headHref := .HeadTarget|Escape}} 47 47 {{if .HeadBranchLink}} 48 - {{$headHref = printf "<a href=\"%s\">%s</a>" (.HeadBranchLink | Escape) $headHref}} 48 + {{$headHref = printf `<a href="%s">%s</a>` (.HeadBranchLink | Escape) $headHref}} 49 49 {{end}} 50 - {{$headHref = printf "%s <a data-tooltip-content=\"%s\" data-clipboard-text=\"%s\">%s</a>" $headHref (.locale.Tr "copy_branch") (.HeadTarget | Escape) (svg "octicon-copy" 14)}} 50 + {{$headHref = printf `%s <button class="button button-ghost" data-tooltip-content="%s" data-clipboard-text="%s">%s</button>` $headHref (.locale.Tr "copy_branch") (.HeadTarget | Escape) (svg "octicon-copy" 14)}} 51 51 {{$baseHref := .BaseTarget|Escape}} 52 52 {{if .BaseBranchLink}} 53 - {{$baseHref = printf "<a href=\"%s\">%s</a>" (.BaseBranchLink | Escape) $baseHref}} 53 + {{$baseHref = printf `<a href="%s">%s</a>` (.BaseBranchLink | Escape) $baseHref}} 54 54 {{end}} 55 55 {{if .Issue.PullRequest.HasMerged}} 56 56 {{$mergedStr:= TimeSinceUnix .Issue.PullRequest.MergedUnix $.locale}}
+5 -5
templates/repo/view_file.tmpl
··· 36 36 {{end}} 37 37 <a class="ui mini basic button" href="{{.RepoLink}}/commits/{{.BranchNameSubURL}}/{{PathEscapeSegments .TreePath}}">{{.locale.Tr "repo.file_history"}}</a> 38 38 {{if .EscapeStatus.Escaped}} 39 - <a class="ui mini basic button unescape-button gt-hidden">{{.locale.Tr "repo.unescape_control_characters"}}</a> 40 - <a class="ui mini basic button escape-button">{{.locale.Tr "repo.escape_control_characters"}}</a> 39 + <button class="ui mini basic button unescape-button gt-hidden">{{.locale.Tr "repo.unescape_control_characters"}}</button> 40 + <button class="ui mini basic button escape-button">{{.locale.Tr "repo.escape_control_characters"}}</button> 41 41 {{end}} 42 42 </div> 43 43 <a download href="{{$.RawFileLink}}"><span class="btn-octicon" data-tooltip-content="{{.locale.Tr "repo.download_file"}}">{{svg "octicon-download"}}</span></a> ··· 58 58 {{end}} 59 59 {{end}} 60 60 {{else if .EscapeStatus.Escaped}} 61 - <a class="ui mini basic button unescape-button gt-mr-2 gt-hidden">{{.locale.Tr "repo.unescape_control_characters"}}</a> 62 - <a class="ui mini basic button escape-button gt-mr-2">{{.locale.Tr "repo.escape_control_characters"}}</a> 61 + <button class="ui mini basic button unescape-button gt-mr-2 gt-hidden">{{.locale.Tr "repo.unescape_control_characters"}}</button> 62 + <button class="ui mini basic button escape-button gt-mr-2">{{.locale.Tr "repo.escape_control_characters"}}</button> 63 63 {{end}} 64 64 </div> 65 65 </h4> ··· 107 107 <tr> 108 108 <td id="L{{$line}}" class="lines-num"><span id="L{{$line}}" data-line-number="{{$line}}"></span></td> 109 109 {{if $.EscapeStatus.Escaped}} 110 - <td class="lines-escape">{{if (index $.LineEscapeStatus $idx).Escaped}}<a href="" class="toggle-escape-button" title="{{if (index $.LineEscapeStatus $idx).HasInvisible}}{{$.locale.Tr "repo.invisible_runes_line"}} {{end}}{{if (index $.LineEscapeStatus $idx).HasAmbiguous}}{{$.locale.Tr "repo.ambiguous_runes_line"}}{{end}}"></a>{{end}}</td> 110 + <td class="lines-escape">{{if (index $.LineEscapeStatus $idx).Escaped}}<button class="toggle-escape-button button button-ghost" title="{{if (index $.LineEscapeStatus $idx).HasInvisible}}{{$.locale.Tr "repo.invisible_runes_line"}} {{end}}{{if (index $.LineEscapeStatus $idx).HasAmbiguous}}{{$.locale.Tr "repo.ambiguous_runes_line"}}{{end}}"></button>{{end}}</td> 111 111 {{end}} 112 112 <td rel="L{{$line}}" class="lines-code chroma"><code class="code-inner">{{$code | Safe}}</code></td> 113 113 </tr>
+1 -1
templates/user/settings/profile.tmpl
··· 125 125 126 126 <div class="field"> 127 127 <button class="ui green button">{{$.locale.Tr "settings.update_avatar"}}</button> 128 - <a class="ui red button delete-post" data-request-url="{{.Link}}/avatar/delete" data-done-url="{{.Link}}">{{$.locale.Tr "settings.delete_current_avatar"}}</a> 128 + <button class="ui red button delete-post" data-request-url="{{.Link}}/avatar/delete" data-done-url="{{.Link}}">{{$.locale.Tr "settings.delete_current_avatar"}}</button> 129 129 </div> 130 130 </form> 131 131 </div>
+1 -1
web_src/css/repo.css
··· 2943 2943 padding-top: 0 !important; 2944 2944 } 2945 2945 2946 - td.blob-excerpt { 2946 + .blob-excerpt { 2947 2947 background-color: var(--color-secondary-alpha-30); 2948 2948 } 2949 2949
+5 -3
web_src/css/review.css
··· 21 21 transform: scale(1.1); 22 22 } 23 23 24 - .lines-escape a.toggle-escape-button::before { 24 + .lines-escape .toggle-escape-button::before { 25 25 visibility: visible; 26 26 content: "⚠️"; 27 27 font-family: var(--fonts-emoji); ··· 198 198 color: var(--color-text); 199 199 } 200 200 201 - a.blob-excerpt { 201 + .code-expander-button { 202 + border: none; 202 203 color: var(--color-text-light); 203 204 height: 28px; 204 205 display: flex; ··· 206 207 align-items: center; 207 208 width: 100%; 208 209 background: var(--color-expand-button); 210 + flex: 1; 209 211 } 210 212 211 - a.blob-excerpt:hover { 213 + .code-expander-button:hover { 212 214 background: var(--color-primary); 213 215 color: var(--color-primary-contrast); 214 216 }
+2 -3
web_src/js/features/common-global.js
··· 56 56 } 57 57 58 58 export function initGlobalButtonClickOnEnter() { 59 - $(document).on('keypress', '.ui.button', (e) => { 60 - if (e.keyCode === 13 || e.keyCode === 32) { // enter key or space bar 61 - if (e.target.nodeName === 'BUTTON') return; // button already handles space&enter correctly 59 + $(document).on('keypress', 'div.ui.button,span.ui.button', (e) => { 60 + if (e.code === ' ' || e.code === 'Enter') { 62 61 $(e.target).trigger('click'); 63 62 e.preventDefault(); 64 63 }
+1 -1
web_src/js/features/pull-view-file.js
··· 38 38 // The checkbox consists of a div containing the real checkbox with its label and the CSRF token, 39 39 // hence the actual checkbox first has to be found 40 40 const checkbox = form.querySelector('input[type=checkbox]'); 41 - checkbox.addEventListener('change', function() { 41 + checkbox.addEventListener('input', function() { 42 42 // Mark the file as viewed visually - will especially change the background 43 43 if (this.checked) { 44 44 form.classList.add(viewedStyleClass);
+1 -1
web_src/js/features/repo-code.js
··· 181 181 $(document).on('click', '.fold-file', ({currentTarget}) => { 182 182 invertFileFolding(currentTarget.closest('.file-content'), currentTarget); 183 183 }); 184 - $(document).on('click', '.blob-excerpt', async ({currentTarget}) => { 184 + $(document).on('click', '.code-expander-button', async ({currentTarget}) => { 185 185 const url = currentTarget.getAttribute('data-url'); 186 186 const query = currentTarget.getAttribute('data-query'); 187 187 const anchor = currentTarget.getAttribute('data-anchor');
+2 -2
web_src/js/features/repo-diff.js
··· 62 62 63 63 $form.closest('.conversation-holder').replaceWith($newConversationHolder); 64 64 if ($form.closest('tr').data('line-type') === 'same') { 65 - $(`[data-path="${path}"] a.add-code-comment[data-idx="${idx}"]`).addClass('invisible'); 65 + $(`[data-path="${path}"] .add-code-comment[data-idx="${idx}"]`).addClass('invisible'); 66 66 } else { 67 - $(`[data-path="${path}"] a.add-code-comment[data-side="${side}"][data-idx="${idx}"]`).addClass('invisible'); 67 + $(`[data-path="${path}"] .add-code-comment[data-side="${side}"][data-idx="${idx}"]`).addClass('invisible'); 68 68 } 69 69 $newConversationHolder.find('.dropdown').dropdown(); 70 70 initCompReactionSelector($newConversationHolder);
+3 -3
web_src/js/features/repo-issue.js
··· 177 177 const idx = $conversationHolder.data('idx'); 178 178 const lineType = $conversationHolder.closest('tr').data('line-type'); 179 179 if (lineType === 'same') { 180 - $(`[data-path="${path}"] a.add-code-comment[data-idx="${idx}"]`).removeClass('invisible'); 180 + $(`[data-path="${path}"] .add-code-comment[data-idx="${idx}"]`).removeClass('invisible'); 181 181 } else { 182 - $(`[data-path="${path}"] a.add-code-comment[data-side="${side}"][data-idx="${idx}"]`).removeClass('invisible'); 182 + $(`[data-path="${path}"] .add-code-comment[data-side="${side}"][data-idx="${idx}"]`).removeClass('invisible'); 183 183 } 184 184 $conversationHolder.remove(); 185 185 } ··· 488 488 }); 489 489 } 490 490 491 - $(document).on('click', 'a.add-code-comment', async function (e) { 491 + $(document).on('click', '.add-code-comment', async function (e) { 492 492 if ($(e.target).hasClass('btn-add-single')) return; // https://github.com/go-gitea/gitea/issues/4745 493 493 e.preventDefault(); 494 494
+9 -9
web_src/js/features/repo-unicode-escape.js
··· 2 2 import {hideElem, showElem} from '../utils/dom.js'; 3 3 4 4 export function initUnicodeEscapeButton() { 5 - $(document).on('click', 'a.escape-button', (e) => { 5 + $(document).on('click', '.escape-button', (e) => { 6 6 e.preventDefault(); 7 7 $(e.target).parents('.file-content, .non-diff-file-content').find('.file-code, .file-view').addClass('unicode-escaped'); 8 8 hideElem($(e.target)); 9 - showElem($(e.target).siblings('a.unescape-button')); 9 + showElem($(e.target).siblings('.unescape-button')); 10 10 }); 11 - $(document).on('click', 'a.unescape-button', (e) => { 11 + $(document).on('click', '.unescape-button', (e) => { 12 12 e.preventDefault(); 13 13 $(e.target).parents('.file-content, .non-diff-file-content').find('.file-code, .file-view').removeClass('unicode-escaped'); 14 14 hideElem($(e.target)); 15 - showElem($(e.target).siblings('a.escape-button')); 15 + showElem($(e.target).siblings('.escape-button')); 16 16 }); 17 - $(document).on('click', 'a.toggle-escape-button', (e) => { 17 + $(document).on('click', '.toggle-escape-button', (e) => { 18 18 e.preventDefault(); 19 19 const fileContent = $(e.target).parents('.file-content, .non-diff-file-content'); 20 20 const fileView = fileContent.find('.file-code, .file-view'); 21 21 if (fileView.hasClass('unicode-escaped')) { 22 22 fileView.removeClass('unicode-escaped'); 23 - hideElem(fileContent.find('a.unescape-button')); 24 - showElem(fileContent.find('a.escape-button')); 23 + hideElem(fileContent.find('.unescape-button')); 24 + showElem(fileContent.find('.escape-button')); 25 25 } else { 26 26 fileView.addClass('unicode-escaped'); 27 - showElem(fileContent.find('a.unescape-button')); 28 - hideElem(fileContent.find('a.escape-button')); 27 + showElem(fileContent.find('.unescape-button')); 28 + hideElem(fileContent.find('.escape-button')); 29 29 } 30 30 }); 31 31 }