Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(124)

Side by Side Diff: chrome/browser/resources/options/personal_options.js

Issue 7400032: Multi-profile WebUI settings (Closed) Base URL: http://git.chromium.org/git/chromium.git@trunk
Patch Set: profiles_icon_list.js -> profiles_icon_grid.js Created 9 years, 5 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
OLDNEW
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 var OptionsPage = options.OptionsPage; 7 var OptionsPage = options.OptionsPage;
8 var ArrayDataModel = cr.ui.ArrayDataModel;
8 9
9 // State variables. 10 // State variables.
10 var syncEnabled = false; 11 var syncEnabled = false;
11 var syncSetupCompleted = false; 12 var syncSetupCompleted = false;
12 13
13 /** 14 /**
14 * Encapsulated handling of personal options page. 15 * Encapsulated handling of personal options page.
15 * @constructor 16 * @constructor
16 */ 17 */
17 function PersonalOptions() { 18 function PersonalOptions() {
18 OptionsPage.call(this, 'personal', 19 OptionsPage.call(this, 'personal',
19 templateData.personalPageTabTitle, 20 templateData.personalPageTabTitle,
20 'personal-page'); 21 'personal-page');
21 } 22 }
22 23
23 cr.addSingletonGetter(PersonalOptions); 24 cr.addSingletonGetter(PersonalOptions);
24 25
25 PersonalOptions.prototype = { 26 PersonalOptions.prototype = {
26 // Inherit PersonalOptions from OptionsPage. 27 // Inherit PersonalOptions from OptionsPage.
27 __proto__: options.OptionsPage.prototype, 28 __proto__: options.OptionsPage.prototype,
28 29
29 // Initialize PersonalOptions page. 30 // Initialize PersonalOptions page.
30 initializePage: function() { 31 initializePage: function() {
31 // Call base class implementation to start preference initialization. 32 // Call base class implementation to start preference initialization.
32 OptionsPage.prototype.initializePage.call(this); 33 OptionsPage.prototype.initializePage.call(this);
33 34
34 var self = this; 35 var self = this;
36
37 // Sync.
35 $('sync-action-link').onclick = function(event) { 38 $('sync-action-link').onclick = function(event) {
36 SyncSetupOverlay.showErrorUI(); 39 SyncSetupOverlay.showErrorUI();
37 }; 40 };
38 $('start-stop-sync').onclick = function(event) { 41 $('start-stop-sync').onclick = function(event) {
39 if (self.syncSetupCompleted) 42 if (self.syncSetupCompleted)
40 SyncSetupOverlay.showStopSyncingUI(); 43 SyncSetupOverlay.showStopSyncingUI();
41 else 44 else
42 SyncSetupOverlay.showSetupUI(); 45 SyncSetupOverlay.showSetupUI();
43 }; 46 };
44 $('customize-sync').onclick = function(event) { 47 $('customize-sync').onclick = function(event) {
45 SyncSetupOverlay.showSetupUI(); 48 SyncSetupOverlay.showSetupUI();
46 }; 49 };
50
51 // Profiles.
52 var profilesList = $('profiles-list');
53 options.personal_options.ProfileList.decorate(profilesList);
54 profilesList.autoExpands = true;
55
56 profilesList.onchange = function(event) {
57 var selectedProfile = profilesList.selectedItem;
58 var hasSelection = selectedProfile != null;
59 $('profiles-manage').disabled = !hasSelection;
60 $('profiles-delete').disabled = !hasSelection;
61 };
62 $('profiles-create').onclick = function(event) {
63 chrome.send('createProfile');
64 };
65 $('profiles-manage').onclick = function(event) {
66 var selectedProfile = self.getSelectedProfileItem_();
67 if (selectedProfile)
68 ManageProfileOverlay.showManageDialog(selectedProfile);
69 };
70 $('profiles-delete').onclick = function(event) {
71 var selectedProfile = self.getSelectedProfileItem_();
72 if (selectedProfile)
73 ManageProfileOverlay.showDeleteDialog(selectedProfile);
74 };
75
76 // Passwords.
47 $('manage-passwords').onclick = function(event) { 77 $('manage-passwords').onclick = function(event) {
48 OptionsPage.navigateToPage('passwords'); 78 OptionsPage.navigateToPage('passwords');
49 OptionsPage.showTab($('passwords-nav-tab')); 79 OptionsPage.showTab($('passwords-nav-tab'));
50 chrome.send('coreOptionsUserMetricsAction', 80 chrome.send('coreOptionsUserMetricsAction',
51 ['Options_ShowPasswordManager']); 81 ['Options_ShowPasswordManager']);
52 }; 82 };
83
84 // Autofill.
53 $('autofill-settings').onclick = function(event) { 85 $('autofill-settings').onclick = function(event) {
54 OptionsPage.navigateToPage('autofill'); 86 OptionsPage.navigateToPage('autofill');
55 chrome.send('coreOptionsUserMetricsAction', 87 chrome.send('coreOptionsUserMetricsAction',
56 ['Options_ShowAutofillSettings']); 88 ['Options_ShowAutofillSettings']);
57 }; 89 };
90
91 // Appearance.
58 $('themes-reset').onclick = function(event) { 92 $('themes-reset').onclick = function(event) {
59 chrome.send('themesReset'); 93 chrome.send('themesReset');
60 }; 94 };
61 95
62 if (!cr.isChromeOS) { 96 if (!cr.isChromeOS) {
63 $('import-data').onclick = function(event) { 97 $('import-data').onclick = function(event) {
64 // Make sure that any previous import success message is hidden, and 98 // Make sure that any previous import success message is hidden, and
65 // we're showing the UI to import further data. 99 // we're showing the UI to import further data.
66 $('import-data-configure').hidden = false; 100 $('import-data-configure').hidden = false;
67 $('import-data-success').hidden = true; 101 $('import-data-success').hidden = true;
(...skipping 70 matching lines...) Expand 10 before | Expand all | Expand 10 after
138 }, 172 },
139 173
140 setSyncActionLinkLabel_: function(status) { 174 setSyncActionLinkLabel_: function(status) {
141 $('sync-action-link').textContent = status; 175 $('sync-action-link').textContent = status;
142 176
143 // link-button does is not zero-area when the contents of the button are 177 // link-button does is not zero-area when the contents of the button are
144 // empty, so explicitly hide the element. 178 // empty, so explicitly hide the element.
145 $('sync-action-link').hidden = !status.length; 179 $('sync-action-link').hidden = !status.length;
146 }, 180 },
147 181
182 /**
183 * Display or hide the profiles section of the page. This is used for
184 * multi-profile settings.
185 * @param {boolean} visible True to show the section.
186 * @private
187 */
148 setProfilesSectionVisible_: function(visible) { 188 setProfilesSectionVisible_: function(visible) {
149 $('profiles-create').hidden = !visible; 189 $('profiles-section').hidden = !visible;
150 }, 190 },
151 191
152 setNewProfileButtonEnabled_: function(enabled) { 192 /**
153 $('new-profile').disabled = !enabled; 193 * Get the selected profile item from the profile list. This also works
154 if (enabled) 194 * correctly if the list is not displayed.
155 $('profiles-create').classList.remove('disabled'); 195 * @return {Object} the profile item object, or null if nothing is selected.
156 else 196 * @private
157 $('profiles-create').classList.add('disabled'); 197 */
198 getSelectedProfileItem_: function() {
199 var profilesList = $('profiles-list');
200 if (profilesList.hidden) {
201 if (profilesList.dataModel.length > 0)
202 return profilesList.dataModel.item(0);
203 } else {
204 return profilesList.selectedItem;
205 }
206 return null;
207 },
208
209 /**
210 * Display the correct dialog layout, depending on how many profiles are
211 * available.
212 * @param {number} numProfiles The number of profiles to display.
213 */
214 setProfileViewSingle_: function(numProfiles) {
215 $('profiles-list').hidden = numProfiles <= 1;
216 $('profiles-manage').hidden = numProfiles <= 1;
217 $('profiles-delete').hidden = numProfiles <= 1;
218 },
219
220 /**
221 * Adds all |profiles| to the list.
222 * @param {Array.<Object>} An array of profile info objects.
223 * each object is of the form:
224 * profileInfo = {
225 * name: "Profile Name",
226 * iconURL: "chrome://path/to/icon/image",
227 * filePath: "/path/to/profile/data/on/disk",
228 * isCurrentProfile: false
229 * };
230 */
231 setProfilesInfo_: function(profiles) {
232 this.setProfileViewSingle_(profiles.length);
233 // add it to the list, even if the list is hidden so we can access it
234 // later.
235 $('profiles-list').dataModel = new ArrayDataModel(profiles);
158 }, 236 },
159 237
160 setStartStopButtonVisible_: function(visible) { 238 setStartStopButtonVisible_: function(visible) {
161 $('start-stop-sync').hidden = !visible; 239 $('start-stop-sync').hidden = !visible;
162 }, 240 },
163 241
164 setStartStopButtonEnabled_: function(enabled) { 242 setStartStopButtonEnabled_: function(enabled) {
165 $('start-stop-sync').disabled = !enabled; 243 $('start-stop-sync').disabled = !enabled;
166 }, 244 },
167 245
(...skipping 53 matching lines...) Expand 10 before | Expand all | Expand 10 after
221 299
222 // Forward public APIs to private implementations. 300 // Forward public APIs to private implementations.
223 [ 301 [
224 'setSyncEnabled', 302 'setSyncEnabled',
225 'setSyncSetupCompleted', 303 'setSyncSetupCompleted',
226 'setAccountPicture', 304 'setAccountPicture',
227 'setSyncStatus', 305 'setSyncStatus',
228 'setSyncStatusErrorVisible', 306 'setSyncStatusErrorVisible',
229 'setSyncActionLinkEnabled', 307 'setSyncActionLinkEnabled',
230 'setSyncActionLinkLabel', 308 'setSyncActionLinkLabel',
309 'setProfilesInfo',
231 'setProfilesSectionVisible', 310 'setProfilesSectionVisible',
232 'setNewProfileButtonEnabled',
233 'setStartStopButtonVisible', 311 'setStartStopButtonVisible',
234 'setStartStopButtonEnabled', 312 'setStartStopButtonEnabled',
235 'setStartStopButtonLabel', 313 'setStartStopButtonLabel',
236 'setGtkThemeButtonEnabled', 314 'setGtkThemeButtonEnabled',
237 'setThemesResetButtonEnabled', 315 'setThemesResetButtonEnabled',
238 'hideSyncSection', 316 'hideSyncSection',
239 'setRegisteredDataTypes', 317 'setRegisteredDataTypes',
240 ].forEach(function(name) { 318 ].forEach(function(name) {
241 PersonalOptions[name] = function(value) { 319 PersonalOptions[name] = function(value) {
242 PersonalOptions.getInstance()[name + '_'](value); 320 PersonalOptions.getInstance()[name + '_'](value);
243 }; 321 };
244 }); 322 });
245 323
246 // Export 324 // Export
247 return { 325 return {
248 PersonalOptions: PersonalOptions 326 PersonalOptions: PersonalOptions
249 }; 327 };
250 328
251 }); 329 });
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698