Add boilerplate
This commit is contained in:
parent
a5fdd8a103
commit
f9ed3ac363
21
server/main.go
Normal file
21
server/main.go
Normal file
@ -0,0 +1,21 @@
|
||||
package main
|
||||
|
||||
import "github.com/labstack/echo"
|
||||
|
||||
func main() {
|
||||
e := echo.New()
|
||||
|
||||
t := Template{}
|
||||
t.Reset()
|
||||
e.Renderer = &t
|
||||
|
||||
e.Static("/static", "static/")
|
||||
|
||||
e.GET("/", index)
|
||||
|
||||
e.Logger.Fatal(e.Start(":8080"))
|
||||
}
|
||||
|
||||
func index(c echo.Context) error {
|
||||
return c.Render(200, "index", nil)
|
||||
}
|
66
server/templates.go
Normal file
66
server/templates.go
Normal file
@ -0,0 +1,66 @@
|
||||
package main
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"html/template"
|
||||
"io"
|
||||
"log"
|
||||
"os"
|
||||
"path"
|
||||
"path/filepath"
|
||||
"strings"
|
||||
|
||||
"github.com/labstack/echo"
|
||||
)
|
||||
|
||||
// Reset reads all the templates
|
||||
func (t *Template) Reset() {
|
||||
pagesPath := `templates/pages/`
|
||||
componentsPath := `templates/components/*.gohtml`
|
||||
|
||||
if t.templates == nil {
|
||||
t.templates = make(map[string]*template.Template)
|
||||
}
|
||||
|
||||
pages := []string{}
|
||||
err := filepath.Walk(pagesPath, func(path string, f os.FileInfo, err error) error {
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
if !f.IsDir() {
|
||||
pages = append(pages, path)
|
||||
}
|
||||
|
||||
return nil
|
||||
})
|
||||
|
||||
if err != nil {
|
||||
log.Fatal(err)
|
||||
}
|
||||
|
||||
components, err := filepath.Glob(componentsPath)
|
||||
if err != nil {
|
||||
log.Fatal(err)
|
||||
}
|
||||
|
||||
for _, layout := range pages {
|
||||
files := append(components, layout)
|
||||
name := path.Base(removeExt(layout))
|
||||
|
||||
t.templates[name] = template.Must(template.New(``).ParseFiles(files...))
|
||||
}
|
||||
}
|
||||
|
||||
// Render echo Render func
|
||||
func (t *Template) Render(w io.Writer, name string, data interface{}, c echo.Context) error {
|
||||
tmpl, ok := t.templates[name]
|
||||
if !ok {
|
||||
return fmt.Errorf("template '%s' not found", name)
|
||||
}
|
||||
return tmpl.ExecuteTemplate(w, "base", data)
|
||||
}
|
||||
|
||||
func removeExt(s string) string {
|
||||
return strings.TrimSuffix(s, path.Ext(s))
|
||||
}
|
10
server/types.go
Normal file
10
server/types.go
Normal file
@ -0,0 +1,10 @@
|
||||
package main
|
||||
|
||||
import (
|
||||
"html/template"
|
||||
)
|
||||
|
||||
// Template echo template struct
|
||||
type Template struct {
|
||||
templates map[string]*template.Template
|
||||
}
|
27
static/css/main.css
Normal file
27
static/css/main.css
Normal file
@ -0,0 +1,27 @@
|
||||
html,
|
||||
body {
|
||||
height: 100%;
|
||||
}
|
||||
|
||||
body {
|
||||
display: grid;
|
||||
|
||||
background: #212121;
|
||||
|
||||
grid-template-rows: 1fr auto 1fr;
|
||||
}
|
||||
|
||||
body > h1 {
|
||||
font-family: sans-serif;
|
||||
font-size: 4em;
|
||||
|
||||
width: 100%;
|
||||
padding: 40px;
|
||||
|
||||
text-align: center;
|
||||
|
||||
color: #4AE1FF;
|
||||
background: rgba(255,255,255,.01);
|
||||
|
||||
grid-row-start: 2;
|
||||
}
|
18
templates/components/base.gohtml
Normal file
18
templates/components/base.gohtml
Normal file
@ -0,0 +1,18 @@
|
||||
{{ define "base" }}
|
||||
<!DOCTYPE html>
|
||||
<html lang="en">
|
||||
<head>
|
||||
<meta charset="UTF-8">
|
||||
<meta name=viewport content="width=device-width, initial-scale=1">
|
||||
|
||||
<title>Monitor - {{ block "title" . }}Home{{ end }}</title>
|
||||
|
||||
<link rel="stylesheet" href="/static/css/main.css">
|
||||
{{ block "stylesheets" . }}{{ end }}
|
||||
</head>
|
||||
<body>
|
||||
{{ block "body" . }}{{ end }}
|
||||
{{ block "scripts" . }}{{ end}}
|
||||
</body>
|
||||
</html>
|
||||
{{ end }}
|
3
templates/pages/index.gohtml
Normal file
3
templates/pages/index.gohtml
Normal file
@ -0,0 +1,3 @@
|
||||
{{ define "body" }}
|
||||
<h1>I'm working!</h1>
|
||||
{{ end }}
|
Loading…
Reference in New Issue
Block a user