jqgrid.anubis 8.73 KB
/*
 * Created by PyramIDE.
 * User: フランスのトトロ aka (David RENÉ) 
 * Date: 21/03/2017
 * Time: 22:49
 * © David RENÉ
 */

read xlib/web/making_a_web_site.anubis
read xlib/web/js_tools.anubis
read hayamiki_lib/types/hayamiki.anubis
read hayamiki_lib/view/types/hk_form.anubis
read hayamiki_lib/view/types/hk_view.anubis
read tools/time.anubis
read app/app_loggers.anubis

define String
  to_jqGrid_selector
  (
    List((List(CoreAttrs), WebArgValue, String))  from_hk_selector
  )=
  //logDebug("to_jqGrid_selector: entry");
  with start_time = unow,
  with result = "\""+
    join(";",map(((List(CoreAttrs), WebArgValue, String) select) |-> since select is (_, wav, show), wav.value+":"+show, from_hk_selector))+
  "\"",
  //logDebug(show_duration_string("to_jqGrid_selector: duration ", start_time));
  result
.

define String 
  custom_edit_phone =
"  editoptions: {
      custom_element: function(value, options) {
          var elemStr = '<span class=\"hk_phone_call\"><img src=\"/icons/16x16/phone.png\" onclick=\"hk_phone_call(this);\"></img><input value=\"' + value + '\"></span>';
          var elem = $(elemStr)[0];
          // return DOM element from jQuery object
          return elem;
      },
      custom_value: function(elem) {
          //var inputs = $(\"input\", $(elem)[0]);
          //var first = inputs[0].value;
          return $(elem).find('input')[0].value;
      }
  }
"
.

define String 
  custom_edit_email =
"  editoptions: {
      custom_element: function(value, options) {
          var elemStr = '<span class=\"hk_send_email\"><img src=\"/icons/16x16/email_edit.png\" onclick=\"hk_send_email(this);\"></img><input value=\"' + value + '\"></span>';
          var elem = $(elemStr)[0];
          // return DOM element from jQuery object
          return elem;
      },
      custom_value: function(elem) {
          //var inputs = $(\"input\", $(elem)[0]);
          //var first = inputs[0].value;
          return $(elem).find('input')[0].value;
      }
  }
"
.

define String 
  custom_edit_color =
" editoptions: {
    custom_element: function(value, options) {
      var el = document.createElement('input');
      el.type='text';
      el.value = value;
      var myPicker = new jscolor(el);
      myPicker.fromString(value);
      return el;
    },
    custom_value: function(elem, operation, value ) {
      if (operation === 'get') {
        return $(elem).val(); // change this to get value from color picker
      } else if (operation === 'set') {
        $('input',elem).val(value); // change this to set value of color picker
      }
    }
  }
"
.

define String
  search_options
  (
    String  col_name
  )=
" searchoptions: {
    dataInit: function (elem, options) {
      initAutocomplete.call(this, elem, \""+col_name+"\");
    },
    sopt: [ 'cn', 'eq', 'bw', 'ew', 'bn', 'nc', 'en' ],
      clearSearch: true
  }"  
.
  

define String
  to_jqGrid_ColModel
  (
    SQLite3DataBase     db,
    HK_Referer          table_referer,
    VT_view_model_entry model,
    (String) -> String  _T
  )=
  logDebug("to_jqGrid_ColModel 1: entry");
  with start_time = unow,
  with empty_referer = hk_referer("","","",""),
  with result = if model is
  {
     primary_key(label,column_name)                 then 
                                                         if column_name = "id" then
                                                          "{ name: 'id', label:'id', editable:false}"
                                                         else
                                                          "{ name: '"+column_name+"', label: "+to_JS_String(_T(label))+", editable:true, autoResizable: true, template: 'integer' }"
                                                          ,
     information(label,column_name,width,help)      then "{ name: '"+column_name+"', label: "+to_JS_String(_T(label))+", autoResizable: true, "+search_options(column_name)+"}",
     text(label,column_name,help)                   then "{ name: '"+column_name+"', label: "+to_JS_String(_T(label))+", editable:true, autoResizable: true, "+search_options(column_name)+" }",
     password(label,column_name,help)               then "{ name: '"+column_name+"', label: "+to_JS_String(_T(label))+", autoResizable: true }",
     foreign_text(label,column_name,selector,help)  then 
      logDebug("to_jqGrid_ColModel 1: foreign_text column_name "+column_name);      
      with jqgrid_selector = to_jqGrid_selector(selector.get(db,table_referer,"")),
      "{ name: '"+column_name+"', label: "+to_JS_String(_T(label))+", editable:true, autoResizable: true, edittype:'select', editoptions: {value: "+jqgrid_selector+", dataInit: function (elem) {
    $(elem).select2({
        dropdownCssClass: 'ui-widget ui-jqdialog',
        width: '100%'
    });
}},"+
      //"  formatter: \"select\","+
      //"  formatoptions:{value: "+jqgrid_selector+"},"+
      "}",
     choices_text(label,column_name,selector,help)  then 
      logDebug("to_jqGrid_ColModel 1: choices_text column_name "+column_name);      
      with jqgrid_selector = to_jqGrid_selector(selector.get(db, empty_referer, "")),
      "{ name: '"+column_name+"', label: "+to_JS_String(_T(label))+", editable:true, autoResizable: true, edittype:'select', editoptions:{value: "+jqgrid_selector+",dataInit: function (elem) {
    $(elem).select2({
        dropdownCssClass: 'ui-widget ui-jqdialog',
        width: '100%'
    });
}},"+
      //"  formatter: \"select\","+
      //"  formatoptions:{value: "+jqgrid_selector+"},"+
      "}",
     text_area(label,column_name,help)              then "{ name: '"+column_name+"', label: "+to_JS_String(_T(label))+" }",
     boolean(label,column_name,help)                then "{ name: '"+column_name+"', label: "+to_JS_String(_T(label))+", editable:true, autoResizable: true, template: 'booleanCheckboxFa' }",
     integer(label,column_name,help)                then "{ name: '"+column_name+"', label: "+to_JS_String(_T(label))+", editable:true, autoResizable: true, template: 'integer' }",
     float(label,column_name,help)                  then "{ name: '"+column_name+"', label: "+to_JS_String(_T(label))+", editable:true, autoResizable: true, template: 'number'  }", 
     choices_int(label,column_name,selector,help)   then 
      logDebug("to_jqGrid_ColModel 1: choices_int column_name "+column_name);      
      with jqgrid_selector = to_jqGrid_selector(selector.get(db, empty_referer, "")),
      "{ name: '"+column_name+"', label: "+to_JS_String(_T(label))+", editable:true, autoResizable: true, edittype:'select', editoptions:{value: "+jqgrid_selector+"},"+
      "  formatter: 'select',"+
      "  formatoptions:{value: "+jqgrid_selector+"},"+
      "}", 
     date(label,column_name,help)                   then "{ name: '"+column_name+"', label: "+to_JS_String(_T(label))+", editable:true, autoResizable: true, formatter: 'date', formatoptions: { newformat: 'Y-M-d' }}", 
     time(label,column_name,help)                   then "{ name: '"+column_name+"', label: "+to_JS_String(_T(label))+", editable:true, autoResizable: true }",
     datetime(label,column_name,help)               then "{ name: '"+column_name+"', label: "+to_JS_String(_T(label))+", editable:true, autoResizable: true }",
     color(label, column_name, help)                then "{ name: '"+column_name+"', label: "+to_JS_String(_T(label))+", width: 40, editable:true, autoResizable: true, edittype: 'custom', formatter:formatColor, unformat:unformatColor, "+custom_edit_color+" }",
     phone(label,column_name, ph_type, help)        then "{ name: '"+column_name+"', label: "+to_JS_String(_T(label))+", editable:true, autoResizable: true, edittype: 'custom', formatter:formatPhone, unformat:unformatPhone, "+custom_edit_phone+"}",
     email(label,column_name, help)                 then "{ name: '"+column_name+"', label: "+to_JS_String(_T(label))+", editable:true, autoResizable: true, edittype: 'custom', formatter:formatEmail, unformat:unformatEmail, "+custom_edit_email+"}",
     url(label, column_name, help)                  then "{ name: '"+column_name+"', label: "+to_JS_String(_T(label))+", editable:true, autoResizable: true, "+search_options(column_name)+" }",
  },
  logDebug(show_duration_string("to_jqGrid_ColModel 1: result", start_time));
  result
.

public define String
  to_jqGrid_ColModel
  (
    SQLite3DataBase           db,
    HK_Referer                table_referer,    
    (String) -> String        _T,
    List(VT_view_model_entry) models
  )=
  logDebug("to_jqGrid_ColModel: entry");
  with result = "colModel: [\n"+
    join(",\n            ", 
      [ "{name: 'myac', label: '', width:65, fixed:true, sortable:false, resize:false, formatter:'actions', formatoptions:{keys:true}}" .
        map((VT_view_model_entry col_model) |-> to_jqGrid_ColModel(db, table_referer, col_model, _T), models)
      ]
      )+
  "]",
    logDebug("to_jqGrid_ColModel: result");
  result
.