Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(158)

Side by Side Diff: chrome/browser/resources/options/search_engine_manager_engine_list.js

Issue 6248015: DOMUI Prefs: Split search engines into two lists (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Created 9 years, 11 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
« no previous file with comments | « chrome/browser/resources/options/search_engine_manager.js ('k') | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright (c) 2010 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2010 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 cr.define('options.search_engines', function() { 5 cr.define('options.search_engines', function() {
6 const InlineEditableItemList = options.InlineEditableItemList; 6 const InlineEditableItemList = options.InlineEditableItemList;
7 const InlineEditableItem = options.InlineEditableItem; 7 const InlineEditableItem = options.InlineEditableItem;
8 const ListInlineHeaderSelectionController = 8 const ListSelectionController = cr.ui.ListSelectionController;
9 options.ListInlineHeaderSelectionController;
10 9
11 /** 10 /**
12 * Creates a new search engine list item. 11 * Creates a new search engine list item.
13 * @param {Object} searchEnigne The search engine this represents. 12 * @param {Object} searchEnigne The search engine this represents.
14 * @constructor 13 * @constructor
15 * @extends {cr.ui.ListItem} 14 * @extends {cr.ui.ListItem}
16 */ 15 */
17 function SearchEngineListItem(searchEngine) { 16 function SearchEngineListItem(searchEngine) {
18 var el = cr.doc.createElement('div'); 17 var el = cr.doc.createElement('div');
19 el.searchEngine_ = searchEngine; 18 el.searchEngine_ = searchEngine;
(...skipping 63 matching lines...) Expand 10 before | Expand all | Expand 10 after
83 82
84 if (engine['modelIndex'] == '-1') { 83 if (engine['modelIndex'] == '-1') {
85 this.isPlaceholder_ = true; 84 this.isPlaceholder_ = true;
86 engine['name'] = ''; 85 engine['name'] = '';
87 engine['keyword'] = ''; 86 engine['keyword'] = '';
88 engine['url'] = ''; 87 engine['url'] = '';
89 } 88 }
90 89
91 this.currentlyValid_ = !this.isPlaceholder_; 90 this.currentlyValid_ = !this.isPlaceholder_;
92 91
93 if (engine['heading']) { 92 if (engine['default'])
94 this.classList.add('heading');
95 this.editable = false;
96 } else if (engine['default']) {
97 this.classList.add('default'); 93 this.classList.add('default');
98 }
99 94
100 this.deletable = engine['canBeRemoved']; 95 this.deletable = engine['canBeRemoved'];
101 96
102 var nameText = engine['name'];
103 var keywordText = engine['keyword'];
104 var urlText = engine['url'];
105 if (engine['heading']) {
106 nameText = engine['heading'];
107 keywordText = localStrings.getString('searchEngineTableKeywordHeader');
108 urlText = localStrings.getString('searchEngineTableURLHeader');
109 }
110
111 // Construct the name column. 97 // Construct the name column.
112 var nameColEl = this.ownerDocument.createElement('div'); 98 var nameColEl = this.ownerDocument.createElement('div');
113 nameColEl.className = 'name-column'; 99 nameColEl.className = 'name-column';
114 this.contentElement.appendChild(nameColEl); 100 this.contentElement.appendChild(nameColEl);
115 101
116 // For non-heading rows, start with a favicon. 102 // Add the favicon.
117 if (!engine['heading']) { 103 var faviconDivEl = this.ownerDocument.createElement('div');
118 var faviconDivEl = this.ownerDocument.createElement('div'); 104 faviconDivEl.className = 'favicon';
119 faviconDivEl.className = 'favicon'; 105 var imgEl = this.ownerDocument.createElement('img');
120 var imgEl = this.ownerDocument.createElement('img'); 106 imgEl.src = 'chrome://favicon/iconurl/' + engine['iconURL'];
121 imgEl.src = 'chrome://favicon/iconurl/' + engine['iconURL']; 107 faviconDivEl.appendChild(imgEl);
122 faviconDivEl.appendChild(imgEl); 108 nameColEl.appendChild(faviconDivEl);
123 nameColEl.appendChild(faviconDivEl);
124 }
125 109
126 var nameEl = this.createEditableTextCell(nameText, this.isPlaceholder_); 110 var nameEl = this.createEditableTextCell(engine['name'],
111 this.isPlaceholder_);
127 nameColEl.appendChild(nameEl); 112 nameColEl.appendChild(nameEl);
128 113
129 // Then the keyword column. 114 // Then the keyword column.
130 var keywordEl = this.createEditableTextCell(keywordText, 115 var keywordEl = this.createEditableTextCell(engine['keyword'],
131 this.isPlaceholder_); 116 this.isPlaceholder_);
132 keywordEl.className = 'keyword-column'; 117 keywordEl.className = 'keyword-column';
133 this.contentElement.appendChild(keywordEl); 118 this.contentElement.appendChild(keywordEl);
134 119
135 // And the URL column. 120 // And the URL column.
136 var urlEl = this.createEditableTextCell(urlText, this.isPlaceholder_); 121 var urlEl = this.createEditableTextCell(engine['url'],
122 this.isPlaceholder_);
137 var urlWithButtonEl = this.ownerDocument.createElement('div'); 123 var urlWithButtonEl = this.ownerDocument.createElement('div');
138 urlWithButtonEl.appendChild(urlEl); 124 urlWithButtonEl.appendChild(urlEl);
139 urlWithButtonEl.className = 'url-column'; 125 urlWithButtonEl.className = 'url-column';
140 this.contentElement.appendChild(urlWithButtonEl); 126 this.contentElement.appendChild(urlWithButtonEl);
141 // Add the Make Default button. Temporary until drag-and-drop re-ordering 127 // Add the Make Default button. Temporary until drag-and-drop re-ordering
142 // is implemented. When this is removed, remove the extra div above. 128 // is implemented. When this is removed, remove the extra div above.
143 if (engine['canBeDefault']) { 129 if (engine['canBeDefault']) {
144 var makeDefaultButtonEl = this.ownerDocument.createElement('button'); 130 var makeDefaultButtonEl = this.ownerDocument.createElement('button');
131 makeDefaultButtonEl.className = "raw-button";
145 makeDefaultButtonEl.textContent = 132 makeDefaultButtonEl.textContent =
146 templateData.makeDefaultSearchEngineButton; 133 templateData.makeDefaultSearchEngineButton;
147 makeDefaultButtonEl.onclick = function(e) { 134 makeDefaultButtonEl.onclick = function(e) {
148 chrome.send('managerSetDefaultSearchEngine', [engine['modelIndex']]); 135 chrome.send('managerSetDefaultSearchEngine', [engine['modelIndex']]);
149 }; 136 };
150 // Don't select the row when clicking the button. 137 // Don't select the row when clicking the button.
151 makeDefaultButtonEl.onmousedown = function(e) { 138 makeDefaultButtonEl.onmousedown = function(e) {
152 e.stopPropagation(); 139 e.stopPropagation();
153 }; 140 };
154 urlWithButtonEl.appendChild(makeDefaultButtonEl); 141 urlWithButtonEl.appendChild(makeDefaultButtonEl);
155 } 142 }
156 143
157 // Do final adjustment to the input fields. 144 // Do final adjustment to the input fields.
158 if (!engine['heading']) { 145 this.nameField_ = nameEl.querySelector('input');
159 this.nameField_ = nameEl.querySelector('input'); 146 this.keywordField_ = keywordEl.querySelector('input');
160 this.keywordField_ = keywordEl.querySelector('input'); 147 this.urlField_ = urlEl.querySelector('input');
161 this.urlField_ = urlEl.querySelector('input');
162 148
163 if (engine['urlLocked']) 149 if (engine['urlLocked'])
164 this.urlField_.disabled = true; 150 this.urlField_.disabled = true;
165 151
166 if (this.isPlaceholder_) { 152 if (this.isPlaceholder_) {
167 this.nameField_.placeholder = 153 this.nameField_.placeholder =
168 localStrings.getString('searchEngineTableNamePlaceholder'); 154 localStrings.getString('searchEngineTableNamePlaceholder');
169 this.keywordField_.placeholder = 155 this.keywordField_.placeholder =
170 localStrings.getString('searchEngineTableKeywordPlaceholder'); 156 localStrings.getString('searchEngineTableKeywordPlaceholder');
171 this.urlField_.placeholder = 157 this.urlField_.placeholder =
172 localStrings.getString('searchEngineTableURLPlaceholder'); 158 localStrings.getString('searchEngineTableURLPlaceholder');
173 } 159 }
174 160
175 var fields = [ this.nameField_, this.keywordField_, this.urlField_ ]; 161 var fields = [ this.nameField_, this.keywordField_, this.urlField_ ];
176 for (var i = 0; i < fields.length; i++) { 162 for (var i = 0; i < fields.length; i++) {
177 fields[i].oninput = this.startFieldValidation_.bind(this); 163 fields[i].oninput = this.startFieldValidation_.bind(this);
178 }
179 } 164 }
180 165
181 // Listen for edit events. 166 // Listen for edit events.
182 this.addEventListener('edit', this.onEditStarted_.bind(this)); 167 this.addEventListener('edit', this.onEditStarted_.bind(this));
183 this.addEventListener('canceledit', this.onEditCancelled_.bind(this)); 168 this.addEventListener('canceledit', this.onEditCancelled_.bind(this));
184 this.addEventListener('commitedit', this.onEditCommitted_.bind(this)); 169 this.addEventListener('commitedit', this.onEditCommitted_.bind(this));
185 }, 170 },
186 171
187 /** @inheritDoc */ 172 /** @inheritDoc */
188 get currentInputIsValid() { 173 get currentInputIsValid() {
(...skipping 107 matching lines...) Expand 10 before | Expand all | Expand 10 after
296 281
297 SearchEngineList.prototype = { 282 SearchEngineList.prototype = {
298 __proto__: InlineEditableItemList.prototype, 283 __proto__: InlineEditableItemList.prototype,
299 284
300 /** @inheritDoc */ 285 /** @inheritDoc */
301 createItem: function(searchEngine) { 286 createItem: function(searchEngine) {
302 return new SearchEngineListItem(searchEngine); 287 return new SearchEngineListItem(searchEngine);
303 }, 288 },
304 289
305 /** @inheritDoc */ 290 /** @inheritDoc */
306 createSelectionController: function(sm) {
307 return new ListInlineHeaderSelectionController(sm, this);
308 },
309
310 /** @inheritDoc */
311 deleteItemAtIndex: function(index) { 291 deleteItemAtIndex: function(index) {
312 var modelIndex = this.dataModel.item(index)['modelIndex'] 292 var modelIndex = this.dataModel.item(index)['modelIndex']
313 chrome.send('removeSearchEngine', [String(modelIndex)]); 293 chrome.send('removeSearchEngine', [String(modelIndex)]);
314 }, 294 },
315 295
316 /** 296 /**
317 * Returns true if the given item is selectable.
318 * @param {number} index The index to check.
319 */
320 canSelectIndex: function(index) {
321 return !this.dataModel.item(index).hasOwnProperty('heading');
322 },
323
324 /**
325 * Passes the results of an input validation check to the requesting row 297 * Passes the results of an input validation check to the requesting row
326 * if it's still being edited. 298 * if it's still being edited.
327 * @param {number} modelIndex The model index of the item that was checked. 299 * @param {number} modelIndex The model index of the item that was checked.
328 * @param {Object} validity A dictionary of validitation results. 300 * @param {Object} validity A dictionary of validitation results.
329 */ 301 */
330 validationComplete: function(validity, modelIndex) { 302 validationComplete: function(validity, modelIndex) {
331 // If it's not still being edited, it no longer matters. 303 // If it's not still being edited, it no longer matters.
332 var currentSelection = this.selectedItem; 304 var currentSelection = this.selectedItem;
305 if (!currentSelection)
306 return;
333 var listItem = this.getListItem(currentSelection); 307 var listItem = this.getListItem(currentSelection);
334 if (listItem.editing && currentSelection['modelIndex'] == modelIndex) 308 if (listItem.editing && currentSelection['modelIndex'] == modelIndex)
335 listItem.validationComplete(validity); 309 listItem.validationComplete(validity);
336 }, 310 },
337 }; 311 };
338 312
339 // Export 313 // Export
340 return { 314 return {
341 SearchEngineList: SearchEngineList 315 SearchEngineList: SearchEngineList
342 }; 316 };
343 317
344 }); 318 });
345 319
OLDNEW
« no previous file with comments | « chrome/browser/resources/options/search_engine_manager.js ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698