OLD | NEW |
1 /* | 1 /* |
2 * Copyright (C) 2011 Google Inc. All rights reserved. | 2 * Copyright (C) 2011 Google Inc. All rights reserved. |
3 * Copyright (C) 2007, 2008 Apple Inc. All rights reserved. | 3 * Copyright (C) 2007, 2008 Apple Inc. All rights reserved. |
4 * Copyright (C) 2008 Matt Lilek <webkit@mattlilek.com> | 4 * Copyright (C) 2008 Matt Lilek <webkit@mattlilek.com> |
5 * Copyright (C) 2009 Joseph Pecoraro | 5 * Copyright (C) 2009 Joseph Pecoraro |
6 * | 6 * |
7 * Redistribution and use in source and binary forms, with or without | 7 * Redistribution and use in source and binary forms, with or without |
8 * modification, are permitted provided that the following conditions | 8 * modification, are permitted provided that the following conditions |
9 * are met: | 9 * are met: |
10 * | 10 * |
(...skipping 11 matching lines...) Expand all Loading... |
22 * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE | 22 * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE |
23 * DISCLAIMED. IN NO EVENT SHALL APPLE OR ITS CONTRIBUTORS BE LIABLE FOR ANY | 23 * DISCLAIMED. IN NO EVENT SHALL APPLE OR ITS CONTRIBUTORS BE LIABLE FOR ANY |
24 * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES | 24 * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES |
25 * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; | 25 * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; |
26 * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND | 26 * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND |
27 * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT | 27 * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT |
28 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF | 28 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF |
29 * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. | 29 * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. |
30 */ | 30 */ |
31 | 31 |
32 WebInspector.DOMPresentationUtils = {} | 32 WebInspector.DOMPresentationUtils = {}; |
33 | 33 |
34 /** | 34 /** |
35 * @param {!WebInspector.DOMNode} node | 35 * @param {!WebInspector.DOMNode} node |
36 * @param {!Element} parentElement | 36 * @param {!Element} parentElement |
37 */ | 37 */ |
38 WebInspector.DOMPresentationUtils.decorateNodeLabel = function(node, parentEleme
nt) | 38 WebInspector.DOMPresentationUtils.decorateNodeLabel = function(node, parentEleme
nt) |
39 { | 39 { |
40 var originalNode = node; | 40 var originalNode = node; |
41 var isPseudo = node.nodeType() === Node.ELEMENT_NODE && node.pseudoType(); | 41 var isPseudo = node.nodeType() === Node.ELEMENT_NODE && node.pseudoType(); |
42 if (isPseudo && node.parentNode) | 42 if (isPseudo && node.parentNode) |
(...skipping 34 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
77 } | 77 } |
78 } | 78 } |
79 | 79 |
80 if (isPseudo) { | 80 if (isPseudo) { |
81 var pseudoElement = parentElement.createChild("span", "extra node-label-
pseudo"); | 81 var pseudoElement = parentElement.createChild("span", "extra node-label-
pseudo"); |
82 var pseudoText = "::" + originalNode.pseudoType(); | 82 var pseudoText = "::" + originalNode.pseudoType(); |
83 pseudoElement.createTextChild(pseudoText); | 83 pseudoElement.createTextChild(pseudoText); |
84 title += pseudoText; | 84 title += pseudoText; |
85 } | 85 } |
86 parentElement.title = title; | 86 parentElement.title = title; |
87 } | 87 }; |
88 | 88 |
89 /** | 89 /** |
90 * @param {!Element} container | 90 * @param {!Element} container |
91 * @param {string} nodeTitle | 91 * @param {string} nodeTitle |
92 */ | 92 */ |
93 WebInspector.DOMPresentationUtils.createSpansForNodeTitle = function(container,
nodeTitle) | 93 WebInspector.DOMPresentationUtils.createSpansForNodeTitle = function(container,
nodeTitle) |
94 { | 94 { |
95 var match = nodeTitle.match(/([^#.]+)(#[^.]+)?(\..*)?/); | 95 var match = nodeTitle.match(/([^#.]+)(#[^.]+)?(\..*)?/); |
96 container.createChild("span", "webkit-html-tag-name").textContent = match[1]
; | 96 container.createChild("span", "webkit-html-tag-name").textContent = match[1]
; |
97 if (match[2]) | 97 if (match[2]) |
98 container.createChild("span", "webkit-html-attribute-value").textContent
= match[2]; | 98 container.createChild("span", "webkit-html-attribute-value").textContent
= match[2]; |
99 if (match[3]) | 99 if (match[3]) |
100 container.createChild("span", "webkit-html-attribute-name").textContent
= match[3]; | 100 container.createChild("span", "webkit-html-attribute-name").textContent
= match[3]; |
101 } | 101 }; |
102 | 102 |
103 /** | 103 /** |
104 * @param {?WebInspector.DOMNode} node | 104 * @param {?WebInspector.DOMNode} node |
105 * @param {string=} idref | 105 * @param {string=} idref |
106 * @return {!Node} | 106 * @return {!Node} |
107 */ | 107 */ |
108 WebInspector.DOMPresentationUtils.linkifyNodeReference = function(node, idref) | 108 WebInspector.DOMPresentationUtils.linkifyNodeReference = function(node, idref) |
109 { | 109 { |
110 if (!node) | 110 if (!node) |
111 return createTextNode(WebInspector.UIString("<node>")); | 111 return createTextNode(WebInspector.UIString("<node>")); |
112 | 112 |
113 var root = createElementWithClass("span", "monospace"); | 113 var root = createElementWithClass("span", "monospace"); |
114 var shadowRoot = WebInspector.createShadowRootWithCoreStyles(root, "componen
ts/domUtils.css"); | 114 var shadowRoot = WebInspector.createShadowRootWithCoreStyles(root, "componen
ts/domUtils.css"); |
115 var link = shadowRoot.createChild("div", "node-link"); | 115 var link = shadowRoot.createChild("div", "node-link"); |
116 | 116 |
117 if (idref) | 117 if (idref) |
118 link.createChild("span", "node-label-id").createTextChild("#" + idref); | 118 link.createChild("span", "node-label-id").createTextChild("#" + idref); |
119 else | 119 else |
120 WebInspector.DOMPresentationUtils.decorateNodeLabel(node, link); | 120 WebInspector.DOMPresentationUtils.decorateNodeLabel(node, link); |
121 | 121 |
122 link.addEventListener("click", WebInspector.Revealer.reveal.bind(WebInspecto
r.Revealer, node, undefined), false); | 122 link.addEventListener("click", WebInspector.Revealer.reveal.bind(WebInspecto
r.Revealer, node, undefined), false); |
123 link.addEventListener("mouseover", node.highlight.bind(node, undefined, unde
fined), false); | 123 link.addEventListener("mouseover", node.highlight.bind(node, undefined, unde
fined), false); |
124 link.addEventListener("mouseleave", WebInspector.DOMModel.hideDOMNodeHighlig
ht.bind(WebInspector.DOMModel), false); | 124 link.addEventListener("mouseleave", WebInspector.DOMModel.hideDOMNodeHighlig
ht.bind(WebInspector.DOMModel), false); |
125 | 125 |
126 return root; | 126 return root; |
127 } | 127 }; |
128 | 128 |
129 /** | 129 /** |
130 * @param {!WebInspector.DeferredDOMNode} deferredNode | 130 * @param {!WebInspector.DeferredDOMNode} deferredNode |
131 * @return {!Node} | 131 * @return {!Node} |
132 */ | 132 */ |
133 WebInspector.DOMPresentationUtils.linkifyDeferredNodeReference = function(deferr
edNode) | 133 WebInspector.DOMPresentationUtils.linkifyDeferredNodeReference = function(deferr
edNode) |
134 { | 134 { |
135 var root = createElement("div"); | 135 var root = createElement("div"); |
136 var shadowRoot = WebInspector.createShadowRootWithCoreStyles(root, "componen
ts/domUtils.css"); | 136 var shadowRoot = WebInspector.createShadowRootWithCoreStyles(root, "componen
ts/domUtils.css"); |
137 var link = shadowRoot.createChild("div", "node-link"); | 137 var link = shadowRoot.createChild("div", "node-link"); |
138 link.createChild("content"); | 138 link.createChild("content"); |
139 link.addEventListener("click", deferredNode.resolve.bind(deferredNode, onDef
erredNodeResolved), false); | 139 link.addEventListener("click", deferredNode.resolve.bind(deferredNode, onDef
erredNodeResolved), false); |
140 link.addEventListener("mousedown", (e) => e.consume(), false); | 140 link.addEventListener("mousedown", (e) => e.consume(), false); |
141 | 141 |
142 /** | 142 /** |
143 * @param {?WebInspector.DOMNode} node | 143 * @param {?WebInspector.DOMNode} node |
144 */ | 144 */ |
145 function onDeferredNodeResolved(node) | 145 function onDeferredNodeResolved(node) |
146 { | 146 { |
147 WebInspector.Revealer.reveal(node); | 147 WebInspector.Revealer.reveal(node); |
148 } | 148 } |
149 | 149 |
150 return root; | 150 return root; |
151 } | 151 }; |
152 | 152 |
153 /** | 153 /** |
154 * @param {!WebInspector.Target} target | 154 * @param {!WebInspector.Target} target |
155 * @param {string} originalImageURL | 155 * @param {string} originalImageURL |
156 * @param {boolean} showDimensions | 156 * @param {boolean} showDimensions |
157 * @param {function(!Element=)} userCallback | 157 * @param {function(!Element=)} userCallback |
158 * @param {!Object=} precomputedFeatures | 158 * @param {!Object=} precomputedFeatures |
159 */ | 159 */ |
160 WebInspector.DOMPresentationUtils.buildImagePreviewContents = function(target, o
riginalImageURL, showDimensions, userCallback, precomputedFeatures) | 160 WebInspector.DOMPresentationUtils.buildImagePreviewContents = function(target, o
riginalImageURL, showDimensions, userCallback, precomputedFeatures) |
161 { | 161 { |
(...skipping 49 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
211 description = WebInspector.UIString("%d \xd7 %d pixels (Natural:
%d \xd7 %d pixels)", offsetWidth, offsetHeight, naturalWidth, naturalHeight); | 211 description = WebInspector.UIString("%d \xd7 %d pixels (Natural:
%d \xd7 %d pixels)", offsetWidth, offsetHeight, naturalWidth, naturalHeight); |
212 } | 212 } |
213 | 213 |
214 container.createChild("tr").createChild("td", "image-container").appendC
hild(imageElement); | 214 container.createChild("tr").createChild("td", "image-container").appendC
hild(imageElement); |
215 if (description) | 215 if (description) |
216 container.createChild("tr").createChild("td").createChild("span", "d
escription").textContent = description; | 216 container.createChild("tr").createChild("td").createChild("span", "d
escription").textContent = description; |
217 if (imageURL !== originalImageURL) | 217 if (imageURL !== originalImageURL) |
218 container.createChild("tr").createChild("td").createChild("span", "d
escription").textContent = String.sprintf("currentSrc: %s", imageURL.trimMiddle(
100)); | 218 container.createChild("tr").createChild("td").createChild("span", "d
escription").textContent = String.sprintf("currentSrc: %s", imageURL.trimMiddle(
100)); |
219 userCallback(container); | 219 userCallback(container); |
220 } | 220 } |
221 } | 221 }; |
222 | 222 |
223 /** | 223 /** |
224 * @param {!WebInspector.Target} target | 224 * @param {!WebInspector.Target} target |
225 * @param {!WebInspector.Linkifier} linkifier | 225 * @param {!WebInspector.Linkifier} linkifier |
226 * @param {!RuntimeAgent.StackTrace=} stackTrace | 226 * @param {!RuntimeAgent.StackTrace=} stackTrace |
227 * @return {!Element} | 227 * @return {!Element} |
228 */ | 228 */ |
229 WebInspector.DOMPresentationUtils.buildStackTracePreviewContents = function(targ
et, linkifier, stackTrace) | 229 WebInspector.DOMPresentationUtils.buildStackTracePreviewContents = function(targ
et, linkifier, stackTrace) |
230 { | 230 { |
231 var element = createElement("span"); | 231 var element = createElement("span"); |
(...skipping 33 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
265 var row = contentElement.createChild("tr"); | 265 var row = contentElement.createChild("tr"); |
266 row.createChild("td").textContent = "\n"; | 266 row.createChild("td").textContent = "\n"; |
267 row.createChild("td", "stack-preview-async-description").textContent = W
ebInspector.asyncStackTraceLabel(asyncStackTrace.description); | 267 row.createChild("td", "stack-preview-async-description").textContent = W
ebInspector.asyncStackTraceLabel(asyncStackTrace.description); |
268 row.createChild("td"); | 268 row.createChild("td"); |
269 row.createChild("td"); | 269 row.createChild("td"); |
270 appendStackTrace(asyncStackTrace); | 270 appendStackTrace(asyncStackTrace); |
271 asyncStackTrace = asyncStackTrace.parent; | 271 asyncStackTrace = asyncStackTrace.parent; |
272 } | 272 } |
273 | 273 |
274 return element; | 274 return element; |
275 } | 275 }; |
276 | 276 |
277 /** | 277 /** |
278 * @param {!WebInspector.DOMNode} node | 278 * @param {!WebInspector.DOMNode} node |
279 * @param {boolean=} justSelector | 279 * @param {boolean=} justSelector |
280 * @return {string} | 280 * @return {string} |
281 */ | 281 */ |
282 WebInspector.DOMPresentationUtils.fullQualifiedSelector = function(node, justSel
ector) | 282 WebInspector.DOMPresentationUtils.fullQualifiedSelector = function(node, justSel
ector) |
283 { | 283 { |
284 if (node.nodeType() !== Node.ELEMENT_NODE) | 284 if (node.nodeType() !== Node.ELEMENT_NODE) |
285 return node.localName() || node.nodeName().toLowerCase(); | 285 return node.localName() || node.nodeName().toLowerCase(); |
286 return WebInspector.DOMPresentationUtils.cssPath(node, justSelector); | 286 return WebInspector.DOMPresentationUtils.cssPath(node, justSelector); |
287 } | 287 }; |
288 | 288 |
289 /** | 289 /** |
290 * @param {!WebInspector.DOMNode} node | 290 * @param {!WebInspector.DOMNode} node |
291 * @return {string} | 291 * @return {string} |
292 */ | 292 */ |
293 WebInspector.DOMPresentationUtils.simpleSelector = function(node) | 293 WebInspector.DOMPresentationUtils.simpleSelector = function(node) |
294 { | 294 { |
295 var lowerCaseName = node.localName() || node.nodeName().toLowerCase(); | 295 var lowerCaseName = node.localName() || node.nodeName().toLowerCase(); |
296 if (node.nodeType() !== Node.ELEMENT_NODE) | 296 if (node.nodeType() !== Node.ELEMENT_NODE) |
297 return lowerCaseName; | 297 return lowerCaseName; |
298 if (lowerCaseName === "input" && node.getAttribute("type") && !node.getAttri
bute("id") && !node.getAttribute("class")) | 298 if (lowerCaseName === "input" && node.getAttribute("type") && !node.getAttri
bute("id") && !node.getAttribute("class")) |
299 return lowerCaseName + "[type=\"" + node.getAttribute("type") + "\"]"; | 299 return lowerCaseName + "[type=\"" + node.getAttribute("type") + "\"]"; |
300 if (node.getAttribute("id")) | 300 if (node.getAttribute("id")) |
301 return lowerCaseName + "#" + node.getAttribute("id"); | 301 return lowerCaseName + "#" + node.getAttribute("id"); |
302 if (node.getAttribute("class")) | 302 if (node.getAttribute("class")) |
303 return (lowerCaseName === "div" ? "" : lowerCaseName) + "." + node.getAt
tribute("class").trim().replace(/\s+/g, "."); | 303 return (lowerCaseName === "div" ? "" : lowerCaseName) + "." + node.getAt
tribute("class").trim().replace(/\s+/g, "."); |
304 return lowerCaseName; | 304 return lowerCaseName; |
305 } | 305 }; |
306 | 306 |
307 /** | 307 /** |
308 * @param {!WebInspector.DOMNode} node | 308 * @param {!WebInspector.DOMNode} node |
309 * @param {boolean=} optimized | 309 * @param {boolean=} optimized |
310 * @return {string} | 310 * @return {string} |
311 */ | 311 */ |
312 WebInspector.DOMPresentationUtils.cssPath = function(node, optimized) | 312 WebInspector.DOMPresentationUtils.cssPath = function(node, optimized) |
313 { | 313 { |
314 if (node.nodeType() !== Node.ELEMENT_NODE) | 314 if (node.nodeType() !== Node.ELEMENT_NODE) |
315 return ""; | 315 return ""; |
316 | 316 |
317 var steps = []; | 317 var steps = []; |
318 var contextNode = node; | 318 var contextNode = node; |
319 while (contextNode) { | 319 while (contextNode) { |
320 var step = WebInspector.DOMPresentationUtils._cssPathStep(contextNode, !
!optimized, contextNode === node); | 320 var step = WebInspector.DOMPresentationUtils._cssPathStep(contextNode, !
!optimized, contextNode === node); |
321 if (!step) | 321 if (!step) |
322 break; // Error - bail out early. | 322 break; // Error - bail out early. |
323 steps.push(step); | 323 steps.push(step); |
324 if (step.optimized) | 324 if (step.optimized) |
325 break; | 325 break; |
326 contextNode = contextNode.parentNode; | 326 contextNode = contextNode.parentNode; |
327 } | 327 } |
328 | 328 |
329 steps.reverse(); | 329 steps.reverse(); |
330 return steps.join(" > "); | 330 return steps.join(" > "); |
331 } | 331 }; |
332 | 332 |
333 /** | 333 /** |
334 * @param {!WebInspector.DOMNode} node | 334 * @param {!WebInspector.DOMNode} node |
335 * @param {boolean} optimized | 335 * @param {boolean} optimized |
336 * @param {boolean} isTargetNode | 336 * @param {boolean} isTargetNode |
337 * @return {?WebInspector.DOMNodePathStep} | 337 * @return {?WebInspector.DOMNodePathStep} |
338 */ | 338 */ |
339 WebInspector.DOMPresentationUtils._cssPathStep = function(node, optimized, isTar
getNode) | 339 WebInspector.DOMPresentationUtils._cssPathStep = function(node, optimized, isTar
getNode) |
340 { | 340 { |
341 if (node.nodeType() !== Node.ELEMENT_NODE) | 341 if (node.nodeType() !== Node.ELEMENT_NODE) |
(...skipping 139 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
481 if (isTargetNode && nodeName.toLowerCase() === "input" && node.getAttribute(
"type") && !node.getAttribute("id") && !node.getAttribute("class")) | 481 if (isTargetNode && nodeName.toLowerCase() === "input" && node.getAttribute(
"type") && !node.getAttribute("id") && !node.getAttribute("class")) |
482 result += "[type=\"" + node.getAttribute("type") + "\"]"; | 482 result += "[type=\"" + node.getAttribute("type") + "\"]"; |
483 if (needsNthChild) { | 483 if (needsNthChild) { |
484 result += ":nth-child(" + (ownIndex + 1) + ")"; | 484 result += ":nth-child(" + (ownIndex + 1) + ")"; |
485 } else if (needsClassNames) { | 485 } else if (needsClassNames) { |
486 for (var prefixedName of prefixedOwnClassNamesArray) | 486 for (var prefixedName of prefixedOwnClassNamesArray) |
487 result += "." + escapeIdentifierIfNeeded(prefixedName.substr(1)); | 487 result += "." + escapeIdentifierIfNeeded(prefixedName.substr(1)); |
488 } | 488 } |
489 | 489 |
490 return new WebInspector.DOMNodePathStep(result, false); | 490 return new WebInspector.DOMNodePathStep(result, false); |
491 } | 491 }; |
492 | 492 |
493 /** | 493 /** |
494 * @param {!WebInspector.DOMNode} node | 494 * @param {!WebInspector.DOMNode} node |
495 * @param {boolean=} optimized | 495 * @param {boolean=} optimized |
496 * @return {string} | 496 * @return {string} |
497 */ | 497 */ |
498 WebInspector.DOMPresentationUtils.xPath = function(node, optimized) | 498 WebInspector.DOMPresentationUtils.xPath = function(node, optimized) |
499 { | 499 { |
500 if (node.nodeType() === Node.DOCUMENT_NODE) | 500 if (node.nodeType() === Node.DOCUMENT_NODE) |
501 return "/"; | 501 return "/"; |
502 | 502 |
503 var steps = []; | 503 var steps = []; |
504 var contextNode = node; | 504 var contextNode = node; |
505 while (contextNode) { | 505 while (contextNode) { |
506 var step = WebInspector.DOMPresentationUtils._xPathValue(contextNode, op
timized); | 506 var step = WebInspector.DOMPresentationUtils._xPathValue(contextNode, op
timized); |
507 if (!step) | 507 if (!step) |
508 break; // Error - bail out early. | 508 break; // Error - bail out early. |
509 steps.push(step); | 509 steps.push(step); |
510 if (step.optimized) | 510 if (step.optimized) |
511 break; | 511 break; |
512 contextNode = contextNode.parentNode; | 512 contextNode = contextNode.parentNode; |
513 } | 513 } |
514 | 514 |
515 steps.reverse(); | 515 steps.reverse(); |
516 return (steps.length && steps[0].optimized ? "" : "/") + steps.join("/"); | 516 return (steps.length && steps[0].optimized ? "" : "/") + steps.join("/"); |
517 } | 517 }; |
518 | 518 |
519 /** | 519 /** |
520 * @param {!WebInspector.DOMNode} node | 520 * @param {!WebInspector.DOMNode} node |
521 * @param {boolean=} optimized | 521 * @param {boolean=} optimized |
522 * @return {?WebInspector.DOMNodePathStep} | 522 * @return {?WebInspector.DOMNodePathStep} |
523 */ | 523 */ |
524 WebInspector.DOMPresentationUtils._xPathValue = function(node, optimized) | 524 WebInspector.DOMPresentationUtils._xPathValue = function(node, optimized) |
525 { | 525 { |
526 var ownValue; | 526 var ownValue; |
527 var ownIndex = WebInspector.DOMPresentationUtils._xPathIndex(node); | 527 var ownIndex = WebInspector.DOMPresentationUtils._xPathIndex(node); |
(...skipping 24 matching lines...) Expand all Loading... |
552 break; | 552 break; |
553 default: | 553 default: |
554 ownValue = ""; | 554 ownValue = ""; |
555 break; | 555 break; |
556 } | 556 } |
557 | 557 |
558 if (ownIndex > 0) | 558 if (ownIndex > 0) |
559 ownValue += "[" + ownIndex + "]"; | 559 ownValue += "[" + ownIndex + "]"; |
560 | 560 |
561 return new WebInspector.DOMNodePathStep(ownValue, node.nodeType() === Node.D
OCUMENT_NODE); | 561 return new WebInspector.DOMNodePathStep(ownValue, node.nodeType() === Node.D
OCUMENT_NODE); |
562 } | 562 }; |
563 | 563 |
564 /** | 564 /** |
565 * @param {!WebInspector.DOMNode} node | 565 * @param {!WebInspector.DOMNode} node |
566 * @return {number} | 566 * @return {number} |
567 */ | 567 */ |
568 WebInspector.DOMPresentationUtils._xPathIndex = function(node) | 568 WebInspector.DOMPresentationUtils._xPathIndex = function(node) |
569 { | 569 { |
570 // Returns -1 in case of error, 0 if no siblings matching the same expressio
n, <XPath index among the same expression-matching sibling nodes> otherwise. | 570 // Returns -1 in case of error, 0 if no siblings matching the same expressio
n, <XPath index among the same expression-matching sibling nodes> otherwise. |
571 function areNodesSimilar(left, right) | 571 function areNodesSimilar(left, right) |
572 { | 572 { |
(...skipping 26 matching lines...) Expand all Loading... |
599 return 0; | 599 return 0; |
600 var ownIndex = 1; // XPath indices start with 1. | 600 var ownIndex = 1; // XPath indices start with 1. |
601 for (var i = 0; i < siblings.length; ++i) { | 601 for (var i = 0; i < siblings.length; ++i) { |
602 if (areNodesSimilar(node, siblings[i])) { | 602 if (areNodesSimilar(node, siblings[i])) { |
603 if (siblings[i] === node) | 603 if (siblings[i] === node) |
604 return ownIndex; | 604 return ownIndex; |
605 ++ownIndex; | 605 ++ownIndex; |
606 } | 606 } |
607 } | 607 } |
608 return -1; // An error occurred: |node| not found in parent's children. | 608 return -1; // An error occurred: |node| not found in parent's children. |
609 } | 609 }; |
610 | 610 |
611 /** | 611 /** |
612 * @constructor | 612 * @constructor |
613 * @param {string} value | 613 * @param {string} value |
614 * @param {boolean} optimized | 614 * @param {boolean} optimized |
615 */ | 615 */ |
616 WebInspector.DOMNodePathStep = function(value, optimized) | 616 WebInspector.DOMNodePathStep = function(value, optimized) |
617 { | 617 { |
618 this.value = value; | 618 this.value = value; |
619 this.optimized = optimized || false; | 619 this.optimized = optimized || false; |
620 } | 620 }; |
621 | 621 |
622 WebInspector.DOMNodePathStep.prototype = { | 622 WebInspector.DOMNodePathStep.prototype = { |
623 /** | 623 /** |
624 * @override | 624 * @override |
625 * @return {string} | 625 * @return {string} |
626 */ | 626 */ |
627 toString: function() | 627 toString: function() |
628 { | 628 { |
629 return this.value; | 629 return this.value; |
630 } | 630 } |
631 } | 631 }; |
632 | 632 |
633 /** | 633 /** |
634 * @interface | 634 * @interface |
635 */ | 635 */ |
636 WebInspector.DOMPresentationUtils.MarkerDecorator = function() | 636 WebInspector.DOMPresentationUtils.MarkerDecorator = function() |
637 { | 637 { |
638 } | 638 }; |
639 | 639 |
640 WebInspector.DOMPresentationUtils.MarkerDecorator.prototype = { | 640 WebInspector.DOMPresentationUtils.MarkerDecorator.prototype = { |
641 /** | 641 /** |
642 * @param {!WebInspector.DOMNode} node | 642 * @param {!WebInspector.DOMNode} node |
643 * @return {?{title: string, color: string}} | 643 * @return {?{title: string, color: string}} |
644 */ | 644 */ |
645 decorate: function(node) { } | 645 decorate: function(node) { } |
646 } | 646 }; |
647 | 647 |
648 /** | 648 /** |
649 * @constructor | 649 * @constructor |
650 * @implements {WebInspector.DOMPresentationUtils.MarkerDecorator} | 650 * @implements {WebInspector.DOMPresentationUtils.MarkerDecorator} |
651 * @param {!Runtime.Extension} extension | 651 * @param {!Runtime.Extension} extension |
652 */ | 652 */ |
653 WebInspector.DOMPresentationUtils.GenericDecorator = function(extension) | 653 WebInspector.DOMPresentationUtils.GenericDecorator = function(extension) |
654 { | 654 { |
655 this._title = WebInspector.UIString(extension.title()); | 655 this._title = WebInspector.UIString(extension.title()); |
656 this._color = extension.descriptor()["color"]; | 656 this._color = extension.descriptor()["color"]; |
657 } | 657 }; |
658 | 658 |
659 WebInspector.DOMPresentationUtils.GenericDecorator.prototype = { | 659 WebInspector.DOMPresentationUtils.GenericDecorator.prototype = { |
660 /** | 660 /** |
661 * @override | 661 * @override |
662 * @param {!WebInspector.DOMNode} node | 662 * @param {!WebInspector.DOMNode} node |
663 * @return {?{title: string, color: string}} | 663 * @return {?{title: string, color: string}} |
664 */ | 664 */ |
665 decorate: function(node) | 665 decorate: function(node) |
666 { | 666 { |
667 return { title: this._title, color: this._color }; | 667 return { title: this._title, color: this._color }; |
668 } | 668 } |
669 } | 669 }; |
OLD | NEW |