OLD | NEW |
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 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 | 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 /** | 5 /** |
6 * @typedef {{canBeDefault: boolean, | 6 * @typedef {{canBeDefault: boolean, |
7 * canBeEdited: boolean, | 7 * canBeEdited: boolean, |
8 * canBeRemoved: boolean, | 8 * canBeRemoved: boolean, |
9 * default: boolean, | 9 * default: boolean, |
10 * displayName: string, | 10 * displayName: string, |
11 * extension: (Object|undefined), | 11 * extension: (Object|undefined), |
12 * iconURL: (string|undefined), | 12 * iconURL: (string|undefined), |
13 * isOmniboxExtension: boolean, | 13 * isOmniboxExtension: boolean, |
14 * keyword: string, | 14 * keyword: string, |
15 * modelIndex: string, | 15 * modelIndex: string, |
16 * name: string, | 16 * name: string, |
17 * url: string, | 17 * url: string, |
18 * urlLocked: boolean}} | 18 * urlLocked: boolean}} |
19 * @see chrome/browser/ui/webui/options/search_engine_manager_handler.cc | 19 * @see chrome/browser/ui/webui/options/search_engine_manager_handler.cc |
20 */ | 20 */ |
21 var SearchEngine; | 21 var SearchEngine; |
22 | 22 |
23 cr.define('options.search_engines', function() { | 23 cr.define('options.search_engines', function() { |
24 /** @const */ var ControlledSettingIndicator = | 24 /** @const */ var ControlledSettingIndicator = |
25 options.ControlledSettingIndicator; | 25 options.ControlledSettingIndicator; |
26 /** @const */ var InlineEditableItemList = options.InlineEditableItemList; | 26 /** @const */ var InlineEditableItemList = options.InlineEditableItemList; |
27 /** @const */ var InlineEditableItem = options.InlineEditableItem; | 27 /** @const */ var InlineEditableItem = options.InlineEditableItem; |
28 /** @const */ var ListSelectionController = cr.ui.ListSelectionController; | 28 /** @const */ var ListSelectionController = cr.ui.ListSelectionController; |
29 | 29 |
30 /** | 30 /** |
31 * Creates a new search engine list item. | 31 * Creates a new search engine list item. |
32 * @param {SearchEngine} searchEngine The search engine this represents. | 32 * @param {SearchEngine} searchEngine The search engine this represents. |
33 * @constructor | 33 * @constructor |
34 * @extends {options.InlineEditableItem} | 34 * @extends {options.InlineEditableItem} |
35 */ | 35 */ |
(...skipping 130 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
166 // Don't select the row when clicking the button. | 166 // Don't select the row when clicking the button. |
167 e.stopPropagation(); | 167 e.stopPropagation(); |
168 // Don't focus on the button. | 168 // Don't focus on the button. |
169 e.preventDefault(); | 169 e.preventDefault(); |
170 }; | 170 }; |
171 urlWithButtonEl.appendChild(makeDefaultButtonEl); | 171 urlWithButtonEl.appendChild(makeDefaultButtonEl); |
172 } | 172 } |
173 } | 173 } |
174 | 174 |
175 // Do final adjustment to the input fields. | 175 // Do final adjustment to the input fields. |
176 this.nameField_ = /** @type {HTMLElement} */( | 176 this.nameField_ = |
177 nameEl.querySelector('input')); | 177 /** @type {HTMLElement} */ (nameEl.querySelector('input')); |
178 // The editable field uses the raw name, not the display name. | 178 // The editable field uses the raw name, not the display name. |
179 this.nameField_.value = engine.name; | 179 this.nameField_.value = engine.name; |
180 this.keywordField_ = /** @type {HTMLElement} */( | 180 this.keywordField_ = |
181 keywordEl.querySelector('input')); | 181 /** @type {HTMLElement} */ (keywordEl.querySelector('input')); |
182 this.urlField_ = /** @type {HTMLElement} */(urlEl.querySelector('input')); | 182 this.urlField_ = |
| 183 /** @type {HTMLElement} */ (urlEl.querySelector('input')); |
183 | 184 |
184 if (engine.urlLocked) | 185 if (engine.urlLocked) |
185 this.urlField_.disabled = true; | 186 this.urlField_.disabled = true; |
186 | 187 |
187 if (this.isPlaceholder) { | 188 if (this.isPlaceholder) { |
188 this.nameField_.placeholder = | 189 this.nameField_.placeholder = |
189 loadTimeData.getString('searchEngineTableNamePlaceholder'); | 190 loadTimeData.getString('searchEngineTableNamePlaceholder'); |
190 this.keywordField_.placeholder = | 191 this.keywordField_.placeholder = |
191 loadTimeData.getString('searchEngineTableKeywordPlaceholder'); | 192 loadTimeData.getString('searchEngineTableKeywordPlaceholder'); |
192 this.urlField_.placeholder = | 193 this.urlField_.placeholder = |
193 loadTimeData.getString('searchEngineTableURLPlaceholder'); | 194 loadTimeData.getString('searchEngineTableURLPlaceholder'); |
194 } | 195 } |
195 | 196 |
196 this.setFocusableColumnIndex(this.nameField_, 0); | 197 this.setFocusableColumnIndex(this.nameField_, 0); |
197 this.setFocusableColumnIndex(this.keywordField_, 1); | 198 this.setFocusableColumnIndex(this.keywordField_, 1); |
198 this.setFocusableColumnIndex(this.urlField_, 2); | 199 this.setFocusableColumnIndex(this.urlField_, 2); |
199 this.setFocusableColumnIndex(makeDefaultButtonEl, 3); | 200 this.setFocusableColumnIndex(makeDefaultButtonEl, 3); |
200 this.setFocusableColumnIndex(this.closeButtonElement, 4); | 201 this.setFocusableColumnIndex(this.closeButtonElement, 4); |
201 | 202 |
202 var fields = [this.nameField_, this.keywordField_, this.urlField_]; | 203 var fields = [this.nameField_, this.keywordField_, this.urlField_]; |
203 for (var i = 0; i < fields.length; i++) { | 204 for (var i = 0; i < fields.length; i++) { |
204 fields[i].oninput = this.startFieldValidation_.bind(this); | 205 fields[i].oninput = this.startFieldValidation_.bind(this); |
205 } | 206 } |
206 | 207 |
207 // Listen for edit events. | 208 // Listen for edit events. |
208 if (engine.canBeEdited) { | 209 if (engine.canBeEdited) { |
209 this.addEventListener('edit', this.onEditStarted_.bind(this)); | 210 this.addEventListener('edit', this.onEditStarted_.bind(this)); |
210 this.addEventListener('canceledit', this.onEditCancelled_.bind(this)); | 211 this.addEventListener('canceledit', this.onEditCancelled_.bind(this)); |
211 this.addEventListener('commitedit', this.onEditCommitted_.bind(this)); | 212 this.addEventListener('commitedit', this.onEditCommitted_.bind(this)); |
212 } else { | 213 } else { |
213 this.editable = false; | 214 this.editable = false; |
214 this.querySelector('.row-delete-button').hidden = true; | 215 this.querySelector('.row-delete-button').hidden = true; |
215 var indicator = new ControlledSettingIndicator(); | 216 var indicator = new ControlledSettingIndicator(); |
216 indicator.setAttribute('setting', 'search-engine'); | 217 indicator.setAttribute('setting', 'search-engine'); |
217 // Create a synthetic pref change event decorated as | 218 // Create a synthetic pref change event decorated as |
218 // CoreOptionsHandler::CreateValueForPref() does. | 219 // CoreOptionsHandler::CreateValueForPref() does. |
219 var event = new Event(this.contentType); | 220 var event = new Event(this.contentType); |
220 if (engine.extension) { | 221 if (engine.extension) { |
221 event.value = { controlledBy: 'extension', | 222 event.value = { |
222 extension: engine.extension }; | 223 controlledBy: 'extension', |
| 224 extension: engine.extension |
| 225 }; |
223 } else { | 226 } else { |
224 event.value = { controlledBy: 'policy' }; | 227 event.value = {controlledBy: 'policy'}; |
225 } | 228 } |
226 indicator.handlePrefChange(event); | 229 indicator.handlePrefChange(event); |
227 this.appendChild(indicator); | 230 this.appendChild(indicator); |
228 } | 231 } |
229 }, | 232 }, |
230 | 233 |
231 /** @override */ | 234 /** @override */ |
232 get currentInputIsValid() { | 235 get currentInputIsValid() { |
233 return !this.waitingForValidation_ && this.currentlyValid_; | 236 return !this.waitingForValidation_ && this.currentlyValid_; |
234 }, | 237 }, |
235 | 238 |
236 /** @override */ | 239 /** @override */ |
237 get hasBeenEdited() { | 240 get hasBeenEdited() { |
238 var engine = this.searchEngine_; | 241 var engine = this.searchEngine_; |
239 return this.nameField_.value != engine.name || | 242 return this.nameField_.value != engine.name || |
240 this.keywordField_.value != engine.keyword || | 243 this.keywordField_.value != engine.keyword || |
241 this.urlField_.value != engine.url; | 244 this.urlField_.value != engine.url; |
242 }, | 245 }, |
243 | 246 |
244 /** | 247 /** |
245 * Called when entering edit mode; starts an edit session in the model. | 248 * Called when entering edit mode; starts an edit session in the model. |
246 * @param {Event} e The edit event. | 249 * @param {Event} e The edit event. |
247 * @private | 250 * @private |
248 */ | 251 */ |
249 onEditStarted_: function(e) { | 252 onEditStarted_: function(e) { |
250 var editIndex = this.searchEngine_.modelIndex; | 253 var editIndex = this.searchEngine_.modelIndex; |
251 chrome.send('editSearchEngine', [String(editIndex)]); | 254 chrome.send('editSearchEngine', [String(editIndex)]); |
(...skipping 24 matching lines...) Expand all Loading... |
276 this.currentlyValid_ = !this.isPlaceholder; | 279 this.currentlyValid_ = !this.isPlaceholder; |
277 }, | 280 }, |
278 | 281 |
279 /** | 282 /** |
280 * Returns the input field values as an array suitable for passing to | 283 * Returns the input field values as an array suitable for passing to |
281 * chrome.send. The order of the array is important. | 284 * chrome.send. The order of the array is important. |
282 * @private | 285 * @private |
283 * @return {Array} The current input field values. | 286 * @return {Array} The current input field values. |
284 */ | 287 */ |
285 getInputFieldValues_: function() { | 288 getInputFieldValues_: function() { |
286 return [this.nameField_.value, | 289 return [ |
287 this.keywordField_.value, | 290 this.nameField_.value, this.keywordField_.value, this.urlField_.value |
288 this.urlField_.value]; | 291 ]; |
289 }, | 292 }, |
290 | 293 |
291 /** | 294 /** |
292 * Begins the process of asynchronously validing the input fields. | 295 * Begins the process of asynchronously validing the input fields. |
293 * @private | 296 * @private |
294 */ | 297 */ |
295 startFieldValidation_: function() { | 298 startFieldValidation_: function() { |
296 this.waitingForValidation_ = true; | 299 this.waitingForValidation_ = true; |
297 var args = this.getInputFieldValues_(); | 300 var args = this.getInputFieldValues_(); |
298 args.push(this.searchEngine_.modelIndex); | 301 args.push(this.searchEngine_.modelIndex); |
(...skipping 65 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
364 var currentSelection = this.selectedItem; | 367 var currentSelection = this.selectedItem; |
365 if (!currentSelection) | 368 if (!currentSelection) |
366 return; | 369 return; |
367 var listItem = this.getListItem(currentSelection); | 370 var listItem = this.getListItem(currentSelection); |
368 if (listItem.editing && currentSelection.modelIndex == modelIndex) | 371 if (listItem.editing && currentSelection.modelIndex == modelIndex) |
369 listItem.validationComplete(validity); | 372 listItem.validationComplete(validity); |
370 }, | 373 }, |
371 }; | 374 }; |
372 | 375 |
373 // Export | 376 // Export |
374 return { | 377 return {SearchEngineList: SearchEngineList}; |
375 SearchEngineList: SearchEngineList | |
376 }; | |
377 | 378 |
378 }); | 379 }); |
379 | |
OLD | NEW |