| OLD | NEW |
| (Empty) |
| 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 | |
| 3 // found in the LICENSE file. | |
| 4 | |
| 5 cr.define('options', function() { | |
| 6 | |
| 7 var OptionsPage = options.OptionsPage; | |
| 8 | |
| 9 // State variables. | |
| 10 var syncEnabled = false; | |
| 11 var syncSetupCompleted = false; | |
| 12 | |
| 13 /** | |
| 14 * Encapsulated handling of personal options page. | |
| 15 * @constructor | |
| 16 */ | |
| 17 function PersonalOptions() { | |
| 18 OptionsPage.call(this, 'personal', | |
| 19 templateData.personalPageTabTitle, | |
| 20 'personal-page'); | |
| 21 } | |
| 22 | |
| 23 cr.addSingletonGetter(PersonalOptions); | |
| 24 | |
| 25 PersonalOptions.prototype = { | |
| 26 // Inherit PersonalOptions from OptionsPage. | |
| 27 __proto__: options.OptionsPage.prototype, | |
| 28 | |
| 29 // Initialize PersonalOptions page. | |
| 30 initializePage: function() { | |
| 31 // Call base class implementation to start preference initialization. | |
| 32 OptionsPage.prototype.initializePage.call(this); | |
| 33 | |
| 34 var self = this; | |
| 35 $('sync-action-link').onclick = function(event) { | |
| 36 chrome.send('showSyncActionDialog'); | |
| 37 }; | |
| 38 $('start-stop-sync').onclick = function(event) { | |
| 39 if (self.syncSetupCompleted) | |
| 40 self.showStopSyncingOverlay_(); | |
| 41 else | |
| 42 chrome.send('showSyncLoginDialog'); | |
| 43 }; | |
| 44 $('customize-sync').onclick = function(event) { | |
| 45 chrome.send('showCustomizeSyncDialog'); | |
| 46 }; | |
| 47 $('privacy-dashboard-link').onclick = function(event) { | |
| 48 chrome.send('openPrivacyDashboardTabAndActivate'); | |
| 49 }; | |
| 50 $('manage-passwords').onclick = function(event) { | |
| 51 OptionsPage.navigateToPage('passwords'); | |
| 52 OptionsPage.showTab($('passwords-nav-tab')); | |
| 53 chrome.send('coreOptionsUserMetricsAction', | |
| 54 ['Options_ShowPasswordManager']); | |
| 55 }; | |
| 56 $('autofill-settings').onclick = function(event) { | |
| 57 OptionsPage.navigateToPage('autofill'); | |
| 58 chrome.send('coreOptionsUserMetricsAction', | |
| 59 ['Options_ShowAutofillSettings']); | |
| 60 }; | |
| 61 $('themes-reset').onclick = function(event) { | |
| 62 chrome.send('themesReset'); | |
| 63 }; | |
| 64 | |
| 65 if (!cr.isChromeOS) { | |
| 66 $('import-data').onclick = function(event) { | |
| 67 OptionsPage.navigateToPage('importData'); | |
| 68 chrome.send('coreOptionsUserMetricsAction', ['Import_ShowDlg']); | |
| 69 }; | |
| 70 | |
| 71 if ($('themes-GTK-button')) { | |
| 72 $('themes-GTK-button').onclick = function(event) { | |
| 73 chrome.send('themesSetGTK'); | |
| 74 }; | |
| 75 } | |
| 76 } else { | |
| 77 $('change-picture-button').onclick = function(event) { | |
| 78 OptionsPage.navigateToPage('changePicture'); | |
| 79 }; | |
| 80 chrome.send('loadAccountPicture'); | |
| 81 } | |
| 82 | |
| 83 if (cr.commandLine.options['--bwsi']) { | |
| 84 // Disable the screen lock checkbox for the guest mode. | |
| 85 $('enable-screen-lock').disabled = true; | |
| 86 } | |
| 87 | |
| 88 if (PersonalOptions.disablePasswordManagement()) { | |
| 89 $('passwords-offersave').disabled = true; | |
| 90 $('passwords-neversave').disabled = true; | |
| 91 $('passwords-offersave').value = false; | |
| 92 $('passwords-neversave').value = true; | |
| 93 $('manage-passwords').disabled = true; | |
| 94 } | |
| 95 }, | |
| 96 | |
| 97 showStopSyncingOverlay_: function() { | |
| 98 AlertOverlay.show(localStrings.getString('stop_syncing_title'), | |
| 99 localStrings.getString('stop_syncing_explanation'), | |
| 100 localStrings.getString('stop_syncing_confirm'), | |
| 101 localStrings.getString('cancel'), | |
| 102 function() { chrome.send('stopSyncing'); }); | |
| 103 }, | |
| 104 | |
| 105 setElementVisible_: function(element, visible) { | |
| 106 element.hidden = !visible; | |
| 107 if (visible) | |
| 108 element.classList.remove('hidden'); | |
| 109 else | |
| 110 element.classList.add('hidden'); | |
| 111 }, | |
| 112 | |
| 113 setSyncEnabled_: function(enabled) { | |
| 114 this.syncEnabled = enabled; | |
| 115 }, | |
| 116 | |
| 117 setSyncSetupCompleted_: function(completed) { | |
| 118 this.syncSetupCompleted = completed; | |
| 119 this.setElementVisible_($('customize-sync'), completed); | |
| 120 $('privacy-dashboard-link').hidden = !completed; | |
| 121 }, | |
| 122 | |
| 123 setAccountPicture_: function(image) { | |
| 124 $('account-picture').src = image; | |
| 125 }, | |
| 126 | |
| 127 setSyncStatus_: function(status) { | |
| 128 var statusSet = status != ''; | |
| 129 $('sync-overview').hidden = statusSet; | |
| 130 $('sync-status').hidden = !statusSet; | |
| 131 $('sync-status-text').textContent = status; | |
| 132 }, | |
| 133 | |
| 134 setSyncStatusErrorVisible_: function(visible) { | |
| 135 visible ? $('sync-status').classList.add('sync-error') : | |
| 136 $('sync-status').classList.remove('sync-error'); | |
| 137 }, | |
| 138 | |
| 139 setSyncActionLinkEnabled_: function(enabled) { | |
| 140 $('sync-action-link').disabled = !enabled; | |
| 141 }, | |
| 142 | |
| 143 setSyncActionLinkLabel_: function(status) { | |
| 144 $('sync-action-link').textContent = status; | |
| 145 | |
| 146 // link-button does is not zero-area when the contents of the button are | |
| 147 // empty, so explicitly hide the element. | |
| 148 this.setElementVisible_($('sync-action-link'), status.length != 0); | |
| 149 }, | |
| 150 | |
| 151 setProfilesSectionVisible_: function(visible) { | |
| 152 this.setElementVisible_($('profiles-create'), visible); | |
| 153 }, | |
| 154 | |
| 155 setNewProfileButtonEnabled_: function(enabled) { | |
| 156 $('new-profile').disabled = !enabled; | |
| 157 if (enabled) | |
| 158 $('profiles-create').classList.remove('disabled'); | |
| 159 else | |
| 160 $('profiles-create').classList.add('disabled'); | |
| 161 }, | |
| 162 | |
| 163 setStartStopButtonVisible_: function(visible) { | |
| 164 this.setElementVisible_($('start-stop-sync'), visible); | |
| 165 }, | |
| 166 | |
| 167 setStartStopButtonEnabled_: function(enabled) { | |
| 168 $('start-stop-sync').disabled = !enabled; | |
| 169 }, | |
| 170 | |
| 171 setStartStopButtonLabel_: function(label) { | |
| 172 $('start-stop-sync').textContent = label; | |
| 173 }, | |
| 174 | |
| 175 setGtkThemeButtonEnabled_: function(enabled) { | |
| 176 if (!cr.isChromeOS && navigator.platform.match(/linux|BSD/i)) { | |
| 177 $('themes-GTK-button').disabled = !enabled; | |
| 178 } | |
| 179 }, | |
| 180 | |
| 181 setThemesResetButtonEnabled_: function(enabled) { | |
| 182 $('themes-reset').disabled = !enabled; | |
| 183 }, | |
| 184 | |
| 185 hideSyncSection_: function() { | |
| 186 this.setElementVisible_($('sync-section'), false); | |
| 187 }, | |
| 188 | |
| 189 /** | |
| 190 * Toggles the visibility of the data type checkboxes based on whether they | |
| 191 * are enabled on not. | |
| 192 * @param {Object} dict A mapping from data type to a boolean indicating | |
| 193 * whether it is enabled. | |
| 194 * @private | |
| 195 */ | |
| 196 setRegisteredDataTypes_: function(dict) { | |
| 197 for (var type in dict) { | |
| 198 if (type.match(/Registered$/) && !dict[type]) { | |
| 199 node = $(type.replace(/([a-z]+)Registered$/i, '$1').toLowerCase() | |
| 200 + '-check'); | |
| 201 if (node) | |
| 202 node.parentNode.style.display = 'none'; | |
| 203 } | |
| 204 } | |
| 205 }, | |
| 206 }; | |
| 207 | |
| 208 /** | |
| 209 * Returns whether the user should be able to manage (view and edit) their | |
| 210 * stored passwords. Password management is disabled in guest mode. | |
| 211 * @return {boolean} True if password management should be disabled. | |
| 212 */ | |
| 213 PersonalOptions.disablePasswordManagement = function() { | |
| 214 return cr.commandLine.options['--bwsi']; | |
| 215 }; | |
| 216 | |
| 217 // Forward public APIs to private implementations. | |
| 218 [ | |
| 219 'setSyncEnabled', | |
| 220 'setSyncSetupCompleted', | |
| 221 'setAccountPicture', | |
| 222 'setSyncStatus', | |
| 223 'setSyncStatusErrorVisible', | |
| 224 'setSyncActionLinkEnabled', | |
| 225 'setSyncActionLinkLabel', | |
| 226 'setProfilesSectionVisible', | |
| 227 'setNewProfileButtonEnabled', | |
| 228 'setStartStopButtonVisible', | |
| 229 'setStartStopButtonEnabled', | |
| 230 'setStartStopButtonLabel', | |
| 231 'setGtkThemeButtonEnabled', | |
| 232 'setThemesResetButtonEnabled', | |
| 233 'hideSyncSection', | |
| 234 'setRegisteredDataTypes', | |
| 235 ].forEach(function(name) { | |
| 236 PersonalOptions[name] = function(value) { | |
| 237 PersonalOptions.getInstance()[name + '_'](value); | |
| 238 }; | |
| 239 }); | |
| 240 | |
| 241 // Export | |
| 242 return { | |
| 243 PersonalOptions: PersonalOptions | |
| 244 }; | |
| 245 | |
| 246 }); | |
| OLD | NEW |