diff --git a/code/boot.js b/code/boot.js index 7d5a45ec..fd4d56ae 100644 --- a/code/boot.js +++ b/code/boot.js @@ -200,14 +200,6 @@ window.setupMap = function() { map.addControl(window.layerChooser); - // set the map AFTER adding the layer chooser, or Chrome reorders the - // layers. This likely leads to broken layer selection because the - // views/cookie order does not match the layer chooser order. - try { - convertCookieToLocalStorage('ingress.intelmap.type'); - map.addLayer(views[localStorage['ingress.intelmap.type']]); - } catch(e) { map.addLayer(views[0]); } - map.attributionControl.setPrefix(''); // listen for changes and store them in cookies map.on('moveend', window.storeMapPosition); @@ -228,10 +220,6 @@ window.setupMap = function() { console.log('Remove all resonators'); }); - map.on('baselayerchange', function () { - var selInd = $('[name=leaflet-base-layers]:checked').parent().index(); - localStorage['ingress.intelmap.type']=selInd; - }); // map update status handling & update map hooks // ensures order of calls @@ -248,6 +236,43 @@ window.setupMap = function() { }; +//adds a base layer to the map. done separately from the above, so that plugins that add base layers can be the default +window.setMapBaseLayer = function() { + //create a map name -> layer mapping - depends on internals of L.Control.Layers + var nameToLayer = {}; + var firstLayer = null; + + for (i in window.layerChooser._layers) { + var obj = window.layerChooser._layers[i]; + if (!obj.overlay) { + nameToLayer[obj.name] = obj.layer; + if (!firstLayer) firstLayer = obj.layer; + } + } + + var baseLayer = nameToLayer[localStorage['iitc-base-map']] || firstLayer; + map.addLayer(baseLayer); + + //after choosing a base layer, ensure the zoom is valid for this layer + //(needs to be done here - as we don't know the base layer zoom limit before this) + map.setZoom(map.getZoom()); + + + //event to track layer changes and store the name + map.on('baselayerchange', function() { + for(i in window.layerChooser._layers) { + var obj = window.layerChooser._layers[i]; + if (!obj.overlay && map.hasLayer(obj.layer)) { + localStorage['iitc-base-map'] = obj.name; + break; + } + } + + }); + + +} + // renders player details into the website. Since the player info is // included as inline script in the original site, the data is static // and cannot be updated. @@ -412,6 +437,8 @@ function boot() { } }); + window.setMapBaseLayer(); + window.runOnSmartphonesAfterBoot(); // workaround for #129. Not sure why this is required. diff --git a/code/location.js b/code/location.js index efa85586..87ac0a27 100644 --- a/code/location.js +++ b/code/location.js @@ -25,7 +25,7 @@ window.getPosition = function() { var lat = parseInt(getURLParam('latE6'))/1E6 || 0.0; var lng = parseInt(getURLParam('lngE6'))/1E6 || 0.0; var z = parseInt(getURLParam('z')) || 17; - return {center: new L.LatLng(lat, lng), zoom: z > 18 ? 18 : z}; + return {center: new L.LatLng(lat, lng), zoom: z}; } if(getURLParam('ll')) { @@ -33,7 +33,7 @@ window.getPosition = function() { var lat = parseFloat(getURLParam('ll').split(",")[0]) || 0.0; var lng = parseFloat(getURLParam('ll').split(",")[1]) || 0.0; var z = parseInt(getURLParam('z')) || 17; - return {center: new L.LatLng(lat, lng), zoom: z > 18 ? 18 : z}; + return {center: new L.LatLng(lat, lng), zoom: z}; } if(readCookie('ingress.intelmap.lat') && readCookie('ingress.intelmap.lng')) { @@ -45,10 +45,10 @@ window.getPosition = function() { if(lat < -90 || lat > 90) lat = 0.0; if(lng < -180 || lng > 180) lng = 0.0; - return {center: new L.LatLng(lat, lng), zoom: z > 18 ? 18 : z}; + return {center: new L.LatLng(lat, lng), zoom: z}; } - setTimeout("window.map.locate({setView : true, maxZoom: 13});", 50); + setTimeout("window.map.locate({setView : true});", 50); return {center: new L.LatLng(0.0, 0.0), zoom: 1}; }