diff options
| author | historia <[not public]> | 2026-07-10 17:02:13 -0400 |
|---|---|---|
| committer | historia <[not public]> | 2026-07-10 17:02:13 -0400 |
| commit | d02f0d2cdf67f1445a9ccae86b99a2578adab585 (patch) | |
| tree | fc2caae674d20b9ac31aa0da41f4f600f8f801a9 /internal/admin/static/itemeditor.js | |
| parent | 18d46f9c336d37d0282eb7191bb7ff930163d18f (diff) | |
| download | thehouseoficarus-d02f0d2cdf67f1445a9ccae86b99a2578adab585.tar.gz | |
feat(admin): update search to use standard condition/action framework rather than bespoke implementation
Diffstat (limited to 'internal/admin/static/itemeditor.js')
| -rw-r--r-- | internal/admin/static/itemeditor.js | 74 |
1 files changed, 61 insertions, 13 deletions
diff --git a/internal/admin/static/itemeditor.js b/internal/admin/static/itemeditor.js index a86d240..53242ab 100644 --- a/internal/admin/static/itemeditor.js +++ b/internal/admin/static/itemeditor.js @@ -84,13 +84,9 @@ var SECTIONS = [ ] }, { - id: 'search', label: 'Search', - detect: function(d) { return d.search_table || d.search_ticks; }, - fields: [ - ['search_table', 'Search Table', 'search', 'e.g. gem_table', '', null, 'drops'], - ['search_ticks', 'Search Ticks', 'number', '8', 'narrow'], - ['search_message', 'Search Message', 'text', 'You search...', 'wide'], - ] + id: 'search', label: 'Search', path: 'search', isArray: true, fullWidth: true, interactionStyle: true, itemIDAllowed: false, + detect: function(d) { return d.search && Array.isArray(d.search); }, + fields: [] }, { id: 'food', label: 'Food', @@ -126,6 +122,9 @@ var SECTIONS = [ ]; function initItemEditor() { + window._ieRenderCurrent = renderCurrent; + window._ieRenderOnly = function() { if (itemID && itemData) renderItemEditor(itemID, itemData); }; + window._ieSyncAll = function(ed) { if (ed) ie_syncAllInteractions(ed, SECTIONS); }; editorType = 'items'; editorFields = []; loadList(); @@ -167,6 +166,7 @@ function loadItemEditor(id) { API.get('/api/items/' + encodeURIComponent(id)).then(function(data) { itemData = data; window._editorData = itemData; + window._interVis = {}; renderItemEditor(id, data); }).catch(function(e) { $('#editorMain').innerHTML = '<p style="color:var(--danger)">Failed to load: ' + esc(e.message) + '</p>'; @@ -225,6 +225,7 @@ function renderItemEditor(id, data) { function renderCurrent() { ced_syncDOMToData(itemData); + if (window._ieSyncAll) window._ieSyncAll(itemData); if (!itemData || !itemID) return; renderItemEditor(itemID, itemData); } @@ -250,7 +251,22 @@ function renderCard(sec, data) { h += '<div class="obj-card-body">'; if (sec.isArray) { - h += renderArraySection(sec, data); + if (sec.interactionStyle) { + window._interVis = window._interVis || {}; + if (!window._interVis[sec.id]) window._interVis[sec.id] = {}; + h += ie_renderArraySection({ + sec: sec, + data: data, + visMap: window._interVis[sec.id], + showRemove: function(idx) { return 'removeArrayItem(\'' + sec.id + '\',' + idx + ')'; }, + showField: function(secId, idx, key) { return 'showInterField(\'' + secId + '\',' + idx + ',\'' + key + '\')'; }, + hideField: function(secId, idx, key) { return 'hideInterField(\'' + secId + '\',' + idx + ',\'' + key + '\')'; }, + renderField: function(sec, f, data, idx, optStyle) { return renderField(sec, f, data, idx, null, optStyle); }, + onAdd: function() { return 'addArrayItem(\'' + sec.id + '\')'; }, + }); + } else { + h += renderArraySection(sec, data); + } } else if (sec.id === 'core') { h += renderCoreCard(data); } else if (sec.id === 'equipment') { @@ -964,6 +980,8 @@ function addSection() { if (sec.path) { if (sec.id === 'equipment') { itemData.equipment = {type:'', slot:'', attack_type:'', speed:0, junk:''}; + } else if (sec.isArray && sec.interactionStyle) { + itemData[sec.path] = []; } else { itemData[sec.path] = {}; } @@ -981,11 +999,15 @@ function addArrayItem(cardID) { var sec = SECTIONS.find(function(s) { return s.id === cardID; }); if (!sec || !sec.isArray) return; var arr = itemData[sec.path] || []; - var empty = {}; - sec.fields.forEach(function(f) { - empty[f[0]] = f[2] === 'checkbox' ? false : (f[2] === 'number' ? 0 : ''); - }); - arr.push(empty); + if (sec.interactionStyle) { + arr.push({steps: []}); + } else { + var empty = {}; + sec.fields.forEach(function(f) { + empty[f[0]] = f[2] === 'checkbox' ? false : (f[2] === 'number' ? 0 : ''); + }); + arr.push(empty); + } itemData[sec.path] = arr; renderCurrent(); } @@ -994,11 +1016,24 @@ function removeArrayItem(cardID, idx) { var sec = SECTIONS.find(function(s) { return s.id === cardID; }); if (!sec || !sec.isArray) return; ced_syncDOMToData(itemData); + if (window._ieSyncAll) window._ieSyncAll(itemData); var arr = itemData[sec.path] || []; arr.splice(idx, 1); renderItemEditor(itemID, itemData); } +function showInterField(secId, idx, key) { + window._interVis = window._interVis || {}; + ie_showField(window._interVis, secId, idx, key); + renderCurrent(); +} + +function hideInterField(secId, idx, key) { + window._interVis = window._interVis || {}; + ie_hideField(window._interVis, secId, idx, key); + renderCurrent(); +} + // ========================================================================= // Subtable row add/remove // ========================================================================= @@ -1332,6 +1367,19 @@ function saveItem() { var el = document.getElementById(fid); if (el) item[f[0]] = collectFieldValue(el, f[2]); }); + if (sec.interactionStyle) { + var dataArr = itemData[sec.path] || []; + var dataItem = dataArr[idx] || {}; + if (dataItem.condition && typeof dataItem.condition === 'object') { + var cleanedCond = ie_cleanCondition(dataItem.condition); + if (cleanedCond) item.condition = cleanedCond; + } + if (dataItem.lock) item.lock = true; + if (dataItem.steps && Array.isArray(dataItem.steps)) { + var cleanedSteps = dataItem.steps.map(ie_cleanStep).filter(function(s) { return Object.keys(s).length > 0; }); + if (cleanedSteps.length > 0) item.steps = cleanedSteps; + } + } if (Object.keys(item).length > 0) arr.push(item); }); if (arr.length > 0) out[sec.path] = arr; |
