Style submit and thank-you pages
After Width: | Height: | Size: 86 B |
Before Width: | Height: | Size: 86 B After Width: | Height: | Size: 86 B |
After Width: | Height: | Size: 70 B |
After Width: | Height: | Size: 462 B |
After Width: | Height: | Size: 371 B |
After Width: | Height: | Size: 513 B |
After Width: | Height: | Size: 538 B |
|
@ -144,13 +144,37 @@
|
||||||
}
|
}
|
||||||
|
|
||||||
.win95-btn {
|
.win95-btn {
|
||||||
width: 5.6rem;
|
min-width: 5.6rem;
|
||||||
|
height: 1.4375rem; /* 23px */
|
||||||
border-width: 2px;
|
border-width: 2px;
|
||||||
border-style: solid;
|
border-style: solid;
|
||||||
border-color: #fff #333 #333 #fff;
|
border-color: #fff #333 #333 #fff;
|
||||||
border-image: url('{{ dataimg "timemachine/win95-border-btn.gif" }}') 4;
|
border-image: url('{{ dataimg "timemachine/win95-border-btn.gif" }}') 4;
|
||||||
text-align: center;
|
text-align: center;
|
||||||
cursor: pointer;
|
cursor: pointer;
|
||||||
|
display: flex;
|
||||||
|
justify-content: center;
|
||||||
|
align-items: center;
|
||||||
|
font-weight: normal;
|
||||||
|
padding: 0 1rem !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
.win95-btn:active {
|
||||||
|
border-image: url('{{ dataimg "timemachine/win95-border-btn-pressed.gif" }}') 4;
|
||||||
|
padding-top: 2px !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
.win95-input {
|
||||||
|
border-width: 2px;
|
||||||
|
border-style: solid;
|
||||||
|
border-image: url('{{ dataimg "timemachine/win95-border-input.gif" }}') 4;
|
||||||
|
outline: none;
|
||||||
|
background-color: white !important;
|
||||||
|
resize: vertical; /* only applies to textareas so whatever */
|
||||||
|
}
|
||||||
|
|
||||||
|
.less-spacing p {
|
||||||
|
margin: 0.2rem 0;
|
||||||
}
|
}
|
||||||
</style>
|
</style>
|
||||||
|
|
||||||
|
|
|
@ -1,48 +0,0 @@
|
||||||
{{ template "timemachine_base.html" . }}
|
|
||||||
|
|
||||||
{{ define "frame title" }}
|
|
||||||
<div class="title">
|
|
||||||
{{ . }}
|
|
||||||
<img class="frame-close" src="{{ dataimg "timemachine/win95-close.gif" }}">
|
|
||||||
</div>
|
|
||||||
{{ end }}
|
|
||||||
|
|
||||||
{{ define "content" }}
|
|
||||||
<div class="center-layout content mw7 ph3 flex flex-column g3">
|
|
||||||
<div class="frame mv4">
|
|
||||||
{{ template "frame title" "Hello" }}
|
|
||||||
<form class="post-content" action="" method="POST">
|
|
||||||
{{ csrftoken .Session }}
|
|
||||||
<input type="url" name="media_url" required />
|
|
||||||
<textarea name="device_info" required></textarea>
|
|
||||||
<textarea name="description" required></textarea>
|
|
||||||
<input class="win95-btn" type="submit" value="Submit" />
|
|
||||||
</form>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
<script>
|
|
||||||
let form = document.querySelector("form");
|
|
||||||
let mediaUrl = document.querySelector("[name=media_url]");
|
|
||||||
let deviceInfo = document.querySelector("[name=device_info]");
|
|
||||||
let description = document.querySelector("[name=description]");
|
|
||||||
let submitBtn = document.querySelector("[type=submit]");
|
|
||||||
|
|
||||||
function saveData() {
|
|
||||||
localStorage.setItem("tm_media_url", mediaUrl.value);
|
|
||||||
localStorage.setItem("tm_device_info", deviceInfo.value);
|
|
||||||
localStorage.setItem("tm_description", description.value);
|
|
||||||
}
|
|
||||||
form.addEventListener("submit", function() {
|
|
||||||
saveData();
|
|
||||||
submitBtn.disabled = true;
|
|
||||||
});
|
|
||||||
|
|
||||||
document.addEventListener("visibilitychange", function() {
|
|
||||||
saveData();
|
|
||||||
});
|
|
||||||
|
|
||||||
mediaUrl.value = localStorage.getItem("tm_media_url") ?? "";
|
|
||||||
deviceInfo.value = localStorage.getItem("tm_device_info") ?? "";
|
|
||||||
description.value = localStorage.getItem("tm_description") ?? "";
|
|
||||||
</script>
|
|
||||||
{{ end }}
|
|
|
@ -1,21 +0,0 @@
|
||||||
{{ template "timemachine_base.html" . }}
|
|
||||||
|
|
||||||
{{ define "frame title" }}
|
|
||||||
<div class="title">
|
|
||||||
{{ . }}
|
|
||||||
<img class="frame-close" src="{{ dataimg "timemachine/win95-close.gif" }}">
|
|
||||||
</div>
|
|
||||||
{{ end }}
|
|
||||||
|
|
||||||
{{ define "content" }}
|
|
||||||
<div class="center-layout content mw7 ph3 flex flex-column g3">
|
|
||||||
<div class="frame">
|
|
||||||
Thank you for your submission
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
<script>
|
|
||||||
localStorage.removeItem("tm_media_url");
|
|
||||||
localStorage.removeItem("tm_device_info");
|
|
||||||
localStorage.removeItem("tm_description");
|
|
||||||
</script>
|
|
||||||
{{ end }}
|
|
|
@ -76,6 +76,9 @@
|
||||||
</p>
|
</p>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
<div class="flex justify-end g3">
|
||||||
|
<a class="win95-btn" href="{{ .SubmitUrl }}"><u>S</u>ubmit your own</a>
|
||||||
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
@ -93,7 +96,6 @@
|
||||||
</div>
|
</div>
|
||||||
<div class="flex justify-end g3">
|
<div class="flex justify-end g3">
|
||||||
<div class="win95-btn"><u>Y</u>es</div>
|
<div class="win95-btn"><u>Y</u>es</div>
|
||||||
<div class="win95-btn"><u>A</u>bsolutely</div>
|
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
|
@ -0,0 +1,106 @@
|
||||||
|
{{ template "timemachine_base.html" . }}
|
||||||
|
|
||||||
|
{{ define "frame title" }}
|
||||||
|
<div class="title">
|
||||||
|
{{ . }}
|
||||||
|
<img class="frame-close" src="{{ dataimg "timemachine/win95-close.gif" }}">
|
||||||
|
</div>
|
||||||
|
{{ end }}
|
||||||
|
|
||||||
|
{{ define "content" }}
|
||||||
|
<div class="center-layout content mw7 ph3 flex flex-column g3">
|
||||||
|
<div class="frame mv3 mv4-ns mw6 margin-center">
|
||||||
|
{{ template "frame title" "Submit A Video" }}
|
||||||
|
<form class="post-content" action="" method="POST">
|
||||||
|
{{ csrftoken .Session }}
|
||||||
|
<div class="post-content pa3">
|
||||||
|
<div class="flex flex-column g3">
|
||||||
|
<div class="flex g3">
|
||||||
|
<div class="flex-shrink-0">
|
||||||
|
<img class="pixelated" src="{{ dataimg "timemachine/win95-media.png" }}">
|
||||||
|
</div>
|
||||||
|
<div class="flex flex-column flex-grow-1 g1">
|
||||||
|
<strong>Video URL</strong>
|
||||||
|
<input
|
||||||
|
class="win95-input"
|
||||||
|
type="url"
|
||||||
|
name="media_url"
|
||||||
|
required
|
||||||
|
>
|
||||||
|
<div class="f7 less-spacing">
|
||||||
|
<p>
|
||||||
|
Take video of yourself using an old device. The video should:
|
||||||
|
</p>
|
||||||
|
<ul>
|
||||||
|
<li>Show the entire device so viewers have necessary context</li>
|
||||||
|
<li>Clearly show the contents of the device's screen</li>
|
||||||
|
<li>Have minimal editing, no commentary, and clear sound</li>
|
||||||
|
</ul>
|
||||||
|
<p>
|
||||||
|
Upload the video somewhere publicly accessible, then share the link here. We can download videos from file-sharing services or any video service supported by youtube-dl.
|
||||||
|
</p>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="flex g3">
|
||||||
|
<div class="flex-shrink-0">
|
||||||
|
<img class="pixelated" src="{{ dataimg "timemachine/win95-checklist.png" }}">
|
||||||
|
</div>
|
||||||
|
<div class="flex flex-column flex-grow-1 g1">
|
||||||
|
<strong>Device Info</strong>
|
||||||
|
<textarea class="win95-input h4" name="device_info" required></textarea>
|
||||||
|
<div class="f7 less-spacing">
|
||||||
|
<p>
|
||||||
|
Include specific info about the device such as its model number, release year, CPU speed, amount of memory, etc.
|
||||||
|
</p>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="flex g3">
|
||||||
|
<div class="flex-shrink-0">
|
||||||
|
<img class="pixelated" src="{{ dataimg "timemachine/win95-scroll.png" }}">
|
||||||
|
</div>
|
||||||
|
<div class="flex flex-column flex-grow-1 g1">
|
||||||
|
<strong>Description</strong>
|
||||||
|
<textarea class="win95-input h4" name="description" required></textarea>
|
||||||
|
<div class="f7 less-spacing">
|
||||||
|
<p>
|
||||||
|
What's the story behind this device? When did you get it? What did you use it for? Is it in good shape? Is there anything interesting or notable about it?
|
||||||
|
</p>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="mt3 flex justify-end g3">
|
||||||
|
<button class="win95-btn" type="submit" value="Submit"><u>S</u>ubmit</button>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</form>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<script>
|
||||||
|
let form = document.querySelector("form");
|
||||||
|
let mediaUrl = document.querySelector("[name=media_url]");
|
||||||
|
let deviceInfo = document.querySelector("[name=device_info]");
|
||||||
|
let description = document.querySelector("[name=description]");
|
||||||
|
let submitBtn = document.querySelector("[type=submit]");
|
||||||
|
|
||||||
|
function saveData() {
|
||||||
|
localStorage.setItem("tm_media_url", mediaUrl.value);
|
||||||
|
localStorage.setItem("tm_device_info", deviceInfo.value);
|
||||||
|
localStorage.setItem("tm_description", description.value);
|
||||||
|
}
|
||||||
|
form.addEventListener("submit", function() {
|
||||||
|
saveData();
|
||||||
|
submitBtn.disabled = true;
|
||||||
|
});
|
||||||
|
|
||||||
|
document.addEventListener("visibilitychange", function() {
|
||||||
|
saveData();
|
||||||
|
});
|
||||||
|
|
||||||
|
mediaUrl.value = localStorage.getItem("tm_media_url") ?? "";
|
||||||
|
deviceInfo.value = localStorage.getItem("tm_device_info") ?? "";
|
||||||
|
description.value = localStorage.getItem("tm_description") ?? "";
|
||||||
|
</script>
|
||||||
|
{{ end }}
|
|
@ -0,0 +1,36 @@
|
||||||
|
{{ template "timemachine_base.html" . }}
|
||||||
|
|
||||||
|
{{ define "frame title" }}
|
||||||
|
<div class="title">
|
||||||
|
{{ . }}
|
||||||
|
<img class="frame-close" src="{{ dataimg "timemachine/win95-close.gif" }}">
|
||||||
|
</div>
|
||||||
|
{{ end }}
|
||||||
|
|
||||||
|
{{ define "content" }}
|
||||||
|
<div class="center-layout content mw7 ph3 flex flex-column g3">
|
||||||
|
<div class="mv5 flex justify-center">
|
||||||
|
<div class="frame mw6">
|
||||||
|
{{ template "frame title" "Submission Complete" }}
|
||||||
|
<div class="pa3 flex g3">
|
||||||
|
<div class="flex-shrink-0">
|
||||||
|
<img class="pixelated" src="{{ dataimg "timemachine/win95-check.png" }}">
|
||||||
|
</div>
|
||||||
|
<div class="flex flex-column flex-grow-1 g3">
|
||||||
|
<div>
|
||||||
|
Thank you for your submission! We will review it and get it published on the site soon.
|
||||||
|
</div>
|
||||||
|
<div class="flex justify-end g3">
|
||||||
|
<a class="win95-btn" href="{{ .TimeMachineUrl }}"><u>O</u>K</a>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<script>
|
||||||
|
localStorage.removeItem("tm_media_url");
|
||||||
|
localStorage.removeItem("tm_device_info");
|
||||||
|
localStorage.removeItem("tm_description");
|
||||||
|
</script>
|
||||||
|
{{ end }}
|
|
@ -87,21 +87,3 @@ func Conferences(c *RequestContext) ResponseData {
|
||||||
res.MustWriteTemplate("conferences.html", getBaseDataAutocrumb(c, "Conferences"), c.Perf)
|
res.MustWriteTemplate("conferences.html", getBaseDataAutocrumb(c, "Conferences"), c.Perf)
|
||||||
return res
|
return res
|
||||||
}
|
}
|
||||||
|
|
||||||
func TimeMachine(c *RequestContext) ResponseData {
|
|
||||||
baseData := getBaseDataAutocrumb(c, "Time Machine")
|
|
||||||
baseData.OpenGraphItems = []templates.OpenGraphItem{
|
|
||||||
{Property: "og:title", Value: "Time Machine"},
|
|
||||||
{Property: "og:site_name", Value: "Handmade Network"},
|
|
||||||
{Property: "og:type", Value: "website"},
|
|
||||||
{Property: "og:image", Value: hmnurl.BuildPublic("timemachine/opengraph.png", true)},
|
|
||||||
{Property: "og:description", Value: "This summer, dig out your old devices and see what they were actually like to use."},
|
|
||||||
{Property: "og:url", Value: hmnurl.BuildTimeMachine()},
|
|
||||||
{Name: "twitter:card", Value: "summary_large_image"},
|
|
||||||
{Name: "twitter:image", Value: hmnurl.BuildPublic("timemachine/twittercard.png", true)},
|
|
||||||
}
|
|
||||||
|
|
||||||
var res ResponseData
|
|
||||||
res.MustWriteTemplate("time-machine.html", baseData, c.Perf)
|
|
||||||
return res
|
|
||||||
}
|
|
||||||
|
|
|
@ -7,12 +7,40 @@ import (
|
||||||
"git.handmade.network/hmn/hmn/src/email"
|
"git.handmade.network/hmn/hmn/src/email"
|
||||||
"git.handmade.network/hmn/hmn/src/hmnurl"
|
"git.handmade.network/hmn/hmn/src/hmnurl"
|
||||||
"git.handmade.network/hmn/hmn/src/oops"
|
"git.handmade.network/hmn/hmn/src/oops"
|
||||||
|
"git.handmade.network/hmn/hmn/src/templates"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
func TimeMachine(c *RequestContext) ResponseData {
|
||||||
|
baseData := getBaseDataAutocrumb(c, "Time Machine")
|
||||||
|
baseData.OpenGraphItems = []templates.OpenGraphItem{
|
||||||
|
{Property: "og:title", Value: "Time Machine"},
|
||||||
|
{Property: "og:site_name", Value: "Handmade Network"},
|
||||||
|
{Property: "og:type", Value: "website"},
|
||||||
|
{Property: "og:image", Value: hmnurl.BuildPublic("timemachine/opengraph.png", true)},
|
||||||
|
{Property: "og:description", Value: "This summer, dig out your old devices and see what they were actually like to use."},
|
||||||
|
{Property: "og:url", Value: hmnurl.BuildTimeMachine()},
|
||||||
|
{Name: "twitter:card", Value: "summary_large_image"},
|
||||||
|
{Name: "twitter:image", Value: hmnurl.BuildPublic("timemachine/twittercard.png", true)},
|
||||||
|
}
|
||||||
|
|
||||||
|
type TemplateData struct {
|
||||||
|
templates.BaseData
|
||||||
|
SubmitUrl string
|
||||||
|
}
|
||||||
|
tmpl := TemplateData{
|
||||||
|
BaseData: baseData,
|
||||||
|
SubmitUrl: hmnurl.BuildTimeMachineForm(),
|
||||||
|
}
|
||||||
|
|
||||||
|
var res ResponseData
|
||||||
|
res.MustWriteTemplate("timemachine.html", tmpl, c.Perf)
|
||||||
|
return res
|
||||||
|
}
|
||||||
|
|
||||||
func TimeMachineForm(c *RequestContext) ResponseData {
|
func TimeMachineForm(c *RequestContext) ResponseData {
|
||||||
var res ResponseData
|
var res ResponseData
|
||||||
res.MustWriteTemplate(
|
res.MustWriteTemplate(
|
||||||
"time_machine_form.html",
|
"timemachine_submit.html",
|
||||||
getBaseDataAutocrumb(c, "Time Machine"),
|
getBaseDataAutocrumb(c, "Time Machine"),
|
||||||
c.Perf,
|
c.Perf,
|
||||||
)
|
)
|
||||||
|
@ -49,10 +77,19 @@ func TimeMachineFormSubmit(c *RequestContext) ResponseData {
|
||||||
}
|
}
|
||||||
|
|
||||||
func TimeMachineFormDone(c *RequestContext) ResponseData {
|
func TimeMachineFormDone(c *RequestContext) ResponseData {
|
||||||
|
type TemplateData struct {
|
||||||
|
templates.BaseData
|
||||||
|
TimeMachineUrl string
|
||||||
|
}
|
||||||
|
tmpl := TemplateData{
|
||||||
|
BaseData: getBaseDataAutocrumb(c, "Time Machine"),
|
||||||
|
TimeMachineUrl: hmnurl.BuildTimeMachine(),
|
||||||
|
}
|
||||||
|
|
||||||
var res ResponseData
|
var res ResponseData
|
||||||
res.MustWriteTemplate(
|
res.MustWriteTemplate(
|
||||||
"time_machine_form_done.html",
|
"timemachine_thanks.html",
|
||||||
getBaseDataAutocrumb(c, "Time Machine"),
|
tmpl,
|
||||||
c.Perf,
|
c.Perf,
|
||||||
)
|
)
|
||||||
return res
|
return res
|
||||||
|
|