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