OO interface growing

This commit is contained in:
2026-03-09 18:04:08 +01:00
parent d45dade325
commit 587c306218
5 changed files with 125 additions and 46 deletions

View File

@@ -59,6 +59,7 @@
wv-list-of-permitted-exts?
webview-bind!
webview-unbind!
webview-set-url!
webview-navigate!
@@ -156,7 +157,7 @@
(if (eq? cookie-header #f)
#f
(let ((cookies (c:cookie-header->alist (header-value cookie-header))))
(displayln (format "Cookies: ~a" cookies))
;(displayln (format "Cookies: ~a" cookies))
(let ((sec-token (findf (λ (c)
(eq? (string->symbol
(format "~a" (car c)))
@@ -169,7 +170,6 @@
(define (make-sec-header sec-cache)
(let ((tok (make-security-token)))
(lru-add! sec-cache tok)
(displayln (format "new sec-token: ~a" tok))
(make-header #"Set-Cookie"
(string->bytes/utf-8
(format "rkt-webview-token=~a" tok)))
@@ -264,8 +264,10 @@
(f1 (build-path cert-path (format "self-signed-~a.cert" window-nr)))
(f2 (build-path cert-path (format "self-signed-~a.key" window-nr)))
)
(delete-file f1)
(delete-file f2)
(when (file-exists? f1)
(delete-file f1))
(when (file-exists? f2)
(delete-file f2))
)
)
@@ -275,7 +277,10 @@
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
(define (util-parse-event evt)
(let ((wv-d0 (with-input-from-string evt read-json)))
(let ((wv-d0 (hash-copy (with-input-from-string evt read-json))))
(hash-set! wv-d0 'event
(string->symbol
(format "~a" (hash-ref wv-d0 'event 'nil))))
wv-d0))
(define (webview-call-js-result? x)
@@ -530,13 +535,32 @@
'oke))
(define/contract (webview-bind! wv selector event)
(-> wv? (or/c symbol? string?) symbol? list?)
(let ((sel (if (symbol? selector)
(-> wv? (or/c symbol? string?) (or/c symbol? list-of-symbol?) list?)
(let* ((sel (if (symbol? selector)
(format "#~a" selector)
selector))
(event* (if (symbol? event) (list event) event))
(evt (format "[ ~a ]" (string-join
(map (λ (e) (format "'~a'" e)) event*) ", ")))
)
(let ((r (webview-call-js wv
(format "return window.rkt_bind_evt_ids(~a, '~a', ~a)"
(wv-window-nr wv) sel evt))))
(map (λ (el)
(list (string->symbol (car el)) (cadr el) (caddr el)))
r))))
(define/contract (webview-unbind! wv selector event)
(-> wv? (or/c symbol? string?) (or/c symbol? list-of-symbol?) list?)
(let* ((sel (if (symbol? selector)
(format "#~a" selector)
selector))
(evt (format "~a" event)))
(event* (if (symbol? event) (list event) event))
(evt (format "[ ~a ]" (string-join
(map (λ (e) (format "'~a'" e)) event*) ", ")))
)
(let ((r (webview-call-js wv
(format "return window.rkt_bind_evt_ids(~a, '~a', '~a')"
(format "return window.rkt_unbind_evt_ids(~a, '~a', ~a)"
(wv-window-nr wv) sel evt))))
(map (λ (el)
(list (string->symbol (car el)) (cadr el) (caddr el)))

View File

@@ -2,36 +2,18 @@
(require "racket-webview.rkt"
racket/class
simple-ini/class
"wv-window.rkt"
)
(provide wv-window%
(provide (all from out "wv-window.rkt")
)
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; Classes
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
(define wv-window%
(define wv-element%
(class object%
(init-field profile
base-dir
[settings #f]
[parent #f]
[title "Racket Webview Window"]
[file-not-found-handler (λ (file base-path path) path)]
)
(define wv #f)
(define (event-handler wv evt)
(displayln evt))
(super-new)
(begin
(set! wv (webview-create
profile
(webview-standard-file-getter base-dir
file-not-found-handler)
event-handler)))
)
)
(init-field element-id