Completed template system, added login/logout
This commit is contained in:
+17
-3
@@ -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")
|
||||
}
|
||||
|
||||
@@ -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>
|
||||
|
||||
@@ -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" }}
|
||||
|
||||
@@ -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"><</div><div class="mg-label">Back</div></a></li>
|
||||
{{ end }}
|
||||
|
||||
{{ define "head" }}
|
||||
|
||||
{{ end }}
|
||||
Reference in New Issue
Block a user