switch to the DOM3 standard wheel event
[lantea.git] / js / map.js
index 9ffc81c3f3c99bd90c701384d179a7042b9d0587..7cdf79f454421ae8e5552fffa2063133127f9058 100644 (file)
--- a/js/map.js
+++ b/js/map.js
@@ -146,9 +146,7 @@ function initMap() {
   gTrackCanvas.addEventListener("touchcancel", mapEvHandler, false);
   gTrackCanvas.addEventListener("touchleave", mapEvHandler, false);
 
-  // XXX deprecated? see https://groups.google.com/forum/?fromgroups#!topic/mozilla.dev.planning/kuhrORubaRY[1-25]
-  gTrackCanvas.addEventListener("DOMMouseScroll", mapEvHandler, false);
-  gTrackCanvas.addEventListener("mousewheel", mapEvHandler, false);
+  gTrackCanvas.addEventListener("wheel", mapEvHandler, false);
 
   document.getElementById("copyright").innerHTML =
       gMapStyles[gActiveMap].copyright;
@@ -483,17 +481,13 @@ var mapEvHandler = {
       case "touchleave":
         //gDragging = false;
         break;
-      case "DOMMouseScroll":
-      case "mousewheel":
-        var delta = 0;
-        if (aEvent.wheelDelta) {
-          delta = aEvent.wheelDelta / 120;
-          if (window.opera)
-            delta = -delta;
-        }
-        else if (aEvent.detail) {
-          delta = -aEvent.detail / 3;
-        }
+      case "wheel":
+        // If we'd want pixels, we'd need to calc up using aEvent.deltaMode.
+        // See https://developer.mozilla.org/en-US/docs/Mozilla_event_reference/wheel
+
+        // Only accept (non-null) deltaY values
+        if (!aEvent.deltaY)
+          break;
 
         // Debug output: "coordinates" of the point the mouse was over.
         /*
@@ -506,7 +500,7 @@ var mapEvHandler = {
                     pt2Coord.x + "/" + pt2Coord.y);
         */
 
-        var newZoomLevel = gPos.z + (delta > 0 ? 1 : -1);
+        var newZoomLevel = gPos.z + (aEvent.deltaY < 0 ? 1 : -1);
         if ((newZoomLevel >= 0) && (newZoomLevel <= gMaxZoom)) {
           // Calculate new center of the map - same point stays under the mouse.
           // This means that the pixel distance between the old center and point
@@ -519,9 +513,9 @@ var mapEvHandler = {
           gPos.x -= (x - gMapCanvas.width / 2) * (newZoomFactor - gZoomFactor);
           gPos.y -= (y - gMapCanvas.height / 2) * (newZoomFactor - gZoomFactor);
 
-          if (delta > 0)
+          if (aEvent.deltaY < 0)
             zoomIn();
-          else if (delta < 0)
+          else
             zoomOut();
         }
         break;
@@ -649,7 +643,7 @@ function clearTrack() {
 var gTileService = {
   objStore: "tilecache",
 
-  ageLimit: 14 * 86400, // 2 weeks
+  ageLimit: 14 * 86400 * 1000, // 2 weeks (in ms)
 
   get: function(aStyle, aCoords, aCallback) {
     var norm = normalizeCoords(aCoords);
@@ -659,10 +653,11 @@ var gTileService = {
         // We did get a cached object.
         aCallback(aResult.image, aStyle, aCoords);
         // Look at the timestamp and return if it's not too old.
-        if (aResult.timestamp + this.ageLimit > Date.now())
+        if (aResult.timestamp + gTileService.ageLimit > Date.now())
           return;
         // Reload cached tile otherwise.
-        console.log("reload cached tile: " + dbkey);
+        var oldDate = new Date(aResult.timestamp);
+        console.log("reload cached tile: " + dbkey + " - " + oldDate.toUTCString());
       }
       // Retrieve image from the web and store it in the cache.
       var XHR = new XMLHttpRequest();
@@ -678,8 +673,8 @@ var gTileService = {
       XHR.addEventListener("load", function () {
         if (XHR.status === 200) {
           var blob = XHR.response;
-          gTileService.setDBCache(dbkey, {image: blob, timestamp: Date.now()});
           aCallback(blob, aStyle, aCoords);
+          gTileService.setDBCache(dbkey, {image: blob, timestamp: Date.now()});
         }
       }, false);
       XHR.send();