From 451fdf82ce1385c16d0d88cd5b2a878ba4cba22c Mon Sep 17 00:00:00 2001 From: historia <[not public]> Date: Fri, 10 Jul 2026 17:39:15 -0400 Subject: feat(admin): better toggle on trigger page, removed irrelevant value field for clarity --- internal/admin/static/triggerseditor.js | 365 +++++--------------------------- 1 file changed, 50 insertions(+), 315 deletions(-) (limited to 'internal/admin/static/triggerseditor.js') diff --git a/internal/admin/static/triggerseditor.js b/internal/admin/static/triggerseditor.js index dbc1e41..28d97a5 100644 --- a/internal/admin/static/triggerseditor.js +++ b/internal/admin/static/triggerseditor.js @@ -2,6 +2,15 @@ var triggerData = null; var triggerID = null; var triggerKind = ''; +var TRIG_SEC = { + id: 'trigger_action', + path: '_trig', + isArray: true, + interactionStyle: true, + itemIDAllowed: false, + label: 'Action Block' +}; + function initTriggerEditor() { editorType = 'triggers'; editorFields = []; @@ -50,29 +59,39 @@ function loadTrigger(id) { triggerData = data; triggerKind = data._kind || ''; if (!Array.isArray(triggerData.steps)) triggerData.steps = []; - window._editorData = triggerData; + window._editorData = { + _trig: [{ + lock: !!triggerData.lock, + condition: triggerData.condition || null, + item_id: '', + steps: triggerData.steps + }] + }; + window._interVis = {}; window._ieRenderCurrent = renderCurrent; - window._ieRenderOnly = function() { if (triggerID && triggerData) renderTriggerEditor(triggerID, triggerData); }; - window._ieSyncAll = function(ed) { if (ed) syncCondDOM(ed); }; + window._ieRenderOnly = function() { mergeTriggerFromEditor(); renderTriggerEditor(triggerID, triggerData); }; + window._ieSyncAll = function(ed) { if (ed) ie_syncAllInteractions(ed, [TRIG_SEC]); }; renderTriggerEditor(id, data); }).catch(function(e) { $('#editorMain').innerHTML = '
Failed to load: ' + esc(e.message) + '
'; }); } -function syncCondDOM(ed) { - if (!ed) return; - var condRoot = document.querySelector('.obj-card[data-card="condition"] .ie-cond-root'); - if (condRoot) { - var cond = ie_collectCond(condRoot); - if (cond) ed.condition = cond; - else delete ed.condition; +function mergeTriggerFromEditor() { + var ab = window._editorData._trig[0] || {}; + if (ab.lock) triggerData.lock = true; else delete triggerData.lock; + if (ab.condition) { + var cc = ie_cleanCondition(ab.condition); + if (cc) triggerData.condition = cc; else delete triggerData.condition; + } else { + delete triggerData.condition; } + triggerData.steps = ab.steps || []; + delete triggerData.item_id; } function renderCurrent() { if (!triggerData || !triggerID) return; - syncCondDOM(triggerData); var flagTypeEl = document.querySelector('input[name="trigFlagType"]:checked'); if (flagTypeEl) { delete triggerData.on_player_flag; @@ -83,79 +102,11 @@ function renderCurrent() { var n = $('#trigFlagName'); triggerData.on_global_flag = n ? n.value.trim() : ''; } } - var valEl = $('#trigValue'); - if (valEl) { - var v = valEl.value.trim(); - if (v === '') delete triggerData.value; - else { try { triggerData.value = JSON.parse(v); } catch(e) { triggerData.value = v; } } - } - var lockEl = $('#trigLock'); - if (lockEl) { if (lockEl.checked) triggerData.lock = true; else delete triggerData.lock; } - var stepRows = document.querySelectorAll('.obj-card[data-card="steps"] .ie-step-row'); - if (!Array.isArray(triggerData.steps)) triggerData.steps = []; - stepRows.forEach(function(stepRow) { - var si = parseInt(stepRow.getAttribute('data-step'), 10); - if (isNaN(si)) return; - if (!triggerData.steps[si]) triggerData.steps[si] = {}; - var waitEl = stepRow.querySelector('.wait-input'); - if (waitEl) triggerData.steps[si].wait = parseInt(waitEl.value) || 0; - syncStepEffects(stepRow, si); - }); - if (triggerData.steps.length > stepRows.length) triggerData.steps.length = stepRows.length; + window._ieSyncAll(window._editorData); + mergeTriggerFromEditor(); renderTriggerEditor(triggerID, triggerData); } -function syncStepEffects(row, si) { - var effectsEl = row.querySelector('.ie-act-root'); - if (!effectsEl) return; - var step = triggerData.steps[si] || {}; - ['messages','broadcast','broadcast_global','teleport','heal','credits', - 'give_item','take_item','despawn_mob','aps_node','drop_table'].forEach(function(k) { delete step[k]; }); - delete step.set_global_flags; delete step.set_player_flags; delete step.spawn_mob; - - var msgInputs = effectsEl.querySelectorAll('.trig-msg-input'); - var msgs = []; - msgInputs.forEach(function(inp) { if (inp.value !== '') msgs.push(inp.value); }); - if (msgs.length > 0) step.messages = msgs; - - effectsEl.querySelectorAll('.trig-effect-input').forEach(function(inp) { - var key = inp.getAttribute('data-key'); - var v = inp.value.trim(); - if (v !== '') { if (key === 'teleport' || key === 'heal' || key === 'credits') step[key] = parseInt(v)||0; else step[key] = v; } - }); - - var cb = effectsEl.querySelector('.trig-aps-cb'); - if (cb && cb.checked) step.aps_node = true; - - effectsEl.querySelectorAll('.trig-kv-section').forEach(function(kvSec) { - var kvKey = kvSec.getAttribute('data-kv'); - var kvObj = {}; - kvSec.querySelectorAll('.trig-kv-row').forEach(function(kvRow) { - var kEl = kvRow.querySelector('.trig-kv-key'); - var vEl = kvRow.querySelector('.trig-kv-val'); - if (kEl && kEl.value) { - var v = vEl ? vEl.value : ''; - try { kvObj[kEl.value] = JSON.parse(v); } catch(e) { kvObj[kEl.value] = v; } - } - }); - if (Object.keys(kvObj).length > 0) step[kvKey] = kvObj; - }); - - var smInput = effectsEl.querySelector('.trig-spawn-mob'); - if (smInput && smInput.value.trim()) { - if (!step.spawn_mob) step.spawn_mob = {}; - step.spawn_mob.id = smInput.value.trim(); - } - - var dtBlock = effectsEl.querySelector('.ie-drop-table'); - if (dtBlock) { - var dt = ie_collectDropTableBlock(dtBlock); - if (dt) step.drop_table = dt; - } - - triggerData.steps[si] = step; -} - function renderTriggerEditor(id, data) { var html = renderRenameableHeader('Trigger', id); @@ -180,44 +131,34 @@ function renderTriggerEditor(id, data) { html += '