| OLD | NEW |
| 1 // Copyright 2014 The Chromium Authors. All rights reserved. | 1 // Copyright 2014 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 cr.define('cr.ui.pageManager', function() { | 5 cr.define('cr.ui.pageManager', function() { |
| 6 /** @const */ var FocusOutlineManager = cr.ui.FocusOutlineManager; | 6 /** @const */ var FocusOutlineManager = cr.ui.FocusOutlineManager; |
| 7 | 7 |
| 8 /** | 8 /** |
| 9 * PageManager contains a list of root Page and overlay Page objects and | 9 * PageManager contains a list of root Page and overlay Page objects and |
| 10 * handles "navigation" by showing and hiding these pages and overlays. On | 10 * handles "navigation" by showing and hiding these pages and overlays. On |
| (...skipping 163 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 174 | 174 |
| 175 pageName = targetPage.name.toLowerCase(); | 175 pageName = targetPage.name.toLowerCase(); |
| 176 var targetPageWasVisible = targetPage.visible; | 176 var targetPageWasVisible = targetPage.visible; |
| 177 | 177 |
| 178 // Determine if the root page is 'sticky', meaning that it | 178 // Determine if the root page is 'sticky', meaning that it |
| 179 // shouldn't change when showing an overlay. This can happen for special | 179 // shouldn't change when showing an overlay. This can happen for special |
| 180 // pages like Search. | 180 // pages like Search. |
| 181 var isRootPageLocked = | 181 var isRootPageLocked = |
| 182 rootPage && rootPage.sticky && targetPage.parentPage; | 182 rootPage && rootPage.sticky && targetPage.parentPage; |
| 183 | 183 |
| 184 var allPageNames = Array.prototype.concat.call( | |
| 185 Object.keys(this.registeredPages), | |
| 186 Object.keys(this.registeredOverlayPages)); | |
| 187 | |
| 188 // Notify pages if they will be hidden. | 184 // Notify pages if they will be hidden. |
| 189 // TODO(michaelpg): Resolve code duplication. | 185 this.forEachPage_(!isRootPageLocked, function(page) { |
| 190 for (var i = 0; i < allPageNames.length; ++i) { | 186 if (page.willHidePage && page.name != pageName && |
| 191 var name = allPageNames[i]; | |
| 192 var page = this.registeredPages[name] || | |
| 193 this.registeredOverlayPages[name]; | |
| 194 if (!page.parentPage && isRootPageLocked) | |
| 195 continue; | |
| 196 if (page.willHidePage && name != pageName && | |
| 197 !this.isAncestorOfPage(page, targetPage)) { | 187 !this.isAncestorOfPage(page, targetPage)) { |
| 198 page.willHidePage(); | 188 page.willHidePage(); |
| 199 } | 189 } |
| 200 } | 190 }); |
| 201 | 191 |
| 202 // Update visibilities to show only the hierarchy of the target page. | 192 // Update visibilities to show only the hierarchy of the target page. |
| 203 for (var i = 0; i < allPageNames.length; ++i) { | 193 this.forEachPage_(!isRootPageLocked, function(page) { |
| 204 var name = allPageNames[i]; | 194 page.visible = page.name == pageName || |
| 205 var page = this.registeredPages[name] || | |
| 206 this.registeredOverlayPages[name]; | |
| 207 if (!page.parentPage && isRootPageLocked) | |
| 208 continue; | |
| 209 page.visible = name == pageName || | |
| 210 this.isAncestorOfPage(page, targetPage); | 195 this.isAncestorOfPage(page, targetPage); |
| 211 } | 196 }); |
| 212 | 197 |
| 213 // Update the history and current location. | 198 // Update the history and current location. |
| 214 if (opt_updateHistory) | 199 if (opt_updateHistory) |
| 215 this.updateHistoryState_(!!opt_propertyBag.replaceState); | 200 this.updateHistoryState_(!!opt_propertyBag.replaceState); |
| 216 | 201 |
| 217 // Update focus if any other control was focused on the previous page, | 202 // Update focus if any other control was focused on the previous page, |
| 218 // or the previous page is not known. | 203 // or the previous page is not known. |
| 219 if (document.activeElement != document.body && | 204 if (document.activeElement != document.body && |
| 220 (!rootPage || rootPage.pageDiv.contains(document.activeElement))) { | 205 (!rootPage || rootPage.pageDiv.contains(document.activeElement))) { |
| 221 targetPage.focus(); | 206 targetPage.focus(); |
| 222 } | 207 } |
| 223 | 208 |
| 224 // Notify pages if they were shown. | 209 // Notify pages if they were shown. |
| 225 for (var i = 0; i < allPageNames.length; ++i) { | 210 this.forEachPage_(!isRootPageLocked, function(page) { |
| 226 var name = allPageNames[i]; | |
| 227 var page = this.registeredPages[name] || | |
| 228 this.registeredOverlayPages[name]; | |
| 229 if (!page.parentPage && isRootPageLocked) | |
| 230 continue; | |
| 231 if (!targetPageWasVisible && page.didShowPage && | 211 if (!targetPageWasVisible && page.didShowPage && |
| 232 (name == pageName || this.isAncestorOfPage(page, targetPage))) { | 212 (page.name == pageName || |
| 213 this.isAncestorOfPage(page, targetPage))) { |
| 233 page.didShowPage(); | 214 page.didShowPage(); |
| 234 } | 215 } |
| 235 } | 216 }); |
| 236 | 217 |
| 237 // Update the document title. Do this after didShowPage was called, in | 218 // Update the document title. Do this after didShowPage was called, in |
| 238 // case a page decides to change its title. | 219 // case a page decides to change its title. |
| 239 this.updateTitle_(); | 220 this.updateTitle_(); |
| 240 }, | 221 }, |
| 241 | 222 |
| 242 /** | 223 /** |
| 243 * Returns the name of the page from the current path. | 224 * Returns the name of the page from the current path. |
| 244 * @return {string} Name of the page specified by the current path. | 225 * @return {string} Name of the page specified by the current path. |
| 245 */ | 226 */ |
| (...skipping 461 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 707 * @private | 688 * @private |
| 708 */ | 689 */ |
| 709 updateFrozenElementHorizontalPosition_: function(e) { | 690 updateFrozenElementHorizontalPosition_: function(e) { |
| 710 if (isRTL()) { | 691 if (isRTL()) { |
| 711 e.style.right = this.horizontalOffset + 'px'; | 692 e.style.right = this.horizontalOffset + 'px'; |
| 712 } else { | 693 } else { |
| 713 var scrollLeft = scrollLeftForDocument(document); | 694 var scrollLeft = scrollLeftForDocument(document); |
| 714 e.style.left = this.horizontalOffset - scrollLeft + 'px'; | 695 e.style.left = this.horizontalOffset - scrollLeft + 'px'; |
| 715 } | 696 } |
| 716 }, | 697 }, |
| 698 |
| 699 /** |
| 700 * Calls the given callback with each registered page. |
| 701 * @param {boolean} includeRootPages Whether the callback should be called |
| 702 * for the root pages. |
| 703 * @param {function(cr.ui.pageManager.Page)} callback The callback. |
| 704 * @private |
| 705 */ |
| 706 forEachPage_: function(includeRootPages, callback) { |
| 707 var pageNames = Object.keys(this.registeredOverlayPages); |
| 708 if (includeRootPages) |
| 709 pageNames = Object.keys(this.registeredPages).concat(pageNames); |
| 710 |
| 711 pageNames.forEach(function(name) { |
| 712 callback.call(this, this.registeredOverlayPages[name] || |
| 713 this.registeredPages[name]); |
| 714 }, this); |
| 715 }, |
| 717 }; | 716 }; |
| 718 | 717 |
| 719 /** | 718 /** |
| 720 * An observer of PageManager. | 719 * An observer of PageManager. |
| 721 * @interface | 720 * @interface |
| 722 */ | 721 */ |
| 723 PageManager.Observer = function() {} | 722 PageManager.Observer = function() {} |
| 724 | 723 |
| 725 PageManager.Observer.prototype = { | 724 PageManager.Observer.prototype = { |
| 726 /** | 725 /** |
| (...skipping 14 matching lines...) Expand all Loading... |
| 741 * @param {boolean} replace If true, allow no history events to be created. | 740 * @param {boolean} replace If true, allow no history events to be created. |
| 742 */ | 741 */ |
| 743 updateHistory: function(path, replace) {}, | 742 updateHistory: function(path, replace) {}, |
| 744 }; | 743 }; |
| 745 | 744 |
| 746 // Export | 745 // Export |
| 747 return { | 746 return { |
| 748 PageManager: PageManager | 747 PageManager: PageManager |
| 749 }; | 748 }; |
| 750 }); | 749 }); |
| OLD | NEW |