webmcp
annotate framework/env/ui_deprecated/calendar.lua @ 34:e19b0b5c46ba
allow execptions an slot.reset_all()
this is usefull when an error is detected deep into a view where you want redirect
to something usefull, but still save some slots like notice and error slots
this is usefull when an error is detected deep into a view where you want redirect
to something usefull, but still save some slots like notice and error slots
| author | Daniel Poelzleithner <poelzi@poelzi.org> | 
|---|---|
| date | Wed Oct 06 16:14:33 2010 +0200 (2010-10-06) | 
| parents | 9fdfb27f8e67 | 
| children | 
| rev | line source | 
|---|---|
| jbe/bsw@0 | 1 function ui_deprecated.calendar(args) | 
| jbe/bsw@0 | 2 local record = assert(slot.get_state_table(), "ui_deprecated.calender was not called within a form.").form_record | 
| jbe/bsw@0 | 3 local value = param.get(args.field, atom.date) or record[args.field] | 
| jbe/bsw@0 | 4 local year = param.get('_ui_calendar_year', atom.integer) or args.year or 2008 | 
| jbe/bsw@0 | 5 local month = param.get('_ui_calendar_month', atom.integer) or args.month or 10 | 
| jbe/bsw@0 | 6 local empty_days = atom.date{ year = year, month = month, day = 1 }.iso_weekday -1 | 
| jbe/bsw@0 | 7 local enabled = not args.disabled | 
| jbe/bsw@0 | 8 | 
| jbe/bsw@0 | 9 local prev_year = year | 
| jbe/bsw@0 | 10 local prev_month = month - 1 | 
| jbe/bsw@0 | 11 if prev_month == 0 then | 
| jbe/bsw@0 | 12 prev_month = 12 | 
| jbe/bsw@0 | 13 prev_year = prev_year - 1 | 
| jbe/bsw@0 | 14 end | 
| jbe/bsw@0 | 15 | 
| jbe/bsw@0 | 16 local next_year = year | 
| jbe/bsw@0 | 17 local next_month = month + 1 | 
| jbe/bsw@0 | 18 if next_month == 13 then | 
| jbe/bsw@0 | 19 next_month = 1 | 
| jbe/bsw@0 | 20 next_year = next_year + 1 | 
| jbe/bsw@0 | 21 end | 
| jbe/bsw@0 | 22 | 
| jbe/bsw@0 | 23 ui_deprecated.tag('div', { | 
| jbe/bsw@0 | 24 html_options = { | 
| jbe/bsw@0 | 25 class="ui_field ui_calendar" | 
| jbe/bsw@0 | 26 }, | 
| jbe/bsw@0 | 27 content = function() | 
| jbe/bsw@0 | 28 ui_deprecated.tag('input', { | 
| jbe/bsw@0 | 29 html_options = { | 
| jbe/bsw@0 | 30 type = 'hidden', | 
| jbe/bsw@0 | 31 value = year, | 
| jbe/bsw@0 | 32 name = '_ui_calendar_year', | 
| jbe/bsw@0 | 33 id = '_ui_calendar_year', | 
| jbe/bsw@0 | 34 onchange = 'this.form.submit();' | 
| jbe/bsw@0 | 35 } | 
| jbe/bsw@0 | 36 }) | 
| jbe/bsw@0 | 37 ui_deprecated.tag('input', { | 
| jbe/bsw@0 | 38 html_options = { | 
| jbe/bsw@0 | 39 type = 'hidden', | 
| jbe/bsw@0 | 40 value = month, | 
| jbe/bsw@0 | 41 name = '_ui_calendar_month', | 
| jbe/bsw@0 | 42 id = '_ui_calendar_month', | 
| jbe/bsw@0 | 43 onchange = 'this.form.submit();' | 
| jbe/bsw@0 | 44 } | 
| jbe/bsw@0 | 45 }) | 
| jbe/bsw@0 | 46 ui_deprecated.tag('input', { | 
| jbe/bsw@0 | 47 html_options = { | 
| jbe/bsw@0 | 48 type = 'hidden', | 
| jbe/bsw@0 | 49 value = value and tostring(value) or '', | 
| jbe/bsw@0 | 50 name = args.field, | 
| jbe/bsw@0 | 51 id = '_ui_calendar_input', | 
| jbe/bsw@0 | 52 onchange = 'this.form.submit();' | 
| jbe/bsw@0 | 53 } | 
| jbe/bsw@0 | 54 }) | 
| jbe/bsw@0 | 55 if args.label then | 
| jbe/bsw@0 | 56 ui_deprecated.tag('div', { | 
| jbe/bsw@0 | 57 html_options = { | 
| jbe/bsw@0 | 58 class="label" | 
| jbe/bsw@0 | 59 }, | 
| jbe/bsw@0 | 60 content = function() | 
| jbe/bsw@0 | 61 ui_deprecated.text(args.label) | 
| jbe/bsw@0 | 62 end | 
| jbe/bsw@0 | 63 }) | 
| jbe/bsw@0 | 64 end | 
| jbe/bsw@0 | 65 ui_deprecated.tag('div', { | 
| jbe/bsw@0 | 66 html_options = { | 
| jbe/bsw@0 | 67 class="value" | 
| jbe/bsw@0 | 68 }, | 
| jbe/bsw@0 | 69 content = function() | 
| jbe/bsw@0 | 70 ui_deprecated.tag('div', { | 
| jbe/bsw@0 | 71 html_options = { | 
| jbe/bsw@0 | 72 class = 'next', | 
| jbe/bsw@0 | 73 href = '#', | 
| jbe/bsw@0 | 74 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 | 75 }, | 
| jbe/bsw@0 | 76 content = '>>>'; | 
| jbe/bsw@0 | 77 }) | 
| jbe/bsw@0 | 78 ui_deprecated.tag('div', { | 
| jbe/bsw@0 | 79 html_options = { | 
| jbe/bsw@0 | 80 class = 'prev', | 
| jbe/bsw@0 | 81 href = '#', | 
| jbe/bsw@0 | 82 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 | 83 }, | 
| jbe/bsw@0 | 84 content = '<<<'; | 
| jbe/bsw@0 | 85 }) | 
| jbe/bsw@0 | 86 ui_deprecated.tag('div', { | 
| jbe/bsw@0 | 87 html_options = { | 
| jbe/bsw@0 | 88 class="title" | 
| jbe/bsw@0 | 89 }, | 
| jbe/bsw@0 | 90 content = function() | 
| jbe/bsw@0 | 91 local months = {_'January', _'February', _'March', _'April', _'May', _'June', _'July', _'August', _'September', _'October', _'November', _'December' } | 
| jbe/bsw@0 | 92 ui_deprecated.text(months[month]) | 
| jbe/bsw@0 | 93 ui_deprecated.text(' ') | 
| jbe/bsw@0 | 94 ui_deprecated.text(tostring(year)) | 
| jbe/bsw@0 | 95 end | 
| jbe/bsw@0 | 96 }) | 
| jbe/bsw@0 | 97 ui_deprecated.tag('table', { | 
| jbe/bsw@0 | 98 content = function() | 
| jbe/bsw@0 | 99 ui_deprecated.tag('thead', { | 
| jbe/bsw@0 | 100 content = function() | 
| jbe/bsw@0 | 101 ui_deprecated.tag('tr', { | 
| jbe/bsw@0 | 102 content = function() | 
| jbe/bsw@0 | 103 local dows = { _'Mon', _'Tue', _'Wed', _'Thu', _'Fri', _'Sat', _'Sun' } | 
| jbe/bsw@0 | 104 for col = 1,7 do | 
| jbe/bsw@0 | 105 ui_deprecated.tag('th', { content = dows[col] }) | 
| jbe/bsw@0 | 106 end | 
| jbe/bsw@0 | 107 end | 
| jbe/bsw@0 | 108 }) | 
| jbe/bsw@0 | 109 end | 
| jbe/bsw@0 | 110 }) | 
| jbe/bsw@0 | 111 ui_deprecated.tag('tbody', { | 
| jbe/bsw@0 | 112 content = function() | 
| jbe/bsw@0 | 113 for row = 1,6 do | 
| jbe/bsw@0 | 114 ui_deprecated.tag('tr', { | 
| jbe/bsw@0 | 115 content = function() | 
| jbe/bsw@0 | 116 for col = 1,7 do | 
| jbe/bsw@0 | 117 local day = (row -1) * 7 + col - empty_days | 
| jbe/bsw@0 | 118 local date = atom.date.invalid | 
| jbe/bsw@0 | 119 if day > 0 then | 
| jbe/bsw@0 | 120 date = atom.date{ year = year, month = month, day = day } | 
| jbe/bsw@0 | 121 end | 
| jbe/bsw@0 | 122 ui_deprecated.tag('td', { | 
| jbe/bsw@0 | 123 html_options = { | 
| jbe/bsw@0 | 124 onclick = enabled and 'document.getElementById(\'_ui_calendar_input\').value = \'' .. tostring(date) .. '\'; document.getElementById(\'_ui_calendar_input\').onchange(); ' or '' | 
| jbe/bsw@0 | 125 }, | 
| jbe/bsw@0 | 126 content = function() | 
| jbe/bsw@0 | 127 if date.invalid then | 
| jbe/bsw@0 | 128 slot.put(' ') | 
| jbe/bsw@0 | 129 else | 
| jbe/bsw@0 | 130 local selected = date == value | 
| jbe/bsw@0 | 131 args.day_func(date, selected) | 
| jbe/bsw@0 | 132 end | 
| jbe/bsw@0 | 133 end | 
| jbe/bsw@0 | 134 }) | 
| jbe/bsw@0 | 135 end | 
| jbe/bsw@0 | 136 end | 
| jbe/bsw@0 | 137 }) | 
| jbe/bsw@0 | 138 end | 
| jbe/bsw@0 | 139 end | 
| jbe/bsw@0 | 140 }) | 
| jbe/bsw@0 | 141 end | 
| jbe/bsw@0 | 142 }) | 
| jbe/bsw@0 | 143 end | 
| jbe/bsw@0 | 144 }) | 
| jbe/bsw@0 | 145 end | 
| jbe/bsw@0 | 146 }) | 
| jbe/bsw@0 | 147 end |