| Index: third_party/WebKit/Source/devtools/front_end/layer_viewer/LayerTreeOutline.js
|
| diff --git a/third_party/WebKit/Source/devtools/front_end/layer_viewer/LayerTreeOutline.js b/third_party/WebKit/Source/devtools/front_end/layer_viewer/LayerTreeOutline.js
|
| index ae7424c2a3944e9a64f5abbf46e1cb5c3a720587..eb66dbc24d7683ff9a30dac6a93ce73c5698d356 100644
|
| --- a/third_party/WebKit/Source/devtools/front_end/layer_viewer/LayerTreeOutline.js
|
| +++ b/third_party/WebKit/Source/devtools/front_end/layer_viewer/LayerTreeOutline.js
|
| @@ -27,237 +27,220 @@
|
| * (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 {!WebInspector.LayerViewHost} layerViewHost
|
| - * @extends {WebInspector.Object}
|
| * @implements {WebInspector.LayerView}
|
| + * @unrestricted
|
| */
|
| -WebInspector.LayerTreeOutline = function(layerViewHost)
|
| -{
|
| - WebInspector.Object.call(this);
|
| +WebInspector.LayerTreeOutline = class extends WebInspector.Object {
|
| + /**
|
| + * @param {!WebInspector.LayerViewHost} layerViewHost
|
| + */
|
| + constructor(layerViewHost) {
|
| + super();
|
| this._layerViewHost = layerViewHost;
|
| this._layerViewHost.registerView(this);
|
|
|
| this._treeOutline = new TreeOutlineInShadow();
|
| - this._treeOutline.element.classList.add("layer-tree", "overflow-auto");
|
| - this._treeOutline.element.addEventListener("mousemove", this._onMouseMove.bind(this), false);
|
| - this._treeOutline.element.addEventListener("mouseout", this._onMouseMove.bind(this), false);
|
| - this._treeOutline.element.addEventListener("contextmenu", this._onContextMenu.bind(this), true);
|
| + this._treeOutline.element.classList.add('layer-tree', 'overflow-auto');
|
| + this._treeOutline.element.addEventListener('mousemove', this._onMouseMove.bind(this), false);
|
| + this._treeOutline.element.addEventListener('mouseout', this._onMouseMove.bind(this), false);
|
| + this._treeOutline.element.addEventListener('contextmenu', this._onContextMenu.bind(this), true);
|
|
|
| this._lastHoveredNode = null;
|
| this.element = this._treeOutline.element;
|
| this._layerViewHost.showInternalLayersSetting().addChangeListener(this._update, this);
|
| -};
|
| -
|
| -WebInspector.LayerTreeOutline.prototype = {
|
| - focus: function()
|
| - {
|
| - this._treeOutline.focus();
|
| - },
|
| -
|
| - /**
|
| - * @param {?WebInspector.LayerView.Selection} selection
|
| - * @override
|
| - */
|
| - selectObject: function(selection)
|
| - {
|
| - this.hoverObject(null);
|
| - var layer = selection && selection.layer();
|
| - var node = layer && layer[WebInspector.LayerTreeElement._symbol];
|
| - if (node)
|
| - node.revealAndSelect(true);
|
| - else if (this._treeOutline.selectedTreeElement)
|
| - this._treeOutline.selectedTreeElement.deselect();
|
| - },
|
| -
|
| - /**
|
| - * @param {?WebInspector.LayerView.Selection} selection
|
| - * @override
|
| - */
|
| - hoverObject: function(selection)
|
| - {
|
| - var layer = selection && selection.layer();
|
| - var node = layer && layer[WebInspector.LayerTreeElement._symbol];
|
| - if (node === this._lastHoveredNode)
|
| - return;
|
| - if (this._lastHoveredNode)
|
| - this._lastHoveredNode.setHovered(false);
|
| - if (node)
|
| - node.setHovered(true);
|
| - this._lastHoveredNode = node;
|
| - },
|
| + }
|
| +
|
| + focus() {
|
| + this._treeOutline.focus();
|
| + }
|
| +
|
| + /**
|
| + * @param {?WebInspector.LayerView.Selection} selection
|
| + * @override
|
| + */
|
| + selectObject(selection) {
|
| + this.hoverObject(null);
|
| + var layer = selection && selection.layer();
|
| + var node = layer && layer[WebInspector.LayerTreeElement._symbol];
|
| + if (node)
|
| + node.revealAndSelect(true);
|
| + else if (this._treeOutline.selectedTreeElement)
|
| + this._treeOutline.selectedTreeElement.deselect();
|
| + }
|
| +
|
| + /**
|
| + * @param {?WebInspector.LayerView.Selection} selection
|
| + * @override
|
| + */
|
| + hoverObject(selection) {
|
| + var layer = selection && selection.layer();
|
| + var node = layer && layer[WebInspector.LayerTreeElement._symbol];
|
| + if (node === this._lastHoveredNode)
|
| + return;
|
| + if (this._lastHoveredNode)
|
| + this._lastHoveredNode.setHovered(false);
|
| + if (node)
|
| + node.setHovered(true);
|
| + this._lastHoveredNode = node;
|
| + }
|
| +
|
| + /**
|
| + * @param {?WebInspector.LayerTreeBase} layerTree
|
| + * @override
|
| + */
|
| + setLayerTree(layerTree) {
|
| + this._layerTree = layerTree;
|
| + this._update();
|
| + }
|
| +
|
| + _update() {
|
| + var showInternalLayers = this._layerViewHost.showInternalLayersSetting().get();
|
| + var seenLayers = new Map();
|
| + var root = null;
|
| + if (this._layerTree) {
|
| + if (!showInternalLayers)
|
| + root = this._layerTree.contentRoot();
|
| + if (!root)
|
| + root = this._layerTree.root();
|
| + }
|
|
|
| /**
|
| - * @param {?WebInspector.LayerTreeBase} layerTree
|
| - * @override
|
| + * @param {!WebInspector.Layer} layer
|
| + * @this {WebInspector.LayerTreeOutline}
|
| */
|
| - setLayerTree: function(layerTree)
|
| - {
|
| - this._layerTree = layerTree;
|
| - this._update();
|
| - },
|
| -
|
| - _update: function()
|
| - {
|
| - var showInternalLayers = this._layerViewHost.showInternalLayersSetting().get();
|
| - var seenLayers = new Map();
|
| - var root = null;
|
| - if (this._layerTree) {
|
| - if (!showInternalLayers)
|
| - root = this._layerTree.contentRoot();
|
| - if (!root)
|
| - root = this._layerTree.root();
|
| - }
|
| -
|
| - /**
|
| - * @param {!WebInspector.Layer} layer
|
| - * @this {WebInspector.LayerTreeOutline}
|
| - */
|
| - function updateLayer(layer)
|
| - {
|
| - if (!layer.drawsContent() && !showInternalLayers)
|
| - return;
|
| - if (seenLayers.get(layer))
|
| - console.assert(false, "Duplicate layer: " + layer.id());
|
| - seenLayers.set(layer, true);
|
| - var node = layer[WebInspector.LayerTreeElement._symbol];
|
| - var parentLayer = layer.parent();
|
| - // Skip till nearest visible ancestor.
|
| - while (parentLayer && parentLayer !== root && !parentLayer.drawsContent() && !showInternalLayers)
|
| - parentLayer = parentLayer.parent();
|
| - var parent = layer === root ? this._treeOutline.rootElement() : parentLayer[WebInspector.LayerTreeElement._symbol];
|
| - if (!parent) {
|
| - console.assert(false, "Parent is not in the tree");
|
| - return;
|
| - }
|
| - if (!node) {
|
| - node = new WebInspector.LayerTreeElement(this, layer);
|
| - parent.appendChild(node);
|
| - // Expand all new non-content layers to expose content layers better.
|
| - if (!layer.drawsContent())
|
| - node.expand();
|
| - } else {
|
| - if (node.parent !== parent) {
|
| - var oldSelection = this._treeOutline.selectedTreeElement;
|
| - if (node.parent)
|
| - node.parent.removeChild(node);
|
| - parent.appendChild(node);
|
| - if (oldSelection !== this._treeOutline.selectedTreeElement)
|
| - oldSelection.select();
|
| - }
|
| - node._update();
|
| - }
|
| - }
|
| - if (root)
|
| - this._layerTree.forEachLayer(updateLayer.bind(this), root);
|
| - // Cleanup layers that don't exist anymore from tree.
|
| - var rootElement = this._treeOutline.rootElement();
|
| - for (var node = rootElement.firstChild(); node && !node.root;) {
|
| - if (seenLayers.get(node._layer)) {
|
| - node = node.traverseNextTreeElement(false);
|
| - } else {
|
| - var nextNode = node.nextSibling || node.parent;
|
| - node.parent.removeChild(node);
|
| - if (node === this._lastHoveredNode)
|
| - this._lastHoveredNode = null;
|
| - node = nextNode;
|
| - }
|
| + function updateLayer(layer) {
|
| + if (!layer.drawsContent() && !showInternalLayers)
|
| + return;
|
| + if (seenLayers.get(layer))
|
| + console.assert(false, 'Duplicate layer: ' + layer.id());
|
| + seenLayers.set(layer, true);
|
| + var node = layer[WebInspector.LayerTreeElement._symbol];
|
| + var parentLayer = layer.parent();
|
| + // Skip till nearest visible ancestor.
|
| + while (parentLayer && parentLayer !== root && !parentLayer.drawsContent() && !showInternalLayers)
|
| + parentLayer = parentLayer.parent();
|
| + var parent =
|
| + layer === root ? this._treeOutline.rootElement() : parentLayer[WebInspector.LayerTreeElement._symbol];
|
| + if (!parent) {
|
| + console.assert(false, 'Parent is not in the tree');
|
| + return;
|
| + }
|
| + if (!node) {
|
| + node = new WebInspector.LayerTreeElement(this, layer);
|
| + parent.appendChild(node);
|
| + // Expand all new non-content layers to expose content layers better.
|
| + if (!layer.drawsContent())
|
| + node.expand();
|
| + } else {
|
| + if (node.parent !== parent) {
|
| + var oldSelection = this._treeOutline.selectedTreeElement;
|
| + if (node.parent)
|
| + node.parent.removeChild(node);
|
| + parent.appendChild(node);
|
| + if (oldSelection !== this._treeOutline.selectedTreeElement)
|
| + oldSelection.select();
|
| }
|
| - if (!this._treeOutline.selectedTreeElement) {
|
| - var elementToSelect = this._layerTree.contentRoot() || this._layerTree.root();
|
| - if (elementToSelect)
|
| - elementToSelect[WebInspector.LayerTreeElement._symbol].revealAndSelect(true);
|
| - }
|
| - },
|
| -
|
| - /**
|
| - * @param {!Event} event
|
| - */
|
| - _onMouseMove: function(event)
|
| - {
|
| - var node = this._treeOutline.treeElementFromEvent(event);
|
| + node._update();
|
| + }
|
| + }
|
| + if (root)
|
| + this._layerTree.forEachLayer(updateLayer.bind(this), root);
|
| + // Cleanup layers that don't exist anymore from tree.
|
| + var rootElement = this._treeOutline.rootElement();
|
| + for (var node = rootElement.firstChild(); node && !node.root;) {
|
| + if (seenLayers.get(node._layer)) {
|
| + node = node.traverseNextTreeElement(false);
|
| + } else {
|
| + var nextNode = node.nextSibling || node.parent;
|
| + node.parent.removeChild(node);
|
| if (node === this._lastHoveredNode)
|
| - return;
|
| - this._layerViewHost.hoverObject(this._selectionForNode(node));
|
| - },
|
| -
|
| - /**
|
| - * @param {!WebInspector.LayerTreeElement} node
|
| - */
|
| - _selectedNodeChanged: function(node)
|
| - {
|
| - this._layerViewHost.selectObject(this._selectionForNode(node));
|
| - },
|
| -
|
| - /**
|
| - * @param {!Event} event
|
| - */
|
| - _onContextMenu: function(event)
|
| - {
|
| - var selection = this._selectionForNode(this._treeOutline.treeElementFromEvent(event));
|
| - var contextMenu = new WebInspector.ContextMenu(event);
|
| - this._layerViewHost.showContextMenu(contextMenu, selection);
|
| - },
|
| -
|
| - /**
|
| - * @param {?TreeElement} node
|
| - * @return {?WebInspector.LayerView.Selection}
|
| - */
|
| - _selectionForNode: function(node)
|
| - {
|
| - return node && node._layer ? new WebInspector.LayerView.LayerSelection(node._layer) : null;
|
| - },
|
| -
|
| - __proto__: WebInspector.Object.prototype
|
| + this._lastHoveredNode = null;
|
| + node = nextNode;
|
| + }
|
| + }
|
| + if (!this._treeOutline.selectedTreeElement) {
|
| + var elementToSelect = this._layerTree.contentRoot() || this._layerTree.root();
|
| + if (elementToSelect)
|
| + elementToSelect[WebInspector.LayerTreeElement._symbol].revealAndSelect(true);
|
| + }
|
| + }
|
| +
|
| + /**
|
| + * @param {!Event} event
|
| + */
|
| + _onMouseMove(event) {
|
| + var node = this._treeOutline.treeElementFromEvent(event);
|
| + if (node === this._lastHoveredNode)
|
| + return;
|
| + this._layerViewHost.hoverObject(this._selectionForNode(node));
|
| + }
|
| +
|
| + /**
|
| + * @param {!WebInspector.LayerTreeElement} node
|
| + */
|
| + _selectedNodeChanged(node) {
|
| + this._layerViewHost.selectObject(this._selectionForNode(node));
|
| + }
|
| +
|
| + /**
|
| + * @param {!Event} event
|
| + */
|
| + _onContextMenu(event) {
|
| + var selection = this._selectionForNode(this._treeOutline.treeElementFromEvent(event));
|
| + var contextMenu = new WebInspector.ContextMenu(event);
|
| + this._layerViewHost.showContextMenu(contextMenu, selection);
|
| + }
|
| +
|
| + /**
|
| + * @param {?TreeElement} node
|
| + * @return {?WebInspector.LayerView.Selection}
|
| + */
|
| + _selectionForNode(node) {
|
| + return node && node._layer ? new WebInspector.LayerView.LayerSelection(node._layer) : null;
|
| + }
|
| };
|
|
|
| /**
|
| - * @constructor
|
| - * @param {!WebInspector.LayerTreeOutline} tree
|
| - * @param {!WebInspector.Layer} layer
|
| - * @extends {TreeElement}
|
| - */
|
| -WebInspector.LayerTreeElement = function(tree, layer)
|
| -{
|
| - TreeElement.call(this);
|
| + * @unrestricted
|
| + */
|
| +WebInspector.LayerTreeElement = class extends TreeElement {
|
| + /**
|
| + * @param {!WebInspector.LayerTreeOutline} tree
|
| + * @param {!WebInspector.Layer} layer
|
| + */
|
| + constructor(tree, layer) {
|
| + super();
|
| this._treeOutline = tree;
|
| this._layer = layer;
|
| this._layer[WebInspector.LayerTreeElement._symbol] = this;
|
| this._update();
|
| + }
|
| +
|
| + _update() {
|
| + var node = this._layer.nodeForSelfOrAncestor();
|
| + var title = createDocumentFragment();
|
| + title.createTextChild(node ? WebInspector.DOMPresentationUtils.simpleSelector(node) : '#' + this._layer.id());
|
| + var details = title.createChild('span', 'dimmed');
|
| + details.textContent = WebInspector.UIString(' (%d × %d)', this._layer.width(), this._layer.height());
|
| + this.title = title;
|
| + }
|
| +
|
| + /**
|
| + * @override
|
| + * @return {boolean}
|
| + */
|
| + onselect() {
|
| + this._treeOutline._selectedNodeChanged(this);
|
| + return false;
|
| + }
|
| +
|
| + /**
|
| + * @param {boolean} hovered
|
| + */
|
| + setHovered(hovered) {
|
| + this.listItemElement.classList.toggle('hovered', hovered);
|
| + }
|
| };
|
|
|
| -WebInspector.LayerTreeElement._symbol = Symbol("layer");
|
| -
|
| -WebInspector.LayerTreeElement.prototype = {
|
| - _update: function()
|
| - {
|
| - var node = this._layer.nodeForSelfOrAncestor();
|
| - var title = createDocumentFragment();
|
| - title.createTextChild(node ? WebInspector.DOMPresentationUtils.simpleSelector(node) : "#" + this._layer.id());
|
| - var details = title.createChild("span", "dimmed");
|
| - details.textContent = WebInspector.UIString(" (%d × %d)", this._layer.width(), this._layer.height());
|
| - this.title = title;
|
| - },
|
| -
|
| - /**
|
| - * @override
|
| - * @return {boolean}
|
| - */
|
| - onselect: function()
|
| - {
|
| - this._treeOutline._selectedNodeChanged(this);
|
| - return false;
|
| - },
|
| -
|
| - /**
|
| - * @param {boolean} hovered
|
| - */
|
| - setHovered: function(hovered)
|
| - {
|
| - this.listItemElement.classList.toggle("hovered", hovered);
|
| - },
|
| -
|
| - __proto__: TreeElement.prototype
|
| -};
|
| +WebInspector.LayerTreeElement._symbol = Symbol('layer');
|
|
|