view_table_renderer.anubis 10.4 KB
/*
 * Created by PyramIDE.
 * User: Totoro
 * Date: 30/11/2011
 * Time: 21:22
 * 
 */

read calexium_lib/database/vtm/view_table_types.anubis
read calexium_lib/database/vtm/view_table_manager_types.anubis
read calexium_lib/database/vtm/view_table_manager.anubis
read hayamiki_lib/types/hayamiki.anubis
read system/string.anubis
read locale/L3.anubis
read tools/basis.anubis

read system_colors/rgb.anubis
read system/convert.anubis

//read utils.anubis
read locale/L3LanguageInfo.anubis
read calexium_lib/web/CXM_common.anubis
read calexium_lib/web/CXM_web_arg_utils.anubis
read calexium_lib/web/CXM_making_a_web_site.anubis
read calexium_lib/web/CXM_multihost_http_server.anubis
read calexium_lib/web/jQuery/CXM_jquery_datatable.anubis
read calexium_lib/web/jQuery/CXM_jquery_datatable_types.anubis
read calexium_lib/web/jQuery/CXM_jquery_dialog.anubis      
read calexium_lib/web/jQuery/CXM_jquery_button.anubis
read calexium_lib/web/jQuery/ui-addon/datetimepicker.anubis
read calexium_lib/web/CXM_form.anubis
read calexium_lib/web/widgets/css_helper.anubis
read calexium_lib/web/widgets/button.anubis

define CXM_Form_Field
  help_line
  (
    HK_Help_Text  help,
    (String) -> String    _T
  )=
  if help is
  {
    no_help_text        then  empty,
    help_text_TAG(tag)  then  explain(_T(tag)),
    help_text(str)      then  explain(str)
  }.
  
  
  //Edit table part
public define List(CXM_Form_Field)  
  edit_form_lines
  (
    SQLite3DataBase       db,
    (String) -> String    _T,
    List(VT_edit_entry)   list,
    List(CXM_Form_Field)  so_far
  )=
  if list is
  {
    []        then reverse(so_far),
    [ h . t]  then
      with line = 
        if h is
        {
          hidden(name, value)        then
            //print("hidden "+name+" = "+value);
            [hidden(html_Id(""), wan(name), wav(value))],          
          primary_key(idx)          then 
            [hidden(html_Id(""), wan("id"), wav(idx))],
          information(s_name, c_name, value, width, help) then
            [input_readonly(label(_T(s_name), no_help), wan(c_name), init(value), if width > 0 then custom(width) else narrow), help_line(help, _T)],
          text(s_name, c_name, value, help) then  
            [input(label(_T(s_name), no_help), wan(c_name), init(value), narrow, mandatory), help_line(help, _T)],
          foreign_text(s_name, c_name, value, select, help) then 
            [selector_c([],label(_T(s_name), no_help), html_Id(""), wan(c_name), 1, select.get(db), success(init(to_String(value))), mandatory), help_line(help, _T)],
          choices_text(s_name, c_name, value, select, help) then 
            [selector_c([],label(_T(s_name), no_help), html_Id(""), wan(c_name), 1, select.get(db), success(init(value)), mandatory), help_line(help, _T)],
          text_area(s_name, c_name, value, help)  then 
            [text_area([],label(_T(s_name), no_help), html_Id(""), wan(c_name), init(value), narrow, (Int)5, mandatory), help_line(help, _T)],
          boolean(s_name, c_name, value, help)  then
            [checkboxr([],label(_T(s_name), no_help), html_Id(""), wan(c_name), wav(c_name),value, mandatory), help_line(help, _T)],
          integer(s_name, c_name, value, help) then  
            [input(label(_T(s_name), no_help), wan(c_name), init(abs_to_decimal(value)), small, mandatory), help_line(help, _T)],
          date(s_name, c_name, value, help) then  
            [input([class("datepicker")], label(_T(s_name), no_help), html_Id(c_name), wan(c_name), init(value), small, non_mandatory), help_line(help, _T)],
          time(s_name, c_name, value, help) then  
            [input([class("timepicker")], label(_T(s_name), no_help), html_Id(c_name), wan(c_name), init(value), small, non_mandatory), help_line(help, _T)],
          datetime(s_name, c_name, value, help) then  
            [input([class("datetimepicker")], label(_T(s_name), no_help), html_Id(c_name), wan(c_name), init(value), custom(18), mandatory), help_line(help, _T)],
        },
     edit_form_lines(db, _T, t, reverse(line)+so_far)
  }.

public define HTML_Partial_Content 
  edit_table_page
  (
    SQLite3DataBase       db,
    (String) -> String    _T,
    String                lang,
    List(Web_arg)         lwa,
    VT_edit               vt_elist
  ) =
  with table_name  = vt_elist.table_name,
  with button_name = if get_String(lwa, "id","none") = "none" then _T("CREATE") else _T("UPDATE"),
  partial_content(jq_datetimepicker_init(lang),
    cxm_form( table_name, lwa,      
      edit_form_lines(db, _T, vt_elist.list, [])+
     [ submit("create", failure, button_name, [("table_name", table_name)]) ]
     )).
    
public define Maybe(HTML_Partial_Content) 
  edit_table_content 
  (
    SQLite3DataBase       db,
    (String) -> String    _T,
    String                lang,
    List(Web_arg)         lwa,
    String                table,
    VT_action             action,
    VTM                   vtm
  ) =
  if vtm_get_edit(table, vtm.edit_list) is
  {
    failure        then failure,
    success(vtm_e) then 
      since vtm_e is vtm_edit(_, get_edit), 
        success(edit_table_page(db, _T, lang, lwa, get_edit(db, action)))
  }.

  
  // View table part
define HTML_Row(HTML_Off_Form)  make_line
  (
    String              table_name,
    String              action_name,            //default is "edit_table", but can be surcharged for own use
    List(VT_view_entry) entries,
    List(HTML_Cell(HTML_Off_Form)) so_far
  )=
  if entries is
  {
    []      then  row( [], reverse(so_far)),
    [h . t] then
      with cell = if h is
                  {
                    text(string)     then cell((HTML_Off_Form)text(string)),
//                    link(id, string) then cell((HTML_Off_Form)actioner(same,same, link(string), action_name, [("table_name", table_name),("id",id)])),
                    link(id, string)                  then cell((HTML_Off_Form)literal(jq_dialog_open(string, dialog_id(action_name+"_dlg_ajax"), "'id="+id+"'"))),
                    link_id_action(id, name, action)  then cell((HTML_Off_Form)actioner(same,same, link(name), action, [("id",id)])),
                    icon(icon_path)                   then cell((HTML_Off_Form)image([], icon_path, ""))
                  },
      make_line(table_name, action_name, t, [cell . so_far])
  }.

define List(HTML_Row(HTML_Off_Form))  
  make_lines
  (
    (String) -> String  _T,       //translator  
    String            table_name,
    String            action_name,
    List(VT_view_row) entries,
    List(HTML_Row(HTML_Off_Form))  so_far
  )=
  if entries is
  {
    []      then  reverse(so_far),
    [h . t] then  
      //compute each line
      //prepare here the first cell for actioner
      with actions_cell = (HTML_Cell(HTML_Off_Form))
        cell([],
          sequence([
            partial(img_button_confirm(icn16_cross, _T("CONFIRMATION_REQUEST"), _T("CONFIRM_LINE_DELETION") , _T("OK"), _T("CANCEL"), jQuery_actioner(same, jqlink, "hk_del_row" + format_extra_operands([("table_name", table_name),("id",to_String(h.db_id))])))),
            partial(img_button(icn16_edit, [event(onclick, jq_dialog_open(dialog_id(action_name+"_dlg_ajax"), "'id="+to_String(h.db_id)+"'"))], "", [])),           
          ])
        ),
      make_lines(_T, table_name, action_name, t, [make_line(table_name, action_name, h.list, [actions_cell]). so_far] )
  }.
  
  // View table part
define HTML_Header_Row(HTML_Off_Form)  
  make_header
  (
    (String) -> String                    _T,       //translator
    List(VT_view_entry)                   entries,
    List(HTML_Header_Cell(HTML_Off_Form)) so_far
  )=
  if entries is
  {
    []      then  header_row( [], reverse(so_far)),
    [h . t] then
      with cell = if h is
                  {
                    text(string)      then header_cell((HTML_Off_Form)text(_T(string))),
                    link(id, string)  then header_cell((HTML_Off_Form)actioner(same,same, link(string),"edit_table",[])), //TODO
                    link_id_action(id, text, action)  then header_cell((HTML_Off_Form)actioner(same,same, link(text),action,[("id",id)])), //TODO
                    icon(icon_path)   then header_cell((HTML_Off_Form)image([], icon_path, ""))
                  },
      make_header(_T, t, [cell . so_far])
  }.


 
public define HTML_Partial_Content  
  view_table_form
  (
    (String) -> String    _T,
    String                action_name,
    VT_view               rows
  )=
 with action_header_cell = header_cell((HTML_Off_Form)text(_T("ACTION"))),
  partial_content(
      div( [/*class("tableau")*/],
          sequence(
           [ 
              partial(jquery_button(jQuery_button(button, "edit_table_"+rows.table_name, "", _T("NEW"), jQuery_actioner(same, jqlink, "edit_table&table_name="+rows.table_name)))),
              //dialog used by datatable entries
              partial(jq_dialog_create(dialog_id(action_name+"_dlg_ajax"), ajax("?a=ajax_edit_table&table_name="+rows.table_name))),
              
              table([core_attrs([id("table_view"), class("tableau display compact nowrap")])],
                    make_header(_T, rows.header.list, [action_header_cell]),
                    make_lines(_T, rows.table_name, action_name, rows.list, []))
           ]
           )
      ))
 .

public define HTML_Partial_Content 
  view_table_page
  (
    (String) -> String    _T,
    String                lang,
    String                web_site_directory,
    String                action_name,
    VT_view               rows
  ) =

//  if tb is tool_box(lang, _T, _, _, db, _) then
//  println("view_table_page - lang : "+lang);
//  println("view_table_page - web_site_directory : "+web_site_directory);
  partial_content(jq_dialog_init + jq_datetimepicker_init(lang),
    [partial(html_wave_box_wide(_T(to_upper(rows.table_name)), 
                       jquery_datatable("table_view", view_table_form(_T, action_name, rows), true, false, jq_dt_pt_full_numbers, scrollY(500), true, true, true, lang, no_extra, web_site_directory)))]).
    
public define Maybe(HTML_Partial_Content)
  view_table_content
  (
    SQLite3DataBase       db,  
    (String) -> String    _T,
    String                lang,
    String                web_site_directory,
    String                table,
    String                view_name,
    String                action_name,
    VTM                   vtm       
  ) =
  if vtm_get_view(table, vtm.view_list) is
  {
    failure        then failure,
    success(vtm_v) then 
      since vtm_v is vtm_view(_, get_view), 
        success(view_table_page(_T, lang, web_site_directory, action_name, get_view(db, view_name)))
  }.