#lang racket/base (require racket/class "racket-webview.rkt" ) (provide wv-element%) (define wv-element% (class object% (init-field window element-id ) (define wv (hash-ref (send window info) 'wv)) (define callbacks (make-hash)) (define/public (id) element-id) (define/public (add-event-callback! evt cb) (hash-set! callbacks evt cb)) (define/public (remove-event-callback! evt) (hash-remove! callbacks evt)) (define/public (event-callback-count) (hash-count callbacks)) (define/public (dispatch-event evt data) (let ((cb (hash-ref callbacks evt #f))) (if (eq? cb #f) 'wv-unhandled-js-event (begin (cb this evt data) 'wv-handled-js-event)))) (define/public (set-innerHTML! html) (webview-set-innerHTML! wv element-id html) this) (define/public (add-class! cl) (webview-add-class! wv element-id cl)) (define/public (remove-class! cl) (webview-remove-class! wv element-id cl)) (define/public (display . d) (when (not (null? d)) (let ((d* (string->symbol (format "~a" (car d))))) (webview-set-style! wv element-id 'display d*))) (webview-get-style wv element-id 'display)) (define/public (visibility . v) (when (not (null? v)) (let ((v* (string->symbol (format "~a" (car v))))) (webview-set-style! wv element-id 'visibility v*))) (webview-get-style wv element-id 'visibility)) (define/public (set-style! styles) (webview-set-style! wv element-id styles)) (define/public (unset-style! styles) (webview-unset-style! wv element-id styles)) (define/public (set-attr! attr-entries) (webview-set-attr! wv element-id attr-entries)) (define/public (attr attr) (webview-attr wv element-id attr)) (define/public (attr/number attr) (webview-attr/number wv element-id attr)) (define/public (attr/symbol attr) (webview-attr/symbol wv element-id attr)) (define/public (attr/boolean attr) (webview-attr/boolean wv element-id attr)) (define/public (attr/date attr) (webview-attr/date wv element-id attr)) (define/public (attr/time attr) (webview-attr/time wv element-id attr)) (define/public (attr/datetime attr) (webview-attr/datetime wv element-id attr)) (super-new) ) )