Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(202)

Side by Side Diff: Source/devtools/front_end/elements/ElementsTreeOutline.js

Issue 596323002: DevTools: make ElementsTreeOutline shadow dom-based. (Closed) Base URL: svn://svn.chromium.org/blink/trunk
Patch Set: tests fixed Created 6 years, 2 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
OLDNEW
1 /* 1 /*
2 * Copyright (C) 2007, 2008 Apple Inc. All rights reserved. 2 * Copyright (C) 2007, 2008 Apple Inc. All rights reserved.
3 * Copyright (C) 2008 Matt Lilek <webkit@mattlilek.com> 3 * Copyright (C) 2008 Matt Lilek <webkit@mattlilek.com>
4 * Copyright (C) 2009 Joseph Pecoraro 4 * Copyright (C) 2009 Joseph Pecoraro
5 * 5 *
6 * Redistribution and use in source and binary forms, with or without 6 * Redistribution and use in source and binary forms, with or without
7 * modification, are permitted provided that the following conditions 7 * modification, are permitted provided that the following conditions
8 * are met: 8 * are met:
9 * 9 *
10 * 1. Redistributions of source code must retain the above copyright 10 * 1. Redistributions of source code must retain the above copyright
(...skipping 22 matching lines...) Expand all
33 * @extends {TreeOutline} 33 * @extends {TreeOutline}
34 * @param {!WebInspector.Target} target 34 * @param {!WebInspector.Target} target
35 * @param {boolean=} omitRootDOMNode 35 * @param {boolean=} omitRootDOMNode
36 * @param {boolean=} selectEnabled 36 * @param {boolean=} selectEnabled
37 * @param {function(!WebInspector.DOMNode, string, boolean)=} setPseudoClassCall back 37 * @param {function(!WebInspector.DOMNode, string, boolean)=} setPseudoClassCall back
38 */ 38 */
39 WebInspector.ElementsTreeOutline = function(target, omitRootDOMNode, selectEnabl ed, setPseudoClassCallback) 39 WebInspector.ElementsTreeOutline = function(target, omitRootDOMNode, selectEnabl ed, setPseudoClassCallback)
40 { 40 {
41 this._target = target; 41 this._target = target;
42 this._domModel = target.domModel; 42 this._domModel = target.domModel;
43 this.element = document.createElement("ol"); 43 var element = document.createElement("div");
44 this.element.className = "elements-tree-outline";
45 this.element.addEventListener("mousedown", this._onmousedown.bind(this), fal se);
46 this.element.addEventListener("mousemove", this._onmousemove.bind(this), fal se);
47 this.element.addEventListener("mouseout", this._onmouseout.bind(this), false );
48 this.element.addEventListener("dragstart", this._ondragstart.bind(this), fal se);
49 this.element.addEventListener("dragover", this._ondragover.bind(this), false );
50 this.element.addEventListener("dragleave", this._ondragleave.bind(this), fal se);
51 this.element.addEventListener("drop", this._ondrop.bind(this), false);
52 this.element.addEventListener("dragend", this._ondragend.bind(this), false);
53 this.element.addEventListener("keydown", this._onkeydown.bind(this), false);
54 this.element.addEventListener("webkitAnimationEnd", this._onAnimationEnd.bin d(this), false);
55 this.element.addEventListener("contextmenu", this._contextMenuEventFired.bin d(this), false);
56 44
57 TreeOutline.call(this, this.element); 45 this._shadowRoot = element.createShadowRoot();
46 this._shadowRoot.appendChild(WebInspector.View.createStyleElement("elementsT reeOutline.css"));
47
48 var outlineDisclosureElement = this._shadowRoot.createChild("div", "componen t-root outline-disclosure source-code");
49 this._element = outlineDisclosureElement.createChild("ol", "elements-tree-ou tline");
50 this._element.addEventListener("mousedown", this._onmousedown.bind(this), fa lse);
51 this._element.addEventListener("mousemove", this._onmousemove.bind(this), fa lse);
52 this._element.addEventListener("mouseout", this._onmouseout.bind(this), fals e);
53 this._element.addEventListener("dragstart", this._ondragstart.bind(this), fa lse);
54 this._element.addEventListener("dragover", this._ondragover.bind(this), fals e);
55 this._element.addEventListener("dragleave", this._ondragleave.bind(this), fa lse);
56 this._element.addEventListener("drop", this._ondrop.bind(this), false);
57 this._element.addEventListener("dragend", this._ondragend.bind(this), false) ;
58 this._element.addEventListener("keydown", this._onkeydown.bind(this), false) ;
59 this._element.addEventListener("webkitAnimationEnd", this._onAnimationEnd.bi nd(this), false);
60 this._element.addEventListener("contextmenu", this._contextMenuEventFired.bi nd(this), false);
61
62 TreeOutline.call(this, this._element);
63 this.element = element;
58 64
59 this._includeRootDOMNode = !omitRootDOMNode; 65 this._includeRootDOMNode = !omitRootDOMNode;
60 this._selectEnabled = selectEnabled; 66 this._selectEnabled = selectEnabled;
61 /** @type {?WebInspector.DOMNode} */ 67 /** @type {?WebInspector.DOMNode} */
62 this._rootDOMNode = null; 68 this._rootDOMNode = null;
63 /** @type {?WebInspector.DOMNode} */ 69 /** @type {?WebInspector.DOMNode} */
64 this._selectedDOMNode = null; 70 this._selectedDOMNode = null;
65 this._eventSupport = new WebInspector.Object(); 71 this._eventSupport = new WebInspector.Object();
66 72
67 this._visible = false; 73 this._visible = false;
(...skipping 46 matching lines...) Expand 10 before | Expand all | Expand 10 after
114 event.target.classList.remove("elements-tree-element-pick-node-1"); 120 event.target.classList.remove("elements-tree-element-pick-node-1");
115 event.target.classList.remove("elements-tree-element-pick-node-2"); 121 event.target.classList.remove("elements-tree-element-pick-node-2");
116 }, 122 },
117 123
118 /** 124 /**
119 * @param {boolean} value 125 * @param {boolean} value
120 */ 126 */
121 setPickNodeMode: function(value) 127 setPickNodeMode: function(value)
122 { 128 {
123 this._pickNodeMode = value; 129 this._pickNodeMode = value;
124 this.element.classList.toggle("pick-node-mode", value); 130 this._element.classList.toggle("pick-node-mode", value);
125 }, 131 },
126 132
127 /** 133 /**
128 * @param {!Element} element 134 * @param {!Element} element
129 * @param {?WebInspector.DOMNode} node 135 * @param {?WebInspector.DOMNode} node
130 */ 136 */
131 _handlePickNode: function(element, node) 137 _handlePickNode: function(element, node)
132 { 138 {
133 if (!this._pickNodeMode) 139 if (!this._pickNodeMode)
134 return false; 140 return false;
(...skipping 409 matching lines...) Expand 10 before | Expand all | Expand 10 after
544 return; 550 return;
545 551
546 treeElement.revealAndSelect(omitFocus); 552 treeElement.revealAndSelect(omitFocus);
547 }, 553 },
548 554
549 /** 555 /**
550 * @return {?TreeElement} 556 * @return {?TreeElement}
551 */ 557 */
552 _treeElementFromEvent: function(event) 558 _treeElementFromEvent: function(event)
553 { 559 {
554 var scrollContainer = this.element.parentElement; 560 var scrollContainer = this._element.parentElement;
555 561
556 // We choose this X coordinate based on the knowledge that our list 562 // We choose this X coordinate based on the knowledge that our list
557 // items extend at least to the right edge of the outer <ol> container. 563 // items extend at least to the right edge of the outer <ol> container.
558 // In the no-word-wrap mode the outer <ol> may be wider than the tree co ntainer 564 // In the no-word-wrap mode the outer <ol> may be wider than the tree co ntainer
559 // (and partially hidden), in which case we are left to use only its rig ht boundary. 565 // (and partially hidden), in which case we are left to use only its rig ht boundary.
560 var x = scrollContainer.totalOffsetLeft() + scrollContainer.offsetWidth - 36; 566 var x = scrollContainer.totalOffsetLeft() + scrollContainer.offsetWidth - 36;
561 567
562 var y = event.pageY; 568 var y = event.pageY;
563 569
564 // Our list items have 1-pixel cracks between them vertically. We avoid 570 // Our list items have 1-pixel cracks between them vertically. We avoid
(...skipping 37 matching lines...) Expand 10 before | Expand all | Expand 10 after
602 } 608 }
603 609
604 if (element && element._node) 610 if (element && element._node)
605 this._domModel.highlightDOMNodeWithConfig(element._node.id, { mode: "all", showInfo: !WebInspector.KeyboardShortcut.eventHasCtrlOrMeta(event) }); 611 this._domModel.highlightDOMNodeWithConfig(element._node.id, { mode: "all", showInfo: !WebInspector.KeyboardShortcut.eventHasCtrlOrMeta(event) });
606 else 612 else
607 this._domModel.hideDOMNodeHighlight(); 613 this._domModel.hideDOMNodeHighlight();
608 }, 614 },
609 615
610 _onmouseout: function(event) 616 _onmouseout: function(event)
611 { 617 {
612 var nodeUnderMouse = document.elementFromPoint(event.pageX, event.pageY) ; 618 var nodeUnderMouse = event.elementFromPoint();
613 if (nodeUnderMouse && nodeUnderMouse.isDescendant(this.element)) 619 if (nodeUnderMouse && nodeUnderMouse.isDescendant(this._element))
614 return; 620 return;
615 621
616 if (this._previousHoveredElement) { 622 if (this._previousHoveredElement) {
617 this._previousHoveredElement.hovered = false; 623 this._previousHoveredElement.hovered = false;
618 delete this._previousHoveredElement; 624 delete this._previousHoveredElement;
619 } 625 }
620 626
621 this._domModel.hideDOMNodeHighlight(); 627 this._domModel.hideDOMNodeHighlight();
622 }, 628 },
623 629
(...skipping 142 matching lines...) Expand 10 before | Expand all | Expand 10 after
766 } 772 }
767 }, 773 },
768 774
769 _contextMenuEventFired: function(event) 775 _contextMenuEventFired: function(event)
770 { 776 {
771 var treeElement = this._treeElementFromEvent(event); 777 var treeElement = this._treeElementFromEvent(event);
772 if (!treeElement) 778 if (!treeElement)
773 return; 779 return;
774 780
775 var contextMenu = new WebInspector.ContextMenu(event); 781 var contextMenu = new WebInspector.ContextMenu(event);
776
777 var isPseudoElement = !!treeElement._node.pseudoType(); 782 var isPseudoElement = !!treeElement._node.pseudoType();
778 var isTag = treeElement._node.nodeType() === Node.ELEMENT_NODE && !isPse udoElement; 783 var isTag = treeElement._node.nodeType() === Node.ELEMENT_NODE && !isPse udoElement;
779 var textNode = event.target.enclosingNodeOrSelfWithClass("webkit-html-te xt-node"); 784 var textNode = event.target.enclosingNodeOrSelfWithClass("webkit-html-te xt-node");
780 if (textNode && textNode.classList.contains("bogus")) 785 if (textNode && textNode.classList.contains("bogus"))
781 textNode = null; 786 textNode = null;
782 var commentNode = event.target.enclosingNodeOrSelfWithClass("webkit-html -comment"); 787 var commentNode = event.target.enclosingNodeOrSelfWithClass("webkit-html -comment");
783 contextMenu.appendApplicableItems(event.target); 788 contextMenu.appendApplicableItems(event.target);
784 if (textNode) { 789 if (textNode) {
785 contextMenu.appendSeparator(); 790 contextMenu.appendSeparator();
786 treeElement._populateTextContextMenu(contextMenu, textNode); 791 treeElement._populateTextContextMenu(contextMenu, textNode);
(...skipping 1153 matching lines...) Expand 10 before | Expand all | Expand 10 after
1940 this._childrenListNode.style.removeProperty("display"); 1945 this._childrenListNode.style.removeProperty("display");
1941 // Unhide header items. 1946 // Unhide header items.
1942 var child = this.listItemElement.firstChild; 1947 var child = this.listItemElement.firstChild;
1943 while (child) { 1948 while (child) {
1944 child.style.removeProperty("display"); 1949 child.style.removeProperty("display");
1945 child = child.nextSibling; 1950 child = child.nextSibling;
1946 } 1951 }
1947 1952
1948 this.treeOutline.childrenListElement.parentElement.removeEventListen er("mousedown", consume, false); 1953 this.treeOutline.childrenListElement.parentElement.removeEventListen er("mousedown", consume, false);
1949 this.updateSelection(); 1954 this.updateSelection();
1950 this.treeOutline.element.focus(); 1955 this.treeOutline._element.focus();
1951 } 1956 }
1952 1957
1953 var config = new WebInspector.InplaceEditor.Config(commit.bind(this), di spose.bind(this)); 1958 var config = new WebInspector.InplaceEditor.Config(commit.bind(this), di spose.bind(this));
1954 config.setMultilineOptions(initialValue, { name: "xml", htmlMode: true } , "web-inspector-html", WebInspector.settings.domWordWrap.get(), true); 1959 config.setMultilineOptions(initialValue, { name: "xml", htmlMode: true } , "web-inspector-html", WebInspector.settings.domWordWrap.get(), true);
1955 self.runtime.instancePromise(WebInspector.InplaceEditor).then(markAsBein gEdited.bind(this)).done(); 1960 self.runtime.instancePromise(WebInspector.InplaceEditor).then(markAsBein gEdited.bind(this)).done();
1956 1961
1957 /** 1962 /**
1958 * @param {!WebInspector.InplaceEditor} inplaceEditor 1963 * @param {!WebInspector.InplaceEditor} inplaceEditor
1959 * @this {WebInspector.ElementsTreeElement} 1964 * @this {WebInspector.ElementsTreeElement}
1960 */ 1965 */
(...skipping 886 matching lines...) Expand 10 before | Expand all | Expand 10 after
2847 if (this._updateModifiedNodesTimeout) { 2852 if (this._updateModifiedNodesTimeout) {
2848 clearTimeout(this._updateModifiedNodesTimeout); 2853 clearTimeout(this._updateModifiedNodesTimeout);
2849 delete this._updateModifiedNodesTimeout; 2854 delete this._updateModifiedNodesTimeout;
2850 } 2855 }
2851 2856
2852 var updatedNodes = this._recentlyModifiedNodes.values().concat(this._rec entlyModifiedParentNodes.values()); 2857 var updatedNodes = this._recentlyModifiedNodes.values().concat(this._rec entlyModifiedParentNodes.values());
2853 var hidePanelWhileUpdating = updatedNodes.length > 10; 2858 var hidePanelWhileUpdating = updatedNodes.length > 10;
2854 if (hidePanelWhileUpdating) { 2859 if (hidePanelWhileUpdating) {
2855 var treeOutlineContainerElement = this._treeOutline.element.parentNo de; 2860 var treeOutlineContainerElement = this._treeOutline.element.parentNo de;
2856 var originalScrollTop = treeOutlineContainerElement ? treeOutlineCon tainerElement.scrollTop : 0; 2861 var originalScrollTop = treeOutlineContainerElement ? treeOutlineCon tainerElement.scrollTop : 0;
2857 this._treeOutline.element.classList.add("hidden"); 2862 this._treeOutline._element.classList.add("hidden");
2858 } 2863 }
2859 2864
2860 if (this._treeOutline._rootDOMNode && this._recentlyModifiedParentNodes. contains(this._treeOutline._rootDOMNode)) { 2865 if (this._treeOutline._rootDOMNode && this._recentlyModifiedParentNodes. contains(this._treeOutline._rootDOMNode)) {
2861 // Document's children have changed, perform total update. 2866 // Document's children have changed, perform total update.
2862 this._treeOutline.update(); 2867 this._treeOutline.update();
2863 } else { 2868 } else {
2864 var nodes = this._recentlyModifiedNodes.values(); 2869 var nodes = this._recentlyModifiedNodes.values();
2865 for (var i = 0, size = nodes.length; i < size; ++i) { 2870 for (var i = 0, size = nodes.length; i < size; ++i) {
2866 var nodeItem = this._treeOutline.findTreeElement(nodes[i]); 2871 var nodeItem = this._treeOutline.findTreeElement(nodes[i]);
2867 if (nodeItem) 2872 if (nodeItem)
2868 nodeItem.updateTitle(); 2873 nodeItem.updateTitle();
2869 } 2874 }
2870 2875
2871 var parentNodes = this._recentlyModifiedParentNodes.values(); 2876 var parentNodes = this._recentlyModifiedParentNodes.values();
2872 for (var i = 0, size = parentNodes.length; i < size; ++i) { 2877 for (var i = 0, size = parentNodes.length; i < size; ++i) {
2873 var parentNodeItem = this._treeOutline.findTreeElement(parentNod es[i]); 2878 var parentNodeItem = this._treeOutline.findTreeElement(parentNod es[i]);
2874 if (parentNodeItem && parentNodeItem.populated) 2879 if (parentNodeItem && parentNodeItem.populated)
2875 parentNodeItem.updateChildren(); 2880 parentNodeItem.updateChildren();
2876 } 2881 }
2877 } 2882 }
2878 2883
2879 if (hidePanelWhileUpdating) { 2884 if (hidePanelWhileUpdating) {
2880 this._treeOutline.element.classList.remove("hidden"); 2885 this._treeOutline._element.classList.remove("hidden");
2881 if (originalScrollTop) 2886 if (originalScrollTop)
2882 treeOutlineContainerElement.scrollTop = originalScrollTop; 2887 treeOutlineContainerElement.scrollTop = originalScrollTop;
2883 this._treeOutline.updateSelection(); 2888 this._treeOutline.updateSelection();
2884 } 2889 }
2885 this._recentlyModifiedNodes.clear(); 2890 this._recentlyModifiedNodes.clear();
2886 this._recentlyModifiedParentNodes.clear(); 2891 this._recentlyModifiedParentNodes.clear();
2887 this._treeOutline._fireElementsTreeUpdated(updatedNodes); 2892 this._treeOutline._fireElementsTreeUpdated(updatedNodes);
2888 }, 2893 },
2889 2894
2890 _reset: function() 2895 _reset: function()
(...skipping 43 matching lines...) Expand 10 before | Expand all | Expand 10 after
2934 * @param {?WebInspector.DOMNode} node 2939 * @param {?WebInspector.DOMNode} node
2935 */ 2940 */
2936 function onNodeResolved(node) 2941 function onNodeResolved(node)
2937 { 2942 {
2938 if (!node) { 2943 if (!node) {
2939 reject(new Error("Could not resolve node.")); 2944 reject(new Error("Could not resolve node."));
2940 return; 2945 return;
2941 } 2946 }
2942 var treeOutline = new WebInspector.ElementsTreeOutline(node.targ et(), false, false); 2947 var treeOutline = new WebInspector.ElementsTreeOutline(node.targ et(), false, false);
2943 treeOutline.rootDOMNode = node; 2948 treeOutline.rootDOMNode = node;
2944 treeOutline.element.classList.add("outline-disclosure");
2945 if (!treeOutline.children[0].hasChildren) 2949 if (!treeOutline.children[0].hasChildren)
2946 treeOutline.element.classList.add("single-node"); 2950 treeOutline._element.classList.add("single-node");
2947 treeOutline.setVisible(true); 2951 treeOutline.setVisible(true);
2948 treeOutline.element.treeElementForTest = treeOutline.children[0] ; 2952 treeOutline.element.treeElementForTest = treeOutline.children[0] ;
2949 resolve(treeOutline.element); 2953 resolve(treeOutline.element);
2950 } 2954 }
2951 } 2955 }
2952 } 2956 }
2953 } 2957 }
OLDNEW
« no previous file with comments | « Source/devtools/front_end/elements/ElementsPanel.js ('k') | Source/devtools/front_end/elementsPanel.css » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698