diff --git a/index.html b/index.html
index 533732d..f6fd752 100644
--- a/index.html
+++ b/index.html
@@ -58,6 +58,13 @@
+
+
Leaderboard
+
+
This is a record of who has recovered the most sondes.
+
+
No leaderboard data :-(
+
Recoveries
diff --git a/js/tracker.js b/js/tracker.js
index 3a559de..dca21e5 100644
--- a/js/tracker.js
+++ b/js/tracker.js
@@ -3282,13 +3282,15 @@ function refreshRecoveries() {
$.ajax({
type: "GET",
url: recovered_sondes_url,
- data: "",
+ data: "last=0",
dataType: "json",
success: function(response, textStatus) {
if(offline.get('opt_hide_recoveries')) {
updateRecoveryPane(response);
+ updateLeaderboardPane(response);
} else {
updateRecoveryPane(response);
+ updateLeaderboardPane(response);
updateRecoveries(response);
}
},
@@ -3661,42 +3663,83 @@ function updateRecoveryPane(r){
html = "";
+ var dateNow = Date.now();
+
var i = 0, ii = r.length;
for(; i < ii; i++) {
- var lat = parseFloat(r[i].lat);
- var lon = parseFloat(r[i].lon);
- var alt = parseFloat(r[i].alt);
+ var date = Date.parse(r[i].datetime);
+ if (((dateNow - date) / 86400000) < 3) {
+ var lat = parseFloat(r[i].lat);
+ var lon = parseFloat(r[i].lon);
+ var alt = parseFloat(r[i].alt);
- if(lat < -90 || lat > 90 || lon < -180 || lon > 180) continue;
+ if(lat < -90 || lat > 90 || lon < -180 || lon > 180) continue;
- var r_index = $.inArray(r[i].serial, recovery_names);
+ var r_index = $.inArray(r[i].serial, recovery_names);
- if(r_index == -1) {
- recovery_names.push(r[i].serial);
- r_index = recovery_names.length - 1;
- recoveries[r_index] = {marker: null, infobox: null};
- }
+ if(r_index == -1) {
+ recovery_names.push(r[i].serial);
+ r_index = recovery_names.length - 1;
+ recoveries[r_index] = {marker: null, infobox: null};
+ }
- html += "
";
- html += "
"+r[i].serial+(r[i].recovered ? " Recovered by " : " Not Recovered by ")+r[i].recovered_by+"
";
- html += "
"+roundNumber(lat, 5) + ', ' + roundNumber(lon, 5)+"
";
-
- var imp = offline.get('opt_imperial');
- var text_alt = Number((imp) ? Math.floor(3.2808399 * parseInt(alt)) : parseInt(alt)).toLocaleString("us");
- text_alt += " " + ((imp) ? 'ft':'m');
-
- html += "
Time: "+formatDate(stringToDateUTC(r[i].datetime))+"
";
- html += "
Reported by: "+r[i].recovered_by+"
";
- html += "
Notes: "+$('
').text(r[i].description).html()+"
";
- html += "
";
- html += "
";
- html += "
";
+ html += "
";
+ html += "
"+r[i].serial+(r[i].recovered ? " Recovered by " : " Not Recovered by ")+r[i].recovered_by+"
";
+ html += "
"+roundNumber(lat, 5) + ', ' + roundNumber(lon, 5)+"
";
+
+ var imp = offline.get('opt_imperial');
+ var text_alt = Number((imp) ? Math.floor(3.2808399 * parseInt(alt)) : parseInt(alt)).toLocaleString("us");
+ text_alt += " " + ((imp) ? 'ft':'m');
+
+ html += "
Time: "+formatDate(stringToDateUTC(r[i].datetime))+"
";
+ html += "
Reported by: "+r[i].recovered_by+"
";
+ html += "
Notes: "+$('
').text(r[i].description).html()+"
";
+ html += "
";
+ html += "
";
+ html += "
";
+ }
}
$("#recovery-list").html(html);
}
+function updateLeaderboardPane(r){
+ if(!r) return;
+
+ html = "";
+ var leaderboard = [];
+
+ var i = 0, ii = r.length;
+ for(; i < ii; i++) {
+ if (r[i].recovered) {
+ if (leaderboard.hasOwnProperty(r[i].recovered_by)) {
+ leaderboard[r[i].recovered_by] = leaderboard[r[i].recovered_by] + 1;
+ } else {
+ leaderboard[r[i].recovered_by] = 1
+ }
+ }
+ }
+
+ var sortable = [];
+ for (var score in leaderboard) {
+ sortable.push([score, leaderboard[score]]);
+ }
+
+ sortable.sort(function(a, b) {
+ return b[1] - a[1];
+ });
+
+ var list = sortable.slice(0,5);
+
+ for (var i = 0; i < list.length; i++) {
+ html += "
" + (parseInt(i)+1) + ". " + list[i][0] + " - " + list[i][1] + "
";
+ }
+
+ $("#leaderboard-list").html(html);
+
+}
+
function updatePredictions(r) {
if(!r) return;
ls_pred = true;