|
|
|
|
package smplt
|
|
|
|
|
|
|
|
|
|
import (
|
|
|
|
|
"mime"
|
|
|
|
|
"path"
|
|
|
|
|
"strings"
|
|
|
|
|
)
|
|
|
|
|
|
|
|
|
|
const (
|
|
|
|
|
SIMPLATE_TYPE_RENDERED = "rendered"
|
|
|
|
|
SIMPLATE_TYPE_STATIC = "static"
|
|
|
|
|
SIMPLATE_TYPE_NEGOTIATED = "negotiated"
|
|
|
|
|
SIMPLATE_TYPE_JSON = "json"
|
|
|
|
|
)
|
|
|
|
|
|
|
|
|
|
type Simplate struct {
|
|
|
|
|
Filename string
|
|
|
|
|
Type string
|
|
|
|
|
ContentType string
|
|
|
|
|
InitPage *SimplatePage
|
|
|
|
|
LogicPages []*SimplatePage
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
type SimplatePage struct {
|
|
|
|
|
Body string
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
func SimplateFromString(filename, content string) *Simplate {
|
|
|
|
|
rawPages := strings.Split(content, "")
|
|
|
|
|
nbreaks := len(rawPages) - 1
|
|
|
|
|
|
|
|
|
|
s := &Simplate{
|
|
|
|
|
Filename: filename,
|
|
|
|
|
Type: SIMPLATE_TYPE_STATIC,
|
|
|
|
|
ContentType: mime.TypeByExtension(path.Ext(filename)),
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if nbreaks == 1 && s.ContentType == "application/json" {
|
|
|
|
|
s.Type = SIMPLATE_TYPE_JSON
|
|
|
|
|
return s
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if nbreaks == 2 {
|
|
|
|
|
s.Type = SIMPLATE_TYPE_RENDERED
|
|
|
|
|
s.InitPage = &SimplatePage{Body: rawPages[0]}
|
|
|
|
|
s.LogicPages = append(s.LogicPages, &SimplatePage{Body: rawPages[1]})
|
|
|
|
|
return s
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if nbreaks > 2 {
|
|
|
|
|
s.Type = SIMPLATE_TYPE_NEGOTIATED
|
|
|
|
|
return s
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
return s
|
|
|
|
|
}
|