2008-04-15 07:10:08 -04:00
|
|
|
USING: kernel accessors assocs namespaces io.files sequences fry
|
2008-04-14 05:34:26 -04:00
|
|
|
http.server.actions
|
|
|
|
http.server.components
|
|
|
|
http.server.validators
|
2008-04-15 07:10:08 -04:00
|
|
|
http.server.templating ;
|
2008-04-14 05:34:26 -04:00
|
|
|
IN: http.server.forms
|
|
|
|
|
2008-04-15 07:10:08 -04:00
|
|
|
TUPLE: form < component
|
|
|
|
view-template edit-template summary-template
|
|
|
|
components ;
|
2008-04-14 05:34:26 -04:00
|
|
|
|
|
|
|
M: form init V{ } clone >>components ;
|
|
|
|
|
|
|
|
: <form> ( id -- form )
|
|
|
|
form f new-component ;
|
|
|
|
|
|
|
|
: add-field ( form component -- form )
|
|
|
|
dup id>> pick components>> set-at ;
|
|
|
|
|
|
|
|
: with-form ( form quot -- )
|
|
|
|
>r components>> components r> with-variable ; inline
|
|
|
|
|
|
|
|
: set-defaults ( form -- )
|
|
|
|
[
|
|
|
|
components get [
|
|
|
|
swap values get [
|
|
|
|
swap default>> or
|
|
|
|
] change-at
|
|
|
|
] assoc-each
|
|
|
|
] with-form ;
|
|
|
|
|
|
|
|
: view-form ( form -- )
|
2008-04-15 07:10:08 -04:00
|
|
|
dup view-template>> '[ , call-template ] with-form ;
|
2008-04-14 05:34:26 -04:00
|
|
|
|
|
|
|
: edit-form ( form -- )
|
2008-04-15 07:10:08 -04:00
|
|
|
dup edit-template>> '[ , call-template ] with-form ;
|
|
|
|
|
|
|
|
: summary-form ( form -- )
|
|
|
|
dup summary-template>> '[ , call-template ] with-form ;
|
2008-04-14 05:34:26 -04:00
|
|
|
|
|
|
|
: validate-param ( id component -- )
|
|
|
|
[ [ params get at ] [ validate ] bi* ]
|
|
|
|
[ drop set-value ] 2bi ;
|
|
|
|
|
|
|
|
: (validate-form) ( form -- error? )
|
|
|
|
[
|
|
|
|
validation-failed? off
|
|
|
|
components get [ validate-param ] assoc-each
|
|
|
|
validation-failed? get
|
|
|
|
] with-form ;
|
|
|
|
|
|
|
|
: validate-form ( form -- )
|
|
|
|
(validate-form) [ validation-failed ] when ;
|
2008-04-15 07:10:08 -04:00
|
|
|
|
|
|
|
! List components
|
|
|
|
TUPLE: list-renderer form ;
|
|
|
|
|
|
|
|
C: <list-renderer> list-renderer
|
|
|
|
|
|
|
|
M: list-renderer render-view*
|
|
|
|
form>> [
|
|
|
|
[ >r from-tuple r> summary-form ] with-scope
|
|
|
|
] curry each ;
|
|
|
|
|
|
|
|
TUPLE: list < component ;
|
|
|
|
|
|
|
|
: <list> ( id form -- list )
|
|
|
|
list swap <list-renderer> new-component ;
|
|
|
|
|
|
|
|
M: list component-string drop ;
|