about summary refs log tree commit diff stats
path: root/src
diff options
context:
space:
mode:
authorbptato <nincsnevem662@gmail.com>2025-01-05 14:35:30 +0100
committerbptato <nincsnevem662@gmail.com>2025-01-05 14:35:30 +0100
commit3978c59cde65a14883d165b47d4549cb62fd248b (patch)
treeab7a68721ba2b21e7d0034daa03d59fa4b6bc8d4 /src
parenta96cbcacf501fcc53856e5114b5269660eaa9ef7 (diff)
downloadchawan-3978c59cde65a14883d165b47d4549cb62fd248b.tar.gz
dom: DOMTokenList fixes/improvements
Diffstat (limited to 'src')
-rw-r--r--src/css/cascade.nim2
-rw-r--r--src/css/match.nim2
-rw-r--r--src/html/dom.nim21
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