internal/web/templates/owner.html

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