From 229894d6c467a8a79b9ab9b5561d59c91bc6a3ac Mon Sep 17 00:00:00 2001 From: totoro Date: Sun, 26 Mar 2017 04:52:55 +0200 Subject: [PATCH] manage hayamiki view with jQgrid --- view/jqgrid.anubis | 72 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ view/view_table_manager_types.anubis | 2 +- view/view_table_renderer.anubis | 95 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++--------------- view/view_table_types.anubis | 29 ++++++++++++++++++++++++++++- view/web_action.anubis | 1 + 5 files changed, 182 insertions(+), 17 deletions(-) create mode 100644 view/jqgrid.anubis diff --git a/view/jqgrid.anubis b/view/jqgrid.anubis new file mode 100644 index 0000000..da887f6 --- /dev/null +++ b/view/jqgrid.anubis @@ -0,0 +1,72 @@ +/* + * Created by PyramIDE. + * User: フランスのトトロ aka (David RENÉ) + * Date: 21/03/2017 + * Time: 22:49 + * © Calexium + */ + +read calexium_lib/web/CXM_making_a_web_site.anubis +read hayamiki_lib/types/hayamiki.anubis +read view_table_types.anubis + +define String + to_jqGrid_selector + ( + List((List(CoreAttrs), WebArgValue, String)) from_hk_selector + )= + "\""+ + join(";",map(((List(CoreAttrs), WebArgValue, String) select) |-> since select is (_, wav, show), wav.value+":"+show, from_hk_selector))+ + "\"" +. + +define String + to_jqGrid_ColModel + ( + SQLite3DataBase db, + VT_view_model_entry model + )= + if model is + { + primary_key then "{ name: \"id\" }", + information(label,column_name,width,help) then "{ name: \""+column_name+"\", label: \""+label+"\" }", + text(label,column_name,help) then "{ name: \""+column_name+"\", label: \""+label+"\", editable:true }", + password(label,column_name,help) then "{ name: \""+column_name+"\", label: \""+label+"\" }", + foreign_text(label,column_name,selector,help) then + "{ name: \""+column_name+"\", label: \""+label+"\", editable:true, edittype:\"select\", editoptions:{value: "+to_jqGrid_selector(selector.get(db,""))+"},"+ + " formatter: \"select\","+ + " formatoptions:{value: "+to_jqGrid_selector(selector.get(db,""))+"},"+ + "}", + choices_text(label,column_name,selector,help) then + "{ name: \""+column_name+"\", label: \""+label+"\", editable:true, edittype:\"select\", editoptions:{value: "+to_jqGrid_selector(selector.get(db,""))+"},"+ + " formatter: \"select\","+ + " formatoptions:{value: "+to_jqGrid_selector(selector.get(db,""))+"},"+ + "}", + text_area(label,column_name,help) then "{ name: \""+column_name+"\", label: \""+label+"\" }", + boolean(label,column_name,help) then "{ name: \""+column_name+"\", label: \""+label+"\", editable:true, template: \"booleanCheckboxFa\" }", + integer(label,column_name,help) then "{ name: \""+column_name+"\", label: \""+label+"\", editable:true, template: \"integer\" }", + float(label,column_name,help) then "{ name: \""+column_name+"\", label: \""+label+"\", editable:true, template: \"number\" }", + choices_int(label,column_name,selector,help) then "{ name: \""+column_name+"\", label: \""+label+"\", editable:true, edittype:\"select\", editoptions:{value: "+to_jqGrid_selector(selector.get(db,""))+"},"+ + " formatter: \"select\","+ + " formatoptions:{value: "+to_jqGrid_selector(selector.get(db,""))+"},"+ + "}", + date(label,column_name,help) then "{ name: \""+column_name+"\", label: \""+label+"\", editable:true, formatter: \"date\", formatoptions: { newformat: \"Y-M-d\" }}", + time(label,column_name,help) then "{ name: \""+column_name+"\", label: \""+label+"\", editable:true }", + datetime(label,column_name,help) then "{ name: \""+column_name+"\", label: \""+label+"\", editable:true }", + } +. + +public define String + to_jqGrid_ColModel + ( + SQLite3DataBase db, + List(VT_view_model_entry) models + )= + "colModel: [\n"+ + join(",\n ", + [ "{name: 'myac', label: 'Action', width:60, fixed:true, sortable:false, resize:false, formatter:'actions', formatoptions:{keys:true}}" . + map((VT_view_model_entry col_model) |-> to_jqGrid_ColModel(db, col_model), models) + ] + )+ + "]" +. diff --git a/view/view_table_manager_types.anubis b/view/view_table_manager_types.anubis index e9c485f..2ab96e5 100644 --- a/view/view_table_manager_types.anubis +++ b/view/view_table_manager_types.anubis @@ -33,7 +33,7 @@ public type TM_delete_list: tm_delete_list(List(TM_delete) list). public type VTM_view: - vtm_view(String table_name, (SQLite3DataBase db, String view_name, String clause) -> VT_view get_view). + vtm_view(String table_name, (String view_name) -> VT_view get_view). public type VTM_view_list: vtm_view_list(List(VTM_view) list). diff --git a/view/view_table_renderer.anubis b/view/view_table_renderer.anubis index 82219d7..7f9d735 100644 --- a/view/view_table_renderer.anubis +++ b/view/view_table_renderer.anubis @@ -7,6 +7,7 @@ */ read hayamiki_lib/view/view_table_types.anubis +read hayamiki_lib/view/jqgrid.anubis read hayamiki_lib/view/view_table_manager_types.anubis read hayamiki_lib/view/view_table_manager.anubis read hayamiki_lib/view/web_action.anubis @@ -32,6 +33,7 @@ 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 +read calexium_lib/web/CXM_urllib.anubis @@ -123,23 +125,76 @@ public define HTML_Partial_Content sequence( [ - partial(jq_dialog_create(dialog_id(uid+action_name+"_dlg_ajax"), ajax(controller_action("hk_c", "ajax_edit_table&table_name="+rows.table_name)))), - table([core_attrs([id(uid+"table_view"), class("tableau display compact nowrap")])], - make_header(_T, rows.header.list, [action_header_cell]), - make_lines(_T, uid, rows.table_name, action_name, rows.list, [])) + //partial(jq_dialog_create(dialog_id(uid+action_name+"_dlg_ajax"), ajax(controller_action("hk_c", "ajax_edit_table&table_name="+rows.table_name)))), + //table([core_attrs([id(uid+"table_view"), class("tableau display compact nowrap")])], + // make_header(_T, rows.header.list, [action_header_cell]) + // make_lines(_T, uid, rows.table_name, action_name, rows.list, []) + //) ] ) )) . +define String + jqGrid_options + ( + String uid, + VT_view rows, + (String) -> String _T + )= + " + iconSet: \"fontAwesome\", + autowidth:true, + shrinkToFit:true, + rowNum:10, + cellEdit: true, + cellsubmit: 'remote', + cellurl: '?aws_controller=hk_c&aws_action=update_row&table_name="+rows.table_name+"', + pager: '#"+uid+"_pager', + caption:"+to_JSON_String(_T(to_upper(rows.table_name)))+", + ondblClickRow: function( rowid) {"+ + jq_dialog_open(dialog_id(uid+"edit_table_dlg_ajax"), "'id='+rowid")+ + "}" +. + +public define HTML_Partial_Content + jqGrid_table + ( + SQLite3DataBase db, + String uid, + VT_view rows, + (String) -> String _T, + String clause + )= + with filter_clause = if clause = "" then "" else "&clause="+url_quote(clause), + with js = js_inline(jquery_ready("$(\"#"+uid+"_grid\").jqGrid({\n"+ + "url:'?aws_controller=hk_c&aws_action=grid_view&table_name="+rows.table_name+"&view_name="+rows.view_name+filter_clause+"',"+ + "datatype: \"json\","+ + to_jqGrid_ColModel(db, rows.view_model.list)+","+ +// rows.json_data_string+ + jqGrid_options(uid, rows, _T)+ + "})")), + + partial_content([js], + div([], + sequence([ + table([core_attrs([id(uid+"_grid")])],[]), + div_empty([id(uid+"_pager")]) + ]) + ) + ) +. + public define HTML_Partial_Content view_table_page ( - (String) -> String _T, - String lang, - String web_site_directory, - String action_name, - VT_view rows + SQLite3DataBase db, + (String) -> String _T, + String lang, + String web_site_directory, + String action_name, + VT_view rows, + String clause ) = // if tb is tool_box(lang, _T, _, _, db, _) then @@ -149,18 +204,22 @@ public define HTML_Partial_Content partial_content(jq_dialog_init + jq_datetimepicker_init(lang), [html_wave_box_wide(_T(to_upper(rows.table_name)), sequence([ - partial(img_button(icn16_add, [event(onclick, jq_dialog_open(dialog_id(uid+action_name+"_dlg_ajax")))], "", [])), - partial(jquery_datatable(uid+"table_view", view_table_form(_T, uid, action_name, rows), true, false, jq_dt_pt_full_numbers, false, scrollY(500), true, true, true, lang, no_extra, web_site_directory)) + partial(jq_dialog_create(dialog_id(uid+action_name+"_dlg_ajax"), ajax(controller_action("hk_c", "ajax_edit_table&table_name="+rows.table_name)))), + partial(img_button(icn16_add, [event(onclick, jq_dialog_open(dialog_id(uid+action_name+"_dlg_ajax")))], "", [])), + partial(jqGrid_table(db, uid, rows, _T, clause)) + //partial(jquery_datatable(uid+"table_view", view_table_form(_T, uid, action_name, rows), true, false, jq_dt_pt_full_numbers, false, scrollY(500), true, true, true, lang, no_extra, web_site_directory)) ]))]). public define HTML_Partial_Content view_table ( + SQLite3DataBase db, (String) -> String _T, String lang, String web_site_directory, String action_name, - VT_view rows + VT_view rows, + String clause ) = // if tb is tool_box(lang, _T, _, _, db, _) then @@ -168,7 +227,12 @@ public define HTML_Partial_Content // println("view_table_page - web_site_directory : "+web_site_directory); with uid = generate_random_string(20)+"_", partial_content(jq_dialog_init + jq_datetimepicker_init(lang), - [partial(jquery_datatable(uid+"table_view", view_table_form(_T, uid, action_name, rows), true, false, jq_dt_pt_full_numbers, false, scrollY(500), true, true, true, lang, no_extra, web_site_directory))]). + [ + partial(jq_dialog_create(dialog_id(uid+action_name+"_dlg_ajax"), ajax(controller_action("hk_c", "ajax_edit_table&table_name="+rows.table_name)))), + partial(img_button(icn16_add, [event(onclick, jq_dialog_open(dialog_id(uid+action_name+"_dlg_ajax")))], "", [])), + partial(jqGrid_table(db, uid, rows, _T, clause)), + //partial(jquery_datatable(uid+"table_view", view_table_form(_T, uid, action_name, rows), true, false, jq_dt_pt_full_numbers, false, scrollY(200), true, true, true, lang, no_extra, web_site_directory)) + ]). public define Maybe(HTML_Partial_Content) view_table_content @@ -188,7 +252,7 @@ public define Maybe(HTML_Partial_Content) 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, clause))) + success(view_table_page(db, _T, lang, web_site_directory, action_name, get_view(view_name), clause)) }. public define Maybe(HTML_Partial_Content) @@ -209,7 +273,8 @@ public define Maybe(HTML_Partial_Content) failure then failure, success(vtm_v) then since vtm_v is vtm_view(_, get_view), - success(view_table(_T, lang, web_site_directory, action_name, get_view(db, view_name, clause))) +// success(view_table(_T, lang, web_site_directory, action_name, get_view(db, view_name, clause))) + success(view_table(db, _T, lang, web_site_directory, action_name, get_view(view_name), clause)) }. define CXM_Form_Field diff --git a/view/view_table_types.anubis b/view/view_table_types.anubis index 2ab2ac2..10e59af 100644 --- a/view/view_table_types.anubis +++ b/view/view_table_types.anubis @@ -47,6 +47,25 @@ public type VT_edit: vt_edit(String table_name, String view_name, List(VT_edit_entry) list, List(HK_V_Edit_Tab) tabs). +public type VT_view_model_entry: + //hidden (String name, String value), + primary_key , + information (String label, String column_name, Int width, HK_Help_Text help), //s_name = show_name for translation, v_name = string to show + text (String label, String column_name, HK_Help_Text help), //s_name = show_name for translation, c_name = table column name + password (String label, String column_name, HK_Help_Text help), //s_name = show_name for translation, c_name = table column name + foreign_text(String label, String column_name, VT_edit_selector selector, HK_Help_Text help), + choices_text(String label, String column_name, VT_edit_selector selector, HK_Help_Text help), + text_area (String label, String column_name, HK_Help_Text help), //s_name = show_name for translate, c_name = table column name + boolean (String label, String column_name, HK_Help_Text help), + integer (String label, String column_name, HK_Help_Text help), + float (String label, String column_name, HK_Help_Text help), + choices_int (String label, String column_name, VT_edit_selector selector, HK_Help_Text help), + date (String label, String column_name, HK_Help_Text help), + time (String label, String column_name, HK_Help_Text help), + datetime (String label, String column_name, HK_Help_Text help). + +public type VT_view_model: + vt_view_model(List(VT_view_model_entry) list). public type VT_view_entry: text(String text), @@ -59,9 +78,17 @@ public type VT_view_row_header: public type VT_view_row: vt_view_row(Int db_id, List(VT_view_entry) list). + +public type VT_View_DB_Calls: + vt_view_db_calls( + (SQLite3DataBase db, String clause) -> Int get_count, + (SQLite3DataBase db, String clause) -> JsonMember get_rows_json +// (SQLite3DataBase db, String clause) -> List(VT_view_row) get_rows + ) +. public type VT_view: - vt_view(String table_name, String view_name, VT_view_row_header header, List(VT_view_row) list). + vt_view(String table_name, String view_name, VT_view_model view_model, VT_view_row_header header, VT_View_DB_Calls db_calls). , List(VT_view_row) list). public type VT_action: diff --git a/view/web_action.anubis b/view/web_action.anubis index 7fba68d..9470cd2 100644 --- a/view/web_action.anubis +++ b/view/web_action.anubis @@ -9,6 +9,7 @@ read calexium_lib/web/CXM_making_a_web_site.anubis public define WEB_Action_Name edit_table = controller_action("hk_c", "edit_table"). +public define WEB_Action_Name grid_view = controller_action("hk_c", "grid_view"). public define WEB_Action_Name view_table = controller_action("hk_c", "view_table"). public define WEB_Action_Name save_row = controller_action("hk_c", "save_row"). public define WEB_Action_Name save_row_and_new = controller_action("hk_c", "save_row_and_new"). -- libgit2 0.21.4