diff --git a/code/boot.js b/code/boot.js index b0d8be7c..1277c6d8 100644 --- a/code/boot.js +++ b/code/boot.js @@ -5,6 +5,7 @@ // Used to disable on multitouch devices window.showZoom = true; +window.showLayerChooser = true; window.setupLargeImagePreview = function() { $('#portaldetails').on('click', '.imgpreview', function() { @@ -342,6 +343,81 @@ window.setupQRLoadLib = function() { @@INCLUDERAW:external/jquery.qrcode.min.js@@ } +window.setupLayerChooserApi = function() { + // hide layer chooser on mobile devices running desktop mode + if (!window.showLayerChooser) { + $('.leaflet-control-layers').hide(); + } + + //hook some additional code into the LayerControl so it's easy for the mobile app to interface with it + //WARNING: does depend on internals of the L.Control.Layers code + window.layerChooser.getLayers = function() { + var baseLayers = new Array(); + var overlayLayers = new Array(); + + for (i in this._layers) { + var obj = this._layers[i]; + var layerActive = window.map.hasLayer(obj.layer); + var info = { + layerId: L.stamp(obj.layer), + name: obj.name, + active: layerActive + } + if (obj.overlay) { + overlayLayers.push(info); + } else { + baseLayers.push(info); + } + } + + var overlayLayersJSON = JSON.stringify(overlayLayers); + var baseLayersJSON = JSON.stringify(baseLayers); + + if (typeof android !== 'undefined' && android && android.setLayers) { + android.setLayers(baseLayersJSON, overlayLayersJSON); + } + + return { + baseLayers: baseLayers, + overlayLayers: overlayLayers + } + } + + window.layerChooser.showLayer = function(id,show) { + if (show === undefined) show = true; + obj = this._layers[id]; + if (!obj) return false; + + if(show) { + if (!this._map.hasLayer(obj.layer)) { + //the layer to show is not currently active + this._map.addLayer(obj.layer); + + //if it's a base layer, remove any others + if (!obj.overlay) { + for(i in this._layers) { + if (i != id) { + var other = this._layers[i]; + if (!other.overlay && this._map.hasLayer(other.layer)) this._map.removeLayer(other.layer); + } + } + } + } + } else { + if (this._map.hasLayer(obj.layer)) { + this._map.removeLayer(obj.layer); + } + } + + //below logic based on code in L.Control.Layers _onInputClick + if(!obj.overlay) { + this._map.setZoom(this._map.getZoom()); + this._map.fire('baselayerchange', {layer: obj.layer}); + } + + return true; + } +} // BOOTING /////////////////////////////////////////////////////////// @@ -407,6 +483,7 @@ function boot() { }); window.setMapBaseLayer(); + window.setupLayerChooserApi(); window.runOnSmartphonesAfterBoot(); diff --git a/code/smartphone.js b/code/smartphone.js index 29bd31a4..59acb7af 100644 --- a/code/smartphone.js +++ b/code/smartphone.js @@ -105,73 +105,4 @@ window.runOnSmartphonesAfterBoot = function() { window.MAX_DRAWN_PORTALS = 500; window.MAX_DRAWN_LINKS = 200; window.MAX_DRAWN_FIELDS = 100; - - //hook some additional code into the LayerControl so it's easy for the mobile app to interface with it - //WARNING: does depend on internals of the L.Control.Layers code - window.layerChooser.getLayers = function() { - var baseLayers = new Array(); - var overlayLayers = new Array(); - - for (i in this._layers) { - var obj = this._layers[i]; - var layerActive = window.map.hasLayer(obj.layer); - var info = { - layerId: L.stamp(obj.layer), - name: obj.name, - active: layerActive - } - if (obj.overlay) { - overlayLayers.push(info); - } else { - baseLayers.push(info); - } - } - - var overlayLayersJSON = JSON.stringify(overlayLayers); - var baseLayersJSON = JSON.stringify(baseLayers); - - if (typeof android !== 'undefined' && android && android.setLayers) { - android.setLayers(baseLayersJSON, overlayLayersJSON); - } - - return { - baseLayers: baseLayers, - overlayLayers: overlayLayers - } - } - window.layerChooser.showLayer = function(id,show) { - if (show === undefined) show = true; - obj = this._layers[id]; - if (!obj) return false; - - if(show) { - if (!this._map.hasLayer(obj.layer)) { - //the layer to show is not currently active - this._map.addLayer(obj.layer); - - //if it's a base layer, remove any others - if (!obj.overlay) { - for(i in this._layers) { - if (i != id) { - var other = this._layers[i]; - if (!other.overlay && this._map.hasLayer(other.layer)) this._map.removeLayer(other.layer); - } - } - } - } - } else { - if (this._map.hasLayer(obj.layer)) { - this._map.removeLayer(obj.layer); - } - } - - //below logic based on code in L.Control.Layers _onInputClick - if(!obj.overlay) { - this._map.setZoom(this._map.getZoom()); - this._map.fire('baselayerchange', {layer: obj.layer}); - } - - return true; - } - } diff --git a/code/utils_misc.js b/code/utils_misc.js index 07ba33e8..66244047 100644 --- a/code/utils_misc.js +++ b/code/utils_misc.js @@ -470,8 +470,6 @@ window.addLayerGroup = function(name, layerGroup, defaultDisplay) { layerChooser.addOverlay(layerGroup, name); } - - window.clampLat = function(lat) { if (lat > 90.0) lat = 90.0; diff --git a/mobile/AndroidManifest.xml b/mobile/AndroidManifest.xml index 24bd3f1b..52cf2d67 100644 --- a/mobile/AndroidManifest.xml +++ b/mobile/AndroidManifest.xml @@ -1,8 +1,8 @@ + android:versionCode="25" + android:versionName="0.4.4">