OLD | NEW |
1 // Copyright (c) 2011 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2011 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('options', function() { | 5 cr.define('options', function() { |
6 ///////////////////////////////////////////////////////////////////////////// | 6 ///////////////////////////////////////////////////////////////////////////// |
7 // OptionsPage class: | 7 // OptionsPage class: |
8 | 8 |
9 /** | 9 /** |
10 * Base class for options page. | 10 * Base class for options page. |
(...skipping 100 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
111 // Notify pages if they will be hidden. | 111 // Notify pages if they will be hidden. |
112 for (var name in this.registeredPages) { | 112 for (var name in this.registeredPages) { |
113 var page = this.registeredPages[name]; | 113 var page = this.registeredPages[name]; |
114 if (!page.parentPage && isRootPageLocked) | 114 if (!page.parentPage && isRootPageLocked) |
115 continue; | 115 continue; |
116 if (page.willHidePage && name != pageName && | 116 if (page.willHidePage && name != pageName && |
117 !page.isAncestorOfPage(targetPage)) | 117 !page.isAncestorOfPage(targetPage)) |
118 page.willHidePage(); | 118 page.willHidePage(); |
119 } | 119 } |
120 | 120 |
| 121 var prevVisible = false; |
| 122 |
121 // Update visibilities to show only the hierarchy of the target page. | 123 // Update visibilities to show only the hierarchy of the target page. |
122 for (var name in this.registeredPages) { | 124 for (var name in this.registeredPages) { |
123 var page = this.registeredPages[name]; | 125 var page = this.registeredPages[name]; |
124 if (!page.parentPage && isRootPageLocked) | 126 if (!page.parentPage && isRootPageLocked) |
125 continue; | 127 continue; |
| 128 prevVisible = page.visible; |
126 page.visible = name == pageName || | 129 page.visible = name == pageName || |
127 (!document.documentElement.classList.contains('hide-menu') && | 130 (!document.documentElement.classList.contains('hide-menu') && |
128 page.isAncestorOfPage(targetPage)); | 131 page.isAncestorOfPage(targetPage)); |
129 } | 132 } |
130 | 133 |
131 // Update the history and current location. | 134 // Update the history and current location. |
132 if (updateHistory) | 135 if (updateHistory) |
133 this.updateHistoryState_(); | 136 this.updateHistoryState_(); |
134 | 137 |
135 // Always update the page title. | 138 // Always update the page title. |
136 document.title = targetPage.title; | 139 document.title = targetPage.title; |
137 | 140 |
138 // Notify pages if they were shown. | 141 // Notify pages if they were shown. |
139 for (var name in this.registeredPages) { | 142 for (var name in this.registeredPages) { |
140 var page = this.registeredPages[name]; | 143 var page = this.registeredPages[name]; |
141 if (!page.parentPage && isRootPageLocked) | 144 if (!page.parentPage && isRootPageLocked) |
142 continue; | 145 continue; |
143 if (page.didShowPage && (name == pageName || | 146 if (!prevVisible && page.didShowPage && (name == pageName || |
144 page.isAncestorOfPage(targetPage))) | 147 page.isAncestorOfPage(targetPage))) |
145 page.didShowPage(); | 148 page.didShowPage(); |
146 } | 149 } |
147 }; | 150 }; |
148 | 151 |
149 /** | 152 /** |
150 * Updates the visibility and stacking order of the subpage backdrop | 153 * Updates the visibility and stacking order of the subpage backdrop |
151 * according to which subpage is topmost and visible. | 154 * according to which subpage is topmost and visible. |
152 * @private | 155 * @private |
153 */ | 156 */ |
(...skipping 46 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
200 * @return {boolean} whether we showed an overlay. | 203 * @return {boolean} whether we showed an overlay. |
201 */ | 204 */ |
202 OptionsPage.showOverlay_ = function(overlayName, rootPage) { | 205 OptionsPage.showOverlay_ = function(overlayName, rootPage) { |
203 var overlay = this.registeredOverlayPages[overlayName.toLowerCase()]; | 206 var overlay = this.registeredOverlayPages[overlayName.toLowerCase()]; |
204 if (!overlay || !overlay.canShowPage()) | 207 if (!overlay || !overlay.canShowPage()) |
205 return false; | 208 return false; |
206 | 209 |
207 if ((!rootPage || !rootPage.sticky) && overlay.parentPage) | 210 if ((!rootPage || !rootPage.sticky) && overlay.parentPage) |
208 this.showPageByName(overlay.parentPage.name, false); | 211 this.showPageByName(overlay.parentPage.name, false); |
209 | 212 |
210 overlay.visible = true; | 213 if (!overlay.visible) { |
211 if (overlay.didShowPage) overlay.didShowPage(); | 214 overlay.visible = true; |
| 215 if (overlay.didShowPage) overlay.didShowPage(); |
| 216 } |
| 217 |
212 return true; | 218 return true; |
213 }; | 219 }; |
214 | 220 |
215 /** | 221 /** |
216 * Returns whether or not an overlay is visible. | 222 * Returns whether or not an overlay is visible. |
217 * @return {boolean} True if an overlay is visible. | 223 * @return {boolean} True if an overlay is visible. |
218 * @private | 224 * @private |
219 */ | 225 */ |
220 OptionsPage.isOverlayVisible_ = function() { | 226 OptionsPage.isOverlayVisible_ = function() { |
221 return this.getVisibleOverlay_() != null; | 227 return this.getVisibleOverlay_() != null; |
222 }; | 228 }; |
223 | 229 |
224 /** | 230 /** |
225 * @return {boolean} True if the visible overlay should be closed. | |
226 * @private | |
227 */ | |
228 OptionsPage.shouldCloseOverlay_ = function() { | |
229 var overlay = this.getVisibleOverlay_(); | |
230 return overlay && overlay.shouldClose(); | |
231 }; | |
232 | |
233 /** | |
234 * Returns the currently visible overlay, or null if no page is visible. | 231 * Returns the currently visible overlay, or null if no page is visible. |
235 * @return {OptionPage} The visible overlay. | 232 * @return {OptionPage} The visible overlay. |
236 */ | 233 */ |
237 OptionsPage.getVisibleOverlay_ = function() { | 234 OptionsPage.getVisibleOverlay_ = function() { |
238 for (var name in this.registeredOverlayPages) { | 235 for (var name in this.registeredOverlayPages) { |
239 var page = this.registeredOverlayPages[name]; | 236 var page = this.registeredOverlayPages[name]; |
240 if (page.visible) | 237 if (page.visible) |
241 return page; | 238 return page; |
242 } | 239 } |
243 return null; | 240 return null; |
(...skipping 495 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
739 }; | 736 }; |
740 | 737 |
741 /** | 738 /** |
742 * A function to handle key press events. | 739 * A function to handle key press events. |
743 * @return {Event} a keydown event. | 740 * @return {Event} a keydown event. |
744 * @private | 741 * @private |
745 */ | 742 */ |
746 OptionsPage.keyDownEventHandler_ = function(event) { | 743 OptionsPage.keyDownEventHandler_ = function(event) { |
747 // Close the top overlay or sub-page on esc. | 744 // Close the top overlay or sub-page on esc. |
748 if (event.keyCode == 27) { // Esc | 745 if (event.keyCode == 27) { // Esc |
749 if (this.isOverlayVisible_()) { | 746 if (this.isOverlayVisible_()) |
750 if (this.shouldCloseOverlay_()) | 747 this.closeOverlay(); |
751 this.closeOverlay(); | 748 else |
752 } else { | |
753 this.closeTopSubPage_(); | 749 this.closeTopSubPage_(); |
754 } | |
755 } | 750 } |
756 }; | 751 }; |
757 | 752 |
758 OptionsPage.setClearPluginLSODataEnabled = function(enabled) { | 753 OptionsPage.setClearPluginLSODataEnabled = function(enabled) { |
759 if (enabled) { | 754 if (enabled) { |
760 document.documentElement.setAttribute( | 755 document.documentElement.setAttribute( |
761 'flashPluginSupportsClearSiteData', ''); | 756 'flashPluginSupportsClearSiteData', ''); |
762 } else { | 757 } else { |
763 document.documentElement.removeAttribute( | 758 document.documentElement.removeAttribute( |
764 'flashPluginSupportsClearSiteData'); | 759 'flashPluginSupportsClearSiteData'); |
(...skipping 236 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1001 return false; | 996 return false; |
1002 }, | 997 }, |
1003 | 998 |
1004 /** | 999 /** |
1005 * Whether it should be possible to show the page. | 1000 * Whether it should be possible to show the page. |
1006 * @return {boolean} True if the page should be shown | 1001 * @return {boolean} True if the page should be shown |
1007 */ | 1002 */ |
1008 canShowPage: function() { | 1003 canShowPage: function() { |
1009 return true; | 1004 return true; |
1010 }, | 1005 }, |
1011 | |
1012 /** | |
1013 * Whether an overlay should be closed. Used by overlay implementation to | |
1014 * handle special closing behaviors. | |
1015 * @return {boolean} True if the overlay should be closed. | |
1016 */ | |
1017 shouldClose: function() { | |
1018 return true; | |
1019 }, | |
1020 }; | 1006 }; |
1021 | 1007 |
1022 // Export | 1008 // Export |
1023 return { | 1009 return { |
1024 OptionsPage: OptionsPage | 1010 OptionsPage: OptionsPage |
1025 }; | 1011 }; |
1026 }); | 1012 }); |
OLD | NEW |