module jsdom pub struct JS.Element { classList JS.DOMTokenList childElementCount JS.Number className JS.String clientHeight JS.Number clientWidth JS.Number clientTop JS.Number clientLeft JS.Number id JS.String innerHTML JS.String namespaceURI JS.String outerHTML JS.String scrollHeight JS.Number scrollLeft JS.Number scrollTop JS.Number scrollWidth JS.Number } pub struct Element { Node } pub fn (e Element) str() string { res := '' #res.str = e.node + '' return res } pub fn (elem Element) typ() NodeType { return .element } pub fn (e Element) class_name() string { res := '' #res.str = e.node.className return res } pub fn (e Element) class_list() DOMTokenList { list := DOMTokenList{} #list.list = e.node.classList return list } // node casts `Element` back to `Node`. pub fn (elem Element) node() Node { node := Node{} #node.node = elem.node return node } pub fn (elem Element) add_event_listener(event string, cb EventCallback) { #elem.node.addEventListener(event.str, function (event) { let e = jsdom__dispatch_event_target(this); #let ev = jsdom__dispatch_event(event); ev.event = event; #return cb(e,ev) #}); } pub interface IElement { INode } pub struct HTMLElement { Element } pub fn (elem HTMLElement) typ() NodeType { return .element } pub fn (elem HTMLElement) access_key() string { res := '' #res.str = elem.node.accessKey; return res } pub fn (mut elem HTMLElement) set_access_key(key string) { #elem.val.node.accessKey = key.str; } pub fn (elem HTMLElement) add_event_listener(event string, cb EventCallback) { #elem.node.addEventListener(event.str, function (event) { let e = jsdom__dispatch_event_target(this); #let ev = jsdom__dispatch_event(event); ev.event = event; #return cb(e,ev) #}); }