diff options
Diffstat (limited to 'chromium/third_party/WebKit/Source/devtools/front_end/ui/SettingsUI.js')
-rw-r--r-- | chromium/third_party/WebKit/Source/devtools/front_end/ui/SettingsUI.js | 265 |
1 files changed, 265 insertions, 0 deletions
diff --git a/chromium/third_party/WebKit/Source/devtools/front_end/ui/SettingsUI.js b/chromium/third_party/WebKit/Source/devtools/front_end/ui/SettingsUI.js new file mode 100644 index 00000000000..5c5b3451acb --- /dev/null +++ b/chromium/third_party/WebKit/Source/devtools/front_end/ui/SettingsUI.js @@ -0,0 +1,265 @@ +/* + * Copyright (C) 2014 Google Inc. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are + * met: + * + * * Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * * Redistributions in binary form must reproduce the above + * copyright notice, this list of conditions and the following disclaimer + * in the documentation and/or other materials provided with the + * distribution. + * * Neither the name of Google Inc. nor the names of its + * contributors may be used to endorse or promote products derived from + * this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT + * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT + * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +WebInspector.SettingsUI = {} + +/** + * @param {string} name + * @param {!WebInspector.Setting} setting + * @param {boolean=} omitParagraphElement + * @param {!Element=} inputElement + * @param {string=} tooltip + * @return {!Element} + */ +WebInspector.SettingsUI.createSettingCheckbox = function(name, setting, omitParagraphElement, inputElement, tooltip) +{ + var input = inputElement || document.createElement("input"); + input.type = "checkbox"; + input.name = name; + WebInspector.SettingsUI.bindCheckbox(input, setting); + + var label = document.createElement("label"); + label.appendChild(input); + label.createTextChild(name); + if (tooltip) + label.title = tooltip; + + if (omitParagraphElement) + return label; + + var p = document.createElement("p"); + p.appendChild(label); + return p; +} + +/** + * @param {!Element} input + * @param {!WebInspector.Setting} setting + */ +WebInspector.SettingsUI.bindCheckbox = function(input, setting) +{ + function settingChanged() + { + if (input.checked !== setting.get()) + input.checked = setting.get(); + } + setting.addChangeListener(settingChanged); + settingChanged(); + + function inputChanged() + { + if (setting.get() !== input.checked) + setting.set(input.checked); + } + input.addEventListener("change", inputChanged, false); +} + +/** + * @param {string} label + * @param {!WebInspector.Setting} setting + * @param {boolean} numeric + * @param {number=} maxLength + * @param {string=} width + * @param {function(string):?string=} validatorCallback + * @param {boolean=} instant + * @param {boolean=} clearForZero + * @param {string=} placeholder + * @return {!Element} + */ +WebInspector.SettingsUI.createSettingInputField = function(label, setting, numeric, maxLength, width, validatorCallback, instant, clearForZero, placeholder) +{ + var p = document.createElement("p"); + var labelElement = p.createChild("label"); + labelElement.textContent = label; + var inputElement = p.createChild("input"); + inputElement.type = "text"; + if (numeric) + inputElement.className = "numeric"; + if (maxLength) + inputElement.maxLength = maxLength; + if (width) + inputElement.style.width = width; + inputElement.placeholder = placeholder || ""; + + if (validatorCallback || instant) { + inputElement.addEventListener("change", onInput, false); + inputElement.addEventListener("input", onInput, false); + } + inputElement.addEventListener("keydown", onKeyDown, false); + + var errorMessageLabel; + if (validatorCallback) { + errorMessageLabel = p.createChild("div"); + errorMessageLabel.classList.add("field-error-message"); + validate(); + } + + function onInput() + { + if (validatorCallback) + validate(); + if (instant) + apply(); + } + + function onKeyDown(event) + { + if (isEnterKey(event)) + apply(); + } + + function validate() + { + var error = validatorCallback(inputElement.value); + if (!error) + error = ""; + inputElement.classList.toggle("error-input", !!error); + errorMessageLabel.textContent = error; + } + + if (!instant) + inputElement.addEventListener("blur", apply, false); + + function apply() + { + if (validatorCallback && validatorCallback(inputElement.value)) + return; + setting.removeChangeListener(onSettingChange); + setting.set(numeric ? Number(inputElement.value) : inputElement.value); + setting.addChangeListener(onSettingChange); + } + + setting.addChangeListener(onSettingChange); + + function onSettingChange() + { + var value = setting.get(); + if (clearForZero && !value) + value = ""; + inputElement.value = value; + } + onSettingChange(); + + return p; +} + +/** + * @param {string} name + * @param {!Element} element + * @return {!Element} + */ +WebInspector.SettingsUI.createCustomSetting = function(name, element) +{ + var p = document.createElement("p"); + var fieldsetElement = document.createElement("fieldset"); + fieldsetElement.createChild("label").textContent = name; + fieldsetElement.appendChild(element); + p.appendChild(fieldsetElement); + return p; +} + +/** + * @param {!WebInspector.Setting} setting + * @return {!Element} + */ +WebInspector.SettingsUI.createSettingFieldset = function(setting) +{ + var fieldset = document.createElement("fieldset"); + fieldset.disabled = !setting.get(); + setting.addChangeListener(settingChanged); + return fieldset; + + function settingChanged() + { + fieldset.disabled = !setting.get(); + } +} + +/** + * @param {string} text + * @return {?string} + */ +WebInspector.SettingsUI.regexValidator = function(text) +{ + var regex; + try { + regex = new RegExp(text); + } catch (e) { + } + return regex ? null : WebInspector.UIString("Invalid pattern"); +} + +/** + * Creates an input element under the parentElement with the given id and defaultText. + * @param {!Element} parentElement + * @param {string} id + * @param {string} defaultText + * @param {function(*)} eventListener + * @param {boolean=} numeric + * @param {string=} size + * @return {!Element} element + */ +WebInspector.SettingsUI.createInput = function(parentElement, id, defaultText, eventListener, numeric, size) +{ + var element = parentElement.createChild("input"); + element.id = id; + element.type = "text"; + element.maxLength = 12; + element.style.width = size || "80px"; + element.value = defaultText; + element.align = "right"; + if (numeric) + element.className = "numeric"; + element.addEventListener("input", eventListener, false); + element.addEventListener("keydown", keyDownListener, false); + function keyDownListener(event) + { + if (isEnterKey(event)) + eventListener(event); + } + return element; +} + +/** + * @constructor + */ +WebInspector.UISettingDelegate = function() +{ +} + +WebInspector.UISettingDelegate.prototype = { + /** + * @return {?Element} + */ + settingElement: function() + { + return null; + } +} |