From e52dd093cdbcf52965504cc12eed9348db815a02 Mon Sep 17 00:00:00 2001 From: "slamm%netscape.com" Date: Mon, 11 Sep 2000 23:27:16 +0000 Subject: [PATCH] Fix sidebar popopen on search (51694). Move all the logic into sidebarOverlay.js. r=pavlov --- xpfe/browser/resources/content/navigator.js | 28 ++------ .../sidebar/resources/sidebarOverlay.js | 66 ++++++++++++++++--- .../sidebar/resources/sidebarOverlay.xul | 10 +-- 3 files changed, 69 insertions(+), 35 deletions(-) diff --git a/xpfe/browser/resources/content/navigator.js b/xpfe/browser/resources/content/navigator.js index 5cd5d7416bb..0d03acaf4b6 100644 --- a/xpfe/browser/resources/content/navigator.js +++ b/xpfe/browser/resources/content/navigator.js @@ -846,28 +846,14 @@ function setBrowserSearchMode(searchMode) function RevealSearchPanel() { - // rjc Note: the following is all a hack until the sidebar has appropriate APIs - // to check whether its shown/hidden, open/closed, and can show a particular panel + var should_popopen = true; + var should_unhide = true; + var searchPanel = document.getElementById("urn:sidebar:panel:search"); - var sidebar = document.getElementById("sidebar-box"); - var sidebar_splitter = document.getElementById("sidebar-splitter"); - var searchPanel = document.getElementById("urn:sidebar:panel:search"); - - if (sidebar && sidebar_splitter && searchPanel) - { - var is_hidden = sidebar.getAttribute("hidden"); - if (is_hidden && is_hidden == "true") - { - // SidebarShowHide() lives in sidebarOverlay.js - SidebarShowHide(); - } - var splitter_state = sidebar_splitter.getAttribute("state"); - if (splitter_state && splitter_state == "collapsed") { - sidebar_splitter.removeAttribute("state"); - } - // SidebarSelectPanel() lives in sidebarOverlay.js - SidebarSelectPanel(searchPanel); - } + if (searchPanel) { + // SidebarSelectPanel() lives in sidebarOverlay.js + SidebarSelectPanel(searchPanel, should_popopen, should_unhide); + } } function BrowserNewWindow() diff --git a/xpfe/components/sidebar/resources/sidebarOverlay.js b/xpfe/components/sidebar/resources/sidebarOverlay.js index 985ec31aafa..ec509ab817e 100644 --- a/xpfe/components/sidebar/resources/sidebarOverlay.js +++ b/xpfe/components/sidebar/resources/sidebarOverlay.js @@ -216,8 +216,7 @@ function (force_reload) // parameter to allow the value to be persisted in localstore.rdf. var selected_id = this.node.getAttribute('last-selected-panel'); - var sidebar_box = document.getElementById('sidebar-box'); - if (sidebar_box.getAttribute('collapsed') == 'true') { + if (sidebar_is_collapsed()) { sidebarObj.collapsed = true; } else { sidebarObj.collapsed = false; @@ -538,7 +537,7 @@ function sidebar_overlay_init() { // XXX This is a hack to force re-display panels.setAttribute('ref', sidebarObj.resource); } - if (sidebar_element.getAttribute('collapsed') == 'true') { + if (sidebar_is_collapsed()) { sidebarObj.collapsed = true; } else { sidebarObj.collapsed = false; @@ -701,9 +700,39 @@ function sidebar_fixup_datasource() { // Change the sidebar content to the selected panel. // Called when a panel title is clicked. -function SidebarSelectPanel(header) { +function SidebarSelectPanel(header, should_popopen, should_unhide) { + debug("SidebarSelectPanel("+header+","+should_popopen+","+should_unhide+")"); var panel = sidebarObj.panels.get_panel_from_header_node(header); - panel.select(false); + + if (!panel) { + return false; + } + + var popopen = false; + var unhide = false; + + if (panel.is_excluded()) { + return false; + } + if (sidebar_is_hidden()) { + if (should_unhide) { + unhide = true; + } else { + return false; + } + } + if (sidebar_is_collapsed()) { + if (should_popopen) { + popopen = true; + } else { + return false; + } + } + if (unhide) SidebarShowHide(); + if (popopen) SidebarExpandCollapse(); + if (!panel.is_selected()) panel.select(false); + + return true; } function SidebarStopPanelLoad(header) { @@ -756,6 +785,25 @@ function SidebarCustomize() { } } +function sidebar_is_collapsed() { + var sidebar_splitter = document.getElementById('sidebar-splitter'); + return sidebar_splitter.getAttribute('state') == 'collapsed'; +} + +function SidebarExpandCollapse() { + var sidebar_splitter = document.getElementById('sidebar-splitter'); + var sidebar_box = document.getElementById('sidebar-box'); + if (sidebar_splitter.getAttribute('state') == 'collapsed') { + debug("Expanding the sidebar"); + sidebar_splitter.removeAttribute('state'); + sidebar_box.removeAttribute('collapsed'); + } else { + debug("Collapsing the sidebar"); + sidebar_splitter.setAttribute('state', 'collapsed'); + sidebar_box.setAttribute('collapsed', 'true'); + } +} + // sidebar_is_hidden() - Helper funciton for SidebarShowHide(). function sidebar_is_hidden() { var sidebar_title = document.getElementById('sidebar-title-box'); @@ -766,9 +814,9 @@ function sidebar_is_hidden() { // Show/Hide the entire sidebar. // Envoked by the "View / My Sidebar" menu option. -function SidebarShowHide(title_id) { +function SidebarShowHide() { var sidebar_box = document.getElementById('sidebar-box'); - var title_box = document.getElementById(title_id); + var title_box = document.getElementById('sidebar-title-box'); var sidebar_panels_splitter = document.getElementById('sidebar-panels-splitter'); var sidebar_panels_splitter_box = document.getElementById('sidebar-panels-splitter-box'); var sidebar_splitter = document.getElementById('sidebar-splitter'); @@ -880,8 +928,8 @@ function SidebarTogglePanel(panel_menuitem) { // Sidebar Hacks and Work-arounds ////////////////////////////////////////////////////////////// -// SidebarExpandCollapse() - Respond to grippy click. -function SidebarExpandCollapse() { +// SidebarCleanUpExpandCollapse() - Respond to grippy click. +function SidebarCleanUpExpandCollapse() { // XXX Mini hack. Persist isn't working too well. Force the persist, // but wait until the change has commited. setTimeout("document.persist('sidebar-box', 'collapsed');",100); diff --git a/xpfe/components/sidebar/resources/sidebarOverlay.xul b/xpfe/components/sidebar/resources/sidebarOverlay.xul index 53758a8be69..f8a5a2423bf 100644 --- a/xpfe/components/sidebar/resources/sidebarOverlay.xul +++ b/xpfe/components/sidebar/resources/sidebarOverlay.xul @@ -99,9 +99,9 @@ predicate="http://home.netscape.com/NC-rdf#exclude" /> -