From 74211172788f69d28ed64a2e13a6498cf0dae19e Mon Sep 17 00:00:00 2001 From: shiin Date: Tue, 24 Apr 2012 00:56:41 +0200 Subject: [PATCH] extended mapview to give information about the current visible tile layer, continued work on printing --- WebContent/base/OSRM.Map.js | 21 +--------- .../base/leaflet/L.Control.QueryableLayers.js | 34 +++++++++++++++ WebContent/base/osrm/OSRM.MapView.js | 22 +++++++++- WebContent/main.html | 1 + WebContent/printing/OSRM.Printing.js | 42 +++++++------------ WebContent/printing/printing.css | 8 ++++ 6 files changed, 81 insertions(+), 47 deletions(-) create mode 100644 WebContent/base/leaflet/L.Control.QueryableLayers.js diff --git a/WebContent/base/OSRM.Map.js b/WebContent/base/OSRM.Map.js index b84309612..e26edb31c 100644 --- a/WebContent/base/OSRM.Map.js +++ b/WebContent/base/OSRM.Map.js @@ -22,22 +22,6 @@ or see http://www.gnu.org/licenses/agpl.txt. OSRM.GLOBALS.map = null; -L.MyLayers = L.Control.Layers.extend({ -getActive: function () { - var i, input, obj, - inputs = this._form.getElementsByTagName('input'), - inputsLen = inputs.length; - - for (i = 0; i < inputsLen; i++) { - input = inputs[i]; - obj = this._layers[input.layerId]; - if (input.checked && !obj.overlay) { - return obj.name; - } - } -} -}); - // map controller // [map initialization, event handling] OSRM.Map = { @@ -66,9 +50,8 @@ init: function() { }); // add layer control - var layersControl = new L.MyLayers(base_maps, {}); - OSRM.G.map.layerControl = layersControl; - OSRM.G.map.addControl(layersControl); + var layerControl = new L.Control.QueryableLayers(base_maps, {}); + OSRM.G.map.addLayerControl(layerControl); // move zoom markers OSRM.Browser.getElementsByClassName(document,'leaflet-control-zoom')[0].style.left=(OSRM.GUI.width+10)+"px"; diff --git a/WebContent/base/leaflet/L.Control.QueryableLayers.js b/WebContent/base/leaflet/L.Control.QueryableLayers.js new file mode 100644 index 000000000..973884591 --- /dev/null +++ b/WebContent/base/leaflet/L.Control.QueryableLayers.js @@ -0,0 +1,34 @@ +/* +This program is free software; you can redistribute it and/or modify +it under the terms of the GNU AFFERO General Public License as published by +the Free Software Foundation; either version 3 of the License, or +any later version. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. + +You should have received a copy of the GNU Affero General Public License +along with this program; if not, write to the Free Software +Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +or see http://www.gnu.org/licenses/agpl.txt. +*/ + +// queryable Layers control +// [simply Control.Layers extended by query functions] +L.Control.QueryableLayers = L.Control.Layers.extend({ +getActiveLayerName: function () { + var i, input, obj, + inputs = this._form.getElementsByTagName('input'), + inputsLen = inputs.length; + + for (i = 0; i < inputsLen; i++) { + input = inputs[i]; + obj = this._layers[input.layerId]; + if (input.checked && !obj.overlay) { + return obj.name; + } + } +} +}); diff --git a/WebContent/base/osrm/OSRM.MapView.js b/WebContent/base/osrm/OSRM.MapView.js index a48a67075..89a114a97 100644 --- a/WebContent/base/osrm/OSRM.MapView.js +++ b/WebContent/base/osrm/OSRM.MapView.js @@ -16,7 +16,7 @@ or see http://www.gnu.org/licenses/agpl.txt. */ // map view/model -// [extending Leaflet L.Map with setView/fitBounds methods that respect UI visibility] +// [extending Leaflet L.Map with setView/fitBounds methods that respect UI visibility, better layerControl] OSRM.MapView = L.Map.extend({ setViewUI: function(position, zoom, no_animation) { if( OSRM.GUI.visible == true ) { @@ -50,5 +50,25 @@ OSRM.MapView = L.Map.extend({ var centerPoint = this._getTopLeftPoint().add(viewHalf.divideBy(2)); return this.unproject(centerPoint, this._zoom, unbounded); + }, + addLayerControl: function( layerControl ) { + if( this.layerControl ) + return; + + this.layerControl = layerControl; + this.addControl(this.layerControl); + }, + getActiveLayerId: function() { + var tile_server_id = 0; + + var tile_servers = OSRM.DEFAULTS.TILE_SERVERS; + var tile_server_name = this.layerControl.getActiveLayerName(); + for(var i=0, size=tile_servers.length; i + diff --git a/WebContent/printing/OSRM.Printing.js b/WebContent/printing/OSRM.Printing.js index e746bdc12..1551a637e 100644 --- a/WebContent/printing/OSRM.Printing.js +++ b/WebContent/printing/OSRM.Printing.js @@ -41,7 +41,9 @@ init: function() { // create UI in printwindow show: function(response) { // create header - header = + var header = + '' + + '
' + '
' + @@ -67,14 +69,12 @@ show: function(response) { '
' + '
' + - '
'; + + '
' + + ''; // create route description - var route_desc = ''; - route_desc += ''; - route_desc += ''; - route_desc += ''; - + var route_desc = ''; for(var i=0; i < response.route_instructions.length; i++){ //odd or even ? var rowstyle='results-odd'; @@ -106,32 +106,21 @@ show: function(response) { route_desc += ""; } route_desc += ''; - route_desc += '
'+header+'
'; // put everything in DOM - OSRM.G.printwindow.document.getElementById('description').innerHTML = route_desc; - OSRM.G.printwindow.document.getElementById('overview-map-description').innerHTML = - '' + - ''+ - '
'+header+'
'; + OSRM.G.printwindow.document.getElementById('description').innerHTML = '' + header + route_desc + '
'; + OSRM.G.printwindow.document.getElementById('overview-map-description').innerHTML = '' + header + '
'; - // init map - var tile_servers = OSRM.DEFAULTS.TILE_SERVERS; - var tile_server_name = OSRM.G.map.layerControl.getActive(); - var tile_server_id = 0; - for(var size=tile_servers.length;tile_server_id < size; tile_server_id++) { - if( tile_servers[tile_server_id].display_name == tile_server_name ) - break; - } - - OSRM.Printing.map = OSRM.G.printwindow.initialize( OSRM.DEFAULTS.TILE_SERVERS[tile_server_id] ); - var map = OSRM.Printing.map; + // draw map + var tile_server_id = OSRM.MapView.getActiveLayerId(); + var map = OSRM.G.printwindow.initialize( OSRM.DEFAULTS.TILE_SERVERS[tile_server_id] ); + // draw markers var markers = OSRM.G.markers.route; map.addLayer( new L.MouseMarker( markers[0].getPosition(), {draggable:false,clickable:false,icon:OSRM.G.icons['marker-source']} ) ); for(var i=1, size=markers.length-1; i