Home | History | Annotate | Download | only in options
      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.
      4 
      5 cr.define('options', function() {
      6   /** @const */ var OptionsPage = options.OptionsPage;
      7   /** @const */ var ArrayDataModel = cr.ui.ArrayDataModel;
      8 
      9   /**
     10    * Encapsulated handling of search engine management page.
     11    * @constructor
     12    */
     13   function SearchEngineManager() {
     14     this.activeNavTab = null;
     15     OptionsPage.call(this, 'searchEngines',
     16                      loadTimeData.getString('searchEngineManagerPageTabTitle'),
     17                      'search-engine-manager-page');
     18   }
     19 
     20   cr.addSingletonGetter(SearchEngineManager);
     21 
     22   SearchEngineManager.prototype = {
     23     __proto__: OptionsPage.prototype,
     24 
     25     /**
     26      * List for default search engine options.
     27      * @private
     28      */
     29     defaultsList_: null,
     30 
     31     /**
     32      * List for other search engine options.
     33      * @private
     34      */
     35     othersList_: null,
     36 
     37     /**
     38      * List for extension keywords.
     39      * @private
     40      */
     41     extensionList_: null,
     42 
     43     /** inheritDoc */
     44     initializePage: function() {
     45       OptionsPage.prototype.initializePage.call(this);
     46 
     47       this.defaultsList_ = $('default-search-engine-list');
     48       this.setUpList_(this.defaultsList_);
     49 
     50       this.othersList_ = $('other-search-engine-list');
     51       this.setUpList_(this.othersList_);
     52 
     53       this.extensionList_ = $('extension-keyword-list');
     54       this.setUpList_(this.extensionList_);
     55 
     56       $('search-engine-manager-confirm').onclick = function() {
     57         OptionsPage.closeOverlay();
     58       };
     59     },
     60 
     61     /**
     62      * Sets up the given list as a search engine list
     63      * @param {List} list The list to set up.
     64      * @private
     65      */
     66     setUpList_: function(list) {
     67       options.search_engines.SearchEngineList.decorate(list);
     68       list.autoExpands = true;
     69     },
     70 
     71     /**
     72      * Updates the search engine list with the given entries.
     73      * @private
     74      * @param {Array} defaultEngines List of possible default search engines.
     75      * @param {Array} otherEngines List of other search engines.
     76      * @param {Array} keywords List of keywords from extensions.
     77      */
     78     updateSearchEngineList_: function(defaultEngines, otherEngines, keywords) {
     79       this.defaultsList_.dataModel = new ArrayDataModel(defaultEngines);
     80 
     81       otherEngines = otherEngines.map(function(x) {
     82         return [x, x.name.toLocaleLowerCase()];
     83       }).sort(function(a, b) {
     84         return a[1].localeCompare(b[1]);
     85       }).map(function(x) {
     86         return x[0];
     87       });
     88 
     89       var othersModel = new ArrayDataModel(otherEngines);
     90       // Add a "new engine" row.
     91       othersModel.push({
     92         'modelIndex': '-1',
     93         'canBeEdited': true
     94       });
     95       this.othersList_.dataModel = othersModel;
     96 
     97       if (keywords.length > 0) {
     98         $('extension-keyword-div').hidden = false;
     99         var extensionsModel = new ArrayDataModel(keywords);
    100         this.extensionList_.dataModel = extensionsModel;
    101       } else {
    102         $('extension-keyword-div').hidden = true;
    103       }
    104     },
    105   };
    106 
    107   SearchEngineManager.updateSearchEngineList = function(defaultEngines,
    108                                                         otherEngines,
    109                                                         keywords) {
    110     SearchEngineManager.getInstance().updateSearchEngineList_(defaultEngines,
    111                                                               otherEngines,
    112                                                               keywords);
    113   };
    114 
    115   SearchEngineManager.validityCheckCallback = function(validity, modelIndex) {
    116     // Forward to all lists; those without a matching modelIndex will ignore it.
    117     SearchEngineManager.getInstance().defaultsList_.validationComplete(
    118         validity, modelIndex);
    119     SearchEngineManager.getInstance().othersList_.validationComplete(
    120         validity, modelIndex);
    121     SearchEngineManager.getInstance().extensionList_.validationComplete(
    122         validity, modelIndex);
    123   };
    124 
    125   // Export
    126   return {
    127     SearchEngineManager: SearchEngineManager
    128   };
    129 
    130 });
    131 
    132