aboutsummaryrefslogtreecommitdiff
path: root/internal/admin/static/cardeditor.js
diff options
context:
space:
mode:
Diffstat (limited to 'internal/admin/static/cardeditor.js')
-rw-r--r--internal/admin/static/cardeditor.js35
1 files changed, 35 insertions, 0 deletions
diff --git a/internal/admin/static/cardeditor.js b/internal/admin/static/cardeditor.js
index 83eed2e..b29b814 100644
--- a/internal/admin/static/cardeditor.js
+++ b/internal/admin/static/cardeditor.js
@@ -130,6 +130,41 @@ function ced_addKVSearchRow(cardID, subKey, entity) {
ced_setupSearchFields(row);
}
+function ced_renderKVSelect(sec, il, data, getter) {
+ var sectionRoot = data[ced_cardPath(sec)] || data;
+ var map = getter ? getter(sectionRoot, il) : (sectionRoot[il.key] || {});
+ var options = il.options || [];
+ var h = '<div class="obj-inline-group">';
+ h += '<span class="obj-inline-label">' + esc(il.label) + '</span>';
+ h += '<div class="obj-kv-list" data-sec="' + sec.id + '" data-key="' + il.key + '" data-options="' + escAttr(JSON.stringify(options)) + '">';
+ Object.keys(map).forEach(function(k, idx) {
+ h += '<div class="obj-kv-row">';
+ h += '<select class="obj-kv-key" style="flex:1">';
+ options.forEach(function(opt) {
+ h += '<option value="' + escAttr(opt) + '"' + (k === opt ? ' selected' : '') + '>' + esc(opt) + '</option>';
+ });
+ h += '</select>';
+ h += '<input value="' + escAttr(String(map[k])) + '" placeholder="qty" class="obj-kv-val">';
+ h += '<button class="btn btn-sm btn-danger" onclick="this.parentElement.remove()">X</button></div>';
+ });
+ h += '</div>';
+ h += '<button class="btn btn-sm obj-sub-add" onclick="ced_addKVSelectRow(\'' + sec.id + '\',\'' + il.key + '\')">+ Add</button>';
+ h += '</div>';
+ return h;
+}
+
+function ced_addKVSelectRow(cardID, subKey) {
+ var el = document.querySelector('.obj-kv-list[data-sec="' + cardID + '"][data-key="' + subKey + '"]');
+ if (!el) return;
+ var opts = [];
+ try { opts = JSON.parse(el.getAttribute('data-options') || '[]'); } catch(e) {}
+ var optsHTML = opts.map(function(opt) { return '<option value="' + escAttr(String(opt)) + '">' + esc(String(opt)) + '</option>'; }).join('');
+ var row = document.createElement('div');
+ row.className = 'obj-kv-row';
+ row.innerHTML = '<select class="obj-kv-key" style="flex:1">' + optsHTML + '</select><input value="" placeholder="qty" class="obj-kv-val"><button class="btn btn-sm btn-danger" onclick="this.parentElement.remove()">X</button>';
+ el.appendChild(row);
+}
+
// ---- Search autocomplete ----
function ced_setupSearchFields(root) {