1 sdump('D_TRACE','Loading app_shell.js\n');
3 function app_shell_init(params) {
4 dump("TESTING: app_shell.js: " + mw.G['main_test_variable'] + '\n');
5 replace_tab(params.d,'main_tabbox','Tab','chrome://evergreen/content/main/about.xul');
9 function close_tab( d, t1, t2 ) {
10 // t1 = tabbox or tab, if t1 = tabbox, t2 = tab index, otherwise close current tab
11 sdump('D_TAB',arg_dump(arguments,{1:true,2:true}));
12 if (typeof(t1)!='object')
13 t1 = d.getElementById(t1);
14 if (typeof(t1)!='object')
15 throw('Could not find tab or tabbox. d = ' + d + ' tabbox = ' + t1 + '\n');
19 if (t1.tagName == 'tabbox')
22 tabbox = t1.parentNode.parentNode;
24 var idx = tabbox.selectedIndex;
28 sdump('D_TAB','tabbox.selectedIndex = ' + tabbox.selectedIndex + '\n');
29 var tabs = tabbox.firstChild;
30 var panels = tabbox.lastChild;
34 tabs.advanceSelectedTab(+1);
36 dump('failed tabs.advanceSelectedTab(+1):'+js2JSON(E) + '\n');
38 tabs.advanceSelectedTab(-1);
40 dump('failed again tabs.advanceSelectedTab(-1):'+js2JSON(E) + '\n');
45 tabs.advanceSelectedTab(-1);
47 dump('failed tabs.advanceSelectedTab(-1):'+js2JSON(E) + '\n');
49 tabs.advanceSelectedTab(+1);
51 dump('failed again tabs.advanceSelectedTab(+1):'+js2JSON(E) + '\n');
57 sdump('D_TAB','\tnew tabbox.selectedIndex = ' + tabbox.selectedIndex + '\n');
59 tabs.childNodes[ idx ].hidden = true;
60 delete_tab_contents( panels.childNodes[ idx ] );
61 sdump('D_TAB','tabs.childNodes[ ' + idx + ' ].hidden = true;\n');
63 // Make sure we keep at least one tab open.
65 for (var i = 0; i < tabs.childNodes.length; i++) {
66 var tab = tabs.childNodes[i];
79 function delete_tab_contents( panel ) {
80 sdump('D_TAB',arg_dump(arguments,{0:'.tagName'}));
82 while (panel.lastChild) { panel.removeChild(panel.lastChild); }
84 dump(js2JSON(E)+'\n');
88 function find_free_tab(tabs) {
89 var last_not_hidden = -1;
90 for (var i = 0; i<tabs.childNodes.length; i++) {
91 var tab = tabs.childNodes[i];
95 if (last_not_hidden == tabs.childNodes.length - 1)
97 // If the one next to last_not_hidden is hidden, we want it.
98 // Basically, we fill in tabs after existing tabs for as
100 var idx = last_not_hidden + 1;
101 var candidate = tabs.childNodes[ idx ];
102 if (candidate.hidden)
104 // Alright, find the first hidden then
105 for (var i = 0; i<tabs.childNodes.length; i++) {
106 var tab = tabs.childNodes[i];
113 function new_tab( d, tabbox ) {
114 sdump('D_TAB',arg_dump(arguments));
115 if (typeof(tabbox)!='object')
116 tabbox = d.getElementById(tabbox);
117 if (typeof(tabbox)!='object')
118 throw('Could not find tabbox. d = ' + d + ' tabbox = ' + tabbox + '\n');
119 var tabs = tabbox.firstChild;
120 var panels = tabbox.lastChild;
121 var tc = find_free_tab(tabs);
122 sdump('D_TAB','find_free_tab returned ' + tc + '\n');
123 if (tc == -1) { return; } // let's only have up to 10 tabs
124 var tab = tabs.childNodes[ tc ];
125 tab.setAttribute('label','Tab ' + (tc + 1) );
128 tabs.selectedIndex = tc;
129 replace_tab(d,tabbox,'Tab','chrome://evergreen/content/main/about.xul');
131 dump('+++++++++++++++++++++++++++++' + E + ' : ' + js2JSON(E)+'\n');
135 function replace_tab( d, tabbox, label, chrome, params ) {
136 sdump('D_TAB',arg_dump(arguments,{'3':true}));
137 if (typeof(tabbox)!='object')
138 tabbox = d.getElementById(tabbox);
139 if (typeof(tabbox)!='object')
140 throw('Could not find tabbox. d = ' + d + ' tabbox = ' + tabbox + '\n');
141 var tabs = tabbox.firstChild;
142 var panels = tabbox.lastChild;
144 var idx = tabs.selectedIndex;
146 delete_tab_contents(panels.childNodes[ idx ]);
147 tabs.childNodes[ idx ].hidden = false;
149 var frame = d.createElement('iframe');
150 frame.setAttribute('id','frame_'+idx);
151 frame.setAttribute('flex','1');
152 frame.setAttribute('src',chrome);
153 panels.childNodes[ idx ].appendChild(frame);
154 sdump('D_TAB','Created frame : ' + frame.id + ' for index : ' + idx + '\n');
155 //frame.contentWindow.parentWindow = parentWindow;
156 //frame.contentWindow.tabWindow = this;
157 //dump('replace_tab.tabWindow = ' + this + '\n');
158 frame.contentWindow.mw = mw;
159 //frame.contentWindow.am_i_a_top_level_tab = true;
161 frame.contentWindow.params = params;
163 return frame.contentWindow;
165 dump(js2JSON(E)+'\n');
167 //debug_tabs(d,tabbox);