@@ -180,13 +180,61 @@ fn browser_cancel_animation_frame(vm: &mut VirtualMachine, args: PyFuncArgs) ->
180
180
Ok ( vm. get_none ( ) )
181
181
}
182
182
183
+ fn browser_alert ( vm : & mut VirtualMachine , args : PyFuncArgs ) -> PyResult {
184
+ arg_check ! ( vm, args, required = [ ( message, Some ( vm. ctx. str_type( ) ) ) ] ) ;
185
+
186
+ window ( )
187
+ . alert_with_message ( & objstr:: get_value ( message) )
188
+ . expect ( "alert() not to fail" ) ;
189
+
190
+ Ok ( vm. get_none ( ) )
191
+ }
192
+
193
+ fn browser_confirm ( vm : & mut VirtualMachine , args : PyFuncArgs ) -> PyResult {
194
+ arg_check ! ( vm, args, required = [ ( message, Some ( vm. ctx. str_type( ) ) ) ] ) ;
195
+
196
+ let result = window ( )
197
+ . confirm_with_message ( & objstr:: get_value ( message) )
198
+ . expect ( "confirm() not to fail" ) ;
199
+
200
+ Ok ( vm. new_bool ( result) )
201
+ }
202
+
203
+ fn browser_prompt ( vm : & mut VirtualMachine , args : PyFuncArgs ) -> PyResult {
204
+ arg_check ! (
205
+ vm,
206
+ args,
207
+ required = [ ( message, Some ( vm. ctx. str_type( ) ) ) ] ,
208
+ optional = [ ( default , Some ( vm. ctx. str_type( ) ) ) ]
209
+ ) ;
210
+
211
+ let result = if let Some ( default) = default {
212
+ window ( ) . prompt_with_message_and_default (
213
+ & objstr:: get_value ( message) ,
214
+ & objstr:: get_value ( default) ,
215
+ )
216
+ } else {
217
+ window ( ) . prompt_with_message ( & objstr:: get_value ( message) )
218
+ } ;
219
+
220
+ let result = match result. expect ( "prompt() not to fail" ) {
221
+ Some ( result) => vm. new_str ( result) ,
222
+ None => vm. get_none ( ) ,
223
+ } ;
224
+
225
+ Ok ( result)
226
+ }
227
+
183
228
const BROWSER_NAME : & str = "browser" ;
184
229
185
230
pub fn mk_module ( ctx : & PyContext ) -> PyObjectRef {
186
231
py_module ! ( ctx, BROWSER_NAME , {
187
232
"fetch" => ctx. new_rustfunc( browser_fetch) ,
188
233
"request_animation_frame" => ctx. new_rustfunc( browser_request_animation_frame) ,
189
234
"cancel_animation_frame" => ctx. new_rustfunc( browser_cancel_animation_frame) ,
235
+ "alert" => ctx. new_rustfunc( browser_alert) ,
236
+ "confirm" => ctx. new_rustfunc( browser_confirm) ,
237
+ "prompt" => ctx. new_rustfunc( browser_prompt) ,
190
238
} )
191
239
}
192
240
0 commit comments