diff --git a/types/hayamiki.anubis b/types/hayamiki.anubis index 7ca6b49..a86c7bc 100644 --- a/types/hayamiki.anubis +++ b/types/hayamiki.anubis @@ -12,6 +12,7 @@ transmit hayamiki_lib/model/database.anubis transmit hayamiki_lib/model/columns.anubis public type HK_Referer: + no_referer, hk_referer( String referer_table, String referer_row_id, diff --git a/view/jqgrid.anubis b/view/jqgrid.anubis index 5b663e6..248bff6 100644 --- a/view/jqgrid.anubis +++ b/view/jqgrid.anubis @@ -24,9 +24,11 @@ define String to_jqGrid_ColModel ( SQLite3DataBase db, + HK_Referer table_referer, VT_view_model_entry model, (String) -> String _T )= + with empty_referer = hk_referer("","","",""), if model is { primary_key then "{ name: \"id\", hidden:true }", @@ -34,22 +36,22 @@ define String text(label,column_name,help) then "{ name: \""+column_name+"\", label: \""+_T(label)+"\", editable:true }", password(label,column_name,help) then "{ name: \""+column_name+"\", label: \""+_T(label)+"\" }", foreign_text(label,column_name,selector,help) then - "{ name: \""+column_name+"\", label: \""+_T(label)+"\", editable:true, edittype:\"select\", editoptions:{value: "+to_jqGrid_selector(selector.get(db,""))+"},"+ + "{ name: \""+column_name+"\", label: \""+_T(label)+"\", editable:true, edittype:\"select\", editoptions:{value: "+to_jqGrid_selector(selector.get(db,table_referer,""))+"},"+ " formatter: \"select\","+ - " formatoptions:{value: "+to_jqGrid_selector(selector.get(db,""))+"},"+ + " formatoptions:{value: "+to_jqGrid_selector(selector.get(db, table_referer, ""))+"},"+ "}", choices_text(label,column_name,selector,help) then - "{ name: \""+column_name+"\", label: \""+_T(label)+"\", editable:true, edittype:\"select\", editoptions:{value: "+to_jqGrid_selector(selector.get(db,""))+"},"+ + "{ name: \""+column_name+"\", label: \""+_T(label)+"\", editable:true, edittype:\"select\", editoptions:{value: "+to_jqGrid_selector(selector.get(db, empty_referer, ""))+"},"+ " formatter: \"select\","+ - " formatoptions:{value: "+to_jqGrid_selector(selector.get(db,""))+"},"+ + " formatoptions:{value: "+to_jqGrid_selector(selector.get(db, empty_referer, ""))+"},"+ "}", text_area(label,column_name,help) then "{ name: \""+column_name+"\", label: \""+_T(label)+"\" }", boolean(label,column_name,help) then "{ name: \""+column_name+"\", label: \""+_T(label)+"\", editable:true, template: \"booleanCheckboxFa\" }", integer(label,column_name,help) then "{ name: \""+column_name+"\", label: \""+_T(label)+"\", editable:true, template: \"integer\" }", float(label,column_name,help) then "{ name: \""+column_name+"\", label: \""+_T(label)+"\", editable:true, template: \"number\" }", - choices_int(label,column_name,selector,help) then "{ name: \""+column_name+"\", label: \""+_T(label)+"\", editable:true, edittype:\"select\", editoptions:{value: "+to_jqGrid_selector(selector.get(db,""))+"},"+ + choices_int(label,column_name,selector,help) then "{ name: \""+column_name+"\", label: \""+_T(label)+"\", editable:true, edittype:\"select\", editoptions:{value: "+to_jqGrid_selector(selector.get(db, empty_referer, ""))+"},"+ " formatter: \"select\","+ - " formatoptions:{value: "+to_jqGrid_selector(selector.get(db,""))+"},"+ + " formatoptions:{value: "+to_jqGrid_selector(selector.get(db, empty_referer, ""))+"},"+ "}", date(label,column_name,help) then "{ name: \""+column_name+"\", label: \""+_T(label)+"\", editable:true, formatter: \"date\", formatoptions: { newformat: \"Y-M-d\" }}", time(label,column_name,help) then "{ name: \""+column_name+"\", label: \""+_T(label)+"\", editable:true }", @@ -62,13 +64,14 @@ public define String to_jqGrid_ColModel ( SQLite3DataBase db, + HK_Referer table_referer, (String) -> String _T, List(VT_view_model_entry) models )= "colModel: [\n"+ join(",\n ", [ "{name: 'myac', label: 'Action', width:65, fixed:true, sortable:false, resize:false, formatter:'actions', formatoptions:{keys:true}}" . - map((VT_view_model_entry col_model) |-> to_jqGrid_ColModel(db, col_model, _T), models) + map((VT_view_model_entry col_model) |-> to_jqGrid_ColModel(db, table_referer, col_model, _T), models) ] )+ "]" diff --git a/view/view_table_renderer.anubis b/view/view_table_renderer.anubis index f547443..647823f 100644 --- a/view/view_table_renderer.anubis +++ b/view/view_table_renderer.anubis @@ -210,13 +210,14 @@ public define HTML_Partial_Content VT_view rows, (String) -> String _T, String lang, - String clause + String clause, + HK_Referer table_referer )= 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, _T, rows.view_model.list)+","+ + to_jqGrid_ColModel(db, table_referer, _T, rows.view_model.list)+","+ // rows.json_data_string+ jqGrid_options(uid, rows, _T)+ ",loadComplete: function () { @@ -252,6 +253,7 @@ public define HTML_Partial_Content VTM_view vtm_v, String view_name, String f_clause, //filter for current table + HK_Referer referer, String fk_clause //filter for foreign key of the table (one to many) ) = with filter_clause = if f_clause = "" then "" else "&clause="+url_quote(f_clause), @@ -267,12 +269,12 @@ public define HTML_Partial_Content partial(img_button(icn16_add, [event(onclick, jq_dialog_open(dialog_id(uid+action_name+"_dlg_ajax")))], "", [])), table_view_selector(_T, vtm_v, view_name), ])), - partial(jqGrid_table(db, uid, current_view, _T, lang, f_clause)) + partial(jqGrid_table(db, uid, current_view, _T, lang, f_clause, referer)) //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 + list_view ( SQLite3DataBase db, (String) -> String _T, @@ -282,6 +284,7 @@ public define HTML_Partial_Content VTM_view vtm_v, String view_name, String f_clause, //filter for current table + HK_Referer referer, String fk_clause //filter for foreign key of the table (one to many) ) = with filter_clause = if f_clause = "" then "" else "&clause="+url_quote(f_clause), @@ -296,7 +299,7 @@ public define HTML_Partial_Content partial(jq_dialog_create(dialog_id(uid+action_name+"_dlg_ajax"), ajax(controller_action("hk_c", "ajax_edit_table&table_name="+current_view.table_name+filter_clause+foreign_clause)))), partial(img_button(icn16_add, [event(onclick, jq_dialog_open(dialog_id(uid+action_name+"_dlg_ajax")))], "", [])), //table_view_selector(_T, vtm_v, view_name), - partial(jqGrid_table(db, uid, current_view, _T, lang, fk_clause)), + partial(jqGrid_table(db, uid, current_view, _T, lang, fk_clause, referer)), //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)) ]). @@ -311,6 +314,7 @@ public define Maybe(HTML_Partial_Content) String view_name, String action_name, String f_clause, + HK_Referer table_referer, String fk_clause, VTM vtm ) = @@ -318,7 +322,7 @@ public define Maybe(HTML_Partial_Content) { failure then failure, success(vtm_v) then - success(view_table_page(db, _T, lang, web_site_directory, action_name, vtm_v, view_name, f_clause, fk_clause)) + success(view_table_page(db, _T, lang, web_site_directory, action_name, vtm_v, view_name, f_clause, table_referer, fk_clause)) }. public define Maybe(HTML_Partial_Content) @@ -332,14 +336,15 @@ public define Maybe(HTML_Partial_Content) String view_name, String action_name, String f_clause, - String fk_clause, + HK_Referer table_referer, + String fk_filter, VTM vtm ) = if vtm_get_view(table, vtm.view_list) is { failure then failure, success(vtm_v) then - success(view_table(db, _T, lang, web_site_directory, action_name, vtm_v, view_name, f_clause, fk_clause)) + success(view_table(db, _T, lang, web_site_directory, action_name, vtm_v, view_name, f_clause, table_referer, fk_filter)) }. define CXM_Form_Field @@ -362,11 +367,13 @@ public define List(CXM_Form_Field) ( SQLite3DataBase db, String fk_clause, + HK_Referer table_referer, (String) -> String _T, List(VT_edit_entry) list, Bool new_entry, List(CXM_Form_Field) so_far )= + with empty_referer = hk_referer("","","",""), if list is { [] then reverse(so_far), @@ -401,9 +408,9 @@ public define List(CXM_Form_Field) ], 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, fk_clause), success(init(to_String(value))), mandatory), help_line(help, _T)], + [selector_c([],label(_T(s_name), no_help), html_Id(""), wan(c_name), 1, select.get(db, table_referer, fk_clause), 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)], + [selector_c([],label(_T(s_name), no_help), html_Id(""), wan(c_name), 1, select.get(db, empty_referer, ""), success(init(value)), mandatory), help_line(help, _T)], text_area(s_name, c_name, value, txt_editor, help) then with id = if txt_editor is { none then "", rich_editor then c_name+"_editor"}, [text_area([],label(_T(s_name), no_help), html_Id(id), wan(c_name), init(not_null_String(value)), narrow, (Int)5, mandatory), help_line(help, _T)], @@ -414,7 +421,7 @@ public define List(CXM_Form_Field) float(s_name, c_name, value, help) then [input(label(_T(s_name), no_help), wan(c_name), init(float_to_string(value, 5)), small, mandatory), help_line(help, _T)], choices_int(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)], + [selector_c([],label(_T(s_name), no_help), html_Id(""), wan(c_name), 1, select.get(db, empty_referer, ""), success(init(to_String(value))), 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 @@ -424,7 +431,7 @@ public define List(CXM_Form_Field) color( s_name, c_name, value, help) then [input([class("jscolor")], label(_T(s_name), no_help), wan(c_name), init(not_null_String(value)), narrow, mandatory), help_line(help, _T)], }, - edit_form_lines(db, fk_clause, _T, t, new_entry, reverse(line)+so_far) + edit_form_lines(db, fk_clause, table_referer, _T, t, new_entry, reverse(line)+so_far) }. define HTML_Head_Tag @@ -464,7 +471,8 @@ public define HTML_Partial_Content VT_edit vt_elist, VTM vtm, String clause, - String fk_clause + String fk_clause, + HK_Referer table_referer //from which table and row id that editor is called ) = with table_name = vt_elist.table_name, //true if need to create row or false for updating @@ -480,7 +488,7 @@ public define HTML_Partial_Content get_editor_header(vt_elist.list), //add editor header if need. Like init ck_editor sequence([ cxm_form( table_name, lwa, - edit_form_lines(db, fk_clause, _T, vt_elist.list, create, [])+ + edit_form_lines(db, "", table_referer, _T, vt_elist.list, create, [])+ [ one_line_fields([ submit(if create then hkc_save_row else hkc_update_row, failure, button_name, [("table_name", table_name)]), submit(if create then hkc_save_row_and_new else hkc_update_row_and_new, failure, button_name_and_new, [("table_name", table_name)]), @@ -494,7 +502,8 @@ public define HTML_Partial_Content map( (HK_V_Edit_Tab tab) |-> since tab is hk_v_edit_tab(fk_table_name, fk_col_name, list_view_name), - if view_table_only(db, _T, lang, web_site_directory, fk_table_name, list_view_name, "edit", "", fk_col_name+" = "+id, vtm) is + with referer = hk_referer(table_name, id, fk_table_name, fk_col_name), + if view_table_only(db, _T, lang, web_site_directory, fk_table_name, list_view_name, "edit", "", referer, fk_clause, vtm) is { failure then empty, success(p_content) then partial(p_content) @@ -516,14 +525,15 @@ public define Maybe(HTML_Partial_Content) VT_action action, //new_entry or edit an existing record VTM vtm, String clause, - String fk_clause + String fk_clause, + HK_Referer referer ) = 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, web_site_directory, lwa, get_edit(db, action, view_name), vtm, clause, fk_clause)) + success(edit_table_page(db, _T, lang, web_site_directory, lwa, get_edit(db, action, view_name), vtm, clause, fk_clause, referer)) }. diff --git a/view/view_table_types.anubis b/view/view_table_types.anubis index 926a99c..07b0036 100644 --- a/view/view_table_types.anubis +++ b/view/view_table_types.anubis @@ -10,7 +10,7 @@ transmit calexium_lib/web/CXM_common.anubis read hayamiki_lib/types/hayamiki.anubis public type VT_edit_selector: - vt_edit_selector((SQLite3DataBase db, String clause) -> List((List(CoreAttrs), WebArgValue, String)) get). + vt_edit_selector((SQLite3DataBase db, HK_Referer referer, String filter) -> List((List(CoreAttrs), WebArgValue, String)) get). public type VT_edit_entry: -- libgit2 0.21.4