2
2
// for details. All rights reserved. Use of this source code is governed by a
3
3
// BSD-style license that can be found in the LICENSE file.
4
4
5
- // ignore: deprecated_member_use
6
- import 'dart:js_util' as js_util ;
5
+ import 'dart:js_interop' ;
6
+ import 'dart:js_interop_unsafe' ;
7
7
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 {
16
9
@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
+
18
12
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
+
20
16
CSSStyleDeclaration ? getComputedStyle (Element elt, [String ? pseudoElt]) =>
21
- js_util. callMethod ( this , 'getComputedStyle' , < Object > [
17
+ callMethodVarArgs ( 'getComputedStyle' .toJS , < JSAny ? > [
22
18
elt,
23
- if (pseudoElt != null ) pseudoElt
19
+ if (pseudoElt != null ) pseudoElt.toJS
24
20
]) as CSSStyleDeclaration ? ;
21
+
25
22
external Navigator get navigator;
23
+
26
24
void postMessage (Object message, String targetOrigin,
27
25
[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
32
30
]);
33
31
}
34
32
35
33
@JS ('window' )
36
34
external Window get window;
37
35
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);
45
39
}
46
40
47
- @JS ()
48
- @staticInterop
49
- class Document extends Node {}
50
-
51
- extension DocumentExtension on Document {
41
+ extension type Document (Node _) implements Node {
52
42
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
- }
57
43
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
+ }
61
48
62
- extension HTMLDocumentExtension on HTMLDocument {
49
+ extension type HTMLDocument ( Document _) implements Document {
63
50
external HTMLBodyElement ? get body;
64
51
external String ? get title;
65
52
}
66
53
67
54
@JS ('document' )
68
55
external HTMLDocument get document;
69
56
70
- @JS ()
71
- @staticInterop
72
- class Navigator {}
73
-
74
- extension NavigatorExtension on Navigator {
57
+ extension type Navigator (JSObject _) implements JSObject {
75
58
external String get userAgent;
76
59
}
77
60
78
- @JS ()
79
- @staticInterop
80
- class Element extends Node {}
81
-
82
- extension DomElementExtension on Element {
61
+ extension type Element (Node _) implements Node {
83
62
external DomTokenList get classList;
84
63
}
85
64
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 {}
93
66
94
- @JS ()
95
- @staticInterop
96
- class Node extends EventTarget {}
67
+ extension type HTMLBodyElement (HTMLElement _) implements HTMLElement {}
97
68
98
- extension NodeExtension on Node {
69
+ extension type Node ( EventTarget _) implements EventTarget {
99
70
external Node appendChild (Node node);
100
71
void remove () {
101
72
if (parentNode != null ) {
@@ -108,125 +79,91 @@ extension NodeExtension on Node {
108
79
external Node ? get parentNode;
109
80
}
110
81
111
- @JS ()
112
- @staticInterop
113
- class EventTarget {}
114
-
115
- extension EventTargetExtension on EventTarget {
82
+ extension type EventTarget (JSObject _) implements JSObject {
116
83
void addEventListener (String type, EventListener ? listener,
117
84
[bool ? useCapture]) {
118
85
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
+ ]);
121
91
}
122
92
}
123
93
124
94
void removeEventListener (String type, EventListener ? listener,
125
95
[bool ? useCapture]) {
126
96
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
+ ]);
129
102
}
130
103
}
131
104
}
132
105
133
106
typedef EventListener = void Function (Event event);
134
107
135
- @JS ()
136
- @staticInterop
137
- class Event {}
138
-
139
- extension EventExtension on Event {
108
+ extension type Event (JSObject _) implements JSObject {
140
109
external void stopPropagation ();
141
110
}
142
111
143
- @JS ()
144
- @staticInterop
145
- class MessageEvent extends Event {}
112
+ extension type MessageEvent (Event _) implements Event {
113
+ dynamic get data => getProperty ('data' .toJS).dartify ();
146
114
147
- extension MessageEventExtension on MessageEvent {
148
- dynamic get data => js_util.dartify (js_util.getProperty (this , 'data' ));
149
115
external String get origin;
116
+
150
117
List <MessagePort > get ports =>
151
- js_util. getProperty <List >( this , 'ports' ) .cast <MessagePort >();
118
+ getProperty <JSArray >( 'ports' .toJS).toDart .cast <MessagePort >();
152
119
153
120
/// The source may be a `WindowProxy` , a `MessagePort` , or a `ServiceWorker` .
154
121
///
155
122
/// When a message is sent from an iframe through `window.parent.postMessage`
156
123
/// the source will be a `WindowProxy` which has the same methods as [Window] .
157
124
@pragma ('dart2js:as:trust' )
158
125
MessageEventSource get source =>
159
- js_util. getProperty < dynamic >( this , 'source' ) as MessageEventSource ;
126
+ getProperty ( 'source' .toJS ) as MessageEventSource ;
160
127
}
161
128
162
- @JS ()
163
- @staticInterop
164
- class MessageEventSource {}
165
-
166
- extension MessageEventSourceExtension on MessageEventSource {
129
+ extension type MessageEventSource (JSObject _) implements JSObject {
167
130
@pragma ('dart2js:as:trust' )
168
131
MessageEventSourceLocation ? get location =>
169
- js_util.getProperty <dynamic >(this , 'location' )
170
- as MessageEventSourceLocation ;
132
+ getProperty ('location' .toJS) as MessageEventSourceLocation ;
171
133
}
172
134
173
- @JS ()
174
- @staticInterop
175
- class MessageEventSourceLocation {}
176
-
177
- extension MessageEventSourceLocationExtension on MessageEventSourceLocation {
135
+ extension type MessageEventSourceLocation (JSObject _) implements JSObject {
178
136
external String ? get href;
179
137
}
180
138
181
- @JS ()
182
- @staticInterop
183
- class Location {}
184
-
185
- extension LocationExtension on Location {
139
+ extension type Location (JSObject _) implements JSObject {
186
140
external String get href;
187
141
external String get origin;
188
142
}
189
143
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 ()]);
193
147
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 ]);
197
148
external void start ();
198
149
}
199
150
200
- @JS ()
201
- @staticInterop
202
- class CSSStyleDeclaration {}
151
+ extension type CSSStyleDeclaration (JSObject _) implements JSObject {}
203
152
204
- @JS ()
205
- @staticInterop
206
- class HTMLScriptElement extends HTMLElement {}
207
-
208
- extension HTMLScriptElementExtension on HTMLScriptElement {
153
+ extension type HTMLScriptElement (HTMLElement _) implements HTMLElement {
209
154
external set src (String value);
210
155
}
211
156
212
157
HTMLScriptElement createHTMLScriptElement () =>
213
158
document.createElement ('script' ) as HTMLScriptElement ;
214
159
215
- @JS ()
216
- @staticInterop
217
- class DomTokenList {}
218
-
219
- extension DomTokenListExtension on DomTokenList {
160
+ extension type DomTokenList (JSObject _) implements JSObject {
220
161
external void add (String value);
221
162
external void remove (String value);
222
163
external bool contains (String token);
223
164
}
224
165
225
- @JS ()
226
- @staticInterop
227
- class HTMLIFrameElement extends HTMLElement {}
228
-
229
- extension HTMLIFrameElementExtension on HTMLIFrameElement {
166
+ extension type HTMLIFrameElement (HTMLElement _) implements HTMLElement {
230
167
external String ? get src;
231
168
external set src (String ? value);
232
169
external Window get contentWindow;
@@ -235,38 +172,28 @@ extension HTMLIFrameElementExtension on HTMLIFrameElement {
235
172
HTMLIFrameElement createHTMLIFrameElement () =>
236
173
document.createElement ('iframe' ) as HTMLIFrameElement ;
237
174
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);
244
177
}
245
178
246
179
WebSocket createWebSocket (String url) =>
247
- _callConstructor ('WebSocket' , < Object > [url])! as WebSocket ;
180
+ _callConstructor ('WebSocket' , < JSAny ? > [url.toJS ])! as WebSocket ;
248
181
249
- @JS ()
250
- @staticInterop
251
- class MessageChannel {}
252
-
253
- extension MessageChannelExtension on MessageChannel {
182
+ extension type MessageChannel (JSObject _) implements JSObject {
254
183
external MessagePort get port1;
255
184
external MessagePort get port2;
256
185
}
257
186
258
187
MessageChannel 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 ;
263
189
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 ? ;
266
192
if (constructor == null ) {
267
193
return null ;
268
194
}
269
- return js_util.callConstructor (constructor, args);
195
+
196
+ return constructor.callAsConstructorVarArgs (args);
270
197
}
271
198
272
199
class Subscription {
0 commit comments