1 /* This Source Code Form is subject to the terms of the Mozilla Public
2 * License, v. 2.0. If a copy of the MPL was not distributed with this file,
3 * You can obtain one at http://mozilla.org/MPL/2.0/. */
5 // Get the best-available indexedDB object.
6 var iDB = window.indexedDB || window.webkitIndexedDB || window.mozIndexedDB || window.msIndexedDB;
9 window.onload = function() {
10 var mSel = document.getElementById("mapSelector");
11 for (var mapStyle in gMapStyles) {
12 var opt = document.createElement("option");
14 opt.text = gMapStyles[mapStyle].name;
23 window.onresize = function() {
29 var request = iDB.open("MainDB", 1);
30 request.onerror = function(event) {
31 // Errors can be handled here. Error codes explain in:
32 // https://developer.mozilla.org/en/IndexedDB/IDBDatabaseException#Constants
33 //document.getElementById("debug").textContent =
34 // "error opening mainDB: " + event.target.errorCode;
36 request.onsuccess = function(event) {
37 //document.getElementById("debug").textContent = "mainDB opened.";
38 mainDB = request.result;
40 request.onupgradeneeded = function(event) {
41 mainDB = request.result;
42 //document.getElementById("debug").textContent = "mainDB upgraded.";
43 // Create a "prefs" objectStore.
44 var prefsStore = mainDB.createObjectStore("prefs");
45 // Create a "track" objectStore.
46 var trackStore = mainDB.createObjectStore("track", {autoIncrement: true});
47 mainDB.onversionchange = function(event) {
55 function toggleTrackArea() {
56 var fs = document.getElementById("trackArea");
57 if (fs.style.display != "block") {
58 fs.style.display = "block";
61 fs.style.display = "none";
65 function toggleSettings() {
66 var fs = document.getElementById("settingsArea");
67 if (fs.style.display != "block") {
68 fs.style.display = "block";
71 fs.style.display = "none";
75 function makeISOString(aTimestamp) {
76 // ISO time format is YYYY-MM-DDTHH:mm:ssZ
77 var tsDate = new Date(aTimestamp);
78 return tsDate.getUTCFullYear() + "-" +
79 (tsDate.getUTCMonth() < 10 ? "0" : "") + tsDate.getUTCMonth() + "-" +
80 (tsDate.getUTCDate() < 10 ? "0" : "") + tsDate.getUTCDate() + "T" +
81 (tsDate.getUTCHours() < 10 ? "0" : "") + tsDate.getUTCHours() + ":" +
82 (tsDate.getUTCMinutes() < 10 ? "0" : "") + tsDate.getUTCMinutes() + ":" +
83 (tsDate.getUTCSeconds() < 10 ? "0" : "") + tsDate.getUTCSeconds() + "Z";
86 function saveTrack() {
88 var out = '<?xml version="1.0" encoding="UTF-8" ?>' + "\n\n";
89 out += '<gpx version="1.0" creator="Lantea" xmlns="http://www.topografix.com/GPX/1/0">' + "\n";
90 out += ' <trk>' + "\n";
91 out += ' <trkseg>' + "\n";
92 for (var i = 0; i < gTrack.length; i++) {
93 if (gTrack[i].beginSegment && i > 0) {
94 out += ' </trkseg>' + "\n";
95 out += ' <trkseg>' + "\n";
97 out += ' <trkpt lat="' + gTrack[i].coords.latitude + '" lon="' +
98 gTrack[i].coords.longitude + '">' + "\n";
99 if (gTrack[i].coords.altitude) {
100 out += ' <ele>' + gTrack[i].coords.altitude + '</ele>' + "\n";
102 out += ' <time>' + makeISOString(gTrack[i].time) + '</time>' + "\n";
103 out += ' </trkpt>' + "\n";
105 out += ' </trkseg>' + "\n";
106 out += ' </trk>' + "\n";
107 out += '</gpx>' + "\n";
108 var outDataURI = "data:application/octet-stream," + encodeURIComponent(out);
109 window.open(outDataURI, 'GPX Track');
116 get: function(aKey, aCallback) {
119 var transaction = mainDB.transaction([this.objStore]);
120 var request = transaction.objectStore(this.objStore).get(aKey);
121 request.onsuccess = function(event) {
122 aCallback(request.result, event);
124 request.onerror = function(event) {
125 // Errors can be handled here.
126 aCallback(undefined, event);
130 set: function(aKey, aValue, aCallback) {
134 var transaction = mainDB.transaction([this.objStore],
135 IDBTransaction.READ_WRITE);
136 var objStore = transaction.objectStore(this.objStore);
137 var request = objStore.put(aValue, aKey);
138 request.onsuccess = function(event) {
141 aCallback(success, event);
143 request.onerror = function(event) {
144 // Errors can be handled here.
146 aCallback(success, event);
150 unset: function(aKey, aCallback) {
154 var transaction = mainDB.transaction([this.objStore],
155 IDBTransaction.READ_WRITE);
156 var request = transaction.objectStore(this.objStore).delete(aKey);
157 request.onsuccess = function(event) {
160 aCallback(success, event);
162 request.onerror = function(event) {
163 // Errors can be handled here.
165 aCallback(success, event);
173 getList: function(aCallback) {
176 var transaction = mainDB.transaction([this.objStore]);
177 var objStore = transaction.objectStore(this.objStore);
178 if (objStore.getAll) { // currently Mozilla-specific
179 objStore.getAll().onsuccess = function(event) {
180 aCallback(event.target.result);
183 else { // Use cursor (standard method).
185 objStore.openCursor().onsuccess = function(event) {
186 var cursor = event.target.result;
188 tPoints.push(cursor.value);
198 push: function(aValue, aCallback) {
201 var transaction = mainDB.transaction([this.objStore],
202 IDBTransaction.READ_WRITE);
203 var objStore = transaction.objectStore(this.objStore);
204 var request = objStore.add(aValue);
205 request.onsuccess = function(event) {
207 aCallback(request.result, event);
209 request.onerror = function(event) {
210 // Errors can be handled here.
212 aCallback(false, event);
216 clear: function(aCallback) {
220 var transaction = mainDB.transaction([this.objStore],
221 IDBTransaction.READ_WRITE);
222 var request = transaction.objectStore(this.objStore).clear();
223 request.onsuccess = function(event) {
226 aCallback(success, event);
228 request.onerror = function(event) {
229 // Errors can be handled here.
231 aCallback(success, event);