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

internal/site/routes.go

c0427d5fc7c0fcf8606c546071085e8af231fb81 · 2.4 KB · 74 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 // NavLabel order below is the order tabs appear in the repo-scoped
23 // nav (top bar and page-nav chips) -- see core.BuildNav.
24 {Name: "repo",
25 Pattern: "GET /{repo}/{$}",
26 Render: core.View{Template: "tree.html"}},
27
28 {Name: "api-repo",
29 Pattern: "GET /{repo}/api/repo.json",
30 Render: core.JSON{Build: api.RepoEndpoint}},
31
32 // {rest...} fuses ref and path; SplitRefPath separates them by
33 // longest-matching ref, so feature/x/src/main.go works.
34 {Name: "tree", NavLabel: "files",
35 Pattern: "GET /{repo}/tree/{rest...}",
36 Render: core.View{Template: "tree.html"}},
37
38 {Name: "log", NavLabel: "log",
39 Pattern: "GET /{repo}/log/{rest...}",
40 Render: core.View{Template: "log.html"}},
41
42 {Name: "blob",
43 Pattern: "GET /{repo}/blob/{rest...}",
44 Render: core.View{Template: "blob.html"}},
45
46 // Actual file bytes. See core.Raw for why this is not text/html.
47 {Name: "raw",
48 Pattern: "GET /{repo}/raw/{rest...}",
49 Render: core.Raw{Module: "blobraw"}},
50
51 // The DAG across every ref.
52 {Name: "graph", NavLabel: "graph",
53 Pattern: "GET /{repo}/graph/{$}",
54 Render: core.View{Template: "graph.html"}},
55
56 {Name: "refs", NavLabel: "refs",
57 Pattern: "GET /{repo}/refs/{$}",
58 Render: core.View{Template: "refs.html"}},
59
60 // Arbitrary two-commit diff: /demo/compare/main...feature
61 {Name: "compare",
62 Pattern: "GET /{repo}/compare/{range}",
63 Render: core.View{Template: "compare.html"}},
64
65 // SHA-addressed: content can never change, so cache forever.
66 {Name: "commit", Immutable: true,
67 Pattern: "GET /{repo}/commit/{rev}",
68 Render: core.View{Template: "commit.html"}},
69
70 {Name: "api-commit", Immutable: true,
71 Pattern: "GET /{repo}/api/commit/{rev}",
72 Render: core.JSON{Build: api.CommitEndpoint}},
73 }
74 }