js/css bundle
This commit is contained in:
parent
0a986952a8
commit
798cdb4d0a
38
server/bundle/CSSHandler.go
Normal file
38
server/bundle/CSSHandler.go
Normal 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)
|
||||
|
||||
}
|
||||
}
|
38
server/bundle/JsHandler.go
Normal file
38
server/bundle/JsHandler.go
Normal 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)
|
||||
|
||||
}
|
||||
}
|
6
server/bundle/Manifest.go
Normal file
6
server/bundle/Manifest.go
Normal 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
33
server/bundle/bundle.go
Normal 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
|
||||
}
|
@ -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
40
server/static/manifest.js
Normal 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"
|
||||
]
|
||||
}
|
@ -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)
|
||||
|
Loading…
x
Reference in New Issue
Block a user