| 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 22 matching lines...) Expand all Loading... |
| 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 Loading... |
| 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 Loading... |
| 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 Loading... |
| 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 Loading... |
| 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 Loading... |
| 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 Loading... |
| 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 Loading... |
| 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 } |
| OLD | NEW |