aboutsummaryrefslogtreecommitdiffstats
path: root/site/init.go
diff options
context:
space:
mode:
authorAdam Mathes <adam@trenchant.org>2017-02-09 19:40:44 -0800
committerAdam Mathes <adam@trenchant.org>2017-02-09 19:40:44 -0800
commitded6e3b25bca083cabe21bda6f4d01f6766587bc (patch)
tree2855fa24e8b2f939bdf091f5faca411e7884ac83 /site/init.go
downloadsnkt-ded6e3b25bca083cabe21bda6f4d01f6766587bc.tar.gz
snkt-ded6e3b25bca083cabe21bda6f4d01f6766587bc.tar.bz2
snkt-ded6e3b25bca083cabe21bda6f4d01f6766587bc.zip
initial commit (fmstatic -> snkt)
Diffstat (limited to 'site/init.go')
-rw-r--r--site/init.go164
1 files changed, 164 insertions, 0 deletions
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"}}
+<!DOCTYPE html>
+<html>
+ <head>
+ <title>{{template "title" .}}</title>
+ </head>
+ <body>
+ <h1>{{template "title"}}</h1>
+ {{template "content" .}}
+ <hr />
+ <p><a href="{{.Site.URL}}/index.html">Home</a></p>
+ <p><a href="{{.Site.URL}}/archive.html">Archive</a></p>
+ </body>
+</html>
+{{end}}
+{{define "title"}}{{end}}
+{{define "content"}}{{end}}
+`)},
+ {
+ Dir: "tmpl",
+ Filename: "home",
+ Content: []byte(
+`{{define "title"}}{{.Site.Title}}{{end}}
+{{define "content"}}
+<h1>{{.Site.Title}}</h1>
+{{range .Posts.Limit 15}}
+<h2><a href="{{.Permalink}}">{{.Title}}</a></h2>
+{{.Content}}
+{{end}}
+{{end}}
+`)},
+ {
+ Dir: "tmpl",
+ Filename: "post",
+ Content: []byte(
+`{{define "title"}}{{ .Post.Title }}{{end}}
+{{define "content"}}
+<h2>{{ .Post.Title }}</h2>
+{{.Post.Content}}
+{{if .Post.Next.Title}}
+<p><a href="{{.Post.Next.Permalink}}">{{.Post.Next.Title}}</a></p>
+{{end}}
+ {{if .Post.Prev.Title}}
+<p><a href="{{.Post.Prev.Permalink}}">{{.Post.Prev.Title}}</a></p>
+{{end}}
+{{end}}
+`)},
+ {
+ Dir: "tmpl",
+ Filename: "archive",
+ Content: []byte(
+`{{define "title"}}{{.Site.Title}} Archives{{end}}
+{{define "content"}}
+<h1>{{ .Site.Title }}</h1>
+{{range .Posts}}
+{{if .}}<h2><a href="{{.Permalink}}">{{.Title}}</a></h2>{{end}}
+{{end}}
+{{end}}
+`)},
+ {
+ Dir: "tmpl",
+ Filename: "rss",
+ Content: []byte(
+`{{define "base"}}
+<?xml version="1.0" encoding="UTF-8" ?>
+<rss version="2.0">
+<channel>
+ <title>{{ .Site.Title }}</title>
+ <link>{{ .Site.URL }}</link>
+ <description></description>
+ {{ range .Posts.Limit 15 }}
+ <item>
+ <link>{{ .Permalink }}</link>
+ <title><![CDATA[{{ .Title }}]]></title>
+ <pubDate>{{ .RssDate }}</pubDate>
+ <description><![CDATA[
+ {{ .AbsoluteContent }}
+ ]]>
+ </description>
+ </item>
+ {{ end }}
+</channel>
+</rss>
+{{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)
+ }
+}