From f7d0160bc8181c7e57c3942e187b45024bc45f57 Mon Sep 17 00:00:00 2001 From: Eric Mandel Date: Wed, 17 Apr 2019 00:21:11 -0400 Subject: [PATCH] add a js9 logo: -- to the main display, controlled by the JS9.globalOpts.logoDisplay param -- whose default is false -- View:show submenu allows you to turn on/off logo display globally -- Prefs plugin allows you to control logo display for this site -- also added logo to main JS9 help pages fixed bug in Prefs: saved global, grid, catalog prefs were not being restored --- help/archives.html | 10 +- help/changelog.html | 11 +- help/desktop.html | 9 +- help/extmsg.html | 9 +- help/helper.html | 10 +- help/install.html | 9 +- help/knownissues.html | 9 +- help/localtasks.html | 9 +- help/memory.html | 11 +- help/preferences.html | 9 +- help/publicapi.html | 8 +- help/python.html | 10 +- help/regions.html | 13 +- help/repfile.html | 11 +- help/serverside.html | 10 +- help/user.html | 9 +- help/webpage.html | 10 +- help/yourdata.html | 10 +- images/js9logo.png | Bin 0 -> 7957 bytes js9-allinone.css | 21 +++ js9-allinone.js | 338 ++++++++++++++++++++++------------------ js9.css | 21 +++ js9.js | 45 +++++- js9.min.js | 310 ++++++++++++++++++------------------ js9plugins.js | 28 +++- plugins/core/menubar.js | 12 ++ plugins/core/prefs.js | 16 +- 27 files changed, 534 insertions(+), 434 deletions(-) create mode 100644 images/js9logo.png diff --git a/help/archives.html b/help/archives.html index aa383705..20cbc7de 100644 --- a/help/archives.html +++ b/help/archives.html @@ -3,16 +3,12 @@ - + Accessing Data Archives with JS9 -
- + +

Examples of data archives that can generate FITS URLS for use with JS9

  • NASA/HEASARC SkyView: in the search results, copy the FITS URL from the Download FITS or quick look jpeg image option. diff --git a/help/changelog.html b/help/changelog.html index 48f598cd..019bcc23 100644 --- a/help/changelog.html +++ b/help/changelog.html @@ -3,20 +3,17 @@ - + JS9 ChangeLog - -
    + +

    JS9 ChangeLog

    Public Release 2.3 (TBD)

      +
    • add logo support
    • add AlignPanZoom() public routine
    • add --cmds [cmds] and --cmdfile [file] switches to js9Electron.js
    • add --node switch to js9Electron.js, allowing nodeIntegration diff --git a/help/desktop.html b/help/desktop.html index a54ac2a4..3143854f 100644 --- a/help/desktop.html +++ b/help/desktop.html @@ -3,15 +3,12 @@ - + JS9 on the Desktop -
      + +

      JS9 on the Desktop

      diff --git a/help/extmsg.html b/help/extmsg.html index 56e93018..85d0844a 100644 --- a/help/extmsg.html +++ b/help/extmsg.html @@ -3,15 +3,12 @@ - + External Communication with JS9 -

      + +

      External Communication with JS9

      diff --git a/help/helper.html b/help/helper.html index 9ce2261e..2bb1e54b 100644 --- a/help/helper.html +++ b/help/helper.html @@ -3,19 +3,17 @@ - + Adding a JS9 Server-side Helper -

      + +

      Adding a JS9 Server-side Helper

      Do You Need a Server-side Helper? Which One?

      +

      JS9 supports server-side analysis on FITS data, allowing you to execute virtually any command-line analysis program from JS9, run that analysis command on the server, and view results on your web page. It diff --git a/help/install.html b/help/install.html index c2ae6a0a..8b736ba9 100644 --- a/help/install.html +++ b/help/install.html @@ -3,15 +3,12 @@ - + Installing JS9 -

      + +

      Installing JS9

      Summary for the Impatient

      diff --git a/help/knownissues.html b/help/knownissues.html index 646a8ca9..ad6cf5e4 100644 --- a/help/knownissues.html +++ b/help/knownissues.html @@ -3,15 +3,12 @@ - + JS9 Known Issues -
      + +

      JS9 Known Issues

    • Chrome (January 20, 2019 : not resolved) diff --git a/help/localtasks.html b/help/localtasks.html index acd6e9e6..3ff4f366 100644 --- a/help/localtasks.html +++ b/help/localtasks.html @@ -3,15 +3,12 @@ - + Local (Browser-Based) Analysis Tasks and Plugins -
      + +

      Adding Local (Browser-Based) Analysis Tasks and Plugins to JS9

      diff --git a/help/memory.html b/help/memory.html index 80a58ea0..3b3f3be5 100644 --- a/help/memory.html +++ b/help/memory.html @@ -3,17 +3,14 @@ - + Dealing with Memory Limitations -

      - + +

      Dealing with Memory Limitations

      +

      Desktop application developers count on a semi-infinite amount of memory for applications. This is a luxury not afforded to browser diff --git a/help/preferences.html b/help/preferences.html index 00c41f0d..80051e32 100644 --- a/help/preferences.html +++ b/help/preferences.html @@ -3,15 +3,12 @@ - + Site Preferences -

      + +

      Configuring JS9 Site Preferences

      diff --git a/help/publicapi.html b/help/publicapi.html index f210621f..826d525f 100644 --- a/help/publicapi.html +++ b/help/publicapi.html @@ -2,11 +2,8 @@ The JS9 Public API + -

      + +

      The JS9 Public API

      diff --git a/help/python.html b/help/python.html index 40281bf2..426fe16f 100644 --- a/help/python.html +++ b/help/python.html @@ -3,18 +3,14 @@ - + JS9 with Python and Jupyter -

      + +

      JS9 with Python and Jupyter

      -

      Connecting Python to JS9

      The pyjs9.py module connects Python and JS9. It is diff --git a/help/regions.html b/help/regions.html index 6b730982..c394c488 100644 --- a/help/regions.html +++ b/help/regions.html @@ -3,17 +3,16 @@ - + JS9/DS9/Funtools Spatial Regions +

      +
      -
      -

      JS9/DS9/Funtools Spatial Regions

      +

      JS9/DS9/Funtools Spatial Regions

      + +

      In many X-ray astronomical analysis software suites (e.g., fitsio, ciao, funtools), spatial regions allow one to select sections of an image or rows of a table by means of simple geometric shapes. When an image is diff --git a/help/repfile.html b/help/repfile.html index 39bbcbe6..e8d38238 100644 --- a/help/repfile.html +++ b/help/repfile.html @@ -3,17 +3,14 @@ - + Dealing with Large Files -

      - + +

      Dealing with Large Files

      +

      Large astronomical FITS data files present a challenge for browser-based image display, in two ways: diff --git a/help/serverside.html b/help/serverside.html index 2c48516c..b83fdce7 100644 --- a/help/serverside.html +++ b/help/serverside.html @@ -3,16 +3,12 @@ - + Server-side Analysis Tasks -

      - + +

      Adding Server-side Analysis Tasks to JS9

      diff --git a/help/user.html b/help/user.html index 5ee448d0..32cd9689 100644 --- a/help/user.html +++ b/help/user.html @@ -3,15 +3,12 @@ - + The JS9 Help Facility -

      + +

      JS9: astronomical image display everywhere

      Eric Mandel, Alexey Vikhlinin diff --git a/help/webpage.html b/help/webpage.html index e12b2b12..ff54072f 100644 --- a/help/webpage.html +++ b/help/webpage.html @@ -3,16 +3,12 @@ - + Creating a JS9 Web Page -
      - + +

      Creating a JS9 Web Page

      Adding JS9 to Your Web Page

      diff --git a/help/yourdata.html b/help/yourdata.html index 0359edc2..7d92ea0f 100644 --- a/help/yourdata.html +++ b/help/yourdata.html @@ -3,16 +3,12 @@ - + Displaying Your Data -
      - + +

      Displaying Your Data With JS9

      Loading a FITS File From Your Web Page

      diff --git a/images/js9logo.png b/images/js9logo.png new file mode 100644 index 0000000000000000000000000000000000000000..c5594897a3f9eb86782cb93498068b1a4178807c GIT binary patch literal 7957 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 G3;!Q&`Pnc4 literal 0 HcmV?d00001 diff --git a/js9-allinone.css b/js9-allinone.css index 672aee10..f34a8472 100644 --- a/js9-allinone.css +++ b/js9-allinone.css @@ -1741,6 +1741,17 @@ div.JS9MenubarContainer-flat, div.JS9MenubarContainer-border { background-color: lightblue; } +div.JS9Logo { + position: absolute; + right: 10px; + bottom: 10px; +} + +img.JS9Logo { + width: 80; + height: 40; + border: 0px solid #d5d5d5; +} /* CSS for images loaded as part of the user-defined menubar */ div.JS9MenubarUserImage{ @@ -2319,6 +2330,16 @@ ul.js9demo { margin-top: 0; } +.helpLogo{ + position: absolute; + top: 15px; + right: 15px; +} + +.helpContainer{ + padding: 10px; +} + /* to make wait cursor override other element cursors (e.g. fabric.js canvas) */ body.waiting, body.waiting * { cursor: wait !important; diff --git a/js9-allinone.js b/js9-allinone.js index 34d8d3b4..1ec9f0e1 100644 --- a/js9-allinone.js +++ b/js9-allinone.js @@ -2786,10 +2786,10 @@ RAWID0:"raw0",RAWIDX:"alt",IDFMT:" (%s)",MINZOOM:.125,MAXZOOM:32,ADDZOOM:.1,CHR a.BROWSER=function(){var a=navigator.platform,c=navigator.appName,d=navigator.userAgent,e,f=d.match(/(opera|chrome|safari|firefox|msie)\/?\s*(\.?\d+(\.\d+)*)/i);e=d.match(/version\/([\.\d]+)/i);f&&null!==e&&(f[2]=e[1]);f=f?[f[1],f[2],a]:[c,navigator.appVersion,"-?",a];f.push(/Android|webOS|iPhone|iPad|iPod|BlackBerry/i.test(d));return f}();a.PIXEL_RATIO=function(){var a=document.createElement("canvas").getContext("2d");return(window.devicePixelRatio||1)/(a.webkitBackingStorePixelRatio||a.mozBackingStorePixelRatio|| a.msBackingStorePixelRatio||a.oBackingStorePixelRatio||a.backingStorePixelRatio||1)}();a.globalOpts={helperType:"none",helperPort:2718,requireHelper:!1,allinoneHelper:!1,requireFits2Fits:!1,quietReturn:!1,useWasm:!0,allowFileWasm:!1,winType:"light",rgb:{active:!1,rim:null,gim:null,bim:null},defcolor:"#00FF00",pngisfits:!0,fits2fits:"never",fits2png:!1,prependJS9Dir:!0,dataDir:null,alerts:!0,valposTarget:null,valposWidth:"medium",internalValPos:!0,internalContrastBias:!0,containContrastBias:!1,wcsCrosshair:!1, regionsToClipboard:!0,magnifierRegions:!0,pannerDirections:!0,htimeout:1E4,lhtimeout:1E4,ehtimeout:5E3,ehretries:10,xtimeout:18E4,extlist:"EVENTS STDEVT",imopts:"IMOPTS",imcmap:"IMCMAP",table:{xdim:4096,ydim:4096,bin:1},image:{xdim:4096,ydim:4096,bin:1},reproj:{xdim:4096,ydim:4096},reprojSwitches:"",binMode:"s",clearImageMemory:"heap",helperProtocol:location.protocol,reloadRefresh:!1,reloadRefreshReg:!0,panWithinDisplay:!1,svgBorder:!0,unremoveReg:100,maxMemory:75E7,corsURL:"params/loadcors.html", -proxyURL:"params/loadproxy.html",loadProxy:!1,imsectionURL:"params/imsection.html",postMessage:!1,waitType:"spinner",spinColor:"#FF0000",spinOpacity:.35,resize:!0,resizeHandle:!0,resizeRedisplay:!0,cloneNewDisplay:!0,lightWinClose:"ask",regionDisplay:"lightwin",regionConfigSize:"medium",refreshDragDrop:!0,reduceMosaic:"js9",reduceRegcnts:!0,plot3d:{cube:"*:*:all",mode:"avg",areaunits:"pixels",color:"green"},copyWcsPosFormat:"$ra $dec $sys",floatPrecision:6,mouseActions:["display value/position","change contrast/bias", -"pan the image"],touchActions:["display value/position","change contrast/bias","pan the image"],keyboardActions:{b:"toggle selected region: source/background",c:"toggle crosshair",d:"send selected region to back",e:"toggle selected region: include/exclude","M-e":"edit selected region",i:"refresh image",I:"display full image","M-i":"display selected cutouts","M-k":"toggle keyboard actions plugin",l:"toggle active shape layers","M-l":"new JS9 light window","M-m":"toggle mouse/touch plugin","M-o":"open local file", -P:"paste regions from local clipboard",p:"paste regions to current position",u:"undo remove of region(s)","M-,":"toggle preferences plugin","M-p":"toggle preferences plugin",r:"copy selected region to clipboard",R:"copy all regions to clipboard",s:"select region",S:"select all regions","M-s":"toggle shape layers plugin","/":"copy wcs position to clipboard","?":"copy value and position to clipboard",0:"reset zoom","=":"zoom in","+":"zoom in","-":"zoom out","^":"raise region layer to top",">":"display next image", -"<":"display previous image","delete":"remove selected region",leftArrow:"move region/position left",upArrow:"move region/position up",rightArrow:"move region/position right",downArrow:"move region/position down"},mousetouchZoom:!1,toolbarTooltips:!1,centerDivs:["JS9Menubar"],resizeDivs:["JS9Menubar","JS9Colorbar","JS9Toolbar"],pinchWait:8,pinchThresh:6,xeqPlugins:!0,extendedPlugins:!0,intensivePlugins:!1,dynamicSelect:"click",dynamicHighlight:!0,corsProxy:"https://js9.si.edu/cgi-bin/CORS-proxy.cgi", +proxyURL:"params/loadproxy.html",loadProxy:!1,imsectionURL:"params/imsection.html",postMessage:!1,waitType:"spinner",spinColor:"#FF0000",spinOpacity:.35,resize:!0,resizeHandle:!0,resizeRedisplay:!0,cloneNewDisplay:!0,logoDisplay:!1,lightWinClose:"ask",regionDisplay:"lightwin",regionConfigSize:"medium",refreshDragDrop:!0,reduceMosaic:"js9",reduceRegcnts:!0,plot3d:{cube:"*:*:all",mode:"avg",areaunits:"pixels",color:"green"},copyWcsPosFormat:"$ra $dec $sys",floatPrecision:6,mouseActions:["display value/position", +"change contrast/bias","pan the image"],touchActions:["display value/position","change contrast/bias","pan the image"],keyboardActions:{b:"toggle selected region: source/background",c:"toggle crosshair",d:"send selected region to back",e:"toggle selected region: include/exclude","M-e":"edit selected region",i:"refresh image",I:"display full image","M-i":"display selected cutouts","M-k":"toggle keyboard actions plugin",l:"toggle active shape layers","M-l":"new JS9 light window","M-m":"toggle mouse/touch plugin", +"M-o":"open local file",P:"paste regions from local clipboard",p:"paste regions to current position",u:"undo remove of region(s)","M-,":"toggle preferences plugin","M-p":"toggle preferences plugin",r:"copy selected region to clipboard",R:"copy all regions to clipboard",s:"select region",S:"select all regions","M-s":"toggle shape layers plugin","/":"copy wcs position to clipboard","?":"copy value and position to clipboard",0:"reset zoom","=":"zoom in","+":"zoom in","-":"zoom out","^":"raise region layer to top", +">":"display next image","<":"display previous image","delete":"remove selected region",leftArrow:"move region/position left",upArrow:"move region/position up",rightArrow:"move region/position right",downArrow:"move region/position down"},mousetouchZoom:!1,toolbarTooltips:!1,centerDivs:["JS9Menubar"],resizeDivs:["JS9Menubar","JS9Colorbar","JS9Toolbar"],pinchWait:8,pinchThresh:6,xeqPlugins:!0,extendedPlugins:!0,intensivePlugins:!1,dynamicSelect:"click",dynamicHighlight:!0,corsProxy:"https://js9.si.edu/cgi-bin/CORS-proxy.cgi", simbadProxy:"https://js9.si.edu/cgi-bin/simbad-proxy.cgi",catalogs:{ras:["RA","_RAJ2000","RAJ2000"],decs:["Dec","_DEJ2000","DEJ2000"],shape:"circle",color:"yellow",width:7,height:7,radius:3.5,r1:5,r2:3.5,wcssys:"ICRS",skip:"#\n",save:!0,tooltip:"$xreg.data.ra $xreg.data.dec"},topColormaps:"grey heat cool viridis magma sls red green blue".split(" "),infoBox:"file object wcsfov wcscen wcspos impos physpos value regions progress".split(" "),infoBoxResize:!0,menuBar:"file edit view zoom scale color region wcs analysis help".split(" "), menubarStyle:"classic",userMenus:!1,userMenuDivider:"   ",imagesFileSubmenu:5,toolBar:"annulus box circle ellipse line polygon text linear log zoom+ zoom- zoom1".split(" "),syncOps:"colormap contrastbias pan regions scale wcs zoom".split(" "),syncReciprocate:!0,hiddenPluginDivs:[],separate:{layout:"auto",leftMargin:10,topMargin:10},imageTemplates:".fits,.fts,.png,.jpg,.jpeg,.fz",wcsUnits:{FK4:"sexagesimal",FK5:"sexagesimal",ICRS:"sexagesimal",galactic:"degrees",ecliptic:"degrees",linear:"degrees", physical:"pixels",image:"pixels"},regionTemplates:".reg",sessionTemplates:".ses,.js9ses",colormapTemplates:".cmap",catalogTemplates:".cat,.tab",controlsMatchRegion:!1,internalColorPicker:!0,newWindowWidth:530,newWindowHeight:625,debug:0};a.desktopOpts={currentPath:!0,sessionPath:!0};a.imageOpts={inherit:!1,contrast:1,bias:.5,invert:!1,exp:1E3,colormap:"grey",scale:"linear",scaleclipping:"dataminmax",scalemin:Number.NaN,scalemax:Number.NaN,zscalecontrast:.25,zscalesamples:600,zscaleline:120,wcssys:"native", @@ -3010,86 +3010,87 @@ return b};a.Image.prototype.wcs2imlen=function(b){var c,d=1;if(b){b=a.strtoscale "lut";this.colors=c;break;case 4:this.type="sao";this.vertices=[c,d,e];break;default:a.error("colormap requires a colormap name and 1 or 3 array args")}this.source=a.inited?"user":"core";for(f=0;fb;b++){g=this.vertices[b]; c=g.length;for(d=0;df);d++);d=0===d?g[0][1]:d===c?g[c-1][1]:(c=(g[d][1]-g[d-1][1])/(g[d][0]-g[d-1][0]))?c*(f-g[d-1][0])+g[d-1][1]:g[d][1];e[b]=255*d}break;case "lut":f=this.colors.length;b=Math.floor(b*f/d);0>b?(e[0]=255*this.colors[0][0],e[1]=255*this.colors[0][1],e[2]=255*this.colors[0][2]):b").addClass("JS9Container").css("z-index",a.ZINDEX).attr("tabindex","0").append(this.canvasjq).appendTo(this.divjq);a.globalOpts.resizeHandle&&window.hasOwnProperty("ResizeSensor")&&(this.divjq.css("resize", -"both").css("overflow","hidden"),a.bugs.webkit_resize&&(this.owidth=parseInt(this.divjq.css("width"),10),this.oheight=parseInt(this.divjq.css("height"),10),this.divjq.css("width",this.width+a.RESIZEFUDGE).css("height",this.height+a.RESIZEFUDGE)),this.resizeSensor=new ResizeSensor(this.divjq,function(){var b=c.divjq.width(),e=c.divjq.height();a.bugs.webkit_resize&&(b-=a.RESIZEFUDGE,e-=a.RESIZEFUDGE);c.resize(b,e)}));this.context=this.canvas.getContext("2d");a.ANTIALIAS||(this.context.imageSmoothingEnabled= -!1,this.context.webkitImageSmoothingEnabled=!1,this.context.msImageSmoothingEnabled=!1);this.tooltip=$("
      ").attr("id","tooltip_"+this.id).addClass("JS9Tooltip").appendTo(this.divjq);this.image=null;this.pluginInstances={};this.layers={};this.initMessages();this.blendMode=!1;this.mouseActions=a.globalOpts.mouseActions.slice(0);this.touchActions=a.globalOpts.touchActions.slice(0);this.mousetouchZoom=a.globalOpts.mousetouchZoom;this.divjq.on("mouseenter",this,function(b){return a.mouseEnterCB(b)}); -this.divjq.on("mouseover",this,function(b){return a.mouseOverCB(b)});this.divjq.on("mousedown touchstart",this,function(b){return a.mouseDownCB(b)});this.divjq.on("mousemove touchmove",this,function(b){return a.mouseMoveCB(b)});this.divjq.on("mouseup touchend",this,function(b){return a.mouseUpCB(b)});this.divjq.on("mouseout",this,function(b){return a.mouseOutCB(b)});this.divjq.on("keypress",this,function(b){return a.keyPressCB(b)});this.divjq.on("keydown",this,function(b){return a.keyDownCB(b)}); -this.divjq.on("keyup",this,function(b){return a.keyUpCB(b)});this.divjq.on("wheel",this,function(b){return a.wheelCB(b)});this.divjq.on("dragenter",this,function(b){return a.dragenterCB(this.id,b)});this.divjq.on("dragover",this,function(b){return a.dragoverCB(this.id,b)});this.divjq.on("dragexit",this,function(b){return a.dragexitCB(this.id,b)});this.divjq.on("drop",this,function(b){return a.dragdropCB(this.id,b)});this.divjq.on("contextmenu",this,function(){return!1});this.addFileDialog("Load", -a.globalOpts.imageTemplates);this.addFileDialog("RefreshImage",a.globalOpts.imageTemplates);this.addFileDialog("LoadRegions",a.globalOpts.regionTemplates);this.addFileDialog("LoadSession",a.globalOpts.sessionTemplates);this.addFileDialog("LoadColormap",a.globalOpts.colormapTemplates);this.addFileDialog("LoadCatalog",a.globalOpts.catalogTemplates);a.displays.push(this);a.DEBUG&&a.log("JS9 display: %s",this.id)};a.Display.prototype.addFileDialog=function(b,c){var d=this,e,f;b&&a.publics[b]&&(f="openLocal"+ -b+"-"+d.id,e=$("
      ").css("visibility","hidden").css("position","relative").css("top",-50).css("left",-50).appendTo(d.divjq),e=$("").attr("type","file").attr("id",f).attr("multiple",!0).appendTo(e),c&&e.attr("accept",c),e.on("change",function(){var c;for(c=0;c").addClass("JS9Container").css("z-index",a.MESSZINDEX).appendTo(this.divjq); -this.infoArea=$("
      ").addClass("JS9Message").appendTo(this.messageContainer);this.regionsArea=$("
      ").addClass("JS9Message").appendTo(this.messageContainer);this.progressArea=$("
      ").addClass("JS9Progress").addClass("JS9Message").appendTo(this.messageContainer);this.progressBar=$("").addClass("JS9ProgressBar").attr("value",0).attr("max",100).attr("name","progress").appendTo(this.progressArea);try{this.messageContainer.draggable({start:function(b,c){this.oicb=a.globalOpts.internalContrastBias; -a.globalOpts.internalContrastBias=!1},stop:function(b,c){a.globalOpts.internalContrastBias=this.oicb}})}catch(b){}return this};a.Display.prototype.displayPlugin=function(b){var c=this,d,e,f,g,h,k,l,n;if("string"===typeof b)for(d=0;d").attr("id",h).css("display","none").appendTo($(this.divjq)),$("
      ").addClass(b.name).attr("id",l).attr("data-js9id",this.divjq.attr("id")).css("height","100%").css("width","100%").appendTo(f)),f=b.opts.winDims[0]||a.WIDTH,g=b.opts.winDims[1]||a.HEIGHT,k=b.opts.winResize?"1":"0",e=sprintf(e.format,f,g,k),f=b.opts.toolbarHTML&&0<=b.opts.toolbarHTML.search(/\$title/)?"":b.opts.winTitle||"",f+= -sprintf(a.IDFMT,this.id),h=a.lightWin(d,"div",h,f,e),d=$("#"+d+" #"+l),n=a.instantiatePlugin(d,b,h),n.winHandle.onclose=function(){n.winHandle.hide();n.status="inactive";if(b.opts.onpluginclose)try{b.opts.onpluginclose.call(n,c.image)}catch(m){a.log("onplugincloseCB: %s [%s]\n%s",b.name,m.message,a.strace(m))}return!1},n.status="active",b.opts.onplugindisplay)try{b.opts.onplugindisplay.call(n,this.image)}catch(m){a.log("onplugindisplayCB: %s [%s]\n%s",b.name,m.message,a.strace(m))}}else if("inactive"=== -n.status){if(n.winHandle&&(n.winHandle.show(),n.status="active",b.opts.onplugindisplay))try{b.opts.onplugindisplay.call(n,this.image)}catch(m){a.log("onplugindisplayCB: %s [%s]\n%s",b.name,m.message,a.strace(m))}}else if("active"===n.status&&n.winHandle&&(n.winHandle.hide(),n.status="inactive",b.opts.onpluginclose))try{b.opts.onpluginclose.call(n,c.image)}catch(m){a.log("onplugincloseCB: %s [%s]\n%s",b.name,m.message,a.strace(m))}break;case "new":a.error("external window support for plugins not yet implemented")}}; -a.Display.prototype.resize=function(b,c,d){var e,f,g,h,k,l=function(a){a.left+=h;a.top+=k;a.setCoords()};a.globalOpts.resize||a.error("display resize not enabled");if(!b&&!c)return{width:this.width,height:this.height};if("full"===b){if(d=c,window.innerWidth&&(b=window.innerWidth),window.innerHeight)for(c=window.innerHeight,e=0;eb||10>c)&&a.error("invalid dimension(s) passed to display resize");if(b===this.width&&c===this.height)return this;d=d||{};e=b;b=c;h=(e-this.width)/2;k=(b-this.height)/2;this.width=e;this.height=b;this.divjq.css("width",e);this.divjq.css("height",b);this.canvasjq.attr("width",e);this.canvasjq.attr("height",b);a.bugs.webkit_resize&&!this.resizing&&(this.owidth= -Math.min(this.owidth,e),this.oheight=Math.min(this.oheight,b));0<=$.inArray("JS9Menubar",a.globalOpts.resizeDivs)&&(a.isNull(d.resizeMenubar)||d.resizeMenubar)&&(c=this.pluginInstances.JS9Menubar)&&$("#"+this.id+"Menubar").css("width",e);0<=$.inArray("JS9Toolbar",a.globalOpts.resizeDivs)&&(a.isNull(d.resizeToolbar)||d.resizeToolbar)&&(c=this.pluginInstances.JS9Toolbar)&&(c.divjq.attr("data-width",String(e)+"px"),a.Toolbar.init.call(c));0<=$.inArray("JS9Colorbar",a.globalOpts.resizeDivs)&&(a.isNull(d.resizeColorbar)|| -d.resizeColorbar)&&(c=this.pluginInstances.JS9Colorbar)&&(c.divjq.attr("data-width",String(e)+"px"),a.Colorbar.init.call(c));for(g in this.layers)this.layers.hasOwnProperty(g)&&(c=this.layers[g],"main"===c.dtype&&(c.divjq.css("width",e),c.divjq.css("height",b),c.canvasjq.attr("width",e),c.canvasjq.attr("height",b),c.canvas.setWidth(e),c.canvas.setHeight(b),c.canvas.calcOffset()));for(e=0;e=this.divjq.width()&&b.y+a.RESIZEDIST>=this.divjq.height()?!0:!1};a.Display.prototype.center=function(){var b,c,d=this.divjq,e,f;e=d.offset().top;var g=d.height(),h=$(window).height();f=d.offset().left;var d=d.width(),k=$(window).width();for(b=0;b
      ",b,m.width())),q.isactive&&(c+=sprintf("
      ",b,m.width())),c+=sprintf("
      ",b,m.width()-B,m.height()-B),u.isactive&&(c+=sprintf("
      ",b,m.width()))), -"auto"===g&&x+r*(z+.5)>window.innerWidth&&(w++,z=0),d=sprintf("width=%s,height=%s,top=%s,left=%s,resize=1,scolling=1",r,v,p+(v+k+l)*w,x+(r+h+n)*z),"auto"===g||"horizontal"===g?z++:"vertical"===g&&w++);return{id:b,html:c,winopts:d}},G=function(g){var h,k;h=f++;g.length>h?(h="number"===typeof g[h]?a.images[g[h]]:g[h])&&h.display===c?(h.displayImage("all"),void 0===d?(d=h.display.id,E(d,b),G(g)):(e="string"===typeof b.idbase?k=b.idbase+A++:d.replace(C,"")+"_sep"+a.uniqueID(),y[e]=h,$("#dhtmlwindowholder").arrive("#"+ -e,{onceOnly:!0},function(){k=$(this).attr("id");window.setTimeout(function(){y[k].moveToDisplay(k);G(g)},0)}),h=H(d,e),k&&(h.id=k),a.LoadWindow(null,{id:h.id},"light",h.html,h.winopts))):G(g):a.globalOpts.extendedPlugins&&c.image&&c.image.xeqPlugins("image","onseparatedisplay")};if("string"===typeof b)try{b=JSON.parse(b)}catch(F){a.error("can't parse separate opts: "+b,F)}b=b||{};G(b.images||a.images)};a.Display.prototype.nextImage=function(b){var c,d,e;b=b||1;if(this.image){e=this.image.pos;for(c= -0;c=a.images.length&&(d=0),0>d&&(d=a.images.length-1),a.images[d].display!==this);d+=b);c!==d&&(b=a.images[d],b.displayImage("all"),b.refreshLayers(),b.display.clearMessage(),e&&(e=b.displayToImagePos(e),b.valpos=null,b.valpos=b.updateValpos(e,!0)));return this}};a.Display.prototype.loadSession=function(b,c){var d=this,e={},f,g,h=function(b){var c,f,h,k,l,n=function(){var c=this.canvas.getObjects();c&&"undefined"!==typeof c.length&& -(b.layers[this.layerName].nshape=c.length+1);a.Fabric.updateChildren(this,null,"objects");b.refreshLayers()};l=e[b.file]||{};l.blend&&(b.blend=$.extend(!0,{},l.blend));l.wcsim&&(b.wcsim=a.lookupImage(l.wcsim));if(l.layers&&l.layers.length)for(c=0;cc.search(/\[struct stat="OK"/)&&(a.waiting(!1),k(),(d=c.match(/msg="(.*)"/))&&d[1]?a.error(d[1]+" (from "+b+")"):a.error(c||"unknown "+b+" failure"))},n=function(b,c){var d;c=c||{};d=$.extend(!0,{},c);!1!==c.waiting&&a.waiting(!0,h);d.display=h.id;a.checkNew(new a.Image(b,d));a.waiting(!1)},m=function(){var b;if(c.verbose||1 %s",h,r,x),h=a.reproject(h,x,z,u),l("mProjectPP",h));a.vfile(y,e);h=a.imgtbl(y,".",w,"");l("mImgtbl",h);a.vsize(w)|| -a.error("no FITS files were added to output table for mosaic");m("create mosaic: %s",A);h=a.madd(w,z,A,"");l("mAdd",h);k();y=$.extend(!0,{},a.fits.options,c);y.image={xdim:0,ydim:0};y.file=A;a.fits.handleFITSFile(A,y,n)},a.SPINOUT);return this};a.Command=function(b){for(var c in b)b.hasOwnProperty(c)&&(this[c]=b[c]);b.name||a.error("command has no name");b.get||b.set||a.error("command requires get and/or set routine");a.commands.push(this);1").addClass("JS9Container").css("z-index",0).appendTo(d); -f.canvasjq=$("").addClass("JS9Layer").attr("id",e).attr("width",d.css("width")).attr("height",d.css("height")).appendTo(f.divjq);a.bugs.webkit_resize&&"main"===f.dtype&&f.canvasjq.attr("width",this.width).attr("height",this.height);f.canvas=new fabric.Canvas(f.canvasjq[0]);f.canvas.renderOnAddRemove=!1;f.canvas.preserveObjectStacking=!0;f.opts.movable?(f.opts.lockMovementX=!1,f.opts.lockMovementY=!1,f.opts.selectable=!0,f.opts.evented=!0):!1===f.opts.movable&&(f.opts.lockMovementX=!0,f.opts.lockMovementY= -!0,f.opts.selectable=!1,f.opts.evented=!1);void 0===f.opts.changeable&&void 0!==f.opts.fixinplace&&(f.opts.changeable=!f.opts.fixinplace);f.opts.changeable?(f.opts.hasControls=!0,f.opts.hasRotatingPoint=!0,f.opts.hasBorders=!0,f.opts.lockMovementX=!1,f.opts.lockMovementY=!1,f.opts.lockRotation=!1,f.opts.lockScalingX=!1,f.opts.lockScalingY=!1,f.opts.lockUniScaling=!1,f.opts.selectable=!0,f.opts.evented=!0,f.opts.usekeyboard=!0):!1===f.opts.changeable&&(f.opts.hasControls=!1,f.opts.hasRotatingPoint= -!1,f.opts.hasBorders=!1,f.opts.lockMovementX=!0,f.opts.lockMovementY=!0,f.opts.lockRotation=!0,f.opts.lockScalingX=!0,f.opts.lockScalingY=!0,f.opts.lockUniScaling=!0,f.opts.selectable=!1,f.opts.evented=!1,f.opts.usekeyboard=!1);f.opts.selectable&&(f.opts.canvas.selection=!0);if(f.opts.onmousedown||f.opts.onmouseup||f.opts.onmousemove||f.opts.tooltip||f.opts.onmouseover||f.opts.onmouseout){f.opts.evented=!0;if(f.opts.onmousedown)f.canvas.on("mouse:down",function(c){if(f.display.image&&c.target)"main"=== -f.dtype&&(f.display.image.clickInRegion=!0,f.display.image.clickInLayer=b),f.opts.onmousedown.call(this,f.display.image,c.target.pub,c.e,c.target);else if(this._selection=this.selection)this.selection=a.specialKey(c.e)});else f.canvas.on("mouse:down",function(b){if(this._selection=this.selection)this.selection=a.specialKey(b.e)});if(f.opts.onmouseup)f.canvas.on("mouse:up",function(a){f.display.image&&a.target&&f.opts.onmouseup.call(this,f.display.image,a.target.pub,a.e,a.target);this.selection=this._selection|| -this.selection});else f.canvas.on("mouse:up",function(){this.selection=this._selection||this.selection});if(f.opts.onmousemove)f.canvas.on("mouse:move",function(a){f.display.image&&a.target&&f.opts.onmousemove.call(this,f.display.image,a.target.pub,a.e,a.target)});if(f.opts.onmouseover)f.canvas.on("mouse:over",function(a){f.display.image&&a.target&&f.opts.onmouseover.call(this,f.display.image,a.target.pub,a.e,a.target)});if(f.opts.onmouseout)f.canvas.on("mouse:out",function(a){f.display.image&&a.target&& -f.opts.onmouseout.call(this,f.display.image,a.target.pub,a.e,a.target)});f.opts.tooltip&&(f.canvas.on("mouse:over",function(b){f.display.image&&b.target&&a.tooltip(b.target.left+b.target.width+2,b.target.top+b.target.height+2,f.opts.tooltip,f.display.image,b.target.pub,b.e,b.target)}),f.canvas.on("mouse:out",function(b){f.display.image&&b.target&&a.tooltip(b.target.left,b.target.top,null,f.display.image,b.target.pub,b.e,b.target)}))}else f.canvas.on("mouse:down",function(b){if(this._selection=this.selection)this.selection= -a.specialKey(b.e)}),f.canvas.on("mouse:up",function(){this.selection=this._selection||this.selection});"function"===typeof f.opts.ongroupcreate&&(f.opts.canvas.selection=!0,f.opts.selectable=!0,f.canvas.on("selection:created",function(a){var b=[],c=[];f.display.image&&a.target&&"group"===a.target.type&&(a.target.forEachObject(function(a){a.pub&&(c.push(a),b.push(a.pub))}),f.opts.ongroupcreate.call(this,f.display.image,b,a.e,c))}));f.canvas.on("object:modified",function(b){var c,d,e=[],g,h;if(b.target&& -(c=b.target,a.Fabric.updateChildren(f,c,"deltas"),f.opts.sortOverlapping&&(c.setCoords(),f.canvas.forEachObject(function(a){a!==c&&c.intersectsWithObject(a)&&(1===fabric.major_version?(g=a.getWidth(),h=a.getHeight()):(g=a.getScaledWidth(),h=a.getScaledHeight()),e.push({obj:a,siz:g*h}))}),e.length)))for(1===fabric.major_version?(g=c.getWidth(),h=c.getHeight()):(g=c.getScaledWidth(),h=c.getScaledHeight()),e.push({obj:c,siz:g*h}),e.sort(function(a,b){return a.sizb.siz?1:0}),d=e.length, -b=0;b$.inArray(d,k)&&c.addWithUpdate(d));if(e.params.children)for(d=0;d$.inArray(g,k)&&c.addWithUpdate(g);switch(e.type){case "polyline":case "polygon":a.Fabric.removePolygonAnchors(f, -e)}}f.canvas.renderAll()}else h(f,c)});f.canvas.on("before:selection:cleared",function(a){a.target&&g(f,a.target)});if(f.divjq.closest(a.lightOpts[a.LIGHTWIN].drag).length)if(fabric.isTouchSupported)f.divjq.on("touchstart",function(){f.canvas.calcOffset()});else f.divjq.on("mouseenter",function(){f.canvas.calcOffset()});return f}};a.Fabric.showShapeLayer=function(b,c,d){var e=this,f=0,g,h,k,l;if(h=this.getShapeLayer(b)){d=d||{};l=h.canvas;k=this.display.layers[b];if(c){d.local||(h.show=!0);h.json&& -h.show&&l.loadFromJSON(h.json,function(){var c,d,f;a.Fabric.updateChildren(h.dlayer,null,"objects");e.resize&&(l.getObjects().forEach(function(a){a.left+=e.resize.left;a.top+=e.resize.top;a.setCoords()}),l.calcOffset());e.layers[b].opts.panzoom?(e.binning.obin=e.binning.bin,e.rgb.sect.ozoom=e.rgb.sect.zoom,e.refreshShapes(b)):l.renderAll();l.selection=h.opts.canvas.selection;h.zindex=Math.abs(h.zindex);k.divjq.css("z-index",h.zindex);for(c in e.layers)e.layers.hasOwnProperty(c)&&b!==c&&e.layers[c].show&& -(d=e.display.layers[c],d.divjq.css("z-index")f)&&(f=d.zindex,e=b));a=e}return a};a.Fabric._parseShapeOptions=function(b,c, -d){var e,f,g,h,k,l,n={},m={};h="main"===this.display.layers[b].dtype?this.rgb.sect.zoom:1;if(c.remove)return{remove:c.remove};m.tags=[];delete c.parent;delete c.id;if(c.tags)if("string"===typeof c.tags)for(f=c.tags.toLowerCase().split(","),b=0;b").addClass("JS9Container").css("z-index",a.ZINDEX).attr("tabindex","0").append(this.canvasjq).appendTo(this.divjq);this.iconjq=$("
      ").addClass("JS9Logo").css("display","none").css("z-index", +a.ZINDEX+1).appendTo(this.divjq);this.iconimgjs=$("").addClass("JS9Logo").attr("src",a.InstallDir("images/js9logo.png")).appendTo(this.iconjq);a.globalOpts.logoDisplay&&this.iconjq.css("display","block");a.globalOpts.resizeHandle&&window.hasOwnProperty("ResizeSensor")&&(this.divjq.css("resize","both").css("overflow","hidden"),a.bugs.webkit_resize&&(this.owidth=parseInt(this.divjq.css("width"),10),this.oheight=parseInt(this.divjq.css("height"),10),this.divjq.css("width",this.width+a.RESIZEFUDGE).css("height", +this.height+a.RESIZEFUDGE)),this.resizeSensor=new ResizeSensor(this.divjq,function(){var b=c.divjq.width(),e=c.divjq.height();a.bugs.webkit_resize&&(b-=a.RESIZEFUDGE,e-=a.RESIZEFUDGE);c.resize(b,e)}));this.context=this.canvas.getContext("2d");a.ANTIALIAS||(this.context.imageSmoothingEnabled=!1,this.context.webkitImageSmoothingEnabled=!1,this.context.msImageSmoothingEnabled=!1);this.tooltip=$("
      ").attr("id","tooltip_"+this.id).addClass("JS9Tooltip").appendTo(this.divjq);this.image=null;this.pluginInstances= +{};this.layers={};this.initMessages();this.blendMode=!1;this.mouseActions=a.globalOpts.mouseActions.slice(0);this.touchActions=a.globalOpts.touchActions.slice(0);this.mousetouchZoom=a.globalOpts.mousetouchZoom;this.divjq.on("mouseenter",this,function(b){return a.mouseEnterCB(b)});this.divjq.on("mouseover",this,function(b){return a.mouseOverCB(b)});this.divjq.on("mousedown touchstart",this,function(b){return a.mouseDownCB(b)});this.divjq.on("mousemove touchmove",this,function(b){return a.mouseMoveCB(b)}); +this.divjq.on("mouseup touchend",this,function(b){return a.mouseUpCB(b)});this.divjq.on("mouseout",this,function(b){return a.mouseOutCB(b)});this.divjq.on("keypress",this,function(b){return a.keyPressCB(b)});this.divjq.on("keydown",this,function(b){return a.keyDownCB(b)});this.divjq.on("keyup",this,function(b){return a.keyUpCB(b)});this.divjq.on("wheel",this,function(b){return a.wheelCB(b)});this.divjq.on("dragenter",this,function(b){return a.dragenterCB(this.id,b)});this.divjq.on("dragover",this, +function(b){return a.dragoverCB(this.id,b)});this.divjq.on("dragexit",this,function(b){return a.dragexitCB(this.id,b)});this.divjq.on("drop",this,function(b){return a.dragdropCB(this.id,b)});this.divjq.on("contextmenu",this,function(){return!1});this.addFileDialog("Load",a.globalOpts.imageTemplates);this.addFileDialog("RefreshImage",a.globalOpts.imageTemplates);this.addFileDialog("LoadRegions",a.globalOpts.regionTemplates);this.addFileDialog("LoadSession",a.globalOpts.sessionTemplates);this.addFileDialog("LoadColormap", +a.globalOpts.colormapTemplates);this.addFileDialog("LoadCatalog",a.globalOpts.catalogTemplates);a.displays.push(this);a.DEBUG&&a.log("JS9 display: %s",this.id)};a.Display.prototype.addFileDialog=function(b,c){var d=this,e,f;b&&a.publics[b]&&(f="openLocal"+b+"-"+d.id,e=$("
      ").css("visibility","hidden").css("position","relative").css("top",-50).css("left",-50).appendTo(d.divjq),e=$("").attr("type","file").attr("id",f).attr("multiple",!0).appendTo(e),c&&e.attr("accept",c),e.on("change",function(){var c; +for(c=0;c").addClass("JS9Container").css("z-index",a.MESSZINDEX).appendTo(this.divjq);this.infoArea=$("
      ").addClass("JS9Message").appendTo(this.messageContainer);this.regionsArea=$("
      ").addClass("JS9Message").appendTo(this.messageContainer);this.progressArea=$("
      ").addClass("JS9Progress").addClass("JS9Message").appendTo(this.messageContainer); +this.progressBar=$("").addClass("JS9ProgressBar").attr("value",0).attr("max",100).attr("name","progress").appendTo(this.progressArea);try{this.messageContainer.draggable({start:function(b,c){this.oicb=a.globalOpts.internalContrastBias;a.globalOpts.internalContrastBias=!1},stop:function(b,c){a.globalOpts.internalContrastBias=this.oicb}})}catch(b){}return this};a.Display.prototype.displayPlugin=function(b){var c=this,d,e,f,g,h,k,l,n;if("string"===typeof b)for(d=0;d").attr("id",h).css("display","none").appendTo($(this.divjq)),$("
      ").addClass(b.name).attr("id",l).attr("data-js9id",this.divjq.attr("id")).css("height", +"100%").css("width","100%").appendTo(f)),f=b.opts.winDims[0]||a.WIDTH,g=b.opts.winDims[1]||a.HEIGHT,k=b.opts.winResize?"1":"0",e=sprintf(e.format,f,g,k),f=b.opts.toolbarHTML&&0<=b.opts.toolbarHTML.search(/\$title/)?"":b.opts.winTitle||"",f+=sprintf(a.IDFMT,this.id),h=a.lightWin(d,"div",h,f,e),d=$("#"+d+" #"+l),n=a.instantiatePlugin(d,b,h),n.winHandle.onclose=function(){n.winHandle.hide();n.status="inactive";if(b.opts.onpluginclose)try{b.opts.onpluginclose.call(n,c.image)}catch(m){a.log("onplugincloseCB: %s [%s]\n%s", +b.name,m.message,a.strace(m))}return!1},n.status="active",b.opts.onplugindisplay)try{b.opts.onplugindisplay.call(n,this.image)}catch(m){a.log("onplugindisplayCB: %s [%s]\n%s",b.name,m.message,a.strace(m))}}else if("inactive"===n.status){if(n.winHandle&&(n.winHandle.show(),n.status="active",b.opts.onplugindisplay))try{b.opts.onplugindisplay.call(n,this.image)}catch(m){a.log("onplugindisplayCB: %s [%s]\n%s",b.name,m.message,a.strace(m))}}else if("active"===n.status&&n.winHandle&&(n.winHandle.hide(), +n.status="inactive",b.opts.onpluginclose))try{b.opts.onpluginclose.call(n,c.image)}catch(m){a.log("onplugincloseCB: %s [%s]\n%s",b.name,m.message,a.strace(m))}break;case "new":a.error("external window support for plugins not yet implemented")}};a.Display.prototype.resize=function(b,c,d){var e,f,g,h,k,l=function(a){a.left+=h;a.top+=k;a.setCoords()};a.globalOpts.resize||a.error("display resize not enabled");if(!b&&!c)return{width:this.width,height:this.height};if("full"===b){if(d=c,window.innerWidth&& +(b=window.innerWidth),window.innerHeight)for(c=window.innerHeight,e=0;eb||10>c)&&a.error("invalid dimension(s) passed to display resize"); +if(b===this.width&&c===this.height)return this;d=d||{};e=b;b=c;h=(e-this.width)/2;k=(b-this.height)/2;this.width=e;this.height=b;this.divjq.css("width",e);this.divjq.css("height",b);this.canvasjq.attr("width",e);this.canvasjq.attr("height",b);a.bugs.webkit_resize&&!this.resizing&&(this.owidth=Math.min(this.owidth,e),this.oheight=Math.min(this.oheight,b));0<=$.inArray("JS9Menubar",a.globalOpts.resizeDivs)&&(a.isNull(d.resizeMenubar)||d.resizeMenubar)&&(c=this.pluginInstances.JS9Menubar)&&$("#"+this.id+ +"Menubar").css("width",e);0<=$.inArray("JS9Toolbar",a.globalOpts.resizeDivs)&&(a.isNull(d.resizeToolbar)||d.resizeToolbar)&&(c=this.pluginInstances.JS9Toolbar)&&(c.divjq.attr("data-width",String(e)+"px"),a.Toolbar.init.call(c));0<=$.inArray("JS9Colorbar",a.globalOpts.resizeDivs)&&(a.isNull(d.resizeColorbar)||d.resizeColorbar)&&(c=this.pluginInstances.JS9Colorbar)&&(c.divjq.attr("data-width",String(e)+"px"),a.Colorbar.init.call(c));for(g in this.layers)this.layers.hasOwnProperty(g)&&(c=this.layers[g], +"main"===c.dtype&&(c.divjq.css("width",e),c.divjq.css("height",b),c.canvasjq.attr("width",e),c.canvasjq.attr("height",b),c.canvas.setWidth(e),c.canvas.setHeight(b),c.canvas.calcOffset()));for(e=0;e=this.divjq.width()&&b.y+a.RESIZEDIST>=this.divjq.height()?!0:!1};a.Display.prototype.center=function(){var b,c,d=this.divjq,e,f;e=d.offset().top; +var g=d.height(),h=$(window).height();f=d.offset().left;var d=d.width(),k=$(window).width();for(b=0;b
      ",b,m.width())),q.isactive&&(c+=sprintf("
      ", +b,m.width())),c+=sprintf("
      ",b,m.width()-B,m.height()-B),u.isactive&&(c+=sprintf("
      ",b,m.width()))),"auto"===g&&x+r*(z+.5)>window.innerWidth&&(w++,z=0),d=sprintf("width=%s,height=%s,top=%s,left=%s,resize=1,scolling=1",r,v,p+(v+k+l)*w,x+(r+h+n)*z),"auto"===g||"horizontal"===g?z++:"vertical"===g&&w++);return{id:b,html:c,winopts:d}},G=function(g){var h, +k;h=f++;g.length>h?(h="number"===typeof g[h]?a.images[g[h]]:g[h])&&h.display===c?(h.displayImage("all"),void 0===d?(d=h.display.id,E(d,b),G(g)):(e="string"===typeof b.idbase?k=b.idbase+A++:d.replace(C,"")+"_sep"+a.uniqueID(),y[e]=h,$("#dhtmlwindowholder").arrive("#"+e,{onceOnly:!0},function(){k=$(this).attr("id");window.setTimeout(function(){y[k].moveToDisplay(k);G(g)},0)}),h=H(d,e),k&&(h.id=k),a.LoadWindow(null,{id:h.id},"light",h.html,h.winopts))):G(g):a.globalOpts.extendedPlugins&&c.image&&c.image.xeqPlugins("image", +"onseparatedisplay")};if("string"===typeof b)try{b=JSON.parse(b)}catch(F){a.error("can't parse separate opts: "+b,F)}b=b||{};G(b.images||a.images)};a.Display.prototype.nextImage=function(b){var c,d,e;b=b||1;if(this.image){e=this.image.pos;for(c=0;c=a.images.length&&(d=0),0>d&&(d=a.images.length-1),a.images[d].display!==this);d+=b);c!==d&&(b=a.images[d],b.displayImage("all"),b.refreshLayers(),b.display.clearMessage(),e&&(e=b.displayToImagePos(e), +b.valpos=null,b.valpos=b.updateValpos(e,!0)));return this}};a.Display.prototype.loadSession=function(b,c){var d=this,e={},f,g,h=function(b){var c,f,h,k,l,n=function(){var c=this.canvas.getObjects();c&&"undefined"!==typeof c.length&&(b.layers[this.layerName].nshape=c.length+1);a.Fabric.updateChildren(this,null,"objects");b.refreshLayers()};l=e[b.file]||{};l.blend&&(b.blend=$.extend(!0,{},l.blend));l.wcsim&&(b.wcsim=a.lookupImage(l.wcsim));if(l.layers&&l.layers.length)for(c=0;cc.search(/\[struct stat="OK"/)&&(a.waiting(!1),k(),(d=c.match(/msg="(.*)"/))&&d[1]?a.error(d[1]+ +" (from "+b+")"):a.error(c||"unknown "+b+" failure"))},n=function(b,c){var d;c=c||{};d=$.extend(!0,{},c);!1!==c.waiting&&a.waiting(!0,h);d.display=h.id;a.checkNew(new a.Image(b,d));a.waiting(!1)},m=function(){var b;if(c.verbose||1 %s",h,r,x),h=a.reproject(h,x,z,u),l("mProjectPP",h));a.vfile(y,e);h=a.imgtbl(y,".",w,"");l("mImgtbl",h);a.vsize(w)||a.error("no FITS files were added to output table for mosaic");m("create mosaic: %s",A);h=a.madd(w,z,A,"");l("mAdd",h);k();y=$.extend(!0,{},a.fits.options,c);y.image={xdim:0,ydim:0};y.file=A;a.fits.handleFITSFile(A,y,n)},a.SPINOUT); +return this};a.Command=function(b){for(var c in b)b.hasOwnProperty(c)&&(this[c]=b[c]);b.name||a.error("command has no name");b.get||b.set||a.error("command requires get and/or set routine");a.commands.push(this);1").addClass("JS9Container").css("z-index",0).appendTo(d);f.canvasjq=$("").addClass("JS9Layer").attr("id",e).attr("width",d.css("width")).attr("height", +d.css("height")).appendTo(f.divjq);a.bugs.webkit_resize&&"main"===f.dtype&&f.canvasjq.attr("width",this.width).attr("height",this.height);f.canvas=new fabric.Canvas(f.canvasjq[0]);f.canvas.renderOnAddRemove=!1;f.canvas.preserveObjectStacking=!0;f.opts.movable?(f.opts.lockMovementX=!1,f.opts.lockMovementY=!1,f.opts.selectable=!0,f.opts.evented=!0):!1===f.opts.movable&&(f.opts.lockMovementX=!0,f.opts.lockMovementY=!0,f.opts.selectable=!1,f.opts.evented=!1);void 0===f.opts.changeable&&void 0!==f.opts.fixinplace&& +(f.opts.changeable=!f.opts.fixinplace);f.opts.changeable?(f.opts.hasControls=!0,f.opts.hasRotatingPoint=!0,f.opts.hasBorders=!0,f.opts.lockMovementX=!1,f.opts.lockMovementY=!1,f.opts.lockRotation=!1,f.opts.lockScalingX=!1,f.opts.lockScalingY=!1,f.opts.lockUniScaling=!1,f.opts.selectable=!0,f.opts.evented=!0,f.opts.usekeyboard=!0):!1===f.opts.changeable&&(f.opts.hasControls=!1,f.opts.hasRotatingPoint=!1,f.opts.hasBorders=!1,f.opts.lockMovementX=!0,f.opts.lockMovementY=!0,f.opts.lockRotation=!0,f.opts.lockScalingX= +!0,f.opts.lockScalingY=!0,f.opts.lockUniScaling=!0,f.opts.selectable=!1,f.opts.evented=!1,f.opts.usekeyboard=!1);f.opts.selectable&&(f.opts.canvas.selection=!0);if(f.opts.onmousedown||f.opts.onmouseup||f.opts.onmousemove||f.opts.tooltip||f.opts.onmouseover||f.opts.onmouseout){f.opts.evented=!0;if(f.opts.onmousedown)f.canvas.on("mouse:down",function(c){if(f.display.image&&c.target)"main"===f.dtype&&(f.display.image.clickInRegion=!0,f.display.image.clickInLayer=b),f.opts.onmousedown.call(this,f.display.image, +c.target.pub,c.e,c.target);else if(this._selection=this.selection)this.selection=a.specialKey(c.e)});else f.canvas.on("mouse:down",function(b){if(this._selection=this.selection)this.selection=a.specialKey(b.e)});if(f.opts.onmouseup)f.canvas.on("mouse:up",function(a){f.display.image&&a.target&&f.opts.onmouseup.call(this,f.display.image,a.target.pub,a.e,a.target);this.selection=this._selection||this.selection});else f.canvas.on("mouse:up",function(){this.selection=this._selection||this.selection}); +if(f.opts.onmousemove)f.canvas.on("mouse:move",function(a){f.display.image&&a.target&&f.opts.onmousemove.call(this,f.display.image,a.target.pub,a.e,a.target)});if(f.opts.onmouseover)f.canvas.on("mouse:over",function(a){f.display.image&&a.target&&f.opts.onmouseover.call(this,f.display.image,a.target.pub,a.e,a.target)});if(f.opts.onmouseout)f.canvas.on("mouse:out",function(a){f.display.image&&a.target&&f.opts.onmouseout.call(this,f.display.image,a.target.pub,a.e,a.target)});f.opts.tooltip&&(f.canvas.on("mouse:over", +function(b){f.display.image&&b.target&&a.tooltip(b.target.left+b.target.width+2,b.target.top+b.target.height+2,f.opts.tooltip,f.display.image,b.target.pub,b.e,b.target)}),f.canvas.on("mouse:out",function(b){f.display.image&&b.target&&a.tooltip(b.target.left,b.target.top,null,f.display.image,b.target.pub,b.e,b.target)}))}else f.canvas.on("mouse:down",function(b){if(this._selection=this.selection)this.selection=a.specialKey(b.e)}),f.canvas.on("mouse:up",function(){this.selection=this._selection||this.selection}); +"function"===typeof f.opts.ongroupcreate&&(f.opts.canvas.selection=!0,f.opts.selectable=!0,f.canvas.on("selection:created",function(a){var b=[],c=[];f.display.image&&a.target&&"group"===a.target.type&&(a.target.forEachObject(function(a){a.pub&&(c.push(a),b.push(a.pub))}),f.opts.ongroupcreate.call(this,f.display.image,b,a.e,c))}));f.canvas.on("object:modified",function(b){var c,d,e=[],g,h;if(b.target&&(c=b.target,a.Fabric.updateChildren(f,c,"deltas"),f.opts.sortOverlapping&&(c.setCoords(),f.canvas.forEachObject(function(a){a!== +c&&c.intersectsWithObject(a)&&(1===fabric.major_version?(g=a.getWidth(),h=a.getHeight()):(g=a.getScaledWidth(),h=a.getScaledHeight()),e.push({obj:a,siz:g*h}))}),e.length)))for(1===fabric.major_version?(g=c.getWidth(),h=c.getHeight()):(g=c.getScaledWidth(),h=c.getScaledHeight()),e.push({obj:c,siz:g*h}),e.sort(function(a,b){return a.sizb.siz?1:0}),d=e.length,b=0;b$.inArray(d,k)&&c.addWithUpdate(d));if(e.params.children)for(d=0;d$.inArray(g,k)&&c.addWithUpdate(g);switch(e.type){case "polyline":case "polygon":a.Fabric.removePolygonAnchors(f,e)}}f.canvas.renderAll()}else h(f,c)});f.canvas.on("before:selection:cleared",function(a){a.target&& +g(f,a.target)});if(f.divjq.closest(a.lightOpts[a.LIGHTWIN].drag).length)if(fabric.isTouchSupported)f.divjq.on("touchstart",function(){f.canvas.calcOffset()});else f.divjq.on("mouseenter",function(){f.canvas.calcOffset()});return f}};a.Fabric.showShapeLayer=function(b,c,d){var e=this,f=0,g,h,k,l;if(h=this.getShapeLayer(b)){d=d||{};l=h.canvas;k=this.display.layers[b];if(c){d.local||(h.show=!0);h.json&&h.show&&l.loadFromJSON(h.json,function(){var c,d,f;a.Fabric.updateChildren(h.dlayer,null,"objects"); +e.resize&&(l.getObjects().forEach(function(a){a.left+=e.resize.left;a.top+=e.resize.top;a.setCoords()}),l.calcOffset());e.layers[b].opts.panzoom?(e.binning.obin=e.binning.bin,e.rgb.sect.ozoom=e.rgb.sect.zoom,e.refreshShapes(b)):l.renderAll();l.selection=h.opts.canvas.selection;h.zindex=Math.abs(h.zindex);k.divjq.css("z-index",h.zindex);for(c in e.layers)e.layers.hasOwnProperty(c)&&b!==c&&e.layers[c].show&&(d=e.display.layers[c],d.divjq.css("z-index")f)&&(f=d.zindex,e=b));a=e}return a};a.Fabric._parseShapeOptions=function(b,c,d){var e,f,g,h,k,l,n={},m={};h="main"===this.display.layers[b].dtype?this.rgb.sect.zoom:1;if(c.remove)return{remove:c.remove};m.tags=[];delete c.parent;delete c.id; +if(c.tags)if("string"===typeof c.tags)for(f=c.tags.toLowerCase().split(","),b=0;b").attr("id","dhtmlwindowholder").appendTo($(document.body)).append("."),dhtmlwindow.imagefiles=a.inline?[a.inline["images/min.gif"],a.inline["images/close.gif"],a.inline["images/restore.gif"],a.inline["images/resize.gif"]]:a.allinone?[a.allinone.min,a.allinone.close,a.allinone.restore,a.allinone.resize]:[a.InstallDir("images/min.gif"),a.InstallDir("images/close.gif"),a.InstallDir("images/restore.gif"),a.InstallDir("images/resize.gif")], window.hasOwnProperty("Jupyter")&&$("#dhtmlwindowholder").arrive("input",function(){a.jupyterFocus($(this).parent())}));a.globalOpts.plotLibrary=a.globalOpts.plotLibrary||"flot";"plotly"!==a.globalOpts.plotLibrary||window.hasOwnProperty("Plotly")||(a.globalOpts.plotLibrary="flot");window.hasOwnProperty("JS9Prefs")&&"object"===typeof JS9Prefs?a.mergePrefs(JS9Prefs):a.PREFSFILE&&(a.loadPrefs(a.InstallDir(a.PREFSFILE),1),a.loadPrefs(a.PREFSFILE,0));a.hasOwnProperty("Regions")&&$.extend(!0,a.Regions.opts, a.regionOpts);delete a.regionOpts;a.hasOwnProperty("Catalogs")&&$.extend(!0,a.Catalogs.opts,a.catalogOpts);delete a.catalogOpts;a.hasOwnProperty("Crosshair")&&$.extend(!0,a.Crosshair.opts,a.crosshairOpts);delete a.crosshairOpts;a.hasOwnProperty("Grid")&&$.extend(!0,a.Grid.opts,a.gridOpts);delete a.gridOpts;a.hasOwnProperty("Module")&&$.extend(!0,Module,a.emscriptenOpts);delete a.emscriptenOpts;a.globalOpts.resize||(a.globalOpts.resizeHandle=!1);void 0!==a.analOpts.prependJS9Dir&&(a.globalOpts.prependJS9Dir= -a.analOpts.prependJS9Dir,delete a.analOpts.prependJS9Dir);void 0!==a.analOpts.dataDir&&(a.globalOpts.dataDir=a.analOpts.dataDir,delete a.analOpts.dataDir);a.BROWSER[3]&&(a.globalOpts.resizeHandle=!1);if(window.hasOwnProperty("localStorage")){try{b=localStorage.getItem("images")}catch(c){b=null}if(b){try{a.userOpts.images=JSON.parse(b)}catch(c){}a.userOpts.images&&$.extend(!0,a.imageOpts,a.userOpts.images)}try{b=localStorage.getItem("regions")}catch(c){b=null}if(b){try{a.userOpts.regions=JSON.parse(b)}catch(c){}a.userOpts.regions&& -$.extend(!0,a.Regions.opts,a.userOpts.regions)}try{b=localStorage.getItem("fits")}catch(c){b=null}if(b)try{a.userOpts.fits=JSON.parse(b)}catch(c){}try{b=localStorage.getItem("displays")}catch(c){b=null}if(b){try{a.userOpts.displays=JSON.parse(b)}catch(c){}a.userOpts.displays&&$.extend(!0,a.globalOpts,a.userOpts.displays)}}a.DEBUG=a.DEBUG||a.globalOpts.debug||0;$("div.JS9").each(function(){a.checkNew(new a.Display($(this)))});if(window.Worker&&!a.allinone)try{a.worker=new a.WebWorker(a.InstallDir(a.WORKERFILE))}catch(c){}a.allinone? -a.initFITS():a.initEmscripten();a.helper=new a.Helper;window.addEventListener("message",function(b){var c,e=b.data;b=b.origin||b.originalEvent.origin;"null"===b&&(b="unknown");if(a.globalOpts.postMessage){if("string"===typeof e)try{c=JSON.parse(e)}catch(f){a.error("can't parse msg: "+e,f)}else"object"===typeof e?c=e:a.error("invalid msg from postMessage");a.msgHandler(c,function(a,b,d,e){e=e||{};parent.postMessage({cmd:c.cmd,res:{name:e.name,rtype:e.rtype,rdata:a,stdout:a,stderr:b,errcode:d}},"*")})}else a.DEBUG&& -(b=sprintf("JS9 ignoring postMessage, origin: %s",b),b="string"===typeof e?b+sprintf(" data: %s",e):"object"===typeof e?b+sprintf(" obj: %s",JSON.stringify(Object.keys(e))):b+sprintf(" typeof: %s",typeof e),a.log(b))},!1);window.hasOwnProperty("ImageFilters")&&(a.ImageFilters=ImageFilters);a.initColormaps();a.initCommands();a.initAnalysis();a.RegisterPlugin(a.MouseTouch.CLASS,a.MouseTouch.NAME,a.MouseTouch.init,{menuItem:"Mouse/Touch",onplugindisplay:a.MouseTouch.init,help:"help/mousetouch.html", -winTitle:"Mouse/Touch Actions",winResize:!0,winDims:[a.MouseTouch.WIDTH,a.MouseTouch.HEIGHT]});a.RegisterPlugin(a.Regions.CLASS,a.Regions.NAME,a.Regions.init,{divArgs:["regions"],winDims:[0,0]});a.RegisterPlugin(a.Crosshair.CLASS,a.Crosshair.NAME,a.Crosshair.init,{onmousemove:a.Crosshair.display,onkeyboardaction:a.Crosshair.keyaction,onkeyup:a.Crosshair.keyup,onimageload:a.Crosshair.create,winDims:[0,0]});a.RegisterPlugin(a.Grid.CLASS,a.Grid.NAME,a.Grid.init,{onsetpan:a.Grid.regrid,onsetzoom:a.Grid.regrid, -onsetwcssys:a.Grid.regrid,onsetwcsunits:a.Grid.regrid,onimageload:a.Grid.regrid,onupdateprefs:a.Grid.regrid,winDims:[0,0]});a.RegisterPlugin(a.Dysel.CLASS,a.Dysel.NAME,a.Dysel.init,{onimageload:a.Dysel.imageload,onimageclose:a.Dysel.imageclose,winDims:[0,0]});a.instantiatePlugins();a.plugins.sort(function(a,b){var c=a.opts.menuItem,d=b.opts.menuItem;return c?!d||cd?1:0:1});$(document).scrollTop(0);a.inited=!0;$(document).trigger("JS9:init")};a.parsePublicArgs=function(a){var b=null;a=Array.prototype.slice.call(a); -var d=a[a.length-1];d&&"object"===typeof d&&d.hasOwnProperty("display")&&1===Object.keys(d).length&&(b=d.display,a.pop());return{argv:a,display:b}};a.mkPublic=function(b,c){"string"===typeof c?a.Image.prototype[c]?(a[b]=function(){var b;b=a.parsePublicArgs(arguments);var e=a.getImage(b.display);if(e)return b=e[c].apply(e,b.argv),b===e||b===e.display?a.globalOpts.quietReturn?"":"OK":b},a.publics[b]=a[b]):a.error("unknown image function for mkPublic: "+c):"function"===typeof c?(a[b]=c,a.publics[b]= -a[b]):a.error("unsupported type for mkPublic: "+typeof c)};a.mkPublic("CloseImage","closeImage");a.mkPublic("DisplayImage","displayImage");a.mkPublic("DisplayExtension","displayExtension");a.mkPublic("DisplaySlice","displaySlice");a.mkPublic("DisplaySection","displaySection");a.mkPublic("BlendImage","blendImage");a.mkPublic("GetColormap","getColormap");a.mkPublic("SetColormap","setColormap");a.mkPublic("GetZoom","getZoom");a.mkPublic("SetZoom","setZoom");a.mkPublic("GetPan","getPan");a.mkPublic("SetPan", -"setPan");a.mkPublic("AlignPanZoom","alignPanZoom");a.mkPublic("GetScale","getScale");a.mkPublic("SetScale","setScale");a.mkPublic("GetParam","getParam");a.mkPublic("SetParam","setParam");a.mkPublic("GetValPos","updateValpos");a.mkPublic("ImageToDisplayPos","imageToDisplayPos");a.mkPublic("DisplayToImagePos","displayToImagePos");a.mkPublic("ImageToLogicalPos","imageToLogicalPos");a.mkPublic("LogicalToImagePos","logicalToImagePos");a.mkPublic("GetWCSUnits","getWCSUnits");a.mkPublic("SetWCSUnits","setWCSUnits"); -a.mkPublic("GetWCS","getWCS");a.mkPublic("SetWCS","setWCS");a.mkPublic("GetWCSSys","getWCSSys");a.mkPublic("SetWCSSys","setWCSSys");a.mkPublic("ShowShapeLayer","showShapeLayer");a.mkPublic("ActiveShapeLayer","activeShapeLayer");a.mkPublic("ToggleShapeLayers","toggleShapeLayers");a.mkPublic("AddShapes","addShapes");a.mkPublic("RemoveShapes","removeShapes");a.mkPublic("GetShapes","getShapes");a.mkPublic("ChangeShapes","changeShapes");a.mkPublic("DisplayCoordGrid","displayCoordGrid");a.mkPublic("Print", -"print");a.mkPublic("SavePNG","savePNG");a.mkPublic("SaveJPEG","saveJPEG");a.mkPublic("SaveFITS","saveFITS");a.mkPublic("UploadFITSFile","uploadFITSFile");a.mkPublic("CountsInRegions","countsInRegions");a.mkPublic("RadialProfile","radialProfile");a.mkPublic("Plot3D","plot3d");a.mkPublic("RunAnalysis","runAnalysis");a.mkPublic("RawDataLayer","rawDataLayer");a.mkPublic("GaussBlurData","gaussBlurData");a.mkPublic("ImarithData","imarithData");a.mkPublic("RotateData","rotateData");a.mkPublic("ReprojectData", -"reprojectData");a.mkPublic("ShiftData","shiftData");a.mkPublic("FilterRGBImage","filterRGBImage");a.mkPublic("MoveToDisplay","moveToDisplay");a.mkPublic("LookupImage",function(b){var c=a.parsePublicArgs(arguments);return a.lookupImage(c.argv[0],c.display)});a.mkPublic("LookupDisplay",function(b,c){var d=a.parsePublicArgs(arguments);return a.lookupDisplay(d.argv[0]||d.display,d.argv[1])});a.mkPublic("RenameDisplay",function(b,c){var d;d=a.parsePublicArgs(arguments);switch(d.argv.length){case 0:return; -case 1:c=d.display;b=d.argv[0];break;default:c=d.argv[0],b=d.argv[1]}(d=a.lookupDisplay(c))&&d.id&&(c=d.id,d.oid||(d.oid=c),d.id=b,a.helper.send("renameDisplay",{odisplay:c,ndisplay:d.id}))});a.mkPublic("CloseDisplay",function(b){var c,d;c=a.parsePublicArgs(arguments);b=a.lookupDisplay(c.argv[0]||c.display);for(c=a.images.length-1;0<=c;c--)d=a.images[c],d.display===b&&d.closeImage()});a.mkPublic("AddColormap",function(b,c,d,e,f){var g,h;g=a.parsePublicArgs(arguments);var k=function(b,c){var d,e;"object"!== -typeof b&&a.error("invalid colormap object for JS9.AddColormap()");$.isArray(b)||(b=[b]);for(d=0;dd;d++)e=c[g[d]],"string"===typeof e&&(e=a.LookupImage(e)), -e&&e.setColormap(f[d]);"true"===b?b=!0:"false"===b&&(b=!1);a.globalOpts.rgb.active=!!b;a.DisplayImage({display:h.display});return a.globalOpts.rgb.active});a.mkPublic("GetRGBMode",function(){return{active:a.globalOpts.rgb.active,rid:a.globalOpts.rgb.rim?a.globalOpts.rgb.rim.id:null,gid:a.globalOpts.rgb.gim?a.globalOpts.rgb.gim.id:null,bid:a.globalOpts.rgb.bim?a.globalOpts.rgb.bim.id:null}});a.mkPublic("SetValPos",function(b){var c=null,d=a.parsePublicArgs(arguments),e=a.getImage(d.display);e&&(b= -d.argv[0],c=e.params.valpos,e.params.valpos=b);return c});a.mkPublic("SetImageInherit",function(b){var c=null,d=a.parsePublicArgs(arguments),e=a.getImage(d.display);e&&(b=d.argv[0],c=e.params.inherit,e.params.inherit=b);return c});a.mkPublic("GetImageInherit",function(){var b=null,c=a.parsePublicArgs(arguments);if(c=a.getImage(c.display))b=c.params.inherit;return b});a.mkPublic("Load",function(b,c){var d,e,f,g;f=a.parsePublicArgs(arguments);e="fits";b=f.argv[0];c=f.argv[1];if(b){f=f.display?f.display: -0");!f||0<$("#"+c.clone+"Menubar").length&&!f.pluginInstances.JS9Menubar.isDynamic?e+=sprintf("
      ",b):d&&(z-=40);e+=sprintf("
      ",b);!f||0<$("#"+c.clone+"Colorbar").length&&!f.pluginInstances.JS9Colorbar.isDynamic? -(g=f&&f.pluginInstances.JS9Colorbar?sprintf("data-showTicks='%s'",f.pluginInstances.JS9Colorbar.showTicks):"",e+=sprintf("
      ",b,g),f&&f.pluginInstances.JS9Colorbar&&!f.pluginInstances.JS9Colorbar.showTicks&&(z-=15)):d&&(z-=44);return d?(a.Dysel.retrievePlugins().length&&(w+=2,z+=2),{html:e,winopts:y[1]+String(w)+y[3]+String(z)+y[5]}):e};b=n.argv[0];c=n.argv[1];d=n.argv[2];e=n.argv[3];f=n.argv[4];if("object"===typeof c)c= -$.extend(!0,{},c);else if("string"===typeof c)try{c=JSON.parse(c)}catch(C){c={}}else c={};d=d||"light";n=(d||"")+"win";switch(d){case "light":return c.id?(h=c.id,delete c.id):h=n+a.uniqueID(),l="d"+h,e?f=f||x.imageWin:(t=m(h,c,x.imageWin),e=t.html,f=f||t.winopts),t=sprintf("JS9 Display"+a.IDFMT,h),q=a.lightWin(l,"inline",e,t,f),q.onclose=function(){var b,c,d=[];for(b=0;b",{value:a.displays[b].id,text:a.displays[b].id}))}),l=a.lightWin(r,v,p,"Closing a light window",x.lcloseWin),$(l).data("dispid",h),$(l).data("winid",q),!1}},k=new a.Display(h),k.winid=q,a.helper.send("addDisplay",{display:h}),a.instantiatePlugins(), -c.display=h,b&&a.Load(b,c),h;case "new":c.id?(h=c.id,delete c.id):h=n+a.uniqueID();f=f||sprintf("width=%s, height=%s",a.globalOpts.newWindowWidth,a.globalOpts.newWindowHeight);n=document.getElementsByTagName("head")[0].innerHTML;n=n.replace(/src=['"].*astroemw?\.js['"]/,"");n.match(/src=["'].*js9\.js/)||n.match(/src=["'].*js9\.min\.js/)||(n+=sprintf('<%s type="text/javascript" src="js9.min.js">',"script","script"));m=e||m(h,c);e=sprintf("%s%s\n",m);window.isElectron&&(t="data:text/html,