guile-scene/scene.scm

41 lines
1 KiB
Scheme

(use-modules (reactive)
(hoot ffi))
(define-foreign get-element-by-id
"document" "getElementById"
(ref string) -> (ref null extern))
(define-foreign element-inner-text
"element" "innerText"
(ref null extern) -> (ref string))
(define-foreign set-element-inner-text!
"element" "setInnerText"
(ref null extern) (ref string) -> none)
(define-foreign add-event-listener!
"element" "addEventListener"
(ref null extern) (ref string) (ref null extern) -> none)
(define cell-a (make-cell 42))
(format #t "~s\n" (! cell-a))
(define deriv-a (~ (format #f "value is: ~s" (! cell-a))))
(format #t "~a\n" (! deriv-a))
(! cell-a 56)
(format #t "~a\n" (! deriv-a))
(define counter-cell (make-cell 0))
(define button-elem (get-element-by-id "button"))
(add-event-listener!
button-elem
"click"
(procedure->external
(lambda (e) (! counter-cell (1+ (! counter-cell))))))
(define counter-elem (get-element-by-id "counter"))
(define counter-deriv (~ (set-element-inner-text! counter-elem (number->string (! counter-cell))) #f))