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

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

Issue 1304173004: Devtools UI: Add node-specific actions into a ghost toolbar in DOM (Closed) Base URL: svn://svn.chromium.org/blink/trunk
Patch Set: Created 5 years, 3 months 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 22 matching lines...) Expand all
33 * @extends {TreeElement} 33 * @extends {TreeElement}
34 * @param {!WebInspector.DOMNode} node 34 * @param {!WebInspector.DOMNode} node
35 * @param {boolean=} elementCloseTag 35 * @param {boolean=} elementCloseTag
36 */ 36 */
37 WebInspector.ElementsTreeElement = function(node, elementCloseTag) 37 WebInspector.ElementsTreeElement = function(node, elementCloseTag)
38 { 38 {
39 // The title will be updated in onattach. 39 // The title will be updated in onattach.
40 TreeElement.call(this); 40 TreeElement.call(this);
41 this._node = node; 41 this._node = node;
42 42
43 this._decorationsElement = createElementWithClass("div", "hidden"); 43 this._gutterContainer = this.listItemElement.createChild("div", "gutter-cont ainer");
44 this.listItemElement.appendChild(this._decorationsElement); 44 this._decorationsElement = this._gutterContainer.createChild("div", "hidden" );
45 45
46 this._elementCloseTag = elementCloseTag; 46 this._elementCloseTag = elementCloseTag;
47 47
48 if (this._node.nodeType() == Node.ELEMENT_NODE && !elementCloseTag) 48 if (this._node.nodeType() == Node.ELEMENT_NODE && !elementCloseTag)
49 this._canAddAttributes = true; 49 this._canAddAttributes = true;
50 this._searchQuery = null; 50 this._searchQuery = null;
51 this._expandedChildrenLimit = WebInspector.ElementsTreeElement.InitialChildr enLimit; 51 this._expandedChildrenLimit = WebInspector.ElementsTreeElement.InitialChildr enLimit;
52 if (this._node.nodeType() === Node.ELEMENT_NODE && this._node.parentNode && this._node.parentNode.nodeType() === Node.DOCUMENT_NODE && !this._node.parentNod e.parentNode) 52 if (this._node.nodeType() === Node.ELEMENT_NODE && this._node.parentNode && this._node.parentNode.nodeType() === Node.DOCUMENT_NODE && !this._node.parentNod e.parentNode)
53 this.setCollapsible(false); 53 this.setCollapsible(false);
54 } 54 }
(...skipping 102 matching lines...) Expand 10 before | Expand all | Expand 10 after
157 157
158 /** 158 /**
159 * @return {boolean} 159 * @return {boolean}
160 */ 160 */
161 isEditing: function() 161 isEditing: function()
162 { 162 {
163 return !!this._editing; 163 return !!this._editing;
164 }, 164 },
165 165
166 /** 166 /**
167 * @return {!Element}
168 */
169 gutterElement: function()
170 {
171 return this._gutterContainer;
172 },
173
174 /**
167 * @param {string} searchQuery 175 * @param {string} searchQuery
168 */ 176 */
169 highlightSearchResults: function(searchQuery) 177 highlightSearchResults: function(searchQuery)
170 { 178 {
171 if (this._searchQuery !== searchQuery) 179 if (this._searchQuery !== searchQuery)
172 this._hideSearchHighlight(); 180 this._hideSearchHighlight();
173 181
174 this._searchQuery = searchQuery; 182 this._searchQuery = searchQuery;
175 this._searchHighlightsVisible = true; 183 this._searchHighlightsVisible = true;
176 this.updateTitle(null, true); 184 this.updateTitle(null, true);
(...skipping 588 matching lines...) Expand 10 before | Expand all | Expand 10 after
765 tagNameElement.addEventListener('keyup', keyupListener, false); 773 tagNameElement.addEventListener('keyup', keyupListener, false);
766 774
767 var config = new WebInspector.InplaceEditor.Config(editingComitted.bind( this), editingCancelled.bind(this), tagName); 775 var config = new WebInspector.InplaceEditor.Config(editingComitted.bind( this), editingCancelled.bind(this), tagName);
768 this._editing = WebInspector.InplaceEditor.startEditing(tagNameElement, config); 776 this._editing = WebInspector.InplaceEditor.startEditing(tagNameElement, config);
769 this.listItemElement.getComponentSelection().setBaseAndExtent(tagNameEle ment, 0, tagNameElement, 1); 777 this.listItemElement.getComponentSelection().setBaseAndExtent(tagNameEle ment, 0, tagNameElement, 1);
770 return true; 778 return true;
771 }, 779 },
772 780
773 /** 781 /**
774 * @param {function(string, string)} commitCallback 782 * @param {function(string, string)} commitCallback
783 * @param {function()} disposeCallback
775 * @param {?Protocol.Error} error 784 * @param {?Protocol.Error} error
776 * @param {string} initialValue 785 * @param {string} initialValue
777 */ 786 */
778 _startEditingAsHTML: function(commitCallback, error, initialValue) 787 _startEditingAsHTML: function(commitCallback, disposeCallback, error, initia lValue)
779 { 788 {
780 if (error) 789 if (error)
781 return; 790 return;
782 if (this._editing) 791 if (this._editing)
783 return; 792 return;
784 793
785 function consume(event) 794 function consume(event)
786 { 795 {
787 if (event.eventPhase === Event.AT_TARGET) 796 if (event.eventPhase === Event.AT_TARGET)
788 event.consume(true); 797 event.consume(true);
(...skipping 28 matching lines...) Expand all
817 { 826 {
818 commitCallback(initialValue, newValue); 827 commitCallback(initialValue, newValue);
819 dispose.call(this); 828 dispose.call(this);
820 } 829 }
821 830
822 /** 831 /**
823 * @this {WebInspector.ElementsTreeElement} 832 * @this {WebInspector.ElementsTreeElement}
824 */ 833 */
825 function dispose() 834 function dispose()
826 { 835 {
836 disposeCallback();
827 delete this._editing; 837 delete this._editing;
828 this.treeOutline.setMultilineEditing(null); 838 this.treeOutline.setMultilineEditing(null);
829 839
830 // Remove editor. 840 // Remove editor.
831 this.listItemElement.removeChild(this._htmlEditElement); 841 this.listItemElement.removeChild(this._htmlEditElement);
832 delete this._htmlEditElement; 842 delete this._htmlEditElement;
833 // Unhide children item. 843 // Unhide children item.
834 if (this._childrenListNode) 844 if (this._childrenListNode)
835 this._childrenListNode.style.removeProperty("display"); 845 this._childrenListNode.style.removeProperty("display");
836 // Unhide header items. 846 // Unhide header items.
(...skipping 223 matching lines...) Expand 10 before | Expand all | Expand 10 after
1060 if (!depth) 1070 if (!depth)
1061 this.childrenListElement.classList.add("shadow-root-deep"); 1071 this.childrenListElement.classList.add("shadow-root-deep");
1062 else 1072 else
1063 this.childrenListElement.classList.add("shadow-root-depth-" + depth); 1073 this.childrenListElement.classList.add("shadow-root-depth-" + depth);
1064 } 1074 }
1065 var highlightElement = createElement("span"); 1075 var highlightElement = createElement("span");
1066 highlightElement.className = "highlight"; 1076 highlightElement.className = "highlight";
1067 highlightElement.appendChild(nodeInfo); 1077 highlightElement.appendChild(nodeInfo);
1068 this.title = highlightElement; 1078 this.title = highlightElement;
1069 this.updateDecorations(); 1079 this.updateDecorations();
1070 this.listItemElement.insertBefore(this._decorationsElement, this.lis tItemElement.firstChild); 1080 this.listItemElement.insertBefore(this._gutterContainer, this.listIt emElement.firstChild);
1071 delete this._highlightResult; 1081 delete this._highlightResult;
1072 } 1082 }
1073 1083
1074 delete this.selectionElement; 1084 delete this.selectionElement;
1075 if (this.selected) 1085 if (this.selected)
1076 this.updateSelection(); 1086 this.updateSelection();
1077 this._preventFollowingLinksOnDoubleClick(); 1087 this._preventFollowingLinksOnDoubleClick();
1078 this._highlightSearchResults(); 1088 this._highlightSearchResults();
1079 }, 1089 },
1080 1090
(...skipping 32 matching lines...) Expand 10 before | Expand all | Expand 10 after
1113 * @param {!WebInspector.DOMPresentationUtils.MarkerDecorator} decorator 1123 * @param {!WebInspector.DOMPresentationUtils.MarkerDecorator} decorator
1114 */ 1124 */
1115 function collectDecoration(n, decorator) 1125 function collectDecoration(n, decorator)
1116 { 1126 {
1117 var decoration = decorator.decorate(n); 1127 var decoration = decorator.decorate(n);
1118 if (!decoration) 1128 if (!decoration)
1119 return; 1129 return;
1120 (n === node ? decorations : descendantDecorations).push(decoration); 1130 (n === node ? decorations : descendantDecorations).push(decoration);
1121 } 1131 }
1122 1132
1123 Promise.all(promises).then(setTitle.bind(this)); 1133 Promise.all(promises).then(setTitle.bind(this)).then(this._updateGutter. bind(this));
1124 1134
1125 /** 1135 /**
1126 * @this {WebInspector.ElementsTreeElement} 1136 * @this {WebInspector.ElementsTreeElement}
1127 */ 1137 */
1128 function setTitle() 1138 function setTitle()
1129 { 1139 {
1130 this._decorationsElement.removeChildren(); 1140 this._decorationsElement.removeChildren();
1131 this._decorationsElement.classList.add("hidden"); 1141 this._decorationsElement.classList.add("hidden");
1132 if (!decorations.length && !descendantDecorations.length) 1142 if (!decorations.length && !descendantDecorations.length)
1133 return; 1143 return;
(...skipping 40 matching lines...) Expand 10 before | Expand all | Expand 10 after
1174 child.style.backgroundColor = color; 1184 child.style.backgroundColor = color;
1175 child.style.borderColor = color; 1185 child.style.borderColor = color;
1176 if (offset) 1186 if (offset)
1177 child.style.marginLeft = offset + "px"; 1187 child.style.marginLeft = offset + "px";
1178 offset += 3; 1188 offset += 3;
1179 } 1189 }
1180 } 1190 }
1181 } 1191 }
1182 }, 1192 },
1183 1193
1194 _updateGutter: function()
1195 {
1196 this._gutterContainer.classList.toggle("has-decorations", this._decorati onsElement.hasChildNodes());
1197 },
1198
1184 /** 1199 /**
1185 * @param {!Node} parentElement 1200 * @param {!Node} parentElement
1186 * @param {string} name 1201 * @param {string} name
1187 * @param {string} value 1202 * @param {string} value
1188 * @param {?WebInspector.ElementsTreeOutline.UpdateRecord} updateRecord 1203 * @param {?WebInspector.ElementsTreeOutline.UpdateRecord} updateRecord
1189 * @param {boolean=} forceValue 1204 * @param {boolean=} forceValue
1190 * @param {!WebInspector.DOMNode=} node 1205 * @param {!WebInspector.DOMNode=} node
1191 */ 1206 */
1192 _buildAttributeDOM: function(parentElement, name, value, updateRecord, force Value, node) 1207 _buildAttributeDOM: function(parentElement, name, value, updateRecord, force Value, node)
1193 { 1208 {
(...skipping 332 matching lines...) Expand 10 before | Expand all | Expand 10 after
1526 /** 1541 /**
1527 * @param {string} initialValue 1542 * @param {string} initialValue
1528 * @param {string} value 1543 * @param {string} value
1529 */ 1544 */
1530 function commitChange(initialValue, value) 1545 function commitChange(initialValue, value)
1531 { 1546 {
1532 if (initialValue !== value) 1547 if (initialValue !== value)
1533 node.setOuterHTML(value, selectNode); 1548 node.setOuterHTML(value, selectNode);
1534 } 1549 }
1535 1550
1551 function disposeCallback()
1552 {
1553 if (callback)
1554 callback(false);
1555 }
1556
1536 var node = this._node; 1557 var node = this._node;
1537 node.getOuterHTML(this._startEditingAsHTML.bind(this, commitChange)); 1558 node.getOuterHTML(this._startEditingAsHTML.bind(this, commitChange, disp oseCallback));
1538 }, 1559 },
1539 1560
1540 _copyCSSPath: function() 1561 _copyCSSPath: function()
1541 { 1562 {
1542 InspectorFrontendHost.copyText(WebInspector.DOMPresentationUtils.cssPath (this._node, true)); 1563 InspectorFrontendHost.copyText(WebInspector.DOMPresentationUtils.cssPath (this._node, true));
1543 }, 1564 },
1544 1565
1545 _copyXPath: function() 1566 _copyXPath: function()
1546 { 1567 {
1547 InspectorFrontendHost.copyText(WebInspector.DOMPresentationUtils.xPath(t his._node, true)); 1568 InspectorFrontendHost.copyText(WebInspector.DOMPresentationUtils.xPath(t his._node, true));
(...skipping 38 matching lines...) Expand 10 before | Expand all | Expand 10 after
1586 1607
1587 if (object) 1608 if (object)
1588 object.callFunction(scrollIntoView); 1609 object.callFunction(scrollIntoView);
1589 } 1610 }
1590 1611
1591 this._node.resolveToObject("", scrollIntoViewCallback); 1612 this._node.resolveToObject("", scrollIntoViewCallback);
1592 }, 1613 },
1593 1614
1594 __proto__: TreeElement.prototype 1615 __proto__: TreeElement.prototype
1595 } 1616 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698