js/css bundle

This commit is contained in:
NatureFreshMilk 2019-04-03 10:17:55 +02:00
parent 0a986952a8
commit 798cdb4d0a
7 changed files with 161 additions and 49 deletions

View File

@ -0,0 +1,38 @@
package bundle
import (
"net/http"
)
type CSSHandler struct {
Webdev bool
Cache []byte
}
func NewCSSHandler(Webdev bool) *CSSHandler {
h := &CSSHandler{Webdev: Webdev}
if !Webdev {
//populate cache
manifest := getManifest(Webdev)
h.Cache = createBundle(Webdev, manifest.Styles)
}
return h
}
func (h *CSSHandler) ServeHTTP(resp http.ResponseWriter, req *http.Request) {
resp.Header().Add("content-type", "text/css")
if h.Cache == nil {
//dev
manifest := getManifest(h.Webdev)
resp.Write(createBundle(h.Webdev, manifest.Styles))
} else {
//prod
resp.Header().Add("Cache-Control", "public, max-age=3600")
resp.Write(h.Cache)
}
}

View File

@ -0,0 +1,38 @@
package bundle
import (
"net/http"
)
type JsHandler struct {
Webdev bool
Cache []byte
}
func NewJsHandler(Webdev bool) *JsHandler {
h := &JsHandler{Webdev: Webdev}
if !Webdev {
//populate cache
manifest := getManifest(Webdev)
h.Cache = createBundle(Webdev, manifest.Scripts)
}
return h
}
func (h *JsHandler) ServeHTTP(resp http.ResponseWriter, req *http.Request) {
resp.Header().Add("content-type", "text/javascript")
if h.Cache == nil {
//dev
manifest := getManifest(h.Webdev)
resp.Write(createBundle(h.Webdev, manifest.Scripts))
} else {
//prod
resp.Header().Add("Cache-Control", "public, max-age=3600")
resp.Write(h.Cache)
}
}

View File

@ -0,0 +1,6 @@
package bundle
type Manifest struct {
Scripts []string `json:"scripts"`
Styles []string `json:"styles"`
}

33
server/bundle/bundle.go Normal file
View File

@ -0,0 +1,33 @@
package bundle
import (
"encoding/json"
"mapserver/vfs"
)
func getManifest(useLocal bool) *Manifest {
manifestBytes := vfs.FSMustByte(useLocal, "/manifest.js")
manifest := &Manifest{}
err := json.Unmarshal(manifestBytes, manifest)
if err != nil {
panic(err)
}
return manifest
}
func createBundle(useLocal bool, files []string) []byte {
script := make([]byte, 0)
for _, name := range files {
script = append(script, []byte("\n/*File: "+name+"*/\n")...)
content, err := vfs.FSByte(useLocal, name)
if err != nil {
panic("vfs-file not found: " + name)
}
script = append(script, content...)
}
return script
}

View File

@ -4,58 +4,11 @@
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1"/>
<meta name="theme-color" content="#000">
<link rel="stylesheet" href="css/leaflet.css"/>
<link rel="stylesheet" href="css/custom.css"/>
<link rel="stylesheet" href="css/bundle.css"/>
<title>Minetest Mapserver</title>
</head>
<body>
<div id="image-map"></div>
<!-- libs -->
<script src="js/lib/leaflet.js"></script>
<script src="js/lib/mithril.min.js"></script>
<!-- utils -->
<script src="js/util/debounce.js"></script>
<!-- api -->
<script src="js/api.js"></script>
<!-- components -->
<script src="js/LayerManager.js"></script>
<script src="js/SimpleCRS.js"></script>
<script src="js/WebSocketChannel.js"></script>
<script src="js/RealtimeTileLayer.js"></script>
<script src="js/CoordinatesDisplay.js"></script>
<script src="js/WorldInfoDisplay.js"></script>
<!-- overlays -->
<script src="js/overlays/AbstractIconOverlay.js"></script>
<script src="js/overlays/AbstractGeoJsonOverlay.js"></script>
<script src="js/overlays/TravelnetOverlay.js"></script>
<script src="js/overlays/PoiOverlay.js"></script>
<script src="js/overlays/LabelOverlay.js"></script>
<script src="js/overlays/PlayerOverlay.js"></script>
<script src="js/overlays/TrainOverlay.js"></script>
<script src="js/overlays/TrainlineOverlay.js"></script>
<script src="js/overlays/ProtectorOverlay.js"></script>
<script src="js/overlays/XPProtectorOverlay.js"></script>
<script src="js/overlays/PrivProtectorOverlay.js"></script>
<script src="js/overlays/BonesOverlay.js"></script>
<script src="js/overlays/LcdOverlay.js"></script>
<script src="js/overlays/DigitermOverlay.js"></script>
<script src="js/overlays/LuacontrollerOverlay.js"></script>
<script src="js/overlays/TechnicAnchorOverlay.js"></script>
<script src="js/overlays/TechnicQuarryOverlay.js"></script>
<script src="js/overlays/TechnicSwitchOverlay.js"></script>
<script src="js/overlays/MissionOverlay.js"></script>
<!-- helpers -->
<script src="js/Overlaysetup.js"></script>
<script src="js/Hashroute.js"></script>
<!-- bootstrap -->
<script src="js/main.js"></script>
<script src="js/bundle.js"></script>
</body>
</html>

40
server/static/manifest.js Normal file
View File

@ -0,0 +1,40 @@
{
"scripts": [
"/js/lib/leaflet.js",
"/js/lib/mithril.min.js",
"/js/util/debounce.js",
"/js/api.js",
"/js/LayerManager.js",
"/js/SimpleCRS.js",
"/js/WebSocketChannel.js",
"/js/RealtimeTileLayer.js",
"/js/CoordinatesDisplay.js",
"/js/WorldInfoDisplay.js",
"/js/overlays/AbstractIconOverlay.js",
"/js/overlays/AbstractGeoJsonOverlay.js",
"/js/overlays/TravelnetOverlay.js",
"/js/overlays/PoiOverlay.js",
"/js/overlays/LabelOverlay.js",
"/js/overlays/PlayerOverlay.js",
"/js/overlays/TrainOverlay.js",
"/js/overlays/TrainlineOverlay.js",
"/js/overlays/ProtectorOverlay.js",
"/js/overlays/XPProtectorOverlay.js",
"/js/overlays/PrivProtectorOverlay.js",
"/js/overlays/BonesOverlay.js",
"/js/overlays/LcdOverlay.js",
"/js/overlays/DigitermOverlay.js",
"/js/overlays/LuacontrollerOverlay.js",
"/js/overlays/TechnicAnchorOverlay.js",
"/js/overlays/TechnicQuarryOverlay.js",
"/js/overlays/TechnicSwitchOverlay.js",
"/js/overlays/MissionOverlay.js",
"/js/Overlaysetup.js",
"/js/Hashroute.js",
"/js/main.js"
],
"styles": [
"/css/leaflet.css",
"/css/custom.css"
]
}

View File

@ -2,6 +2,7 @@ package web
import (
"mapserver/app"
"mapserver/bundle"
"mapserver/vfs"
"net/http"
"strconv"
@ -21,6 +22,9 @@ func Serve(ctx *app.App) {
mux.Handle("/", http.FileServer(vfs.FS(ctx.Config.Webdev)))
mux.Handle("/js/bundle.js", bundle.NewJsHandler(ctx.Config.Webdev))
mux.Handle("/css/bundle.css", bundle.NewCSSHandler(ctx.Config.Webdev))
tiles := &Tiles{ctx: ctx}
tiles.Init()
mux.Handle("/api/tile/", tiles)