-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathview.go
executable file
·91 lines (64 loc) · 1.67 KB
/
view.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
package goninja
import (
"strings"
"html/template"
"os"
)
var views_path = CURRENT_DIR + "/app/views/"
var layout_path = CURRENT_DIR + "/app/views/layouts/base.tmpl"
var FuncMap = template.FuncMap{
"whatEver": func(s string) string {return s},
}
type View struct {
Name string
Path string
C *Controller
}
func (v *View) RenderView(data interface{}) {
path:= v.TemplatePath(v.C.Action)
if !Exists(path){
v.C.Writer.Write([]byte(v.TemplateNotFound()))
return
}
tmpl := template.New("base.tmpl").Funcs(FuncMap)
template.Must(tmpl.ParseFiles(layout_path, path))
for _, view := range v.C.Views {
LOGGER.Println(tmpl)
tmpl, err = tmpl.ParseFiles(v.TemplatePath(view))
}
if err == nil {
LOGGER.Println(data)
err = tmpl.Execute(v.C.Writer, data)
if err != nil {
v.C.Writer.Write([]byte(err.Error()))
}
} else {
// LOGGER.Println(err)
v.C.Writer.Write([]byte(v.TemplateNotFound()))
}
}
func (v *View) RenderJson(jsonString []byte) {
LOGGER.Println(jsonString);
writer := v.C.Writer
writer.Header().Set("Content-Type", "application/json")
writer.Write(jsonString);
}
func Exists(name string) bool {
if _, err := os.Stat(name); err != nil {
if os.IsNotExist(err) {
return false
}
}
return true
}
func (v *View) view_folder() string {
path:= strings.Trim(v.Name, "Controller")
return path
}
func (v *View) TemplateNotFound() string {
return "Template with name \"" + strings.ToLower(v.C.Action) + "\" in \"views/" + v.view_folder() + "\" cound not be found or contains errors"
}
func (v *View) TemplatePath(name string) string {
path := views_path + strings.ToLower(v.view_folder()) + "/" + strings.ToLower(name) + ".html"
return path
}