| // Copyright (c) 2020, 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. |
| |
| @JS() |
| library util; |
| |
| import 'package:js/js.dart'; |
| |
| @JS() |
| external void eval(String code); |
| |
| @JS() |
| external makeDiv(String text); |
| |
| // Static error to name @JS class the same as a @Native class, so we use a |
| // namespace `Foo` to avoid conflicting with the native class. |
| @JS('Foo.HTMLDivElement') |
| class HTMLDivElement { |
| external String bar(); |
| } |
| |
| @JS('Foo.HTMLDivElement') |
| @staticInterop |
| class StaticHTMLDivElement {} |
| |
| extension StaticHTMLDivElementExtension on StaticHTMLDivElement { |
| external String bar(); |
| external StaticHTMLDivElement cloneNode(bool? deep); |
| } |
| |
| @pragma('dart2js:noInline') |
| @pragma('dart2js:assumeDynamic') |
| confuse(x) => x; |
| |
| void setUpJS() { |
| eval(r""" |
| var Foo = {} |
| |
| // A constructor function with the same name as a HTML element. |
| Foo.HTMLDivElement = function(a) { |
| this.a = a; |
| } |
| |
| Foo.HTMLDivElement.prototype.bar = function() { |
| return this.a; |
| } |
| |
| Foo.HTMLDivElement.prototype.toString = function() { |
| return "HTMLDivElement(" + this.a + ")"; |
| } |
| |
| self.makeDiv = function(text) { |
| return new Foo.HTMLDivElement(text); |
| } |
| """); |
| } |