Commit 601f9714449737d52f05351db81e3c22fd0b27a7

Authored by totoro
1 parent 135b0bfd

add crud web action

make uid more safe by adding _ as prefix. Sometime that uid is use as function name. This prevent that uid start with number which not allowed for function name
fix ajax combo bug by initialize each with different uid
add resolve_fk parameter in get_one_json and get_rows_json. that allows to retrieve the value of foreign instead of id
view/view_apps_renderer.anubis
... ... @@ -22,6 +22,7 @@ define List(HTML_Row(HTML_Off_Form))
22 22 (
23 23 SQLite3DataBase db,
24 24 List(HK_App) apps,
  25 + String dialog_uid,
25 26 (String) -> String _T,
26 27 )=
27 28 map_append((HK_App app) |-> since app is hk_app(app_name, icon, help, tables),
... ... @@ -34,8 +35,8 @@ define List(HTML_Row(HTML_Off_Form))
34 35 [ cell(text(_table_name)),
35 36 cell(
36 37 sequence([
37   - partial(img_button(icn16_add, [event(onclick, jq_dialog_open(dialog_id("edit_table_dlg_ajax"), "'table_name="+table_name+"'"))], "", [])),
38   - actioner(link([core_attrs([event(onclick, jq_dialog_open(dialog_id("edit_table_dlg_ajax"), "'table_name="+table_name+"'"))])],_T("ADD")), no_action, [])
  38 + partial(img_button(icn16_add, [event(onclick, jq_dialog_open(dialog_id(dialog_uid), "'table_name="+table_name+"'"))], "", [])),
  39 + actioner(link([core_attrs([event(onclick, jq_dialog_open(dialog_id(dialog_uid), "'table_name="+table_name+"'"))])],_T("ADD")), no_action, [])
39 40 ])
40 41 ),
41 42 cell(
... ... @@ -70,11 +71,12 @@ public define Maybe(HTML_Partial_Content)
70 71 String lang,
71 72 String web_site_directory
72 73 ) =
  74 + with dialog_uid = "_"+generate_random_string(15)+"_cxm_dlg",
73 75 success(partial_content([css(css_file("hayamiki/hayamiki.css")),]+
74 76 jq_dialog_init + jq_datetimepicker_init(lang),
75 77 sequence([
76   - partial(jq_dialog_create(dialog_id("edit_table_dlg_ajax"), ajax(controller_action("hk_c", "ajax_edit_table")))), /*&table_name="+rows.table_name*/
77   - table([class("hk_table_apps")], generate_apps(db, hk_db.apps, _T))
  78 + partial(jq_dialog_create(dialog_id(dialog_uid), ajax(controller_action("hk_c", "ajax_edit_table&dialog_id="+dialog_uid)))), /*&table_name="+rows.table_name*/
  79 + table([class("hk_table_apps")], generate_apps(db, hk_db.apps, dialog_uid, _T))
78 80 ])
79 81 ))
80 82 .
... ...
view/view_table_manager_types.anubis
... ... @@ -45,8 +45,8 @@ public type HK_Table_controller:
45 45 (SQLite3DataBase db, List(Web_arg) lwa) -> Maybe(One) write_from_fields,
46 46 //Read
47 47 (SQLite3DataBase db, String clause) -> Int get_count,
48   - (SQLite3DataBase db, List(String) columns, DB_id) -> JsonValue get_one_json,
49   - (SQLite3DataBase db, List(String) columns, HK_Referer referer, String clause, String order_by) -> JsonValue get_rows_json,
  48 + (SQLite3DataBase db, List(String) columns, Bool resolve_fk, DB_id) -> JsonValue get_one_json,
  49 + (SQLite3DataBase db, List(String) columns, Bool resolve_fk, HK_Referer referer, String clause, String order_by) -> JsonValue get_rows_json,
50 50 //Update
51 51 //Delete
52 52 (SQLite3DataBase db, List(Int) l_int) -> Maybe(One) delete,
... ...
view/view_table_renderer.anubis
... ... @@ -114,6 +114,28 @@ public define HK_Filter
114 114 get_filter_from_name(filters, filter_name)
115 115 .
116 116  
  117 +define String
  118 + ajax_combo_init_parameter
  119 + (
  120 + String combo_uid,
  121 + String f_table, //db table name
  122 + String c_name, //column name in the table
  123 + List(String) s_fields //search fields
  124 + )=
  125 +"$('#"+combo_uid+"').ajaxComboBox( '?aws_controller=hk_c&aws_action=combo_search',
  126 + {
  127 + lang: 'fr',
  128 + per_page: 15,
  129 + db_table: '"+f_table+"',
  130 + button_img: 'ajax-combobox/btn.png',
  131 + field: '"+force_nth(0, s_fields, "name")+"',
  132 + search_field: '"+join(", ", s_fields)+"',
  133 + hidden_name: '"+c_name+"',
  134 + show_string: '"+join(", ", s_fields)+"',
  135 + and_or: 'OR'
  136 + });"
  137 +.
  138 +
117 139 define HTML_In_Form
118 140 /* create a selector for choosing the view name.
119 141 * The selector create an immediate action. This means when the entry is selected, the action is fired.
... ... @@ -458,7 +480,7 @@ public define HTML_Partial_Content
458 480 with referer_arg = "&"+to_Web_arg(table_referer, ""),
459 481  
460 482  
461   - with uid = generate_random_string(20)+"_",
  483 + with uid = "_"+generate_random_string(15)+"_",
462 484 partial_content([ js(js_file("js/jscolor.min.js"))
463 485 ]+jq_dialog_init + jq_datetimepicker_init(lang),
464 486 [html_wave_box_wide(_T(to_upper(current_view.table_name)),
... ... @@ -583,7 +605,7 @@ define CXM_Form_Field
583 605  
584 606  
585 607 //Edit table part
586   -public define List(CXM_Form_Field)
  608 +public define List(CXM_Form_Field)
587 609 edit_form_lines
588 610 (
589 611 SQLite3DataBase db,
... ... @@ -655,13 +677,19 @@ public define List(CXM_Form_Field)
655 677 // ])
656 678 // ],
657 679  
658   - foreign_text_search(s_name, c_name, select, foreign_table_name, fields, help) then
659   - with uid = "_"+generate_random_string(20)+"_",
  680 + foreign_text_search(s_name, c_name, select, foreign_table_name, s_fields, help) then
  681 + with uid = "_"+generate_random_string(20)+"_",
  682 + with combo_init = ajax_combo_init_parameter(uid, foreign_table_name, c_name, s_fields),
660 683 [
661   - partial(jq_dialog_create(dialog_id(uid+foreign_table_name+"_dlg_ajax"), ajax(controller_action("hk_c", "ajax_edit_table&dialog_id="+uid+foreign_table_name+"_dlg_ajax&sub_dialog=true&table_name="+foreign_table_name)))),
  684 +
  685 + partial(partial_content([ js(js_file("ajax-combobox/js/jquery.ajax-combobox.js")),
  686 + css(css_file("ajax-combobox/css/jquery.ajax-combobox.css")),
  687 + js_inline(jquery_ready(combo_init))],
  688 + jq_dialog_create(dialog_id(uid+foreign_table_name+"_dlg_ajax"), ajax(controller_action("hk_c", "ajax_edit_table&dialog_id="+uid+foreign_table_name+"_dlg_ajax&sub_dialog=true&table_name="+foreign_table_name))))),
662 689 one_line_fields([
  690 +
663 691 message(to_String(format_label(label(_T(s_name), no_help), html_Id("")))+
664   - "<input class=\"in\" id=\"acb_"+c_name+"\" data-init_record=\""+select+"\" size=\"50\" type=\"text\">"),
  692 + "<input class=\"in\" id=\""+uid+"\" data-init_record=\""+select+"\" size=\"50\" type=\"text\">"),
665 693 partial(img_button(icn16_add, [event(onclick, jq_dialog_open(dialog_id(uid+foreign_table_name+"_dlg_ajax")))], "", [])),
666 694 ]),
667 695 help_line(help, _T)
... ... @@ -669,9 +697,24 @@ public define List(CXM_Form_Field)
669 697  
670 698 choices_text(s_name, c_name, value, select, help) then
671 699 [selector_c([],label(_T(s_name), no_help), html_Id(""), wan(c_name), 1, select.get(db, no_referer, ""), success(init(value)), mandatory), help_line(help, _T)],
  700 +
672 701 text_area(s_name, c_name, value, txt_editor, help) then
673   - with id = if txt_editor is { none then "", rich_editor then c_name+"_editor"},
674   - [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)],
  702 + with uid = "_"+generate_random_string(20),
  703 + with id = if txt_editor is { none then "", rich_editor then uid+"_editor"},
  704 + [
  705 + if txt_editor is {
  706 + none then empty,
  707 + rich_editor then partial(partial_content(
  708 + [ js(js_file("ckeditor/ckeditor.js")),
  709 + js_inline(jquery_ready(
  710 + " var cke_instance = CKEDITOR.replace( '"+id+"' );
  711 + //cxm_cke('"+id+"');
  712 + cke_instance.on('blur', function() { cke_instance.updateElement(); });
  713 + "))],empty))
  714 + },
  715 + 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)
  716 + ],
  717 +
675 718 boolean(s_name, c_name, value, help) then
676 719 [checkboxr([],label(_T(s_name), no_help), html_Id(""), wan(c_name), wav("true"),value, mandatory), help_line(help, _T)],
677 720 integer(s_name, c_name, value, help) then
... ... @@ -696,166 +739,147 @@ public define List(CXM_Form_Field)
696 739 edit_form_lines(db, fk_clause, table_referer, _T, t, new_entry, reverse(line)+so_far)
697 740 }.
698 741  
699   -define List(String)
700   - get_rich_editor_inline
701   - (
702   - List(HK_Form_Entry) list
703   - )=
704   - map_select((HK_Form_Entry entry) |->
705   - if entry is text_area(s_name, c_name, value, txt_editor, help) then
706   - if txt_editor is { none then failure,
707   - rich_editor then success(" CKEDITOR.replace( '"+c_name+"_editor' );")
708   - }
709   - else
710   - failure, list)
711   -.
  742 +//define List(String)
  743 +// get_rich_editor_inline
  744 +// (
  745 +// List(HK_Form_Entry) list
  746 +// )=
  747 +// map_select((HK_Form_Entry entry) |->
  748 +// if entry is text_area(s_name, c_name, value, txt_editor, help) then
  749 +// if txt_editor is { none then failure,
  750 +// rich_editor then success(" CKEDITOR.replace( '"+c_name+"_editor' );")
  751 +// }
  752 +// else
  753 +// failure, list)
  754 +//.
712 755  
713   -define List(HTML_Head_Tag)
714   - get_editor_header
715   - (
716   - List(HK_Form_Entry) _list
717   - )=
718   - with result = get_rich_editor_inline(_list),
719   - if length(result) > 0 then
720   - [js(js_file("ckeditor/ckeditor.js")),
721   - js_inline(jquery_ready(join("",result)))
722   - ]
723   - else
724   - []
725   - .
  756 +// define List(HTML_Head_Tag)
  757 +// get_editor_header
  758 +// (
  759 +// List(HK_Form_Entry) _list
  760 +// )=
  761 +// with result = get_rich_editor_inline(_list),
  762 +// if length(result) > 0 then
  763 +// [
  764 +// js_inline(jquery_ready(join("",result)))
  765 +// ]
  766 +// else
  767 +// []
  768 +// .
726 769  
727   -define List(String)
728   - _get_editor_header
729   - (
730   - List(HK_Form_Table_Line) _lines
731   - )=
732   - map_append((HK_Form_Table_Line line)
733   - |->
734   - map_append((HK_Form_Table_Cell cell)
735   - |->
736   - if cell is
737   - {
738   - hk_form_table_cell(_, form_entry) then
739   - if form_entry is text_area(s_name, c_name, value, txt_editor, help) then
740   - if txt_editor is {
741   - none then [],
742   - rich_editor then [" CKEDITOR.replace( '"+c_name+"_editor' );"]
743   - }
744   - else
745   - [],
746   - hk_form_table_cell_table(_, t_lines) then
747   - _get_editor_header(t_lines)
748   - },
749   - line.form_table_cells),
750   - _lines)
751   -.
  770 +//define List(String)
  771 +// _get_editor_header
  772 +// (
  773 +// List(HK_Form_Table_Line) _lines
  774 +// )=
  775 +// map_append((HK_Form_Table_Line line)
  776 +// |->
  777 +// map_append((HK_Form_Table_Cell cell)
  778 +// |->
  779 +// if cell is
  780 +// {
  781 +// hk_form_table_cell(_, form_entry) then
  782 +// if form_entry is text_area(s_name, c_name, value, txt_editor, help) then
  783 +// if txt_editor is {
  784 +// none then [],
  785 +// rich_editor then [" CKEDITOR.replace( '"+c_name+"_editor' );"]
  786 +// }
  787 +// else
  788 +// [],
  789 +// hk_form_table_cell_table(_, t_lines) then
  790 +// _get_editor_header(t_lines)
  791 +// },
  792 +// line.form_table_cells),
  793 +// _lines)
  794 +//.
752 795  
753   -define String
754   - ajax_combo_init_parameter
755   - (
756   - String f_table, //db table name
757   - String c_name, //column name in the table
758   - List(String) s_fields //search fields
759   - )=
760   -"$('#acb_"+c_name+"').ajaxComboBox( '?aws_controller=hk_c&aws_action=combo_search',
761   - {
762   - lang: 'fr',
763   - per_page: 15,
764   - db_table: '"+f_table+"',
765   - button_img: 'ajax-combobox/btn.png',
766   - field: '"+force_nth(0, s_fields, "name")+"',
767   - search_field: '"+join(", ", s_fields)+"',
768   - hidden_name: '"+c_name+"',
769   - show_string: '"+join(", ", s_fields)+"',
770   - and_or: 'OR'
771   - });"
772   -.
773 796  
774   -define List(String)
775   - _get_combo_header
776   - (
777   - String table_name,
778   - List(HK_Form_Table_Line) _lines
779   - )=
780   - map_append((HK_Form_Table_Line line)
781   - |->
782   - map_append((HK_Form_Table_Cell cell)
783   - |->
784   - if cell is
785   - {
786   - hk_form_table_cell(_, form_entry) then
787   - if form_entry is foreign_text_search(s_name, c_name, select, f_table, s_fields, help) then
788   - [ajax_combo_init_parameter(f_table, c_name, s_fields)]
789   - else
790   - [],
791   - hk_form_table_cell_table(_, t_lines) then
792   - _get_combo_header(table_name, t_lines)
793   - },
794   - line.form_table_cells),
795   - _lines)
796   -.
797 797  
798   -define List(HTML_Head_Tag)
799   - get_editor_header
800   - (
801   - List(HK_Form_Table_Line) _lines
802   - )=
803   - with result = _get_editor_header(_lines),
804   - if length(result) > 0 then
805   - [js(js_file("ckeditor/ckeditor.js")),
806   - js_inline(jquery_ready(join("",result)))
807   - ]
808   - else
809   - []
810   - .
  798 +//define List(String)
  799 +// _get_combo_header
  800 +// (
  801 +// String table_name,
  802 +// List(HK_Form_Table_Line) _lines
  803 +// )=
  804 +// map_append((HK_Form_Table_Line line)
  805 +// |->
  806 +// map_append((HK_Form_Table_Cell cell)
  807 +// |->
  808 +// if cell is
  809 +// {
  810 +// hk_form_table_cell(_, form_entry) then
  811 +// if form_entry is foreign_text_search(s_name, c_name, select, f_table, s_fields, help) then
  812 +// [ajax_combo_init_parameter(f_table, c_name, s_fields)]
  813 +// else
  814 +// [],
  815 +// hk_form_table_cell_table(_, t_lines) then
  816 +// _get_combo_header(table_name, t_lines)
  817 +// },
  818 +// line.form_table_cells),
  819 +// _lines)
  820 +//.
  821 +
  822 +//define List(HTML_Head_Tag)
  823 +// get_editor_header
  824 +// (
  825 +// List(HK_Form_Table_Line) _lines
  826 +// )=
  827 +// with result = _get_editor_header(_lines),
  828 +// if length(result) > 0 then
  829 +// [js(js_file("ckeditor/ckeditor.js")),
  830 +// js_inline(jquery_ready(join("",result)))
  831 +// ]
  832 +// else
  833 +// []
  834 +// .
811 835  
812   -define List(HTML_Head_Tag)
813   - get_combo_header
814   - (
815   - String table_name,
816   - List(HK_Form_Table_Line) _lines
817   - )=
818   - with result = _get_combo_header(table_name, _lines),
819   - if length(result) > 0 then
820   - [js(js_file("ajax-combobox/js/jquery.ajax-combobox.js")),
821   - css(css_file("ajax-combobox/css/jquery.ajax-combobox.css")),
822   - js_inline(jquery_ready(join("",result)))
823   - ]
824   - else
825   - []
826   - .
  836 +//define List(HTML_Head_Tag)
  837 +// get_combo_header
  838 +// (
  839 +// String table_name,
  840 +// List(HK_Form_Table_Line) _lines
  841 +// )=
  842 +// with result = _get_combo_header(table_name, _lines),
  843 +// if length(result) > 0 then
  844 +// [js(js_file("ajax-combobox/js/jquery.ajax-combobox.js")),
  845 +// css(css_file("ajax-combobox/css/jquery.ajax-combobox.css")),
  846 +// js_inline(jquery_ready(join("",result)))
  847 +// ]
  848 +// else
  849 +// []
  850 +// .
827 851  
828   -define List(String)
829   - _get_combo_header
830   - (
831   - String table_name,
832   - List(HK_Form_Entry) _entries
833   - )=
834   - map_append((HK_Form_Entry entry)
835   - |->
836   - if entry is foreign_text_search(s_name, c_name, select, f_table, s_fields, help) then
837   - [ajax_combo_init_parameter(f_table, c_name, s_fields)]
838   - else
839   - []
840   - ,
841   - _entries)
842   -.
  852 +//define List(String)
  853 +// _get_combo_header
  854 +// (
  855 +// String table_name,
  856 +// List(HK_Form_Entry) _entries
  857 +// )=
  858 +// map_append((HK_Form_Entry entry)
  859 +// |->
  860 +// if entry is foreign_text_search(s_name, c_name, select, f_table, s_fields, help) then
  861 +// []
  862 +// else
  863 +// []
  864 +// ,
  865 +// _entries)
  866 +//.
843 867  
844   -define List(HTML_Head_Tag)
845   - get_combo_header
846   - (
847   - String table_name,
848   - List(HK_Form_Entry) _lines
849   - )=
850   - with result = _get_combo_header(table_name, _lines),
851   - if length(result) > 0 then
852   - [js(js_file("ajax-combobox/js/jquery.ajax-combobox.js")),
853   - css(css_file("ajax-combobox/css/jquery.ajax-combobox.css")),
854   - js_inline(jquery_ready(join("",result)))
855   - ]
856   - else
857   - []
858   - .
  868 +//define List(HTML_Head_Tag)
  869 +// get_combo_header
  870 +// (
  871 +// String table_name,
  872 +// List(HK_Form_Entry) _lines
  873 +// )=
  874 +// with result = _get_combo_header(table_name, _lines),
  875 +// if length(result) > 0 then
  876 +// [js(js_file("ajax-combobox/js/jquery.ajax-combobox.js")),
  877 +// css(css_file("ajax-combobox/css/jquery.ajax-combobox.css")),
  878 +// js_inline(jquery_ready(join("",result)))
  879 +// ]
  880 +// else
  881 +// []
  882 +// .
859 883  
860 884 public define HTML_Partial_Content
861 885 renderer_edit_list_form
... ... @@ -898,9 +922,9 @@ public define HTML_Partial_Content
898 922 };
899 923 $('#my-awesome-dropzone').dropzone(); ")),
900 924 ]+
901   - jq_datetimepicker_init(lang) +
902   - get_editor_header(list_entries)+ //add editor header if need. Like init ck_editor
903   - get_combo_header(table_name, list_entries),
  925 + jq_datetimepicker_init(lang),
  926 + //get_editor_header(list_entries)+ //add editor header if need. Like init ck_editor
  927 + //get_combo_header(table_name, list_entries),
904 928 sequence([
905 929 cxm_form( table_name, lwa,
906 930 (if length(list_entries) > 19 then
... ... @@ -1000,28 +1024,47 @@ public define List(CXM_Form_Field)
1000 1024 partial(jq_dialog_create(dialog_id(uid+foreign_table_name+"_dlg_ajax"), ajax(controller_action("hk_c", "ajax_edit_table&dialog_id="+uid+foreign_table_name+"_dlg_ajax&sub_dialog=true&table_name="+foreign_table_name)))),
1001 1025 one_line_fields([
1002 1026 partial(partial_content([js_inline(load_script)],empty)),
1003   - selector_c([],label(_T(s_name), no_help), html_Id(uid+foreign_table_name+"_"+c_name+"_selector"), wan(c_name), 1, select.get(db, table_referer, fk_clause), success(init(to_String(value))), mandatory), help_line(help, _T),
  1027 + selector_c([],label(_T(s_name), no_help), html_Id(uid+foreign_table_name+"_"+c_name+"_selector"), wan(c_name), 1, /*select.get(db, table_referer, fk_clause)*/ [], success(init("")), mandatory), help_line(help, _T),
1004 1028 partial(img_button(icn16_add, [event(onclick, jq_dialog_open(dialog_id(uid+foreign_table_name+"_dlg_ajax")))], "", [])),
1005 1029 ])
1006 1030 ],
1007   -
  1031 +
1008 1032 foreign_text_search(s_name, c_name, select, foreign_table_name, s_fields, help) then
1009 1033 //[raw_in_form(literal("<input class=\"in\" id=\"acb_"+c_name+"\" data-init_record=\""+select+"\" size=\"50\" type=\"text\">"))]
1010   - with uid = "_"+generate_random_string(20)+"_",
  1034 + with uid = "_"+generate_random_string(20)+"_",
  1035 + with combo_init = ajax_combo_init_parameter(uid, foreign_table_name, c_name, s_fields),
1011 1036 [
1012   - partial(jq_dialog_create(dialog_id(uid+foreign_table_name+"_dlg_ajax"), ajax(controller_action("hk_c", "ajax_edit_table&dialog_id="+uid+foreign_table_name+"_dlg_ajax&sub_dialog=true&table_name="+foreign_table_name)))),
  1037 + partial(partial_content([
  1038 + js(js_file("ajax-combobox/js/jquery.ajax-combobox.js")),
  1039 + css(css_file("ajax-combobox/css/jquery.ajax-combobox.css")),
  1040 + js_inline(jquery_ready(combo_init))],
  1041 + jq_dialog_create(dialog_id(uid+foreign_table_name+"_dlg_ajax"), ajax(controller_action("hk_c", "ajax_edit_table&dialog_id="+uid+foreign_table_name+"_dlg_ajax&sub_dialog=true&table_name="+foreign_table_name))))),
1013 1042 one_line_fields([
1014   - message("<input class=\"in\" id=\"acb_"+c_name+"\" data-init_record=\""+select+"\" size=\"50\" type=\"text\">"),
  1043 + message("<input class=\"in\" id=\""+uid+"\" data-init_record=\""+select+"\" size=\"50\" type=\"text\">"),
1015 1044 partial(img_button(icn16_add, [event(onclick, jq_dialog_open(dialog_id(uid+foreign_table_name+"_dlg_ajax")))], "", [])),
1016 1045 ]),
1017 1046 help_line(help, _T)
1018 1047 ]
1019   -
  1048 +
1020 1049 choices_text(s_name, c_name, value, select, help) then
1021 1050 [selector_c([],no_label, html_Id(""), wan(c_name), 1, select.get(db, no_referer, ""), success(init(value)), mandatory), help_line(help, _T)],
  1051 +
1022 1052 text_area(s_name, c_name, value, txt_editor, help) then
1023   - with id = if txt_editor is { none then "", rich_editor then c_name+"_editor"},
1024   - [text_area([],no_label, html_Id(id), wan(c_name), init(not_null_String(value)), narrow, (Int)5, mandatory), help_line(help, _T)],
  1053 + with uid = "_"+generate_random_string(20),
  1054 + with id = if txt_editor is { none then "", rich_editor then uid+"_editor"},
  1055 + [
  1056 + if txt_editor is {
  1057 + none then empty,
  1058 + rich_editor then partial(partial_content(
  1059 + [js(js_file("ckeditor/ckeditor.js")),
  1060 + js_inline(jquery_ready(
  1061 + " var cke_instance = CKEDITOR.replace( '"+id+"' );
  1062 + //cxm_cke('"+id+"');
  1063 + cke_instance.on('blur', function() { cke_instance.updateElement(); });
  1064 + "))],empty))
  1065 + },
  1066 + text_area([],no_label, html_Id(id), wan(c_name), init(not_null_String(value)), narrow, (Int)5, mandatory), help_line(help, _T)],
  1067 +
1025 1068 boolean(s_name, c_name, value, help) then
1026 1069 [checkboxr([],no_label, html_Id(""), wan(c_name), wav("true"),value, mandatory), help_line(help, _T)],
1027 1070 integer(s_name, c_name, value, help) then
... ... @@ -1123,23 +1166,30 @@ public define HTML_Partial_Content
1123 1166 //true if need to create row or false for updating
1124 1167 with create = if get_String(lwa, "id","none") = "none" then true else false,
1125 1168 with id = get_String(lwa, "id","none"),
1126   - with button_name = if create then _T("CREATE") else _T("UPDATE"),
  1169 + with sub_dialog = get_String(lwa, "sub_dialog", "false"),
  1170 + with dialog_id = get_String(lwa, "dialog_id", ""),
  1171 + with after_close_cb = get_String(lwa, "after_close_cb", ""), //call back
  1172 + with button_label = if create then _T("CREATE") else _T("UPDATE"),
  1173 + with button_name = if create then "create" else "update",
1127 1174 with button_name_and_new = if create then _T("CREATE_AND_EDIT_NEW") else _T("UPDATE_AND_EDIT_NEW"),
1128 1175  
1129 1176 partial_content(
1130 1177 [ js(js_file("js/jscolor.min.js"))
1131 1178 ]+
1132   - jq_datetimepicker_init(lang) +
1133   - get_editor_header(table_form.form_lines)+ //add editor header if need. Like init ck_editor
1134   - get_combo_header(table_name, table_form.form_lines), //add editor header if need. Like init ck_editor
  1179 + jq_datetimepicker_init(lang),
  1180 + //get_editor_header(table_form.form_lines)+ //add editor header if need. Like init ck_editor
  1181 + //get_combo_header(table_name, table_form.form_lines), //add editor header if need. Like init ck_editor
1135 1182 sequence([
1136 1183 cxm_form( table_name, [], lwa,
1137 1184 get_hidden(table_form.table_attr)+
1138 1185 [construct_edit_form_table(db, table_referer, _T, lwa, table_form.form_lines, create)]+
1139 1186 [ one_line_fields([
1140   - submit(if create then hkc_save_row else hkc_update_row, failure, button_name, [("table_name", table_name)]),
1141   - submit(if create then hkc_save_row_and_new else hkc_update_row_and_new, failure, button_name_and_new, [("table_name", table_name)]),
1142   - submit(hkc_cancel, failure, _T("CANCEL"))
  1187 +// submit(if create then hkc_save_row else hkc_update_row, failure, button_name, [("table_name", table_name)]),
  1188 +// submit(if create then hkc_save_row_and_new else hkc_update_row_and_new, failure, button_name_and_new, [("table_name", table_name)]),
  1189 +// submit(hkc_cancel, failure, _T("CANCEL"))
  1190 + partial(jquery_button(jQuery_button(button, dialog_id+button_name, button_name, button_label, jQuery_actioner(same, jqscript(jq_form_submit_and_close(dialog_id, table_name, hkc_update_row, [("table_name", table_name), ("sub_dialog", sub_dialog)], after_close_cb)))))),
  1191 + partial(jquery_button(jQuery_button(button, dialog_id+"cancel", "cancel", _T("CANCEL"), jQuery_actioner(same, jqscript("$('#"+dialog_id+"').dialog('close')"))))),
  1192 +
1143 1193 ])
1144 1194 ],
1145 1195 "form_field table",
... ...
view/web_action.anubis
... ... @@ -16,6 +16,7 @@ public define WEB_Action_Name hkc_grid_view = controller_action(&quot;hk_c&quot;
16 16 public define WEB_Action_Name hkc_grid_action = controller_action("hk_c", "grid_action").
17 17 public define WEB_Action_Name hkc_combo_search = controller_action("hk_c", "combo_search").
18 18 public define WEB_Action_Name hkc_selector = controller_action("hk_c", "selector"). //get dropdown HMTL content
  19 +public define WEB_Action_Name hkc_query = controller_action("hk_c", "query"). //CRUD action
19 20  
20 21 public define WEB_Action_Name hkc_list_view = controller_action("hk_c", "view_table").
21 22 public define WEB_Action_Name hkc_list_view_name = controller_action("hk_c", "hkc_list_view_name").
... ...