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

Unified Diff: lib/html/frog/html_frog.dart

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:
Download patch
Index: lib/html/frog/html_frog.dart
diff --git a/lib/html/frog/html_frog.dart b/lib/html/frog/html_frog.dart
index 3f8e89762f99197758236d937df1fbab0ed3e2c6..438c2ec48b4a3594e1109ac0d6114f30d991ccf5 100644
--- a/lib/html/frog/html_frog.dart
+++ b/lib/html/frog/html_frog.dart
@@ -9116,9 +9116,6 @@ class _MouseEventImpl extends _UIEventImpl implements MouseEvent native "*MouseE
void $dom_initMouseEvent(String type, bool canBubble, bool cancelable, _WindowImpl view, int detail, int screenX, int screenY, int clientX, int clientY, bool ctrlKey, bool altKey, bool shiftKey, bool metaKey, int button, _EventTargetImpl relatedTarget) native "initMouseEvent";
}
-class _MutationCallbackImpl implements MutationCallback native "*MutationCallback" {
-}
-
class _MutationEventImpl extends _EventImpl implements MutationEvent native "*MutationEvent" {
static final int ADDITION = 2;
@@ -9139,6 +9136,80 @@ class _MutationEventImpl extends _EventImpl implements MutationEvent native "*Mu
void initMutationEvent(String type, bool canBubble, bool cancelable, _NodeImpl relatedNode, String prevValue, String newValue, String attrName, int attrChange) native;
}
+// 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 _MutationObserverImpl implements MutationObserver native "*WebKitMutationObserver" {
+
+ void disconnect() native;
+
+ void _observe(_NodeImpl target, Map options) native "observe";
+
+ List<MutationRecord> takeRecords() native;
+
+ 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 };
+
+
+ static _createDict() => JS('var', '{}');
+ static _add(Map m, String key, value) { JS('void', '#[#] = #', m, key, value); }
+ static _lookup(Map m, String key) => JS('var', '#[#]', m, key);
+ static _fixupList(list) => list; // TODO: Ensure is a JavaScript Array.
+
+ // Call native function with no conversions.
+ _call(Node target, options) native 'observe';
+}
class _MutationRecordImpl implements MutationRecord native "*MutationRecord" {
@@ -16274,15 +16345,6 @@ class _WebKitCSSFilterValueImpl extends _CSSValueListImpl implements WebKitCSSFi
final int operationType;
}
-class _WebKitMutationObserverImpl implements WebKitMutationObserver native "*WebKitMutationObserver" {
-
- void disconnect() native;
-
- void observe(_NodeImpl target, Map options) native;
-
- List<MutationRecord> takeRecords() native;
-}
-
class _WebKitNamedFlowImpl implements WebKitNamedFlow native "*WebKitNamedFlow" {
final String name;
@@ -17576,6 +17638,18 @@ class _MessageChannelFactoryProvider {
// 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 _MutationObserverFactoryProvider {
+ factory MutationObserver(MutationCallback callback) native '''
+ var constructor =
+ window.WebKitMutationObserver || window.MozMutationObserver ||
+ window.MutationObserver;
+ return new constructor(callback);
+ ''';
+}
+// 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 _NotificationFactoryProvider {
factory Notification(String title, [Map options]) native
'''return new Notification(title, options);''';
@@ -26806,9 +26880,7 @@ interface MouseEvent extends UIEvent default _MouseEventFactoryProvider {
// WARNING: Do not edit - generated code.
-/// @domName MutationCallback
-interface MutationCallback {
-}
+typedef bool MutationCallback(List<MutationRecord> mutations, WebKitMutationObserver observer);
// 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.
@@ -26848,6 +26920,33 @@ interface MutationEvent extends Event {
// WARNING: Do not edit - generated code.
+/// @domName WebKitMutationObserver
+interface MutationObserver default _MutationObserverFactoryProvider {
+
+ MutationObserver(MutationCallback callback);
+
+ /** @domName WebKitMutationObserver.disconnect */
+ void disconnect();
+
+ /** @domName WebKitMutationObserver.takeRecords */
+ List<MutationRecord> takeRecords();
+
+ void observe(Node target,
+ [Map options,
+ bool childList,
+ bool attributes,
+ bool characterData,
+ bool subtree,
+ bool attributeOldValue,
+ bool characterDataOldValue,
+ List<String> attributeFilter]);
+}
+// 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.
+
+// WARNING: Do not edit - generated code.
+
/// @domName MutationRecord
interface MutationRecord {
@@ -34933,24 +35032,6 @@ interface WebKitCSSFilterValue extends CSSValueList {
// WARNING: Do not edit - generated code.
-/// @domName WebKitMutationObserver
-interface WebKitMutationObserver {
-
- /** @domName WebKitMutationObserver.disconnect */
- void disconnect();
-
- /** @domName WebKitMutationObserver.observe */
- void observe(Node target, Map options);
-
- /** @domName WebKitMutationObserver.takeRecords */
- List<MutationRecord> takeRecords();
-}
-// 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.
-
-// WARNING: Do not edit - generated code.
-
/// @domName WebKitNamedFlow
interface WebKitNamedFlow {

Powered by Google App Engine
This is Rietveld 408576698