diff --git a/public_html/index.html b/public_html/index.html
index 38180fb..6ae222f 100644
--- a/public_html/index.html
+++ b/public_html/index.html
@@ -212,109 +212,126 @@
-
-
-
+
+
+
+
+
-
-
-
Columns
-
-
-
Select/Deselect All
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
Select/Deselect All
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
@@ -372,14 +389,14 @@
-
-
ADS-B
-
-
MLAT
-
-
Other
-
-
TIS-B
+
+
ADS-B
+
+
MLAT
+
+
Other
+
+
TIS-B
diff --git a/public_html/planeObject.js b/public_html/planeObject.js
index c55677c..a02c2ac 100644
--- a/public_html/planeObject.js
+++ b/public_html/planeObject.js
@@ -109,6 +109,31 @@ function PlaneObject(icao) {
}
PlaneObject.prototype.isFiltered = function() {
+ // aircraft type filter
+ if (this.filter.aircraftTypeCode) {
+ if (this.icaotype === null || (typeof this.icaotype === 'string' && !this.icaotype.toUpperCase().trim().match(this.filter.aircraftTypeCode))) {
+ return true;
+ }
+ }
+
+ // aircraft ident filter
+ if (this.filter.aircraftIdent) {
+ if (this.flight === null || (typeof this.flight === 'string' && !this.flight.toUpperCase().trim().match(this.filter.aircraftIdent))) {
+ return true;
+ }
+ }
+
+ var dataSource = this.getDataSource();
+ if (dataSource === 'adsb_icao') {
+ if (!this.filter.ADSB) return true;
+ } else if (dataSource === 'mlat') {
+ if (!this.filter.MLAT) return true;
+ } else if (dataSource === 'tisb_trackfile' || dataSource === 'tisb_icao' || dataSource === 'tisb_other') {
+ if (!this.filter.TISB) return true;
+ } else {
+ if (!this.filter.Other) return true;
+ }
+
if (this.filter.minAltitude !== undefined && this.filter.maxAltitude !== undefined) {
if (this.altitude === null || this.altitude === undefined) {
return true;
diff --git a/public_html/script.js b/public_html/script.js
index 09cb14a..4c3f123 100644
--- a/public_html/script.js
+++ b/public_html/script.js
@@ -16,6 +16,7 @@ var HighlightedPlane = null;
var FollowSelected = false;
var infoBoxOriginalPosition = {};
var customAltitudeColors = true;
+var myAdsbStatsSiteUrl = null;
var SpecialSquawks = {
'7500' : { cssClass: 'squawk7500', markerColor: 'rgb(255, 85, 85)', text: 'Aircraft Hijacking' },
@@ -217,6 +218,8 @@ function initialize() {
flightFeederCheck();
+ setStatsLink();
+
PlaneRowTemplate = document.getElementById("plane_row_template");
refreshClock();
@@ -321,20 +324,21 @@ function initialize() {
}
+
$("#altitude_filter_reset_button").click(onResetAltitudeFilter);
+ $("#aircraft_type_filter_form").submit(onFilterByAircraftType);
+ $("#aircraft_type_filter_reset_button").click(onResetAircraftTypeFilter);
+
+
+ $("#aircraft_ident_filter_form").submit(onFilterByAircraftIdent);
+ $("#aircraft_ident_filter_reset_button").click(onResetAircraftIdentFilter);
+
+
$('#settingsCog').on('click', function() {
$('#settings_infoblock').toggle();
});
- $('#column_select').on('click', function() {
- $('#column_select_window').toggle();
- });
-
- $('#column_select_close_box').on('click', function() {
- $('#column_select_window').hide();
- });
-
$('#settings_close').on('click', function() {
$('#settings_infoblock').hide();
});
@@ -369,6 +373,43 @@ function initialize() {
toggleAllColumns(true);
})
+ $('#adsb_datasource_checkbox').on('click', function() {
+ toggleADSBAircraft(true);
+ refreshDataSourceFilters();
+ })
+
+ $('#mlat_datasource_checkbox').on('click', function() {
+ toggleMLATAircraft(true);
+ refreshDataSourceFilters();
+ })
+
+ $('#other_datasource_checkbox').on('click', function() {
+ toggleOtherAircraft(true);
+ refreshDataSourceFilters();
+ })
+
+ $('#tisb_datasource_checkbox').on('click', function() {
+ toggleTISBAircraft(true);
+ refreshDataSourceFilters();
+ })
+
+ $('#column_select_button').on('click', function() {
+ this.classList.toggle("config_button_active");
+ $('#column_select_panel').toggle();
+ });
+
+
+ $('#filter_button').on('click', function() {
+ this.classList.toggle("config_button_active");
+ $('#filter_panel').toggle();
+ });
+
+ $('#stats_page_button').on('click', function() {
+ if (myAdsbStatsSiteUrl) {
+ window.open(myAdsbStatsSiteUrl);
+ }
+ });
+
// Event handlers for to column checkboxes
checkbox_div_map.forEach(function (checkbox, div) {
$(div).on('click', function() {
@@ -383,12 +424,18 @@ function initialize() {
mapResizeTimeout = setTimeout(updateMapSize, 10);
});
+ // Initialize settings from local storage
filterGroundVehicles(false);
filterBlockedMLAT(false);
toggleAltitudeChart(false);
toggleAllPlanes(false);
toggleGroupByDataType(false);
toggleAllColumns(false);
+ toggleADSBAircraft(false);
+ toggleMLATAircraft(false);
+ toggleOtherAircraft(false);
+ toggleTISBAircraft(false);
+ refreshDataSourceFilters();
// Get receiver metadata, reconfigure using it, then continue
// with initialization
@@ -1118,24 +1165,23 @@ function refreshSelected() {
// emerg.className = 'hidden';
// }
- $("#selected_altitude").text(format_altitude_long(selected.altitude, selected.vert_rate, DisplayUnits));
-
- $('#selected_onground').text(format_onground(selected.altitude));
+ $("#selected_altitude").text(format_altitude_long(selected.altitude, selected.vert_rate, DisplayUnits));
+ $('#selected_onground').text(format_onground(selected.altitude));
if (selected.squawk === null || selected.squawk === '0000') {
$('#selected_squawk').text('n/a');
} else {
$('#selected_squawk').text(selected.squawk);
}
-
- $('#selected_speed').text(format_speed_long(selected.gs, DisplayUnits));
- $('#selected_ias').text(format_speed_long(selected.ias, DisplayUnits));
- $('#selected_tas').text(format_speed_long(selected.tas, DisplayUnits));
- $('#selected_vertical_rate').text(format_vert_rate_long(selected.baro_rate, DisplayUnits));
- $('#selected_vertical_rate_geo').text(format_vert_rate_long(selected.geom_rate, DisplayUnits));
+
+ $('#selected_speed').text(format_speed_long(selected.gs, DisplayUnits));
+ $('#selected_ias').text(format_speed_long(selected.ias, DisplayUnits));
+ $('#selected_tas').text(format_speed_long(selected.tas, DisplayUnits));
+ $('#selected_vertical_rate').text(format_vert_rate_long(selected.baro_rate, DisplayUnits));
+ $('#selected_vertical_rate_geo').text(format_vert_rate_long(selected.geom_rate, DisplayUnits));
$('#selected_icao').text(selected.icao.toUpperCase());
$('#airframes_post_icao').attr('value',selected.icao);
- $('#selected_track').text(format_track_long(selected.track));
+ $('#selected_track').text(format_track_long(selected.track));
if (selected.seen <= 1) {
$('#selected_seen').text('now');
@@ -1158,7 +1204,7 @@ function refreshSelected() {
$('#selected_flag').addClass('hidden');
}
- if (selected.position === null) {
+ if (selected.position === null) {
$('#selected_position').text('n/a');
$('#selected_follow').addClass('hidden');
} else {
@@ -1171,23 +1217,24 @@ function refreshSelected() {
} else {
$('#selected_follow').css('font-weight', 'normal');
}
- }
- if (selected.getDataSource() === "adsb_icao") {
- $('#selected_source').text("ADS-B");
- } else if (selected.getDataSource() === "tisb_trackfile" || selected.getDataSource() === "tisb_icao" || selected.getDataSource() === "tisb_other") {
- $('#selected_source').text("TIS-B");
- } else if (selected.getDataSource() === "mlat") {
- $('#selected_source').text("MLAT");
- } else {
- $('#selected_source').text("Other");
- }
- $('#selected_category').text(selected.category ? selected.category : "n/a");
+ }
+
+ if (selected.getDataSource() === "adsb_icao") {
+ $('#selected_source').text("ADS-B");
+ } else if (selected.getDataSource() === "tisb_trackfile" || selected.getDataSource() === "tisb_icao" || selected.getDataSource() === "tisb_other") {
+ $('#selected_source').text("TIS-B");
+ } else if (selected.getDataSource() === "mlat") {
+ $('#selected_source').text("MLAT");
+ } else {
+ $('#selected_source').text("Other");
+ }
+
+ $('#selected_category').text(selected.category ? selected.category : "n/a");
$('#selected_sitedist').text(format_distance_long(selected.sitedist, DisplayUnits));
$('#selected_rssi').text(selected.rssi.toFixed(1) + ' dBFS');
$('#selected_message_count').text(selected.messages);
- $('#selected_photo_link').html(getFlightAwarePhotoLink(selected.registration));
-
- $('#selected_altitude_geom').text(format_altitude_long(selected.alt_geom, selected.geom_rate, DisplayUnits));
+ $('#selected_photo_link').html(getFlightAwarePhotoLink(selected.registration));
+ $('#selected_altitude_geom').text(format_altitude_long(selected.alt_geom, selected.geom_rate, DisplayUnits));
$('#selected_mag_heading').text(format_track_long(selected.mag_heading));
$('#selected_true_heading').text(format_track_long(selected.true_heading));
$('#selected_ias').text(format_speed_long(selected.ias, DisplayUnits));
@@ -1977,6 +2024,31 @@ function onFilterByAltitude(e) {
}
}
+function onFilterByAircraftType(e) {
+ e.preventDefault();
+ updatePlaneFilter();
+ refreshTableInfo();
+}
+
+function onResetAircraftTypeFilter(e) {
+ $("#aircraft_type_filter").val("");
+ updatePlaneFilter();
+ refreshTableInfo();
+}
+
+
+function onFilterByAircraftIdent(e) {
+ e.preventDefault();
+ updatePlaneFilter();
+ refreshTableInfo();
+}
+
+function onResetAircraftIdentFilter(e) {
+ $("#aircraft_ident_filter").val("");
+ updatePlaneFilter();
+ refreshTableInfo();
+}
+
function filterGroundVehicles(switchFilter) {
if (typeof localStorage['groundVehicleFilter'] === 'undefined') {
localStorage.setItem('groundVehicleFilter' , 'not_filtered');
@@ -2065,6 +2137,26 @@ function updatePlaneFilter() {
PlaneFilter.minAltitude = minAltitude;
PlaneFilter.maxAltitude = maxAltitude;
PlaneFilter.altitudeUnits = DisplayUnits;
+
+ var aircraftTypeCode = $("#aircraft_type_filter").val().trim().toUpperCase()
+ if (aircraftTypeCode === "") {
+ aircraftTypeCode = undefined
+ }
+
+ var aircraftIdent = $("#aircraft_ident_filter").val().trim().toUpperCase()
+ if (aircraftIdent === "") {
+ aircraftIdent = undefined
+ }
+
+ PlaneFilter.aircraftTypeCode = aircraftTypeCode;
+ PlaneFilter.aircraftIdent = aircraftIdent;
+}
+
+function refreshDataSourceFilters () {
+ PlaneFilter.ADSB = (localStorage.getItem('sourceADSBFilter') === 'selected') ? true : false;
+ PlaneFilter.MLAT = (localStorage.getItem('sourceMLATFilter') === 'selected') ? true : false;
+ PlaneFilter.Other = (localStorage.getItem('sourceOtherFilter') === 'selected') ? true : false;
+ PlaneFilter.TISB = (localStorage.getItem('sourceTISBFilter') === 'selected') ? true : false;
}
function getFlightAwareIdentLink(ident, linkText) {
@@ -2151,6 +2243,20 @@ function flightFeederCheck() {
})
}
+function setStatsLink() {
+ $.ajax('/status.json', {
+ success: function(data) {
+ if (data.unclaimed_feeder_id) {
+ var claim_link = "https://flightaware.com/adsb/piaware/claim/" + data.unclaimed_feeder_id;
+ $('#stats_page_button').text("Claim this feeder on FlightAware")
+ myAdsbStatsSiteUrl = claim_link;
+ } else if (data.site_url) {
+ myAdsbStatsSiteUrl = data.site_url;
+ }
+ }
+ })
+}
+
// updates the page to replace piaware with flightfeeder references
function updatePiAwareOrFlightFeeder() {
if (isFlightFeeder) {
@@ -2357,3 +2463,71 @@ function toggleAllColumns(switchToggle) {
localStorage.setItem('selectAllColumnsCheckbox', selectAllColumnsCheckbox);
}
+
+function toggleADSBAircraft(switchFilter) {
+ if (typeof localStorage['sourceADSBFilter'] === 'undefined') {
+ localStorage.setItem('sourceADSBFilter','selected');
+ }
+
+ var sourceADSBFilter = localStorage.getItem('sourceADSBFilter');
+ if (switchFilter === true) {
+ sourceADSBFilter = (sourceADSBFilter === 'deselected') ? 'selected' : 'deselected';
+ }
+ if (sourceADSBFilter === 'deselected') {
+ $('#adsb_datasource_checkbox').removeClass('sourceCheckboxChecked');
+ } else {
+ $('#adsb_datasource_checkbox').addClass('sourceCheckboxChecked');
+ }
+ localStorage.setItem('sourceADSBFilter', sourceADSBFilter);
+}
+
+function toggleMLATAircraft(switchFilter) {
+ if (typeof localStorage['sourceMLATFilter'] === 'undefined') {
+ localStorage.setItem('sourceMLATFilter','selected');
+ }
+
+ var sourceMLATFilter = localStorage.getItem('sourceMLATFilter');
+ if (switchFilter === true) {
+ sourceMLATFilter = (sourceMLATFilter === 'deselected') ? 'selected' : 'deselected';
+ }
+ if (sourceMLATFilter === 'deselected') {
+ $('#mlat_datasource_checkbox').removeClass('sourceCheckboxChecked');
+ } else {
+ $('#mlat_datasource_checkbox').addClass('sourceCheckboxChecked');
+ }
+ localStorage.setItem('sourceMLATFilter', sourceMLATFilter);
+}
+
+function toggleOtherAircraft(switchFilter) {
+ if (typeof localStorage['sourceOtherFilter'] === 'undefined') {
+ localStorage.setItem('sourceOtherFilter','selected');
+ }
+
+ var sourceOtherFilter = localStorage.getItem('sourceOtherFilter');
+ if (switchFilter === true) {
+ sourceOtherFilter = (sourceOtherFilter === 'deselected') ? 'selected' : 'deselected';
+ }
+ if (sourceOtherFilter === 'deselected') {
+ $('#other_datasource_checkbox').removeClass('sourceCheckboxChecked');
+ } else {
+ $('#other_datasource_checkbox').addClass('sourceCheckboxChecked');
+ }
+ localStorage.setItem('sourceOtherFilter', sourceOtherFilter);
+}
+
+function toggleTISBAircraft(switchFilter) {
+ if (typeof localStorage['sourceTISBFilter'] === 'undefined') {
+ localStorage.setItem('sourceTISBFilter','selected');
+ }
+
+ var sourceTISBFilter = localStorage.getItem('sourceTISBFilter');
+ if (switchFilter === true) {
+ sourceTISBFilter = (sourceTISBFilter === 'deselected') ? 'selected' : 'deselected';
+ }
+ if (sourceTISBFilter === 'deselected') {
+ $('#tisb_datasource_checkbox').removeClass('sourceCheckboxChecked');
+ } else {
+ $('#tisb_datasource_checkbox').addClass('sourceCheckboxChecked');
+ }
+ localStorage.setItem('sourceTISBFilter', sourceTISBFilter);
+}
diff --git a/public_html/style.css b/public_html/style.css
index 9b2c66f..84d7fe1 100644
--- a/public_html/style.css
+++ b/public_html/style.css
@@ -55,47 +55,6 @@ html, body {
overflow-x: scroll;
}
-#column_select {
- position: relative;
- float: right;
- background-color: #002F5D;
- color: #FFFFFF;
-}
-
-#column_select_window {
- position: absolute;
- right: 1px;
- top: 80px;
- width: 150px;
- min-height: 180px;
- background: #ffffff;
- box-shadow: 4px 4px 10px #444444;
- padding: 20px;
- z-index: 9999;
- display: none;
-}
-
-#column_select_header {
- display: table;
- background-color: #002F5D;
- color: #ffffff;
- font-size: smaller;
- padding: 5px;
- text-align: center;
- width: 120px;
-}
-
-#column_select_close_box {
- position: absolute;
- right: 15px;
- top: 21px;
- background-image: url('images/close-settings.png');
- background-size: cover;
- width: 20px;
- height: 20px;
- cursor: pointer;
-}
-
.columnOptionContainer {
position: relative;
display: table;
@@ -271,7 +230,9 @@ div#loader { z-index: 99; position: absolute; left: 0; top: 0; bottom: 0; right:
}
#units_container,
-#altitude_filter_form {
+#altitude_filter_form,
+#aircraft_type_filter_form,
+#aircraft_ident_filter_form {
font-size: small;
margin: 10px 0 10px 0;
}
@@ -333,6 +294,10 @@ div#loader { z-index: 99; position: absolute; left: 0; top: 0; bottom: 0; right:
width: 50px;
}
+.aircraftFilterInput {
+ width: 80px;
+}
+
.rangeRingsInput {
width: 30px;
float: right;
@@ -683,8 +648,10 @@ select.error, textarea.error, input.error {
.legendTitle {
line-height: 19px;
display: inline-block;
- padding-right: 20px;
+ padding-right: 5px;
padding-left: 5px;
+ border-radius: 5px;
+ margin-right: 20px;
}
#settings_infoblock {
@@ -723,6 +690,22 @@ select.error, textarea.error, input.error {
background-image: url('images/box-checked.png') !important;
}
+.sourceCheckbox {
+ width: 13px;
+ height: 13px;
+ background-image: url('images/box-empty.png');
+ background-repeat: no-repeat;
+ background-position: center;
+ background-size: contain;
+ cursor: pointer;
+ margin-top: 3px;
+ margin-right: 3px;
+}
+
+.sourceCheckboxChecked {
+ background-image: url('images/box-checked.png') !important;
+}
+
.settingsCloseBox {
position: absolute;
right: 8px;
@@ -861,3 +844,37 @@ select.error, textarea.error, input.error {
background-image: url("images/map-icon@3x.png");
}
}
+
+.config_button {
+ position: relative;
+ background-color: #FEBC11;
+ color: #002F5D;
+ cursor: pointer;
+ text-align: center;
+ width: auto;
+}
+
+.config_button:hover, .config_button_active {
+ background-color: #abcad8;
+}
+
+.config_button_row {
+ position: relative;
+ margin-top: 5px;
+ padding: 3px 0 3px 0;
+
+}
+
+.panel {
+ position: relative;
+ padding: 3px 3px 10px 3px;
+ display: none;
+ margin-bottom: 5px;
+ border: solid;
+ border-color: #002F5D;
+}
+
+.wrapper {
+ display: grid;
+ grid-template-columns: repeat(3, 1fr);
+ }
\ No newline at end of file