@@ -122,7 +122,7 @@ var globalKeys = {
122122 "ext_pressure" : "Pressure, External" ,
123123 "subtype" : "Sonde Sub-type" ,
124124 "frequency" : "Frequency" ,
125- "frequency_tx " : "TX Frequency" ,
125+ "tx_frequency " : "TX Frequency" ,
126126 "manufacturer" : "Manufacturer" ,
127127 "type" : "Sonde Type" ,
128128 "burst_timer" : "Burst Timer" ,
@@ -158,11 +158,24 @@ var globalSuffixes = {
158158 "humidity" : " %" ,
159159 "ext_humidity" : " %" ,
160160 "frequency" : " MHz" ,
161- "frequency_tx " : " MHz" ,
161+ "tx_frequency " : " MHz" ,
162162 "noise_floor_dbm" : " dBm" ,
163163 "spam" : ""
164164} ;
165165
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+
166179// localStorage vars
167180var ls_receivers = false ;
168181var ls_pred = false ;
@@ -866,24 +879,31 @@ function habitat_data(jsondata, alternative) {
866879
867880 var data = ( typeof jsondata === "string" ) ? $ . parseJSON ( jsondata ) : jsondata ;
868881 var array = [ ] ;
882+ var tempArray = [ ] ;
869883 var output = "" ;
870884 var txFreq = false
871885
872886 if ( Object . keys ( data ) . length === 0 ) return "" ;
873887
874- if ( "frequency_tx " in data ) {
888+ if ( "tx_frequency " in data ) {
875889 txFreq = true
876890 }
877891
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+ }
881898 }
882899 }
883900
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+ }
887907
888908 for ( var i = 0 , ii = array . length ; i < ii ; i ++ ) {
889909 var k = array [ i ] [ 0 ] ; // key
@@ -1404,7 +1424,7 @@ function updateVehicleInfo(vcallsign, newPosition) {
14041424 '<img class="' + ( ( vehicle . vehicle_type == "car" ) ?'car' :'' ) + '" src="' + image + '" />' +
14051425 '<span class="vbutton path ' + ( ( vehicle . polyline_visible ) ? 'active' : '' ) + '" data-vcallsign="' + vcallsign + '"' + ' style="top:' + ( vehicle . image_src_size [ 1 ] + 55 ) + 'px">Path</span>' +
14061426 ( ( 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>' : '' ) +
14081428 '<div class="left">' +
14091429 '<dl>' ;
14101430 //mobile
@@ -1416,7 +1436,7 @@ function updateVehicleInfo(vcallsign, newPosition) {
14161436 '<img class="' + ( ( vehicle . vehicle_type == "car" ) ?'car' :'' ) + '" src="' + image + '" />' +
14171437 '<span class="vbutton path ' + ( ( vehicle . polyline_visible ) ? 'active' : '' ) + '" data-vcallsign="' + vcallsign + '"' + ' style="top:55px">Path</span>' +
14181438 ( ( 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>' : '' ) +
14201440 '<div class="left">' +
14211441 '<dl>' ;
14221442 var b = '</dl>' +
@@ -1513,7 +1533,17 @@ function createHysplit(callsign, adjustment) {
15131533
15141534 var altitude = Math . round ( vehicle . curr_position . gps_alt ) + adjustment ;
15151535
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" , "" ) ) ) ;
15171547 endTime . setHours ( endTime . getHours ( ) + 84 ) ;
15181548 endTime = endTime . toISOString ( ) ;
15191549
@@ -1523,7 +1553,7 @@ function createHysplit(callsign, adjustment) {
15231553 + "&launch_latitude=" + vehicle . curr_position . gps_lat
15241554 + "&launch_longitude=" + lon
15251555 + "&launch_altitude=" + ( altitude - 1 )
1526- + "&launch_datetime=" + vehicle . curr_position . gps_time
1556+ + "&launch_datetime=" + startTime
15271557 + "&ascent_rate=0.1"
15281558 + "&float_altitude=" + altitude
15291559 + "&stop_datetime=" + endTime ;
@@ -2986,7 +3016,7 @@ function refresh() {
29863016 if ( wvar . query != null && JSON . stringify ( data ) . indexOf ( wvar . query ) == - 1 ) {
29873017 refreshSingle ( wvar . query ) ;
29883018 } else {
2989- response = formatData ( data , false ) ;
3019+ response = formatData ( data ) ;
29903020 update ( response , true ) ;
29913021 $ ( "#stTimer" ) . attr ( "data-timestamp" , response . fetch_timestamp ) ;
29923022 }
@@ -3026,7 +3056,7 @@ function refreshSingle(serial) {
30263056 url : data_url ,
30273057 dataType : "json" ,
30283058 success : function ( data , textStatus ) {
3029- response = formatData ( data , false ) ;
3059+ response = formatData ( data ) ;
30303060 update ( response , true ) ;
30313061 $ ( "#stText" ) . text ( "" ) ;
30323062 } ,
@@ -3067,7 +3097,7 @@ function refreshSingleNew(serial) {
30673097 data : data_str ,
30683098 dataType : "json" ,
30693099 success : function ( data , textStatus ) {
3070- response = formatData ( data , false ) ;
3100+ response = formatData ( data ) ;
30713101 update ( response , true ) ;
30723102 } ,
30733103 error : function ( ) {
@@ -3144,7 +3174,7 @@ function liveData() {
31443174 var tempDate = new Date ( frame [ frame . length - 1 ] [ "1" ] . time_received ) . getTime ( )
31453175 }
31463176 if ( ( dateNow - tempDate ) < 30000 ) {
3147- var test = formatData ( frame , true ) ;
3177+ var test = formatData ( frame ) ;
31483178 if ( clientActive ) {
31493179 live_data_buffer . positions . position . push . apply ( live_data_buffer . positions . position , test . positions . position )
31503180 }
0 commit comments