From c0020540f9fd65ce9f67f832450cffdf34a25009 Mon Sep 17 00:00:00 2001 From: Javier Abadia Date: Sun, 29 Dec 2013 20:45:57 +0100 Subject: [PATCH 1/7] moved sample file to more appropriate location --- {vendor => samples}/offlinejs_demo.html | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) rename {vendor => samples}/offlinejs_demo.html (95%) diff --git a/vendor/offlinejs_demo.html b/samples/offlinejs_demo.html similarity index 95% rename from vendor/offlinejs_demo.html rename to samples/offlinejs_demo.html index ed2b313..58663d2 100644 --- a/vendor/offlinejs_demo.html +++ b/samples/offlinejs_demo.html @@ -22,7 +22,7 @@ - + From fcd5d792b48a808e2d5ef9956f225d0ab5bd1360 Mon Sep 17 00:00:00 2001 From: Javier Abadia Date: Sun, 29 Dec 2013 22:04:14 +0100 Subject: [PATCH 2/7] error reporting ui --- tiles/index.html | 8 ++++++++ tiles/main.js | 15 ++++++++++++++- tiles/style.css | 6 ++++++ 3 files changed, 28 insertions(+), 1 deletion(-) diff --git a/tiles/index.html b/tiles/index.html index 4e06bd7..8f47cbb 100644 --- a/tiles/index.html +++ b/tiles/index.html @@ -51,6 +51,14 @@
+
+
+
+ × + ERROR: Change a few things up and try submitting again.. +
+
+
diff --git a/tiles/main.js b/tiles/main.js index 286d85a..caa7ead 100644 --- a/tiles/main.js +++ b/tiles/main.js @@ -142,7 +142,8 @@ require(["esri/map", dojo.byId('update-offline-usage').disabled = true; dojo.byId('show-stored-tiles').disabled = true; esri.hide(dojo.byId('downloading-ui')); - /* JAMI: TODO add message telling that something failed while initing the indexedDB */ + + showError("Failed initializing storage, probably your browser doesn't support IndexedDB nor WebSQL"); } }); @@ -318,4 +319,16 @@ require(["esri/map", }.bind(this)); } } + + function showError(error) + { + dojo.byId('error-msg').innerHTML = error; + dojo.query('#error-div .close').onclick(hideError); + esri.show(dojo.byId('error-div')); + } + + function hideError() + { + esri.hide(dojo.byId('error-div')); + } }); diff --git a/tiles/style.css b/tiles/style.css index c462ce2..9d5ad08 100644 --- a/tiles/style.css +++ b/tiles/style.css @@ -42,3 +42,9 @@ table { #download-progress { } + +#error-div +{ + margin-top: 10px; + display: none; +} \ No newline at end of file From fb7deedf71150d8c013ccd1decfa6e328fa2daa0 Mon Sep 17 00:00:00 2001 From: Javier Abadia Date: Sun, 29 Dec 2013 22:44:37 +0100 Subject: [PATCH 3/7] better error reporting --- tiles/index.html | 2 +- tiles/main.js | 35 +++++++++++++++++++++++++---------- 2 files changed, 26 insertions(+), 11 deletions(-) diff --git a/tiles/index.html b/tiles/index.html index 8f47cbb..069b3f8 100644 --- a/tiles/index.html +++ b/tiles/index.html @@ -55,7 +55,7 @@
× - ERROR: Change a few things up and try submitting again.. + ERROR: Change a few things up and try submitting again..
diff --git a/tiles/main.js b/tiles/main.js index caa7ead..0f80bdd 100644 --- a/tiles/main.js +++ b/tiles/main.js @@ -76,8 +76,8 @@ require(["esri/map", } },function(error){ - alert("Sorry, couldn't load webmap! " + dojo.toJson(error)); - console.log("Error loading webmap: ", dojo.toJson(error)); + showAlert('alert-danger',"Sorry, couldn't load webmap: " + error.message); + console.log("Error loading webmap:",error); }); } @@ -143,7 +143,7 @@ require(["esri/map", dojo.byId('show-stored-tiles').disabled = true; esri.hide(dojo.byId('downloading-ui')); - showError("Failed initializing storage, probably your browser doesn't support IndexedDB nor WebSQL"); + showAlert("alert-danger","Failed initializing storage, probably your browser doesn't support IndexedDB nor WebSQL"); } }); @@ -234,9 +234,9 @@ require(["esri/map", console.log("deleteAllTiles():", success,err); if( success ) - alert("All tiles deleted"); + showAlert("alert-info", "All tiles deleted"); else - alert("Can't delete tiles: " + err); + showAlert("alert-danger","Can't delete tiles: " + err); setTimeout(updateOfflineUsage,0); // request execution in the next turn of the event loop }); @@ -282,7 +282,10 @@ require(["esri/map", } function finishedDownloading(cancelled) - { + { + if( cancelled ) + showAlert('alert-warning', 'Cancelled'); + setTimeout(function() { esri.show(dojo.byId('ready-to-download-ui')); @@ -320,14 +323,26 @@ require(["esri/map", } } - function showError(error) + function showAlert(type, msg) { - dojo.byId('error-msg').innerHTML = error; - dojo.query('#error-div .close').onclick(hideError); + dojo.byId('error-msg').innerHTML = msg; + dojo.query('#error-div .close').onclick(hideAlert); + dojo.query('#error-div .alert') + .removeClass('alert-danger') + .removeClass('alert-info') + .removeClass('alert-warning') + .addClass(type); + switch(type) + { + case 'alert-danger': dojo.byId('error-type').innerHTML = "ERROR"; break; + case 'alert-info': dojo.byId('error-type').innerHTML = "INFO"; break; + case 'alert-warning': dojo.byId('error-type').innerHTML = "WARNING"; break; + } esri.show(dojo.byId('error-div')); + window.scrollTo(0,0); } - function hideError() + function hideAlert() { esri.hide(dojo.byId('error-div')); } From e42572b034cbf182a60bf34ec1065b22728a0b8d Mon Sep 17 00:00:00 2001 From: Javier Abadia Date: Sun, 29 Dec 2013 22:49:39 +0100 Subject: [PATCH 4/7] small cosmetic change --- tiles/index.html | 2 +- tiles/style.css | 4 ---- 2 files changed, 1 insertion(+), 5 deletions(-) diff --git a/tiles/index.html b/tiles/index.html index 069b3f8..9599978 100644 --- a/tiles/index.html +++ b/tiles/index.html @@ -63,7 +63,7 @@
-

Map:[none]

+

Map: [none]

[none]

diff --git a/tiles/style.css b/tiles/style.css index 9d5ad08..7da96c0 100644 --- a/tiles/style.css +++ b/tiles/style.css @@ -17,10 +17,6 @@ table { margin-bottom: 20px; } -#mapTitle { - margin-left: 15px; -} - #mapDiv_layers>:first-child .layerTile { /*border: 1px solid red !important;*/ /* From 9a097be4c26490ea675a5c978bf7a1a497e1c67c Mon Sep 17 00:00:00 2001 From: Javier Abadia Date: Sun, 29 Dec 2013 23:34:26 +0100 Subject: [PATCH 5/7] better error reporting --- tiles/main.js | 40 +++++++++++++++++++++++++---------- tiles/tiles/offlineEnabler.js | 32 +++++++++++++--------------- 2 files changed, 44 insertions(+), 28 deletions(-) diff --git a/tiles/main.js b/tiles/main.js index 0f80bdd..a7e03b9 100644 --- a/tiles/main.js +++ b/tiles/main.js @@ -3,7 +3,7 @@ var map; var basemapLayer; var graphics; -var cancelRequested, startTime; +var cancelRequested, startTime, errorList; var showTiles = false; require(["esri/map", @@ -234,9 +234,9 @@ require(["esri/map", console.log("deleteAllTiles():", success,err); if( success ) - showAlert("alert-info", "All tiles deleted"); + showAlert("alert-success", "All tiles deleted"); else - showAlert("alert-danger","Can't delete tiles: " + err); + showAlert("alert-danger", "Can't delete tiles: " + err); setTimeout(updateOfflineUsage,0); // request execution in the next turn of the event loop }); @@ -246,7 +246,8 @@ require(["esri/map", { /* put UI in downloading mode */ cancelRequested = false; - reportProgress(0,1); + errorList = []; + reportProgress({countNow:0,countMax:1}); esri.hide(dojo.byId('ready-to-download-ui')); esri.show(dojo.byId('downloading-ui')); startTime = new Date(); @@ -262,17 +263,28 @@ require(["esri/map", cancelRequested = true; } - function reportProgress(countNow,countMax) - { + function reportProgress(progress) + { var pbar = query('#download-progress [role=progressbar]')[0]; - var percent = countMax? (countNow / countMax * 100) : 0; + var percent = progress.countMax? (progress.countNow / progress.countMax * 100) : 0; pbar.style.width = percent+"%"; - if( countNow > 5 ) + if( progress.error ) + { + query('#download-progress [role=progressbar]') + .removeClass('progress-bar-success') + .addClass('progress-bar-warning'); + + errorList.push(progress.error.msg); + + showAlert('alert-warning', progress.error.msg); + } + + if( progress.countNow > 5 ) { var currentTime = new Date(); var elapsedTime = currentTime - startTime; - var remainingTime = (elapsedTime / countNow) * (countMax - countNow); + var remainingTime = (elapsedTime / progress.countNow) * (progress.countMax - progress.countNow); var sec = 1 + Math.floor(remainingTime / 1000); var min = Math.floor(sec / 60); sec -= (min * 60); @@ -285,6 +297,10 @@ require(["esri/map", { if( cancelled ) showAlert('alert-warning', 'Cancelled'); + else if (errorList.length == 0) + showAlert('alert-success', 'All tiles downloaded and stored'); + else + showAlert('alert-warning', "Finished downloading tiles, " + errorList.length + " tiles couldn't be downloaded"); setTimeout(function() { @@ -328,15 +344,17 @@ require(["esri/map", dojo.byId('error-msg').innerHTML = msg; dojo.query('#error-div .close').onclick(hideAlert); dojo.query('#error-div .alert') - .removeClass('alert-danger') + .removeClass('alert-success') .removeClass('alert-info') .removeClass('alert-warning') + .removeClass('alert-danger') .addClass(type); switch(type) { - case 'alert-danger': dojo.byId('error-type').innerHTML = "ERROR"; break; + case 'alert-success': dojo.byId('error-type').innerHTML = "SUCCESS"; break; case 'alert-info': dojo.byId('error-type').innerHTML = "INFO"; break; case 'alert-warning': dojo.byId('error-type').innerHTML = "WARNING"; break; + case 'alert-danger': dojo.byId('error-type').innerHTML = "ERROR"; break; } esri.show(dojo.byId('error-div')); window.scrollTo(0,0); diff --git a/tiles/tiles/offlineEnabler.js b/tiles/tiles/offlineEnabler.js index 0fe87a2..8687e3b 100644 --- a/tiles/tiles/offlineEnabler.js +++ b/tiles/tiles/offlineEnabler.js @@ -139,25 +139,23 @@ define([ layer.downloadTile = function(i,cells, reportProgress, finishedDownloading) { var cell = cells[i]; - var cancelRequested = reportProgress(i, cells.length); + var cancelRequested = reportProgress({countNow:i, countMax:cells.length}); - this.storeTile(cell.level,cell.row,cell.col, function(success, msg) + this.storeTile(cell.level,cell.row,cell.col, function(success, error) { - /* JAMI: TODO, continue looking for other tiles even if one fails */ - if(success) + if(!success) { - if( cancelRequested ) - finishedDownloading(true); - else if( i== cells.length-1 ) - finishedDownloading(false); - else - this.downloadTile(i+1, cells, reportProgress, finishedDownloading); + console.log("error storing tile", cell, error); + reportProgress({countNow:i, countMax:cells.length, error: { cell:cell, msg:error}}); } - else - { - console.log("error storing tile", cell, msg); + + if( cancelRequested ) finishedDownloading(true); - } + else if( i==cells.length-1 ) + finishedDownloading(false); + else + this.downloadTile(i+1, cells, reportProgress, finishedDownloading); + }.bind(this)) } @@ -199,13 +197,13 @@ define([ } else { - console.log("xhr failed for ", imgurl); - callback(false,req.status); + console.log("xhr failed for", imgurl); + callback(false, req.status + " " + req.statusText + ": " + req.response + " when downloading " + imgurl); } } req.onerror = function(e) { - console.log("xhr failed for ", imgurl); + console.log("xhr failed for", imgurl); callback(false, e); } req.send(null); From 509cadbc4963bbf7ba5a8e1de789f2b3a2189287 Mon Sep 17 00:00:00 2001 From: Javier Abadia Date: Sun, 29 Dec 2013 23:53:36 +0100 Subject: [PATCH 6/7] alert icons --- tiles/index.html | 2 +- tiles/main.js | 18 +++++++++++------- 2 files changed, 12 insertions(+), 8 deletions(-) diff --git a/tiles/index.html b/tiles/index.html index 9599978..14369f8 100644 --- a/tiles/index.html +++ b/tiles/index.html @@ -55,7 +55,7 @@
× - ERROR: Change a few things up and try submitting again.. + Change a few things up and try submitting again..
diff --git a/tiles/main.js b/tiles/main.js index a7e03b9..8adfdcd 100644 --- a/tiles/main.js +++ b/tiles/main.js @@ -341,6 +341,14 @@ require(["esri/map", function showAlert(type, msg) { + var icon = ""; + switch(type) + { + case 'alert-success': icon = "fa-check"; break; + case 'alert-info': icon = "fa-info-circle"; break; + case 'alert-warning': icon = "fa-warning"; break; + case 'alert-danger': icon = "fa-ban"; break; + } dojo.byId('error-msg').innerHTML = msg; dojo.query('#error-div .close').onclick(hideAlert); dojo.query('#error-div .alert') @@ -349,13 +357,9 @@ require(["esri/map", .removeClass('alert-warning') .removeClass('alert-danger') .addClass(type); - switch(type) - { - case 'alert-success': dojo.byId('error-type').innerHTML = "SUCCESS"; break; - case 'alert-info': dojo.byId('error-type').innerHTML = "INFO"; break; - case 'alert-warning': dojo.byId('error-type').innerHTML = "WARNING"; break; - case 'alert-danger': dojo.byId('error-type').innerHTML = "ERROR"; break; - } + dojo.query('#error-div .fa') + .removeClass('fa-info-circle') + .addClass(icon); esri.show(dojo.byId('error-div')); window.scrollTo(0,0); } From 4a82af4a3f6b21152fb1db3ea699029131ce1707 Mon Sep 17 00:00:00 2001 From: Javier Abadia Date: Mon, 30 Dec 2013 00:08:03 +0100 Subject: [PATCH 7/7] more error handling --- tiles/main.js | 4 ++++ tiles/tiles/offlineEnabler.js | 2 +- 2 files changed, 5 insertions(+), 1 deletion(-) diff --git a/tiles/main.js b/tiles/main.js index 8adfdcd..7520269 100644 --- a/tiles/main.js +++ b/tiles/main.js @@ -247,6 +247,10 @@ require(["esri/map", /* put UI in downloading mode */ cancelRequested = false; errorList = []; + query('#download-progress [role=progressbar]') + .removeClass('progress-bar-warning') + .addClass('progress-bar-success'); + hideAlert(); reportProgress({countNow:0,countMax:1}); esri.hide(dojo.byId('ready-to-download-ui')); esri.show(dojo.byId('downloading-ui')); diff --git a/tiles/tiles/offlineEnabler.js b/tiles/tiles/offlineEnabler.js index 8687e3b..ae348d5 100644 --- a/tiles/tiles/offlineEnabler.js +++ b/tiles/tiles/offlineEnabler.js @@ -184,7 +184,7 @@ define([ req.onload = function() { - if( req.status == 200 ) + if( req.status == 200 && req.responseText != "") { var img = Base64Utils.wordToBase64(Base64Utils.stringToWord(this.responseText));