From ded6e3b25bca083cabe21bda6f4d01f6766587bc Mon Sep 17 00:00:00 2001 From: Adam Mathes Date: Thu, 9 Feb 2017 19:40:44 -0800 Subject: initial commit (fmstatic -> snkt) --- site/init.go | 164 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 164 insertions(+) create mode 100644 site/init.go (limited to 'site/init.go') diff --git a/site/init.go b/site/init.go new file mode 100644 index 0000000..dc17cfa --- /dev/null +++ b/site/init.go @@ -0,0 +1,164 @@ +package site + +import ( + "path" + "snkt/render" + "snkt/config" + "os" + "log" + "gopkg.in/yaml.v2" +) + +type skeleton struct { + Dir string + Filename string + Content []byte +} + +var skeletons = []skeleton { + { + Dir: "tmpl", + Filename: "base", + Content: []byte( +`{{define "base"}} + + + + {{template "title" .}} + + +

{{template "title"}}

+ {{template "content" .}} +
+

Home

+

Archive

+ + +{{end}} +{{define "title"}}{{end}} +{{define "content"}}{{end}} +`)}, + { + Dir: "tmpl", + Filename: "home", + Content: []byte( +`{{define "title"}}{{.Site.Title}}{{end}} +{{define "content"}} +

{{.Site.Title}}

+{{range .Posts.Limit 15}} +

{{.Title}}

+{{.Content}} +{{end}} +{{end}} +`)}, + { + Dir: "tmpl", + Filename: "post", + Content: []byte( +`{{define "title"}}{{ .Post.Title }}{{end}} +{{define "content"}} +

{{ .Post.Title }}

+{{.Post.Content}} +{{if .Post.Next.Title}} +

{{.Post.Next.Title}}

+{{end}} + {{if .Post.Prev.Title}} +

{{.Post.Prev.Title}}

+{{end}} +{{end}} +`)}, + { + Dir: "tmpl", + Filename: "archive", + Content: []byte( +`{{define "title"}}{{.Site.Title}} Archives{{end}} +{{define "content"}} +

{{ .Site.Title }}

+{{range .Posts}} +{{if .}}

{{.Title}}

{{end}} +{{end}} +{{end}} +`)}, + { + Dir: "tmpl", + Filename: "rss", + Content: []byte( +`{{define "base"}} + + + + {{ .Site.Title }} + {{ .Site.URL }} + + {{ range .Posts.Limit 15 }} + + {{ .Permalink }} + <![CDATA[{{ .Title }}]]> + {{ .RssDate }} + + + + {{ end }} + + +{{end}} +`)}} + +/* +Init initializes a new site in `directory` This includes: create `directory` and populate with: +config.json with sane defaults +txt, html directories for input/output +tmpl directory with barebones [base,post,archive,rss] templates +*/ +var init_dir = "" +func Init(directory string) { + init_dir = directory + + if init_dir[0] != '/' { + wd, err := os.Getwd() + if err == nil { + init_dir = path.Join(wd, init_dir) + } + } + + var cfg = config.Settings{ + TxtDir: path.Join(init_dir, "txt"), + HtmlDir: path.Join(init_dir, "html"), + TmplDir: path.Join(init_dir, "tmpl"), + } + + cyaml, err := yaml.Marshal(cfg) + if err != nil { + log.Fatal("marshalling yaml error: ", err) + } + + c := skeleton{ + Dir: "", + Filename: "config.yml", + Content: cyaml, + } + skeletons = append(skeletons, c) + + os.MkdirAll( cfg.TxtDir , 0755) + os.MkdirAll( cfg.HtmlDir , 0755) + os.MkdirAll( cfg.TmplDir , 0755) + + writeSkeletons() +} + + +func (s skeleton) Render() []byte { + return s.Content +} + +func (s skeleton) Target() string { + return path.Join(init_dir, s.Dir, s.Filename) +} + +func writeSkeletons() { + for _,skeleton := range skeletons { + render.Write(skeleton) + } +} -- cgit v1.2.3