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

Unified Diff: chrome/browser/resources/edit_search_engine_dialog.js

Issue 8118012: WebUI Edit Search Engine Dialog (Closed) Base URL: http://git.chromium.org/git/chromium.git@trunk
Patch Set: changed webui class names as per precedent Created 9 years, 2 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 side-by-side diff with in-line comments
Download patch
« no previous file with comments | « chrome/browser/resources/edit_search_engine_dialog.html ('k') | chrome/browser/ui/browser.cc » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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,
+ };
+});
+
+
« no previous file with comments | « chrome/browser/resources/edit_search_engine_dialog.html ('k') | chrome/browser/ui/browser.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698