From 3eaa393569f293ae827919ddcb15c59e60267e93 Mon Sep 17 00:00:00 2001
From: Ian Gulliver
Date: Wed, 8 Oct 2025 15:19:18 -0700
Subject: [PATCH] Update index with absolute links
---
build/generate-index.go | 54 ++++++++++++++++++++++-------
build/index.html.tmpl | 2 +-
helios/index.html | 75 ++++++++++++++++++++---------------------
3 files changed, 80 insertions(+), 51 deletions(-)
diff --git a/build/generate-index.go b/build/generate-index.go
index 0dcb4b4..85b7a90 100644
--- a/build/generate-index.go
+++ b/build/generate-index.go
@@ -1,33 +1,56 @@
package main
import (
+ "flag"
"fmt"
"html/template"
"os"
"path/filepath"
"sort"
+ "strings"
)
type IndexData struct {
- Dir string
- Files []string
+ Dir string
+ Files []FileEntry
+ RootURL string
}
-func generateIndex(dir string) error {
+type FileEntry struct {
+ Name string
+ URL string
+}
+
+func generateIndex(dir string, rootURL string) error {
entries, err := os.ReadDir(dir)
if err != nil {
return fmt.Errorf("failed to read directory: %w", err)
}
- var files []string
+ // Normalize root URL (remove trailing slash)
+ rootURL = strings.TrimSuffix(rootURL, "/")
+
+ var fileNames []string
for _, entry := range entries {
name := entry.Name()
// Skip the index.html itself and hidden files
if name != "index.html" && !filepath.HasPrefix(name, ".") {
- files = append(files, name)
+ fileNames = append(fileNames, name)
}
}
- sort.Strings(files)
+ sort.Strings(fileNames)
+
+ // Build file entries with absolute URLs
+ var files []FileEntry
+ dirName := filepath.Base(dir)
+ for _, name := range fileNames {
+ // URL encode the filename for the path
+ url := fmt.Sprintf("%s/%s/%s", rootURL, dirName, name)
+ files = append(files, FileEntry{
+ Name: name,
+ URL: url,
+ })
+ }
templatePath := "build/index.html.tmpl"
tmpl, err := template.ParseFiles(templatePath)
@@ -43,8 +66,9 @@ func generateIndex(dir string) error {
defer f.Close()
data := IndexData{
- Dir: filepath.Base(dir),
- Files: files,
+ Dir: dirName,
+ Files: files,
+ RootURL: rootURL,
}
if err := tmpl.Execute(f, data); err != nil {
@@ -56,13 +80,19 @@ func generateIndex(dir string) error {
}
func main() {
- if len(os.Args) < 2 {
- fmt.Println("Usage: generate-index [...]")
+ rootURL := flag.String("root", "https://ss-6r6jq.ondigitalocean.app", "Root domain URL for absolute links")
+ flag.Parse()
+
+ dirs := flag.Args()
+ if len(dirs) == 0 {
+ fmt.Println("Usage: generate-index [-root ] [...]")
+ fmt.Println(" -root string")
+ fmt.Println(" Root domain URL for absolute links (default \"https://ss-6r6jq.ondigitalocean.app\")")
os.Exit(1)
}
- for _, dir := range os.Args[1:] {
- if err := generateIndex(dir); err != nil {
+ for _, dir := range dirs {
+ if err := generateIndex(dir, *rootURL); err != nil {
fmt.Fprintf(os.Stderr, "Error processing %s: %v\n", dir, err)
os.Exit(1)
}
diff --git a/build/index.html.tmpl b/build/index.html.tmpl
index bc4989f..2ed0e3c 100644
--- a/build/index.html.tmpl
+++ b/build/index.html.tmpl
@@ -21,7 +21,7 @@
Index of {{.Dir}}
Index of helios