gitcat
1{{define "content"}}
2<section class="hero">
3 <div class="hero-main">
4 <span class="eyebrow">工作室自建 Git 服务</span>
5 <h1>工作室的代码<br>都在这台服务器上</h1>
6 <p class="lead">所有项目对访客可见,登录成员可以推送代码。每一次推送都会记录是谁、改了什么,并由 AI 自动生成「What's New」。</p>
7 <div class="hero-actions">
8 {{if .User}}
9 <a class="btn btn-primary btn-lg" href="/new">新建项目</a>
10 <a class="btn btn-ghost btn-lg" href="/settings">账号设置</a>
11 {{else}}
12 <a class="btn btn-primary btn-lg" href="/login">登录并参与协作</a>
13 {{end}}
14 </div>
15 </div>
16 <div class="hero-stats">
17 <div class="stat"><strong>{{num .Data.StatRepos}}</strong><span>个项目</span></div>
18 <div class="stat"><strong>{{num .Data.StatUsers}}</strong><span>位成员</span></div>
19 <div class="stat"><strong>{{num .Data.StatPushes}}</strong><span>次推送留痕</span></div>
20 </div>
21</section>
22
23{{if .Data.Announcement}}
24<div class="announce">
25 <span class="announce-tag">公告</span>
26 <span>{{.Data.Announcement}}</span>
27</div>
28{{end}}
29
30<div class="home-grid">
31 <section class="col-main">
32 <div class="section-head">
33 <h2>{{if .Data.Query}}搜索「{{.Data.Query}}」{{else}}全部项目{{end}}</h2>
34 {{if .Data.Query}}<a class="quiet" href="/">清除搜索</a>{{end}}
35 </div>
36 {{if .Data.HasRepos}}
37 <div class="repo-cards">
38 {{range .Data.Repos}}
39 <a class="repo-card" href="/{{.Name}}">
40 <div class="repo-card-top">
41 <span class="repo-icon" aria-hidden="true">
42 <svg viewBox="0 0 24 24" width="16" height="16" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round"><path d="M4 5.5A1.5 1.5 0 0 1 5.5 4H9l1.5 2H18a1.5 1.5 0 0 1 1.5 1.5v9A1.5 1.5 0 0 1 18 18H5.5A1.5 1.5 0 0 1 4 16.5z"/></svg>
43 </span>
44 <span class="repo-name">{{.Name}}</span>
45 {{if .IsArchived}}<span class="tag tag-warn">已归档</span>{{end}}
46 </div>
47 {{if .Description}}<p class="repo-desc">{{.Description}}</p>{{else}}<p class="repo-desc muted">暂无项目描述</p>{{end}}
48 {{if .LastWhatsNew}}
49 <div class="repo-new">
50 <span class="whats-tag">What's New</span>
51 <span class="whats-line">{{oneline .LastWhatsNew}}</span>
52 </div>
53 {{end}}
54 <div class="repo-card-foot">
55 <span class="muted">{{if .OwnerName}}@{{.OwnerName}}{{else}}工作室{{end}}</span>
56 <span class="dot">·</span>
57 <span class="muted">{{timeago .LastPushAt}}</span>
58 <span class="dot">·</span>
59 <span class="muted">{{.PushCount}} 次推送</span>
60 </div>
61 </a>
62 {{end}}
63 </div>
64 {{else}}
65 <div class="card empty">
66 <h3>{{if .Data.Query}}没有找到匹配的项目{{else}}还没有任何项目{{end}}</h3>
67 <p class="muted">{{if .Data.Query}}换个关键词试试。{{else}}创建第一个项目,然后把本地代码推上来吧。{{end}}</p>
68 {{if and .User (not .Data.Query)}}<a class="btn btn-primary" href="/new">新建项目</a>{{end}}
69 </div>
70 {{end}}
71 </section>
72
73 <aside class="col-side">
74 <h3 class="side-title">最新动态</h3>
75 {{if .Data.RecentPushes}}
76 <ul class="feed">
77 {{range .Data.RecentPushes}}
78 <li class="feed-item">
79 {{$pu := index $.Data.PushActors .ActorUsername}}
80 {{if $pu}}{{template "av" (dict "U" $pu "S" 26)}}{{else}}{{template "avin" (dict "N" .ActorDisplay "S" 26)}}{{end}}
81 <div class="feed-body">
82 <div class="feed-line">
83 <strong>{{.ActorDisplay}}</strong>
84 <span class="muted">推送了 {{.CommitCount}} 个提交到</span>
85 <a class="quiet" href="/{{.RepoName}}">{{.RepoName}}</a>
86 </div>
87 <div class="feed-sub muted">{{timeago .CreatedAt}}{{if .WhatsNew}} · {{oneline .WhatsNew}}{{end}}</div>
88 </div>
89 </li>
90 {{end}}
91 </ul>
92 {{else}}
93 <div class="card empty small"><p class="muted">还没有推送记录,等待第一条更新。</p></div>
94 {{end}}
95 </aside>
96</div>
97{{end}}