| 
									
										
										
										
											2024-02-14 13:20:33 +00:00
										 |  |  | <!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; | 
					
						
							| 
									
										
										
										
											2024-02-16 16:31:12 +00:00
										 |  |  |         var antennaHpbw = 5.0; | 
					
						
							|  |  |  |         var showAntenna = false; | 
					
						
							| 
									
										
										
										
											2024-02-14 13:20:33 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  |         // 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 = | 
					
						
							| 
									
										
										
										
											2024-02-16 16:31:12 +00:00
										 |  |  |             { | 
					
						
							| 
									
										
										
										
											2024-02-14 13:20:33 +00:00
										 |  |  |                 event: 'overlayFootprints', | 
					
						
							| 
									
										
										
										
											2024-02-16 16:31:12 +00:00
										 |  |  |                 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 | 
					
						
							|  |  |  |                             }] | 
					
						
							|  |  |  |                     } | 
					
						
							|  |  |  |                 } | 
					
						
							| 
									
										
										
										
											2024-02-14 13:20:33 +00:00
										 |  |  |             }; | 
					
						
							|  |  |  |             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 > |