}
}
- var loopCnt = 0;
- var getPersistentPrefs = function() {
- if (mainDB) {
- gWaitCounter++;
- gPrefs.get("position", function(aValue) {
- if (aValue) {
- gPos = aValue;
- gWaitCounter--;
- }
- });
- gWaitCounter++;
- gPrefs.get("center_map", function(aValue) {
- if (aValue === undefined)
- document.getElementById("centerCheckbox").checked = true;
- else
- document.getElementById("centerCheckbox").checked = aValue;
- setCentering(document.getElementById("centerCheckbox"));
- gWaitCounter--;
- });
- gWaitCounter++;
- gPrefs.get("tracking_enabled", function(aValue) {
- if (aValue === undefined)
- document.getElementById("trackCheckbox").checked = true;
- else
- document.getElementById("trackCheckbox").checked = aValue;
- gWaitCounter--;
- });
- gWaitCounter++;
- gTrackStore.getList(function(aTPoints) {
- if (gDebug)
- console.log(aTPoints.length + " points loaded.");
- if (aTPoints.length) {
- gTrack = aTPoints;
- }
- gWaitCounter--;
- });
- }
- else
- setTimeout(getPersistentPrefs, 100);
- loopCnt++;
- if (loopCnt > 50) {
- console.log("Loading prefs failed.");
- }
- };
- getPersistentPrefs();
-
- gTrackCanvas.addEventListener("mouseup", mapEvHandler, false);
- gTrackCanvas.addEventListener("mousemove", mapEvHandler, false);
- gTrackCanvas.addEventListener("mousedown", mapEvHandler, false);
- gTrackCanvas.addEventListener("mouseout", mapEvHandler, false);
-
- gTrackCanvas.addEventListener("touchstart", mapEvHandler, false);
- gTrackCanvas.addEventListener("touchmove", mapEvHandler, false);
- gTrackCanvas.addEventListener("touchend", mapEvHandler, false);
- gTrackCanvas.addEventListener("touchcancel", mapEvHandler, false);
- gTrackCanvas.addEventListener("touchleave", mapEvHandler, false);
-
- gTrackCanvas.addEventListener("wheel", mapEvHandler, false);
-
- document.getElementById("body").addEventListener("keydown", mapEvHandler, false);
-
- document.getElementById("copyright").innerHTML =
- gMapStyles[gActiveMap].copyright;
+ console.log("map vars set, loading prefs...");
+ loadPrefs();
+}
- gLoadingTile = new Image();
- gLoadingTile.src = "style/loading.png";
- gWaitCounter++;
- gLoadingTile.onload = function() { gWaitCounter--; };
+function loadPrefs(aEvent) {
+ if (aEvent && aEvent.type == "prefs-step") {
+ console.log("wait: " + gWaitCounter);
+ if (gWaitCounter == 0) {
+ gAction.removeEventListener(aEvent.type, loadPrefs, false);
+ gMapPrefsLoaded = true;
+ console.log("prefs loaded.");
+
+ gTrackCanvas.addEventListener("mouseup", mapEvHandler, false);
+ gTrackCanvas.addEventListener("mousemove", mapEvHandler, false);
+ gTrackCanvas.addEventListener("mousedown", mapEvHandler, false);
+ gTrackCanvas.addEventListener("mouseout", mapEvHandler, false);
+
+ gTrackCanvas.addEventListener("touchstart", mapEvHandler, false);
+ gTrackCanvas.addEventListener("touchmove", mapEvHandler, false);
+ gTrackCanvas.addEventListener("touchend", mapEvHandler, false);
+ gTrackCanvas.addEventListener("touchcancel", mapEvHandler, false);
+ gTrackCanvas.addEventListener("touchleave", mapEvHandler, false);
+
+ gTrackCanvas.addEventListener("wheel", mapEvHandler, false);
+
+ document.getElementById("body").addEventListener("keydown", mapEvHandler, false);
+
+ document.getElementById("copyright").innerHTML =
+ gMapStyles[gActiveMap].copyright;
+
+ gLoadingTile = new Image();
+ gLoadingTile.src = "style/loading.png";
+ gLoadingTile.onload = function() {
+ var throwEv = new CustomEvent("mapinit-done");
+ gAction.dispatchEvent(throwEv);
+ };
+ }
+ }
+ else {
+ if (aEvent)
+ gAction.removeEventListener(aEvent.type, loadPrefs, false);
+ gAction.addEventListener("prefs-step", loadPrefs, false);
+ gWaitCounter++;
+ gPrefs.get("position", function(aValue) {
+ if (aValue) {
+ gPos = aValue;
+ }
+ gWaitCounter--;
+ var throwEv = new CustomEvent("prefs-step");
+ gAction.dispatchEvent(throwEv);
+ });
+ gWaitCounter++;
+ gPrefs.get("center_map", function(aValue) {
+ if (aValue === undefined)
+ document.getElementById("centerCheckbox").checked = true;
+ else
+ document.getElementById("centerCheckbox").checked = aValue;
+ setCentering(document.getElementById("centerCheckbox"));
+ gWaitCounter--;
+ var throwEv = new CustomEvent("prefs-step");
+ gAction.dispatchEvent(throwEv);
+ });
+ gWaitCounter++;
+ gPrefs.get("tracking_enabled", function(aValue) {
+ if (aValue === undefined)
+ document.getElementById("trackCheckbox").checked = true;
+ else
+ document.getElementById("trackCheckbox").checked = aValue;
+ gWaitCounter--;
+ var throwEv = new CustomEvent("prefs-step");
+ gAction.dispatchEvent(throwEv);
+ });
+ gWaitCounter++;
+ var trackLoadStarted = false;
+ gTrackStore.getListStepped(function(aTPoint) {
+ if (aTPoint) {
+ // Add in front and return new length.
+ var tracklen = gTrack.unshift(aTPoint);
+ // Redraw track every 100 values (initial paint will do first anyhow).
+ if (tracklen % 100 == 0)
+ drawTrack();
+ }
+ else {
+ // Last point received.
+ drawTrack();
+ }
+ if (!trackLoadStarted) {
+ // We have the most recent point, if present, rest will load async.
+ trackLoadStarted = true;
+ gWaitCounter--;
+ var throwEv = new CustomEvent("prefs-step");
+ gAction.dispatchEvent(throwEv);
+ }
+ });
+ }
}
function resizeAndDraw() {
}
}
}
+ drawTrack();
+}
+
+function drawTrack() {
gLastDrawnPoint = null;
gCurPosMapCache = undefined;
gTrackContext.clearRect(0, 0, gTrackCanvas.width, gTrackCanvas.height);
handleEvent: function(aEvent) {
var touchEvent = aEvent.type.indexOf('touch') != -1;
+ // Bail out if the event is happening on an input.
+ if (aEvent.target.tagName.toLowerCase() == "input")
+ return;
+
// Bail out on unwanted map moves, but not zoom or keyboard events.
if (aEvent.type.indexOf("mouse") === 0 || aEvent.type.indexOf("touch") === 0) {
// Bail out if this is neither a touch nor left-click.
function clearTrack() {
gTrack = [];
gTrackStore.clear();
- drawMap({left: 0, right: 0, top: 0, bottom: 0});
+ drawTrack();
}
var gTileService = {