annotate framework/env/ui_deprecated/multiselect.lua @ 216:fd0360594636
Work on request.process(...), request.default_router(...), request.router(), request.handler(...)
 | author | 
 jbe | 
 | date | 
 Mon Jan 12 03:02:26 2015 +0100 (2015-01-12) | 
 | parents | 
 9fdfb27f8e67  | 
 | children | 
  | 
 
 | rev | 
   line source | 
| 
jbe/bsw@0
 | 
     1 function ui_deprecated.multiselect(args)
 | 
| 
jbe/bsw@0
 | 
     2   local record = assert(slot.get_state_table(), "ui_deprecated.multiselect was not called within a form.").form_record
 | 
| 
jbe/bsw@0
 | 
     3   local name = args.name
 | 
| 
jbe/bsw@0
 | 
     4   local relationship = args.relationship
 | 
| 
jbe/bsw@0
 | 
     5 
 | 
| 
jbe/bsw@0
 | 
     6   local foreign_records = relationship.foreign_records
 | 
| 
jbe/bsw@0
 | 
     7 	
 | 
| 
jbe/bsw@0
 | 
     8   local selector = relationship.connected_by_model:new_selector()
 | 
| 
jbe/bsw@0
 | 
     9   selector:add_where{ relationship.connected_by_my_id .. ' = ?', record[relationship.my_id] }
 | 
| 
jbe/bsw@0
 | 
    10   local connected_by_records = selector:exec()
 | 
| 
jbe/bsw@0
 | 
    11 	
 | 
| 
jbe/bsw@0
 | 
    12   local connections = {}
 | 
| 
jbe/bsw@0
 | 
    13   for i, connected_by_record in ipairs(connected_by_records) do
 | 
| 
jbe/bsw@0
 | 
    14     connections[connected_by_record[relationship.connected_by_foreign_id]] = connected_by_record
 | 
| 
jbe/bsw@0
 | 
    15   end
 | 
| 
jbe/bsw@0
 | 
    16 
 | 
| 
jbe/bsw@0
 | 
    17   local html = {}
 | 
| 
jbe/bsw@0
 | 
    18 
 | 
| 
jbe/bsw@0
 | 
    19   if args.type == "checkboxes" then
 | 
| 
jbe/bsw@0
 | 
    20     for i, foreign_record in ipairs(foreign_records) do
 | 
| 
jbe/bsw@0
 | 
    21       local selected = ''
 | 
| 
jbe/bsw@0
 | 
    22       if connections[foreign_record[relationship.foreign_id]] then
 | 
| 
jbe/bsw@0
 | 
    23         selected = ' checked="1"'
 | 
| 
jbe/bsw@0
 | 
    24       end
 | 
| 
jbe/bsw@0
 | 
    25       html[#html + 1] = '<input type="checkbox" name="' .. name .. '" value="' .. foreign_record[relationship.foreign_id] .. '"' .. selected .. '> ' .. convert.to_human(foreign_record[relationship.foreign_name], "string") .. '<br />\n'
 | 
| 
jbe/bsw@0
 | 
    26     end
 | 
| 
jbe/bsw@0
 | 
    27  
 | 
| 
jbe/bsw@0
 | 
    28   else
 | 
| 
jbe/bsw@0
 | 
    29     html[#html + 1] = '<select name="' .. name .. '" multiple="1">'
 | 
| 
jbe/bsw@0
 | 
    30     for i, foreign_record in ipairs(foreign_records) do
 | 
| 
jbe/bsw@0
 | 
    31       local selected = ''
 | 
| 
jbe/bsw@0
 | 
    32       if connections[foreign_record[relationship.foreign_id]] then
 | 
| 
jbe/bsw@0
 | 
    33         selected = ' selected="1"'
 | 
| 
jbe/bsw@0
 | 
    34       end
 | 
| 
jbe/bsw@0
 | 
    35       html[#html + 1] = '<option value="' .. foreign_record[relationship.foreign_id] .. '"' .. selected .. '>' .. convert.to_human(foreign_record[relationship.foreign_name], "string") .. '</option>\n'
 | 
| 
jbe/bsw@0
 | 
    36     end
 | 
| 
jbe/bsw@0
 | 
    37     html[#html + 1] = '</select>'
 | 
| 
jbe/bsw@0
 | 
    38 
 | 
| 
jbe/bsw@0
 | 
    39   end
 | 
| 
jbe/bsw@0
 | 
    40   	
 | 
| 
jbe/bsw@0
 | 
    41   slot.put('<div class="ui_field ui_multiselect">\n')
 | 
| 
jbe/bsw@0
 | 
    42   if args.label then
 | 
| 
jbe/bsw@0
 | 
    43     slot.put('<div class="label">', encode.html(args.label), '</div>\n')
 | 
| 
jbe/bsw@0
 | 
    44   end
 | 
| 
jbe/bsw@0
 | 
    45   slot.put('<div class="value">',
 | 
| 
jbe/bsw@0
 | 
    46         table.concat(html),
 | 
| 
jbe/bsw@0
 | 
    47       '</div>\n',
 | 
| 
jbe/bsw@0
 | 
    48     '</div>\n'
 | 
| 
jbe/bsw@0
 | 
    49   )
 | 
| 
jbe/bsw@0
 | 
    50 end |