jbe/bsw@0: --[[-- jbe/bsw@0: ui.field.date{ jbe/bsw@0: ... -- generic ui.field.* arguments, as described for ui.autofield{...} jbe/bsw@0: } jbe/bsw@0: jbe/bsw@0: 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: jbe/bsw@0: --]]-- jbe/bsw@0: jbe/bsw@0: function ui.field.date(args) jbe/bsw@0: ui.form_element(args, {fetch_value = true}, function(args) jbe/bsw@0: local value_string = format.date(args.value, args.format_options) jbe/bsw@0: if args.readonly then jbe/bsw@0: ui.tag{ tag = args.tag, attr = args.attr, content = value_string } jbe/bsw@0: else jbe/bsw@0: local fallback_data = slot.use_temporary(function() jbe/bsw@0: local attr = table.new(args.attr) jbe/bsw@0: attr.type = "text" jbe/bsw@0: attr.name = args.html_name jbe/bsw@0: attr.value = value_string jbe/bsw@0: attr.class = attr.class or "ui_field_date" jbe/bsw@0: ui.tag{ tag = "input", attr = attr } jbe/bsw@0: ui.hidden_field{ jbe/bsw@0: name = args.html_name .. "__format", jbe/bsw@0: value = encode.format_info("date", args.format_options) jbe/bsw@0: } jbe/bsw@0: end) jbe/bsw@0: local user_field_id, hidden_field_id jbe/bsw@0: local helper_data = slot.use_temporary(function() jbe/bsw@0: local attr = table.new(args.attr) jbe/bsw@0: user_field_id = attr.id or ui.create_unique_id() jbe/bsw@0: hidden_field_id = ui.create_unique_id() jbe/bsw@0: attr.id = user_field_id jbe/bsw@0: attr.type = "text" jbe/bsw@0: attr.class = attr.class or "ui_field_date" jbe/bsw@0: ui.tag{ tag = "input", attr = attr } jbe/bsw@0: local attr = table.new(args.attr) jbe/bsw@0: attr.id = hidden_field_id jbe/bsw@0: attr.type = "hidden" jbe/bsw@0: attr.name = args.html_name jbe/bsw@0: attr.value = atom.dump(args.value) -- extra safety for JS failure jbe/bsw@0: ui.tag{ jbe/bsw@0: tag = "input", jbe/bsw@0: attr = { jbe/bsw@0: id = hidden_field_id, jbe/bsw@0: type = "hidden", jbe/bsw@0: name = args.html_name jbe/bsw@0: } jbe/bsw@0: } jbe/bsw@0: end) jbe/bsw@0: -- TODO: localization jbe/bsw@0: ui.script{ jbe/bsw@0: noscript = fallback_data, jbe/bsw@0: type = "text/javascript", jbe/bsw@0: content = function() jbe/bsw@0: slot.put( jbe/bsw@0: "if (gregor_addGui == null) document.write(", jbe/bsw@0: encode.json(fallback_data), jbe/bsw@0: "); else { document.write(", jbe/bsw@0: encode.json(helper_data), jbe/bsw@0: "); gregor_addGui({element_id: ", jbe/bsw@0: encode.json(user_field_id), jbe/bsw@0: ", 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: ) jbe/bsw@0: if (args.value) then jbe/bsw@0: slot.put( jbe/bsw@0: "{year: ", tostring(args.value.year), jbe/bsw@0: ", month: ", tostring(args.value.month), jbe/bsw@0: ", day: ", tostring(args.value.day), jbe/bsw@0: "}" jbe/bsw@0: ) jbe/bsw@0: else jbe/bsw@0: slot.put("null") jbe/bsw@0: end jbe/bsw@0: slot.put( jbe/bsw@0: ", select_callback: function(date) { document.getElementById(", jbe/bsw@0: encode.json(hidden_field_id), jbe/bsw@0: ").value = (date == null) ? '' : date.iso_string; } } ) }" jbe/bsw@0: ) jbe/bsw@0: end jbe/bsw@0: } jbe/bsw@0: end jbe/bsw@0: end) jbe/bsw@0: end