22// for details. All rights reserved. Use of this source code is governed by a
33// BSD-style license that can be found in the LICENSE file.
44
5- // ignore: deprecated_member_use
6- import 'dart:js_util' as js_util ;
5+ import 'dart:js_interop' ;
6+ import 'dart:js_interop_unsafe' ;
77
8- // ignore: deprecated_member_use
9- import 'package:js/js.dart' ;
10-
11- @JS ()
12- @staticInterop
13- class Window extends EventTarget {}
14-
15- extension WindowExtension on Window {
8+ extension type Window (EventTarget _) implements EventTarget {
169 @pragma ('dart2js:as:trust' )
17- Window get parent => js_util.getProperty <dynamic >(this , 'parent' ) as Window ;
10+ Window get parent => getProperty ('parent' .toJS) as Window ;
11+
1812 external Location get location;
19- Console get console => js_util.getProperty (this , 'console' ) as Console ;
13+
14+ Console get console => getProperty ('console' .toJS) as Console ;
15+
2016 CSSStyleDeclaration ? getComputedStyle (Element elt, [String ? pseudoElt]) =>
21- js_util. callMethod ( this , 'getComputedStyle' , < Object > [
17+ callMethodVarArgs ( 'getComputedStyle' .toJS , < JSAny ? > [
2218 elt,
23- if (pseudoElt != null ) pseudoElt
19+ if (pseudoElt != null ) pseudoElt.toJS
2420 ]) as CSSStyleDeclaration ? ;
21+
2522 external Navigator get navigator;
23+
2624 void postMessage (Object message, String targetOrigin,
2725 [List <MessagePort >? messagePorts]) =>
28- js_util. callMethod ( this , 'postMessage' , < Object ? > [
29- js_util .jsify (message ),
30- targetOrigin,
31- if (messagePorts != null ) js_util. jsify ( messagePorts)
26+ callMethodVarArgs ( 'postMessage' .toJS , < JSAny ? > [
27+ message .jsify (),
28+ targetOrigin.toJS ,
29+ if (messagePorts != null ) messagePorts.toJS
3230 ]);
3331}
3432
3533@JS ('window' )
3634external Window get window;
3735
38- @JS ()
39- @staticInterop
40- class Console {}
41-
42- extension ConsoleExtension on Console {
43- external void log (Object ? object);
44- external void warn (Object ? object);
36+ extension type Console (JSObject _) implements JSObject {
37+ external void log (JSAny ? object);
38+ external void warn (JSAny ? object);
4539}
4640
47- @JS ()
48- @staticInterop
49- class Document extends Node {}
50-
51- extension DocumentExtension on Document {
41+ extension type Document (Node _) implements Node {
5242 external Element ? querySelector (String selectors);
53- Element createElement (String name, [Object ? options]) => js_util.callMethod (
54- this , 'createElement' , < Object > [name, if (options != null ) options])
55- as Element ;
56- }
5743
58- @JS ()
59- @staticInterop
60- class HTMLDocument extends Document {}
44+ Element createElement (String name, [Object ? options]) => callMethodVarArgs (
45+ 'createElement' .toJS,
46+ < JSAny ? > [name.toJS, if (options != null ) options.jsify ()]) as Element ;
47+ }
6148
62- extension HTMLDocumentExtension on HTMLDocument {
49+ extension type HTMLDocument ( Document _) implements Document {
6350 external HTMLBodyElement ? get body;
6451 external String ? get title;
6552}
6653
6754@JS ('document' )
6855external HTMLDocument get document;
6956
70- @JS ()
71- @staticInterop
72- class Navigator {}
73-
74- extension NavigatorExtension on Navigator {
57+ extension type Navigator (JSObject _) implements JSObject {
7558 external String get userAgent;
7659}
7760
78- @JS ()
79- @staticInterop
80- class Element extends Node {}
81-
82- extension DomElementExtension on Element {
61+ extension type Element (Node _) implements Node {
8362 external DomTokenList get classList;
8463}
8564
86- @JS ()
87- @staticInterop
88- class HTMLElement extends Element {}
89-
90- @JS ()
91- @staticInterop
92- class HTMLBodyElement extends HTMLElement {}
65+ extension type HTMLElement (Element _) implements Element {}
9366
94- @JS ()
95- @staticInterop
96- class Node extends EventTarget {}
67+ extension type HTMLBodyElement (HTMLElement _) implements HTMLElement {}
9768
98- extension NodeExtension on Node {
69+ extension type Node ( EventTarget _) implements EventTarget {
9970 external Node appendChild (Node node);
10071 void remove () {
10172 if (parentNode != null ) {
@@ -108,125 +79,91 @@ extension NodeExtension on Node {
10879 external Node ? get parentNode;
10980}
11081
111- @JS ()
112- @staticInterop
113- class EventTarget {}
114-
115- extension EventTargetExtension on EventTarget {
82+ extension type EventTarget (JSObject _) implements JSObject {
11683 void addEventListener (String type, EventListener ? listener,
11784 [bool ? useCapture]) {
11885 if (listener != null ) {
119- js_util.callMethod <void >(this , 'addEventListener' ,
120- < Object > [type, listener, if (useCapture != null ) useCapture]);
86+ callMethodVarArgs ('addEventListener' .toJS, < JSAny ? > [
87+ type.toJS,
88+ listener.toJS,
89+ if (useCapture != null ) useCapture.toJS
90+ ]);
12191 }
12292 }
12393
12494 void removeEventListener (String type, EventListener ? listener,
12595 [bool ? useCapture]) {
12696 if (listener != null ) {
127- js_util.callMethod <void >(this , 'removeEventListener' ,
128- < Object > [type, listener, if (useCapture != null ) useCapture]);
97+ callMethodVarArgs ('removeEventListener' .toJS, < JSAny ? > [
98+ type.toJS,
99+ listener.toJS,
100+ if (useCapture != null ) useCapture.toJS
101+ ]);
129102 }
130103 }
131104}
132105
133106typedef EventListener = void Function (Event event);
134107
135- @JS ()
136- @staticInterop
137- class Event {}
138-
139- extension EventExtension on Event {
108+ extension type Event (JSObject _) implements JSObject {
140109 external void stopPropagation ();
141110}
142111
143- @JS ()
144- @staticInterop
145- class MessageEvent extends Event {}
112+ extension type MessageEvent (Event _) implements Event {
113+ dynamic get data => getProperty ('data' .toJS).dartify ();
146114
147- extension MessageEventExtension on MessageEvent {
148- dynamic get data => js_util.dartify (js_util.getProperty (this , 'data' ));
149115 external String get origin;
116+
150117 List <MessagePort > get ports =>
151- js_util. getProperty <List >( this , 'ports' ) .cast <MessagePort >();
118+ getProperty <JSArray >( 'ports' .toJS).toDart .cast <MessagePort >();
152119
153120 /// The source may be a `WindowProxy` , a `MessagePort` , or a `ServiceWorker` .
154121 ///
155122 /// When a message is sent from an iframe through `window.parent.postMessage`
156123 /// the source will be a `WindowProxy` which has the same methods as [Window] .
157124 @pragma ('dart2js:as:trust' )
158125 MessageEventSource get source =>
159- js_util. getProperty < dynamic >( this , 'source' ) as MessageEventSource ;
126+ getProperty ( 'source' .toJS ) as MessageEventSource ;
160127}
161128
162- @JS ()
163- @staticInterop
164- class MessageEventSource {}
165-
166- extension MessageEventSourceExtension on MessageEventSource {
129+ extension type MessageEventSource (JSObject _) implements JSObject {
167130 @pragma ('dart2js:as:trust' )
168131 MessageEventSourceLocation ? get location =>
169- js_util.getProperty <dynamic >(this , 'location' )
170- as MessageEventSourceLocation ;
132+ getProperty ('location' .toJS) as MessageEventSourceLocation ;
171133}
172134
173- @JS ()
174- @staticInterop
175- class MessageEventSourceLocation {}
176-
177- extension MessageEventSourceLocationExtension on MessageEventSourceLocation {
135+ extension type MessageEventSourceLocation (JSObject _) implements JSObject {
178136 external String ? get href;
179137}
180138
181- @JS ()
182- @staticInterop
183- class Location {}
184-
185- extension LocationExtension on Location {
139+ extension type Location (JSObject _) implements JSObject {
186140 external String get href;
187141 external String get origin;
188142}
189143
190- @JS ()
191- @staticInterop
192- class MessagePort extends EventTarget {}
144+ extension type MessagePort ( EventTarget _) implements EventTarget {
145+ void postMessage ( Object ? message) => callMethodVarArgs (
146+ 'postMessage' .toJS, < JSAny ? > [ if (message != null ) message. jsify ()]);
193147
194- extension MessagePortExtension on MessagePort {
195- void postMessage (Object ? message) => js_util.callMethod (this , 'postMessage' ,
196- < Object > [if (message != null ) js_util.jsify (message) as Object ]);
197148 external void start ();
198149}
199150
200- @JS ()
201- @staticInterop
202- class CSSStyleDeclaration {}
151+ extension type CSSStyleDeclaration (JSObject _) implements JSObject {}
203152
204- @JS ()
205- @staticInterop
206- class HTMLScriptElement extends HTMLElement {}
207-
208- extension HTMLScriptElementExtension on HTMLScriptElement {
153+ extension type HTMLScriptElement (HTMLElement _) implements HTMLElement {
209154 external set src (String value);
210155}
211156
212157HTMLScriptElement createHTMLScriptElement () =>
213158 document.createElement ('script' ) as HTMLScriptElement ;
214159
215- @JS ()
216- @staticInterop
217- class DomTokenList {}
218-
219- extension DomTokenListExtension on DomTokenList {
160+ extension type DomTokenList (JSObject _) implements JSObject {
220161 external void add (String value);
221162 external void remove (String value);
222163 external bool contains (String token);
223164}
224165
225- @JS ()
226- @staticInterop
227- class HTMLIFrameElement extends HTMLElement {}
228-
229- extension HTMLIFrameElementExtension on HTMLIFrameElement {
166+ extension type HTMLIFrameElement (HTMLElement _) implements HTMLElement {
230167 external String ? get src;
231168 external set src (String ? value);
232169 external Window get contentWindow;
@@ -235,38 +172,28 @@ extension HTMLIFrameElementExtension on HTMLIFrameElement {
235172HTMLIFrameElement createHTMLIFrameElement () =>
236173 document.createElement ('iframe' ) as HTMLIFrameElement ;
237174
238- @JS ()
239- @staticInterop
240- class WebSocket extends EventTarget {}
241-
242- extension WebSocketExtension on WebSocket {
243- external void send (Object ? data);
175+ extension type WebSocket (EventTarget _) implements EventTarget {
176+ external void send (JSAny ? data);
244177}
245178
246179WebSocket createWebSocket (String url) =>
247- _callConstructor ('WebSocket' , < Object > [url])! as WebSocket ;
180+ _callConstructor ('WebSocket' , < JSAny ? > [url.toJS ])! as WebSocket ;
248181
249- @JS ()
250- @staticInterop
251- class MessageChannel {}
252-
253- extension MessageChannelExtension on MessageChannel {
182+ extension type MessageChannel (JSObject _) implements JSObject {
254183 external MessagePort get port1;
255184 external MessagePort get port2;
256185}
257186
258187MessageChannel createMessageChannel () =>
259- _callConstructor ('MessageChannel' , < Object > [])! as MessageChannel ;
260-
261- Object ? _findConstructor (String constructorName) =>
262- js_util.getProperty (window, constructorName);
188+ _callConstructor ('MessageChannel' , < JSAny ? > [])! as MessageChannel ;
263189
264- Object ? _callConstructor (String constructorName, List <Object ?> args) {
265- final constructor = _findConstructor (constructorName) ;
190+ Object ? _callConstructor (String constructorName, List <JSAny ?> args) {
191+ final constructor = window. getProperty (constructorName.toJS) as JSFunction ? ;
266192 if (constructor == null ) {
267193 return null ;
268194 }
269- return js_util.callConstructor (constructor, args);
195+
196+ return constructor.callAsConstructorVarArgs (args);
270197}
271198
272199class Subscription {
0 commit comments