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

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

Issue 467233002: DevTools: Make sure ElementsTreeOutline is correctly rendered when element's hasChildren state chan… (Closed) Base URL: svn://svn.chromium.org/blink/trunk
Patch Set: Created 6 years, 4 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
« no previous file with comments | « LayoutTests/inspector/elements/user-properties-expected.txt ('k') | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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 1180 matching lines...) Expand 10 before | Expand all | Expand 10 after
1191 var links = this.listItemElement.querySelectorAll("li .webkit-html-tag > .webkit-html-attribute > .webkit-html-external-link, li .webkit-html-tag > .web kit-html-attribute > .webkit-html-resource-link"); 1191 var links = this.listItemElement.querySelectorAll("li .webkit-html-tag > .webkit-html-attribute > .webkit-html-external-link, li .webkit-html-tag > .web kit-html-attribute > .webkit-html-resource-link");
1192 if (!links) 1192 if (!links)
1193 return; 1193 return;
1194 1194
1195 for (var i = 0; i < links.length; ++i) 1195 for (var i = 0; i < links.length; ++i)
1196 links[i].preventFollowOnDoubleClick = true; 1196 links[i].preventFollowOnDoubleClick = true;
1197 }, 1197 },
1198 1198
1199 onpopulate: function() 1199 onpopulate: function()
1200 { 1200 {
1201 if (this.children.length || this._showInlineText() || this._elementClose Tag) 1201 this.populated = true;
1202 if (this.children.length || !this.hasChildren)
1202 return; 1203 return;
1203 1204
1204 this.updateChildren(); 1205 this.updateChildren();
1205 }, 1206 },
1206 1207
1207 /** 1208 /**
1208 * @param {boolean=} fullRefresh 1209 * @param {boolean=} fullRefresh
1209 */ 1210 */
1210 updateChildren: function(fullRefresh) 1211 updateChildren: function(fullRefresh)
1211 { 1212 {
1212 if (this._elementCloseTag) 1213 if (!this.hasChildren)
1213 return; 1214 return;
1215 console.assert(!this._elementCloseTag);
1214 this._node.getChildNodes(this._updateChildren.bind(this, fullRefresh)); 1216 this._node.getChildNodes(this._updateChildren.bind(this, fullRefresh));
1215 }, 1217 },
1216 1218
1217 /** 1219 /**
1218 * @param {!WebInspector.DOMNode} child 1220 * @param {!WebInspector.DOMNode} child
1219 * @param {number} index 1221 * @param {number} index
1220 * @param {boolean=} closingTag 1222 * @param {boolean=} closingTag
1221 * @return {!WebInspector.ElementsTreeElement} 1223 * @return {!WebInspector.ElementsTreeElement}
1222 */ 1224 */
1223 insertChildElement: function(child, index, closingTag) 1225 insertChildElement: function(child, index, closingTag)
(...skipping 93 matching lines...) Expand 10 before | Expand all | Expand 10 after
1317 this.select(); 1319 this.select();
1318 1320
1319 this.removeChildAtIndex(i); 1321 this.removeChildAtIndex(i);
1320 } 1322 }
1321 1323
1322 var elementToSelect = updateChildrenOfNode.call(this); 1324 var elementToSelect = updateChildrenOfNode.call(this);
1323 this.updateTitle(); 1325 this.updateTitle();
1324 this._adjustCollapsedRange(); 1326 this._adjustCollapsedRange();
1325 1327
1326 var lastChild = this.children[this.children.length - 1]; 1328 var lastChild = this.children[this.children.length - 1];
1327 if (this._node.nodeType() == Node.ELEMENT_NODE && (!lastChild || !lastCh ild._elementCloseTag)) 1329 if (this._node.nodeType() == Node.ELEMENT_NODE && this.hasChildren)
apavlov 2014/08/13 14:39:19 ===
1328 this.insertChildElement(this._node, this.children.length, true); 1330 this.insertChildElement(this._node, this.children.length, true);
1329 1331
1330 // We want to restore the original selection and tree scroll position af ter a full refresh, if possible. 1332 // We want to restore the original selection and tree scroll position af ter a full refresh, if possible.
1331 if (fullRefresh && elementToSelect) { 1333 if (fullRefresh && elementToSelect) {
1332 elementToSelect.select(); 1334 elementToSelect.select();
1333 if (treeOutlineContainerElement && originalScrollTop <= treeOutlineC ontainerElement.scrollHeight) 1335 if (treeOutlineContainerElement && originalScrollTop <= treeOutlineC ontainerElement.scrollHeight)
1334 treeOutlineContainerElement.scrollTop = originalScrollTop; 1336 treeOutlineContainerElement.scrollTop = originalScrollTop;
1335 } 1337 }
1336 1338
1337 delete this._updateChildrenInProgress; 1339 delete this._updateChildrenInProgress;
(...skipping 1003 matching lines...) Expand 10 before | Expand all | Expand 10 after
2341 textNodeElement.textContent = "\u2026"; 2343 textNodeElement.textContent = "\u2026";
2342 info.titleDOM.appendChild(document.createTextNode("\u200 B")); 2344 info.titleDOM.appendChild(document.createTextNode("\u200 B"));
2343 } 2345 }
2344 this._buildTagDOM(info.titleDOM, tagName, true, false); 2346 this._buildTagDOM(info.titleDOM, tagName, true, false);
2345 } 2347 }
2346 2348
2347 // If this element only has a single child that is a text node, 2349 // If this element only has a single child that is a text node,
2348 // just show that text and the closing tag inline rather than 2350 // just show that text and the closing tag inline rather than
2349 // create a subtree for them 2351 // create a subtree for them
2350 if (showInlineText) { 2352 if (showInlineText) {
2353 console.assert(!this.hasChildren);
2351 var textNodeElement = info.titleDOM.createChild("span", "web kit-html-text-node"); 2354 var textNodeElement = info.titleDOM.createChild("span", "web kit-html-text-node");
2352 var result = this._convertWhitespaceToEntities(node.firstChi ld.nodeValue()); 2355 var result = this._convertWhitespaceToEntities(node.firstChi ld.nodeValue());
2353 textNodeElement.textContent = result.text; 2356 textNodeElement.textContent = result.text;
2354 WebInspector.highlightRangesWithStyleClass(textNodeElement, result.entityRanges, "webkit-html-entity-value"); 2357 WebInspector.highlightRangesWithStyleClass(textNodeElement, result.entityRanges, "webkit-html-entity-value");
2355 info.titleDOM.appendChild(document.createTextNode("\u200B")) ; 2358 info.titleDOM.appendChild(document.createTextNode("\u200B")) ;
2356 this._buildTagDOM(info.titleDOM, tagName, true, false); 2359 this._buildTagDOM(info.titleDOM, tagName, true, false);
2357 info.hasChildren = false; 2360 info.hasChildren = false;
2358 } 2361 }
2359 break; 2362 break;
2360 2363
(...skipping 295 matching lines...) Expand 10 before | Expand all | Expand 10 after
2656 this._domModel.removeEventListener(WebInspector.DOMModel.Events.NodeInse rted, this._nodeInserted, this); 2659 this._domModel.removeEventListener(WebInspector.DOMModel.Events.NodeInse rted, this._nodeInserted, this);
2657 this._domModel.removeEventListener(WebInspector.DOMModel.Events.NodeRemo ved, this._nodeRemoved, this); 2660 this._domModel.removeEventListener(WebInspector.DOMModel.Events.NodeRemo ved, this._nodeRemoved, this);
2658 this._domModel.removeEventListener(WebInspector.DOMModel.Events.AttrModi fied, this._attributesUpdated, this); 2661 this._domModel.removeEventListener(WebInspector.DOMModel.Events.AttrModi fied, this._attributesUpdated, this);
2659 this._domModel.removeEventListener(WebInspector.DOMModel.Events.AttrRemo ved, this._attributesUpdated, this); 2662 this._domModel.removeEventListener(WebInspector.DOMModel.Events.AttrRemo ved, this._attributesUpdated, this);
2660 this._domModel.removeEventListener(WebInspector.DOMModel.Events.Characte rDataModified, this._characterDataModified, this); 2663 this._domModel.removeEventListener(WebInspector.DOMModel.Events.Characte rDataModified, this._characterDataModified, this);
2661 this._domModel.removeEventListener(WebInspector.DOMModel.Events.Document Updated, this._documentUpdated, this); 2664 this._domModel.removeEventListener(WebInspector.DOMModel.Events.Document Updated, this._documentUpdated, this);
2662 this._domModel.removeEventListener(WebInspector.DOMModel.Events.ChildNod eCountUpdated, this._childNodeCountUpdated, this); 2665 this._domModel.removeEventListener(WebInspector.DOMModel.Events.ChildNod eCountUpdated, this._childNodeCountUpdated, this);
2663 }, 2666 },
2664 2667
2665 /** 2668 /**
2666 * @param {!WebInspector.DOMNode} parentNode 2669 * @param {?WebInspector.DOMNode} parentNode
2667 */ 2670 */
2668 _parentNodeModified: function(parentNode) 2671 _parentNodeModified: function(parentNode)
2669 { 2672 {
2673 if (!parentNode)
2674 return;
2675 this._recentlyModifiedParentNodes.add(parentNode);
2676
2677 var treeElement = this._treeOutline.findTreeElement(parentNode);
2678 if (treeElement) {
2679 var oldHasChildren = treeElement.hasChildren;
2680 var oldShowInlineText = treeElement._showInlineText();
2681 treeElement._updateHasChildren();
2682 if (treeElement.hasChildren !== oldHasChildren || oldShowInlineText || treeElement._showInlineText())
2683 this._nodeModified(parentNode);
2684 }
2685
2670 if (this._treeOutline._visible) 2686 if (this._treeOutline._visible)
2671 this._updateModifiedNodesSoon(); 2687 this._updateModifiedNodesSoon();
2672 this._recentlyModifiedParentNodes.add(parentNode);
2673 }, 2688 },
2674 2689
2675 /** 2690 /**
2676 * @param {!WebInspector.DOMNode} node 2691 * @param {!WebInspector.DOMNode} node
2677 */ 2692 */
2678 _nodeModified: function(node) 2693 _nodeModified: function(node)
2679 { 2694 {
2695 this._recentlyModifiedNodes.add(node);
2680 if (this._treeOutline._visible) 2696 if (this._treeOutline._visible)
2681 this._updateModifiedNodesSoon(); 2697 this._updateModifiedNodesSoon();
2682 this._recentlyModifiedNodes.add(node);
2683 }, 2698 },
2684 2699
2685 /** 2700 /**
2686 * @param {!WebInspector.Event} event 2701 * @param {!WebInspector.Event} event
2687 */ 2702 */
2688 _documentUpdated: function(event) 2703 _documentUpdated: function(event)
2689 { 2704 {
2690 var inspectedRootDocument = event.data; 2705 var inspectedRootDocument = event.data;
2691 2706
2692 this._reset(); 2707 this._reset();
(...skipping 12 matching lines...) Expand all
2705 var node = /** @type {!WebInspector.DOMNode} */ (event.data.node); 2720 var node = /** @type {!WebInspector.DOMNode} */ (event.data.node);
2706 this._nodeModified(node); 2721 this._nodeModified(node);
2707 }, 2722 },
2708 2723
2709 /** 2724 /**
2710 * @param {!WebInspector.Event} event 2725 * @param {!WebInspector.Event} event
2711 */ 2726 */
2712 _characterDataModified: function(event) 2727 _characterDataModified: function(event)
2713 { 2728 {
2714 var node = /** @type {!WebInspector.DOMNode} */ (event.data); 2729 var node = /** @type {!WebInspector.DOMNode} */ (event.data);
2730 this._parentNodeModified(node.parentNode);
2715 this._nodeModified(node); 2731 this._nodeModified(node);
2716 }, 2732 },
2717 2733
2718 /** 2734 /**
2719 * @param {!WebInspector.Event} event 2735 * @param {!WebInspector.Event} event
2720 */ 2736 */
2721 _nodeInserted: function(event) 2737 _nodeInserted: function(event)
2722 { 2738 {
2723 var node = /** @type {!WebInspector.DOMNode} */ (event.data); 2739 var node = /** @type {!WebInspector.DOMNode} */ (event.data);
2724 var parentNode = /** @type {!WebInspector.DOMNode} */ (node.parentNode); 2740 this._parentNodeModified(node.parentNode);
2725 this._parentNodeModified(parentNode);
2726 }, 2741 },
2727 2742
2728 /** 2743 /**
2729 * @param {!WebInspector.Event} event 2744 * @param {!WebInspector.Event} event
2730 */ 2745 */
2731 _nodeRemoved: function(event) 2746 _nodeRemoved: function(event)
2732 { 2747 {
2733 var node = /** @type {!WebInspector.DOMNode} */ (event.data.node); 2748 var node = /** @type {!WebInspector.DOMNode} */ (event.data.node);
2734 var parentNode = /** @type {!WebInspector.DOMNode} */ (event.data.parent ); 2749 var parentNode = /** @type {!WebInspector.DOMNode} */ (event.data.parent );
2735 this._treeOutline._resetClipboardIfNeeded(node); 2750 this._treeOutline._resetClipboardIfNeeded(node);
2736 this._parentNodeModified(parentNode); 2751 this._parentNodeModified(parentNode);
2737 }, 2752 },
2738 2753
2739 /** 2754 /**
2740 * @param {!WebInspector.Event} event 2755 * @param {!WebInspector.Event} event
2741 */ 2756 */
2742 _childNodeCountUpdated: function(event) 2757 _childNodeCountUpdated: function(event)
2743 { 2758 {
2744 var node = /** @type {!WebInspector.DOMNode} */ (event.data); 2759 var node = /** @type {!WebInspector.DOMNode} */ (event.data);
2745 var treeElement = this._treeOutline.findTreeElement(node); 2760 this._parentNodeModified(node);
2746 if (treeElement) {
2747 var oldHasChildren = treeElement.hasChildren;
2748 treeElement._updateHasChildren();
2749 if (treeElement.hasChildren !== oldHasChildren)
2750 treeElement.updateTitle();
2751 }
2752 }, 2761 },
2753 2762
2754 _updateModifiedNodesSoon: function() 2763 _updateModifiedNodesSoon: function()
2755 { 2764 {
2756 if (this._updateModifiedNodesTimeout) 2765 if (this._updateModifiedNodesTimeout)
2757 return; 2766 return;
2758 this._updateModifiedNodesTimeout = setTimeout(this._updateModifiedNodes. bind(this), 50); 2767 this._updateModifiedNodesTimeout = setTimeout(this._updateModifiedNodes. bind(this), 50);
2759 }, 2768 },
2760 2769
2761 _updateModifiedNodes: function() 2770 _updateModifiedNodes: function()
(...skipping 18 matching lines...) Expand all
2780 var nodes = this._recentlyModifiedNodes.values(); 2789 var nodes = this._recentlyModifiedNodes.values();
2781 for (var i = 0, size = nodes.length; i < size; ++i) { 2790 for (var i = 0, size = nodes.length; i < size; ++i) {
2782 var nodeItem = this._treeOutline.findTreeElement(nodes[i]); 2791 var nodeItem = this._treeOutline.findTreeElement(nodes[i]);
2783 if (nodeItem) 2792 if (nodeItem)
2784 nodeItem.updateTitle(); 2793 nodeItem.updateTitle();
2785 } 2794 }
2786 2795
2787 var parentNodes = this._recentlyModifiedParentNodes.values(); 2796 var parentNodes = this._recentlyModifiedParentNodes.values();
2788 for (var i = 0, size = parentNodes.length; i < size; ++i) { 2797 for (var i = 0, size = parentNodes.length; i < size; ++i) {
2789 var parentNodeItem = this._treeOutline.findTreeElement(parentNod es[i]); 2798 var parentNodeItem = this._treeOutline.findTreeElement(parentNod es[i]);
2790 if (parentNodeItem) 2799 if (parentNodeItem && parentNodeItem.populated)
2791 parentNodeItem.updateChildren(); 2800 parentNodeItem.updateChildren();
2792 } 2801 }
2793 } 2802 }
2794 2803
2795 if (hidePanelWhileUpdating) { 2804 if (hidePanelWhileUpdating) {
2796 this._treeOutline.element.classList.remove("hidden"); 2805 this._treeOutline.element.classList.remove("hidden");
2797 if (originalScrollTop) 2806 if (originalScrollTop)
2798 treeOutlineContainerElement.scrollTop = originalScrollTop; 2807 treeOutlineContainerElement.scrollTop = originalScrollTop;
2799 this._treeOutline.updateSelection(); 2808 this._treeOutline.updateSelection();
2800 } 2809 }
(...skipping 34 matching lines...) Expand 10 before | Expand all | Expand 10 after
2835 var treeOutline = new WebInspector.ElementsTreeOutline(node.target(), fa lse, false); 2844 var treeOutline = new WebInspector.ElementsTreeOutline(node.target(), fa lse, false);
2836 treeOutline.rootDOMNode = node; 2845 treeOutline.rootDOMNode = node;
2837 treeOutline.element.classList.add("outline-disclosure"); 2846 treeOutline.element.classList.add("outline-disclosure");
2838 if (!treeOutline.children[0].hasChildren) 2847 if (!treeOutline.children[0].hasChildren)
2839 treeOutline.element.classList.add("single-node"); 2848 treeOutline.element.classList.add("single-node");
2840 treeOutline.setVisible(true); 2849 treeOutline.setVisible(true);
2841 treeOutline.element.treeElementForTest = treeOutline.children[0]; 2850 treeOutline.element.treeElementForTest = treeOutline.children[0];
2842 return treeOutline.element; 2851 return treeOutline.element;
2843 } 2852 }
2844 } 2853 }
OLDNEW
« no previous file with comments | « LayoutTests/inspector/elements/user-properties-expected.txt ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698