about summary refs log tree commit diff stats
path: root/src
diff options
context:
space:
mode:
authorbptato <nincsnevem662@gmail.com>2024-07-17 17:58:50 +0200
committerbptato <nincsnevem662@gmail.com>2024-07-17 17:58:50 +0200
commitc8d7a2a27720056fc60a5d67b56f515af4442cf4 (patch)
tree519bc2396104c6a3cbdf02d2b982b7ff3863ace2 /src
parentcb2331f924ea17ff0c902a1843983861c2c19e92 (diff)
downloadchawan-c8d7a2a27720056fc60a5d67b56f515af4442cf4.tar.gz
dom, match, event: small cleanup
Diffstat (limited to 'src')
-rw-r--r--src/css/match.nim12
-rw-r--r--src/html/dom.nim51
-rw-r--r--src/html/event.nim2
3 files changed, 32 insertions, 33 deletions
diff --git a/src/css/match.nim b/src/css/match.nim
index 02c921b9..567f00bb 100644
--- a/src/css/match.nim
+++ b/src/css/match.nim
@@ -63,7 +63,7 @@ func attrSelectorMatches(elem: Element; sel: Selector): bool =
 func selectorsMatch*[T: Element|StyledNode](elem: T; cxsel: ComplexSelector;
   felem: T = nil): bool
 
-func selectorsMatch*[T: Element|StyledNode](elem: T; slist: SelectorList;
+func selectorsMatch[T: Element|StyledNode](elem: T; slist: SelectorList;
     felem: T = nil): bool =
   for cxsel in slist:
     if elem.selectorsMatch(cxsel, felem):
@@ -237,23 +237,23 @@ func complexSelectorMatches[T: Element|StyledNode](elem: T;
 #TODO make that an explicit flag or something, also get rid of the Element case
 func selectorsMatch*[T: Element|StyledNode](elem: T; cxsel: ComplexSelector;
     felem: T = nil): bool =
-  var felem = if felem != nil:
+  let felem = if felem != nil:
     felem
   else:
     elem
   return elem.complexSelectorMatches(cxsel, felem)
 
-proc querySelectorAll(node: Node; q: string): seq[Element] =
+# Forward declaration hack
+doqsa = proc(node: Node; q: string): seq[Element] =
+  result = @[]
   let selectors = parseSelectors(q, node.document.factory)
   for element in node.elements:
     if element.selectorsMatch(selectors):
       result.add(element)
-doqsa = (proc(node: Node, q: string): seq[Element] = querySelectorAll(node, q))
 
-proc querySelector(node: Node; q: string): Element =
+doqs = proc(node: Node; q: string): Element =
   let selectors = parseSelectors(q, node.document.factory)
   for element in node.elements:
     if element.selectorsMatch(selectors):
       return element
   return nil
-doqs = (proc(node: Node, q: string): Element = querySelector(node, q))
diff --git a/src/html/dom.nim b/src/html/dom.nim
index 7b0a866c..9f8c1f2c 100644
--- a/src/html/dom.nim
+++ b/src/html/dom.nim
@@ -2406,7 +2406,7 @@ func findAutoFocus*(document: Document): Element =
   return nil
 
 # Forward declaration hack
-isDefaultPassive = func (eventTarget: EventTarget): bool =
+isDefaultPassive = func(eventTarget: EventTarget): bool =
   if eventTarget of Window:
     return true
   if not (eventTarget of Node):
@@ -2441,7 +2441,7 @@ func target0*(element: Element): string =
   return ""
 
 # HTMLHyperlinkElementUtils (for <a> and <area>)
-func href0[T: HTMLAnchorElement|HTMLAreaElement](element: T): string =
+func href0(element: HTMLElement): string =
   if not element.attrb(satHref):
     return ""
   let url = parseURL(element.attr(satHref), some(element.document.baseURL))
@@ -2459,26 +2459,26 @@ func href(base: HTMLBaseElement): string {.jsfget.} =
 
 # <a>
 func href*(anchor: HTMLAnchorElement): string {.jsfget.} =
-  anchor.href0
+  return anchor.href0
 
-proc href(anchor: HTMLAnchorElement; href: string) {.jsfset.} =
+proc setHref(anchor: HTMLAnchorElement; href: string) {.jsfset: "href".} =
   anchor.attr(satHref, href)
 
 func `$`(anchor: HTMLAnchorElement): string {.jsfunc.} =
-  anchor.href
+  return anchor.href
 
 proc setRelList(anchor: HTMLAnchorElement; s: string) {.jsfset: "relList".} =
   anchor.attr(satRel, s)
 
 # <area>
 func href(area: HTMLAreaElement): string {.jsfget.} =
-  area.href0
+  return area.href0
 
-proc href(area: HTMLAreaElement; href: string) {.jsfset.} =
+proc setHref(area: HTMLAreaElement; href: string) {.jsfset: "href".} =
   area.attr(satHref, href)
 
 func `$`(area: HTMLAreaElement): string {.jsfunc.} =
-  area.href
+  return area.href
 
 proc setRelList(area: HTMLAreaElement; s: string) {.jsfset: "relList".} =
   area.attr(satRel, s)
@@ -2502,6 +2502,7 @@ func form(label: HTMLLabelElement): HTMLFormElement {.jsfget.} =
   let control = label.control
   if control != nil:
     return control.form
+  return nil
 
 # <link>
 proc setRelList(link: HTMLLinkElement; s: string) {.jsfset: "relList".} =
@@ -2528,14 +2529,15 @@ func jsForm(this: HTMLTextAreaElement): HTMLFormElement {.jsfget: "form".} =
   return this.form
 
 # <video>
-func getSrc*(this: HTMLVideoElement|HTMLAudioElement): string =
-  var src = this.attr(satSrc)
-  if src == "":
-    for el in this.elements(TAG_SOURCE):
-      src = el.attr(satSrc)
-      if src != "":
-        break
-  src
+func getSrc*(this: HTMLElement): string =
+  let src = this.attr(satSrc)
+  if src != "":
+    return src
+  for el in this.elements(TAG_SOURCE):
+    let src = el.attr(satSrc)
+    if src != "":
+      return src
+  return ""
 
 func newText*(document: Document; data: string): Text =
   return Text(
@@ -2565,10 +2567,7 @@ func newProcessingInstruction(document: Document; target, data: string):
   )
 
 func newDocumentFragment(document: Document): DocumentFragment =
-  return DocumentFragment(
-    internalDocument: document,
-    index: -1
-  )
+  return DocumentFragment(internalDocument: document, index: -1)
 
 func newDocumentFragment(ctx: JSContext): DocumentFragment {.jsctor.} =
   let window = ctx.getGlobalOpaque(Window).get
@@ -2734,7 +2733,7 @@ func parseURL*(document: Document; s: string): Option[URL] =
   #TODO encodings
   return parseURL(s, some(document.baseURL))
 
-func media*[T: HTMLLinkElement|HTMLStyleElement](element: T): string =
+func media*(element: HTMLElement): string =
   return element.attr(satMedia)
 
 func title*(document: Document): string {.jsfget.} =
@@ -4172,14 +4171,14 @@ func isEqualNode(node, other: Node): bool {.jsfunc.} =
 func isSameNode(node, other: Node): bool {.jsfunc.} =
   return node == other
 
-# Forward definition hack (these are set in selectors.nim)
-var doqsa*: proc (node: Node; q: string): seq[Element]
-var doqs*: proc (node: Node; q: string): Element
+# Forward declaration hack (these are set in selectors.nim)
+var doqsa*: proc (node: Node; q: string): seq[Element] {.nimcall.} = nil
+var doqs*: proc (node: Node; q: string): Element {.nimcall.} = nil
 
-proc querySelectorAll*(node: Node; q: string): seq[Element] {.jsfunc.} =
+proc querySelectorAll(node: Node; q: string): seq[Element] {.jsfunc.} =
   return doqsa(node, q)
 
-proc querySelector*(node: Node; q: string): Element {.jsfunc.} =
+proc querySelector(node: Node; q: string): Element {.jsfunc.} =
   return doqs(node, q)
 
 const (ReflectTable, TagReflectMap, ReflectAllStartIndex) = (func(): (
diff --git a/src/html/event.nim b/src/html/event.nim
index 576ebcd1..62d85b00 100644
--- a/src/html/event.nim
+++ b/src/html/event.nim
@@ -65,7 +65,7 @@ jsDestructor(CustomEvent)
 jsDestructor(EventTarget)
 
 # Forward declaration hack
-var isDefaultPassive*: proc (eventTarget: EventTarget): bool
+var isDefaultPassive*: proc(eventTarget: EventTarget): bool {.nimcall.} = nil
 
 type
   EventInit = object of JSDict