/* * Created by PyramIDE. * User: Totoro * Date: 30/11/2011 * Time: 21:22 * */ 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 read hayamiki_lib/types/hayamiki.anubis read system/string.anubis read locale/L3.anubis read tools/basis.anubis read data_base/sqlite.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 read calexium_lib/web/CXM_urllib.anubis // View table part define HTML_Row(HTML_Off_Form) make_line ( String uid, 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(not_null_String(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(uid+_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(uid, table_name, _action_name, t, [cell . so_far]) }. define List(HTML_Row(HTML_Off_Form)) make_lines ( (String) -> String _T, //translator String uid, 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(controller_action("hk_c", "delete_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(uid+action_name+"_dlg_ajax"), "'id="+to_String(h.db_id)+"'"))], "", [])), ]) ), make_lines(_T, uid, table_name, action_name, t, [make_line(uid, 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 uid, 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(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 ( 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 // println("view_table_page - lang : "+lang); // 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), [html_wave_box_wide(_T(to_upper(rows.table_name)), 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)))), 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, String clause ) = // 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); with uid = generate_random_string(20)+"_", partial_content(jq_dialog_init + jq_datetimepicker_init(lang), [ 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 ( SQLite3DataBase db, (String) -> String _T, String lang, String web_site_directory, String table, String view_name, String action_name, String clause, 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(db, _T, lang, web_site_directory, action_name, get_view(view_name), clause)) }. public define Maybe(HTML_Partial_Content) view_table_only ( SQLite3DataBase db, (String) -> String _T, String lang, String web_site_directory, String table, String view_name, String action_name, String clause, 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(_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 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, Bool new_entry, 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(not_null_String(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(not_null_String(value)), narrow, mandatory), help_line(help, _T)], password(s_name, c_name, help) then with password_entries = [ password_input(label(_T(s_name), no_help), wan(c_name+"_1"), init(""), narrow, non_mandatory), password_input(label(_T(s_name), no_help), wan(c_name+"_2"), init(""), narrow, non_mandatory), help_line(help, _T) ], if new_entry = false then [ checkbox_hide_show([], label(_T("CLICK_TO_CHANGE_PASSWORD")), wan(c_name+"_pwd_change"), wav("on"), false, //not checked at first password_entries), hidden(html_Id(""), wan(c_name+"_pwd_change_option"), wav("true")) ] else [ hidden(html_Id(""), wan(c_name+"_pwd_change_option"), wav("false")) . password_entries ], 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, 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)], 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)], 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)], 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, new_entry, reverse(line)+so_far) }. define HTML_Head_Tag get_rich_editor_inline ( List(VT_edit_entry) list )= js_inline(jquery_ready( join("",map_select((VT_edit_entry entry) |-> if entry is text_area(s_name, c_name, value, txt_editor, help) then if txt_editor is { none then failure, rich_editor then success(" CKEDITOR.replace( '"+c_name+"_editor' );") } else failure, list)) )) . define List(HTML_Head_Tag) get_editor_header ( List(VT_edit_entry) list )= [js(js_file("ckeditor/ckeditor.js")), get_rich_editor_inline(list), ] . public define HTML_Partial_Content edit_table_page ( SQLite3DataBase db, (String) -> String _T, String lang, String web_site_directory, List(Web_arg) lwa, VT_edit vt_elist, VTM vtm ) = with table_name = vt_elist.table_name, //true if need to create row or false for updating with create = if get_String(lwa, "id","none") = "none" then true else false, with id = get_String(lwa, "id","none"), with button_name = if create then _T("CREATE") else _T("UPDATE"), with button_name_and_new = if create then _T("CREATE_AND_EDIT_NEW") else _T("UPDATE_AND_EDIT_NEW"), partial_content( jq_datetimepicker_init(lang) + 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, _T, vt_elist.list, create, [])+ [ one_line_fields([ submit(if create then save_row else update_row, failure, button_name, [("table_name", table_name)]), submit(if create then save_row_and_new else update_row_and_new, failure, button_name_and_new, [("table_name", table_name)]), submit(hk_cancel, failure, _T("CANCEL")) ]) ] )]+ if id = "none" then [] else 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 { failure then empty, success(p_content) then partial(p_content) } //text("Foreign Key from table ["+fk_table_name+"] columns ["+fk_col_name+"] view to use ["+list_view_name+"]") ,vt_elist.tabs) )). public define Maybe(HTML_Partial_Content) edit_table_content ( SQLite3DataBase db, (String) -> String _T, String lang, String web_site_directory, List(Web_arg) lwa, String table, //table name String view_name, //view name to use VT_action action, //new_entry or edit an existing record 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, web_site_directory, lwa, get_edit(db, action, view_name), vtm)) }.