(define-structure surflet surflet-interface (open scheme-with-scsh surflets (subset srfi-1 (filter)) inspect-exception) (begin (define *wish-id* 0) (define (fresh-wish-id) (set! *wish-id* (+ *wish-id* 1)) *wish-id*) (define (make-wish text) (cons (fresh-wish-id) text)) (define wish-id car) (define wish-text cdr) (define (output-wish-list wish-list delete-button k-url) `(ul ,@(map (lambda (wish) `(li ,(wish-text wish) " " (url ,(delete-button k-url (wish-id wish)) "delete wish"))) wish-list))) (define (manage-wish-list wish-list) (let ((wish-input (make-text-field)) (no-more-wishes (make-address)) (submit-button (make-submit-button)) (delete-button (make-annotated-address))) (let ((req (send-html/suspend (lambda (k-url) `(html (body (h1 "Wishlist Manager Pro") (surflet-form ,k-url POST ,(output-wish-list wish-list delete-button k-url) (p "Add wish:" ,wish-input ,submit-button)) (p (url ,(no-more-wishes k-url) "Perfectly happy")))))))) (case-returned-via (get-bindings req) ((no-more-wishes) wish-list) ((delete-button) => (lambda (id) (manage-wish-list (filter (lambda (wish) (not (= id (wish-id wish)))) wish-list)))) (else (manage-wish-list (cons (make-wish (input-field-value wish-input (get-bindings req))) wish-list))))))) (define (main req) (with-inspecting-handler 8888 (lambda (condition) (with-current-output-port (current-error-port) (display "starting remote handler for condition ") (display condition) (newline) (display "Please connect to port 8888") (newline))) (lambda () (send-html/finish `(html (body (h2 "Your wishlist") (ul ,@(map (lambda (wish) `(li ,(wish-text wish))) (manage-wish-list '()))))))))) ))