Migration This is my new public git source viewer. Source coming soon. Please contact with concerns/bugs. Contact me

internal/site/routes.go

3a50036d96eb14462e96598fd169d1c79264ac4b · 2.2 KB · 72 lines raw

1 // Package site is the route table: the one file you edit when adding a
2 // page or an endpoint. Modules are the "what", routes are the "where".
3 package site
4
5 import (
6 "gsg/internal/api"
7 "gsg/internal/core"
8 )
9
10 func Routes() []core.Route {
11 return []core.Route{
12 // ---- site-scoped -------------------------------------------------
13 {Name: "index", Scope: core.ScopeSite,
14 Pattern: "GET /{$}",
15 Render: core.View{Template: "index.html"}},
16
17 {Name: "api-index", Scope: core.ScopeSite,
18 Pattern: "GET /api/repos.json",
19 Render: core.JSON{Build: api.IndexEndpoint}},
20
21 // ---- per repository ----------------------------------------------
22 {Name: "repo",
23 Pattern: "GET /{repo}/{$}",
24 Render: core.View{Template: "repo.html"}},
25
26 {Name: "refs",
27 Pattern: "GET /{repo}/refs/{$}",
28 Render: core.View{Template: "refs.html"}},
29
30 {Name: "api-repo",
31 Pattern: "GET /{repo}/api/repo.json",
32 Render: core.JSON{Build: api.RepoEndpoint}},
33
34 // {rest...} fuses ref and path; SplitRefPath separates them by
35 // longest-matching ref, so feature/x/src/main.go works.
36 {Name: "log",
37 Pattern: "GET /{repo}/log/{rest...}",
38 Render: core.View{Template: "log.html"}},
39
40 {Name: "tree",
41 Pattern: "GET /{repo}/tree/{rest...}",
42 Render: core.View{Template: "tree.html"}},
43
44 {Name: "blob",
45 Pattern: "GET /{repo}/blob/{rest...}",
46 Render: core.View{Template: "blob.html"}},
47
48 // Actual file bytes. See core.Raw for why this is not text/html.
49 {Name: "raw",
50 Pattern: "GET /{repo}/raw/{rest...}",
51 Render: core.Raw{Module: "blobraw"}},
52
53 // The DAG across every ref.
54 {Name: "graph",
55 Pattern: "GET /{repo}/graph/{$}",
56 Render: core.View{Template: "graph.html"}},
57
58 // Arbitrary two-commit diff: /demo/compare/main...feature
59 {Name: "compare",
60 Pattern: "GET /{repo}/compare/{range}",
61 Render: core.View{Template: "compare.html"}},
62
63 // SHA-addressed: content can never change, so cache forever.
64 {Name: "commit", Immutable: true,
65 Pattern: "GET /{repo}/commit/{rev}",
66 Render: core.View{Template: "commit.html"}},
67
68 {Name: "api-commit", Immutable: true,
69 Pattern: "GET /{repo}/api/commit/{rev}",
70 Render: core.JSON{Build: api.CommitEndpoint}},
71 }
72 }