pub const SELECT_ELEMENT_JS: &str = r#"
(function() {
function cssPath(el) {
if (!(el instanceof Element)) return '';
const path = [];
while (el && el.nodeType === 1) {
let selector = el.nodeName.toLowerCase();
if (el.id) { selector += '#' + el.id; path.unshift(selector); break; }
else {
let sib = el, nth = 1;
while ((sib = sib.previousElementSibling)) { if (sib.nodeName === el.nodeName) nth++; }
selector += ':nth-of-type(' + nth + ')';
}
path.unshift(selector);
el = el.parentNode;
}
return path.join(' > ');
}
return new Promise((resolve) => {
const overlay = document.createElement('div');
overlay.style.cssText = 'position:fixed;inset:0;z-index:2147483647;cursor:crosshair;background:rgba(0,150,255,0.05);';
document.body.appendChild(overlay);
overlay.addEventListener('click', (e) => {
e.preventDefault(); e.stopPropagation();
overlay.remove();
const x = e.clientX, y = e.clientY;
const el = document.elementFromPoint(x, y);
resolve(cssPath(el));
}, { capture: true, once: true });
});
})()
"#;Expand description
Interactive element picker. Resolves with the selector string for the picked element.