| 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 189 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 200 _members.add(mirror); | 200 _members.add(mirror); |
| 201 } | 201 } |
| 202 | 202 |
| 203 final List<mirrors.DeclarationMirror> _members; | 203 final List<mirrors.DeclarationMirror> _members; |
| 204 } | 204 } |
| 205 | 205 |
| 206 /** | 206 /** |
| 207 * Temporary method that we hope to remove at some point. This method should | 207 * Temporary method that we hope to remove at some point. This method should |
| 208 * generally only be called by machine generated code. | 208 * generally only be called by machine generated code. |
| 209 */ | 209 */ |
| 210 | |
| 211 void registerJsInterfaces([List<Type> classes]) { | 210 void registerJsInterfaces([List<Type> classes]) { |
| 212 // This method is now obsolete in Dartium. | 211 // This method is now obsolete in Dartium. |
| 213 } | 212 } |
| 214 | 213 |
| 215 void _registerJsInterfaces(List<Type> classes) { | 214 void _registerJsInterfaces(List<Type> classes) { |
| 216 for (Type type in classes) { | 215 for (Type type in classes) { |
| 217 if (!_jsInterfaceTypes.add(type)) continue; // Already registered. | 216 if (!_jsInterfaceTypes.add(type)) continue; // Already registered. |
| 218 mirrors.ClassMirror typeMirror = mirrors.reflectType(type); | 217 mirrors.ClassMirror typeMirror = mirrors.reflectType(type); |
| 219 typeMirror.declarations.forEach((symbol, declaration) { | 218 typeMirror.declarations.forEach((symbol, declaration) { |
| 220 if (declaration is mirrors.MethodMirror || | 219 if (declaration is mirrors.MethodMirror || |
| (...skipping 73 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 294 } | 293 } |
| 295 return name; | 294 return name; |
| 296 } | 295 } |
| 297 | 296 |
| 298 final _JS_LIBRARY_PREFIX = "js_library"; | 297 final _JS_LIBRARY_PREFIX = "js_library"; |
| 299 final _UNDEFINED_VAR = "_UNDEFINED_JS_CONST"; | 298 final _UNDEFINED_VAR = "_UNDEFINED_JS_CONST"; |
| 300 | 299 |
| 301 String _accessJsPath(String path) => | 300 String _accessJsPath(String path) => |
| 302 "${_JS_LIBRARY_PREFIX}.context${path.split(".").map((p) => "['$p']").join(''
)}"; | 301 "${_JS_LIBRARY_PREFIX}.context${path.split(".").map((p) => "['$p']").join(''
)}"; |
| 303 | 302 |
| 303 @Deprecated("Internal Use Only") |
| 304 void addMemberHelper(mirrors.MethodMirror declaration, String path, StringBuffer
sb, {bool isStatic: false, String memberName}) { | 304 void addMemberHelper(mirrors.MethodMirror declaration, String path, StringBuffer
sb, {bool isStatic: false, String memberName}) { |
| 305 var jsName = _getJsMemberName(declaration); | 305 var jsName = _getJsMemberName(declaration); |
| 306 path = (path != null && path.isNotEmpty) ? "${path}.${jsName}" : jsName; | 306 path = (path != null && path.isNotEmpty) ? "${path}.${jsName}" : jsName; |
| 307 var name = memberName != null ? memberName : _getDeclarationName(declaration); | 307 var name = memberName != null ? memberName : _getDeclarationName(declaration); |
| 308 if (declaration.isConstructor) { | 308 if (declaration.isConstructor) { |
| 309 sb.write("factory"); | 309 sb.write("factory"); |
| 310 } else if (isStatic) { | 310 } else if (isStatic) { |
| 311 sb.write("static"); | 311 sb.write("static"); |
| 312 } else { | 312 } else { |
| 313 sb.write("patch"); | 313 sb.write("patch"); |
| (...skipping 396 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 710 || wrapped is html.Node | 710 || wrapped is html.Node |
| 711 || wrapped is TypedData | 711 || wrapped is TypedData |
| 712 || wrapped is html.Window) ? wrapped : o; | 712 || wrapped is html.Window) ? wrapped : o; |
| 713 } | 713 } |
| 714 | 714 |
| 715 /** | 715 /** |
| 716 * Get the dart wrapper object for object. Top-level so we | 716 * Get the dart wrapper object for object. Top-level so we |
| 717 * we can access it from other libraries without it being | 717 * we can access it from other libraries without it being |
| 718 * a public instance field on JsObject. | 718 * a public instance field on JsObject. |
| 719 */ | 719 */ |
| 720 @Deprecated("Internal Use Only") |
| 720 getDartHtmlWrapperFor(JsObject object) => object._dartHtmlWrapper; | 721 getDartHtmlWrapperFor(JsObject object) => object._dartHtmlWrapper; |
| 721 | 722 |
| 722 /** | 723 /** |
| 723 * Set the dart wrapper object for object. Top-level so we | 724 * Set the dart wrapper object for object. Top-level so we |
| 724 * we can access it from other libraries without it being | 725 * we can access it from other libraries without it being |
| 725 * a public instance field on JsObject. | 726 * a public instance field on JsObject. |
| 726 */ | 727 */ |
| 728 @Deprecated("Internal Use Only") |
| 727 void setDartHtmlWrapperFor(JsObject object, wrapper) { | 729 void setDartHtmlWrapperFor(JsObject object, wrapper) { |
| 728 object._dartHtmlWrapper = wrapper; | 730 object._dartHtmlWrapper = wrapper; |
| 729 } | 731 } |
| 730 | 732 |
| 731 /** | 733 /** |
| 732 * Used by callMethod to get the JS object for each argument passed if the | 734 * Used by callMethod to get the JS object for each argument passed if the |
| 733 * argument is a Dart class instance that delegates to a DOM object. See | 735 * argument is a Dart class instance that delegates to a DOM object. See |
| 734 * wrap_jso defined in dart:html. | 736 * wrap_jso defined in dart:html. |
| 735 */ | 737 */ |
| 738 @Deprecated("Internal Use Only") |
| 736 unwrap_jso(dartClass_instance) { | 739 unwrap_jso(dartClass_instance) { |
| 737 if (dartClass_instance is html.DartHtmlDomObject) | 740 if (dartClass_instance is html.DartHtmlDomObject) |
| 738 return dartClass_instance.blink_jsObject; | 741 return dartClass_instance.blink_jsObject; |
| 739 else | 742 else |
| 740 return dartClass_instance; | 743 return dartClass_instance; |
| 741 } | 744 } |
| 742 | 745 |
| 743 /** | 746 /** |
| 744 * Proxies a JavaScript object to Dart. | 747 * Proxies a JavaScript object to Dart. |
| 745 * | 748 * |
| (...skipping 224 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 970 } | 973 } |
| 971 return ret; | 974 return ret; |
| 972 } | 975 } |
| 973 } | 976 } |
| 974 | 977 |
| 975 _callMethod(String name, List args) native "JsObject_callMethod"; | 978 _callMethod(String name, List args) native "JsObject_callMethod"; |
| 976 } | 979 } |
| 977 | 980 |
| 978 // JavaScript interop methods that do not automatically wrap to dart:html types. | 981 // JavaScript interop methods that do not automatically wrap to dart:html types. |
| 979 // Warning: this API is not exposed to dart:js. | 982 // Warning: this API is not exposed to dart:js. |
| 983 @Deprecated("Internal Use Only") |
| 980 class JsNative { | 984 class JsNative { |
| 981 static getProperty(JsObject o, name) { | 985 static getProperty(JsObject o, name) { |
| 982 return o._operator_getter(name); | 986 return o._operator_getter(name); |
| 983 } | 987 } |
| 984 | 988 |
| 985 static callMethod(JsObject o, String method, List args) { | 989 static callMethod(JsObject o, String method, List args) { |
| 986 return o._callMethod(method, args); | 990 return o._callMethod(method, args); |
| 987 } | 991 } |
| 988 | 992 |
| 989 static getArrayIndex(JsArray array, int index) { | 993 static getArrayIndex(JsArray array, int index) { |
| (...skipping 166 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1156 */ | 1160 */ |
| 1157 Function _wrapAsDebuggerVarArgsFunction(JsFunction jsFunction) => | 1161 Function _wrapAsDebuggerVarArgsFunction(JsFunction jsFunction) => |
| 1158 ([a1 = _UNDEFINED, a2 = _UNDEFINED, a3 = _UNDEFINED, a4 = _UNDEFINED, | 1162 ([a1 = _UNDEFINED, a2 = _UNDEFINED, a3 = _UNDEFINED, a4 = _UNDEFINED, |
| 1159 a5 = _UNDEFINED, a6 = _UNDEFINED, a7 = _UNDEFINED, a8 = _UNDEFINED, | 1163 a5 = _UNDEFINED, a6 = _UNDEFINED, a7 = _UNDEFINED, a8 = _UNDEFINED, |
| 1160 a9 = _UNDEFINED, a10 = _UNDEFINED]) => jsFunction._applyDebuggerOnly( | 1164 a9 = _UNDEFINED, a10 = _UNDEFINED]) => jsFunction._applyDebuggerOnly( |
| 1161 _stripUndefinedArgs([a1, a2, a3, a4, a5, a6, a7, a8, a9, a10])); | 1165 _stripUndefinedArgs([a1, a2, a3, a4, a5, a6, a7, a8, a9, a10])); |
| 1162 | 1166 |
| 1163 // This method is a no-op in Dartium. | 1167 // This method is a no-op in Dartium. |
| 1164 // TODO(jacobr): tag methods so we can throw if a Dart method is passed to | 1168 // TODO(jacobr): tag methods so we can throw if a Dart method is passed to |
| 1165 // JavaScript using the new interop without calling allowInterop. | 1169 // JavaScript using the new interop without calling allowInterop. |
| 1170 @Deprecated("Internal Use Only") |
| 1166 Function allowInterop(Function f) => f; | 1171 Function allowInterop(Function f) => f; |
| 1167 | 1172 |
| 1168 Expando<JsFunction> _interopCaptureThisExpando = new Expando<JsFunction>(); | 1173 Expando<JsFunction> _interopCaptureThisExpando = new Expando<JsFunction>(); |
| 1169 | 1174 |
| 1175 @Deprecated("Internal Use Only") |
| 1170 Function allowInteropCaptureThis(Function f) { | 1176 Function allowInteropCaptureThis(Function f) { |
| 1171 if (f is JsFunction) { | 1177 if (f is JsFunction) { |
| 1172 // Behavior when the function is already a JS function is unspecified. | 1178 // Behavior when the function is already a JS function is unspecified. |
| 1173 throw new ArgumentError( | 1179 throw new ArgumentError( |
| 1174 "Function is already a JS function so cannot capture this."); | 1180 "Function is already a JS function so cannot capture this."); |
| 1175 return f; | 1181 return f; |
| 1176 } else { | 1182 } else { |
| 1177 var ret = _interopCaptureThisExpando[f]; | 1183 var ret = _interopCaptureThisExpando[f]; |
| 1178 if (ret == null) { | 1184 if (ret == null) { |
| 1179 ret = new JsFunction.withThis(f); | 1185 ret = new JsFunction.withThis(f); |
| 1180 _interopCaptureThisExpando[f] = ret; | 1186 _interopCaptureThisExpando[f] = ret; |
| 1181 } | 1187 } |
| 1182 return ret; | 1188 return ret; |
| 1183 } | 1189 } |
| 1184 } | 1190 } |
| OLD | NEW |