diff options
author | bptato <nincsnevem662@gmail.com> | 2024-03-04 00:32:41 +0100 |
---|---|---|
committer | bptato <nincsnevem662@gmail.com> | 2024-03-04 00:38:20 +0100 |
commit | b596687086048243728c58c906d680d21fe76d2c (patch) | |
tree | 5a3f232bd3660c95c8611625492f439e9f6ef570 /src/html | |
parent | b45f0663bd6f88ceaf7b12ff50d66d4673b7bd0f (diff) | |
download | chawan-b596687086048243728c58c906d680d21fe76d2c.tar.gz |
dom: misc fixes
* parse XHR URL with document base URL * allow setting XHR responseType * add tagName, nodeName * make hasChildNodes a function * fix horribly broken insertNode
Diffstat (limited to 'src/html')
-rw-r--r-- | src/html/dom.nim | 30 |
1 files changed, 28 insertions, 2 deletions
diff --git a/src/html/dom.nim b/src/html/dom.nim index 0e3b12bc..cce2d684 100644 --- a/src/html/dom.nim +++ b/src/html/dom.nim @@ -1078,7 +1078,7 @@ func ownerDocument(node: Node): Document {.jsfget.} = return nil return node.document -func hasChildNodes(node: Node): bool {.jsfget.} = +func hasChildNodes(node: Node): bool {.jsfunc.} = return node.childList.len > 0 func len(collection: Collection): int = @@ -1716,6 +1716,32 @@ func names(ctx: JSContext, map: NamedNodeMap): JSPropertyEnumList func length(characterData: CharacterData): uint32 {.jsfget.} = return uint32(characterData.data.utf16Len) +func tagName(element: Element): string {.jsfget.} = + if element.namespace == Namespace.HTML: + return element.document.toStr(element.localName).toUpperAscii() + return element.document.toStr(element.localName) + +func nodeName(node: Node): string {.jsfget.} = + if node of Element: + return Element(node).tagName + if node of Attr: + let attr = Attr(node) + return attr.ownerElement.document.toStr(attr.data.qualifiedName) + if node of DocumentType: + return DocumentType(node).name + if node of CDATASection: + return "#cdata-section" + if node of Comment: + return "#comment" + if node of Document: + return "#document" + if node of DocumentFragment: + return "#document-fragment" + if node of ProcessingInstruction: + return ProcessingInstruction(node).target + assert node of Text + return "#text" + func scriptingEnabled*(document: Document): bool = if document.window == nil: return false @@ -3266,7 +3292,7 @@ proc insertNode(parent, node, before: Node) = node.index = parent.childList.high else: node.index = before.index - for i in before.index ..< parent.childList.len - 1: + for i in countdown(parent.childList.high - 1, node.index): parent.childList[i + 1] = parent.childList[i] parent.childList[i + 1].index = i + 1 parent.childList[node.index] = node |