noUiSlider for altitude filtering plus other styling

This commit is contained in:
eric1tran 2020-12-14 06:34:40 +00:00
parent af4951a494
commit 22e02dbc62
3 changed files with 144 additions and 70 deletions

View File

@ -14,6 +14,9 @@
<link rel="stylesheet" href="ol/ol-layerswitcher.css" type="text/css"/> <link rel="stylesheet" href="ol/ol-layerswitcher.css" type="text/css"/>
<script src="ol/ol-layerswitcher.js" type="text/javascript"></script> <script src="ol/ol-layerswitcher.js" type="text/javascript"></script>
<script src="noUiSlider/distribute/nouislider.min.js"></script>
<link rel="stylesheet" href="noUiSlider/distribute/nouislider.min.css"/>
<script type="text/javascript" src="config.js?v=4.0"></script> <script type="text/javascript" src="config.js?v=4.0"></script>
<script type="text/javascript" src="markers.js?v=4.0"></script> <script type="text/javascript" src="markers.js?v=4.0"></script>
<script type="text/javascript" src="dbloader.js?v=4.0"></script> <script type="text/javascript" src="dbloader.js?v=4.0"></script>
@ -220,31 +223,38 @@
</div> </div>
<div id="filter_panel" class="panel"> <div id="filter_panel" class="panel">
<form id="altitude_filter_form"> <div class="group">
<label><span class="infoBlockTitleText">Filter by Altitude:</span></label> <label><span class="infoBlockTitleText">Filter by Altitude</span></label>
<input id="altitude_filter_min" name="minAltitude" type="text" class="altitudeFilterInput" maxlength="5"> <div class="align_right">
<label for="minAltitude" class="altitudeUnit"></label> <span id="minAltitudeText" class="infoBlockTitleText"></span>
<span> to </span> <label for="minAltitude" class="altitudeUnit"></label>
<input id="altitude_filter_max" name="maxAltitude" type="text" class="altitudeFilterInput" maxlength="5"> <span> to </span>
<label for="maxAltitude" class="altitudeUnit"></label> <span id="maxAltitudeText" class="infoBlockTitleText"></span>
<button type="submit">Filter</button> <label for="maxAltitude" class="altitudeUnit"></label>
<button id="altitude_filter_reset_button">Reset</button> </div>
</form> <div id="altitude_slider"></div>
<form id="aircraft_type_filter_form"> </div>
<label><span class="infoBlockTitleText">Filter by Aircraft Type:</span></label> <div class="group">
<input id="aircraft_type_filter" name="aircraftTypeFilter" type="text" class="aircraftFilterInput" maxlength="5"> <form id="aircraft_type_filter_form">
<button type="submit">Filter</button> <label><span class="infoBlockTitleText">Filter by Aircraft Type</span></label>
<button id="aircraft_type_filter_reset_button">Reset</button> <div class="align_right">
</form> <input id="aircraft_type_filter" name="aircraftTypeFilter" type="text" class="aircraftFilterInput" maxlength="5">
<button type="submit">Filter</button>
<form id="aircraft_ident_filter_form"> <button id="aircraft_type_filter_reset_button">Reset</button>
<label><span class="infoBlockTitleText">Filter by Aircraft Ident:</span></label> </div>
<input id="aircraft_ident_filter" name="aircraftIdentFilter" type="text" class="aircraftFilterInput" maxlength="10"> </form>
<button type="submit">Filter</button> </div>
<button id="aircraft_ident_filter_reset_button">Reset</button> <div class="group">
</form> <form id="aircraft_ident_filter_form">
<label><span class="infoBlockTitleText">Filter by Aircraft Ident</span></label>
<div class="align_right">
<input id="aircraft_ident_filter" name="aircraftIdentFilter" type="text" class="aircraftFilterInput" maxlength="10">
<button type="submit">Filter</button>
<button id="aircraft_ident_filter_reset_button">Reset</button>
</div>
</form>
</div>
</div> </div>
<div id="column_select_panel" class="panel"> <div id="column_select_panel" class="panel">
<div class="columnOptionSelectAllContainer"> <div class="columnOptionSelectAllContainer">
<div class="columnSelectAllCheckbox" id="select_all_column_checkbox"></div> <div class="columnSelectAllCheckbox" id="select_all_column_checkbox"></div>

View File

@ -52,6 +52,8 @@ var NBSP='\u00a0';
var layers; var layers;
var layerGroup; var layerGroup;
var altitude_slider = null;
// piaware vs flightfeeder // piaware vs flightfeeder
var isFlightFeeder = false; var isFlightFeeder = false;
@ -180,7 +182,7 @@ function fetchData() {
var plane = PlanesOrdered[i]; var plane = PlanesOrdered[i];
plane.updateTick(now, LastReceiverTimestamp); plane.updateTick(now, LastReceiverTimestamp);
} }
selectNewPlanes(); selectNewPlanes();
refreshTableInfo(); refreshTableInfo();
refreshSelected(); refreshSelected();
@ -297,25 +299,42 @@ function initialize() {
// Initialize other controls // Initialize other controls
initializeUnitsSelector(); initializeUnitsSelector();
// Set up altitude filter button event handlers and validation options altitude_slider = document.getElementById('altitude_slider');
$("#altitude_filter_form").submit(onFilterByAltitude);
$("#altitude_filter_form").validate({ noUiSlider.create(altitude_slider, {
errorPlacement: function(error, element) { start: [0, 50000],
return true; connect: true,
}, range: {
'min': 0,
rules: { 'max': 50000
minAltitude: {
number: true,
min: -99999,
max: 99999
}, },
maxAltitude: { step: 5,
number: true, format: {
min: -99999, // 'to' the formatted value. Receives a number.
max: 99999 to: function (value) {
return value;
},
// 'from' the formatted value.
// Receives a string, should return a number.
from: function (value) {
return value;
}
}
});
var minAltitudeInput = document.getElementById('minAltitudeText'),
maxAltitudeInput = document.getElementById('maxAltitudeText');
altitude_slider.noUiSlider.on('update', function (values, handle) {
if (handle) {
maxAltitudeInput.innerHTML = values[handle];
} else {
minAltitudeInput.innerHTML = values[handle];
} }
} });
altitude_slider.noUiSlider.on('set', function (values, handle) {
onFilterByAltitude();
}); });
// check if the altitude color values are default to enable the altitude filter // check if the altitude color values are default to enable the altitude filter
@ -323,14 +342,9 @@ function initialize() {
customAltitudeColors = false; customAltitudeColors = false;
} }
$("#altitude_filter_reset_button").click(onResetAltitudeFilter);
$("#aircraft_type_filter_form").submit(onFilterByAircraftType); $("#aircraft_type_filter_form").submit(onFilterByAircraftType);
$("#aircraft_type_filter_reset_button").click(onResetAircraftTypeFilter); $("#aircraft_type_filter_reset_button").click(onResetAircraftTypeFilter);
$("#aircraft_ident_filter_form").submit(onFilterByAircraftIdent); $("#aircraft_ident_filter_form").submit(onFilterByAircraftIdent);
$("#aircraft_ident_filter_reset_button").click(onResetAircraftIdentFilter); $("#aircraft_ident_filter_reset_button").click(onResetAircraftIdentFilter);
@ -2008,8 +2022,7 @@ function setAltitudeLegend(units) {
} }
} }
function onFilterByAltitude(e) { function onFilterByAltitude() {
e.preventDefault();
updatePlaneFilter(); updatePlaneFilter();
refreshTableInfo(); refreshTableInfo();
@ -2114,25 +2127,12 @@ function toggleAltitudeChart(switchToggle) {
localStorage.setItem('altitudeChart', altitudeChartDisplay); localStorage.setItem('altitudeChart', altitudeChartDisplay);
} }
function onResetAltitudeFilter(e) {
$("#altitude_filter_min").val("");
$("#altitude_filter_max").val("");
updatePlaneFilter();
refreshTableInfo();
}
function updatePlaneFilter() { function updatePlaneFilter() {
var minAltitude = parseFloat($("#altitude_filter_min").val().trim()); var minAltitude = document.getElementById('minAltitudeText').innerHTML.trim();
var maxAltitude = parseFloat($("#altitude_filter_max").val().trim()); var maxAltitude = document.getElementById('maxAltitudeText').innerHTML.trim();
if (minAltitude === NaN) { console.log("minAltitude: " + minAltitude);
minAltitude = -Infinity; console.log("maxAltitude: " + maxAltitude);
}
if (maxAltitude === NaN) {
maxAltitude = Infinity;
}
PlaneFilter.minAltitude = minAltitude; PlaneFilter.minAltitude = minAltitude;
PlaneFilter.maxAltitude = maxAltitude; PlaneFilter.maxAltitude = maxAltitude;

View File

@ -230,9 +230,7 @@ div#loader { z-index: 99; position: absolute; left: 0; top: 0; bottom: 0; right:
} }
#units_container, #units_container,
#altitude_filter_form, #altitude_filter_form {
#aircraft_type_filter_form,
#aircraft_ident_filter_form {
font-size: small; font-size: small;
margin: 10px 0 10px 0; margin: 10px 0 10px 0;
} }
@ -246,6 +244,9 @@ div#loader { z-index: 99; position: absolute; left: 0; top: 0; bottom: 0; right:
font-size: smaller; font-size: smaller;
padding: 5px; padding: 5px;
text-align: center; text-align: center;
border-radius: 4px;
-webkit-border-radius: 4px;
-moz-border-radius: 4px;
} }
.verticalRateTriangle { .verticalRateTriangle {
@ -852,6 +853,9 @@ select.error, textarea.error, input.error {
cursor: pointer; cursor: pointer;
text-align: center; text-align: center;
width: auto; width: auto;
border-radius: 4px;
-webkit-border-radius: 4px;
-moz-border-radius: 4px;
} }
.config_button:hover, .config_button_active { .config_button:hover, .config_button_active {
@ -866,15 +870,75 @@ select.error, textarea.error, input.error {
} }
.panel { .panel {
background-color: white;
position: relative; position: relative;
padding: 3px 3px 10px 3px; padding: 3px 3px 10px 3px;
display: none; display: none;
margin-bottom: 5px; margin-bottom: 5px;
border: solid; border: solid;
border-color: #002F5D; border-color: #002F5D;
height: auto;
border-radius: 4px;
-webkit-border-radius: 4px;
-moz-border-radius: 4px;
} }
.wrapper { .wrapper {
display: grid; display: grid;
grid-template-columns: repeat(3, 1fr); grid-template-columns: repeat(3, 1fr);
} }
#altitude_slider {
position: relative;
display: block;
margin-left: 10px;
margin-right: 10px;
width: auto;
margin-top: 10px;
margin-bottom: 5px;
height: 10px;
}
.align_right {
float: right;
}
.noUi-horizontal .noUi-handle, .noUi-vertical .noUi-handle {
background: #FEBC11;
height: 20px !important;
width: 10px !important;
right: -5px !important; /* must be (width / 2) * -1 */
}
.noUi-handle:before, .noUi-handle:after {
display: none !important;
}
.noUi-connect {
background: #00A0E2 !important;
}
#aircraft_type_filter_form,
#aircraft_ident_filter_form {
position: relative;
padding: 5px 5px 5px 5px;
}
.group {
padding: 5px 5px 5px 5px;
margin-top: 5px;
border-radius: 4px;
-webkit-border-radius: 4px;
-moz-border-radius: 4px;
background-clip: padding-box;
border: 1px solid #e5e9f9;
background: #fff;
color: #060d46;
width: auto;
}
.filter_input_group {
margin-top: 10px;
margin-bottom: 5px;
}