Merge branch 'filter_enhancements' into dev
This commit is contained in:
commit
b3fcf82473
|
|
@ -14,6 +14,9 @@
|
|||
<link rel="stylesheet" href="ol/ol-layerswitcher.css" type="text/css"/>
|
||||
<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="markers.js?v=4.0"></script>
|
||||
<script type="text/javascript" src="dbloader.js?v=4.0"></script>
|
||||
|
|
@ -220,31 +223,49 @@
|
|||
</div>
|
||||
|
||||
<div id="filter_panel" class="panel">
|
||||
<form id="altitude_filter_form">
|
||||
<label><span class="infoBlockTitleText">Filter by Altitude:</span></label>
|
||||
<input id="altitude_filter_min" name="minAltitude" type="text" class="altitudeFilterInput" maxlength="5">
|
||||
<label for="minAltitude" class="altitudeUnit"></label>
|
||||
<span> to </span>
|
||||
<input id="altitude_filter_max" name="maxAltitude" type="text" class="altitudeFilterInput" maxlength="5">
|
||||
<label for="maxAltitude" class="altitudeUnit"></label>
|
||||
<button type="submit">Filter</button>
|
||||
<button id="altitude_filter_reset_button">Reset</button>
|
||||
</form>
|
||||
<form id="aircraft_type_filter_form">
|
||||
<label><span class="infoBlockTitleText">Filter by Aircraft Type:</span></label>
|
||||
<input id="aircraft_type_filter" name="aircraftTypeFilter" type="text" class="aircraftFilterInput" maxlength="5">
|
||||
<button type="submit">Filter</button>
|
||||
<button id="aircraft_type_filter_reset_button">Reset</button>
|
||||
</form>
|
||||
|
||||
<form id="aircraft_ident_filter_form">
|
||||
<label><span class="infoBlockTitleText">Filter by Aircraft Ident:</span></label>
|
||||
<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>
|
||||
</form>
|
||||
<div class="group">
|
||||
<label><span class="infoBlockTitleText">Filter by Altitude</span></label>
|
||||
<div class="align_right">
|
||||
<span id="minAltitudeText" class="infoBlockTitleText"></span>
|
||||
<label for="minAltitude" class="altitudeUnit"></label>
|
||||
<span> to </span>
|
||||
<span id="maxAltitudeText" class="infoBlockTitleText"></span>
|
||||
<label for="maxAltitude" class="altitudeUnit"></label>
|
||||
</div>
|
||||
<div id="altitude_slider"></div>
|
||||
</div>
|
||||
<div class="group">
|
||||
<label><span class="infoBlockTitleText">Filter by Speed</span></label>
|
||||
<div class="align_right">
|
||||
<span id="minSpeedText" class="infoBlockTitleText"></span>
|
||||
<label for="minSpeed" class="speedUnit"></label>
|
||||
<span> to </span>
|
||||
<span id="maxSpeedText" class="infoBlockTitleText"></span>
|
||||
<label for="maxSpeed" class="speedUnit"></label>
|
||||
</div>
|
||||
<div id="speed_slider"></div>
|
||||
</div>
|
||||
<div class="group">
|
||||
<form id="aircraft_type_filter_form">
|
||||
<label><span class="infoBlockTitleText">Filter by Aircraft Type</span></label>
|
||||
<div class="align_right">
|
||||
<input id="aircraft_type_filter" name="aircraftTypeFilter" type="text" class="aircraftFilterInput" maxlength="5">
|
||||
<button type="submit">Filter</button>
|
||||
<button id="aircraft_type_filter_reset_button">Reset</button>
|
||||
</div>
|
||||
</form>
|
||||
</div>
|
||||
<div class="group">
|
||||
<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 id="column_select_panel" class="panel">
|
||||
<div class="columnOptionSelectAllContainer">
|
||||
<div class="columnSelectAllCheckbox" id="select_all_column_checkbox"></div>
|
||||
|
|
|
|||
|
|
@ -0,0 +1,183 @@
|
|||
# Changelog
|
||||
|
||||
### 14.6.3 (*2020-11-19*)
|
||||
- Fixed: Fixed removing namespaced event listeners, internal listeners getting removed (#1109);
|
||||
|
||||
### 14.6.2 (*2020-09-16*)
|
||||
- Fixed: Ignore erroneous mouse events on taps for iOS 13.4 (#1095);
|
||||
- Added: `exactInput` argument to `set` and `setHandle` methods (#436, #1094);
|
||||
|
||||
### 14.6.1 (*2020-08-17*)
|
||||
- Fixed: Pips in count mode ignores pip at end of range (#1088);
|
||||
|
||||
### 14.6.0 (*2020-06-27*)
|
||||
- Added: `keyboardPageMultiplier` and `keyboardDefaultStep` options (#1083);
|
||||
- Fixed: Ignore erroneous tap events for iOS (#1057, #1079);
|
||||
|
||||
### 14.5.0 (*2020-05-20*)
|
||||
- Added: Support for `margin`, `padding` and `limit` on non-linear sliders (#911, #1030, #1031, #1071);
|
||||
|
||||
### 14.4.0 (*2020-05-06*)
|
||||
- Added: `getOrigins` and `getTooltips` methods;
|
||||
- Added: Default styling to support merging overlapping tooltips (#1032);
|
||||
|
||||
### 14.3.0 (*2020-05-05*)
|
||||
- Added: Default `cssClasses` are now exposed and can be modified;
|
||||
- Fixed: Destroying sliders with multiple classes in `cssClasses` fails (#1069);
|
||||
|
||||
### 14.2.0 (*2020-03-27*)
|
||||
- Added: Slider api as event parameter (#1058);
|
||||
- Added: Allow multiple classes in `cssClasses` option (#1054);
|
||||
- Fixed: Slider not working within shadow DOM (#1060);
|
||||
- Fixed: Last pip not rendered if it is also the first and at the slider edge (#1063);
|
||||
|
||||
### 14.1.1 (*2019-12-15*)
|
||||
- Fixed: Text direction is not correctly determined when the slider is not in the DOM (#1038);
|
||||
|
||||
### 14.1.0 (*2019-12-04*)
|
||||
- Fixed: Styling requires a root `html` node, so noUiSlider can't be used in shadow dom (#1035);
|
||||
- Added: Support for PageUp/PageDown and Home/End keys in keyboard support (#1036);
|
||||
|
||||
### 14.0.3 (*2019-10-10*)
|
||||
- Fixed: Initialising handle values near the slider edge does not always respect `margin` (#1009);
|
||||
|
||||
### 14.0.2 (*2019-06-28*)
|
||||
- Fixed: Keyboard interaction uses formatter when it does not need to (#1000);
|
||||
|
||||
### 14.0.1 (*2019-06-21*)
|
||||
- Fixed: Visual regression in Safari caused by fixing #987 (#998);
|
||||
|
||||
### 14.0.0 (*2019-06-20*)
|
||||
- Fixed: `change` & `slide` events should fire on keyboard control (#994);
|
||||
- Fixed: `.noUi-origin` overflows document on vertical sliders (#987);
|
||||
- Fixed: Clicking to right of handle doesn't move it when it's at the same point as another (#965);
|
||||
- Added: Additional documentation on number formatting (#978, #985);
|
||||
|
||||
### 13.1.5 (*2019-04-24*)
|
||||
- Fixed: Full-range padding (#880);
|
||||
|
||||
### 13.1.4 (*2019-03-20*)
|
||||
- Fixed: Keyboard interaction does not work with `snap` option (#961);
|
||||
|
||||
### 13.1.3 (*2019-03-15*)
|
||||
- Fixed: Keyboard interaction allows handles to "push" other handles (#960);
|
||||
- Fixed: Update event fires for all handles during keyboard interaction (#960);
|
||||
|
||||
### 13.1.2 (*2019-03-13*)
|
||||
- Fixed: Handle disappears in Safari on tap (#927);
|
||||
- Fixed: Disabled slider still accepts keyboard interaction (#953);
|
||||
|
||||
### 13.1.1 (*2019-02-14*)
|
||||
- Fixed: Slider hang when using a zero-length range (#948);
|
||||
|
||||
### 13.1.0 (*2019-02-08*)
|
||||
- Fixed: Updating `pips` using `updateOptions` (#933);
|
||||
- Added: Updating `tooltips` using `updateOptions` (#946);
|
||||
|
||||
### 13.0.0 (*2019-02-06*)
|
||||
noUiSlider 13 does not include any breaking API changes.
|
||||
Keyboard support is now built-in, so any custom implementations should be removed when upgrading.
|
||||
Alternatively, built-in keyboard support can be disabled using `keyboardSupport: false`.
|
||||
- Added: Built-in keyboard support (#724);
|
||||
- Added: `.noUi-touch-area` element (#924);
|
||||
- Fixed: Dragging a range does not check for handle disabled state (#938);
|
||||
- Fixed: Incorrect CSS transform in pips (#931);
|
||||
|
||||
### 12.1.0 (*2018-10-25*)
|
||||
- Added: `unconstrained` behaviour (#747, #815, #913);
|
||||
- Added: `setHandle` API (#917);
|
||||
- Changed: point to `nouislider.js` in `package.json`.`main` (#921);
|
||||
|
||||
### 12.0.0 (*2018-09-14*)
|
||||
- Change: License changed to MIT;
|
||||
- Change: Build process is now based on NPM scripts, phasing out the Grunt task runner.
|
||||
- Fixed: Aria values are now as per spec (#889);
|
||||
- Change: Pips formatting are now written as HTML (#875);
|
||||
- Change: The `filter` option is now called for all pips (#754);
|
||||
- Added: The `filter` option can now return `-1` to hide a pip (#754);
|
||||
- Added: `keyboardSupport` option (#867, #895);
|
||||
- Added: `documentElement` option (#821);
|
||||
|
||||
### 11.1.0 (*2018-04-02*)
|
||||
- Change: `null` options are now handled consistently (#856);
|
||||
- Fixed: Missing transform origin in IE9 (#870);
|
||||
- Fixed: `padding` on one side of the slider could not exceed `50%` (#865);
|
||||
|
||||
### 11.0.3 (*2018-01-21*)
|
||||
Refactor of source code. There are no meaningful changes in the distributed files;
|
||||
|
||||
### 11.0.2 (*2018-01-20*)
|
||||
- Fixed: Slider ignores clicks on `.noUi-target` outside of `.noUi-base` (#842);
|
||||
- Fixed: `.noUi-origin` moving out of the page causes horizontal scrolling (#852);
|
||||
- Fixed: Relative `.noUi-handle` has unintended margin (#854);
|
||||
|
||||
### 11.0.0 (*2018-01-12*)
|
||||
noUiSlider 11 does not include any breaking API changes.
|
||||
Unless major changes were made to the stylesheet or you specifically depend
|
||||
on the handle/connect order in the DOM, there should be no issues upgrading.
|
||||
- Change: Use CSS transforms for handle movement, resulting in a massive performance improvement (#718);
|
||||
- Change: Support multitouch by default;
|
||||
- Change: Handle stacking is now on `.noUi-origin` instead of `.noUi-handle`;
|
||||
- Added: A `.noUi-connects` element holding all `.noUi-connect` elements;
|
||||
- Added: `[data-value]` property for `.noUi-value` in pips (#733);
|
||||
- Added: `padding` option can now take an array for different padding values at both sides of a slider (#822);
|
||||
- Removed: `useRequestAnimationFrame` option. No longer needed with CSS transforms;
|
||||
- Removed: `multitouch` option. Now enabled by default;
|
||||
- Fixed: Slider could ignore end events it should handle (#704, #805, #834);
|
||||
- Fixed: Stop depending on array type (#801);
|
||||
- Fixed: `set` method might bypass margin option (#823);
|
||||
- Fixed: Alignment of pips for RTL sliders (#795);
|
||||
- Fixed: Several issues regarding pips (#812, #826, #832);
|
||||
|
||||
### 10.1.0 (*2017-07-26*)
|
||||
- Added: `multitouch` option (#793);
|
||||
|
||||
### 10.0.0 (*2017-05-28*)
|
||||
- Change: Change event listeners to be passive (#785);
|
||||
- Fixed: Pips are now updated when calling `updateOptions` (#669);
|
||||
- Fixed: Content Security Policy issue with pips;
|
||||
- Added: `removePips` method;
|
||||
- Added: aria support (#685);
|
||||
- Added: `ariaFormat` option (controls `aria-valuetext`);
|
||||
- Fixed: throw a better error when mistakenly trying to initialize noUiSlider with `null` (#658);
|
||||
- Fixed: Made order of events consistent and documented it (#775);
|
||||
- Fixed: Border radius of connect bar, white space wrapping of tooltips (#773, #774);
|
||||
- Fixed: Slider now uses `ownerDocument` instead of `document` (#767);
|
||||
|
||||
### 9.2.0 (*2017-01-17*)
|
||||
- Added: Version number to exceptions;
|
||||
- Added: `noUiSlider.version` holds current version number;
|
||||
- Added: Throw exception on invalid `pips` configuration (#721);
|
||||
- Added: Merged pull request that uses less preprocessor to generate CSS (#735);
|
||||
|
||||
### 9.1.0 (*2016-12-10*)
|
||||
- Fixed: Slider not properly handling multitouch (#700, #704);
|
||||
- Fixed: Removed a querySelector for the currently active handle (#720);
|
||||
- Fixed: Removed iOS/webkit flashes on tap;
|
||||
- Fixed: Incorrect error when using margin/limit with a step smaller than 0 (#736);
|
||||
- Fixed: Drag option using incorrect cursor arrows (#681);
|
||||
- Added: New `padding` option (#711);
|
||||
- Added: Re-introduced `.noUi-handle-lower` and `.noUi-handle-upper` classes removed in 9.0.0;
|
||||
- Added: Compatibility for legacy `connect` options removed in 9.0.0;
|
||||
|
||||
### 9.0.0 (*2016-09-26*)
|
||||
- Added: Support for **more than 2 handles**;
|
||||
- Added: `format` option can be updated (#641);
|
||||
- Added: `reset` method the return slider to start values (#673);
|
||||
- Change: `connect` option is now implemented as a separate node;
|
||||
- Change: all event arguments, including the handle number, are now in slider order;
|
||||
- Change: `updateOptions` now **modifies the original options** object. The reference in `slider.noUiSlider.options` remains up to date (#678);
|
||||
- Change: more events fire when using various `behaviour` options (#664);
|
||||
- Change: on `rtl` sliders, handles are now visually positioned from the sliders `right`/`bottom` edge;
|
||||
- Change: events for `rtl` sliders now fire in the same order as for `ltr` sliders (with incremental handleNumbers);
|
||||
- Change: internal `Spectrum` component is no longer `direction` aware;
|
||||
- Change: `limit` and `margin` must be divisible by `step` (if set);
|
||||
- Removed: `.noUi-stacking` class. Handles now stack themselves;
|
||||
- ~~Removed~~ (returned in 9.1.0): `.noUi-handle-lower` and `.noUi-handle-upper` classes;
|
||||
- Removed: `.noUi-background`. Use `.noUi-target` instead;
|
||||
- ~~Removed~~ (backward compatibility in 9.1.0): `connect: 'lower'` and `connect: 'upper'`. These settings are replaced by `connect: [true, false]`;
|
||||
- Fixed: default tooltip color (#687);
|
||||
- Fixed: `margin` and `limit` calculated improperly after calling `updateOptions` with a new `range` option;
|
||||
- Fixed: `range` option was required in update, even when not updating it (#682);
|
||||
- Fixed: Cursor styling is now consistent for disabled handles and sliders (#644);
|
||||
- Fixed: Sliders now ignore touches when the screen is touched multiple times (#649, #663, #668);
|
||||
|
|
@ -0,0 +1,25 @@
|
|||
# Issues
|
||||
Please, only use the issue tracker for **problems, bugs and feature requests**.
|
||||
|
||||
For help with _implementing_ noUiSlider, please ask your question on [stackoverflow](https://stackoverflow.com/questions/tagged/nouislider). I try to look at questions posted there daily, and you will get you an answer much faster. Make sure to follow the [guidelines](https://stackoverflow.com/help/how-to-ask) of the platform.
|
||||
|
||||
While I'm happy to help if you can't figure something out, please note that I:
|
||||
- Can't go and debug problems just based on screenshots;
|
||||
- Can't help with issues that do not include **an example with code** that reproduces it;
|
||||
- Won't dig through your production site or huge chunks of unrelated code;
|
||||
- Won't implement your business requirements for you;
|
||||
|
||||
# Tooling
|
||||
|
||||
Please run the following tooling before submitting a pull request:
|
||||
|
||||
```bash
|
||||
npm run lint
|
||||
npm run format
|
||||
```
|
||||
|
||||
# Pull requests
|
||||
- Detail (in the pull request comment) what your changes do.
|
||||
- When applicable, include new unit tests, and make sure existing ones pass.
|
||||
- If you are introducing a new feature, update the **documentation**.
|
||||
- Please don't commit `/distribute/*` files, I'll do that upon release.
|
||||
|
|
@ -0,0 +1,21 @@
|
|||
MIT License
|
||||
|
||||
Copyright (c) 2019 Léon Gersen
|
||||
|
||||
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
of this software and associated documentation files (the "Software"), to deal
|
||||
in the Software without restriction, including without limitation the rights
|
||||
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||
copies of the Software, and to permit persons to whom the Software is
|
||||
furnished to do so, subject to the following conditions:
|
||||
|
||||
The above copyright notice and this permission notice shall be included in all
|
||||
copies or substantial portions of the Software.
|
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||
SOFTWARE.
|
||||
|
|
@ -0,0 +1,41 @@
|
|||
# noUiSlider
|
||||
|
||||
noUiSlider is a lightweight JavaScript range slider.
|
||||
|
||||
- **No dependencies**
|
||||
- All modern browsers and IE > 9 are supported
|
||||
- Fully **responsive**
|
||||
- **Multi-touch support** on Android, iOS and Windows devices
|
||||
- Accessible with `aria` and keyboard support
|
||||
- Tons of [examples](https://refreshless.com/nouislider/examples) and answered [Stack Overflow questions](https://stackoverflow.com/questions/tagged/nouislider)
|
||||
|
||||
License
|
||||
-------
|
||||
noUiSlider is licensed [MIT](https://choosealicense.com/licenses/mit/).
|
||||
|
||||
It can be used **for free** and **without any attribution**, in any personal or commercial project.
|
||||
|
||||
[Documentation](https://refreshless.com/nouislider/)
|
||||
-------
|
||||
An extensive documentation, including **examples**, **options** and **configuration details**, is available here:
|
||||
|
||||
[noUiSlider documentation](https://refreshless.com/nouislider/).
|
||||
|
||||
Contributing
|
||||
------------
|
||||
|
||||
See [Contributing](CONTRIBUTING.md).
|
||||
|
||||
Sponsorship
|
||||
-----------
|
||||
|
||||
noUiSlider is a stable project that still receives a lot of feature requests. A lot of these are interesting, but require a good amount of effort to implement, test and document. Sponsorship of this project will allow me to spend some more of my time on these feature requests.
|
||||
|
||||
Please consider sponsoring the project by clicking the "❤ Sponsor" button above. Thanks!
|
||||
|
||||
Tooling
|
||||
-------
|
||||
|
||||
Cross-browser testing kindly provided by BrowserStack.
|
||||
|
||||
[](http://browserstack.com/)
|
||||
|
|
@ -0,0 +1,310 @@
|
|||
/*! nouislider - 14.6.3 - 11/19/2020 */
|
||||
/* Functional styling;
|
||||
* These styles are required for noUiSlider to function.
|
||||
* You don't need to change these rules to apply your design.
|
||||
*/
|
||||
.noUi-target,
|
||||
.noUi-target * {
|
||||
-webkit-touch-callout: none;
|
||||
-webkit-tap-highlight-color: rgba(0, 0, 0, 0);
|
||||
-webkit-user-select: none;
|
||||
-ms-touch-action: none;
|
||||
touch-action: none;
|
||||
-ms-user-select: none;
|
||||
-moz-user-select: none;
|
||||
user-select: none;
|
||||
-moz-box-sizing: border-box;
|
||||
box-sizing: border-box;
|
||||
}
|
||||
.noUi-target {
|
||||
position: relative;
|
||||
}
|
||||
.noUi-base,
|
||||
.noUi-connects {
|
||||
width: 100%;
|
||||
height: 100%;
|
||||
position: relative;
|
||||
z-index: 1;
|
||||
}
|
||||
/* Wrapper for all connect elements.
|
||||
*/
|
||||
.noUi-connects {
|
||||
overflow: hidden;
|
||||
z-index: 0;
|
||||
}
|
||||
.noUi-connect,
|
||||
.noUi-origin {
|
||||
will-change: transform;
|
||||
position: absolute;
|
||||
z-index: 1;
|
||||
top: 0;
|
||||
right: 0;
|
||||
-ms-transform-origin: 0 0;
|
||||
-webkit-transform-origin: 0 0;
|
||||
-webkit-transform-style: preserve-3d;
|
||||
transform-origin: 0 0;
|
||||
transform-style: flat;
|
||||
}
|
||||
.noUi-connect {
|
||||
height: 100%;
|
||||
width: 100%;
|
||||
}
|
||||
.noUi-origin {
|
||||
height: 10%;
|
||||
width: 10%;
|
||||
}
|
||||
/* Offset direction
|
||||
*/
|
||||
.noUi-txt-dir-rtl.noUi-horizontal .noUi-origin {
|
||||
left: 0;
|
||||
right: auto;
|
||||
}
|
||||
/* Give origins 0 height/width so they don't interfere with clicking the
|
||||
* connect elements.
|
||||
*/
|
||||
.noUi-vertical .noUi-origin {
|
||||
width: 0;
|
||||
}
|
||||
.noUi-horizontal .noUi-origin {
|
||||
height: 0;
|
||||
}
|
||||
.noUi-handle {
|
||||
-webkit-backface-visibility: hidden;
|
||||
backface-visibility: hidden;
|
||||
position: absolute;
|
||||
}
|
||||
.noUi-touch-area {
|
||||
height: 100%;
|
||||
width: 100%;
|
||||
}
|
||||
.noUi-state-tap .noUi-connect,
|
||||
.noUi-state-tap .noUi-origin {
|
||||
-webkit-transition: transform 0.3s;
|
||||
transition: transform 0.3s;
|
||||
}
|
||||
.noUi-state-drag * {
|
||||
cursor: inherit !important;
|
||||
}
|
||||
/* Slider size and handle placement;
|
||||
*/
|
||||
.noUi-horizontal {
|
||||
height: 18px;
|
||||
}
|
||||
.noUi-horizontal .noUi-handle {
|
||||
width: 34px;
|
||||
height: 28px;
|
||||
right: -17px;
|
||||
top: -6px;
|
||||
}
|
||||
.noUi-vertical {
|
||||
width: 18px;
|
||||
}
|
||||
.noUi-vertical .noUi-handle {
|
||||
width: 28px;
|
||||
height: 34px;
|
||||
right: -6px;
|
||||
top: -17px;
|
||||
}
|
||||
.noUi-txt-dir-rtl.noUi-horizontal .noUi-handle {
|
||||
left: -17px;
|
||||
right: auto;
|
||||
}
|
||||
/* Styling;
|
||||
* Giving the connect element a border radius causes issues with using transform: scale
|
||||
*/
|
||||
.noUi-target {
|
||||
background: #FAFAFA;
|
||||
border-radius: 4px;
|
||||
border: 1px solid #D3D3D3;
|
||||
box-shadow: inset 0 1px 1px #F0F0F0, 0 3px 6px -5px #BBB;
|
||||
}
|
||||
.noUi-connects {
|
||||
border-radius: 3px;
|
||||
}
|
||||
.noUi-connect {
|
||||
background: #3FB8AF;
|
||||
}
|
||||
/* Handles and cursors;
|
||||
*/
|
||||
.noUi-draggable {
|
||||
cursor: ew-resize;
|
||||
}
|
||||
.noUi-vertical .noUi-draggable {
|
||||
cursor: ns-resize;
|
||||
}
|
||||
.noUi-handle {
|
||||
border: 1px solid #D9D9D9;
|
||||
border-radius: 3px;
|
||||
background: #FFF;
|
||||
cursor: default;
|
||||
box-shadow: inset 0 0 1px #FFF, inset 0 1px 7px #EBEBEB, 0 3px 6px -3px #BBB;
|
||||
}
|
||||
.noUi-active {
|
||||
box-shadow: inset 0 0 1px #FFF, inset 0 1px 7px #DDD, 0 3px 6px -3px #BBB;
|
||||
}
|
||||
/* Handle stripes;
|
||||
*/
|
||||
.noUi-handle:before,
|
||||
.noUi-handle:after {
|
||||
content: "";
|
||||
display: block;
|
||||
position: absolute;
|
||||
height: 14px;
|
||||
width: 1px;
|
||||
background: #E8E7E6;
|
||||
left: 14px;
|
||||
top: 6px;
|
||||
}
|
||||
.noUi-handle:after {
|
||||
left: 17px;
|
||||
}
|
||||
.noUi-vertical .noUi-handle:before,
|
||||
.noUi-vertical .noUi-handle:after {
|
||||
width: 14px;
|
||||
height: 1px;
|
||||
left: 6px;
|
||||
top: 14px;
|
||||
}
|
||||
.noUi-vertical .noUi-handle:after {
|
||||
top: 17px;
|
||||
}
|
||||
/* Disabled state;
|
||||
*/
|
||||
[disabled] .noUi-connect {
|
||||
background: #B8B8B8;
|
||||
}
|
||||
[disabled].noUi-target,
|
||||
[disabled].noUi-handle,
|
||||
[disabled] .noUi-handle {
|
||||
cursor: not-allowed;
|
||||
}
|
||||
/* Base;
|
||||
*
|
||||
*/
|
||||
.noUi-pips,
|
||||
.noUi-pips * {
|
||||
-moz-box-sizing: border-box;
|
||||
box-sizing: border-box;
|
||||
}
|
||||
.noUi-pips {
|
||||
position: absolute;
|
||||
color: #999;
|
||||
}
|
||||
/* Values;
|
||||
*
|
||||
*/
|
||||
.noUi-value {
|
||||
position: absolute;
|
||||
white-space: nowrap;
|
||||
text-align: center;
|
||||
}
|
||||
.noUi-value-sub {
|
||||
color: #ccc;
|
||||
font-size: 10px;
|
||||
}
|
||||
/* Markings;
|
||||
*
|
||||
*/
|
||||
.noUi-marker {
|
||||
position: absolute;
|
||||
background: #CCC;
|
||||
}
|
||||
.noUi-marker-sub {
|
||||
background: #AAA;
|
||||
}
|
||||
.noUi-marker-large {
|
||||
background: #AAA;
|
||||
}
|
||||
/* Horizontal layout;
|
||||
*
|
||||
*/
|
||||
.noUi-pips-horizontal {
|
||||
padding: 10px 0;
|
||||
height: 80px;
|
||||
top: 100%;
|
||||
left: 0;
|
||||
width: 100%;
|
||||
}
|
||||
.noUi-value-horizontal {
|
||||
-webkit-transform: translate(-50%, 50%);
|
||||
transform: translate(-50%, 50%);
|
||||
}
|
||||
.noUi-rtl .noUi-value-horizontal {
|
||||
-webkit-transform: translate(50%, 50%);
|
||||
transform: translate(50%, 50%);
|
||||
}
|
||||
.noUi-marker-horizontal.noUi-marker {
|
||||
margin-left: -1px;
|
||||
width: 2px;
|
||||
height: 5px;
|
||||
}
|
||||
.noUi-marker-horizontal.noUi-marker-sub {
|
||||
height: 10px;
|
||||
}
|
||||
.noUi-marker-horizontal.noUi-marker-large {
|
||||
height: 15px;
|
||||
}
|
||||
/* Vertical layout;
|
||||
*
|
||||
*/
|
||||
.noUi-pips-vertical {
|
||||
padding: 0 10px;
|
||||
height: 100%;
|
||||
top: 0;
|
||||
left: 100%;
|
||||
}
|
||||
.noUi-value-vertical {
|
||||
-webkit-transform: translate(0, -50%);
|
||||
transform: translate(0, -50%);
|
||||
padding-left: 25px;
|
||||
}
|
||||
.noUi-rtl .noUi-value-vertical {
|
||||
-webkit-transform: translate(0, 50%);
|
||||
transform: translate(0, 50%);
|
||||
}
|
||||
.noUi-marker-vertical.noUi-marker {
|
||||
width: 5px;
|
||||
height: 2px;
|
||||
margin-top: -1px;
|
||||
}
|
||||
.noUi-marker-vertical.noUi-marker-sub {
|
||||
width: 10px;
|
||||
}
|
||||
.noUi-marker-vertical.noUi-marker-large {
|
||||
width: 15px;
|
||||
}
|
||||
.noUi-tooltip {
|
||||
display: block;
|
||||
position: absolute;
|
||||
border: 1px solid #D9D9D9;
|
||||
border-radius: 3px;
|
||||
background: #fff;
|
||||
color: #000;
|
||||
padding: 5px;
|
||||
text-align: center;
|
||||
white-space: nowrap;
|
||||
}
|
||||
.noUi-horizontal .noUi-tooltip {
|
||||
-webkit-transform: translate(-50%, 0);
|
||||
transform: translate(-50%, 0);
|
||||
left: 50%;
|
||||
bottom: 120%;
|
||||
}
|
||||
.noUi-vertical .noUi-tooltip {
|
||||
-webkit-transform: translate(0, -50%);
|
||||
transform: translate(0, -50%);
|
||||
top: 50%;
|
||||
right: 120%;
|
||||
}
|
||||
.noUi-horizontal .noUi-origin > .noUi-tooltip {
|
||||
-webkit-transform: translate(50%, 0);
|
||||
transform: translate(50%, 0);
|
||||
left: auto;
|
||||
bottom: 10px;
|
||||
}
|
||||
.noUi-vertical .noUi-origin > .noUi-tooltip {
|
||||
-webkit-transform: translate(0, -18px);
|
||||
transform: translate(0, -18px);
|
||||
top: auto;
|
||||
right: 28px;
|
||||
}
|
||||
File diff suppressed because it is too large
Load Diff
|
|
@ -0,0 +1,2 @@
|
|||
/*! nouislider - 14.6.3 - 11/19/2020 */
|
||||
.noUi-target,.noUi-target *{-webkit-touch-callout:none;-webkit-tap-highlight-color:transparent;-webkit-user-select:none;-ms-touch-action:none;touch-action:none;-ms-user-select:none;-moz-user-select:none;user-select:none;-moz-box-sizing:border-box;box-sizing:border-box}.noUi-target{position:relative}.noUi-base,.noUi-connects{width:100%;height:100%;position:relative;z-index:1}.noUi-connects{overflow:hidden;z-index:0}.noUi-connect,.noUi-origin{will-change:transform;position:absolute;z-index:1;top:0;right:0;-ms-transform-origin:0 0;-webkit-transform-origin:0 0;-webkit-transform-style:preserve-3d;transform-origin:0 0;transform-style:flat}.noUi-connect{height:100%;width:100%}.noUi-origin{height:10%;width:10%}.noUi-txt-dir-rtl.noUi-horizontal .noUi-origin{left:0;right:auto}.noUi-vertical .noUi-origin{width:0}.noUi-horizontal .noUi-origin{height:0}.noUi-handle{-webkit-backface-visibility:hidden;backface-visibility:hidden;position:absolute}.noUi-touch-area{height:100%;width:100%}.noUi-state-tap .noUi-connect,.noUi-state-tap .noUi-origin{-webkit-transition:transform .3s;transition:transform .3s}.noUi-state-drag *{cursor:inherit!important}.noUi-horizontal{height:18px}.noUi-horizontal .noUi-handle{width:34px;height:28px;right:-17px;top:-6px}.noUi-vertical{width:18px}.noUi-vertical .noUi-handle{width:28px;height:34px;right:-6px;top:-17px}.noUi-txt-dir-rtl.noUi-horizontal .noUi-handle{left:-17px;right:auto}.noUi-target{background:#FAFAFA;border-radius:4px;border:1px solid #D3D3D3;box-shadow:inset 0 1px 1px #F0F0F0,0 3px 6px -5px #BBB}.noUi-connects{border-radius:3px}.noUi-connect{background:#3FB8AF}.noUi-draggable{cursor:ew-resize}.noUi-vertical .noUi-draggable{cursor:ns-resize}.noUi-handle{border:1px solid #D9D9D9;border-radius:3px;background:#FFF;cursor:default;box-shadow:inset 0 0 1px #FFF,inset 0 1px 7px #EBEBEB,0 3px 6px -3px #BBB}.noUi-active{box-shadow:inset 0 0 1px #FFF,inset 0 1px 7px #DDD,0 3px 6px -3px #BBB}.noUi-handle:after,.noUi-handle:before{content:"";display:block;position:absolute;height:14px;width:1px;background:#E8E7E6;left:14px;top:6px}.noUi-handle:after{left:17px}.noUi-vertical .noUi-handle:after,.noUi-vertical .noUi-handle:before{width:14px;height:1px;left:6px;top:14px}.noUi-vertical .noUi-handle:after{top:17px}[disabled] .noUi-connect{background:#B8B8B8}[disabled] .noUi-handle,[disabled].noUi-handle,[disabled].noUi-target{cursor:not-allowed}.noUi-pips,.noUi-pips *{-moz-box-sizing:border-box;box-sizing:border-box}.noUi-pips{position:absolute;color:#999}.noUi-value{position:absolute;white-space:nowrap;text-align:center}.noUi-value-sub{color:#ccc;font-size:10px}.noUi-marker{position:absolute;background:#CCC}.noUi-marker-sub{background:#AAA}.noUi-marker-large{background:#AAA}.noUi-pips-horizontal{padding:10px 0;height:80px;top:100%;left:0;width:100%}.noUi-value-horizontal{-webkit-transform:translate(-50%,50%);transform:translate(-50%,50%)}.noUi-rtl .noUi-value-horizontal{-webkit-transform:translate(50%,50%);transform:translate(50%,50%)}.noUi-marker-horizontal.noUi-marker{margin-left:-1px;width:2px;height:5px}.noUi-marker-horizontal.noUi-marker-sub{height:10px}.noUi-marker-horizontal.noUi-marker-large{height:15px}.noUi-pips-vertical{padding:0 10px;height:100%;top:0;left:100%}.noUi-value-vertical{-webkit-transform:translate(0,-50%);transform:translate(0,-50%);padding-left:25px}.noUi-rtl .noUi-value-vertical{-webkit-transform:translate(0,50%);transform:translate(0,50%)}.noUi-marker-vertical.noUi-marker{width:5px;height:2px;margin-top:-1px}.noUi-marker-vertical.noUi-marker-sub{width:10px}.noUi-marker-vertical.noUi-marker-large{width:15px}.noUi-tooltip{display:block;position:absolute;border:1px solid #D9D9D9;border-radius:3px;background:#fff;color:#000;padding:5px;text-align:center;white-space:nowrap}.noUi-horizontal .noUi-tooltip{-webkit-transform:translate(-50%,0);transform:translate(-50%,0);left:50%;bottom:120%}.noUi-vertical .noUi-tooltip{-webkit-transform:translate(0,-50%);transform:translate(0,-50%);top:50%;right:120%}.noUi-horizontal .noUi-origin>.noUi-tooltip{-webkit-transform:translate(50%,0);transform:translate(50%,0);left:auto;bottom:10px}.noUi-vertical .noUi-origin>.noUi-tooltip{-webkit-transform:translate(0,-18px);transform:translate(0,-18px);top:auto;right:28px}
|
||||
File diff suppressed because one or more lines are too long
|
|
@ -103,7 +103,7 @@ function PlaneObject(icao) {
|
|||
}
|
||||
|
||||
if (this.selected) {
|
||||
refreshSelected();
|
||||
refreshSelected();
|
||||
}
|
||||
}.bind(this));
|
||||
}
|
||||
|
|
@ -112,7 +112,7 @@ 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;
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -136,23 +136,38 @@ PlaneObject.prototype.isFiltered = function() {
|
|||
|
||||
if (this.filter.minAltitude !== undefined && this.filter.maxAltitude !== undefined) {
|
||||
if (this.altitude === null || this.altitude === undefined) {
|
||||
return true;
|
||||
return true;
|
||||
}
|
||||
|
||||
var planeAltitude = this.altitude === "ground" ? 0 : convert_altitude(this.altitude, this.filter.altitudeUnits);
|
||||
return planeAltitude < this.filter.minAltitude || planeAltitude > this.filter.maxAltitude;
|
||||
var isFilteredByAltitude = planeAltitude < this.filter.minAltitude || planeAltitude > this.filter.maxAltitude;
|
||||
if (isFilteredByAltitude) {
|
||||
return true;
|
||||
}
|
||||
}
|
||||
if (this.filter.minSpeedFilter !== undefined && this.filter.maxSpeedFilter !== undefined) {
|
||||
if (this.speed === null || this.speed === undefined) {
|
||||
return true;
|
||||
}
|
||||
|
||||
var convertedSpeed = convert_speed(this.speed, this.filter.speedUnits)
|
||||
var isFilteredBySpeed = convertedSpeed < this.filter.minSpeedFilter || convertedSpeed > this.filter.maxSpeedFilter;
|
||||
if (isFilteredBySpeed) {
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
||||
// filter out ground vehicles
|
||||
if (typeof this.filter.groundVehicles !== 'undefined' && this.filter.groundVehicles === 'filtered') {
|
||||
if (typeof this.category === 'string' && this.category.startsWith('C')) {
|
||||
return true;
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
||||
// filter out blocked MLAT flights
|
||||
if (typeof this.filter.blockedMLAT !== 'undefined' && this.filter.blockedMLAT === 'filtered') {
|
||||
if (typeof this.icao === 'string' && this.icao.startsWith('~')) {
|
||||
return true;
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -483,17 +498,16 @@ PlaneObject.prototype.updateIcon = function() {
|
|||
|
||||
// Update our data
|
||||
PlaneObject.prototype.updateData = function(receiver_timestamp, data) {
|
||||
// Update all of our data
|
||||
this.messages = data.messages;
|
||||
this.rssi = data.rssi;
|
||||
this.last_message_time = receiver_timestamp - data.seen;
|
||||
// Update all of our data
|
||||
this.messages = data.messages;
|
||||
this.rssi = data.rssi;
|
||||
this.last_message_time = receiver_timestamp - data.seen;
|
||||
|
||||
// simple fields
|
||||
|
||||
var fields = ["alt_baro", "alt_geom", "gs", "ias", "tas", "track",
|
||||
"track_rate", "mag_heading", "true_heading", "mach",
|
||||
"roll", "nav_heading", "nav_modes",
|
||||
"nac_p", "nac_v", "nic_baro", "sil_type", "sil",
|
||||
"roll", "nav_heading", "nav_modes",
|
||||
"nac_p", "nac_v", "nic_baro", "sil_type", "sil",
|
||||
"nav_qnh", "baro_rate", "geom_rate", "rc",
|
||||
"squawk", "category", "version"];
|
||||
|
||||
|
|
@ -580,38 +594,38 @@ PlaneObject.prototype.updateTick = function(receiver_timestamp, last_timestamp)
|
|||
this.seen = receiver_timestamp - this.last_message_time;
|
||||
this.seen_pos = (this.last_position_time === null ? null : receiver_timestamp - this.last_position_time);
|
||||
|
||||
// If no packet in over 58 seconds, clear the plane.
|
||||
if (this.seen > 58) {
|
||||
// If no packet in over 58 seconds, clear the plane.
|
||||
if (this.seen > 58) {
|
||||
if (this.visible) {
|
||||
//console.log("hiding " + this.icao);
|
||||
this.clearMarker();
|
||||
this.visible = false;
|
||||
if (SelectedPlane == this.icao)
|
||||
if (SelectedPlane == this.icao)
|
||||
selectPlaneByHex(null,false);
|
||||
}
|
||||
} else {
|
||||
} else {
|
||||
if (this.position !== null && (this.selected || this.seen_pos < 60)) {
|
||||
this.visible = true;
|
||||
if (this.updateTrack(receiver_timestamp, last_timestamp)) {
|
||||
this.visible = true;
|
||||
if (this.updateTrack(receiver_timestamp, last_timestamp)) {
|
||||
this.updateLines();
|
||||
this.updateMarker(true);
|
||||
} else {
|
||||
this.updateMarker(false); // didn't move
|
||||
}
|
||||
} else {
|
||||
this.clearMarker();
|
||||
this.visible = false;
|
||||
}
|
||||
}
|
||||
this.clearMarker();
|
||||
this.visible = false;
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
PlaneObject.prototype.clearMarker = function() {
|
||||
if (this.marker) {
|
||||
if (this.marker) {
|
||||
PlaneIconFeatures.remove(this.marker);
|
||||
PlaneIconFeatures.remove(this.markerStatic);
|
||||
/* FIXME google.maps.event.clearListeners(this.marker, 'click'); */
|
||||
this.marker = this.markerStatic = null;
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
// Update our marker on the map
|
||||
|
|
|
|||
|
|
@ -52,6 +52,9 @@ var NBSP='\u00a0';
|
|||
var layers;
|
||||
var layerGroup;
|
||||
|
||||
var altitude_slider = null;
|
||||
var speed_slider = null;
|
||||
|
||||
// piaware vs flightfeeder
|
||||
var isFlightFeeder = false;
|
||||
|
||||
|
|
@ -96,19 +99,19 @@ function processReceiverUpdate(data) {
|
|||
if ((now - MessageCountHistory[0].time) > 30)
|
||||
MessageCountHistory.shift();
|
||||
|
||||
for (var j=0; j < acs.length; j++) {
|
||||
for (var j=0; j < acs.length; j++) {
|
||||
var ac = acs[j];
|
||||
var hex = ac.hex;
|
||||
var squawk = ac.squawk;
|
||||
var plane = null;
|
||||
|
||||
// Do we already have this plane object in Planes?
|
||||
// If not make it.
|
||||
// Do we already have this plane object in Planes?
|
||||
// If not make it.
|
||||
|
||||
if (Planes[hex]) {
|
||||
plane = Planes[hex];
|
||||
} else {
|
||||
plane = new PlaneObject(hex);
|
||||
if (Planes[hex]) {
|
||||
plane = Planes[hex];
|
||||
} else {
|
||||
plane = new PlaneObject(hex);
|
||||
plane.filter = PlaneFilter;
|
||||
plane.tr = PlaneRowTemplate.cloneNode(true);
|
||||
|
||||
|
|
@ -153,11 +156,11 @@ function processReceiverUpdate(data) {
|
|||
|
||||
Planes[hex] = plane;
|
||||
PlanesOrdered.push(plane);
|
||||
}
|
||||
}
|
||||
|
||||
// Call the function update
|
||||
plane.updateData(now, ac);
|
||||
}
|
||||
// Call the function update
|
||||
plane.updateData(now, ac);
|
||||
}
|
||||
}
|
||||
|
||||
function fetchData() {
|
||||
|
|
@ -180,11 +183,11 @@ function fetchData() {
|
|||
var plane = PlanesOrdered[i];
|
||||
plane.updateTick(now, LastReceiverTimestamp);
|
||||
}
|
||||
|
||||
selectNewPlanes();
|
||||
refreshTableInfo();
|
||||
refreshSelected();
|
||||
refreshHighlighted();
|
||||
|
||||
selectNewPlanes();
|
||||
refreshTableInfo();
|
||||
refreshSelected();
|
||||
refreshHighlighted();
|
||||
|
||||
if (ReceiverClock) {
|
||||
var rcv = new Date(now * 1000);
|
||||
|
|
@ -203,7 +206,7 @@ function fetchData() {
|
|||
LastReceiverTimestamp = now;
|
||||
$("#update_error").css('display','none');
|
||||
}
|
||||
});
|
||||
});
|
||||
|
||||
FetchPending.fail(function(jqxhr, status, error) {
|
||||
$("#update_error_detail").text("AJAX call failed (" + status + (error ? (": " + error) : "") + "). Maybe dump1090 is no longer running?");
|
||||
|
|
@ -297,25 +300,35 @@ function initialize() {
|
|||
// Initialize other controls
|
||||
initializeUnitsSelector();
|
||||
|
||||
// Set up altitude filter button event handlers and validation options
|
||||
$("#altitude_filter_form").submit(onFilterByAltitude);
|
||||
$("#altitude_filter_form").validate({
|
||||
errorPlacement: function(error, element) {
|
||||
return true;
|
||||
},
|
||||
|
||||
rules: {
|
||||
minAltitude: {
|
||||
number: true,
|
||||
min: -99999,
|
||||
max: 99999
|
||||
altitude_slider = document.getElementById('altitude_slider');
|
||||
|
||||
noUiSlider.create(altitude_slider, {
|
||||
start: [0, 65000],
|
||||
connect: true,
|
||||
range: {
|
||||
'min': 0,
|
||||
'max': 65000
|
||||
},
|
||||
maxAltitude: {
|
||||
number: true,
|
||||
min: -99999,
|
||||
max: 99999
|
||||
step: 25,
|
||||
format: {
|
||||
to: (v) => parseFloat(v).toFixed(0),
|
||||
from: (v) => parseFloat(v).toFixed(0)
|
||||
}
|
||||
});
|
||||
|
||||
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
|
||||
|
|
@ -323,18 +336,50 @@ function initialize() {
|
|||
customAltitudeColors = false;
|
||||
}
|
||||
|
||||
speed_slider = document.getElementById('speed_slider');
|
||||
|
||||
noUiSlider.create(speed_slider, {
|
||||
start: [0, 1000],
|
||||
connect: true,
|
||||
range: {
|
||||
'min': 0,
|
||||
'max': 1000
|
||||
},
|
||||
step: 5,
|
||||
format: {
|
||||
// 'to' the formatted value. Receives a number.
|
||||
to: function (value) {
|
||||
return value;
|
||||
},
|
||||
// 'from' the formatted value.
|
||||
// Receives a string, should return a number.
|
||||
from: function (value) {
|
||||
return value;
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
$("#altitude_filter_reset_button").click(onResetAltitudeFilter);
|
||||
var minSpeedInput = document.getElementById('minSpeedText'),
|
||||
maxSpeedInput = document.getElementById('maxSpeedText');
|
||||
|
||||
speed_slider.noUiSlider.on('update', function (values, handle) {
|
||||
if (handle) {
|
||||
maxSpeedInput.innerHTML = values[handle];
|
||||
} else {
|
||||
minSpeedInput.innerHTML = values[handle];
|
||||
}
|
||||
});
|
||||
|
||||
speed_slider.noUiSlider.on('set', function (values, handle) {
|
||||
onFilterBySpeed();
|
||||
});
|
||||
|
||||
$("#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();
|
||||
});
|
||||
|
|
@ -493,20 +538,19 @@ function load_history_item(i) {
|
|||
dataType: 'json' })
|
||||
|
||||
.done(function(data) {
|
||||
PositionHistoryBuffer.push(data);
|
||||
HistoryItemsReturned++;
|
||||
$("#loader_progress").attr('value',HistoryItemsReturned);
|
||||
if (HistoryItemsReturned == PositionHistorySize) {
|
||||
end_load_history();
|
||||
}
|
||||
PositionHistoryBuffer.push(data);
|
||||
HistoryItemsReturned++;
|
||||
if (HistoryItemsReturned == PositionHistorySize) {
|
||||
end_load_history();
|
||||
}
|
||||
})
|
||||
|
||||
.fail(function(jqxhr, status, error) {
|
||||
//Doesn't matter if it failed, we'll just be missing a data point
|
||||
HistoryItemsReturned++;
|
||||
if (HistoryItemsReturned == PositionHistorySize) {
|
||||
end_load_history();
|
||||
}
|
||||
//Doesn't matter if it failed, we'll just be missing a data point
|
||||
HistoryItemsReturned++;
|
||||
if (HistoryItemsReturned == PositionHistorySize) {
|
||||
end_load_history();
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
|
|
@ -2008,8 +2052,7 @@ function setAltitudeLegend(units) {
|
|||
}
|
||||
}
|
||||
|
||||
function onFilterByAltitude(e) {
|
||||
e.preventDefault();
|
||||
function onFilterByAltitude() {
|
||||
updatePlaneFilter();
|
||||
refreshTableInfo();
|
||||
|
||||
|
|
@ -2024,6 +2067,11 @@ function onFilterByAltitude(e) {
|
|||
}
|
||||
}
|
||||
|
||||
function onFilterBySpeed() {
|
||||
updatePlaneFilter();
|
||||
refreshTableInfo();
|
||||
}
|
||||
|
||||
function onFilterByAircraftType(e) {
|
||||
e.preventDefault();
|
||||
updatePlaneFilter();
|
||||
|
|
@ -2114,35 +2162,30 @@ function toggleAltitudeChart(switchToggle) {
|
|||
localStorage.setItem('altitudeChart', altitudeChartDisplay);
|
||||
}
|
||||
|
||||
function onResetAltitudeFilter(e) {
|
||||
$("#altitude_filter_min").val("");
|
||||
$("#altitude_filter_max").val("");
|
||||
|
||||
updatePlaneFilter();
|
||||
refreshTableInfo();
|
||||
}
|
||||
|
||||
function updatePlaneFilter() {
|
||||
var minAltitude = parseFloat($("#altitude_filter_min").val().trim());
|
||||
var maxAltitude = parseFloat($("#altitude_filter_max").val().trim());
|
||||
|
||||
if (minAltitude === NaN) {
|
||||
minAltitude = -Infinity;
|
||||
}
|
||||
|
||||
if (maxAltitude === NaN) {
|
||||
maxAltitude = Infinity;
|
||||
}
|
||||
// Get min/max altitude values from slider
|
||||
var minAltitude = document.getElementById('minAltitudeText').innerHTML.trim();
|
||||
var maxAltitude = document.getElementById('maxAltitudeText').innerHTML.trim();
|
||||
|
||||
PlaneFilter.minAltitude = minAltitude;
|
||||
PlaneFilter.maxAltitude = maxAltitude;
|
||||
PlaneFilter.altitudeUnits = DisplayUnits;
|
||||
|
||||
// Get min/max speed values from slider
|
||||
var minSpeedFilter = document.getElementById('minSpeedText').innerHTML.trim();
|
||||
var maxSpeedFilter = document.getElementById('maxSpeedText').innerHTML.trim();
|
||||
|
||||
PlaneFilter.minSpeedFilter = minSpeedFilter;
|
||||
PlaneFilter.maxSpeedFilter = maxSpeedFilter;
|
||||
PlaneFilter.speedUnits = DisplayUnits;
|
||||
|
||||
// Get aircraft type code filter from input box
|
||||
var aircraftTypeCode = $("#aircraft_type_filter").val().trim().toUpperCase()
|
||||
if (aircraftTypeCode === "") {
|
||||
aircraftTypeCode = undefined
|
||||
}
|
||||
|
||||
// Get aircraft ident filter from input box
|
||||
var aircraftIdent = $("#aircraft_ident_filter").val().trim().toUpperCase()
|
||||
if (aircraftIdent === "") {
|
||||
aircraftIdent = undefined
|
||||
|
|
|
|||
|
|
@ -230,9 +230,7 @@ div#loader { z-index: 99; position: absolute; left: 0; top: 0; bottom: 0; right:
|
|||
}
|
||||
|
||||
#units_container,
|
||||
#altitude_filter_form,
|
||||
#aircraft_type_filter_form,
|
||||
#aircraft_ident_filter_form {
|
||||
#altitude_filter_form {
|
||||
font-size: small;
|
||||
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;
|
||||
padding: 5px;
|
||||
text-align: center;
|
||||
border-radius: 4px;
|
||||
-webkit-border-radius: 4px;
|
||||
-moz-border-radius: 4px;
|
||||
}
|
||||
|
||||
.verticalRateTriangle {
|
||||
|
|
@ -852,6 +853,9 @@ select.error, textarea.error, input.error {
|
|||
cursor: pointer;
|
||||
text-align: center;
|
||||
width: auto;
|
||||
border-radius: 4px;
|
||||
-webkit-border-radius: 4px;
|
||||
-moz-border-radius: 4px;
|
||||
}
|
||||
|
||||
.config_button:hover, .config_button_active {
|
||||
|
|
@ -866,15 +870,79 @@ select.error, textarea.error, input.error {
|
|||
}
|
||||
|
||||
.panel {
|
||||
background-color: white;
|
||||
position: relative;
|
||||
padding: 3px 3px 10px 3px;
|
||||
display: none;
|
||||
margin-bottom: 5px;
|
||||
border: solid;
|
||||
border-color: #002F5D;
|
||||
height: auto;
|
||||
border-radius: 4px;
|
||||
-webkit-border-radius: 4px;
|
||||
-moz-border-radius: 4px;
|
||||
}
|
||||
|
||||
.wrapper {
|
||||
display: grid;
|
||||
grid-template-columns: repeat(3, 1fr);
|
||||
}
|
||||
}
|
||||
|
||||
#altitude_slider, #speed_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;
|
||||
}
|
||||
|
||||
.ui-resizable {
|
||||
min-width: 400px;
|
||||
}
|
||||
Loading…
Reference in New Issue