mirror of
https://github.com/go-gitea/gitea.git
synced 2026-11-05 00:09:33 +09:00
Enable djlint's [H018](https://djlint.com/docs/linter/#h018), [H046](https://djlint.com/docs/linter/#h046) and [H054](https://djlint.com/docs/linter/#h054) rules, fix their findings and the keyboard navigation problems around them. H054 found links nested in `<button>` dropdowns and radio inputs nested in links, both invalid HTML. - "Add File" and "More Operations" in the repo file list become `div` dropdowns, the disabled state stays unfocusable - The diff whitespace menu marks the current option with a check and `aria-current` instead of radios, which made our dropdown aria patch announce it as a combobox - Sign-in moves "Forgot password?" below "Sign In" and drops the positive tabindexes from https://github.com/go-gitea/gitea/pull/31689, so the tab order follows the DOM: username, password, remember, sign in, forgot - The focus ring on primary, red and green buttons is near-white on dark themes and near-black on light ones, the primary-colored ring was invisible on primary buttons <img width="500" alt="Whitespace menu, before and after" src="https://github.com/user-attachments/assets/d22a423d-95e5-434c-aec4-59264c7132b7" /> <img width="600" alt="Sign-in form, main and this PR" src="https://github.com/user-attachments/assets/d6780690-d906-4791-8a2b-8d80fb03067a" /> <img width="215" height="132" alt="Keyboard-focused primary and red buttons, dark and light theme" src="https://github.com/user-attachments/assets/a2400b18-4802-4383-8560-7e8267a7f02f" /> --------- Signed-off-by: silverwind <me@silverwind.io> Co-authored-by: wxiaoguang <wxiaoguang@gmail.com>
141 lines
6.5 KiB
Handlebars
141 lines
6.5 KiB
Handlebars
{{$isTreePathRoot := not .TreeNames}}
|
|
|
|
<div class="repo-view-content-data tw-hidden" data-document-title="{{ctx.RootData.Title}}" data-document-title-common="{{ctx.RootData.PageTitleCommon}}"></div>
|
|
{{template "repo/sub_menu" .}}
|
|
<div class="repo-button-row">
|
|
<div class="repo-button-row-left">
|
|
{{if not $isTreePathRoot}}
|
|
{{template "repo/view_file_tree_toggle_button" .}}
|
|
{{end}}
|
|
|
|
{{template "repo/branch_dropdown" dict
|
|
"Repository" .Repository
|
|
"ShowTabBranches" true
|
|
"ShowTabTags" true
|
|
"CurrentRefType" .RefFullName.RefType
|
|
"CurrentRefShortName" .RefFullName.ShortName
|
|
"CurrentTreePath" .TreePath
|
|
"RefLinkTemplate" "{RepoLink}/src/{RefType}/{RefShortName}/{TreePath}"
|
|
"AllowCreateNewRef" .CanCreateBranch
|
|
"ShowViewAllRefsEntry" true
|
|
}}
|
|
|
|
{{if and .PullRequestCtx.CanCreateNewPull .RefFullName.IsBranch}}
|
|
{{$compareLink := .PullRequestCtx.MakeDefaultCompareLink .BranchName}}
|
|
<a id="new-pull-request" role="button" class="ui compact basic button" href="{{QueryBuild $compareLink "expand" 1}}"
|
|
data-tooltip-content="{{ctx.Locale.Tr "repo.pulls.compare_changes"}}">
|
|
{{svg "octicon-git-pull-request"}}
|
|
</a>
|
|
{{end}}
|
|
|
|
{{if and $isTreePathRoot .Repository.IsTemplate}}
|
|
<a role="button" class="ui primary compact button" href="{{AppSubUrl}}/repo/create?template_id={{.Repository.ID}}">
|
|
{{ctx.Locale.Tr "repo.use_template"}}
|
|
</a>
|
|
{{end}}
|
|
|
|
{{if not $isTreePathRoot}}
|
|
{{$treeNameIdxLast := Eval (len .TreeNames) "-" 1}}
|
|
<span class="breadcrumb">
|
|
<a class="section" href="{{.RepoLink}}/src/{{.RefTypeNameSubURL}}" title="{{.Repository.Name}}">{{StringUtils.EllipsisString .Repository.Name 30}}</a>
|
|
{{- range $i, $v := .TreeNames -}}
|
|
<span class="breadcrumb-divider">/</span>
|
|
{{- if eq $i $treeNameIdxLast -}}
|
|
<span class="active section" title="{{$v}}">{{$v}}</span>
|
|
<button type="button" class="btn interact-fg tw-mx-1" data-clipboard-text="{{$.TreePath}}" data-tooltip-content="{{ctx.Locale.Tr "copy_path"}}">{{svg "octicon-copy" 14}}</button>
|
|
{{- else -}}
|
|
{{$p := index $.Paths $i}}<span class="section"><a href="{{$.BranchLink}}/{{PathEscapeSegments $p}}" title="{{$v}}">{{$v}}</a></span>
|
|
{{- end -}}
|
|
{{- end -}}
|
|
</span>
|
|
{{end}}
|
|
</div>
|
|
|
|
<div class="repo-button-row-right">
|
|
<div class="repo-file-search-container"
|
|
data-global-init="initRepoFileSearch"
|
|
data-repo-link="{{.RepoLink}}"
|
|
data-current-ref-name-sub-url="{{.RefTypeNameSubURL}}"
|
|
data-tree-list-url="{{.RepoLink}}/tree-list/{{.RefTypeNameSubURL}}"
|
|
data-no-results-text="{{ctx.Locale.Tr "repo.find_file.no_matching"}}"
|
|
data-placeholder="{{ctx.Locale.Tr "repo.find_file.go_to_file"}}"
|
|
><div class="ui small input global-shortcut-wrapper"><input placeholder="{{ctx.Locale.Tr "repo.find_file.go_to_file"}}"><kbd>T</kbd></div></div>
|
|
|
|
{{if .RefFullName.IsBranch}}
|
|
{{$addFilePath := .TreePath}}
|
|
{{if .IsViewFile}}
|
|
{{if gt (len .TreeNames) 1}}
|
|
{{$addFilePath = StringUtils.Join (slice .TreeNames 0 (Eval (len .TreeNames) "-" 1)) "/"}}
|
|
{{else}}
|
|
{{$addFilePath = ""}}
|
|
{{end}}
|
|
{{end}}
|
|
<div class="ui dropdown basic compact jump button repo-add-file{{if not .Repository.CanContentChange}} disabled{{end}}"{{if not .Repository.CanContentChange}} tabindex="-1" aria-disabled="true"{{end}}>
|
|
{{ctx.Locale.Tr "repo.editor.add_file"}}
|
|
{{svg "octicon-triangle-down" 14 "dropdown icon"}}
|
|
<div class="menu">
|
|
<a class="item" href="{{.RepoLink}}/_new/{{.BranchName | PathEscapeSegments}}/{{$addFilePath | PathEscapeSegments}}">
|
|
{{svg "octicon-file-added" 16 "tw-mr-2"}}{{ctx.Locale.Tr "repo.editor.new_file"}}
|
|
</a>
|
|
{{if .RepositoryUploadEnabled}}
|
|
<a class="item" href="{{.RepoLink}}/_upload/{{.BranchName | PathEscapeSegments}}/{{$addFilePath | PathEscapeSegments}}">
|
|
{{svg "octicon-upload" 16 "tw-mr-2"}}{{ctx.Locale.Tr "repo.editor.upload_file"}}
|
|
</a>
|
|
{{end}}
|
|
<a class="item" href="{{.RepoLink}}/_diffpatch/{{.BranchName | PathEscapeSegments}}/{{$addFilePath | PathEscapeSegments}}">
|
|
{{svg "octicon-diff" 16 "tw-mr-2"}}{{ctx.Locale.Tr "repo.editor.patch"}}
|
|
</a>
|
|
</div>
|
|
</div>
|
|
|
|
{{if and (not .IsViewFile) (not $isTreePathRoot)}}
|
|
<div class="ui dropdown basic compact jump button tw-px-3" data-tooltip-content="{{ctx.Locale.Tr "repo.more_operations"}}">
|
|
{{svg "octicon-kebab-horizontal"}}
|
|
<div class="menu">
|
|
<a class="item" data-clipboard-text="{{.Repository.HTMLURL ctx}}/src/commit/{{.CommitID}}/{{PathEscapeSegments .TreePath}}">
|
|
{{svg "octicon-link" 16}}{{ctx.Locale.Tr "repo.file_copy_permalink"}}
|
|
</a>
|
|
{{if and (not $.DisableDownloadSourceArchives) $.RefFullName}}
|
|
<div class="divider"></div>
|
|
<a class="item muted archive-link" href="{{$.RepoLink}}/archive/{{PathEscapeSegments $.RefFullName.ShortName}}.zip?path={{.TreePath}}" rel="nofollow">{{svg "octicon-file-zip"}}{{ctx.Locale.Tr "repo.download_directory_as" "ZIP"}}</a>
|
|
<a class="item muted archive-link" href="{{$.RepoLink}}/archive/{{PathEscapeSegments $.RefFullName.ShortName}}.tar.gz?path={{.TreePath}}" rel="nofollow">{{svg "octicon-file-zip"}}{{ctx.Locale.Tr "repo.download_directory_as" "TAR.GZ"}}</a>
|
|
{{end}}
|
|
{{if and .Repository.CanContentChange (not $isTreePathRoot)}}
|
|
<div class="divider"></div>
|
|
<a class="item tw-text-danger" href="{{.RepoLink}}/_delete/{{.BranchName | PathEscapeSegments}}/{{.TreePath | PathEscapeSegments}}">
|
|
{{svg "octicon-trash" 16}}{{ctx.Locale.Tr "repo.editor.delete_this_directory"}}
|
|
</a>
|
|
{{end}}
|
|
</div>
|
|
</div>
|
|
{{end}}
|
|
{{end}}
|
|
<!-- Only show clone panel in repository home page -->
|
|
{{if $isTreePathRoot}}
|
|
{{template "repo/clone_panel" (dict
|
|
"CloneButtonOriginLink" $.CloneButtonOriginLink
|
|
"OpenWithEditorApps" $.OpenWithEditorApps
|
|
"DownloadArchiveLinkPrefix" $.DownloadArchiveLinkPrefix
|
|
)}}
|
|
{{end}}
|
|
{{if and (not $isTreePathRoot) (not .IsViewFile) (not .IsBlame)}}{{/* IsViewDirectory (not home), TODO: split the templates, avoid using "if" tricks */}}
|
|
<a class="ui compact button" href="{{.RepoLink}}/commits/{{.RefTypeNameSubURL}}/{{.TreePath | PathEscapeSegments}}">
|
|
{{svg "octicon-history"}}{{ctx.Locale.Tr "repo.file_history"}}
|
|
</a>
|
|
{{end}}
|
|
</div>
|
|
</div>
|
|
{{if .IsViewFile}}
|
|
{{template "repo/view_file" .}}
|
|
{{else if .IsBlame}}
|
|
{{template "repo/blame" .}}
|
|
{{else}}{{/* IsViewDirectory */}}
|
|
{{if $isTreePathRoot}}
|
|
{{template "repo/code/upstream_diverging_info" .}}
|
|
{{end}}
|
|
{{template "repo/view_list" .}}
|
|
{{if and .ReadmeExist (or .RenderAsMarkup .IsPlainText)}}
|
|
{{template "repo/view_file" .}}
|
|
{{end}}
|
|
{{end}}
|