Add a "copy full CSS path" option to the inspector's menu

Issue #3
This commit is contained in:
janekptacijarabaci 2018-02-02 20:42:28 +01:00 committed by Roy Tam
commit c3a7fd56e7
11 changed files with 241 additions and 3 deletions

View file

@ -792,6 +792,55 @@ CssLogic.findCssSelector = function (ele) {
return selector;
};
/**
* Get the full CSS path for a given element.
* @returns a string that can be used as a CSS selector for the element. It might not
* match the element uniquely. It does however, represent the full path from the root
* node to the element.
*/
CssLogic.getCssPath = function (ele) {
ele = getRootBindingParent(ele);
const document = ele.ownerDocument;
if (!document || !document.contains(ele)) {
throw new Error("getCssPath received element not inside document");
}
const getElementSelector = element => {
if (!element.localName) {
return "";
}
let label = element.nodeName == element.nodeName.toUpperCase()
? element.localName.toLowerCase()
: element.localName;
if (element.id) {
label += "#" + element.id;
}
if (element.classList) {
for (let cl of element.classList) {
label += "." + cl;
}
}
return label;
};
let paths = [];
while (ele) {
if (!ele || ele.nodeType !== Node.ELEMENT_NODE) {
break;
}
paths.splice(0, 0, getElementSelector(ele));
ele = ele.parentNode;
}
return paths.length ? paths.join(" ") : "";
}
/**
* A safe way to access cached bits of information about a stylesheet.
*