Added go bindata fs to serve web files and added VUE and bootstrap to local files

This commit is contained in:
Nicholas Thompson authored and ncthompson committed 2019-03-13 00:18:20 +02:00
1 parent 8267e71f18
commit 6bd668eb65
11 files changed
+514 -10

No files matched your search

+9 -2
View File
@@ -5,7 +5,9 @@ import (
"log" "log"
"net/http" "net/http"
"github.com/hpdvanwyk/invertergui/frontend"
"github.com/hpdvanwyk/invertergui/webgui" "github.com/hpdvanwyk/invertergui/webgui"
"github.com/prometheus/client_golang/prometheus/promhttp" "github.com/prometheus/client_golang/prometheus/promhttp"
) )
@@ -14,9 +16,14 @@ func main() {
mk2 := NewMk2Mock() mk2 := NewMk2Mock()
gui := webgui.NewWebGui(mk2) gui := webgui.NewWebGui(mk2)
rootFs := http.FileServer(frontend.BinaryFileSystem("root"))
http.Handle("/", rootFs)
jsFs := http.FileServer(frontend.BinaryFileSystem("js"))
http.Handle("/js/", http.StripPrefix("/js", jsFs))
cssFs := http.FileServer(frontend.BinaryFileSystem("css"))
http.Handle("/css/", http.StripPrefix("/css", cssFs))
http.Handle("/ws", http.HandlerFunc(gui.ServeHub)) http.Handle("/ws", http.HandlerFunc(gui.ServeHub))
http.Handle("/", gui)
http.Handle("/js/controller.js", http.HandlerFunc(gui.ServeJS))
http.Handle("/munin", http.HandlerFunc(gui.ServeMuninHTTP)) http.Handle("/munin", http.HandlerFunc(gui.ServeMuninHTTP))
http.Handle("/muninconfig", http.HandlerFunc(gui.ServeMuninConfigHTTP)) http.Handle("/muninconfig", http.HandlerFunc(gui.ServeMuninConfigHTTP))
http.Handle("/metrics", promhttp.Handler()) http.Handle("/metrics", promhttp.Handler())
+9 -2
View File
@@ -37,6 +37,7 @@ import (
"net" "net"
"net/http" "net/http"
"github.com/hpdvanwyk/invertergui/frontend"
"github.com/hpdvanwyk/invertergui/mk2if" "github.com/hpdvanwyk/invertergui/mk2if"
"github.com/hpdvanwyk/invertergui/webgui" "github.com/hpdvanwyk/invertergui/webgui"
"github.com/mikepb/go-serial" "github.com/mikepb/go-serial"
@@ -81,9 +82,15 @@ func main() {
} }
gui := webgui.NewWebGui(mk2) gui := webgui.NewWebGui(mk2)
http.Handle("/", gui)
rootFs := http.FileServer(frontend.BinaryFileSystem("root"))
http.Handle("/", rootFs)
jsFs := http.FileServer(frontend.BinaryFileSystem("js"))
http.Handle("/js/", http.StripPrefix("/js", jsFs))
cssFs := http.FileServer(frontend.BinaryFileSystem("css"))
http.Handle("/css/", http.StripPrefix("/css", cssFs))
http.Handle("/ws", http.HandlerFunc(gui.ServeHub)) http.Handle("/ws", http.HandlerFunc(gui.ServeHub))
http.Handle("/js/controller.js", http.HandlerFunc(gui.ServeJS))
http.Handle("/munin", http.HandlerFunc(gui.ServeMuninHTTP)) http.Handle("/munin", http.HandlerFunc(gui.ServeMuninHTTP))
http.Handle("/muninconfig", http.HandlerFunc(gui.ServeMuninConfigHTTP)) http.Handle("/muninconfig", http.HandlerFunc(gui.ServeMuninConfigHTTP))
http.Handle("/metrics", promhttp.Handler()) http.Handle("/metrics", promhttp.Handler())
+39
View File
@@ -0,0 +1,39 @@
package frontend
import (
"net/http"
"strings"
assetfs "github.com/elazarl/go-bindata-assetfs"
)
type binaryFileSystem struct {
fs http.FileSystem
}
func (b *binaryFileSystem) Open(name string) (http.File, error) {
return b.fs.Open(name)
}
func (b *binaryFileSystem) Exists(prefix string, filepath string) bool {
if p := strings.TrimPrefix(filepath, prefix); len(p) < len(filepath) {
if _, err := b.fs.Open(p); err != nil {
return false
}
return true
}
return false
}
func BinaryFileSystem(root string) *binaryFileSystem {
fs := &assetfs.AssetFS{
Asset: Asset,
AssetDir: AssetDir,
AssetInfo: AssetInfo,
Prefix: root,
}
return &binaryFileSystem{
fs,
}
}
+344
View File
@@ -0,0 +1,344 @@
// Code generated by go-bindata.
// sources:
// css/bootstrap.min.css
// css/bootstrap.min.css.map
// js/controller.js
// js/vue.js
// root/index.html
// DO NOT EDIT!
package frontend
import (
"bytes"
"compress/gzip"
"fmt"
"github.com/elazarl/go-bindata-assetfs"
"io"
"io/ioutil"
"os"
"path/filepath"
"strings"
"time"
)
func bindataRead(data []byte, name string) ([]byte, error) {
gz, err := gzip.NewReader(bytes.NewBuffer(data))
if err != nil {
return nil, fmt.Errorf("Read %q: %v", name, err)
}
var buf bytes.Buffer
_, err = io.Copy(&buf, gz)
clErr := gz.Close()
if err != nil {
return nil, fmt.Errorf("Read %q: %v", name, err)
}
if clErr != nil {
return nil, err
}
return buf.Bytes(), nil
}
type asset struct {
bytes []byte
info os.FileInfo
}
type bindataFileInfo struct {
name string
size int64
mode os.FileMode
modTime time.Time
}
func (fi bindataFileInfo) Name() string {
return fi.name
}
func (fi bindataFileInfo) Size() int64 {
return fi.size
}
func (fi bindataFileInfo) Mode() os.FileMode {
return fi.mode
}
func (fi bindataFileInfo) ModTime() time.Time {
return fi.modTime
}
func (fi bindataFileInfo) IsDir() bool {
return false
}
func (fi bindataFileInfo) Sys() interface{} {
return nil
}
var _cssBootstrapMinCss = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\xec\xbd\x6b\x6f\xe4\x38\x92\x28\xfa\x7d\x7f\x85\xd6\x8d\x42\x95\xa7\x53\x59\x52\x3e\x9d\x69\x54\xdf\x99\xe9\x9d\xc1\x2e\x30\xbd\xb8\xd8\x39\x07\x38\x40\x9f\x3e\x80\x32\xc5\xcc\xd4\x94\x5e\x47\x92\x6d\xb9\x0d\xdf\xdf\x7e\xc1\x97\xc4\x47\x90\xa2\xd2\x69\xbb\x0a\x3b\x5b\xb3\x5d\x95\x54\x30\x22\x18\x0c\x86\x22\x82\x54\xf0\xf3\x1f\xfe\xf5\x5f\xbc\x3f\x78\x7f\x2e\x8a\xa6\x7e\x88\x9a\xfd\xc9\xbb\x5f\x4c\xe7\xd3\x10\x37\xfe\x7b\x91\xa1\x32\x3a\xa2\xad\x77\x6a\x9a\xb2\xde\x7e\xfe\xbc\xeb\xc0\xa6\xfb\x22\xc3\x30\x3f\x17\xe5\x63\x95\x1c\x4f\x8d\x37\x0b\xc2\x99\x3f\x0b\xc2\x8d\xf7\x3f\x4e\x45\x16\xd5\xde\xff\x1b\x55\x5f\x31\xc8\xdf\x92\x3d\xca\x6b\x14\x7b\x77\x79\x8c\x2a\xef\x97\xff\xf8\x1f\x84\x62\x84\x9b\x8a\x9c\x92\x6e\xaa\xa8\xfc\x97\x3f\x7c\x16\xb9\xc1\x4d\x8c\x19\xef\x13\x67\xe0\x88\x9a\x1d\x7f\x88\x59\xf8\x7c\xad\x31\x11\x72\x26\x90\x80\xe7\x4f\x77\xcd\xa9\xa8\x6a\x23\xf0\x43\xd2\x34\xa8\x9a\x78\xff\x91\xef\xa7\x30\xcf\x02\x0f\x49\x73\xba\xdb\x11\xea\xcd\xc3\xae\xfe\xdc\x31\xf4\x79\x97\x16\xbb\xcf\x59\x54\x37\xa8\xfa\xfc\xb7\xff\xf8\xf9\x2f\xff\xf9\xf7\xbf\x60\xfe\x3e\xff\x31\xc9\xca\xa2\x6a\xbc\xbb\x2a\xfd\x74\xc5\xd1\x1c\x8a\xbc\xa9\xa7\xc7\xa2\x38\xa6\x28\x2a\x93\x9a\x20\xdc\xd7\xf5\xff\x73\x88\xb2\x24\x7d\xfc\xf2\xb7\xa8\x29\xb6\x8b\x20\x98\xac\x83\x60\xb2\x08\x82\xa4\x89\xd2\x64\x7f\x75\x7d\xbb\xad\x8a\xa2\x79\xf2\xfd\x5d\x7a\x87\xb6\xde\x0f\xf3\xf5\x32\x5a\x1f\x6e\x7d\x3f\xc9\xe3\xe4\x58\x6c\xbd\x1f\x56\xab\x30\x38\xcc\x6e\x7d\xbf\xbc\xab\xca\x14\xc3\xac\x0e\x8b\xd9\x3e\xc4\x2d\x49\xfe\x75\xeb\xfd\x80\x6e\xe6\xe8\x66\x7f\xeb\xfb\x15\x8a\xb7\xde\x0f\x7f\x59\x2f\x7e\x9e\xff\x7c\xeb\xfb\x45\x15\xe5\x78\xbe\x7f\x38\xc4\x6b\x14\x2e\x6e\x7d\xff\x11\xa5\x69\xf1\xb0\xf5\x7e\xf8\xeb\x7c\xf3\x73\x88\x91\x1e\x2b\x84\xf2\xad\xf7\x43\x10\xec\xf6\x04\x47\x83\xa2\x74\xeb\xfd\x30\x0b\xf6\x9b\xcd\xfa\xd6\xf7\xf7\x8f\x11\x7e\x3e\x5f\x6c\x6e\xfe\xed\xcf\xb7\xbe\xff\x70\x4a\x1a\x82\xf3\x70\x20\xdd\xa3\xc7\xad\xf7\xc3\x66\xb3\x61\x3f\xfc\x38\xaa\x30\x4f\xf3\x00\xff\xc1\x3c\x56\x49\x16\x55\x8f\xe2\xd0\x6a\xb4\x2f\xf2\x98\x36\x2e\x16\x98\xaf\xfa\x6e\xbf\x47\x75\x2d\xf2\x91\xe4\x87\x42\xa2\x1b\x55\x79\x92\x1f\x45\xde\x63\x3c\xbc\x4a\x1c\x71\x8a\x35\x41\xa4\xce\xb8\x89\xe2\xdd\x72\x17\xdf\xfa\xfe\xae\x42\xd1\xd7\xb2\x48\xf2\xc6\x6f\xeb\xad\x17\xc8\x4d\x75\xb6\xf5\x96\xeb\x55\xd9\xca\xcd\x59\xbc\xf5\xd6\xab\x1b\xb5\x39\x3d\x6e\xbd\xcd\x66\xa6\x36\xb7\xe9\xd6\x0b\x67\x41\x40\xda\xb1\x5a\xf8\x54\x05\xfc\x3a\xca\x6b\xbf\x46\x55\x72\xd8\x7a\x57\x58\x1f\xae\x26\x9e\x1f\x95\x65\x8a\xfc\xfa\xb1\x6e\x50\x36\xf1\xfe\x9c\x26\xf9\xd7\x5f\xa2\xfd\xdf\xc9\xef\xbf\x16\x79\x33\xf1\xae\xfe\x8e\x8e\x05\xf2\xfe\xe7\x7f\x5c\x4d\xbc\xff\x2a\x76\x45\x53\x4c\xbc\xab\x7f\x47\xe9\x3d\x6a\x92\x7d\xe4\xfd\x27\xba\x43\x57\x13\xef\x4f\x55\x12\xa5\x13\xaf\xa7\x31\xf1\xae\xfe\x84\x71\x7b\x3f\x17\x69\x51\x79\x7f\xc9\x8a\x7f\x24\x57\x02\x36\xa0\xe5\xef\x8f\xd9\xae\x48\xaf\x14\xb6\xb3\x22\x2f\xea\x32\xda\xa3\xad\xf7\xf7\xbf\xfe\x52\xe4\x85\xff\x5f\xe8\x78\x97\x46\xd5\xc4\xfb\x05\xe5\x69\x31\xf1\x7e\x29\xf2\x68\x5f\x4c\xbc\x9f\x8b\xbc\x2e\xd2\xa8\x9e\x78\x57\x7f\x4b\x76\xa8\x8a\x9a\xa4\xc8\xf1\x53\x3c\xd2\xab\x9f\x8b\xbb\x2a\x41\x95\xf7\x9f\xe8\xe1\x6a\xe2\x75\x58\x9f\xff\x30\xf9\xc3\x76\xbb\x43\x87\xa2\x42\xf8\x5f\xd1\xa1\x41\xd5\x93\xff\x80\x76\x5f\x93\xc6\xdf\x15\xad\x5f\x27\xbf\xe3\x89\xdf\x15\x55\x8c\x2a\xdc\x72\x0b\xb6\x3e\x9f\x9a\x2c\x7d\x12\x38\xdf\xf6\xc2\xb8\x4d\x93\x1c\xf9\x27\x44\xd4\x23\x9c\x86\xcb\x5b\x4e\xa0\x41\x6d\x83\x71\x21\x3f\x8a\xff\x71\x57\x37\xdb\x30\x08\x3e\xf4\x4f\xa3\xd2\x3f\x25\xc7\x13\xd1\x2b\x7f\x8f\x25\xb9\xad\x8e\xbb\xe8\x53\x30\x21\x7f\xae\x9f\xa3\xaa\x49\xf6\x29\x9a\x44\x75\x12\xa3\xc9\x21\x39\xee\xa3\x12\x0f\x1b\xff\xf3\xae\x42\x93\x43\x51\x60\x53\x74\x42\x51\x8c\xff\x3a\x56\xc5\x5d\x39\xc9\xa2\x24\x9f\xe4\xd1\xfd\xa4\x46\x7b\x0c\xfc\x14\x27\x75\x99\x46\x8f\xdb\x5d\x5a\xec\xbf\x3e\xef\x8a\xf8\xf1\x29\x8b\xaa\x63\x92\x6f\x83\x5b\x71\x44\xdf\xb4\xda\x10\x46\xb1\x28\xb7\xc1\x74\x33\x5f\x2f\x2b\x94\xd1\xb6\x07\x2a\xf7\x45\x10\x28\xf3\xb0\xbc\xa5\x22\x25\xc6\x84\xcc\x44\x94\x26\xc7\x7c\x9b\xa2\x43\x73\xbb\x8b\xf6\x5f\xb1\xb8\xf2\x98\x09\xfe\x87\xd9\x6c\xf6\xfc\x6b\x13\xed\x92\x3c\x46\xed\x97\x2b\x3f\xbc\xfa\x6d\x7b\x28\xf6\x77\xf5\x53\x71\xd7\x60\xcc\xdb\xc0\xfb\x57\x6a\x9c\xa3\xbc\x79\x3e\x81\x6a\xb4\x2f\xf2\x06\xe5\x8d\xaa\x47\x62\x33\xe3\x2f\xb8\x2d\xee\x51\x75\xc0\x06\xf3\x3e\xa9\x93\x5d\x8a\x9e\x4f\xe1\xe4\x34\x9b\x9c\xe6\x93\xd3\x62\x72\x5a\x4e\x4e\x2b\x36\x4d\x7e\x53\x94\xdb\xe0\x96\xfd\xd8\x15\x4d\x53\x64\xdb\x60\x8a\x45\xf0\x5c\xda\x60\x42\x0c\x11\xed\x76\xd5\xaf\x4d\xd2\xa4\xe8\xb7\x09\xf9\x77\x1c\x35\x91\x5f\x54\xc9\x31\xc9\xa3\xd4\xa7\x4f\x9e\x88\x7c\x62\xb4\x2f\xe8\xba\xda\x92\x77\x19\x1e\xb5\xac\xcb\x10\x84\x17\x17\x4d\x83\xe2\xdb\x41\x80\xfd\x5d\x55\x17\xd5\xf6\x84\xd2\xf2\xb6\x5b\x59\x74\x30\x6a\x67\xbf\xfe\x9a\x94\x3e\x7e\x01\xe5\x45\x8e\x9e\xa3\x38\xae\x50\x5d\x3f\xe9\xc3\x63\x7a\xd1\x3c\xa6\x68\x9b\x17\x55\x16\xa5\x92\x16\x24\xf9\x09\x55\x49\Line truncated
func cssBootstrapMinCssBytes() ([]byte, error) {
return bindataRead(
_cssBootstrapMinCss,
"css/bootstrap.min.css",
)
}
func cssBootstrapMinCss() (*asset, error) {
bytes, err := cssBootstrapMinCssBytes()
if err != nil {
return nil, err
}
info := bindataFileInfo{name: "css/bootstrap.min.css", size: 180041, mode: os.FileMode(511), modTime: time.Unix(1551299121, 0)}
a := &asset{bytes: bytes, info: info}
return a, nil
}
var _cssBootstrapMinCssMap = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\xec\x7a\x79\x73\xa3\x5a\x96\xe7\xff\xfd\x29\x18\x57\x4c\x57\x55\xe8\x39\xd9\x25\x91\xe9\xcc\x68\xf6\x1d\x09\x24\x40\xf0\x1f\x9b\xe0\xb2\x8b\x45\x80\x5e\xd4\x77\x9f\x90\x6c\xa7\xfd\xaa\xfb\xf5\xeb\xa8\xe9\x98\x89\xe8\x28\x65\xda\xe2\x9e\x7b\xcf\xef\xec\xf7\x1c\x85\xfc\xf2\xbf\xb8\x1d\x7b\xf4\xf6\x3c\x94\x0d\x55\xf9\xe3\x5f\x5e\x5e\xdf\x20\xe8\x25\x4b\x82\xf8\xfe\x00\x41\x2f\x55\x32\x04\x50\x36\x0c\xed\x73\x72\x19\xc1\xf5\xfb\x13\xdb\xd4\x43\x52\x0f\xcf\xc3\xd2\x26\x4f\x50\xf4\xba\xfa\xfe\x34\x24\xf3\x00\xdf\x01\xbe\x41\x51\x16\x74\x7d\x32\x7c\x1f\x87\xf3\xf3\xf6\xe9\x8f\x70\x0e\x49\x34\x76\x60\x58\x9e\xf7\x4d\x09\xa2\xe5\x13\x64\x9c\x9c\x83\xb1\x1c\x9e\xfb\x2e\x82\xfe\x5c\x37\x75\xf2\xe7\x6f\x50\x3f\x2c\x65\xf2\x4a\x19\xeb\x3e\x38\x27\xcf\xa0\x2e\xc1\x63\x0b\x54\xe9\x63\x23\x0e\x86\xe0\xeb\xb7\x3b\x4c\x9d\x44\x6f\xdc\x7d\x52\x9e\xff\xfc\xae\xca\x00\x86\x32\xf9\xb1\x0f\xd2\x04\xaa\x9b\x01\x3a\x37\x63\x1d\x43\xff\x5a\x81\x38\x6e\x86\x6f\x90\x08\x06\x69\x0c\xa1\xfb\x76\xff\x02\xbf\x9e\x7d\xe5\x7b\xc8\x86\xee\x76\xbf\x99\x1b\xf5\xfd\x13\x54\x25\x31\x08\xbe\x3f\xf5\x51\x97\x24\xf5\x9b\x08\x08\x0a\x9b\x78\x81\x7e\x7d\x5b\x40\x50\x18\x44\x45\xda\xdd\x05\x3d\x47\x4d\xd9\x74\x5f\xa1\x3f\x9d\xd1\xfb\xbf\x6f\x3f\x8f\x54\x41\x97\x82\xfa\x2b\x84\x7c\x90\xce\x4d\x3d\x3c\x9f\x83\x0a\x94\xcb\x57\xe8\x49\x4a\xca\x6b\x32\x80\x28\x80\x8c\x64\x4c\x9e\x7e\x81\x7e\x12\x7e\x81\xe8\x0e\x04\xe5\x2f\x50\x1f\xd4\xfd\x73\x9f\x74\xe0\xfc\x0e\xf2\xb7\x7f\x79\x7b\xf8\x72\x77\x6b\x00\xea\xa4\x83\x7e\xfd\x29\x8b\x44\xda\x19\x0a\xc6\xa1\x81\x88\xf7\xa7\x6f\xd0\x04\xe2\x21\xfb\x0a\xad\x11\xa4\x9d\xbf\x41\x77\x43\x9f\x83\x12\xa4\xf5\x57\x28\x4a\xea\x21\xe9\xbe\x7d\x80\x06\xd0\xaf\xd0\xbb\x3d\x04\xba\xc5\x23\xe2\x8d\x21\x4e\xa2\xa6\x0b\x06\xd0\xd4\x5f\xa1\x7b\xe4\xee\x3c\x6f\x2c\x5f\xb3\xe6\xfa\x50\xe2\xdf\x1d\x1c\xeb\x38\xe9\xee\xc1\xfc\x24\x21\x43\xa1\x5f\xdf\x35\xda\xbe\x6a\xd4\x36\x3d\x78\x30\x74\x49\x19\x0c\xe0\x9a\x7c\x83\xca\xe4\x3c\x7c\x85\x9e\xd1\xd7\x03\x65\x32\x0c\x49\xf7\xdc\xb7\x41\x04\xea\xf4\x4e\x7f\x50\x41\x9d\x3c\x67\x09\x48\xb3\xe1\x6e\xdc\x9d\xf4\xf0\x6f\x0f\x6e\xc9\x6f\x08\xd3\xdb\x19\x14\x41\xbe\x7d\x44\xa5\x9d\x21\xe4\xd5\x5f\xc8\x9b\x8d\x7d\x16\xc4\xcd\xf4\x15\x42\x20\xf4\xb1\xf9\xa7\xf3\xf9\xfc\x61\x67\xfb\xe1\x9a\x2e\x0d\x83\xbf\x20\xbf\x40\x6f\xff\xbf\x90\x7f\xfd\xc0\xc5\xde\x10\x7f\xa3\x1d\xfa\x65\xfd\xc9\x05\x63\x09\xfd\x0a\x95\xa0\x1f\x9e\x1f\x09\xf8\xee\xd0\x9f\x08\xe4\x2b\x42\x1b\xc4\xf1\xc3\x5c\xe4\x43\x89\x12\x40\xbf\x42\x31\xe8\xdb\x32\x58\xbe\x42\x43\x10\x96\xc9\x73\x94\x94\xe5\xdf\x59\x1a\x36\x65\xfc\x33\xee\xe8\xff\xfe\x24\xfb\x4b\xd9\xa4\xcd\x67\x8c\xd7\x6a\x7b\x0e\xcb\x26\x2a\xde\x75\x78\x1e\x9a\xf6\x2b\x84\x93\x77\x0f\xfe\xed\x33\xe3\xf3\xbd\x24\xb1\xf9\x33\xff\x6f\x93\xe1\xdf\x1e\xc5\xf3\xb6\x68\xea\x72\x81\x5e\xcb\x08\x0a\xea\x18\xfa\xcb\xf3\x94\x84\x05\x18\x9e\x2b\x50\x3f\xc7\xc9\x15\x44\xc9\x73\x0b\xe6\xa4\x7c\x7e\x24\xcc\x57\x08\xfb\xeb\x2f\xbf\xc7\x7a\xaf\x27\x50\x3f\x3f\x57\xcd\xed\x1f\x60\x85\xa0\xe7\xe6\xf7\xa5\xc2\xe8\x1f\x30\xbf\x09\xff\x47\xe4\x7e\x7a\xdd\x21\xba\xa4\x6f\xca\xf1\xb5\x3a\x50\x0a\x8b\x5b\xf0\x8f\xf3\x63\x71\xdb\xce\x7f\xfd\x74\x27\x7d\x84\x08\xfd\x4f\x42\xf4\xfb\xa1\xfc\x6d\x2a\xfc\xed\xef\x2f\x9c\x3f\xf5\x63\x9a\x26\xfd\x5d\x78\xff\x49\xea\xbf\x4b\x99\x9f\x3b\xef\x17\x49\x14\x45\x1f\xb7\xd7\x7f\x80\x15\x7c\x42\x7b\xe7\x59\x3f\x5e\x7f\x77\x73\xbe\xa7\x37\x86\xfc\xfd\x9d\xfa\x5a\xf3\x28\xf1\x59\xfc\xcf\x4a\x87\x50\xe4\x83\xfe\x66\xce\x0b\xfc\xa8\xbd\x47\x73\x84\xdf\xbb\xe3\xcb\xfd\x92\xff\xf1\x76\x20\x06\x57\x28\x2a\x83\xbe\xff\xfe\xf4\xf3\xa6\x7d\xfa\xf1\xee\x8c\x97\x0c\xfd\x41\x20\xc4\x0b\x9c\xa1\xef\x1d\xe2\xa5\xfd\xf1\xd2\x0f\x5d\x53\xa7\x3f\x04\x50\x7e\x6a\x45\x77\x59\x0f\xf2\x0b\xdc\x7e\x00\xb4\x3f\x7e\x6a\x7a\xcc\x12\xa8\x07\x43\x72\x6f\x71\x67\x90\x8e\x5d\x12\x43\xc1\x00\x0d\x19\xe8\xa1\x20\x8e\xbb\xa4\xef\xa1\xb8\x49\xfa\x3b\xe4\x27\x4f\x3d\x94\x82\x86\x2c\x81\xba\xe4\x32\x26\xfd\x90\xc4\xd0\x19\x94\xc9\x97\x77\x11\xbf\x23\x4e\x3e\xbf\x42\x83\x1e\x5a\x9a\xb1\x7b\x88\xfe\x05\xaa\x82\x22\x81\xfa\xb1\x4b\xa0\x21\x7b\x08\x4f\x1e\x60\x75\x50\x25\x50\x14\xf4\x09\x54\x05\x43\x94\x25\xfd\x63\xc7\xb6\xb4\x2f\x2f\x61\xf7\x81\x29\x34\x1d\xd4\x35\xcd\x70\xdf\xe9\xa1\xbf\x94\xa0\x48\xa0\x97\xa8\x89\x93\x1f\xf7\x11\xe1\x2b\x0c\x27\x73\x50\xb5\x65\xf2\x25\x6a\x2a\xf8\x05\x7e\xec\xfc\xf5\x2e\x1e\xaa\xc6\x7e\x80\xda\xae\xb9\x82\x38\x81\x82\xfa\x27\xe2\x2b\x37\xa8\xe3\x64\xfe\x72\x1f\x43\xde\x98\xfe\x4b\x16\xbe\x04\x50\xd6\x25\xe7\xef\x4f\x77\xe1\xfd\x57\x18\xce\x92\xb2\xfd\x92\x82\x21\x1b\xc3\x87\x06\xed\x7d\x18\x80\x9f\x7e\x58\x49\x10\xbf\x9a\x3a\x96\x25\x14\x37\xd1\x58\x25\xf5\xf0\x68\x5f\x2f\x70\xf0\xe3\x53\x92\x75\x50\xd5\x74\x09\x04\xea\x73\xd3\x55\x8f\x03\x50\x10\x36\xe3\x00\x8d\x3d\xa8\x53\xe8\x3d\xf2\xbf\x1d\x36\xde\x88\xff\xa1\xba\xf7\xfc\x02\xf1\xf7\xa7\x4f\x95\xf0\xf4\x9f\x58\xf0\xaa\x7c\x3f\x04\xc3\xd8\xdf\x4d\x78\x7a\x17\x75\x78\x90\xee\xda\x42\xff\x5a\xc5\x41\x9f\x7d\xfb\x7d\x90\x61\x02\xf7\x4e\xLine truncated
func cssBootstrapMinCssMapBytes() ([]byte, error) {
return bindataRead(
_cssBootstrapMinCssMap,
"css/bootstrap.min.css.map",
)
}
func cssBootstrapMinCssMap() (*asset, error) {
bytes, err := cssBootstrapMinCssMapBytes()
if err != nil {
return nil, err
}
info := bindataFileInfo{name: "css/bootstrap.min.css.map", size: 9339, mode: os.FileMode(511), modTime: time.Unix(1551299129, 0)}
a := &asset{bytes: bytes, info: info}
return a, nil
}
var _jsControllerJs = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x94\x54\x4b\x8b\xdb\x30\x10\xbe\xe7\x57\x0c\xea\xc5\x61\xb7\x4e\xcf\xc9\x66\x2f\x4b\xa1\x94\x3e\x0e\x5b\x5a\x4a\x29\x41\xb6\x27\x59\xb3\x8a\x46\x95\xe4\x98\xa5\xf8\xbf\x17\xcb\x6f\x49\x59\xe8\xd1\xdf\x63\x1e\x66\xf4\x1d\x2b\x99\xdb\x92\x24\x08\xe2\xc5\x03\x49\x8b\xd2\x26\x6b\xf8\xbb\x02\xb8\x70\x0d\x39\x49\xb9\x5b\xf5\x1f\x5c\x29\xd8\x83\xc4\x1a\xbe\x57\x98\xb4\x12\x00\x14\x5b\x60\x6f\xb8\x52\xec\xd6\x7d\x17\xdc\xf2\x2d\x74\x1c\x00\x55\x56\x55\xf6\x90\x57\x5a\xa3\xb4\x5b\x90\x95\x10\xb7\x4b\xee\x42\xc2\xf2\x13\x6e\xe1\x9d\x47\x1c\x35\xfe\xa9\x50\xe6\x2f\x21\xa5\xa8\x46\x3d\x83\x4b\xb9\xe8\xe2\xe1\x61\x87\x0e\x8f\x35\xe8\x18\xbf\x7e\xc6\xad\x45\xfd\x12\xe9\x30\x30\x61\x8f\xd1\xf3\xc4\x75\x94\xf0\x9b\x08\x2c\x0e\x67\x5e\x4a\xb3\x05\x56\x90\x7d\x4b\xc7\x23\x9b\x73\x3c\x33\xa4\xb3\x2b\x64\x56\x89\xe7\x2b\xd4\x51\x10\xb7\x57\xb8\x52\x5e\x50\xdb\x76\x8c\x28\x4d\x17\xd4\xed\x5d\x5c\x6b\xca\xed\x41\x50\xfd\x8a\xf9\x60\xf1\xac\x66\xbc\xa3\x9b\x15\x40\xb3\x76\x57\x55\x1e\x21\xa9\x4b\x59\x50\xfd\x8b\xfd\xc0\xec\x91\xf2\x67\xb4\xec\xf7\xba\x3f\xa0\xf6\xfa\xfa\x8b\x1b\xd9\x84\xd5\x66\xbb\xd9\x30\xb8\x81\x82\xf2\xea\x8c\xd2\xa6\x82\x72\xde\x1e\x71\xfa\x44\xc6\xc2\x0d\xb0\x4d\x6d\xd8\x7a\x37\xd6\x48\x49\xe6\x82\x0c\xc2\x1e\x86\x7b\x4f\xf0\x62\xd7\xe3\x9d\xb6\xd7\x5d\x5a\x3c\xc3\x7e\x2a\x9a\x6b\xe4\x16\xdf\x0b\x6c\xbf\x12\xc6\x87\x82\xe0\x94\x69\x29\x25\xea\x0f\xdf\x3e\x7f\x82\x3d\xb0\xbb\xec\xfe\x81\xa4\xc4\xee\x29\xb9\x5e\x45\x7a\xb7\xc9\xee\x59\xe7\x69\xdc\xb6\xe3\x30\x67\x34\x86\x9f\x5e\x1f\xa7\x52\x05\xb7\xad\xe4\xe3\xe3\xd7\x2f\xa9\xe2\xda\x60\x2b\x4a\xdb\x07\x36\x4e\x92\x93\x34\x24\x30\x15\x74\x4a\x3a\xc3\x48\x71\xa5\xd2\xe5\xf3\x83\x7d\x5f\xd4\xc3\x23\x8e\xfe\x9c\x03\x47\x8f\x47\x1c\xe3\x63\x0a\x3c\x23\x13\x71\xb9\x37\x10\x38\x1c\xda\xff\xb1\x4e\xbe\x78\xe0\x93\x7e\x01\xef\x02\x7d\xb0\xc5\x02\x0e\xf5\x91\x1d\x3c\x22\xf4\x78\x1b\xcc\xc0\xc5\x02\xcb\x34\x98\xf4\x4b\x7c\x17\x71\x04\x4b\x78\x44\xcc\xe3\x0d\xb5\x80\x63\xfa\xe0\xc7\x7a\xc4\xb8\x8a\xc0\xc2\x4c\xaa\x2e\xb1\xd4\xbc\xe2\x18\x62\xb0\x77\xe2\x09\xf0\x55\x5d\x9c\xcd\x65\x1d\xe2\xeb\xda\x64\x9b\xab\xda\x6f\x5f\xe3\x22\x6e\x2e\x72\x80\xaf\x1a\xc2\x6e\x2e\x1c\x30\x5f\x3b\x24\xdf\x5c\x3b\x60\xc1\x84\x5d\x0c\x2e\x86\xec\xa0\x58\x55\x17\x89\x7e\x59\x07\x8e\x51\x01\xd0\x00\x0a\x83\x7d\x1e\xfc\x4f\x38\x45\xa3\xe9\x27\x55\x1a\x32\x4d\xb5\x41\x0d\x05\xa1\x01\x49\x16\x4c\xa5\x14\x69\x3b\x25\xab\x99\x12\xab\x59\x35\xab\x7f\x01\x00\x00\xff\xff\x70\x7f\xb2\xda\x1a\x08\x00\x00")
func jsControllerJsBytes() ([]byte, error) {
return bindataRead(
_jsControllerJs,
"js/controller.js",
)
}
func jsControllerJs() (*asset, error) {
bytes, err := jsControllerJsBytes()
if err != nil {
return nil, err
}
info := bindataFileInfo{name: "js/controller.js", size: 2074, mode: os.FileMode(511), modTime: time.Unix(1551215770, 0)}
a := &asset{bytes: bytes, info: info}
return a, nil
}
var _jsVueJs = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\xbc\xbd\x69\x73\xe3\x36\xb3\x30\xfa\xfd\xfc\x0a\x8b\xe5\xcb\x00\x8f\x60\x8d\x9c\x3c\xcb\x09\x35\x18\xd5\x64\x96\x64\x92\xd9\x32\x4b\x36\x8d\x8e\x8a\x26\x21\x1b\x63\x0a\x54\x40\xc8\x4b\x4c\xbd\xbf\xfd\x56\x37\x00\x12\xa4\xe8\x39\x79\xeb\x56\xdd\x0f\xb6\x48\x00\xc4\xda\x68\xf4\x8e\x07\xff\x18\xfd\xd7\xd1\x3f\x8e\x7e\xd9\x89\xc9\xe7\xea\xe8\xea\xeb\xc9\xbf\x27\xff\x81\x04\x92\xd1\xa3\xaf\xa7\xa7\xff\x3c\xf9\x7a\x7a\xfa\xed\xd1\xb3\xab\x54\x1d\xfd\x5e\xee\x20\xe7\x9d\x28\x44\x5a\x89\xfc\x68\xa7\x72\xa1\x8f\xcc\x85\x38\x7a\xf5\xe2\xc3\xd1\x4b\x99\x09\x55\x89\xc9\x7f\x1d\xfd\xe3\xc1\x7f\x8d\xd6\x3b\x95\x19\x59\x2a\x22\x98\xa1\x77\x51\x79\xf6\x59\x64\x26\xe2\xdc\xdc\x6e\x45\xb9\x3e\x12\x37\xdb\x52\x9b\x2a\x8e\x23\xa8\x64\x2d\x95\xc8\xa3\x91\xcf\xdc\x94\xf9\xae\x10\x73\xfb\x33\x71\x45\xb9\x21\x34\x89\x7c\xb5\x6d\x4d\xf6\xeb\x38\xb6\xbf\x93\x74\x93\xcf\xed\x23\x31\x34\x21\x82\x8b\xba\xae\x44\xb1\xa6\x93\x5f\x76\x02\xea\xd8\x13\x73\x21\x2b\xd6\xf4\x8f\xde\x45\xbb\x4a\x1c\x55\x46\xcb\xcc\x44\xb3\xab\x54\x1f\x09\xfe\x06\xbb\x3b\x59\x6b\x21\xfe\x12\xe4\x6e\x4f\x67\xbe\xfc\x91\x21\x82\xde\x69\x61\x76\x5a\x1d\xa9\x5d\x51\x70\x2e\xf6\x4d\xa6\xea\x65\x8e\xc2\x4c\xdd\x66\x8e\xa6\xbc\xf3\x9d\x6c\xb3\x22\xe8\x89\x3a\x0f\xa6\xaa\xae\x23\xb5\xdb\x9c\x09\xdd\x4d\xab\x6e\x37\x67\x65\xd1\x4d\x3b\x2b\xcb\x42\xa4\xc1\xec\x04\x6d\x94\x07\x7d\xe3\x22\x8e\x0f\x57\x66\x0f\x53\x90\xfa\x29\xd8\xea\xd2\x94\x90\x35\x31\xe5\x7b\xec\x59\x3b\x15\x55\xd0\xeb\x85\xad\xe7\xc8\x7e\xb6\x8c\x38\xe7\xe9\x24\x4b\x8b\x82\x08\xda\xf6\x21\x83\x2f\xa0\x7e\xc3\xb7\xa9\xae\xc4\xf3\xa2\x4c\x0d\xb1\xf5\x12\x41\xe9\xcc\xf5\xcf\x3c\xe2\xd3\x38\x7e\x95\x9a\x8b\xc9\xba\x28\x4b\x4d\x0c\xe5\x9c\x9b\x38\x96\xd5\x73\xa9\xa4\x11\x9d\x5a\x77\xe1\xc8\x88\xa0\x71\x3c\x00\x27\x62\x62\x2e\x84\xba\x27\x2b\x4b\x4d\x76\xd1\x56\x58\x1c\xae\xf1\x3c\x8a\x92\xc7\x5a\xa7\xb7\x13\x59\xe1\x2f\x11\xb4\xae\x2b\x6c\xad\x9d\x1b\x18\xf5\xfc\xc7\xf7\x6f\x5e\x4f\xec\x2a\xca\xf5\x2d\x11\x0c\xaa\x60\x5f\xd3\xa4\x19\x67\xdb\xd2\x7a\x70\x42\x44\x33\x11\xb2\x7a\x9d\xbe\x26\x86\xce\x45\x62\xda\xaf\xb6\x76\x57\xad\x4b\x4d\xe0\x5b\xe5\x17\x2b\xd3\x22\x35\x82\x40\x7b\x94\x69\x2e\x26\xd5\xb6\x90\x86\x44\x2c\xa2\x4c\xf2\xe9\x4c\x3e\xd4\x93\x42\xa8\x73\x73\x31\x93\xe3\x31\x55\x0b\xbd\x90\xcb\x25\x1f\x4d\x9b\x79\x9f\xb7\xfb\xb6\x9d\x81\x05\x0c\xf0\x65\x79\x2d\xf4\x93\xb4\x12\x84\x2e\xf7\xc9\x70\xb1\xe5\x1e\x81\x27\xe7\x5b\x12\x55\x45\x69\x58\x56\x6e\xb6\xa5\x12\xca\x44\x6c\x34\xa5\xec\x0a\x32\x2e\xc5\x2d\xd3\x62\xcd\xb0\x00\xfc\x3b\xa9\xb2\x72\x2b\x98\xac\xa2\x60\x9b\x5d\xd8\x21\xca\x35\x11\xae\xcb\x76\x9e\x14\x17\x13\xa9\x72\x71\xf3\x66\x4d\x0c\x9d\xc9\x35\x51\x8f\x4e\x4e\xa9\xeb\x83\x1d\x71\x26\x88\x62\xa7\xd4\x76\x66\x73\x08\xc9\x17\x69\xf5\xe6\x5a\xbd\xd5\xe5\x56\x68\x73\xdb\xb6\x79\x6b\xdb\x74\x75\x6d\x1c\xf8\x32\x13\xac\xd7\x79\xbb\x5e\x03\x73\xee\xa7\xb1\x99\x1d\xd5\xd4\x66\x16\x6a\x59\xd7\x04\x7e\xb8\x20\x8a\xba\xde\xad\xf8\x83\x13\xf2\xe9\x9a\x3e\x38\x67\x67\xfc\x9c\x0c\x4c\xab\x98\x68\xb1\x2d\xd2\x4c\x90\x15\xeb\x22\xd5\x66\xcd\xcc\xc4\x94\x1f\xb7\x5b\xbf\x3c\x49\x14\xed\xe9\x9e\xb2\xe3\xfb\x2a\xcc\x2e\x52\xfd\xd8\x90\x29\xed\x7e\x37\x16\x93\x0a\x27\xef\x14\xbe\xbe\xe6\x0f\x3e\x7d\x47\x16\x8f\x4f\xfe\x58\x42\xef\x6e\xfe\xb7\xde\x5d\xb3\xe8\xe4\xf8\x34\xa2\x5d\x50\xd9\x53\xc4\xa8\x4f\xf8\x73\xf7\x6d\xb0\x0c\x67\x52\xe5\xf3\xc1\x21\xd9\x3c\x62\x68\x08\x68\x08\xf1\x2d\xa2\x55\x76\x1d\x34\x4f\xf5\xf9\x6e\x23\x94\xa9\x3c\x68\xbb\x4a\xf4\x5c\x3f\x3a\x9d\x8b\x49\xba\xdd\x16\xb7\xc4\xb0\xa6\x1c\x4d\x84\x5d\x5a\xc3\x54\xfb\x4c\xf7\x1e\x8e\x27\x2b\x5b\x11\xf7\x90\xc7\xd4\xbe\x05\x92\xc7\xb6\x27\x86\x9b\xba\x9e\xce\xda\x2d\xe8\x0b\x9f\x18\xa6\xb9\x12\xd7\x47\x16\x4b\x28\x3a\x53\x27\x27\x33\xaa\x71\xe1\x17\x6a\x6c\x96\x4d\x07\x5b\xb0\xba\xec\x6d\xe8\x23\xa9\x8e\x0c\x15\xf0\x0d\x40\x8c\xff\x22\xc0\xe6\x6f\x60\x11\x7c\x79\xc3\xef\xf6\x4c\xf1\xe9\x4c\x3d\xf4\xdd\x98\xa9\xf1\x18\x2b\x88\xe3\x4b\x62\x18\x3c\xb5\xd8\xb5\xad\xe6\x3d\x34\xcc\x14\xbd\x43\x68\xfc\xc0\xc3\xe9\x66\x0d\xf4\x8e\x4e\xf7\xec\x19\x1f\x5a\xfe\x60\x62\x5e\xb7\x3b\x16\x70\x35\xf5\x27\xdd\xcc\xce\x0f\x1c\x3f\x4c\xf3\xd2\xed\xda\x91\xaa\xeb\x91\xf6\x85\x54\x1c\x8f\x74\x1c\x37\x08\x92\x73\xee\x9e\x0d\x9d\x19\x7d\x8b\x4b\x2d\x79\x1f\x01\xb3\xb4\x97\x64\xeb\x96\x71\x9c\xb6\x18\xc1\x2d\x26\xe7\xc6\x3d\x02\xc2\x16\x57\x42\xdf\x06\x00\xdd\x8e\xd5\x8e\x03\xa6\x6b\x8f\x95\x89\x23\xa9\x2a\x93\xaa\x0c\x4e\x8a\xa7\xa9\x11\x71\x6c\xfa\x49\x6d\x63\xe7\xc2\x7c\x90\x1b\x41\xf0\xb8\x6a\xdf\xb0\x57\x75\xed\x7b\x35\x3a\xc5\x49\xa9\x3c\x0e\xb9\x14\xb7\x70\x92\xb0\xac\x93\x60\x9a\x05\xab\xda\x41\x64\xcd\x20\xaa\xfe\x20\x3a\x43\x58\xa8\xa5\x1f\xc5\x1e\x4f\xb7\x80\xf8\x38\xdd\xb7\x00\xf0\xb9\x7f\x94\x1c\x00\x91\x5c\x13\x5f\x1f\xf5\x03\x55\xae\x67\x27\xa7\x6d\x4d\x2f\x5b\xd4\x38\x3a\x3d\xc0\x84\xf4\xce\x00\xfa\xe3\xa3\x29\x6b\xb6\x24\xd0\x61\xed\xae\x74\x18\xf1\x15\x8f\xf2\xd4\xa4\x27\x95\xd0\x57\x42\x9f\x68\x01\x44\xa6\xc8\x23\xf6\x82\x2f\xa2\xe0\x3c\x89\x72\xa9\x45\x66\xe4\x95\x88\x58\xb4\x96\x85\x11Line truncated
func jsVueJsBytes() ([]byte, error) {
return bindataRead(
_jsVueJs,
"js/vue.js",
)
}
func jsVueJs() (*asset, error) {
bytes, err := jsVueJsBytes()
if err != nil {
return nil, err
}
info := bindataFileInfo{name: "js/vue.js", size: 93373, mode: os.FileMode(511), modTime: time.Unix(1551299281, 0)}
a := &asset{bytes: bytes, info: info}
return a, nil
}
var _rootIndexHtml = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\xdc\x59\x7f\x6f\xdb\x36\x10\xfd\xbf\x9f\xe2\xa6\x21\x40\x0b\x54\x51\xd2\x24\xc0\xea\x4a\xc6\xda\x74\xed\x02\x2c\x48\x31\x74\x19\x86\x61\x08\x28\xf1\x6c\x31\xa6\x49\x95\x3c\xd9\xf5\x82\x7c\xf7\x81\xa6\x65\xcb\x8e\xf3\xc3\xb1\xb0\xc4\xfe\xcb\x22\x79\x77\x7c\xef\xe5\xfc\x48\x39\xf1\x0f\x1f\xcf\x8e\xbf\xfe\xf5\xe5\x17\xc8\xa9\x2f\xdb\x2f\x62\xf7\x01\x92\xa9\x6e\x12\xa0\x0a\xda\x2f\x00\xe2\x1c\x19\x77\x0f\x00\x71\x1f\x89\x41\x96\x33\x63\x91\x92\xa0\xa4\x4e\xf8\x53\x00\x51\x6d\x71\xfc\x04\xa0\x58\x1f\x93\x60\x20\x70\x58\x68\x43\xc1\x64\x36\xd3\x8a\x50\x51\x12\x0c\x05\xa7\x3c\xe1\x38\x10\x19\x86\xe3\xc1\x6b\x10\x4a\x90\x60\x32\xb4\x19\x93\x98\xec\xbf\x06\x9b\x1b\xa1\x7a\x21\xe9\xb0\x23\x28\x51\xda\x57\xa9\x36\x93\x42\xf5\xc0\xa0\x4c\x02\x4b\x23\x89\x36\x47\xa4\x00\x72\x83\x9d\x24\xc8\xac\x8d\x52\xad\xc9\x92\x61\xc5\x6e\x5f\xa8\xdd\xcc\xda\x19\x4e\x12\x24\xb1\x7d\x2e\x32\x32\x5a\xc1\x69\x29\x49\x14\xb2\xb4\x70\xaa\x95\x20\x6d\xe2\xc8\x07\xf8\xe0\x71\xf5\xf6\x84\xc0\x2e\xd7\x14\xea\x4e\x07\xae\x26\x13\x00\x39\x8a\x6e\x4e\x2d\x78\x73\x54\x7c\x7f\x37\x9d\x1d\x73\x5a\x9c\x4c\x59\xd6\xeb\x1a\x5d\x2a\x1e\x66\x5a\x6a\xd3\x82\x1f\xd3\x34\xad\xad\x6b\xc3\xd1\x84\x86\x71\x51\xda\x16\x1c\xed\xed\xcc\xd6\xb8\xb0\x85\x64\xa3\x16\x08\x25\x85\xc2\x30\x95\x3a\xeb\x55\xcb\xd7\x2f\xea\xf8\xba\x06\x51\x35\x86\xf0\x0d\x43\x7e\x88\x8d\x80\xac\x61\x34\xc8\x1b\x43\x88\xfc\x80\x1f\x1c\x36\x89\x30\x75\xcd\xf5\x3c\x31\x02\x30\x25\xfa\x8c\x84\x56\x2d\x18\xe3\x14\xaa\xfb\x3b\xf2\x8f\x9a\x60\xdf\x82\x50\x1d\xf7\x3d\xc2\x45\x4a\x3f\xf7\x70\xd4\x31\xac\x8f\x76\x31\x69\xc6\x70\x6f\xa7\x36\x78\x10\x8b\xeb\xe9\xd3\xe1\xdb\xfb\x92\xc9\x30\x65\x0b\x66\x50\xd1\xb2\x02\x47\xf7\xee\x7e\x4f\x81\xb7\xf7\x22\xb8\x03\xfe\xfe\xde\xe3\xc9\x2f\x74\xcd\x33\xfd\xf6\x2d\xed\x9b\xcf\x0e\xeb\xea\x9d\x33\x4d\x5b\xa5\x77\x16\x99\x6c\x58\xef\xdc\x0e\xff\x21\xbd\x73\x5b\xb6\xff\x8c\xa3\xe9\x21\x13\x47\xfe\xb0\x75\x8f\xa9\xe6\xa3\xea\x10\xca\x8c\x28\x08\xac\xc9\x92\xe0\xd2\x46\x83\x12\x77\x2f\x6d\xd0\x8e\x23\xbf\xb0\x3c\xca\x9d\xb6\x46\x4b\x89\xe6\x8e\x60\x1a\x15\x98\x04\x84\xdf\x29\xba\x64\x03\xe6\x67\x83\xea\xbc\x1b\x0a\xc5\xf5\x70\x57\x2b\xa9\x19\x87\x04\x3a\xa5\xca\x5c\x0b\xbd\x7c\x55\x63\xec\xd6\x8e\xfd\xc9\xfe\xf2\xd5\xb4\x7d\xde\x55\xd4\x26\x9b\xfa\x61\xbe\x0f\x99\x64\xd6\x26\xc1\xa4\x5b\xc3\x43\x70\x9b\x87\x19\x2a\x42\x13\xb4\x4f\xd4\x00\x0d\xa1\x81\xcf\x7f\x9c\xc4\x51\xbe\x3f\x41\xcb\xc5\xa0\x4a\x74\xb4\x98\x50\x68\x02\x10\x3c\x09\x58\x51\x4c\xe1\xd6\xc3\x8c\x1e\x4e\xe7\x17\x0b\xc8\xda\x8a\x03\x65\xaa\xab\x81\x87\xcc\xc5\x60\x5a\x71\x6e\xf0\xd0\xf2\xa1\xed\x03\x14\x21\x2b\x49\xcf\xef\x54\x0f\x63\x86\xcf\x53\xaf\x05\xde\x0c\x0d\x5d\x37\x2c\xc4\x38\xe8\x47\x73\x41\xe3\x8b\x4b\xd0\x3e\x2b\xa9\x28\x09\x8e\x4b\xe3\x3a\x3e\x8e\xf2\xa3\x1b\x89\x63\x73\xf8\x56\x6a\xc2\xaa\xc0\x6c\x26\x68\x5f\x5d\x81\x1e\xd7\xb8\xc8\x7c\x0d\xb8\xbe\x86\xf7\x71\x34\x8b\x59\x40\x5b\x97\xa9\x36\xf1\x74\xdc\xcf\xb5\x24\xd6\xc5\xb5\xb8\x0f\x7c\x0d\xc7\xfd\x7c\x93\xb8\x7f\x32\xf8\xad\x44\x95\x8d\x1e\xc1\x7e\x21\x1a\x60\x26\x47\xa7\x2a\xeb\x04\xf9\xf5\xdf\xc5\xba\x1b\x24\xd0\x17\x3d\x44\xb3\x56\x6b\x14\xae\x82\xd3\xe1\xcf\xd5\x79\xdf\x36\xbc\xe9\x21\x4f\x68\x21\x27\x6a\x6d\x07\x11\x6a\x23\x0d\xc4\x33\x5f\xcb\x3f\x3c\xf3\x8d\xb3\x0f\xcf\xbc\x69\xf7\xf0\x62\x6c\x81\x79\x78\x79\xd6\xf0\x0e\xaf\xc4\xd6\x5b\xc7\x07\x46\x84\x66\xb4\x86\x79\x2c\x6b\xa3\xd4\x57\x9d\xf3\x93\x4d\xec\xa2\x4a\x9d\xc7\x1b\xcc\x5d\xea\xd4\x3d\x67\x93\xd5\x39\xce\x99\x79\xac\xfb\x4e\x3b\x65\x5c\xc3\x49\xb1\xb3\x51\xdc\xd7\x70\x98\x8a\x7a\xe3\x1e\xf3\xb8\xf7\xa0\xff\xe1\x35\xab\x08\x0f\x9e\xc4\xe4\x4e\x99\x50\x76\xe9\x1f\xc9\x16\x4c\xc1\x20\x4c\x85\xe2\xad\x49\xe2\xdf\x12\xf9\x45\xdf\x65\xfc\x33\x7e\x0f\x2f\x98\x6a\xde\xef\x9f\x46\x87\xf7\xa9\xd5\xa6\x20\xa1\xd5\x4a\x62\x30\x97\x96\x6e\x9d\x1a\x1f\x4a\xd9\x5b\x49\x87\xb4\x94\xbd\x67\xa1\x02\x34\x29\xc3\x27\xa9\xd9\xf2\x73\xff\x36\x1d\x3a\x2e\xe3\x59\x08\xd1\xec\x8d\xd1\xff\x98\xb5\x92\x14\x62\x92\xd4\x84\x1a\xf3\x87\xd9\x46\x18\xeb\xd9\x00\x8d\xd4\x8c\xaf\xa4\x99\x9e\x24\x6d\x5d\x07\xfd\xa6\x87\x30\xb9\x17\xac\xe6\x2b\x8c\x2e\xa4\x1e\x6e\x9d\x1e\x5f\xb1\x5f\xa0\x61\x54\x9a\xe5\x97\xc3\xbb\x1a\xe4\x82\xb0\x5f\x34\xf8\xad\x9a\x7b\x8c\x23\xff\x73\x7d\x1c\xf9\xff\xa3\xff\x17\x00\x00\xff\xff\x59\x6a\x08\xe6\x58\x1f\x00\x00")
func rootIndexHtmlBytes() ([]byte, error) {
return bindataRead(
_rootIndexHtml,
"root/index.html",
)
}
func rootIndexHtml() (*asset, error) {
bytes, err := rootIndexHtmlBytes()
if err != nil {
return nil, err
}
info := bindataFileInfo{name: "root/index.html", size: 8024, mode: os.FileMode(511), modTime: time.Unix(1551300132, 0)}
a := &asset{bytes: bytes, info: info}
return a, nil
}
// Asset loads and returns the asset for the given name.
// It returns an error if the asset could not be found or
// could not be loaded.
func Asset(name string) ([]byte, error) {
cannonicalName := strings.Replace(name, "\\", "/", -1)
if f, ok := _bindata[cannonicalName]; ok {
a, err := f()
if err != nil {
return nil, fmt.Errorf("Asset %s can't read by error: %v", name, err)
}
return a.bytes, nil
}
return nil, fmt.Errorf("Asset %s not found", name)
}
// MustAsset is like Asset but panics when Asset would return an error.
// It simplifies safe initialization of global variables.
func MustAsset(name string) []byte {
a, err := Asset(name)
if err != nil {
panic("asset: Asset(" + name + "): " + err.Error())
}
return a
}
// AssetInfo loads and returns the asset info for the given name.
// It returns an error if the asset could not be found or
// could not be loaded.
func AssetInfo(name string) (os.FileInfo, error) {
cannonicalName := strings.Replace(name, "\\", "/", -1)
if f, ok := _bindata[cannonicalName]; ok {
a, err := f()
if err != nil {
return nil, fmt.Errorf("AssetInfo %s can't read by error: %v", name, err)
}
return a.info, nil
}
return nil, fmt.Errorf("AssetInfo %s not found", name)
}
// AssetNames returns the names of the assets.
func AssetNames() []string {
names := make([]string, 0, len(_bindata))
for name := range _bindata {
names = append(names, name)
}
return names
}
// _bindata is a table, holding each asset generator, mapped to its name.
var _bindata = map[string]func() (*asset, error){
"css/bootstrap.min.css": cssBootstrapMinCss,
"css/bootstrap.min.css.map": cssBootstrapMinCssMap,
"js/controller.js": jsControllerJs,
"js/vue.js": jsVueJs,
"root/index.html": rootIndexHtml,
}
// AssetDir returns the file names below a certain
// directory embedded in the file by go-bindata.
// For example if you run go-bindata on data/... and data contains the
// following hierarchy:
// data/
// foo.txt
// img/
// a.png
// b.png
// then AssetDir("data") would return []string{"foo.txt", "img"}
// AssetDir("data/img") would return []string{"a.png", "b.png"}
// AssetDir("foo.txt") and AssetDir("notexist") would return an error
// AssetDir("") will return []string{"data"}.
func AssetDir(name string) ([]string, error) {
node := _bintree
if len(name) != 0 {
cannonicalName := strings.Replace(name, "\\", "/", -1)
pathList := strings.Split(cannonicalName, "/")
for _, p := range pathList {
node = node.Children[p]
if node == nil {
return nil, fmt.Errorf("Asset %s not found", name)
}
}
}
if node.Func != nil {
return nil, fmt.Errorf("Asset %s not found", name)
}
rv := make([]string, 0, len(node.Children))
for childName := range node.Children {
rv = append(rv, childName)
}
return rv, nil
}
type bintree struct {
Func func() (*asset, error)
Children map[string]*bintree
}
var _bintree = &bintree{nil, map[string]*bintree{
"css": {nil, map[string]*bintree{
"bootstrap.min.css": {cssBootstrapMinCss, map[string]*bintree{}},
"bootstrap.min.css.map": {cssBootstrapMinCssMap, map[string]*bintree{}},
}},
"js": {nil, map[string]*bintree{
"controller.js": {jsControllerJs, map[string]*bintree{}},
"vue.js": {jsVueJs, map[string]*bintree{}},
}},
"root": {nil, map[string]*bintree{
"index.html": {rootIndexHtml, map[string]*bintree{}},
}},
}}
// RestoreAsset restores an asset under the given directory
func RestoreAsset(dir, name string) error {
data, err := Asset(name)
if err != nil {
return err
}
info, err := AssetInfo(name)
if err != nil {
return err
}
err = os.MkdirAll(_filePath(dir, filepath.Dir(name)), os.FileMode(0755))
if err != nil {
return err
}
err = ioutil.WriteFile(_filePath(dir, name), data, info.Mode())
if err != nil {
return err
}
err = os.Chtimes(_filePath(dir, name), info.ModTime(), info.ModTime())
if err != nil {
return err
}
return nil
}
// RestoreAssets restores an asset under the given directory recursively
func RestoreAssets(dir, name string) error {
children, err := AssetDir(name)
// File
if err != nil {
return RestoreAsset(dir, name)
}
// Dir
for _, child := range children {
err = RestoreAssets(dir, filepath.Join(name, child))
if err != nil {
return err
}
}
return nil
}
func _filePath(dir, name string) string {
cannonicalName := strings.Replace(name, "\\", "/", -1)
return filepath.Join(append([]string{dir}, strings.Split(cannonicalName, "/")...)...)
}
func assetFS() *assetfs.AssetFS {
assetInfo := func(path string) (os.FileInfo, error) {
return os.Stat(path)
}
for k := range _bintree.Children {
return &assetfs.AssetFS{Asset: Asset, AssetDir: AssetDir, AssetInfo: assetInfo, Prefix: k}
}
panic("unreachable")
}
+2
View File
@@ -0,0 +1,2 @@
#!/bin/bash
go-bindata-assetfs -pkg="frontend" css/ js/ root/
+12
View File
@@ -0,0 +1,12 @@
/*!
* Bootswatch v4.3.1
* Homepage: https://bootswatch.com
* Copyright 2012-2019 Thomas Park
* Licensed under MIT
* Based on Bootstrap
*//*!
* Bootstrap v4.3.1 (https://getbootstrap.com/)
* Copyright 2011-2019 The Bootstrap Authors
* Copyright 2011-2019 Twitter, Inc.
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
*/@import url("https://fonts.googleapis.com/css?family=Lato:400,700,400italic");:root{--blue: #375a7f;--indigo: #6610f2;--purple: #6f42c1;--pink: #e83e8c;--red: #E74C3C;--orange: #fd7e14;--yellow: #F39C12;--green: #00bc8c;--teal: #20c997;--cyan: #3498DB;--white: #fff;--gray: #999;--gray-dark: #303030;--primary: #375a7f;--secondary: #444;--success: #00bc8c;--info: #3498DB;--warning: #F39C12;--danger: #E74C3C;--light: #303030;--dark: #adb5bd;--breakpoint-xs: 0;--breakpoint-sm: 576px;--breakpoint-md: 768px;--breakpoint-lg: 992px;--breakpoint-xl: 1200px;--font-family-sans-serif: "Lato", -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol";--font-family-monospace: SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace}*,*::before,*::after{-webkit-box-sizing:border-box;box-sizing:border-box}html{font-family:sans-serif;line-height:1.15;-webkit-text-size-adjust:100%;-webkit-tap-highlight-color:rgba(0,0,0,0)}article,aside,figcaption,figure,footer,header,hgroup,main,nav,section{display:block}body{margin:0;font-family:"Lato", -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol";font-size:0.9375rem;font-weight:400;line-height:1.5;color:#fff;text-align:left;background-color:#222}[tabindex="-1"]:focus{outline:0 !important}hr{-webkit-box-sizing:content-box;box-sizing:content-box;height:0;overflow:visible}h1,h2,h3,h4,h5,h6{margin-top:0;margin-bottom:0.5rem}p{margin-top:0;margin-bottom:1rem}abbr[title],abbr[data-original-title]{text-decoration:underline;-webkit-text-decoration:underline dotted;text-decoration:underline dotted;cursor:help;border-bottom:0;text-decoration-skip-ink:none}address{margin-bottom:1rem;font-style:normal;line-height:inherit}ol,ul,dl{margin-top:0;margin-bottom:1rem}ol ol,ul ul,ol ul,ul ol{margin-bottom:0}dt{font-weight:700}dd{margin-bottom:.5rem;margin-left:0}blockquote{margin:0 0 1rem}b,strong{font-weight:bolder}small{font-size:80%}sub,sup{position:relative;font-size:75%;line-height:0;vertical-align:baseline}sub{bottom:-.25em}sup{top:-.5em}a{color:#00bc8c;text-decoration:none;background-color:transparent}a:hover{color:#007053;text-decoration:underline}a:not([href]):not([tabindex]){color:inherit;text-decoration:none}a:not([href]):not([tabindex]):hover,a:not([href]):not([tabindex]):focus{color:inherit;text-decoration:none}a:not([href]):not([tabindex]):focus{outline:0}pre,code,kbd,samp{font-family:SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace;font-size:1em}pre{margin-top:0;margin-bottom:1rem;overflow:auto}figure{margin:0 0 1rem}img{vertical-align:middle;border-style:none}svg{overflow:hidden;vertical-align:middle}table{border-collapse:collapse}caption{padding-top:0.75rem;padding-bottom:0.75rem;color:#999;text-align:left;caption-side:bottom}th{text-align:inherit}label{display:inline-block;margin-bottom:0.5rem}button{border-radius:0}button:focus{outline:1px dotted;outline:5px auto -webkit-focus-ring-color}input,button,select,optgroup,textarea{margin:0;font-family:inherit;font-size:inherit;line-height:inherit}button,input{overflow:visible}button,select{text-transform:none}select{word-wrap:normal}button,[type="button"],[type="reset"],[type="submit"]{-webkit-appearance:button}button:not(:disabled),[type="button"]:not(:disabled),[type="reset"]:not(:disabled),[type="submit"]:not(:disabled){cursor:pointer}button::-moz-focus-inner,[type="button"]::-moz-focus-inner,[type="reset"]::-moz-focus-inner,[type="submit"]::-moz-focus-inner{padding:0;border-style:none}input[type="radio"],input[type="checkbox"]{-webkit-box-sizing:border-box;box-sizing:border-box;padding:0}input[type="date"],input[type="time"],input[type="datetime-local"],input[type="month"]{-webkit-appearance:listbox}textarea{overflow:auto;resize:vertical}fieldset{min-width:0;padding:0;margin:0;border:0}legend{display:block;width:100%;max-width:100%;padding:0;margin-bottom:.5rem;font-size:1.5rem;line-height:inherit;color:inherit;white-space:normal}progress{vertical-align:baseline}[type="number"]::-webkit-inner-spin-button,[type="number"]::-webkit-outer-spin-button{height:auto}[type="search"]{outline-offset:-2px;-webkit-appearance:none}[type="search"]::-webkit-search-decoration{-webkit-appearance:none}::-webkit-file-upload-button{font:inherit;-webkit-appearance:button}output{display:inline-block}summary{display:list-item;cursor:pointer}template{display:none}[hidden]{display:none !important}h1,h2,h3,h4,h5,h6,.h1,.h2,.h3,.h4,.h5,.h6{margin-bottom:0.5rem;font-weight:500;line-height:1.2}h1,.h1{font-size:3rem}h2,.h2{font-size:2.5rem}h3,.h3{font-size:2rem}h4,.h4{font-size:1.40625rem}h5,.h5{font-size:1.171875rem}h6,.h6{font-size:0.9375rem}.lead{font-size:1.171875rem;font-weight:300}.display-1{font-size:6rem;font-weight:300;line-height:1.2}.display-2{font-size:5.5rem;font-weight:300;line-height:1.2}.display-3{Line truncated
+88
View File
@@ -0,0 +1,88 @@
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-type" content="text/html; charset=utf-8">
<meta http-equiv="Content-Security-Policy" content="default-src 'none'; style-src 'unsafe-inline'; img-src data:; connect-src 'self'">
<title>Page not found &middot; GitHub Pages</title>
<style type="text/css" media="screen">
body {
background-color: #f1f1f1;
margin: 0;
font-family: "Helvetica Neue", Helvetica, Arial, sans-serif;
}
.container { margin: 50px auto 40px auto; width: 600px; text-align: center; }
a { color: #4183c4; text-decoration: none; }
a:hover { text-decoration: underline; }
h1 { width: 800px; position:relative; left: -100px; letter-spacing: -1px; line-height: 60px; font-size: 60px; font-weight: 100; margin: 0px 0 50px 0; text-shadow: 0 1px 0 #fff; }
p { color: rgba(0, 0, 0, 0.5); margin: 20px 0; line-height: 1.6; }
ul { list-style: none; margin: 25px 0; padding: 0; }
li { display: table-cell; font-weight: bold; width: 1%; }
.logo { display: inline-block; margin-top: 35px; }
.logo-img-2x { display: none; }
@media
only screen and (-webkit-min-device-pixel-ratio: 2),
only screen and ( min--moz-device-pixel-ratio: 2),
only screen and ( -o-min-device-pixel-ratio: 2/1),
only screen and ( min-device-pixel-ratio: 2),
only screen and ( min-resolution: 192dpi),
only screen and ( min-resolution: 2dppx) {
.logo-img-1x { display: none; }
.logo-img-2x { display: inline-block; }
}
#suggestions {
margin-top: 35px;
color: #ccc;
}
#suggestions a {
color: #666666;
font-weight: 200;
font-size: 14px;
margin: 0 10px;
}
</style>
</head>
<body>
<div class="container">
<h1>404</h1>
<p><strong>File not found</strong></p>
<p>
The site configured at this address does not
contain the requested file.
</p>
<p>
If this is your site, make sure that the filename case matches the URL.<br>
For root URLs (like <code>http://example.com/</code>) you must provide an
<code>index.html</code> file.
</p>
<p>
<a href="https://help.github.com/pages/">Read the full documentation</a>
for more information about using <strong>GitHub Pages</strong>.
</p>
<div id="suggestions">
<a href="https://githubstatus.com">GitHub Status</a> &mdash;
<a href="https://twitter.com/githubstatus">@githubstatus</a>
</div>
<a href="/" class="logo logo-img-1x">
<img width="32" height="32" title="" alt="" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAyRpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuMy1jMDExIDY2LjE0NTY2MSwgMjAxMi8wMi8wNi0xNDo1NjoyNyAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZVJlZiMiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENTNiAoTWFjaW50b3NoKSIgeG1wTU06SW5zdGFuY2VJRD0ieG1wLmlpZDpFMTZCRDY3REIzRjAxMUUyQUQzREIxQzRENUFFNUM5NiIgeG1wTU06RG9jdW1lbnRJRD0ieG1wLmRpZDpFMTZCRDY3RUIzRjAxMUUyQUQzREIxQzRENUFFNUM5NiI+IDx4bXBNTTpEZXJpdmVkRnJvbSBzdFJlZjppbnN0YW5jZUlEPSJ4bXAuaWlkOkUxNkJENjdCQjNGMDExRTJBRDNEQjFDNEQ1QUU1Qzk2IiBzdFJlZjpkb2N1bWVudElEPSJ4bXAuZGlkOkUxNkJENjdDQjNGMDExRTJBRDNEQjFDNEQ1QUU1Qzk2Ii8+IDwvcmRmOkRlc2NyaXB0aW9uPiA8L3JkZjpSREY+IDwveDp4bXBtZXRhPiA8P3hwYWNrZXQgZW5kPSJyIj8+SM9MCAAAA+5JREFUeNrEV11Ik1EY3s4+ddOp29Q5b0opCgKFsoKoi5Kg6CIhuwi6zLJLoYLopq4qsKKgi4i6CYIoU/q5iDAKs6syoS76IRWtyJ+p7cdt7sf1PGOD+e0c3dygAx/67ZzzPM95/877GYdHRg3ZjMXFxepQKNS6sLCwJxqNNuFpiMfjVs4ZjUa/pmmjeD6VlJS8NpvNT4QQ7mxwjSsJiEQim/1+/9lgMHgIr5ohuxG1WCw9Vqv1clFR0dCqBODElV6v90ogEDjGdYbVjXhpaendioqK07CIR7ZAqE49PT09BPL2PMgTByQGsYiZlQD4uMXtdr+JxWINhgINYhGT2MsKgMrm2dnZXgRXhaHAg5jEJodUAHxux4LudHJE9RdEdA+i3Juz7bGHe4mhE9FNrgwBCLirMFV9Okh5eflFh8PR5nK5nDabrR2BNJlKO0T35+Li4n4+/J+/JQCxhmu5h3uJoXNHPbmWZAHMshWB8l5/ipqammaAf0zPDDx1ONV3vurdidqwAQL+pEc8sLcAe1CCvQ3YHxIW8Pl85xSWNC1hADDIv0rIE/o4J0k3kww4xSlwIhcq3EFFOm7KN/hUGOQkt0CFa5WpNJlMvxBEz/IVQAxg/ZRZl9wiHA63yDYieM7DnLP5CiAGsC7I5sgtYKJGWe2A8seFqgFJrJjEPY1Cn3pJ8/9W1e5VWsFDTEmFrBcoDhZJEQkXuhICMyKpjhahqN21hRYATKfUOlDmkygrR4o4C0VOLGJKrOITKB4jijzdXygBKixyC5TDQdnk/Pz8qRw6oOWGlsTKGOQW6OH6FBWsyePxdOXLTgxiyebILZCjz+GLgMIKnXNzc49YMlcRdHXcSwxFVgTInQhC9G33UhNoJLuqq6t345p9y3eUy8OTk5PjAHuI9uo4b07FBaOhsu0A4Unc+T1TU1Nj3KsSSE5yJ65jqF2DDd8QqWYmAZrIM2VlZTdnZmb6AbpdV9V6ec9znf5Q7HjYumdRE0JOp3MjitO4SFa+cZz8Umqe3TCbSLvdfkR/kWDdNQl5InuTcysOcpFT35ZrbBxx4p3JAHlZVVW1D/634VRt+FvLBgK/v5LV9WS+10xMTEwtRw7XvqOL+e2Q8V3AYIOIAXQ26/heWVnZCVfcyKHg2CBgTpmPmjYM8l24GyaUHyaIh7XwfR9ErE8qHoDfn2LTNAVC0HX6MFcBIP8Bi+6F6cdW/DICkANRfx99fEYFQ7Nph5i/uQiA214gno7K+guhaiKg9gC62+M8eR7XsBsYJ4ilam60Fb7r7uAj8wFyuwM1oIOWgfmDy6RXEEQzJMPe23DXrVS7rtyD3Df8z/FPgAEAzWU5Ku59ZAUAAAAASUVORK5CYII=">
</a>
<a href="/" class="logo logo-img-2x">
<img width="32" height="32" title="" alt="" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEAAAABACAYAAACqaXHeAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAyRpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuMy1jMDExIDY2LjE0NTY2MSwgMjAxMi8wMi8wNi0xNDo1NjoyNyAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZVJlZiMiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENTNiAoTWFjaW50b3NoKSIgeG1wTU06SW5zdGFuY2VJRD0ieG1wLmlpZDpEQUM1QkUxRUI0MUMxMUUyQUQzREIxQzRENUFFNUM5NiIgeG1wTU06RG9jdW1lbnRJRD0ieG1wLmRpZDpEQUM1QkUxRkI0MUMxMUUyQUQzREIxQzRENUFFNUM5NiI+IDx4bXBNTTpEZXJpdmVkRnJvbSBzdFJlZjppbnN0YW5jZUlEPSJ4bXAuaWlkOkUxNkJENjdGQjNGMDExRTJBRDNEQjFDNEQ1QUU1Qzk2IiBzdFJlZjpkb2N1bWVudElEPSJ4bXAuZGlkOkUxNkJENjgwQjNGMDExRTJBRDNEQjFDNEQ1QUU1Qzk2Ii8+IDwvcmRmOkRlc2NyaXB0aW9uPiA8L3JkZjpSREY+IDwveDp4bXBtZXRhPiA8P3hwYWNrZXQgZW5kPSJyIj8+hfPRaQAAB6lJREFUeNrsW2mM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">
</a>
</div>
</body>
</html>
+6
View File
@@ -0,0 +1,6 @@
/*!
* Vue.js v2.6.7
* (c) 2014-2019 Evan You
* Released under the MIT License.
*/
!function(e,t){"object"==typeof exports&&"undefined"!=typeof module?module.exports=t():"function"==typeof define&&define.amd?define(t):(e=e||self).Vue=t()}(this,function(){"use strict";var e=Object.freeze({});function t(e){return null==e}function n(e){return null!=e}function r(e){return!0===e}function i(e){return"string"==typeof e||"number"==typeof e||"symbol"==typeof e||"boolean"==typeof e}function o(e){return null!==e&&"object"==typeof e}var a=Object.prototype.toString;function s(e){return"[object Object]"===a.call(e)}function c(e){var t=parseFloat(String(e));return t>=0&&Math.floor(t)===t&&isFinite(e)}function u(e){return n(e)&&"function"==typeof e.then&&"function"==typeof e.catch}function l(e){return null==e?"":Array.isArray(e)||s(e)&&e.toString===a?JSON.stringify(e,null,2):String(e)}function f(e){var t=parseFloat(e);return isNaN(t)?e:t}function p(e,t){for(var n=Object.create(null),r=e.split(","),i=0;i<r.length;i++)n[r[i]]=!0;return t?function(e){return n[e.toLowerCase()]}:function(e){return n[e]}}var d=p("slot,component",!0),v=p("key,ref,slot,slot-scope,is");function h(e,t){if(e.length){var n=e.indexOf(t);if(n>-1)return e.splice(n,1)}}var m=Object.prototype.hasOwnProperty;function y(e,t){return m.call(e,t)}function g(e){var t=Object.create(null);return function(n){return t[n]||(t[n]=e(n))}}var _=/-(\w)/g,b=g(function(e){return e.replace(_,function(e,t){return t?t.toUpperCase():""})}),$=g(function(e){return e.charAt(0).toUpperCase()+e.slice(1)}),w=/\B([A-Z])/g,x=g(function(e){return e.replace(w,"-$1").toLowerCase()});var C=Function.prototype.bind?function(e,t){return e.bind(t)}:function(e,t){function n(n){var r=arguments.length;return r?r>1?e.apply(t,arguments):e.call(t,n):e.call(t)}return n._length=e.length,n};function A(e,t){t=t||0;for(var n=e.length-t,r=new Array(n);n--;)r[n]=e[n+t];return r}function k(e,t){for(var n in t)e[n]=t[n];return e}function O(e){for(var t={},n=0;n<e.length;n++)e[n]&&k(t,e[n]);return t}function S(e,t,n){}var T=function(e,t,n){return!1},E=function(e){return e};function N(e,t){if(e===t)return!0;var n=o(e),r=o(t);if(!n||!r)return!n&&!r&&String(e)===String(t);try{var i=Array.isArray(e),a=Array.isArray(t);if(i&&a)return e.length===t.length&&e.every(function(e,n){return N(e,t[n])});if(e instanceof Date&&t instanceof Date)return e.getTime()===t.getTime();if(i||a)return!1;var s=Object.keys(e),c=Object.keys(t);return s.length===c.length&&s.every(function(n){return N(e[n],t[n])})}catch(e){return!1}}function j(e,t){for(var n=0;n<e.length;n++)if(N(e[n],t))return n;return-1}function L(e){var t=!1;return function(){t||(t=!0,e.apply(this,arguments))}}var M="data-server-rendered",I=["component","directive","filter"],D=["beforeCreate","created","beforeMount","mounted","beforeUpdate","updated","beforeDestroy","destroyed","activated","deactivated","errorCaptured","serverPrefetch"],P={optionMergeStrategies:Object.create(null),silent:!1,productionTip:!1,devtools:!1,performance:!1,errorHandler:null,warnHandler:null,ignoredElements:[],keyCodes:Object.create(null),isReservedTag:T,isReservedAttr:T,isUnknownElement:T,getTagNamespace:S,parsePlatformTagName:E,mustUseProp:T,async:!0,_lifecycleHooks:D};function R(e,t,n,r){Object.defineProperty(e,t,{value:n,enumerable:!!r,writable:!0,configurable:!0})}var F=new RegExp("[^a-zA-Z\xb7\xc0-\xd6\xd8-\xf6\xf8-\u037d\u037f-\u1fff\u200c-\u200d\u203f-\u2040\u2070-\u218f\u2c00-\u2fef\u3001-\ud7ff\uf900-\ufdcf\ufdf0-\ufffd.$_\\d]");var H,B="__proto__"in{},U="undefined"!=typeof window,z="undefined"!=typeof WXEnvironment&&!!WXEnvironment.platform,V=z&&WXEnvironment.platform.toLowerCase(),K=U&&window.navigator.userAgent.toLowerCase(),J=K&&/msie|trident/.test(K),q=K&&K.indexOf("msie 9.0")>0,W=K&&K.indexOf("edge/")>0,Z=(K&&K.indexOf("android"),K&&/iphone|ipad|ipod|ios/.test(K)||"ios"===V),G=(K&&/chrome\/\d+/.test(K),K&&/phantomjs/.test(K),K&&K.match(/firefox\/(\d+)/)),X={}.watch,Y=!1;if(U)try{var Q={};Object.defineProperty(Q,"passive",{get:function(){Y=!0}}),window.addEventListener("test-passive",null,Q)}catch(e){}var ee=function(){return void 0===H&&(H=!U&&!z&&"undefined"!=typeof global&&(global.process&&"server"===global.process.env.VUE_ENV)),H},te=U&&window.__VUE_DEVTOOLS_GLOBAL_HOOK__;function ne(e){return"function"==typeof e&&/native code/.test(e.toString())}var re,ie="undefined"!=typeof Symbol&&ne(Symbol)&&"undefined"!=typeof Reflect&&ne(Reflect.ownKeys);re="undefined"!=typeof Set&&ne(Set)?Set:function(){function e(){this.set=Object.create(null)}return e.prototype.has=function(e){return!0===this.set[e]},e.prototype.add=function(e){this.set[e]=!0},e.prototype.clear=function(){this.set=Object.create(null)},e}();var oe=S,ae=0,se=function(){this.id=ae++,this.subs=[]};se.prototype.addSub=function(e){this.subs.push(e)},se.prototype.removeSub=function(e){h(this.subs,e)},se.prototype.depend=function(){se.target&&se.target.addDep(this)},se.prototype.notify=function(){for(var e=this.subs.slice(),t=0,n=e.length;t<n;t++)e[t].update()},se.target=null;var ce=[];function ue(e){ceLine truncated
@@ -6,11 +6,7 @@
name="viewport" name="viewport"
content="width=device-width, initial-scale=1, shrink-to-fit=no" content="width=device-width, initial-scale=1, shrink-to-fit=no"
/> />
<link <link rel="stylesheet" href="css/bootstrap.min.css" />
rel="stylesheet"
href="https://bootswatch.com/4/darkly/bootstrap.min.css"
crossorigin="anonymous"
/>
<title>Victron Multiplus Monitor</title> <title>Victron Multiplus Monitor</title>
<style> <style>
.dot-off { .dot-off {
@@ -89,7 +85,7 @@
</head> </head>
<body> <body>
<script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script> <script src="js/vue.js"></script>
<script src="js/controller.js"></script> <script src="js/controller.js"></script>
<script type="text/javascript"> <script type="text/javascript">
window.onload = function() { window.onload = function() {
+1
View File
@@ -1,6 +1,7 @@
module github.com/hpdvanwyk/invertergui module github.com/hpdvanwyk/invertergui
require ( require (
github.com/elazarl/go-bindata-assetfs v1.0.0
github.com/gorilla/websocket v1.4.0 github.com/gorilla/websocket v1.4.0
github.com/mikepb/go-serial v0.0.0-20180731022703-d5134cecf05a github.com/mikepb/go-serial v0.0.0-20180731022703-d5134cecf05a
github.com/prometheus/client_golang v0.9.2 github.com/prometheus/client_golang v0.9.2
+2
View File
@@ -1,5 +1,7 @@
github.com/beorn7/perks v0.0.0-20180321164747-3a771d992973 h1:xJ4a3vCFaGF/jqvzLMYoU8P317H5OQ+Via4RmuPwCS0= github.com/beorn7/perks v0.0.0-20180321164747-3a771d992973 h1:xJ4a3vCFaGF/jqvzLMYoU8P317H5OQ+Via4RmuPwCS0=
github.com/beorn7/perks v0.0.0-20180321164747-3a771d992973/go.mod h1:Dwedo/Wpr24TaqPxmxbtue+5NUziq4I4S80YR8gNf3Q= github.com/beorn7/perks v0.0.0-20180321164747-3a771d992973/go.mod h1:Dwedo/Wpr24TaqPxmxbtue+5NUziq4I4S80YR8gNf3Q=
github.com/elazarl/go-bindata-assetfs v1.0.0 h1:G/bYguwHIzWq9ZoyUQqrjTmJbbYn3j3CKKpKinvZLFk=
github.com/elazarl/go-bindata-assetfs v1.0.0/go.mod h1:v+YaWX3bdea5J/mo8dSETolEo7R71Vk1u8bnjau5yw4=
github.com/golang/protobuf v1.2.0 h1:P3YflyNX/ehuJFLhxviNdFxQPkGK5cDcApsge1SqnvM= github.com/golang/protobuf v1.2.0 h1:P3YflyNX/ehuJFLhxviNdFxQPkGK5cDcApsge1SqnvM=
github.com/golang/protobuf v1.2.0/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= github.com/golang/protobuf v1.2.0/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U=
github.com/gorilla/websocket v1.4.0 h1:WDFjx/TMzVgy9VdMMQi2K2Emtwi2QcUQsztZ/zLaH/Q= github.com/gorilla/websocket v1.4.0 h1:WDFjx/TMzVgy9VdMMQi2K2Emtwi2QcUQsztZ/zLaH/Q=