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 entry of modifiedAttributes.entries()) { | |
499 // FIXME: Remove this cast once Map.prototype.entries is properly su pported by the Closure compiler. | |
500 var treeElement = this.findTreeElement(/** @type {!WebInspector.DOMN ode} */ (entry[0])); | |
vsevik
2014/11/05 20:40:24
You could iterate over keys instead to workaround
apavlov
2014/11/06 10:47:03
Done.
| |
501 if (!treeElement) | |
502 continue; | |
503 var element = treeElement.listItemElement; | |
504 // FIXME: Remove this cast once Map.prototype.entries is properly su pported by the Closure compiler. | |
505 var names = /** @type {!Set.<string>} */ (entry[1]); | |
506 for (var name of names) { | |
507 var attrValue = treeElement.representedObject.getAttribute(name) ; | |
508 var xpath; | |
509 if (attrValue === undefined) { | |
510 xpath = ".//*[@class='webkit-html-tag-name']"; | |
511 } else { | |
512 var elementClassName = !!attrValue ? "webkit-html-attribute- value" : "webkit-html-attribute-name"; | |
513 xpath = ".//*[@class='webkit-html-tag']//*[@class='webkit-ht ml-attribute'][.//*[@class='webkit-html-attribute-name'][text()='" + name + "']] /*[@class='" + elementClassName + "']"; | |
vsevik
2014/11/05 20:40:24
Maybe store attribute elements on the treeElement
apavlov
2014/11/06 10:47:03
Discussed this approach offline
| |
514 } | |
515 element = element.ownerDocument.evaluate(xpath, element, null, X PathResult.ANY_UNORDERED_NODE_TYPE, null).singleNodeValue; | |
516 if (element) | |
517 WebInspector.runCSSAnimationOnce(element, "dom-update-highli ght"); | |
518 } | |
519 } | |
497 }, | 520 }, |
498 | 521 |
499 /** | 522 /** |
500 * @param {!WebInspector.DOMNode} node | 523 * @param {!WebInspector.DOMNode} node |
501 * @return {?TreeElement} | 524 * @return {?TreeElement} |
502 */ | 525 */ |
503 findTreeElement: function(node) | 526 findTreeElement: function(node) |
504 { | 527 { |
505 function parentNode(node) | 528 function parentNode(node) |
506 { | 529 { |
(...skipping 2233 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
2740 domModel.addEventListener(WebInspector.DOMModel.Events.CharacterDataModified , this._characterDataModified, this); | 2763 domModel.addEventListener(WebInspector.DOMModel.Events.CharacterDataModified , this._characterDataModified, this); |
2741 domModel.addEventListener(WebInspector.DOMModel.Events.DocumentUpdated, this ._documentUpdated, this); | 2764 domModel.addEventListener(WebInspector.DOMModel.Events.DocumentUpdated, this ._documentUpdated, this); |
2742 domModel.addEventListener(WebInspector.DOMModel.Events.ChildNodeCountUpdated , this._childNodeCountUpdated, this); | 2765 domModel.addEventListener(WebInspector.DOMModel.Events.ChildNodeCountUpdated , this._childNodeCountUpdated, this); |
2743 | 2766 |
2744 this._domModel = domModel; | 2767 this._domModel = domModel; |
2745 this._treeOutline = treeOutline; | 2768 this._treeOutline = treeOutline; |
2746 /** @type {!Set.<!WebInspector.DOMNode>} */ | 2769 /** @type {!Set.<!WebInspector.DOMNode>} */ |
2747 this._recentlyModifiedNodes = new Set(); | 2770 this._recentlyModifiedNodes = new Set(); |
2748 /** @type {!Set.<!WebInspector.DOMNode>} */ | 2771 /** @type {!Set.<!WebInspector.DOMNode>} */ |
2749 this._recentlyModifiedParentNodes = new Set(); | 2772 this._recentlyModifiedParentNodes = new Set(); |
2773 /** @type {!Map.<!WebInspector.DOMNode, !Set.<string>>} */ | |
2774 this._recentlyModifiedAttributes = new Map(); | |
2750 } | 2775 } |
2751 | 2776 |
2777 /** | |
2778 * @typedef {{node: !WebInspector.DOMNode, name: string}} | |
2779 */ | |
2780 WebInspector.ElementsTreeUpdater.AttributeUpdateEntry; | |
vsevik
2014/11/05 20:40:24
unused?
apavlov
2014/11/06 10:47:03
Done.
| |
2781 | |
2752 WebInspector.ElementsTreeUpdater.prototype = { | 2782 WebInspector.ElementsTreeUpdater.prototype = { |
2753 dispose: function() | 2783 dispose: function() |
2754 { | 2784 { |
2755 this._domModel.removeEventListener(WebInspector.DOMModel.Events.NodeInse rted, this._nodeInserted, this); | 2785 this._domModel.removeEventListener(WebInspector.DOMModel.Events.NodeInse rted, this._nodeInserted, this); |
2756 this._domModel.removeEventListener(WebInspector.DOMModel.Events.NodeRemo ved, this._nodeRemoved, this); | 2786 this._domModel.removeEventListener(WebInspector.DOMModel.Events.NodeRemo ved, this._nodeRemoved, this); |
2757 this._domModel.removeEventListener(WebInspector.DOMModel.Events.AttrModi fied, this._attributesUpdated, this); | 2787 this._domModel.removeEventListener(WebInspector.DOMModel.Events.AttrModi fied, this._attributesUpdated, this); |
2758 this._domModel.removeEventListener(WebInspector.DOMModel.Events.AttrRemo ved, this._attributesUpdated, this); | 2788 this._domModel.removeEventListener(WebInspector.DOMModel.Events.AttrRemo ved, this._attributesUpdated, this); |
2759 this._domModel.removeEventListener(WebInspector.DOMModel.Events.Characte rDataModified, this._characterDataModified, this); | 2789 this._domModel.removeEventListener(WebInspector.DOMModel.Events.Characte rDataModified, this._characterDataModified, this); |
2760 this._domModel.removeEventListener(WebInspector.DOMModel.Events.Document Updated, this._documentUpdated, this); | 2790 this._domModel.removeEventListener(WebInspector.DOMModel.Events.Document Updated, this._documentUpdated, this); |
2761 this._domModel.removeEventListener(WebInspector.DOMModel.Events.ChildNod eCountUpdated, this._childNodeCountUpdated, this); | 2791 this._domModel.removeEventListener(WebInspector.DOMModel.Events.ChildNod eCountUpdated, this._childNodeCountUpdated, this); |
(...skipping 46 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
2808 this._treeOutline.rootDOMNode = inspectedRootDocument; | 2838 this._treeOutline.rootDOMNode = inspectedRootDocument; |
2809 }, | 2839 }, |
2810 | 2840 |
2811 /** | 2841 /** |
2812 * @param {!WebInspector.Event} event | 2842 * @param {!WebInspector.Event} event |
2813 */ | 2843 */ |
2814 _attributesUpdated: function(event) | 2844 _attributesUpdated: function(event) |
2815 { | 2845 { |
2816 var node = /** @type {!WebInspector.DOMNode} */ (event.data.node); | 2846 var node = /** @type {!WebInspector.DOMNode} */ (event.data.node); |
2817 this._nodeModified(node); | 2847 this._nodeModified(node); |
2848 var names = this._recentlyModifiedAttributes.get(node); | |
2849 if (!names) { | |
2850 names = new Set(); | |
2851 this._recentlyModifiedAttributes.set(node, names); | |
2852 } | |
2853 names.add(/** @type {string} */ (event.data.name)); | |
2818 }, | 2854 }, |
2819 | 2855 |
2820 /** | 2856 /** |
2821 * @param {!WebInspector.Event} event | 2857 * @param {!WebInspector.Event} event |
2822 */ | 2858 */ |
2823 _characterDataModified: function(event) | 2859 _characterDataModified: function(event) |
2824 { | 2860 { |
2825 var node = /** @type {!WebInspector.DOMNode} */ (event.data); | 2861 var node = /** @type {!WebInspector.DOMNode} */ (event.data); |
2826 this._parentNodeModified(node.parentNode); | 2862 this._parentNodeModified(node.parentNode); |
2827 this._nodeModified(node); | 2863 this._nodeModified(node); |
(...skipping 70 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
2898 } | 2934 } |
2899 | 2935 |
2900 if (hidePanelWhileUpdating) { | 2936 if (hidePanelWhileUpdating) { |
2901 this._treeOutline._element.classList.remove("hidden"); | 2937 this._treeOutline._element.classList.remove("hidden"); |
2902 if (originalScrollTop) | 2938 if (originalScrollTop) |
2903 treeOutlineContainerElement.scrollTop = originalScrollTop; | 2939 treeOutlineContainerElement.scrollTop = originalScrollTop; |
2904 this._treeOutline.updateSelection(); | 2940 this._treeOutline.updateSelection(); |
2905 } | 2941 } |
2906 this._recentlyModifiedNodes.clear(); | 2942 this._recentlyModifiedNodes.clear(); |
2907 this._recentlyModifiedParentNodes.clear(); | 2943 this._recentlyModifiedParentNodes.clear(); |
2908 this._treeOutline._fireElementsTreeUpdated(updatedNodes); | 2944 this._treeOutline._fireElementsTreeUpdated(updatedNodes, this._recentlyM odifiedAttributes); |
2945 this._recentlyModifiedAttributes.clear(); | |
2909 }, | 2946 }, |
2910 | 2947 |
2911 _reset: function() | 2948 _reset: function() |
2912 { | 2949 { |
2913 this._treeOutline.rootDOMNode = null; | 2950 this._treeOutline.rootDOMNode = null; |
2914 this._treeOutline.selectDOMNode(null, false); | 2951 this._treeOutline.selectDOMNode(null, false); |
2915 this._domModel.hideDOMNodeHighlight(); | 2952 this._domModel.hideDOMNodeHighlight(); |
2916 this._recentlyModifiedNodes.clear(); | 2953 this._recentlyModifiedNodes.clear(); |
2917 this._recentlyModifiedParentNodes.clear(); | 2954 this._recentlyModifiedParentNodes.clear(); |
2918 delete this._treeOutline._clipboardNodeData; | 2955 delete this._treeOutline._clipboardNodeData; |
(...skipping 45 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
2964 treeOutline.rootDOMNode = node; | 3001 treeOutline.rootDOMNode = node; |
2965 if (!treeOutline.children[0].hasChildren) | 3002 if (!treeOutline.children[0].hasChildren) |
2966 treeOutline._element.classList.add("single-node"); | 3003 treeOutline._element.classList.add("single-node"); |
2967 treeOutline.setVisible(true); | 3004 treeOutline.setVisible(true); |
2968 treeOutline.element.treeElementForTest = treeOutline.children[0] ; | 3005 treeOutline.element.treeElementForTest = treeOutline.children[0] ; |
2969 resolve(treeOutline.element); | 3006 resolve(treeOutline.element); |
2970 } | 3007 } |
2971 } | 3008 } |
2972 } | 3009 } |
2973 } | 3010 } |
OLD | NEW |