From 596e7fc60acbb02e60d09935e175fee66a866b31 Mon Sep 17 00:00:00 2001 From: DennisSchiefer Date: Wed, 18 Apr 2012 07:46:04 +0100 Subject: [PATCH] added cross-browser support for onload event, made IE8 work again --- WebContent/OSRM.GUI.js | 12 +++---- WebContent/OSRM.Map.js | 10 +++--- .../{OSRM.Browser.js => OSRM.browsers.js} | 36 +++++++++++++++---- WebContent/OSRM.debug.js | 5 +-- WebContent/main.html | 5 +-- WebContent/main.js | 5 +-- 6 files changed, 46 insertions(+), 27 deletions(-) rename WebContent/{OSRM.Browser.js => OSRM.browsers.js} (53%) diff --git a/WebContent/OSRM.GUI.js b/WebContent/OSRM.GUI.js index 5debdd760..39b40e3e5 100644 --- a/WebContent/OSRM.GUI.js +++ b/WebContent/OSRM.GUI.js @@ -87,15 +87,15 @@ setLabels: function() { toggleMain: function() { // show main-gui if( OSRM.GUI.visible == false ) { - getElementsByClassName(document,'leaflet-control-zoom')[0].style.visibility="hidden"; - getElementsByClassName(document,'leaflet-control-zoom')[0].style.left=(OSRM.GUI.width+10)+"px";; + OSRM.Browser.getElementsByClassName(document,'leaflet-control-zoom')[0].style.visibility="hidden"; + OSRM.Browser.getElementsByClassName(document,'leaflet-control-zoom')[0].style.left=(OSRM.GUI.width+10)+"px";; document.getElementById('blob-wrapper').style.visibility="hidden"; document.getElementById('main-wrapper').style.left="5px"; // hide main-gui } else { - getElementsByClassName(document,'leaflet-control-zoom')[0].style.visibility="hidden"; - getElementsByClassName(document,'leaflet-control-zoom')[0].style.left="30px"; + OSRM.Browser.getElementsByClassName(document,'leaflet-control-zoom')[0].style.visibility="hidden"; + OSRM.Browser.getElementsByClassName(document,'leaflet-control-zoom')[0].style.left="30px"; document.getElementById('main-wrapper').style.left=-OSRM.GUI.width+"px"; } @@ -110,11 +110,11 @@ onMainTransitionEnd: function() { // after hiding main-gui if( OSRM.GUI.visible == true ) { document.getElementById('blob-wrapper').style.visibility="visible"; - getElementsByClassName(document,'leaflet-control-zoom')[0].style.visibility="visible"; + OSRM.Browser.getElementsByClassName(document,'leaflet-control-zoom')[0].style.visibility="visible"; OSRM.GUI.visible = false; // after showing main-gui } else { - getElementsByClassName(document,'leaflet-control-zoom')[0].style.visibility="visible"; + OSRM.Browser.getElementsByClassName(document,'leaflet-control-zoom')[0].style.visibility="visible"; OSRM.GUI.visible = true; } }, diff --git a/WebContent/OSRM.Map.js b/WebContent/OSRM.Map.js index fa7ff03dc..c9858469b 100644 --- a/WebContent/OSRM.Map.js +++ b/WebContent/OSRM.Map.js @@ -25,13 +25,13 @@ OSRM.GLOBALS.map = null; // map view/model // [extending Leaflet L.Map with setView/fitBounds methods that respect UI visibility] OSRM.MapView = L.Map.extend({ - setViewUI: function(position, zoom) { + setViewUI: function(position, zoom, no_animation) { if( OSRM.GUI.visible == true ) { var point = this.project( position, zoom); point.x-=OSRM.GUI.width/2; position = this.unproject(point,zoom); } - this.setView( position, zoom); + this.setView( position, zoom, no_animation); }, fitBoundsUI: function(bounds) { var southwest = bounds.getSouthWest(); @@ -93,12 +93,12 @@ init: function() { OSRM.G.map.addControl(layersControl); // move zoom markers - getElementsByClassName(document,'leaflet-control-zoom')[0].style.left=(OSRM.GUI.width+10)+"px"; - getElementsByClassName(document,'leaflet-control-zoom')[0].style.top="5px"; + OSRM.Browser.getElementsByClassName(document,'leaflet-control-zoom')[0].style.left=(OSRM.GUI.width+10)+"px"; + OSRM.Browser.getElementsByClassName(document,'leaflet-control-zoom')[0].style.top="5px"; // initial correct map position and zoom (respect UI visibility, use browser position) var position = new L.LatLng( OSRM.DEFAULTS.ONLOAD_LATITUDE, OSRM.DEFAULTS.ONLOAD_LONGITUDE); - OSRM.G.map.setViewUI( position, OSRM.DEFAULTS.ONLOAD_ZOOM_LEVEL); + OSRM.G.map.setViewUI( position, OSRM.DEFAULTS.ONLOAD_ZOOM_LEVEL, true); if (navigator.geolocation && document.URL.indexOf("file://") == -1) // convenience during development, as FF doesn't save rights for local files navigator.geolocation.getCurrentPosition(OSRM.Map.geolocationResponse); diff --git a/WebContent/OSRM.Browser.js b/WebContent/OSRM.browsers.js similarity index 53% rename from WebContent/OSRM.Browser.js rename to WebContent/OSRM.browsers.js index 90459869c..9247a60dd 100644 --- a/WebContent/OSRM.Browser.js +++ b/WebContent/OSRM.browsers.js @@ -15,8 +15,8 @@ Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA or see http://www.gnu.org/licenses/agpl.txt. */ -// OSRM old browser support -// [simple browser detection and routines to support some old browsers] +// OSRM old/cross browser support +// [browser detection and routines for old/cross browser support] // browser detection (runs anonymous function to prevent local variables cluttering global namespace) @@ -30,13 +30,37 @@ or see http://www.gnu.org/licenses/agpl.txt. }()); -// compatibility tools for old browsers -function getElementsByClassName(node, classname) { +// compatibility tools + +//add document.head reference for older browsers +document.head = document.head || document.getElementsByTagName('head')[0]; + +// supply getElementsByClassName method for older browser +OSRM.Browser.getElementsByClassName = function( node, classname ) { var a = []; var re = new RegExp('(^| )'+classname+'( |$)'); var els = node.getElementsByTagName("*"); for(var i=0,j=els.length; i - + + + @@ -59,7 +61,6 @@ or see http://www.gnu.org/licenses/agpl.txt. - diff --git a/WebContent/main.js b/WebContent/main.js index 3159e604b..40abb4fd5 100644 --- a/WebContent/main.js +++ b/WebContent/main.js @@ -203,7 +203,4 @@ OSRM.parseParameters = function(){ // onload event -if(document.addEventListener) // FF, CH - document.addEventListener("DOMContentLoaded", OSRM.init, false); -else if(document.attachEvent) - document.attachEvent("onreadystatechange", function() { if ( document.readyState === "interactive" ) OSRM.init(); }); +OSRM.Browser.onLoadHandler( OSRM.init ); \ No newline at end of file