OLD | NEW |
---|---|
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 Loading... | |
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 Loading... | |
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 Loading... | |
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 Loading... | |
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 Loading... | |
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 } |
OLD | NEW |