OLD | NEW |
1 // Copyright 2016 The Chromium Authors. All rights reserved. | 1 // Copyright 2016 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('settings', function() { | 5 cr.define('settings', function() { |
6 /** | 6 /** |
7 * Class for navigable routes. May only be instantiated within this file. | 7 * Class for navigable routes. May only be instantiated within this file. |
8 * @constructor | 8 * @constructor |
9 * @param {string} url | 9 * @param {string} url |
10 * @private | 10 * @private |
11 */ | 11 */ |
12 var Route = function(url) { | 12 var Route = function(url) { |
13 this.url = url; | 13 this.url = url; |
14 | 14 |
15 /** @private {?settings.Route} */ | 15 /** @type {?settings.Route} */ |
16 this.parent_ = null; | 16 this.parent = null; |
17 | 17 |
18 // Below are all legacy properties to provide compatibility with the old | 18 // Below are all legacy properties to provide compatibility with the old |
19 // routing system. TODO(tommycli): Remove once routing refactor complete. | 19 // routing system. TODO(tommycli): Remove once routing refactor complete. |
20 this.page = ''; | 20 this.page = ''; |
21 this.section = ''; | 21 this.section = ''; |
22 /** @type {!Array<string>} */ this.subpage = []; | 22 /** @type {!Array<string>} */ this.subpage = []; |
23 }; | 23 }; |
24 | 24 |
25 Route.prototype = { | 25 Route.prototype = { |
26 /** | 26 /** |
27 * Returns a new Route instance that's a child of this route. | 27 * Returns a new Route instance that's a child of this route. |
28 * @param {string} path Extends this route's path if it doesn't contain a | 28 * @param {string} path Extends this route's path if it doesn't contain a |
29 * leading slash. | 29 * leading slash. |
30 * @param {string=} opt_subpageName | 30 * @param {string=} opt_subpageName |
31 * @return {!settings.Route} | 31 * @return {!settings.Route} |
32 * @private | 32 * @private |
33 */ | 33 */ |
34 createChild: function(path, opt_subpageName) { | 34 createChild: function(path, opt_subpageName) { |
35 assert(path); | 35 assert(path); |
36 | 36 |
37 // |path| extends this route's path if it doesn't have a leading slash. | 37 // |path| extends this route's path if it doesn't have a leading slash. |
38 // If it does have a leading slash, it's just set as the new route's URL. | 38 // If it does have a leading slash, it's just set as the new route's URL. |
39 var newUrl = path[0] == '/' ? path : this.url + '/' + path; | 39 var newUrl = path[0] == '/' ? path : this.url + '/' + path; |
40 | 40 |
41 var route = new Route(newUrl); | 41 var route = new Route(newUrl); |
42 route.parent_ = this; | 42 route.parent = this; |
43 route.page = this.page; | 43 route.page = this.page; |
44 route.section = this.section; | 44 route.section = this.section; |
45 route.subpage = this.subpage.slice(); // Shallow copy. | 45 route.subpage = this.subpage.slice(); // Shallow copy. |
46 | 46 |
47 if (opt_subpageName) | 47 if (opt_subpageName) |
48 route.subpage.push(opt_subpageName); | 48 route.subpage.push(opt_subpageName); |
49 | 49 |
50 return route; | 50 return route; |
51 }, | 51 }, |
52 | 52 |
(...skipping 23 matching lines...) Expand all Loading... |
76 route.section = section; | 76 route.section = section; |
77 return route; | 77 return route; |
78 }, | 78 }, |
79 | 79 |
80 /** | 80 /** |
81 * Returns true if this route is a descendant of the parameter. | 81 * Returns true if this route is a descendant of the parameter. |
82 * @param {!settings.Route} route | 82 * @param {!settings.Route} route |
83 * @return {boolean} | 83 * @return {boolean} |
84 */ | 84 */ |
85 isDescendantOf: function(route) { | 85 isDescendantOf: function(route) { |
86 for (var parent = this.parent_; parent != null; parent = parent.parent_) { | 86 for (var parent = this.parent; parent != null; parent = parent.parent) { |
87 if (route == parent) | 87 if (route == parent) |
88 return true; | 88 return true; |
89 } | 89 } |
90 | 90 |
91 return false; | 91 return false; |
92 }, | 92 }, |
93 }; | 93 }; |
94 | 94 |
95 // Abbreviated variable for easier definitions. | 95 // Abbreviated variable for easier definitions. |
96 var r = Route; | 96 var r = Route; |
(...skipping 36 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
133 r.QUICK_UNLOCK_CHOOSE_METHOD = | 133 r.QUICK_UNLOCK_CHOOSE_METHOD = |
134 r.PEOPLE.createChild('/quickUnlock/chooseMethod', | 134 r.PEOPLE.createChild('/quickUnlock/chooseMethod', |
135 'quick-unlock-choose-method'); | 135 'quick-unlock-choose-method'); |
136 r.QUICK_UNLOCK_SETUP_PIN = | 136 r.QUICK_UNLOCK_SETUP_PIN = |
137 r.QUICK_UNLOCK_CHOOSE_METHOD.createChild('/quickUnlock/setupPin', | 137 r.QUICK_UNLOCK_CHOOSE_METHOD.createChild('/quickUnlock/setupPin', |
138 'quick-unlock-setup-pin'); | 138 'quick-unlock-setup-pin'); |
139 r.ACCOUNTS = r.PEOPLE.createChild('/accounts', 'users'); | 139 r.ACCOUNTS = r.PEOPLE.createChild('/accounts', 'users'); |
140 | 140 |
141 r.DEVICE = r.BASIC.createSection('/device', 'device'); | 141 r.DEVICE = r.BASIC.createSection('/device', 'device'); |
142 r.TOUCHPAD = r.DEVICE.createChild('/pointer-overlay', 'touchpad'); | 142 r.TOUCHPAD = r.DEVICE.createChild('/pointer-overlay', 'touchpad'); |
143 r.KEYBARD = r.DEVICE.createChild('/keyboard-overlay', 'keyboard'); | 143 r.KEYBOARD = r.DEVICE.createChild('/keyboard-overlay', 'keyboard'); |
144 r.DISPLAY = r.DEVICE.createChild('/display', 'display'); | 144 r.DISPLAY = r.DEVICE.createChild('/display', 'display'); |
145 </if> | 145 </if> |
146 | 146 |
147 r.PRIVACY = r.ADVANCED.createSection('/privacy', 'privacy'); | 147 r.PRIVACY = r.ADVANCED.createSection('/privacy', 'privacy'); |
148 r.CERTIFICATES = | 148 r.CERTIFICATES = |
149 r.PRIVACY.createChild('/certificates', 'manage-certificates'); | 149 r.PRIVACY.createChild('/certificates', 'manage-certificates'); |
150 r.CLEAR_BROWSER_DATA = | 150 r.CLEAR_BROWSER_DATA = |
151 r.PRIVACY.createDialog('/clearBrowserData', 'clear-browsing-data'); | 151 r.PRIVACY.createDialog('/clearBrowserData', 'clear-browsing-data'); |
152 r.SITE_SETTINGS = r.PRIVACY.createChild('/siteSettings', 'site-settings'); | 152 r.SITE_SETTINGS = r.PRIVACY.createChild('/siteSettings', 'site-settings'); |
153 r.SITE_SETTINGS_ALL = r.SITE_SETTINGS.createChild('all', 'all-sites'); | 153 r.SITE_SETTINGS_ALL = r.SITE_SETTINGS.createChild('all', 'all-sites'); |
(...skipping 105 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
259 r.RESET = r.ADVANCED.createSection('/reset', 'reset'); | 259 r.RESET = r.ADVANCED.createSection('/reset', 'reset'); |
260 | 260 |
261 <if expr="chromeos"> | 261 <if expr="chromeos"> |
262 r.INPUT_METHODS = | 262 r.INPUT_METHODS = |
263 r.LANGUAGES.createChild('/inputMethods', 'manage-input-methods'); | 263 r.LANGUAGES.createChild('/inputMethods', 'manage-input-methods'); |
264 r.DETAILED_BUILD_INFO = | 264 r.DETAILED_BUILD_INFO = |
265 r.ABOUT.createChild('/help/details', 'detailed-build-info'); | 265 r.ABOUT.createChild('/help/details', 'detailed-build-info'); |
266 r.DETAILED_BUILD_INFO.section = 'about'; | 266 r.DETAILED_BUILD_INFO.section = 'about'; |
267 </if> | 267 </if> |
268 | 268 |
| 269 /** |
| 270 * Use this function (and only this function) to navigate within Settings. |
| 271 * This function is set by settings-router once it is created. |
| 272 * @type {?function(!settings.Route):void} |
| 273 */ |
| 274 var navigateTo = null; |
| 275 |
269 return { | 276 return { |
270 Route: Route, | 277 Route: Route, |
| 278 navigateTo: navigateTo, |
271 }; | 279 }; |
272 }); | 280 }); |
OLD | NEW |