diff --git a/private/web-racket.rkt b/private/web-racket-orig.rkt similarity index 100% rename from private/web-racket.rkt rename to private/web-racket-orig.rkt diff --git a/private/web-racket/wv-element.rkt b/private/web-racket/wv-element.rkt new file mode 100644 index 0000000..debf19f --- /dev/null +++ b/private/web-racket/wv-element.rkt @@ -0,0 +1,98 @@ +#lang racket/base + +(require racket/class + "../racket-webview.rkt" + ) + + (define ww-element% + (class object% + (init-field [wv #f] [id #f]) + + + (define/public (get-id) + id) + + (define connected-callbacks (make-hash)) + + (define/public (callback evt . args) + (ww-debug (format "WW-ELEMENT%: Callback for ~a - ~a - ~a" id evt args)) + (let ((cb (hash-ref connected-callbacks evt #f))) + (unless (eq? cb #f) + (with-handlers ([exn:fail? + (λ (e) + (ww-error (format "callback for ~a: ~a" evt e)))]) + (apply cb args))))) + + (define/public (run-js js) + (webview-run-js wv js)) + + + (define/public (connect evt func) + (hash-set! connected-callbacks evt func)) + + (define/public (disconnect evt) + (hash-remove! connected-callbacks evt)) + + (define/public (add-style! st) + (webview-add-style win-id id st)) + + (define/public (set-style! st) + (webview-set-style win-id id st)) + + (define/public (style) + (webview-get-style win-id id)) + + (define/public (get-attr a) + (webview-get-attr win-id id a)) + + (define/public (set-attr! a val) + (webview-set-attr win-id id a val)) + + (define/public (del-attr a) + (webview-del-attr win-id id a)) + + (define/public (get-attrs) + (webview-get-attrs win-id id)) + + (define/public (add-class! cl) + (webview-add-class win-id id cl)) + + (define/public (remove-class! cl) + (webview-remove-class win-id id cl)) + + (define/public (has-class? cl) + (webview-has-class? win-id id cl)) + + (define/public (enable) + (send this remove-class! 'disabled)) + + (define/public (enabled?) + (not (send this disabled?))) + + (define/public (disable) + (send this add-class! 'disabled)) + + (define/public (disabled?) + (send this has-class? 'disabled)) + + (define/public (display . args) + (let ((d (if (null? args) "block" (car args)))) + (send this add-style! (css-style 'display d)))) + + (define/public (hide) + (send this display "none")) + + (define/public (show) + (send this display "block")) + + (define/public (show-inline) + (send this display "inline-block")) + + (define/public (set-inner-html! html-or-sexpr) + (if (string? html-or-sexpr) + (webview-set-inner-html! win-id id html-or-sexpr) + (set-inner-html! (xexpr->html5 html-or-sexpr)))) + + (super-new) + ) + ) \ No newline at end of file