| Index: Source/devtools/front_end/SettingsScreen.js
|
| diff --git a/Source/devtools/front_end/SettingsScreen.js b/Source/devtools/front_end/SettingsScreen.js
|
| deleted file mode 100644
|
| index 172138e18ef99abf27516672be149b85a8429614..0000000000000000000000000000000000000000
|
| --- a/Source/devtools/front_end/SettingsScreen.js
|
| +++ /dev/null
|
| @@ -1,1075 +0,0 @@
|
| -/*
|
| - * Copyright (C) 2013 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.
|
| - */
|
| -
|
| -/**
|
| - * @constructor
|
| - * @param {!function()} onHide
|
| - * @extends {WebInspector.HelpScreen}
|
| - */
|
| -WebInspector.SettingsScreen = function(onHide)
|
| -{
|
| - WebInspector.HelpScreen.call(this);
|
| - this.element.id = "settings-screen";
|
| -
|
| - /** @type {function()} */
|
| - this._onHide = onHide;
|
| -
|
| - this._tabbedPane = new WebInspector.TabbedPane();
|
| - this._tabbedPane.element.classList.add("help-window-main");
|
| - var settingsLabelElement = document.createElement("div");
|
| - settingsLabelElement.className = "help-window-label";
|
| - settingsLabelElement.createTextChild(WebInspector.UIString("Settings"));
|
| - this._tabbedPane.element.insertBefore(settingsLabelElement, this._tabbedPane.element.firstChild);
|
| - this._tabbedPane.element.appendChild(this._createCloseButton());
|
| - this._tabbedPane.appendTab(WebInspector.SettingsScreen.Tabs.General, WebInspector.UIString("General"), new WebInspector.GenericSettingsTab());
|
| - this._tabbedPane.appendTab(WebInspector.SettingsScreen.Tabs.Workspace, WebInspector.UIString("Workspace"), new WebInspector.WorkspaceSettingsTab());
|
| - if (WebInspector.experimentsSettings.experimentsEnabled)
|
| - this._tabbedPane.appendTab(WebInspector.SettingsScreen.Tabs.Experiments, WebInspector.UIString("Experiments"), new WebInspector.ExperimentsSettingsTab());
|
| - this._tabbedPane.appendTab(WebInspector.SettingsScreen.Tabs.Shortcuts, WebInspector.UIString("Shortcuts"), WebInspector.shortcutsScreen.createShortcutsTabView());
|
| - this._tabbedPane.shrinkableTabs = false;
|
| - this._tabbedPane.verticalTabLayout = true;
|
| -
|
| - this._lastSelectedTabSetting = WebInspector.settings.createSetting("lastSelectedSettingsTab", WebInspector.SettingsScreen.Tabs.General);
|
| - this.selectTab(this._lastSelectedTabSetting.get());
|
| - this._tabbedPane.addEventListener(WebInspector.TabbedPane.EventTypes.TabSelected, this._tabSelected, this);
|
| - this.element.addEventListener("keydown", this._keyDown.bind(this), false);
|
| - this._developerModeCounter = 0;
|
| -}
|
| -
|
| -/**
|
| - * @param {number} min
|
| - * @param {number} max
|
| - * @param {string} text
|
| - * @return {?string}
|
| - */
|
| -WebInspector.SettingsScreen.integerValidator = function(min, max, text)
|
| -{
|
| - var value = Number(text);
|
| - if (isNaN(value))
|
| - return WebInspector.UIString("Invalid number format");
|
| - if (value < min || value > max)
|
| - return WebInspector.UIString("Value is out of range [%d, %d]", min, max);
|
| - return null;
|
| -}
|
| -
|
| -WebInspector.SettingsScreen.Tabs = {
|
| - General: "general",
|
| - Overrides: "overrides",
|
| - Workspace: "workspace",
|
| - Experiments: "experiments",
|
| - Shortcuts: "shortcuts"
|
| -}
|
| -
|
| -WebInspector.SettingsScreen.prototype = {
|
| - /**
|
| - * @param {string} tabId
|
| - */
|
| - selectTab: function(tabId)
|
| - {
|
| - this._tabbedPane.selectTab(tabId);
|
| - },
|
| -
|
| - /**
|
| - * @param {!WebInspector.Event} event
|
| - */
|
| - _tabSelected: function(event)
|
| - {
|
| - this._lastSelectedTabSetting.set(this._tabbedPane.selectedTabId);
|
| - },
|
| -
|
| - /**
|
| - * @override
|
| - */
|
| - wasShown: function()
|
| - {
|
| - this._tabbedPane.show(this.element);
|
| - WebInspector.HelpScreen.prototype.wasShown.call(this);
|
| - },
|
| -
|
| - /**
|
| - * @override
|
| - * @return {boolean}
|
| - */
|
| - isClosingKey: function(keyCode)
|
| - {
|
| - return [
|
| - WebInspector.KeyboardShortcut.Keys.Enter.code,
|
| - WebInspector.KeyboardShortcut.Keys.Esc.code,
|
| - ].indexOf(keyCode) >= 0;
|
| - },
|
| -
|
| - /**
|
| - * @override
|
| - */
|
| - willHide: function()
|
| - {
|
| - this._onHide();
|
| - WebInspector.HelpScreen.prototype.willHide.call(this);
|
| - },
|
| -
|
| - /**
|
| - * @param {?Event} event
|
| - */
|
| - _keyDown: function(event)
|
| - {
|
| - var shiftKeyCode = 16;
|
| - if (event.keyCode === shiftKeyCode && ++this._developerModeCounter > 5)
|
| - this.element.classList.add("settings-developer-mode");
|
| - },
|
| -
|
| - __proto__: WebInspector.HelpScreen.prototype
|
| -}
|
| -
|
| -/**
|
| - * @constructor
|
| - * @extends {WebInspector.VBox}
|
| - * @param {string} name
|
| - * @param {string=} id
|
| - */
|
| -WebInspector.SettingsTab = function(name, id)
|
| -{
|
| - WebInspector.VBox.call(this);
|
| - this.element.classList.add("settings-tab-container");
|
| - if (id)
|
| - this.element.id = id;
|
| - var header = this.element.createChild("header");
|
| - header.createChild("h3").appendChild(document.createTextNode(name));
|
| - this.containerElement = this.element.createChild("div", "help-container-wrapper").createChild("div", "settings-tab help-content help-container");
|
| -}
|
| -
|
| -WebInspector.SettingsTab.prototype = {
|
| - /**
|
| - * @param {string=} name
|
| - * @return {!Element}
|
| - */
|
| - _appendSection: function(name)
|
| - {
|
| - var block = this.containerElement.createChild("div", "help-block");
|
| - if (name)
|
| - block.createChild("div", "help-section-title").textContent = name;
|
| - return block;
|
| - },
|
| -
|
| - _createSelectSetting: function(name, options, setting)
|
| - {
|
| - var p = document.createElement("p");
|
| - var labelElement = p.createChild("label");
|
| - labelElement.textContent = name;
|
| -
|
| - var select = p.createChild("select");
|
| - var settingValue = setting.get();
|
| -
|
| - for (var i = 0; i < options.length; ++i) {
|
| - var option = options[i];
|
| - select.add(new Option(option[0], option[1]));
|
| - if (settingValue === option[1])
|
| - select.selectedIndex = i;
|
| - }
|
| -
|
| - function changeListener(e)
|
| - {
|
| - // Don't use e.target.value to avoid conversion of the value to string.
|
| - setting.set(options[select.selectedIndex][1]);
|
| - }
|
| -
|
| - select.addEventListener("change", changeListener, false);
|
| - return p;
|
| - },
|
| -
|
| - __proto__: WebInspector.VBox.prototype
|
| -}
|
| -
|
| -/**
|
| - * @constructor
|
| - * @extends {WebInspector.SettingsTab}
|
| - */
|
| -WebInspector.GenericSettingsTab = function()
|
| -{
|
| - WebInspector.SettingsTab.call(this, WebInspector.UIString("General"), "general-tab-content");
|
| -
|
| - this._populateSectionsFromExtensions();
|
| -
|
| - 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);
|
| -
|
| - function restoreAndReload()
|
| - {
|
| - if (window.localStorage)
|
| - window.localStorage.clear();
|
| - WebInspector.reload();
|
| - }
|
| -}
|
| -
|
| -WebInspector.GenericSettingsTab.prototype = {
|
| - _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.values(), 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])).values(), 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 {?Element} parentFieldset
|
| - * @param {!WebInspector.ModuleManager.Extension} extension
|
| - * @this {WebInspector.GenericSettingsTab}
|
| - */
|
| - function processSetting(parentFieldset, extension)
|
| - {
|
| - var descriptor = extension.descriptor();
|
| - var experimentName = descriptor["experiment"];
|
| - if (experimentName && (!WebInspector.experimentsSettings[experimentName] || !WebInspector.experimentsSettings[experimentName].isEnabled()))
|
| - return;
|
| -
|
| - 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.values().forEach(function(item) { processSetting.call(this, fieldSet, item); }, this);
|
| - }
|
| - }
|
| - var containerElement = parentFieldset || sectionElement;
|
| - containerElement.appendChild(settingControl);
|
| - }
|
| -
|
| - /**
|
| - * @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"];
|
| - }
|
| - }
|
| - },
|
| -
|
| - /**
|
| - * @param {?Element} p
|
| - */
|
| - _appendDrawerNote: function(p)
|
| - {
|
| - var noteElement = p.createChild("div", "help-field-note");
|
| - noteElement.createTextChild("Hit ");
|
| - noteElement.createChild("span", "help-key").textContent = "Esc";
|
| - noteElement.createTextChild(WebInspector.UIString(" or click the"));
|
| - noteElement.appendChild(new WebInspector.StatusBarButton(WebInspector.UIString("Drawer"), "console-status-bar-item").element);
|
| - noteElement.createTextChild(WebInspector.UIString("toolbar item"));
|
| - },
|
| -
|
| - __proto__: WebInspector.SettingsTab.prototype
|
| -}
|
| -
|
| -/**
|
| - * @constructor
|
| - * @extends {WebInspector.SettingsTab}
|
| - */
|
| -WebInspector.WorkspaceSettingsTab = function()
|
| -{
|
| - WebInspector.SettingsTab.call(this, WebInspector.UIString("Workspace"), "workspace-tab-content");
|
| - WebInspector.isolatedFileSystemManager.addEventListener(WebInspector.IsolatedFileSystemManager.Events.FileSystemAdded, this._fileSystemAdded, this);
|
| - WebInspector.isolatedFileSystemManager.addEventListener(WebInspector.IsolatedFileSystemManager.Events.FileSystemRemoved, this._fileSystemRemoved, this);
|
| -
|
| - this._commonSection = this._appendSection(WebInspector.UIString("Common"));
|
| - 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"));
|
| - this._fileSystemsListContainer = this._fileSystemsSection.createChild("p", "settings-list-container");
|
| -
|
| - this._addFileSystemRowElement = this._fileSystemsSection.createChild("div");
|
| - var addFileSystemButton = this._addFileSystemRowElement.createChild("input", "settings-tab-text-button");
|
| - addFileSystemButton.type = "button";
|
| - addFileSystemButton.value = WebInspector.UIString("Add folder\u2026");
|
| - addFileSystemButton.addEventListener("click", this._addFileSystemClicked.bind(this));
|
| -
|
| - this._editFileSystemButton = this._addFileSystemRowElement.createChild("input", "settings-tab-text-button");
|
| - this._editFileSystemButton.type = "button";
|
| - this._editFileSystemButton.value = WebInspector.UIString("Edit\u2026");
|
| - this._editFileSystemButton.addEventListener("click", this._editFileSystemClicked.bind(this));
|
| - this._updateEditFileSystemButtonState();
|
| -
|
| - this._reset();
|
| -}
|
| -
|
| -WebInspector.WorkspaceSettingsTab.prototype = {
|
| - wasShown: function()
|
| - {
|
| - WebInspector.SettingsTab.prototype.wasShown.call(this);
|
| - this._reset();
|
| - },
|
| -
|
| - _reset: function()
|
| - {
|
| - this._resetFileSystems();
|
| - },
|
| -
|
| - _resetFileSystems: function()
|
| - {
|
| - this._fileSystemsListContainer.removeChildren();
|
| - var fileSystemPaths = WebInspector.isolatedFileSystemManager.mapping().fileSystemPaths();
|
| - delete this._fileSystemsList;
|
| -
|
| - if (!fileSystemPaths.length) {
|
| - var noFileSystemsMessageElement = this._fileSystemsListContainer.createChild("div", "no-file-systems-message");
|
| - noFileSystemsMessageElement.textContent = WebInspector.UIString("You have no file systems added.");
|
| - return;
|
| - }
|
| -
|
| - this._fileSystemsList = new WebInspector.SettingsList(["path"], this._renderFileSystem.bind(this));
|
| - this._fileSystemsList.element.classList.add("file-systems-list");
|
| - this._fileSystemsList.addEventListener(WebInspector.SettingsList.Events.Selected, this._fileSystemSelected.bind(this));
|
| - this._fileSystemsList.addEventListener(WebInspector.SettingsList.Events.Removed, this._fileSystemRemovedfromList.bind(this));
|
| - this._fileSystemsList.addEventListener(WebInspector.SettingsList.Events.DoubleClicked, this._fileSystemDoubleClicked.bind(this));
|
| - this._fileSystemsListContainer.appendChild(this._fileSystemsList.element);
|
| - for (var i = 0; i < fileSystemPaths.length; ++i)
|
| - this._fileSystemsList.addItem(fileSystemPaths[i]);
|
| - this._updateEditFileSystemButtonState();
|
| - },
|
| -
|
| - _updateEditFileSystemButtonState: function()
|
| - {
|
| - this._editFileSystemButton.disabled = !this._selectedFileSystemPath();
|
| - },
|
| -
|
| - /**
|
| - * @param {!WebInspector.Event} event
|
| - */
|
| - _fileSystemSelected: function(event)
|
| - {
|
| - this._updateEditFileSystemButtonState();
|
| - },
|
| -
|
| - /**
|
| - * @param {!WebInspector.Event} event
|
| - */
|
| - _fileSystemDoubleClicked: function(event)
|
| - {
|
| - var id = /** @type{?string} */ (event.data);
|
| - this._editFileSystem(id);
|
| - },
|
| -
|
| - /**
|
| - * @param {!WebInspector.Event=} event
|
| - */
|
| - _editFileSystemClicked: function(event)
|
| - {
|
| - this._editFileSystem(this._selectedFileSystemPath());
|
| - },
|
| -
|
| - /**
|
| - * @param {?string} id
|
| - */
|
| - _editFileSystem: function(id)
|
| - {
|
| - WebInspector.EditFileSystemDialog.show(WebInspector.inspectorView.element, id);
|
| - },
|
| -
|
| - /**
|
| - * @param {function(?Event)} handler
|
| - * @return {!Element}
|
| - */
|
| - _createRemoveButton: function(handler)
|
| - {
|
| - var removeButton = document.createElement("button");
|
| - removeButton.classList.add("button");
|
| - removeButton.classList.add("remove-item-button");
|
| - removeButton.value = WebInspector.UIString("Remove");
|
| - if (handler)
|
| - removeButton.addEventListener("click", handler, false);
|
| - else
|
| - removeButton.disabled = true;
|
| - return removeButton;
|
| - },
|
| -
|
| - /**
|
| - * @param {!Element} columnElement
|
| - * @param {string} column
|
| - * @param {?string} id
|
| - */
|
| - _renderFileSystem: function(columnElement, column, id)
|
| - {
|
| - if (!id)
|
| - return "";
|
| - var fileSystemPath = id;
|
| - var textElement = columnElement.createChild("span", "list-column-text");
|
| - var pathElement = textElement.createChild("span", "file-system-path");
|
| - pathElement.title = fileSystemPath;
|
| -
|
| - const maxTotalPathLength = 55;
|
| - const maxFolderNameLength = 30;
|
| -
|
| - var lastIndexOfSlash = fileSystemPath.lastIndexOf(WebInspector.isWin() ? "\\" : "/");
|
| - var folderName = fileSystemPath.substr(lastIndexOfSlash + 1);
|
| - var folderPath = fileSystemPath.substr(0, lastIndexOfSlash + 1);
|
| - folderPath = folderPath.trimMiddle(maxTotalPathLength - Math.min(maxFolderNameLength, folderName.length));
|
| - folderName = folderName.trimMiddle(maxFolderNameLength);
|
| -
|
| - var folderPathElement = pathElement.createChild("span");
|
| - folderPathElement.textContent = folderPath;
|
| -
|
| - var nameElement = pathElement.createChild("span", "file-system-path-name");
|
| - nameElement.textContent = folderName;
|
| - },
|
| -
|
| - /**
|
| - * @param {!WebInspector.Event} event
|
| - */
|
| - _fileSystemRemovedfromList: function(event)
|
| - {
|
| - var id = /** @type{?string} */ (event.data);
|
| - if (!id)
|
| - return;
|
| - WebInspector.isolatedFileSystemManager.removeFileSystem(id);
|
| - },
|
| -
|
| - _addFileSystemClicked: function()
|
| - {
|
| - WebInspector.isolatedFileSystemManager.addFileSystem();
|
| - },
|
| -
|
| - _fileSystemAdded: function(event)
|
| - {
|
| - var fileSystem = /** @type {!WebInspector.IsolatedFileSystem} */ (event.data);
|
| - if (!this._fileSystemsList)
|
| - this._reset();
|
| - else
|
| - this._fileSystemsList.addItem(fileSystem.path());
|
| - },
|
| -
|
| - _fileSystemRemoved: function(event)
|
| - {
|
| - var fileSystem = /** @type {!WebInspector.IsolatedFileSystem} */ (event.data);
|
| - var selectedFileSystemPath = this._selectedFileSystemPath();
|
| - if (this._fileSystemsList.itemForId(fileSystem.path()))
|
| - this._fileSystemsList.removeItem(fileSystem.path());
|
| - if (!this._fileSystemsList.itemIds().length)
|
| - this._reset();
|
| - this._updateEditFileSystemButtonState();
|
| - },
|
| -
|
| - _selectedFileSystemPath: function()
|
| - {
|
| - return this._fileSystemsList ? this._fileSystemsList.selectedId() : null;
|
| - },
|
| -
|
| - __proto__: WebInspector.SettingsTab.prototype
|
| -}
|
| -
|
| -
|
| -/**
|
| - * @constructor
|
| - * @extends {WebInspector.SettingsTab}
|
| - */
|
| -WebInspector.ExperimentsSettingsTab = function()
|
| -{
|
| - WebInspector.SettingsTab.call(this, WebInspector.UIString("Experiments"), "experiments-tab-content");
|
| -
|
| - var experiments = WebInspector.experimentsSettings.experiments;
|
| - if (experiments.length) {
|
| - var experimentsSection = this._appendSection();
|
| - experimentsSection.appendChild(this._createExperimentsWarningSubsection());
|
| - for (var i = 0; i < experiments.length; ++i)
|
| - experimentsSection.appendChild(this._createExperimentCheckbox(experiments[i]));
|
| - }
|
| -}
|
| -
|
| -WebInspector.ExperimentsSettingsTab.prototype = {
|
| - /**
|
| - * @return {!Element} element
|
| - */
|
| - _createExperimentsWarningSubsection: function()
|
| - {
|
| - var subsection = document.createElement("div");
|
| - var warning = subsection.createChild("span", "settings-experiments-warning-subsection-warning");
|
| - warning.textContent = WebInspector.UIString("WARNING:");
|
| - subsection.appendChild(document.createTextNode(" "));
|
| - var message = subsection.createChild("span", "settings-experiments-warning-subsection-message");
|
| - message.textContent = WebInspector.UIString("These experiments could be dangerous and may require restart.");
|
| - return subsection;
|
| - },
|
| -
|
| - _createExperimentCheckbox: function(experiment)
|
| - {
|
| - var input = document.createElement("input");
|
| - input.type = "checkbox";
|
| - input.name = experiment.name;
|
| - input.checked = experiment.isEnabled();
|
| - function listener()
|
| - {
|
| - experiment.setEnabled(input.checked);
|
| - }
|
| - input.addEventListener("click", listener, false);
|
| -
|
| - var p = document.createElement("p");
|
| - p.className = experiment.hidden && !experiment.isEnabled() ? "settings-experiment-hidden" : "";
|
| - var label = p.createChild("label");
|
| - label.appendChild(input);
|
| - label.appendChild(document.createTextNode(WebInspector.UIString(experiment.title)));
|
| - p.appendChild(label);
|
| - return p;
|
| - },
|
| -
|
| - __proto__: WebInspector.SettingsTab.prototype
|
| -}
|
| -
|
| -/**
|
| - * @constructor
|
| - */
|
| -WebInspector.SettingsController = function()
|
| -{
|
| - this._statusBarButton = new WebInspector.StatusBarButton(WebInspector.UIString("Settings"), "settings-status-bar-item");
|
| - this._statusBarButton.element.addEventListener("mouseup", this._mouseUp.bind(this), false);
|
| -
|
| - /** @type {?WebInspector.SettingsScreen} */
|
| - this._settingsScreen;
|
| -}
|
| -
|
| -WebInspector.SettingsController.prototype =
|
| -{
|
| - /**
|
| - * @return {!Element}
|
| - */
|
| - get statusBarItem()
|
| - {
|
| - return this._statusBarButton.element;
|
| - },
|
| -
|
| - _mouseUp: function()
|
| - {
|
| - this.showSettingsScreen();
|
| - },
|
| -
|
| - _onHideSettingsScreen: function()
|
| - {
|
| - delete this._settingsScreenVisible;
|
| - },
|
| -
|
| - /**
|
| - * @param {string=} tabId
|
| - */
|
| - showSettingsScreen: function(tabId)
|
| - {
|
| - if (!this._settingsScreen)
|
| - this._settingsScreen = new WebInspector.SettingsScreen(this._onHideSettingsScreen.bind(this));
|
| -
|
| - if (tabId)
|
| - this._settingsScreen.selectTab(tabId);
|
| -
|
| - this._settingsScreen.showModal();
|
| - this._settingsScreenVisible = true;
|
| - },
|
| -
|
| - resize: function()
|
| - {
|
| - if (this._settingsScreen && this._settingsScreen.isShowing())
|
| - this._settingsScreen.doResize();
|
| - }
|
| -}
|
| -
|
| -/**
|
| - * @constructor
|
| - * @implements {WebInspector.ActionDelegate}
|
| - */
|
| -WebInspector.SettingsController.SettingsScreenActionDelegate = function() { }
|
| -
|
| -WebInspector.SettingsController.SettingsScreenActionDelegate.prototype = {
|
| - /**
|
| - * @return {boolean}
|
| - */
|
| - handleAction: function()
|
| - {
|
| - WebInspector.settingsController.showSettingsScreen(WebInspector.SettingsScreen.Tabs.General);
|
| - return true;
|
| - }
|
| -}
|
| -
|
| -/**
|
| - * @constructor
|
| - * @extends {WebInspector.Object}
|
| - * @param {function(!Element, string, ?string)} itemRenderer
|
| - */
|
| -WebInspector.SettingsList = function(columns, itemRenderer)
|
| -{
|
| - this.element = document.createElement("div");
|
| - this.element.classList.add("settings-list");
|
| - this.element.tabIndex = -1;
|
| - this._itemRenderer = itemRenderer;
|
| - this._listItems = {};
|
| - this._ids = [];
|
| - this._columns = columns;
|
| -}
|
| -
|
| -WebInspector.SettingsList.Events = {
|
| - Selected: "Selected",
|
| - Removed: "Removed",
|
| - DoubleClicked: "DoubleClicked",
|
| -}
|
| -
|
| -WebInspector.SettingsList.prototype = {
|
| - /**
|
| - * @param {?string} itemId
|
| - * @param {?string=} beforeId
|
| - * @return {!Element}
|
| - */
|
| - addItem: function(itemId, beforeId)
|
| - {
|
| - var listItem = document.createElement("div");
|
| - listItem._id = itemId;
|
| - listItem.classList.add("settings-list-item");
|
| - if (typeof beforeId !== undefined)
|
| - this.element.insertBefore(listItem, this._listItems[beforeId]);
|
| - else
|
| - this.element.appendChild(listItem);
|
| -
|
| - var listItemContents = listItem.createChild("div", "settings-list-item-contents");
|
| - var listItemColumnsElement = listItemContents.createChild("div", "settings-list-item-columns");
|
| -
|
| - listItem.columnElements = {};
|
| - for (var i = 0; i < this._columns.length; ++i) {
|
| - var columnElement = listItemColumnsElement.createChild("div", "list-column");
|
| - var columnId = this._columns[i];
|
| - listItem.columnElements[columnId] = columnElement;
|
| - this._itemRenderer(columnElement, columnId, itemId);
|
| - }
|
| - var removeItemButton = this._createRemoveButton(removeItemClicked.bind(this));
|
| - listItemContents.addEventListener("click", this.selectItem.bind(this, itemId), false);
|
| - listItemContents.addEventListener("dblclick", this._onDoubleClick.bind(this, itemId), false);
|
| - listItemContents.appendChild(removeItemButton);
|
| -
|
| - this._listItems[itemId] = listItem;
|
| - if (typeof beforeId !== undefined)
|
| - this._ids.splice(this._ids.indexOf(beforeId), 0, itemId);
|
| - else
|
| - this._ids.push(itemId);
|
| -
|
| - /**
|
| - * @param {?Event} event
|
| - * @this {WebInspector.SettingsList}
|
| - */
|
| - function removeItemClicked(event)
|
| - {
|
| - removeItemButton.disabled = true;
|
| - this.removeItem(itemId);
|
| - this.dispatchEventToListeners(WebInspector.SettingsList.Events.Removed, itemId);
|
| - event.consume();
|
| - }
|
| -
|
| - return listItem;
|
| - },
|
| -
|
| - /**
|
| - * @param {?string} id
|
| - */
|
| - removeItem: function(id)
|
| - {
|
| - this._listItems[id].remove();
|
| - delete this._listItems[id];
|
| - this._ids.remove(id);
|
| - if (id === this._selectedId) {
|
| - delete this._selectedId;
|
| - if (this._ids.length)
|
| - this.selectItem(this._ids[0]);
|
| - }
|
| - },
|
| -
|
| - /**
|
| - * @return {!Array.<?string>}
|
| - */
|
| - itemIds: function()
|
| - {
|
| - return this._ids.slice();
|
| - },
|
| -
|
| - /**
|
| - * @return {!Array.<string>}
|
| - */
|
| - columns: function()
|
| - {
|
| - return this._columns.slice();
|
| - },
|
| -
|
| - /**
|
| - * @return {?string}
|
| - */
|
| - selectedId: function()
|
| - {
|
| - return this._selectedId;
|
| - },
|
| -
|
| - /**
|
| - * @return {!Element}
|
| - */
|
| - selectedItem: function()
|
| - {
|
| - return this._selectedId ? this._listItems[this._selectedId] : null;
|
| - },
|
| -
|
| - /**
|
| - * @param {string} itemId
|
| - * @return {!Element}
|
| - */
|
| - itemForId: function(itemId)
|
| - {
|
| - return this._listItems[itemId];
|
| - },
|
| -
|
| - /**
|
| - * @param {?string} id
|
| - * @param {!Event=} event
|
| - */
|
| - _onDoubleClick: function(id, event)
|
| - {
|
| - this.dispatchEventToListeners(WebInspector.SettingsList.Events.DoubleClicked, id);
|
| - },
|
| -
|
| - /**
|
| - * @param {?string} id
|
| - * @param {!Event=} event
|
| - */
|
| - selectItem: function(id, event)
|
| - {
|
| - if (typeof this._selectedId !== "undefined") {
|
| - this._listItems[this._selectedId].classList.remove("selected");
|
| - }
|
| -
|
| - this._selectedId = id;
|
| - if (typeof this._selectedId !== "undefined") {
|
| - this._listItems[this._selectedId].classList.add("selected");
|
| - }
|
| - this.dispatchEventToListeners(WebInspector.SettingsList.Events.Selected, id);
|
| - if (event)
|
| - event.consume();
|
| - },
|
| -
|
| - /**
|
| - * @param {function(?Event)} handler
|
| - * @return {!Element}
|
| - */
|
| - _createRemoveButton: function(handler)
|
| - {
|
| - var removeButton = document.createElement("button");
|
| - removeButton.classList.add("remove-item-button");
|
| - removeButton.value = WebInspector.UIString("Remove");
|
| - removeButton.addEventListener("click", handler, false);
|
| - return removeButton;
|
| - },
|
| -
|
| - __proto__: WebInspector.Object.prototype
|
| -}
|
| -
|
| -/**
|
| - * @constructor
|
| - * @extends {WebInspector.SettingsList}
|
| - * @param {function(?string, !Object)} validateHandler
|
| - * @param {function(?string, !Object)} editHandler
|
| - */
|
| -WebInspector.EditableSettingsList = function(columns, valuesProvider, validateHandler, editHandler)
|
| -{
|
| - WebInspector.SettingsList.call(this, columns, this._renderColumn.bind(this));
|
| - this._validateHandler = validateHandler;
|
| - this._editHandler = editHandler;
|
| - this._valuesProvider = valuesProvider;
|
| - /** @type {!Object.<string, !HTMLInputElement>} */
|
| - this._addInputElements = {};
|
| - /** @type {!Object.<string, !Object.<string, !HTMLInputElement>>} */
|
| - this._editInputElements = {};
|
| - /** @type {!Object.<string, !Object.<string, !HTMLSpanElement>>} */
|
| - this._textElements = {};
|
| -
|
| - this._addMappingItem = this.addItem(null);
|
| - this._addMappingItem.classList.add("item-editing");
|
| - this._addMappingItem.classList.add("add-list-item");
|
| -}
|
| -
|
| -WebInspector.EditableSettingsList.prototype = {
|
| - /**
|
| - * @param {?string} itemId
|
| - * @param {?string=} beforeId
|
| - * @return {!Element}
|
| - */
|
| - addItem: function(itemId, beforeId)
|
| - {
|
| - var listItem = WebInspector.SettingsList.prototype.addItem.call(this, itemId, beforeId);
|
| - listItem.classList.add("editable");
|
| - return listItem;
|
| - },
|
| -
|
| - /**
|
| - * @param {!Element} columnElement
|
| - * @param {string} columnId
|
| - * @param {?string} itemId
|
| - */
|
| - _renderColumn: function(columnElement, columnId, itemId)
|
| - {
|
| - columnElement.classList.add("settings-list-column-" + columnId);
|
| - var placeholder = (columnId === "url") ? WebInspector.UIString("URL prefix") : WebInspector.UIString("Folder path");
|
| - if (itemId === null) {
|
| - var inputElement = columnElement.createChild("input", "list-column-editor");
|
| - inputElement.placeholder = placeholder;
|
| - inputElement.addEventListener("blur", this._onAddMappingInputBlur.bind(this));
|
| - inputElement.addEventListener("input", this._validateEdit.bind(this, itemId));
|
| - this._addInputElements[columnId] = inputElement;
|
| - return;
|
| - }
|
| - var validItemId = itemId;
|
| -
|
| - if (!this._editInputElements[itemId])
|
| - this._editInputElements[itemId] = {};
|
| - if (!this._textElements[itemId])
|
| - this._textElements[itemId] = {};
|
| -
|
| - var value = this._valuesProvider(itemId, columnId);
|
| -
|
| - var textElement = columnElement.createChild("span", "list-column-text");
|
| - textElement.textContent = value;
|
| - textElement.title = value;
|
| - columnElement.addEventListener("click", rowClicked.bind(this), false);
|
| - this._textElements[itemId][columnId] = textElement;
|
| -
|
| - var inputElement = columnElement.createChild("input", "list-column-editor");
|
| - inputElement.value = value;
|
| - inputElement.addEventListener("blur", this._editMappingBlur.bind(this, itemId));
|
| - inputElement.addEventListener("input", this._validateEdit.bind(this, itemId));
|
| - columnElement.inputElement = inputElement;
|
| - this._editInputElements[itemId][columnId] = inputElement;
|
| -
|
| - /**
|
| - * @param {?Event} event
|
| - * @this {WebInspector.EditableSettingsList}
|
| - */
|
| - function rowClicked(event)
|
| - {
|
| - if (itemId === this._editingId)
|
| - return;
|
| - event.consume();
|
| - console.assert(!this._editingId);
|
| - this._editingId = validItemId;
|
| - var listItem = this.itemForId(validItemId);
|
| - listItem.classList.add("item-editing");
|
| - var inputElement = event.target.inputElement || this._editInputElements[validItemId][this.columns()[0]];
|
| - inputElement.focus();
|
| - inputElement.select();
|
| - }
|
| - },
|
| -
|
| - /**
|
| - * @param {?string} itemId
|
| - * @return {!Object}
|
| - */
|
| - _data: function(itemId)
|
| - {
|
| - var inputElements = this._inputElements(itemId);
|
| - var data = {};
|
| - var columns = this.columns();
|
| - for (var i = 0; i < columns.length; ++i)
|
| - data[columns[i]] = inputElements[columns[i]].value;
|
| - return data;
|
| - },
|
| -
|
| - /**
|
| - * @param {?string} itemId
|
| - * @return {?Object.<string, !HTMLInputElement>}
|
| - */
|
| - _inputElements: function(itemId)
|
| - {
|
| - if (!itemId)
|
| - return this._addInputElements;
|
| - return this._editInputElements[itemId] || null;
|
| - },
|
| -
|
| - /**
|
| - * @param {?string} itemId
|
| - * @return {boolean}
|
| - */
|
| - _validateEdit: function(itemId)
|
| - {
|
| - var errorColumns = this._validateHandler(itemId, this._data(itemId));
|
| - var hasChanges = this._hasChanges(itemId);
|
| - var columns = this.columns();
|
| - for (var i = 0; i < columns.length; ++i) {
|
| - var columnId = columns[i];
|
| - var inputElement = this._inputElements(itemId)[columnId];
|
| - if (hasChanges && errorColumns.indexOf(columnId) !== -1)
|
| - inputElement.classList.add("editable-item-error");
|
| - else
|
| - inputElement.classList.remove("editable-item-error");
|
| - }
|
| - return !errorColumns.length;
|
| - },
|
| -
|
| - /**
|
| - * @param {?string} itemId
|
| - * @return {boolean}
|
| - */
|
| - _hasChanges: function(itemId)
|
| - {
|
| - var hasChanges = false;
|
| - var columns = this.columns();
|
| - for (var i = 0; i < columns.length; ++i) {
|
| - var columnId = columns[i];
|
| - var oldValue = itemId ? this._textElements[itemId][columnId].textContent : "";
|
| - var newValue = this._inputElements(itemId)[columnId].value;
|
| - if (oldValue !== newValue) {
|
| - hasChanges = true;
|
| - break;
|
| - }
|
| - }
|
| - return hasChanges;
|
| - },
|
| -
|
| - /**
|
| - * @param {string} itemId
|
| - */
|
| - _editMappingBlur: function(itemId, event)
|
| - {
|
| - var inputElements = Object.values(this._editInputElements[itemId]);
|
| - if (inputElements.indexOf(event.relatedTarget) !== -1)
|
| - return;
|
| -
|
| - var listItem = this.itemForId(itemId);
|
| - listItem.classList.remove("item-editing");
|
| - delete this._editingId;
|
| -
|
| - if (!this._hasChanges(itemId))
|
| - return;
|
| -
|
| - if (!this._validateEdit(itemId)) {
|
| - var columns = this.columns();
|
| - for (var i = 0; i < columns.length; ++i) {
|
| - var columnId = columns[i];
|
| - var inputElement = this._editInputElements[itemId][columnId];
|
| - inputElement.value = this._textElements[itemId][columnId].textContent;
|
| - inputElement.classList.remove("editable-item-error");
|
| - }
|
| - return;
|
| - }
|
| - this._editHandler(itemId, this._data(itemId));
|
| - },
|
| -
|
| - _onAddMappingInputBlur: function(event)
|
| - {
|
| - var inputElements = Object.values(this._addInputElements);
|
| - if (inputElements.indexOf(event.relatedTarget) !== -1)
|
| - return;
|
| -
|
| - if (!this._hasChanges(null))
|
| - return;
|
| -
|
| - if (!this._validateEdit(null))
|
| - return;
|
| -
|
| - this._editHandler(null, this._data(null));
|
| - var columns = this.columns();
|
| - for (var i = 0; i < columns.length; ++i) {
|
| - var columnId = columns[i];
|
| - var inputElement = this._addInputElements[columnId];
|
| - inputElement.value = "";
|
| - }
|
| - },
|
| -
|
| - __proto__: WebInspector.SettingsList.prototype
|
| -}
|
| -
|
| -/** @type {!WebInspector.SettingsController} */
|
| -WebInspector.settingsController;
|
|
|