mbform : Multi-buton forms

_mbform : Multi-buton forms_

By Jay McCarthy (jay dot mccarthy at gmail dot com)

Keywords: _net_,


This is the main file for the library. Require it like this:

> (require (planet "" ("jaymccarthy" "mbform.plt" 1)))

It provides the follow procedure:

> (mbform gen) :: ((request -> alpha) ((request -> alpha) -> string) -> beta) -> beta

This function is similar to _send/suspend/dispatch_. It takes a
function that is provided with two functions.

The first, _handle-submit_, should be used with a call to _embed/url_
in the ACTION attribute of the multi-button FORM. This function will
call one of the callbacks registered with the second function.

The second, _add-button!_, is used to allocate a NAME attribute for an
INPUT button. If that button is eventually clicked in a FORM that uses
the aforementioned _handle-submit_ as the ACTION, then the procedure
passed to this call to _add-button!_ will be invoked with the new


 (define (handle op)
   (lambda (req)
     (define bs (request-bindings req))
      `(html (head (title "Answer"))
                (op (string->number (extract-binding/single 'n1 bs))
                    (string->number (extract-binding/single 'n2 bs)))))))))

 (define (start ireq)
    (lambda (embed/url)
      `(html (head (title "Test"))
                (lambda (handler add-button!)
                  `(form ([action ,(embed/url handler)])
                         (input ([type "text"] [name "n1"]))
                         (input ([type "text"] [name "n2"]))
                         (input ([type "submit"]
                                 [value "Add"]
                                 [name ,(add-button! (handle +))]))
                         (input ([type "submit"]
                                 [value "Multiply"]
                                 [name ,(add-button! (handle *))]))))))))))