Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(169)

Unified Diff: lib/html/dart2js/html_dart2js.dart

Side-by-side diff isn't available for this file because of its large size.
Issue 10854208: Adding Element.AddHTML and Element.addText methods. (Closed) Base URL: https://dart.googlecode.com/svn/branches/bleeding_edge/dart
Patch Set: Implementing polyfills for insertAdjacent* to get tests working on FF. Created 8 years, 3 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
Download patch
« no previous file with comments | « lib/dom/templates/html/interface/interface_Element.darttemplate ('k') | lib/html/dartium/html_dartium.dart » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: lib/html/dart2js/html_dart2js.dart
diff --git a/lib/html/dart2js/html_dart2js.dart b/lib/html/dart2js/html_dart2js.dart
index 4882362c6aea506098206f31e82f76d543661bae..8a4fc7f7de79bb750f975b0d2bc1a6186397287b 100644
--- a/lib/html/dart2js/html_dart2js.dart
+++ b/lib/html/dart2js/html_dart2js.dart
@@ -5146,6 +5146,14 @@ class _DocumentFragmentImpl extends _NodeImpl implements DocumentFragment native
this._insertAdjacentNode(where, new DocumentFragment.html(text));
}
+ void addText(String text) {
+ this.insertAdjacentText('beforeend', text);
+ }
+
+ void addHTML(String text) {
+ this.insertAdjacentHTML('beforeend', text);
+ }
+
Future<ElementRect> get rect() {
return _createMeasurementFuture(() => const EmptyElementRect(),
new Completer<ElementRect>());
@@ -5963,14 +5971,14 @@ class _ElementRectImpl implements ElementRect {
// TODO(jacobr): should we move these outside of ElementRect to avoid the
// overhead of computing them every time even though they are rarely used.
- final _ClientRectImpl _boundingClientRect;
+ final _ClientRectImpl _boundingClientRect;
final _ClientRectListImpl _clientRects;
_ElementRectImpl(_ElementImpl element) :
client = new _SimpleClientRect(element.$dom_clientLeft,
element.$dom_clientTop,
- element.$dom_clientWidth,
- element.$dom_clientHeight),
+ element.$dom_clientWidth,
+ element.$dom_clientHeight),
offset = new _SimpleClientRect(element.$dom_offsetLeft,
element.$dom_offsetTop,
element.$dom_offsetWidth,
@@ -6059,11 +6067,74 @@ class _ElementImpl extends _NodeImpl implements Element native "*Element" {
new Completer<CSSStyleDeclaration>());
}
+ void addText(String text) {
+ this.insertAdjacentText('beforeend', text);
+ }
+
+ void addHTML(String text) {
+ this.insertAdjacentHTML('beforeend', text);
+ }
+
// Hooks to support custom WebComponents.
var xtag;
// TODO(vsm): Implement noSuchMethod or similar for dart2js.
+ /** @domName Element.insertAdjacentText */
+ void insertAdjacentText(String where, String text) {
+ if (JS('bool', '!!this.insertAdjacentText')) {
+ _insertAdjacentText(where, text);
+ } else {
+ _insertAdjacentNode(where, new Text(text));
+ }
+ }
+
+ void _insertAdjacentText(String where, String text)
+ native 'insertAdjacentText';
+
+ /** @domName Element.insertAdjacentHTML */
+ void insertAdjacentHTML(String where, String text) {
+ if (JS('bool', '!!this.insertAdjacentHTML')) {
+ _insertAdjacentHTML(where, text);
+ } else {
+ _insertAdjacentNode(where, new DocumentFragment.html(text));
+ }
+ }
+
+ void _insertAdjacentHTML(String where, String text)
+ native 'insertAdjacentHTML';
+
+ /** @domName Element.insertAdjacentHTML */
+ void insertAdjacentElement(String where, Element element) {
+ if (JS('bool', '!!this.insertAdjacentElement')) {
+ _insertAdjacentElement(where, element);
+ } else {
+ _insertAdjacentNode(where, element);
+ }
+ }
+
+ void _insertAdjacentElement(String where, String text)
+ native 'insertAdjacentElement';
+
+ void _insertAdjacentNode(String where, Node node) {
+ switch (where.toLowerCase()) {
+ case 'beforebegin':
+ this.parent.insertBefore(node, this);
+ break;
+ case 'afterbegin':
+ this.insertBefore(node, this.nodes.first);
+ break;
+ case 'beforeend':
+ this.nodes.add(node);
+ break;
+ case 'afterend':
+ this.parent.insertBefore(node, this.nextNode);
+ break;
+ default:
+ throw new IllegalArgumentException("Invalid position ${where}");
+ }
+ }
+
_ElementEventsImpl get on() =>
new _ElementEventsImpl(this);
@@ -6100,12 +6171,6 @@ class _ElementImpl extends _NodeImpl implements Element native "*Element" {
void click() native;
- _ElementImpl insertAdjacentElement(String where, _ElementImpl element) native;
-
- void insertAdjacentHTML(String where, String html) native;
-
- void insertAdjacentText(String where, String text) native;
-
static final int ALLOW_KEYBOARD_INPUT = 1;
int get $dom_childElementCount() native "return this.childElementCount;";
@@ -23230,6 +23295,17 @@ interface Element extends Node, NodeSelector default _ElementFactoryProvider {
void set dataAttributes(Map<String, String> value);
/**
+ * Adds the specified text as a text node after the last child of this.
+ */
+ void addText(String text);
+
+ /**
+ * Parses the specified text as HTML and adds the resulting node after the
+ * last child of this.
+ */
+ void addHTML(String html);
+
+ /**
* @domName getClientRects, getBoundingClientRect, clientHeight, clientWidth,
* clientTop, clientLeft, offsetHeight, offsetWidth, offsetTop, offsetLeft,
* scrollHeight, scrollWidth, scrollTop, scrollLeft
« no previous file with comments | « lib/dom/templates/html/interface/interface_Element.darttemplate ('k') | lib/html/dartium/html_dartium.dart » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698