Files
racket-webview/private/wv-element.rkt
2026-03-12 20:57:31 +01:00

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 (set-attr! attr-entries)
(webview-set-attr! wv element-id attr-entries))
(define (attr attr)
(webview-attr wv element-id attr))
(define (attr/number attr)
(webview-attr/number wv element-id attr))
(define (attr/symbol attr)
(webview-attr/symbol wv element-id attr))
(define (attr/boolean attr)
(webview-attr/boolean wv element-id attr))
(define (attr/date attr)
(webview-attr/date wv element-id attr))
(define (attr/time attr)
(webview-attr/time wv element-id attr))
(define (attr/datetime attr)
(webview-attr/datetime wv element-id attr))
(super-new)
)
)