diff --git a/assets/fonts/Lato-Black.eot b/assets/fonts/Lato-Black.eot new file mode 100644 index 0000000000000000000000000000000000000000..444bc3aa2e3ba3675ae15408be55fb075902484f Binary files /dev/null and b/assets/fonts/Lato-Black.eot differ diff --git a/assets/fonts/Lato-Bold.eot b/assets/fonts/Lato-Bold.eot new file mode 100644 index 0000000000000000000000000000000000000000..3361183a419c188282a8545eaa8d8e298b8ffaab Binary files /dev/null and b/assets/fonts/Lato-Bold.eot differ diff --git a/assets/fonts/Lato-Bold.ttf b/assets/fonts/Lato-Bold.ttf new file mode 100644 index 0000000000000000000000000000000000000000..29f691d5ed0c2d3d224423bb0288e6bd59292511 Binary files /dev/null and b/assets/fonts/Lato-Bold.ttf differ diff --git a/assets/fonts/Lato-Bold.woff b/assets/fonts/Lato-Bold.woff new file mode 100644 index 0000000000000000000000000000000000000000..c6dff51f063cc732fdb5fe786a8966de85f4ebec Binary files /dev/null and b/assets/fonts/Lato-Bold.woff differ diff --git a/assets/fonts/Lato-Bold.woff2 b/assets/fonts/Lato-Bold.woff2 new file mode 100644 index 0000000000000000000000000000000000000000..bb195043cfc07fa52741c6144d7378b5ba8be4c5 Binary files /dev/null and b/assets/fonts/Lato-Bold.woff2 differ diff --git a/assets/fonts/Lato-BoldItalic.eot b/assets/fonts/Lato-BoldItalic.eot new file mode 100644 index 0000000000000000000000000000000000000000..3d4154936b42522fac84900c689a901ac12875c0 Binary files /dev/null and b/assets/fonts/Lato-BoldItalic.eot differ diff --git a/assets/fonts/Lato-BoldItalic.ttf b/assets/fonts/Lato-BoldItalic.ttf new file mode 100644 index 0000000000000000000000000000000000000000..f402040b3e5360b90f3a12ca2afab2cd7244e16f Binary files /dev/null and b/assets/fonts/Lato-BoldItalic.ttf differ diff --git a/assets/fonts/Lato-BoldItalic.woff b/assets/fonts/Lato-BoldItalic.woff new file mode 100644 index 0000000000000000000000000000000000000000..88ad05b9ff413055b4d4e89dd3eec1c193fa20c6 Binary files /dev/null and b/assets/fonts/Lato-BoldItalic.woff differ diff --git a/assets/fonts/Lato-BoldItalic.woff2 b/assets/fonts/Lato-BoldItalic.woff2 new file mode 100644 index 0000000000000000000000000000000000000000..c4e3d804b57b625b16a36d767bfca6bbf63d414e Binary files /dev/null and b/assets/fonts/Lato-BoldItalic.woff2 differ diff --git a/assets/fonts/Lato-Italic.eot b/assets/fonts/Lato-Italic.eot new file mode 100644 index 0000000000000000000000000000000000000000..3f826421a1d97b09797fad3d781a666a39eb45c9 Binary files /dev/null and b/assets/fonts/Lato-Italic.eot differ diff --git a/assets/fonts/Lato-Italic.ttf b/assets/fonts/Lato-Italic.ttf new file mode 100644 index 0000000000000000000000000000000000000000..b4bfc9b24aa993977662352c881c6e42f99f77e0 Binary files /dev/null and b/assets/fonts/Lato-Italic.ttf differ diff --git a/assets/fonts/Lato-Italic.woff b/assets/fonts/Lato-Italic.woff new file mode 100644 index 0000000000000000000000000000000000000000..76114bc03362242c3325ecda6ce6d02bb737880f Binary files /dev/null and b/assets/fonts/Lato-Italic.woff differ diff --git a/assets/fonts/Lato-Italic.woff2 b/assets/fonts/Lato-Italic.woff2 new file mode 100644 index 0000000000000000000000000000000000000000..3404f37e2e312757841abe20343588a7740768ca Binary files /dev/null and b/assets/fonts/Lato-Italic.woff2 differ diff --git a/assets/fonts/Lato-Regular.eot b/assets/fonts/Lato-Regular.eot new file mode 100644 index 0000000000000000000000000000000000000000..11e3f2a5f0f9b8c7ef6affae8c543d20f7c112be Binary files /dev/null and b/assets/fonts/Lato-Regular.eot differ diff --git a/assets/fonts/Lato-Regular.ttf b/assets/fonts/Lato-Regular.ttf new file mode 100644 index 0000000000000000000000000000000000000000..74decd9ebb8d805201934266b3bda6a9d5831024 Binary files /dev/null and b/assets/fonts/Lato-Regular.ttf differ diff --git a/assets/fonts/Lato-Regular.woff b/assets/fonts/Lato-Regular.woff new file mode 100644 index 0000000000000000000000000000000000000000..ae1307ff5f4c48678621c240f8972d5a6e20b22c Binary files /dev/null and b/assets/fonts/Lato-Regular.woff differ diff --git a/assets/fonts/Lato-Regular.woff2 b/assets/fonts/Lato-Regular.woff2 new file mode 100644 index 0000000000000000000000000000000000000000..3bf9843328a6359b6bd06e50010319c63da0d717 Binary files /dev/null and b/assets/fonts/Lato-Regular.woff2 differ diff --git a/assets/fonts/icons.eot b/assets/fonts/icons.eot new file mode 100644 index 0000000000000000000000000000000000000000..c60c9103fca724c32dc9c91f18769b391fc3624c Binary files /dev/null and b/assets/fonts/icons.eot differ diff --git a/assets/fonts/icons.svg b/assets/fonts/icons.svg new file mode 100644 index 0000000000000000000000000000000000000000..e3933635f72b24cec01ebe0b457076b217027185 --- /dev/null +++ b/assets/fonts/icons.svg @@ -0,0 +1,14 @@ +<?xml version="1.0" standalone="no"?> +<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"> +<svg xmlns="http://www.w3.org/2000/svg"> +<metadata>Copyright (C) 2017 by original authors @ fontello.com</metadata> +<defs> +<font id="fontello" horiz-adv-x="1000" > +<font-face font-family="fontello" font-weight="400" font-stretch="normal" units-per-em="1000" ascent="850" descent="-150" /> +<missing-glyph horiz-adv-x="1000" /> +<glyph glyph-name="download" unicode="" d="M714 100q0 15-10 25t-25 11-25-11-11-25 11-25 25-11 25 11 10 25z m143 0q0 15-10 25t-26 11-25-11-10-25 10-25 25-11 26 11 10 25z m72 125v-179q0-22-16-37t-38-16h-821q-23 0-38 16t-16 37v179q0 22 16 38t38 16h259l75-76q33-32 76-32t76 32l76 76h259q22 0 38-16t16-38z m-182 318q10-23-8-39l-250-250q-10-11-25-11t-25 11l-250 250q-17 16-8 39 10 21 33 21h143v250q0 15 11 25t25 11h143q14 0 25-11t10-25v-250h143q24 0 33-21z" horiz-adv-x="928.6" /> + +<glyph glyph-name="github" unicode="" d="M429 779q116 0 215-58t156-156 57-215q0-140-82-252t-211-155q-15-3-22 4t-7 17q0 1 0 43t0 75q0 54-29 79 32 3 57 10t53 22 45 37 30 58 11 84q0 67-44 115 21 51-4 114-16 5-46-6t-51-25l-21-13q-52 15-107 15t-108-15q-8 6-23 15t-47 22-47 7q-25-63-5-114-44-48-44-115 0-47 12-83t29-59 45-37 52-22 57-10q-21-20-27-58-12-5-25-8t-32-3-36 12-31 35q-11 18-27 29t-28 14l-11 1q-12 0-16-2t-3-7 5-8 7-6l4-3q12-6 24-21t18-29l6-13q7-21 24-34t37-17 39-3 31 1l13 3q0-22 0-50t1-30q0-10-8-17t-22-4q-129 43-211 155t-82 252q0 117 58 215t155 156 216 58z m-267-616q2 4-3 7-6 1-8-1-1-4 4-7 5-3 7 1z m18-19q4 3-1 9-6 5-9 2-4-3 1-9 5-6 9-2z m16-25q6 4 0 11-4 7-9 3-5-3 0-10t9-4z m24-23q4 4-2 10-7 7-11 2-5-5 2-11 6-6 11-1z m32-14q1 6-8 9-8 2-10-4t7-9q8-3 11 4z m35-3q0 7-10 6-9 0-9-6 0-7 10-6 9 0 9 6z m32 5q-1 7-10 5-9-1-8-8t10-4 8 7z" horiz-adv-x="857.1" /> +</font> +</defs> +</svg> \ No newline at end of file diff --git a/assets/fonts/icons.ttf b/assets/fonts/icons.ttf new file mode 100644 index 0000000000000000000000000000000000000000..90de2769e2b135e10653cee9e275e4991cb593a1 Binary files /dev/null and b/assets/fonts/icons.ttf differ diff --git a/assets/fonts/icons.woff b/assets/fonts/icons.woff new file mode 100644 index 0000000000000000000000000000000000000000..dbe80bdf902fcd04519caaedcbb43c8638153915 Binary files /dev/null and b/assets/fonts/icons.woff differ diff --git a/assets/fonts/icons.woff2 b/assets/fonts/icons.woff2 new file mode 100644 index 0000000000000000000000000000000000000000..64ca517d96891fd6df6eb7fc5b47fa972ddf541e Binary files /dev/null and b/assets/fonts/icons.woff2 differ diff --git a/assets/sass/fonts.sass b/assets/sass/fonts.sass new file mode 100644 index 0000000000000000000000000000000000000000..e0b855b982e0cf6f578c7dba58d98a41cf01e640 --- /dev/null +++ b/assets/sass/fonts.sass @@ -0,0 +1,31 @@ +@font-face + font-family: 'Lato' + src: url('/assets/fonts/Lato-Regular.eot') + src: url('/assets/fonts/Lato-Regular.eot?#iefix') format('embedded-opentype'), url('/assets/fonts/Lato-Regular.woff2') format('woff2'), url('/assets/fonts/Lato-Regular.woff') format('woff'), url('/assets/fonts/Lato-Regular.ttf') format('truetype') + font-style: normal + font-weight: normal + text-rendering: optimizeLegibility + +@font-face + font-family: 'Lato' + src: url('/assets/fonts/Lato-Bold.eot') + src: url('/assets/fonts/Lato-Bold.eot?#iefix') format('embedded-opentype'), url('/assets/fonts/Lato-Bold.woff2') format('woff2'), url('/assets/fonts/Lato-Bold.woff') format('woff'), url('/assets/fonts/Lato-Bold.ttf') format('truetype') + font-style: normal + font-weight: bold + text-rendering: optimizeLegibility + +@font-face + font-family: 'Lato' + src: url('/assets/fonts/Lato-BoldItalic.eot') + src: url('/assets/fonts/Lato-BoldItalic.eot?#iefix') format('embedded-opentype'), url('/assets/fonts/Lato-BoldItalic.woff2') format('woff2'), url('/assets/fonts/Lato-BoldItalic.woff') format('woff'), url('/assets/fonts/Lato-BoldItalic.ttf') format('truetype') + font-style: italic + font-weight: bold + text-rendering: optimizeLegibility + +@font-face + font-family: 'Lato' + src: url('/assets/fonts/Lato-Italic.eot') + src: url('/assets/fonts/Lato-Italic.eot?#iefix') format('embedded-opentype'), url('/assets/fonts/Lato-Italic.woff2') format('woff2'), url('/assets/fonts/Lato-Italic.woff') format('woff'), url('/assets/fonts/Lato-Italic.ttf') format('truetype') + font-style: italic + font-weight: normal + text-rendering: optimizeLegibility \ No newline at end of file diff --git a/assets/sass/style.sass b/assets/sass/style.sass index 866f866e80d8d65d2dba2a56826674c0de861481..a734bc4cc53c396eb1e818bb722972e348dba81b 100644 --- a/assets/sass/style.sass +++ b/assets/sass/style.sass @@ -1,30 +1,46 @@ +* + margin: 0 + padding: 0 + +body + background: #F2F2F2 + font-family: 'Lato', sans-serif + font-size: 81.25% + .images display: flex max-width: 1024px margin: 0 auto .image - display: flex - height: 160px - width: 160px - justify-content: center - align-content: center - justify-items: center - align-items: center - padding: 4px - margin: 4px + padding: 8px + margin: 8px position: relative - box-shadow: 0 2px 4px rgba(33, 33, 33, 0.2) + box-shadow: 0 2px 4px rgba(33,33,33,0.2) transition: all 200ms - - .info - display: none - position: absolute - right: 0 + text-decoration: none + width: 160px + background: #ffffff &:hover margin-top: 2px - box-shadow: 0 4px 6px rgba(33, 33, 33, 0.3) + box-shadow: 0 4px 6px rgba(33,33,33,0.3) + + .image-container + display: flex + justify-content: center + align-content: center + justify-items: center + align-items: center + flex-direction: column + height: 160px + width: 160px + + .info + display: block + z-index: 1 + color: #212121 + line-height: 1.25 + font-size: 10pt + padding-top: 4px - .info - display: block \ No newline at end of file diff --git a/main.go b/main.go index 22d04ce2a85af5cbf20e4ec2b36a63b3d627b150..f5f67475676c8740f781eacd601db8379831ce99 100644 --- a/main.go +++ b/main.go @@ -76,23 +76,6 @@ func createImage(config *Config, body io.ReadCloser, fileHeader *multipart.FileH return image, nil } -func returnResult(writer http.ResponseWriter, result Result) error { - writer.Header().Add("Content-Type", "text/html") - body, err := json.Marshal(result) - if err != nil { - return err - } - writer.Write([]byte("<pre>")) - writer.Write(body) - writer.Write([]byte("</pre>")) - if result.Success { - writer.Write([]byte("<p><a href=\"")) - writer.Write([]byte(fmt.Sprintf("https://i.k8r.eu/i/%s", result.Id))) - writer.Write([]byte("\">Uploaded Image</a></p>")) - } - return nil -} - type UserInfo struct { Id string Name string @@ -107,6 +90,31 @@ func parseUser(r *http.Request) UserInfo { } } +type UploadData struct { + User UserInfo + Result Result +} + +func returnResult(w http.ResponseWriter, data UploadData) error { + var pageTemplate *template.Template + var err error + if data.Result.Success { + pageTemplate, err = template.New("upload_success.html").ParseFiles("templates/upload_success.html") + } else { + pageTemplate, err = template.New("upload_failure.html").ParseFiles("templates/upload_failure.html") + } + if err != nil { + return err + } + + err = pageTemplate.Execute(w, data) + if err != nil { + return err + } + + return nil +} + func main() { config := NewConfigFromEnv() @@ -131,10 +139,13 @@ func main() { file, header, err := r.FormFile("file") image, err := createImage(&config, file, header) if err != nil { - returnResult(w, Result{ - Id: "", - Success: false, - Errors: []string{err.Error()}, + returnResult(w, UploadData{ + user, + Result{ + Id: "", + Success: false, + Errors: []string{err.Error()}, + }, }) return } @@ -148,10 +159,13 @@ func main() { data, err := json.Marshal(image) if err != nil { - returnResult(w, Result{ - Id: image.Id, - Success: false, - Errors: []string{err.Error()}, + returnResult(w, UploadData{ + user, + Result{ + Id: image.Id, + Success: false, + Errors: []string{err.Error()}, + }, }) return } @@ -165,10 +179,13 @@ func main() { for waiting { message, err := pubsub.ReceiveMessage() if err != nil { - returnResult(w, Result{ - Id: image.Id, - Success: false, - Errors: []string{err.Error()}, + returnResult(w, UploadData{ + user, + Result{ + Id: image.Id, + Success: false, + Errors: []string{err.Error()}, + }, }) return } @@ -176,10 +193,13 @@ func main() { result := Result{} err = json.Unmarshal([]byte(message.Payload), &result) if err != nil { - returnResult(w, Result{ - Id: image.Id, - Success: false, - Errors: []string{err.Error()}, + returnResult(w, UploadData{ + user, + Result{ + Id: image.Id, + Success: false, + Errors: []string{err.Error()}, + }, }) return } @@ -189,7 +209,10 @@ func main() { if result.Id == image.Id { waiting = false - returnResult(w, result) + returnResult(w, UploadData{ + user, + result, + }) return } } @@ -200,7 +223,7 @@ func main() { User UserInfo } - tmpl, err := template.New("upload").ParseFiles("templates/upload") + tmpl, err := template.New("upload.html").ParseFiles("templates/upload.html") if err != nil { panic(err) } @@ -246,7 +269,7 @@ func main() { images = append(images, info) } - pageTemplate, err := template.New("me_images").ParseFiles("templates/me_images") + pageTemplate, err := template.New("me_images.html").ParseFiles("templates/me_images.html") if err != nil { panic(err) } @@ -268,7 +291,7 @@ func main() { User UserInfo } - tmpl, err := template.New("index").ParseFiles("templates/index") + tmpl, err := template.New("index.html").ParseFiles("templates/index.html") if err != nil { panic(err) } diff --git a/templates/index b/templates/index.html similarity index 60% rename from templates/index rename to templates/index.html index 858580743218cdf68a5b4dd3a0d59d52a2e5bcf8..9574e78ff1367459a0453fc84b4fc5fb83c1cf92 100644 --- a/templates/index +++ b/templates/index.html @@ -1,4 +1,8 @@ <!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> diff --git a/templates/me_images b/templates/me_images.html similarity index 57% rename from templates/me_images rename to templates/me_images.html index 808f8d95a828c6d16f4781ba5bd7fd03c029da08..43c759af556e9378f7aa05f08c2d0260c86fb64f 100644 --- a/templates/me_images +++ b/templates/me_images.html @@ -2,6 +2,7 @@ <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> @@ -13,11 +14,13 @@ <div class="images"> {{ range .Images }} <a class="image" href="/i/{{ .Id }}"> - <img src="/i/{{ .Id }}t" > - <div class="text"> - <p>{{ .OriginalName }}</p> - <p>{{ .CreatedAt }}</p> - <p>{{ .MimeType }}</p> + <div class="image-container"> + <img src="/i/{{ .Id }}t" > + </div> + <div class="info"> + <span>{{ .OriginalName }}</span> + <span>{{ .CreatedAt }}</span> + <span>{{ .MimeType }}</span> </div> </a> {{ end }} diff --git a/templates/upload b/templates/upload.html similarity index 66% rename from templates/upload rename to templates/upload.html index 7a4f1d0ecc09583c806e35aead1ee13d25ded113..d3e7a4cb454514b2b4c74f07176f1bdddcd0d977 100644 --- a/templates/upload +++ b/templates/upload.html @@ -1,4 +1,8 @@ <!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> diff --git a/templates/upload_failure.html b/templates/upload_failure.html new file mode 100644 index 0000000000000000000000000000000000000000..9816479edd969e1ff49a8f08c9784df62446190e --- /dev/null +++ b/templates/upload_failure.html @@ -0,0 +1,24 @@ +<!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> + +<div class="info error"> + <h2>Upload of {{ .Result.Id }} failed.</h2> + {{ range .Result.Errors }} + <pre>{{ . }}</pre> + {{ end }} +</div> + +<form action="/upload/" method="POST" enctype="multipart/form-data"> + <input type="file" name="file"/> + <input type="submit"/> +</form> \ No newline at end of file diff --git a/templates/upload_success.html b/templates/upload_success.html new file mode 100644 index 0000000000000000000000000000000000000000..1d7fbaffe9e7c65555cb8b8b952144dca789c95c --- /dev/null +++ b/templates/upload_success.html @@ -0,0 +1,21 @@ +<!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> + +<div class="info success"> + <h2>Upload of {{ .Result.Id }} finished. <a href="/i/{{ .Result.Id }}">View</a>.</h2> +</div> + +<form action="/upload/" method="POST" enctype="multipart/form-data"> + <input type="file" name="file"/> + <input type="submit"/> +</form> \ No newline at end of file