| OLD | NEW |
| 1 // Copyright (c) 2012, the Dart project authors. Please see the AUTHORS file | 1 // Copyright (c) 2012, 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 // DO NOT EDIT | 5 // DO NOT EDIT |
| 6 // Auto-generated dart:html library. | 6 // Auto-generated dart:html library. |
| 7 | 7 |
| 8 /** | 8 /** |
| 9 * HTML elements and other resources for web-based applications that need to | 9 * HTML elements and other resources for web-based applications that need to |
| 10 * interact with the browser and the DOM (Document Object Model). | 10 * interact with the browser and the DOM (Document Object Model). |
| (...skipping 232 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 243 return null; | 243 return null; |
| 244 } | 244 } |
| 245 | 245 |
| 246 Type _getSvgType(String key) { | 246 Type _getSvgType(String key) { |
| 247 if (svgBlinkMap.containsKey(key)) { | 247 if (svgBlinkMap.containsKey(key)) { |
| 248 return svgBlinkMap[key](); | 248 return svgBlinkMap[key](); |
| 249 } | 249 } |
| 250 return null; | 250 return null; |
| 251 } | 251 } |
| 252 | 252 |
| 253 |
| 253 $if JSINTEROP | 254 $if JSINTEROP |
| 254 // FIXME: Can we make this private? | 255 // FIXME: Can we make this private? |
| 255 final htmlBlinkFunctionMap = { | 256 final htmlBlinkFunctionMap = { |
| 256 $!TYPE_FUNCTION_MAP | 257 $!TYPE_FUNCTION_MAP |
| 257 }; | 258 }; |
| 258 | 259 |
| 259 // TODO(terry): We may want to move this elsewhere if html becomes | 260 // TODO(terry): We may want to move this elsewhere if html becomes |
| 260 // a package to avoid dartium depending on pkg:html. | 261 // a package to avoid dartium depending on pkg:html. |
| 261 getHtmlCreateFunction(String key) { | 262 getHtmlCreateFunction(String key) { |
| 262 var result; | 263 var result; |
| (...skipping 32 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 295 | 296 |
| 296 // Check the svg library. | 297 // Check the svg library. |
| 297 result = _getSvgFunction(key); | 298 result = _getSvgFunction(key); |
| 298 if (result != null) { | 299 if (result != null) { |
| 299 return result; | 300 return result; |
| 300 } | 301 } |
| 301 | 302 |
| 302 return null; | 303 return null; |
| 303 } | 304 } |
| 304 | 305 |
| 305 Function _getHtmlFunction(String key) { | 306 Type _getHtmlFunction(String key) { |
| 306 if (htmlBlinkFunctionMap.containsKey(key)) { | 307 if (htmlBlinkFunctionMap.containsKey(key)) { |
| 307 return htmlBlinkFunctionMap[key](); | 308 return htmlBlinkFunctionMap[key](); |
| 308 } | 309 } |
| 309 return null; | 310 return null; |
| 310 } | 311 } |
| 311 | 312 |
| 312 Function _getWebGlFunction(String key) { | 313 Type _getWebGlFunction(String key) { |
| 313 if (web_glBlinkFunctionMap.containsKey(key)) { | 314 if (web_glBlinkFunctionMap.containsKey(key)) { |
| 314 return web_glBlinkFunctionMap[key](); | 315 return web_glBlinkFunctionMap[key](); |
| 315 } | 316 } |
| 316 return null; | 317 return null; |
| 317 } | 318 } |
| 318 | 319 |
| 319 Function _getIndexDbFunction(String key) { | 320 Type _getIndexDbFunction(String key) { |
| 320 if (indexed_dbBlinkFunctionMap.containsKey(key)) { | 321 if (indexed_dbBlinkFunctionMap.containsKey(key)) { |
| 321 return indexed_dbBlinkFunctionMap[key](); | 322 return indexed_dbBlinkFunctionMap[key](); |
| 322 } | 323 } |
| 323 return null; | 324 return null; |
| 324 } | 325 } |
| 325 | 326 |
| 326 Function _getWebAudioFunction(String key) { | 327 Type _getWebAudioFunction(String key) { |
| 327 if (web_audioBlinkFunctionMap.containsKey(key)) { | 328 if (web_audioBlinkFunctionMap.containsKey(key)) { |
| 328 return web_audioBlinkFunctionMap[key](); | 329 return web_audioBlinkFunctionMap[key](); |
| 329 } | 330 } |
| 330 return null; | 331 return null; |
| 331 } | 332 } |
| 332 | 333 |
| 333 Function _getWebSqlFunction(String key) { | 334 Type _getWebSqlFunction(String key) { |
| 334 if (web_sqlBlinkFunctionMap.containsKey(key)) { | 335 if (web_sqlBlinkFunctionMap.containsKey(key)) { |
| 335 return web_sqlBlinkFunctionMap[key](); | 336 return web_sqlBlinkFunctionMap[key](); |
| 336 } | 337 } |
| 337 return null; | 338 return null; |
| 338 } | 339 } |
| 339 | 340 |
| 340 Function _getSvgFunction(String key) { | 341 Type _getSvgFunction(String key) { |
| 341 if (svgBlinkFunctionMap.containsKey(key)) { | 342 if (svgBlinkFunctionMap.containsKey(key)) { |
| 342 return svgBlinkFunctionMap[key](); | 343 return svgBlinkFunctionMap[key](); |
| 343 } | 344 } |
| 344 return null; | 345 return null; |
| 345 } | 346 } |
| 346 | 347 |
| 347 | 348 |
| 348 /****************************************************************************** | 349 /****************************************************************************** |
| 349 ********** ********** | 350 ********** ********** |
| 350 ********** JS Interop Support ********** | 351 ********** JS Interop Support ********** |
| 351 ********** ********** | 352 ********** ********** |
| 352 ******************************************************************************/ | 353 ******************************************************************************/ |
| 353 | 354 |
| 354 Rectangle make_dart_rectangle(r) => | 355 Rectangle make_dart_rectangle(r) => new Rectangle(r['top'], r['left'], r['width'
], r['height']); |
| 355 r == null ? null : new Rectangle(r['left'], r['top'], r['width'], r['height'
]); | |
| 356 | 356 |
| 357 // Need a default constructor for constructing classes with mixins that are | |
| 358 // also extending NativeFieldWrapperClass2. Defining JsoNativeFieldWrapper | |
| 359 // extending NativeFieldWrapperClass2 creates a default constructor. | |
| 360 class JsoNativeFieldWrapper extends NativeFieldWrapperClass2 {} | |
| 361 | |
| 362 // Flag to disable JS interop asserts. Setting to false will speed up the | |
| 363 // wrap_jso calls. | |
| 364 bool __interop_checks = true; | |
| 365 | 357 |
| 366 /** Expando for JsObject, used by every Dart class associated with a Javascript | 358 /** Expando for JsObject, used by every Dart class associated with a Javascript |
| 367 * class (e.g., DOM, WebAudio, etc.). | 359 * class (e.g., DOM, WebAudio, etc.). |
| 368 */ | 360 */ |
| 369 | 361 |
| 370 /** | 362 /** |
| 371 * Return the JsObject associated with a Dart class [dartClass_instance]. | 363 * Return the JsObject associated with a Dart class [dartClass_instance]. |
| 372 */ | 364 */ |
| 373 unwrap_jso(dartClass_instance) { | 365 js.JsObject unwrap_jso(dartClass_instance) { |
| 374 try { | 366 try { |
| 375 if (dartClass_instance != null) | 367 if (dartClass_instance != null) |
| 376 return dartClass_instance is NativeFieldWrapperClass2 ? | 368 return dartClass_instance is! Function ? dartClass_instance.blink_jsOb
ject : dartClass_instance; |
| 377 dartClass_instance.blink_jsObject : dartClass_instance; | 369 else |
| 378 else | 370 return null; |
| 379 return null; | 371 // return dartClass_instance.dartium_expando[dartClass_instance.expandoJsOb
ject]; |
| 380 } catch(NoSuchMethodException) { | 372 } catch(NoSuchMethodException) { |
| 381 // No blink_jsObject then return the dartClass_instance is probably an | 373 // No blink_jsObject then return the dartClass_instance is probably an |
| 382 // array that was already converted to a Dart class e.g., Uint8ClampedList. | 374 // array that was already converted to a Dart class e.g., Uint8ClampedList
. |
| 383 return dartClass_instance; | 375 return dartClass_instance; |
| 384 } | 376 } |
| 385 } | 377 } |
| 386 | 378 |
| 387 /** | 379 /** |
| 388 * Create Dart class that maps to the JS Type, add the JsObject as an expando | 380 * Create Dart class that maps to the JS Type, add the JsObject as an expando |
| 389 * on the Dart class and return the created Dart class. | 381 * on the Dart class and return the created Dart class. |
| 390 */ | 382 */ |
| 391 wrap_jso(jsObject) { | 383 wrap_jso(jsObject) { |
| 392 try { | 384 try { |
| 393 if (jsObject is! js.JsObject) { | 385 // debug_or_assert("jsObject != null", jsObject != null); |
| 386 if (jsObject is! js.JsObject) { |
| 394 // JS Interop converted the object to a Dart class e.g., Uint8ClampedList. | 387 // JS Interop converted the object to a Dart class e.g., Uint8ClampedList. |
| 395 return jsObject; | 388 return jsObject; |
| 396 } | |
| 397 var constructor = jsObject['constructor']; | |
| 398 if (__interop_checks) { | |
| 399 if (jsObject is js.JsArray) { | |
| 400 return jsObject; | |
| 401 } | |
| 402 | |
| 403 debug_or_assert("constructor != null", constructor != null); | |
| 404 } | |
| 405 if (constructor == js.context['Object']) { | |
| 406 return convertNativeObjectToDartMap(jsObject); | |
| 407 } | |
| 408 if (constructor == js.context['Promise']) { | |
| 409 return convertNativePromiseToDartFuture(jsObject); | |
| 410 } | |
| 411 var jsTypeName = constructor['name']; | |
| 412 if (__interop_checks) { | |
| 413 debug_or_assert("constructor != null && jsTypeName.length > 0", constructo
r != null && jsTypeName.length > 0); | |
| 414 } | |
| 415 | |
| 416 var dartClass_instance; | |
| 417 if (jsObject.hasProperty('dart_class')) { | |
| 418 // Got a dart_class (it's a custom element) use it it's already set up. | |
| 419 dartClass_instance = jsObject['dart_class']; | |
| 420 } else { | |
| 421 var func = getHtmlCreateFunction(jsTypeName); | |
| 422 if (func != null) { | |
| 423 dartClass_instance = func(); | |
| 424 dartClass_instance.blink_jsObject = jsObject; | |
| 425 } | |
| 426 } | |
| 427 return dartClass_instance; | |
| 428 } catch(e, stacktrace){ | |
| 429 if (__interop_checks) { | |
| 430 if (e is DebugAssertException) | |
| 431 window.console.log("${e.message}\n ${stacktrace}"); | |
| 432 else | |
| 433 window.console.log("${stacktrace}"); | |
| 434 } | |
| 435 } | 389 } |
| 436 | 390 var constructor = jsObject['constructor']; |
| 437 return null; | 391 debug_or_assert("constructor != null", constructor != null); |
| 392 var jsTypeName = constructor['name']; |
| 393 debug_or_assert("constructor != null && jsTypeName.length > 0", constructor !=
null && jsTypeName.length > 0); |
| 394 var func = getHtmlCreateFunction(jsTypeName); |
| 395 debug_or_assert("func != null name = ${jsTypeName}", func != null); |
| 396 var dartClass_instance = func(); |
| 397 dartClass_instance.blink_jsObject = jsObject; |
| 398 // dartClass_instance.dartium_expando[dartClass_instance.expandoJsObject] = jsO
bject; |
| 399 return dartClass_instance; |
| 400 } catch(e, stacktrace){ |
| 401 if (e is DebugAssertException) |
| 402 window.console.log("${e.message}\n ${stacktrace}"); |
| 403 else |
| 404 window.console.log("${stacktrace}"); |
| 438 } | 405 } |
| 439 | |
| 440 /** | |
| 441 * Create Dart class that maps to the JS Type that is the JS type being | |
| 442 * extended using JS interop createCallback (we need the base type of the | |
| 443 * custom element) not the Dart created constructor. | |
| 444 */ | |
| 445 wrap_jso_custom_element(jsObject) { | |
| 446 try { | |
| 447 if (jsObject is! js.JsObject) { | |
| 448 // JS Interop converted the object to a Dart class e.g., Uint8ClampedList. | |
| 449 return jsObject; | |
| 450 } | |
| 451 | |
| 452 // Find out what object we're extending. | |
| 453 var objectName = jsObject.toString(); | |
| 454 // Expect to see something like '[object HTMLElement]'. | |
| 455 if (!objectName.startsWith('[object ')) { | |
| 456 return jsObject; | |
| 457 } | |
| 458 | |
| 459 var extendsClass = objectName.substring(8, objectName.length - 1); | |
| 460 var func = getHtmlCreateFunction(extendsClass); | |
| 461 if (__interop_checks) | |
| 462 debug_or_assert("func != null name = ${extendsClass}", func != null); | |
| 463 var dartClass_instance = func(); | |
| 464 dartClass_instance.blink_jsObject = jsObject; | |
| 465 return dartClass_instance; | |
| 466 } catch(e, stacktrace){ | |
| 467 if (__interop_checks) { | |
| 468 if (e is DebugAssertException) | |
| 469 window.console.log("${e.message}\n ${stacktrace}"); | |
| 470 else | |
| 471 window.console.log("${stacktrace}"); | |
| 472 } | |
| 473 | |
| 474 // Problem? | |
| 475 return null; | |
| 476 } | |
| 477 } | 406 } |
| 478 | 407 |
| 479 class DebugAssertException implements Exception { | 408 class DebugAssertException implements Exception { |
| 480 String message; | 409 String message; |
| 481 DebugAssertException(this.message); | 410 DebugAssertException(this.message); |
| 482 } | 411 } |
| 483 | 412 |
| 484 debug_or_assert(message, expression) { | 413 debug_or_assert(message, expression) { |
| 485 if (!expression) { | 414 if (!expression) { |
| 486 throw new DebugAssertException("$message"); | 415 throw new DebugAssertException("$message"); |
| 487 } | 416 } |
| 488 } | 417 } |
| 489 | 418 |
| 490 // TODO(terry): Manage JS interop JsFunctions for each listener used for add/ | 419 // Wrap JsObject node list to return a List<node>. |
| 491 // removeEventListener. These JsFunctions will leak look at | 420 List<Node> wrap_jso_list(jso_nodes) { |
| 492 // fixing with weak-refs in C++. The key are the hashcodes of the | 421 List<Node> nodes = new List<Node>(); |
| 493 // user's this (this is needed for futures) and listener function. | 422 var collectionLen = jso_nodes['length']; |
| 494 Map<int, Map<int, js.JsFunction>> _knownListeners = {}; | 423 for (var i = 0; i < collectionLen; i++) { |
| 495 | 424 nodes.add(wrap_jso(jso_nodes.callMethod('item', [i]))); |
| 496 js.JsFunction wrap_event_listener(theObject, Function listener) { | 425 } |
| 497 var thisHashCode = theObject.hashCode; | 426 var frozen_nodes = new _FrozenElementList._wrap(nodes); |
| 498 var listenerHashCode = identityHashCode(listener); | 427 frozen_nodes.dartClass_instance = jso_nodes; |
| 499 | 428 return frozen_nodes; |
| 500 _knownListeners.putIfAbsent(thisHashCode, () => new Map<int, js.JsFunction>())
; | |
| 501 _knownListeners[thisHashCode].putIfAbsent(listenerHashCode, () => | |
| 502 new js.JsFunction.withThis((theObject, event) => listener(wrap_jso(event))))
; | |
| 503 | |
| 504 return _knownListeners[thisHashCode][listenerHashCode]; | |
| 505 } | 429 } |
| 506 | |
| 507 Map<String, dynamic> convertNativeObjectToDartMap(js.JsObject jsObject) { | |
| 508 var result = new Map(); | |
| 509 var keys = js.context['Object'].callMethod('keys', [jsObject]); | |
| 510 for (var key in keys) { | |
| 511 result[key] = wrap_jso(jsObject[key]); | |
| 512 } | |
| 513 return result; | |
| 514 } | |
| 515 | |
| 516 // Converts a flat Dart map into a JavaScript object with properties this is | |
| 517 // is the Dartium only version it uses dart:js. | |
| 518 convertDartToNative_Dictionary(Map dict) { | |
| 519 if (dict == null) return null; | |
| 520 var jsObject = new js.JsObject(js.context['Object']); | |
| 521 dict.forEach((String key, value) { | |
| 522 if (value is List) { | |
| 523 var jsArray = new js.JsArray(); | |
| 524 value.forEach((elem) { | |
| 525 jsArray.add(elem is Map ? convertDartToNative_Dictionary(elem): elem); | |
| 526 }); | |
| 527 jsObject[key] = jsArray; | |
| 528 } else { | |
| 529 jsObject[key] = value; | |
| 530 } | |
| 531 }); | |
| 532 return jsObject; | |
| 533 } | |
| 534 | |
| 535 // Converts a Dart list into a JsArray. For the Dartium version only. | |
| 536 convertDartToNative_List(List input) => new js.JsArray()..addAll(input); | |
| 537 | |
| 538 // Conversion function place holder (currently not used in dart2js or dartium). | |
| 539 List convertDartToNative_StringArray(List<String> input) => input; | |
| 540 | |
| 541 Future convertNativePromiseToDartFuture(js.JsObject promise) { | |
| 542 var completer = new Completer(); | |
| 543 var newPromise = promise | |
| 544 .callMethod("then", [(result) => completer.complete(result)]) | |
| 545 .callMethod("catch", [(result) => completer.completeError(result)]); | |
| 546 return completer.future; | |
| 547 } | |
| 548 | |
| 549 $else | 430 $else |
| 550 class JsoNativeFieldWrapper extends NativeFieldWrapperClass2 {} | |
| 551 | |
| 552 unwrap_jso(dartClass_instance) => dartClass_instance; | 431 unwrap_jso(dartClass_instance) => dartClass_instance; |
| 553 wrap_jso(jsObject) => jsObject; | 432 wrap_jso(jsObject) => jsObject; |
| 433 wrap_jso_list(jso_nodes) => jso_nodes; |
| 554 make_dart_rectangle(r) => r; | 434 make_dart_rectangle(r) => r; |
| 555 convertDartToNative_Dictionary(Map dict) => dict; | |
| 556 List convertDartToNative_StringArray(List<String> input) => input; | |
| 557 convertDartToNative_List(List input) => input; | |
| 558 | |
| 559 $endif | 435 $endif |
| OLD | NEW |