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 Index of {{.Dir}}