jbe/bsw@0: function ui_deprecated.calendar(args) jbe/bsw@0: local record = assert(slot.get_state_table(), "ui_deprecated.calender was not called within a form.").form_record jbe/bsw@0: local value = param.get(args.field, atom.date) or record[args.field] jbe/bsw@0: local year = param.get('_ui_calendar_year', atom.integer) or args.year or 2008 jbe/bsw@0: local month = param.get('_ui_calendar_month', atom.integer) or args.month or 10 jbe/bsw@0: local empty_days = atom.date{ year = year, month = month, day = 1 }.iso_weekday -1 jbe/bsw@0: local enabled = not args.disabled jbe/bsw@0: jbe/bsw@0: local prev_year = year jbe/bsw@0: local prev_month = month - 1 jbe/bsw@0: if prev_month == 0 then jbe/bsw@0: prev_month = 12 jbe/bsw@0: prev_year = prev_year - 1 jbe/bsw@0: end jbe/bsw@0: jbe/bsw@0: local next_year = year jbe/bsw@0: local next_month = month + 1 jbe/bsw@0: if next_month == 13 then jbe/bsw@0: next_month = 1 jbe/bsw@0: next_year = next_year + 1 jbe/bsw@0: end jbe/bsw@0: jbe/bsw@0: ui_deprecated.tag('div', { jbe/bsw@0: html_options = { jbe/bsw@0: class="ui_field ui_calendar" jbe/bsw@0: }, jbe/bsw@0: content = function() jbe/bsw@0: ui_deprecated.tag('input', { jbe/bsw@0: html_options = { jbe/bsw@0: type = 'hidden', jbe/bsw@0: value = year, jbe/bsw@0: name = '_ui_calendar_year', jbe/bsw@0: id = '_ui_calendar_year', jbe/bsw@0: onchange = 'this.form.submit();' jbe/bsw@0: } jbe/bsw@0: }) jbe/bsw@0: ui_deprecated.tag('input', { jbe/bsw@0: html_options = { jbe/bsw@0: type = 'hidden', jbe/bsw@0: value = month, jbe/bsw@0: name = '_ui_calendar_month', jbe/bsw@0: id = '_ui_calendar_month', jbe/bsw@0: onchange = 'this.form.submit();' jbe/bsw@0: } jbe/bsw@0: }) jbe/bsw@0: ui_deprecated.tag('input', { jbe/bsw@0: html_options = { jbe/bsw@0: type = 'hidden', jbe/bsw@0: value = value and tostring(value) or '', jbe/bsw@0: name = args.field, jbe/bsw@0: id = '_ui_calendar_input', jbe/bsw@0: onchange = 'this.form.submit();' jbe/bsw@0: } jbe/bsw@0: }) jbe/bsw@0: if args.label then jbe/bsw@0: ui_deprecated.tag('div', { jbe/bsw@0: html_options = { jbe/bsw@0: class="label" jbe/bsw@0: }, jbe/bsw@0: content = function() jbe/bsw@0: ui_deprecated.text(args.label) jbe/bsw@0: end jbe/bsw@0: }) jbe/bsw@0: end jbe/bsw@0: ui_deprecated.tag('div', { jbe/bsw@0: html_options = { jbe/bsw@0: class="value" jbe/bsw@0: }, jbe/bsw@0: content = function() jbe/bsw@0: ui_deprecated.tag('div', { jbe/bsw@0: html_options = { jbe/bsw@0: class = 'next', jbe/bsw@0: href = '#', jbe/bsw@0: onclick = enabled and "document.getElementById('_ui_calendar_year').value = '" .. tostring(next_year) .. "'; document.getElementById('_ui_calendar_month').value = '" .. tostring(next_month) .. "'; document.getElementById('_ui_calendar_year').form.submit();" or '', jbe/bsw@0: }, jbe/bsw@0: content = '>>>'; jbe/bsw@0: }) jbe/bsw@0: ui_deprecated.tag('div', { jbe/bsw@0: html_options = { jbe/bsw@0: class = 'prev', jbe/bsw@0: href = '#', jbe/bsw@0: onclick = enabled and "document.getElementById('_ui_calendar_year').value = '" .. tostring(prev_year) .. "'; document.getElementById('_ui_calendar_month').value = '" .. tostring(prev_month) .. "'; document.getElementById('_ui_calendar_year').form.submit();" or '', jbe/bsw@0: }, jbe/bsw@0: content = '<<<'; jbe/bsw@0: }) jbe/bsw@0: ui_deprecated.tag('div', { jbe/bsw@0: html_options = { jbe/bsw@0: class="title" jbe/bsw@0: }, jbe/bsw@0: content = function() jbe/bsw@0: local months = {_'January', _'February', _'March', _'April', _'May', _'June', _'July', _'August', _'September', _'October', _'November', _'December' } jbe/bsw@0: ui_deprecated.text(months[month]) jbe/bsw@0: ui_deprecated.text(' ') jbe/bsw@0: ui_deprecated.text(tostring(year)) jbe/bsw@0: end jbe/bsw@0: }) jbe/bsw@0: ui_deprecated.tag('table', { jbe/bsw@0: content = function() jbe/bsw@0: ui_deprecated.tag('thead', { jbe/bsw@0: content = function() jbe/bsw@0: ui_deprecated.tag('tr', { jbe/bsw@0: content = function() jbe/bsw@0: local dows = { _'Mon', _'Tue', _'Wed', _'Thu', _'Fri', _'Sat', _'Sun' } jbe/bsw@0: for col = 1,7 do jbe/bsw@0: ui_deprecated.tag('th', { content = dows[col] }) jbe/bsw@0: end jbe/bsw@0: end jbe/bsw@0: }) jbe/bsw@0: end jbe/bsw@0: }) jbe/bsw@0: ui_deprecated.tag('tbody', { jbe/bsw@0: content = function() jbe/bsw@0: for row = 1,6 do jbe/bsw@0: ui_deprecated.tag('tr', { jbe/bsw@0: content = function() jbe/bsw@0: for col = 1,7 do jbe/bsw@0: local day = (row -1) * 7 + col - empty_days jbe/bsw@0: local date = atom.date.invalid jbe/bsw@0: if day > 0 then jbe/bsw@0: date = atom.date{ year = year, month = month, day = day } jbe/bsw@0: end jbe/bsw@0: ui_deprecated.tag('td', { jbe/bsw@0: html_options = { jbe/bsw@0: onclick = enabled and 'document.getElementById(\'_ui_calendar_input\').value = \'' .. tostring(date) .. '\'; document.getElementById(\'_ui_calendar_input\').onchange(); ' or '' jbe/bsw@0: }, jbe/bsw@0: content = function() jbe/bsw@0: if date.invalid then jbe/bsw@0: slot.put(' ') jbe/bsw@0: else jbe/bsw@0: local selected = date == value jbe/bsw@0: args.day_func(date, selected) jbe/bsw@0: end jbe/bsw@0: end jbe/bsw@0: }) jbe/bsw@0: end jbe/bsw@0: end jbe/bsw@0: }) jbe/bsw@0: end jbe/bsw@0: end jbe/bsw@0: }) jbe/bsw@0: end jbe/bsw@0: }) jbe/bsw@0: end jbe/bsw@0: }) jbe/bsw@0: end jbe/bsw@0: }) jbe/bsw@0: end