94 lines
2.4 KiB
Racket
94 lines
2.4 KiB
Racket
#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)
|
|
)
|
|
)
|
|
|