msg.kwolek.io/web.go

136 lines
2.2 KiB
Go

package main
import (
"html/template"
"net/http"
)
type Web struct {
Messages *MessageList
}
var siteTemplate string = `
<!DOCTYPE html>
<title>messages.sh</title>
<meta charset="utf-8">
<style>
@import url('https://fonts.googleapis.com/css2?family=Ubuntu+Mono&display=swap');
body {
background: #333;
color: white;
font-family: 'Ubuntu Mono', Monaco, monospace;
max-width: 1024px;
margin: 0 auto;
padding: 1em;
}
h1, .info {
text-align: center;
}
h2 {
padding-top: 2em;
font-size: 2em;
}
pre {
font-size: 1.5em;
}
h1 {
font-size: 4em;
}
.message {
display: flex;
}
.message .meta {
display: flex;
}
.ts {
color: #aaa;
}
.message .meta,
.message .ts,
.message .username {
flex-shrink: 0;
}
.message .username {
text-align: right;
min-width: 12em;
padding: 0 .5em;
color: cyan;
}
.message .meta .username::before {
content: '<';
}
.message .meta .username::after {
content: '>';
}
@media (max-width: 1024px) {
.message, .meta {
flex-direction: column;
}
.message .username {
text-align: center;
padding: 0 0;
padding-top: 0.2em;
}
.message .content {
padding-left: 1em;
padding-top: 0.3em;
}
.message {
text-align: center;
}
h2 {
text-align: center;
font-size: 1.5em;
}
h1 {
font-size: 3em;
}
}
.message {
padding-bottom: 1em;
}
</style>
<h1>messages.sh</h1>
<p class="info">Hello! To add your own message, run:</p>
<pre class="info"><code>ssh messages.sh</code></pre>
<h2>Latest messages</h2>
<p>
{{range .}}
<div class="message">
<div class="meta"><div class="ts">{{ .Timestamp.Format "2006-01-02 15:04:05 MST" }}</div> <div class="username">{{ .Username }} ({{ .PKShort }})</div></div> <div class="content">{{ .Content }}</div><br>
</div>
{{end}}
</p>
`
func (w *Web) ListenAndServe(addr string) {
w.Messages.Add(Message{
Content: "2137 papiez",
Username: "weeeoefka",
PKShort: "23daa6f",
})
w.Messages.Add(Message{
Content: "2137 papiez lorem ipsum dolan sit amet saldkjaksjdf sdkjf slkdj flskjdf lkjsdlkfj ",
Username: "weeeoe",
PKShort: "23daa6f",
})
tmpl := template.Must(template.New("tmpl").Parse(siteTemplate))
http.HandleFunc("/", func(rw http.ResponseWriter, r *http.Request) {
tmpl.Execute(rw, w.Messages.Reverse())
})
http.ListenAndServe(addr, nil)
}