blob: d23163a1fe4aaddb90c6d2a8f58eda6a29ca91b3 [file] [log] [blame]
// Copyright (c) 2012 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() {
/** @const */ var Page = cr.ui.pageManager.Page;
/** @const */ var PageManager = cr.ui.pageManager.PageManager;
/** @const */ var ArrayDataModel = cr.ui.ArrayDataModel;
/**
* Encapsulated handling of search engine management page.
* @constructor
*/
function SearchEngineManager() {
this.activeNavTab = null;
Page.call(this, 'searchEngines',
loadTimeData.getString('searchEngineManagerPageTabTitle'),
'search-engine-manager-page');
}
cr.addSingletonGetter(SearchEngineManager);
SearchEngineManager.prototype = {
__proto__: Page.prototype,
/**
* List for default search engine options.
* @private
*/
defaultsList_: null,
/**
* List for other search engine options.
* @private
*/
othersList_: null,
/**
* List for extension keywords.
* @private
*/
extensionList_: null,
/** @override */
initializePage: function() {
Page.prototype.initializePage.call(this);
this.defaultsList_ = $('default-search-engine-list');
this.setUpList_(this.defaultsList_);
this.othersList_ = $('other-search-engine-list');
this.setUpList_(this.othersList_);
this.extensionList_ = $('extension-keyword-list');
this.setUpList_(this.extensionList_);
$('search-engine-manager-confirm').onclick = function() {
PageManager.closeOverlay();
};
},
/**
* Sets up the given list as a search engine list
* @param {List} list The list to set up.
* @private
*/
setUpList_: function(list) {
options.search_engines.SearchEngineList.decorate(list);
list.autoExpands = true;
},
/**
* Updates the search engine list with the given entries.
* @private
* @param {Array} defaultEngines List of possible default search engines.
* @param {Array} otherEngines List of other search engines.
* @param {Array} keywords List of keywords from extensions.
*/
updateSearchEngineList_: function(defaultEngines, otherEngines, keywords) {
this.defaultsList_.dataModel = new ArrayDataModel(defaultEngines);
otherEngines = otherEngines.map(function(x) {
return [x, x.name.toLocaleLowerCase()];
}).sort(function(a, b) {
return a[1].localeCompare(b[1]);
}).map(function(x) {
return x[0];
});
var othersModel = new ArrayDataModel(otherEngines);
// Add a "new engine" row.
othersModel.push({
'modelIndex': '-1',
'canBeEdited': true
});
this.othersList_.dataModel = othersModel;
if (keywords.length > 0) {
$('extension-keyword-div').hidden = false;
var extensionsModel = new ArrayDataModel(keywords);
this.extensionList_.dataModel = extensionsModel;
} else {
$('extension-keyword-div').hidden = true;
}
},
};
SearchEngineManager.updateSearchEngineList = function(defaultEngines,
otherEngines,
keywords) {
SearchEngineManager.getInstance().updateSearchEngineList_(defaultEngines,
otherEngines,
keywords);
};
SearchEngineManager.validityCheckCallback = function(validity, modelIndex) {
// Forward to all lists; those without a matching modelIndex will ignore it.
SearchEngineManager.getInstance().defaultsList_.validationComplete(
validity, modelIndex);
SearchEngineManager.getInstance().othersList_.validationComplete(
validity, modelIndex);
SearchEngineManager.getInstance().extensionList_.validationComplete(
validity, modelIndex);
};
// Export
return {
SearchEngineManager: SearchEngineManager
};
});