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

Unified Diff: Source/devtools/front_end/SettingsScreen.js

Issue 213423010: DevTools: Migrate General tab settings to extensions (Closed) Base URL: svn://svn.chromium.org/blink/trunk
Patch Set: Comments addressed Created 6 years, 9 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 | « Source/devtools/front_end/Main.js ('k') | Source/devtools/front_end/SettingsUI.js » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: Source/devtools/front_end/SettingsScreen.js
diff --git a/Source/devtools/front_end/SettingsScreen.js b/Source/devtools/front_end/SettingsScreen.js
index 8451756d553668a6809b1cade0df24cbb3dc770f..70a2de37204e9774707ab858a47fa3cdce588e16 100644
--- a/Source/devtools/front_end/SettingsScreen.js
+++ b/Source/devtools/front_end/SettingsScreen.js
@@ -62,20 +62,6 @@ WebInspector.SettingsScreen = function(onHide)
}
/**
- * @param {string} text
- * @return {?string}
- */
-WebInspector.SettingsScreen.regexValidator = function(text)
-{
- var regex;
- try {
- regex = new RegExp(text);
- } catch (e) {
- }
- return regex ? null : WebInspector.UIString("Invalid pattern");
-}
-
-/**
* @param {number} min
* @param {number} max
* @param {string} text
@@ -205,60 +191,6 @@ WebInspector.SettingsTab.prototype = {
return p;
},
- /**
- * @param {string} label
- * @param {!WebInspector.Setting} setting
- * @param {boolean} numeric
- * @param {number=} maxLength
- * @param {string=} width
- * @param {function(string):?string=} validatorCallback
- */
- _createInputSetting: function(label, setting, numeric, maxLength, width, validatorCallback)
- {
- var p = document.createElement("p");
- var labelElement = p.createChild("label");
- labelElement.textContent = label;
- var inputElement = p.createChild("input");
- inputElement.value = setting.get();
- inputElement.type = "text";
- if (numeric)
- inputElement.className = "numeric";
- if (maxLength)
- inputElement.maxLength = maxLength;
- if (width)
- inputElement.style.width = width;
- if (validatorCallback) {
- var errorMessageLabel = p.createChild("div");
- errorMessageLabel.classList.add("field-error-message");
- errorMessageLabel.style.color = "DarkRed";
- inputElement.oninput = function()
- {
- var error = validatorCallback(inputElement.value);
- if (!error)
- error = "";
- errorMessageLabel.textContent = error;
- };
- }
-
- function onBlur()
- {
- setting.set(numeric ? Number(inputElement.value) : inputElement.value);
- }
- inputElement.addEventListener("blur", onBlur, false);
-
- return p;
- },
-
- _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;
- },
-
__proto__: WebInspector.VBox.prototype
}
@@ -270,88 +202,9 @@ WebInspector.GenericSettingsTab = function()
{
WebInspector.SettingsTab.call(this, WebInspector.UIString("General"), "general-tab-content");
- var p = this._appendSection();
- p.appendChild(WebInspector.SettingsUI.createSettingCheckbox(WebInspector.UIString("Disable cache (while DevTools is open)"), WebInspector.settings.cacheDisabled));
- var disableJSElement = WebInspector.SettingsUI.createSettingCheckbox(WebInspector.UIString("Disable JavaScript"), WebInspector.settings.javaScriptDisabled);
- p.appendChild(disableJSElement);
- WebInspector.settings.javaScriptDisabled.addChangeListener(this._javaScriptDisabledChanged, this);
- this._disableJSCheckbox = disableJSElement.getElementsByTagName("input")[0];
- var disableJSInfoParent = this._disableJSCheckbox.parentElement.createChild("span", "monospace");
- this._disableJSInfo = disableJSInfoParent.createChild("span", "object-info-state-note hidden");
- this._disableJSInfo.title = WebInspector.UIString("JavaScript is blocked on the inspected page (may be disabled in browser settings).");
-
- WebInspector.resourceTreeModel.addEventListener(WebInspector.ResourceTreeModel.EventTypes.MainFrameNavigated, this._updateScriptDisabledCheckbox, this);
- this._updateScriptDisabledCheckbox();
-
- p = this._appendSection(WebInspector.UIString("Appearance"));
- var splitVerticallyTitle = WebInspector.UIString("Split panels vertically when docked to %s", WebInspector.experimentsSettings.dockToLeft.isEnabled() ? "left or right" : "right");
- p.appendChild(WebInspector.SettingsUI.createSettingCheckbox(splitVerticallyTitle, WebInspector.settings.splitVerticallyWhenDockedToRight));
- var panelShortcutTitle = WebInspector.UIString("Enable %s + 1-9 shortcut to switch panels", WebInspector.isMac() ? "Cmd" : "Ctrl");
- p.appendChild(WebInspector.SettingsUI.createSettingCheckbox(panelShortcutTitle, WebInspector.settings.shortcutPanelSwitch));
-
- p = this._appendSection(WebInspector.UIString("Elements"));
- var colorFormatElement = this._createSelectSetting(WebInspector.UIString("Color format"), [
- [ WebInspector.UIString("As authored"), WebInspector.Color.Format.Original ],
- [ "HEX: #DAC0DE", WebInspector.Color.Format.HEX ],
- [ "RGB: rgb(128, 255, 255)", WebInspector.Color.Format.RGB ],
- [ "HSL: hsl(300, 80%, 90%)", WebInspector.Color.Format.HSL ]
- ], WebInspector.settings.colorFormat);
- p.appendChild(colorFormatElement);
- p.appendChild(WebInspector.SettingsUI.createSettingCheckbox(WebInspector.UIString("Show user agent styles"), WebInspector.settings.showUserAgentStyles));
- p.appendChild(WebInspector.SettingsUI.createSettingCheckbox(WebInspector.UIString("Show user agent shadow DOM"), WebInspector.settings.showUAShadowDOM));
- p.appendChild(WebInspector.SettingsUI.createSettingCheckbox(WebInspector.UIString("Word wrap"), WebInspector.settings.domWordWrap));
- p.appendChild(WebInspector.SettingsUI.createSettingCheckbox(WebInspector.UIString("Show rulers"), WebInspector.settings.showMetricsRulers));
-
- p = this._appendSection(WebInspector.UIString("Sources"));
- p.appendChild(WebInspector.SettingsUI.createSettingCheckbox(WebInspector.UIString("Search in content scripts"), WebInspector.settings.searchInContentScripts));
- p.appendChild(WebInspector.SettingsUI.createSettingCheckbox(WebInspector.UIString("Enable JavaScript source maps"), WebInspector.settings.jsSourceMapsEnabled));
-
- var checkbox = WebInspector.SettingsUI.createSettingCheckbox(WebInspector.UIString("Enable CSS source maps"), WebInspector.settings.cssSourceMapsEnabled);
- p.appendChild(checkbox);
- var fieldset = WebInspector.SettingsUI.createSettingFieldset(WebInspector.settings.cssSourceMapsEnabled);
- var autoReloadCSSCheckbox = fieldset.createChild("input");
- fieldset.appendChild(WebInspector.SettingsUI.createSettingCheckbox(WebInspector.UIString("Auto-reload generated CSS"), WebInspector.settings.cssReloadEnabled, false, autoReloadCSSCheckbox));
- checkbox.appendChild(fieldset);
-
- var indentationElement = this._createSelectSetting(WebInspector.UIString("Default indentation"), [
- [ WebInspector.UIString("2 spaces"), WebInspector.TextUtils.Indent.TwoSpaces ],
- [ WebInspector.UIString("4 spaces"), WebInspector.TextUtils.Indent.FourSpaces ],
- [ WebInspector.UIString("8 spaces"), WebInspector.TextUtils.Indent.EightSpaces ],
- [ WebInspector.UIString("Tab character"), WebInspector.TextUtils.Indent.TabCharacter ]
- ], WebInspector.settings.textEditorIndent);
- p.appendChild(indentationElement);
- p.appendChild(WebInspector.SettingsUI.createSettingCheckbox(WebInspector.UIString("Detect indentation"), WebInspector.settings.textEditorAutoDetectIndent));
- p.appendChild(WebInspector.SettingsUI.createSettingCheckbox(WebInspector.UIString("Autocompletion"), WebInspector.settings.textEditorAutocompletion));
- p.appendChild(WebInspector.SettingsUI.createSettingCheckbox(WebInspector.UIString("Bracket matching"), WebInspector.settings.textEditorBracketMatching));
- p.appendChild(WebInspector.SettingsUI.createSettingCheckbox(WebInspector.UIString("Show whitespace characters"), WebInspector.settings.showWhitespacesInEditor));
- if (WebInspector.experimentsSettings.frameworksDebuggingSupport.isEnabled()) {
- checkbox = WebInspector.SettingsUI.createSettingCheckbox(WebInspector.UIString("Skip stepping through sources with particular names"), WebInspector.settings.skipStackFramesSwitch);
- fieldset = WebInspector.SettingsUI.createSettingFieldset(WebInspector.settings.skipStackFramesSwitch);
- fieldset.appendChild(this._createInputSetting(WebInspector.UIString("Pattern"), WebInspector.settings.skipStackFramesPattern, false, 1000, "100px", WebInspector.SettingsScreen.regexValidator));
- checkbox.appendChild(fieldset);
- p.appendChild(checkbox);
- }
- WebInspector.settings.skipStackFramesSwitch.addChangeListener(this._skipStackFramesSwitchOrPatternChanged, this);
- WebInspector.settings.skipStackFramesPattern.addChangeListener(this._skipStackFramesSwitchOrPatternChanged, this);
-
- p = this._appendSection(WebInspector.UIString("Profiler"));
- p.appendChild(WebInspector.SettingsUI.createSettingCheckbox(WebInspector.UIString("Show advanced heap snapshot properties"), WebInspector.settings.showAdvancedHeapSnapshotProperties));
- p.appendChild(WebInspector.SettingsUI.createSettingCheckbox(WebInspector.UIString("High resolution CPU profiling"), WebInspector.settings.highResolutionCpuProfiling));
-
- p = this._appendSection(WebInspector.UIString("Console"));
- p.appendChild(WebInspector.SettingsUI.createSettingCheckbox(WebInspector.UIString("Log XMLHttpRequests"), WebInspector.settings.monitoringXHREnabled));
- p.appendChild(WebInspector.SettingsUI.createSettingCheckbox(WebInspector.UIString("Preserve log upon navigation"), WebInspector.settings.preserveConsoleLog));
- p.appendChild(WebInspector.SettingsUI.createSettingCheckbox(WebInspector.UIString("Show timestamps"), WebInspector.settings.consoleTimestampsEnabled));
-
- if (WebInspector.openAnchorLocationRegistry.handlerNames.length > 0) {
- var handlerSelector = new WebInspector.HandlerSelector(WebInspector.openAnchorLocationRegistry);
- p = this._appendSection(WebInspector.UIString("Extensions"));
- p.appendChild(this._createCustomSetting(WebInspector.UIString("Open links in"), handlerSelector.element));
- }
-
- p = this._appendSection();
+ this._populateSectionsFromExtensions();
- var restoreDefaults = p.createChild("input", "settings-tab-text-button");
+ var restoreDefaults = this._appendSection().createChild("input", "settings-tab-text-button");
restoreDefaults.type = "button";
restoreDefaults.value = WebInspector.UIString("Restore defaults and reload");
restoreDefaults.addEventListener("click", restoreAndReload);
@@ -365,38 +218,118 @@ WebInspector.GenericSettingsTab = function()
}
WebInspector.GenericSettingsTab.prototype = {
- _updateScriptDisabledCheckbox: function()
+ _populateSectionsFromExtensions: function()
{
+ /** @const */
+ var explicitSectionOrder = ["", "Appearance", "Elements", "Sources", "Profiler", "Console", "Extensions"];
+
+ var allExtensions = WebInspector.moduleManager.extensions("ui-setting");
+
+ /** @type {!StringMultimap.<!WebInspector.ModuleManager.Extension>} */
+ var extensionsBySectionId = new StringMultimap();
+ /** @type {!StringMultimap.<!WebInspector.ModuleManager.Extension>} */
+ var childSettingExtensionsByParentName = new StringMultimap();
+
+ allExtensions.forEach(function(extension) {
+ var descriptor = extension.descriptor();
+ var sectionName = descriptor["section"] || "";
+ if (!sectionName && descriptor["parentSettingName"]) {
+ childSettingExtensionsByParentName.put(descriptor["parentSettingName"], extension);
+ return;
+ }
+ extensionsBySectionId.put(sectionName, extension);
+ });
+
+ var sectionIds = extensionsBySectionId.keys();
+ var explicitlyOrderedSections = {};
+ for (var i = 0; i < explicitSectionOrder.length; ++i) {
+ explicitlyOrderedSections[explicitSectionOrder[i]] = true;
+ var extensions = /** @type {!Set.<!WebInspector.ModuleManager.Extension>} */ (extensionsBySectionId.get(explicitSectionOrder[i]));
+ if (!extensions)
+ continue;
+ this._addSectionWithExtensionProvidedSettings(explicitSectionOrder[i], extensions.items(), childSettingExtensionsByParentName);
+ }
+ for (var i = 0; i < sectionIds.length; ++i) {
+ if (explicitlyOrderedSections[sectionIds[i]])
+ continue;
+ this._addSectionWithExtensionProvidedSettings(sectionIds[i], /** @type {!Set.<!WebInspector.ModuleManager.Extension>} */ (extensionsBySectionId.get(sectionIds[i])).items(), childSettingExtensionsByParentName);
+ }
+ },
+
+ /**
+ * @param {string} sectionName
+ * @param {!Array.<!WebInspector.ModuleManager.Extension>} extensions
+ * @param {!StringMultimap.<!WebInspector.ModuleManager.Extension>} childSettingExtensionsByParentName
+ */
+ _addSectionWithExtensionProvidedSettings: function(sectionName, extensions, childSettingExtensionsByParentName)
+ {
+ var uiSectionName = sectionName && WebInspector.UIString(sectionName);
+ var sectionElement = this._appendSection(uiSectionName);
+ extensions.forEach(processSetting.bind(this, null));
+
/**
- * @param {?Protocol.Error} error
- * @param {string} status
+ * @param {?Element} parentFieldset
+ * @param {!WebInspector.ModuleManager.Extension} extension
* @this {WebInspector.GenericSettingsTab}
*/
- function executionStatusCallback(error, status)
+ function processSetting(parentFieldset, extension)
{
- if (error || !status)
+ var descriptor = extension.descriptor();
+ var experimentName = descriptor["experiment"];
+ if (experimentName && (!WebInspector.experimentsSettings[experimentName] || !WebInspector.experimentsSettings[experimentName].isEnabled()))
return;
- var forbidden = (status === "forbidden");
- var disabled = forbidden || (status === "disabled");
-
- this._disableJSInfo.classList.toggle("hidden", !forbidden);
- this._disableJSCheckbox.checked = disabled;
- this._disableJSCheckbox.disabled = forbidden;
+ var settingName = descriptor["settingName"];
+ var setting = WebInspector.settings[settingName];
+ var instance = extension.instance();
+ var settingControl;
+ if (instance && descriptor["settingType"] === "custom") {
+ settingControl = instance.settingElement();
+ if (!settingControl)
+ return;
+ }
+ if (!settingControl) {
+ var uiTitle = WebInspector.UIString(descriptor["title"]);
+ settingControl = createSettingControl.call(this, uiTitle, setting, descriptor, instance);
+ }
+ if (settingName) {
+ var childSettings = /** @type {!Set.<!WebInspector.ModuleManager.Extension>|undefined} */ (childSettingExtensionsByParentName.get(settingName));
+ if (childSettings) {
+ var fieldSet = WebInspector.SettingsUI.createSettingFieldset(setting);
+ settingControl.appendChild(fieldSet);
+ childSettings.items().forEach(function(item) { processSetting.call(this, fieldSet, item); }, this);
+ }
+ }
+ var containerElement = parentFieldset || sectionElement;
+ containerElement.appendChild(settingControl);
}
- PageAgent.getScriptExecutionStatus(executionStatusCallback.bind(this));
- },
-
- _javaScriptDisabledChanged: function()
- {
- // We need to manually update the checkbox state, since enabling JavaScript in the page can actually uncover the "forbidden" state.
- PageAgent.setScriptExecutionDisabled(WebInspector.settings.javaScriptDisabled.get(), this._updateScriptDisabledCheckbox.bind(this));
- },
-
- _skipStackFramesSwitchOrPatternChanged: function()
- {
- WebInspector.debuggerModel.applySkipStackFrameSettings();
+ /**
+ * @param {string} uiTitle
+ * @param {!WebInspector.Setting} setting
+ * @param {!Object} descriptor
+ * @param {?Object} instance
+ * @return {!Element}
+ * @this {WebInspector.GenericSettingsTab}
+ */
+ function createSettingControl(uiTitle, setting, descriptor, instance)
+ {
+ switch (descriptor["settingType"]) {
+ case "checkbox":
+ return WebInspector.SettingsUI.createSettingCheckbox(uiTitle, setting);
+ case "select":
+ var descriptorOptions = descriptor["options"]
+ var options = new Array(descriptorOptions.length);
+ for (var i = 0; i < options.length; ++i) {
+ // The third array item flags that the option name is "raw" (non-i18n-izable).
+ var optionName = descriptorOptions[i][2] ? descriptorOptions[i][0] : WebInspector.UIString(descriptorOptions[i][0]);
+ options[i] = [WebInspector.UIString(descriptorOptions[i][0]), descriptorOptions[i][1]];
+ }
+ return this._createSelectSetting(uiTitle, options, setting);
+ default:
+ throw "Invalid setting type: " + descriptor["settingType"];
+ }
+ }
},
/**
@@ -426,7 +359,7 @@ WebInspector.WorkspaceSettingsTab = function()
WebInspector.isolatedFileSystemManager.addEventListener(WebInspector.IsolatedFileSystemManager.Events.FileSystemRemoved, this._fileSystemRemoved, this);
this._commonSection = this._appendSection(WebInspector.UIString("Common"));
- var folderExcludePatternInput = this._createInputSetting(WebInspector.UIString("Folder exclude pattern"), WebInspector.settings.workspaceFolderExcludePattern, false, 0, "270px", WebInspector.SettingsScreen.regexValidator);
+ var folderExcludePatternInput = WebInspector.SettingsUI.createSettingInputField(WebInspector.UIString("Folder exclude pattern"), WebInspector.settings.workspaceFolderExcludePattern, false, 0, "270px", WebInspector.SettingsUI.regexValidator);
this._commonSection.appendChild(folderExcludePatternInput);
this._fileSystemsSection = this._appendSection(WebInspector.UIString("Folders"));
« no previous file with comments | « Source/devtools/front_end/Main.js ('k') | Source/devtools/front_end/SettingsUI.js » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698