| rev | line source | 
| jbe/bsw@0 | 1 --[[-- | 
| jbe/bsw@0 | 2 ui.field.date{ | 
| jbe/bsw@0 | 3   ...           -- generic ui.field.* arguments, as described for ui.autofield{...} | 
| jbe/bsw@0 | 4 } | 
| jbe/bsw@0 | 5 | 
| jbe/bsw@0 | 6 This function inserts a field for dates in the active slot. If the JavaScript library "gregor.js" has been loaded, a rich input field is used. For description of the generic field helper arguments, see help for ui.autofield{...}. | 
| jbe/bsw@0 | 7 | 
| jbe/bsw@0 | 8 --]]-- | 
| jbe/bsw@0 | 9 | 
| jbe/bsw@0 | 10 function ui.field.date(args) | 
| jbe/bsw@0 | 11   ui.form_element(args, {fetch_value = true}, function(args) | 
| jbe/bsw@0 | 12     local value_string = format.date(args.value, args.format_options) | 
| jbe/bsw@0 | 13     if args.readonly then | 
| jbe/bsw@0 | 14       ui.tag{ tag = args.tag, attr = args.attr, content = value_string } | 
| jbe/bsw@0 | 15     else | 
| jbe/bsw@0 | 16       local fallback_data = slot.use_temporary(function() | 
| jbe/bsw@0 | 17         local attr = table.new(args.attr) | 
| jbe/bsw@0 | 18         attr.type  = "text" | 
| jbe/bsw@0 | 19         attr.name  = args.html_name | 
| jbe/bsw@0 | 20         attr.value = value_string | 
| jbe/bsw@0 | 21         attr.class = attr.class or "ui_field_date" | 
| jbe/bsw@0 | 22         ui.tag{ tag  = "input", attr = attr } | 
| jbe/bsw@0 | 23         ui.hidden_field{ | 
| jbe/bsw@0 | 24           name  = args.html_name .. "__format", | 
| jbe/bsw@0 | 25           value = encode.format_info("date", args.format_options) | 
| jbe/bsw@0 | 26         } | 
| jbe/bsw@0 | 27       end) | 
| jbe/bsw@0 | 28       local user_field_id, hidden_field_id | 
| jbe/bsw@0 | 29       local helper_data = slot.use_temporary(function() | 
| jbe/bsw@0 | 30         local attr = table.new(args.attr) | 
| jbe/bsw@0 | 31         user_field_id = attr.id or ui.create_unique_id() | 
| jbe/bsw@0 | 32         hidden_field_id = ui.create_unique_id() | 
| jbe/bsw@0 | 33         attr.id    = user_field_id | 
| jbe/bsw@0 | 34         attr.type  = "text" | 
| jbe/bsw@0 | 35         attr.class = attr.class or "ui_field_date" | 
| jbe/bsw@0 | 36         ui.tag{ tag = "input", attr = attr } | 
| jbe/bsw@0 | 37         local attr = table.new(args.attr) | 
| jbe/bsw@0 | 38         attr.id    = hidden_field_id | 
| jbe/bsw@0 | 39         attr.type  = "hidden" | 
| jbe/bsw@0 | 40         attr.name  = args.html_name | 
| jbe/bsw@0 | 41         attr.value = atom.dump(args.value)  -- extra safety for JS failure | 
| jbe/bsw@0 | 42         ui.tag{ | 
| jbe/bsw@0 | 43           tag = "input", | 
| jbe/bsw@0 | 44           attr = { | 
| jbe/bsw@0 | 45             id   = hidden_field_id, | 
| jbe/bsw@0 | 46             type = "hidden", | 
| jbe/bsw@0 | 47             name = args.html_name | 
| jbe/bsw@0 | 48           } | 
| jbe/bsw@0 | 49         } | 
| jbe/bsw@0 | 50       end) | 
| jbe/bsw@0 | 51       -- TODO: localization | 
| jbe/bsw@0 | 52       ui.script{ | 
| jbe/bsw@0 | 53         noscript = fallback_data, | 
| jbe/bsw@0 | 54         type     = "text/javascript", | 
| jbe/bsw@0 | 55         content  = function() | 
| jbe/bsw@0 | 56           slot.put( | 
| jbe/bsw@0 | 57             "if (gregor_addGui == null) document.write(", | 
| jbe/bsw@0 | 58             encode.json(fallback_data), | 
| jbe/bsw@0 | 59             "); else { document.write(", | 
| jbe/bsw@0 | 60             encode.json(helper_data), | 
| jbe/bsw@0 | 61             "); gregor_addGui({element_id: ", | 
| jbe/bsw@0 | 62             encode.json(user_field_id), | 
| jbe/bsw@0 | 63             ", month_names: ['January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'December'], weekday_names: ['Mo', 'Tu', 'We', 'Th', 'Fr', 'Sa', 'Su'], week_numbers: 'left', format: 'DD.MM.YYYY', selected: " | 
| jbe/bsw@0 | 64           ) | 
| jbe/bsw@0 | 65           if (args.value) then | 
| jbe/bsw@0 | 66             slot.put( | 
| jbe/bsw@0 | 67               "{year: ", tostring(args.value.year), | 
| jbe/bsw@0 | 68               ", month: ", tostring(args.value.month), | 
| jbe/bsw@0 | 69               ", day: ", tostring(args.value.day), | 
| jbe/bsw@0 | 70               "}" | 
| jbe/bsw@0 | 71             ) | 
| jbe/bsw@0 | 72           else | 
| jbe/bsw@0 | 73             slot.put("null") | 
| jbe/bsw@0 | 74           end | 
| jbe/bsw@0 | 75           slot.put( | 
| jbe/bsw@0 | 76            ", select_callback: function(date) { document.getElementById(", | 
| jbe/bsw@0 | 77            encode.json(hidden_field_id), | 
| jbe/bsw@0 | 78            ").value = (date == null) ? '' : date.iso_string; } } ) }" | 
| jbe/bsw@0 | 79           ) | 
| jbe/bsw@0 | 80         end | 
| jbe/bsw@0 | 81       } | 
| jbe/bsw@0 | 82     end | 
| jbe/bsw@0 | 83   end) | 
| jbe/bsw@0 | 84 end |