vole
Clone
Read only, no credentials:
https://rodent.software/git/vole.git
Write over SSH with a registered key:
git clone ssh://git@0.0.0.0:2222/vole.git
A free and open-source forge that lives in your Git repo.
|
f09ef39e
Keenan Nemetz
15d ago
|
1 | {{define "activity"}} |
| 2 | {{template "header" .}} | |
|
5d440e37
Keenan Nemetz
10d ago
|
3 | {{template "repohead" (nav .Page "activity")}} |
|
f09ef39e
Keenan Nemetz
15d ago
|
4 | |
| 5 | <div class="page-head"> | |
|
a464f892
Keenan Nemetz
15d ago
|
6 | <div class="page-head-main"> |
|
f09ef39e
Keenan Nemetz
15d ago
|
7 | <h1>Activity</h1> |
|
b06184d1
Keenan Nemetz
11d ago
|
8 | <p class="page-sub">Issues, changes, comments, and releases in one stream.</p> |
|
f09ef39e
Keenan Nemetz
15d ago
|
9 | </div> |
| 10 | </div> | |
| 11 | ||
| 12 | {{template "activity_feed" .}} | |
| 13 | {{template "footer" .}} | |
| 14 | {{end}} | |
| 15 | ||
| 16 | {{define "activity_feed"}} | |
| 17 | <div id="activity-feed"> | |
|
6c98a271
Keenan Nemetz
9d ago
|
18 | {{/* One row: kind chips and the actor/assignee pickers on the left, the clear |
| 19 | action on the right. The chips sit inside the form so a filter change | |
| 20 | keeps the kind. */}} | |
|
ed03b3d1
Keenan Nemetz
3h ago
|
21 | <form class="filters" method="get" action="/{{.Name}}/activity" hx-get="/{{.Name}}/activity" hx-target="#activity-feed" hx-swap="outerHTML" hx-push-url="true"> |
|
6c98a271
Keenan Nemetz
9d ago
|
22 | <div class="chips" hx-boost="true" hx-target="#activity-feed" hx-swap="outerHTML" hx-push-url="true"> |
|
ed03b3d1
Keenan Nemetz
3h ago
|
23 | <a class="chip{{if eq .Kind ""}} active{{end}}" href="/{{.Name}}/activity?kind=all{{if .Actor}}&actor={{urlquery .Actor}}{{end}}{{if .Assignee}}&assignee={{urlquery .Assignee}}{{end}}">{{icon "activity"}}All</a> |
| 24 | <a class="chip{{if eq .Kind "issue"}} active{{end}}" href="/{{.Name}}/activity?kind=issues{{if .Actor}}&actor={{urlquery .Actor}}{{end}}{{if .Assignee}}&assignee={{urlquery .Assignee}}{{end}}">{{icon "circle-dot"}}Issues</a> | |
| 25 | <a class="chip{{if eq .Kind "change"}} active{{end}}" href="/{{.Name}}/activity?kind=changes{{if .Actor}}&actor={{urlquery .Actor}}{{end}}{{if .Assignee}}&assignee={{urlquery .Assignee}}{{end}}">{{icon "git-pull-request"}}Changes</a> | |
| 26 | <a class="chip{{if eq .Kind "release"}} active{{end}}" href="/{{.Name}}/activity?kind=releases{{if .Actor}}&actor={{urlquery .Actor}}{{end}}{{if .Assignee}}&assignee={{urlquery .Assignee}}{{end}}">{{icon "tag"}}Releases</a> | |
|
6c98a271
Keenan Nemetz
9d ago
|
27 | </div> |
|
8e93a8f0
Keenan Nemetz
15d ago
|
28 | <input type="hidden" name="kind" value="{{.Kind}}"> |
|
2e024cc9
Keenan Nemetz
14d ago
|
29 | <label class="filter-field"> |
| 30 | <span class="filter-label">Actor</span> | |
|
55615c7a
Keenan Nemetz
11d ago
|
31 | <select name="actor" data-autosubmit> |
|
2e024cc9
Keenan Nemetz
14d ago
|
32 | <option value="">Anyone</option> |
| 33 | {{range .Actors}}<option value="{{.Name}}"{{if eq .Name $.Actor}} selected{{end}}>{{.Label}}</option>{{end}} | |
| 34 | </select> | |
| 35 | </label> | |
|
8e93a8f0
Keenan Nemetz
15d ago
|
36 | {{if .Assignees}} |
|
2e024cc9
Keenan Nemetz
14d ago
|
37 | <label class="filter-field"> |
| 38 | <span class="filter-label">Assignee</span> | |
|
55615c7a
Keenan Nemetz
11d ago
|
39 | <select name="assignee" data-autosubmit> |
|
2e024cc9
Keenan Nemetz
14d ago
|
40 | <option value="">Anyone</option> |
| 41 | {{range .Assignees}}<option value="{{.}}"{{if eq . $.Assignee}} selected{{end}}>{{who .}}</option>{{end}} | |
| 42 | </select> | |
| 43 | </label> | |
|
8e93a8f0
Keenan Nemetz
15d ago
|
44 | {{end}} |
|
ed03b3d1
Keenan Nemetz
3h ago
|
45 | {{if or .Actor .Assignee}}<div class="filters-search"><a class="button secondary" href="/{{.Name}}/activity{{if .Kind}}?kind={{.Kind}}{{end}}">{{icon "x"}}Clear</a></div>{{end}} |
|
8e93a8f0
Keenan Nemetz
15d ago
|
46 | </form> |
| 47 | ||
|
f09ef39e
Keenan Nemetz
15d ago
|
48 | {{if .Events}} |
|
b355db72
Keenan Nemetz
15d ago
|
49 | {{template "activity_events" .}} |
|
c8cdb6ac
Keenan Nemetz
9d ago
|
50 | {{template "pager" .Pager}} |
|
f09ef39e
Keenan Nemetz
15d ago
|
51 | {{else}} |
| 52 | <div class="empty-state"> | |
|
8e93a8f0
Keenan Nemetz
15d ago
|
53 | {{if or .Actor .Assignee}} |
| 54 | <p>No activity matches these filters.</p> | |
| 55 | <p class="muted">Clear the filters or choose another type.</p> | |
| 56 | {{else}} | |
|
f09ef39e
Keenan Nemetz
15d ago
|
57 | <p>No activity yet.</p> |
| 58 | <p class="muted">Push a commit, open an issue, or queue a run.</p> | |
|
8e93a8f0
Keenan Nemetz
15d ago
|
59 | {{end}} |
|
f09ef39e
Keenan Nemetz
15d ago
|
60 | </div> |
| 61 | {{end}} | |
| 62 | </div> | |
| 63 | {{end}} | |
|
b355db72
Keenan Nemetz
15d ago
|
64 | |
| 65 | {{define "activity_events"}} | |
| 66 | <div class="activity-list"> | |
| 67 | {{range .Events}} | |
| 68 | <article class="activity-event"> | |
| 69 | <span class="activity-icon {{.Kind}}" aria-hidden="true">{{icon .Icon}}</span> | |
| 70 | <div class="activity-body"> | |
| 71 | <a class="activity-title" href="{{.URL}}">{{.Title}}</a> | |
| 72 | <div class="activity-meta"> | |
|
ed03b3d1
Keenan Nemetz
3h ago
|
73 | {{if .Repo}}<a href="/{{.Repo}}">{{.Repo}}</a> · {{end}}{{if .Actor}}{{if .ActorName}}{{template "userlink" (user .ActorName)}}{{else}}{{.Actor}}{{end}} · {{end}}{{.Detail}} · {{since .Time.Unix}} |
|
b355db72
Keenan Nemetz
15d ago
|
74 | </div> |
| 75 | </div> | |
| 76 | </article> | |
| 77 | {{end}} | |
| 78 | </div> | |
| 79 | {{end}} |