@frontmeans/doqry
v1.0.4
Published
Document query notation for CSS selectors
Readme
Document Query Notation
Structured CSS Selectors
Doqry represents CSS selectors as data structures rather than trying to parse selectors text.
Structured CSS selector is one of:
- raw CSS selector text,
- CSS selector part, or
- an array consisting of strings, parts, and their combinators.
Raw CSS selector text is never interpreted and is used verbatim.
CSS combinator is one of: >, +, or ~.
CSS selector part is a structure representing selectors like
element-name#id.class1.classN[attr1][attr2]:pseudo-class::pseudo-element.
Each selector part is represented by corresponding property:
- Element selector:
{ e: 'element-name' }forelement-name. - Element selector in XML namespace:
{ ns: 'ns-prefix', e: 'element-name' }forns-prefix | element-name. - Universal element selector:
{ e: '*' }, which is the same as{}for*. - Universal element selector in XML namespace:
{ ns: 'ns-prefix', e: '*' }, which is the same as{ ns: 'ns-prefix' }forns-prefix | *. - Element identifier:
{ i: 'element-id' }for#element-id. - Element class:
{ c: 'class-name' }for.class-name. - Multiple element classes:
{ c: ['class-1', 'class-2'] }for.class-1.class-2. - Attribute selector:
{ u: ['disabled'] }for[disabled],{ u: ['lang', '|=', 'en'] }for[lang |= "en"]. - Pseudo-element:
{ e: 'li', u: ['::', 'after'] }forli::after. - Pseudo-class:
{ u: [':', 'host', { c: 'active' }] }for:host(.active),{ u: [':', 'is', [{ e: 'ul' }, '>', { e: 'li' }], [{ c: 'menu'}, { c: 'menu-item'}]] }for:is(ul > li, .menu > .menu-item) - Additional selectors:
{ e: 'a', s: '[href^=https://]:visited' }fora[href^=https://]:visited. - Raw CSS selector:
{ s: '.my-selector' }for.my-selector.
Selector part may combine multiple properties. Parts may be combined too.
E.g. [{ e: 'ul', c: 'unstyled' }, '>', { e: 'li' }] corresponds to ul.unstyled > li CSS selector.
Qualifiers
CSS selector may include qualifiers. Qualifiers do not correspond to CSS selectors directly. Instead, they are used internally to classify selectors. E.g. they may represent at-rule selectors.
Qualifiers represented by $ property of structured CSS selector part, that may contain either one qualifier, or an
array of qualifiers:
{ c: 'sr-only', $: '@media=screen' }.
Each qualifier is a string in the <name>[=<value>] format, where the <name> may be qualified and consist of multiple
colon-separated parts like block:visibility:hidden.
The presence of q1:q2:q3=v qualifier means the same as presence of q1, q1:q2, q1:q2:q3, and q1:q2:q3=v
qualifiers.
API
The following operations over structure CSS selectors supported:
doqryDisplayText(selector)- Convertsselectorto textual representation including qualifiers.doqryEqual(first, second)- Checks whether thefirstselector equals to thesecondone.doqryPicker(selector)- Normalizesselectorrepresentation and converts it to CSS picker.doqryText(selector, format?)- Convertsselectorto textual representation in the givenformat. By default, converts to representation that can be used in CSS (i.e. without qualifiers).
