package archetype import ( "errors" "io/ioutil" "os" "path/filepath" "strings" ) type EurekaAdapter struct { Root string } func (self *EurekaAdapter) Init(cfg *Config) { fileInfo, err := os.Stat(cfg.Root) if os.IsNotExist(err) { panic("SSG content root does not exist! Ensure your configs are correct or create it!") } else if !fileInfo.IsDir() { panic("SSG content root is not a directory!") } self.Root = cfg.Root } func (self *EurekaAdapter) Name() string { return "eureka" } func (self *EurekaAdapter) EditableSlugs() bool { return false } func (self *EurekaAdapter) BuildOptions() []string { return []string{"twtxt"} } func (self *EurekaAdapter) GetConfig(key string) (interface{}, error) { return nil, nil } func (self *EurekaAdapter) SetConfig(key string, value interface{}) error { return nil } func (self *EurekaAdapter) ListPages() map[string]string { files, err := ioutil.ReadDir( filepath.Join(self.Root, "inc")) if err != nil { panic(err.Error()) } pages := map[string]string{} for _, file := range files { filename := file.Name() if strings.HasSuffix(filename, ".htm") { pages[filename] = strings.Replace( strings.TrimSuffix(filename, ".htm"), "_", " ", -1) } } return pages } func (self *EurekaAdapter) GetPage(filename string) (Page, error) { fullPath := filepath.Join(self.Root, "inc", filename) f, err := os.ReadFile(fullPath) if err != nil { return Page{}, err } if !strings.HasSuffix(filename, ".htm") { return Page{}, errors.New("Page file extension is not '.htm'") } title := strings.Replace( strings.TrimSuffix(filename, ".htm"), "_", " ", -1) fileInfo, _ := os.Stat(fullPath) content := string(f[:]) return Page{ Title: title, Slug: filename, Content: content, Edited: fileInfo.ModTime(), }, nil } func (self *EurekaAdapter) FormatPage(raw string) string { return raw } func (self *EurekaAdapter) FormattingHelp() string { return "help!" } func (self *EurekaAdapter) CreatePage(slug, title, content string) error { return nil } func (self *EurekaAdapter) SavePage(oldSlug, newSlug, title, content string) error { return nil } func (self *EurekaAdapter) DeletePage(slug string) error { return nil } func (self *EurekaAdapter) Build(buildOptions map[string]string) (bool, string) { return true, "Build successful" }