'
+ expanded_ra_fields = {
+ i: _expand_fields(ra.get('fields', []), tokens)
+ for i, ra in enumerate(row_actions)
+ if ra.get('method', 'post').lower() == 'inline_edit'
+ }
+
if not rows:
colspan = len(columns) + (1 if row_actions else 0)
tbody = f'
{empty}
'
@@ -1845,7 +1917,7 @@ def _render_table(item, tokens, inherited_req=None):
)
if row_actions:
btns = ''
- for ra in row_actions:
+ for ra_i, ra in enumerate(row_actions):
req = ra.get('client_requirement', inherited_req)
if not _passes(req, level):
continue
@@ -1869,29 +1941,39 @@ def _render_table(item, tokens, inherited_req=None):
row_json = e(json.dumps(row))
btns += (
f''
)
elif method == 'inline_edit':
- fields_json = e(json.dumps(_expand_fields(ra.get('fields', []), tokens)))
+ expanded = expanded_ra_fields.get(ra_i, [])
+ fields_json = e(json.dumps(expanded))
row_json = e(json.dumps(row))
+ worker_id = _get_worker_id(item.get('datasource', ''))
+ has_nonstandard = any(
+ f.get('input_type', 'text') not in _STANDARD_INPUT_TYPES
+ for f in expanded
+ )
+ worker_attr = f' data-worker-id="{e(worker_id)}"' if has_nonstandard and worker_id else ''
btns += (
- f''
+ f' data-action="{action}" data-fields="{fields_json}"{worker_attr}>{text}'
)
else:
btns += f'{text}'
cells += f'