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  }