Upstream version 10.39.225.0
[platform/framework/web/crosswalk.git] / src / chrome / tools / test / reference_build / chrome_linux / resources / inspector / settings / SettingsScreen.js
1 WebInspector.EditFileSystemDialog=function(fileSystemPath)
2 {WebInspector.DialogDelegate.call(this);this._fileSystemPath=fileSystemPath;this.element=document.createElement("div");this.element.className="edit-file-system-dialog";var header=this.element.createChild("div","header");var headerText=header.createChild("span");headerText.textContent=WebInspector.UIString("Edit file system");var closeButton=header.createChild("div","close-button-gray done-button");closeButton.addEventListener("click",this._onDoneClick.bind(this),false);var contents=this.element.createChild("div","contents");WebInspector.isolatedFileSystemManager.mapping().addEventListener(WebInspector.FileSystemMapping.Events.FileMappingAdded,this._fileMappingAdded,this);WebInspector.isolatedFileSystemManager.mapping().addEventListener(WebInspector.FileSystemMapping.Events.FileMappingRemoved,this._fileMappingRemoved,this);WebInspector.isolatedFileSystemManager.mapping().addEventListener(WebInspector.FileSystemMapping.Events.ExcludedFolderAdded,this._excludedFolderAdded,this);WebInspector.isolatedFileSystemManager.mapping().addEventListener(WebInspector.FileSystemMapping.Events.ExcludedFolderRemoved,this._excludedFolderRemoved,this);var blockHeader=contents.createChild("div","block-header");blockHeader.textContent=WebInspector.UIString("Mappings");this._fileMappingsSection=contents.createChild("div","section file-mappings-section");this._fileMappingsListContainer=this._fileMappingsSection.createChild("div","settings-list-container");var entries=WebInspector.isolatedFileSystemManager.mapping().mappingEntries(this._fileSystemPath);this._fileMappingsList=new WebInspector.EditableSettingsList(["url","path"],this._fileMappingValuesProvider.bind(this),this._fileMappingValidate.bind(this),this._fileMappingEdit.bind(this));this._fileMappingsList.addEventListener(WebInspector.SettingsList.Events.Removed,this._fileMappingRemovedfromList.bind(this));this._fileMappingsList.element.classList.add("file-mappings-list");this._fileMappingsListContainer.appendChild(this._fileMappingsList.element);this._entries={};for(var i=0;i<entries.length;++i)
3 this._addMappingRow(entries[i]);blockHeader=contents.createChild("div","block-header");blockHeader.textContent=WebInspector.UIString("Excluded folders");this._excludedFolderListSection=contents.createChild("div","section excluded-folders-section");this._excludedFolderListContainer=this._excludedFolderListSection.createChild("div","settings-list-container");var excludedFolderEntries=WebInspector.isolatedFileSystemManager.mapping().excludedFolders(fileSystemPath);this._excludedFolderList=new WebInspector.EditableSettingsList(["path"],this._excludedFolderValueProvider.bind(this),this._excludedFolderValidate.bind(this),this._excludedFolderEdit.bind(this));this._excludedFolderList.addEventListener(WebInspector.SettingsList.Events.Removed,this._excludedFolderRemovedfromList.bind(this));this._excludedFolderList.element.classList.add("excluded-folders-list");this._excludedFolderListContainer.appendChild(this._excludedFolderList.element);this._excludedFolderEntries=new StringMap();for(var i=0;i<excludedFolderEntries.length;++i)
4 this._addExcludedFolderRow(excludedFolderEntries[i]);this.element.tabIndex=0;}
5 WebInspector.EditFileSystemDialog.show=function(element,fileSystemPath)
6 {WebInspector.Dialog.show(element,new WebInspector.EditFileSystemDialog(fileSystemPath));var glassPane=document.getElementById("glass-pane");glassPane.classList.add("settings-glass-pane");}
7 WebInspector.EditFileSystemDialog.prototype={show:function(element)
8 {element.appendChild(this.element);this.element.classList.add("dialog-contents");element.classList.add("settings-dialog");element.classList.add("settings-tab");this._dialogElement=element;},_resize:function()
9 {if(!this._dialogElement||!this._relativeToElement)
10 return;const minWidth=200;const minHeight=150;var maxHeight=this._relativeToElement.offsetHeight-10;maxHeight=Math.max(minHeight,maxHeight);var maxWidth=Math.min(540,this._relativeToElement.offsetWidth-10);maxWidth=Math.max(minWidth,maxWidth);this._dialogElement.style.maxHeight=maxHeight+"px";this._dialogElement.style.width=maxWidth+"px";WebInspector.DialogDelegate.prototype.position(this._dialogElement,this._relativeToElement);},position:function(element,relativeToElement)
11 {this._relativeToElement=relativeToElement;this._resize();},willHide:function(event)
12 {},_fileMappingAdded:function(event)
13 {var entry=(event.data);this._addMappingRow(entry);},_fileMappingRemoved:function(event)
14 {var entry=(event.data);if(this._fileSystemPath!==entry.fileSystemPath)
15 return;delete this._entries[entry.urlPrefix];if(this._fileMappingsList.itemForId(entry.urlPrefix))
16 this._fileMappingsList.removeItem(entry.urlPrefix);this._resize();},_fileMappingValuesProvider:function(itemId,columnId)
17 {if(!itemId)
18 return"";var entry=this._entries[itemId];switch(columnId){case"url":return entry.urlPrefix;case"path":return entry.pathPrefix;default:console.assert("Should not be reached.");}
19 return"";},_fileMappingValidate:function(itemId,data)
20 {var oldPathPrefix=itemId?this._entries[itemId].pathPrefix:null;return this._validateMapping(data["url"],itemId,data["path"],oldPathPrefix);},_fileMappingEdit:function(itemId,data)
21 {if(itemId){var urlPrefix=itemId;var pathPrefix=this._entries[itemId].pathPrefix;var fileSystemPath=this._entries[itemId].fileSystemPath;WebInspector.isolatedFileSystemManager.mapping().removeFileMapping(fileSystemPath,urlPrefix,pathPrefix);}
22 this._addFileMapping(data["url"],data["path"]);},_validateMapping:function(urlPrefix,allowedURLPrefix,path,allowedPathPrefix)
23 {var columns=[];if(!this._checkURLPrefix(urlPrefix,allowedURLPrefix))
24 columns.push("url");if(!this._checkPathPrefix(path,allowedPathPrefix))
25 columns.push("path");return columns;},_fileMappingRemovedfromList:function(event)
26 {var urlPrefix=(event.data);if(!urlPrefix)
27 return;var entry=this._entries[urlPrefix];WebInspector.isolatedFileSystemManager.mapping().removeFileMapping(entry.fileSystemPath,entry.urlPrefix,entry.pathPrefix);},_addFileMapping:function(urlPrefix,pathPrefix)
28 {var normalizedURLPrefix=this._normalizePrefix(urlPrefix);var normalizedPathPrefix=this._normalizePrefix(pathPrefix);WebInspector.isolatedFileSystemManager.mapping().addFileMapping(this._fileSystemPath,normalizedURLPrefix,normalizedPathPrefix);this._fileMappingsList.selectItem(normalizedURLPrefix);return true;},_normalizePrefix:function(prefix)
29 {if(!prefix)
30 return"";return prefix+(prefix[prefix.length-1]==="/"?"":"/");},_addMappingRow:function(entry)
31 {var fileSystemPath=entry.fileSystemPath;var urlPrefix=entry.urlPrefix;if(!this._fileSystemPath||this._fileSystemPath!==fileSystemPath)
32 return;this._entries[urlPrefix]=entry;var fileMappingListItem=this._fileMappingsList.addItem(urlPrefix,null);this._resize();},_excludedFolderAdded:function(event)
33 {var entry=(event.data);this._addExcludedFolderRow(entry);},_excludedFolderRemoved:function(event)
34 {var entry=(event.data);var fileSystemPath=entry.fileSystemPath;if(!fileSystemPath||this._fileSystemPath!==fileSystemPath)
35 return;delete this._excludedFolderEntries[entry.path];if(this._excludedFolderList.itemForId(entry.path))
36 this._excludedFolderList.removeItem(entry.path);},_excludedFolderValueProvider:function(itemId,columnId)
37 {return itemId;},_excludedFolderValidate:function(itemId,data)
38 {var fileSystemPath=this._fileSystemPath;var columns=[];if(!this._validateExcludedFolder(data["path"],itemId))
39 columns.push("path");return columns;},_validateExcludedFolder:function(path,allowedPath)
40 {return!!path&&(path===allowedPath||!this._excludedFolderEntries.contains(path));},_excludedFolderEdit:function(itemId,data)
41 {var fileSystemPath=this._fileSystemPath;if(itemId)
42 WebInspector.isolatedFileSystemManager.mapping().removeExcludedFolder(fileSystemPath,itemId);var excludedFolderPath=data["path"];WebInspector.isolatedFileSystemManager.mapping().addExcludedFolder(fileSystemPath,excludedFolderPath);},_excludedFolderRemovedfromList:function(event)
43 {var itemId=(event.data);if(!itemId)
44 return;WebInspector.isolatedFileSystemManager.mapping().removeExcludedFolder(this._fileSystemPath,itemId);},_addExcludedFolderRow:function(entry)
45 {var fileSystemPath=entry.fileSystemPath;if(!fileSystemPath||this._fileSystemPath!==fileSystemPath)
46 return;var path=entry.path;this._excludedFolderEntries.put(path,entry);this._excludedFolderList.addItem(path,null);this._resize();},_checkURLPrefix:function(value,allowedPrefix)
47 {var prefix=this._normalizePrefix(value);return!!prefix&&(prefix===allowedPrefix||!this._entries[prefix]);},_checkPathPrefix:function(value,allowedPrefix)
48 {var prefix=this._normalizePrefix(value);if(!prefix)
49 return false;if(prefix===allowedPrefix)
50 return true;for(var urlPrefix in this._entries){var entry=this._entries[urlPrefix];if(urlPrefix&&entry.pathPrefix===prefix)
51 return false;}
52 return true;},focus:function()
53 {WebInspector.setCurrentFocusElement(this.element);},_onDoneClick:function()
54 {WebInspector.Dialog.hide();},onEnter:function()
55 {},__proto__:WebInspector.DialogDelegate.prototype};WebInspector.SettingsScreen=function(onHide)
56 {WebInspector.HelpScreen.call(this);this.element.id="settings-screen";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)
57 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;}
58 WebInspector.SettingsScreen.integerValidator=function(min,max,text)
59 {var value=Number(text);if(isNaN(value))
60 return WebInspector.UIString("Invalid number format");if(value<min||value>max)
61 return WebInspector.UIString("Value is out of range [%d, %d]",min,max);return null;}
62 WebInspector.SettingsScreen.Tabs={General:"general",Overrides:"overrides",Workspace:"workspace",Experiments:"experiments",Shortcuts:"shortcuts"}
63 WebInspector.SettingsScreen.prototype={selectTab:function(tabId)
64 {this._tabbedPane.selectTab(tabId);},_tabSelected:function(event)
65 {this._lastSelectedTabSetting.set(this._tabbedPane.selectedTabId);},wasShown:function()
66 {this._tabbedPane.show(this.element);WebInspector.HelpScreen.prototype.wasShown.call(this);},isClosingKey:function(keyCode)
67 {return[WebInspector.KeyboardShortcut.Keys.Enter.code,WebInspector.KeyboardShortcut.Keys.Esc.code,].indexOf(keyCode)>=0;},willHide:function()
68 {this._onHide();WebInspector.HelpScreen.prototype.willHide.call(this);},_keyDown:function(event)
69 {var shiftKeyCode=16;if(event.keyCode===shiftKeyCode&&++this._developerModeCounter>5)
70 this.element.classList.add("settings-developer-mode");},__proto__:WebInspector.HelpScreen.prototype}
71 WebInspector.SettingsTab=function(name,id)
72 {WebInspector.VBox.call(this);this.element.classList.add("settings-tab-container");if(id)
73 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");}
74 WebInspector.SettingsTab.prototype={_appendSection:function(name)
75 {var block=this.containerElement.createChild("div","help-block");if(name)
76 block.createChild("div","help-section-title").textContent=name;return block;},_createSelectSetting:function(name,options,setting)
77 {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])
78 select.selectedIndex=i;}
79 function changeListener(e)
80 {setting.set(options[select.selectedIndex][1]);}
81 select.addEventListener("change",changeListener,false);return p;},__proto__:WebInspector.VBox.prototype}
82 WebInspector.GenericSettingsTab=function()
83 {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,false);function restoreAndReload()
84 {if(window.localStorage)
85 window.localStorage.clear();WebInspector.reload();}}
86 WebInspector.GenericSettingsTab.prototype={_populateSectionsFromExtensions:function()
87 {var explicitSectionOrder=["","Appearance","Elements","Sources","Profiler","Console","Extensions"];var allExtensions=WebInspector.moduleManager.extensions("ui-setting");var extensionsBySectionId=new StringMultimap();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;}
88 extensionsBySectionId.put(sectionName,extension);});var sectionIds=extensionsBySectionId.keys();var explicitlyOrderedSections={};for(var i=0;i<explicitSectionOrder.length;++i){explicitlyOrderedSections[explicitSectionOrder[i]]=true;var extensions=extensionsBySectionId.get(explicitSectionOrder[i]);if(!extensions.size())
89 continue;this._addSectionWithExtensionProvidedSettings(explicitSectionOrder[i],extensions.values(),childSettingExtensionsByParentName);}
90 for(var i=0;i<sectionIds.length;++i){if(explicitlyOrderedSections[sectionIds[i]])
91 continue;this._addSectionWithExtensionProvidedSettings(sectionIds[i],extensionsBySectionId.get(sectionIds[i]).values(),childSettingExtensionsByParentName);}},_addSectionWithExtensionProvidedSettings:function(sectionName,extensions,childSettingExtensionsByParentName)
92 {var uiSectionName=sectionName&&WebInspector.UIString(sectionName);var sectionElement=this._appendSection(uiSectionName);extensions.forEach(processSetting.bind(this,null));function processSetting(parentFieldset,extension)
93 {var descriptor=extension.descriptor();var experimentName=descriptor["experiment"];if(experimentName&&(!WebInspector.experimentsSettings[experimentName]||!WebInspector.experimentsSettings[experimentName].isEnabled()))
94 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)
95 return;}
96 if(!settingControl){var uiTitle=WebInspector.UIString(descriptor["title"]);settingControl=createSettingControl.call(this,uiTitle,setting,descriptor,instance);}
97 if(settingName){var childSettings=childSettingExtensionsByParentName.get(settingName);if(childSettings.size()){var fieldSet=WebInspector.SettingsUI.createSettingFieldset(setting);settingControl.appendChild(fieldSet);childSettings.values().forEach(function(item){processSetting.call(this,fieldSet,item);},this);}}
98 var containerElement=parentFieldset||sectionElement;containerElement.appendChild(settingControl);}
99 function createSettingControl(uiTitle,setting,descriptor,instance)
100 {switch(descriptor["settingType"]){case"checkbox":return WebInspector.SettingsUI.createSettingCheckbox(uiTitle,setting);case"select":var descriptorOptions=descriptor["options"]
101 var options=new Array(descriptorOptions.length);for(var i=0;i<options.length;++i){var optionName=descriptorOptions[i][2]?descriptorOptions[i][0]:WebInspector.UIString(descriptorOptions[i][0]);options[i]=[WebInspector.UIString(descriptorOptions[i][0]),descriptorOptions[i][1]];}
102 return this._createSelectSetting(uiTitle,options,setting);default:throw"Invalid setting type: "+descriptor["settingType"];}}},_appendDrawerNote:function(p)
103 {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}
104 WebInspector.WorkspaceSettingsTab=function()
105 {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),false);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),false);this._updateEditFileSystemButtonState();this._reset();}
106 WebInspector.WorkspaceSettingsTab.prototype={wasShown:function()
107 {WebInspector.SettingsTab.prototype.wasShown.call(this);this._reset();},_reset:function()
108 {this._resetFileSystems();},_resetFileSystems:function()
109 {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;}
110 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)
111 this._fileSystemsList.addItem(fileSystemPaths[i]);this._updateEditFileSystemButtonState();},_updateEditFileSystemButtonState:function()
112 {this._editFileSystemButton.disabled=!this._selectedFileSystemPath();},_fileSystemSelected:function(event)
113 {this._updateEditFileSystemButtonState();},_fileSystemDoubleClicked:function(event)
114 {var id=(event.data);this._editFileSystem(id);},_editFileSystemClicked:function()
115 {this._editFileSystem(this._selectedFileSystemPath());},_editFileSystem:function(id)
116 {WebInspector.EditFileSystemDialog.show(WebInspector.inspectorView.element,id);},_createRemoveButton:function(handler)
117 {var removeButton=document.createElement("button");removeButton.classList.add("button");removeButton.classList.add("remove-item-button");removeButton.value=WebInspector.UIString("Remove");if(handler)
118 removeButton.addEventListener("click",handler,false);else
119 removeButton.disabled=true;return removeButton;},_renderFileSystem:function(columnElement,column,id)
120 {if(!id)
121 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;},_fileSystemRemovedfromList:function(event)
122 {var id=(event.data);if(!id)
123 return;WebInspector.isolatedFileSystemManager.removeFileSystem(id);},_addFileSystemClicked:function()
124 {WebInspector.isolatedFileSystemManager.addFileSystem();},_fileSystemAdded:function(event)
125 {var fileSystem=(event.data);if(!this._fileSystemsList)
126 this._reset();else
127 this._fileSystemsList.addItem(fileSystem.path());},_fileSystemRemoved:function(event)
128 {var fileSystem=(event.data);var selectedFileSystemPath=this._selectedFileSystemPath();if(this._fileSystemsList.itemForId(fileSystem.path()))
129 this._fileSystemsList.removeItem(fileSystem.path());if(!this._fileSystemsList.itemIds().length)
130 this._reset();this._updateEditFileSystemButtonState();},_selectedFileSystemPath:function()
131 {return this._fileSystemsList?this._fileSystemsList.selectedId():null;},__proto__:WebInspector.SettingsTab.prototype}
132 WebInspector.ExperimentsSettingsTab=function()
133 {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)
134 experimentsSection.appendChild(this._createExperimentCheckbox(experiments[i]));}}
135 WebInspector.ExperimentsSettingsTab.prototype={_createExperimentsWarningSubsection:function()
136 {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)
137 {var input=document.createElement("input");input.type="checkbox";input.name=experiment.name;input.checked=experiment.isEnabled();function listener()
138 {experiment.setEnabled(input.checked);}
139 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}
140 WebInspector.SettingsController=function()
141 {this._settingsScreen;window.addEventListener("resize",this._resize.bind(this),true);}
142 WebInspector.SettingsController.prototype={_onHideSettingsScreen:function()
143 {delete this._settingsScreenVisible;},showSettingsScreen:function(tabId)
144 {if(!this._settingsScreen)
145 this._settingsScreen=new WebInspector.SettingsScreen(this._onHideSettingsScreen.bind(this));if(tabId)
146 this._settingsScreen.selectTab(tabId);this._settingsScreen.showModal();this._settingsScreenVisible=true;},_resize:function()
147 {if(this._settingsScreen&&this._settingsScreen.isShowing())
148 this._settingsScreen.doResize();}}
149 WebInspector.SettingsController.SettingsScreenActionDelegate=function(){}
150 WebInspector.SettingsController.SettingsScreenActionDelegate.prototype={handleAction:function()
151 {WebInspector._settingsController.showSettingsScreen(WebInspector.SettingsScreen.Tabs.General);return true;}}
152 WebInspector.SettingsList=function(columns,itemRenderer)
153 {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;}
154 WebInspector.SettingsList.Events={Selected:"Selected",Removed:"Removed",DoubleClicked:"DoubleClicked",}
155 WebInspector.SettingsList.prototype={addItem:function(itemId,beforeId)
156 {var listItem=document.createElement("div");listItem._id=itemId;listItem.classList.add("settings-list-item");if(typeof beforeId!==undefined)
157 this.element.insertBefore(listItem,this._listItems[beforeId]);else
158 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);}
159 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)
160 this._ids.splice(this._ids.indexOf(beforeId),0,itemId);else
161 this._ids.push(itemId);function removeItemClicked(event)
162 {removeItemButton.disabled=true;this.removeItem(itemId);this.dispatchEventToListeners(WebInspector.SettingsList.Events.Removed,itemId);event.consume();}
163 return listItem;},removeItem:function(id)
164 {this._listItems[id].remove();delete this._listItems[id];this._ids.remove(id);if(id===this._selectedId){delete this._selectedId;if(this._ids.length)
165 this.selectItem(this._ids[0]);}},itemIds:function()
166 {return this._ids.slice();},columns:function()
167 {return this._columns.slice();},selectedId:function()
168 {return this._selectedId;},selectedItem:function()
169 {return this._selectedId?this._listItems[this._selectedId]:null;},itemForId:function(itemId)
170 {return this._listItems[itemId];},_onDoubleClick:function(id,event)
171 {this.dispatchEventToListeners(WebInspector.SettingsList.Events.DoubleClicked,id);},selectItem:function(id,event)
172 {if(typeof this._selectedId!=="undefined"){this._listItems[this._selectedId].classList.remove("selected");}
173 this._selectedId=id;if(typeof this._selectedId!=="undefined"){this._listItems[this._selectedId].classList.add("selected");}
174 this.dispatchEventToListeners(WebInspector.SettingsList.Events.Selected,id);if(event)
175 event.consume();},_createRemoveButton:function(handler)
176 {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}
177 WebInspector.EditableSettingsList=function(columns,valuesProvider,validateHandler,editHandler)
178 {WebInspector.SettingsList.call(this,columns,this._renderColumn.bind(this));this._validateHandler=validateHandler;this._editHandler=editHandler;this._valuesProvider=valuesProvider;this._addInputElements={};this._editInputElements={};this._textElements={};this._addMappingItem=this.addItem(null);this._addMappingItem.classList.add("item-editing");this._addMappingItem.classList.add("add-list-item");}
179 WebInspector.EditableSettingsList.prototype={addItem:function(itemId,beforeId)
180 {var listItem=WebInspector.SettingsList.prototype.addItem.call(this,itemId,beforeId);listItem.classList.add("editable");return listItem;},_renderColumn:function(columnElement,columnId,itemId)
181 {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),false);inputElement.addEventListener("input",this._validateEdit.bind(this,itemId),false);this._addInputElements[columnId]=inputElement;return;}
182 var validItemId=itemId;if(!this._editInputElements[itemId])
183 this._editInputElements[itemId]={};if(!this._textElements[itemId])
184 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),false);inputElement.addEventListener("input",this._validateEdit.bind(this,itemId),false);columnElement.inputElement=inputElement;this._editInputElements[itemId][columnId]=inputElement;function rowClicked(event)
185 {if(itemId===this._editingId)
186 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();}},_data:function(itemId)
187 {var inputElements=this._inputElements(itemId);var data={};var columns=this.columns();for(var i=0;i<columns.length;++i)
188 data[columns[i]]=inputElements[columns[i]].value;return data;},_inputElements:function(itemId)
189 {if(!itemId)
190 return this._addInputElements;return this._editInputElements[itemId]||null;},_validateEdit:function(itemId)
191 {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)
192 inputElement.classList.add("editable-item-error");else
193 inputElement.classList.remove("editable-item-error");}
194 return!errorColumns.length;},_hasChanges:function(itemId)
195 {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;}}
196 return hasChanges;},_editMappingBlur:function(itemId,event)
197 {var inputElements=Object.values(this._editInputElements[itemId]);if(inputElements.indexOf(event.relatedTarget)!==-1)
198 return;var listItem=this.itemForId(itemId);listItem.classList.remove("item-editing");delete this._editingId;if(!this._hasChanges(itemId))
199 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");}
200 return;}
201 this._editHandler(itemId,this._data(itemId));},_onAddMappingInputBlur:function(event)
202 {var inputElements=Object.values(this._addInputElements);if(inputElements.indexOf(event.relatedTarget)!==-1)
203 return;if(!this._hasChanges(null))
204 return;if(!this._validateEdit(null))
205 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}
206 WebInspector._settingsController=new WebInspector.SettingsController();