diff --git a/data.go b/data.go index 103207b..94cd08d 100644 --- a/data.go +++ b/data.go @@ -32,7 +32,6 @@ type Config struct { Legal string `json:"legal" toml:"legal"` RelMeLinks []string `json:"rel_me_links" toml:"rel_me_links"` CustomPages []string `json:"custom_pages" toml:"custom_pages"` - folder string } type Person struct { @@ -83,6 +82,23 @@ func getImage(s string) string { return golatt.GetStaticPath(s) } +func getPath(filename string) string { + if !strings.Contains(configPath, "/") { + return filename + } + sp := strings.Split(configPath, "/") + before := strings.Join(sp[1:len(sp)-1], "/") + if configPath[0] != '/' && !strings.HasPrefix(configPath, "./") { + if len(before) == 0 { + before = sp[0] + } else { + before = sp[0] + "/" + before + } + } + before += "/" + return before + filename +} + func (c *Config) GetBackground() template.CSS { return c.Color.GetBackground() } @@ -103,7 +119,7 @@ var legalContent template.HTML func (c *Config) GetLegal() (template.HTML, error) { if legalContent == "" { - b, err := os.ReadFile(c.folder + c.Legal) + b, err := os.ReadFile(getPath(c.Legal)) if err != nil { return "", err } @@ -119,7 +135,6 @@ type CustomPage struct { Description string `json:"description" toml:"description"` Color *Color `json:"colors" toml:"colors"` Content string `json:"content" toml:"content"` - folder string } func (c *Config) LoadCustomPages() ([]*CustomPage, error) { @@ -129,7 +144,7 @@ func (c *Config) LoadCustomPages() ([]*CustomPage, error) { } var pages []*CustomPage for _, cp := range c.CustomPages { - b, err := os.ReadFile(c.folder + cp) + b, err := os.ReadFile(getPath(cp)) if err != nil { return nil, err } @@ -144,9 +159,6 @@ func (c *Config) LoadCustomPages() ([]*CustomPage, error) { if err != nil { return nil, err } - - p.folder = getFolder(c.folder + cp) - pages = append(pages, &p) } return pages, nil @@ -201,7 +213,7 @@ var contentsMap = map[string]template.HTML{} func (p *CustomPage) GetContent() (template.HTML, error) { res, ok := contentsMap[p.URI] if !ok { - b, err := os.ReadFile(p.folder + p.Content) + b, err := os.ReadFile(getPath(p.Content)) if err != nil { return "", err } diff --git a/main.go b/main.go index d69e3cd..35f8e78 100644 --- a/main.go +++ b/main.go @@ -22,19 +22,17 @@ var ( ) var ( - domain string - configPath string - publicDirPath string - dev = false - generateToml bool - generateJson bool - port = 80 + domain string + configPath string + dev = false + generateToml bool + generateJson bool + port = 80 ) func init() { flag.StringVar(&domain, "domain", "", "domain to use") flag.StringVar(&configPath, "config", "", "config to use") - flag.StringVar(&publicDirPath, "public-dir", "", "public directory to use, default is 'public' inside the folder of your config") flag.BoolVar(&dev, "dev", dev, "dev mode enabled") flag.BoolVar(&generateJson, "generate-json-config", false, "generate a config example") flag.BoolVar(&generateToml, "generate-toml-config", false, "generate a config example") @@ -77,30 +75,22 @@ func main() { if err != nil { panic(err) } - - cfg.folder = getFolder(configPath) - customPages, err := cfg.LoadCustomPages() if err != nil { panic(err) } - publicFolder := cfg.folder + "public" - if len(publicDirPath) != 0 { - publicFolder = publicDirPath - } - var g *golatt.Golatt if dev { g = golatt.New( golatt.UsableEmbedFS("templates", templates), - os.DirFS(publicFolder), + os.DirFS(getPath("public")), os.DirFS("dist"), ) } else { g = golatt.New( golatt.UsableEmbedFS("templates", templates), - os.DirFS(publicFolder), + os.DirFS(getPath("public")), golatt.UsableEmbedFS("dist", assets), ) } @@ -158,22 +148,6 @@ func main() { } } -func getFolder(path string) string { - if !strings.Contains(path, "/") { - return "" - } - sp := strings.Split(path, "/") - folder := strings.Join(sp[1:len(sp)-1], "/") - if path[0] != '/' && !strings.HasPrefix(path, "./") { - if len(folder) == 0 { - folder = sp[0] - } else { - folder = sp[0] + "/" + folder - } - } - return folder + "/" -} - func generateConfigFile(isToml bool) { cfg := Config{ Image: "wallpaper.webp",