]> git.evergreen-ils.org Git - Evergreen.git/blob - Evergreen/staff_client/chrome/content/evergreen/main/app_shell.js
more thorough registering of windows
[Evergreen.git] / Evergreen / staff_client / chrome / content / evergreen / main / app_shell.js
1 sdump('D_TRACE','Loading app_shell.js\n');
2
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');
6 }
7
8 function close_tab( d, t1, t2 ) {
9         // t1 = tabbox or tab, if t1 = tabbox, t2 = tab index, otherwise close current tab
10         sdump('D_TAB',arg_dump(arguments,{1:true,2:true}));
11         if (typeof(t1)!='object')
12                 t1 = d.getElementById(t1);
13         if (typeof(t1)!='object')
14                 throw('Could not find tab or tabbox. d = ' + d + ' tabbox = ' + t1 + '\n');
15         try {
16                 var tabbox;
17
18                 if (t1.tagName == 'tabbox')
19                         tabbox = t1;
20                 else
21                         tabbox = t1.parentNode.parentNode;
22
23                 var idx = tabbox.selectedIndex;
24                 if (t2)
25                         idx = t2;
26
27                 sdump('D_TAB','tabbox.selectedIndex = ' + tabbox.selectedIndex + '\n');
28                 var tabs = tabbox.firstChild; 
29                 var panels = tabbox.lastChild;
30
31                 if (idx == 0) {
32                         try {
33                                 tabs.advanceSelectedTab(+1);
34                         } catch(E) {
35                                 dump('failed tabs.advanceSelectedTab(+1):'+js2JSON(E) + '\n');
36                                 try {
37                                         tabs.advanceSelectedTab(-1);
38                                 } catch(E) {
39                                         dump('failed again tabs.advanceSelectedTab(-1):'+js2JSON(E) + '\n');
40                                 }
41                         }
42                 } else {
43                         try {
44                                 tabs.advanceSelectedTab(-1);
45                         } catch(E) {
46                                 dump('failed tabs.advanceSelectedTab(-1):'+js2JSON(E) + '\n');
47                                 try {
48                                         tabs.advanceSelectedTab(+1);
49                                 } catch(E) {
50                                         dump('failed again tabs.advanceSelectedTab(+1):'+js2JSON(E) + '\n');
51                                 }
52                         }
53
54                 }
55                 
56                 sdump('D_TAB','\tnew tabbox.selectedIndex = ' + tabbox.selectedIndex + '\n');
57
58                 tabs.childNodes[ idx ].hidden = true;
59                 delete_tab_contents( panels.childNodes[ idx ] );
60                 sdump('D_TAB','tabs.childNodes[ ' + idx + ' ].hidden = true;\n');
61
62                 // Make sure we keep at least one tab open.
63                 var tab_flag = true;
64                 for (var i = 0; i < tabs.childNodes.length; i++) {
65                         var tab = tabs.childNodes[i];
66                         if (!tab.hidden)
67                                 tab_flag = false;
68                 }
69                 if (tab_flag)
70                         new_tab(d,tabbox);
71
72         } catch(E) {
73                 dump(E+'\n');
74                 throw(E);
75         }
76 }
77
78 function delete_tab_contents( panel ) {
79         sdump('D_TAB',arg_dump(arguments,{0:'.tagName'}));
80         try {
81                 while (panel.lastChild) { panel.removeChild(panel.lastChild); }
82         } catch(E) {
83                 dump(js2JSON(E)+'\n');
84         }
85 }
86
87 function find_free_tab(tabs) {
88         var last_not_hidden = -1;
89         for (var i = 0; i<tabs.childNodes.length; i++) {
90                 var tab = tabs.childNodes[i];
91                 if (!tab.hidden)
92                         last_not_hidden = i;
93         }
94         if (last_not_hidden == tabs.childNodes.length - 1)
95                 last_not_hidden = -1;
96         // If the one next to last_not_hidden is hidden, we want it.
97         // Basically, we fill in tabs after existing tabs for as 
98         // long as possible.
99         var idx = last_not_hidden + 1;
100         var candidate = tabs.childNodes[ idx ];
101         if (candidate.hidden)
102                 return idx;
103         // Alright, find the first hidden then
104         for (var i = 0; i<tabs.childNodes.length; i++) {
105                 var tab = tabs.childNodes[i];
106                 if (tab.hidden)
107                         return i;
108         }
109         return -1;
110 }
111
112 function new_tab( d, tabbox ) {
113         sdump('D_TAB',arg_dump(arguments));
114         if (typeof(tabbox)!='object')
115                 tabbox = d.getElementById(tabbox);
116         if (typeof(tabbox)!='object')
117                 throw('Could not find tabbox. d = ' + d + ' tabbox = ' + tabbox + '\n');
118         var tabs = tabbox.firstChild;
119         var panels = tabbox.lastChild;
120         var tc = find_free_tab(tabs);
121         sdump('D_TAB','find_free_tab returned ' + tc + '\n');
122         if (tc == -1) { return; } // let's only have up to 10 tabs
123         var tab = tabs.childNodes[ tc ];
124                 tab.setAttribute('label','Tab ' + (tc + 1) );
125                 tab.hidden = false;
126         try {
127                 tabs.selectedIndex = tc;
128                 replace_tab(d,tabbox,'Tab','chrome://evergreen/content/main/about.xul');
129         } catch(E) {
130                 dump('+++++++++++++++++++++++++++++' + E + ' : ' + js2JSON(E)+'\n');
131         }
132 }
133
134 function replace_tab( d, tabbox, label, chrome, params ) {
135         sdump('D_TAB',arg_dump(arguments,{2:true,3:true,4:true}));
136         if (typeof(tabbox)!='object')
137                 tabbox = d.getElementById(tabbox);
138         if (typeof(tabbox)!='object')
139                 throw('Could not find tabbox. d = ' + d + ' tabbox = ' + tabbox + '\n');
140         var tabs = tabbox.firstChild;
141         var panels = tabbox.lastChild;
142         try {
143                 var idx = tabs.selectedIndex;
144                 
145                 delete_tab_contents(panels.childNodes[ idx ]);
146                 tabs.childNodes[ idx ].hidden = false;
147                 tabs.childNodes[ idx].setAttribute('label',label + ' ' + (idx+1));
148
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 + ' with src=' + frame.getAttribute('src') + '\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;
160                 if (params) {
161                         frame.contentWindow.params = params;
162                 }
163                 return frame.contentWindow;
164         } catch(E) {
165                 dump(js2JSON(E)+'\n');
166         }
167         //debug_tabs(d,tabbox);
168 }