github.com/loomnetwork/gamechain@v0.0.0-20200406110549-36c47eb97a92/tools/gamechain-debugger/view/view.go (about) 1 package view 2 3 import ( 4 "bytes" 5 "fmt" 6 "html/template" 7 "net/http" 8 "path/filepath" 9 10 "github.com/gobuffalo/packr/v2" 11 ) 12 13 var v View 14 var LayoutDir string = "view/layout" 15 16 type View struct { 17 Template *template.Template 18 Layout string 19 } 20 21 type ViewData struct { 22 Data interface{} 23 BaseUrl string 24 } 25 26 func getPage(page string) string { 27 var buffer bytes.Buffer 28 layout := packr.New("layout", "./layout") 29 layoutFiles := layout.List() 30 pages := packr.New("pages", "./pages") 31 32 for i := 0; i < len(layoutFiles); i++ { 33 b, err := layout.FindString(layoutFiles[i]) 34 if err != nil { 35 panic(err) 36 } 37 buffer.WriteString(b) 38 } 39 b, err := pages.FindString(page) 40 if err != nil { 41 panic(err) 42 } 43 buffer.WriteString(b) 44 return buffer.String() 45 } 46 47 func NewView(layout string, file string) *View { 48 49 page := getPage(file) 50 t, err := template.New(layout).Parse(page) 51 if err != nil { 52 panic(err) 53 } 54 55 return &View{ 56 Template: t, 57 Layout: layout, 58 } 59 } 60 61 func layoutFiles() []string { 62 files, err := filepath.Glob(LayoutDir + "/*.html") 63 if err != nil { 64 panic(err) 65 } 66 fmt.Println(files) 67 return files 68 } 69 70 func (v *View) Render(w http.ResponseWriter, data ...interface{}) error { 71 vd := ViewData{ 72 Data: data, 73 } 74 return v.Template.ExecuteTemplate(w, v.Layout, vd) 75 }