1 sdump('D_TRACE','Loading app_shell.js\n');
3 function app_shell_init(p) {
4 dump("TESTING: app_shell.js: " + mw.G['main_test_variable'] + '\n');
6 p.w.close_tab = function (t1,t2) { return close_tab(p.d,t1,t2); };
7 p.w.delete_tab_contents = function (panel) { return delete_tab_contents(panel); };
8 p.w.find_free_tab = function (tabs) { return find_free_tab(tabs); };
9 p.w.new_tab = function () { return new_tab(p.d,p.tabbox); };
10 p.w.replace_tab = function (label,chrome,params) { return replace_tab(p.d,p.tabbox,label,chrome,params); };
12 p.w.replace_tab('Tab','chrome://evergreen/content/main/about.xul');
15 function close_tab( d, t1, t2 ) {
16 // t1 = tabbox or tab, if t1 = tabbox, t2 = tab index, otherwise close current tab
17 sdump('D_TAB',arg_dump(arguments,{1:true,2:true}));
18 if (typeof(t1)!='object')
19 t1 = d.getElementById(t1);
20 if (typeof(t1)!='object')
21 throw('Could not find tab or tabbox. d = ' + d + ' tabbox = ' + t1 + '\n');
25 if (t1.tagName == 'tabbox')
28 tabbox = t1.parentNode.parentNode;
30 var idx = tabbox.selectedIndex;
34 sdump('D_TAB','tabbox.selectedIndex = ' + tabbox.selectedIndex + '\n');
35 var tabs = tabbox.firstChild;
36 var panels = tabbox.lastChild;
40 tabs.advanceSelectedTab(+1);
42 dump('failed tabs.advanceSelectedTab(+1):'+js2JSON(E) + '\n');
44 tabs.advanceSelectedTab(-1);
46 dump('failed again tabs.advanceSelectedTab(-1):'+js2JSON(E) + '\n');
51 tabs.advanceSelectedTab(-1);
53 dump('failed tabs.advanceSelectedTab(-1):'+js2JSON(E) + '\n');
55 tabs.advanceSelectedTab(+1);
57 dump('failed again tabs.advanceSelectedTab(+1):'+js2JSON(E) + '\n');
63 sdump('D_TAB','\tnew tabbox.selectedIndex = ' + tabbox.selectedIndex + '\n');
65 tabs.childNodes[ idx ].hidden = true;
66 delete_tab_contents( panels.childNodes[ idx ] );
67 sdump('D_TAB','tabs.childNodes[ ' + idx + ' ].hidden = true;\n');
69 // Make sure we keep at least one tab open.
71 for (var i = 0; i < tabs.childNodes.length; i++) {
72 var tab = tabs.childNodes[i];
85 function delete_tab_contents( panel ) {
86 sdump('D_TAB',arg_dump(arguments,{0:'.tagName'}));
88 while (panel.lastChild) { panel.removeChild(panel.lastChild); }
90 dump(js2JSON(E)+'\n');
94 function find_free_tab(tabs) {
95 var last_not_hidden = -1;
96 for (var i = 0; i<tabs.childNodes.length; i++) {
97 var tab = tabs.childNodes[i];
101 if (last_not_hidden == tabs.childNodes.length - 1)
102 last_not_hidden = -1;
103 // If the one next to last_not_hidden is hidden, we want it.
104 // Basically, we fill in tabs after existing tabs for as
106 var idx = last_not_hidden + 1;
107 var candidate = tabs.childNodes[ idx ];
108 if (candidate.hidden)
110 // Alright, find the first hidden then
111 for (var i = 0; i<tabs.childNodes.length; i++) {
112 var tab = tabs.childNodes[i];
119 function new_tab( d, tabbox ) {
120 sdump('D_TAB',arg_dump(arguments));
121 if (typeof(tabbox)!='object')
122 tabbox = d.getElementById(tabbox);
123 if (typeof(tabbox)!='object')
124 throw('Could not find tabbox. d = ' + d + ' tabbox = ' + tabbox + '\n');
125 var tabs = tabbox.firstChild;
126 var panels = tabbox.lastChild;
127 var tc = find_free_tab(tabs);
128 sdump('D_TAB','find_free_tab returned ' + tc + '\n');
129 if (tc == -1) { return; } // let's only have up to 10 tabs
130 var tab = tabs.childNodes[ tc ];
131 tab.setAttribute('label','Tab ' + (tc + 1) );
134 tabs.selectedIndex = tc;
135 replace_tab(d,tabbox,'Tab','chrome://evergreen/content/main/about.xul');
137 dump('+++++++++++++++++++++++++++++' + E + ' : ' + js2JSON(E)+'\n');
141 function replace_tab( d, tabbox, label, chrome, params ) {
142 sdump('D_TAB',arg_dump(arguments,{2:true,3:true,4:true}));
143 if (typeof(tabbox)!='object')
144 tabbox = d.getElementById(tabbox);
145 if (typeof(tabbox)!='object')
146 throw('Could not find tabbox. d = ' + d + ' tabbox = ' + tabbox + '\n');
147 var tabs = tabbox.firstChild;
148 var panels = tabbox.lastChild;
150 var idx = tabs.selectedIndex;
152 delete_tab_contents(panels.childNodes[ idx ]);
153 tabs.childNodes[ idx ].hidden = false;
154 tabs.childNodes[ idx].setAttribute('label',label + ' ' + (idx+1));
156 var frame = d.createElement('iframe');
157 frame.setAttribute('id','frame_'+idx);
158 frame.setAttribute('flex','1');
159 frame.setAttribute('src',chrome);
160 panels.childNodes[ idx ].appendChild(frame);
161 sdump('D_TAB','Created frame : ' + frame.id + ' for index : ' + idx + ' with src=' + frame.getAttribute('src') + '\n');
162 //frame.contentWindow.parentWindow = parentWindow;
163 //frame.contentWindow.tabWindow = this;
164 //dump('replace_tab.tabWindow = ' + this + '\n');
165 frame.contentWindow.mw = mw;
166 //frame.contentWindow.am_i_a_top_level_tab = true;
168 frame.contentWindow.params = params;
170 return frame.contentWindow;
172 dump(js2JSON(E)+'\n');
174 //debug_tabs(d,tabbox);