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 |