in src/js/webview/CSSSelectorResolver.js [460:506]
static resolveAbsolute(element: Element, contextSelector: string): string {
let path = [];
while (
element != null &&
element instanceof Element &&
element.nodeType === Node.ELEMENT_NODE &&
!element.matches(contextSelector)
) {
let selector = element.nodeName.toLowerCase();
if (element.id) {
selector = '#' + element.id;
} else {
let foundSameNodeNameSibling = false;
let sib = element;
let nth = 1;
while (
sib.nodeType === Node.ELEMENT_NODE &&
(sib = sib.previousElementSibling)
) {
nth++;
if (sib.nodeName.toLowerCase() === selector) {
foundSameNodeNameSibling = true;
}
}
if (!foundSameNodeNameSibling) {
sib = element.nextElementSibling;
while (sib && sib.nodeType === Node.ELEMENT_NODE) {
if (sib.nodeName.toLowerCase() === selector) {
foundSameNodeNameSibling = true;
break;
}
sib = sib.nextElementSibling;
}
}
if (foundSameNodeNameSibling) {
selector += ':nth-child(' + nth + ')';
}
}
path.unshift(selector);
if (element.id != null || element.parentElement == null) {
break;
} else {
element = element.parentElement;
}
}
return path.join(' > ');
}