Update index with absolute links
This commit is contained in:
@@ -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 <directory> [<directory>...]")
|
||||
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 <url>] <directory> [<directory>...]")
|
||||
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)
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user