sunet/scheme/httpd/surflets/web-server/root/surflets/add.scm

54 lines
1.4 KiB
Scheme

(define-structure plugin plugin-interface
(open servlets
httpd-request
url
scsh
scheme)
(begin
(define (get-number input-text . maybe-title)
(let* ((title (if (pair? maybe-title) (car maybe-title) #f))
(result (send-html/suspend
(lambda (new-url)
`(html ,(if title
`(title ,title) '())
(body
,(if title `(h1 ,title) '())
(p (a (@ href "reset") "click here to reset server's plugin cache"))
(p
(form (@ (method "get")
(action ,new-url))
,input-text
(input (@ (type "text")
(name "number"))
(input (@ (type "submit"))))))))))))
(let* ((bindings (form-query
(http-url:search (request:url result))))
(number (string->number
(extract-single-binding bindings "number"))))
(if number
number
(get-number input-text "Please enter a number")))))
(define (get-number1)
(get-number "First number:"))
(define (get-number2)
(get-number "Second number:"))
(define (main req)
(let ((number1 (get-number1))
(number2 (get-number2)))
(send-html/suspend
(lambda (new-url)
`(html (title "Result")
(body (h1 "Result")
(p ,(number->string (+ number1 number2)))
(a (@ (href ,new-url)) "done")))))
(send-html/finish '(html
(title "Finished")
(body (h1 "Finished")
(a (@ href "/") "yoh."))))))
; ))
))