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}}

diff --git a/helios/index.html b/helios/index.html index df4dc54..a6eca2f 100644 --- a/helios/index.html +++ b/helios/index.html @@ -20,44 +20,43 @@

Index of helios