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.
Highlight with Prism in a worker and gzip text responses
306f36fcef89c145abcd0c5331453d0b179f37ce · Keenan Nemetz · 12d ago · parent e5542ac6
Highlight with Prism in a worker and gzip text responses
The code browser now names a blob's language and lets the browser colour it.
Chroma is gone: server/web/highlight.go is an extension table, and
static/prism-worker.js runs Prism — every language Prism ships — off the main
thread. The server sends escaped lines with their numbers and L# anchors, so a
page is complete and scrollable before any script runs and the worker only swaps
the contents of each line cell. The table covers 186 languages; a file it does
not claim stays plain rather than being coloured by a guess.
The bundle those grammars make is 545 KB, so the instance now gzips text
responses itself instead of relying on a proxy, and static assets carry a
content ETag so a browser revalidates with a 304 rather than re-downloading the
bundle on every code page. The raw-download route opts out with
Cache-Control: no-transform because it promises an exact Content-Length.
This also makes JavaScript a requirement rather than a nicety: the label and
assignee token inputs lose their noscript save buttons and their comma-separated
text fallback, and the docs say so.
Measured: release binary 26.08 MB -> 22.70 MB; /r/{repo}/code 11.1 KB -> 2.6 KB
over the wire; the Prism bundle 545 KB -> 206 KB gzipped, fetched once.
scripts/vendor-prism.py regenerates the bundle from Prism's components.json
require graph, and --check fails if the committed assets drift.
server/web/templates/code.html +1−3
| @@ -17,7 +17,6 @@ | |||
| 17 | 17 | <select name="ref" data-autosubmit aria-label="Branch"> | |
| 18 | 18 | {{range .Branches}}<option value="{{.}}"{{if eq . $.Ref}} selected{{end}}>{{.}}</option>{{end}} | |
| 19 | 19 | </select> | |
| 20 | <noscript><button class="secondary" type="submit">Go</button></noscript> | ||
| 21 | 20 | </form> | |
| 22 | 21 | <details class="clone"> | |
| 23 | 22 | <summary>{{icon "copy"}}Clone</summary> | |
| @@ -159,9 +158,8 @@ git push -u origin {{.Ref}}</pre> | |||
| 159 | 158 | {{if .Truncated}}<p class="muted">Showing the first 1 MiB.</p>{{end}} | |
| 160 | 159 | {{if .LineCut}}<p class="muted">Showing the first 5,000 lines.</p>{{end}} | |
| 161 | 160 | {{if .Markdown}}<div class="md filebody">{{.Markdown}}</div> | |
| 162 | {{else if .Highlight}}<div class="highlight">{{.Highlight}}</div> | ||
| 163 | 161 | {{else}} | |
| 164 | <div class="panel blob"> | ||
| 162 | <div class="panel blob"{{if .Language}} data-highlight="{{.Language}}"{{end}}> | ||
| 165 | 163 | <table class="code"> | |
| 166 | 164 | <tbody> | |
| 167 | 165 | {{range $i, $line := .Lines}} | |