about summary refs log tree commit diff stats
path: root/src/html
diff options
context:
space:
mode:
authorbptato <nincsnevem662@gmail.com>2023-01-02 02:45:24 +0100
committerbptato <nincsnevem662@gmail.com>2023-01-02 02:45:24 +0100
commitf2bf1572456412f109d06c6a49e34cfbe924bbfa (patch)
treed929d57783dec8a6d40a0c320a52ffc25f1bddf4 /src/html
parentd9edcbddae8da8c9cfad0c3bbe47eac35b55af99 (diff)
downloadchawan-f2bf1572456412f109d06c6a49e34cfbe924bbfa.tar.gz
dom: support a few more getters/setters
Diffstat (limited to 'src/html')
-rw-r--r--src/html/dom.nim55
1 files changed, 47 insertions, 8 deletions
diff --git a/src/html/dom.nim b/src/html/dom.nim
index d6820d50..1a831a5e 100644
--- a/src/html/dom.nim
+++ b/src/html/dom.nim
@@ -1152,6 +1152,13 @@ func target0*(element: Element): string =
       return base.attr("target")
   return ""
 
+# HTMLHyperlinkElementUtils (for <a> and <area>)
+func href0[T: HTMLAnchorElement|HTMLAreaElement](element: T): string =
+  if element.attrb("href"):
+    let url = parseUrl(element.attr("href"), some(element.document.url))
+    if url.issome:
+      return $url.get
+
 # <base>
 func target(base: HTMLBaseElement): string {.jsfget.} =
   base.attr("target")
@@ -1159,13 +1166,52 @@ func target(base: HTMLBaseElement): string {.jsfget.} =
 proc target(base: HTMLBaseElement, target: string) {.jsfset.} =
   base.attr("target", target)
 
-# <anchor>
+func href(base: HTMLBaseElement): string {.jsfget.} =
+  if base.attrb("href"):
+    #TODO with fallback base url
+    let url = parseUrl(base.attr("href"))
+    if url.isSome:
+      return $url.get
+
+# <a>
 func target(anchor: HTMLAnchorElement): string {.jsfget.} =
   anchor.attr("target")
 
 proc target(anchor: HTMLAnchorElement, target: string) {.jsfset.} =
   anchor.attr("target", target)
 
+func href*(anchor: HTMLAnchorElement): string {.jsfget.} =
+  anchor.href0
+
+proc href(anchor: HTMLAnchorElement, href: string) {.jsfset.} =
+  anchor.attr("href", href)
+
+func `$`(anchor: HTMLAnchorElement): string {.jsfunc.} =
+  anchor.href
+
+# <area>
+func href(area: HTMLAreaElement): string {.jsfget.} =
+  area.href0
+
+proc href(area: HTMLAreaElement, href: string) {.jsfset.} =
+  area.attr("href", href)
+
+func `$`(area: HTMLAreaElement): string {.jsfunc.} =
+  area.href
+
+# <link>
+func href*(link: HTMLLinkElement): string {.jsfget.} =
+  link.attr("href")
+
+proc href*(link: HTMLLinkElement, href: string) {.jsfset.} =
+  link.attr("href", href)
+
+func target(link: HTMLLinkElement): string {.jsfget.} =
+  link.attr("target")
+
+proc target(link: HTMLLinkElement, target: string) {.jsfset.} =
+  link.attr("target", target)
+
 # <label>
 func htmlFor(label: HTMLLabelElement): string {.jsfget.} =
   label.attr("for")
@@ -1361,13 +1407,6 @@ func parseURL*(document: Document, s: string): Option[URL] =
   #TODO encodings
   return parseURL(s, some(document.baseURL))
 
-func href*[T: HTMLAnchorElement|HTMLLinkElement|HTMLBaseElement](element: T): string =
-  if element.attrb("href"):
-    let url = parseUrl(element.attr("href"), some(element.document.url))
-    if url.issome:
-      return $url.get
-  return ""
-
 func rel*[T: HTMLAnchorElement|HTMLLinkElement|HTMLAreaElement](element: T): string =
   return element.attr("rel")