Index: third_party/WebKit/Source/devtools/front_end/elements/ClassesPaneWidget.js |
diff --git a/third_party/WebKit/Source/devtools/front_end/elements/ClassesPaneWidget.js b/third_party/WebKit/Source/devtools/front_end/elements/ClassesPaneWidget.js |
index 499a3337386350788bf78656f2911ed02215f265..b7836c0c654d9626b91fe0331e23014d0761c093 100644 |
--- a/third_party/WebKit/Source/devtools/front_end/elements/ClassesPaneWidget.js |
+++ b/third_party/WebKit/Source/devtools/front_end/elements/ClassesPaneWidget.js |
@@ -1,290 +1,270 @@ |
// Copyright (c) 2015 The Chromium Authors. All rights reserved. |
// Use of this source code is governed by a BSD-style license that can be |
// found in the LICENSE file. |
- |
/** |
- * @constructor |
- * @extends {WebInspector.Widget} |
+ * @unrestricted |
*/ |
-WebInspector.ClassesPaneWidget = function() |
-{ |
- WebInspector.Widget.call(this); |
- this.element.className = "styles-element-classes-pane"; |
- var container = this.element.createChild("div", "title-container"); |
- this._input = container.createChild("div", "new-class-input monospace"); |
- this._input.setAttribute("placeholder", WebInspector.UIString("Add new class")); |
+WebInspector.ClassesPaneWidget = class extends WebInspector.Widget { |
+ constructor() { |
+ super(); |
+ this.element.className = 'styles-element-classes-pane'; |
+ var container = this.element.createChild('div', 'title-container'); |
+ this._input = container.createChild('div', 'new-class-input monospace'); |
+ this._input.setAttribute('placeholder', WebInspector.UIString('Add new class')); |
this.setDefaultFocusedElement(this._input); |
- this._classesContainer = this.element.createChild("div", "source-code"); |
- this._classesContainer.classList.add("styles-element-classes-container"); |
+ this._classesContainer = this.element.createChild('div', 'source-code'); |
+ this._classesContainer.classList.add('styles-element-classes-container'); |
this._prompt = new WebInspector.ClassesPaneWidget.ClassNamePrompt(); |
this._prompt.setAutocompletionTimeout(0); |
this._prompt.renderAsBlock(); |
var proxyElement = this._prompt.attach(this._input); |
- proxyElement.addEventListener("keydown", this._onKeyDown.bind(this), false); |
+ proxyElement.addEventListener('keydown', this._onKeyDown.bind(this), false); |
- WebInspector.targetManager.addModelListener(WebInspector.DOMModel, WebInspector.DOMModel.Events.DOMMutated, this._onDOMMutated, this); |
+ WebInspector.targetManager.addModelListener( |
+ WebInspector.DOMModel, WebInspector.DOMModel.Events.DOMMutated, this._onDOMMutated, this); |
/** @type {!Set<!WebInspector.DOMNode>} */ |
this._mutatingNodes = new Set(); |
WebInspector.context.addFlavorChangeListener(WebInspector.DOMNode, this._update, this); |
-}; |
- |
-WebInspector.ClassesPaneWidget._classesSymbol = Symbol("WebInspector.ClassesPaneWidget._classesSymbol"); |
- |
-WebInspector.ClassesPaneWidget.prototype = { |
- /** |
- * @param {!Event} event |
- */ |
- _onKeyDown: function(event) |
- { |
- var text = event.target.textContent; |
- if (isEscKey(event)) { |
- event.target.textContent = ""; |
- if (!text.isWhitespace()) |
- event.consume(true); |
- return; |
- } |
- |
- if (!isEnterKey(event)) |
- return; |
- var node = WebInspector.context.flavor(WebInspector.DOMNode); |
- if (!node) |
- return; |
- |
- this._prompt.clearAutocomplete(); |
- event.target.textContent = ""; |
- var classNames = text.split(/[.,\s]/); |
- for (var className of classNames) { |
- var className = className.trim(); |
- if (!className.length) |
- continue; |
- this._toggleClass(node, className, true); |
- } |
- this._installNodeClasses(node); |
- this._update(); |
+ } |
+ |
+ /** |
+ * @param {!Event} event |
+ */ |
+ _onKeyDown(event) { |
+ var text = event.target.textContent; |
+ if (isEscKey(event)) { |
+ event.target.textContent = ''; |
+ if (!text.isWhitespace()) |
event.consume(true); |
- }, |
- |
- /** |
- * @param {!WebInspector.Event} event |
- */ |
- _onDOMMutated: function(event) |
- { |
- var node = /** @type {!WebInspector.DOMNode} */(event.data); |
- if (this._mutatingNodes.has(node)) |
- return; |
- delete node[WebInspector.ClassesPaneWidget._classesSymbol]; |
- this._update(); |
- }, |
- |
- /** |
- * @override |
- */ |
- wasShown: function() |
- { |
- this._update(); |
- }, |
- |
- _update: function() |
- { |
- if (!this.isShowing()) |
- return; |
- |
- var node = WebInspector.context.flavor(WebInspector.DOMNode); |
- if (node) |
- node = node.enclosingElementOrSelf(); |
- |
- this._classesContainer.removeChildren(); |
- this._input.disabled = !node; |
- |
- if (!node) |
- return; |
- |
- var classes = this._nodeClasses(node); |
- var keys = classes.keysArray(); |
- keys.sort(String.caseInsensetiveComparator); |
- for (var i = 0; i < keys.length; ++i) { |
- var className = keys[i]; |
- var label = createCheckboxLabel(className, classes.get(className)); |
- label.visualizeFocus = true; |
- label.classList.add("monospace"); |
- label.checkboxElement.addEventListener("click", this._onClick.bind(this, className), false); |
- this._classesContainer.appendChild(label); |
- } |
- }, |
- |
- /** |
- * @param {string} className |
- * @param {!Event} event |
- */ |
- _onClick: function(className, event) |
- { |
- var node = WebInspector.context.flavor(WebInspector.DOMNode); |
- if (!node) |
- return; |
- var enabled = event.target.checked; |
- this._toggleClass(node, className, enabled); |
- this._installNodeClasses(node); |
- }, |
+ return; |
+ } |
- /** |
- * @param {!WebInspector.DOMNode} node |
- * @return {!Map<string, boolean>} |
- */ |
- _nodeClasses: function(node) |
- { |
- var result = node[WebInspector.ClassesPaneWidget._classesSymbol]; |
- if (!result) { |
- var classAttribute = node.getAttribute("class") || ""; |
- var classes = classAttribute.split(/\s/); |
- result = new Map(); |
- for (var i = 0; i < classes.length; ++i) { |
- var className = classes[i].trim(); |
- if (!className.length) |
- continue; |
- result.set(className, true); |
- } |
- node[WebInspector.ClassesPaneWidget._classesSymbol] = result; |
- } |
- return result; |
- }, |
+ if (!isEnterKey(event)) |
+ return; |
+ var node = WebInspector.context.flavor(WebInspector.DOMNode); |
+ if (!node) |
+ return; |
+ |
+ this._prompt.clearAutocomplete(); |
+ event.target.textContent = ''; |
+ var classNames = text.split(/[.,\s]/); |
+ for (var className of classNames) { |
+ var className = className.trim(); |
+ if (!className.length) |
+ continue; |
+ this._toggleClass(node, className, true); |
+ } |
+ this._installNodeClasses(node); |
+ this._update(); |
+ event.consume(true); |
+ } |
+ |
+ /** |
+ * @param {!WebInspector.Event} event |
+ */ |
+ _onDOMMutated(event) { |
+ var node = /** @type {!WebInspector.DOMNode} */ (event.data); |
+ if (this._mutatingNodes.has(node)) |
+ return; |
+ delete node[WebInspector.ClassesPaneWidget._classesSymbol]; |
+ this._update(); |
+ } |
+ |
+ /** |
+ * @override |
+ */ |
+ wasShown() { |
+ this._update(); |
+ } |
+ |
+ _update() { |
+ if (!this.isShowing()) |
+ return; |
+ |
+ var node = WebInspector.context.flavor(WebInspector.DOMNode); |
+ if (node) |
+ node = node.enclosingElementOrSelf(); |
+ |
+ this._classesContainer.removeChildren(); |
+ this._input.disabled = !node; |
+ |
+ if (!node) |
+ return; |
+ |
+ var classes = this._nodeClasses(node); |
+ var keys = classes.keysArray(); |
+ keys.sort(String.caseInsensetiveComparator); |
+ for (var i = 0; i < keys.length; ++i) { |
+ var className = keys[i]; |
+ var label = createCheckboxLabel(className, classes.get(className)); |
+ label.visualizeFocus = true; |
+ label.classList.add('monospace'); |
+ label.checkboxElement.addEventListener('click', this._onClick.bind(this, className), false); |
+ this._classesContainer.appendChild(label); |
+ } |
+ } |
+ |
+ /** |
+ * @param {string} className |
+ * @param {!Event} event |
+ */ |
+ _onClick(className, event) { |
+ var node = WebInspector.context.flavor(WebInspector.DOMNode); |
+ if (!node) |
+ return; |
+ var enabled = event.target.checked; |
+ this._toggleClass(node, className, enabled); |
+ this._installNodeClasses(node); |
+ } |
+ |
+ /** |
+ * @param {!WebInspector.DOMNode} node |
+ * @return {!Map<string, boolean>} |
+ */ |
+ _nodeClasses(node) { |
+ var result = node[WebInspector.ClassesPaneWidget._classesSymbol]; |
+ if (!result) { |
+ var classAttribute = node.getAttribute('class') || ''; |
+ var classes = classAttribute.split(/\s/); |
+ result = new Map(); |
+ for (var i = 0; i < classes.length; ++i) { |
+ var className = classes[i].trim(); |
+ if (!className.length) |
+ continue; |
+ result.set(className, true); |
+ } |
+ node[WebInspector.ClassesPaneWidget._classesSymbol] = result; |
+ } |
+ return result; |
+ } |
+ |
+ /** |
+ * @param {!WebInspector.DOMNode} node |
+ * @param {string} className |
+ * @param {boolean} enabled |
+ */ |
+ _toggleClass(node, className, enabled) { |
+ var classes = this._nodeClasses(node); |
+ classes.set(className, enabled); |
+ } |
+ |
+ /** |
+ * @param {!WebInspector.DOMNode} node |
+ */ |
+ _installNodeClasses(node) { |
+ var classes = this._nodeClasses(node); |
+ var activeClasses = new Set(); |
+ for (var className of classes.keys()) { |
+ if (classes.get(className)) |
+ activeClasses.add(className); |
+ } |
- /** |
- * @param {!WebInspector.DOMNode} node |
- * @param {string} className |
- * @param {boolean} enabled |
- */ |
- _toggleClass: function(node, className, enabled) |
- { |
- var classes = this._nodeClasses(node); |
- classes.set(className, enabled); |
- }, |
+ var newClasses = activeClasses.valuesArray(); |
+ newClasses.sort(); |
+ this._mutatingNodes.add(node); |
+ node.setAttributeValue('class', newClasses.join(' '), onClassNameUpdated.bind(this)); |
/** |
- * @param {!WebInspector.DOMNode} node |
+ * @this {WebInspector.ClassesPaneWidget} |
*/ |
- _installNodeClasses: function(node) |
- { |
- var classes = this._nodeClasses(node); |
- var activeClasses = new Set(); |
- for (var className of classes.keys()) { |
- if (classes.get(className)) |
- activeClasses.add(className); |
- } |
- |
- var newClasses = activeClasses.valuesArray(); |
- newClasses.sort(); |
- this._mutatingNodes.add(node); |
- node.setAttributeValue("class", newClasses.join(" "), onClassNameUpdated.bind(this)); |
- |
- /** |
- * @this {WebInspector.ClassesPaneWidget} |
- */ |
- function onClassNameUpdated() |
- { |
- this._mutatingNodes.delete(node); |
- } |
- }, |
- |
- __proto__: WebInspector.Widget.prototype |
+ function onClassNameUpdated() { |
+ this._mutatingNodes.delete(node); |
+ } |
+ } |
}; |
+WebInspector.ClassesPaneWidget._classesSymbol = Symbol('WebInspector.ClassesPaneWidget._classesSymbol'); |
+ |
/** |
- * @constructor |
* @implements {WebInspector.ToolbarItem.Provider} |
+ * @unrestricted |
*/ |
-WebInspector.ClassesPaneWidget.ButtonProvider = function() |
-{ |
- this._button = new WebInspector.ToolbarToggle(WebInspector.UIString("Element Classes"), ""); |
- this._button.setText(".cls"); |
- this._button.element.classList.add("monospace"); |
- this._button.addEventListener("click", this._clicked, this); |
+WebInspector.ClassesPaneWidget.ButtonProvider = class { |
+ constructor() { |
+ this._button = new WebInspector.ToolbarToggle(WebInspector.UIString('Element Classes'), ''); |
+ this._button.setText('.cls'); |
+ this._button.element.classList.add('monospace'); |
+ this._button.addEventListener('click', this._clicked, this); |
this._view = new WebInspector.ClassesPaneWidget(); |
-}; |
- |
-WebInspector.ClassesPaneWidget.ButtonProvider.prototype = { |
- _clicked: function() |
- { |
- WebInspector.ElementsPanel.instance().showToolbarPane(!this._view.isShowing() ? this._view : null, this._button); |
- }, |
- |
- /** |
- * @override |
- * @return {!WebInspector.ToolbarItem} |
- */ |
- item: function() |
- { |
- return this._button; |
- } |
+ } |
+ |
+ _clicked() { |
+ WebInspector.ElementsPanel.instance().showToolbarPane(!this._view.isShowing() ? this._view : null, this._button); |
+ } |
+ |
+ /** |
+ * @override |
+ * @return {!WebInspector.ToolbarItem} |
+ */ |
+ item() { |
+ return this._button; |
+ } |
}; |
/** |
- * @constructor |
- * @extends {WebInspector.TextPrompt} |
+ * @unrestricted |
*/ |
-WebInspector.ClassesPaneWidget.ClassNamePrompt = function() |
-{ |
- WebInspector.TextPrompt.call(this); |
- this.initialize(this._buildClassNameCompletions.bind(this), " "); |
+WebInspector.ClassesPaneWidget.ClassNamePrompt = class extends WebInspector.TextPrompt { |
+ constructor() { |
+ super(); |
+ this.initialize(this._buildClassNameCompletions.bind(this), ' '); |
this.setSuggestBoxEnabled(true); |
this.disableDefaultSuggestionForEmptyInput(); |
- this._selectedFrameId = ""; |
+ this._selectedFrameId = ''; |
this._classNamesPromise = null; |
-}; |
- |
-WebInspector.ClassesPaneWidget.ClassNamePrompt.prototype = { |
- /** |
- * @param {!WebInspector.DOMNode} selectedNode |
- * @return {!Promise.<!Array.<string>>} |
- */ |
- _getClassNames: function(selectedNode) |
- { |
- var promises = []; |
- var completions = new Set(); |
- this._selectedFrameId = selectedNode.frameId(); |
- |
- var cssModel = WebInspector.CSSModel.fromTarget(selectedNode.target()); |
- var allStyleSheets = cssModel.allStyleSheets(); |
- for (var stylesheet of allStyleSheets) { |
- if (stylesheet.frameId !== this._selectedFrameId) |
- continue; |
- var cssPromise = cssModel.classNamesPromise(stylesheet.id).then(classes => completions.addAll(classes)); |
- promises.push(cssPromise); |
- } |
- |
- var domPromise = selectedNode.domModel().classNamesPromise(selectedNode.ownerDocument.id).then(classes => completions.addAll(classes)); |
- promises.push(domPromise); |
- return Promise.all(promises).then(() => completions.valuesArray()); |
- }, |
- |
- /** |
- * @param {!Element} proxyElement |
- * @param {!Range} wordRange |
- * @param {boolean} force |
- * @param {function(!Array.<string>, number=)} completionsReadyCallback |
- */ |
- _buildClassNameCompletions: function(proxyElement, wordRange, force, completionsReadyCallback) |
- { |
- var prefix = wordRange.toString(); |
- if (!prefix || force) |
- this._classNamesPromise = null; |
- |
- var selectedNode = WebInspector.context.flavor(WebInspector.DOMNode); |
- if (!selectedNode || (!prefix && !force && !proxyElement.textContent.length)) { |
- completionsReadyCallback([]); |
- return; |
- } |
+ } |
+ |
+ /** |
+ * @param {!WebInspector.DOMNode} selectedNode |
+ * @return {!Promise.<!Array.<string>>} |
+ */ |
+ _getClassNames(selectedNode) { |
+ var promises = []; |
+ var completions = new Set(); |
+ this._selectedFrameId = selectedNode.frameId(); |
+ |
+ var cssModel = WebInspector.CSSModel.fromTarget(selectedNode.target()); |
+ var allStyleSheets = cssModel.allStyleSheets(); |
+ for (var stylesheet of allStyleSheets) { |
+ if (stylesheet.frameId !== this._selectedFrameId) |
+ continue; |
+ var cssPromise = cssModel.classNamesPromise(stylesheet.id).then(classes => completions.addAll(classes)); |
+ promises.push(cssPromise); |
+ } |
- if (!this._classNamesPromise || this._selectedFrameId !== selectedNode.frameId()) |
- this._classNamesPromise = this._getClassNames(selectedNode); |
+ var domPromise = selectedNode.domModel() |
+ .classNamesPromise(selectedNode.ownerDocument.id) |
+ .then(classes => completions.addAll(classes)); |
+ promises.push(domPromise); |
+ return Promise.all(promises).then(() => completions.valuesArray()); |
+ } |
+ |
+ /** |
+ * @param {!Element} proxyElement |
+ * @param {!Range} wordRange |
+ * @param {boolean} force |
+ * @param {function(!Array.<string>, number=)} completionsReadyCallback |
+ */ |
+ _buildClassNameCompletions(proxyElement, wordRange, force, completionsReadyCallback) { |
+ var prefix = wordRange.toString(); |
+ if (!prefix || force) |
+ this._classNamesPromise = null; |
+ |
+ var selectedNode = WebInspector.context.flavor(WebInspector.DOMNode); |
+ if (!selectedNode || (!prefix && !force && !proxyElement.textContent.length)) { |
+ completionsReadyCallback([]); |
+ return; |
+ } |
- this._classNamesPromise.then(completions => { |
- if (prefix[0] === ".") |
- completions = completions.map(value => "." + value); |
- var results = completions.filter(value => value.startsWith(prefix)); |
- completionsReadyCallback(results, 0); |
- }); |
- }, |
+ if (!this._classNamesPromise || this._selectedFrameId !== selectedNode.frameId()) |
+ this._classNamesPromise = this._getClassNames(selectedNode); |
- __proto__: WebInspector.TextPrompt.prototype |
+ this._classNamesPromise.then(completions => { |
+ if (prefix[0] === '.') |
+ completions = completions.map(value => '.' + value); |
+ var results = completions.filter(value => value.startsWith(prefix)); |
+ completionsReadyCallback(results, 0); |
+ }); |
+ } |
}; |