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

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: Notify when deleting profile from cache 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
James Hawkins 2011/07/19 20:22:09 Sync. Capitalize comment sentences (or word) and
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.addEventListener('change', function(event) {
James Hawkins 2011/07/19 20:22:09 onchange = function(...
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('profilesCreate');
64 };
65 $('profiles-manage').onclick = function(event) {
66 var selectedProfile = self.getSelectedProfileItem_();
67 if (selectedProfile) {
68 ProfilesManageOverlay.show(selectedProfile);
69 }
70 };
71 $('profiles-delete').onclick = function(event) {
72 var selectedProfile = self.getSelectedProfileItem_();
73 if (!selectedProfile)
74 return;
75
76 ProfilesManageOverlay.showDeleteDialog(selectedProfile);
77 chrome.send('profilesDeleteShowWarnings', selectedProfile.filePath);
78 };
79
80 // passwords
47 $('manage-passwords').onclick = function(event) { 81 $('manage-passwords').onclick = function(event) {
48 OptionsPage.navigateToPage('passwords'); 82 OptionsPage.navigateToPage('passwords');
49 OptionsPage.showTab($('passwords-nav-tab')); 83 OptionsPage.showTab($('passwords-nav-tab'));
50 chrome.send('coreOptionsUserMetricsAction', 84 chrome.send('coreOptionsUserMetricsAction',
51 ['Options_ShowPasswordManager']); 85 ['Options_ShowPasswordManager']);
52 }; 86 };
87
88 // autofill
53 $('autofill-settings').onclick = function(event) { 89 $('autofill-settings').onclick = function(event) {
54 OptionsPage.navigateToPage('autofill'); 90 OptionsPage.navigateToPage('autofill');
55 chrome.send('coreOptionsUserMetricsAction', 91 chrome.send('coreOptionsUserMetricsAction',
56 ['Options_ShowAutofillSettings']); 92 ['Options_ShowAutofillSettings']);
57 }; 93 };
94
95 // appearance
58 $('themes-reset').onclick = function(event) { 96 $('themes-reset').onclick = function(event) {
59 chrome.send('themesReset'); 97 chrome.send('themesReset');
60 }; 98 };
61 99
62 if (!cr.isChromeOS) { 100 if (!cr.isChromeOS) {
63 $('import-data').onclick = function(event) { 101 $('import-data').onclick = function(event) {
64 // Make sure that any previous import success message is hidden, and 102 // Make sure that any previous import success message is hidden, and
65 // we're showing the UI to import further data. 103 // we're showing the UI to import further data.
66 $('import-data-configure').hidden = false; 104 $('import-data-configure').hidden = false;
67 $('import-data-success').hidden = true; 105 $('import-data-success').hidden = true;
(...skipping 98 matching lines...) Expand 10 before | Expand all | Expand 10 after
166 }, 204 },
167 205
168 setSyncActionLinkLabel_: function(status) { 206 setSyncActionLinkLabel_: function(status) {
169 $('sync-action-link').textContent = status; 207 $('sync-action-link').textContent = status;
170 208
171 // link-button does is not zero-area when the contents of the button are 209 // link-button does is not zero-area when the contents of the button are
172 // empty, so explicitly hide the element. 210 // empty, so explicitly hide the element.
173 $('sync-action-link').hidden = !status.length; 211 $('sync-action-link').hidden = !status.length;
174 }, 212 },
175 213
214 /**
215 * Display or hide the profiles section of the page. This is used for
216 * multi-profile settings.
217 * @param {boolean} visible True to show the section.
218 * @private
219 */
176 setProfilesSectionVisible_: function(visible) { 220 setProfilesSectionVisible_: function(visible) {
177 $('profiles-create').hidden = !visible; 221 $('profiles-section').hidden = !visible;
178 }, 222 },
179 223
180 setNewProfileButtonEnabled_: function(enabled) { 224 /**
181 $('new-profile').disabled = !enabled; 225 * Get the selected profile item from the profile list. This also works
182 if (enabled) 226 * correctly if the list is not displayed.
183 $('profiles-create').classList.remove('disabled'); 227 * @return {Object} the profile item object, or null if nothing is selected.
184 else 228 * @private
185 $('profiles-create').classList.add('disabled'); 229 */
230 getSelectedProfileItem_: function() {
231 var profilesList = $('profiles-list');
232 if (profilesList.hidden) {
233 if (profilesList.dataModel.length > 0)
234 return profilesList.dataModel.item(0);
235 } else {
236 return profilesList.selectedItem;
237 }
238 return null;
239 },
240
241 /**
242 * Delete the profile given by |profileInfo|.
243 * @param {Object} profileInfo The profile info object of the profile that
244 * should be deleted.
245 */
246 deleteProfile_: function(profileInfo) {
247 chrome.send('profilesDelete', [profileInfo.filePath]);
James Hawkins 2011/07/19 20:22:09 rename: deleteProfile
248 },
249
250 /**
251 * Display the correct dialog layout, depending on how many profiles are
252 * available.
253 * @param {number} The number of profiles to display.
James Hawkins 2011/07/19 20:22:09 @param {number} numProfiles The...
254 */
255 setProfileViewSingle_: function(numProfiles) {
256 $('profiles-list').hidden = numProfiles <= 1;
James Hawkins 2011/07/19 20:22:09 You can do the same for profiles-manage and profil
257 if (numProfiles <= 1) {
258 $('profiles-manage').hidden = true;
259 $('profiles-delete').hidden = true;
260 } else {
261 $('profiles-list').redraw();
262 $('profiles-manage').hidden = false;
263 $('profiles-delete').hidden = false;
264 }
265 },
266
267 /**
268 * Called by the C++ handler. Adds all |profiles| to the list.
James Hawkins 2011/07/19 20:22:09 No need to specify the first sentence.
269 * @param {Array.<Object>} An array of profile info objects.
270 * each object is like:
James Hawkins 2011/07/19 20:22:09 s/like/of the form/
271 * profileInfo = {
272 * name: "Profile Name",
273 * iconURL: "chrome://path/to/icon/image",
274 * filePath: "/path/to/profile/data/on/disk",
275 * isCurrentProfile: false
276 * };
277 */
278 setProfilesInfo_: function(profiles) {
279 this.setProfileViewSingle_(profiles.length);
280 // add it to the list, even if the list is hidden so we can access it
281 // later.
282 $('profiles-list').dataModel = new ArrayDataModel(profiles);
186 }, 283 },
187 284
188 setStartStopButtonVisible_: function(visible) { 285 setStartStopButtonVisible_: function(visible) {
189 $('start-stop-sync').hidden = !visible; 286 $('start-stop-sync').hidden = !visible;
190 }, 287 },
191 288
192 setStartStopButtonEnabled_: function(enabled) { 289 setStartStopButtonEnabled_: function(enabled) {
193 $('start-stop-sync').disabled = !enabled; 290 $('start-stop-sync').disabled = !enabled;
194 }, 291 },
195 292
(...skipping 53 matching lines...) Expand 10 before | Expand all | Expand 10 after
249 346
250 // Forward public APIs to private implementations. 347 // Forward public APIs to private implementations.
251 [ 348 [
252 'setSyncEnabled', 349 'setSyncEnabled',
253 'setSyncSetupCompleted', 350 'setSyncSetupCompleted',
254 'setAccountPicture', 351 'setAccountPicture',
255 'setSyncStatus', 352 'setSyncStatus',
256 'setSyncStatusErrorVisible', 353 'setSyncStatusErrorVisible',
257 'setSyncActionLinkEnabled', 354 'setSyncActionLinkEnabled',
258 'setSyncActionLinkLabel', 355 'setSyncActionLinkLabel',
356 'setProfilesInfo',
259 'setProfilesSectionVisible', 357 'setProfilesSectionVisible',
260 'setNewProfileButtonEnabled',
261 'setStartStopButtonVisible', 358 'setStartStopButtonVisible',
262 'setStartStopButtonEnabled', 359 'setStartStopButtonEnabled',
263 'setStartStopButtonLabel', 360 'setStartStopButtonLabel',
264 'setGtkThemeButtonEnabled', 361 'setGtkThemeButtonEnabled',
265 'setThemesResetButtonEnabled', 362 'setThemesResetButtonEnabled',
266 'hideSyncSection', 363 'hideSyncSection',
267 'setRegisteredDataTypes', 364 'setRegisteredDataTypes',
268 ].forEach(function(name) { 365 ].forEach(function(name) {
269 PersonalOptions[name] = function(value) { 366 PersonalOptions[name] = function(value) {
270 PersonalOptions.getInstance()[name + '_'](value); 367 PersonalOptions.getInstance()[name + '_'](value);
271 }; 368 };
272 }); 369 });
273 370
274 // Export 371 // Export
275 return { 372 return {
276 PersonalOptions: PersonalOptions 373 PersonalOptions: PersonalOptions
277 }; 374 };
278 375
279 }); 376 });
280 377
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698