
Use node.firstChild and node.nextSibling instead of node.children or node.childNodes in the baseline benchmark.
109 lines
2.9 KiB
JavaScript
109 lines
2.9 KiB
JavaScript
export var DocumentFragment = window.DocumentFragment;
|
|
export var Node = window.Node;
|
|
export var NodeList = window.NodeList;
|
|
export var Text = window.Text;
|
|
export var Element = window.HTMLElement;
|
|
export var TemplateElement = window.HTMLTemplateElement;
|
|
export var document = window.document;
|
|
export var location = window.location;
|
|
|
|
import {List, MapWrapper} from 'facade/collection';
|
|
|
|
export class DOM {
|
|
static query(selector) {
|
|
return document.querySelector(selector);
|
|
}
|
|
static querySelector(el, selector:string):Node {
|
|
return el.querySelector(selector);
|
|
}
|
|
static querySelectorAll(el, selector:string):NodeList {
|
|
return el.querySelectorAll(selector);
|
|
}
|
|
static on(el, evt, listener) {
|
|
el.addEventListener(evt, listener, false);
|
|
}
|
|
static getInnerHTML(el) {
|
|
return el.innerHTML;
|
|
}
|
|
static getOuterHTML(el) {
|
|
return el.outerHTML;
|
|
}
|
|
static firstChild(el):Node {
|
|
return el.firstChild;
|
|
}
|
|
static nextSibling(el):Node {
|
|
return el.nextSibling;
|
|
}
|
|
static parentElement(el) {
|
|
return el.parentElement;
|
|
}
|
|
static childNodes(el):NodeList {
|
|
return el.childNodes;
|
|
}
|
|
static appendChild(el, node) {
|
|
el.appendChild(node);
|
|
}
|
|
static removeChild(el, node) {
|
|
el.removeChild(node);
|
|
}
|
|
static insertAfter(el, node) {
|
|
el.parentNode.insertBefore(node, el.nextSibling);
|
|
}
|
|
static setInnerHTML(el, value) {
|
|
el.innerHTML = value;
|
|
}
|
|
static getText(el: Element) {
|
|
return el.textContent;
|
|
}
|
|
static setText(text:Text, value:string) {
|
|
text.nodeValue = value;
|
|
}
|
|
static createTemplate(html) {
|
|
var t = document.createElement('template');
|
|
t.innerHTML = html;
|
|
return t;
|
|
}
|
|
static createElement(tagName, doc=document) {
|
|
return doc.createElement(tagName);
|
|
}
|
|
static clone(node:Node) {
|
|
return node.cloneNode(true);
|
|
}
|
|
static hasProperty(element:Element, name:string) {
|
|
return name in element;
|
|
}
|
|
static getElementsByClassName(element:Element, name:string) {
|
|
return element.getElementsByClassName(name);
|
|
}
|
|
static getElementsByTagName(element:Element, name:string) {
|
|
return element.getElementsByTagName(name);
|
|
}
|
|
static classList(element:Element):List {
|
|
return Array.prototype.slice.call(element.classList, 0);
|
|
}
|
|
static addClass(element:Element, classname:string) {
|
|
element.classList.add(classname);
|
|
}
|
|
static hasClass(element:Element, classname:string) {
|
|
return element.classList.contains(classname);
|
|
}
|
|
static attributeMap(element:Element) {
|
|
var res = MapWrapper.create();
|
|
var elAttrs = element.attributes;
|
|
for (var i = 0; i < elAttrs.length; i++) {
|
|
var attrib = elAttrs[i];
|
|
MapWrapper.set(res, attrib.name, attrib.value);
|
|
}
|
|
return res;
|
|
}
|
|
static templateAwareRoot(el:Element):Node {
|
|
return el instanceof TemplateElement ? el.content : el;
|
|
}
|
|
static createHtmlDocument() {
|
|
return document.implementation.createHTMLDocument();
|
|
}
|
|
static defaultDoc() {
|
|
return document;
|
|
}
|
|
}
|