| Index: client/html/src/ElementWrappingImplementation.dart
|
| diff --git a/client/html/src/ElementWrappingImplementation.dart b/client/html/src/ElementWrappingImplementation.dart
|
| deleted file mode 100644
|
| index a8c4fcb1d77df3cf41192519cb1e32881237f39e..0000000000000000000000000000000000000000
|
| --- a/client/html/src/ElementWrappingImplementation.dart
|
| +++ /dev/null
|
| @@ -1,790 +0,0 @@
|
| -// Copyright (c) 2011, the Dart project authors. Please see the AUTHORS file
|
| -// for details. All rights reserved. Use of this source code is governed by a
|
| -// BSD-style license that can be found in the LICENSE file.
|
| -
|
| -// TODO(jacobr): use Lists.dart to remove some of the duplicated functionality.
|
| -class _ChildrenElementList implements ElementList {
|
| - // Raw Element.
|
| - final _element;
|
| - final _childElements;
|
| -
|
| - _ChildrenElementList._wrap(var element)
|
| - : _childElements = element.children,
|
| - _element = element;
|
| -
|
| - List<Element> _toList() {
|
| - final output = new List(_childElements.length);
|
| - for (int i = 0, len = _childElements.length; i < len; i++) {
|
| - output[i] = LevelDom.wrapElement(_childElements[i]);
|
| - }
|
| - return output;
|
| - }
|
| -
|
| - Element get first() {
|
| - return LevelDom.wrapElement(_element.firstElementChild);
|
| - }
|
| -
|
| - void forEach(void f(Element element)) => _toList().forEach(f);
|
| -
|
| - Collection map(f(Element element)) => _toList().map(f);
|
| -
|
| - ElementList filter(bool f(Element element)) =>
|
| - new _ElementList(_toList().filter(f));
|
| -
|
| - bool every(bool f(Element element)) {
|
| - for(Element element in this) {
|
| - if (!f(element)) {
|
| - return false;
|
| - }
|
| - };
|
| - return true;
|
| - }
|
| -
|
| - bool some(bool f(Element element)) {
|
| - for(Element element in this) {
|
| - if (f(element)) {
|
| - return true;
|
| - }
|
| - };
|
| - return false;
|
| - }
|
| -
|
| - bool isEmpty() {
|
| - return _element.firstElementChild === null;
|
| - }
|
| -
|
| - int get length() {
|
| - return _childElements.length;
|
| - }
|
| -
|
| - Element operator [](int index) {
|
| - return LevelDom.wrapElement(_childElements[index]);
|
| - }
|
| -
|
| - void operator []=(int index, Element value) {
|
| - _element.replaceChild(LevelDom.unwrap(value), _childElements.item(index));
|
| - }
|
| -
|
| - void set length(int newLength) {
|
| - // TODO(jacobr): remove children when length is reduced.
|
| - throw const UnsupportedOperationException('');
|
| - }
|
| -
|
| - Element add(Element value) {
|
| - _element.appendChild(LevelDom.unwrap(value));
|
| - return value;
|
| - }
|
| -
|
| - Element addLast(Element value) => add(value);
|
| -
|
| - Iterator<Element> iterator() => _toList().iterator();
|
| -
|
| - void addAll(Collection<Element> collection) {
|
| - for (Element element in collection) {
|
| - _element.appendChild(LevelDom.unwrap(element));
|
| - }
|
| - }
|
| -
|
| - void sort(int compare(Element a, Element b)) {
|
| - throw const UnsupportedOperationException('TODO(jacobr): should we impl?');
|
| - }
|
| -
|
| - void copyFrom(List<Object> src, int srcStart, int dstStart, int count) {
|
| - throw 'Not impl yet. todo(jacobr)';
|
| - }
|
| -
|
| - void setRange(int start, int length, List from, [int startFrom = 0]) =>
|
| - Lists.setRange(this, start, length, from, startFrom);
|
| -
|
| - void removeRange(int start, int length) =>
|
| - Lists.removeRange(this, start, length, (i) => this[i].remove());
|
| -
|
| - void insertRange(int start, int length, [initialValue = null]) {
|
| - throw const NotImplementedException();
|
| - }
|
| -
|
| - ElementList getRange(int start, int length) =>
|
| - new _ElementList(Lists.getRange(this, start, length));
|
| -
|
| - int indexOf(Element element, [int start = 0]) {
|
| - return Lists.indexOf(this, element, start, this.length);
|
| - }
|
| -
|
| - int lastIndexOf(Element element, [int start = null]) {
|
| - if (start === null) start = length - 1;
|
| - return Lists.lastIndexOf(this, element, start);
|
| - }
|
| -
|
| - void clear() {
|
| - // It is unclear if we want to keep non element nodes?
|
| - _element.textContent = '';
|
| - }
|
| -
|
| - Element removeLast() {
|
| - final last = this.last();
|
| - if (last != null) {
|
| - _element.removeChild(LevelDom.unwrap(last));
|
| - }
|
| - return last;
|
| - }
|
| -
|
| - Element last() {
|
| - return LevelDom.wrapElement(_element.lastElementChild);
|
| - }
|
| -}
|
| -
|
| -class FrozenElementList implements ElementList {
|
| - final _ptr;
|
| -
|
| - FrozenElementList._wrap(this._ptr);
|
| -
|
| - Element get first() {
|
| - return this[0];
|
| - }
|
| -
|
| - void forEach(void f(Element element)) {
|
| - for (Element el in this) {
|
| - f(el);
|
| - }
|
| - }
|
| -
|
| - Collection map(f(Element element)) {
|
| - final out = [];
|
| - for (Element el in this) {
|
| - out.add(f(el));
|
| - }
|
| - return out;
|
| - }
|
| -
|
| - ElementList filter(bool f(Element element)) {
|
| - final out = new _ElementList([]);
|
| - for (Element el in this) {
|
| - if (f(el)) out.add(el);
|
| - }
|
| - return out;
|
| - }
|
| -
|
| - bool every(bool f(Element element)) {
|
| - for(Element element in this) {
|
| - if (!f(element)) {
|
| - return false;
|
| - }
|
| - };
|
| - return true;
|
| - }
|
| -
|
| - bool some(bool f(Element element)) {
|
| - for(Element element in this) {
|
| - if (f(element)) {
|
| - return true;
|
| - }
|
| - };
|
| - return false;
|
| - }
|
| -
|
| - bool isEmpty() {
|
| - return _ptr.length == 0;
|
| - }
|
| -
|
| - int get length() {
|
| - return _ptr.length;
|
| - }
|
| -
|
| - Element operator [](int index) {
|
| - return LevelDom.wrapElement(_ptr[index]);
|
| - }
|
| -
|
| - void operator []=(int index, Element value) {
|
| - throw const UnsupportedOperationException('');
|
| - }
|
| -
|
| - void set length(int newLength) {
|
| - throw const UnsupportedOperationException('');
|
| - }
|
| -
|
| - void add(Element value) {
|
| - throw const UnsupportedOperationException('');
|
| - }
|
| -
|
| -
|
| - void addLast(Element value) {
|
| - throw const UnsupportedOperationException('');
|
| - }
|
| -
|
| - Iterator<Element> iterator() => new FrozenElementListIterator(this);
|
| -
|
| - void addAll(Collection<Element> collection) {
|
| - throw const UnsupportedOperationException('');
|
| - }
|
| -
|
| - void sort(int compare(Element a, Element b)) {
|
| - throw const UnsupportedOperationException('');
|
| - }
|
| -
|
| - void copyFrom(List<Object> src, int srcStart, int dstStart, int count) {
|
| - throw 'Not impl yet. todo(jacobr)';
|
| - }
|
| -
|
| - void setRange(int start, int length, List from, [int startFrom = 0]) {
|
| - throw const UnsupportedOperationException('');
|
| - }
|
| -
|
| - void removeRange(int start, int length) {
|
| - throw const UnsupportedOperationException('');
|
| - }
|
| -
|
| - void insertRange(int start, int length, [initialValue = null]) {
|
| - throw const UnsupportedOperationException('');
|
| - }
|
| -
|
| - ElementList getRange(int start, int length) =>
|
| - new _ElementList(Lists.getRange(this, start, length));
|
| -
|
| - int indexOf(Element element, [int start = 0]) =>
|
| - Lists.indexOf(this, element, start, this.length);
|
| -
|
| - int lastIndexOf(Element element, [int start = null]) {
|
| - if (start === null) start = length - 1;
|
| - return Lists.lastIndexOf(this, element, start);
|
| - }
|
| -
|
| - void clear() {
|
| - throw const UnsupportedOperationException('');
|
| - }
|
| -
|
| - Element removeLast() {
|
| - throw const UnsupportedOperationException('');
|
| - }
|
| -
|
| - Element last() {
|
| - return this[length-1];
|
| - }
|
| -}
|
| -
|
| -class FrozenElementListIterator implements Iterator<Element> {
|
| - final FrozenElementList _list;
|
| - int _index = 0;
|
| -
|
| - FrozenElementListIterator(this._list);
|
| -
|
| - /**
|
| - * Gets the next element in the iteration. Throws a
|
| - * [NoMoreElementsException] if no element is left.
|
| - */
|
| - Element next() {
|
| - if (!hasNext()) {
|
| - throw const NoMoreElementsException();
|
| - }
|
| -
|
| - return _list[_index++];
|
| - }
|
| -
|
| - /**
|
| - * Returns whether the [Iterator] has elements left.
|
| - */
|
| - bool hasNext() => _index < _list.length;
|
| -}
|
| -
|
| -class _ElementList extends _ListWrapper<Element> implements ElementList {
|
| - _ElementList(List<Element> list) : super(list);
|
| -
|
| - ElementList filter(bool f(Element element)) =>
|
| - new _ElementList(super.filter(f));
|
| -
|
| - ElementList getRange(int start, int length) =>
|
| - new _ElementList(super.getRange(start, length));
|
| -}
|
| -
|
| -class ElementAttributeMap implements Map<String, String> {
|
| -
|
| - final _element;
|
| -
|
| - ElementAttributeMap._wrap(this._element);
|
| -
|
| - bool containsValue(String value) {
|
| - final attributes = _element.attributes;
|
| - for (int i = 0, len = attributes.length; i < len; i++) {
|
| - if(value == attributes.item(i).value) {
|
| - return true;
|
| - }
|
| - }
|
| - return false;
|
| - }
|
| -
|
| - bool containsKey(String key) {
|
| - return _element.hasAttribute(key);
|
| - }
|
| -
|
| - String operator [](String key) {
|
| - return _element.getAttribute(key);
|
| - }
|
| -
|
| - void operator []=(String key, String value) {
|
| - _element.setAttribute(key, value);
|
| - }
|
| -
|
| - String putIfAbsent(String key, String ifAbsent()) {
|
| - if (!containsKey(key)) {
|
| - this[key] = ifAbsent();
|
| - }
|
| - }
|
| -
|
| - String remove(String key) {
|
| - _element.removeAttribute(key);
|
| - }
|
| -
|
| - void clear() {
|
| - final attributes = _element.attributes;
|
| - for (int i = attributes.length - 1; i >= 0; i--) {
|
| - _element.removeAttribute(attributes.item(i).name);
|
| - }
|
| - }
|
| -
|
| - void forEach(void f(String key, String value)) {
|
| - final attributes = _element.attributes;
|
| - for (int i = 0, len = attributes.length; i < len; i++) {
|
| - final item = attributes.item(i);
|
| - f(item.name, item.value);
|
| - }
|
| - }
|
| -
|
| - Collection<String> getKeys() {
|
| - // TODO(jacobr): generate a lazy collection instead.
|
| - final attributes = _element.attributes;
|
| - final keys = new List<String>(attributes.length);
|
| - for (int i = 0, len = attributes.length; i < len; i++) {
|
| - keys[i] = attributes.item(i).name;
|
| - }
|
| - return keys;
|
| - }
|
| -
|
| - Collection<String> getValues() {
|
| - // TODO(jacobr): generate a lazy collection instead.
|
| - final attributes = _element.attributes;
|
| - final values = new List<String>(attributes.length);
|
| - for (int i = 0, len = attributes.length; i < len; i++) {
|
| - values[i] = attributes.item(i).value;
|
| - }
|
| - return values;
|
| - }
|
| -
|
| - /**
|
| - * The number of {key, value} pairs in the map.
|
| - */
|
| - int get length() {
|
| - return _element.attributes.length;
|
| - }
|
| -
|
| - /**
|
| - * Returns true if there is no {key, value} pair in the map.
|
| - */
|
| - bool isEmpty() {
|
| - return !_element.hasAttributes();
|
| - }
|
| -}
|
| -
|
| -class ElementEventsImplementation extends EventsImplementation implements ElementEvents {
|
| - ElementEventsImplementation._wrap(_ptr) : super._wrap(_ptr);
|
| -
|
| - EventListenerList get abort() => _get("abort");
|
| - EventListenerList get beforeCopy() => _get("beforecopy");
|
| - EventListenerList get beforeCut() => _get("beforecut");
|
| - EventListenerList get beforePaste() => _get("beforepaste");
|
| - EventListenerList get blur() => _get("blur");
|
| - EventListenerList get change() => _get("change");
|
| - EventListenerList get click() => _get("click");
|
| - EventListenerList get contextMenu() => _get("contextmenu");
|
| - EventListenerList get copy() => _get("copy");
|
| - EventListenerList get cut() => _get("cut");
|
| - EventListenerList get dblClick() => _get("dblclick");
|
| - EventListenerList get drag() => _get("drag");
|
| - EventListenerList get dragEnd() => _get("dragend");
|
| - EventListenerList get dragEnter() => _get("dragenter");
|
| - EventListenerList get dragLeave() => _get("dragleave");
|
| - EventListenerList get dragOver() => _get("dragover");
|
| - EventListenerList get dragStart() => _get("dragstart");
|
| - EventListenerList get drop() => _get("drop");
|
| - EventListenerList get error() => _get("error");
|
| - EventListenerList get focus() => _get("focus");
|
| - EventListenerList get input() => _get("input");
|
| - EventListenerList get invalid() => _get("invalid");
|
| - EventListenerList get keyDown() => _get("keydown");
|
| - EventListenerList get keyPress() => _get("keypress");
|
| - EventListenerList get keyUp() => _get("keyup");
|
| - EventListenerList get load() => _get("load");
|
| - EventListenerList get mouseDown() => _get("mousedown");
|
| - EventListenerList get mouseMove() => _get("mousemove");
|
| - EventListenerList get mouseOut() => _get("mouseout");
|
| - EventListenerList get mouseOver() => _get("mouseover");
|
| - EventListenerList get mouseUp() => _get("mouseup");
|
| - EventListenerList get mouseWheel() => _get("mousewheel");
|
| - EventListenerList get paste() => _get("paste");
|
| - EventListenerList get reset() => _get("reset");
|
| - EventListenerList get scroll() => _get("scroll");
|
| - EventListenerList get search() => _get("search");
|
| - EventListenerList get select() => _get("select");
|
| - EventListenerList get selectStart() => _get("selectstart");
|
| - EventListenerList get submit() => _get("submit");
|
| - EventListenerList get touchCancel() => _get("touchcancel");
|
| - EventListenerList get touchEnd() => _get("touchend");
|
| - EventListenerList get touchLeave() => _get("touchleave");
|
| - EventListenerList get touchMove() => _get("touchmove");
|
| - EventListenerList get touchStart() => _get("touchstart");
|
| - EventListenerList get transitionEnd() => _get("webkitTransitionEnd");
|
| - EventListenerList get fullscreenChange() => _get("webkitfullscreenchange");
|
| -}
|
| -
|
| -class SimpleClientRect implements ClientRect {
|
| - final num left;
|
| - final num top;
|
| - final num width;
|
| - final num height;
|
| - num get right() => left + width;
|
| - num get bottom() => top + height;
|
| -
|
| - const SimpleClientRect(this.left, this.top, this.width, this.height);
|
| -
|
| - bool operator ==(ClientRect other) {
|
| - return other !== null && left == other.left && top == other.top
|
| - && width == other.width && height == other.height;
|
| - }
|
| -
|
| - String toString() => "($left, $top, $width, $height)";
|
| -}
|
| -
|
| -// TODO(jacobr): we cannot currently be lazy about calculating the client
|
| -// rects as we must perform all measurement queries at a safe point to avoid
|
| -// triggering unneeded layouts.
|
| -/**
|
| - * All your element measurement needs in one place
|
| - * @domName none
|
| - */
|
| -class ElementRectWrappingImplementation implements ElementRect {
|
| - final ClientRect client;
|
| - final ClientRect offset;
|
| - final ClientRect scroll;
|
| -
|
| - // TODO(jacobr): should we move these outside of ElementRect to avoid the
|
| - // overhead of computing them every time even though they are rarely used.
|
| - // This should be type dom.ClientRect but that fails on dartium. b/5522629
|
| - final _boundingClientRect;
|
| - // an exception due to a dartium bug.
|
| - final _clientRects; // TODO(jacobr): should be dom.ClientRectList
|
| -
|
| - ElementRectWrappingImplementation(dom.HTMLElement element) :
|
| - client = new SimpleClientRect(element.clientLeft,
|
| - element.clientTop,
|
| - element.clientWidth,
|
| - element.clientHeight),
|
| - offset = new SimpleClientRect(element.offsetLeft,
|
| - element.offsetTop,
|
| - element.offsetWidth,
|
| - element.offsetHeight),
|
| - scroll = new SimpleClientRect(element.scrollLeft,
|
| - element.scrollTop,
|
| - element.scrollWidth,
|
| - element.scrollHeight),
|
| - _boundingClientRect = element.getBoundingClientRect(),
|
| - _clientRects = element.getClientRects();
|
| -
|
| - ClientRect get bounding() =>
|
| - LevelDom.wrapClientRect(_boundingClientRect);
|
| -
|
| - List<ClientRect> get clientRects() {
|
| - final out = new List(_clientRects.length);
|
| - for (num i = 0; i < _clientRects.length; i++) {
|
| - out[i] = LevelDom.wrapClientRect(_clientRects.item(i));
|
| - }
|
| - return out;
|
| - }
|
| -}
|
| -
|
| -final _START_TAG_REGEXP = const RegExp('<(\\w+)');
|
| -
|
| -/** @domName Element, HTMLElement */
|
| -class ElementWrappingImplementation extends NodeWrappingImplementation implements Element {
|
| -
|
| - static final _CUSTOM_PARENT_TAG_MAP = const {
|
| - 'body' : 'html',
|
| - 'head' : 'html',
|
| - 'caption' : 'table',
|
| - 'td': 'tr',
|
| - 'colgroup': 'table',
|
| - 'col' : 'colgroup',
|
| - 'tr' : 'tbody',
|
| - 'tbody' : 'table',
|
| - 'tfoot' : 'table',
|
| - 'thead' : 'table',
|
| - 'track' : 'audio',
|
| - };
|
| -
|
| - /** @domName Document.createElement */
|
| - factory ElementWrappingImplementation.html(String html) {
|
| - // TODO(jacobr): this method can be made more robust and performant.
|
| - // 1) Cache the dummy parent elements required to use innerHTML rather than
|
| - // creating them every call.
|
| - // 2) Verify that the html does not contain leading or trailing text nodes.
|
| - // 3) Verify that the html does not contain both <head> and <body> tags.
|
| - // 4) Detatch the created element from its dummy parent.
|
| - String parentTag = 'div';
|
| - String tag;
|
| - final match = _START_TAG_REGEXP.firstMatch(html);
|
| - if (match !== null) {
|
| - tag = match.group(1).toLowerCase();
|
| - if (_CUSTOM_PARENT_TAG_MAP.containsKey(tag)) {
|
| - parentTag = _CUSTOM_PARENT_TAG_MAP[tag];
|
| - }
|
| - }
|
| - // TODO(jacobr): make type dom.HTMLElement when dartium allows it.
|
| - var temp = dom.document.createElement(parentTag);
|
| - temp.innerHTML = html;
|
| -
|
| - Element element;
|
| - if (temp.childElementCount == 1) {
|
| - element = LevelDom.wrapElement(temp.firstElementChild);
|
| - } else if (parentTag == 'html' && temp.childElementCount == 2) {
|
| - // Work around for edge case in WebKit and possibly other browsers where
|
| - // both body and head elements are created even though the inner html
|
| - // only contains a head or body element.
|
| - element = LevelDom.wrapElement(temp.children.item(tag == 'head' ? 0 : 1));
|
| - } else {
|
| - throw new IllegalArgumentException('HTML had ${temp.childElementCount} ' +
|
| - 'top level elements but 1 expected');
|
| - }
|
| - element.remove();
|
| - return element;
|
| - }
|
| -
|
| - /** @domName Document.createElement */
|
| - factory ElementWrappingImplementation.tag(String tag) {
|
| - return LevelDom.wrapElement(dom.document.createElement(tag));
|
| - }
|
| -
|
| - ElementWrappingImplementation._wrap(ptr) : super._wrap(ptr);
|
| -
|
| - ElementAttributeMap _elementAttributeMap;
|
| - ElementList _elements;
|
| - _CssClassSet _cssClassSet;
|
| - _DataAttributeMap _dataAttributes;
|
| -
|
| - /**
|
| - * @domName Element.hasAttribute, Element.getAttribute, Element.setAttribute,
|
| - * Element.removeAttribute
|
| - */
|
| - Map<String, String> get attributes() {
|
| - if (_elementAttributeMap === null) {
|
| - _elementAttributeMap = new ElementAttributeMap._wrap(_ptr);
|
| - }
|
| - return _elementAttributeMap;
|
| - }
|
| -
|
| - void set attributes(Map<String, String> value) {
|
| - Map<String, String> attributes = this.attributes;
|
| - attributes.clear();
|
| - for (String key in value.getKeys()) {
|
| - attributes[key] = value[key];
|
| - }
|
| - }
|
| -
|
| - void set elements(Collection<Element> value) {
|
| - final elements = this.elements;
|
| - elements.clear();
|
| - elements.addAll(value);
|
| - }
|
| -
|
| - /**
|
| - * @domName childElementCount, firstElementChild, lastElementChild,
|
| - * children, Node.appendChild
|
| - */
|
| - ElementList get elements() {
|
| - if (_elements == null) {
|
| - _elements = new _ChildrenElementList._wrap(_ptr);
|
| - }
|
| - return _elements;
|
| - }
|
| -
|
| - /** @domName className, classList */
|
| - Set<String> get classes() {
|
| - if (_cssClassSet === null) {
|
| - _cssClassSet = new _CssClassSet(_ptr);
|
| - }
|
| - return _cssClassSet;
|
| - }
|
| -
|
| - void set classes(Collection<String> value) {
|
| - _CssClassSet classSet = classes;
|
| - classSet.clear();
|
| - classSet.addAll(value);
|
| - }
|
| -
|
| - Map<String, String> get dataAttributes() {
|
| - if (_dataAttributes === null) {
|
| - _dataAttributes = new _DataAttributeMap(attributes);
|
| - }
|
| - return _dataAttributes;
|
| - }
|
| -
|
| - void set dataAttributes(Map<String, String> value) {
|
| - Map<String, String> dataAttributes = this.dataAttributes;
|
| - dataAttributes.clear();
|
| - for (String key in value.getKeys()) {
|
| - dataAttributes[key] = value[key];
|
| - }
|
| - }
|
| -
|
| - String get contentEditable() => _ptr.contentEditable;
|
| -
|
| - void set contentEditable(String value) { _ptr.contentEditable = value; }
|
| -
|
| - String get dir() => _ptr.dir;
|
| -
|
| - void set dir(String value) { _ptr.dir = value; }
|
| -
|
| - bool get draggable() => _ptr.draggable;
|
| -
|
| - void set draggable(bool value) { _ptr.draggable = value; }
|
| -
|
| - Element get firstElementChild() => LevelDom.wrapElement(_ptr.firstElementChild);
|
| -
|
| - bool get hidden() => _ptr.hidden;
|
| -
|
| - void set hidden(bool value) { _ptr.hidden = value; }
|
| -
|
| - String get id() => _ptr.id;
|
| -
|
| - void set id(String value) { _ptr.id = value; }
|
| -
|
| - String get innerHTML() => _ptr.innerHTML;
|
| -
|
| - void set innerHTML(String value) { _ptr.innerHTML = value; }
|
| -
|
| - bool get isContentEditable() => _ptr.isContentEditable;
|
| -
|
| - String get lang() => _ptr.lang;
|
| -
|
| - void set lang(String value) { _ptr.lang = value; }
|
| -
|
| - Element get lastElementChild() => LevelDom.wrapElement(_ptr.lastElementChild);
|
| -
|
| - Element get nextElementSibling() => LevelDom.wrapElement(_ptr.nextElementSibling);
|
| -
|
| - Element get offsetParent() => LevelDom.wrapElement(_ptr.offsetParent);
|
| -
|
| - String get outerHTML() => _ptr.outerHTML;
|
| -
|
| - Element get previousElementSibling() => LevelDom.wrapElement(_ptr.previousElementSibling);
|
| -
|
| - bool get spellcheck() => _ptr.spellcheck;
|
| -
|
| - void set spellcheck(bool value) { _ptr.spellcheck = value; }
|
| -
|
| - CSSStyleDeclaration get style() => LevelDom.wrapCSSStyleDeclaration(_ptr.style);
|
| -
|
| - int get tabIndex() => _ptr.tabIndex;
|
| -
|
| - void set tabIndex(int value) { _ptr.tabIndex = value; }
|
| -
|
| - String get tagName() => _ptr.tagName;
|
| -
|
| - String get title() => _ptr.title;
|
| -
|
| - void set title(String value) { _ptr.title = value; }
|
| -
|
| - String get webkitdropzone() => _ptr.webkitdropzone;
|
| -
|
| - void set webkitdropzone(String value) { _ptr.webkitdropzone = value; }
|
| -
|
| - void blur() {
|
| - _ptr.blur();
|
| - }
|
| -
|
| - bool contains(Node element) {
|
| - return _ptr.contains(LevelDom.unwrap(element));
|
| - }
|
| -
|
| - void focus() {
|
| - _ptr.focus();
|
| - }
|
| -
|
| - Element insertAdjacentElement([String where = null, Element element = null]) {
|
| - return LevelDom.wrapElement(_ptr.insertAdjacentElement(where, LevelDom.unwrap(element)));
|
| - }
|
| -
|
| - void insertAdjacentHTML([String position_OR_where = null, String text = null]) {
|
| - _ptr.insertAdjacentHTML(position_OR_where, text);
|
| - }
|
| -
|
| - void insertAdjacentText([String where = null, String text = null]) {
|
| - _ptr.insertAdjacentText(where, text);
|
| - }
|
| -
|
| - /** @domName querySelector, Document.getElementById */
|
| - Element query(String selectors) {
|
| - // TODO(jacobr): scope fix.
|
| - return LevelDom.wrapElement(_ptr.querySelector(selectors));
|
| - }
|
| -
|
| - /**
|
| - * @domName querySelectorAll, getElementsByClassName, getElementsByTagName,
|
| - * getElementsByTagNameNS
|
| - */
|
| - ElementList queryAll(String selectors) {
|
| - // TODO(jacobr): scope fix.
|
| - return new FrozenElementList._wrap(_ptr.querySelectorAll(selectors));
|
| - }
|
| -
|
| - void scrollByLines([int lines = null]) {
|
| - _ptr.scrollByLines(lines);
|
| - }
|
| -
|
| - void scrollByPages([int pages = null]) {
|
| - _ptr.scrollByPages(pages);
|
| - }
|
| -
|
| - /** @domName scrollIntoView, scrollIntoViewIfNeeded */
|
| - void scrollIntoView([bool centerIfNeeded = null]) {
|
| - _ptr.scrollIntoViewIfNeeded(centerIfNeeded);
|
| - }
|
| -
|
| - bool matchesSelector([String selectors = null]) {
|
| - return _ptr.webkitMatchesSelector(selectors);
|
| - }
|
| -
|
| - void set scrollLeft(int value) { _ptr.scrollLeft = value; }
|
| -
|
| - void set scrollTop(int value) { _ptr.scrollTop = value; }
|
| -
|
| - /**
|
| - * @domName getClientRects, getBoundingClientRect, clientHeight, clientWidth,
|
| - * clientTop, clientLeft, offsetHeight, offsetWidth, offsetTop, offsetLeft,
|
| - * scrollHeight, scrollWidth, scrollTop, scrollLeft
|
| - */
|
| - Future<ElementRect> get rect() {
|
| - return _createMeasurementFuture(
|
| - () => new ElementRectWrappingImplementation(_ptr),
|
| - new Completer<ElementRect>());
|
| - }
|
| -
|
| - /** @domName Window.getComputedStyle */
|
| - Future<CSSStyleDeclaration> get computedStyle() {
|
| - // TODO(jacobr): last param should be null, see b/5045788
|
| - return getComputedStyle('');
|
| - }
|
| -
|
| - /** @domName Window.getComputedStyle */
|
| - Future<CSSStyleDeclaration> getComputedStyle(String pseudoElement) {
|
| - return _createMeasurementFuture(() =>
|
| - LevelDom.wrapCSSStyleDeclaration(
|
| - dom.window.getComputedStyle(_ptr, pseudoElement)),
|
| - new Completer<CSSStyleDeclaration>());
|
| - }
|
| -
|
| - ElementEvents get on() {
|
| - if (_on === null) {
|
| - _on = new ElementEventsImplementation._wrap(_ptr);
|
| - }
|
| - return _on;
|
| - }
|
| -
|
| - Element clone(bool deep) => super.clone(deep);
|
| -}
|
|
|