Skip to content

Commit 7f6d970

Browse files
Vehicles in list show time since last pos
* The 'received' field now indicates how fresh position is * Human friendly delta time between now and when the position was originally received
1 parent 5348e5d commit 7f6d970

File tree

3 files changed

+77
-46
lines changed

3 files changed

+77
-46
lines changed

css/main.css

Lines changed: 4 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -369,6 +369,10 @@ header > div {
369369
text-decoration: none;
370370
color: #00A3D3;
371371
}
372+
#main .data dl > dt.receivers {
373+
font-size: 12px;
374+
font-weight: normal;
375+
}
372376

373377
.flatpage {
374378
margin-top: 55px;
@@ -575,13 +579,6 @@ header > div {
575579
line-height: 11px;
576580
font-size: 11px;
577581
}
578-
#main .data dl > dt.receivers {
579-
font-size: 10px;
580-
font-weight: normal;
581-
}
582-
#main .data dl > dd.receivers {
583-
font-size: 10px;
584-
}
585582
#main .row .data img {
586583
right: 5%;
587584
top: 50px;
@@ -624,13 +621,6 @@ header > div {
624621
line-height: 11px;
625622
font-size: 11px;
626623
}
627-
#main .data dl > dt.receivers {
628-
font-size: 10px;
629-
font-weight: normal;
630-
}
631-
#main .data dl > dd.receivers {
632-
font-size: 10px;
633-
}
634624
#main .row .header .graph {
635625
width: 150px;
636626
height: 40px;

js/app.js

Lines changed: 48 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -258,37 +258,62 @@ var twoZeroPad = function(n) {
258258
return (n.length<2) ? '0'+n : n;
259259
}
260260

261-
var updateTimebox = function(date) {
261+
// runs every second
262+
var updateTime = function(date) {
263+
// update timebox
262264
var elm = $("#timebox.present");
263-
if(elm.length < 1) return;
264-
265-
var a,b,c,d,e,f,g,z;
266-
267-
a = date.getUTCFullYear();
268-
b = twoZeroPad(date.getUTCMonth()+1); // months 0-11
269-
c = twoZeroPad(date.getUTCDate());
270-
e = twoZeroPad(date.getUTCHours());
271-
f = twoZeroPad(date.getUTCMinutes());
272-
g = twoZeroPad(date.getUTCSeconds());
273-
274-
elm.find(".current").text("Current: "+a+'-'+b+'-'+c+' '+e+':'+f+':'+g+" UTC");
275-
276-
a = date.getFullYear();
277-
b = twoZeroPad(date.getMonth()+1); // months 0-11
278-
c = twoZeroPad(date.getDate());
279-
e = twoZeroPad(date.getHours());
280-
f = twoZeroPad(date.getMinutes());
281-
g = twoZeroPad(date.getSeconds());
282-
z = date.getTimezoneOffset() / -60;
265+
if(elm.length > 0) {
266+
var a,b,c,d,e,f,g,z;
267+
268+
a = date.getUTCFullYear();
269+
b = twoZeroPad(date.getUTCMonth()+1); // months 0-11
270+
c = twoZeroPad(date.getUTCDate());
271+
e = twoZeroPad(date.getUTCHours());
272+
f = twoZeroPad(date.getUTCMinutes());
273+
g = twoZeroPad(date.getUTCSeconds());
274+
275+
elm.find(".current").text("Current: "+a+'-'+b+'-'+c+' '+e+':'+f+':'+g+" UTC");
276+
277+
a = date.getFullYear();
278+
b = twoZeroPad(date.getMonth()+1); // months 0-11
279+
c = twoZeroPad(date.getDate());
280+
e = twoZeroPad(date.getHours());
281+
f = twoZeroPad(date.getMinutes());
282+
g = twoZeroPad(date.getSeconds());
283+
z = date.getTimezoneOffset() / -60;
284+
285+
elm.find(".local").text("Local: "+a+'-'+b+'-'+c+' '+e+':'+f+':'+g+" UTC"+((z<0)?"-":"+")+z);
286+
}
283287

284-
elm.find(".local").text("Local: "+a+'-'+b+'-'+c+' '+e+':'+f+':'+g+" UTC"+((z<0)?"-":"+")+z);
288+
// update friendly delta time fields
289+
var elm = $(".friendly-dtime");
290+
if(elm.length > 0) {
291+
var now = new Date().getTime();
292+
293+
elm.each(function(k,v) {
294+
var e = $(v);
295+
var ts = e.attr('data-timestamp');
296+
var dt = Math.floor((now - ts) / 1000);
297+
if(dt < 0) return;
298+
299+
if(dt < 60) e.text(dt+'s ago'); // less than a minute
300+
else if(dt < 3600) e.text(Math.floor(dt/60)+'m ago'); // less than an hour
301+
else if(dt < 86400) { // less than a day
302+
dt = Math.floor(dt/60);
303+
e.text(Math.floor(dt/60)+'h '+(dt % 60)+'m ago');
304+
} else {
305+
dt = Math.floor(dt/3600); // hours
306+
e.text(Math.floor(dt/24)+'d '+(dt % 24)+'h ago');
307+
}
308+
});
309+
}
285310
}
286311

287312

288313
$(window).ready(function() {
289314
// refresh timebox
290315
setInterval(function() {
291-
updateTimebox(new Date());
316+
updateTime(new Date());
292317
}, 1000);
293318

294319
// resize elements if needed

js/tracker.js

Lines changed: 25 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -291,6 +291,23 @@ function roundNumber(number, digits) {
291291
return rndedNum;
292292
}
293293

294+
function stringToDateUTC(text) {
295+
return new Date(text.replace(" ","T") + "Z");
296+
}
297+
298+
function formatDate(date) {
299+
var a,b,c,d,e,f,g,z;
300+
301+
a = date.getFullYear();
302+
b = twoZeroPad(date.getMonth()+1); // months 0-11
303+
c = twoZeroPad(date.getDate());
304+
e = twoZeroPad(date.getHours());
305+
f = twoZeroPad(date.getMinutes());
306+
g = twoZeroPad(date.getSeconds());
307+
308+
return a+'-'+b+'-'+c+' '+e+':'+f+':'+g;
309+
}
310+
294311
function updateVehicleInfo(index, newPosition) {
295312
var vehicle = vehicles[index];
296313
var latlng = new google.maps.LatLng(newPosition.gps_lat, newPosition.gps_lon);
@@ -334,7 +351,7 @@ function updateVehicleInfo(index, newPosition) {
334351
&& newPosition.gps_alt < 350 // and is under 350 meters altitude
335352
) || ( // or
336353
newPosition.gps_alt < 600 // under 600m and has no position update for more than 30 minutes
337-
&& (new Date((new Date()).toISOString())).getTime() - (new Date(newPosition.gps_time + " UTC")).getTime() > 1800000
354+
&& (new Date().getTime() - convert_time(newPosition.gps_time)) > 1800000
338355
);
339356

340357
if(landed) {
@@ -408,13 +425,14 @@ function updateVehicleInfo(index, newPosition) {
408425
+ '</div>' // right
409426
+ '</div>' // data
410427
+ '';
411-
var c = '<dt class="receivers">Recieved by:</dt><dd class="receivers">'
428+
var c = '<dt class="receivers">Recieved <i class="friendly-dtime" data-timestamp='+(convert_time(newPosition.server_time))+'></i> by:</dt><dd class="receivers">'
412429
+ newPosition.callsign.split(",").join(", ") + '</dd>'
413430

414431
if(!newPosition.callsign) c = '';
415432

433+
416434
// mid for portrait
417-
var p = '<dt>'+newPosition.gps_time+'</dt><dd>datetime</dd>'
435+
var p = '<dt>'+formatDate(stringToDateUTC(newPosition.gps_time))+'</dt><dd>datetime (local)</dd>'
418436
+ '<dt>'+coords_text+'</dt><dd>coordinates</dd>'
419437
+ c // receivers if any
420438
+ '</dl>'
@@ -428,7 +446,7 @@ function updateVehicleInfo(index, newPosition) {
428446
// mid for landscape
429447
var l = ((vehicle.vehicle_type == "car") ? '' : '<dt>'+ascent_text+' '+hrate_text+'</dt><dd>rate v|h</dd>')
430448
+ '<dt>'+text_alt+' ('+text_alt_max+')</dt><dd>altitude (max)</dd>'
431-
+ '<dt>'+newPosition.gps_time+'</dt><dd>datetime</dd>'
449+
+ '<dt>'+formatDate(stringToDateUTC(newPosition.gps_time))+'</dt><dd>datetime (local)</dd>'
432450
+ '<dt>'+coords_text+'</dt><dd>coordinates</dd>'
433451
+ habitat_data(newPosition.data)
434452
+ c // receivers if any
@@ -539,8 +557,8 @@ function updatePolyline(vehicle_index) {
539557
}
540558
}
541559

542-
function convert_time(gps_time) {
543-
return (new Date(gps_time)).getTime() / 1000; // seconds since 1/1/1970 @ 12:00 AM
560+
function convert_time(text) {
561+
return stringToDateUTC(text).getTime();
544562
}
545563

546564
var GChartString = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789';
@@ -559,8 +577,6 @@ function GChartEncodeData(valueArray,maxValue) {
559577
}
560578

561579
function addPosition(position) {
562-
position.gps_time = position.gps_time.replace(/(\d+)-(\d+)-(\d+)/,"$2/$3/$1");
563-
564580
// check if the vehicle is already in the list, if not create a new item
565581
if($.inArray(position.vehicle, vehicle_names) == -1) {
566582
vehicle_names.push(position.vehicle);
@@ -859,7 +875,7 @@ function graphAddLastPosition(idx) {
859875
vehicles[idx].graph_data_updated = true;
860876
var data = vehicles[idx].graph_data;
861877
var new_data = vehicles[idx].curr_position;
862-
var date = new Date(new_data.gps_time);
878+
var date = new Date(convert_time(new_data.gps_time));
863879
var tz_offset_milis = date.getTimezoneOffset() * 60000;
864880
var ts = date.getTime() - tz_offset_milis;
865881

0 commit comments

Comments
 (0)