mirror of
https://codeberg.org/forgejo/forgejo.git
synced 2024-11-26 23:35:51 +03:00
e24f651c86
So I found this [linter](https://github.com/Riverside-Healthcare/djlint) which features a mode for go templates, so I gave it a try and it did find a number of valid issue, like unbalanced tags etc. It also has a number of bugs, I had to disable/workaround many issues. Given that this linter is written in python, this does add a dependency on `python` >= 3.8 and `poetry` to the development environment to be able to run this linter locally. - `e.g.` prefixes on placeholders are removed because the linter had a false-positive on `placeholder="e.g. cn=Search"` for the `attr=value` syntax and it's not ideal anyways to write `e.g.` into a placeholder because a placeholder is meant to hold a sample value. - In `templates/repo/settings/options.tmpl` I simplified the logic to not conditionally create opening tags without closing tags because this stuff confuses the linter (and possibly the reader as well).
253 lines
11 KiB
Handlebars
253 lines
11 KiB
Handlebars
<div class="header-wrapper">
|
|
{{with .Repository}}
|
|
<div class="ui container">
|
|
<div class="repo-header">
|
|
<div class="repo-title-wrap gt-df gt-fc">
|
|
<div class="repo-title" role="heading" aria-level="1">
|
|
{{$avatar := (repoAvatar . 32 "gt-mr-3")}}
|
|
{{if $avatar}}
|
|
{{$avatar}}
|
|
{{else}}
|
|
{{template "repo/icon" .}}
|
|
{{end}}
|
|
<a href="{{.Owner.HomeLink}}">{{.Owner.Name}}</a>
|
|
<div class="gt-mx-2">/</div>
|
|
<a href="{{$.RepoLink}}">{{.Name}}</a>
|
|
<div class="labels gt-df gt-ac gt-fw">
|
|
{{if .IsTemplate}}
|
|
{{if .IsPrivate}}
|
|
<span class="ui basic label">{{$.locale.Tr "repo.desc.private_template"}}</span>
|
|
{{else}}
|
|
{{if .Owner.Visibility.IsPrivate}}
|
|
<span class="ui basic label">{{$.locale.Tr "repo.desc.internal_template"}}</span>
|
|
{{end}}
|
|
{{end}}
|
|
{{else}}
|
|
{{if .IsPrivate}}
|
|
<span class="ui basic label">{{$.locale.Tr "repo.desc.private"}}</span>
|
|
{{else}}
|
|
{{if .Owner.Visibility.IsPrivate}}
|
|
<span class="ui basic label">{{$.locale.Tr "repo.desc.internal"}}</span>
|
|
{{end}}
|
|
{{end}}
|
|
{{end}}
|
|
{{if .IsArchived}}
|
|
<span class="ui basic label">{{$.locale.Tr "repo.desc.archived"}}</span>
|
|
{{end}}
|
|
</div>
|
|
{{if $.EnableFeed}}
|
|
<a class="rss-icon gt-ml-3" href="{{$.RepoLink}}.rss" data-tooltip-content="{{$.locale.Tr "rss_feed"}}">{{svg "octicon-rss" 18}}</a>
|
|
{{end}}
|
|
</div>
|
|
{{if $.PullMirror}}
|
|
{{$address := MirrorRemoteAddress $.Context . $.PullMirror.GetRemoteName false}}
|
|
<div class="fork-flag">{{$.locale.Tr "repo.mirror_from"}} <a target="_blank" rel="noopener noreferrer" href="{{$address.Address}}">{{$address.Address}}</a></div>
|
|
{{end}}
|
|
{{if .IsFork}}<div class="fork-flag">{{$.locale.Tr "repo.forked_from"}} <a href="{{.BaseRepo.Link}}">{{.BaseRepo.FullName}}</a></div>{{end}}
|
|
{{if .IsGenerated}}<div class="fork-flag">{{$.locale.Tr "repo.generated_from"}} <a href="{{.TemplateRepo.Link}}">{{.TemplateRepo.FullName}}</a></div>{{end}}
|
|
</div>
|
|
{{if not (or .IsBeingCreated .IsBroken)}}
|
|
<div class="repo-buttons">
|
|
{{if $.RepoTransfer}}
|
|
<form method="post" action="{{$.RepoLink}}/action/accept_transfer?redirect_to={{$.RepoLink}}">
|
|
{{$.CsrfTokenHtml}}
|
|
<div data-tooltip-content="{{if $.CanUserAcceptTransfer}}{{$.locale.Tr "repo.transfer.accept_desc" $.RepoTransfer.Recipient.DisplayName}}{{else}}{{$.locale.Tr "repo.transfer.no_permission_to_accept"}}{{end}}">
|
|
<button type="submit" class="ui basic button {{if $.CanUserAcceptTransfer}}green {{end}} ok small"{{if not $.CanUserAcceptTransfer}} disabled{{end}}>
|
|
{{$.locale.Tr "repo.transfer.accept"}}
|
|
</button>
|
|
</div>
|
|
</form>
|
|
<form method="post" action="{{$.RepoLink}}/action/reject_transfer?redirect_to={{$.RepoLink}}">
|
|
{{$.CsrfTokenHtml}}
|
|
<div data-tooltip-content="{{if $.CanUserAcceptTransfer}}{{$.locale.Tr "repo.transfer.reject_desc" $.RepoTransfer.Recipient.DisplayName}}{{else}}{{$.locale.Tr "repo.transfer.no_permission_to_reject"}}{{end}}">
|
|
<button type="submit" class="ui basic button {{if $.CanUserAcceptTransfer}}red {{end}}ok small"{{if not $.CanUserAcceptTransfer}} disabled{{end}}>
|
|
{{$.locale.Tr "repo.transfer.reject"}}
|
|
</button>
|
|
</div>
|
|
</form>
|
|
{{end}}
|
|
<form method="post" action="{{$.RepoLink}}/action/{{if $.IsWatchingRepo}}un{{end}}watch?redirect_to={{$.Link}}">
|
|
{{$.CsrfTokenHtml}}
|
|
<div class="ui labeled button" {{if not $.IsSigned}}data-tooltip-content="{{$.locale.Tr "repo.watch_guest_user"}}"{{end}}>
|
|
<button type="submit" class="ui compact small basic button"{{if not $.IsSigned}} disabled{{end}}>
|
|
{{if $.IsWatchingRepo}}{{svg "octicon-eye-closed" 16}}{{$.locale.Tr "repo.unwatch"}}{{else}}{{svg "octicon-eye"}}{{$.locale.Tr "repo.watch"}}{{end}}
|
|
</button>
|
|
<a class="ui basic label" href="{{.Link}}/watchers">
|
|
{{CountFmt .NumWatches}}
|
|
</a>
|
|
</div>
|
|
</form>
|
|
{{if not $.DisableStars}}
|
|
<form method="post" action="{{$.RepoLink}}/action/{{if $.IsStaringRepo}}un{{end}}star?redirect_to={{$.Link}}">
|
|
{{$.CsrfTokenHtml}}
|
|
<div class="ui labeled button" {{if not $.IsSigned}}data-tooltip-content="{{$.locale.Tr "repo.star_guest_user"}}"{{end}}>
|
|
<button type="submit" class="ui compact small basic button"{{if not $.IsSigned}} disabled{{end}}>
|
|
{{if $.IsStaringRepo}}{{svg "octicon-star-fill"}}{{$.locale.Tr "repo.unstar"}}{{else}}{{svg "octicon-star"}}{{$.locale.Tr "repo.star"}}{{end}}
|
|
</button>
|
|
<a class="ui basic label" href="{{.Link}}/stars">
|
|
{{CountFmt .NumStars}}
|
|
</a>
|
|
</div>
|
|
</form>
|
|
{{end}}
|
|
{{if and (not .IsEmpty) ($.Permission.CanRead $.UnitTypeCode)}}
|
|
<div class="ui labeled button
|
|
{{if or (not $.IsSigned) (and (not $.CanSignedUserFork) (eq (len $.UserAndOrgForks) 0))}}
|
|
disabled
|
|
{{end}}"
|
|
{{if not $.IsSigned}}
|
|
data-tooltip-content="{{$.locale.Tr "repo.fork_guest_user"}}"
|
|
{{else if and (not $.CanSignedUserFork) (eq (len $.UserAndOrgForks) 0)}}
|
|
data-tooltip-content="{{$.locale.Tr "repo.fork_from_self"}}"
|
|
{{end}}
|
|
>
|
|
<a class="ui compact{{if $.ShowForkModal}} show-modal{{end}} small basic button"
|
|
{{if not $.CanSignedUserFork}}
|
|
{{if gt (len $.UserAndOrgForks) 1}}
|
|
data-modal="#fork-repo-modal"
|
|
{{else if eq (len $.UserAndOrgForks) 1}}
|
|
href="{{AppSubUrl}}/{{(index $.UserAndOrgForks 0).FullName}}"
|
|
{{/*else is not required here, because the button shouldn't link to any site if you can't create a fork*/}}
|
|
{{end}}
|
|
{{else if eq (len $.UserAndOrgForks) 0}}
|
|
href="{{AppSubUrl}}/repo/fork/{{.ID}}"
|
|
{{else}}
|
|
data-modal="#fork-repo-modal"
|
|
{{end}}
|
|
>
|
|
{{svg "octicon-repo-forked"}}{{$.locale.Tr "repo.fork"}}
|
|
</a>
|
|
<div class="ui small modal" id="fork-repo-modal">
|
|
<div class="header">
|
|
{{$.locale.Tr "repo.already_forked" .Name}}
|
|
</div>
|
|
<div class="content gt-tl">
|
|
<div class="ui list">
|
|
{{range $.UserAndOrgForks}}
|
|
<div class="ui item gt-py-3">
|
|
<a href="{{.Link}}">
|
|
{{svg "octicon-repo-forked" 16 "gt-mr-3"}}{{.FullName}}
|
|
</a>
|
|
</div>
|
|
{{end}}
|
|
</div>
|
|
{{if $.CanSignedUserFork}}
|
|
<div class="ui divider"></div>
|
|
<a href="{{AppSubUrl}}/repo/fork/{{.ID}}">
|
|
{{$.locale.Tr "repo.fork_to_different_account"}}
|
|
</a>
|
|
{{end}}
|
|
</div>
|
|
</div>
|
|
<a class="ui basic label" href="{{.Link}}/forks">
|
|
{{CountFmt .NumForks}}
|
|
</a>
|
|
</div>
|
|
{{end}}
|
|
</div>
|
|
{{end}}
|
|
</div><!-- end grid -->
|
|
</div><!-- end container -->
|
|
{{end}}
|
|
<div class="ui tabs container">
|
|
{{if not (or .Repository.IsBeingCreated .Repository.IsBroken)}}
|
|
<div class="ui tabular menu navbar gt-overflow-x-auto gt-overflow-y-hidden">
|
|
{{if .Permission.CanRead $.UnitTypeCode}}
|
|
<a class="{{if .PageIsViewCode}}active {{end}}item" href="{{.RepoLink}}{{if (ne .BranchName .Repository.DefaultBranch)}}/src/{{.BranchNameSubURL}}{{end}}">
|
|
{{svg "octicon-code"}} {{.locale.Tr "repo.code"}}
|
|
</a>
|
|
{{end}}
|
|
|
|
{{if .Permission.CanRead $.UnitTypeIssues}}
|
|
<a class="{{if .PageIsIssueList}}active {{end}}item" href="{{.RepoLink}}/issues">
|
|
{{svg "octicon-issue-opened"}} {{.locale.Tr "repo.issues"}}
|
|
{{if .Repository.NumOpenIssues}}
|
|
<span class="ui small label">{{CountFmt .Repository.NumOpenIssues}}</span>
|
|
{{end}}
|
|
</a>
|
|
{{end}}
|
|
|
|
{{if .Permission.CanRead $.UnitTypeExternalTracker}}
|
|
<a class="{{if .PageIsIssueList}}active {{end}}item" href="{{.RepoExternalIssuesLink}}" target="_blank" rel="noopener noreferrer">
|
|
{{svg "octicon-link-external"}} {{.locale.Tr "repo.issues"}}
|
|
</a>
|
|
{{end}}
|
|
|
|
{{if and .Repository.CanEnablePulls (.Permission.CanRead $.UnitTypePullRequests)}}
|
|
<a class="{{if .PageIsPullList}}active {{end}}item" href="{{.RepoLink}}/pulls">
|
|
{{svg "octicon-git-pull-request"}} {{.locale.Tr "repo.pulls"}}
|
|
{{if .Repository.NumOpenPulls}}
|
|
<span class="ui small label">{{CountFmt .Repository.NumOpenPulls}}</span>
|
|
{{end}}
|
|
</a>
|
|
{{end}}
|
|
|
|
{{if and .EnableActions (not .UnitActionsGlobalDisabled) (.Permission.CanRead $.UnitTypeActions)}}
|
|
<a class="{{if .PageIsActions}}active {{end}}item" href="{{.RepoLink}}/actions">
|
|
{{svg "octicon-play"}} {{.locale.Tr "actions.actions"}}
|
|
{{if .Repository.NumOpenActionRuns}}
|
|
<span class="ui small label">{{CountFmt .Repository.NumOpenActionRuns}}</span>
|
|
{{end}}
|
|
</a>
|
|
{{end}}
|
|
|
|
{{if .Permission.CanRead $.UnitTypePackages}}
|
|
<a href="{{.RepoLink}}/packages" class="{{if .IsPackagesPage}}active {{end}}item">
|
|
{{svg "octicon-package"}} {{.locale.Tr "packages.title"}}
|
|
</a>
|
|
{{end}}
|
|
|
|
{{if and (not .UnitProjectsGlobalDisabled) (.Permission.CanRead $.UnitTypeProjects)}}
|
|
<a href="{{.RepoLink}}/projects" class="{{if .IsProjectsPage}}active {{end}}item">
|
|
{{svg "octicon-project"}} {{.locale.Tr "repo.project_board"}}
|
|
{{if .Repository.NumOpenProjects}}
|
|
<span class="ui small label">{{CountFmt .Repository.NumOpenProjects}}</span>
|
|
{{end}}
|
|
</a>
|
|
{{end}}
|
|
|
|
{{if and (.Permission.CanRead $.UnitTypeReleases) (not .IsEmptyRepo)}}
|
|
<a class="{{if .PageIsReleaseList}}active {{end}}item" href="{{.RepoLink}}/releases">
|
|
{{svg "octicon-tag"}} {{.locale.Tr "repo.releases"}}
|
|
{{if .NumReleases}}
|
|
<span class="ui small label">{{CountFmt .NumReleases}}</span>
|
|
{{end}}
|
|
</a>
|
|
{{end}}
|
|
|
|
{{if .Permission.CanRead $.UnitTypeWiki}}
|
|
<a class="{{if .PageIsWiki}}active {{end}}item" href="{{.RepoLink}}/wiki">
|
|
{{svg "octicon-book"}} {{.locale.Tr "repo.wiki"}}
|
|
</a>
|
|
{{end}}
|
|
|
|
{{if .Permission.CanRead $.UnitTypeExternalWiki}}
|
|
<a class="item" href="{{(.Repository.MustGetUnit $.Context $.UnitTypeExternalWiki).ExternalWikiConfig.ExternalWikiURL}}" target="_blank" rel="noopener noreferrer">
|
|
{{svg "octicon-link-external"}} {{.locale.Tr "repo.wiki"}}
|
|
</a>
|
|
{{end}}
|
|
|
|
{{if and (.Permission.CanReadAny $.UnitTypePullRequests $.UnitTypeIssues $.UnitTypeReleases) (not .IsEmptyRepo)}}
|
|
<a class="{{if .PageIsActivity}}active {{end}}item" href="{{.RepoLink}}/activity">
|
|
{{svg "octicon-pulse"}} {{.locale.Tr "repo.activity"}}
|
|
</a>
|
|
{{end}}
|
|
|
|
{{template "custom/extra_tabs" .}}
|
|
|
|
{{if .Permission.IsAdmin}}
|
|
<a class="{{if .PageIsRepoSettings}}active {{end}}right item" href="{{.RepoLink}}/settings">
|
|
{{svg "octicon-tools"}} {{.locale.Tr "repo.settings"}}
|
|
</a>
|
|
{{end}}
|
|
</div>
|
|
{{else if .Permission.IsAdmin}}
|
|
<div class="ui tabular menu navbar gt-overflow-x-auto gt-overflow-y-hidden">
|
|
<a class="{{if .PageIsRepoSettings}}active {{end}}right item" href="{{.RepoLink}}/settings">
|
|
{{svg "octicon-tools"}} {{.locale.Tr "repo.settings"}}
|
|
</a>
|
|
</div>
|
|
{{end}}
|
|
</div>
|
|
<div class="ui tabs divider"></div>
|
|
</div>
|