// SwingJS.js // BH 7/24/2015 9:09:39 AM allows setting Info.resourcePath // BH 4/28/2015 10:15:32 PM adds getAppletHtml // BH 4/2/2015 5:17:44 PM adds SwingJS.getJavaResource(path) // BH 3/27/2015 6:34:49 AM just a shell if(typeof(jQuery)=="undefined") alert ("Note -- jQuery is required for SwingJS, but it's not defined.") if (typeof(SwingJS) == "undefined") { SwingJS = {}; (function (SwingJS, $) { SwingJS.getApplet = function(id, Info, checkOnly) { return SwingJS._Applet._get(id, Info, checkOnly); } SwingJS.getJavaResource = function(path, isJavaPath) { if (path.indexOf("http") != 0) { var applet = Jmol._applets[java.lang.Thread.currentThread().getName()]; path = (!isJavaPath && applet.__Info.resourcePath || applet.__Info.j2sPath) + "/" + path } System.out.println("Swingjs.js getJavaResource " + path) var s = Jmol._getFileData(path); if (s.indexOf("[Exception") == 0) return null; if (path.lastIndexOf(".css") == path.length - 4) { path = path.substring(0, path.lastIndexOf("/") + 1) + "images/"; s = s.replace(/images\//g, path) jQuery("head").append(jQuery("")); return s; } else if (path.lastIndexOf(".js") == path.length - 3) { try { eval(s); } catch (e) { alert("error processing " + s) return null; } } return s; } // optional Info here SwingJS.getAppletHtml = function(applet, Info) { if (Info) { var d = SwingJS._document; SwingJS._document = null; applet = SwingJS.getApplet(applet, Info); SwingJS._document = d; } return applet._code; } SwingJS._Applet = function(id, Info, checkOnly){ window[id] = this; this._appletType = "SwingJS._Applet" + (Info.isSigned ? " (signed)" : ""); this._isJava = true; this._availableParams = null; // all allowed if (checkOnly) return this; this._isSigned = Info.isSigned; this._readyFunction = Info.readyFunction; this._ready = false; this._isJava = true; this._isInfoVisible = false; this._applet = null; this._memoryLimit = Info.memoryLimit || 512; this._canScript = function(script) {return true;}; this._savedOrientations = []; this._initialize = function(jarPath, jarFile) { var doReport = false; SwingJS._jarFile && (jarFile = SwingJS._jarFile); if(this._jarFile) { var f = this._jarFile; if(f.indexOf("/") >= 0) { alert ("This web page URL is requesting that the applet used be " + f + ". This is a possible security risk, particularly if the applet is signed, because signed applets can read and write files on your local machine or network."); var ok = prompt("Do you want to use applet " + f + "? ", "yes or no") if(ok == "yes") { jarPath = f.substring(0, f.lastIndexOf("/")); jarFile = f.substring(f.lastIndexOf("/") + 1); } else { doReport = true; } } else { jarFile = f; } this_isSigned = Info.isSigned = (jarFile.indexOf("Signed") >= 0); } this._jarPath = Info.jarPath = jarPath || "."; this._jarFile = Info.jarFile = jarFile; if (doReport) alert ("The web page URL was ignored. Continuing using " + this._jarFile + ' in directory "' + this._jarPath + '"'); // could do something like this: Jmol.controls == undefined || Jmol.controls._onloadResetForms(); } this._create(id, Info); return this; } ;(function(Applet, proto) { Applet._get = function(id, Info, checkOnly) { checkOnly || (checkOnly = false); Info || (Info = {}); var DefaultInfo = { code: "swingjs.test.TanSugd3S", uncompressed: true, color: "#FFFFFF", // applet object background color width: 300, height: 300, serverURL: "http://your.server.here/jsmol.php", console: null, // div for where the JavaScript console will be. readyFunction: null, use: "HTML5",//other options include JAVA jarPath: "java", jarFile: "[code].jar", j2sPath: "j2s", disableJ2SLoadMonitor: false, disableInitialConsole: false, debug: false }; // Jmol here Jmol._addDefaultInfo(Info, DefaultInfo); Info.jarFile && Info.code && Info.jarFile.replace(/\[code\]/,Info.code); Jmol._debugAlert = Info.debug; Info.serverURL && (Jmol._serverUrl = Info.serverURL); var javaAllowed = false; var applet = null; var List = Info.use.toUpperCase().split("#")[0].split(" "); for (var i = 0; i < List.length; i++) { switch (List[i]) { case "JAVA": javaAllowed = true; if (Jmol.featureDetection.supportsJava()) applet = new Applet(id, Info, checkOnly); break; case "HTML5": if (Jmol.featureDetection.allowHTML5){ applet = Applet._getCanvas(id, Info, checkOnly); } else { List.push("JAVA"); } break; } if (applet != null) break; } if (applet == null) { if (checkOnly || !javaAllowed) applet = {_appletType : "none" }; else if (javaAllowed) applet = new Applet(id, Info); } // keyed to both its string id and itself return (checkOnly ? applet : Jmol._registerApplet(id, applet)); } Applet._getCanvas = function(id, Info, checkOnly) { Info._isLayered = true; Info._isSwing = true; Info._platform = ""; Jmol._Canvas2D.prototype = Jmol._jsSetPrototype(new Applet(id, Info, true)); return new Jmol._Canvas2D(id, Info, Info.code, checkOnly); }; /* AngelH, mar2007: By (re)setting these variables in the webpage before calling Jmol.getApplet(), a custom message can be provided (e.g. localized for user's language) when no Java is installed. */ Applet._noJavaMsg = "Either you do not have Java applets enabled in your webbrowser or your browser is blocking this applet.\ Check the warning message from your browser and/or enable Java applets in\ your web browser preferences, or install the Java Runtime Environment from www.java.com"; Applet._setCommonMethods = function(p) { p._showInfo = proto._showInfo; /// p._search = proto._search; p._getName = proto._getName; p._readyCallback = proto._readyCallback; } Applet._createApplet = function(applet, Info, params) { applet._initialize(Info.jarPath, Info.jarFile); var jarFile = applet._jarFile; var jnlp = "" if (Jmol._isFile) { // local installations need jnlp here and should reference JmolApplet(Signed).jar, not JmolApplet(Signed)0.jar jarFile = jarFile.replace(/0\.jar/,".jar"); //jnlp = " jnlp_href=\"" + jarFile.replace(/\.jar/,".jnlp") + "\""; } // size is set to 100% of containers' size, but only if resizable. // Note that resizability in MSIE requires: // var w = (applet._containerWidth.indexOf("px") >= 0 ? applet._containerWidth : "100%"); var h = (applet._containerHeight.indexOf("px") >= 0 ? applet._containerHeight : "100%"); var widthAndHeight = " style=\"width:" + w + ";height:" + h + "\" "; var attributes = "name='" + applet._id + "_object' id='" + applet._id + "_object' " + "\n" + widthAndHeight + jnlp + "\n" params.codebase = applet._jarPath; params.codePath = params.codebase + "/"; if (params.codePath.indexOf("://") < 0) { var base = document.location.href.split("#")[0].split("?")[0].split("/"); base[base.length - 1] = params.codePath; params.codePath = base.join("/"); } params.archive = jarFile; params.mayscript = 'true'; params.java_arguments = "-Xmx" + Math.round(Info.memoryLimit || applet._memoryLimit) + "m"; params.permissions = (applet._isSigned ? "all-permissions" : "sandbox"); params.documentLocation = document.location.href; params.documentBase = document.location.href.split("#")[0].split("?")[0]; params.jarPath = Info.jarPath; Jmol._syncedApplets.length && (params.synccallback = "Jmol._mySyncCallback"); applet._startupScript && (params.script = applet._startupScript); var t = "\n"; for (var i in params) if(params[i]) t += " \n"; if (Jmol.featureDetection.useIEObject || Jmol.featureDetection.useHtml4Object) { t = "" : " type='application/x-java-applet'>") + t + "\n" + Applet._noJavaMsg + "\n"; } else { // use applet tag t = "\n" + t + "\n" + Applet._noJavaMsg + "\n"; } if (applet._deferApplet) applet._javaCode = t, t=""; t = Jmol._getWrapper(applet, true) + t + Jmol._getWrapper(applet, false) + (Info.addSelectionOptions ? Jmol._getGrabberOptions(applet) : ""); if (Jmol._debugAlert) alert (t); applet._code = Jmol._documentWrite(t); } proto._newApplet = function(viewerOptions) { this._viewerOptions = viewerOptions; // for now assigning this._applet here instead of in readyCallback this._appletPanel = new swingjs.JSAppletPanel(viewerOptions); this._appletPanel.start(); } proto._addCoreFiles = function() { Jmol._addCoreFile("swingjs", this._j2sPath, this.__Info.preloadCore); if (Jmol._debugCode) { // no min package for that Jmol._addExec([this, null, "swingjs.JSAppletPanel", "load " + this.__Info.code]); } } proto._create = function(id, Info){ Jmol._setObject(this, id, Info); var params = { syncId: Jmol._syncId, progressbar: "true", progresscolor: "blue", boxbgcolor: this._color || "black", boxfgcolor: "white", boxmessage: "Downloading Applet ...", //script: (this._color ? "background \"" + this._color +"\"": ""), code: Info.appletClass + ".class" }; Jmol._setAppletParams(this._availableParams, params, Info); function sterilizeInline(model) { model = model.replace(/\r|\n|\r\n/g, (model.indexOf("|") >= 0 ? "\\/n" : "|")).replace(/'/g, "'"); if(Jmol._debugAlert) alert ("inline model:\n" + model); return model; } params.loadInline = (Info.inlineModel ? sterilizeInline(Info.inlineModel) : ""); params.appletReadyCallback = "Jmol._readyCallback"; if (Jmol._syncedApplets.length) params.synccallback = "Jmol._mySyncCallback"; params.java_arguments = "-Xmx" + Math.round(Info.memoryLimit || this._memoryLimit) + "m"; this._initialize(Info.jarPath, Info.jarFile); Applet._createApplet(this, Info, params); } proto._restoreState = function(clazzName, state) { // applet-dependent } proto._readyCallback = function(id, fullid, isReady) { if (!isReady) return; // ignore -- page is closing Jmol._setDestroy(this); this._ready = true; var script = this._readyScript; if (this._defaultModel) Jmol._search(this, this._defaultModel, (script ? ";" + script : "")); else if (script) this._script(script); else if (this._src) this._script('load "' + this._src + '"'); this._showInfo(true); this._showInfo(false); Jmol.Cache.setDragDrop(this); this._readyFunction && this._readyFunction(this); Jmol._setReady(this); var app = this._2dapplet; if (app && app._isEmbedded && app._ready && app.__Info.visible) this._show2d(true); } proto._showInfo = function(tf) { if(tf && this._2dapplet) this._2dapplet._show(false); Jmol.$html(Jmol.$(this, "infoheaderspan"), this._infoHeader); if (this._info) Jmol.$html(Jmol.$(this, "infodiv"), this._info); if ((!this._isInfoVisible) == (!tf)) return; this._isInfoVisible = tf; // 1px does not work for MSIE if (this._isJava) { var x = (tf ? 2 : "100%"); Jmol.$setSize(Jmol.$(this, "appletdiv"), x, x); } Jmol.$setVisible(Jmol.$(this, "infotablediv"), tf); Jmol.$setVisible(Jmol.$(this, "infoheaderdiv"), tf); this._show(!tf); } proto._show = function(tf) { var x = (!tf ? 2 : "100%"); Jmol.$setSize(Jmol.$(this, "object"), x, x); if (!this._isJava) Jmol.$setVisible(Jmol.$(this, "appletdiv"), tf); } proto._clearConsole = function () { if (this._console == this._id + "_infodiv") this.info = ""; if (!self.Clazz)return; Jmol._setConsoleDiv(this._console); Clazz.Console.clear(); } proto._resizeApplet = function(size) { // See _jmolGetAppletSize() for the formats accepted as size [same used by jmolApplet()] // Special case: an empty value for width or height is accepted, meaning no change in that dimension. /* * private functions */ function _getAppletSize(size, units) { /* Accepts single number, 2-value array, or object with width and height as mroperties, each one can be one of: percent (text string ending %), decimal 0 to 1 (percent/100), number, or text string (interpreted as nr.) [width, height] array of strings is returned, with units added if specified. Percent is relative to container div or element (which should have explicitly set size). */ var width, height; if(( typeof size) == "object" && size != null) { width = size[0]||size.width; height = size[1]||size.height; } else { width = height = size; } return [_fixDim(width, units), _fixDim(height, units)]; } function _fixDim(x, units) { var sx = "" + x; return (sx.length == 0 ? (units ? "" : Jmol._allowedJmolSize[2]) : sx.indexOf("%") == sx.length - 1 ? sx : (x = parseFloat(x)) <= 1 && x > 0 ? x * 100 + "%" : (isNaN(x = Math.floor(x)) ? Jmol._allowedJmolSize[2] : x < Jmol._allowedJmolSize[0] ? Jmol._allowedJmolSize[0] : x > Jmol._allowedJmolSize[1] ? Jmol._allowedJmolSize[1] : x) + (units ? units : "") ); } var sz = _getAppletSize(size, "px"); var d = Jmol._getElement(this, "appletinfotablediv"); d.style.width = sz[0]; d.style.height = sz[1]; this._containerWidth = sz[0]; this._containerHeight = sz[1]; if (this._is2D) Jmol._repaint(this, true); } proto._cover = function (doCover) { // from using getAppletHtml() this._newCanvas(false); this._showInfo(false); this._init(); }; })(SwingJS._Applet, SwingJS._Applet.prototype); })(SwingJS, jQuery); } // SwingJS undefined
\n" + Applet._noJavaMsg + "