From 21c1997a3fd0f5ec5dcff1add45e4dfaf7a338ca Mon Sep 17 00:00:00 2001 From: historia <[not public]> Date: Sun, 5 Jul 2026 03:45:48 -0400 Subject: fix: use interaction cards in admin gui work, fix card css on object tab --- internal/admin/static/cardeditor.js | 41 ++++++++++++++++++++++++++++++++++++- 1 file changed, 40 insertions(+), 1 deletion(-) (limited to 'internal/admin/static/cardeditor.js') diff --git a/internal/admin/static/cardeditor.js b/internal/admin/static/cardeditor.js index 0235894..f2316e1 100644 --- a/internal/admin/static/cardeditor.js +++ b/internal/admin/static/cardeditor.js @@ -166,12 +166,42 @@ function ced_selectSearchResult(el) { var idx = Array.prototype.indexOf.call(results.children, el); if (results._items && results._items[idx] && results._targetInput) { results._targetInput.value = results._items[idx].id; + ced_persistSearchToData(results._targetInput, results._items[idx].id); results._targetInput.dispatchEvent(new Event('input')); results.style.display = 'none'; results.innerHTML = ''; } } +function ced_persistSearchToData(input, value) { + var ed = window._editorData; + var dataPath = input.getAttribute('data-data-path'); + if (!ed || !dataPath) return; + var m = dataPath.match(/^(.+)\[(\d+)\]\.(.+)$/); + if (m) { + var arr = ced_resolveDataPath(ed, m[1]); + if (arr && Array.isArray(arr)) { + if (!arr[m[2]]) arr[m[2]] = {}; + arr[m[2]][m[3]] = value; + } + } else { + var m2 = dataPath.match(/^(.+)\.(.+)$/); + if (m2) { + var obj = ced_resolveDataPath(ed, m2[1]); + if (obj) obj[m2[2]] = value; + } else { + ed[dataPath] = value; + } + } +} + +function ced_resolveDataPath(obj, path) { + return path.split('.').reduce(function(o, k) { + if (o === undefined || o === null) return undefined; + return o[k] !== undefined ? o[k] : undefined; + }, obj); +} + function ced_updateSearchHighlight(results) { for (var i = 0; i < results.children.length; i++) { results.children[i].classList.toggle('active', i === results._selectedIndex); @@ -240,7 +270,16 @@ function ced_renderField(sec, f, data, idx, subPath, optStyle, cardPathFn, field if (type === 'search') { var entity = searchEntity || 'items'; var ph = hint ? ' placeholder="' + esc(hint) + '"' : ' placeholder="Search ' + entity + '..."'; - return wrap('obj-field obj-search', '' + esc(label) + '
'); + var pfx = cardPathFn(sec); + var dp; + if (idx >= 0) { + dp = pfx + '[' + idx + '].' + key; + } else if (subPath) { + dp = (pfx ? pfx + '.' : '') + subPath + '.' + key; + } else { + dp = (pfx ? pfx + '.' : '') + key; + } + return wrap('obj-field obj-search', '' + esc(label) + '
'); } var ph = hint ? ' placeholder="' + esc(hint) + '"' : ''; return wrap('obj-field', '' + esc(label) + ''); -- cgit v1.2.3