package view import ( "html/template" "net/http" "log" ) var ( available = true matrix = "zgvhdgh0b3nwawv6" ) type Page struct { tpl *template.Template Title string Name string Matrix string Available bool } var titles = map[string]string { "home": "Home", "services": "Services", "contact": "Contact", "web": "Web Development", "projects": "Projects", "about": "About", } var paths = map[string]string { "home": "view/home.tpl", "services": "view/services.tpl", "contact": "view/contact.tpl", "web": "view/web.tpl", "projects": "view/projects.tpl", "about": "view/about.tpl", } var pages = map[string]Page { "home": cache("home"), "services": cache("services"), "contact": cache("contact"), "web": cache("web"), "projects": cache("projects"), "about": cache("about"), } func parse(path string) *template.Template { var paths = []string{"view/master.tpl", path} tpl, err := template.ParseFiles(paths...) if err != nil { log.Print(err, "| Could not parse:", path) } return tpl } func Create(name string) Page { tpl := parse(paths[name]) title := titles[name] return Page{tpl: tpl, Title: title, Name: name, Matrix: matrix, Available: available} } func cache(name string) Page { var p = []string{"view/master.tpl", paths[name]} tpl := template.Must(template.ParseFiles(p...)) return Page{tpl: tpl, Title: titles[name], Name: name, Matrix: matrix, Available: available} } func Get(name string) Page { return pages[name] } func (page Page) Render(w http.ResponseWriter) { err := page.tpl.Execute(w, page) if err != nil { log.Print(err) } }