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 part of _js_helper; | 5 part of _js_helper; |
6 | 6 |
7 | 7 |
8 // TODO(ngeoffray): stop using this method once our optimizers can | 8 // TODO(ngeoffray): stop using this method once our optimizers can |
9 // change str1.contains(str2) into str1.indexOf(str2) != -1. | 9 // change str1.contains(str2) into str1.indexOf(str2) != -1. |
10 bool contains(String userAgent, String name) { | 10 bool contains(String userAgent, String name) { |
(...skipping 431 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
442 // JavaScript code fragments. | 442 // JavaScript code fragments. |
443 // | 443 // |
444 // This is a temporary place for the JavaScript code. | 444 // This is a temporary place for the JavaScript code. |
445 // | 445 // |
446 // TODO(sra): These code fragments are not minified. They could be generated by | 446 // TODO(sra): These code fragments are not minified. They could be generated by |
447 // the code emitter, or JS_CONST could be improved to parse entire functions and | 447 // the code emitter, or JS_CONST could be improved to parse entire functions and |
448 // take care of the minification. | 448 // take care of the minification. |
449 | 449 |
450 const _baseHooks = const JS_CONST(r''' | 450 const _baseHooks = const JS_CONST(r''' |
451 function() { | 451 function() { |
452 var toStringFunction = Object.prototype.toString; | 452 function typeNameInChrome(o) { |
453 function getTag(o) { | 453 var constructor = o.constructor; |
454 var s = toStringFunction.call(o); | 454 if (constructor) { |
| 455 var name = constructor.name; |
| 456 if (name) return name; |
| 457 } |
| 458 var s = Object.prototype.toString.call(o); |
455 return s.substring(8, s.length - 1); | 459 return s.substring(8, s.length - 1); |
456 } | 460 } |
457 function getUnknownTag(object, tag) { | 461 function getUnknownTag(object, tag) { |
458 // This code really belongs in [getUnknownTagGenericBrowser] but having it | 462 // This code really belongs in [getUnknownTagGenericBrowser] but having it |
459 // here allows [getUnknownTag] to be tested on d8. | 463 // here allows [getUnknownTag] to be tested on d8. |
460 if (/^HTML[A-Z].*Element$/.test(tag)) { | 464 if (/^HTML[A-Z].*Element$/.test(tag)) { |
461 // Check that it is not a simple JavaScript object. | 465 // Check that it is not a simple JavaScript object. |
462 var name = toStringFunction.call(object); | 466 var name = Object.prototype.toString.call(object); |
463 if (name == "[object Object]") return null; | 467 if (name == "[object Object]") return null; |
464 return "HTMLElement"; | 468 return "HTMLElement"; |
465 } | 469 } |
466 } | 470 } |
467 function getUnknownTagGenericBrowser(object, tag) { | 471 function getUnknownTagGenericBrowser(object, tag) { |
468 if (self.HTMLElement && object instanceof HTMLElement) return "HTMLElement"; | 472 if (self.HTMLElement && object instanceof HTMLElement) return "HTMLElement"; |
469 return getUnknownTag(object, tag); | 473 return getUnknownTag(object, tag); |
470 } | 474 } |
471 function prototypeForTag(tag) { | 475 function prototypeForTag(tag) { |
472 if (typeof window == "undefined") return null; | 476 if (typeof window == "undefined") return null; |
473 if (typeof window[tag] == "undefined") return null; | 477 if (typeof window[tag] == "undefined") return null; |
474 var constructor = window[tag]; | 478 var constructor = window[tag]; |
475 if (typeof constructor != "function") return null; | 479 if (typeof constructor != "function") return null; |
476 return constructor.prototype; | 480 return constructor.prototype; |
477 } | 481 } |
478 function discriminator(tag) { return null; } | 482 function discriminator(tag) { return null; } |
479 | 483 |
480 var isBrowser = typeof navigator == "object"; | 484 var isBrowser = typeof navigator == "object"; |
481 | 485 |
482 return { | 486 return { |
483 getTag: getTag, | 487 getTag: typeNameInChrome, |
484 getUnknownTag: isBrowser ? getUnknownTagGenericBrowser : getUnknownTag, | 488 getUnknownTag: isBrowser ? getUnknownTagGenericBrowser : getUnknownTag, |
485 prototypeForTag: prototypeForTag, | 489 prototypeForTag: prototypeForTag, |
486 discriminator: discriminator }; | 490 discriminator: discriminator }; |
487 }'''); | 491 }'''); |
488 | 492 |
489 | 493 |
490 /** | 494 /** |
491 * Returns the name of the constructor function for browsers where | 495 * Returns the name of the constructor function for browsers where |
492 * `object.constructor.name` is not reliable. | 496 * `object.constructor.name` is not reliable. |
493 * | 497 * |
(...skipping 151 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
645 const _safariHooksTransformer = const JS_CONST(r''' | 649 const _safariHooksTransformer = const JS_CONST(r''' |
646 function(hooks) { return hooks; } | 650 function(hooks) { return hooks; } |
647 '''); | 651 '''); |
648 | 652 |
649 | 653 |
650 const _dartExperimentalFixupGetTagHooksTransformer = const JS_CONST(r''' | 654 const _dartExperimentalFixupGetTagHooksTransformer = const JS_CONST(r''' |
651 function(hooks) { | 655 function(hooks) { |
652 if (typeof dartExperimentalFixupGetTag != "function") return hooks; | 656 if (typeof dartExperimentalFixupGetTag != "function") return hooks; |
653 hooks.getTag = dartExperimentalFixupGetTag(hooks.getTag); | 657 hooks.getTag = dartExperimentalFixupGetTag(hooks.getTag); |
654 }'''); | 658 }'''); |
OLD | NEW |