static resolveAbsolute()

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(' > ');
  }