UNPKG

dashboard

Version:

Create dashboards with gadgets on node.js

253 lines (194 loc) 8.03 kB
<?xml version="1.0" encoding="UTF-8" ?> <!-- wwt_viewport.xml --> <!-- Author: Ian Smith (imsmith@uw.edu) --> <Module> <!-- ** Replace inside quotes with your gadgets title --> <ModulePrefs title="WWT Gadget" height="10" scrolling="true"> <Require feature="dynamic-height"/> <Require feature="opensocial-0.8"/> <Require feature="minimessage"/> </ModulePrefs> <Content type="html"><![CDATA[ <!-- Add HTML content here --> <div style="height:650px"> <!-- WWT Stuff --> <div id="WorldWideTelescopeControlHost"> <object id="WWTView" data="data:application/x-silverlight," type="application/x-silverlight-2" width="100%" height="800"> <param name="source" value="http://www.worldwidetelescope.org/webclient/clientbin/WWTSL.xap"/> <param name="background" value="black" /> <param name="minRuntimeVersion" value="3.0.40624.0" /> <param name="autoUpgrade" value="true" /> <param name="initParams" value="wtml=,webkey=AX2011Gqqu" /> <param name="enableHtmlAccess" value="true" /> <a href="http://go.microsoft.com/fwlink/?LinkID=149156&v=3.0.40624.0"> <img src="http://go.microsoft.com/fwlink/?LinkId=108181" alt="Install Microsoft Silverlight" /></a> </object> </div> </div> <script language="javascript"> // Create the WorldWide telescope object var wwt; // Create variables to hold the changeable settings var bShowCrosshairs = true; var bShowUI = false; var bShowFigures = false; // The wwtReady function is called by the WWT Web Control software // This function sets up the wwt object, and the initial defaults function wwtReady() { wwt = document.getElementById("WWTView").content.WWT; wwt.Settings.ShowCrosshairs = bShowCrosshairs; wwt.Settings.ShowConstellationFigures = bShowFigures; wwt.HideUI(!bShowUI); wwt.Settings.ShowConstellationBoundries = false; wwt.Settings.ShowCrosshairs = false; } </script> <!-- Used to register with the Data Gadget --> <script src="js/DataInterface.js" type="text/javascript"></script> <!-- Contains UW.astro objects --> <script src="js/astroObjectLib.js" type="text/javascript"></script> <script type="text/javascript"> var myGadget = null, DEBUG = false; function debugLog(msg){ if(DEBUG){UW.astro.debugLog(GADGET_NAME + ": " + msg);}} // ** Replace with your gadget's name var GADGET_NAME = "WWT Viewport" + "_" + Math.floor(Math.random()*100000).toString(); // Creates gadget object function init(){ myGadget = new GadgetTemplate(); gadgets.window.adjustHeight(); } function GadgetTemplate(){ var my = new Object(); // CONSTANTS // PRIVATE var _namespaceList = [ UW.astro.DEFAULT_NAMESPACE ]; // list of our current Namespaces. Just init with the default // Private Helper Variables var di = new UW.astro.DataInterface(GADGET_NAME); // make dataInterface object, init with default // INIT // ** Variables to register go in this array. // ex: ["Viewport_Center_Coordinate", "Viewport_Point_List"] var variableArray = ["Viewport_Center_Coordinate" , "Dataset_List"]; // ** Triggers to register go in this array // Each trigger is a 2-element array as follows: // [ "VariableName", triggerFunction ] // example with one trigger: (notice the array inside the array) // var triggerArray = [ ["Viewport_Center_Coordinate", function(){ zoomMe() }] ] // it is recommended to define functions outside the array for more readable code var triggerArray = [ ["Viewport_Center_Coordinate", moveMap], ["Dataset_List", updateDataset_List] ]; di.registerMe( { namespaceList : _namespaceList, variableList : variableArray, triggerList : triggerArray, } ); // PRIVATE VARS var _registeredDatasets = []; // METHODS // ** Add public methods (that will be called from outside the object by a button or something) function updateDataset_List(){ var list = di.readVariable(UW.astro.DEFAULT_NAMESPACE, "Dataset_List").slice(0); // copy array // register trigger to this dataset variable so updates happen when it changes for (var i=0, len=list.length; i<len; i++) { var datasetName = list[i]; if (!arrayContains(_registeredDatasets, datasetName)) { _registeredDatasets.push(datasetName); di.registerVariable(datasetName, null); di.registerTrigger(UW.astro.DEFAULT_NAMESPACE, datasetName, function(){redrawAllDatasets(di.readVariable(UW.astro.DEFAULT_NAMESPACE, "Dataset_List"));}); } } redrawAllDatasets(list); // TODO: need to unregister the previous dataset! } function moveMap() { var coord = di.readVariable(UW.astro.DEFAULT_NAMESPACE, "Viewport_Center_Coordinate"); wwt.Goto(coord.getRa(), coord.getDec(), 0.1, false); } // accepts a list of dataset names and replots all points from the datasets function redrawAllDatasets(dsList) { // clear all annotations wwt.ClearAnnotations(); for (var i=0, len=dsList.length; i<len; i++) { plotDataset(dsList[i]); } } function plotDataset(dsName) { var ds = di.readVariable(UW.astro.DEFAULT_NAMESPACE, dsName); if (!ds.isVisible()) { return; } var pubDataset = ds.toJSON(); // list of celestial coords to plot var ccsToPlot = []; for (var i=0, len=pubDataset.length; i<len; i++) { if (pubDataset[i].hasOwnProperty("db_CelestialCoord") && pubDataset[i].db_visible) { // check the visible property of the record var cc = pubDataset[i].db_CelestialCoord; ccsToPlot.push(cc); } } plotCelestialCoords(ccsToPlot); } function plotCelestialCoords(ccList) { // PLOT each celestialCoord as an circle object for (var i=0,len=ccList.length; i<len; i++){ var cc = ccList[i]; createPlacemark(cc.getColor(), cc.getRa(), cc.getDec(), cc.getDescription()); } } function createCircle(fill, lineColor, fillColor, lineWidth, opacity, radius, skyRelative, ra, dec) { var circle = wwt.CreateCircle(fill); circle.LineColor = lineColor; circle.FillColor = fillColor; circle.LineWidth = lineWidth; circle.Opacity = opacity; circle.Radius = radius; circle.SkyRelative = skyRelative; circle.SetCenter(ra, dec); return circle; } function createPlacemark(color, ra, dec, note) { var hexColor = convertColorToHex(color); var pm = createCircle(false, hexColor, 0, 2, 1.0, 12, false, ra, dec); pm.Label = note; pm.ShowHoverLabel = true; wwt.AddAnnotation(pm); } function convertColorToHex(color) { var hexColor = 0x0; switch (color) { case 'red': hexColor = 0x88FF0000; break; case 'blue': hexColor = 0x880000FF; break; case 'green': hexColor = 0x8800FF00; break; case 'yellow': hexColor = 0x88FFFF00; break; case 'default', 'grey': hexColor = 0x88CCCCCC; break; default: hexColor = 0x88CCCCCC; break; } return hexColor; } function arrayContains(arr, el) { for (var i=0, len=arr.length; i<len; i++) { if (arr[i] === el) { return true; } } return false; } return my; } gadgets.util.registerOnLoadHandler(init); </script> ]]></Content> </Module>