Index: chrome/browser/resources/edit_search_engine_dialog.js |
diff --git a/chrome/browser/resources/edit_search_engine_dialog.js b/chrome/browser/resources/edit_search_engine_dialog.js |
new file mode 100644 |
index 0000000000000000000000000000000000000000..0d9cdb375966bb2343c7f488b399d1e0e2922773 |
--- /dev/null |
+++ b/chrome/browser/resources/edit_search_engine_dialog.js |
@@ -0,0 +1,122 @@ |
+// Copyright (c) 2011 The Chromium Authors. All rights reserved. |
+// Use of this source code is governed by a BSD-style license that can be |
+// found in the LICENSE file. |
+ |
+cr.define('editSearchEngineDialog', function() { |
+ 'use strict'; |
+ |
+ /** |
+ * Disables the controls while the dialog is busy. |
+ */ |
+ function disableControls() { |
+ $('cancel').disabled = true; |
+ $('save').disabled = true; |
+ } |
+ |
+ /** |
+ * Close the dialog and pass a result value to the dialog close handler. |
+ * @param {{description: string, details: string, url: string}=} opt_result |
+ * The value to pass to the dialog close handler. |
+ */ |
+ function closeWithResult(opt_result) { |
+ disableControls(); |
+ var json = JSON.stringify(opt_result ? [opt_result] : []); |
+ chrome.send('DialogClose', [json]); |
+ } |
+ |
+ /** |
+ * Sets the text of the dialog's editable text boxes. |
+ * @param {{description: string, details: string, url: string}} details Values |
+ * for corresponding text fields. |
+ */ |
+ function setDetails(details) { |
+ $('description-text').value = details.description; |
+ $('keyword-text').value = details.keyword; |
+ $('url-text').value = details.url; |
+ validate(); |
+ } |
+ |
+ /** |
+ * Updates the validity icon element by changing its style. |
+ * @param {Object} element The element to change. |
+ * @param {boolean} valid True if the data is valid. |
+ */ |
+ function setValidImage(element, valid) { |
+ element.className = valid ? 'valid' : 'invalid'; |
+ } |
+ |
+ /** |
+ * Sends all strings to Chrome for validation. Chrome is expected to respond |
+ * by calling setValidation. |
+ */ |
+ function validate() { |
+ chrome.send('requestValidation', [$('description-text').value, |
+ $('keyword-text').value, $('url-text').value]); |
+ } |
+ |
+ /** |
+ * Sets dialog state given the results of the validation of input by Chrome. |
+ * @param {{description: boolean, details: boolean, url: boolean, ok:boolean}} |
+ * details A dictionary of booleans indicating the validation results of |
+ * various parts of the UI. |description|, |details| and |url| indicate |
+ * the validity of the respective text fields, and |ok| indicates whether |
+ * the OK/Save button can be pressed. |
+ */ |
+ function setValidation(details) { |
+ setValidImage($('description-icon'), details.description); |
+ setValidImage($('keyword-icon'), details.keyword); |
+ setValidImage($('url-icon'), details.url); |
+ $('save').disabled = !details.ok; |
+ } |
+ |
+ /** |
+ * Reverses the order of child nodes. |
+ * @param {HTMLElement} parent The parent node whose children are to be |
+ * reversed. |
+ */ |
+ function reverseChildren(parent) { |
+ var childNodes = parent.childNodes; |
+ for (var i = childNodes.length - 1; i >= 0; i--) |
+ parent.appendChild(childNodes[i]); |
+ }; |
+ |
+ var forEach = Array.prototype.forEach.call.bind(Array.prototype.forEach); |
+ |
+ /** |
+ * Inserts translated strings on loading. |
+ */ |
+ function initialize() { |
+ i18nTemplate.process(document, templateData); |
+ |
+ document.title = chrome.dialogArguments == 'add' ? templateData.titleNew : |
+ templateData.titleEdit; |
+ |
+ $('cancel').onclick = function() { |
+ closeWithResult(); |
+ } |
+ |
+ $('save').onclick = function() { |
+ closeWithResult({description: $('description-text').value, |
+ keyword: $('keyword-text').value, |
+ url: $('url-text').value}); |
+ } |
+ |
+ $('description-text').oninput = validate; |
+ $('keyword-text').oninput = validate; |
+ $('url-text').oninput = validate; |
+ |
+ setValidation({description: false, keyword: false, url: false}); |
+ if (cr.isViews) |
+ forEach(document.querySelectorAll('.button-strip'), reverseChildren); |
+ chrome.send('requestDetails') |
+ } |
+ |
+ document.addEventListener('DOMContentLoaded', initialize); |
+ |
+ return { |
+ setDetails: setDetails, |
+ setValidation: setValidation, |
+ }; |
+}); |
+ |
+ |