diff options
author | bptato <nincsnevem662@gmail.com> | 2022-07-17 22:31:04 +0200 |
---|---|---|
committer | bptato <nincsnevem662@gmail.com> | 2022-07-17 22:31:04 +0200 |
commit | 24fc8e940a935f0579cf7bc03bf01e27e5853b80 (patch) | |
tree | 8590acda7c4bd8f856e2869ed35a804116926f0d /src/css | |
parent | 7cdb8c1b679431b1be52c9fbb19b67445a0bb588 (diff) | |
download | chawan-24fc8e940a935f0579cf7bc03bf01e27e5853b80.tar.gz |
Implement select element display
You can't actually use them yet. But at least they don't flood the screen with options now.
Diffstat (limited to 'src/css')
-rw-r--r-- | src/css/select.nim | 7 | ||||
-rw-r--r-- | src/css/selectorparser.nim | 4 |
2 files changed, 10 insertions, 1 deletions
diff --git a/src/css/select.nim b/src/css/select.nim index c9550825..f8769418 100644 --- a/src/css/select.nim +++ b/src/css/select.nim @@ -8,6 +8,7 @@ import streams import css/selectorparser import css/cssparser import html/dom +import html/tags func attrSelectorMatches(elem: Element, sel: Selector): bool = case sel.rel @@ -30,6 +31,12 @@ func pseudoSelectorMatches(elem: Element, sel: Selector): bool = of PSEUDO_HOVER: return elem.hover of PSEUDO_ROOT: return elem == elem.document.html of PSEUDO_NTH_CHILD: return int64(sel.pseudonum - 1) in elem.parentNode.children.low..elem.parentNode.children.high and elem.parentNode.children[int64(sel.pseudonum - 1)] == elem + of PSEUDO_CHECKED: + if elem.tagType == TAG_INPUT: + return HTMLInputElement(elem).checked + elif elem.tagType == TAG_OPTION: + return HTMLOptionElement(elem).selected + return false func selectorsMatch*(elem: Element, selectors: SelectorList): bool diff --git a/src/css/selectorparser.nim b/src/css/selectorparser.nim index d6302c24..7c4834e6 100644 --- a/src/css/selectorparser.nim +++ b/src/css/selectorparser.nim @@ -21,7 +21,7 @@ type PseudoClass* = enum PSEUDO_FIRST_CHILD, PSEUDO_LAST_CHILD, PSEUDO_ONLY_CHILD, PSEUDO_HOVER, - PSEUDO_ROOT, PSEUDO_NTH_CHILD + PSEUDO_ROOT, PSEUDO_NTH_CHILD, PSEUDO_CHECKED CombinatorType* = enum DESCENDANT_COMBINATOR, CHILD_COMBINATOR, NEXT_SIBLING_COMBINATOR, @@ -210,6 +210,8 @@ proc parseSelectorToken(state: var SelectorParser, csstoken: CSSToken) = state.addSelector(Selector(t: PSEUDO_SELECTOR, pseudo: PSEUDO_HOVER)) of "root": state.addSelector(Selector(t: PSEUDO_SELECTOR, pseudo: PSEUDO_ROOT)) + of "checked": + state.addSelector(Selector(t: PSEUDO_SELECTOR, pseudo: PSEUDO_CHECKED)) of QUERY_PSELEM: case $csstoken.value of "before": |