This commit is contained in:
Henrique Dias
2015-09-14 10:46:31 +01:00
parent 788218e115
commit e9d507fec3
9 changed files with 173 additions and 90 deletions

View File

@@ -2,52 +2,19 @@ package page
import (
"html/template"
"log"
"net/http"
"reflect"
"strings"
"unicode"
"github.com/hacdias/caddy-hugo/assets"
"github.com/hacdias/caddy-hugo/utils"
)
const (
templateExtension = ".tmpl"
headerMark = "{{#HEADER#}}"
footerMark = "{{#FOOTER#}}"
)
var funcMap = template.FuncMap{
"splitCapitalize": splitCapitalize,
"isMap": isMap,
}
// TODO: utilspackage
func isMap(sth interface{}) bool {
return reflect.ValueOf(sth).Kind() == reflect.Map
}
// TODO: utils package
func splitCapitalize(name string) string {
var words []string
l := 0
for s := name; s != ""; s = s[l:] {
l = strings.IndexFunc(s[1:], unicode.IsUpper) + 1
if l <= 0 {
l = len(s)
}
words = append(words, s[:l])
}
name = ""
for _, element := range words {
name += element + " "
}
name = strings.ToLower(name[:len(name)-1])
name = strings.ToUpper(string(name[0])) + name[1:len(name)]
return name
"splitCapitalize": utils.SplitCapitalize,
}
// Page type
@@ -58,38 +25,34 @@ type Page struct {
// Render the page
func (p *Page) Render(name string, w http.ResponseWriter) (int, error) {
rawHeader, err := assets.Asset("templates/header" + templateExtension)
base, err := assets.Asset("templates/base" + templateExtension)
if err != nil {
log.Print(err)
return 500, err
}
header := string(rawHeader)
rawFooter, err := assets.Asset("templates/footer" + templateExtension)
page, err := assets.Asset("templates/" + name + templateExtension)
if err != nil {
log.Print(err)
return 500, err
}
footer := string(rawFooter)
rawPage, err := assets.Asset("templates/" + name + templateExtension)
tpl, err := template.New("base").Funcs(funcMap).Parse(string(base))
if err != nil {
log.Print(err)
return 500, err
}
page := string(rawPage)
page = strings.Replace(page, headerMark, header, -1)
page = strings.Replace(page, footerMark, footer, -1)
tpl, err := template.New("page").Funcs(funcMap).Parse(page)
tpl, err = tpl.Parse(string(page))
if err != nil {
log.Print(err)
return 500, err
}
tpl.Execute(w, p)
tpl.ExecuteTemplate(w, "base", p)
return 200, nil
}