From 1099ca8f68bdab1c2f6687caf1c9450cde7686a3 Mon Sep 17 00:00:00 2001 From: Andrea Campi Date: Thu, 9 Feb 2012 18:27:33 +0100 Subject: [PATCH 1/3] Refactor: split most of StateManager.checkState() into a separate resizeChrome() method (#280). --- src/ui/statemanager.js | 73 ++++++++++++++++++++++++------------------ 1 file changed, 42 insertions(+), 31 deletions(-) diff --git a/src/ui/statemanager.js b/src/ui/statemanager.js index 91abd2a..cfec683 100644 --- a/src/ui/statemanager.js +++ b/src/ui/statemanager.js @@ -282,43 +282,54 @@ goog.scope(function() { // Check if we're at a new size if (availSize.h !== StateManager.state_.size.h || availSize.w !== StateManager.state_.size.w) { - StateManager.state_.size = availSize; - - // Check if chrome still fits - if (!StateManager.state_.chrome || - !StateManager.state_.chrome.meetsRequirements() || - !StateManager.state_.chrome.fits(availSize)) { - // Chrome doesn't fit, need to install a new one - newChrome = Chrome.select(StateManager.chromes_, availSize); - - if (!newChrome) { - // TODO: Fire chrome failed event - // TODO: Show error page (no chrome) - return; - } + StateManager.resizeChrome(); + } + }; - // Remove existing chrome - dom.clearChildren(StateManager.state_.chromeContainer); - // Deactivate previous - if (StateManager.state_.chrome) { - StateManager.state_.chrome.deactivate(); - } + /** + * Force computation of chrome size, including selection of a new one + * if necessary. + */ + StateManager.resizeChrome = function() { + var availSize = StateManager.getAvailableSize_(), + newChrome; + + StateManager.state_.size = availSize; - // Activate and store - StateManager.state_.chromeContainer.appendChild(newChrome.activate()); - StateManager.state_.chrome = newChrome; + // Check if chrome still fits + if (!StateManager.state_.chrome || + !StateManager.state_.chrome.meetsRequirements() || + !StateManager.state_.chrome.fits(availSize)) { + // Chrome doesn't fit, need to install a new one + newChrome = Chrome.select(StateManager.chromes_, availSize); + + if (!newChrome) { + // TODO: Fire chrome failed event + // TODO: Show error page (no chrome) + return; + } - // Fire chrome change event - events.fireEvent( - document, StateManager.events.CHROMECHANGED, { - 'node': newChrome.node - } - ); + // Remove existing chrome + dom.clearChildren(StateManager.state_.chromeContainer); + // Deactivate previous + if (StateManager.state_.chrome) { + StateManager.state_.chrome.deactivate(); } - // Chrome handles page re-layout, if necessary - StateManager.state_.chrome.setSize(availSize); + // Activate and store + StateManager.state_.chromeContainer.appendChild(newChrome.activate()); + StateManager.state_.chrome = newChrome; + + // Fire chrome change event + events.fireEvent( + document, StateManager.events.CHROMECHANGED, { + 'node': newChrome.node + } + ); } + + // Chrome handles page re-layout, if necessary + StateManager.state_.chrome.setSize(availSize); }; // Expose special functions for use by the native app wrappers From 6bbad8753a96d77388d29dbcba7e0309a69e9f7e Mon Sep 17 00:00:00 2001 From: Andrea Campi Date: Mon, 27 Feb 2012 14:49:46 +0100 Subject: [PATCH 2/3] If the sidebar is configured as a drawer, add an extra class and trigger resizing of the chrome (#280). --- src/ui/chrome.js | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/src/ui/chrome.js b/src/ui/chrome.js index 837c001..0164b5e 100644 --- a/src/ui/chrome.js +++ b/src/ui/chrome.js @@ -1222,6 +1222,10 @@ goog.scope(function() { sidebar: sidebar }); dom.addClass(/** @type {!Element} */ (sidebar), 'sidebar-active'); + if (dom.hasClass(sidebar, 'drawer')) { + dom.addClass(/** @type {!Element} */ (this.viewer), 'sidebar-drawer-active'); + treesaver.ui.StateManager.resizeChrome(); + } }; /** @@ -1234,6 +1238,10 @@ goog.scope(function() { }); } dom.removeClass(/** @type {!Element} */ (sidebar), 'sidebar-active'); + if (dom.hasClass(sidebar, 'drawer')) { + dom.removeClass(/** @type {!Element} */ (this.viewer), 'sidebar-drawer-active'); + treesaver.ui.StateManager.resizeChrome(); + } }; /** From 41ba65a34a87580a7fe7523540b69c99ab1a7c98 Mon Sep 17 00:00:00 2001 From: Andrea Campi Date: Thu, 9 Feb 2012 16:12:11 +0100 Subject: [PATCH 3/3] If the sidebar is a drawer, clicking elsewhere should not close it (#280). --- src/ui/chrome.js | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/ui/chrome.js b/src/ui/chrome.js index 0164b5e..43a16bd 100644 --- a/src/ui/chrome.js +++ b/src/ui/chrome.js @@ -604,7 +604,9 @@ goog.scope(function() { if (!withinSidebar) { this.sidebars.forEach(function(sidebar) { - this.sidebarInactive(sidebar); + if (!dom.hasClass(sidebar, 'drawer')) { + this.sidebarInactive(sidebar); + } }, this); }