aboutsummaryrefslogtreecommitdiff
path: root/internal/admin/static/cardeditor.js
diff options
context:
space:
mode:
authorhistoria <[not public]>2026-07-05 03:45:48 -0400
committerhistoria <[not public]>2026-07-05 03:45:48 -0400
commit21c1997a3fd0f5ec5dcff1add45e4dfaf7a338ca (patch)
tree3a63fb257837c0f7545eab0cada4c24b8ce67e84 /internal/admin/static/cardeditor.js
parent81f3e3bae7d82f0e0ad72d89ea5a5fdae8804712 (diff)
downloadthehouseoficarus-21c1997a3fd0f5ec5dcff1add45e4dfaf7a338ca.tar.gz
fix: use interaction cards in admin gui work, fix card css on object tab
Diffstat (limited to 'internal/admin/static/cardeditor.js')
-rw-r--r--internal/admin/static/cardeditor.js41
1 files changed, 40 insertions, 1 deletions
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', '<span>' + esc(label) + '</span><div style="position:relative;width:100%"><input id="' + fid + '" value="' + escAttr(String(val)) + '" class="search-input" data-search-type="' + entity + '"' + ph + '><div class="search-results" style="display:none"></div></div>');
+ 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', '<span>' + esc(label) + '</span><div style="position:relative;width:100%"><input id="' + fid + '" value="' + escAttr(String(val)) + '" class="search-input" data-search-type="' + entity + '" data-data-path="' + escAttr(dp) + '"' + ph + '><div class="search-results" style="display:none"></div></div>');
}
var ph = hint ? ' placeholder="' + esc(hint) + '"' : '';
return wrap('obj-field', '<span>' + esc(label) + '</span><input id="' + fid + '" value="' + escAttr(String(val)) + '"' + ph + '>');