0 | module Text.HTML.Class
2 | import Derive.Prelude
3 | import public Text.CSS.Class
5 | import Text.HTML.Select
6 | import Text.HTML.DomID
9 | %language ElabReflection
18 | Widget : SnocList Class
19 | Widget = [<"widget"]
23 | Btn : SnocList Class
24 | Btn = Widget :< "button"
28 | Comp : SnocList Class
33 | Cell : SnocList Class
38 | Icon : SnocList Class
43 | Inp : SnocList Class
44 | Inp = Widget :< "input"
48 | Sel : SnocList Class
49 | Sel = Widget :< "select"
53 | Lbl : SnocList Class
58 | Lst : SnocList Class
63 | Row : SnocList Class
68 | Title : SnocList Class
74 | collapsed = "collapsed"
79 | expanded = "expanded"
86 | cls : SnocList Class -> Class -> Attribute t e
87 | cls sv v = classes $
sv <>> [v]
90 | cls1 : Class -> Attribute t e
99 | lbl : Cast i DomID => Class -> i -> String -> Node e
100 | lbl c vi txt = label [cls Lbl c, forID vi] [Text txt]
104 | cell : Class -> List (Attribute Div e) -> List (Node e) -> Node e
105 | cell v as = div (cls Cell v :: as)
109 | list : Class -> List (Attribute Ul e) -> List (Node e) -> Node e
110 | list v as = ul (cls Lst v :: as)
114 | row : Class -> List (Attribute Div e) -> List (Node e) -> Node e
115 | row v as = div (cls Row v :: as)
119 | btn : Class -> e -> String -> List (Attribute Tag.Button e) -> Node e
120 | btn v ev txt as = button (cls Btn v :: onClick ev :: as) [Text txt]
124 | icon : Class -> e -> List (Attribute Tag.Button e) -> Node e
125 | icon v ev as = button (cls Icon v :: onClick ev :: as) []
132 | iok : Cast i DomID => i -> e -> Node e
133 | iok u ev = icon "ok" ev [ref u]
138 | iadd v = icon "add" v []
142 | icancel : e -> Node e
143 | icancel v = icon "cancel" v []
147 | idelete : e -> Node e
148 | idelete v = icon "delete" v []
156 | inp : Class -> (String -> e) -> List (Attribute Tag.Input e) -> Node e
157 | inp v f as = input (cls Inp v :: onInput f :: as) []
165 | sel : Eq t => (v -> t) -> (v -> String) -> List v -> Class -> Maybe t -> Node t
166 | sel f g vs c i = selectFromListBy vs ((i ==) . Just . f) g f [cls Sel c]