1 // Copyright (c) 2012 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.
5 cr.define('options', function() {
6 /** @const */ var Page = cr.ui.pageManager.Page;
7 /** @const */ var PageManager = cr.ui.pageManager.PageManager;
8 /** @const */ var ArrayDataModel = cr.ui.ArrayDataModel;
11 * Encapsulated handling of search engine management page.
14 function SearchEngineManager() {
15 this.activeNavTab = null;
16 Page.call(this, 'searchEngines',
17 loadTimeData.getString('searchEngineManagerPageTabTitle'),
18 'search-engine-manager-page');
21 cr.addSingletonGetter(SearchEngineManager);
23 SearchEngineManager.prototype = {
24 __proto__: Page.prototype,
27 * List for default search engine options.
33 * List for other search engine options.
39 * List for extension keywords.
45 initializePage: function() {
46 Page.prototype.initializePage.call(this);
48 this.defaultsList_ = $('default-search-engine-list');
49 this.setUpList_(this.defaultsList_);
51 this.othersList_ = $('other-search-engine-list');
52 this.setUpList_(this.othersList_);
54 this.extensionList_ = $('extension-keyword-list');
55 this.setUpList_(this.extensionList_);
57 $('search-engine-manager-confirm').onclick = function() {
58 PageManager.closeOverlay();
63 * Sets up the given list as a search engine list
64 * @param {List} list The list to set up.
67 setUpList_: function(list) {
68 options.search_engines.SearchEngineList.decorate(list);
69 list.autoExpands = true;
73 * Updates the search engine list with the given entries.
75 * @param {Array} defaultEngines List of possible default search engines.
76 * @param {Array} otherEngines List of other search engines.
77 * @param {Array} keywords List of keywords from extensions.
79 updateSearchEngineList_: function(defaultEngines, otherEngines, keywords) {
80 this.defaultsList_.dataModel = new ArrayDataModel(defaultEngines);
82 otherEngines = otherEngines.map(function(x) {
83 return [x, x.name.toLocaleLowerCase()];
84 }).sort(function(a, b) {
85 return a[1].localeCompare(b[1]);
90 var othersModel = new ArrayDataModel(otherEngines);
91 // Add a "new engine" row.
96 this.othersList_.dataModel = othersModel;
98 if (keywords.length > 0) {
99 $('extension-keyword-div').hidden = false;
100 var extensionsModel = new ArrayDataModel(keywords);
101 this.extensionList_.dataModel = extensionsModel;
103 $('extension-keyword-div').hidden = true;
108 SearchEngineManager.updateSearchEngineList = function(defaultEngines,
111 SearchEngineManager.getInstance().updateSearchEngineList_(defaultEngines,
116 SearchEngineManager.validityCheckCallback = function(validity, modelIndex) {
117 // Forward to all lists; those without a matching modelIndex will ignore it.
118 SearchEngineManager.getInstance().defaultsList_.validationComplete(
119 validity, modelIndex);
120 SearchEngineManager.getInstance().othersList_.validationComplete(
121 validity, modelIndex);
122 SearchEngineManager.getInstance().extensionList_.validationComplete(
123 validity, modelIndex);
128 SearchEngineManager: SearchEngineManager