! Copyright (C) 2008, 2009 Slava Pestov, Daniel Ehrenberg
! See http://factorcode.org/license.txt for BSD license.
USING: accessors kernel namespaces io math.parser assocs classes
classes.tuple words arrays sequences splitting mirrors
hashtables combinators continuations math strings inspector
fry locals calendar calendar.format xml.entities xml.data
validators urls present xml.writer xml.syntax xml
xmode.code2html lcs.diff2html farkup io.streams.string
html html.streams html.forms ;
IN: html.components
GENERIC: render* ( value name renderer -- xml )
: render>xml ( name renderer -- xml )
prepare-value
[
dup validation-error?
[ [ message>> render-error ] [ value>> ] bi ]
[ f swap ]
if
] 2dip
render*
swap 2array ;
: render ( name renderer -- )
render>xml write-xml ;
SINGLETON: label
M: label render*
2drop present ;
SINGLETON: hidden
M: hidden render*
drop [XML name=<-> type="hidden"/> XML] ;
: render-field ( value name size type -- xml )
[XML name=<-> size=<-> type=<->/> XML] ;
TUPLE: field size ;
: ( -- field )
field new ;
M: field render*
size>> "text" render-field ;
TUPLE: password size ;
: ( -- password )
password new ;
M: password render*
#! Don't send passwords back to the user
[ drop "" ] 2dip size>> "password" render-field ;
! Text areas
TUPLE: textarea rows cols ;
: