@@ -122,7 +122,7 @@ var globalKeys = {
122
122
"ext_pressure" : "Pressure, External" ,
123
123
"subtype" : "Sonde Sub-type" ,
124
124
"frequency" : "Frequency" ,
125
- "frequency_tx " : "TX Frequency" ,
125
+ "tx_frequency " : "TX Frequency" ,
126
126
"manufacturer" : "Manufacturer" ,
127
127
"type" : "Sonde Type" ,
128
128
"burst_timer" : "Burst Timer" ,
@@ -158,11 +158,24 @@ var globalSuffixes = {
158
158
"humidity" : " %" ,
159
159
"ext_humidity" : " %" ,
160
160
"frequency" : " MHz" ,
161
- "frequency_tx " : " MHz" ,
161
+ "tx_frequency " : " MHz" ,
162
162
"noise_floor_dbm" : " dBm" ,
163
163
"spam" : ""
164
164
} ;
165
165
166
+ var keyOrder = [
167
+ "ascent_rate" ,
168
+ "batt" ,
169
+ "frequency" ,
170
+ "tx_frequency" ,
171
+ "humidity" ,
172
+ "pressure" ,
173
+ "sats" ,
174
+ "temp" ,
175
+ "comment" ,
176
+ "modulation"
177
+ ]
178
+
166
179
// localStorage vars
167
180
var ls_receivers = false ;
168
181
var ls_pred = false ;
@@ -866,24 +879,31 @@ function habitat_data(jsondata, alternative) {
866
879
867
880
var data = ( typeof jsondata === "string" ) ? $ . parseJSON ( jsondata ) : jsondata ;
868
881
var array = [ ] ;
882
+ var tempArray = [ ] ;
869
883
var output = "" ;
870
884
var txFreq = false
871
885
872
886
if ( Object . keys ( data ) . length === 0 ) return "" ;
873
887
874
- if ( "frequency_tx " in data ) {
888
+ if ( "tx_frequency " in data ) {
875
889
txFreq = true
876
890
}
877
891
878
- for ( var key in data ) {
879
- if ( key === "frequency" && txFreq ) { } else {
880
- array . push ( [ key , data [ key ] ] ) ;
892
+ for ( var field in keyOrder ) {
893
+ if ( keyOrder [ field ] in data ) {
894
+ if ( keyOrder [ field ] === "frequency" && txFreq ) { } else {
895
+ array . push ( [ keyOrder [ field ] , data [ keyOrder [ field ] ] ] ) ;
896
+ tempArray . push ( keyOrder [ field ] ) ;
897
+ }
881
898
}
882
899
}
883
900
884
- //array.sort(function(a, b) {
885
- // return a[0].localeCompare(b[0]);
886
- //});
901
+ for ( var key in data ) {
902
+ if ( ! tempArray . includes ( key ) ) {
903
+ array . push ( [ key , data [ key ] ] ) ;
904
+ tempArray . push ( key ) ;
905
+ }
906
+ }
887
907
888
908
for ( var i = 0 , ii = array . length ; i < ii ; i ++ ) {
889
909
var k = array [ i ] [ 0 ] ; // key
@@ -1404,7 +1424,7 @@ function updateVehicleInfo(vcallsign, newPosition) {
1404
1424
'<img class="' + ( ( vehicle . vehicle_type == "car" ) ?'car' :'' ) + '" src="' + image + '" />' +
1405
1425
'<span class="vbutton path ' + ( ( vehicle . polyline_visible ) ? 'active' : '' ) + '" data-vcallsign="' + vcallsign + '"' + ' style="top:' + ( vehicle . image_src_size [ 1 ] + 55 ) + 'px">Path</span>' +
1406
1426
( ( vehicle . vehicle_type != "car" ) ? '<span class="sbutton" onclick="shareVehicle(\'' + vcallsign + '\')" style="top:' + ( vehicle . image_src_size [ 1 ] + 85 ) + 'px">Share</span>' : '' ) +
1407
- ( ( vehicle . vehicle_type != "car" && newPosition . gps_alt > 1000 && vehicle . ascent_rate < 1 ) ? '<span class="sbutton hysplit ' + ( ( vehicle . prediction_hysplit_visible ) ? 'active' : '' ) + '" data-vcallsign="' + vcallsign + '" style="top:' + ( vehicle . image_src_size [ 1 ] + 115 ) + 'px">Float</span>' : '' ) +
1427
+ ( ( vehicle . vehicle_type != "car" && newPosition . gps_alt > 5000 && vehicle . ascent_rate < 1 && vehicle . ascent_rate > - 1 ) ? '<span class="sbutton hysplit ' + ( ( vehicle . prediction_hysplit_visible ) ? 'active' : '' ) + '" data-vcallsign="' + vcallsign + '" style="top:' + ( vehicle . image_src_size [ 1 ] + 115 ) + 'px">Float</span>' : '' ) +
1408
1428
'<div class="left">' +
1409
1429
'<dl>' ;
1410
1430
//mobile
@@ -1416,7 +1436,7 @@ function updateVehicleInfo(vcallsign, newPosition) {
1416
1436
'<img class="' + ( ( vehicle . vehicle_type == "car" ) ?'car' :'' ) + '" src="' + image + '" />' +
1417
1437
'<span class="vbutton path ' + ( ( vehicle . polyline_visible ) ? 'active' : '' ) + '" data-vcallsign="' + vcallsign + '"' + ' style="top:55px">Path</span>' +
1418
1438
( ( vehicle . vehicle_type != "car" ) ? '<span class="sbutton" onclick="shareVehicle(\'' + vcallsign + '\')" style="top:85px">Share</span>' : '' ) +
1419
- ( ( vehicle . vehicle_type != "car" && newPosition . gps_alt > 1000 && vehicle . ascent_rate < 1 ) ? '<span class="sbutton hysplit ' + ( ( vehicle . prediction_hysplit_visible ) ? 'active' : '' ) + '" data-vcallsign="' + vcallsign + '" style="top:115px">Float</span>' : '' ) +
1439
+ ( ( vehicle . vehicle_type != "car" && newPosition . gps_alt > 5000 && vehicle . ascent_rate < 1 && vehicle . ascent_rate > - 1 ) ? '<span class="sbutton hysplit ' + ( ( vehicle . prediction_hysplit_visible ) ? 'active' : '' ) + '" data-vcallsign="' + vcallsign + '" style="top:115px">Float</span>' : '' ) +
1420
1440
'<div class="left">' +
1421
1441
'<dl>' ;
1422
1442
var b = '</dl>' +
@@ -1513,7 +1533,17 @@ function createHysplit(callsign, adjustment) {
1513
1533
1514
1534
var altitude = Math . round ( vehicle . curr_position . gps_alt ) + adjustment ;
1515
1535
1516
- var endTime = new Date ( Date . parse ( vehicle . curr_position . gps_time ) ) ;
1536
+ var startTime = new Date ( Date . parse ( vehicle . curr_position . gps_time . replace ( "Z" , "" ) ) ) ;
1537
+ //max is 8h back so need to catch is older
1538
+ var nowTime = new Date ( ) ;
1539
+ var timeDifference = nowTime - startTime ;
1540
+ if ( timeDifference > 28800000 ) {
1541
+ nowTime . setHours ( nowTime . getHours ( ) - 8 ) ;
1542
+ startTime = nowTime ;
1543
+ }
1544
+ startTime = startTime . toISOString ( ) ;
1545
+
1546
+ var endTime = new Date ( Date . parse ( vehicle . curr_position . gps_time . replace ( "Z" , "" ) ) ) ;
1517
1547
endTime . setHours ( endTime . getHours ( ) + 84 ) ;
1518
1548
endTime = endTime . toISOString ( ) ;
1519
1549
@@ -1523,7 +1553,7 @@ function createHysplit(callsign, adjustment) {
1523
1553
+ "&launch_latitude=" + vehicle . curr_position . gps_lat
1524
1554
+ "&launch_longitude=" + lon
1525
1555
+ "&launch_altitude=" + ( altitude - 1 )
1526
- + "&launch_datetime=" + vehicle . curr_position . gps_time
1556
+ + "&launch_datetime=" + startTime
1527
1557
+ "&ascent_rate=0.1"
1528
1558
+ "&float_altitude=" + altitude
1529
1559
+ "&stop_datetime=" + endTime ;
@@ -2986,7 +3016,7 @@ function refresh() {
2986
3016
if ( wvar . query != null && JSON . stringify ( data ) . indexOf ( wvar . query ) == - 1 ) {
2987
3017
refreshSingle ( wvar . query ) ;
2988
3018
} else {
2989
- response = formatData ( data , false ) ;
3019
+ response = formatData ( data ) ;
2990
3020
update ( response , true ) ;
2991
3021
$ ( "#stTimer" ) . attr ( "data-timestamp" , response . fetch_timestamp ) ;
2992
3022
}
@@ -3026,7 +3056,7 @@ function refreshSingle(serial) {
3026
3056
url : data_url ,
3027
3057
dataType : "json" ,
3028
3058
success : function ( data , textStatus ) {
3029
- response = formatData ( data , false ) ;
3059
+ response = formatData ( data ) ;
3030
3060
update ( response , true ) ;
3031
3061
$ ( "#stText" ) . text ( "" ) ;
3032
3062
} ,
@@ -3067,7 +3097,7 @@ function refreshSingleNew(serial) {
3067
3097
data : data_str ,
3068
3098
dataType : "json" ,
3069
3099
success : function ( data , textStatus ) {
3070
- response = formatData ( data , false ) ;
3100
+ response = formatData ( data ) ;
3071
3101
update ( response , true ) ;
3072
3102
} ,
3073
3103
error : function ( ) {
@@ -3144,7 +3174,7 @@ function liveData() {
3144
3174
var tempDate = new Date ( frame [ frame . length - 1 ] [ "1" ] . time_received ) . getTime ( )
3145
3175
}
3146
3176
if ( ( dateNow - tempDate ) < 30000 ) {
3147
- var test = formatData ( frame , true ) ;
3177
+ var test = formatData ( frame ) ;
3148
3178
if ( clientActive ) {
3149
3179
live_data_buffer . positions . position . push . apply ( live_data_buffer . positions . position , test . positions . position )
3150
3180
}
0 commit comments