| 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 |