rin
Публичный Open-source lightweight git hosting.
releases.html · 115 строк · 6.0 KB
Raw
1 {{define "content"}}
2 <div class="container">
3 {{template "repo_header" .}}
4
5 <div class="flex items-center justify-between flex-wrap gap-2 mb-4">
6 <div class="flex items-center gap-2 text-sm text-muted">
7 <span class="font-medium text-foreground">{{len .Releases}}</span>
8 <span>{{pluralT .Lang (len .Releases) "releases.count"}}</span>
9 <span>·</span>
10 <span class="font-medium text-foreground">{{.TagCount}}</span>
11 <span>{{pluralT .Lang .TagCount "releases.tags"}}</span>
12 </div>
13
14 {{if .CanWrite}}
15 <a href="/{{.Repo.OwnerUsername}}/{{.Repo.Name}}/releases/new" class="btn btn-primary btn-sm">
16 {{icon "plus" "size-3.5"}}
17 <span>{{t .Lang "releases.new"}}</span>
18 </a>
19 {{end}}
20 </div>
21
22 {{if .Releases}}
23 <div class="flex flex-col gap-6">
24 {{range .Releases}}
25 {{$rel := .}}
26 <article class="card" id="{{.TagName}}">
27 <div class="card-header flex items-center justify-between flex-wrap gap-2">
28 <div class="flex items-center gap-2.5 flex-wrap min-w-0">
29 <h2 class="text-base font-bold" style="margin:0;">{{.Title}}</h2>
30 <a href="/{{$.Repo.OwnerUsername}}/{{$.Repo.Name}}/tree/{{.TagName}}" class="badge badge-primary font-mono text-xs flex items-center gap-1">
31 {{icon "tag" "size-3"}}
32 <span>{{.TagName}}</span>
33 </a>
34 {{if .IsPrerelease}}
35 <span class="badge badge-outline text-xs" style="color:hsl(var(--warning-fg, 38 92% 50%));border-color:currentColor;">
36 {{t $.Lang "releases.prerelease"}}
37 </span>
38 {{end}}
39 </div>
40
41 <div class="flex items-center gap-2 text-xs text-muted flex-shrink-0">
42 <div class="flex items-center gap-1.5">
43 {{avatar .AuthorUsername .AuthorAvatar}}
44 <a href="/{{.AuthorUsername}}" class="font-medium text-foreground">@{{.AuthorUsername}}</a>
45 <span>·</span>
46 <span>{{formatDate .PublishedAt}}</span>
47 </div>
48 {{if $.CanWrite}}
49 <a href="/{{$.Repo.OwnerUsername}}/{{$.Repo.Name}}/releases/{{.ID}}/edit" class="btn btn-ghost btn-icon text-muted" style="width:1.8rem;height:1.8rem;" title="{{t $.Lang "releases.edit"}}">
50 {{icon "edit" "size-3.5"}}
51 </a>
52 <form method="post" action="/{{$.Repo.OwnerUsername}}/{{$.Repo.Name}}/releases/{{.ID}}/delete" onsubmit="return confirm('{{t $.Lang "releases.delete_confirm"}}');" style="margin:0;">
53 <input type="hidden" name="_csrf" value="{{$.CSRFToken}}">
54 <button type="submit" class="btn btn-ghost btn-icon text-muted" style="width:1.8rem;height:1.8rem;" title="{{t $.Lang "releases.delete"}}">
55 {{icon "trash" "size-3.5"}}
56 </button>
57 </form>
58 {{end}}
59 </div>
60 </div>
61
62 <div class="card-body markdown-body">
63 {{if .BodyHTML}}
64 {{.BodyHTML}}
65 {{else}}
66 <span class="text-xs text-muted">—</span>
67 {{end}}
68 </div>
69
70 <!-- Release Assets: uploaded files + generated source archives -->
71 <div class="card-body" style="border-top:1px solid hsl(var(--border));padding:0.6rem 0.9rem;background:hsl(var(--muted));">
72 <div class="text-xs font-semibold text-muted uppercase mb-2" style="letter-spacing:0.04em;">{{t $.Lang "releases.assets"}}</div>
73 <div class="flex flex-col gap-1.5">
74 {{range .Assets}}
75 <div class="flex items-center justify-between gap-3">
76 <a href="/{{$.Repo.OwnerUsername}}/{{$.Repo.Name}}/releases/{{$rel.ID}}/assets/{{.ID}}/download" class="flex items-center gap-2 text-xs font-mono font-medium hover:underline min-w-0" style="color:hsl(var(--primary));">
77 {{icon "file" "size-3.5"}}
78 <span class="truncate">{{.Filename}}</span>
79 </a>
80 <div class="flex items-center gap-2 flex-shrink-0">
81 <span class="text-xs text-muted">{{formatSize .Size}}</span>
82 {{if $.CanWrite}}
83 <form method="post" action="/{{$.Repo.OwnerUsername}}/{{$.Repo.Name}}/releases/{{$rel.ID}}/assets/{{.ID}}/delete" onsubmit="return confirm('{{t $.Lang "releases.asset_delete_confirm"}}');" style="margin:0;">
84 <input type="hidden" name="_csrf" value="{{$.CSRFToken}}">
85 <button type="submit" class="btn btn-ghost btn-icon text-muted" style="width:1.6rem;height:1.6rem;" title="{{t $.Lang "releases.asset_delete"}}">
86 {{icon "trash" "size-3"}}
87 </button>
88 </form>
89 {{end}}
90 </div>
91 </div>
92 {{end}}
93
94 <a href="/{{$.Repo.OwnerUsername}}/{{$.Repo.Name}}/archive/{{.TagName}}.zip" class="flex items-center gap-2 text-xs font-mono font-medium hover:underline" style="color:hsl(var(--primary));">
95 {{icon "download" "size-3.5"}}
96 <span>{{t $.Lang "releases.source_zip"}}</span>
97 </a>
98 <a href="/{{$.Repo.OwnerUsername}}/{{$.Repo.Name}}/archive/{{.TagName}}.tar.gz" class="flex items-center gap-2 text-xs font-mono font-medium hover:underline" style="color:hsl(var(--primary));">
99 {{icon "download" "size-3.5"}}
100 <span>{{t $.Lang "releases.source_tar"}}</span>
101 </a>
102 </div>
103 </div>
104 </article>
105 {{end}}
106 </div>
107 {{else}}
108 {{if .CanWrite}}
109 {{template "ui_empty_state" (dict "Icon" "tag" "Title" (t .Lang "releases.empty") "ActionHref" (printf "/%s/%s/releases/new" .Repo.OwnerUsername .Repo.Name) "ActionLabel" (t .Lang "releases.new") "ActionIcon" "plus")}}
110 {{else}}
111 {{template "ui_empty_state" (dict "Icon" "tag" "Title" (t .Lang "releases.empty"))}}
112 {{end}}
113 {{end}}
114 </div>
115 {{end}}