Mercurial > urweb
comparison demo/more/grid.ur @ 1833:be0c4e2e488a
Allow any FFI module to declare new HTML tags
author | Adam Chlipala <adam@chlipala.net> |
---|---|
date | Wed, 28 Nov 2012 16:56:45 -0500 |
parents | e6bc6bbd7a32 |
children |
comparison
equal
deleted
inserted
replaced
1832:373e2c3f03b2 | 1833:be0c4e2e488a |
---|---|
38 val aggregates : $(map (aggregateMeta row) aggregates) | 38 val aggregates : $(map (aggregateMeta row) aggregates) |
39 val aggFolder : folder aggregates | 39 val aggFolder : folder aggregates |
40 | 40 |
41 val pageLength : option int | 41 val pageLength : option int |
42 end) = struct | 42 end) = struct |
43 style tabl | 43 style tab |
44 style tr | 44 style row |
45 style th | 45 style header |
46 style td | 46 style data |
47 style agg | 47 style agg |
48 | 48 |
49 fun make (row : M.row) [input] [filter] (m : colMeta' M.row input filter) : transaction input = m.Project row | 49 fun make (row : M.row) [input] [filter] (m : colMeta' M.row input filter) : transaction input = m.Project row |
50 | 50 |
51 fun makeAll cols row = @@Monad.exec [transaction] _ [map snd3 M.cols] | 51 fun makeAll cols row = @@Monad.exec [transaction] _ [map snd3 M.cols] |
120 return (previous && this)) | 120 return (previous && this)) |
121 (fn _ => return True) | 121 (fn _ => return True) |
122 M.folder M.cols grid.Cols grid.Filters row | 122 M.folder M.cols grid.Cols grid.Filters row |
123 | 123 |
124 fun render (grid : grid) = <xml> | 124 fun render (grid : grid) = <xml> |
125 <table class={tabl}> | 125 <table class={tab}> |
126 <tr class={tr}> | 126 <tr class={row}> |
127 <th/> <th/> <th><button value="No sort" onclick={fn _ => set grid.Sort None}/></th> | 127 <th/> <th/> <th><button value="No sort" onclick={fn _ => set grid.Sort None}/></th> |
128 {@mapX2 [fst3] [colMeta M.row] [tr] | 128 {@mapX2 [fst3] [colMeta M.row] [tr] |
129 (fn [nm :: Name] [p :: (Type * Type * Type)] [rest :: {(Type * Type * Type)}] [[nm] ~ rest] | 129 (fn [nm :: Name] [p :: (Type * Type * Type)] [rest :: {(Type * Type * Type)}] [[nm] ~ rest] |
130 data (meta : colMeta M.row p) => | 130 data (meta : colMeta M.row p) => |
131 <xml><th class={th}> | 131 <xml><th class={header}> |
132 {case (meta.Handlers data).Sort of | 132 {case (meta.Handlers data).Sort of |
133 None => txt (meta.Handlers data).Header | 133 None => txt (meta.Handlers data).Header |
134 | sort => <xml><button value={(meta.Handlers data).Header} | 134 | sort => <xml><button value={(meta.Handlers data).Header} |
135 onclick={fn _ => set grid.Sort sort}/></xml>} | 135 onclick={fn _ => set grid.Sort sort}/></xml>} |
136 </th></xml>) | 136 </th></xml>) |
183 set rowS row'; | 183 set rowS row'; |
184 | 184 |
185 cols <- makeAll grid.Cols row'; | 185 cols <- makeAll grid.Cols row'; |
186 set colsS cols | 186 set colsS cols |
187 in | 187 in |
188 <xml><tr class={tr}> | 188 <xml><tr class={row}> |
189 <td> | 189 <td> |
190 <dyn signal={b <- signal grid.Selection; | 190 <dyn signal={b <- signal grid.Selection; |
191 return (if b then | 191 return (if b then |
192 <xml><ccheckbox source={sd}/></xml> | 192 <xml><ccheckbox source={sd}/></xml> |
193 else | 193 else |
211 | 211 |
212 <dyn signal={cols <- signal colsS; | 212 <dyn signal={cols <- signal colsS; |
213 return (@mapX3 [fst3] [colMeta M.row] [snd3] [_] | 213 return (@mapX3 [fst3] [colMeta M.row] [snd3] [_] |
214 (fn [nm :: Name] [t :: (Type * Type * Type)] | 214 (fn [nm :: Name] [t :: (Type * Type * Type)] |
215 [rest :: {(Type * Type * Type)}] | 215 [rest :: {(Type * Type * Type)}] |
216 [[nm] ~ rest] data meta v => | 216 [[nm] ~ rest] dat meta v => |
217 <xml><td class={td}> | 217 <xml><td class={data}> |
218 <dyn signal={b <- signal ud; | 218 <dyn signal={b <- signal ud; |
219 return (if b then | 219 return (if b then |
220 (meta.Handlers data).Edit v | 220 (meta.Handlers dat).Edit v |
221 else | 221 else |
222 (meta.Handlers data).Display | 222 (meta.Handlers dat).Display |
223 v)}/> | 223 v)}/> |
224 <dyn signal={b <- signal ud; | 224 <dyn signal={b <- signal ud; |
225 if b then | 225 if b then |
226 valid <- | 226 valid <- |
227 (meta.Handlers data).Validate v; | 227 (meta.Handlers dat).Validate v; |
228 return (if valid then | 228 return (if valid then |
229 <xml/> | 229 <xml/> |
230 else | 230 else |
231 <xml>!</xml>) | 231 <xml>!</xml>) |
232 else | 232 else |