Completed template system, added login/logout

This commit is contained in:
2017-10-06 21:32:26 +02:00
parent 8c8aad3312
commit 2d8bdf9643
19 changed files with 399 additions and 51 deletions
+17 -3
View File
@@ -15,15 +15,22 @@ import (
var wd, _ = os.Getwd()
var rootPath = path.Join(wd, "./view/templates/")
var cache = make(map[string]*template.Template)
var argsCache = make(map[string][]string)
// Register registers a template and compiles it for rendering. This should be done
// in the beginning since an error will terminate the server
func Register(name string, base string) {
tmpl, err := template.New(name).ParseFiles(path.Join(rootPath, name+".tmpl"), path.Join(rootPath, base+".tmpl"))
func Register(name string, base string, fragments ...string) {
for i, fragment := range fragments {
fragments[i] = path.Join(rootPath, fragment+".tmpl")
}
args := append([]string{path.Join(rootPath, name+".tmpl"), path.Join(rootPath, base+".tmpl")}, fragments...)
tmpl, err := template.New(name).ParseFiles(args...)
if err != nil {
log.Fatalf("Failed to register %s: %s", name, err)
}
argsCache[name] = args
cache[name] = tmpl
}
@@ -37,8 +44,14 @@ func Render(w http.ResponseWriter, name string, status int, viewModel interface{
return
}
tmpl, err := template.New(name).ParseFiles(argsCache[name]...)
if err != nil {
response.Text(w, 500, "Failed to run template "+name+": "+err.Error())
return
}
w.WriteHeader(status)
err := tmpl.ExecuteTemplate(w, "base", viewModel)
err = tmpl.ExecuteTemplate(w, "base", viewModel)
if err != nil {
log.Println("Template error:", err.Error())
}
@@ -56,4 +69,5 @@ func Run(w io.Writer, name string, viewModel interface{}) error {
func init() {
Register("index", "base/default")
Register("login", "base/default")
}
+3 -6
View File
@@ -20,7 +20,7 @@
<script type="text/javascript" src="/ui/js/background.js"></script>
{{ template "head" }}
{{ block "head" . }}{{end}}
</head>
<body>
@@ -28,14 +28,11 @@
<div id="content-wrapper">
<main>
{{ template "content" }}
{{ block "content" . }}{{end}}
</main>
<nav class="main-menu">
{{ template "menu" }}
<ul>
<li><a><div class="mg-icon">A</div><div class="mg-label">Login</div></a></li>
</ul>
{{ block "menu" . }}{{end}}
</nav>
</div>
</body>
+24 -2
View File
@@ -1,11 +1,33 @@
{{ define "content" }}
<article>
<h1>Hello, World</h1>
</article>
{{ end }}
{{ define "menu" }}
<h1>Aite RP</h1>
<a href="/"><h1>Aite RP</h1></a>
<ul>
{{ range .Categories }}
<li class="{{ if eq .Key $.ActiveCategory.Key }}selected{{end}}"><a href="/{{.URLRoot}}/{{$.ActiveTag.Hook}}"><div class="mg-icon">Π</div><div class="mg-label">{{.Plural}}</div></a></li>
{{ end }}
</ul>
{{ if $.User.LoggedIn }}
<ul>
<li><a href="/page/create"><div class="mg-icon">+</div><div class="mg-label">Create</div></a></li>
</ul>
<ul>
<li><a href="/user/logout"><div class="mg-icon">A</div><div class="mg-label">Logout</div></a></li>
</ul>
{{ else }}
<ul>
<li><a href="/user/login"><div class="mg-icon">A</div><div class="mg-label">Login</div></a></li>
</ul>
{{ end }}
{{ end }}
{{ define "head" }}
+21
View File
@@ -0,0 +1,21 @@
{{ define "content" }}
<article>
<h1>Login</h1>
<form action="/user/login", method="POST">
<p class="red">{{$.Error}}</p>
<input placeholder="Username" name="username" type="text" />
<input placeholder="Password" name="password" type="password" />
<button type="submit">Submit</button>
</form>
</article>
{{ end }}
{{ define "menu" }}
<a href="/"><h1>Aite RP</h1></a>
<li><a href="/"><div class="mg-icon">&lt;</div><div class="mg-label">Back</div></a></li>
{{ end }}
{{ define "head" }}
{{ end }}