diff --git a/gluon/sqlhtml.py b/gluon/sqlhtml.py index a2a413ae..502e50d3 100644 --- a/gluon/sqlhtml.py +++ b/gluon/sqlhtml.py @@ -2415,13 +2415,38 @@ class SQLFORM(FORM): htmltable, _class='web2py_htmltable', _style='width:100%;overflow-x:auto;-ms-overflow-x:scroll') if selectable: - htmltable = FORM(htmltable, INPUT( - _type="submit", _value=T(selectable_submit_button))) + if not callable(selectable): + #now expect that selectable and related parameters are iterator (list, tuple, etc) + inputs = [] + for i, submit_info in enumerate(selectable): + submit_text = submit_info[0] + submit_class = submit_info[2] if len(submit_info) > 2 else '' + + input_ctrl = INPUT(_type="submit", _name='submit_%d' % i, _value=T(submit_text)) + input_ctrl.add_class(submit_class) + inputs.append(input_ctrl) + else: + inputs = [INPUT(_type="submit", _value=T(selectable_submit_button))] + + if formstyle == 'bootstrap': + # add space between buttons + #inputs = sum([[inp, ' '] for inp in inputs], [])[:-1] + htmltable = FORM(htmltable, DIV(_class='form-actions', *inputs)) + else: + htmltable = FORM(htmltable, *inputs) + if htmltable.process(formname=formname).accepted: htmltable.vars.records = htmltable.vars.records or [] htmltable.vars.records = htmltable.vars.records if type(htmltable.vars.records) == list else [htmltable.vars.records] records = [int(r) for r in htmltable.vars.records] - selectable(records) + if not callable(selectable): + for i, submit_info in enumerate(selectable): + submit_callback = submit_info[1] + if htmltable.vars.get('submit_%d' % i, False): + submit_callback(records) + break + else: + selectable(records) redirect(referrer) else: htmltable = DIV(T('No records found'))