From: phasefx Date: Tue, 28 Jun 2005 02:13:29 +0000 (+0000) Subject: pretend to create/delete tabs by unhiding/hiding them X-Git-Url: https://old-git.evergreen-ils.org/?a=commitdiff_plain;h=d781330504d6420840b51a9964dfc97034fcd5ca;p=Evergreen.git pretend to create/delete tabs by unhiding/hiding them git-svn-id: svn://svn.open-ils.org/ILS/trunk@937 dcc99617-32d9-48b4-a31d-7c20da2025e4 --- diff --git a/Evergreen/staff_client/chrome/content/evergreen/main/app_shell.js b/Evergreen/staff_client/chrome/content/evergreen/main/app_shell.js index e28c478613..73fe029298 100644 --- a/Evergreen/staff_client/chrome/content/evergreen/main/app_shell.js +++ b/Evergreen/staff_client/chrome/content/evergreen/main/app_shell.js @@ -1,179 +1,157 @@ sdump('D_TRACE','Loading app_shell.js\n'); -var tab_count = [ false, false, false, false, false, false, false, false, false, false ]; - -function debug_tabs( d, tabbox ) { - if (typeof(tabbox)!='object') - tabbox = d.getElementById(tabbox); - if (typeof(tabbox)!='object') - throw('Could not find tabbox. d = ' + d + ' tabbox = ' + tabbox + '\n'); - var tabs = tabbox.firstChild; - var panels = tabbox.lastChild; - sdump('D_TAB', d.id + '\t' + tabbox.id + '\n'); - sdump('D_TAB','\ttabs.childNodes.length = ' + tabs.childNodes.length + '\n'); - for (var i = 0; i < tabs.childNodes.length; i++) { - var tab = tabs.childNodes[i]; - sdump('D_TAB','\t\t#' + i + ' tab = ' + tab.tagName + ' : ' + tab.id + '\n' ); - if (tab.childNodes) { - sdump('D_TAB','\t\t\ttab.childNodes.length = ' + tab.childNodes.length + '\n'); - for (var j = 0; j < tab.childNodes.length; j++) { - var child = tab.childNodes[j]; - sdump('D_TAB','\t\t\t#' + j + ' ' + child.tagName + ' : ' + child.id + '\n'); - } - } - } - - sdump('D_TAB','\tpanels.childNodes.length = ' + panels.childNodes.length + '\n'); - for (var i = 0; i < panels.childNodes.length; i++) { - var panel = panels.childNodes[i]; - sdump('D_TAB','\t\t#' + i + ' panel = ' + panel.tagName + ' : ' + panel.id + '\n' ); - if (panel.childNodes) { - sdump('D_TAB','\t\t\tpanel.childNodes.length = ' + panel.childNodes.length + '\n'); - for (var j = 0; j < panel.childNodes.length; j++) { - var child = panel.childNodes[j]; - sdump('D_TAB','\t\t\t#' + j + ' ' + child.tagName + ' : ' + child.id + '\n'); - } - } - } - sdump('D_TAB', - 'tabbox.selectedIndex = ' + tabbox.selectedIndex + - ' .selectedTab = ' + tabbox.selectedTab.id + - ' .selectedPanel = ' + tabbox.selectedPanel.id + '\n'); - sdump('D_TAB', - 'tabs.selectedIndex = ' + tabs.selectedIndex + - ' .selectedItem = ' + tabs.selectedItem.id + '\n'); - sdump('D_TAB', - 'panels.selectedIndex = ' + panels.selectedIndex + - ' .selectedPanel.id = ' + panels.selectedPanel.id + '\n'); - -} - function app_shell_init(params) { dump("TESTING: app_shell.js: " + mw.G['main_test_variable'] + '\n'); replace_tab(params.d,'main_tabbox','Tab','chrome://evergreen/content/main/about.xul'); mw.G.sound.beep(); } -function close_tab( d, tabbox ) { - sdump('D_TAB','calling close_tab( ' + d.id + ',' + tabbox + ');\n'); - if (typeof(tabbox)!='object') - tabbox = d.getElementById(tabbox); - if (typeof(tabbox)!='object') - throw('Could not find tabbox. d = ' + d + ' tabbox = ' + tabbox + '\n'); +function close_tab( d, t1, t2 ) { + // t1 = tabbox or tab, if t1 = tabbox, t2 = tab index, otherwise close current tab + sdump('D_TAB',arg_dump(arguments,{1:true,2:true})); + if (typeof(t1)!='object') + t1 = d.getElementById(t1); + if (typeof(t1)!='object') + throw('Could not find tab or tabbox. d = ' + d + ' tabbox = ' + t1 + '\n'); try { + var tabbox; + + if (t1.tagName == 'tabbox') + tabbox = t1; + else + tabbox = t1.parentNode.parentNode; + var idx = tabbox.selectedIndex; + if (t2) + idx = t2; + + sdump('D_TAB','tabbox.selectedIndex = ' + tabbox.selectedIndex + '\n'); var tabs = tabbox.firstChild; var panels = tabbox.lastChild; - if (idx == 0) - tabs.advanceSelectedTab(+1); - else - tabs.advanceSelectedTab(-1); - - if (tabs.childNodes.length > 1 ) { - tabs.removeItemAt( idx ); - panels.removeChild( panels.childNodes[ idx ] ); + if (idx == 0) { + try { + tabs.advanceSelectedTab(+1); + } catch(E) { + dump('failed tabs.advanceSelectedTab(+1):'+js2JSON(E) + '\n'); + try { + tabs.advanceSelectedTab(-1); + } catch(E) { + dump('failed again tabs.advanceSelectedTab(-1):'+js2JSON(E) + '\n'); + } + } } else { - replace_tab(d,tabbox,'Tab','chrome://evergreen/content/main/about.xul'); + try { + tabs.advanceSelectedTab(-1); + } catch(E) { + dump('failed tabs.advanceSelectedTab(-1):'+js2JSON(E) + '\n'); + try { + tabs.advanceSelectedTab(+1); + } catch(E) { + dump('failed again tabs.advanceSelectedTab(+1):'+js2JSON(E) + '\n'); + } + } + + } + + sdump('D_TAB','\tnew tabbox.selectedIndex = ' + tabbox.selectedIndex + '\n'); + + tabs.childNodes[ idx ].hidden = true; + delete_tab_contents( panels.childNodes[ idx ] ); + sdump('D_TAB','tabs.childNodes[ ' + idx + ' ].hidden = true;\n'); + + // Make sure we keep at least one tab open. + var tab_flag = true; + for (var i = 0; i < tabs.childNodes.length; i++) { + var tab = tabs.childNodes[i]; + if (!tab.hidden) + tab_flag = false; } + if (tab_flag) + new_tab(d,tabbox); } catch(E) { dump(E+'\n'); throw(E); } - debug_tabs(d,tabbox); } -function delete_tab_contents( tab, panel ) { - sdump('D_TAB','calling delete_tab_contents( ' + tab.id + ',' + panel.id + ');\n'); +function delete_tab_contents( panel ) { + sdump('D_TAB',arg_dump(arguments)); try { - if (tab.childNodes) - sdump('D_TAB','before: tab.childNodes.length = ' + tab.childNodes.length + '\n'); - if (panel.childNodes) - sdump('D_TAB','before: panel.childNodes.length = ' + panel.childNodes.length + '\n'); - while (tab.lastChild) { tab.removeChild(tab.lastChild); } while (panel.lastChild) { panel.removeChild(panel.lastChild); } - if (tab.childNodes) - sdump('D_TAB','after: tab.childNodes.length = ' + tab.childNodes.length + '\n'); - if (panel.childNodes) - sdump('D_TAB','after: panel.childNodes.length = ' + panel.childNodes.length + '\n'); } catch(E) { dump(js2JSON(E)+'\n'); } } -function first_free_tab_count() { - for (var i = 0; i<10; i++) { - if (! tab_count[i]) { - tab_count[i] = true; +function find_free_tab(tabs) { + var last_not_hidden = -1; + for (var i = 0; i