From 3610c22d8eb34e6472073da446a20f2772184145 Mon Sep 17 00:00:00 2001 From: Robert Kaiser Date: Tue, 27 Dec 2011 23:48:51 +0100 Subject: [PATCH 1/1] persist prefs --- index.html | 8 +++++- js/map.js | 74 +++++++++++++++++++++++++++++++++++++++++++++++++----- js/ui.js | 3 +-- 3 files changed, 76 insertions(+), 9 deletions(-) diff --git a/index.html b/index.html index e0af394..2864474 100644 --- a/index.html +++ b/index.html @@ -61,12 +61,18 @@ onclick="saveTrack();">
+ +
+ +

Settings Map style: -
diff --git a/js/map.js b/js/map.js index 2218080..8e8ef55 100644 --- a/js/map.js +++ b/js/map.js @@ -74,10 +74,13 @@ var gLastMouseX = 0; var gLastMouseY = 0; var gZoomFactor; -// Used as an associative array. They keys have to be strings, ours will be "xindex,yindex,zindex" e.g. "13,245,12". +// Used as an associative array. +// The keys have to be strings, ours will be "xindex,yindex,zindex" e.g. "13,245,12". var gTiles = {}; var gLoadingTile; +var gMapPrefsLoaded = false; + var gDragging = false; var gZoomTouchID; @@ -92,6 +95,41 @@ function initMap() { if (!gActiveMap) gActiveMap = "osm_mapnik"; + var loopCnt = 0; + var getPersistentPrefs = function() { + if (mainDB) { + gPrefs.get("position", function(aValue) { + if (aValue) { + gPos = aValue; + drawMap(); + } + }); + gPrefs.get("center_map", function(aValue) { + if (aValue === undefined) + document.getElementById("centerCheckbox").checked = true; + else + document.getElementById("centerCheckbox").checked = aValue; + setCentering(document.getElementById("centerCheckbox")); + }); + gPrefs.get("tracking_enabled", function(aValue) { + if (aValue === undefined) + document.getElementById("trackCheckbox").checked = true; + else + document.getElementById("trackCheckbox").checked = aValue; + setTracking(document.getElementById("trackCheckbox")); + }); + gMapPrefsLoaded = true; + } + else + setTimeout(getPersistentPrefs, 100); + loopCnt++; + if (loopCnt > 20) { + gMapPrefsLoaded = true; + return; + } + }; + getPersistentPrefs(); + gCanvas.addEventListener("mouseup", mapEvHandler, false); gCanvas.addEventListener("mousemove", mapEvHandler, false); gCanvas.addEventListener("mousedown", mapEvHandler, false); @@ -233,14 +271,19 @@ function drawMap() { var xMax = gPos.x + wid / 2; var yMax = gPos.y + ht / 2; - // Go through all the tiles we want. If any of them aren't loaded or being loaded, do so. + if (gMapPrefsLoaded && mainDB) + gPrefs.set("position", gPos); + + // Go through all the tiles we want. + // If any of them aren't loaded or being loaded, do so. for (var x = Math.floor(xMin / size); x < Math.ceil(xMax / size); x++) { for (var y = Math.floor(yMin / size); y < Math.ceil(yMax / size); y++) { var xoff = (x * size - xMin) / gZoomFactor; var yoff = (y * size - yMin) / gZoomFactor; var tileKey = encodeIndex(x, y, gPos.z); if (gTiles[tileKey] && gTiles[tileKey].complete) { - // Round here is **CRUICIAL** otherwise the images are filtered and the performance sucks (more than expected). + // Round here is **CRUCIAL** otherwise the images are filtered + // and the performance sucks (more than expected). gContext.drawImage(gTiles[tileKey], Math.round(xoff), Math.round(yoff)); } else { @@ -394,8 +437,10 @@ var geofake = { this.tracking = true; var watchCall = function() { aSuccessCallback({timestamp: Date.now(), - coords: {latitude: 48.208174, // + Math.random() - .5, - longitude: 16.373819, // + Math.random() - .5, + coords: {latitude: 48.208174 + + (Math.random() - .5) / 5, + longitude: 16.373819 + + (Math.random() - .5) / 5, accuracy: 20}}); if (geofake.tracking) setTimeout(watchCall, 1000); @@ -408,6 +453,21 @@ var geofake = { } } +function setCentering(aCheckbox) { + if (gMapPrefsLoaded && mainDB) + gPrefs.set("center_map", aCheckbox.checked); + gCenterPosition = aCheckbox.checked; +} + +function setTracking(aCheckbox) { + if (gMapPrefsLoaded && mainDB) + gPrefs.set("tracking_enabled", aCheckbox.checked); + if (aCheckbox.checked) + startTracking(); + else + endTracking(); +} + function startTracking() { var loopCnt = 0; var getStoredTrack = function() { @@ -437,7 +497,8 @@ function startTracking() { gTrackStore.push(tPoint); drawTrackPoint(position.coords.latitude, position.coords.longitude); if (gCenterPosition) { - var posCoord = gps2xy(position.coords.latitude, position.coords.longitude); + var posCoord = gps2xy(position.coords.latitude, + position.coords.longitude); if (Math.abs(gPos.x - posCoord.x) > gCanvas.width * gZoomFactor / 4 || Math.abs(gPos.y - posCoord.y) > gCanvas.height * gZoomFactor / 4) { gPos.x = posCoord.x; @@ -458,6 +519,7 @@ function startTracking() { function endTracking() { if (gGeoWatchID) { + //geofake.clearWatch(gGeoWatchID); navigator.geolocation.clearWatch(gGeoWatchID); } } diff --git a/js/ui.js b/js/ui.js index 9f2f1fe..9eff693 100644 --- a/js/ui.js +++ b/js/ui.js @@ -51,7 +51,6 @@ window.onload = function() { initDB(); initMap(); resizeAndDraw(); - startTracking(); } window.onresize = function() { @@ -168,7 +167,7 @@ var gPrefs = { var transaction = mainDB.transaction([this.objStore], IDBTransaction.READ_WRITE); var objStore = transaction.objectStore(this.objStore); - var request = objStore.add(aValue, aKey); + var request = objStore.put(aValue, aKey); request.onsuccess = function(event) { success = true; if (aCallback) -- 2.35.3