mirror of
https://github.com/f4exb/sdrangel.git
synced 2024-11-30 03:38:55 -05:00
182 lines
7.3 KiB
HTML
182 lines
7.3 KiB
HTML
<!doctype html>
|
|
<html lang="en" style="height:100%;min-height:100%;">
|
|
<head>
|
|
<title>SDRangel ESASky</title>
|
|
</head>
|
|
|
|
<body style="margin:0;padding:0;height:100%;">
|
|
|
|
<script type="text/javascript">
|
|
|
|
var esaskyFrame;
|
|
var antennaHpbw = 5.0;
|
|
var showAntenna = false;
|
|
|
|
// API reference: https://www.cosmos.esa.int/web/esdc/esasky-javascript-api
|
|
function on_ready() {
|
|
esaskyFrame = document.getElementsByClassName("iframe-container")[0].children[0];
|
|
|
|
var cmd = { event: 'setModuleVisibility', content: { modules: { jwst_planning_button: false } } };
|
|
esaskyFrame.contentWindow.postMessage(cmd, 'https://sky.esa.int');
|
|
|
|
window.addEventListener("message", handleMessage);
|
|
|
|
setTimeout(function () { reportReady(); }, 500); // Add a delay, otherwise subsequent commands to set grid seem to get lost
|
|
|
|
// Can't access contentDocument due to same origin policy
|
|
//console.log(esaskyFrame.contentDocument);
|
|
//console.log("containers: " + esaskyFrame.contentDocument.getElementsByName("aladin-container"));
|
|
|
|
// Report ra/dec/time
|
|
// We don't use events, as they are too slow (view_changed is only sent after all data has been calculated)
|
|
setInterval(function () { reportView(); }, 100);
|
|
//setTimeout(function () { requestEvents(); }, 1000);
|
|
}
|
|
|
|
/*function requestEvents() {
|
|
var cmd1 = { event: 'registerEventListener', content: {} };
|
|
esaskyFrame.contentWindow.postMessage(cmd1, 'https://sky.esa.int');
|
|
|
|
var cmd2 = { event: 'registerFoVChangedListener', content: {} };
|
|
esaskyFrame.contentWindow.postMessage(cmd2, 'https://sky.esa.int');
|
|
}*/
|
|
|
|
// Use WebSockets for handling commands from SDRangel Plugin
|
|
// and sending events back to it
|
|
let socket = new WebSocket("ws://127.0.0.1:$WS_PORT$");
|
|
|
|
socket.onmessage = function (event) {
|
|
try {
|
|
const command = JSON.parse(event.data);
|
|
|
|
if (command.command == "setView") {
|
|
var cmd = { event: 'goToRaDec', content: { ra: command.ra * 15.0, dec: command.dec } }; // Convert RA hours to decimal degrees
|
|
esaskyFrame.contentWindow.postMessage(cmd, 'https://sky.esa.int');
|
|
} else if (command.command == "setPosition") {
|
|
// Not supported
|
|
} else if (command.command == "setDateTime") {
|
|
// Not supported
|
|
} else if (command.command == "track") {
|
|
var cmd = { event: 'goToTargetName', content: { targetName: command.name } };
|
|
esaskyFrame.contentWindow.postMessage(cmd, 'https://sky.esa.int');
|
|
} else if (command.command == "setBackground") {
|
|
// Leave to its own GUI
|
|
} else if (command.command == "showConstellations") {
|
|
// Not supported
|
|
} else if (command.command == "showReticle") {
|
|
// Not supported
|
|
} else if (command.command == "showGrid") {
|
|
var cmd = { event: 'showCoordinateGrid', content: { show: command.show } };
|
|
esaskyFrame.contentWindow.postMessage(cmd, 'https://sky.esa.int');
|
|
} else if (command.command == "showAntennaFoV") {
|
|
showAntenna = command.show;
|
|
if (!showAntenna) {
|
|
hideAntennaFoV();
|
|
}
|
|
} else if (command.command == "setAntennaFoV") {
|
|
antennaHpbw = command.hpbw;
|
|
} else {
|
|
console.log(`Unknown command ${command.command}`);
|
|
}
|
|
|
|
} catch (e) {
|
|
console.log(`Erroring processing received message:\n${e}\n${event.data}`);
|
|
}
|
|
};
|
|
|
|
function reportReady() {
|
|
console.log("reportReady " + socket.readyState);
|
|
if (socket.readyState === 1) {
|
|
socket.send(JSON.stringify({
|
|
event: "ready"
|
|
}));
|
|
} else {
|
|
setTimeout(reportReady, 100);
|
|
}
|
|
}
|
|
|
|
function handleMessage(e) {
|
|
//console.log(e);
|
|
|
|
var data = e.data;
|
|
if (data.origin == "esasky") {
|
|
|
|
var ra, dec, fov;
|
|
|
|
if (data.hasOwnProperty('event')) {
|
|
if (data.event.action == "view_changed") {
|
|
ra = data.event.values["ra"];
|
|
dec = data.event.values["dec"];
|
|
fov = data.event.values["fov"];
|
|
}
|
|
} else {
|
|
ra = data.values["ra"];
|
|
dec = data.values["dec"];
|
|
fov = data.values["fov"];
|
|
}
|
|
|
|
//console.log("handleMessage esasky: " + ra + " " + dec + " " + fov);
|
|
if (socket.readyState === 1) {
|
|
socket.send(JSON.stringify({
|
|
event: "view",
|
|
ra: ra / 15.0, // convert decimal degrees to hours
|
|
dec: dec,
|
|
fov: fov
|
|
}));
|
|
}
|
|
|
|
if (showAntenna) {
|
|
showAntennaFoV(ra, dec);
|
|
}
|
|
}
|
|
}
|
|
|
|
function reportView() {
|
|
if (socket.readyState === 1) {
|
|
var cmd = { event: 'getCenter', content: { cooFrame: 'J2000' } };
|
|
esaskyFrame.contentWindow.postMessage(cmd, 'https://sky.esa.int');
|
|
}
|
|
}
|
|
|
|
function hideAntennaFoV() {
|
|
var cmd = { event: 'deleteFootprintsOverlay', content: { 'overlayName': 'Antenna FoV' } };
|
|
esaskyFrame.contentWindow.postMessage(cmd, 'https://sky.esa.int');
|
|
}
|
|
|
|
function showAntennaFoV(ra, dec) {
|
|
var cmd =
|
|
{
|
|
event: 'overlayFootprints',
|
|
content: {
|
|
'overlaySet':
|
|
{
|
|
'type': 'FootprintListOverlay',
|
|
'overlayName': 'Antenna FoV',
|
|
'cooframe': 'J2000',
|
|
'color': 'white',
|
|
'lineWidth': 5,
|
|
'skyObjectList': [
|
|
{
|
|
'name': 'Antenna FoV',
|
|
'id': 1,
|
|
'stcs': 'CIRCLE J2000 ' + ra + ' ' + dec + ' ' + (antennaHpbw / 2.0),
|
|
'ra_deg': ra,
|
|
'dec_deg': dec
|
|
}]
|
|
}
|
|
}
|
|
};
|
|
esaskyFrame.contentWindow.postMessage(cmd, 'https://sky.esa.int');
|
|
}
|
|
|
|
</script>
|
|
|
|
<div class="iframe-container" style="width: 100%; height: 100%">
|
|
<iframe alt="" border="0" bordercolor="#000000" frameborder="0" height="" hspace="0" id="_ESAsky" longdesc="" name="_ESASky" onload="on_ready();" scrolling="auto" src="https://sky.esa.int?hide_welcome=true&&hide_banner_info=true" title="" vspace="0" width="100%" class="" style="height: 100%;">
|
|
Frames not supported.
|
|
</iframe>
|
|
</div>
|
|
|
|
</body >
|
|
</html >
|