#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) ) )