X-Git-Url: https://git-public.kairo.at/?p=lantea.git;a=blobdiff_plain;f=js%2Fmap.js;fp=js%2Fmap.js;h=b4fae0f7a8558a7f3ecb7f68e43d89636362678e;hp=732197ded38206e384cac185afd39412bb00a469;hb=3b76e071306afc11dee4e0951322a81cb8b7e31d;hpb=740a3861f7b1132362e3006ab32ac5bd37174b76 diff --git a/js/map.js b/js/map.js index 732197d..b4fae0f 100644 --- a/js/map.js +++ b/js/map.js @@ -1238,24 +1238,53 @@ function clearTrack() { drawTrack(); } -function loadTrack(aTrackId) { +function loadTrackFromBackend(aTrackId, aFeedbackElement, aSuccessCallback) { + if (aFeedbackElement) { + aFeedbackElement.textContent = "Loading..."; + // If someone loads without pointing to UI (e.g. for debugging), we just overwrite whatever's loaded. + if (calcTrackLength() > 1) { + aFeedbackElement.textContent = "Track >1km loaded, please save/clear."; + aFeedbackElement.classList.add("error"); + return; + } + } fetchBackend("track_json?id=" + encodeURIComponent(aTrackId), "GET", null, function(aResult, aStatusCode) { - if (aStatusCode >= 400 || !aResult) { + if (aStatusCode >= 400) { console.log("loading track failed: " + aStatusCode + ", result: " + aResult.message); + if (aFeedbackElement) { + aFeedbackElement.textContent = "Error: " + aResult; + aFeedbackElement.classList.add("error"); + } } - else { - console.log("loading track with " + aResult.length + " points."); - gTrack = aResult; - for (var i = 0; i < gTrack.length; i++) { - try { gTrackStore.push(gTrack[i]); } catch(e) {} + else if (aResult) { + loadTrack(aResult); + if (aSuccessCallback) { + aSuccessCallback(); + } + } + else { // If no result is returned, we assume a general error. + console.log("Error getting track with ID " + aTrackId + " from backend."); + if (aFeedbackElement) { + aFeedbackElement.textContent = "Error fetching track from backend."; + aFeedbackElement.classList.add("error"); } - drawTrack(); } } ); } +function loadTrack(aTrack) { + console.log("Loading track with " + aTrack.length + " points."); + gTrack = aTrack; + gTrackStore.clear(function(aSuccess, aEvent) { + for (var i = 0; i < gTrack.length; i++) { + try { gTrackStore.push(gTrack[i]); } catch(e) {} + } + }); + drawTrack(); // Draws from gTrack, so not problem that gTrackStore is filled async. +} + var gTileService = { objStore: "tilecache",