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

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

Issue 701153002: DevTools: [Elements] Highlight DOM updates (Closed) Base URL: svn://svn.chromium.org/blink/trunk
Patch Set: Address comments, add setting Created 6 years, 1 month 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 472 matching lines...) Expand 10 before | Expand all | Expand 10 after
483 closingTagElement.updateTitle(); 483 closingTagElement.updateTitle();
484 }, 484 },
485 485
486 _selectedNodeChanged: function() 486 _selectedNodeChanged: function()
487 { 487 {
488 this._eventSupport.dispatchEventToListeners(WebInspector.ElementsTreeOut line.Events.SelectedNodeChanged, this._selectedDOMNode); 488 this._eventSupport.dispatchEventToListeners(WebInspector.ElementsTreeOut line.Events.SelectedNodeChanged, this._selectedDOMNode);
489 }, 489 },
490 490
491 /** 491 /**
492 * @param {!Array.<!WebInspector.DOMNode>} nodes 492 * @param {!Array.<!WebInspector.DOMNode>} nodes
493 * @param {!Map.<!WebInspector.DOMNode, !Set.<string>>} modifiedAttributes
493 */ 494 */
494 _fireElementsTreeUpdated: function(nodes) 495 _fireElementsTreeUpdated: function(nodes, modifiedAttributes)
495 { 496 {
496 this._eventSupport.dispatchEventToListeners(WebInspector.ElementsTreeOut line.Events.ElementsTreeUpdated, nodes); 497 this._eventSupport.dispatchEventToListeners(WebInspector.ElementsTreeOut line.Events.ElementsTreeUpdated, nodes);
498 for (var node of modifiedAttributes.keys()) {
pfeldman 2014/11/06 13:57:27 I think this should be a part of updateTitle.
apavlov 2014/11/07 08:31:41 Done.
499 var treeElement = this.findTreeElement(node);
500 if (!treeElement)
501 continue;
502 var element = treeElement.listItemElement;
503 for (var name of modifiedAttributes.get(node)) {
504 var attrValue = treeElement.representedObject.getAttribute(name) ;
505 var xpath;
506 if (attrValue === undefined) {
507 xpath = ".//*[@class='webkit-html-tag-name']";
508 } else {
509 var elementClassName = !!attrValue ? "webkit-html-attribute- value" : "webkit-html-attribute-name";
510 xpath = ".//*[@class='webkit-html-tag']//*[@class='webkit-ht ml-attribute'][.//*[@class='webkit-html-attribute-name'][text()='" + name + "']] /*[@class='" + elementClassName + "']";
511 }
512 element = element.ownerDocument.evaluate(xpath, element, null, X PathResult.ANY_UNORDERED_NODE_TYPE, null).singleNodeValue;
pfeldman 2014/11/06 13:57:27 You should precisely know what attribute to update
apavlov 2014/11/07 08:31:41 Done.
513 if (element)
514 WebInspector.runCSSAnimationOnce(element, "dom-update-highli ght");
515 }
516 }
497 }, 517 },
498 518
499 /** 519 /**
500 * @param {!WebInspector.DOMNode} node 520 * @param {!WebInspector.DOMNode} node
501 * @return {?TreeElement} 521 * @return {?TreeElement}
502 */ 522 */
503 findTreeElement: function(node) 523 findTreeElement: function(node)
504 { 524 {
505 function parentNode(node) 525 function parentNode(node)
506 { 526 {
(...skipping 2233 matching lines...) Expand 10 before | Expand all | Expand 10 after
2740 domModel.addEventListener(WebInspector.DOMModel.Events.CharacterDataModified , this._characterDataModified, this); 2760 domModel.addEventListener(WebInspector.DOMModel.Events.CharacterDataModified , this._characterDataModified, this);
2741 domModel.addEventListener(WebInspector.DOMModel.Events.DocumentUpdated, this ._documentUpdated, this); 2761 domModel.addEventListener(WebInspector.DOMModel.Events.DocumentUpdated, this ._documentUpdated, this);
2742 domModel.addEventListener(WebInspector.DOMModel.Events.ChildNodeCountUpdated , this._childNodeCountUpdated, this); 2762 domModel.addEventListener(WebInspector.DOMModel.Events.ChildNodeCountUpdated , this._childNodeCountUpdated, this);
2743 2763
2744 this._domModel = domModel; 2764 this._domModel = domModel;
2745 this._treeOutline = treeOutline; 2765 this._treeOutline = treeOutline;
2746 /** @type {!Set.<!WebInspector.DOMNode>} */ 2766 /** @type {!Set.<!WebInspector.DOMNode>} */
2747 this._recentlyModifiedNodes = new Set(); 2767 this._recentlyModifiedNodes = new Set();
2748 /** @type {!Set.<!WebInspector.DOMNode>} */ 2768 /** @type {!Set.<!WebInspector.DOMNode>} */
2749 this._recentlyModifiedParentNodes = new Set(); 2769 this._recentlyModifiedParentNodes = new Set();
2770 /** @type {!Map.<!WebInspector.DOMNode, !Set.<string>>} */
2771 this._recentlyModifiedAttributes = new Map();
pfeldman 2014/11/06 13:57:27 Do not rely upon recent modification.
apavlov 2014/11/07 08:31:41 Done.
2750 } 2772 }
2751 2773
2752 WebInspector.ElementsTreeUpdater.prototype = { 2774 WebInspector.ElementsTreeUpdater.prototype = {
2753 dispose: function() 2775 dispose: function()
2754 { 2776 {
2755 this._domModel.removeEventListener(WebInspector.DOMModel.Events.NodeInse rted, this._nodeInserted, this); 2777 this._domModel.removeEventListener(WebInspector.DOMModel.Events.NodeInse rted, this._nodeInserted, this);
2756 this._domModel.removeEventListener(WebInspector.DOMModel.Events.NodeRemo ved, this._nodeRemoved, this); 2778 this._domModel.removeEventListener(WebInspector.DOMModel.Events.NodeRemo ved, this._nodeRemoved, this);
2757 this._domModel.removeEventListener(WebInspector.DOMModel.Events.AttrModi fied, this._attributesUpdated, this); 2779 this._domModel.removeEventListener(WebInspector.DOMModel.Events.AttrModi fied, this._attributesUpdated, this);
2758 this._domModel.removeEventListener(WebInspector.DOMModel.Events.AttrRemo ved, this._attributesUpdated, this); 2780 this._domModel.removeEventListener(WebInspector.DOMModel.Events.AttrRemo ved, this._attributesUpdated, this);
2759 this._domModel.removeEventListener(WebInspector.DOMModel.Events.Characte rDataModified, this._characterDataModified, this); 2781 this._domModel.removeEventListener(WebInspector.DOMModel.Events.Characte rDataModified, this._characterDataModified, this);
(...skipping 47 matching lines...) Expand 10 before | Expand all | Expand 10 after
2807 2829
2808 this._treeOutline.rootDOMNode = inspectedRootDocument; 2830 this._treeOutline.rootDOMNode = inspectedRootDocument;
2809 }, 2831 },
2810 2832
2811 /** 2833 /**
2812 * @param {!WebInspector.Event} event 2834 * @param {!WebInspector.Event} event
2813 */ 2835 */
2814 _attributesUpdated: function(event) 2836 _attributesUpdated: function(event)
2815 { 2837 {
2816 var node = /** @type {!WebInspector.DOMNode} */ (event.data.node); 2838 var node = /** @type {!WebInspector.DOMNode} */ (event.data.node);
2817 this._nodeModified(node); 2839 this._nodeModified(node);
pfeldman 2014/11/06 13:57:27 You should instead specify aux info for this nodeM
apavlov 2014/11/07 08:31:41 Done.
2840 if (!WebInspector.settings.highlightDOMUpdates.get())
2841 return;
2842
2843 var names = this._recentlyModifiedAttributes.get(node);
2844 if (!names) {
2845 names = new Set();
2846 this._recentlyModifiedAttributes.set(node, names);
2847 }
2848 names.add(/** @type {string} */ (event.data.name));
pfeldman 2014/11/06 13:57:27 string || undefined.
apavlov 2014/11/07 08:31:41 Acknowledged.
2818 }, 2849 },
2819 2850
2820 /** 2851 /**
2821 * @param {!WebInspector.Event} event 2852 * @param {!WebInspector.Event} event
2822 */ 2853 */
2823 _characterDataModified: function(event) 2854 _characterDataModified: function(event)
2824 { 2855 {
2825 var node = /** @type {!WebInspector.DOMNode} */ (event.data); 2856 var node = /** @type {!WebInspector.DOMNode} */ (event.data);
2826 this._parentNodeModified(node.parentNode); 2857 this._parentNodeModified(node.parentNode);
2827 this._nodeModified(node); 2858 this._nodeModified(node);
(...skipping 70 matching lines...) Expand 10 before | Expand all | Expand 10 after
2898 } 2929 }
2899 2930
2900 if (hidePanelWhileUpdating) { 2931 if (hidePanelWhileUpdating) {
2901 this._treeOutline._element.classList.remove("hidden"); 2932 this._treeOutline._element.classList.remove("hidden");
2902 if (originalScrollTop) 2933 if (originalScrollTop)
2903 treeOutlineContainerElement.scrollTop = originalScrollTop; 2934 treeOutlineContainerElement.scrollTop = originalScrollTop;
2904 this._treeOutline.updateSelection(); 2935 this._treeOutline.updateSelection();
2905 } 2936 }
2906 this._recentlyModifiedNodes.clear(); 2937 this._recentlyModifiedNodes.clear();
2907 this._recentlyModifiedParentNodes.clear(); 2938 this._recentlyModifiedParentNodes.clear();
2908 this._treeOutline._fireElementsTreeUpdated(updatedNodes); 2939 this._treeOutline._fireElementsTreeUpdated(updatedNodes, this._recentlyM odifiedAttributes);
2940 this._recentlyModifiedAttributes.clear();
2909 }, 2941 },
2910 2942
2911 _reset: function() 2943 _reset: function()
2912 { 2944 {
2913 this._treeOutline.rootDOMNode = null; 2945 this._treeOutline.rootDOMNode = null;
2914 this._treeOutline.selectDOMNode(null, false); 2946 this._treeOutline.selectDOMNode(null, false);
2915 this._domModel.hideDOMNodeHighlight(); 2947 this._domModel.hideDOMNodeHighlight();
2916 this._recentlyModifiedNodes.clear(); 2948 this._recentlyModifiedNodes.clear();
2917 this._recentlyModifiedParentNodes.clear(); 2949 this._recentlyModifiedParentNodes.clear();
2918 delete this._treeOutline._clipboardNodeData; 2950 delete this._treeOutline._clipboardNodeData;
(...skipping 45 matching lines...) Expand 10 before | Expand all | Expand 10 after
2964 treeOutline.rootDOMNode = node; 2996 treeOutline.rootDOMNode = node;
2965 if (!treeOutline.children[0].hasChildren) 2997 if (!treeOutline.children[0].hasChildren)
2966 treeOutline._element.classList.add("single-node"); 2998 treeOutline._element.classList.add("single-node");
2967 treeOutline.setVisible(true); 2999 treeOutline.setVisible(true);
2968 treeOutline.element.treeElementForTest = treeOutline.children[0] ; 3000 treeOutline.element.treeElementForTest = treeOutline.children[0] ;
2969 resolve(treeOutline.element); 3001 resolve(treeOutline.element);
2970 } 3002 }
2971 } 3003 }
2972 } 3004 }
2973 } 3005 }
OLDNEW
« no previous file with comments | « Source/devtools/front_end/common/Settings.js ('k') | Source/devtools/front_end/elements/elementsTreeOutline.css » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698