]> git.evergreen-ils.org Git - working/Evergreen.git/blob - Evergreen/staff_client/chrome/content/evergreen/main/app_shell.js
somehow these either die or have side effects
[working/Evergreen.git] / Evergreen / staff_client / chrome / content / evergreen / main / app_shell.js
1 sdump('D_TRACE','Loading app_shell.js\n');
2
3 var tab_count = [ false, false, false, false, false, false, false, false, false, false ];
4
5 function debug_tabs( d, tabbox ) {
6         if (typeof(tabbox)!='object')
7                 tabbox = d.getElementById(tabbox);
8         if (typeof(tabbox)!='object')
9                 throw('Could not find tabbox. d = ' + d + ' tabbox = ' + tabbox + '\n');
10         var tabs = tabbox.firstChild; 
11         var panels = tabbox.lastChild;
12         sdump('D_TAB', d.id + '\t' + tabbox.id + '\n');
13         sdump('D_TAB','\ttabs.childNodes.length = ' + tabs.childNodes.length + '\n');
14         for (var i = 0; i < tabs.childNodes.length; i++) {
15                 var tab = tabs.childNodes[i];
16                 sdump('D_TAB','\t\t#' + i + '  tab = ' + tab.tagName + ' : ' + tab.id + '\n' );
17                 if (tab.childNodes) {
18                         sdump('D_TAB','\t\t\ttab.childNodes.length = ' + tab.childNodes.length + '\n');
19                         for (var j = 0; j < tab.childNodes.length; j++) {
20                                 var child = tab.childNodes[j];
21                                 sdump('D_TAB','\t\t\t#' + j + ' ' + child.tagName + ' : ' + child.id + '\n');
22                         }
23                 }
24         }
25
26         sdump('D_TAB','\tpanels.childNodes.length = ' + panels.childNodes.length + '\n');
27         for (var i = 0; i < panels.childNodes.length; i++) {
28                 var panel = panels.childNodes[i];
29                 sdump('D_TAB','\t\t#' + i + '  panel = ' + panel.tagName + ' : ' + panel.id + '\n' );
30                 if (panel.childNodes) {
31                         sdump('D_TAB','\t\t\tpanel.childNodes.length = ' + panel.childNodes.length + '\n');
32                         for (var j = 0; j < panel.childNodes.length; j++) {
33                                 var child = panel.childNodes[j];
34                                 sdump('D_TAB','\t\t\t#' + j + ' ' + child.tagName + ' : ' + child.id + '\n');
35                         }
36                 }
37         }
38 }
39
40 function app_shell_init(params) {
41         dump("TESTING: app_shell.js: " + mw.G['main_test_variable'] + '\n');
42         replace_tab(params.d,'main_tabbox','Tab','chrome://evergreen/content/main/about.xul');
43         mw.G.sound.beep();
44 }
45
46 function close_tab( d, tabbox ) {
47         sdump('D_TAB','calling close_tab( ' + d.id + ',' + tabbox + ');\n');
48         if (typeof(tabbox)!='object')
49                 tabbox = d.getElementById(tabbox);
50         if (typeof(tabbox)!='object')
51                 throw('Could not find tabbox. d = ' + d + ' tabbox = ' + tabbox + '\n');
52         try {
53                 var idx = tabbox.selectedIndex;
54                 var tabs = tabbox.firstChild; 
55                 var panels = tabbox.lastChild;
56
57                 if (idx == 0)
58                         tabs.advanceSelectedTab(+1);
59                 else
60                         tabs.advanceSelectedTab(-1);
61
62                 if (tabs.childNodes.length > 1 ) {
63                         tabs.removeItemAt( idx );
64                         panels.removeChild( panels.childNodes[ idx ] );
65                 } else {
66                         replace_tab(d,tabbox,'Tab','chrome://evergreen/content/main/about.xul');
67                 }
68
69         } catch(E) {
70                 dump(E+'\n');
71                 throw(E);
72         }
73         debug_tabs(d,tabbox);
74 }
75
76 function delete_tab_contents( tab, panel ) {
77         sdump('D_TAB','calling delete_tab_contents( ' + tab.id + ',' + panel.id + ');\n');
78         try {
79                 if (tab.childNodes)
80                         sdump('D_TAB','before: tab.childNodes.length = ' + tab.childNodes.length + '\n');
81                 if (panel.childNodes)
82                         sdump('D_TAB','before: panel.childNodes.length = ' + panel.childNodes.length + '\n');
83                 while (tab.lastChild) { tab.removeChild(tab.lastChild); }
84                 while (panel.lastChild) { panel.removeChild(panel.lastChild); }
85                 if (tab.childNodes)
86                         sdump('D_TAB','after: tab.childNodes.length = ' + tab.childNodes.length + '\n');
87                 if (panel.childNodes)
88                         sdump('D_TAB','after: panel.childNodes.length = ' + panel.childNodes.length + '\n');
89         } catch(E) {
90                 dump(js2JSON(E)+'\n');
91         }
92 }
93
94 function first_free_tab_count() {
95         for (var i = 0; i<10; i++) {
96                 if (! tab_count[i]) {
97                         tab_count[i] = true;
98                         return i;
99                 }
100         }
101         return -1;
102 }
103
104 function new_tab( d, tabbox ) {
105         sdump('D_TAB','calling new_tab( ' + d.id + ',' + tabbox + ');\n');
106         if (typeof(tabbox)!='object')
107                 tabbox = d.getElementById(tabbox);
108         if (typeof(tabbox)!='object')
109                 throw('Could not find tabbox. d = ' + d + ' tabbox = ' + tabbox + '\n');
110         var tabs = tabbox.firstChild;
111         var panels = tabbox.lastChild;
112         var tc = first_free_tab_count();
113         if (tc == -1) { return; } // let's only have up to 10 tabs
114         var panel = d.createElement('tabpanel');
115                 panel.setAttribute('flex','1');
116                 panel.setAttribute('id','panel'+tc);
117         panels.appendChild(panel);
118         sdump('D_TAB','Created a tabpanel: ' + panel.id + '\n');
119
120         var tab = d.createElement('tab');
121                 tab.setAttribute('id','tab' + tc );
122                 tab.setAttribute('label','Tab ' + tc );
123                 tab.setAttribute('count',tc);
124                 tab.setAttribute('accesskey',tc);
125                 tab.setAttribute('linkedpanel','panel'+tc);
126         tabs.appendChild(tab);
127         sdump('D_TAB','Created a tab: ' + tab.id + '\n');
128         try {
129         /*
130                 sdump('D_TAB','before: tabbox.selectedIndex = ' +
131                         tabbox.selectedIndex +
132                         ' .selectedTab = ' + tabbox.selectedTab.id +
133                         ' .selectedPanel = ' + tabbox.selectedPanel.id + '\n');
134                 sdump('D_TAB','before: tabs.selectedIndex = ' +
135                         tabs.selectedIndex + ' .selectedItem = ' +
136                         tabs.selectedItem.id + '\n');
137                 sdump('D_TAB','before: panels.selectedIndex = ' +
138                         panels.selectedIndex + ' .selectedPanel = ' +
139                         panels.selectedPanel.id + '\n');
140         */
141                 tabbox.selectedIndex = tc;
142                 tabs.selectedIndex = tc;
143         /*
144                 sdump('D_TAB','after: tabbox.selectedIndex = ' +
145                         tabbox.selectedIndex +
146                         ' .selectedTab = ' + tabbox.selectedTab.id +
147                         ' .selectedPanel = ' + tabbox.selectedPanel.id + '\n');
148                 sdump('D_TAB','after: tabs.selectedIndex = ' +
149                         tabs.selectedIndex + ' .selectedItem = ' +
150                         tabs.selectedItem.id + '\n');
151                 sdump('D_TAB','after: panels.selectedIndex = ' +
152                         panels.selectedIndex + ' .selectedPanel = ' +
153                         panels.selectedPanel.id + '\n');
154         */
155                 //tabbox.selectedIndex = tabs.childNodes.length - 1;
156                 //tabs.selectedIndex = tabs.childNodes.length - 1;
157                 replace_tab(d,tabbox,'Tab','chrome://evergreen/content/main/about.xul');
158         } catch(E) {
159                 dump(js2JSON(E)+'\n');
160         }
161         debug_tabs(d,tabbox);
162 }
163
164 function replace_tab( d, tabbox, label, chrome, params ) {
165         sdump('D_TAB','calling replace_tab( ' + d.id + ',' + tabbox + ');\n');
166         if (typeof(tabbox)!='object')
167                 tabbox = d.getElementById(tabbox);
168         if (typeof(tabbox)!='object')
169                 throw('Could not find tabbox. d = ' + d + ' tabbox = ' + tabbox + '\n');
170         var tabs = tabbox.firstChild;
171         var panels = tabbox.lastChild;
172         if (tabs.childNodes.length == 0) { new_tab(d,tabbox); }
173         try {
174                 var tab = tabs.selectedItem;
175                 var panel = tabbox.selectedPanel;
176                 delete_tab_contents(tab,panel);
177
178                 tab.setAttribute('label',label + ' ' + tab.getAttribute('count') );
179
180                 var frame = d.createElement('iframe');
181                 frame.setAttribute('id','frame'+tab.getAttribute('count'));
182                 frame.setAttribute('flex','1');
183                 //frame.setAttribute('style','overflow: scroll; min-height: 500px; min-width: 500px;');
184                 frame.setAttribute('src',chrome);
185                 panel.appendChild(frame);
186                 sdump('D_TAB','Created frame : ' + frame.id + ' for tab : ' + tab.id + ' and panel : ' + panel.id + '\n');
187                 //frame.contentWindow.parentWindow = parentWindow;
188                 //frame.contentWindow.tabWindow = this;
189                 //dump('replace_tab.tabWindow = ' + this + '\n');
190                 frame.contentWindow.mw = mw;
191                 //frame.contentWindow.am_i_a_top_level_tab = true;
192                 if (params) {
193                         frame.contentWindow.params = params;
194                 }
195                 return frame.contentWindow;
196         } catch(E) {
197                 dump(js2JSON(E)+'\n');
198         }
199         debug_tabs(d,tabbox);
200 }