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/issue_new.html +34

@@ -0,0 +1,34 @@
1 {{define "issue_new"}}
2 {{template "header" .}}
3 {{template "repohead" (nav .Name "issues")}}
4
5 <div class="page-head">
6 <div>
7 <h1>New issue</h1>
8 <p class="page-sub">Describe the problem and what you expected to happen. Markdown is welcome.</p>
9 </div>
10 </div>
11
12 <form method="post" action="/r/{{.Name}}/issues" 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 <label>Description
19 <textarea name="body" placeholder="What happened? What did you expect?"></textarea>
20 </label>
21 <label>Labels
22 {{template "token_input" (tokenPicker nil .Labels "labels" "label" "Add labels…")}}
23 </label>
24 <label>Assignees
25 {{template "token_input" (tokenPicker nil .Assignees "assignees" "assignee" "Add assignees…")}}
26 </label>
27 </div>
28 <div class="form-actions">
29 <a class="button secondary" href="/r/{{.Name}}/issues">{{icon "x"}}Cancel</a>
30 <button type="submit">{{icon "plus"}}Open issue</button>
31 </div>
32 </form>
33 {{template "footer" .}}
34 {{end}}