]> git.evergreen-ils.org Git - working/Evergreen.git/blob - Evergreen/staff_client/chrome/content/evergreen/main/app_shell.js
tweaking for speed test
[working/Evergreen.git] / Evergreen / staff_client / chrome / content / evergreen / main / app_shell.js
1 sdump('D_TRACE','Loading app_shell.js\n');
2
3 function app_shell_init(p) {
4         sdump('D_TAB',"TESTING: app_shell.js: " + mw.G['main_test_variable'] + '\n');
5
6         p.w.close_tab = function (t1,t2) { return close_tab(p.w.document,t1,t2); };
7         p.w.find_free_tab = function (tabs) { return find_free_tab(tabs); };
8         p.w.new_tab = function () { return new_tab(p.w.document,p.tabbox); };
9         p.w.replace_tab = function (label,chrome,params) { return replace_tab(p.w.document,p.tabbox,label,chrome,params); };
10         p.w.get_frame_in_tab = function (idx, all_or_vis) { return get_frame_in_tab( p.w.document, p.tabbox, idx, all_or_vis ); }; 
11         
12         p.w.replace_tab('Tab','chrome://evergreen/content/main/about.xul');
13         /*
14         setTimeout( 
15                 function () { 
16                         spawn_javascript_console(p.w.document,'replace_tab','main_tabbox',{}); 
17                         setTimeout(
18                                 function () {
19                                         spawn_javascript_shell(p.w.document,'new_tab','main_tabbox',{});
20                                 }, 2
21                         );
22                 }, 2
23         );
24         */
25 }
26
27 function close_tab( d, t1, t2 ) {
28         // t1 = tabbox or tab, if t1 = tabbox, t2 = tab index, otherwise close current tab
29         sdump('D_TAB',arg_dump(arguments,{1:true,2:true}));
30         if (typeof(t1)!='object')
31                 t1 = d.getElementById(t1);
32         if (typeof(t1)!='object')
33                 throw('Could not find tab or tabbox. d = ' + d + ' tabbox = ' + t1 + '\n');
34         try {
35                 var tabbox;
36
37                 if (t1.tagName == 'tabbox')
38                         tabbox = t1;
39                 else
40                         tabbox = t1.parentNode.parentNode;
41
42                 var idx = tabbox.selectedIndex;
43                 if (t2)
44                         idx = t2;
45
46                 sdump('D_TAB','tabbox.selectedIndex = ' + tabbox.selectedIndex + '\n');
47                 var tabs = tabbox.firstChild; 
48                 var panels = tabbox.lastChild;
49
50                 if (idx == 0) {
51                         try {
52                                 tabs.advanceSelectedTab(+1);
53                         } catch(E) {
54                                 sdump('D_TAB','failed tabs.advanceSelectedTab(+1):'+js2JSON(E) + '\n');
55                                 try {
56                                         tabs.advanceSelectedTab(-1);
57                                 } catch(E) {
58                                         sdump('D_TAB','failed again tabs.advanceSelectedTab(-1):'+js2JSON(E) + '\n');
59                                 }
60                         }
61                 } else {
62                         try {
63                                 tabs.advanceSelectedTab(-1);
64                         } catch(E) {
65                                 sdump('D_TAB','failed tabs.advanceSelectedTab(-1):'+js2JSON(E) + '\n');
66                                 try {
67                                         tabs.advanceSelectedTab(+1);
68                                 } catch(E) {
69                                         sdump('D_TAB','failed again tabs.advanceSelectedTab(+1):'+js2JSON(E) + '\n');
70                                 }
71                         }
72
73                 }
74                 
75                 sdump('D_TAB','\tnew tabbox.selectedIndex = ' + tabbox.selectedIndex + '\n');
76
77                 tabs.childNodes[ idx ].hidden = true;
78                 sdump('D_TAB','tabs.childNodes[ ' + idx + ' ].hidden = true;\n');
79
80                 // Make sure we keep at least one tab open.
81                 var tab_flag = true;
82                 for (var i = 0; i < tabs.childNodes.length; i++) {
83                         var tab = tabs.childNodes[i];
84                         if (!tab.hidden)
85                                 tab_flag = false;
86                 }
87                 if (tab_flag)
88                         new_tab(d,tabbox);
89
90         } catch(E) {
91                 sdump('D_ERROR',E+'\n');
92                 throw(E);
93         }
94 }
95
96 function find_free_tab(tabs) {
97         var last_not_hidden = -1;
98         for (var i = 0; i<tabs.childNodes.length; i++) {
99                 var tab = tabs.childNodes[i];
100                 if (!tab.hidden)
101                         last_not_hidden = i;
102         }
103         if (last_not_hidden == tabs.childNodes.length - 1)
104                 last_not_hidden = -1;
105         // If the one next to last_not_hidden is hidden, we want it.
106         // Basically, we fill in tabs after existing tabs for as 
107         // long as possible.
108         var idx = last_not_hidden + 1;
109         var candidate = tabs.childNodes[ idx ];
110         if (candidate.hidden)
111                 return idx;
112         // Alright, find the first hidden then
113         for (var i = 0; i<tabs.childNodes.length; i++) {
114                 var tab = tabs.childNodes[i];
115                 if (tab.hidden)
116                         return i;
117         }
118         return -1;
119 }
120
121 function get_frame_in_tab( d, tabbox, idx, all_or_visible ) {
122         sdump('D_TAB',arg_dump(arguments));
123         if (typeof(tabbox)!='object')
124                 tabbox = d.getElementById(tabbox);
125         if (typeof(tabbox)!='object')
126                 throw('Could not find tabbox. d = ' + d + ' tabbox = ' + tabbox + '\n');
127         var tabs = tabbox.firstChild;
128         var panels = tabbox.lastChild;
129         try {
130                 if (all_or_visible == 'visible') {
131                         var count = 0;
132                         for (var i = 0; i < tabs.childNodes.length; i++) {
133                                 if (!tabs.childNodes[i].hidden) count++;
134                                 if (count==idx) return panels.childNodes[i].getElementsByTagName('iframe')[0];
135                         }
136                 } else {
137                         return panels.childNodes[ idx ].getElementsByTagName('iframe')[0];
138                 }
139         } catch(E) {
140                 sdump('D_ERROR',js2JSON(E) + '\n');
141         }
142         return null;
143 }
144
145 function new_tab( d, tabbox ) {
146         sdump('D_TAB',arg_dump(arguments));
147         if (typeof(tabbox)!='object')
148                 tabbox = d.getElementById(tabbox);
149         if (typeof(tabbox)!='object')
150                 throw('Could not find tabbox. d = ' + d + ' tabbox = ' + tabbox + '\n');
151         var tabs = tabbox.firstChild;
152         var panels = tabbox.lastChild;
153         var tc = find_free_tab(tabs);
154         sdump('D_TAB','find_free_tab returned ' + tc + '\n');
155         if (tc == -1) { return; } // let's only have up to 10 tabs
156         var tab = tabs.childNodes[ tc ];
157                 tab.setAttribute('label','Tab ' + (tc + 1) );
158                 tab.hidden = false;
159         try {
160                 tabs.selectedIndex = tc;
161                 replace_tab(d,tabbox,'Tab','chrome://evergreen/content/main/about.xul');
162         } catch(E) {
163                 sdump('D_ERROR','+++++++++++++++++++++++++++++' + E + ' : ' + js2JSON(E)+'\n');
164         }
165 }
166
167 function replace_tab( d, tabbox, label, chrome, params ) {
168         sdump('D_TAB',arg_dump(arguments,{2:true,3:true,4:true}));
169         if (typeof(tabbox)!='object')
170                 tabbox = d.getElementById(tabbox);
171         if (typeof(tabbox)!='object')
172                 throw('Could not find tabbox. d = ' + d + ' tabbox = ' + tabbox + '\n');
173         var tabs = tabbox.firstChild;
174         var panels = tabbox.lastChild;
175         try {
176                 var idx = tabs.selectedIndex;
177                 var tab = tabs.childNodes[ idx ];
178                 var panel = panels.childNodes[ idx ];
179
180                 tab.hidden = false;
181                 tab.setAttribute('label',label + ' ' + (idx+1));
182
183                 var frame = d.createElement('iframe');
184                 frame.setAttribute('flex','1');
185                 frame.setAttribute('src',chrome);
186                 panel.appendChild(frame);
187                 panel.replaceChild(panel.lastChild,panel.firstChild);
188                 frame.setAttribute('id','frame_'+idx);
189                 
190                 sdump('D_TAB','Created frame : ' + frame.id + ' for index : ' + idx + ' with src=' + frame.getAttribute('src') + '\n');
191                 //frame.contentWindow.parentWindow = parentWindow;
192                 //frame.contentWindow.tabWindow = this;
193                 //dump('replace_tab.tabWindow = ' + this + '\n');
194                 frame.contentWindow.mw = mw;
195                 //frame.contentWindow.am_i_a_top_level_tab = true;
196                 if (params) {
197                         frame.contentWindow.params = params;
198                 }
199                 return frame.contentWindow;
200         } catch(E) {
201                 sdump('D_ERROR',js2JSON(E)+'\n');
202         }
203         //debug_tabs(d,tabbox);
204 }