mess with stuff
This commit is contained in:
@@ -1,6 +1,15 @@
|
||||
// This was functionality of script.js, moved it to here to start the downloading of track history earlier
|
||||
"use strict";
|
||||
|
||||
|
||||
// TAR1090 application object
|
||||
let TAR;
|
||||
TAR = (function (global, jQuery, TAR) {
|
||||
return TAR;
|
||||
}(window, jQuery, TAR || {}));
|
||||
|
||||
let g = {};
|
||||
|
||||
let Dump1090Version = "unknown version";
|
||||
let RefreshInterval = 1000;
|
||||
let globeSimLoad = 6;
|
||||
|
||||
@@ -1073,7 +1073,13 @@
|
||||
<script src="script.js"></script>
|
||||
|
||||
|
||||
<link rel="preload" as="image" crossOrigin="anonymous" href="images/sprites016.png">
|
||||
<link rel="prefetch" as="image" crossOrigin="anonymous" href="images/sprites016.png">
|
||||
<link rel="preload" as="image" crossOrigin="anonymous" href="images/zoom-in.png">
|
||||
<link rel="preload" as="image" crossOrigin="anonymous" href="images/zoom-out.png">
|
||||
<link rel="preload" as="image" crossOrigin="anonymous" href="images/hide_sidebar.png">
|
||||
<link rel="preload" as="image" crossOrigin="anonymous" href="images/box-empty.png">
|
||||
<link rel="preload" as="image" crossOrigin="anonymous" href="images/toggle-width.png">
|
||||
<link rel="preload" as="image" crossOrigin="anonymous" href="images/settings-icon01.png">
|
||||
|
||||
</body>
|
||||
</html>
|
||||
|
||||
@@ -28,7 +28,7 @@
|
||||
if (I) { return I; };
|
||||
if ("undefined" != typeof fetch) {
|
||||
I = fetch("data:application/wasm;base64," + C);
|
||||
if ("undefined" != WebAssembly.instantiateStreaming) {
|
||||
if (0 && "undefined" != WebAssembly.instantiateStreaming) {
|
||||
I = WebAssembly.instantiateStreaming(I, Q);
|
||||
} else {
|
||||
I = I.then((A=>A.arrayBuffer()))
|
||||
|
||||
@@ -3,8 +3,8 @@
|
||||
function PlaneObject(icao) {
|
||||
icao = `${icao}`;
|
||||
|
||||
Planes[icao] = this;
|
||||
PlanesOrdered.push(this);
|
||||
g.planes[icao] = this;
|
||||
g.planesOrdered.push(this);
|
||||
|
||||
// Info about the plane
|
||||
this.icao = icao;
|
||||
@@ -670,16 +670,6 @@ PlaneObject.prototype.updateTrack = function(now, last, serverTrack, stale) {
|
||||
return this.updateTrackPrev();
|
||||
};
|
||||
|
||||
// This is to remove the line from the screen if we deselect the plane
|
||||
PlaneObject.prototype.clearLines = function() {
|
||||
this.linesDrawn = false;
|
||||
if (this.layer && this.layer.getVisible()) {
|
||||
this.layer.setVisible(false);
|
||||
}
|
||||
if (this.layer_labels && this.layer_labels.getVisible())
|
||||
this.layer_labels.setVisible(false);
|
||||
};
|
||||
|
||||
PlaneObject.prototype.getDataSourceNumber = function() {
|
||||
if (this.dataSource == "modeS")
|
||||
return 5;
|
||||
@@ -773,6 +763,10 @@ PlaneObject.prototype.getMarkerColor = function(options) {
|
||||
function altitudeColor(altitude) {
|
||||
let h, s, l;
|
||||
|
||||
const altRound = (webgl && !pTracks && !SelectedAllPlanes) ? 200 : 500;
|
||||
// round altitude to limit the number of colors used
|
||||
altitude = altRound * Math.round(altitude / altRound);
|
||||
|
||||
if (altitude == null) {
|
||||
h = ColorByAlt.unknown.h;
|
||||
s = ColorByAlt.unknown.s;
|
||||
@@ -854,7 +848,7 @@ PlaneObject.prototype.updateIcon = function() {
|
||||
|| (zoomLvl >= labelZoomGround - 2 && this.speed > 5 && !this.fakeHex)
|
||||
|| (zoomLvl >= labelZoomGround + 0 && !this.fakeHex)
|
||||
|| (zoomLvl >= labelZoomGround + 1)
|
||||
|| (this.selected && !SelectedAllPlanes)
|
||||
|| this.selected
|
||||
)
|
||||
) {
|
||||
let callsign = "";
|
||||
@@ -1050,7 +1044,7 @@ PlaneObject.prototype.processTrace = function() {
|
||||
|
||||
if (!traceOpts.showTime) {
|
||||
this.track_linesegs = [];
|
||||
this.remakeTrail();
|
||||
this.removeTrail();
|
||||
}
|
||||
|
||||
let firstPos = null;
|
||||
@@ -2076,7 +2070,7 @@ PlaneObject.prototype.updateLines = function() {
|
||||
|
||||
};
|
||||
|
||||
PlaneObject.prototype.remakeTrail = function() {
|
||||
PlaneObject.prototype.removeTrail = function() {
|
||||
|
||||
if (this.trail_features)
|
||||
this.trail_features.clear();
|
||||
@@ -2088,26 +2082,45 @@ PlaneObject.prototype.remakeTrail = function() {
|
||||
delete this.track_linesegs[i].label;
|
||||
}
|
||||
this.elastic_feature = null;
|
||||
|
||||
/*
|
||||
trailGroup.remove(this.layer);
|
||||
|
||||
this.trail_features = new ol.Collection();
|
||||
|
||||
this.layer = new ol.layer.Vector({
|
||||
name: this.icao,
|
||||
isTrail: true,
|
||||
source: new ol.source.Vector({
|
||||
features: this.trail_features,
|
||||
}),
|
||||
renderOrder: null,
|
||||
});
|
||||
|
||||
trailGroup.push(this.layer);
|
||||
*/
|
||||
|
||||
};
|
||||
|
||||
// This is to remove the line from the screen if we deselect the plane
|
||||
PlaneObject.prototype.clearLines = function() {
|
||||
this.linesDrawn = false;
|
||||
if (this.layer && this.layer.getVisible()) {
|
||||
this.layer.setVisible(false);
|
||||
}
|
||||
if (this.layer_labels && this.layer_labels.getVisible()) {
|
||||
this.layer_labels.setVisible(false);
|
||||
}
|
||||
};
|
||||
|
||||
PlaneObject.prototype.clearTrace = function() {
|
||||
this.clearTraceAfter = null;
|
||||
|
||||
this.clearLines();
|
||||
this.removeTrail();
|
||||
|
||||
if (globeIndex) {
|
||||
this.recentTrace = null;
|
||||
this.fullTrace = null;
|
||||
}
|
||||
}
|
||||
|
||||
PlaneObject.prototype.destroyTrace = function() {
|
||||
this.clearTrace();
|
||||
if (this.layer) {
|
||||
trailGroup.remove(this.layer);
|
||||
this.trail_features = null;
|
||||
this.layer = null;
|
||||
}
|
||||
if (this.layer_labels) {
|
||||
trailGroup.remove(this.layer_labels);
|
||||
this.trail_labels = null;
|
||||
this.layer_labels = null;
|
||||
}
|
||||
}
|
||||
|
||||
PlaneObject.prototype.makeTR = function (trTemplate) {
|
||||
|
||||
this.trCache = [];
|
||||
@@ -2160,41 +2173,6 @@ PlaneObject.prototype.destroyTR = function (trTemplate) {
|
||||
|
||||
this.tr = null;
|
||||
};
|
||||
PlaneObject.prototype.clearTrace = function() {
|
||||
this.clearTraceAfter = null;
|
||||
this.linesDrawn = false;
|
||||
if (this.trail_features) {
|
||||
this.trail_features.clear();
|
||||
}
|
||||
if (this.trail_labels) {
|
||||
this.trail_labels.clear();
|
||||
}
|
||||
this.elastic_feature = null;
|
||||
|
||||
if (globeIndex) {
|
||||
this.recentTrace = null;
|
||||
this.fullTrace = null;
|
||||
}
|
||||
for (let i in this.track_linesegs) {
|
||||
delete this.track_linesegs[i].feature;
|
||||
delete this.track_linesegs[i].label;
|
||||
}
|
||||
}
|
||||
|
||||
PlaneObject.prototype.destroyTrace = function() {
|
||||
this.clearTrace();
|
||||
if (this.layer) {
|
||||
trailGroup.remove(this.layer);
|
||||
this.trail_features.clear();
|
||||
this.trail_features = null;
|
||||
this.layer = null;
|
||||
}
|
||||
if (this.layer_labels) {
|
||||
trailGroup.remove(this.layer_labels);
|
||||
this.trail_labels = null;
|
||||
this.layer_labels = null;
|
||||
}
|
||||
}
|
||||
|
||||
PlaneObject.prototype.destroy = function() {
|
||||
this.clearLines();
|
||||
@@ -2410,7 +2388,7 @@ PlaneObject.prototype.reapTrail = function() {
|
||||
}
|
||||
}
|
||||
if (this.track_linesegs.length != oldSegs.length) {
|
||||
this.remakeTrail();
|
||||
this.removeTrail();
|
||||
this.updateTick(true);
|
||||
}
|
||||
};
|
||||
@@ -2720,7 +2698,7 @@ PlaneObject.prototype.isNonIcao = function() {
|
||||
|
||||
PlaneObject.prototype.checkVisible = function() {
|
||||
const jaeroTime = (this.dataSource == "adsc") ? jaeroTimeout : 0;
|
||||
const noInfoTimeout = replay ? 600 : (reApi ? (2 * refreshInt() / 1000) : (2 * refreshInt() / globeSimLoad * globeTilesViewCount / 1000));
|
||||
const noInfoTimeout = replay ? 600 : (reApi ? (30 + 2 * refreshInt() / 1000) : (2 * refreshInt() / globeSimLoad * globeTilesViewCount / 1000));
|
||||
const mlatTime = (this.dataSource == "mlat") ? 25 : 0;
|
||||
const modeSTime = (guessModeS && this.dataSource == "modeS") ? 300 : 0;
|
||||
const tisbReduction = (this.icao[0] == '~') ? 15 : 0;
|
||||
@@ -2739,7 +2717,7 @@ PlaneObject.prototype.checkVisible = function() {
|
||||
return (!globeIndex || this.inView || this.selected || SelectedAllPlanes) && (
|
||||
(!globeIndex && this.seen < (58 - tisbReduction + jaeroTime + refreshInt()))
|
||||
|| (globeIndex && this.seen_pos < (40 + jaeroTime + mlatTime + modeSTime - tisbReduction + refreshInt()) && now - this.last_info_server < noInfoTimeout)
|
||||
|| this.selected || SelectedAllPlanes
|
||||
|| this.selected
|
||||
|| noVanish
|
||||
|| (nogpsOnly && this.nogps && this.seen < 15 * 60)
|
||||
);
|
||||
|
||||
196
html/script.js
196
html/script.js
@@ -4,6 +4,9 @@
|
||||
|
||||
"use strict";
|
||||
|
||||
g.planes = {};
|
||||
g.planesOrdered = [];
|
||||
|
||||
// Define our global variables
|
||||
let tabHidden = false;
|
||||
let webgl = false;
|
||||
@@ -28,8 +31,6 @@ let realHeat;
|
||||
let iconCache = {};
|
||||
let addToIconCache = [];
|
||||
let lineStyleCache = {};
|
||||
let Planes = {};
|
||||
let PlanesOrdered = [];
|
||||
let replayPlanes = {};
|
||||
let PlaneFilter = {};
|
||||
let SelectedPlane = null;
|
||||
@@ -176,18 +177,11 @@ let badDotMlat;
|
||||
|
||||
let showingReplayBar = false;
|
||||
|
||||
// TAR1090 application object
|
||||
let TAR;
|
||||
TAR = (function (global, jQuery, TAR) {
|
||||
return TAR;
|
||||
}(window, jQuery, TAR || {}));
|
||||
|
||||
|
||||
function processAircraft(ac, init, uat) {
|
||||
let isArray = Array.isArray(ac);
|
||||
let hex = isArray ? ac[0] : ac.hex;
|
||||
|
||||
// Do we already have this plane object in Planes?
|
||||
// Do we already have this plane object in g.planes?
|
||||
// If not make it.
|
||||
|
||||
/*
|
||||
@@ -203,7 +197,7 @@ function processAircraft(ac, init, uat) {
|
||||
return;
|
||||
}
|
||||
|
||||
let plane = Planes[hex]
|
||||
let plane = g.planes[hex]
|
||||
|
||||
if (!plane) {
|
||||
plane = new PlaneObject(hex);
|
||||
@@ -375,8 +369,8 @@ function fetchDone(data) {
|
||||
if (uuid) {
|
||||
const ext = myExtent(OLMap.getView().calculateExtent(OLMap.getSize()));
|
||||
let jump = true;
|
||||
for (let i = 0; i < PlanesOrdered.length; ++i) {
|
||||
const plane = PlanesOrdered[i];
|
||||
for (let i = 0; i < g.planesOrdered.length; ++i) {
|
||||
const plane = g.planesOrdered[i];
|
||||
if (plane.visible && inView(plane.position, ext)) {
|
||||
jump = false;
|
||||
break;
|
||||
@@ -1212,8 +1206,8 @@ jQuery('#selected_altitude_geom1')
|
||||
windLabelsSlim = state;
|
||||
if (!loadFinished)
|
||||
return;
|
||||
for (let key in PlanesOrdered) {
|
||||
PlanesOrdered[key].updateMarker();
|
||||
for (let key in g.planesOrdered) {
|
||||
g.planesOrdered[key].updateMarker();
|
||||
}
|
||||
}
|
||||
});
|
||||
@@ -1227,8 +1221,8 @@ jQuery('#selected_altitude_geom1')
|
||||
showLabelUnits = state;
|
||||
if (!loadFinished)
|
||||
return;
|
||||
for (let key in PlanesOrdered) {
|
||||
PlanesOrdered[key].updateMarker();
|
||||
for (let key in g.planesOrdered) {
|
||||
g.planesOrdered[key].updateMarker();
|
||||
}
|
||||
remakeTrails();
|
||||
refreshSelected();
|
||||
@@ -1724,8 +1718,8 @@ function parseHistory() {
|
||||
|
||||
// Final pass to update all planes to their latest state
|
||||
console.log("Final history cleanup pass");
|
||||
for (let i in PlanesOrdered) {
|
||||
let plane = PlanesOrdered[i];
|
||||
for (let i in g.planesOrdered) {
|
||||
let plane = g.planesOrdered[i];
|
||||
|
||||
if (plane.position && SitePosition)
|
||||
plane.sitedist = ol.sphere.getDistance(SitePosition, plane.position);
|
||||
@@ -1962,7 +1956,7 @@ function webglAddLayer() {
|
||||
|
||||
processAircraft({hex: icao, lat: CenterLat, lon: CenterLon, type: 'tisb_other', seen: 0, seen_pos: 0,
|
||||
alt_baro: 25000, });
|
||||
let plane = Planes['~c0ffee'];
|
||||
let plane = g.planes['~c0ffee'];
|
||||
|
||||
try {
|
||||
let glStyle = {
|
||||
@@ -2039,8 +2033,8 @@ function webglAddLayer() {
|
||||
if (loStore['webgl'] == 'true')
|
||||
loStore.removeItem('webgl');
|
||||
}
|
||||
delete Planes[plane.icao];
|
||||
PlanesOrdered.splice(PlanesOrdered.indexOf(plane), 1);
|
||||
delete g.planes[plane.icao];
|
||||
g.planesOrdered.splice(g.planesOrdered.indexOf(plane), 1);
|
||||
plane.destroy();
|
||||
|
||||
if (icaoFilter != null) {
|
||||
@@ -2082,8 +2076,8 @@ function webglInit() {
|
||||
webgl = false;
|
||||
if (loadFinished) {
|
||||
webglFeatures && webglFeatures.clear();
|
||||
for (let i in PlanesOrdered) {
|
||||
const plane = PlanesOrdered[i];
|
||||
for (let i in g.planesOrdered) {
|
||||
const plane = g.planesOrdered[i];
|
||||
delete plane.glMarker;
|
||||
}
|
||||
}
|
||||
@@ -2729,7 +2723,7 @@ function initMap() {
|
||||
});
|
||||
*/
|
||||
|
||||
// This looks for planes to reap out of the master Planes variable
|
||||
// This looks for planes to reap out of the master g.planes variable
|
||||
let lastReap = 0;
|
||||
let reapInProgress = false;
|
||||
function reaper(all) {
|
||||
@@ -2748,10 +2742,10 @@ function reaper(all) {
|
||||
|
||||
// Look for planes where we have seen no messages for >300 seconds
|
||||
let plane;
|
||||
let length = PlanesOrdered.length;
|
||||
let length = g.planesOrdered.length;
|
||||
let temp = []
|
||||
for (let i in PlanesOrdered) {
|
||||
plane = PlanesOrdered[i];
|
||||
for (let i in g.planesOrdered) {
|
||||
plane = g.planesOrdered[i];
|
||||
if (plane == null)
|
||||
continue;
|
||||
plane.seen = now - plane.last_message_time;
|
||||
@@ -2761,7 +2755,7 @@ function reaper(all) {
|
||||
) {
|
||||
// Reap it.
|
||||
//console.log("Removed " + plane.icao);
|
||||
delete Planes[plane.icao];
|
||||
delete g.planes[plane.icao];
|
||||
plane.destroy();
|
||||
continue;
|
||||
}
|
||||
@@ -2781,13 +2775,16 @@ function reaper(all) {
|
||||
}
|
||||
}
|
||||
}
|
||||
PlanesOrdered = temp;
|
||||
g.planesOrdered = temp;
|
||||
|
||||
reapInProgress = false;
|
||||
const removed = length - PlanesOrdered.length;
|
||||
const removed = length - g.planesOrdered.length;
|
||||
if (removed > 0) {
|
||||
//console.log(`reaper removed ${removed} planes.`);
|
||||
}
|
||||
|
||||
refresh();
|
||||
|
||||
return removed;
|
||||
}
|
||||
|
||||
@@ -3382,15 +3379,28 @@ function removeHighlight() {
|
||||
refreshHighlighted();
|
||||
}
|
||||
|
||||
function mstime() {
|
||||
return new Date().getTime();
|
||||
}
|
||||
|
||||
// recreating all OpenLayers Features for the planes every now and then releases some retained memory
|
||||
// Haven't been able to create a reproducer ... regardless let's stick with this workaround
|
||||
// in other words: probably not an issue with OpenLayers.
|
||||
|
||||
let nextCacheClear = mstime() + 300 * 1000;
|
||||
|
||||
function releaseMem() {
|
||||
|
||||
if (mstime() > nextCacheClear) {
|
||||
nextCacheClear = mstime() + 300 * 1000;
|
||||
lineStyleCache = {};
|
||||
iconCache = {};
|
||||
}
|
||||
|
||||
//console.log('releaseMem()');
|
||||
for (let i in PlanesOrdered) {
|
||||
PlanesOrdered[i].clearMarker();
|
||||
PlanesOrdered[i].destroyTrace();
|
||||
PlanesOrdered[i].destroyTR();
|
||||
for (let i in g.planesOrdered) {
|
||||
g.planesOrdered[i].clearMarker();
|
||||
g.planesOrdered[i].destroyTR();
|
||||
}
|
||||
refreshFeatures();
|
||||
TAR.planeMan.redraw();
|
||||
@@ -3401,13 +3411,13 @@ function refreshFeatures() {
|
||||
return;
|
||||
}
|
||||
updateVisible();
|
||||
for (let i in PlanesOrdered) {
|
||||
PlanesOrdered[i].updateFeatures(true);
|
||||
for (let i in g.planesOrdered) {
|
||||
g.planesOrdered[i].updateFeatures(true);
|
||||
}
|
||||
}
|
||||
|
||||
//
|
||||
// Planes table begin
|
||||
// g.planes table begin
|
||||
//
|
||||
(function (global, jQuery, TAR) {
|
||||
let planeMan = TAR.planeMan = TAR.planeMan || {};
|
||||
@@ -3609,8 +3619,8 @@ function refreshFeatures() {
|
||||
activeCols.push(col);
|
||||
}
|
||||
}
|
||||
for (let i = 0; i < PlanesOrdered.length; ++i) {
|
||||
PlanesOrdered[i].destroyTR();
|
||||
for (let i = 0; i < g.planesOrdered.length; ++i) {
|
||||
g.planesOrdered[i].destroyTR();
|
||||
}
|
||||
let table = '';
|
||||
table += '<thead class="aircraft_table_header">';
|
||||
@@ -3662,8 +3672,8 @@ function refreshFeatures() {
|
||||
|
||||
ctime && console.time("inView");
|
||||
let pList = []; // list of planes that might go in the table and need sorting
|
||||
for (let i = 0; i < PlanesOrdered.length; ++i) {
|
||||
const plane = PlanesOrdered[i];
|
||||
for (let i = 0; i < g.planesOrdered.length; ++i) {
|
||||
const plane = g.planesOrdered[i];
|
||||
|
||||
TrackedHistorySize += plane.history_size;
|
||||
|
||||
@@ -3880,7 +3890,7 @@ function refreshFeatures() {
|
||||
|
||||
if (id === sortId) {
|
||||
sortAscending = !sortAscending;
|
||||
PlanesOrdered.reverse(); // this correctly flips the order of rows that compare equal
|
||||
g.planesOrdered.reverse(); // this correctly flips the order of rows that compare equal
|
||||
} else {
|
||||
sortAscending = true;
|
||||
}
|
||||
@@ -3947,7 +3957,7 @@ function refreshFeatures() {
|
||||
return TAR;
|
||||
}(window, jQuery, TAR || {}));
|
||||
//
|
||||
// Planes table end
|
||||
// g.planes table end
|
||||
//
|
||||
|
||||
function deselect(plane) {
|
||||
@@ -4001,7 +4011,7 @@ function selectPlaneByHex(hex, options) {
|
||||
// already selected plane
|
||||
let oldPlane = SelectedPlane;
|
||||
// plane to be selected
|
||||
let newPlane = Planes[hex];
|
||||
let newPlane = g.planes[hex];
|
||||
|
||||
if (!options.noFetch && globeIndex && hex) {
|
||||
newPlane = getTrace(newPlane, hex, options);
|
||||
@@ -4070,8 +4080,8 @@ function selectAllPlanes() {
|
||||
SelectedAllPlanes = true;
|
||||
|
||||
if (globeIndex) {
|
||||
for (let i in PlanesOrdered) {
|
||||
let plane = PlanesOrdered[i];
|
||||
for (let i in g.planesOrdered) {
|
||||
let plane = g.planesOrdered[i];
|
||||
if (plane.visible && plane.inView) {
|
||||
plane.processTrace();
|
||||
}
|
||||
@@ -4378,6 +4388,8 @@ function toggleIsolation(state) {
|
||||
|
||||
if (prevState != onlySelected)
|
||||
refreshFilter();
|
||||
|
||||
fetchData({force: true});
|
||||
}
|
||||
|
||||
function toggleMilitary() {
|
||||
@@ -4507,7 +4519,7 @@ function followRandomPlane() {
|
||||
let this_one = null;
|
||||
let tired = 0;
|
||||
do {
|
||||
this_one = PlanesOrdered[Math.floor(Math.random()*PlanesOrdered.length)];
|
||||
this_one = g.planesOrdered[Math.floor(Math.random()*g.planesOrdered.length)];
|
||||
if (!this_one || tired++ > 1000)
|
||||
break;
|
||||
} while ((this_one.isFiltered() && !onlySelected) || !this_one.position || (now - this_one.position_time > 30));
|
||||
@@ -4533,8 +4545,8 @@ function toggleTableInView(switchOn) {
|
||||
function toggleLabels() {
|
||||
enableLabels = !enableLabels;
|
||||
loStore['enableLabels'] = enableLabels;
|
||||
for (let key in PlanesOrdered) {
|
||||
PlanesOrdered[key].updateMarker();
|
||||
for (let key in g.planesOrdered) {
|
||||
g.planesOrdered[key].updateMarker();
|
||||
}
|
||||
refreshFeatures();
|
||||
buttonActive('#L', enableLabels);
|
||||
@@ -4554,8 +4566,8 @@ function toggleExtendedLabels(options) {
|
||||
extendedLabels %= 4;
|
||||
//console.log(extendedLabels);
|
||||
loStore['extendedLabels'] = extendedLabels;
|
||||
for (let key in PlanesOrdered) {
|
||||
PlanesOrdered[key].updateMarker();
|
||||
for (let key in g.planesOrdered) {
|
||||
g.planesOrdered[key].updateMarker();
|
||||
}
|
||||
buttonActive('#O', extendedLabels);
|
||||
}
|
||||
@@ -4864,7 +4876,7 @@ function getPhotoLink(ac) {
|
||||
return "";
|
||||
return "<a class=\"link\" target=\"_blank\" href=\"https://flightaware.com/photos/aircraft/" + ac.registration.replace(/[^0-9a-z]/ig,'') + "\" rel=\"noreferrer\">FA Photos</a>";
|
||||
} else if (showPictures) {
|
||||
return "<a class=\"link\" target=\"_blank\" href=\"https://www.planespotters.net/hex/" + ac.icao.toUpperCase() + "\" rel=\"noreferrer\">View on Planespotters</a>";
|
||||
return "<a class=\"link\" target=\"_blank\" href=\"https://www.planespotters.net/hex/" + ac.icao.toUpperCase() + "\" rel=\"noreferrer\">View on g.planespotters</a>";
|
||||
}
|
||||
}
|
||||
|
||||
@@ -4904,8 +4916,8 @@ function fetchPfData() {
|
||||
const req = jQuery.ajax({ url: pf_data[i],
|
||||
dataType: 'json' });
|
||||
jQuery.when(req).done(function(data) {
|
||||
for (let i in PlanesOrdered) {
|
||||
const plane = PlanesOrdered[i];
|
||||
for (let i in g.planesOrdered) {
|
||||
const plane = g.planesOrdered[i];
|
||||
const ac = data.aircraft[plane.icao.toUpperCase()];
|
||||
if (!ac) {
|
||||
continue;
|
||||
@@ -4928,11 +4940,11 @@ function fetchPfData() {
|
||||
function solidGoldT(arg) {
|
||||
solidT = true;
|
||||
let list = [[], [], [], []];
|
||||
for (let i = 0; i < PlanesOrdered.length; i++) {
|
||||
let plane = PlanesOrdered[i];
|
||||
for (let i = 0; i < g.planesOrdered.length; i++) {
|
||||
let plane = g.planesOrdered[i];
|
||||
//console.log(plane);
|
||||
if (plane.visible) {
|
||||
list[Math.floor(4*i/PlanesOrdered.length)].push(plane);
|
||||
list[Math.floor(4*i/g.planesOrdered.length)].push(plane);
|
||||
}
|
||||
}
|
||||
getTrace(null, null, {onlyRecent: arg == 2, onlyFull: arg == 1, list: list[0],});
|
||||
@@ -5170,8 +5182,8 @@ function updateVisible() {
|
||||
if (mapIsVisible || !lastRenderExtent) {
|
||||
lastRenderExtent = getRenderExtent();
|
||||
}
|
||||
for (let i in PlanesOrdered) {
|
||||
PlanesOrdered[i].updateVisible();
|
||||
for (let i in g.planesOrdered) {
|
||||
g.planesOrdered[i].updateVisible();
|
||||
}
|
||||
}
|
||||
|
||||
@@ -5183,9 +5195,9 @@ function mapRefresh(redraw) {
|
||||
let count = 0;
|
||||
|
||||
if (globeIndex && !icaoFilter) {
|
||||
for (let i in PlanesOrdered) {
|
||||
for (let i in g.planesOrdered) {
|
||||
count++;
|
||||
const plane = PlanesOrdered[i];
|
||||
const plane = g.planesOrdered[i];
|
||||
delete plane.glMarker;
|
||||
// disable mobile limitations when using webGL
|
||||
if (plane.selected || (plane.inView && plane.visible && (!onMobile || webgl || (nMapPlanes < 150 && (!plane.onGround || zoomLvl > 10))))) {
|
||||
@@ -5193,12 +5205,12 @@ function mapRefresh(redraw) {
|
||||
nMapPlanes++;
|
||||
} else {
|
||||
plane.markerDrawn && plane.clearMarker();
|
||||
plane.linesDrawn && !plane.visible && plane.clearLines();
|
||||
!SelectedAllPlanes && plane.linesDrawn && plane.clearLines();
|
||||
}
|
||||
}
|
||||
} else {
|
||||
for (let i in PlanesOrdered) {
|
||||
const plane = PlanesOrdered[i];
|
||||
for (let i in g.planesOrdered) {
|
||||
const plane = g.planesOrdered[i];
|
||||
addToMap.push(plane);
|
||||
delete plane.glMarker;
|
||||
}
|
||||
@@ -5248,7 +5260,7 @@ function highlight(evt) {
|
||||
//clearTimeout(pointerMoveTimeout);
|
||||
|
||||
if (hex) {
|
||||
HighlightedPlane = Planes[hex];
|
||||
HighlightedPlane = g.planes[hex];
|
||||
} else {
|
||||
HighlightedPlane = null;
|
||||
}
|
||||
@@ -5263,7 +5275,7 @@ function parseURLIcaos() {
|
||||
const icao = inArray[i].toLowerCase();
|
||||
if (icao && (icao.length == 7 || icao.length == 6) && icao.toLowerCase().match(/[a-f,0-9]{6}/)) {
|
||||
urlIcaos.push(icao);
|
||||
let newPlane = Planes[icao] || new PlaneObject(icao);
|
||||
let newPlane = g.planes[icao] || new PlaneObject(icao);
|
||||
newPlane.last_message_time = NaN;
|
||||
newPlane.position_time = NaN;
|
||||
newPlane.selected = true;
|
||||
@@ -5333,7 +5345,7 @@ function processURLParams(){
|
||||
console.log('Selected ICAO id: '+ icao + ' traceDate: ' + traceDateString);
|
||||
let options = {follow: follow, noDeselect: true};
|
||||
if (traceDate != null) {
|
||||
let newPlane = Planes[icao] || new PlaneObject(icao);
|
||||
let newPlane = g.planes[icao] || new PlaneObject(icao);
|
||||
newPlane.last_message_time = NaN;
|
||||
newPlane.position_time = NaN;
|
||||
newPlane.selected = true;
|
||||
@@ -5452,8 +5464,8 @@ function findPlanes(queries, byIcao, byCallsign, byReg, byType, showWarnings) {
|
||||
});
|
||||
}
|
||||
}
|
||||
for (let i in PlanesOrdered) {
|
||||
const plane = PlanesOrdered[i];
|
||||
for (let i in g.planesOrdered) {
|
||||
const plane = g.planesOrdered[i];
|
||||
if (
|
||||
(byCallsign && plane.flight != null && plane.flight.toLowerCase().match(query))
|
||||
|| (byIcao && plane.icao.toLowerCase().match(query))
|
||||
@@ -5506,8 +5518,8 @@ function findPlanes(queries, byIcao, byCallsign, byReg, byType, showWarnings) {
|
||||
}
|
||||
|
||||
function trailReaper() {
|
||||
for (let i in PlanesOrdered) {
|
||||
PlanesOrdered[i].reapTrail();
|
||||
for (let i in g.planesOrdered) {
|
||||
g.planesOrdered[i].reapTrail();
|
||||
}
|
||||
}
|
||||
|
||||
@@ -6248,7 +6260,7 @@ function initSitePos() {
|
||||
/*
|
||||
function drawAlt() {
|
||||
processAircraft({hex: 'c0ffee', });
|
||||
let plane = Planes['c0ffee'];
|
||||
let plane = g.planes['c0ffee'];
|
||||
newWidth = 4;
|
||||
for (let i = 0; i <= 50000; i += 500) {
|
||||
plane.position = [i/10000, 0];
|
||||
@@ -6260,9 +6272,9 @@ function drawAlt() {
|
||||
*/
|
||||
|
||||
function remakeTrails() {
|
||||
for (let i in PlanesOrdered) {
|
||||
PlanesOrdered[i].remakeTrail();
|
||||
PlanesOrdered[i].updateFeatures(true);
|
||||
for (let i in g.planesOrdered) {
|
||||
g.planesOrdered[i].removeTrail();
|
||||
g.planesOrdered[i].updateFeatures();
|
||||
}
|
||||
}
|
||||
|
||||
@@ -6489,7 +6501,7 @@ function getTrace(newPlane, hex, options) {
|
||||
}
|
||||
|
||||
if (!newPlane) {
|
||||
newPlane = Planes[hex] || new PlaneObject(hex);
|
||||
newPlane = g.planes[hex] || new PlaneObject(hex);
|
||||
newPlane.last_message_time = NaN;
|
||||
newPlane.position_time = NaN;
|
||||
select(newPlane, options);
|
||||
@@ -6561,7 +6573,7 @@ function getTrace(newPlane, hex, options) {
|
||||
})
|
||||
.done(function(data) {
|
||||
const options = this.options;
|
||||
const plane = Planes[options.plane];
|
||||
const plane = g.planes[options.plane];
|
||||
plane.recentTrace = normalizeTraceStamps(data);
|
||||
if (!showTrace) {
|
||||
plane.processTrace();
|
||||
@@ -6588,10 +6600,10 @@ function getTrace(newPlane, hex, options) {
|
||||
})
|
||||
.done(function(data) {
|
||||
const options = this.options;
|
||||
const plane = Planes[options.plane];
|
||||
const plane = g.planes[options.plane];
|
||||
plane.fullTrace = normalizeTraceStamps(data);
|
||||
options.defer.done(function(options) {
|
||||
const plane = Planes[options.plane];
|
||||
const plane = g.planes[options.plane];
|
||||
if (showTrace) {
|
||||
legShift(0, plane);
|
||||
if (!multiSelect) {
|
||||
@@ -6612,7 +6624,7 @@ function getTrace(newPlane, hex, options) {
|
||||
})
|
||||
.fail(function() {
|
||||
const options = this.options;
|
||||
const plane = Planes[options.plane];
|
||||
const plane = g.planes[options.plane];
|
||||
if (showTrace)
|
||||
legShift(0, plane);
|
||||
else
|
||||
@@ -7161,7 +7173,7 @@ function replayStep(arg) {
|
||||
}
|
||||
}
|
||||
ac.squawk = (lat & 0xFFFF).toString(10).padStart(4, '0');
|
||||
if (!Planes[hex]) {
|
||||
if (!g.planes[hex]) {
|
||||
replayPlanes[hex] = ac;
|
||||
continue;
|
||||
}
|
||||
@@ -7218,7 +7230,7 @@ function replayStep(arg) {
|
||||
seen_pos: 0,
|
||||
};
|
||||
|
||||
if (!Planes[hex]) {
|
||||
if (!g.planes[hex]) {
|
||||
const cached = replayPlanes[hex];
|
||||
if (cached) {
|
||||
ac = cached;
|
||||
@@ -7247,10 +7259,6 @@ function replayStep(arg) {
|
||||
function updateIconCache() {
|
||||
let item;
|
||||
let tryAgain = [];
|
||||
if (Object.keys(iconCache).length > 20000) {
|
||||
// reset cache
|
||||
iconCache = {};
|
||||
}
|
||||
while(item = addToIconCache.pop()) {
|
||||
let svgKey = item[0];
|
||||
let element = item[1];
|
||||
@@ -7513,8 +7521,8 @@ function handleVisibilityChange() {
|
||||
|
||||
let count = 0;
|
||||
if (multiSelect && !SelectedAllPlanes) {
|
||||
for (let i = 0; i < PlanesOrdered.length; ++i) {
|
||||
let plane = PlanesOrdered[i];
|
||||
for (let i = 0; i < g.planesOrdered.length; ++i) {
|
||||
let plane = g.planesOrdered[i];
|
||||
if (plane.selected) {
|
||||
getTrace(plane, plane.icao, {});
|
||||
if (count++ > 20)
|
||||
@@ -7569,8 +7577,8 @@ function selectClosest() {
|
||||
let closest = null;
|
||||
let closestDistance = null;
|
||||
checkMovement();
|
||||
for (let key in PlanesOrdered) {
|
||||
const plane = PlanesOrdered[key];
|
||||
for (let key in g.planesOrdered) {
|
||||
const plane = g.planesOrdered[key];
|
||||
if (!closest)
|
||||
closest = plane;
|
||||
if (plane.position == null || !plane.visible)
|
||||
@@ -7757,7 +7765,7 @@ const EXPORT_RGB_COLORS = [
|
||||
];
|
||||
|
||||
// Converts "rrggbb" colors to KML format, "aabbggrr".
|
||||
function RGBColorToKMLColor(c) {
|
||||
let RGBColorToKMLColor = function(c) {
|
||||
return 'ff' + c.substring(4, 6) + c.substring(2, 4) + c.substring(0, 2);
|
||||
}
|
||||
|
||||
@@ -7924,8 +7932,8 @@ function exportKML(altStyle) {
|
||||
}
|
||||
|
||||
function deleteTraces() {
|
||||
for (let i in PlanesOrdered) {
|
||||
let plane = PlanesOrdered[i];
|
||||
for (let i in g.planesOrdered) {
|
||||
let plane = g.planesOrdered[i];
|
||||
delete plane.recentTrace;
|
||||
delete plane.fullTrace;
|
||||
}
|
||||
|
||||
@@ -114,13 +114,14 @@ location /INSTANCE {
|
||||
gzip on;
|
||||
gzip_static on;
|
||||
}
|
||||
location = /INSTANCE/style.css {
|
||||
|
||||
# regex matches
|
||||
location ~ ^/INSTANCE/style.*\.css$ {
|
||||
add_header Cache-Control "public, max-age=7776000";
|
||||
gzip on;
|
||||
gzip_static on;
|
||||
}
|
||||
|
||||
# regex matches
|
||||
location ~ ^/INSTANCE/db-.*\.js$ {
|
||||
gzip off;
|
||||
gzip_static off;
|
||||
|
||||
@@ -28,7 +28,7 @@
|
||||
if (I) { return I; };
|
||||
if ("undefined" != typeof fetch) {
|
||||
I = fetch("data:application/wasm;base64," + C);
|
||||
if ("undefined" != WebAssembly.instantiateStreaming) {
|
||||
if (0 && "undefined" != WebAssembly.instantiateStreaming) {
|
||||
I = WebAssembly.instantiateStreaming(I, Q);
|
||||
} else {
|
||||
I = I.then((A=>A.arrayBuffer()))
|
||||
|
||||
Reference in New Issue
Block a user