rin
Публичный Open-source lightweight git hosting.
releases.html · 112 строк · 5.7 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 <form method="post" action="/{{$.Repo.OwnerUsername}}/{{$.Repo.Name}}/releases/{{.ID}}/delete" onsubmit="return confirm('{{t $.Lang "releases.delete_confirm"}}');" style="margin:0;">
50 <input type="hidden" name="_csrf" value="{{$.CSRFToken}}">
51 <button type="submit" class="btn btn-ghost btn-icon text-muted" style="width:1.8rem;height:1.8rem;" title="{{t $.Lang "releases.delete"}}">
52 {{icon "trash" "size-3.5"}}
53 </button>
54 </form>
55 {{end}}
56 </div>
57 </div>
58
59 <div class="card-body markdown-body">
60 {{if .BodyHTML}}
61 {{.BodyHTML}}
62 {{else}}
63 <span class="text-xs text-muted">—</span>
64 {{end}}
65 </div>
66
67 <!-- Release Assets: uploaded files + generated source archives -->
68 <div class="card-body" style="border-top:1px solid hsl(var(--border));padding:0.6rem 0.9rem;background:hsl(var(--muted)/0.15);">
69 <div class="text-xs font-semibold text-muted uppercase mb-2" style="letter-spacing:0.04em;">{{t $.Lang "releases.assets"}}</div>
70 <div class="flex flex-col gap-1.5">
71 {{range .Assets}}
72 <div class="flex items-center justify-between gap-3">
73 <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));">
74 {{icon "file" "size-3.5"}}
75 <span class="truncate">{{.Filename}}</span>
76 </a>
77 <div class="flex items-center gap-2 flex-shrink-0">
78 <span class="text-xs text-muted">{{formatSize .Size}}</span>
79 {{if $.CanWrite}}
80 <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;">
81 <input type="hidden" name="_csrf" value="{{$.CSRFToken}}">
82 <button type="submit" class="btn btn-ghost btn-icon text-muted" style="width:1.6rem;height:1.6rem;" title="{{t $.Lang "releases.asset_delete"}}">
83 {{icon "trash" "size-3"}}
84 </button>
85 </form>
86 {{end}}
87 </div>
88 </div>
89 {{end}}
90
91 <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));">
92 {{icon "download" "size-3.5"}}
93 <span>{{t $.Lang "releases.source_zip"}}</span>
94 </a>
95 <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));">
96 {{icon "download" "size-3.5"}}
97 <span>{{t $.Lang "releases.source_tar"}}</span>
98 </a>
99 </div>
100 </div>
101 </article>
102 {{end}}
103 </div>
104 {{else}}
105 {{if .CanWrite}}
106 {{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")}}
107 {{else}}
108 {{template "ui_empty_state" (dict "Icon" "tag" "Title" (t .Lang "releases.empty"))}}
109 {{end}}
110 {{end}}
111 </div>
112 {{end}}