161 lines
5.1 KiB
Dart
Raw Normal View History

library angular.core.facade.dom;
2014-09-18 14:56:38 -07:00
import 'dart:html';
2015-01-13 13:06:09 -08:00
import 'dart:js' show JsObject, context;
2014-09-18 14:56:38 -07:00
export 'dart:html' show
document,
DocumentFragment,
Element,
location,
Node,
StyleElement,
TemplateElement,
Text,
window;
// TODO(tbosch): Is there a builtin one? Why is Dart
// removing unknown elements by default?
class IdentitySanitizer implements NodeTreeSanitizer {
void sanitizeTree(Node node) {}
}
2015-01-29 09:50:49 -08:00
final _window = context['window'];
final _gc = context['gc'];
2015-01-13 13:06:09 -08:00
2015-01-29 09:50:49 -08:00
void gc() {
2015-01-13 13:06:09 -08:00
if (_gc != null) {
_gc.apply(const []);
}
}
final identitySanitizer = new IdentitySanitizer();
2014-09-18 14:56:38 -07:00
class DOM {
2015-01-29 09:50:49 -08:00
static query(String selector) => document.querySelector(selector);
static Element querySelector(el, String selector) =>
el.querySelector(selector);
static ElementList querySelectorAll(el, String selector) =>
el.querySelectorAll(selector);
static void on(EventTarget element, String event, callback(arg)) {
// due to https://code.google.com/p/dart/issues/detail?id=17406
// addEventListener misses zones so we use element.on.
element.on[event].listen(callback);
}
2015-01-29 09:50:49 -08:00
static void dispatchEvent(EventTarget el, Event evt) {
el.dispatchEvent(evt);
}
2015-01-29 09:50:49 -08:00
static MouseEvent createMouseEvent(String eventType) =>
new MouseEvent(eventType, canBubble: true);
static createEvent(eventType) =>
new Event(eventType, canBubble: true);
2015-01-29 09:50:49 -08:00
static String getInnerHTML(Element el) => el.innerHtml;
static String getOuterHTML(Element el) => el.outerHtml;
static void setInnerHTML(Element el, String value) {
2014-09-18 14:56:38 -07:00
el.innerHtml = value;
}
2015-01-29 09:50:49 -08:00
static Node firstChild(el) => el.firstChild;
static Node nextSibling(Node el) => el.nextNode;
static Element parentElement(Node el) => el.parent;
static List<Node> childNodes(Node el) => el.childNodes;
static List childNodesAsList(Node el) => childNodes(el).toList();
static void clearNodes(Node el) {
el.nodes = const [];
}
2015-01-29 09:50:49 -08:00
static void appendChild(Node el, Node node) {
el.append(node);
}
2015-01-29 09:50:49 -08:00
static void removeChild(Element el, Node node) {
node.remove();
}
static Element remove(Element el) {
return el..remove();
}
static insertBefore(Node el, node) {
el.parentNode.insertBefore(node, el);
}
2015-01-29 09:50:49 -08:00
static void insertAllBefore(Node el, Iterable<Node> nodes) {
el.parentNode.insertAllBefore(nodes, el);
}
2015-01-29 09:50:49 -08:00
static void insertAfter(Node el, Node node) {
el.parentNode.insertBefore(node, el.nextNode);
}
2015-01-29 09:50:49 -08:00
static String getText(Node el) => el.text;
static void setText(Node el, String value) {
el.text = value;
2014-09-26 11:20:08 -07:00
}
2015-01-29 09:50:49 -08:00
static TemplateElement createTemplate(String html) {
var t = new TemplateElement();
2015-01-29 09:50:49 -08:00
t.setInnerHtml(html, treeSanitizer: identitySanitizer);
return t;
}
2015-01-29 09:50:49 -08:00
static Element createElement(String tagName, [HtmlDocument doc = null]) {
if (doc == null) doc = document;
return doc.createElement(tagName);
}
2015-01-29 09:50:49 -08:00
static createScriptTag(String attrName, String attrValue,
[HtmlDocument doc = null]) {
if (doc == null) doc = document;
var el = doc.createElement("SCRIPT");
el.setAttribute(attrName, attrValue);
return el;
}
static StyleElement createStyleElement(String css, [HtmlDocument doc = null]) {
if (doc == null) doc = document;
var el = doc.createElement("STYLE");
el.text = css;
return el;
}
2015-01-29 09:50:49 -08:00
static clone(Node node) => node.clone(true);
static bool hasProperty(Element element, String name) =>
new JsObject.fromBrowserObject(element).hasProperty(name);
static List<Node> getElementsByClassName(Element element, String name) =>
element.getElementsByClassName(name);
static List<Node> getElementsByTagName(Element element, String name) =>
element.querySelectorAll(name);
static List<String> classList(Element element) => element.classes.toList();
static void addClass(Element element, String classname) {
element.classes.add(classname);
}
static void removeClass(Element element, String classname) {
element.classes.remove(classname);
}
2015-01-29 09:50:49 -08:00
static bool hasClass(Element element, String classname) =>
element.classes.contains(classname);
static setStyle(Element element, String stylename, String stylevalue) {
element.style.setProperty(stylename, stylevalue);
}
static removeStyle(Element element, String stylename) {
element.style.removeProperty(stylename);
}
static getStyle(Element element, String stylename) {
return element.style.getPropertyValue(stylename);
}
2015-01-29 09:50:49 -08:00
static String tagName(Element element) => element.tagName;
static Map<String, String> attributeMap(Element element) =>
element.attributes;
static String getAttribute(Element element, String attribute) =>
element.getAttribute(attribute);
static void setAttribute(Element element, String name, String value) {
element.setAttribute(name, value);
}
2015-01-29 09:50:49 -08:00
static Node templateAwareRoot(Element el) =>
el is TemplateElement ? el.content : el;
static HtmlDocument createHtmlDocument() =>
document.implementation.createHtmlDocument('fakeTitle');
static HtmlDocument defaultDoc() => document;
static bool elementMatches(n, String selector) =>
n is Element && n.matches(selector);
2014-09-26 11:20:08 -07:00
}