aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRunxi Yu <me@runxiyu.org>2025-02-10 13:46:50 +0800
committerRunxi Yu <me@runxiyu.org>2025-02-10 13:46:50 +0800
commit0a5f821f78425d97c0797803e57aa2c2d6f982da (patch)
tree1047018864276e8b99c4375aa436ce1ff162789c
parent*.go: Linting (diff)
downloadforge-0a5f821f78425d97c0797803e57aa2c2d6f982da.tar.gz
forge-0a5f821f78425d97c0797803e57aa2c2d6f982da.tar.zst
forge-0a5f821f78425d97c0797803e57aa2c2d6f982da.zip
category_index: Add a repo index for each category
Diffstat (limited to '')
-rw-r--r--handle_category_index.go34
-rw-r--r--main.go1
-rw-r--r--templates/category_index.html20
3 files changed, 55 insertions, 0 deletions
diff --git a/handle_category_index.go b/handle_category_index.go
new file mode 100644
index 0000000..407d0e7
--- /dev/null
+++ b/handle_category_index.go
@@ -0,0 +1,34 @@
+package main
+
+import (
+ "net/http"
+ "path/filepath"
+ "os"
+ "strings"
+)
+
+func handle_category_index(w http.ResponseWriter, r *http.Request) {
+ data := make(map[string]any)
+ project_name := r.PathValue("project_name")
+ data["category_name"] = project_name
+ entries, err := os.ReadDir(filepath.Join(config.Git.Root, project_name))
+ if err != nil {
+ _, _ = w.Write([]byte("Error listing repos: " + err.Error()))
+ return
+ }
+
+ repos := []string{}
+ for _, entry := range entries {
+ this_name := entry.Name()
+ if strings.HasSuffix(this_name, ".git") {
+ repos = append(repos, strings.TrimSuffix(this_name, ".git"))
+ }
+ }
+ data["repos"] = repos
+
+ err = templates.ExecuteTemplate(w, "category_index", data)
+ if err != nil {
+ _, _ = w.Write([]byte("Error rendering template: " + err.Error()))
+ return
+ }
+}
diff --git a/main.go b/main.go
index 8f9482d..b144b52 100644
--- a/main.go
+++ b/main.go
@@ -32,6 +32,7 @@ func main() {
}
http.HandleFunc("/{$}", handle_index)
+ http.HandleFunc("/{project_name}/{$}", handle_category_index)
http.HandleFunc("/{project_name}/repos/{repo_name}/{$}", handle_repo_index)
http.HandleFunc("/{project_name}/repos/{repo_name}/tree/{ref}/{rest...}", handle_repo_tree)
diff --git a/templates/category_index.html b/templates/category_index.html
new file mode 100644
index 0000000..1ae0c64
--- /dev/null
+++ b/templates/category_index.html
@@ -0,0 +1,20 @@
+{{- define "category_index" -}}
+<!DOCTYPE html>
+<html>
+<head>
+<link rel="stylesheet" href="/static/style.css" />
+<title>{{ .category_name }}</title>
+</head>
+<body class="index">
+<div class="padding-wrapper">
+<ul>
+{{- range .repos }}
+<li>
+<a href="repos/{{ . }}/">{{ . }}</a>
+</li>
+{{- end }}
+</ul>
+</div>
+</body>
+</html>
+{{- end -}}