From 9b54188970c51070d86f4c87e909ea7836c86f07 Mon Sep 17 00:00:00 2001 From: historia <[not public]> Date: Sun, 5 Jul 2026 16:42:01 -0400 Subject: fix: restructure steal yaml, update admin web gui --- internal/admin/static/objecteditor.js | 177 ++++++++++++++++++++++++++-------- 1 file changed, 137 insertions(+), 40 deletions(-) (limited to 'internal/admin/static/objecteditor.js') diff --git a/internal/admin/static/objecteditor.js b/internal/admin/static/objecteditor.js index c80cb57..f8ef18a 100644 --- a/internal/admin/static/objecteditor.js +++ b/internal/admin/static/objecteditor.js @@ -18,14 +18,14 @@ var SECTIONS = [ ] }, { - id: 'steal', label: 'Steal', - detect: function(d) { return d.steal_table !== undefined || d.steal_level !== undefined || d.steal_speed !== undefined || d.steal_xp !== undefined || d.guard_mob !== undefined; }, + id: 'steal', label: 'Steal', path: 'steal', + detect: function(d) { return d.steal !== undefined; }, fields: [ - ['steal_table', 'Table ID', 'text'], - ['steal_level', 'Level', 'number', '', 'narrow'], - ['steal_xp', 'XP', 'number', '', 'narrow'], - ['steal_speed', 'Speed', 'number', '', 'narrow'], - ['guard_mob', 'Guard Mob', 'text'], + ['table', 'Table ID', 'search', '', '', null, 'drops'], + ['level', 'Level', 'number', '1', 'narrow'], + ['xp', 'XP', 'number', '5', 'narrow'], + ['speed', 'Speed', 'number', '4', 'narrow'], + ['guard_mob', 'Guard Mob', 'search', '', '', null, 'mobs'], ] }, { @@ -148,6 +148,8 @@ function loadObject(id) { window._editorData = objectData; window._useInterVis = {}; window._useInterHelpCollapsed = undefined; + window._coreVis = {}; + window._stealVis = {}; renderObjectEditor(id, data); }).catch(function(e) { $('#editorMain').innerHTML = '

Failed to load: ' + esc(e.message) + '

'; @@ -250,6 +252,8 @@ function renderCard(sec, data) { h += renderArraySection(sec, data); } else if (sec.id === 'core') { h += renderCoreCard(data); + } else if (sec.id === 'steal') { + h += renderStealCard(data); } else { h += '
'; sec.fields.forEach(function(f) { @@ -351,6 +355,17 @@ function renderField(sec, f, data, idx, subPath, optStyle) { if (!showIf(sectionData)) hiddenStyle = ' style="display:none"'; } + var pfx = cardPath(sec); + var dp; + if (idx >= 0) { + dp = pfx + '[' + idx + '].' + key; + } else if (subPath) { + dp = (pfx ? pfx + '.' : '') + subPath + '.' + key; + } else { + dp = (pfx ? pfx + '.' : '') + key; + } + var dpAttr = ' data-field-path="' + escAttr(dp) + '"'; + function wrap(cls, inner) { var w = (wide === 'wide') ? ' obj-wide' : ''; if (wide === 'narrow') w = ' obj-narrow'; @@ -359,19 +374,19 @@ function renderField(sec, f, data, idx, subPath, optStyle) { } if (type === 'checkbox') { - return wrap('obj-field obj-check', ' ' + esc(label) + ''); + return wrap('obj-field obj-check', ' ' + esc(label) + ''); } if (type === 'json') { var jstr = typeof val === 'object' ? JSON.stringify(val) : String(val); - return wrap('obj-field', '' + esc(label) + ''); + return wrap('obj-field', '' + esc(label) + ''); } if (type === 'textarea') { var dstr = typeof val === 'object' ? (Array.isArray(val) ? val.map(function(v){return v.text||'';}).join('\n') : JSON.stringify(val)) : String(val); - return wrap('obj-field', '' + esc(label) + ''); + return wrap('obj-field', '' + esc(label) + ''); } if (type === 'select') { var opts = hint ? hint.split('|') : []; - var inner = '' + esc(label) + ''; opts.forEach(function(o) { inner += ''; }); @@ -380,39 +395,93 @@ function renderField(sec, f, data, idx, subPath, optStyle) { } if (type === 'color') { var swatch = ''; - return wrap('obj-field color-field', '' + esc(label) + '
' + swatch + '
'); + return wrap('obj-field color-field', '' + esc(label) + '
' + swatch + '
'); } if (type === 'search') { var entity = searchEntity || 'items'; var ph = hint ? ' placeholder="' + esc(hint) + '"' : ' placeholder="Search ' + entity + '..."'; - var pfx = cardPath(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) + '
'); + return wrap('obj-field obj-search', '' + esc(label) + '
'); } var ph = hint ? ' placeholder="' + esc(hint) + '"' : ''; - return wrap('obj-field', '' + esc(label) + ''); + return wrap('obj-field', '' + esc(label) + ''); } function renderCoreCard(data) { var sec = SECTIONS[0]; + window._coreVis = window._coreVis || {}; + var vis = window._coreVis; + var showAliases = vis.aliases || (data.aliases && data.aliases.length > 0); + var showInRoom = vis.inroom_description || (data.inroom_description && data.inroom_description !== ''); + var showRemoval = vis.removal_item || (data.removal_item && data.removal_item !== ''); + var h = '
'; h += renderField(sec, sec.fields[0], data, -1, null, 'flex:1'); // name - h += renderField(sec, sec.fields[2], data, -1, null, 'flex:2'); // aliases h += renderField(sec, sec.fields[1], data, -1); // color h += renderField(sec, sec.fields[3], data, -1); // hidden h += '
'; h += '
'; h += renderField(sec, sec.fields[5], data, -1); // description - h += renderField(sec, sec.fields[4], data, -1); // in-room description - h += renderField(sec, sec.fields[6], data, -1); // removal item + + if (showAliases) { + h += '
'; + h += '
' + renderField(sec, sec.fields[2], data, -1, null, 'flex:2') + '
'; + h += ''; + h += '
'; + } + if (showInRoom) { + h += '
'; + h += '
' + renderField(sec, sec.fields[4], data, -1) + '
'; + h += ''; + h += '
'; + } + if (showRemoval) { + h += '
'; + h += '
' + renderField(sec, sec.fields[6], data, -1) + '
'; + h += ''; + h += '
'; + } h += '
'; + + h += '
'; + if (!showAliases) { + h += ''; + } + if (!showInRoom) { + h += ''; + } + if (!showRemoval) { + h += ''; + } + h += '
'; + + return h; +} + +function renderStealCard(data) { + var sec = SECTIONS[1]; + window._stealVis = window._stealVis || {}; + var vis = window._stealVis; + var stealData = data.steal || {}; + var showGuard = vis.guard_mob || (stealData.guard_mob && stealData.guard_mob !== ''); + + var h = '
'; + h += '
' + renderField(sec, sec.fields[0], data, -1) + '
'; + h += renderField(sec, sec.fields[1], data, -1); + h += renderField(sec, sec.fields[2], data, -1); + h += renderField(sec, sec.fields[3], data, -1); + h += '
'; + + if (showGuard) { + h += '
'; + h += '
' + renderField(sec, sec.fields[4], data, -1) + '
'; + h += ''; + h += '
'; + } else { + h += '
'; + h += ''; + h += '
'; + } + return h; } @@ -433,7 +502,9 @@ function renderArraySection(sec, data) { h += '
'; - h += '
'; + h += ''; + + h += '
'; h += renderField(sec, sec.fields[0], data, idx, null, 'max-width:260px'); h += '
'; if (!showCond) { @@ -445,7 +516,6 @@ function renderArraySection(sec, data) { if (!showMsg) { h += ''; } - h += ''; h += '
'; h += '
'; @@ -541,7 +611,7 @@ function renderSubtable(sec, st, data) { var entity = f[5] || 'items'; var ph = f[3] ? ' placeholder="' + escAttr(f[3]) + '"' : ' placeholder="Search ' + entity + '..."'; var dp = cardPath(sec) + '.' + st.key + '[' + idx + '].' + f[0]; - h += ''; + h += ''; } else if (f[2] === 'checkbox') { h += ''; } else { @@ -567,7 +637,7 @@ function renderSubtable(sec, st, data) { var entity = f[5] || 'items'; var ph = f[3] ? ' placeholder="' + escAttr(f[3]) + '"' : ' placeholder="Search ' + entity + '..."'; var dp = cardPath(sec) + '.' + st.key + '[' + idx + '].' + f[0]; - h += ''; + h += ''; } else if (f[2] === 'checkbox') { h += ''; } else { @@ -693,11 +763,7 @@ function removeSection(id) { if (sec.path) { delete objectData[sec.path]; } else if (id === 'steal') { - delete objectData.steal_table; - delete objectData.steal_level; - delete objectData.steal_xp; - delete objectData.steal_speed; - delete objectData.guard_mob; + delete objectData.steal; } renderCurrent(); } @@ -724,11 +790,7 @@ function addSection() { objectData[sec.path] = {}; } } else if (id === 'steal') { - objectData.steal_table = ''; - objectData.steal_level = 0; - objectData.steal_xp = 0; - objectData.steal_speed = 0; - objectData.guard_mob = ''; + objectData.steal = {table: ''}; } expandedCards[id] = true; renderCurrent(); @@ -806,6 +868,7 @@ function validateDropRow(idx) { } function renderCurrent() { + ced_syncDOMToData(objectData); if (!objectData || !objectID) return; renderObjectEditor(objectID, objectData); } @@ -827,6 +890,38 @@ function hideUseInterField(idx, key) { renderCurrent(); } +function showCoreField(key) { + window._coreVis = window._coreVis || {}; + window._coreVis[key] = true; + renderCurrent(); +} + +function hideCoreField(key) { + window._coreVis = window._coreVis || {}; + window._coreVis[key] = false; + if (key === 'aliases') { + objectData.aliases = []; + } else if (key === 'inroom_description') { + objectData.inroom_description = ''; + } else if (key === 'removal_item') { + objectData.removal_item = ''; + } + renderCurrent(); +} + +function showGuardMob() { + window._stealVis = window._stealVis || {}; + window._stealVis.guard_mob = true; + renderCurrent(); +} + +function hideGuardMob() { + window._stealVis = window._stealVis || {}; + window._stealVis.guard_mob = false; + if (objectData.steal) objectData.steal.guard_mob = ''; + renderCurrent(); +} + function toggleUseInterHelp() { if (window._useInterHelpCollapsed === undefined) { window._useInterHelpCollapsed = false; @@ -967,6 +1062,8 @@ function saveObject() { } } else if (hasValues && sec.path) { out[sec.path] = sectionObj; + } else if (hasValues) { + Object.keys(sectionObj).forEach(function(k) { out[k] = sectionObj[k]; }); } }); -- cgit v1.2.3