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