| rev | line source | 
| jbe/bsw@0 | 1 -- | 
| jbe/bsw@0 | 2 -- Creates a list view of a collection | 
| jbe/bsw@0 | 3 -- | 
| jbe/bsw@0 | 4 -- Example: | 
| jbe/bsw@0 | 5 -- | 
| jbe/bsw@0 | 6 --   ui_deprecated.list({ | 
| jbe/bsw@0 | 7 --     label = 'Point table', | 
| jbe/bsw@0 | 8 --     collection = mycollection, | 
| jbe/bsw@0 | 9 --     type = 'table' -- 'table', 'ulli' | 
| jbe/bsw@0 | 10 --     cols = { | 
| jbe/bsw@0 | 11 --       { | 
| jbe/bsw@0 | 12 --         label = _'Id', | 
| jbe/bsw@0 | 13 --         field = 'id', | 
| jbe/bsw@0 | 14 --         width = 100, | 
| jbe/bsw@0 | 15 --         link = { module = 'mymodule', view = 'show' }, | 
| jbe/bsw@0 | 16 --              sort = true, | 
| jbe/bsw@0 | 17 --       }, | 
| jbe/bsw@0 | 18 --       { | 
| jbe/bsw@0 | 19 --         label = _'Name', | 
| jbe/bsw@0 | 20 --         field = 'name', | 
| jbe/bsw@0 | 21 --         width = 200, | 
| jbe/bsw@0 | 22 --         link = { module = 'mymodule', view = 'show' }, | 
| jbe/bsw@0 | 23 --              sort = true, | 
| jbe/bsw@0 | 24 --       }, | 
| jbe/bsw@0 | 25 --      { | 
| jbe/bsw@0 | 26 --        label = _'Points', | 
| jbe/bsw@0 | 27 --        func = function(record) | 
| jbe/bsw@0 | 28 --          return record.points_a + record.points_b + record.points_c | 
| jbe/bsw@0 | 29 --        end, | 
| jbe/bsw@0 | 30 --        width = 300 | 
| jbe/bsw@0 | 31 --      } | 
| jbe/bsw@0 | 32 --     } | 
| jbe/bsw@0 | 33 --   }) | 
| jbe/bsw@0 | 34 -- | 
| jbe/bsw@0 | 35 | 
| jbe/bsw@0 | 36 function ui_deprecated.list(args) | 
| jbe/bsw@0 | 37   local args = args | 
| jbe/bsw@0 | 38   args.type = args.type or 'table' | 
| jbe/bsw@0 | 39   if args.label then | 
| jbe/bsw@0 | 40     slot.put('<div class="ui_list_label">' .. encode.html(args.label) .. '</div>\n') | 
| jbe/bsw@0 | 41   end | 
| jbe/bsw@0 | 42   if not args or not args.collection or not args.cols then | 
| jbe/bsw@0 | 43     error('No args for ui_deprecated.list_end') | 
| jbe/bsw@0 | 44   end | 
| jbe/bsw@0 | 45   if args.type == 'table' then | 
| jbe/bsw@0 | 46     slot.put('<table class="ui_list">') | 
| jbe/bsw@0 | 47     slot.put('<tr class="ui_list_head">') | 
| jbe/bsw@0 | 48   elseif args.type == 'ulli' then | 
| jbe/bsw@0 | 49     slot.put('<ul class="ui_list">') | 
| jbe/bsw@0 | 50     slot.put('<li class="ui_list_head">') | 
| jbe/bsw@0 | 51   end | 
| jbe/bsw@0 | 52   if args.type == 'table' then | 
| jbe/bsw@0 | 53   elseif args.type == 'ulli' then | 
| jbe/bsw@0 | 54   end | 
| jbe/bsw@0 | 55   for j, col in ipairs(args.cols) do | 
| jbe/bsw@0 | 56     class_string = '' | 
| jbe/bsw@0 | 57     if col.align then | 
| jbe/bsw@0 | 58       class_string = ' class="' .. col.align .. '"' | 
| jbe/bsw@0 | 59     end | 
| jbe/bsw@0 | 60     if args.type == 'table' then | 
| jbe/bsw@0 | 61       slot.put('<th style="width: ' .. col.width .. ';"' .. class_string ..'>') | 
| jbe/bsw@0 | 62       slot.put(ui_deprecated.box({ name = 'ui_list_col_value', content = encode.html(col.label) }) ) | 
| jbe/bsw@0 | 63       slot.put('</th>') | 
| jbe/bsw@0 | 64     elseif args.type == 'ulli' then | 
| jbe/bsw@0 | 65       slot.put('<div style="width: ' .. col.width .. ';"' .. class_string ..'>') | 
| jbe/bsw@0 | 66       slot.put(ui_deprecated.box({ name = 'ui_list_col_value', content = encode.html(col.label) }) ) | 
| jbe/bsw@0 | 67       slot.put('</div>') | 
| jbe/bsw@0 | 68     end | 
| jbe/bsw@0 | 69   end | 
| jbe/bsw@0 | 70   if args.type == 'table' then | 
| jbe/bsw@0 | 71     slot.put('</tr>') | 
| jbe/bsw@0 | 72   elseif args.type == 'ulli' then | 
| jbe/bsw@0 | 73     slot.put('<br style="clear: left;" />') | 
| jbe/bsw@0 | 74     slot.put('</li>') | 
| jbe/bsw@0 | 75   end | 
| jbe/bsw@0 | 76   for i, obj in ipairs(args.collection) do | 
| jbe/bsw@0 | 77     if args.type == 'table' then | 
| jbe/bsw@0 | 78       slot.put('<tr>') | 
| jbe/bsw@0 | 79     elseif args.type == 'ulli' then | 
| jbe/bsw@0 | 80       slot.put('<li>') | 
| jbe/bsw@0 | 81     end | 
| jbe/bsw@0 | 82     for j, col in ipairs(args.cols) do | 
| jbe/bsw@0 | 83       class_string = '' | 
| jbe/bsw@0 | 84       if col.align then | 
| jbe/bsw@0 | 85         class_string = ' class="ui_list_col_align_' .. col.align .. '"' | 
| jbe/bsw@0 | 86       end | 
| jbe/bsw@0 | 87       if args.type == 'table' then | 
| jbe/bsw@0 | 88         slot.put('<td' .. class_string ..'>') | 
| jbe/bsw@0 | 89       elseif args.type == 'ulli' then | 
| jbe/bsw@0 | 90         slot.put('<div style="width: ' .. col.width .. ';"' .. class_string ..'>') | 
| jbe/bsw@0 | 91       end | 
| jbe/bsw@0 | 92       if col.link then | 
| jbe/bsw@0 | 93         local params = {} | 
| jbe/bsw@0 | 94         if col.link then | 
| jbe/bsw@0 | 95           params = col.link.params or {} | 
| jbe/bsw@0 | 96         end | 
| jbe/bsw@0 | 97         if col.link_values then | 
| jbe/bsw@0 | 98           for key, field in pairs(col.link_values) do | 
| jbe/bsw@0 | 99             params[key] = obj[field] | 
| jbe/bsw@0 | 100           end | 
| jbe/bsw@0 | 101         end | 
| jbe/bsw@0 | 102         local id | 
| jbe/bsw@0 | 103         if col.link_id_field then | 
| jbe/bsw@0 | 104           id = obj[col.link_id_field] | 
| jbe/bsw@0 | 105         end | 
| jbe/bsw@0 | 106         local value | 
| jbe/bsw@0 | 107         if col.value then | 
| jbe/bsw@0 | 108           value = col.value | 
| jbe/bsw@0 | 109         else | 
| jbe/bsw@0 | 110           value = obj[col.field] | 
| jbe/bsw@0 | 111         end | 
| jbe/bsw@0 | 112         ui_deprecated.link{ | 
| jbe/bsw@0 | 113           label  = convert.to_human(value), | 
| jbe/bsw@0 | 114           module = col.link.module, | 
| jbe/bsw@0 | 115           view   = col.link.view, | 
| jbe/bsw@0 | 116           id     = id, | 
| jbe/bsw@0 | 117           params = params, | 
| jbe/bsw@0 | 118         } | 
| jbe/bsw@0 | 119       elseif col.link_func then | 
| jbe/bsw@0 | 120         local link = col.link_func(obj) | 
| jbe/bsw@0 | 121         if link then | 
| jbe/bsw@0 | 122 	      ui_deprecated.link(link) | 
| jbe/bsw@0 | 123 	    end | 
| jbe/bsw@0 | 124       else | 
| jbe/bsw@0 | 125         local text | 
| jbe/bsw@0 | 126         if col.func then | 
| jbe/bsw@0 | 127           text = col.func(obj) | 
| jbe/bsw@0 | 128         elseif col.value then | 
| jbe/bsw@0 | 129           text = convert.to_human(value) | 
| jbe/bsw@0 | 130         else | 
| jbe/bsw@0 | 131           text = convert.to_human(obj[col.field]) | 
| jbe/bsw@0 | 132         end | 
| jbe/bsw@0 | 133         ui_deprecated.box{ name = 'ui_list_col_value', content = text } | 
| jbe/bsw@0 | 134       end | 
| jbe/bsw@0 | 135       if args.type == 'table' then | 
| jbe/bsw@0 | 136         slot.put('</td>') | 
| jbe/bsw@0 | 137       elseif args.type == 'ulli' then | 
| jbe/bsw@0 | 138         slot.put('</div>') | 
| jbe/bsw@0 | 139       end | 
| jbe/bsw@0 | 140     end | 
| jbe/bsw@0 | 141     if args.type == 'table' then | 
| jbe/bsw@0 | 142       slot.put('</tr>') | 
| jbe/bsw@0 | 143     elseif args.type == 'ulli' then | 
| jbe/bsw@0 | 144       slot.put('<br style="clear: left;" />') | 
| jbe/bsw@0 | 145       slot.put('</li>') | 
| jbe/bsw@0 | 146     end | 
| jbe/bsw@0 | 147   end | 
| jbe/bsw@0 | 148   if args.type == 'table' then | 
| jbe/bsw@0 | 149     slot.put('</table>') | 
| jbe/bsw@0 | 150   elseif args.type == 'ulli' then | 
| jbe/bsw@0 | 151     slot.put('</ul><div style="clear: left"> </div>') | 
| jbe/bsw@0 | 152   end | 
| jbe/bsw@0 | 153 end |