Converting Farkup, html.components and lcs.diff2html to xml.interpolate
parent
9efe8fa520
commit
1181bd6f59
|
@ -232,8 +232,11 @@ M: vector (write-farkup) [ (write-farkup) ] map ;
|
|||
|
||||
M: f (write-farkup) ;
|
||||
|
||||
: farkup>xml ( string -- xml )
|
||||
parse-farkup (write-farkup) ;
|
||||
|
||||
: write-farkup ( string -- )
|
||||
parse-farkup (write-farkup) write-xml-chunk ;
|
||||
farkup>xml write-xml-chunk ;
|
||||
|
||||
: convert-farkup ( string -- string' )
|
||||
[ write-farkup ] with-string-writer ;
|
||||
|
|
|
@ -31,7 +31,7 @@ TUPLE: color red green blue ;
|
|||
] with-string-writer
|
||||
] unit-test
|
||||
|
||||
[ "<input type='hidden' name='red' value='<jimmy>'/>" ] [
|
||||
[ "<input value=\"<jimmy>\" name=\"red\" type=\"hidden\"/>" ] [
|
||||
[
|
||||
"red" hidden render
|
||||
] with-string-writer
|
||||
|
@ -39,13 +39,13 @@ TUPLE: color red green blue ;
|
|||
|
||||
[ ] [ "'jimmy'" "red" set-value ] unit-test
|
||||
|
||||
[ "<input type='text' size='5' name='red' value=''jimmy''/>" ] [
|
||||
[ "<input value=\"'jimmy'\" name=\"red\" size=\"5\" type=\"text\"/>" ] [
|
||||
[
|
||||
"red" <field> 5 >>size render
|
||||
] with-string-writer
|
||||
] unit-test
|
||||
|
||||
[ "<input type='password' size='5' name='red' value=''/>" ] [
|
||||
[ "<input value=\"\" name=\"red\" size=\"5\" type=\"password\"/>" ] [
|
||||
[
|
||||
"red" <password> 5 >>size render
|
||||
] with-string-writer
|
||||
|
@ -105,7 +105,7 @@ TUPLE: color red green blue ;
|
|||
|
||||
[ ] [ t "delivery" set-value ] unit-test
|
||||
|
||||
[ "<input type='checkbox' name='delivery' checked='true'>Delivery</input>" ] [
|
||||
[ "<input type=\"checkbox\" checked=\"true\" name=\"delivery\">Delivery</input>" ] [
|
||||
[
|
||||
"delivery"
|
||||
<checkbox>
|
||||
|
@ -116,7 +116,7 @@ TUPLE: color red green blue ;
|
|||
|
||||
[ ] [ f "delivery" set-value ] unit-test
|
||||
|
||||
[ "<input type='checkbox' name='delivery'>Delivery</input>" ] [
|
||||
[ "<input type=\"checkbox\" name=\"delivery\">Delivery</input>" ] [
|
||||
[
|
||||
"delivery"
|
||||
<checkbox>
|
||||
|
@ -133,7 +133,7 @@ M: link-test link-href drop "http://www.apple.com/foo&bar" ;
|
|||
|
||||
[ ] [ link-test "link" set-value ] unit-test
|
||||
|
||||
[ "<a href='http://www.apple.com/foo&bar'><Link Title></a>" ] [
|
||||
[ "<a href=\"http://www.apple.com/foo&bar\"><Link Title></a>" ] [
|
||||
[ "link" link new render ] with-string-writer
|
||||
] unit-test
|
||||
|
||||
|
@ -149,7 +149,7 @@ M: link-test link-href drop "http://www.apple.com/foo&bar" ;
|
|||
|
||||
[ ] [ "java" "mode" set-value ] unit-test
|
||||
|
||||
[ "<span class='KEYWORD3'>int</span> x <span class='OPERATOR'>=</span> <span class='DIGIT'>4</span>;\n" ] [
|
||||
[ "<span class=\"KEYWORD3\">int</span> x <span class=\"OPERATOR\">=</span> <span class=\"DIGIT\">4</span>;" ] [
|
||||
[ "code" <code> "mode" >>mode render ] with-string-writer
|
||||
] unit-test
|
||||
|
||||
|
@ -163,6 +163,8 @@ M: link-test link-href drop "http://www.apple.com/foo&bar" ;
|
|||
|
||||
[ t ] [
|
||||
[ "object" inspector render ] with-string-writer
|
||||
USING: splitting sequences ;
|
||||
"\"" split "'" join ! replace " with ' for now
|
||||
[ "object" value [ describe ] with-html-writer ] with-string-writer
|
||||
=
|
||||
] unit-test
|
||||
|
|
|
@ -4,12 +4,12 @@ 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
|
||||
validators urls present
|
||||
xmode.code2html lcs.diff2html farkup
|
||||
validators urls present xml.writer xml.interpolate xml
|
||||
xmode.code2html lcs.diff2html farkup io.streams.string
|
||||
html.elements html.streams html.forms ;
|
||||
IN: html.components
|
||||
|
||||
GENERIC: render* ( value name renderer -- )
|
||||
GENERIC: render* ( value name renderer -- xml )
|
||||
|
||||
: render ( name renderer -- )
|
||||
prepare-value
|
||||
|
@ -19,38 +19,36 @@ GENERIC: render* ( value name renderer -- )
|
|||
[ f swap ]
|
||||
if
|
||||
] 2dip
|
||||
render*
|
||||
render* write-xml-chunk
|
||||
[ render-error ] when* ;
|
||||
|
||||
<PRIVATE
|
||||
|
||||
: render-input ( value name type -- )
|
||||
<input =type =name present =value input/> ;
|
||||
: render-input ( value name type -- xml )
|
||||
[XML <input value=<-> name=<-> type=<->/> XML] ;
|
||||
|
||||
PRIVATE>
|
||||
|
||||
SINGLETON: label
|
||||
|
||||
M: label render* 2drop present escape-string write ;
|
||||
M: label render*
|
||||
2drop present ;
|
||||
|
||||
SINGLETON: hidden
|
||||
|
||||
M: hidden render* drop "hidden" render-input ;
|
||||
M: hidden render*
|
||||
drop "hidden" render-input ;
|
||||
|
||||
: render-field ( value name size type -- )
|
||||
<input
|
||||
=type
|
||||
[ present =size ] when*
|
||||
=name
|
||||
present =value
|
||||
input/> ;
|
||||
: render-field ( value name size type -- xml )
|
||||
[XML <input value=<-> name=<-> size=<-> type=<->/> XML] ;
|
||||
|
||||
TUPLE: field size ;
|
||||
|
||||
: <field> ( -- field )
|
||||
field new ;
|
||||
|
||||
M: field render* size>> "text" render-field ;
|
||||
M: field render*
|
||||
size>> "text" render-field ;
|
||||
|
||||
TUPLE: password size ;
|
||||
|
||||
|
@ -67,14 +65,12 @@ TUPLE: textarea rows cols ;
|
|||
: <textarea> ( -- renderer )
|
||||
textarea new ;
|
||||
|
||||
M: textarea render*
|
||||
<textarea
|
||||
[ rows>> [ present =rows ] when* ]
|
||||
[ cols>> [ present =cols ] when* ] bi
|
||||
=name
|
||||
textarea>
|
||||
present escape-string write
|
||||
</textarea> ;
|
||||
M: textarea render* ( value name area -- xml )
|
||||
rot [ [ rows>> ] [ cols>> ] bi ] dip
|
||||
[XML <textarea
|
||||
name=<->
|
||||
rows=<->
|
||||
cols=<->><-></textarea> XML] ;
|
||||
|
||||
! Choice
|
||||
TUPLE: choice size multiple choices ;
|
||||
|
@ -82,24 +78,23 @@ TUPLE: choice size multiple choices ;
|
|||
: <choice> ( -- choice )
|
||||
choice new ;
|
||||
|
||||
: render-option ( text selected? -- )
|
||||
<option [ "selected" =selected ] when option>
|
||||
present escape-string write
|
||||
</option> ;
|
||||
: render-option ( text selected? -- xml )
|
||||
"selected" and swap
|
||||
[XML <option selected=<->><-></option> XML] ;
|
||||
|
||||
: render-options ( options selected -- )
|
||||
'[ dup _ member? render-option ] each ;
|
||||
: render-options ( value choice -- xml )
|
||||
[ choices>> value ] [ multiple>> ] bi
|
||||
[ swap ] [ swap 1array ] if
|
||||
'[ dup _ member? render-option ] map ;
|
||||
|
||||
M: choice render*
|
||||
<select
|
||||
swap =name
|
||||
dup size>> [ present =size ] when*
|
||||
dup multiple>> [ "true" =multiple ] when
|
||||
select>
|
||||
[ choices>> value ] [ multiple>> ] bi
|
||||
[ swap ] [ swap 1array ] if
|
||||
render-options
|
||||
</select> ;
|
||||
M:: choice render* ( value name choice -- xml )
|
||||
choice size>> :> size
|
||||
choice multiple>> "true" and :> multiple
|
||||
value choice render-options :> contents
|
||||
[XML <select
|
||||
name=<-name->
|
||||
size=<-size->
|
||||
multiple=<-multiple->><-contents-></select> XML] ;
|
||||
|
||||
! Checkboxes
|
||||
TUPLE: checkbox label ;
|
||||
|
@ -108,13 +103,10 @@ TUPLE: checkbox label ;
|
|||
checkbox new ;
|
||||
|
||||
M: checkbox render*
|
||||
<input
|
||||
"checkbox" =type
|
||||
swap =name
|
||||
swap [ "true" =checked ] when
|
||||
input>
|
||||
label>> escape-string write
|
||||
</input> ;
|
||||
[ "true" and ] [ ] [ label>> ] tri*
|
||||
[XML <input
|
||||
type="checkbox"
|
||||
checked=<-> name=<->><-></input> XML] ;
|
||||
|
||||
! Link components
|
||||
GENERIC: link-title ( obj -- string )
|
||||
|
@ -129,10 +121,9 @@ M: url link-href ;
|
|||
TUPLE: link target ;
|
||||
|
||||
M: link render*
|
||||
nip
|
||||
<a target>> [ =target ] when* dup link-href =href a>
|
||||
link-title present escape-string write
|
||||
</a> ;
|
||||
nip swap
|
||||
[ target>> ] [ [ link-href ] [ link-title ] bi ] bi*
|
||||
[XML <a target=<-> href=<->><-></a> XML] ;
|
||||
|
||||
! XMode code component
|
||||
TUPLE: code mode ;
|
||||
|
@ -161,7 +152,7 @@ M: farkup render*
|
|||
nip
|
||||
[ no-follow>> [ string>boolean link-no-follow? set ] when* ]
|
||||
[ disable-images>> [ string>boolean disable-images? set ] when* ]
|
||||
[ parsed>> string>boolean [ (write-farkup) ] [ write-farkup ] if ]
|
||||
[ parsed>> string>boolean [ (write-farkup) ] [ farkup>xml ] if ]
|
||||
tri
|
||||
] with-scope ;
|
||||
|
||||
|
@ -169,7 +160,8 @@ M: farkup render*
|
|||
SINGLETON: inspector
|
||||
|
||||
M: inspector render*
|
||||
2drop [ describe ] with-html-writer ;
|
||||
2drop [ [ describe ] with-html-writer ] with-string-writer
|
||||
string>xml-chunk ;
|
||||
|
||||
! Diff component
|
||||
SINGLETON: comparison
|
||||
|
@ -180,4 +172,4 @@ M: comparison render*
|
|||
! HTML component
|
||||
SINGLETON: html
|
||||
|
||||
M: html render* 2drop write ;
|
||||
M: html render* 2drop string>xml-chunk ;
|
||||
|
|
|
@ -1,44 +1,42 @@
|
|||
! Copyright (C) 2008 Slava Pestov
|
||||
! See http://factorcode.org/license.txt for BSD license.
|
||||
USING: lcs html.elements kernel ;
|
||||
USING: lcs xml.interpolate xml.writer kernel strings ;
|
||||
FROM: accessors => item>> ;
|
||||
FROM: io => write ;
|
||||
FROM: sequences => each if-empty ;
|
||||
FROM: xml.entities => escape-string ;
|
||||
FROM: sequences => each if-empty when-empty map ;
|
||||
IN: lcs.diff2html
|
||||
|
||||
GENERIC: diff-line ( obj -- )
|
||||
GENERIC: diff-line ( obj -- xml )
|
||||
|
||||
: write-item ( item -- )
|
||||
item>> [ " " ] [ escape-string ] if-empty write ;
|
||||
: item-string ( item -- string )
|
||||
item>> [ CHAR: no-break-space 1string ] when-empty ;
|
||||
|
||||
M: retain diff-line
|
||||
<tr>
|
||||
dup [
|
||||
<td "retain" =class td>
|
||||
write-item
|
||||
</td>
|
||||
] bi@
|
||||
</tr> ;
|
||||
item-string
|
||||
[XML <td class="retain"><-></td> XML]
|
||||
dup [XML <tr><-><-></tr> XML] ;
|
||||
|
||||
M: insert diff-line
|
||||
<tr>
|
||||
<td> </td>
|
||||
<td "insert" =class td>
|
||||
write-item
|
||||
</td>
|
||||
</tr> ;
|
||||
[XML
|
||||
<tr>
|
||||
<td> </td>
|
||||
<td class="insert"><-></td>
|
||||
</tr>
|
||||
XML] ;
|
||||
|
||||
M: delete diff-line
|
||||
<tr>
|
||||
<td "delete" =class td>
|
||||
write-item
|
||||
</td>
|
||||
<td> </td>
|
||||
</tr> ;
|
||||
[XML
|
||||
<tr>
|
||||
<td class="delete"><-></td>
|
||||
<td> </td>
|
||||
</tr>
|
||||
XML] ;
|
||||
|
||||
: htmlize-diff ( diff -- )
|
||||
<table "100%" =width "comparison" =class table>
|
||||
<tr> <th> "Old" write </th> <th> "New" write </th> </tr>
|
||||
[ diff-line ] each
|
||||
</table> ;
|
||||
: htmlize-diff ( diff -- xml )
|
||||
[ diff-line ] map
|
||||
[XML
|
||||
<table width="100%" class="comparison">
|
||||
<tr><th>Old</th><th>New</th></tr>
|
||||
<->
|
||||
</table>
|
||||
XML] ;
|
||||
|
|
|
@ -216,3 +216,6 @@ M: xml like
|
|||
|
||||
PREDICATE: contained-tag < tag children>> not ;
|
||||
PREDICATE: open-tag < tag children>> ;
|
||||
|
||||
UNION: xml-data
|
||||
tag comment string directive instruction ;
|
||||
|
|
|
@ -30,7 +30,8 @@ DEFER: interpolate-sequence
|
|||
|
||||
GENERIC: push-item ( item -- )
|
||||
M: string push-item , ;
|
||||
M: object push-item , ;
|
||||
M: xml-data push-item , ;
|
||||
M: object push-item present , ;
|
||||
M: sequence push-item
|
||||
[ dup array? [ % ] [ , ] if ] each ;
|
||||
|
||||
|
|
Loading…
Reference in New Issue