Commit 095da71b9047328df7dc9476b35d0bc436fc704f

Authored by totoro
2 parents 6fe1d581 56fa599f

Merge branch 'release/ANUBIS_1_14' of ssh://gitlab.calexium.com:33022/calexium/c…

…alexium_lib into release/ANUBIS_1_14

Conflicts:
	web/CXM_form.anubis
database/db_types.anubis
... ... @@ -35,6 +35,17 @@ public define String
35 35 none then "none",
36 36 db_id(_idx) then abs_to_decimal(_idx)
37 37 }.
  38 +
  39 +public define Int
  40 + to_Int
  41 + (
  42 + DB_id idx
  43 + )=
  44 + if idx is
  45 + {
  46 + none then (Int)-1,
  47 + db_id(_idx) then _idx
  48 + }.
38 49  
39 50 public define String
40 51 to_String
... ...
database/vtm/view_table_manager.anubis
... ... @@ -6,8 +6,8 @@
6 6 */
7 7  
8 8 read tools/basis.anubis
9   -read calexium_lib/database/vtm/view_table_types.anubis
10   -read calexium_lib/database/vtm/view_table_manager_types.anubis
  9 +transmit calexium_lib/database/vtm/view_table_types.anubis
  10 +transmit calexium_lib/database/vtm/view_table_manager_types.anubis
11 11  
12 12 public define Maybe(VTM_view)
13 13 _vtm_get_view
... ... @@ -84,3 +84,28 @@ public define Maybe(TM_writer)
84 84 TM_writer_list tm_wlist
85 85 ) =
86 86 _tm_get_writer(table_name, tm_wlist.list).
  87 +
  88 +public define Maybe((SQLite3DataBase db, List(Int) l_int) -> Maybe(One))
  89 + _tm_get_delete
  90 + (
  91 + String table_name,
  92 + List(TM_delete) list
  93 + ) =
  94 + if list is
  95 + {
  96 + [] then failure,
  97 + [ h . t ] then
  98 + since h is tm_delete(tb_name, delete_func),
  99 + if tb_name = table_name then
  100 + success(delete_func)
  101 + else
  102 + _tm_get_delete(table_name, t)
  103 + }.
  104 +
  105 +public define Maybe((SQLite3DataBase db, List(Int) l_int) -> Maybe(One))
  106 + tm_get_delete
  107 + (
  108 + String table_name,
  109 + TM_delete_list tm_dlist
  110 + ) =
  111 + _tm_get_delete(table_name, tm_dlist.list).
... ...
database/vtm/view_table_manager_types.anubis
... ... @@ -21,6 +21,11 @@ public type TM_writer:
21 21 public type TM_writer_list:
22 22 tm_writer_list(List(TM_writer) list).
23 23  
  24 +public type TM_delete:
  25 + tm_delete(String table_name, (SQLite3DataBase db, List(Int) l_int) -> Maybe(One) delete).
  26 +
  27 +public type TM_delete_list:
  28 + tm_delete_list(List(TM_delete) list).
24 29  
25 30 public type VTM_view:
26 31 vtm_view(String table_name, (SQLite3DataBase db, String view_name) -> VT_view get_view).
... ... @@ -29,4 +34,7 @@ public type VTM_view_list:
29 34 vtm_view_list(List(VTM_view) list).
30 35  
31 36 public type VTM:
32   - vtm(VTM_view_list view_list, VTM_edit_list edit_list, TM_writer_list writer_list).
  37 + vtm(VTM_view_list view_list,
  38 + VTM_edit_list edit_list,
  39 + TM_writer_list writer_list,
  40 + TM_delete_list delete_list).
... ...
database/vtm/view_table_renderer.anubis
... ... @@ -20,13 +20,16 @@ read system/convert.anubis
20 20 //read utils.anubis
21 21 read locale/L3LanguageInfo.anubis
22 22 read calexium_lib/web/CXM_common.anubis
  23 +read calexium_lib/web/CXM_web_arg_utils.anubis
23 24 read calexium_lib/web/CXM_making_a_web_site.anubis
24 25 read calexium_lib/web/CXM_multihost_http_server.anubis
25 26 read calexium_lib/web/jQuery/CXM_jquery_datatable.anubis
26 27 read calexium_lib/web/jQuery/CXM_jquery_datatable_types.anubis
  28 +read calexium_lib/web/jQuery/CXM_jquery_dialog.anubis
27 29 read calexium_lib/web/jQuery/ui-addon/datetimepicker.anubis
28 30 read calexium_lib/web/CXM_form.anubis
29 31 read calexium_lib/web/widgets/css_helper.anubis
  32 +read calexium_lib/web/widgets/button.anubis
30 33  
31 34 define CXM_Form_Field
32 35 help_line
... ... @@ -76,9 +79,9 @@ public define List(CXM_Form_Field)
76 79 integer(s_name, c_name, value, help) then
77 80 [input(_T(s_name), wan(c_name), init(abs_to_decimal(value)), small, mandatory), help_line(help, _T)],
78 81 date(s_name, c_name, value, help) then
79   - [input([class("datepicker")], _T(s_name), htmlId(c_name), wan(c_name), init(value), narrow, non_mandatory), help_line(help, _T)],
  82 + [input([class("datepicker")], _T(s_name), htmlId(c_name), wan(c_name), init(value), small, non_mandatory), help_line(help, _T)],
80 83 datetime(s_name, c_name, value, help) then
81   - [input([class("datetimepicker")], _T(s_name), htmlId(c_name), wan(c_name), init(value), narrow, mandatory), help_line(help, _T)],
  84 + [input([class("datetimepicker")], _T(s_name), htmlId(c_name), wan(c_name), init(value), small, mandatory), help_line(help, _T)],
82 85 },
83 86 edit_form_lines(db, _T, t, reverse(line)+so_far)
84 87 }.
... ... @@ -92,15 +95,13 @@ public define HTML_Partial_Content
92 95 List(Web_arg) lwa,
93 96 VT_edit vt_elist
94 97 ) =
95   - //if tb is tool_box(lang, _T, _, _, db, _) then
96   - with table_name = vt_elist.table_name,
  98 + with table_name = vt_elist.table_name,
  99 + with button_name = if get_String(lwa, "id","none") = "none" then _T("CREATE") else _T("UPDATE"),
97 100 partial_content(jq_datetimepicker_init(lang),
98   - partial(html_wave_box(
99   - _T(to_upper(table_name)),
100 101 cxm_form( table_name, htmlId(table_name), lwa,
101 102 edit_form_lines(db, _T, vt_elist.list, [])+
102   - [ submit("create", failure, _T("CREATE"), [("table_name", table_name)]) ]
103   - )))).
  103 + [ submit("create", failure, button_name, [("table_name", table_name)]) ]
  104 + )).
104 105  
105 106 public define Maybe(HTML_Partial_Content)
106 107 edit_table_content
... ... @@ -125,41 +126,48 @@ public define Maybe(HTML_Partial_Content)
125 126 // View table part
126 127 define HTML_Row(HTML_Off_Form) make_line
127 128 (
128   - //ToolBox tb,
129 129 String table_name,
130 130 String action_name, //default is "edit_table", but can be surcharged for own use
131 131 List(VT_view_entry) entries,
132   - List(HTML_Cell(HTML_Off_Form)) so_far,
133   - Int odd_even
  132 + List(HTML_Cell(HTML_Off_Form)) so_far
134 133 )=
135 134 if entries is
136 135 {
137   - [] then
138   - with line = if odd_even = 0 then "tr_even" else "tr_odd",
139   - row( [core_attrs([class(line)])], reverse(so_far)),
  136 + [] then row( [], reverse(so_far)),
140 137 [h . t] then
141 138 with cell = if h is
142 139 {
143 140 text(string) then cell((HTML_Off_Form)text(string)),
144   - link(id, string) then cell((HTML_Off_Form)actioner(same,same, link(string), action_name, [("table_name", table_name),("id",id)])),
  141 +// link(id, string) then cell((HTML_Off_Form)actioner(same,same, link(string), action_name, [("table_name", table_name),("id",id)])),
  142 + link(id, string) then cell((HTML_Off_Form)literal(jq_dialog_open(string, dialog_id(action_name+"_dlg_ajax"), "'id="+id+"'"))),
145 143 icon(icon_path) then cell((HTML_Off_Form)image([], icon_path, ""))
146 144 },
147   - make_line(table_name, action_name, t, [cell . so_far], odd_even)
  145 + make_line(table_name, action_name, t, [cell . so_far])
148 146 }.
149 147  
150   -define List(HTML_Row(HTML_Off_Form)) make_lines
  148 +define List(HTML_Row(HTML_Off_Form))
  149 + make_lines
151 150 (
152   -// ToolBox tb,
  151 + (String) -> String _T, //translator
153 152 String table_name,
154 153 String action_name,
155 154 List(VT_view_row) entries,
156   - List(HTML_Row(HTML_Off_Form)) so_far,
157   - Int odd_even
  155 + List(HTML_Row(HTML_Off_Form)) so_far
158 156 )=
159 157 if entries is
160 158 {
161 159 [] then reverse(so_far),
162   - [h . t] then make_lines(table_name, action_name, t, [make_line(table_name, action_name, h.list, [], odd_even). so_far], 1 - odd_even )
  160 + [h . t] then
  161 + //compute each line
  162 + //prepare here the first cell for actioner
  163 + with actions_cell = (HTML_Cell(HTML_Off_Form))
  164 + cell([],
  165 + sequence([
  166 + 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))])))),
  167 + partial(img_button(icn16_edit, [event(onclick, jq_dialog_open(dialog_id(action_name+"_dlg_ajax"), "'id="+to_String(h.db_id)+"'"))], "", [])),
  168 + ])
  169 + ),
  170 + make_lines(_T, table_name, action_name, t, [make_line(table_name, action_name, h.list, [actions_cell]). so_far] )
163 171 }.
164 172  
165 173 // View table part
... ... @@ -170,7 +178,6 @@ define HTML_Header_Row(HTML_Off_Form)
170 178 List(VT_view_entry) entries,
171 179 List(HTML_Header_Cell(HTML_Off_Form)) so_far
172 180 )=
173   - //if tb is tool_box(lang, _T, _, _, db, _) then
174 181 if entries is
175 182 {
176 183 [] then header_row( [], reverse(so_far)),
... ... @@ -184,20 +191,26 @@ define HTML_Header_Row(HTML_Off_Form)
184 191 make_header(_T, t, [cell . so_far])
185 192 }.
186 193  
  194 +
187 195  
188   -public define HTML_Partial_Content view_table_form
  196 +public define HTML_Partial_Content
  197 + view_table_form
189 198 (
190 199 (String) -> String _T,
191 200 String action_name,
192 201 VT_view rows
193 202 )=
194   - //if tb is tool_box(_, _T, _, _, db, _) then
195   - partial_content(div( [class("tableau")],
  203 + with action_header_cell = header_cell((HTML_Off_Form)text(_T("ACTION"))),
  204 + partial_content(
  205 + div( [/*class("tableau")*/],
196 206 sequence(
197 207 [ actioner(same,same, link([class("my_button")],_T("NEW")),"edit_table",[("table_name", rows.table_name)]),
198   - table([core_attrs([id("table_view"), class("display compact nowrap")])],
199   - make_header(_T, rows.header.list, []),
200   - make_lines(rows.table_name, action_name, rows.list, [], 0))
  208 + //dialog used by datatable entries
  209 + partial(jq_dialog_create(dialog_id("edit_table_dlg_ajax"), ajax("?a=ajax_edit_table&table_name="+rows.table_name))),
  210 +
  211 + table([core_attrs([id("table_view"), class("tableau display compact nowrap")])],
  212 + make_header(_T, rows.header.list, [action_header_cell]),
  213 + make_lines(_T, rows.table_name, action_name, rows.list, []))
201 214 ]
202 215 )
203 216 ))
... ... @@ -216,9 +229,9 @@ public define HTML_Partial_Content
216 229 // if tb is tool_box(lang, _T, _, _, db, _) then
217 230 // println("view_table_page - lang : "+lang);
218 231 // println("view_table_page - web_site_directory : "+web_site_directory);
219   - partial_content(
220   - [html_wave_box_wide(_T(to_upper(rows.table_name)),
221   - jquery_datatable("table_view", view_table_form(_T, action_name, rows), true, false, jq_dt_pt_full_numbers, scrollY(500), true, true, true, lang, no_extra, web_site_directory))]).
  232 + partial_content(jq_dialog_init + jq_datetimepicker_init(lang),
  233 + [partial(html_wave_box_wide(_T(to_upper(rows.table_name)),
  234 + jquery_datatable("table_view", view_table_form(_T, action_name, rows), true, false, jq_dt_pt_full_numbers, scrollY(500), true, true, true, lang, no_extra, web_site_directory)))]).
222 235  
223 236 public define Maybe(HTML_Partial_Content)
224 237 view_table_content
... ...
database/vtm/view_table_types.anubis
... ... @@ -38,12 +38,15 @@ public type VT_view_entry:
38 38 text(String text),
39 39 link(String id, String text),
40 40 icon(String icon_path).
  41 +
  42 +public type VT_view_row_header:
  43 + vt_view_row_header(List(VT_view_entry) list).
41 44  
42 45 public type VT_view_row:
43   - vt_view_row(List(VT_view_entry) list).
  46 + vt_view_row(Int db_id, List(VT_view_entry) list).
44 47  
45 48 public type VT_view:
46   - vt_view(String table_name, String view_name, VT_view_row header, List(VT_view_row) list).
  49 + vt_view(String table_name, String view_name, VT_view_row_header header, List(VT_view_row) list).
47 50  
48 51  
49 52 public type VT_action:
... ...
mail/send_mail.anubis
... ... @@ -210,7 +210,7 @@ public define Result(SmtpClientResult, One)
210 210 ) =
211 211 send_mail(conn,
212 212 param,
213   - (SmtpClientSession sm_session, Send_Param param) |-> ok(param),
  213 + (SmtpClientSession sm_session, Send_Param parameter) |-> ok(parameter),
214 214 handle_result
215 215 ).
216 216  
... ...
web/CXM_common.anubis
... ... @@ -2,12 +2,15 @@
2 2 *Project* The Anubis Project
3 3 *Title* Some common stuff for the web.
4 4  
5   - *Copyright* Copyright (c) Alain Prouté 2003.
  5 + *Copyright*
  6 + Copyright (c) Alain Prouté 2003~2007.
  7 + © Calexium 2007~2016
6 8  
7 9  
8   -
9   - *Author* Alain Prouté
10   -
  10 + *Authors:*
  11 + Alain Prouté
  12 + David René
  13 +
11 14 *Public*
12 15 *Name* HTTP_header
13 16 *Description*
... ...
web/CXM_form.anubis
... ... @@ -142,6 +142,14 @@ public type CXM_Form_Field:
142 142 WebArgValue web_arg_value,
143 143 Bool checked,
144 144 Mandatory mandatory),
  145 + //radio_button_hide_show
  146 + radio_button_hide_show(
  147 + List(InputAttrs) options,
  148 + String label,
  149 + WebArgName web_arg_name,
  150 + WebArgValue web_arg_value,
  151 + Bool checked,
  152 + List(CXM_Form_Field) fields),
145 153 // the same one, but with the tag on the right of the radio_button
146 154 radio_buttonr (List(InputAttrs) options,
147 155 String label,
... ... @@ -408,12 +416,19 @@ public define HTML_In_Form
408 416 checkbox_hide_show(options, label, wan, val, checked, fields) then
409 417 with div_id = generate_random_string(15),
410 418 sequence([
411   - check_box([event(onclick, "checkbox_hide_show_element('"+div_id+"', this);")], label, htmlId(""), wan, val, get_Bool(lwa, wan.name, checked)),
  419 + check_box([class("in"), event(onclick, "checked_hide_show_element('"+div_id+"', this);")], label, htmlId(""), wan, val, get_Bool(lwa, wan.name, checked)),
412 420 div([id(div_id), style("display:"+if checked then "block" else "none")], sequence(map((CXM_Form_Field ff2) |-> div([class("form_field")], cxm_format_form_field(ff2, lwa)),fields)))
413 421 ]),
414 422  
415 423 radio_button(options, label, id, wan, val, checked, mand) then
416   - radio_button([class("in") . options], label + star(mand), id, wan, val, get_Bool(lwa, wan.name, checked)),
  424 + radio_button([class("in"), event(onclick, "radio_hide_show_group('"+wan.name+"', this);") . options], label + star(mand), id, wan, val, get_Bool(lwa, wan.name, checked)),
  425 +
  426 + radio_button_hide_show(options, label, wan, val, checked, fields) then
  427 + with div_id = generate_random_string(15),
  428 + sequence([
  429 + radio_button([data("show_id", div_id), class("in"), event(onclick, "radio_hide_show_group('"+wan.name+"', this);")], label, htmlId(""), wan, val, get_Bool(lwa, wan.name, checked)),
  430 + div([id(div_id), style("display:"+if checked then "block" else "none")], sequence(map((CXM_Form_Field ff2) |-> div([class("form_field")], cxm_format_form_field(ff2, lwa)),fields)))
  431 + ]),
417 432  
418 433 radio_buttonr(options, label, id, wan, val, checked, mand) then
419 434 radio_button_r([class("in") . options], label + star(mand), id, wan, val, get_Bool(lwa, wan.name, checked)),
... ...
web/CXM_making_a_web_site.anubis
... ... @@ -753,6 +753,7 @@ public type CoreAttrs:
753 753 public define CoreAttrs attr(String name, Bool value) = attr(name, if value then "true" else "false").
754 754  
755 755 public type InputAttrs:
  756 + id (String),
756 757 class (String),
757 758 style (String),
758 759 title (String),
... ... @@ -761,7 +762,9 @@ public type InputAttrs:
761 762 accesskey (Word8),
762 763 tabindex (Int),
763 764 attr (String, String),
764   - event (HtmlEvents, String).
  765 + event (HtmlEvents, String),
  766 + //HTML5
  767 + data (String name, String value).
765 768  
766 769 public define InputAttrs attr(String name, Bool value) = attr(name, if value then "true" else "false").
767 770  
... ... @@ -3225,6 +3228,8 @@ define String
3225 3228 [h . t] then
3226 3229 with current = if h is
3227 3230 {
  3231 + id(id_name) then
  3232 + " id=\"" + id_name + "\"",
3228 3233 class(class_name) then
3229 3234 format_attrs(t, [class_name. classes], styles),
3230 3235 style(style_string) then
... ... @@ -3251,6 +3256,8 @@ define String
3251 3256  
3252 3257 event(e, value) then
3253 3258 " " + event_name(e) + "=\"" + value + "\"",
  3259 + data(name, value) then
  3260 + " data-" + to_lower(name) + "=\"" + value + "\"",
3254 3261 },
3255 3262 current + format_attrs(t, classes, styles)
3256 3263 }.
... ... @@ -3457,10 +3464,17 @@ define Printable_tree
3457 3464 "</a>"
3458 3465 ],
3459 3466 img_link(options, img, alt_text) then
3460   - [
3461   - "<a href=\"", url,"\"", format_attrs(options),"><img src=\"", img,
3462   - "\" alt=\"" + alt_text + "\" border=\"0\"></a>"
3463   - ],
  3467 + //if action name is empty, format options on image because maybe there onclick action
  3468 + if action_name ="" then
  3469 + [
  3470 + "<img src=\"", img,"\"",
  3471 + format_attrs(options)," alt=\"" + alt_text + "\" border=\"0\">"
  3472 + ]
  3473 + else
  3474 + [
  3475 + "<a href=\"", url,"\"", format_attrs(options),"><img src=\"", img,
  3476 + "\" alt=\"" + alt_text + "\" border=\"0\"></a>"
  3477 + ],
3464 3478 push_button(options, text) then
3465 3479 [
3466 3480 if action is
... ...
web/CXM_multihost_http_server.anubis
... ... @@ -3220,8 +3220,8 @@ define One
3220 3220  
3221 3221 if get_socket_from_connection(conn(connection)) is
3222 3222 {
3223   - failure then println("can't get socket"),
3224   - success(source) then
  3223 + failure then println("can't get socket"),
  3224 + success(socket_type) then
3225 3225  
3226 3226 with tmp_body_file = "/temp/" + virtual_machine_id + "-" + now,
3227 3227 if (Maybe(RWStream))file(desc.site_directory + tmp_body_file, new) is
... ... @@ -3238,18 +3238,37 @@ define One
3238 3238 {
3239 3239 failure then println("Can't flush the buffer"),
3240 3240 success(_) then
3241   - if copy_file(weaken(source), weaken(target), body_size - buffer_size) is copy_ok(read_size) then
3242   -
3243   - with duration = (UTime) unow - t0,
3244   - println("Read body "+read_size+" duration: " + __utime_to_string(duration));
3245   -
3246   - multipart_form_data_answer(host_name, desc, connection.conn, ip_addr, rqline2, headers, desc.site_directory + tmp_body_file, generate_tt, s);
3247   -
3248   - //it's HTTP 1.1 keep-alive is default
3249   - http_https_handler(sites, connection, is_https, dos, s)
3250   -
3251   - else
3252   - println("Can't copy data from stream to temporary file ")
  3241 + if socket_type is
  3242 + {
  3243 + tcp_socket(source) then
  3244 +
  3245 + if copy_file(weaken(source), weaken(target), body_size - buffer_size) is copy_ok(read_size) then
  3246 +
  3247 + with duration = (UTime) unow - t0,
  3248 + println("Read body "+read_size+" duration: " + __utime_to_string(duration));
  3249 +
  3250 + multipart_form_data_answer(host_name, desc, connection.conn, ip_addr, rqline2, headers, desc.site_directory + tmp_body_file, generate_tt, s);
  3251 +
  3252 + //it's HTTP 1.1 keep-alive is default
  3253 + http_https_handler(sites, connection, is_https, dos, s)
  3254 +
  3255 + else
  3256 + println("Can't copy data from stream to temporary file "),
  3257 +
  3258 + ssl_socket(source) then
  3259 + if copy_file(source, weaken(target), body_size - buffer_size) is copy_ok(read_size) then
  3260 +
  3261 + with duration = (UTime) unow - t0,
  3262 + println("Read body "+read_size+" duration: " + __utime_to_string(duration));
  3263 +
  3264 + multipart_form_data_answer(host_name, desc, connection.conn, ip_addr, rqline2, headers, desc.site_directory + tmp_body_file, generate_tt, s);
  3265 +
  3266 + //it's HTTP 1.1 keep-alive is default
  3267 + http_https_handler(sites, connection, is_https, dos, s)
  3268 +
  3269 + else
  3270 + println("Can't copy data from stream to temporary file ")
  3271 + }
3253 3272 }}}
3254 3273 else
3255 3274 println("body_size = 0 !")
... ...
web/CXM_web_arg_utils.anubis
... ... @@ -30,6 +30,7 @@ public define DB_id
30 30 success(_value) then db_id(_value)
31 31 }
32 32 }.
  33 +
33 34 public define Maybe(DB_date)
34 35 get_DB_date
35 36 (
... ... @@ -225,10 +226,10 @@ public define Maybe(Word32)
225 226 ) =
226 227 if get_Word32(lwa, name) is
227 228 {
228   - failure then /*logDebug(debug_log, "Can't convert argument '" + name + "' to integer.");*/ failure
  229 + failure then failure
229 230 success(value) then
230 231 if value +< min | value >+ max then
231   - /*logDebug(debug_log, "The entered value (" + val + ")is out of boundaries [" + min + "," + max + "].");*/ failure
  232 + failure
232 233 else
233 234 success(value)
234 235 }.
... ... @@ -270,10 +271,10 @@ public define Maybe(Word8)
270 271 ) =
271 272 if get_Word8(lwa, name) is
272 273 {
273   - failure then /*logDebug(debug_log, "Can't convert argument '" + name + "' to integer.");*/ failure
  274 + failure then failure
274 275 success(value) then
275 276 if value +< min | value >+ max then
276   - /*logDebug(debug_log, "The entered value (" + val + ")is out of boundaries [" + min + "," + max + "].");*/ failure
  277 + failure
277 278 else
278 279 success(value)
279 280 }.
... ...
web/jQuery/CXM_jquery_dialog.anubis
... ... @@ -100,7 +100,25 @@ public define String
100 100 String params
101 101 )=
102 102 _jq_dialog_open(success(html), dialog_id, params).
103   -
  103 +
  104 +public define HTML_Partial_Content
  105 + jq_dialog_open
  106 + (
  107 + String html,
  108 + JQuery_dialog_id dialog_id,
  109 + String params
  110 + )=
  111 + partial_content([],
  112 + literal(_jq_dialog_open(success(html), dialog_id, params))).
  113 +
  114 +public define String
  115 + jq_dialog_open
  116 + (
  117 + JQuery_dialog_id dialog_id,
  118 + String params
  119 + )=
  120 + _jq_dialog_open(failure, dialog_id, params).
  121 +
104 122 public define String
105 123 jq_dialog_open
106 124 (
... ...
web/widgets/button.anubis
... ... @@ -7,7 +7,7 @@
7 7 */
8 8  
9 9 read calexium_lib/web/CXM_making_a_web_site.anubis
10   -read calexium_lib/web/CXM_jquery.anubis
  10 +transmit calexium_lib/web/CXM_jquery.anubis
11 11 read calexium_lib/web/CXM_json.anubis
12 12 read calexium_lib/web/js_tools.anubis
13 13 transmit calexium_lib/web/widgets/icons_set.anubis
... ... @@ -51,7 +51,7 @@ public define HTML_Partial_Content
51 51 String url,
52 52 List((String, String)) extra_ops
53 53 )=
54   - partial_content(actioner(same, same, img_link(core_attrs, img_path, ""), url, extra_ops)).
  54 + partial_content(actioner(same, same, img_link(core_attrs+[style("cursor: pointer")], img_path, ""), url, extra_ops)).
55 55  
56 56 public define HTML_Partial_Content
57 57 img_button
... ...