Development

This commit is contained in:
Matthew Grotke 2026-05-29 22:16:56 -04:00
parent 263639eb95
commit aff93abf5f
2 changed files with 69 additions and 5 deletions

View file

@ -343,6 +343,61 @@ def build_table_picker(name, label, value, rows, headers, summary_config, action
])
summary_attr = f' data-summary="{e(summary_json)}"'
script = (
'<script>(function(){'
'var _fg=document.currentScript.previousElementSibling;'
'var _pk=_fg.querySelector(\'.table-picker\');'
'var _btn=_pk.querySelector(\'.table-picker-btn\');'
'var _hdr=_pk.querySelector(\'.table-picker-header\');'
'var _dd=_pk.querySelector(\'.table-picker-dropdown\');'
'var _hid=_pk.querySelector(\'input[type="hidden"]\');'
'var _sc=JSON.parse(_pk.dataset.summary||\'[]\');'
'function _apply(key){'
'var row=_dd.querySelector(\'.table-picker-row[data-key="\'+key+\'"]\');'
'if(!row)return;'
'_btn.querySelector(\'.table-picker-name\').textContent=row.dataset.label||key;'
'var badge=_btn.querySelector(\'.table-picker-badge\');'
'if(row.dataset.badgeClass){'
'if(!badge){badge=document.createElement(\'span\');_btn.appendChild(badge);}'
'badge.className=\'badge \'+row.dataset.badgeClass+\' table-picker-badge\';'
'badge.textContent=row.dataset.badgeLabel||\'\';'
'}else if(badge){badge.remove();}'
'if(_sc.length){'
'var stats=_hdr.querySelector(\'.table-picker-stats\');'
'if(!stats){'
'stats=document.createElement(\'table\');'
'stats.className=\'table-picker-stats\';'
'var hc=_sc.map(function(c){return\'<th>\'+htmlEsc(c.label)+\'</th>\';}).join(\'\');'
'stats.innerHTML=\'<thead><tr>\'+hc+\'</tr></thead><tbody><tr></tr></tbody>\';'
'_hdr.appendChild(stats);'
'}'
'var dc=_sc.map(function(c){'
'var v=row.dataset[c.field]!==undefined?row.dataset[c.field]:\'-\';'
'return\'<td\'+(c.mono?\' class="col-mono"\':\'\')+\'>\'+htmlEsc(v)+\'</td>\';'
'}).join(\'\');'
'stats.querySelector(\'tbody tr\').innerHTML=dc;'
'}'
'_dd.querySelectorAll(\'.table-picker-row\').forEach(function(r){'
'r.classList.toggle(\'selected\',r===row);'
'});'
'}'
'_hid.addEventListener(\'change\',function(){_apply(_hid.value);});'
'_btn.addEventListener(\'click\',function(e){'
'e.stopPropagation();'
'var wasOpen=_dd.classList.contains(\'open\');'
'tablePickerCloseAll();'
'if(!wasOpen)_dd.classList.add(\'open\');'
'});'
'_dd.addEventListener(\'click\',function(e){e.stopPropagation();});'
'_dd.querySelectorAll(\'.table-picker-row\').forEach(function(row){'
'row.addEventListener(\'click\',function(){'
'_hid.value=this.dataset.key;'
'tablePickerCloseAll();'
'_hid.dispatchEvent(new Event(\'change\',{bubbles:true}));'
'});'
'});'
'})();</script>'
)
return (
'<div class="form-group">'
f'<label class="form-label">{e(label)}</label>'
@ -356,6 +411,7 @@ def build_table_picker(name, label, value, rows, headers, summary_config, action
f'<div class="table-picker-dropdown">{table_html}</div>'
'</div>'
'</div>'
f'{script}'
)
# Field renderer ======================================================