872f8a059d5a505abc3a8801ab8d7066af00ff6b
[jalview.git] / site-resources / swingjs / JalviewApplet.js
1 // Jalview Priliminary applet-generation code.
2 // author: Bob Hanson hansonr@stolaf.edu
3
4 Jalview = { 
5         jvid : 0 
6 }
7
8 $(document).ready(function() {
9         if (document.location.href.toLowerCase().indexOf("_use=java") < 0)
10                 Jalview.processAllAppletElements(self.JalviewInfo);
11 });
12
13  
14 Jalview.processAllAppletElements = function(PageInfo) {
15         var applets = document.getElementsByTagName("applet") || document.getElementsByTagName("jvapplet");
16         var apps=[];
17         for (var i = 0; i < applets.length; i++)
18                 apps[i] = applets[i];
19         for (var i = 0; i < apps.length; i++) {
20                 Jalview.processAppletElement(apps[i], PageInfo);
21         }
22 }
23  
24 Jalview.processAppletElement = function(element, UserInfo) {
25         
26         // This code is specifically for processing the <applet> or <jvapplet> tag.
27         
28         // To set Jalview application tags, use Info.args="......."
29
30         // To set preferences, use "jalview_" prefix with all-upper-case names:
31
32         //Info.jalview_SCREEN_X= 10,Info.jalview_SCREEN_Y= 10;
33         //Info.jalview_EMBEDDED= true;
34         //Info.jalview_SCREEN_WIDTH = 400;
35         //Info.jalview_SCREEN_HEIGHT = 100;
36         
37 var text = element.outerHTML;
38 var code = element.getAttribute("code");
39 var parent = element.parentElement;
40 if (code != "jalview.bin.JalviewLite" && text.indexOf("<applet") == 0) {
41         return;
42 }
43
44         var Info = {
45         code: null,
46         main: "jalview.bin.Jalview",
47         core: "NONE",
48         resourcePath: "examples",
49         readyFunction: null,
50         serverURL: 'https://chemapps.stolaf.edu/jmol/jsmol/php/jsmol.php',
51         j2sPath: 'swingjs/j2s',
52         console:'sysout',
53         startButton:'Start Jalview',
54         hideDesktop:true,
55         embedInternalFrames:false,
56         idPrefix:'%ID%',
57         allowjavascript: true
58         }
59
60         var args = Info.args = text.replace(/[\n\t]/g, " ").replace("<jvapplet","<applet").split("<param ");
61
62         // overwrite default parameters with UserInfo (global JalviewInfo):
63  
64         if (UserInfo) {
65                 for (var i in UserInfo) {
66                         Info[i] = UserInfo[i];
67                 }
68         }
69
70         // generate name/value pairs for parameters in Applet tag
71
72         Info.j2sAppletID = Info.j2sAppletID 
73                 || element.getAttribute("name") 
74                 || element.getAttribute("id") 
75                 || Info.idPrefix.replace(/%ID%/g, "jalview" + ++Jalview.jvid);
76         
77         
78         var addParam = function(key,value) {
79                 args.push("name=\"" + key + "\" value=\"" + value + "\""); 
80         }
81         
82         
83         for (var i in Info) {
84                 var v = ("" + Info[i] || "null").replace(/\"/g,"'");
85                 addParam("Info." + i, v);
86         }
87                 
88                 
89         
90         element.JalviewInfo = Info;
91         var btn = document.createElement("button");
92         btn.appletElement = element;
93         var a = element.getAttribute("width");
94         btn.style.width = (a || 140) + "px";
95         a = element.getAttribute("height");
96         btn.style.height = (a || 25) + "px";
97         btn.jvparent = parent;
98         if (Info.startButton) {
99                 btn.innerHTML = Info.startButton;
100                 parent.replaceChild(btn, element); 
101                 $(btn).click(Jalview.doStartJalview);
102         } else {
103                 parent.removeElement(element);
104                 Jalview.doStartJalview({target:btn});
105         }
106 }
107  
108
109
110 Jalview.doStartJalview = function(e) {
111         var element = e.target.appletElement;
112 var parent = e.target.jvparent;
113         var Info = element.JalviewInfo;
114         var id = Info.j2sAppletID;
115         var d = document.createElement("div");
116         d.id = id + "-desktop-div";
117         if (Info.hideDesktop) {
118                 d.style.display = "none";
119                 d.style.width = d.style.height = "0px";
120         } else {
121                 d.style.width = "300px", d.style.height = "70px";
122         }
123         parent.appendChild(d);
124         d = document.createElement("div");
125         d.id = id + "-alignment-div";
126         if (Info.embedInternalFrames) {
127 // TODO
128         } else {
129                 d.style.display = "none";
130                 d.style.width = d.style.height = "0px";
131         }
132         SwingJS.getApplet(id, Info);
133         document.title = id;
134         e.target.style.visibility="hidden";
135 }
136