From 8080553db06dbca8945d84e465b0b5d0245b0b1f Mon Sep 17 00:00:00 2001
From: Janne Koschinski <janne@kuschku.de>
Date: Sat, 17 Mar 2018 22:03:46 +0100
Subject: [PATCH] Improved templating

---
 main.go                    |  8 +++++++-
 templates/_base.html       |  4 ++++
 templates/_footer.html     |  2 ++
 templates/_header.html     |  7 +++++++
 templates/_navigation.html | 10 +++++++++
 templates/index.html       | 16 ++-------------
 templates/me_images.html   | 42 +++++++++++++++-----------------------
 templates/upload.html      | 18 ++++------------
 8 files changed, 52 insertions(+), 55 deletions(-)
 create mode 100644 templates/_base.html
 create mode 100644 templates/_footer.html
 create mode 100644 templates/_header.html
 create mode 100644 templates/_navigation.html

diff --git a/main.go b/main.go
index 75b18bd..76b21a8 100644
--- a/main.go
+++ b/main.go
@@ -96,7 +96,13 @@ type UploadData struct {
 }
 
 func returnResult(w http.ResponseWriter, templateName string, data interface{}) error {
-	pageTemplate, err := template.New(templateName).ParseFiles(fmt.Sprintf("templates/%s", templateName))
+	pageTemplate, err := template.ParseFiles(
+		"templates/_base.html",
+		"templates/_header.html",
+		"templates/_navigation.html",
+		"templates/_footer.html",
+		fmt.Sprintf("templates/%s", templateName),
+	)
 	if err != nil {
 		return err
 	}
diff --git a/templates/_base.html b/templates/_base.html
new file mode 100644
index 0000000..9bab238
--- /dev/null
+++ b/templates/_base.html
@@ -0,0 +1,4 @@
+{{template "header" .}}
+{{template "navigation" .User}}
+{{template "content" .}}
+{{template "footer" .}}
\ No newline at end of file
diff --git a/templates/_footer.html b/templates/_footer.html
new file mode 100644
index 0000000..c4a5da5
--- /dev/null
+++ b/templates/_footer.html
@@ -0,0 +1,2 @@
+{{ define "footer"}}
+{{end}}
\ No newline at end of file
diff --git a/templates/_header.html b/templates/_header.html
new file mode 100644
index 0000000..affb686
--- /dev/null
+++ b/templates/_header.html
@@ -0,0 +1,7 @@
+{{define "header"}}
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>{{ template "title" .}}</title>
+<link href="/assets/css/style.css" rel="stylesheet">
+<link href="/assets/css/fonts.css" rel="stylesheet">
+{{end}}
\ No newline at end of file
diff --git a/templates/_navigation.html b/templates/_navigation.html
new file mode 100644
index 0000000..56cebab
--- /dev/null
+++ b/templates/_navigation.html
@@ -0,0 +1,10 @@
+{{ define "navigation" }}
+{{ if .Id }}
+<p>Welcome, {{ .Name }}</p>
+<p>
+    <a href="/me/images">My Images</a> |
+    <a href="/me/albums">My Albums</a> |
+    <a href="/upload">Upload</a>
+</p>
+{{ end }}
+{{ end}}
\ No newline at end of file
diff --git a/templates/index.html b/templates/index.html
index 9574e78..3590730 100644
--- a/templates/index.html
+++ b/templates/index.html
@@ -1,14 +1,2 @@
-<!DOCTYPE html>
-<meta charset="utf-8">
-<title>ik8r</title>
-<link href="/assets/css/style.css" rel="stylesheet">
-<link href="/assets/css/fonts.css" rel="stylesheet">
-
-{{ if .User.Id }}
-    <p>Welcome, {{ .User.Name }}</p>
-    <p>
-        <a href="/me/images">My Images</a> |
-        <a href="/me/albums">My Albums</a> |
-        <a href="/upload">Upload</a>
-    </p>
-{{ end }}
\ No newline at end of file
+{{define "title"}}ik8r{{end}}
+{{define "content"}}{{end}}
\ No newline at end of file
diff --git a/templates/me_images.html b/templates/me_images.html
index 91dc7ae..ac8a629 100644
--- a/templates/me_images.html
+++ b/templates/me_images.html
@@ -1,27 +1,17 @@
-<!DOCTYPE html>
-<meta charset="utf-8">
-<title>My Images | ik8r</title>
-<link href="/assets/css/style.css" rel="stylesheet">
-<link href="/assets/css/fonts.css" rel="stylesheet">
-
-<p>Welcome, {{ .User.Name }}</p>
-<p>
-    <a href="/me/images">My Images</a> |
-    <a href="/me/albums">My Albums</a> |
-    <a href="/upload">Upload</a>
-</p>
-
+{{define "title"}}My Images | ik8r{{end}}
+{{define "content"}}
 <div class="images">
-    {{ range .Images }}
-        <a class="image" href="/i/{{ .Id }}">
-            <div class="image-container">
-              <img src="/i/{{ .Id }}t" >
-            </div>
-            <div class="info">
-              <p>{{ .OriginalName }}</p>
-              <p><time>{{ .CreatedAt.Format "2006-01-02 15:04" }}</time></p>
-              <p>{{ .MimeType }}</p>
-            </div>
-        </a>
-    {{ end }}
-</div>
\ No newline at end of file
+{{ range .Images }}
+    <a class="image" href="/i/{{ .Id }}">
+        <div class="image-container">
+            <img src="/i/{{ .Id }}t" >
+        </div>
+        <div class="info">
+            <p>{{ .OriginalName }}</p>
+            <p><time>{{ .CreatedAt.Format "2006-01-02 15:04" }}</time></p>
+            <p>{{ .MimeType }}</p>
+        </div>
+    </a>
+{{ end }}
+</div>
+{{end}}
\ No newline at end of file
diff --git a/templates/upload.html b/templates/upload.html
index 3663ee5..215c130 100644
--- a/templates/upload.html
+++ b/templates/upload.html
@@ -1,16 +1,5 @@
-<!DOCTYPE html>
-<meta charset="utf-8">
-<title>Upload | ik8r</title>
-<link href="/assets/css/style.css" rel="stylesheet">
-<link href="/assets/css/fonts.css" rel="stylesheet">
-
-<p>Welcome, {{ .User.Name }}</p>
-<p>
-    <a href="/me/images">My Images</a> |
-    <a href="/me/albums">My Albums</a> |
-    <a href="/upload">Upload</a>
-</p>
-
+{{define "title"}}Upload | ik8r{{end}}
+{{define "content"}}
 {{ range .Results }}
 {{ if .Success }}
 <div class="info success">
@@ -29,4 +18,5 @@
 <form action="/upload/" method="POST" enctype="multipart/form-data">
     <input type="file" name="file" accept="image/jpeg,image/png,image/bmp,*.jpeg,*.jpg,*.png,*.bmp" multiple/>
     <input type="submit"/>
-</form>
\ No newline at end of file
+</form>
+{{end}}
\ No newline at end of file
-- 
GitLab