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).
205 lines
8.6 KiB
Handlebars
205 lines
8.6 KiB
Handlebars
{{$notificationUnreadCount := 0}}
|
|
{{if and .IsSigned .NotificationUnreadCount}}
|
|
{{$notificationUnreadCount = call .NotificationUnreadCount}}
|
|
{{end}}
|
|
|
|
<nav id="navbar" class="ui secondary stackable menu" aria-label="{{.locale.Tr "aria.navbar"}}">
|
|
<div class="item">
|
|
<!-- the logo -->
|
|
<a href="{{AppSubUrl}}/" aria-label="{{if .IsSigned}}{{.locale.Tr "dashboard"}}{{else}}{{.locale.Tr "home"}}{{end}}">
|
|
<img width="30" height="30" src="{{AssetUrlPrefix}}/img/logo.svg" alt="{{.locale.Tr "logo"}}" aria-hidden="true">
|
|
</a>
|
|
|
|
<!-- mobile right menu, it must be here because in mobile view, each item is a flex column, the first item is a full row column -->
|
|
<div class="ui secondary menu navbar-mobile-right gt-gap-2">
|
|
{{if .IsSigned}}
|
|
<a class="item gt-mx-0 gt-p-3" href="{{AppSubUrl}}/notifications" data-tooltip-content="{{.locale.Tr "notifications"}}" aria-label="{{.locale.Tr "notifications"}}">
|
|
<div class="gt-relative">
|
|
{{svg "octicon-bell"}}
|
|
<span class="notification_count{{if not $notificationUnreadCount}} gt-hidden{{end}}">{{$notificationUnreadCount}}</span>
|
|
</div>
|
|
</a>
|
|
{{end}}
|
|
<button class="item ui icon mini button gt-p-3 gt-m-0" id="navbar-expand-toggle">{{svg "octicon-three-bars"}}</button>
|
|
</div>
|
|
</div>
|
|
|
|
<!-- navbar links -->
|
|
{{if and .IsSigned .MustChangePassword}}
|
|
{{/* No links */}}
|
|
{{else if .IsSigned}}
|
|
{{if not .UnitIssuesGlobalDisabled}}
|
|
<a class="item{{if .PageIsIssues}} active{{end}}" href="{{AppSubUrl}}/issues">{{.locale.Tr "issues"}}</a>
|
|
{{end}}
|
|
{{if not .UnitPullsGlobalDisabled}}
|
|
<a class="item{{if .PageIsPulls}} active{{end}}" href="{{AppSubUrl}}/pulls">{{.locale.Tr "pull_requests"}}</a>
|
|
{{end}}
|
|
{{if not (and .UnitIssuesGlobalDisabled .UnitPullsGlobalDisabled)}}
|
|
{{if .ShowMilestonesDashboardPage}}
|
|
<a class="item{{if .PageIsMilestonesDashboard}} active{{end}}" href="{{AppSubUrl}}/milestones">{{.locale.Tr "milestones"}}</a>
|
|
{{end}}
|
|
{{end}}
|
|
<a class="item{{if .PageIsExplore}} active{{end}}" href="{{AppSubUrl}}/explore/repos">{{.locale.Tr "explore"}}</a>
|
|
{{else if .IsLandingPageOrganizations}}
|
|
<a class="item{{if .PageIsExplore}} active{{end}}" href="{{AppSubUrl}}/explore/organizations">{{.locale.Tr "explore"}}</a>
|
|
{{else}}
|
|
<a class="item{{if .PageIsExplore}} active{{end}}" href="{{AppSubUrl}}/explore/repos">{{.locale.Tr "explore"}}</a>
|
|
{{end}}
|
|
|
|
{{template "custom/extra_links" .}}
|
|
|
|
{{if not .IsSigned}}
|
|
<a class="item" target="_blank" rel="noopener noreferrer" href="https://docs.gitea.io">{{.locale.Tr "help"}}</a>
|
|
{{end}}
|
|
|
|
<!-- the full dropdown menus -->
|
|
<div class="right menu">
|
|
{{if and .IsSigned .MustChangePassword}}
|
|
<div class="ui dropdown jump item" data-tooltip-content="{{.locale.Tr "user_profile_and_more"}}">
|
|
<span class="text gt-df gt-ac">
|
|
{{avatar $.Context .SignedUser 24 "gt-mr-2"}}
|
|
<span class="mobile-only gt-ml-2">{{.SignedUser.Name}}</span>
|
|
<span class="not-mobile">{{svg "octicon-triangle-down"}}</span>
|
|
</span>
|
|
<div class="menu user-menu">
|
|
<div class="ui header">
|
|
{{.locale.Tr "signed_in_as"}} <strong>{{.SignedUser.Name}}</strong>
|
|
</div>
|
|
|
|
<div class="divider"></div>
|
|
<a class="item link-action" href data-url="{{AppSubUrl}}/user/logout" data-redirect="{{AppSubUrl}}/">
|
|
{{svg "octicon-sign-out"}}
|
|
{{.locale.Tr "sign_out"}}
|
|
</a>
|
|
</div><!-- end content avatar menu -->
|
|
</div><!-- end dropdown avatar menu -->
|
|
{{else if .IsSigned}}
|
|
{{if EnableTimetracking}}
|
|
<a class="active-stopwatch-trigger item ui gt-mx-0{{if not .ActiveStopwatch}} gt-hidden{{end}}" href="{{.ActiveStopwatch.IssueLink}}" title="{{.locale.Tr "active_stopwatch"}}">
|
|
<div class="gt-relative">
|
|
{{svg "octicon-stopwatch"}}
|
|
<span class="header-stopwatch-dot"></span>
|
|
</div>
|
|
<span class="mobile-only gt-ml-2">{{.locale.Tr "active_stopwatch"}}</span>
|
|
</a>
|
|
<div class="active-stopwatch-popup tippy-target gt-p-3">
|
|
<div class="gt-df gt-ac">
|
|
<a class="stopwatch-link gt-df gt-ac" href="{{.ActiveStopwatch.IssueLink}}">
|
|
{{svg "octicon-issue-opened" 16 "gt-mr-3"}}
|
|
<span class="stopwatch-issue">{{.ActiveStopwatch.RepoSlug}}#{{.ActiveStopwatch.IssueIndex}}</span>
|
|
<span class="ui primary label stopwatch-time gt-my-0 gt-mx-4" data-seconds="{{.ActiveStopwatch.Seconds}}">
|
|
{{if .ActiveStopwatch}}{{Sec2Time .ActiveStopwatch.Seconds}}{{end}}
|
|
</span>
|
|
</a>
|
|
<form class="stopwatch-commit" method="post" action="{{.ActiveStopwatch.IssueLink}}/times/stopwatch/toggle">
|
|
{{.CsrfTokenHtml}}
|
|
<button
|
|
type="submit"
|
|
class="ui button mini compact basic icon"
|
|
data-tooltip-content="{{.locale.Tr "repo.issues.stop_tracking"}}"
|
|
>{{svg "octicon-square-fill"}}</button>
|
|
</form>
|
|
<form class="stopwatch-cancel" method="post" action="{{.ActiveStopwatch.IssueLink}}/times/stopwatch/cancel">
|
|
{{.CsrfTokenHtml}}
|
|
<button
|
|
type="submit"
|
|
class="ui button mini compact basic icon"
|
|
data-tooltip-content="{{.locale.Tr "repo.issues.cancel_tracking"}}"
|
|
>{{svg "octicon-trash"}}</button>
|
|
</form>
|
|
</div>
|
|
</div>
|
|
{{end}}
|
|
|
|
<a href="{{AppSubUrl}}/notifications" class="item not-mobile gt-mx-0" data-tooltip-content="{{.locale.Tr "notifications"}}" aria-label="{{.locale.Tr "notifications"}}">
|
|
<div class="gt-relative">
|
|
{{svg "octicon-bell"}}
|
|
<span class="notification_count{{if not $notificationUnreadCount}} gt-hidden{{end}}">{{$notificationUnreadCount}}</span>
|
|
</div>
|
|
</a>
|
|
|
|
<div class="ui dropdown jump item gt-mx-0 gt-pr-3" data-tooltip-content="{{.locale.Tr "create_new"}}">
|
|
<span class="text">
|
|
{{svg "octicon-plus"}}
|
|
<span class="not-mobile">{{svg "octicon-triangle-down"}}</span>
|
|
<span class="mobile-only">{{.locale.Tr "create_new"}}</span>
|
|
</span>
|
|
<div class="menu">
|
|
<a class="item" href="{{AppSubUrl}}/repo/create">
|
|
{{svg "octicon-plus"}} {{.locale.Tr "new_repo"}}
|
|
</a>
|
|
{{if not .DisableMigrations}}
|
|
<a class="item" href="{{AppSubUrl}}/repo/migrate">
|
|
{{svg "octicon-repo-push"}} {{.locale.Tr "new_migrate"}}
|
|
</a>
|
|
{{end}}
|
|
{{if .SignedUser.CanCreateOrganization}}
|
|
<a class="item" href="{{AppSubUrl}}/org/create">
|
|
{{svg "octicon-organization"}} {{.locale.Tr "new_org"}}
|
|
</a>
|
|
{{end}}
|
|
</div><!-- end content create new menu -->
|
|
</div><!-- end dropdown menu create new -->
|
|
|
|
<div class="ui dropdown jump item gt-mx-0 gt-pr-3" data-tooltip-content="{{.locale.Tr "user_profile_and_more"}}">
|
|
<span class="text gt-df gt-ac">
|
|
{{avatar $.Context .SignedUser 24 "gt-mr-2"}}
|
|
<span class="mobile-only gt-ml-2">{{.SignedUser.Name}}</span>
|
|
<span class="not-mobile">{{svg "octicon-triangle-down"}}</span>
|
|
</span>
|
|
<div class="menu user-menu">
|
|
<div class="ui header">
|
|
{{.locale.Tr "signed_in_as"}} <strong>{{.SignedUser.Name}}</strong>
|
|
</div>
|
|
|
|
<div class="divider"></div>
|
|
<a class="item" href="{{.SignedUser.HomeLink}}">
|
|
{{svg "octicon-person"}}
|
|
{{.locale.Tr "your_profile"}}
|
|
</a>
|
|
{{if not .DisableStars}}
|
|
<a class="item" href="{{.SignedUser.HomeLink}}?tab=stars">
|
|
{{svg "octicon-star"}}
|
|
{{.locale.Tr "your_starred"}}
|
|
</a>
|
|
{{end}}
|
|
<a class="item" href="{{AppSubUrl}}/notifications/subscriptions">
|
|
{{svg "octicon-bell"}}
|
|
{{.locale.Tr "notification.subscriptions"}}
|
|
</a>
|
|
<a class="{{if .PageIsUserSettings}}active {{end}}item" href="{{AppSubUrl}}/user/settings">
|
|
{{svg "octicon-tools"}}
|
|
{{.locale.Tr "your_settings"}}
|
|
</a>
|
|
<a class="item" target="_blank" rel="noopener noreferrer" href="https://docs.gitea.io">
|
|
{{svg "octicon-question"}}
|
|
{{.locale.Tr "help"}}
|
|
</a>
|
|
{{if .IsAdmin}}
|
|
<div class="divider"></div>
|
|
|
|
<a class="{{if .PageIsAdmin}}active {{end}}item" href="{{AppSubUrl}}/admin">
|
|
{{svg "octicon-server"}}
|
|
{{.locale.Tr "admin_panel"}}
|
|
</a>
|
|
{{end}}
|
|
|
|
<div class="divider"></div>
|
|
<a class="item link-action" href data-url="{{AppSubUrl}}/user/logout" data-redirect="{{AppSubUrl}}/">
|
|
{{svg "octicon-sign-out"}}
|
|
{{.locale.Tr "sign_out"}}
|
|
</a>
|
|
</div><!-- end content avatar menu -->
|
|
</div><!-- end dropdown avatar menu -->
|
|
{{else}}
|
|
{{if .ShowRegistrationButton}}
|
|
<a class="item{{if .PageIsSignUp}} active{{end}}" href="{{AppSubUrl}}/user/sign_up">
|
|
{{svg "octicon-person"}} {{.locale.Tr "register"}}
|
|
</a>
|
|
{{end}}
|
|
<a class="item{{if .PageIsSignIn}} active{{end}}" rel="nofollow" href="{{AppSubUrl}}/user/login{{if not .PageIsSignIn}}?redirect_to={{.CurrentURL}}{{end}}">
|
|
{{svg "octicon-sign-in"}} {{.locale.Tr "sign_in"}}
|
|
</a>
|
|
{{end}}
|
|
</div><!-- end full right menu -->
|
|
</nav>
|