components.html
·
146 строк
·
6.8 KB
| 1 | {{define "ui_button"}} |
| 2 | <button |
| 3 | type="{{if .Type}}{{.Type}}{{else}}button{{end}}" |
| 4 | class="btn {{if .Variant}}btn-{{.Variant}}{{else}}btn-default{{end}} {{if .Size}}btn-{{.Size}}{{end}} {{.Class}}" |
| 5 | {{if .ID}}id="{{.ID}}"{{end}} |
| 6 | {{if .Disabled}}disabled{{end}}> |
| 7 | {{if .Icon}}{{icon .Icon "size-4"}}{{end}} |
| 8 | {{if .Label}}<span>{{.Label}}</span>{{end}} |
| 9 | </button> |
| 10 | {{end}} |
| 11 | |
| 12 | {{define "ui_badge"}} |
| 13 | <span class="badge {{if .Variant}}badge-{{.Variant}}{{end}}"> |
| 14 | {{if .Icon}}{{icon .Icon "size-3.5"}}{{end}} |
| 15 | <span>{{.Text}}</span> |
| 16 | </span> |
| 17 | {{end}} |
| 18 | |
| 19 | {{define "ui_kbd"}} |
| 20 | <kbd class="kbd">{{.}}</kbd> |
| 21 | {{end}} |
| 22 | |
| 23 | {{define "ui_avatar"}} |
| 24 | {{if .Large}}{{avatar .Username .AvatarURL "avatar-lg"}}{{else}}{{avatar .Username .AvatarURL}}{{end}} |
| 25 | {{end}} |
| 26 | |
| 27 | {{define "ui_empty_state"}} |
| 28 | <div class="empty-state"> |
| 29 | {{if .Icon}} |
| 30 | <div class="mb-2" style="color:hsl(var(--muted-foreground));">{{icon .Icon "size-6"}}</div> |
| 31 | {{end}} |
| 32 | <div class="font-semibold text-base" style="color:hsl(var(--foreground));">{{.Title}}</div> |
| 33 | {{if .Subtitle}}<div class="text-sm text-muted mt-1">{{.Subtitle}}</div>{{end}} |
| 34 | {{if .ActionHref}} |
| 35 | <div class="mt-4"> |
| 36 | <a href="{{.ActionHref}}" class="btn btn-primary btn-sm"> |
| 37 | {{if .ActionIcon}}{{icon .ActionIcon "size-3.5"}}{{end}} |
| 38 | <span>{{.ActionLabel}}</span> |
| 39 | </a> |
| 40 | </div> |
| 41 | {{end}} |
| 42 | </div> |
| 43 | {{end}} |
| 44 | |
| 45 | {{define "repo_header"}} |
| 46 | <div class="repo-banner mb-3{{if .Repo.ForkedFromRepoID}} has-subrow{{end}}"> |
| 47 | <div class="repo-banner-main"> |
| 48 | <a href="/{{.Repo.OwnerUsername}}" class="repo-avatar-link">{{avatar .Repo.OwnerUsername (or .Repo.AvatarURL .Repo.OwnerAvatarURL) "repo-avatar"}}</a> |
| 49 | <div class="min-w-0 repo-head-block"> |
| 50 | <div class="repo-head-row"> |
| 51 | <nav class="breadcrumb" aria-label="Repository breadcrumb"> |
| 52 | <a href="/{{.Repo.OwnerUsername}}" class="text-sm font-medium text-muted">{{.Repo.OwnerUsername}}</a> |
| 53 | <span class="breadcrumb-sep">/</span> |
| 54 | <a href="/{{.Repo.OwnerUsername}}/{{.Repo.Name}}" class="font-semibold text-lg tracking-tight" style="color:hsl(var(--foreground));">{{.Repo.Name}}</a> |
| 55 | </nav> |
| 56 | {{if .Repo.IsPrivate}} |
| 57 | <span class="badge badge-outline">{{icon "lock" "size-3.5"}} {{t .Lang "repo.private"}}</span> |
| 58 | {{else}} |
| 59 | <span class="badge badge-outline">{{icon "globe" "size-3.5"}} {{t .Lang "repo.public"}}</span> |
| 60 | {{end}} |
| 61 | {{if .Repo.Description}} |
| 62 | <span class="repo-desc" data-repo-desc>{{.Repo.Description}}</span> |
| 63 | {{end}} |
| 64 | </div> |
| 65 | {{if .Repo.ForkedFromRepoID}} |
| 66 | <div class="text-xs text-muted mt-1 flex items-center gap-2 flex-wrap"> |
| 67 | <span class="flex items-center gap-1.5"> |
| 68 | {{icon "git-branch" "size-3.5"}} |
| 69 | {{t .Lang "fork.forked_from"}} |
| 70 | <a class="font-medium" style="color:hsl(var(--foreground));" href="/{{.Repo.ForkedFromOwner}}/{{.Repo.ForkedFromName}}">{{.Repo.ForkedFromOwner}}/{{.Repo.ForkedFromName}}</a> |
| 71 | </span> |
| 72 | </div> |
| 73 | {{end}} |
| 74 | </div> |
| 75 | </div> |
| 76 | |
| 77 | {{if .CurrentUser}} |
| 78 | <div class="repo-banner-actions"> |
| 79 | {{if .IsRepoOwner}} |
| 80 | <a class="btn btn-ghost btn-sm" href="/{{.Repo.OwnerUsername}}/{{.Repo.Name}}/forks" title="{{t .Lang "fork.forks_btn"}}">{{icon "git-branch" "size-3.5"}}<span class="hidden md-flex">{{if gt .Repo.ForkCount 0}}{{.Repo.ForkCount}} {{end}}{{t .Lang "fork.forks_btn"}}</span></a> |
| 81 | {{else if .ViewerFork}} |
| 82 | <a class="btn btn-ghost btn-sm" href="/{{.ViewerFork.OwnerUsername}}/{{.ViewerFork.Name}}" title="{{t .Lang "fork.your_fork_desc"}}">{{icon "git-branch" "size-3.5"}}<span class="hidden md-flex">{{t .Lang "fork.your_fork"}}</span></a> |
| 83 | {{else}} |
| 84 | <form method="post" action="/{{.Repo.OwnerUsername}}/{{.Repo.Name}}/fork" style="margin:0;"> |
| 85 | <input type="hidden" name="_csrf" value="{{.CSRFToken}}"> |
| 86 | <button class="btn btn-ghost btn-sm" type="submit" title="{{t .Lang "fork.fork_btn_desc"}}">{{icon "git-branch" "size-3.5"}}<span class="hidden md-flex">{{t .Lang "fork.fork_btn"}}</span></button> |
| 87 | </form> |
| 88 | {{end}} |
| 89 | {{if .Repo.EnableIssues}} |
| 90 | <a class="btn btn-ghost btn-sm" href="/{{.Repo.OwnerUsername}}/{{.Repo.Name}}/issues/new" title="{{t .Lang "issues.new"}}">{{icon "issue" "size-3.5"}}<span class="hidden md-flex">{{t .Lang "issues.new"}}</span></a> |
| 91 | {{end}} |
| 92 | {{if .Repo.EnablePulls}} |
| 93 | <a class="btn btn-ghost btn-sm" href="/{{.Repo.OwnerUsername}}/{{.Repo.Name}}/pulls/new" title="{{t .Lang "pulls.new"}}">{{icon "git-pull-request" "size-3.5"}}<span class="hidden md-flex">{{t .Lang "pulls.new"}}</span></a> |
| 94 | {{end}} |
| 95 | </div> |
| 96 | {{end}} |
| 97 | </div> |
| 98 | |
| 99 | |
| 100 | <div class="tabs-nav" role="tablist"> |
| 101 | <a href="/{{.Repo.OwnerUsername}}/{{.Repo.Name}}" class="tab-link {{if eq .ActiveTab "code"}}active{{end}}" role="tab"> |
| 102 | {{icon "code" "size-4"}} |
| 103 | <span>{{t .Lang "repo.tab.code"}}</span> |
| 104 | </a> |
| 105 | {{if .Repo.EnableIssues}} |
| 106 | <a href="/{{.Repo.OwnerUsername}}/{{.Repo.Name}}/issues" class="tab-link {{if eq .ActiveTab "issues"}}active{{end}}" role="tab"> |
| 107 | {{icon "issue" "size-4"}} |
| 108 | <span>{{t .Lang "repo.tab.issues"}}</span> |
| 109 | {{if gt .Repo.OpenIssueCount 0}} |
| 110 | <span class="badge" style="padding:0 0.35rem;font-size:0.68rem;">{{.Repo.OpenIssueCount}}</span> |
| 111 | {{end}} |
| 112 | </a> |
| 113 | {{end}} |
| 114 | {{if .Repo.EnablePulls}} |
| 115 | <a href="/{{.Repo.OwnerUsername}}/{{.Repo.Name}}/pulls" class="tab-link {{if eq .ActiveTab "pulls"}}active{{end}}" role="tab"> |
| 116 | {{icon "git-pull-request" "size-4"}} |
| 117 | <span>{{t .Lang "repo.tab.pulls"}}</span> |
| 118 | {{if gt .Repo.OpenPRCount 0}} |
| 119 | <span class="badge" style="padding:0 0.35rem;font-size:0.68rem;">{{.Repo.OpenPRCount}}</span> |
| 120 | {{end}} |
| 121 | </a> |
| 122 | {{end}} |
| 123 | {{if .Repo.EnableReleases}} |
| 124 | <a href="/{{.Repo.OwnerUsername}}/{{.Repo.Name}}/releases" class="tab-link {{if eq .ActiveTab "releases"}}active{{end}}" role="tab"> |
| 125 | {{icon "tag" "size-4"}} |
| 126 | <span>{{t .Lang "repo.tab.releases"}}</span> |
| 127 | {{if gt .Repo.ReleaseCount 0}} |
| 128 | <span class="badge" style="padding:0 0.35rem;font-size:0.68rem;">{{.Repo.ReleaseCount}}</span> |
| 129 | {{end}} |
| 130 | </a> |
| 131 | {{end}} |
| 132 | {{if .Repo.EnableActivity}} |
| 133 | <a href="/{{.Repo.OwnerUsername}}/{{.Repo.Name}}/activity" class="tab-link {{if eq .ActiveTab "activity"}}active{{end}}" role="tab"> |
| 134 | {{icon "activity" "size-4"}} |
| 135 | <span>{{t .Lang "repo.tab.activity"}}</span> |
| 136 | </a> |
| 137 | {{end}} |
| 138 | {{if .CanWrite}} |
| 139 | <a href="/{{.Repo.OwnerUsername}}/{{.Repo.Name}}/settings" class="tab-link {{if eq .ActiveTab "settings"}}active{{end}}" role="tab"> |
| 140 | {{icon "settings" "size-4"}} |
| 141 | <span>{{t .Lang "repo.tab.settings"}}</span> |
| 142 | </a> |
| 143 | {{end}} |
| 144 | </div> |
| 145 | {{end}} |
| 146 |