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 = []; loadTriggerList(); if (window.location.hash) loadTriggerItem(window.location.hash.substring(1)); } function loadTriggerList() { loadList(); } function renderTriggerList(filter) { renderList(filter); } function renderList(filter) { var el = $('#listEntries'); var f = (filter || '').toLowerCase(); var t = treeData; function filterIDs(ids) { if (!f) return ids; return ids.filter(function(id) { return String(id).toLowerCase().indexOf(f) >= 0; }); } function renderItems(ids) { var h = ''; (ids || []).forEach(function(id) { h += '
No triggers
'; el.querySelectorAll('details.dir-group').forEach(function(d) { d.addEventListener('toggle', function() { var n = d.getAttribute('data-name'); if (n) dirOpenState[n] = d.open; }); }); } function loadTriggerItem(id) { loadTrigger(id); } function loadTrigger(id) { triggerID = id; currentID = id; window.location.hash = id; renderTriggerList(''); API.get('/api/triggers/' + encodeURIComponent(id)).then(function(data) { triggerData = data; triggerKind = data._kind || ''; if (!Array.isArray(triggerData.steps)) triggerData.steps = []; window._editorData = { _trig: [{ lock: !!triggerData.lock, condition: triggerData.condition || null, item_id: '', steps: triggerData.steps }] }; window._interVis = {}; window._ieRenderCurrent = renderCurrent; 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 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; var flagTypeEl = document.querySelector('input[name="trigFlagType"]:checked'); if (flagTypeEl) { delete triggerData.on_player_flag; delete triggerData.on_global_flag; if (flagTypeEl.value === 'player') { var n = $('#trigFlagName'); triggerData.on_player_flag = n ? n.value.trim() : ''; } else { var n = $('#trigFlagName'); triggerData.on_global_flag = n ? n.value.trim() : ''; } } window._ieSyncAll(window._editorData); mergeTriggerFromEditor(); renderTriggerEditor(triggerID, triggerData); } function renderTriggerEditor(id, data) { var html = renderRenameableHeader('Trigger', id); var kindLabel = data._kind === 'global' ? 'Global Flag' : (data._kind === 'player' ? 'Player Flag' : ''); if (kindLabel) html += 'Deleted
'; } loadTriggerList(); }).catch(function(e) { notify('Delete failed: ' + e.message, 'error'); }); } function deleteTrigger() { if (!confirm('Delete trigger "' + triggerID + '"?')) return; API.del('/api/triggers/' + encodeURIComponent(triggerID)).then(function() { notify('Trigger ' + triggerID + ' deleted', 'success'); updateUndoBar(); triggerID = null; currentID = null; triggerData = null; triggerKind = ''; $('#editorMain').innerHTML = 'Deleted
'; loadTriggerList(); }).catch(function(e) { notify('Delete failed: ' + e.message, 'error'); }); } function createNew() { var baseID = prompt('Trigger ID (filename without .yaml):'); if (!baseID || !baseID.trim()) return; var id = baseID.trim(); API.post('/api/triggers', {id: id, on_player_flag: '', steps: []}).then(function(resp) { notify('Trigger ' + id + ' created', 'success'); updateUndoBar(); loadTriggerList(); loadTrigger(id); }).catch(function(e) { notify('Create failed: ' + e.message, 'error'); }); }