diff --git a/controller/hk_delete.anubis b/controller/hk_delete.anubis index c99aaec..bc6d97a 100644 --- a/controller/hk_delete.anubis +++ b/controller/hk_delete.anubis @@ -9,7 +9,7 @@ read calexium_lib/web/CXM_common.anubis read calexium_lib/web/CXM_web_arg_utils.anubis //TODO move to hayamiki lib as view part of MVC -read calexium_lib/database/vtm/view_table_manager.anubis +read hayamiki_lib/view/view_table_manager.anubis public define Result(String, String) hk_delete_row diff --git a/view/view_table_manager.anubis b/view/view_table_manager.anubis new file mode 100644 index 0000000..c14cb6f --- /dev/null +++ b/view/view_table_manager.anubis @@ -0,0 +1,111 @@ +/* + * Created by PyramIDE. + * User: Totoro + * Date: 16/11/2011 + * Time: 23:53 + */ + +read tools/basis.anubis +transmit hayamiki_lib/view/view_table_types.anubis +transmit hayamiki_lib/view/view_table_manager_types.anubis + +public define Maybe(VTM_view) + _vtm_get_view + ( + String table_name, + List(VTM_view) list + ) = + if list is + { + [] then println("_vtm_get_view "+table_name+" not found"); failure, + [ h . t ] then + if h is vtm_view(tb_name, get_view) then + if tb_name = table_name then + success(h) + else + _vtm_get_view(table_name, t) + }. + +public define Maybe(VTM_view) + vtm_get_view + ( + String table_name, + VTM_view_list vtm_vlist + ) = + _vtm_get_view(table_name, vtm_vlist.list). + + +public define Maybe(VTM_edit) + _vtm_get_edit + ( + String table_name, + List(VTM_edit) list + ) = + if list is + { + [] then failure, + [ h . t ] then + if h is vtm_edit(tb_name, get_edit) then + if tb_name = table_name then + success(h) + else + _vtm_get_edit(table_name, t) + }. + +public define Maybe(VTM_edit) + vtm_get_edit + ( + String table_name, + VTM_edit_list vtm_vlist + ) = + _vtm_get_edit(table_name, vtm_vlist.list). + +public define Maybe(TM_writer) + _tm_get_writer + ( + String table_name, + List(TM_writer) list + ) = + if list is + { + [] then failure, + [ h . t ] then + if h is tm_writer(tb_name, get_writer) then + if tb_name = table_name then + success(h) + else + _tm_get_writer(table_name, t) + }. + +public define Maybe(TM_writer) + tm_get_writer + ( + String table_name, + TM_writer_list tm_wlist + ) = + _tm_get_writer(table_name, tm_wlist.list). + +public define Maybe((SQLite3DataBase db, List(Int) l_int) -> Maybe(One)) + _tm_get_delete + ( + String table_name, + List(TM_delete) list + ) = + if list is + { + [] then failure, + [ h . t ] then + since h is tm_delete(tb_name, delete_func), + if tb_name = table_name then + success(delete_func) + else + _tm_get_delete(table_name, t) + }. + +public define Maybe((SQLite3DataBase db, List(Int) l_int) -> Maybe(One)) + tm_get_delete + ( + String table_name, + TM_delete_list tm_dlist + ) = + _tm_get_delete(table_name, tm_dlist.list). diff --git a/view/view_table_manager_types.anubis b/view/view_table_manager_types.anubis new file mode 100644 index 0000000..1655a92 --- /dev/null +++ b/view/view_table_manager_types.anubis @@ -0,0 +1,40 @@ +/* + * Created by PyramIDE. + * User: Totoro + * Date: 17/11/2011 + * Time: 00:32 + * + */ + +read hayamiki_lib/view/view_table_types.anubis +read calexium_lib/web/CXM_common.anubis + +public type VTM_edit: + vtm_edit(String table_name, (SQLite3DataBase db, VT_action action) -> VT_edit get_edit). + +public type VTM_edit_list: + vtm_edit_list(List(VTM_edit) list). + +public type TM_writer: + tm_writer(String table_name, (SQLite3DataBase db, List(Web_arg) lwa) -> Maybe(One) write). + +public type TM_writer_list: + tm_writer_list(List(TM_writer) list). + +public type TM_delete: + tm_delete(String table_name, (SQLite3DataBase db, List(Int) l_int) -> Maybe(One) delete). + +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) -> VT_view get_view). + +public type VTM_view_list: + vtm_view_list(List(VTM_view) list). + +public type VTM: + vtm(VTM_view_list view_list, + VTM_edit_list edit_list, + TM_writer_list writer_list, + TM_delete_list delete_list). diff --git a/view/view_table_renderer.anubis b/view/view_table_renderer.anubis new file mode 100644 index 0000000..24dfda4 --- /dev/null +++ b/view/view_table_renderer.anubis @@ -0,0 +1,269 @@ +/* + * Created by PyramIDE. + * User: Totoro + * Date: 30/11/2011 + * Time: 21:22 + * + */ + +read hayamiki_lib/view/view_table_types.anubis +read hayamiki_lib/view/view_table_manager_types.anubis +read hayamiki_lib/view/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)], + password(s_name, c_name, help) then + [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)], + + 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)], + 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, 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, false, 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))) + }. diff --git a/view/view_table_types.anubis b/view/view_table_types.anubis new file mode 100644 index 0000000..8f03aa7 --- /dev/null +++ b/view/view_table_types.anubis @@ -0,0 +1,63 @@ +/* + * Created by PyramIDE. + * User: Totoro + * Date: 15/11/2011 + * Time: 20:32 + */ + +read calexium_lib/web/CXM_making_a_web_site.anubis +transmit calexium_lib/web/CXM_common.anubis +read hayamiki_lib/types/hayamiki.anubis + +public type VT_edit_selector: + vt_edit_selector((SQLite3DataBase db) -> List((List(CoreAttrs), WebArgValue, String)) get). + +public type VT_edit_entry: + hidden (String name, String value), + primary_key (String idx), + information (String s_name, String c_name, String v_name, Int width, HK_Help_Text help), //s_name = show_name for translation, v_name = string to show + text (String s_name, String c_name, String value, HK_Help_Text help), //s_name = show_name for translation, c_name = table column name + password (String s_name, String c_name, HK_Help_Text help), //s_name = show_name for translation, c_name = table column name + foreign_text(String s_name, String c_name, Int selected, VT_edit_selector selector, HK_Help_Text help), + choices_text(String s_name, String c_name, String selected, VT_edit_selector selector, HK_Help_Text help), + text_area (String s_name, String c_name, String value, HK_Help_Text help), //s_name = show_name for translate, c_name = table column name + boolean (String s_name, String c_name, Bool value, HK_Help_Text help), + integer (String s_name, String c_name, Int value, HK_Help_Text help), + choices_int (String s_name, String c_name, Int selected, VT_edit_selector selector, HK_Help_Text help), + date (String s_name, String c_name, String value, HK_Help_Text help), + time (String s_name, String c_name, String value, HK_Help_Text help), + datetime (String s_name, String c_name, String value, HK_Help_Text help). + +public define VT_edit_entry text (String s_name, String c_name, String value) = text(s_name, c_name, value, no_help_text). +public define VT_edit_entry foreign_text(String s_name, String c_name, Int selected, VT_edit_selector selector) = foreign_text(s_name, c_name, selected, selector, no_help_text). +public define VT_edit_entry text_area (String s_name, String c_name, String value) = text_area(s_name, c_name, value, no_help_text). +public define VT_edit_entry boolean(String s_name, String c_name, Bool value) = boolean(s_name, c_name, value, no_help_text). +public define VT_edit_entry integer(String s_name, String c_name, Int value) = integer(s_name, c_name, value, no_help_text). +public define VT_edit_entry information(String s_name, String c_name, String v_name, HK_Help_Text help) = information(s_name, c_name, v_name, 0, help). + + +public type VT_edit: + vt_edit(String table_name, List(VT_edit_entry) list). + +public type VT_view_entry: + text(String text), + link(String id, String text), + link_id_action(String id, String text, String link_id_action), + icon(String icon_path). + +public type VT_view_row_header: + vt_view_row_header(List(VT_view_entry) list). + +public type VT_view_row: + vt_view_row(Int db_id, List(VT_view_entry) list). + +public type VT_view: + vt_view(String table_name, String view_name, VT_view_row_header header, List(VT_view_row) list). + + +public type VT_action: + new_entry, + edit_entry(String idx). + +public define String default_select = "--------------------". //20 dash +public define (List(CoreAttrs),WebArgValue,String) selector_default_entry = ([], wav("0"),default_select). -- libgit2 0.21.4