| 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 var OptionsPage = options.OptionsPage; | |
| 7 | |
| 8 /** | |
| 9 * ImportDataOverlay class | |
| 10 * Encapsulated handling of the 'Import Data' overlay page. | |
| 11 * @class | |
| 12 */ | |
| 13 function ImportDataOverlay() { | |
| 14 OptionsPage.call(this, | |
| 15 'importData', | |
| 16 templateData.importDataOverlayTabTitle, | |
| 17 'import-data-overlay'); | |
| 18 } | |
| 19 | |
| 20 cr.addSingletonGetter(ImportDataOverlay); | |
| 21 | |
| 22 ImportDataOverlay.prototype = { | |
| 23 // Inherit from OptionsPage. | |
| 24 __proto__: OptionsPage.prototype, | |
| 25 | |
| 26 /** | |
| 27 * Initialize the page. | |
| 28 */ | |
| 29 initializePage: function() { | |
| 30 // Call base class implementation to start preference initialization. | |
| 31 OptionsPage.prototype.initializePage.call(this); | |
| 32 | |
| 33 var self = this; | |
| 34 var checkboxes = | |
| 35 document.querySelectorAll('#import-checkboxes input[type=checkbox]'); | |
| 36 for (var i = 0; i < checkboxes.length; i++) { | |
| 37 checkboxes[i].onchange = function() { | |
| 38 self.validateCommitButton_(); | |
| 39 }; | |
| 40 } | |
| 41 | |
| 42 $('import-browsers').onchange = function() { | |
| 43 self.updateCheckboxes_(); | |
| 44 self.validateCommitButton_(); | |
| 45 }; | |
| 46 | |
| 47 $('import-data-commit').onclick = function() { | |
| 48 chrome.send('importData', [ | |
| 49 String($('import-browsers').selectedIndex), | |
| 50 String($('import-history').checked), | |
| 51 String($('import-favorites').checked), | |
| 52 String($('import-passwords').checked), | |
| 53 String($('import-search').checked)]); | |
| 54 }; | |
| 55 | |
| 56 $('import-data-cancel').onclick = function() { | |
| 57 ImportDataOverlay.dismiss(); | |
| 58 }; | |
| 59 | |
| 60 // Form controls are disabled until the profile list has been loaded. | |
| 61 self.setControlsSensitive_(false); | |
| 62 }, | |
| 63 | |
| 64 /** | |
| 65 * Set enabled and checked state of the commit button. | |
| 66 * @private | |
| 67 */ | |
| 68 validateCommitButton_: function() { | |
| 69 var somethingToImport = | |
| 70 $('import-history').checked || $('import-favorites').checked || | |
| 71 $('import-passwords').checked || $('import-search').checked; | |
| 72 $('import-data-commit').disabled = !somethingToImport; | |
| 73 }, | |
| 74 | |
| 75 /** | |
| 76 * Sets the sensitivity of all the checkboxes and the commit button. | |
| 77 * @private | |
| 78 */ | |
| 79 setControlsSensitive_: function(sensitive) { | |
| 80 var checkboxes = | |
| 81 document.querySelectorAll('#import-checkboxes input[type=checkbox]'); | |
| 82 for (var i = 0; i < checkboxes.length; i++) | |
| 83 this.setUpCheckboxState_(checkboxes[i], sensitive); | |
| 84 $('import-data-commit').disabled = !sensitive; | |
| 85 }, | |
| 86 | |
| 87 /** | |
| 88 * Set enabled and checked states a checkbox element. | |
| 89 * @param {Object} checkbox A checkbox element. | |
| 90 * @param {boolean} enabled The enabled state of the chekbox. | |
| 91 * @private | |
| 92 */ | |
| 93 setUpCheckboxState_: function(checkbox, enabled) { | |
| 94 checkbox.disabled = !enabled; | |
| 95 checkbox.checked = enabled; | |
| 96 }, | |
| 97 | |
| 98 /** | |
| 99 * Update the enabled and checked states of all checkboxes. | |
| 100 * @private | |
| 101 */ | |
| 102 updateCheckboxes_: function() { | |
| 103 var index = $('import-browsers').selectedIndex; | |
| 104 var browserProfile; | |
| 105 if (this.browserProfiles.length > index) | |
| 106 browserProfile = this.browserProfiles[index]; | |
| 107 var importOptions = ['history', 'favorites', 'passwords', 'search']; | |
| 108 for (var i = 0; i < importOptions.length; i++) { | |
| 109 var checkbox = $('import-' + importOptions[i]); | |
| 110 this.setUpCheckboxState_(checkbox, | |
| 111 browserProfile ? browserProfile[importOptions[i]] : false); | |
| 112 } | |
| 113 }, | |
| 114 | |
| 115 /** | |
| 116 * Update the supported browsers popup with given entries. | |
| 117 * @param {array} browsers List of supported browsers name. | |
| 118 * @private | |
| 119 */ | |
| 120 updateSupportedBrowsers_: function(browsers) { | |
| 121 this.browserProfiles = browsers; | |
| 122 var browserSelect = $('import-browsers'); | |
| 123 browserSelect.remove(0); // Remove the 'Loading...' option. | |
| 124 browserSelect.textContent = ''; | |
| 125 var browserCount = browsers.length; | |
| 126 | |
| 127 if (browserCount == 0) { | |
| 128 var option = new Option(templateData.noProfileFound, 0); | |
| 129 browserSelect.appendChild(option); | |
| 130 | |
| 131 this.setControlsSensitive_(false); | |
| 132 } else { | |
| 133 this.setControlsSensitive_(true); | |
| 134 for (var i = 0; i < browserCount; i++) { | |
| 135 var browser = browsers[i] | |
| 136 var option = new Option(browser['name'], browser['index']); | |
| 137 browserSelect.appendChild(option); | |
| 138 } | |
| 139 | |
| 140 this.updateCheckboxes_(); | |
| 141 this.validateCommitButton_(); | |
| 142 } | |
| 143 }, | |
| 144 }; | |
| 145 | |
| 146 /** | |
| 147 * Update the supported browsers popup with given entries. | |
| 148 * @param {array} list of supported browsers name. | |
| 149 */ | |
| 150 ImportDataOverlay.updateSupportedBrowsers = function(browsers) { | |
| 151 ImportDataOverlay.getInstance().updateSupportedBrowsers_(browsers); | |
| 152 }; | |
| 153 | |
| 154 /** | |
| 155 * Update the UI to reflect whether an import operation is in progress. | |
| 156 * @param {boolean} state True if an import operation is in progress. | |
| 157 */ | |
| 158 ImportDataOverlay.setImportingState = function(state) { | |
| 159 if (state) { | |
| 160 var checkboxes = | |
| 161 document.querySelectorAll('#import-checkboxes input[type=checkbox]'); | |
| 162 for (var i = 0; i < checkboxes.length; i++) { | |
| 163 checkboxes[i].disabled = true; | |
| 164 } | |
| 165 } else { | |
| 166 ImportDataOverlay.getInstance().updateCheckboxes_(); | |
| 167 } | |
| 168 $('import-browsers').disabled = state; | |
| 169 $('import-throbber').style.visibility = state ? "visible" : "hidden"; | |
| 170 ImportDataOverlay.getInstance().validateCommitButton_(); | |
| 171 }; | |
| 172 | |
| 173 /** | |
| 174 * Remove the import overlay from display. | |
| 175 */ | |
| 176 ImportDataOverlay.dismiss = function() { | |
| 177 ImportDataOverlay.setImportingState(false); | |
| 178 OptionsPage.closeOverlay(); | |
| 179 }; | |
| 180 | |
| 181 // Export | |
| 182 return { | |
| 183 ImportDataOverlay: ImportDataOverlay | |
| 184 }; | |
| 185 }); | |
| OLD | NEW |