engine icon indicating copy to clipboard operation
engine copied to clipboard

Support `:has()` pseudo-selector

Open MattiSG opened this issue 1 year ago • 0 comments

For some complex documents layout, the :has() CSS4 relational selector can prove very useful. However, using it in a declaration yields the following error:

Extract failed: unknown pseudo-class selector ':has(>[name=contact-points-for-competent-authorities-in-eu-countries]'

From the following tentative declaration:

{
  "name": "Telegram",
  "documents": {
    "Privacy Policy": {
      "fetch": "https://telegram.org/privacy",
      "select": ".tl_page_container"
    },
    "Terms of Service": {
      "fetch": "https://telegram.org/tos",
      "select": ".tl_page_container"
    },
    "Developer Terms": {
      "fetch": "https://core.telegram.org/api/terms",
      "select": "#dev_page_content_wrap",
      "remove": ".breadcrumb"
    },
    "Imprint": {
      "fetch": "https://telegram.org/faq?setln=en",
      "select": [
        {
          "startBefore": "h4:has(> [name=q-who-are-the-people-behind-telegram])",
          "endBefore": "h4:has(> [name=q-who-are-the-people-behind-telegram]) + h4"
        },
        {
          "startBefore": "h4:has(> [name=q-where-is-telegram-based])",
          "endBefore": "h4:has(> [name=q-where-is-telegram-based]) + h4"
        }
      ]
    },
    "Vulnerability Disclosure Policy": {
      "fetch": "https://core.telegram.org/bug-bounty",
      "select": ".dev_page"
    },
    "Community Guidelines": {
      "fetch": "https://telegram.org/tos/eu-dsa?setln=en",
      "select": ".tl_page_container",
      "remove": [
        {
          "startBefore": "h4:has(> [name=contact-points-for-competent-authorities-in-eu-countries])",
          "endBefore": "h4:has(> [name=contact-points-for-competent-authorities-in-eu-countries]) + h4"
        },
        {
          "startBefore": "h4:has(> [name=average-monthly-active-recipients-of-service-in-the-eu])",
          "endBefore": "h4:has(> [name=average-monthly-active-recipients-of-service-in-the-eu]) + h4"
        }
      ]
    },
    "Law Enforcement Guidelines": {
      "combine": [
        {
          "fetch": "https://telegram.org/tos/eu-dsa?setln=en",
          "select": [
            {
              "startBefore": "h4:has(> [name=contact-points-for-competent-authorities-in-eu-countries]",
              "endBefore": "h4:has(> [name=contact-points-for-competent-authorities-in-eu-countries]) + h4"
            }
          ]
        },
        {
          "fetch": "https://telegram.org/faq?setln=en",
          "select": [
            {
              "startBefore": "h4:has(> [name=q-do-you-process-data-requests])",
              "endBefore": "h4:has(> [name=q-do-you-process-data-requests]) + h4"
            }
          ]
        }
      ]
    },
    "Copyright Claims Policy": {
      "fetch": "https://telegram.org/faq?setln=en",
      "select": [
        {
          "startBefore": "h4:has(> [name=q-a-bot-or-channel-is-infringing-on-my-copyright-what-do-i-do])",
          "endBefore": "h4:has(> [name=q-a-bot-or-channel-is-infringing-on-my-copyright-what-do-i-do]) + h4"
        }
      ]
    },
    "Single Sign-On Policy": {
      "fetch": "https://telegram.org/faq?setln=en",
      "select": [
        {
          "startBefore": "h4:has(> [name=passport])",
          "endBefore": "h4:has(> [name=passport]) + h4"
        }
      ]
    },
    "Complaints Policy": {
      "fetch": "https://telegram.org/faq?setln=en",
      "select": [
        {
          "startBefore": "h4:has(> [name=q-do-you-process-take-down-requests-from-third-parties])",
          "endBefore": "h4:has(> [name=q-do-you-process-take-down-requests-from-third-parties]) + h4"
        }
      ]
    }
  }
}

MattiSG avatar Sep 24 '24 09:09 MattiSG