working compat routes
This commit is contained in:
parent
dc7653ffbc
commit
0368c398a9
15
static/js/compat.js
Normal file
15
static/js/compat.js
Normal file
@ -0,0 +1,15 @@
|
|||||||
|
|
||||||
|
export function hashCompat(){
|
||||||
|
|
||||||
|
if (window.location.hash) {
|
||||||
|
let match = window.location.hash.match(/^#\/(\d*)\/(\d*)\/(\d*)$/m);
|
||||||
|
if (match) {
|
||||||
|
window.location.hash = `#!/map/0/${match[1]}/${match[2]}/${match[3]}`
|
||||||
|
}
|
||||||
|
|
||||||
|
match = window.location.hash.match(/^#\/(\d*)\/(\d*)\/(\d*)\/(\d*)$/m);
|
||||||
|
if (match) {
|
||||||
|
window.location.hash = `#!/map/${match[1]}/${match[2]}/${match[3]}/${match[4]}`
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
@ -1,16 +1,15 @@
|
|||||||
|
|
||||||
import { getConfig } from './api.js';
|
import { getConfig } from './api.js';
|
||||||
//import { setup } from './map.js';
|
|
||||||
import routes from './routes.js';
|
import routes from './routes.js';
|
||||||
import wsChannel from './WebSocketChannel.js';
|
import wsChannel from './WebSocketChannel.js';
|
||||||
import config from './config.js';
|
import config from './config.js';
|
||||||
|
import { hashCompat } from './compat.js';
|
||||||
|
|
||||||
//TODO: migrate #/layer/zoom/lat/lon to #!/map/...
|
// hash route compat
|
||||||
//TODO: migrate #/zoom/lat/lon to #!/map/...
|
hashCompat();
|
||||||
|
|
||||||
getConfig().then(cfg => {
|
getConfig().then(cfg => {
|
||||||
config.set(cfg);
|
config.set(cfg);
|
||||||
wsChannel.connect();
|
wsChannel.connect();
|
||||||
m.route(document.getElementById("app"), "/map/0/13/0/0", routes);
|
m.route(document.getElementById("app"), "/map/0/12/0/0", routes);
|
||||||
//setup(cfg);
|
|
||||||
});
|
});
|
||||||
|
@ -1,59 +0,0 @@
|
|||||||
|
|
||||||
export default {
|
|
||||||
|
|
||||||
setup: function(map, layerMgr){
|
|
||||||
function updateHash(){
|
|
||||||
var center = map.getCenter();
|
|
||||||
window.location.hash =
|
|
||||||
layerMgr.getCurrentLayer().id + "/" +
|
|
||||||
center.lng + "/" + center.lat + "/" + map.getZoom();
|
|
||||||
}
|
|
||||||
|
|
||||||
map.on('zoomend', updateHash);
|
|
||||||
map.on('moveend', updateHash);
|
|
||||||
map.on('baselayerchange', updateHash);
|
|
||||||
updateHash();
|
|
||||||
},
|
|
||||||
|
|
||||||
getLayerId: function(){
|
|
||||||
var hashParts = window.location.hash.substring(1).split("/");
|
|
||||||
if (hashParts.length == 4){
|
|
||||||
//new format
|
|
||||||
return +hashParts[0];
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
return 0;
|
|
||||||
},
|
|
||||||
|
|
||||||
getZoom: function(){
|
|
||||||
var hashParts = window.location.hash.substring(1).split("/");
|
|
||||||
if (hashParts.length == 3){
|
|
||||||
//old format
|
|
||||||
return +hashParts[2];
|
|
||||||
|
|
||||||
} else if (hashParts.length == 4){
|
|
||||||
//new format
|
|
||||||
return +hashParts[3];
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
return 11;
|
|
||||||
},
|
|
||||||
|
|
||||||
getCenter: function(){
|
|
||||||
var hashParts = window.location.hash.substring(1).split("/");
|
|
||||||
if (hashParts.length == 3){
|
|
||||||
//old format
|
|
||||||
return [+hashParts[1], +hashParts[0]];
|
|
||||||
|
|
||||||
} else if (hashParts.length == 4){
|
|
||||||
//new format
|
|
||||||
return [+hashParts[2], +hashParts[1]];
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
return [0, 0];
|
|
||||||
}
|
|
||||||
|
|
||||||
};
|
|
@ -1,4 +1,4 @@
|
|||||||
import wsChannel from './WebSocketChannel.js';
|
import wsChannel from '../WebSocketChannel.js';
|
||||||
import SimpleCRS from './SimpleCRS.js';
|
import SimpleCRS from './SimpleCRS.js';
|
||||||
import CoordinatesDisplay from './CoordinatesDisplay.js';
|
import CoordinatesDisplay from './CoordinatesDisplay.js';
|
||||||
import WorldInfoDisplay from './WorldInfoDisplay.js';
|
import WorldInfoDisplay from './WorldInfoDisplay.js';
|
||||||
@ -13,7 +13,6 @@ export default {
|
|||||||
},
|
},
|
||||||
|
|
||||||
oncreate(vnode){
|
oncreate(vnode){
|
||||||
console.log("oncreate", vnode);
|
|
||||||
const cfg = config.get();
|
const cfg = config.get();
|
||||||
|
|
||||||
var map = L.map(vnode.dom, {
|
var map = L.map(vnode.dom, {
|
||||||
@ -45,22 +44,36 @@ export default {
|
|||||||
//layer control
|
//layer control
|
||||||
L.control.layers(layerManager.layerObjects, overlays, { position: "topright" }).addTo(map);
|
L.control.layers(layerManager.layerObjects, overlays, { position: "topright" }).addTo(map);
|
||||||
|
|
||||||
|
function updateHash(){
|
||||||
|
const center = map.getCenter();
|
||||||
|
const layerId = layerManager.getCurrentLayer().id;
|
||||||
|
|
||||||
|
m.route.set(`/map/${layerId}/${map.getZoom()}/${center.lng}/${center.lat}`);
|
||||||
|
}
|
||||||
|
|
||||||
|
map.on('zoomend', updateHash);
|
||||||
|
map.on('moveend', updateHash);
|
||||||
|
map.on('baselayerchange', updateHash);
|
||||||
|
|
||||||
//TODO: overlay persistence (state, localstorage)
|
//TODO: overlay persistence (state, localstorage)
|
||||||
//TODO: update hash
|
|
||||||
},
|
},
|
||||||
|
|
||||||
onbeforeupdate(newVnode, oldVnode) {
|
onbeforeupdate(newVnode, oldVnode) {
|
||||||
return false;
|
const center = newVnode.state.map.getCenter();
|
||||||
|
const newAattrs = newVnode.attrs;
|
||||||
|
|
||||||
|
return newAattrs.layerId != layerManager.getCurrentLayer().id ||
|
||||||
|
newAattrs.zoom != newVnode.state.map.getZoom() ||
|
||||||
|
Math.abs(newAattrs.lat - center.lat) > 0.1 ||
|
||||||
|
Math.abs(newAattrs.lat - center.lat) > 0.1;
|
||||||
},
|
},
|
||||||
|
|
||||||
onupdate(vnode){
|
onupdate(vnode){
|
||||||
console.log("onupdate", vnode);
|
layerManager.switchLayer(+vnode.attrs.layerId);
|
||||||
|
vnode.state.map.setView([+vnode.attrs.lat, +vnode.attrs.lon], +vnode.attrs.zoom);
|
||||||
//TODO: compare and update center,zoom,layer
|
|
||||||
},
|
},
|
||||||
|
|
||||||
onremove(vnode){
|
onremove(vnode){
|
||||||
console.log("onremove", vnode);
|
|
||||||
vnode.state.map.remove();
|
vnode.state.map.remove();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
import debounce from '../util/debounce.js';
|
import debounce from '../../util/debounce.js';
|
||||||
import { getMapObjects } from '../api.js';
|
import { getMapObjects } from '../../api.js';
|
||||||
|
|
||||||
export default L.LayerGroup.extend({
|
export default L.LayerGroup.extend({
|
||||||
initialize: function(wsChannel, layerMgr, type) {
|
initialize: function(wsChannel, layerMgr, type) {
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
import debounce from '../util/debounce.js';
|
import debounce from '../../util/debounce.js';
|
||||||
import { getMapObjects } from '../api.js';
|
import { getMapObjects } from '../../api.js';
|
||||||
|
|
||||||
export default L.LayerGroup.extend({
|
export default L.LayerGroup.extend({
|
||||||
initialize: function(wsChannel, layerMgr, type, icon) {
|
initialize: function(wsChannel, layerMgr, type, icon) {
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
import SearchStore from './SearchStore.js';
|
import SearchStore from './SearchStore.js';
|
||||||
import layerMgr from '../LayerManager.js';
|
import layerMgr from '../map/LayerManager.js';
|
||||||
|
|
||||||
export default {
|
export default {
|
||||||
view: function(vnode){
|
view: function(vnode){
|
||||||
|
Loading…
Reference in New Issue
Block a user