internal/web/templates/owner.html
133 lines · 7270 bytes
1{{define "title"}}{{.Owner}} · {{.Site}}{{end}}
2{{define "content"}}
3<section class="profilehead">
4<h1>{{.Owner}} <span class="chip chip-neutral">{{.Kind}}</span></h1>
5{{if .Profile.Description}}<p class="desc lede">{{.Profile.Description}}</p>{{end}}
6{{if .Profile.Website}}<p class="meta"><a href="{{.Profile.Website}}" rel="nofollow me">{{.Profile.Website}}</a></p>{{end}}
7{{if .Profile.Links}}<p class="meta">{{range $i, $l := .Profile.Links}}{{if $i}} · {{end}}<a href="{{$l.URL}}" rel="nofollow me">{{if $l.Label}}{{$l.Label}}{{else}}{{$l.URL}}{{end}}</a>{{end}}</p>{{end}}
8{{if .Orgs}}<p class="meta">member of {{range .Orgs}}<a class="memberchip" href="/{{.Name}}">{{.Name}}</a> {{end}}</p>{{end}}
9{{if .Members}}<p class="meta">members {{range .Members}}<a class="memberchip" href="/{{.Name}}">{{.Name}} <span class="role">{{.Role}}</span></a> {{end}}</p>{{end}}
10{{if and (eq .Kind "org") .Repos}}<p class="meta"><a href="/{{.Owner}}/-/labels">labels</a> · <a href="/{{.Owner}}/-/milestones">milestones</a></p>{{end}}
11</section>
12<h2>repositories <span class="count">{{len .Repos}}</span></h2>
13<ul class="repolist">
14{{range .Repos}}{{template "reporow" .}}
15{{else}}<li class="empty">no visible repositories</li>{{end}}
16</ul>
17{{if .AboutHTML}}<section class="readme"><div class="rendered">{{.AboutHTML}}</div></section>{{end}}
18<section class="activity">
19<h2>activity <span class="count">{{.ActivityTotal}} in the last year</span></h2>
20<div class="actgraph-scroll">
21<div class="actgraph">
22{{range .Activity}}<div class="actweek">{{if .Month}}<span class="actmonth">{{.Month}}</span>{{end}}{{range .Days}}<span class="actday{{if .Pad}} pad{{else}} l{{.Level}}{{end}}"{{if not .Pad}} title="{{.Count}} on {{.Date}}"{{end}}></span>{{end}}</div>{{end}}
23</div>
24</div>
25<p class="actlegend"><span>Less</span><span class="actday l0"></span><span class="actday l1"></span><span class="actday l2"></span><span class="actday l3"></span><span class="actday l4"></span><span>More</span></p>
26</section>
27{{if or .Snippets .Self}}<p class="meta"><a href="/{{.Owner}}/-/snippets">snippets{{if .Snippets}} <span class="count">{{.Snippets}}</span>{{end}}</a></p>{{end}}
28
29{{if .Self}}
30<h2>organizations</h2>
31{{if .Notice}}<p class="error" role="alert">{{.Notice}}</p>{{end}}
32<details class="editbox">
33 <summary>New organization</summary>
34 <form method="post" action="/{{.Owner}}" class="setform">
35 <input type="hidden" name="field" value="org-create">
36 <label for="orgname">Name</label>
37 <input type="text" id="orgname" name="name" required>
38 <button type="submit" class="btn">Create</button>
39 </form>
40</details>
41{{end}}
42
43{{if .CanAdmin}}{{$org := .Owner}}
44<h2>people <span class="count">{{len .Members}}</span></h2>
45{{if .Notice}}<p class="error" role="alert">{{.Notice}}</p>{{end}}
46<div class="tablewrap"><table class="keys">
47<tr class="cols"><th scope="col">member</th><th scope="col">role</th><th scope="col"></th></tr>
48{{range .Members}}<tr>
49 <td><a href="/{{.Name}}">{{.Name}}</a></td>
50 <td>{{.Role}}</td>
51 <td class="act"><form method="post" action="/{{$org}}"><input type="hidden" name="field" value="member-remove"><input type="hidden" name="user" value="{{.Name}}"><button type="submit" class="linklike">Remove</button></form></td>
52</tr>
53{{end}}</table></div>
54<details class="editbox">
55 <summary>Add or change a member</summary>
56 <form method="post" action="/{{$org}}" class="setform stack">
57 <input type="hidden" name="field" value="member-add">
58 <label for="member">Username</label>
59 <input type="text" id="member" name="user" required>
60 <label class="none" for="memberrole">Role</label>
61 <select id="memberrole" name="role">
62 <option value="member">member</option>
63 <option value="admin">admin</option>
64 </select>
65 <button type="submit" class="btn">Apply</button>
66 </form>
67</details>
68
69<h2>teams <span class="count">{{len .Teams}}</span></h2>
70<p class="meta">Teams scope repository access inside the organization: members
71of a team get its role on every repository it is granted.</p>
72{{range .Teams}}<details class="difffold" open>
73 <summary><span class="fpath">{{.Name}}</span>
74 <span class="fstat">{{len .Members}} member{{if ne (len .Members) 1}}s{{end}} · {{len .Grants}} repo{{if ne (len .Grants) 1}}s{{end}}</span>
75 </summary>
76 <div class="teambody">
77 <p class="meta">members: {{range .Members}}<a class="memberchip" href="/{{.}}">{{.}}</a> {{else}}<span class="none">none yet</span>{{end}}</p>
78 <p class="meta">repositories: {{range .Grants}}<span class="memberchip"><a href="/{{.RepoPath}}">{{.RepoPath}}</a> <span class="role">{{.Role}}</span></span> {{else}}<span class="none">none yet</span>{{end}}</p>
79 <form method="post" action="/{{$org}}" class="setform stack">
80 <input type="hidden" name="team" value="{{.Name}}">
81 <label class="none" for="tm-{{.Name}}">Members</label>
82 <input type="text" id="tm-{{.Name}}" name="user" placeholder="usernames, space-separated">
83 <button type="submit" name="field" value="team-add" class="btn">Add</button>
84 <button type="submit" name="field" value="team-remove" class="btn">Remove</button>
85 </form>
86 <form method="post" action="/{{$org}}" class="setform stack">
87 <input type="hidden" name="team" value="{{.Name}}">
88 <label class="none" for="tr-{{.Name}}">Repository</label>
89 <input type="text" id="tr-{{.Name}}" name="repo" placeholder="owner/name">
90 <label class="none" for="trr-{{.Name}}">Role</label>
91 <select id="trr-{{.Name}}" name="role">
92 <option value="read">read</option>
93 <option value="write">write</option>
94 <option value="admin">admin</option>
95 </select>
96 <button type="submit" name="field" value="team-grant" class="btn">Grant</button>
97 <button type="submit" name="field" value="team-revoke" class="btn">Revoke</button>
98 </form>
99 <form method="post" action="/{{$org}}" class="setform">
100 <input type="hidden" name="field" value="team-delete">
101 <input type="hidden" name="team" value="{{.Name}}">
102 {{template "confirmfield" .Name}}
103 <button type="submit" class="danger">Delete this team</button>
104 </form>
105 </div>
106</details>
107{{else}}<p class="none">No teams yet.</p>{{end}}
108<details class="editbox">
109 <summary>Create a team</summary>
110 <form method="post" action="/{{$org}}" class="setform">
111 <input type="hidden" name="field" value="team-create">
112 <label for="newteam">Name</label>
113 <input type="text" id="newteam" name="team" required>
114 <button type="submit" class="btn">Create</button>
115 </form>
116</details>
117
118<h2>organization</h2>
119<details class="editbox">
120 <summary>Rename</summary>
121 <form method="post" action="/{{$org}}" class="setform">
122 <input type="hidden" name="field" value="org-rename">
123 <label for="orgrename">New name</label>
124 <input type="text" id="orgrename" name="name" value="{{$org}}" required>
125 <button type="submit" class="btn">Rename</button>
126 </form>
127 <p class="meta">Every clone URL under this organization changes with the name.</p>
128</details>
129<p class="meta">Deleting an organization is a CLI operation, like deleting a
130repository: it wants a typed confirmation rather than a button.</p>
131<pre class="message">gitbay org delete {{$org}} --yes</pre>
132{{end}}
133{{end}}