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

59 lines
1.7 KiB
Scheme
Raw Normal View History

2002-10-01 08:33:39 -04:00
(define-structure servlet servlet-interface
(open servlets
httpd-requests
2002-10-09 11:22:50 -04:00
httpd-responses
url
scheme-with-scsh)
(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
2002-10-09 11:22:50 -04:00
,(if title `(h2 ,title) '())
(p
(form (@ (method "get")
(action ,new-url))
2003-01-16 07:09:49 -05:00
,input-text " "
(input (@ (type "text")
(name "number"))
(input (@ (type "submit"))))))
(hr)
(p (URL "/" "Return to main menu") (br)
(URL "add.scm" "Start new calculation."))))))))
(let* ((bindings (form-query
(http-url-search (request-url result))))
(number (string->number
(extract-single-binding "number" bindings))))
(if number
number
2002-10-09 11:22:50 -04:00
(get-number input-text "Please enter a valid number")))))
(define (get-number1)
2002-10-09 11:22:50 -04:00
(get-number "First number:" "Calculation - Step one"))
(define (get-number2)
2002-10-09 11:22:50 -04:00
(get-number "Second number:" "Calculation - Step two"))
(define (main req)
2002-10-09 11:22:50 -04:00
(let ((req
(send-html/suspend
(lambda (new-url)
`(html (title "Result")
2003-01-16 07:09:49 -05:00
(body (h2 "Result")
2002-10-09 11:22:50 -04:00
(p ,(number->string (+ (get-number1) (get-number2))))
2003-01-16 07:09:49 -05:00
(hr)
(a (@ (href "add.scm")) "New calculation (new session)")(br)
(a (@ (href "javascript:history.back(2)")) "New calculation (same session)")(br)
(a (@ (href ,new-url)) "Close this session")))))))
;; How to clear session data and go to another HTML page:
2002-10-09 11:22:50 -04:00
(send/finish
(make-error-response (status-code moved-temp) req
"/" "/"))
2002-10-09 11:22:50 -04:00
))
; ))
))