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