#lang scheme/base
(require "base.ss")
(require "core.ss")
(define (open/wait url+generate)
(respond/stmt
(lambda (embed-url)
(js (!dot Delirium api (openAndWait ,(embed-url (lambda (request) request))
,(if (string? url+generate)
url+generate
(embed-url url+generate))))))))
(define (reload/wait)
(respond/stmt
(lambda (embed-url)
(js (!dot Delirium api (reloadAndWait ,(embed-url (lambda (request) request))))))))
(define (back/wait)
(respond/stmt
(lambda (embed-url)
(js (!dot Delirium api (backAndWait ,(embed-url (lambda (request) request))))))))
(define (forward/wait)
(respond/stmt
(lambda (embed-url)
(js (!dot Delirium api (forwardAndWait ,(embed-url (lambda (request) request))))))))
(define (click selector)
(respond/expr
(lambda (embed-url)
(js (!dot Delirium api (click ,selector))))))
(define (click* selector)
(respond/expr
(lambda (embed-url)
(js (!dot Delirium api (clickAll ,selector))))))
(define (click/wait selector)
(respond/stmt
(lambda (embed-url)
(js (!dot Delirium api (clickAndWait ,(embed-url (lambda (request) request))
,selector))))))
(define (select selector value)
(respond/expr
(lambda (embed-url)
(js (!dot Delirium api (select ,selector ,(symbol+string->string value)))))))
(define (select* selector value)
(respond/expr
(lambda (embed-url)
(js (!dot Delirium api (selectAll ,selector ,(symbol+string->string value)))))))
(define (select/wait selector value)
(respond/stmt
(lambda (embed-url)
(js (!dot Delirium api (selectAndWait ,(embed-url (lambda (request) request))
,selector
,(symbol+string->string value)))))))
(define (enter-text selector value)
(respond/expr
(lambda (embed-url)
(js (!dot Delirium api (enterText ,selector ,value))))))
(define (enter-text* selector value)
(respond/expr
(lambda (embed-url)
(js (!dot Delirium api (enterTextAll ,selector ,value))))))
(define (enter-text/wait selector value)
(respond/stmt
(lambda (embed-url)
(js (!dot Delirium api (enterTextAndWait ,(embed-url (lambda (request) request))
,selector
,value))))))
(define (focus selector)
(respond/expr
(lambda (embed-url)
(js (!dot (!index ,selector 0) (focus))))))
(define (blur selector)
(respond/expr
(lambda (embed-url)
(js (!dot (!index ,selector 0) (blur))))))
(define (symbol+string->string item)
(if (symbol? item)
(symbol->string item)
item))
(define (protect-url url-string)
(regexp-replace #rx"test" url-string "target"))
(provide/contract
[open/wait (-> (or/c (-> request? response/full?) string?) void?)]
[reload/wait (-> void?)]
[back/wait (-> void?)]
[forward/wait (-> void?)]
[click (-> javascript-expression? void?)]
[click* (-> javascript-expression? void?)]
[click/wait (-> javascript-expression? void?)]
[select (-> javascript-expression? (or/c string? symbol?) any)]
[select* (-> javascript-expression? (or/c string? symbol?) any)]
[select/wait (-> javascript-expression? (or/c string? symbol?) any)]
[enter-text (-> javascript-expression? string? any)]
[enter-text* (-> javascript-expression? string? any)]
[enter-text/wait (-> javascript-expression? string? any)]
[focus (-> javascript-expression? void?)]
[blur (-> javascript-expression? void?)])