diff options
author | bptato <nincsnevem662@gmail.com> | 2025-01-05 14:35:30 +0100 |
---|---|---|
committer | bptato <nincsnevem662@gmail.com> | 2025-01-05 14:35:30 +0100 |
commit | 3978c59cde65a14883d165b47d4549cb62fd248b (patch) | |
tree | ab7a68721ba2b21e7d0034daa03d59fa4b6bc8d4 /src | |
parent | a96cbcacf501fcc53856e5114b5269660eaa9ef7 (diff) | |
download | chawan-3978c59cde65a14883d165b47d4549cb62fd248b.tar.gz |
dom: DOMTokenList fixes/improvements
Diffstat (limited to 'src')
-rw-r--r-- | src/css/cascade.nim | 2 | ||||
-rw-r--r-- | src/css/match.nim | 2 | ||||
-rw-r--r-- | src/html/dom.nim | 21 |
3 files changed, 16 insertions, 9 deletions
diff --git a/src/css/cascade.nim b/src/css/cascade.nim index 453b65f8..e8c14bc8 100644 --- a/src/css/cascade.nim +++ b/src/css/cascade.nim @@ -94,7 +94,7 @@ func calcRules(styledNode: StyledNode; sheet: CSSStylesheet): RuleList = if element.id != CAtomNull: sheet.idTable.withValue(sheet.factory.toLowerAscii(element.id), v): rules.add(v[]) - for class in element.classList.toks: + for class in element.classList: sheet.classTable.withValue(sheet.factory.toLowerAscii(class), v): rules.add(v[]) for attr in element.attrs: diff --git a/src/css/match.nim b/src/css/match.nim index 99b48706..0dc7fb8c 100644 --- a/src/css/match.nim +++ b/src/css/match.nim @@ -187,7 +187,7 @@ func matches(element: Element; sel: Selector; depends: var DependencyInfo): return element.localName == sel.tag of stClass: let factory = element.document.factory - for it in element.classList.toks: + for it in element.classList: if sel.class == factory.toLowerAscii(it): return mtTrue return mtFalse diff --git a/src/html/dom.nim b/src/html/dom.nim index db73c23a..5aa29474 100644 --- a/src/html/dom.nim +++ b/src/html/dom.nim @@ -153,7 +153,7 @@ type HTMLAllCollection = ref object of Collection DOMTokenList = ref object - toks*: seq[CAtom] + toks: seq[CAtom] element: Element localName: CAtom @@ -1485,12 +1485,19 @@ proc setCookie(ctx: JSContext; document: Document; cookie: string) document.internalCookie = cookie # DOMTokenList -func length(tokenList: DOMTokenList): uint32 {.jsfget.} = - return uint32(tokenList.toks.len) +iterator items*(tokenList: DOMTokenList): CAtom {.inline.} = + for tok in tokenList.toks: + yield tok -proc item(ctx: JSContext; tokenList: DOMTokenList; i: int): JSValue {.jsfunc.} = - if i < tokenList.toks.len: - return ctx.toJS(tokenList.toks[i]) +func length(tokenList: DOMTokenList): int {.jsfget.} = + return tokenList.toks.len + +proc item(ctx: JSContext; tokenList: DOMTokenList; u: uint32): JSValue + {.jsfunc.} = + if int64(u) < int64(int.high): + let i = int(u) + if i < tokenList.toks.len: + return ctx.toJS(tokenList.toks[i]) return JS_NULL func contains*(tokenList: DOMTokenList; a: CAtom): bool = @@ -1600,7 +1607,7 @@ proc getter(ctx: JSContext; this: DOMTokenList; atom: JSAtom): JSValue {.jsgetownprop.} = var u: uint32 if ctx.fromJS(atom, u).isSome: - return ctx.item(this, int(u)).uninitIfNull() + return ctx.item(this, u).uninitIfNull() return JS_UNINITIALIZED # DOMStringMap |