// Copyright (c) 2011 The Chromium Authors. All rights reserved. // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. cr.define('options', function() { var OptionsPage = options.OptionsPage; /** * ImportDataOverlay class * Encapsulated handling of the 'Import Data' overlay page. * @class */ function ImportDataOverlay() { OptionsPage.call(this, 'importData', templateData.importDataOverlayTabTitle, 'import-data-overlay'); } cr.addSingletonGetter(ImportDataOverlay); ImportDataOverlay.prototype = { // Inherit from OptionsPage. __proto__: OptionsPage.prototype, /** * Initialize the page. */ initializePage: function() { // Call base class implementation to start preference initialization. OptionsPage.prototype.initializePage.call(this); var self = this; var checkboxes = document.querySelectorAll('#import-checkboxes input[type=checkbox]'); for (var i = 0; i < checkboxes.length; i++) { checkboxes[i].onchange = function() { self.validateCommitButton_(); }; } $('import-browsers').onchange = function() { self.updateCheckboxes_(); self.validateCommitButton_(); }; $('import-data-commit').onclick = function() { chrome.send('importData', [ String($('import-browsers').selectedIndex), String($('import-history').checked), String($('import-favorites').checked), String($('import-passwords').checked), String($('import-search').checked)]); }; $('import-data-cancel').onclick = function() { ImportDataOverlay.dismiss(); }; // Form controls are disabled until the profile list has been loaded. self.setControlsSensitive_(false); }, /** * Set enabled and checked state of the commit button. * @private */ validateCommitButton_: function() { var somethingToImport = $('import-history').checked || $('import-favorites').checked || $('import-passwords').checked || $('import-search').checked; $('import-data-commit').disabled = !somethingToImport; }, /** * Sets the sensitivity of all the checkboxes and the commit button. * @private */ setControlsSensitive_: function(sensitive) { var checkboxes = document.querySelectorAll('#import-checkboxes input[type=checkbox]'); for (var i = 0; i < checkboxes.length; i++) this.setUpCheckboxState_(checkboxes[i], sensitive); $('import-data-commit').disabled = !sensitive; }, /** * Set enabled and checked states a checkbox element. * @param {Object} checkbox A checkbox element. * @param {boolean} enabled The enabled state of the chekbox. * @private */ setUpCheckboxState_: function(checkbox, enabled) { checkbox.disabled = !enabled; checkbox.checked = enabled; }, /** * Update the enabled and checked states of all checkboxes. * @private */ updateCheckboxes_: function() { var index = $('import-browsers').selectedIndex; var browserProfile; if (this.browserProfiles.length > index) browserProfile = this.browserProfiles[index]; var importOptions = ['history', 'favorites', 'passwords', 'search']; for (var i = 0; i < importOptions.length; i++) { var checkbox = $('import-' + importOptions[i]); this.setUpCheckboxState_(checkbox, browserProfile ? browserProfile[importOptions[i]] : false); } }, /** * Update the supported browsers popup with given entries. * @param {array} browsers List of supported browsers name. * @private */ updateSupportedBrowsers_: function(browsers) { this.browserProfiles = browsers; var browserSelect = $('import-browsers'); browserSelect.remove(0); // Remove the 'Loading...' option. browserSelect.textContent = ''; var browserCount = browsers.length; if (browserCount == 0) { var option = new Option(templateData.noProfileFound, 0); browserSelect.appendChild(option); this.setControlsSensitive_(false); } else { this.setControlsSensitive_(true); for (var i = 0; i < browserCount; i++) { var browser = browsers[i] var option = new Option(browser['name'], browser['index']); browserSelect.appendChild(option); } this.updateCheckboxes_(); this.validateCommitButton_(); } }, }; /** * Update the supported browsers popup with given entries. * @param {array} list of supported browsers name. */ ImportDataOverlay.updateSupportedBrowsers = function(browsers) { ImportDataOverlay.getInstance().updateSupportedBrowsers_(browsers); }; /** * Update the UI to reflect whether an import operation is in progress. * @param {boolean} state True if an import operation is in progress. */ ImportDataOverlay.setImportingState = function(state) { if (state) { var checkboxes = document.querySelectorAll('#import-checkboxes input[type=checkbox]'); for (var i = 0; i < checkboxes.length; i++) { checkboxes[i].disabled = true; } } else { ImportDataOverlay.getInstance().updateCheckboxes_(); } $('import-browsers').disabled = state; $('import-throbber').style.visibility = state ? "visible" : "hidden"; ImportDataOverlay.getInstance().validateCommitButton_(); }; /** * Remove the import overlay from display. */ ImportDataOverlay.dismiss = function() { ImportDataOverlay.setImportingState(false); OptionsPage.closeOverlay(); }; // Export return { ImportDataOverlay: ImportDataOverlay }; });