Chromium Code Reviews| Index: Source/devtools/front_end/settings/SettingsScreen.js |
| diff --git a/Source/devtools/front_end/settings/SettingsScreen.js b/Source/devtools/front_end/settings/SettingsScreen.js |
| index 800320b99bcf8015a986320a37d0e9f77b7b0e85..c0c242df9e23f0310015808f0b8cf6bb423b1016 100644 |
| --- a/Source/devtools/front_end/settings/SettingsScreen.js |
| +++ b/Source/devtools/front_end/settings/SettingsScreen.js |
| @@ -180,6 +180,7 @@ WebInspector.SettingsTab.prototype = { |
| WebInspector.GenericSettingsTab = function() |
| { |
| WebInspector.SettingsTab.call(this, WebInspector.UIString("General"), "general-tab-content"); |
| + WebInspector.GenericSettingsTab._instance = this; |
| /** @const */ |
| var explicitSectionOrder = ["", "Appearance", "Elements", "Sources", "Network", "Profiler", "Console", "Extensions"]; |
| @@ -201,18 +202,32 @@ WebInspector.GenericSettingsTab = function() |
| } |
| } |
| +/** @type {?WebInspector.GenericSettingsTab} */ |
| +WebInspector.GenericSettingsTab._instance; |
| + |
| +/** |
| + * @param {!Runtime.Extension} extension |
| + * @return {boolean} |
| + */ |
| +WebInspector.GenericSettingsTab.isSettingVisible = function(extension) |
| +{ |
| + var descriptor = extension.descriptor(); |
| + if (!("title" in descriptor)) |
| + return false; |
| + if (!(("category" in descriptor) || ("parentSettingName" in descriptor))) |
| + return false; |
| + return true; |
| +} |
| + |
| WebInspector.GenericSettingsTab.prototype = { |
| /** |
| * @param {!Runtime.Extension} extension |
| */ |
| _addSetting: function(extension) |
| { |
| - var descriptor = extension.descriptor(); |
| - if (!("title" in descriptor)) |
| - return; |
| - if (!(("category" in descriptor) || ("parentSettingName" in descriptor))) |
| + if (!WebInspector.GenericSettingsTab.isSettingVisible(extension)) |
| return; |
| - |
| + var descriptor = extension.descriptor(); |
| var sectionName = descriptor["category"]; |
| var settingName = descriptor["settingName"]; |
| var setting = WebInspector.moduleSetting(settingName); |
| @@ -272,8 +287,18 @@ WebInspector.GenericSettingsTab.prototype = { |
| { |
| var settingUI = /** @type {!WebInspector.SettingUI} */ (object); |
| var element = settingUI.settingElement(); |
| - if (element) |
| - this._sectionElement(sectionName).appendChild(element); |
| + if (!element) |
| + return; |
| + this._sectionElement(sectionName).appendChild(element); |
| + |
| + var settingsList = descriptor["settings"]; |
| + if (!settingsList) |
| + return; |
| + for (var settingName of settingsList) { |
| + this._nameToSettingElement.set(settingName, element); |
| + if (settingName === this._highlightedSettingName) |
| + this._highlight(); |
| + } |
| } |
| }, |
| @@ -292,6 +317,51 @@ WebInspector.GenericSettingsTab.prototype = { |
| return sectionElement; |
| }, |
| + wasShown: function() |
| + { |
| + this._highlight(); |
| + }, |
| + |
| + willHide: function() |
| + { |
| + this._hideHighlight(); |
| + }, |
| + |
| + _hideHighlight: function() |
| + { |
| + var element = this._highlightedSettingElement(); |
| + if (element) |
| + element.classList.remove("highlighted-setting"); |
| + delete this._highlightedSettingName; |
| + }, |
| + |
| + /** |
| + * @return {?Element} |
| + */ |
| + _highlightedSettingElement: function() |
| + { |
| + return this._highlightedSettingName ? (this._nameToSettingElement.get(this._highlightedSettingName) || null) : null; |
| + }, |
| + |
| + _highlight: function() |
| + { |
| + var element = this._highlightedSettingElement(); |
| + if (element) { |
| + element.classList.add("highlighted-setting"); |
| + element.scrollIntoView(); |
| + } |
| + }, |
| + |
| + /** |
| + * @param {!WebInspector.Setting} setting |
| + */ |
| + highlightSetting: function(setting) |
| + { |
| + this._hideHighlight(); |
| + this._highlightedSettingName = setting.name; |
|
pfeldman
2015/08/13 23:33:13
Lets highlight it when we know that it is on scree
|
| + this._highlight(); |
| + }, |
| + |
| __proto__: WebInspector.SettingsTab.prototype |
| } |
| @@ -608,6 +678,72 @@ WebInspector.SettingsController.ActionDelegate.prototype = { |
| /** |
| * @constructor |
| + * @implements {WebInspector.Revealer} |
| + */ |
| +WebInspector.SettingsController.Revealer = function() { } |
| + |
| +WebInspector.SettingsController.Revealer.prototype = { |
| + /** |
| + * @override |
| + * @param {!Object} object |
| + * @param {number=} lineNumber |
| + * @return {!Promise} |
| + */ |
| + reveal: function(object, lineNumber) |
| + { |
| + console.assert(object instanceof WebInspector.Setting); |
| + var setting = /** @type {!WebInspector.Setting} */ (object); |
| + var success = false; |
| + |
| + self.runtime.extensions("setting").forEach(revealModuleSetting); |
| + self.runtime.extensions(WebInspector.SettingUI).forEach(revealSettingUI); |
| + self.runtime.extensions("settings-view").forEach(revealSettingsView); |
| + |
| + return success ? Promise.resolve() : Promise.reject(); |
| + |
| + /** |
| + * @param {!Runtime.Extension} extension |
| + */ |
| + function revealModuleSetting(extension) |
| + { |
| + if (!WebInspector.GenericSettingsTab.isSettingVisible(extension)) |
| + return; |
| + if (extension.descriptor()["settingName"] === setting.name) { |
| + WebInspector._settingsController.showSettingsScreen("general"); |
| + WebInspector.GenericSettingsTab._instance.highlightSetting(setting); |
| + success = true; |
| + } |
| + } |
| + |
| + /** |
| + * @param {!Runtime.Extension} extension |
| + */ |
| + function revealSettingUI(extension) |
| + { |
| + var settings = extension.descriptor()["settings"]; |
| + if (settings && settings.indexOf(setting.name) !== -1) { |
| + WebInspector._settingsController.showSettingsScreen("general"); |
| + WebInspector.GenericSettingsTab._instance.highlightSetting(setting); |
| + success = true; |
| + } |
| + } |
| + |
| + /** |
| + * @param {!Runtime.Extension} extension |
| + */ |
| + function revealSettingsView(extension) |
| + { |
| + var settings = extension.descriptor()["settings"]; |
| + if (settings && settings.indexOf(setting.name) !== -1) { |
| + WebInspector._settingsController.showSettingsScreen(extension.descriptor()["name"]); |
| + success = true; |
| + } |
| + } |
| + } |
| +} |
| + |
| +/** |
| + * @constructor |
| * @extends {WebInspector.Object} |
| * @param {!Array.<{id: string, placeholder: (string|undefined), options: (!Array.<string>|undefined)}>} columns |
| * @param {function(!Element, {id: string, placeholder: (string|undefined), options: (!Array.<string>|undefined)}, ?string)} itemRenderer |