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

Side by Side Diff: third_party/WebKit/Source/devtools/front_end/elements/ElementsTreeOutline.js

Issue 2493373002: DevTools: rename WebInspector into modules. (Closed)
Patch Set: for bots Created 4 years, 1 month 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
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 13 matching lines...) Expand all
24 * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; 24 * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
25 * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND 25 * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
26 * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 26 * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
27 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF 27 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
28 * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 28 * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
29 */ 29 */
30 30
31 /** 31 /**
32 * @unrestricted 32 * @unrestricted
33 */ 33 */
34 WebInspector.ElementsTreeOutline = class extends TreeOutline { 34 Elements.ElementsTreeOutline = class extends TreeOutline {
35 /** 35 /**
36 * @param {!WebInspector.DOMModel} domModel 36 * @param {!SDK.DOMModel} domModel
37 * @param {boolean=} omitRootDOMNode 37 * @param {boolean=} omitRootDOMNode
38 * @param {boolean=} selectEnabled 38 * @param {boolean=} selectEnabled
39 */ 39 */
40 constructor(domModel, omitRootDOMNode, selectEnabled) { 40 constructor(domModel, omitRootDOMNode, selectEnabled) {
41 super(); 41 super();
42 42
43 this._domModel = domModel; 43 this._domModel = domModel;
44 this._treeElementSymbol = Symbol('treeElement'); 44 this._treeElementSymbol = Symbol('treeElement');
45 var shadowContainer = createElement('div'); 45 var shadowContainer = createElement('div');
46 this._shadowRoot = WebInspector.createShadowRootWithCoreStyles(shadowContain er, 'elements/elementsTreeOutline.css'); 46 this._shadowRoot = UI.createShadowRootWithCoreStyles(shadowContainer, 'eleme nts/elementsTreeOutline.css');
47 var outlineDisclosureElement = this._shadowRoot.createChild('div', 'elements -disclosure'); 47 var outlineDisclosureElement = this._shadowRoot.createChild('div', 'elements -disclosure');
48 48
49 this._element = this.element; 49 this._element = this.element;
50 this._element.classList.add('elements-tree-outline', 'source-code'); 50 this._element.classList.add('elements-tree-outline', 'source-code');
51 this._element.addEventListener('mousedown', this._onmousedown.bind(this), fa lse); 51 this._element.addEventListener('mousedown', this._onmousedown.bind(this), fa lse);
52 this._element.addEventListener('mousemove', this._onmousemove.bind(this), fa lse); 52 this._element.addEventListener('mousemove', this._onmousemove.bind(this), fa lse);
53 this._element.addEventListener('mouseleave', this._onmouseleave.bind(this), false); 53 this._element.addEventListener('mouseleave', this._onmouseleave.bind(this), false);
54 this._element.addEventListener('dragstart', this._ondragstart.bind(this), fa lse); 54 this._element.addEventListener('dragstart', this._ondragstart.bind(this), fa lse);
55 this._element.addEventListener('dragover', this._ondragover.bind(this), fals e); 55 this._element.addEventListener('dragover', this._ondragover.bind(this), fals e);
56 this._element.addEventListener('dragleave', this._ondragleave.bind(this), fa lse); 56 this._element.addEventListener('dragleave', this._ondragleave.bind(this), fa lse);
57 this._element.addEventListener('drop', this._ondrop.bind(this), false); 57 this._element.addEventListener('drop', this._ondrop.bind(this), false);
58 this._element.addEventListener('dragend', this._ondragend.bind(this), false) ; 58 this._element.addEventListener('dragend', this._ondragend.bind(this), false) ;
59 this._element.addEventListener('contextmenu', this._contextMenuEventFired.bi nd(this), false); 59 this._element.addEventListener('contextmenu', this._contextMenuEventFired.bi nd(this), false);
60 this._element.addEventListener('clipboard-beforecopy', this._onBeforeCopy.bi nd(this), false); 60 this._element.addEventListener('clipboard-beforecopy', this._onBeforeCopy.bi nd(this), false);
61 this._element.addEventListener('clipboard-copy', this._onCopyOrCut.bind(this , false), false); 61 this._element.addEventListener('clipboard-copy', this._onCopyOrCut.bind(this , false), false);
62 this._element.addEventListener('clipboard-cut', this._onCopyOrCut.bind(this, true), false); 62 this._element.addEventListener('clipboard-cut', this._onCopyOrCut.bind(this, true), false);
63 this._element.addEventListener('clipboard-paste', this._onPaste.bind(this), false); 63 this._element.addEventListener('clipboard-paste', this._onPaste.bind(this), false);
64 64
65 outlineDisclosureElement.appendChild(this._element); 65 outlineDisclosureElement.appendChild(this._element);
66 this.element = shadowContainer; 66 this.element = shadowContainer;
67 67
68 this._includeRootDOMNode = !omitRootDOMNode; 68 this._includeRootDOMNode = !omitRootDOMNode;
69 this._selectEnabled = selectEnabled; 69 this._selectEnabled = selectEnabled;
70 /** @type {?WebInspector.DOMNode} */ 70 /** @type {?SDK.DOMNode} */
71 this._rootDOMNode = null; 71 this._rootDOMNode = null;
72 /** @type {?WebInspector.DOMNode} */ 72 /** @type {?SDK.DOMNode} */
73 this._selectedDOMNode = null; 73 this._selectedDOMNode = null;
74 74
75 this._visible = false; 75 this._visible = false;
76 76
77 this._popoverHelper = new WebInspector.PopoverHelper(this._element); 77 this._popoverHelper = new UI.PopoverHelper(this._element);
78 this._popoverHelper.initializeCallbacks(this._getPopoverAnchor.bind(this), t his._showPopover.bind(this)); 78 this._popoverHelper.initializeCallbacks(this._getPopoverAnchor.bind(this), t his._showPopover.bind(this));
79 this._popoverHelper.setTimeout(0, 100); 79 this._popoverHelper.setTimeout(0, 100);
80 80
81 /** @type {!Map<!WebInspector.DOMNode, !WebInspector.ElementsTreeOutline.Upd ateRecord>} */ 81 /** @type {!Map<!SDK.DOMNode, !Elements.ElementsTreeOutline.UpdateRecord>} * /
82 this._updateRecords = new Map(); 82 this._updateRecords = new Map();
83 /** @type {!Set<!WebInspector.ElementsTreeElement>} */ 83 /** @type {!Set<!Elements.ElementsTreeElement>} */
84 this._treeElementsBeingUpdated = new Set(); 84 this._treeElementsBeingUpdated = new Set();
85 85
86 this._domModel.addEventListener(WebInspector.DOMModel.Events.MarkersChanged, this._markersChanged, this); 86 this._domModel.addEventListener(SDK.DOMModel.Events.MarkersChanged, this._ma rkersChanged, this);
87 this._showHTMLCommentsSetting = WebInspector.moduleSetting('showHTMLComments '); 87 this._showHTMLCommentsSetting = Common.moduleSetting('showHTMLComments');
88 this._showHTMLCommentsSetting.addChangeListener(this._onShowHTMLCommentsChan ge.bind(this)); 88 this._showHTMLCommentsSetting.addChangeListener(this._onShowHTMLCommentsChan ge.bind(this));
89 } 89 }
90 90
91 /** 91 /**
92 * @param {!WebInspector.DOMModel} domModel 92 * @param {!SDK.DOMModel} domModel
93 * @return {?WebInspector.ElementsTreeOutline} 93 * @return {?Elements.ElementsTreeOutline}
94 */ 94 */
95 static forDOMModel(domModel) { 95 static forDOMModel(domModel) {
96 return domModel[WebInspector.ElementsTreeOutline._treeOutlineSymbol] || null ; 96 return domModel[Elements.ElementsTreeOutline._treeOutlineSymbol] || null;
97 } 97 }
98 98
99 _onShowHTMLCommentsChange() { 99 _onShowHTMLCommentsChange() {
100 var selectedNode = this.selectedDOMNode(); 100 var selectedNode = this.selectedDOMNode();
101 if (selectedNode && selectedNode.nodeType() === Node.COMMENT_NODE && !this._ showHTMLCommentsSetting.get()) 101 if (selectedNode && selectedNode.nodeType() === Node.COMMENT_NODE && !this._ showHTMLCommentsSetting.get())
102 this.selectDOMNode(selectedNode.parentNode); 102 this.selectDOMNode(selectedNode.parentNode);
103 this.update(); 103 this.update();
104 } 104 }
105 105
106 /** 106 /**
(...skipping 11 matching lines...) Expand all
118 } 118 }
119 119
120 /** 120 /**
121 * @param {boolean} wrap 121 * @param {boolean} wrap
122 */ 122 */
123 setWordWrap(wrap) { 123 setWordWrap(wrap) {
124 this._element.classList.toggle('elements-tree-nowrap', !wrap); 124 this._element.classList.toggle('elements-tree-nowrap', !wrap);
125 } 125 }
126 126
127 /** 127 /**
128 * @return {!WebInspector.DOMModel} 128 * @return {!SDK.DOMModel}
129 */ 129 */
130 domModel() { 130 domModel() {
131 return this._domModel; 131 return this._domModel;
132 } 132 }
133 133
134 /** 134 /**
135 * @param {?WebInspector.InplaceEditor.Controller} multilineEditing 135 * @param {?UI.InplaceEditor.Controller} multilineEditing
136 */ 136 */
137 setMultilineEditing(multilineEditing) { 137 setMultilineEditing(multilineEditing) {
138 this._multilineEditing = multilineEditing; 138 this._multilineEditing = multilineEditing;
139 } 139 }
140 140
141 /** 141 /**
142 * @return {number} 142 * @return {number}
143 */ 143 */
144 visibleWidth() { 144 visibleWidth() {
145 return this._visibleWidth; 145 return this._visibleWidth;
146 } 146 }
147 147
148 /** 148 /**
149 * @param {number} width 149 * @param {number} width
150 */ 150 */
151 setVisibleWidth(width) { 151 setVisibleWidth(width) {
152 this._visibleWidth = width; 152 this._visibleWidth = width;
153 if (this._multilineEditing) 153 if (this._multilineEditing)
154 this._multilineEditing.setWidth(this._visibleWidth); 154 this._multilineEditing.setWidth(this._visibleWidth);
155 } 155 }
156 156
157 /** 157 /**
158 * @param {?WebInspector.ElementsTreeOutline.ClipboardData} data 158 * @param {?Elements.ElementsTreeOutline.ClipboardData} data
159 */ 159 */
160 _setClipboardData(data) { 160 _setClipboardData(data) {
161 if (this._clipboardNodeData) { 161 if (this._clipboardNodeData) {
162 var treeElement = this.findTreeElement(this._clipboardNodeData.node); 162 var treeElement = this.findTreeElement(this._clipboardNodeData.node);
163 if (treeElement) 163 if (treeElement)
164 treeElement.setInClipboard(false); 164 treeElement.setInClipboard(false);
165 delete this._clipboardNodeData; 165 delete this._clipboardNodeData;
166 } 166 }
167 167
168 if (data) { 168 if (data) {
169 var treeElement = this.findTreeElement(data.node); 169 var treeElement = this.findTreeElement(data.node);
170 if (treeElement) 170 if (treeElement)
171 treeElement.setInClipboard(true); 171 treeElement.setInClipboard(true);
172 this._clipboardNodeData = data; 172 this._clipboardNodeData = data;
173 } 173 }
174 } 174 }
175 175
176 /** 176 /**
177 * @param {!WebInspector.DOMNode} removedNode 177 * @param {!SDK.DOMNode} removedNode
178 */ 178 */
179 resetClipboardIfNeeded(removedNode) { 179 resetClipboardIfNeeded(removedNode) {
180 if (this._clipboardNodeData && this._clipboardNodeData.node === removedNode) 180 if (this._clipboardNodeData && this._clipboardNodeData.node === removedNode)
181 this._setClipboardData(null); 181 this._setClipboardData(null);
182 } 182 }
183 183
184 /** 184 /**
185 * @param {!Event} event 185 * @param {!Event} event
186 */ 186 */
187 _onBeforeCopy(event) { 187 _onBeforeCopy(event) {
188 event.handled = true; 188 event.handled = true;
189 } 189 }
190 190
191 /** 191 /**
192 * @param {boolean} isCut 192 * @param {boolean} isCut
193 * @param {!Event} event 193 * @param {!Event} event
194 */ 194 */
195 _onCopyOrCut(isCut, event) { 195 _onCopyOrCut(isCut, event) {
196 this._setClipboardData(null); 196 this._setClipboardData(null);
197 var originalEvent = event['original']; 197 var originalEvent = event['original'];
198 198
199 // Don't prevent the normal copy if the user has a selection. 199 // Don't prevent the normal copy if the user has a selection.
200 if (!originalEvent.target.isComponentSelectionCollapsed()) 200 if (!originalEvent.target.isComponentSelectionCollapsed())
201 return; 201 return;
202 202
203 // Do not interfere with text editing. 203 // Do not interfere with text editing.
204 if (WebInspector.isEditing()) 204 if (UI.isEditing())
205 return; 205 return;
206 206
207 var targetNode = this.selectedDOMNode(); 207 var targetNode = this.selectedDOMNode();
208 if (!targetNode) 208 if (!targetNode)
209 return; 209 return;
210 210
211 originalEvent.clipboardData.clearData(); 211 originalEvent.clipboardData.clearData();
212 event.handled = true; 212 event.handled = true;
213 213
214 this.performCopyOrCut(isCut, targetNode); 214 this.performCopyOrCut(isCut, targetNode);
215 } 215 }
216 216
217 /** 217 /**
218 * @param {boolean} isCut 218 * @param {boolean} isCut
219 * @param {?WebInspector.DOMNode} node 219 * @param {?SDK.DOMNode} node
220 */ 220 */
221 performCopyOrCut(isCut, node) { 221 performCopyOrCut(isCut, node) {
222 if (isCut && (node.isShadowRoot() || node.ancestorUserAgentShadowRoot())) 222 if (isCut && (node.isShadowRoot() || node.ancestorUserAgentShadowRoot()))
223 return; 223 return;
224 224
225 node.copyNode(); 225 node.copyNode();
226 this._setClipboardData({node: node, isCut: isCut}); 226 this._setClipboardData({node: node, isCut: isCut});
227 } 227 }
228 228
229 /** 229 /**
230 * @param {!WebInspector.DOMNode} targetNode 230 * @param {!SDK.DOMNode} targetNode
231 * @return {boolean} 231 * @return {boolean}
232 */ 232 */
233 canPaste(targetNode) { 233 canPaste(targetNode) {
234 if (targetNode.isShadowRoot() || targetNode.ancestorUserAgentShadowRoot()) 234 if (targetNode.isShadowRoot() || targetNode.ancestorUserAgentShadowRoot())
235 return false; 235 return false;
236 236
237 if (!this._clipboardNodeData) 237 if (!this._clipboardNodeData)
238 return false; 238 return false;
239 239
240 var node = this._clipboardNodeData.node; 240 var node = this._clipboardNodeData.node;
241 if (this._clipboardNodeData.isCut && (node === targetNode || node.isAncestor (targetNode))) 241 if (this._clipboardNodeData.isCut && (node === targetNode || node.isAncestor (targetNode)))
242 return false; 242 return false;
243 243
244 if (targetNode.target() !== node.target()) 244 if (targetNode.target() !== node.target())
245 return false; 245 return false;
246 return true; 246 return true;
247 } 247 }
248 248
249 /** 249 /**
250 * @param {!WebInspector.DOMNode} targetNode 250 * @param {!SDK.DOMNode} targetNode
251 */ 251 */
252 pasteNode(targetNode) { 252 pasteNode(targetNode) {
253 if (this.canPaste(targetNode)) 253 if (this.canPaste(targetNode))
254 this._performPaste(targetNode); 254 this._performPaste(targetNode);
255 } 255 }
256 256
257 /** 257 /**
258 * @param {!Event} event 258 * @param {!Event} event
259 */ 259 */
260 _onPaste(event) { 260 _onPaste(event) {
261 // Do not interfere with text editing. 261 // Do not interfere with text editing.
262 if (WebInspector.isEditing()) 262 if (UI.isEditing())
263 return; 263 return;
264 264
265 var targetNode = this.selectedDOMNode(); 265 var targetNode = this.selectedDOMNode();
266 if (!targetNode || !this.canPaste(targetNode)) 266 if (!targetNode || !this.canPaste(targetNode))
267 return; 267 return;
268 268
269 event.handled = true; 269 event.handled = true;
270 this._performPaste(targetNode); 270 this._performPaste(targetNode);
271 } 271 }
272 272
273 /** 273 /**
274 * @param {!WebInspector.DOMNode} targetNode 274 * @param {!SDK.DOMNode} targetNode
275 */ 275 */
276 _performPaste(targetNode) { 276 _performPaste(targetNode) {
277 if (this._clipboardNodeData.isCut) { 277 if (this._clipboardNodeData.isCut) {
278 this._clipboardNodeData.node.moveTo(targetNode, null, expandCallback.bind( this)); 278 this._clipboardNodeData.node.moveTo(targetNode, null, expandCallback.bind( this));
279 this._setClipboardData(null); 279 this._setClipboardData(null);
280 } else { 280 } else {
281 this._clipboardNodeData.node.copyTo(targetNode, null, expandCallback.bind( this)); 281 this._clipboardNodeData.node.copyTo(targetNode, null, expandCallback.bind( this));
282 } 282 }
283 283
284 /** 284 /**
285 * @param {?Protocol.Error} error 285 * @param {?Protocol.Error} error
286 * @param {!Protocol.DOM.NodeId} nodeId 286 * @param {!Protocol.DOM.NodeId} nodeId
287 * @this {WebInspector.ElementsTreeOutline} 287 * @this {Elements.ElementsTreeOutline}
288 */ 288 */
289 function expandCallback(error, nodeId) { 289 function expandCallback(error, nodeId) {
290 if (error) 290 if (error)
291 return; 291 return;
292 var pastedNode = this._domModel.nodeForId(nodeId); 292 var pastedNode = this._domModel.nodeForId(nodeId);
293 if (!pastedNode) 293 if (!pastedNode)
294 return; 294 return;
295 this.selectDOMNode(pastedNode); 295 this.selectDOMNode(pastedNode);
296 } 296 }
297 } 297 }
(...skipping 28 matching lines...) Expand all
326 this._isXMLMimeType = x && x.isXMLNode(); 326 this._isXMLMimeType = x && x.isXMLNode();
327 327
328 this.update(); 328 this.update();
329 } 329 }
330 330
331 get isXMLMimeType() { 331 get isXMLMimeType() {
332 return this._isXMLMimeType; 332 return this._isXMLMimeType;
333 } 333 }
334 334
335 /** 335 /**
336 * @return {?WebInspector.DOMNode} 336 * @return {?SDK.DOMNode}
337 */ 337 */
338 selectedDOMNode() { 338 selectedDOMNode() {
339 return this._selectedDOMNode; 339 return this._selectedDOMNode;
340 } 340 }
341 341
342 /** 342 /**
343 * @param {?WebInspector.DOMNode} node 343 * @param {?SDK.DOMNode} node
344 * @param {boolean=} focus 344 * @param {boolean=} focus
345 */ 345 */
346 selectDOMNode(node, focus) { 346 selectDOMNode(node, focus) {
347 if (this._selectedDOMNode === node) { 347 if (this._selectedDOMNode === node) {
348 this._revealAndSelectNode(node, !focus); 348 this._revealAndSelectNode(node, !focus);
349 return; 349 return;
350 } 350 }
351 351
352 this._selectedDOMNode = node; 352 this._selectedDOMNode = node;
353 this._revealAndSelectNode(node, !focus); 353 this._revealAndSelectNode(node, !focus);
(...skipping 39 matching lines...) Expand 10 before | Expand all | Expand 10 after
393 393
394 if (selectedNode) 394 if (selectedNode)
395 this._revealAndSelectNode(selectedNode, true); 395 this._revealAndSelectNode(selectedNode, true);
396 } 396 }
397 397
398 /** 398 /**
399 * @param {boolean} focus 399 * @param {boolean} focus
400 */ 400 */
401 _selectedNodeChanged(focus) { 401 _selectedNodeChanged(focus) {
402 this.dispatchEventToListeners( 402 this.dispatchEventToListeners(
403 WebInspector.ElementsTreeOutline.Events.SelectedNodeChanged, {node: this ._selectedDOMNode, focus: focus}); 403 Elements.ElementsTreeOutline.Events.SelectedNodeChanged, {node: this._se lectedDOMNode, focus: focus});
404 } 404 }
405 405
406 /** 406 /**
407 * @param {!Array.<!WebInspector.DOMNode>} nodes 407 * @param {!Array.<!SDK.DOMNode>} nodes
408 */ 408 */
409 _fireElementsTreeUpdated(nodes) { 409 _fireElementsTreeUpdated(nodes) {
410 this.dispatchEventToListeners(WebInspector.ElementsTreeOutline.Events.Elemen tsTreeUpdated, nodes); 410 this.dispatchEventToListeners(Elements.ElementsTreeOutline.Events.ElementsTr eeUpdated, nodes);
411 } 411 }
412 412
413 /** 413 /**
414 * @param {!WebInspector.DOMNode} node 414 * @param {!SDK.DOMNode} node
415 * @return {?WebInspector.ElementsTreeElement} 415 * @return {?Elements.ElementsTreeElement}
416 */ 416 */
417 findTreeElement(node) { 417 findTreeElement(node) {
418 var treeElement = this._lookUpTreeElement(node); 418 var treeElement = this._lookUpTreeElement(node);
419 if (!treeElement && node.nodeType() === Node.TEXT_NODE) { 419 if (!treeElement && node.nodeType() === Node.TEXT_NODE) {
420 // The text node might have been inlined if it was short, so try to find t he parent element. 420 // The text node might have been inlined if it was short, so try to find t he parent element.
421 treeElement = this._lookUpTreeElement(node.parentNode); 421 treeElement = this._lookUpTreeElement(node.parentNode);
422 } 422 }
423 423
424 return /** @type {?WebInspector.ElementsTreeElement} */ (treeElement); 424 return /** @type {?Elements.ElementsTreeElement} */ (treeElement);
425 } 425 }
426 426
427 /** 427 /**
428 * @param {?WebInspector.DOMNode} node 428 * @param {?SDK.DOMNode} node
429 * @return {?TreeElement} 429 * @return {?TreeElement}
430 */ 430 */
431 _lookUpTreeElement(node) { 431 _lookUpTreeElement(node) {
432 if (!node) 432 if (!node)
433 return null; 433 return null;
434 434
435 var cachedElement = node[this._treeElementSymbol]; 435 var cachedElement = node[this._treeElementSymbol];
436 if (cachedElement) 436 if (cachedElement)
437 return cachedElement; 437 return cachedElement;
438 438
(...skipping 12 matching lines...) Expand all
451 for (var i = ancestors.length - 1; i >= 0; --i) { 451 for (var i = ancestors.length - 1; i >= 0; --i) {
452 var treeElement = ancestors[i][this._treeElementSymbol]; 452 var treeElement = ancestors[i][this._treeElementSymbol];
453 if (treeElement) 453 if (treeElement)
454 treeElement.onpopulate(); // fill the cache with the children of treeEl ement 454 treeElement.onpopulate(); // fill the cache with the children of treeEl ement
455 } 455 }
456 456
457 return node[this._treeElementSymbol]; 457 return node[this._treeElementSymbol];
458 } 458 }
459 459
460 /** 460 /**
461 * @param {!WebInspector.DOMNode} node 461 * @param {!SDK.DOMNode} node
462 * @return {?WebInspector.ElementsTreeElement} 462 * @return {?Elements.ElementsTreeElement}
463 */ 463 */
464 createTreeElementFor(node) { 464 createTreeElementFor(node) {
465 var treeElement = this.findTreeElement(node); 465 var treeElement = this.findTreeElement(node);
466 if (treeElement) 466 if (treeElement)
467 return treeElement; 467 return treeElement;
468 if (!node.parentNode) 468 if (!node.parentNode)
469 return null; 469 return null;
470 470
471 treeElement = this.createTreeElementFor(node.parentNode); 471 treeElement = this.createTreeElementFor(node.parentNode);
472 return treeElement ? this._showChild(treeElement, node) : null; 472 return treeElement ? this._showChild(treeElement, node) : null;
473 } 473 }
474 474
475 set suppressRevealAndSelect(x) { 475 set suppressRevealAndSelect(x) {
476 if (this._suppressRevealAndSelect === x) 476 if (this._suppressRevealAndSelect === x)
477 return; 477 return;
478 this._suppressRevealAndSelect = x; 478 this._suppressRevealAndSelect = x;
479 } 479 }
480 480
481 /** 481 /**
482 * @param {?WebInspector.DOMNode} node 482 * @param {?SDK.DOMNode} node
483 * @param {boolean} omitFocus 483 * @param {boolean} omitFocus
484 */ 484 */
485 _revealAndSelectNode(node, omitFocus) { 485 _revealAndSelectNode(node, omitFocus) {
486 if (this._suppressRevealAndSelect) 486 if (this._suppressRevealAndSelect)
487 return; 487 return;
488 488
489 if (!this._includeRootDOMNode && node === this.rootDOMNode && this.rootDOMNo de) 489 if (!this._includeRootDOMNode && node === this.rootDOMNode && this.rootDOMNo de)
490 node = this.rootDOMNode.firstChild; 490 node = this.rootDOMNode.firstChild;
491 if (!node) 491 if (!node)
492 return; 492 return;
(...skipping 39 matching lines...) Expand 10 before | Expand all | Expand 10 after
532 */ 532 */
533 _getPopoverAnchor(element, event) { 533 _getPopoverAnchor(element, event) {
534 var anchor = element.enclosingNodeOrSelfWithClass('webkit-html-resource-link '); 534 var anchor = element.enclosingNodeOrSelfWithClass('webkit-html-resource-link ');
535 if (!anchor || !anchor.href) 535 if (!anchor || !anchor.href)
536 return; 536 return;
537 537
538 return anchor; 538 return anchor;
539 } 539 }
540 540
541 /** 541 /**
542 * @param {!WebInspector.DOMNode} node 542 * @param {!SDK.DOMNode} node
543 * @param {function()} callback 543 * @param {function()} callback
544 */ 544 */
545 _loadDimensionsForNode(node, callback) { 545 _loadDimensionsForNode(node, callback) {
546 if (!node.nodeName() || node.nodeName().toLowerCase() !== 'img') { 546 if (!node.nodeName() || node.nodeName().toLowerCase() !== 'img') {
547 callback(); 547 callback();
548 return; 548 return;
549 } 549 }
550 550
551 node.resolveToObject('', resolvedNode); 551 node.resolveToObject('', resolvedNode);
552 552
(...skipping 18 matching lines...) Expand all
571 naturalWidth: this.naturalWidth, 571 naturalWidth: this.naturalWidth,
572 naturalHeight: this.naturalHeight, 572 naturalHeight: this.naturalHeight,
573 currentSrc: this.currentSrc 573 currentSrc: this.currentSrc
574 }; 574 };
575 } 575 }
576 } 576 }
577 } 577 }
578 578
579 /** 579 /**
580 * @param {!Element} anchor 580 * @param {!Element} anchor
581 * @param {!WebInspector.Popover} popover 581 * @param {!UI.Popover} popover
582 */ 582 */
583 _showPopover(anchor, popover) { 583 _showPopover(anchor, popover) {
584 var listItem = anchor.enclosingNodeOrSelfWithNodeName('li'); 584 var listItem = anchor.enclosingNodeOrSelfWithNodeName('li');
585 var node = /** @type {!WebInspector.ElementsTreeElement} */ (listItem.treeEl ement).node(); 585 var node = /** @type {!Elements.ElementsTreeElement} */ (listItem.treeElemen t).node();
586 this._loadDimensionsForNode( 586 this._loadDimensionsForNode(
587 node, WebInspector.DOMPresentationUtils.buildImagePreviewContents.bind( 587 node, Components.DOMPresentationUtils.buildImagePreviewContents.bind(
588 WebInspector.DOMPresentationUtils, node.target(), anchor.href, true, showPopover)); 588 Components.DOMPresentationUtils, node.target(), anchor.href, t rue, showPopover));
589 589
590 /** 590 /**
591 * @param {!Element=} contents 591 * @param {!Element=} contents
592 */ 592 */
593 function showPopover(contents) { 593 function showPopover(contents) {
594 if (!contents) 594 if (!contents)
595 return; 595 return;
596 popover.setCanShrink(false); 596 popover.setCanShrink(false);
597 popover.showForAnchor(contents, anchor); 597 popover.showForAnchor(contents, anchor);
598 } 598 }
(...skipping 26 matching lines...) Expand all
625 } 625 }
626 } 626 }
627 627
628 _onmousemove(event) { 628 _onmousemove(event) {
629 var element = this._treeElementFromEvent(event); 629 var element = this._treeElementFromEvent(event);
630 if (element && this._previousHoveredElement === element) 630 if (element && this._previousHoveredElement === element)
631 return; 631 return;
632 632
633 this.setHoverEffect(element); 633 this.setHoverEffect(element);
634 634
635 if (element instanceof WebInspector.ElementsTreeElement) { 635 if (element instanceof Elements.ElementsTreeElement) {
636 this._domModel.highlightDOMNodeWithConfig( 636 this._domModel.highlightDOMNodeWithConfig(
637 element.node().id, {mode: 'all', showInfo: !WebInspector.KeyboardShort cut.eventHasCtrlOrMeta(event)}); 637 element.node().id, {mode: 'all', showInfo: !UI.KeyboardShortcut.eventH asCtrlOrMeta(event)});
638 return; 638 return;
639 } 639 }
640 640
641 if (element instanceof WebInspector.ElementsTreeOutline.ShortcutTreeElement) 641 if (element instanceof Elements.ElementsTreeOutline.ShortcutTreeElement)
642 this._domModel.highlightDOMNodeWithConfig( 642 this._domModel.highlightDOMNodeWithConfig(
643 undefined, {mode: 'all', showInfo: !WebInspector.KeyboardShortcut.even tHasCtrlOrMeta(event)}, 643 undefined, {mode: 'all', showInfo: !UI.KeyboardShortcut.eventHasCtrlOr Meta(event)},
644 element.backendNodeId()); 644 element.backendNodeId());
645 } 645 }
646 646
647 _onmouseleave(event) { 647 _onmouseleave(event) {
648 this.setHoverEffect(null); 648 this.setHoverEffect(null);
649 WebInspector.DOMModel.hideDOMNodeHighlight(); 649 SDK.DOMModel.hideDOMNodeHighlight();
650 } 650 }
651 651
652 _ondragstart(event) { 652 _ondragstart(event) {
653 if (!event.target.isComponentSelectionCollapsed()) 653 if (!event.target.isComponentSelectionCollapsed())
654 return false; 654 return false;
655 if (event.target.nodeName === 'A') 655 if (event.target.nodeName === 'A')
656 return false; 656 return false;
657 657
658 var treeElement = this._treeElementFromEvent(event); 658 var treeElement = this._treeElementFromEvent(event);
659 if (!this._isValidDragSourceOrTarget(treeElement)) 659 if (!this._isValidDragSourceOrTarget(treeElement))
660 return false; 660 return false;
661 661
662 if (treeElement.node().nodeName() === 'BODY' || treeElement.node().nodeName( ) === 'HEAD') 662 if (treeElement.node().nodeName() === 'BODY' || treeElement.node().nodeName( ) === 'HEAD')
663 return false; 663 return false;
664 664
665 event.dataTransfer.setData('text/plain', treeElement.listItemElement.textCon tent.replace(/\u200b/g, '')); 665 event.dataTransfer.setData('text/plain', treeElement.listItemElement.textCon tent.replace(/\u200b/g, ''));
666 event.dataTransfer.effectAllowed = 'copyMove'; 666 event.dataTransfer.effectAllowed = 'copyMove';
667 this._treeElementBeingDragged = treeElement; 667 this._treeElementBeingDragged = treeElement;
668 668
669 WebInspector.DOMModel.hideDOMNodeHighlight(); 669 SDK.DOMModel.hideDOMNodeHighlight();
670 670
671 return true; 671 return true;
672 } 672 }
673 673
674 _ondragover(event) { 674 _ondragover(event) {
675 if (!this._treeElementBeingDragged) 675 if (!this._treeElementBeingDragged)
676 return false; 676 return false;
677 677
678 var treeElement = this._treeElementFromEvent(event); 678 var treeElement = this._treeElementFromEvent(event);
679 if (!this._isValidDragSourceOrTarget(treeElement)) 679 if (!this._isValidDragSourceOrTarget(treeElement))
(...skipping 20 matching lines...) Expand all
700 } 700 }
701 701
702 /** 702 /**
703 * @param {?TreeElement} treeElement 703 * @param {?TreeElement} treeElement
704 * @return {boolean} 704 * @return {boolean}
705 */ 705 */
706 _isValidDragSourceOrTarget(treeElement) { 706 _isValidDragSourceOrTarget(treeElement) {
707 if (!treeElement) 707 if (!treeElement)
708 return false; 708 return false;
709 709
710 if (!(treeElement instanceof WebInspector.ElementsTreeElement)) 710 if (!(treeElement instanceof Elements.ElementsTreeElement))
711 return false; 711 return false;
712 var elementsTreeElement = /** @type {!WebInspector.ElementsTreeElement} */ ( treeElement); 712 var elementsTreeElement = /** @type {!Elements.ElementsTreeElement} */ (tree Element);
713 713
714 var node = elementsTreeElement.node(); 714 var node = elementsTreeElement.node();
715 if (!node.parentNode || node.parentNode.nodeType() !== Node.ELEMENT_NODE) 715 if (!node.parentNode || node.parentNode.nodeType() !== Node.ELEMENT_NODE)
716 return false; 716 return false;
717 717
718 return true; 718 return true;
719 } 719 }
720 720
721 _ondrop(event) { 721 _ondrop(event) {
722 event.preventDefault(); 722 event.preventDefault();
(...skipping 36 matching lines...) Expand 10 before | Expand all | Expand 10 after
759 759
760 _clearDragOverTreeElementMarker() { 760 _clearDragOverTreeElementMarker() {
761 if (this._dragOverTreeElement) { 761 if (this._dragOverTreeElement) {
762 this._dragOverTreeElement.listItemElement.classList.remove('elements-drag- over'); 762 this._dragOverTreeElement.listItemElement.classList.remove('elements-drag- over');
763 delete this._dragOverTreeElement; 763 delete this._dragOverTreeElement;
764 } 764 }
765 } 765 }
766 766
767 _contextMenuEventFired(event) { 767 _contextMenuEventFired(event) {
768 var treeElement = this._treeElementFromEvent(event); 768 var treeElement = this._treeElementFromEvent(event);
769 if (treeElement instanceof WebInspector.ElementsTreeElement) 769 if (treeElement instanceof Elements.ElementsTreeElement)
770 this.showContextMenu(treeElement, event); 770 this.showContextMenu(treeElement, event);
771 } 771 }
772 772
773 /** 773 /**
774 * @param {!WebInspector.ElementsTreeElement} treeElement 774 * @param {!Elements.ElementsTreeElement} treeElement
775 * @param {!Event} event 775 * @param {!Event} event
776 */ 776 */
777 showContextMenu(treeElement, event) { 777 showContextMenu(treeElement, event) {
778 if (WebInspector.isEditing()) 778 if (UI.isEditing())
779 return; 779 return;
780 780
781 var contextMenu = new WebInspector.ContextMenu(event); 781 var contextMenu = new UI.ContextMenu(event);
782 var isPseudoElement = !!treeElement.node().pseudoType(); 782 var isPseudoElement = !!treeElement.node().pseudoType();
783 var isTag = treeElement.node().nodeType() === Node.ELEMENT_NODE && !isPseudo Element; 783 var isTag = treeElement.node().nodeType() === Node.ELEMENT_NODE && !isPseudo Element;
784 var textNode = event.target.enclosingNodeOrSelfWithClass('webkit-html-text-n ode'); 784 var textNode = event.target.enclosingNodeOrSelfWithClass('webkit-html-text-n ode');
785 if (textNode && textNode.classList.contains('bogus')) 785 if (textNode && textNode.classList.contains('bogus'))
786 textNode = null; 786 textNode = null;
787 var commentNode = event.target.enclosingNodeOrSelfWithClass('webkit-html-com ment'); 787 var commentNode = event.target.enclosingNodeOrSelfWithClass('webkit-html-com ment');
788 contextMenu.appendApplicableItems(event.target); 788 contextMenu.appendApplicableItems(event.target);
789 if (textNode) { 789 if (textNode) {
790 contextMenu.appendSeparator(); 790 contextMenu.appendSeparator();
791 treeElement.populateTextContextMenu(contextMenu, textNode); 791 treeElement.populateTextContextMenu(contextMenu, textNode);
(...skipping 16 matching lines...) Expand all
808 } 808 }
809 809
810 handleShortcut(event) { 810 handleShortcut(event) {
811 var node = this.selectedDOMNode(); 811 var node = this.selectedDOMNode();
812 if (!node) 812 if (!node)
813 return; 813 return;
814 var treeElement = node[this._treeElementSymbol]; 814 var treeElement = node[this._treeElementSymbol];
815 if (!treeElement) 815 if (!treeElement)
816 return; 816 return;
817 817
818 if (WebInspector.KeyboardShortcut.eventHasCtrlOrMeta(event) && node.parentNo de) { 818 if (UI.KeyboardShortcut.eventHasCtrlOrMeta(event) && node.parentNode) {
819 if (event.key === 'ArrowUp' && node.previousSibling) { 819 if (event.key === 'ArrowUp' && node.previousSibling) {
820 node.moveTo(node.parentNode, node.previousSibling, this.selectNodeAfterE dit.bind(this, treeElement.expanded)); 820 node.moveTo(node.parentNode, node.previousSibling, this.selectNodeAfterE dit.bind(this, treeElement.expanded));
821 event.handled = true; 821 event.handled = true;
822 return; 822 return;
823 } 823 }
824 if (event.key === 'ArrowDown' && node.nextSibling) { 824 if (event.key === 'ArrowDown' && node.nextSibling) {
825 node.moveTo( 825 node.moveTo(
826 node.parentNode, node.nextSibling.nextSibling, this.selectNodeAfterE dit.bind(this, treeElement.expanded)); 826 node.parentNode, node.nextSibling.nextSibling, this.selectNodeAfterE dit.bind(this, treeElement.expanded));
827 event.handled = true; 827 event.handled = true;
828 return; 828 return;
829 } 829 }
830 } 830 }
831 } 831 }
832 832
833 /** 833 /**
834 * @param {!WebInspector.DOMNode} node 834 * @param {!SDK.DOMNode} node
835 * @param {boolean=} startEditing 835 * @param {boolean=} startEditing
836 * @param {function()=} callback 836 * @param {function()=} callback
837 */ 837 */
838 toggleEditAsHTML(node, startEditing, callback) { 838 toggleEditAsHTML(node, startEditing, callback) {
839 var treeElement = node[this._treeElementSymbol]; 839 var treeElement = node[this._treeElementSymbol];
840 if (!treeElement || !treeElement.hasEditableNode()) 840 if (!treeElement || !treeElement.hasEditableNode())
841 return; 841 return;
842 842
843 if (node.pseudoType()) 843 if (node.pseudoType())
844 return; 844 return;
845 845
846 var parentNode = node.parentNode; 846 var parentNode = node.parentNode;
847 var index = node.index; 847 var index = node.index;
848 var wasExpanded = treeElement.expanded; 848 var wasExpanded = treeElement.expanded;
849 849
850 treeElement.toggleEditAsHTML(editingFinished.bind(this), startEditing); 850 treeElement.toggleEditAsHTML(editingFinished.bind(this), startEditing);
851 851
852 /** 852 /**
853 * @this {WebInspector.ElementsTreeOutline} 853 * @this {Elements.ElementsTreeOutline}
854 * @param {boolean} success 854 * @param {boolean} success
855 */ 855 */
856 function editingFinished(success) { 856 function editingFinished(success) {
857 if (callback) 857 if (callback)
858 callback(); 858 callback();
859 if (!success) 859 if (!success)
860 return; 860 return;
861 861
862 // Select it and expand if necessary. We force tree update so that it proc esses dom events and is up to date. 862 // Select it and expand if necessary. We force tree update so that it proc esses dom events and is up to date.
863 this.runPendingUpdates(); 863 this.runPendingUpdates();
864 864
865 var newNode = parentNode ? parentNode.children()[index] || parentNode : nu ll; 865 var newNode = parentNode ? parentNode.children()[index] || parentNode : nu ll;
866 if (!newNode) 866 if (!newNode)
867 return; 867 return;
868 868
869 this.selectDOMNode(newNode, true); 869 this.selectDOMNode(newNode, true);
870 870
871 if (wasExpanded) { 871 if (wasExpanded) {
872 var newTreeItem = this.findTreeElement(newNode); 872 var newTreeItem = this.findTreeElement(newNode);
873 if (newTreeItem) 873 if (newTreeItem)
874 newTreeItem.expand(); 874 newTreeItem.expand();
875 } 875 }
876 } 876 }
877 } 877 }
878 878
879 /** 879 /**
880 * @param {boolean} wasExpanded 880 * @param {boolean} wasExpanded
881 * @param {?Protocol.Error} error 881 * @param {?Protocol.Error} error
882 * @param {!Protocol.DOM.NodeId=} nodeId 882 * @param {!Protocol.DOM.NodeId=} nodeId
883 * @return {?WebInspector.ElementsTreeElement} nodeId 883 * @return {?Elements.ElementsTreeElement} nodeId
884 */ 884 */
885 selectNodeAfterEdit(wasExpanded, error, nodeId) { 885 selectNodeAfterEdit(wasExpanded, error, nodeId) {
886 if (error) 886 if (error)
887 return null; 887 return null;
888 888
889 // Select it and expand if necessary. We force tree update so that it proces ses dom events and is up to date. 889 // Select it and expand if necessary. We force tree update so that it proces ses dom events and is up to date.
890 this.runPendingUpdates(); 890 this.runPendingUpdates();
891 891
892 var newNode = nodeId ? this._domModel.nodeForId(nodeId) : null; 892 var newNode = nodeId ? this._domModel.nodeForId(nodeId) : null;
893 if (!newNode) 893 if (!newNode)
894 return null; 894 return null;
895 895
896 this.selectDOMNode(newNode, true); 896 this.selectDOMNode(newNode, true);
897 897
898 var newTreeItem = this.findTreeElement(newNode); 898 var newTreeItem = this.findTreeElement(newNode);
899 if (wasExpanded) { 899 if (wasExpanded) {
900 if (newTreeItem) 900 if (newTreeItem)
901 newTreeItem.expand(); 901 newTreeItem.expand();
902 } 902 }
903 return newTreeItem; 903 return newTreeItem;
904 } 904 }
905 905
906 /** 906 /**
907 * Runs a script on the node's remote object that toggles a class name on 907 * Runs a script on the node's remote object that toggles a class name on
908 * the node and injects a stylesheet into the head of the node's document 908 * the node and injects a stylesheet into the head of the node's document
909 * containing a rule to set "visibility: hidden" on the class and all it's 909 * containing a rule to set "visibility: hidden" on the class and all it's
910 * ancestors. 910 * ancestors.
911 * 911 *
912 * @param {!WebInspector.DOMNode} node 912 * @param {!SDK.DOMNode} node
913 * @param {function(?WebInspector.RemoteObject, boolean=)=} userCallback 913 * @param {function(?SDK.RemoteObject, boolean=)=} userCallback
914 */ 914 */
915 toggleHideElement(node, userCallback) { 915 toggleHideElement(node, userCallback) {
916 var pseudoType = node.pseudoType(); 916 var pseudoType = node.pseudoType();
917 var effectiveNode = pseudoType ? node.parentNode : node; 917 var effectiveNode = pseudoType ? node.parentNode : node;
918 if (!effectiveNode) 918 if (!effectiveNode)
919 return; 919 return;
920 920
921 var hidden = node.marker('hidden-marker'); 921 var hidden = node.marker('hidden-marker');
922 922
923 function resolvedNode(object) { 923 function resolvedNode(object) {
(...skipping 42 matching lines...) Expand 10 before | Expand all | Expand 10 after
966 966
967 object.callFunction(toggleClassAndInjectStyleRule, [{value: pseudoType}, { value: !hidden}], userCallback); 967 object.callFunction(toggleClassAndInjectStyleRule, [{value: pseudoType}, { value: !hidden}], userCallback);
968 object.release(); 968 object.release();
969 node.setMarker('hidden-marker', hidden ? null : true); 969 node.setMarker('hidden-marker', hidden ? null : true);
970 } 970 }
971 971
972 effectiveNode.resolveToObject('', resolvedNode); 972 effectiveNode.resolveToObject('', resolvedNode);
973 } 973 }
974 974
975 /** 975 /**
976 * @param {!WebInspector.DOMNode} node 976 * @param {!SDK.DOMNode} node
977 * @return {boolean} 977 * @return {boolean}
978 */ 978 */
979 isToggledToHidden(node) { 979 isToggledToHidden(node) {
980 return !!node.marker('hidden-marker'); 980 return !!node.marker('hidden-marker');
981 } 981 }
982 982
983 _reset() { 983 _reset() {
984 this.rootDOMNode = null; 984 this.rootDOMNode = null;
985 this.selectDOMNode(null, false); 985 this.selectDOMNode(null, false);
986 this._popoverHelper.hidePopover(); 986 this._popoverHelper.hidePopover();
987 delete this._clipboardNodeData; 987 delete this._clipboardNodeData;
988 WebInspector.DOMModel.hideDOMNodeHighlight(); 988 SDK.DOMModel.hideDOMNodeHighlight();
989 this._updateRecords.clear(); 989 this._updateRecords.clear();
990 } 990 }
991 991
992 wireToDOMModel() { 992 wireToDOMModel() {
993 this._domModel[WebInspector.ElementsTreeOutline._treeOutlineSymbol] = this; 993 this._domModel[Elements.ElementsTreeOutline._treeOutlineSymbol] = this;
994 this._domModel.addEventListener(WebInspector.DOMModel.Events.NodeInserted, t his._nodeInserted, this); 994 this._domModel.addEventListener(SDK.DOMModel.Events.NodeInserted, this._node Inserted, this);
995 this._domModel.addEventListener(WebInspector.DOMModel.Events.NodeRemoved, th is._nodeRemoved, this); 995 this._domModel.addEventListener(SDK.DOMModel.Events.NodeRemoved, this._nodeR emoved, this);
996 this._domModel.addEventListener(WebInspector.DOMModel.Events.AttrModified, t his._attributeModified, this); 996 this._domModel.addEventListener(SDK.DOMModel.Events.AttrModified, this._attr ibuteModified, this);
997 this._domModel.addEventListener(WebInspector.DOMModel.Events.AttrRemoved, th is._attributeRemoved, this); 997 this._domModel.addEventListener(SDK.DOMModel.Events.AttrRemoved, this._attri buteRemoved, this);
998 this._domModel.addEventListener( 998 this._domModel.addEventListener(
999 WebInspector.DOMModel.Events.CharacterDataModified, this._characterDataM odified, this); 999 SDK.DOMModel.Events.CharacterDataModified, this._characterDataModified, this);
1000 this._domModel.addEventListener(WebInspector.DOMModel.Events.DocumentUpdated , this._documentUpdated, this); 1000 this._domModel.addEventListener(SDK.DOMModel.Events.DocumentUpdated, this._d ocumentUpdated, this);
1001 this._domModel.addEventListener( 1001 this._domModel.addEventListener(
1002 WebInspector.DOMModel.Events.ChildNodeCountUpdated, this._childNodeCount Updated, this); 1002 SDK.DOMModel.Events.ChildNodeCountUpdated, this._childNodeCountUpdated, this);
1003 this._domModel.addEventListener( 1003 this._domModel.addEventListener(
1004 WebInspector.DOMModel.Events.DistributedNodesChanged, this._distributedN odesChanged, this); 1004 SDK.DOMModel.Events.DistributedNodesChanged, this._distributedNodesChang ed, this);
1005 } 1005 }
1006 1006
1007 unwireFromDOMModel() { 1007 unwireFromDOMModel() {
1008 this._domModel.removeEventListener(WebInspector.DOMModel.Events.NodeInserted , this._nodeInserted, this); 1008 this._domModel.removeEventListener(SDK.DOMModel.Events.NodeInserted, this._n odeInserted, this);
1009 this._domModel.removeEventListener(WebInspector.DOMModel.Events.NodeRemoved, this._nodeRemoved, this); 1009 this._domModel.removeEventListener(SDK.DOMModel.Events.NodeRemoved, this._no deRemoved, this);
1010 this._domModel.removeEventListener(WebInspector.DOMModel.Events.AttrModified , this._attributeModified, this); 1010 this._domModel.removeEventListener(SDK.DOMModel.Events.AttrModified, this._a ttributeModified, this);
1011 this._domModel.removeEventListener(WebInspector.DOMModel.Events.AttrRemoved, this._attributeRemoved, this); 1011 this._domModel.removeEventListener(SDK.DOMModel.Events.AttrRemoved, this._at tributeRemoved, this);
1012 this._domModel.removeEventListener( 1012 this._domModel.removeEventListener(
1013 WebInspector.DOMModel.Events.CharacterDataModified, this._characterDataM odified, this); 1013 SDK.DOMModel.Events.CharacterDataModified, this._characterDataModified, this);
1014 this._domModel.removeEventListener(WebInspector.DOMModel.Events.DocumentUpda ted, this._documentUpdated, this); 1014 this._domModel.removeEventListener(SDK.DOMModel.Events.DocumentUpdated, this ._documentUpdated, this);
1015 this._domModel.removeEventListener( 1015 this._domModel.removeEventListener(
1016 WebInspector.DOMModel.Events.ChildNodeCountUpdated, this._childNodeCount Updated, this); 1016 SDK.DOMModel.Events.ChildNodeCountUpdated, this._childNodeCountUpdated, this);
1017 this._domModel.removeEventListener( 1017 this._domModel.removeEventListener(
1018 WebInspector.DOMModel.Events.DistributedNodesChanged, this._distributedN odesChanged, this); 1018 SDK.DOMModel.Events.DistributedNodesChanged, this._distributedNodesChang ed, this);
1019 delete this._domModel[WebInspector.ElementsTreeOutline._treeOutlineSymbol]; 1019 delete this._domModel[Elements.ElementsTreeOutline._treeOutlineSymbol];
1020 } 1020 }
1021 1021
1022 /** 1022 /**
1023 * @param {!WebInspector.DOMNode} node 1023 * @param {!SDK.DOMNode} node
1024 * @return {!WebInspector.ElementsTreeOutline.UpdateRecord} 1024 * @return {!Elements.ElementsTreeOutline.UpdateRecord}
1025 */ 1025 */
1026 _addUpdateRecord(node) { 1026 _addUpdateRecord(node) {
1027 var record = this._updateRecords.get(node); 1027 var record = this._updateRecords.get(node);
1028 if (!record) { 1028 if (!record) {
1029 record = new WebInspector.ElementsTreeOutline.UpdateRecord(); 1029 record = new Elements.ElementsTreeOutline.UpdateRecord();
1030 this._updateRecords.set(node, record); 1030 this._updateRecords.set(node, record);
1031 } 1031 }
1032 return record; 1032 return record;
1033 } 1033 }
1034 1034
1035 /** 1035 /**
1036 * @param {!WebInspector.DOMNode} node 1036 * @param {!SDK.DOMNode} node
1037 * @return {?WebInspector.ElementsTreeOutline.UpdateRecord} 1037 * @return {?Elements.ElementsTreeOutline.UpdateRecord}
1038 */ 1038 */
1039 _updateRecordForHighlight(node) { 1039 _updateRecordForHighlight(node) {
1040 if (!this._visible) 1040 if (!this._visible)
1041 return null; 1041 return null;
1042 return this._updateRecords.get(node) || null; 1042 return this._updateRecords.get(node) || null;
1043 } 1043 }
1044 1044
1045 /** 1045 /**
1046 * @param {!WebInspector.Event} event 1046 * @param {!Common.Event} event
1047 */ 1047 */
1048 _documentUpdated(event) { 1048 _documentUpdated(event) {
1049 var inspectedRootDocument = event.data; 1049 var inspectedRootDocument = event.data;
1050 1050
1051 this._reset(); 1051 this._reset();
1052 1052
1053 if (!inspectedRootDocument) 1053 if (!inspectedRootDocument)
1054 return; 1054 return;
1055 1055
1056 this.rootDOMNode = inspectedRootDocument; 1056 this.rootDOMNode = inspectedRootDocument;
1057 } 1057 }
1058 1058
1059 /** 1059 /**
1060 * @param {!WebInspector.Event} event 1060 * @param {!Common.Event} event
1061 */ 1061 */
1062 _attributeModified(event) { 1062 _attributeModified(event) {
1063 var node = /** @type {!WebInspector.DOMNode} */ (event.data.node); 1063 var node = /** @type {!SDK.DOMNode} */ (event.data.node);
1064 this._addUpdateRecord(node).attributeModified(event.data.name); 1064 this._addUpdateRecord(node).attributeModified(event.data.name);
1065 this._updateModifiedNodesSoon(); 1065 this._updateModifiedNodesSoon();
1066 } 1066 }
1067 1067
1068 /** 1068 /**
1069 * @param {!WebInspector.Event} event 1069 * @param {!Common.Event} event
1070 */ 1070 */
1071 _attributeRemoved(event) { 1071 _attributeRemoved(event) {
1072 var node = /** @type {!WebInspector.DOMNode} */ (event.data.node); 1072 var node = /** @type {!SDK.DOMNode} */ (event.data.node);
1073 this._addUpdateRecord(node).attributeRemoved(event.data.name); 1073 this._addUpdateRecord(node).attributeRemoved(event.data.name);
1074 this._updateModifiedNodesSoon(); 1074 this._updateModifiedNodesSoon();
1075 } 1075 }
1076 1076
1077 /** 1077 /**
1078 * @param {!WebInspector.Event} event 1078 * @param {!Common.Event} event
1079 */ 1079 */
1080 _characterDataModified(event) { 1080 _characterDataModified(event) {
1081 var node = /** @type {!WebInspector.DOMNode} */ (event.data); 1081 var node = /** @type {!SDK.DOMNode} */ (event.data);
1082 this._addUpdateRecord(node).charDataModified(); 1082 this._addUpdateRecord(node).charDataModified();
1083 // Text could be large and force us to render itself as the child in the tre e outline. 1083 // Text could be large and force us to render itself as the child in the tre e outline.
1084 if (node.parentNode && node.parentNode.firstChild === node.parentNode.lastCh ild) 1084 if (node.parentNode && node.parentNode.firstChild === node.parentNode.lastCh ild)
1085 this._addUpdateRecord(node.parentNode).childrenModified(); 1085 this._addUpdateRecord(node.parentNode).childrenModified();
1086 this._updateModifiedNodesSoon(); 1086 this._updateModifiedNodesSoon();
1087 } 1087 }
1088 1088
1089 /** 1089 /**
1090 * @param {!WebInspector.Event} event 1090 * @param {!Common.Event} event
1091 */ 1091 */
1092 _nodeInserted(event) { 1092 _nodeInserted(event) {
1093 var node = /** @type {!WebInspector.DOMNode} */ (event.data); 1093 var node = /** @type {!SDK.DOMNode} */ (event.data);
1094 this._addUpdateRecord(/** @type {!WebInspector.DOMNode} */ (node.parentNode) ).nodeInserted(node); 1094 this._addUpdateRecord(/** @type {!SDK.DOMNode} */ (node.parentNode)).nodeIns erted(node);
1095 this._updateModifiedNodesSoon(); 1095 this._updateModifiedNodesSoon();
1096 } 1096 }
1097 1097
1098 /** 1098 /**
1099 * @param {!WebInspector.Event} event 1099 * @param {!Common.Event} event
1100 */ 1100 */
1101 _nodeRemoved(event) { 1101 _nodeRemoved(event) {
1102 var node = /** @type {!WebInspector.DOMNode} */ (event.data.node); 1102 var node = /** @type {!SDK.DOMNode} */ (event.data.node);
1103 var parentNode = /** @type {!WebInspector.DOMNode} */ (event.data.parent); 1103 var parentNode = /** @type {!SDK.DOMNode} */ (event.data.parent);
1104 this.resetClipboardIfNeeded(node); 1104 this.resetClipboardIfNeeded(node);
1105 this._addUpdateRecord(parentNode).nodeRemoved(node); 1105 this._addUpdateRecord(parentNode).nodeRemoved(node);
1106 this._updateModifiedNodesSoon(); 1106 this._updateModifiedNodesSoon();
1107 } 1107 }
1108 1108
1109 /** 1109 /**
1110 * @param {!WebInspector.Event} event 1110 * @param {!Common.Event} event
1111 */ 1111 */
1112 _childNodeCountUpdated(event) { 1112 _childNodeCountUpdated(event) {
1113 var node = /** @type {!WebInspector.DOMNode} */ (event.data); 1113 var node = /** @type {!SDK.DOMNode} */ (event.data);
1114 this._addUpdateRecord(node).childrenModified(); 1114 this._addUpdateRecord(node).childrenModified();
1115 this._updateModifiedNodesSoon(); 1115 this._updateModifiedNodesSoon();
1116 } 1116 }
1117 1117
1118 /** 1118 /**
1119 * @param {!WebInspector.Event} event 1119 * @param {!Common.Event} event
1120 */ 1120 */
1121 _distributedNodesChanged(event) { 1121 _distributedNodesChanged(event) {
1122 var node = /** @type {!WebInspector.DOMNode} */ (event.data); 1122 var node = /** @type {!SDK.DOMNode} */ (event.data);
1123 this._addUpdateRecord(node).childrenModified(); 1123 this._addUpdateRecord(node).childrenModified();
1124 this._updateModifiedNodesSoon(); 1124 this._updateModifiedNodesSoon();
1125 } 1125 }
1126 1126
1127 _updateModifiedNodesSoon() { 1127 _updateModifiedNodesSoon() {
1128 if (!this._updateRecords.size) 1128 if (!this._updateRecords.size)
1129 return; 1129 return;
1130 if (this._updateModifiedNodesTimeout) 1130 if (this._updateModifiedNodesTimeout)
1131 return; 1131 return;
1132 this._updateModifiedNodesTimeout = setTimeout(this._updateModifiedNodes.bind (this), 50); 1132 this._updateModifiedNodesTimeout = setTimeout(this._updateModifiedNodes.bind (this), 50);
(...skipping 46 matching lines...) Expand 10 before | Expand all | Expand 10 after
1179 var parentTreeElement = this.findTreeElement(node); 1179 var parentTreeElement = this.findTreeElement(node);
1180 if (parentTreeElement) { 1180 if (parentTreeElement) {
1181 parentTreeElement.setExpandable(this._hasVisibleChildren(node)); 1181 parentTreeElement.setExpandable(this._hasVisibleChildren(node));
1182 parentTreeElement.updateTitle(this._updateRecordForHighlight(node)); 1182 parentTreeElement.updateTitle(this._updateRecordForHighlight(node));
1183 if (parentTreeElement.populated) 1183 if (parentTreeElement.populated)
1184 this._updateChildren(parentTreeElement); 1184 this._updateChildren(parentTreeElement);
1185 } 1185 }
1186 } 1186 }
1187 1187
1188 /** 1188 /**
1189 * @param {!WebInspector.ElementsTreeElement} treeElement 1189 * @param {!Elements.ElementsTreeElement} treeElement
1190 */ 1190 */
1191 populateTreeElement(treeElement) { 1191 populateTreeElement(treeElement) {
1192 if (treeElement.childCount() || !treeElement.isExpandable()) 1192 if (treeElement.childCount() || !treeElement.isExpandable())
1193 return; 1193 return;
1194 1194
1195 this._updateModifiedParentNode(treeElement.node()); 1195 this._updateModifiedParentNode(treeElement.node());
1196 } 1196 }
1197 1197
1198 /** 1198 /**
1199 * @param {!WebInspector.DOMNode} node 1199 * @param {!SDK.DOMNode} node
1200 * @param {boolean=} closingTag 1200 * @param {boolean=} closingTag
1201 * @return {!WebInspector.ElementsTreeElement} 1201 * @return {!Elements.ElementsTreeElement}
1202 */ 1202 */
1203 _createElementTreeElement(node, closingTag) { 1203 _createElementTreeElement(node, closingTag) {
1204 var treeElement = new WebInspector.ElementsTreeElement(node, closingTag); 1204 var treeElement = new Elements.ElementsTreeElement(node, closingTag);
1205 treeElement.setExpandable(!closingTag && this._hasVisibleChildren(node)); 1205 treeElement.setExpandable(!closingTag && this._hasVisibleChildren(node));
1206 if (node.nodeType() === Node.ELEMENT_NODE && node.parentNode && node.parentN ode.nodeType() === Node.DOCUMENT_NODE && 1206 if (node.nodeType() === Node.ELEMENT_NODE && node.parentNode && node.parentN ode.nodeType() === Node.DOCUMENT_NODE &&
1207 !node.parentNode.parentNode) 1207 !node.parentNode.parentNode)
1208 treeElement.setCollapsible(false); 1208 treeElement.setCollapsible(false);
1209 treeElement.selectable = this._selectEnabled; 1209 treeElement.selectable = this._selectEnabled;
1210 return treeElement; 1210 return treeElement;
1211 } 1211 }
1212 1212
1213 /** 1213 /**
1214 * @param {!WebInspector.ElementsTreeElement} treeElement 1214 * @param {!Elements.ElementsTreeElement} treeElement
1215 * @param {!WebInspector.DOMNode} child 1215 * @param {!SDK.DOMNode} child
1216 * @return {?WebInspector.ElementsTreeElement} 1216 * @return {?Elements.ElementsTreeElement}
1217 */ 1217 */
1218 _showChild(treeElement, child) { 1218 _showChild(treeElement, child) {
1219 if (treeElement.isClosingTag()) 1219 if (treeElement.isClosingTag())
1220 return null; 1220 return null;
1221 1221
1222 var index = this._visibleChildren(treeElement.node()).indexOf(child); 1222 var index = this._visibleChildren(treeElement.node()).indexOf(child);
1223 if (index === -1) 1223 if (index === -1)
1224 return null; 1224 return null;
1225 1225
1226 if (index >= treeElement.expandedChildrenLimit()) 1226 if (index >= treeElement.expandedChildrenLimit())
1227 this.setExpandedChildrenLimit(treeElement, index + 1); 1227 this.setExpandedChildrenLimit(treeElement, index + 1);
1228 return /** @type {!WebInspector.ElementsTreeElement} */ (treeElement.childAt (index)); 1228 return /** @type {!Elements.ElementsTreeElement} */ (treeElement.childAt(ind ex));
1229 } 1229 }
1230 1230
1231 /** 1231 /**
1232 * @param {!WebInspector.DOMNode} node 1232 * @param {!SDK.DOMNode} node
1233 * @return {!Array.<!WebInspector.DOMNode>} visibleChildren 1233 * @return {!Array.<!SDK.DOMNode>} visibleChildren
1234 */ 1234 */
1235 _visibleChildren(node) { 1235 _visibleChildren(node) {
1236 var visibleChildren = WebInspector.ElementsTreeElement.visibleShadowRoots(no de); 1236 var visibleChildren = Elements.ElementsTreeElement.visibleShadowRoots(node);
1237 1237
1238 var importedDocument = node.importedDocument(); 1238 var importedDocument = node.importedDocument();
1239 if (importedDocument) 1239 if (importedDocument)
1240 visibleChildren.push(importedDocument); 1240 visibleChildren.push(importedDocument);
1241 1241
1242 var templateContent = node.templateContent(); 1242 var templateContent = node.templateContent();
1243 if (templateContent) 1243 if (templateContent)
1244 visibleChildren.push(templateContent); 1244 visibleChildren.push(templateContent);
1245 1245
1246 var beforePseudoElement = node.beforePseudoElement(); 1246 var beforePseudoElement = node.beforePseudoElement();
1247 if (beforePseudoElement) 1247 if (beforePseudoElement)
1248 visibleChildren.push(beforePseudoElement); 1248 visibleChildren.push(beforePseudoElement);
1249 1249
1250 if (node.childNodeCount()) { 1250 if (node.childNodeCount()) {
1251 var children = node.children(); 1251 var children = node.children();
1252 if (!this._showHTMLCommentsSetting.get()) 1252 if (!this._showHTMLCommentsSetting.get())
1253 children = children.filter(n => n.nodeType() !== Node.COMMENT_NODE); 1253 children = children.filter(n => n.nodeType() !== Node.COMMENT_NODE);
1254 visibleChildren = visibleChildren.concat(children); 1254 visibleChildren = visibleChildren.concat(children);
1255 } 1255 }
1256 1256
1257 var afterPseudoElement = node.afterPseudoElement(); 1257 var afterPseudoElement = node.afterPseudoElement();
1258 if (afterPseudoElement) 1258 if (afterPseudoElement)
1259 visibleChildren.push(afterPseudoElement); 1259 visibleChildren.push(afterPseudoElement);
1260 1260
1261 return visibleChildren; 1261 return visibleChildren;
1262 } 1262 }
1263 1263
1264 /** 1264 /**
1265 * @param {!WebInspector.DOMNode} node 1265 * @param {!SDK.DOMNode} node
1266 * @return {boolean} 1266 * @return {boolean}
1267 */ 1267 */
1268 _hasVisibleChildren(node) { 1268 _hasVisibleChildren(node) {
1269 if (node.importedDocument()) 1269 if (node.importedDocument())
1270 return true; 1270 return true;
1271 if (node.templateContent()) 1271 if (node.templateContent())
1272 return true; 1272 return true;
1273 if (WebInspector.ElementsTreeElement.visibleShadowRoots(node).length) 1273 if (Elements.ElementsTreeElement.visibleShadowRoots(node).length)
1274 return true; 1274 return true;
1275 if (node.hasPseudoElements()) 1275 if (node.hasPseudoElements())
1276 return true; 1276 return true;
1277 if (node.isInsertionPoint()) 1277 if (node.isInsertionPoint())
1278 return true; 1278 return true;
1279 return !!node.childNodeCount() && !WebInspector.ElementsTreeElement.canShowI nlineText(node); 1279 return !!node.childNodeCount() && !Elements.ElementsTreeElement.canShowInlin eText(node);
1280 } 1280 }
1281 1281
1282 /** 1282 /**
1283 * @param {!WebInspector.ElementsTreeElement} treeElement 1283 * @param {!Elements.ElementsTreeElement} treeElement
1284 */ 1284 */
1285 _createExpandAllButtonTreeElement(treeElement) { 1285 _createExpandAllButtonTreeElement(treeElement) {
1286 var button = createTextButton('', handleLoadAllChildren.bind(this)); 1286 var button = createTextButton('', handleLoadAllChildren.bind(this));
1287 button.value = ''; 1287 button.value = '';
1288 var expandAllButtonElement = new TreeElement(button); 1288 var expandAllButtonElement = new TreeElement(button);
1289 expandAllButtonElement.selectable = false; 1289 expandAllButtonElement.selectable = false;
1290 expandAllButtonElement.expandAllButton = true; 1290 expandAllButtonElement.expandAllButton = true;
1291 expandAllButtonElement.button = button; 1291 expandAllButtonElement.button = button;
1292 return expandAllButtonElement; 1292 return expandAllButtonElement;
1293 1293
1294 /** 1294 /**
1295 * @this {WebInspector.ElementsTreeOutline} 1295 * @this {Elements.ElementsTreeOutline}
1296 * @param {!Event} event 1296 * @param {!Event} event
1297 */ 1297 */
1298 function handleLoadAllChildren(event) { 1298 function handleLoadAllChildren(event) {
1299 var visibleChildCount = this._visibleChildren(treeElement.node()).length; 1299 var visibleChildCount = this._visibleChildren(treeElement.node()).length;
1300 this.setExpandedChildrenLimit( 1300 this.setExpandedChildrenLimit(
1301 treeElement, Math.max( 1301 treeElement, Math.max(
1302 visibleChildCount, treeElement.expandedChildrenLimit( ) + 1302 visibleChildCount, treeElement.expandedChildrenLimit( ) +
1303 WebInspector.ElementsTreeElement.InitialChildrenL imit)); 1303 Elements.ElementsTreeElement.InitialChildrenLimit ));
1304 event.consume(); 1304 event.consume();
1305 } 1305 }
1306 } 1306 }
1307 1307
1308 /** 1308 /**
1309 * @param {!WebInspector.ElementsTreeElement} treeElement 1309 * @param {!Elements.ElementsTreeElement} treeElement
1310 * @param {number} expandedChildrenLimit 1310 * @param {number} expandedChildrenLimit
1311 */ 1311 */
1312 setExpandedChildrenLimit(treeElement, expandedChildrenLimit) { 1312 setExpandedChildrenLimit(treeElement, expandedChildrenLimit) {
1313 if (treeElement.expandedChildrenLimit() === expandedChildrenLimit) 1313 if (treeElement.expandedChildrenLimit() === expandedChildrenLimit)
1314 return; 1314 return;
1315 1315
1316 treeElement.setExpandedChildrenLimit(expandedChildrenLimit); 1316 treeElement.setExpandedChildrenLimit(expandedChildrenLimit);
1317 if (treeElement.treeOutline && !this._treeElementsBeingUpdated.has(treeEleme nt)) 1317 if (treeElement.treeOutline && !this._treeElementsBeingUpdated.has(treeEleme nt))
1318 this._updateModifiedParentNode(treeElement.node()); 1318 this._updateModifiedParentNode(treeElement.node());
1319 } 1319 }
1320 1320
1321 /** 1321 /**
1322 * @param {!WebInspector.ElementsTreeElement} treeElement 1322 * @param {!Elements.ElementsTreeElement} treeElement
1323 */ 1323 */
1324 _updateChildren(treeElement) { 1324 _updateChildren(treeElement) {
1325 if (!treeElement.isExpandable()) { 1325 if (!treeElement.isExpandable()) {
1326 var selectedTreeElement = treeElement.treeOutline.selectedTreeElement; 1326 var selectedTreeElement = treeElement.treeOutline.selectedTreeElement;
1327 if (selectedTreeElement && selectedTreeElement.hasAncestor(treeElement)) 1327 if (selectedTreeElement && selectedTreeElement.hasAncestor(treeElement))
1328 treeElement.select(true); 1328 treeElement.select(true);
1329 treeElement.removeChildren(); 1329 treeElement.removeChildren();
1330 return; 1330 return;
1331 } 1331 }
1332 1332
1333 console.assert(!treeElement.isClosingTag()); 1333 console.assert(!treeElement.isClosingTag());
1334 1334
1335 treeElement.node().getChildNodes(childNodesLoaded.bind(this)); 1335 treeElement.node().getChildNodes(childNodesLoaded.bind(this));
1336 1336
1337 /** 1337 /**
1338 * @param {?Array.<!WebInspector.DOMNode>} children 1338 * @param {?Array.<!SDK.DOMNode>} children
1339 * @this {WebInspector.ElementsTreeOutline} 1339 * @this {Elements.ElementsTreeOutline}
1340 */ 1340 */
1341 function childNodesLoaded(children) { 1341 function childNodesLoaded(children) {
1342 // FIXME: sort this out, it should not happen. 1342 // FIXME: sort this out, it should not happen.
1343 if (!children) 1343 if (!children)
1344 return; 1344 return;
1345 this._innerUpdateChildren(treeElement); 1345 this._innerUpdateChildren(treeElement);
1346 } 1346 }
1347 } 1347 }
1348 1348
1349 /** 1349 /**
1350 * @param {!WebInspector.ElementsTreeElement} treeElement 1350 * @param {!Elements.ElementsTreeElement} treeElement
1351 * @param {!WebInspector.DOMNode} child 1351 * @param {!SDK.DOMNode} child
1352 * @param {number} index 1352 * @param {number} index
1353 * @param {boolean=} closingTag 1353 * @param {boolean=} closingTag
1354 * @return {!WebInspector.ElementsTreeElement} 1354 * @return {!Elements.ElementsTreeElement}
1355 */ 1355 */
1356 insertChildElement(treeElement, child, index, closingTag) { 1356 insertChildElement(treeElement, child, index, closingTag) {
1357 var newElement = this._createElementTreeElement(child, closingTag); 1357 var newElement = this._createElementTreeElement(child, closingTag);
1358 treeElement.insertChild(newElement, index); 1358 treeElement.insertChild(newElement, index);
1359 return newElement; 1359 return newElement;
1360 } 1360 }
1361 1361
1362 /** 1362 /**
1363 * @param {!WebInspector.ElementsTreeElement} treeElement 1363 * @param {!Elements.ElementsTreeElement} treeElement
1364 * @param {!WebInspector.ElementsTreeElement} child 1364 * @param {!Elements.ElementsTreeElement} child
1365 * @param {number} targetIndex 1365 * @param {number} targetIndex
1366 */ 1366 */
1367 _moveChild(treeElement, child, targetIndex) { 1367 _moveChild(treeElement, child, targetIndex) {
1368 if (treeElement.indexOfChild(child) === targetIndex) 1368 if (treeElement.indexOfChild(child) === targetIndex)
1369 return; 1369 return;
1370 var wasSelected = child.selected; 1370 var wasSelected = child.selected;
1371 if (child.parent) 1371 if (child.parent)
1372 child.parent.removeChild(child); 1372 child.parent.removeChild(child);
1373 treeElement.insertChild(child, targetIndex); 1373 treeElement.insertChild(child, targetIndex);
1374 if (wasSelected) 1374 if (wasSelected)
1375 child.select(); 1375 child.select();
1376 } 1376 }
1377 1377
1378 /** 1378 /**
1379 * @param {!WebInspector.ElementsTreeElement} treeElement 1379 * @param {!Elements.ElementsTreeElement} treeElement
1380 */ 1380 */
1381 _innerUpdateChildren(treeElement) { 1381 _innerUpdateChildren(treeElement) {
1382 if (this._treeElementsBeingUpdated.has(treeElement)) 1382 if (this._treeElementsBeingUpdated.has(treeElement))
1383 return; 1383 return;
1384 1384
1385 this._treeElementsBeingUpdated.add(treeElement); 1385 this._treeElementsBeingUpdated.add(treeElement);
1386 1386
1387 var node = treeElement.node(); 1387 var node = treeElement.node();
1388 var visibleChildren = this._visibleChildren(node); 1388 var visibleChildren = this._visibleChildren(node);
1389 var visibleChildrenSet = new Set(visibleChildren); 1389 var visibleChildrenSet = new Set(visibleChildren);
1390 1390
1391 // Remove any tree elements that no longer have this node as their parent an d save 1391 // Remove any tree elements that no longer have this node as their parent an d save
1392 // all existing elements that could be reused. This also removes closing tag element. 1392 // all existing elements that could be reused. This also removes closing tag element.
1393 var existingTreeElements = new Map(); 1393 var existingTreeElements = new Map();
1394 for (var i = treeElement.childCount() - 1; i >= 0; --i) { 1394 for (var i = treeElement.childCount() - 1; i >= 0; --i) {
1395 var existingTreeElement = treeElement.childAt(i); 1395 var existingTreeElement = treeElement.childAt(i);
1396 if (!(existingTreeElement instanceof WebInspector.ElementsTreeElement)) { 1396 if (!(existingTreeElement instanceof Elements.ElementsTreeElement)) {
1397 // Remove expand all button and shadow host toolbar. 1397 // Remove expand all button and shadow host toolbar.
1398 treeElement.removeChildAtIndex(i); 1398 treeElement.removeChildAtIndex(i);
1399 continue; 1399 continue;
1400 } 1400 }
1401 var elementsTreeElement = /** @type {!WebInspector.ElementsTreeElement} */ (existingTreeElement); 1401 var elementsTreeElement = /** @type {!Elements.ElementsTreeElement} */ (ex istingTreeElement);
1402 var existingNode = elementsTreeElement.node(); 1402 var existingNode = elementsTreeElement.node();
1403 1403
1404 if (visibleChildrenSet.has(existingNode)) { 1404 if (visibleChildrenSet.has(existingNode)) {
1405 existingTreeElements.set(existingNode, existingTreeElement); 1405 existingTreeElements.set(existingNode, existingTreeElement);
1406 continue; 1406 continue;
1407 } 1407 }
1408 1408
1409 treeElement.removeChildAtIndex(i); 1409 treeElement.removeChildAtIndex(i);
1410 } 1410 }
1411 1411
1412 for (var i = 0; i < visibleChildren.length && i < treeElement.expandedChildr enLimit(); ++i) { 1412 for (var i = 0; i < visibleChildren.length && i < treeElement.expandedChildr enLimit(); ++i) {
1413 var child = visibleChildren[i]; 1413 var child = visibleChildren[i];
1414 var existingTreeElement = existingTreeElements.get(child) || this.findTree Element(child); 1414 var existingTreeElement = existingTreeElements.get(child) || this.findTree Element(child);
1415 if (existingTreeElement && existingTreeElement !== treeElement) { 1415 if (existingTreeElement && existingTreeElement !== treeElement) {
1416 // If an existing element was found, just move it. 1416 // If an existing element was found, just move it.
1417 this._moveChild(treeElement, existingTreeElement, i); 1417 this._moveChild(treeElement, existingTreeElement, i);
1418 } else { 1418 } else {
1419 // No existing element found, insert a new element. 1419 // No existing element found, insert a new element.
1420 var newElement = this.insertChildElement(treeElement, child, i); 1420 var newElement = this.insertChildElement(treeElement, child, i);
1421 if (this._updateRecordForHighlight(node) && treeElement.expanded) 1421 if (this._updateRecordForHighlight(node) && treeElement.expanded)
1422 WebInspector.ElementsTreeElement.animateOnDOMUpdate(newElement); 1422 Elements.ElementsTreeElement.animateOnDOMUpdate(newElement);
1423 // If a node was inserted in the middle of existing list dynamically we might need to increase the limit. 1423 // If a node was inserted in the middle of existing list dynamically we might need to increase the limit.
1424 if (treeElement.childCount() > treeElement.expandedChildrenLimit()) 1424 if (treeElement.childCount() > treeElement.expandedChildrenLimit())
1425 this.setExpandedChildrenLimit(treeElement, treeElement.expandedChildre nLimit() + 1); 1425 this.setExpandedChildrenLimit(treeElement, treeElement.expandedChildre nLimit() + 1);
1426 } 1426 }
1427 } 1427 }
1428 1428
1429 // Update expand all button. 1429 // Update expand all button.
1430 var expandedChildCount = treeElement.childCount(); 1430 var expandedChildCount = treeElement.childCount();
1431 if (visibleChildren.length > expandedChildCount) { 1431 if (visibleChildren.length > expandedChildCount) {
1432 var targetButtonIndex = expandedChildCount; 1432 var targetButtonIndex = expandedChildCount;
1433 if (!treeElement.expandAllButtonElement) 1433 if (!treeElement.expandAllButtonElement)
1434 treeElement.expandAllButtonElement = this._createExpandAllButtonTreeElem ent(treeElement); 1434 treeElement.expandAllButtonElement = this._createExpandAllButtonTreeElem ent(treeElement);
1435 treeElement.insertChild(treeElement.expandAllButtonElement, targetButtonIn dex); 1435 treeElement.insertChild(treeElement.expandAllButtonElement, targetButtonIn dex);
1436 treeElement.expandAllButtonElement.button.textContent = 1436 treeElement.expandAllButtonElement.button.textContent =
1437 WebInspector.UIString('Show All Nodes (%d More)', visibleChildren.leng th - expandedChildCount); 1437 Common.UIString('Show All Nodes (%d More)', visibleChildren.length - e xpandedChildCount);
1438 } else if (treeElement.expandAllButtonElement) { 1438 } else if (treeElement.expandAllButtonElement) {
1439 delete treeElement.expandAllButtonElement; 1439 delete treeElement.expandAllButtonElement;
1440 } 1440 }
1441 1441
1442 // Insert shortcuts to distrubuted children. 1442 // Insert shortcuts to distrubuted children.
1443 if (node.isInsertionPoint()) { 1443 if (node.isInsertionPoint()) {
1444 for (var distributedNode of node.distributedNodes()) 1444 for (var distributedNode of node.distributedNodes())
1445 treeElement.appendChild(new WebInspector.ElementsTreeOutline.ShortcutTre eElement(distributedNode)); 1445 treeElement.appendChild(new Elements.ElementsTreeOutline.ShortcutTreeEle ment(distributedNode));
1446 } 1446 }
1447 1447
1448 // Insert close tag. 1448 // Insert close tag.
1449 if (node.nodeType() === Node.ELEMENT_NODE && treeElement.isExpandable()) 1449 if (node.nodeType() === Node.ELEMENT_NODE && treeElement.isExpandable())
1450 this.insertChildElement(treeElement, node, treeElement.childCount(), true) ; 1450 this.insertChildElement(treeElement, node, treeElement.childCount(), true) ;
1451 1451
1452 this._treeElementsBeingUpdated.delete(treeElement); 1452 this._treeElementsBeingUpdated.delete(treeElement);
1453 } 1453 }
1454 1454
1455 /** 1455 /**
1456 * @param {!WebInspector.Event} event 1456 * @param {!Common.Event} event
1457 */ 1457 */
1458 _markersChanged(event) { 1458 _markersChanged(event) {
1459 var node = /** @type {!WebInspector.DOMNode} */ (event.data); 1459 var node = /** @type {!SDK.DOMNode} */ (event.data);
1460 var treeElement = node[this._treeElementSymbol]; 1460 var treeElement = node[this._treeElementSymbol];
1461 if (treeElement) 1461 if (treeElement)
1462 treeElement.updateDecorations(); 1462 treeElement.updateDecorations();
1463 } 1463 }
1464 }; 1464 };
1465 1465
1466 WebInspector.ElementsTreeOutline._treeOutlineSymbol = Symbol('treeOutline'); 1466 Elements.ElementsTreeOutline._treeOutlineSymbol = Symbol('treeOutline');
1467 1467
1468 1468
1469 /** @typedef {{node: !WebInspector.DOMNode, isCut: boolean}} */ 1469 /** @typedef {{node: !SDK.DOMNode, isCut: boolean}} */
1470 WebInspector.ElementsTreeOutline.ClipboardData; 1470 Elements.ElementsTreeOutline.ClipboardData;
1471 1471
1472 /** @enum {symbol} */ 1472 /** @enum {symbol} */
1473 WebInspector.ElementsTreeOutline.Events = { 1473 Elements.ElementsTreeOutline.Events = {
1474 SelectedNodeChanged: Symbol('SelectedNodeChanged'), 1474 SelectedNodeChanged: Symbol('SelectedNodeChanged'),
1475 ElementsTreeUpdated: Symbol('ElementsTreeUpdated') 1475 ElementsTreeUpdated: Symbol('ElementsTreeUpdated')
1476 }; 1476 };
1477 1477
1478 /** 1478 /**
1479 * @const 1479 * @const
1480 * @type {!Object.<string, string>} 1480 * @type {!Object.<string, string>}
1481 */ 1481 */
1482 WebInspector.ElementsTreeOutline.MappedCharToEntity = { 1482 Elements.ElementsTreeOutline.MappedCharToEntity = {
1483 '\u00a0': 'nbsp', 1483 '\u00a0': 'nbsp',
1484 '\u0093': '#147', // <control> 1484 '\u0093': '#147', // <control>
1485 '\u00ad': 'shy', 1485 '\u00ad': 'shy',
1486 '\u2002': 'ensp', 1486 '\u2002': 'ensp',
1487 '\u2003': 'emsp', 1487 '\u2003': 'emsp',
1488 '\u2009': 'thinsp', 1488 '\u2009': 'thinsp',
1489 '\u200a': '#8202', // Hairspace 1489 '\u200a': '#8202', // Hairspace
1490 '\u200b': '#8203', // ZWSP 1490 '\u200b': '#8203', // ZWSP
1491 '\u200c': 'zwnj', 1491 '\u200c': 'zwnj',
1492 '\u200d': 'zwj', 1492 '\u200d': 'zwj',
1493 '\u200e': 'lrm', 1493 '\u200e': 'lrm',
1494 '\u200f': 'rlm', 1494 '\u200f': 'rlm',
1495 '\u202a': '#8234', // LRE 1495 '\u202a': '#8234', // LRE
1496 '\u202b': '#8235', // RLE 1496 '\u202b': '#8235', // RLE
1497 '\u202c': '#8236', // PDF 1497 '\u202c': '#8236', // PDF
1498 '\u202d': '#8237', // LRO 1498 '\u202d': '#8237', // LRO
1499 '\u202e': '#8238', // RLO 1499 '\u202e': '#8238', // RLO
1500 '\ufeff': '#65279' // BOM 1500 '\ufeff': '#65279' // BOM
1501 }; 1501 };
1502 1502
1503 /** 1503 /**
1504 * @unrestricted 1504 * @unrestricted
1505 */ 1505 */
1506 WebInspector.ElementsTreeOutline.UpdateRecord = class { 1506 Elements.ElementsTreeOutline.UpdateRecord = class {
1507 /** 1507 /**
1508 * @param {string} attrName 1508 * @param {string} attrName
1509 */ 1509 */
1510 attributeModified(attrName) { 1510 attributeModified(attrName) {
1511 if (this._removedAttributes && this._removedAttributes.has(attrName)) 1511 if (this._removedAttributes && this._removedAttributes.has(attrName))
1512 this._removedAttributes.delete(attrName); 1512 this._removedAttributes.delete(attrName);
1513 if (!this._modifiedAttributes) 1513 if (!this._modifiedAttributes)
1514 this._modifiedAttributes = /** @type {!Set.<string>} */ (new Set()); 1514 this._modifiedAttributes = /** @type {!Set.<string>} */ (new Set());
1515 this._modifiedAttributes.add(attrName); 1515 this._modifiedAttributes.add(attrName);
1516 } 1516 }
1517 1517
1518 /** 1518 /**
1519 * @param {string} attrName 1519 * @param {string} attrName
1520 */ 1520 */
1521 attributeRemoved(attrName) { 1521 attributeRemoved(attrName) {
1522 if (this._modifiedAttributes && this._modifiedAttributes.has(attrName)) 1522 if (this._modifiedAttributes && this._modifiedAttributes.has(attrName))
1523 this._modifiedAttributes.delete(attrName); 1523 this._modifiedAttributes.delete(attrName);
1524 if (!this._removedAttributes) 1524 if (!this._removedAttributes)
1525 this._removedAttributes = /** @type {!Set.<string>} */ (new Set()); 1525 this._removedAttributes = /** @type {!Set.<string>} */ (new Set());
1526 this._removedAttributes.add(attrName); 1526 this._removedAttributes.add(attrName);
1527 } 1527 }
1528 1528
1529 /** 1529 /**
1530 * @param {!WebInspector.DOMNode} node 1530 * @param {!SDK.DOMNode} node
1531 */ 1531 */
1532 nodeInserted(node) { 1532 nodeInserted(node) {
1533 this._hasChangedChildren = true; 1533 this._hasChangedChildren = true;
1534 } 1534 }
1535 1535
1536 nodeRemoved(node) { 1536 nodeRemoved(node) {
1537 this._hasChangedChildren = true; 1537 this._hasChangedChildren = true;
1538 this._hasRemovedChildren = true; 1538 this._hasRemovedChildren = true;
1539 } 1539 }
1540 1540
(...skipping 36 matching lines...) Expand 10 before | Expand all | Expand 10 after
1577 1577
1578 /** 1578 /**
1579 * @return {boolean} 1579 * @return {boolean}
1580 */ 1580 */
1581 hasRemovedChildren() { 1581 hasRemovedChildren() {
1582 return !!this._hasRemovedChildren; 1582 return !!this._hasRemovedChildren;
1583 } 1583 }
1584 }; 1584 };
1585 1585
1586 /** 1586 /**
1587 * @implements {WebInspector.Renderer} 1587 * @implements {Common.Renderer}
1588 * @unrestricted 1588 * @unrestricted
1589 */ 1589 */
1590 WebInspector.ElementsTreeOutline.Renderer = class { 1590 Elements.ElementsTreeOutline.Renderer = class {
1591 /** 1591 /**
1592 * @override 1592 * @override
1593 * @param {!Object} object 1593 * @param {!Object} object
1594 * @return {!Promise.<!Element>} 1594 * @return {!Promise.<!Element>}
1595 */ 1595 */
1596 render(object) { 1596 render(object) {
1597 return new Promise(renderPromise); 1597 return new Promise(renderPromise);
1598 1598
1599 /** 1599 /**
1600 * @param {function(!Element)} resolve 1600 * @param {function(!Element)} resolve
1601 * @param {function(!Error)} reject 1601 * @param {function(!Error)} reject
1602 */ 1602 */
1603 function renderPromise(resolve, reject) { 1603 function renderPromise(resolve, reject) {
1604 if (object instanceof WebInspector.DOMNode) { 1604 if (object instanceof SDK.DOMNode) {
1605 onNodeResolved(/** @type {!WebInspector.DOMNode} */ (object)); 1605 onNodeResolved(/** @type {!SDK.DOMNode} */ (object));
1606 } else if (object instanceof WebInspector.DeferredDOMNode) { 1606 } else if (object instanceof SDK.DeferredDOMNode) {
1607 (/** @type {!WebInspector.DeferredDOMNode} */ (object)).resolve(onNodeRe solved); 1607 (/** @type {!SDK.DeferredDOMNode} */ (object)).resolve(onNodeResolved);
1608 } else if (object instanceof WebInspector.RemoteObject) { 1608 } else if (object instanceof SDK.RemoteObject) {
1609 var domModel = WebInspector.DOMModel.fromTarget((/** @type {!WebInspecto r.RemoteObject} */ (object)).target()); 1609 var domModel = SDK.DOMModel.fromTarget((/** @type {!SDK.RemoteObject} */ (object)).target());
1610 if (domModel) 1610 if (domModel)
1611 domModel.pushObjectAsNodeToFrontend(object, onNodeResolved); 1611 domModel.pushObjectAsNodeToFrontend(object, onNodeResolved);
1612 else 1612 else
1613 reject(new Error('No dom model for given JS object target found.')); 1613 reject(new Error('No dom model for given JS object target found.'));
1614 } else { 1614 } else {
1615 reject(new Error('Can\'t reveal not a node.')); 1615 reject(new Error('Can\'t reveal not a node.'));
1616 } 1616 }
1617 1617
1618 /** 1618 /**
1619 * @param {?WebInspector.DOMNode} node 1619 * @param {?SDK.DOMNode} node
1620 */ 1620 */
1621 function onNodeResolved(node) { 1621 function onNodeResolved(node) {
1622 if (!node) { 1622 if (!node) {
1623 reject(new Error('Could not resolve node.')); 1623 reject(new Error('Could not resolve node.'));
1624 return; 1624 return;
1625 } 1625 }
1626 var treeOutline = new WebInspector.ElementsTreeOutline(node.domModel(), false, false); 1626 var treeOutline = new Elements.ElementsTreeOutline(node.domModel(), fals e, false);
1627 treeOutline.rootDOMNode = node; 1627 treeOutline.rootDOMNode = node;
1628 if (!treeOutline.firstChild().isExpandable()) 1628 if (!treeOutline.firstChild().isExpandable())
1629 treeOutline._element.classList.add('single-node'); 1629 treeOutline._element.classList.add('single-node');
1630 treeOutline.setVisible(true); 1630 treeOutline.setVisible(true);
1631 treeOutline.element.treeElementForTest = treeOutline.firstChild(); 1631 treeOutline.element.treeElementForTest = treeOutline.firstChild();
1632 resolve(treeOutline.element); 1632 resolve(treeOutline.element);
1633 } 1633 }
1634 } 1634 }
1635 } 1635 }
1636 }; 1636 };
1637 1637
1638 /** 1638 /**
1639 * @unrestricted 1639 * @unrestricted
1640 */ 1640 */
1641 WebInspector.ElementsTreeOutline.ShortcutTreeElement = class extends TreeElement { 1641 Elements.ElementsTreeOutline.ShortcutTreeElement = class extends TreeElement {
1642 /** 1642 /**
1643 * @param {!WebInspector.DOMNodeShortcut} nodeShortcut 1643 * @param {!SDK.DOMNodeShortcut} nodeShortcut
1644 */ 1644 */
1645 constructor(nodeShortcut) { 1645 constructor(nodeShortcut) {
1646 super(''); 1646 super('');
1647 this.listItemElement.createChild('div', 'selection fill'); 1647 this.listItemElement.createChild('div', 'selection fill');
1648 var title = this.listItemElement.createChild('span', 'elements-tree-shortcut -title'); 1648 var title = this.listItemElement.createChild('span', 'elements-tree-shortcut -title');
1649 var text = nodeShortcut.nodeName.toLowerCase(); 1649 var text = nodeShortcut.nodeName.toLowerCase();
1650 if (nodeShortcut.nodeType === Node.ELEMENT_NODE) 1650 if (nodeShortcut.nodeType === Node.ELEMENT_NODE)
1651 text = '<' + text + '>'; 1651 text = '<' + text + '>';
1652 title.textContent = '\u21AA ' + text; 1652 title.textContent = '\u21AA ' + text;
1653 1653
1654 var link = WebInspector.DOMPresentationUtils.linkifyDeferredNodeReference(no deShortcut.deferredNode); 1654 var link = Components.DOMPresentationUtils.linkifyDeferredNodeReference(node Shortcut.deferredNode);
1655 this.listItemElement.createTextChild(' '); 1655 this.listItemElement.createTextChild(' ');
1656 link.classList.add('elements-tree-shortcut-link'); 1656 link.classList.add('elements-tree-shortcut-link');
1657 link.textContent = WebInspector.UIString('reveal'); 1657 link.textContent = Common.UIString('reveal');
1658 this.listItemElement.appendChild(link); 1658 this.listItemElement.appendChild(link);
1659 this._nodeShortcut = nodeShortcut; 1659 this._nodeShortcut = nodeShortcut;
1660 } 1660 }
1661 1661
1662 /** 1662 /**
1663 * @return {boolean} 1663 * @return {boolean}
1664 */ 1664 */
1665 get hovered() { 1665 get hovered() {
1666 return this._hovered; 1666 return this._hovered;
1667 } 1667 }
(...skipping 19 matching lines...) Expand all
1687 * @override 1687 * @override
1688 * @param {boolean=} selectedByUser 1688 * @param {boolean=} selectedByUser
1689 * @return {boolean} 1689 * @return {boolean}
1690 */ 1690 */
1691 onselect(selectedByUser) { 1691 onselect(selectedByUser) {
1692 if (!selectedByUser) 1692 if (!selectedByUser)
1693 return true; 1693 return true;
1694 this._nodeShortcut.deferredNode.highlight(); 1694 this._nodeShortcut.deferredNode.highlight();
1695 this._nodeShortcut.deferredNode.resolve(resolved.bind(this)); 1695 this._nodeShortcut.deferredNode.resolve(resolved.bind(this));
1696 /** 1696 /**
1697 * @param {?WebInspector.DOMNode} node 1697 * @param {?SDK.DOMNode} node
1698 * @this {WebInspector.ElementsTreeOutline.ShortcutTreeElement} 1698 * @this {Elements.ElementsTreeOutline.ShortcutTreeElement}
1699 */ 1699 */
1700 function resolved(node) { 1700 function resolved(node) {
1701 if (node) { 1701 if (node) {
1702 this.treeOutline._selectedDOMNode = node; 1702 this.treeOutline._selectedDOMNode = node;
1703 this.treeOutline._selectedNodeChanged(); 1703 this.treeOutline._selectedNodeChanged();
1704 } 1704 }
1705 } 1705 }
1706 return true; 1706 return true;
1707 } 1707 }
1708 }; 1708 };
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698