Sign in

Search issue titles and bodies, change requests and comments. Private repositories you cannot read are not included.

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.

Build out the forge web UI

f09ef39efe44de693748053a7b596ef328fcf06b · Keenan Nemetz · 15d ago · parent 70b70264

Build out the forge web UI

Turn the web surface into a compact, server-rendered forge with HTMX as the
progressive dynamic layer.

- Split templates and assets into embedded files; add a tokenised dark theme,
  Lucide icons, and vendored HTMX.
- Add the repository Overview page and a separate chronological Activity feed
  with type filters and HTMX fragment updates.
- Finish the issue and change workflows: create pages, comments, close/reopen,
  labels and assignees, approval, discussion, line-anchored review comments,
  and HTMX list filters.
- Add syntax-highlighted blobs, contributor/statistics derivation, branch-aware
  code browsing, and a repository Runs list.
- Add a loopback-only development login for local write testing, with explicit
  configuration and listener checks.
- Extend tests for the new pages, fragments, labels, assignees, anchors, and
  development login.

server/web/templates/request_new.html +45

@@ -0,0 +1,45 @@
1 {{define "request_new"}}
2 {{template "header" .}}
3 {{template "repohead" (nav .Name "requests")}}
4
5 <div class="page-head">
6 <div>
7 <h1>New change</h1>
8 <p class="page-sub">Propose a branch for a base branch. A maintainer reviews the exact head commit.</p>
9 </div>
10 </div>
11
12 <form method="post" action="/r/{{.Name}}/requests" class="form-block">
13 <input type="hidden" name="csrf" value="{{.CSRF}}">
14 <div class="card form-card">
15 <label>Title
16 <input type="text" name="title" required maxlength="200" autofocus>
17 </label>
18 <div class="row">
19 <div>
20 <label>Base
21 <select name="base">
22 {{range .BaseBranches}}<option value="{{.}}"{{if eq . $.Base}} selected{{end}}>{{.}}</option>{{end}}
23 </select>
24 </label>
25 </div>
26 <div>
27 <label>Head
28 <select name="head">
29 {{range .HeadBranches}}<option value="{{.}}">{{.}}</option>{{end}}
30 </select>
31 </label>
32 </div>
33 </div>
34 <label>Description
35 <textarea name="body" placeholder="Why should this land?"></textarea>
36 </label>
37 {{if not .HeadBranches}}<p class="muted">Push a branch first. Contributors can push only under <code>refs/heads/contrib/&lt;account-name&gt;/</code>.</p>{{end}}
38 </div>
39 <div class="form-actions">
40 <a class="button secondary" href="/r/{{.Name}}/requests">{{icon "x"}}Cancel</a>
41 <button type="submit"{{if not .HeadBranches}} disabled{{end}}>{{icon "plus"}}Open change request</button>
42 </div>
43 </form>
44 {{template "footer" .}}
45 {{end}}