| OLD | NEW |
| 1 // Copyright (c) 2013, the Dart project authors. Please see the AUTHORS file | 1 // Copyright (c) 2013, the Dart project authors. Please see the AUTHORS file |
| 2 // for details. All rights reserved. Use of this source code is governed by a | 2 // for details. All rights reserved. Use of this source code is governed by a |
| 3 // BSD-style license that can be found in the LICENSE file. | 3 // BSD-style license that can be found in the LICENSE file. |
| 4 | 4 |
| 5 /** | 5 /** |
| 6 * Support for interoperating with JavaScript. | 6 * Support for interoperating with JavaScript. |
| 7 * | 7 * |
| 8 * This library provides access to JavaScript objects from Dart, allowing | 8 * This library provides access to JavaScript objects from Dart, allowing |
| 9 * Dart code to get and set properties, and call methods of JavaScript objects | 9 * Dart code to get and set properties, and call methods of JavaScript objects |
| 10 * and invoke JavaScript functions. The library takes care of converting | 10 * and invoke JavaScript functions. The library takes care of converting |
| (...skipping 69 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 80 * `a` and `b` defined: | 80 * `a` and `b` defined: |
| 81 * | 81 * |
| 82 * var jsMap = new JsObject.jsify({'a': 1, 'b': 2}); | 82 * var jsMap = new JsObject.jsify({'a': 1, 'b': 2}); |
| 83 * | 83 * |
| 84 * This expression creates a JavaScript array: | 84 * This expression creates a JavaScript array: |
| 85 * | 85 * |
| 86 * var jsArray = new JsObject.jsify([1, 2, 3]); | 86 * var jsArray = new JsObject.jsify([1, 2, 3]); |
| 87 */ | 87 */ |
| 88 library dart.js; | 88 library dart.js; |
| 89 | 89 |
| 90 import 'dart:async' show Zone; |
| 90 import 'dart:collection' show ListMixin; | 91 import 'dart:collection' show ListMixin; |
| 91 import 'dart:nativewrappers'; | 92 import 'dart:nativewrappers'; |
| 92 | 93 |
| 93 JsObject _cachedContext; | 94 JsObject _cachedContext; |
| 94 | 95 |
| 95 JsObject get _context native "Js_context_Callback"; | 96 JsObject get _context native "Js_context_Callback"; |
| 96 | 97 |
| 97 JsObject get context { | 98 JsObject get context { |
| 98 if (_cachedContext == null) { | 99 if (_cachedContext == null) { |
| 99 _cachedContext = _context; | 100 _cachedContext = _context; |
| (...skipping 253 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 353 var args = [start, length]..addAll(iterable.skip(skipCount).take(length)); | 354 var args = [start, length]..addAll(iterable.skip(skipCount).take(length)); |
| 354 callMethod('splice', args); | 355 callMethod('splice', args); |
| 355 } | 356 } |
| 356 | 357 |
| 357 void sort([int compare(E a, E b)]) { | 358 void sort([int compare(E a, E b)]) { |
| 358 callMethod('sort', [compare]); | 359 callMethod('sort', [compare]); |
| 359 } | 360 } |
| 360 } | 361 } |
| 361 | 362 |
| 362 /** | 363 /** |
| 364 * This function performs any wrapping of a Dart value before Dartium proxies |
| 365 * it to JS. |
| 366 */ |
| 367 _wrapToJs(value) => value is Function ? _applyZoned(value) : value; |
| 368 |
| 369 _applyZoned(f) { |
| 370 var call = (List arguments) => Function.apply(f, arguments); |
| 371 if (Zone.current == Zone.ROOT) return call; |
| 372 return Zone.current.bindUnaryCallback(call); |
| 373 } |
| 374 |
| 375 /** |
| 363 * Placeholder object for cases where we need to determine exactly how many | 376 * Placeholder object for cases where we need to determine exactly how many |
| 364 * args were passed to a function. | 377 * args were passed to a function. |
| 365 */ | 378 */ |
| 366 const _UNDEFINED = const Object(); | 379 const _UNDEFINED = const Object(); |
| 367 | 380 |
| 368 // FIXME(jacobr): this method is a hack to work around the lack of proper dart | 381 // FIXME(jacobr): this method is a hack to work around the lack of proper dart |
| 369 // support for varargs methods. | 382 // support for varargs methods. |
| 370 List _stripUndefinedArgs(List args) => | 383 List _stripUndefinedArgs(List args) => |
| 371 args.takeWhile((i) => i != _UNDEFINED).toList(); | 384 args.takeWhile((i) => i != _UNDEFINED).toList(); |
| 372 | 385 |
| 373 /** | 386 /** |
| 374 * Returns a method that can be called with an arbitrary number (for n less | 387 * Returns a method that can be called with an arbitrary number (for n less |
| 375 * than 11) of arguments without violating Dart type checks. | 388 * than 11) of arguments without violating Dart type checks. |
| 376 */ | 389 */ |
| 377 Function _wrapAsDebuggerVarArgsFunction(JsFunction jsFunction) => | 390 Function _wrapAsDebuggerVarArgsFunction(JsFunction jsFunction) => |
| 378 ([a1=_UNDEFINED, a2=_UNDEFINED, a3=_UNDEFINED, a4=_UNDEFINED, | 391 ([a1=_UNDEFINED, a2=_UNDEFINED, a3=_UNDEFINED, a4=_UNDEFINED, |
| 379 a5=_UNDEFINED, a6=_UNDEFINED, a7=_UNDEFINED, a8=_UNDEFINED, | 392 a5=_UNDEFINED, a6=_UNDEFINED, a7=_UNDEFINED, a8=_UNDEFINED, |
| 380 a9=_UNDEFINED, a10=_UNDEFINED]) => | 393 a9=_UNDEFINED, a10=_UNDEFINED]) => |
| 381 jsFunction._applyDebuggerOnly(_stripUndefinedArgs( | 394 jsFunction._applyDebuggerOnly(_stripUndefinedArgs( |
| 382 [a1,a2,a3,a4,a5,a6,a7,a8,a9,a10])); | 395 [a1,a2,a3,a4,a5,a6,a7,a8,a9,a10])); |
| OLD | NEW |