1 sdump('D_TRACE','Loading app_shell.js\n');
3 var tab_count = [ false, false, false, false, false, false, false, false, false, false ];
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' );
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');
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');
39 'tabbox.selectedIndex = ' + tabbox.selectedIndex +
40 ' .selectedTab = ' + tabbox.selectedTab.id +
41 ' .selectedPanel = ' + tabbox.selectedPanel.id + '\n');
43 'tabs.selectedIndex = ' + tabs.selectedIndex +
44 ' .selectedItem = ' + tabs.selectedItem.id + '\n');
46 'panels.selectedIndex = ' + panels.selectedIndex +
47 ' .selectedPanel.id = ' + panels.selectedPanel.id + '\n');
51 function app_shell_init(params) {
52 dump("TESTING: app_shell.js: " + mw.G['main_test_variable'] + '\n');
53 replace_tab(params.d,'main_tabbox','Tab','chrome://evergreen/content/main/about.xul');
57 function close_tab( d, tabbox ) {
58 sdump('D_TAB','calling close_tab( ' + d.id + ',' + tabbox + ');\n');
59 if (typeof(tabbox)!='object')
60 tabbox = d.getElementById(tabbox);
61 if (typeof(tabbox)!='object')
62 throw('Could not find tabbox. d = ' + d + ' tabbox = ' + tabbox + '\n');
64 var idx = tabbox.selectedIndex;
65 var tabs = tabbox.firstChild;
66 var panels = tabbox.lastChild;
69 tabs.advanceSelectedTab(+1);
71 tabs.advanceSelectedTab(-1);
73 if (tabs.childNodes.length > 1 ) {
74 tabs.removeItemAt( idx );
75 panels.removeChild( panels.childNodes[ idx ] );
77 replace_tab(d,tabbox,'Tab','chrome://evergreen/content/main/about.xul');
87 function delete_tab_contents( tab, panel ) {
88 sdump('D_TAB','calling delete_tab_contents( ' + tab.id + ',' + panel.id + ');\n');
91 sdump('D_TAB','before: tab.childNodes.length = ' + tab.childNodes.length + '\n');
93 sdump('D_TAB','before: panel.childNodes.length = ' + panel.childNodes.length + '\n');
94 while (tab.lastChild) { tab.removeChild(tab.lastChild); }
95 while (panel.lastChild) { panel.removeChild(panel.lastChild); }
97 sdump('D_TAB','after: tab.childNodes.length = ' + tab.childNodes.length + '\n');
99 sdump('D_TAB','after: panel.childNodes.length = ' + panel.childNodes.length + '\n');
101 dump(js2JSON(E)+'\n');
105 function first_free_tab_count() {
106 for (var i = 0; i<10; i++) {
107 if (! tab_count[i]) {
115 function new_tab( d, tabbox ) {
116 sdump('D_TAB','calling new_tab( ' + d.id + ',' + tabbox + ');\n');
117 if (typeof(tabbox)!='object')
118 tabbox = d.getElementById(tabbox);
119 if (typeof(tabbox)!='object')
120 throw('Could not find tabbox. d = ' + d + ' tabbox = ' + tabbox + '\n');
121 var tabs = tabbox.firstChild;
122 var panels = tabbox.lastChild;
123 var tc = first_free_tab_count();
124 if (tc == -1) { return; } // let's only have up to 10 tabs
125 var panel = d.createElement('tabpanel');
126 panel.setAttribute('flex','1');
127 panel.setAttribute('id','panel'+tc);
128 panels.appendChild(panel);
129 sdump('D_TAB','Created a tabpanel: ' + panel.id + '\n');
131 var tab = d.createElement('tab');
132 tab.setAttribute('id','tab' + tc );
133 tab.setAttribute('label','Tab ' + tc );
134 tab.setAttribute('count',tc);
135 tab.setAttribute('accesskey',tc);
136 tab.setAttribute('linkedpanel','panel'+tc);
137 tabs.appendChild(tab);
138 sdump('D_TAB','Created a tab: ' + tab.id + '\n');
141 tabbox.selectedIndex = tc;
142 tabs.selectedIndex = tc;
144 tabs.selectedTab = tab;
145 //tabbox.selectedIndex = tabs.childNodes.length - 1;
146 //tabs.selectedIndex = tabs.childNodes.length - 1;
147 replace_tab(d,tabbox,'Tab','chrome://evergreen/content/main/about.xul');
149 dump('+++++++++++++++++++++++++++++' + E + ' : ' + js2JSON(E)+'\n');
151 debug_tabs(d,tabbox);
154 function replace_tab( d, tabbox, label, chrome, params ) {
155 sdump('D_TAB','calling replace_tab( ' + d.id + ',' + tabbox + ');\n');
156 if (typeof(tabbox)!='object')
157 tabbox = d.getElementById(tabbox);
158 if (typeof(tabbox)!='object')
159 throw('Could not find tabbox. d = ' + d + ' tabbox = ' + tabbox + '\n');
160 var tabs = tabbox.firstChild;
161 var panels = tabbox.lastChild;
162 if (tabs.childNodes.length == 0) { new_tab(d,tabbox); }
164 var tab = tabs.selectedItem;
165 var panel = tabbox.selectedPanel;
166 delete_tab_contents(tab,panel);
168 tab.setAttribute('label',label + ' ' + tab.getAttribute('count') );
170 var frame = d.createElement('iframe');
171 frame.setAttribute('id','frame'+tab.getAttribute('count'));
172 frame.setAttribute('flex','1');
173 //frame.setAttribute('style','overflow: scroll; min-height: 500px; min-width: 500px;');
174 frame.setAttribute('src',chrome);
175 panel.appendChild(frame);
176 sdump('D_TAB','Created frame : ' + frame.id + ' for tab : ' + tab.id + ' and panel : ' + panel.id + '\n');
177 //frame.contentWindow.parentWindow = parentWindow;
178 //frame.contentWindow.tabWindow = this;
179 //dump('replace_tab.tabWindow = ' + this + '\n');
180 frame.contentWindow.mw = mw;
181 //frame.contentWindow.am_i_a_top_level_tab = true;
183 frame.contentWindow.params = params;
185 return frame.contentWindow;
187 dump(js2JSON(E)+'\n');
189 debug_tabs(d,tabbox);