1 dump('entering main/menu.js\n');
3 if (typeof main == 'undefined') main = {};
4 main.menu = function () {
6 JSAN.use('util.error'); this.error = new util.error();
7 JSAN.use('main.window'); this.window = new main.window();
12 main.menu.prototype = {
18 obj.tabbox = obj.w.document.getElementById('main_tabbox');
19 obj.tabs = obj.tabbox.firstChild;
20 obj.panels = obj.tabbox.lastChild;
23 'cmd_close_window' : function() { obj.w.close(); },
24 'cmd_new_window' : function() {
25 obj.window.open('/xul/server/main/menu_frame.xul','test' +
26 obj.window.appshell_name_increment++ ,'chrome');
28 'cmd_new_tab' : function() { obj.new_tab(true); },
29 'cmd_close_tab' : function() { obj.close_tab(); },
30 'cmd_broken' : function() { alert('Not Yet Implemented'); },
31 'cmd_circ_checkout' : function() {
32 obj.set_tab('/xul/server/patron/patron_barcode_entry.xul');
36 for (var i in cmd_map) {
37 var cmd = this.w.document.getElementById(i);
39 cmd.addEventListener('command',cmd_map[i],false);
40 cmd.addEventListener('keypress',cmd_map[i],false);
47 'close_tab' : function () {
48 var idx = this.tabs.selectedIndex;
51 this.tabs.advanceSelectedTab(+1);
53 this.error.sdump('D_TAB','failed tabs.advanceSelectedTab(+1):'+js2JSON(E) + '\n');
55 this.tabs.advanceSelectedTab(-1);
57 this.error.sdump('D_TAB','failed again tabs.advanceSelectedTab(-1):'+
63 this.tabs.advanceSelectedTab(-1);
65 this.error.sdump('D_TAB','failed tabs.advanceSelectedTab(-1):'+js2JSON(E) + '\n');
67 this.tabs.advanceSelectedTab(+1);
69 this.error.sdump('D_TAB','failed again tabs.advanceSelectedTab(+1):'+
76 this.error.sdump('D_TAB','\tnew tabbox.selectedIndex = ' + this.tabbox.selectedIndex + '\n');
78 this.tabs.childNodes[ idx ].hidden = true;
79 this.error.sdump('D_TAB','tabs.childNodes[ ' + idx + ' ].hidden = true;\n');
81 // Make sure we keep at least one tab open.
83 for (var i = 0; i < this.tabs.childNodes.length; i++) {
84 var tab = this.tabs.childNodes[i];
88 if (tab_flag) this.new_tab();
91 'find_free_tab' : function() {
92 var last_not_hidden = -1;
93 for (var i = 0; i<this.tabs.childNodes.length; i++) {
94 var tab = this.tabs.childNodes[i];
98 if (last_not_hidden == this.tabs.childNodes.length - 1)
100 // If the one next to last_not_hidden is hidden, we want it.
101 // Basically, we fill in tabs after existing tabs for as
103 var idx = last_not_hidden + 1;
104 var candidate = this.tabs.childNodes[ idx ];
105 if (candidate.hidden)
107 // Alright, find the first hidden then
108 for (var i = 0; i<this.tabs.childNodes.length; i++) {
109 var tab = this.tabs.childNodes[i];
116 'new_tab' : function(focus) {
117 var tc = this.find_free_tab();
118 if (tc == -1) { return null; } // 9 tabs max
119 var tab = this.tabs.childNodes[ tc ];
120 //tab.setAttribute('label','Tab ' + (tc + 1) );
123 if (focus) this.tabs.selectedIndex = tc;
124 this.set_tab('data:text/html,<h1>Hello World</h1>',tc);
126 this.error.sdump('D_ERROR',E);
130 'set_tab' : function(url,idx) {
131 if (!idx) idx = this.tabs.selectedIndex;
132 var tab = this.tabs.childNodes[ idx ];
133 var panel = this.panels.childNodes[ idx ];
134 while ( panel.lastChild ) panel.removeChild( panel.lastChild );
135 var frame = this.w.document.createElement('iframe');
136 frame.setAttribute('flex','1');
137 frame.setAttribute('src',url);
138 panel.appendChild(frame);
143 dump('exiting main/menu.js\n');