]> gitweb.factorcode.org Git - factor.git/blob - basis/html/templates/chloe/components/components.factor
basis: removing unnecessary method stack effects.
[factor.git] / basis / html / templates / chloe / components / components.factor
1 ! Copyright (C) 2008, 2010 Slava Pestov.
2 ! See http://factorcode.org/license.txt for BSD license.
3 USING: accessors assocs sequences kernel parser fry quotations
4 classes.tuple classes.singleton namespaces
5 html.components
6 html.templates.chloe.compiler
7 html.templates.chloe.syntax ;
8 IN: html.templates.chloe.components
9
10 : render-quot ( -- quot )
11     string-context? get
12     [ render-string ]
13     [ render ]
14     ? ;
15
16 GENERIC: component-tag ( tag class -- )
17
18 M: singleton-class component-tag
19     [ "name" required-attr compile-attr ]
20     [ literalize render-quot [code-with] ]
21     bi* ;
22
23 : compile-component-attrs ( tag class -- )
24     [ attrs>> [ drop main>> "name" = ] assoc-reject ] dip
25     [ all-slots swap '[ name>> _ at compile-attr ] each ]
26     [ [ boa ] [code-with] ]
27     bi ;
28
29 M: tuple-class component-tag
30     [ drop "name" required-attr compile-attr ]
31     [ compile-component-attrs ] 2bi
32     render-quot [code] ;
33
34 SYNTAX: COMPONENT:
35     scan-word
36     [ name>> ] [ '[ _ component-tag ] ] bi
37     define-chloe-tag ;