diff --git a/src/ui/chrome.js b/src/ui/chrome.js index 837c001..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); } @@ -1222,6 +1224,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 +1240,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(); + } }; /** 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