-
This commit is contained in:
98
private/web-racket/wv-element.rkt
Normal file
98
private/web-racket/wv-element.rkt
Normal 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)
|
||||||
|
)
|
||||||
|
)
|
||||||
Reference in New Issue
Block a user