This commit is contained in:
2026-03-05 22:27:14 +01:00
parent 4780a3dcb7
commit 5d29d6f3b6
2 changed files with 98 additions and 0 deletions

View File

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