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
|