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

Unified Diff: lib/dom/templates/html/impl/impl_MutationObserver.darttemplate

Issue 10696209: MutationObserver (Closed) Base URL: https://dart.googlecode.com/svn/branches/bleeding_edge/dart
Patch Set: Created 8 years, 5 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:
View side-by-side diff with in-line comments
Download patch
Index: lib/dom/templates/html/impl/impl_MutationObserver.darttemplate
diff --git a/lib/dom/templates/html/impl/impl_MutationObserver.darttemplate b/lib/dom/templates/html/impl/impl_MutationObserver.darttemplate
new file mode 100644
index 0000000000000000000000000000000000000000..6d4e2998c4c4c0980771ee66f76b8f39566c9b27
--- /dev/null
+++ b/lib/dom/templates/html/impl/impl_MutationObserver.darttemplate
@@ -0,0 +1,78 @@
+// Copyright (c) 2012, 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.
+
+class $CLASSNAME$EXTENDS$IMPLEMENTS$NATIVESPEC {
+$!MEMBERS
+ void observe(Node target,
+ [Map options,
+ bool childList,
+ bool attributes,
+ bool characterData,
+ bool subtree,
+ bool attributeOldValue,
+ bool characterDataOldValue,
+ List<String> attributeFilter]) {
+
+ // Parse options into map of known type.
+ var parsedOptions = _createDict();
+
+ if (options != null) {
+ options.forEach((k, v) {
+ if (_boolKeys.containsKey(k)) {
+ _add(parsedOptions, k, true === v);
+ } else if (k == 'attributeFilter') {
+ _add(parsedOptions, k, _fixupList(v));
+ } else {
+ throw new IllegalArgumentException(
+ "Illegal MutationObserver.observe option '$k'");
+ }
+ });
+ }
+
+ // Override options passed in the map with named optional arguments.
+ override(key, value) {
+ if (value != null) _add(parsedOptions, key, value);
+ }
+
+ override('childList', childList);
+ override('attributes', attributes);
+ override('characterData', characterData);
+ override('subtree', subtree);
+ override('attributeOldValue', attributeOldValue);
+ override('characterDataOldValue', characterDataOldValue);
+ if (attributeFilter != null) {
+ override('attributeFilter', _fixupList(attributeFilter));
+ }
+
+ _call(target, parsedOptions);
+ }
+
+ // TODO: Change to a set when const Sets are available.
+ static final _boolKeys =
+ const {'childList': true,
+ 'attributes': true,
+ 'characterData': true,
+ 'subtree': true,
+ 'attributeOldValue': true,
+ 'characterDataOldValue': true };
+
+$if DARTIUM
+ static _createDict() => {};
+ static _add(m, String key, value) { m[key] = value; }
+ static _fixupList(list) => list;
+
+ _call(Node target, options) {
+ _observe(target, options);
+ }
+$endif
+
+$if FROG
+ static _createDict() => JS('var', '{}');
+ static _add(m, String key, value) { JS('void', '#[#] = #', m, key, value); }
+ static _fixupList(list) => list; // TODO: Ensure is a JavaScript Array.
+
+ // Call native function with no conversions.
+ _call(target, options) native 'observe';
+$endif
+}

Powered by Google App Engine
This is Rietveld 408576698