Add HTML boilerplate
This commit is contained in:
parent
54eb74a97e
commit
c7e1df3f81
|
@ -0,0 +1,39 @@
|
||||||
|
package cmd
|
||||||
|
|
||||||
|
import (
|
||||||
|
"embed"
|
||||||
|
"github.com/gin-gonic/gin"
|
||||||
|
"html/template"
|
||||||
|
"io/fs"
|
||||||
|
"regexp"
|
||||||
|
"strings"
|
||||||
|
)
|
||||||
|
|
||||||
|
func LoadHTMLFromEmbedFS(engine *gin.Engine, embedFS embed.FS, pattern string) {
|
||||||
|
root := template.New("")
|
||||||
|
tmpl := template.Must(root, LoadAndAddToRoot(engine.FuncMap, root, embedFS, pattern))
|
||||||
|
engine.SetHTMLTemplate(tmpl)
|
||||||
|
}
|
||||||
|
func LoadAndAddToRoot(funcMap template.FuncMap, rootTemplate *template.Template, embedFS embed.FS, pattern string) error {
|
||||||
|
pattern = strings.ReplaceAll(pattern, ".", "\\.")
|
||||||
|
pattern = strings.ReplaceAll(pattern, "*", ".*")
|
||||||
|
|
||||||
|
err := fs.WalkDir(embedFS, ".", func(path string, d fs.DirEntry, walkErr error) error {
|
||||||
|
if walkErr != nil {
|
||||||
|
return walkErr
|
||||||
|
}
|
||||||
|
|
||||||
|
if matched, _ := regexp.MatchString(pattern, path); !d.IsDir() && matched {
|
||||||
|
data, readErr := embedFS.ReadFile(path)
|
||||||
|
if readErr != nil {
|
||||||
|
return readErr
|
||||||
|
}
|
||||||
|
t := rootTemplate.New(path).Funcs(funcMap)
|
||||||
|
if _, parseErr := t.Parse(string(data)); parseErr != nil {
|
||||||
|
return parseErr
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return nil
|
||||||
|
})
|
||||||
|
return err
|
||||||
|
}
|
|
@ -0,0 +1,25 @@
|
||||||
|
<!DOCTYPE html>
|
||||||
|
<html lang="en">
|
||||||
|
|
||||||
|
<head>
|
||||||
|
<title>AEMET Client</title>
|
||||||
|
<meta charset="UTF-8">
|
||||||
|
<meta name="viewport" content="width=device-width, initial-scale=1">
|
||||||
|
<link href="style.css" rel="stylesheet">
|
||||||
|
</head>
|
||||||
|
|
||||||
|
<body>
|
||||||
|
<div class="container">
|
||||||
|
<div id="main">
|
||||||
|
<p>Hello {{ .UserAgent }}</p>
|
||||||
|
<hr>
|
||||||
|
<h2>Current clients</h2>
|
||||||
|
{{ range .Clients }}
|
||||||
|
<p>{{ .OS_username }}</p>
|
||||||
|
<p>{{ .OperatingSystem }}</p>
|
||||||
|
{{ end }}
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</body>
|
||||||
|
|
||||||
|
</html>
|
|
@ -0,0 +1,164 @@
|
||||||
|
* {
|
||||||
|
font-family: arial;
|
||||||
|
}
|
||||||
|
|
||||||
|
table {
|
||||||
|
border: 1px solid black;
|
||||||
|
border-collapse: collapse;
|
||||||
|
margin-left: auto;
|
||||||
|
margin-right: auto;
|
||||||
|
}
|
||||||
|
|
||||||
|
.optionCap {
|
||||||
|
text-transform: capitalize;
|
||||||
|
}
|
||||||
|
|
||||||
|
ul {
|
||||||
|
text-align: center;
|
||||||
|
list-style: none;
|
||||||
|
top: 0;
|
||||||
|
margin: 0;
|
||||||
|
padding: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
li.hor {
|
||||||
|
display: inline-flex;
|
||||||
|
margin-right: 20px;
|
||||||
|
}
|
||||||
|
|
||||||
|
td.left {
|
||||||
|
text-align: left;
|
||||||
|
padding-left: 5px;
|
||||||
|
}
|
||||||
|
|
||||||
|
td.date {
|
||||||
|
text-align: center;
|
||||||
|
padding-left: 5px;
|
||||||
|
padding-right: 5px;
|
||||||
|
}
|
||||||
|
|
||||||
|
cold {
|
||||||
|
color: darkcyan;
|
||||||
|
font-weight: 500;
|
||||||
|
}
|
||||||
|
|
||||||
|
hot {
|
||||||
|
color: darkorange;
|
||||||
|
font-weight: 500;
|
||||||
|
}
|
||||||
|
|
||||||
|
table * {
|
||||||
|
text-align: center;
|
||||||
|
}
|
||||||
|
|
||||||
|
input {
|
||||||
|
margin-bottom: 10px;
|
||||||
|
}
|
||||||
|
|
||||||
|
#but {
|
||||||
|
background-color: #eee;
|
||||||
|
border: 2px black solid;
|
||||||
|
}
|
||||||
|
|
||||||
|
.centered {
|
||||||
|
text-align: center;
|
||||||
|
}
|
||||||
|
|
||||||
|
img {
|
||||||
|
text-align: center;
|
||||||
|
border: 2px solid #ff6e00;
|
||||||
|
border-radius: 50%;
|
||||||
|
padding: 1%;
|
||||||
|
}
|
||||||
|
|
||||||
|
button {
|
||||||
|
background-color: #eee;
|
||||||
|
border: 2px black solid;
|
||||||
|
margin-bottom: 10px;
|
||||||
|
}
|
||||||
|
|
||||||
|
#but:hover {
|
||||||
|
background-color: #ff6e00;
|
||||||
|
border: 2px black solid;
|
||||||
|
}
|
||||||
|
|
||||||
|
body {
|
||||||
|
background-color: #aaa;
|
||||||
|
}
|
||||||
|
|
||||||
|
h1 {
|
||||||
|
text-align: center;
|
||||||
|
bottom: 0%;
|
||||||
|
}
|
||||||
|
|
||||||
|
h3 {
|
||||||
|
text-align: center;
|
||||||
|
}
|
||||||
|
|
||||||
|
form {
|
||||||
|
text-align: center;
|
||||||
|
}
|
||||||
|
|
||||||
|
a {
|
||||||
|
color: #ff6e00;
|
||||||
|
text-decoration: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
a:hover {
|
||||||
|
text-decoration: underline;
|
||||||
|
}
|
||||||
|
|
||||||
|
progress::-moz-progress-bar {
|
||||||
|
background-color: #ff6e00;
|
||||||
|
}
|
||||||
|
|
||||||
|
progress::-webkit-progress-value {
|
||||||
|
background-color: #ff6e00;
|
||||||
|
}
|
||||||
|
|
||||||
|
progress {
|
||||||
|
color: #ff6e00;
|
||||||
|
}
|
||||||
|
|
||||||
|
footer {
|
||||||
|
top: 100%;
|
||||||
|
}
|
||||||
|
|
||||||
|
#main {
|
||||||
|
background-color: #eee;
|
||||||
|
width: 80vw;
|
||||||
|
height: 80vh;
|
||||||
|
padding: 10px;
|
||||||
|
outline: solid 2px #ff6e00;
|
||||||
|
overflow: scroll;
|
||||||
|
}
|
||||||
|
|
||||||
|
@media (max-width: 600px) {
|
||||||
|
#main {
|
||||||
|
width: 60vw;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.container {
|
||||||
|
display: flex;
|
||||||
|
position: fixed;
|
||||||
|
margin: 1px;
|
||||||
|
padding: 1px;
|
||||||
|
top: 1px;
|
||||||
|
left: 1px;
|
||||||
|
|
||||||
|
outline: solid 1px black;
|
||||||
|
justify-content: center;
|
||||||
|
align-items: center;
|
||||||
|
height: 99vh;
|
||||||
|
width: 99vw;
|
||||||
|
background-color: #aaa;
|
||||||
|
|
||||||
|
/* width: 100%; */
|
||||||
|
/* height: 100%; */
|
||||||
|
/* margin: 50px; */
|
||||||
|
/* outline: solid 1px black; */
|
||||||
|
/* display: flex; */
|
||||||
|
/* justify-content: center; */
|
||||||
|
/* align-items: center; */
|
||||||
|
}
|
Loading…
Reference in New Issue