func createThemeMD(inpath string) (err error) { by := []byte(`# theme.toml template for a Hugo theme # See https://github.com/spf13/hugoThemes#themetoml for an example name = "` + strings.Title(helpers.MakeTitle(filepath.Base(inpath))) + `" license = "MIT" licenselink = "https://github.com/yourname/yourtheme/blob/master/LICENSE.md" description = "" homepage = "http://siteforthistheme.com/" tags = ["", ""] features = ["", ""] min_version = 0.14 [author] name = "" homepage = "" # If porting an existing theme [original] name = "" homepage = "" repo = "" `) err = helpers.WriteToDisk(filepath.Join(inpath, "theme.toml"), bytes.NewReader(by), hugofs.SourceFs) if err != nil { return } return nil }
func createThemeMD(inpath string) (err error) { by := []byte(`name = "` + strings.Title(helpers.MakeTitle(filepath.Base(inpath))) + `" license = "MIT" licenselink = "https://github.com/.../.../LICENSE.md" description = "" homepage = "http://siteforthistheme.com/" tags = ["", ""] features = ["", ""] [author] name = "" homepage = "" # If porting an existing theme [original] name = "" homepage = "" repo = "" `) err = helpers.WriteToDisk(filepath.Join(inpath, "theme.toml"), bytes.NewReader(by), hugofs.SourceFs) if err != nil { return } return nil }
// createMetadata generates Metadata for a new page based upon the metadata // found in an archetype. func createMetadata(archetype parser.Page, name string) (map[string]interface{}, error) { archMetadata, err := archetype.Metadata() if err != nil { return nil, err } metadata, err := cast.ToStringMapE(archMetadata) if err != nil { return nil, err } for k := range metadata { switch strings.ToLower(k) { case "date": metadata[k] = time.Now() case "title": metadata[k] = helpers.MakeTitle(helpers.Filename(name)) } } caseimatch := func(m map[string]interface{}, key string) bool { for k := range m { if strings.ToLower(k) == strings.ToLower(key) { return true } } return false } if metadata == nil { metadata = make(map[string]interface{}) } if !caseimatch(metadata, "date") { metadata["date"] = time.Now() } if !caseimatch(metadata, "title") { metadata["title"] = helpers.MakeTitle(helpers.Filename(name)) } if x := parser.FormatSanitize(viper.GetString("metaDataFormat")); x == "json" || x == "yaml" || x == "toml" { metadata["date"] = time.Now().Format(time.RFC3339) } return metadata, nil }
func createThemeMD(inpath string) (err error) { in := map[string]interface{}{ "name": helpers.MakeTitle(filepath.Base(inpath)), "license": "MIT", "source_repo": "", "author": "", "description": "", "tags": []string{"", ""}, } by, err := parser.InterfaceToConfig(in, parser.FormatToLeadRune("toml")) if err != nil { return err } err = helpers.WriteToDisk(path.Join(inpath, "theme.toml"), bytes.NewReader(by)) if err != nil { return } return nil }
func (s *Site) assembleMenus() { type twoD struct { MenuName, EntryName string } flat := map[twoD]*MenuEntry{} children := map[twoD]Menu{} menuConfig := s.getMenusFromConfig() for name, menu := range menuConfig { for _, me := range *menu { flat[twoD{name, me.KeyName()}] = me } } sectionPagesMenu := viper.GetString("SectionPagesMenu") sectionPagesMenus := make(map[string]interface{}) //creating flat hash for _, p := range s.Pages { if sectionPagesMenu != "" { if _, ok := sectionPagesMenus[p.Section()]; !ok { if p.Section() != "" { me := MenuEntry{Identifier: p.Section(), Name: helpers.MakeTitle(helpers.FirstUpper(p.Section())), URL: s.Info.createNodeMenuEntryURL("/" + p.Section())} if _, ok := flat[twoD{sectionPagesMenu, me.KeyName()}]; ok { // menu with same id defined in config, let that one win continue } flat[twoD{sectionPagesMenu, me.KeyName()}] = &me sectionPagesMenus[p.Section()] = true } } } for name, me := range p.Menus() { if _, ok := flat[twoD{name, me.KeyName()}]; ok { jww.ERROR.Printf("Two or more menu items have the same name/identifier in Menu %q: %q.\nRename or set an unique identifier.\n", name, me.KeyName()) continue } flat[twoD{name, me.KeyName()}] = me } } // Create Children Menus First for _, e := range flat { if e.Parent != "" { children[twoD{e.Menu, e.Parent}] = children[twoD{e.Menu, e.Parent}].Add(e) } } // Placing Children in Parents (in flat) for p, childmenu := range children { _, ok := flat[twoD{p.MenuName, p.EntryName}] if !ok { // if parent does not exist, create one without a URL flat[twoD{p.MenuName, p.EntryName}] = &MenuEntry{Name: p.EntryName, URL: ""} } flat[twoD{p.MenuName, p.EntryName}].Children = childmenu } // Assembling Top Level of Tree for menu, e := range flat { if e.Parent == "" { _, ok := s.Menus[menu.MenuName] if !ok { s.Menus[menu.MenuName] = &Menu{} } *s.Menus[menu.MenuName] = s.Menus[menu.MenuName].Add(e) } } }
func NewContent(kind, name string) (err error) { jww.INFO.Println("attempting to create ", name, "of", kind) location := FindArchetype(kind) var by []byte if location != "" { by, err = ioutil.ReadFile(location) if err != nil { jww.ERROR.Println(err) } } if location == "" || err != nil { by = []byte("+++\n title = \"title\"\n draft = true \n+++\n") } psr, err := parser.ReadFrom(bytes.NewReader(by)) if err != nil { return err } metadata, err := psr.Metadata() if err != nil { return err } newmetadata, err := cast.ToStringMapE(metadata) if err != nil { return err } for k, _ := range newmetadata { switch strings.ToLower(k) { case "date": newmetadata[k] = time.Now() case "title": newmetadata[k] = helpers.MakeTitle(helpers.Filename(name)) } } caseimatch := func(m map[string]interface{}, key string) bool { for k, _ := range m { if strings.ToLower(k) == strings.ToLower(key) { return true } } return false } if !caseimatch(newmetadata, "date") { newmetadata["date"] = time.Now() } if !caseimatch(newmetadata, "title") { newmetadata["title"] = helpers.MakeTitle(helpers.Filename(name)) } page, err := hugolib.NewPage(name) if err != nil { return err } if x := viper.GetString("MetaDataFormat"); x == "json" || x == "yaml" || x == "toml" { newmetadata["date"] = time.Now().Format(time.RFC3339) } page.Dir = viper.GetString("sourceDir") page.SetSourceMetaData(newmetadata, parser.FormatToLeadRune(viper.GetString("MetaDataFormat"))) if err = page.SafeSaveSourceAs(path.Join(viper.GetString("contentDir"), name)); err != nil { return } jww.FEEDBACK.Println(helpers.AbsPathify(path.Join(viper.GetString("contentDir"), name)), "created") return nil }