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');
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');
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');
53 var idx = tabbox.selectedIndex;
54 var tabs = tabbox.firstChild;
55 var panels = tabbox.lastChild;
58 tabs.advanceSelectedTab(+1);
60 tabs.advanceSelectedTab(-1);
62 if (tabs.childNodes.length > 1 ) {
63 tabs.removeItemAt( idx );
64 panels.removeChild( panels.childNodes[ idx ] );
66 replace_tab(d,tabbox,'Tab','chrome://evergreen/content/main/about.xul');
76 function delete_tab_contents( tab, panel ) {
77 sdump('D_TAB','calling delete_tab_contents( ' + tab.id + ',' + panel.id + ');\n');
80 sdump('D_TAB','before: tab.childNodes.length = ' + tab.childNodes.length + '\n');
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); }
86 sdump('D_TAB','after: tab.childNodes.length = ' + tab.childNodes.length + '\n');
88 sdump('D_TAB','after: panel.childNodes.length = ' + panel.childNodes.length + '\n');
90 dump(js2JSON(E)+'\n');
94 function first_free_tab_count() {
95 for (var i = 0; i<10; i++) {
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');
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');
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');
141 tabbox.selectedIndex = tc;
142 tabs.selectedIndex = tc;
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');
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');
159 dump(js2JSON(E)+'\n');
161 debug_tabs(d,tabbox);
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); }
174 var tab = tabs.selectedItem;
175 var panel = tabbox.selectedPanel;
176 delete_tab_contents(tab,panel);
178 tab.setAttribute('label',label + ' ' + tab.getAttribute('count') );
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;
193 frame.contentWindow.params = params;
195 return frame.contentWindow;
197 dump(js2JSON(E)+'\n');
199 debug_tabs(d,tabbox);