diff options
| author | historia <[not public]> | 2026-07-10 12:52:00 -0400 |
|---|---|---|
| committer | historia <[not public]> | 2026-07-10 12:52:00 -0400 |
| commit | 8a31ffa45e912d00c480efe738aa3452e9e567cb (patch) | |
| tree | 7d4fcb80255d6d52e588234352b5bfbc058ba663 /internal | |
| parent | 6e7c0b3ec4253bb58a815979b1f4574d08cb1f53 (diff) | |
| download | thehouseoficarus-8a31ffa45e912d00c480efe738aa3452e9e567cb.tar.gz | |
fix(admin): auto-save map triggers on blur
Diffstat (limited to 'internal')
| -rw-r--r-- | internal/admin/static/map.js | 24 |
1 files changed, 17 insertions, 7 deletions
diff --git a/internal/admin/static/map.js b/internal/admin/static/map.js index 7c47b4e..8bd0e2d 100644 --- a/internal/admin/static/map.js +++ b/internal/admin/static/map.js @@ -1581,10 +1581,10 @@ function editExitCondition(dir) { var h = '<h3 style="margin-bottom:8px;font-size:13px">Exit: ' + esc(dir) + ' → #' + exit.room + '</h3>'; h += '<div class="form-group"><label>Blocked Message</label><textarea id="exitBmsg" rows="2">' + esc(bmsg) + '</textarea></div>'; h += '<div class="form-group"><label><input type="checkbox" id="exitHidden"' + (hidden ? ' checked' : '') + '> Hidden</label></div>'; - h += '<div class="form-group"><label><input type="checkbox" id="exitAlwaysBlocked"' + (alwaysBlocked ? ' checked' : '') + '> Always Blocked (blocked, shown on map)</label></div>'; + h += '<div class="form-group"><label><input type="checkbox" id="exitAlwaysBlocked"' + (alwaysBlocked ? ' checked' : '') + '> Always Blocked</label></div>'; h += '<div style="margin-top:10px;border-top:1px solid var(--border);padding-top:8px">'; - h += '<label style="font-size:11px;color:#aaa;text-transform:uppercase;letter-spacing:.5px">Conditions</label>'; + h += '<label style="font-size:11px;color:#aaa;text-transform:uppercase;letter-spacing:.5px">Conditions (Blocked unless these are met)</label>'; h += '<div id="condClauses" style="margin-top:4px"></div>'; h += '<button class="btn btn-sm section-add-btn" onclick="addConditionClause()">+ Add Condition</button>'; h += '<div class="btn-row" style="margin-top:10px">'; @@ -2085,6 +2085,8 @@ function bindTriggerInputSave(container) { inputs.forEach(function(el) { el.removeEventListener('input', _triggerInputHandler); el.addEventListener('input', _triggerInputHandler); + el.removeEventListener('blur', _triggerBlurHandler); + el.addEventListener('blur', _triggerBlurHandler); }); var checks = container.querySelectorAll('input[type="checkbox"], input[type="radio"]'); checks.forEach(function(el) { @@ -2109,11 +2111,12 @@ function _syncTriggersToData() { function _triggerInputHandler() { _syncTriggersToData(); _triggersDirty = true; + autoSave(); } -function saveTriggers() { +function _triggerBlurHandler() { _syncTriggersToData(); - _triggersDirty = false; + _triggersDirty = true; saveNow(); } @@ -2154,21 +2157,28 @@ async function doSavePanel() { var newDir = dirEl ? dirEl.value : null; var currentDir = (data.file || '').replace(/^data\/rooms\/?/, '').split('/')[0] || ''; + var idChanged = false; + var dirChanged = false; if (dirEl && newDir !== currentDir) { await API.post('/api/rooms/move', {id: id, dir: newDir}); + dirChanged = true; } if (newID !== id) { await API.post('/api/rooms/rename', {id: id, new_id: newID}); selectedRoom = newID; id = newID; + idChanged = true; } await API.put('/api/rooms/' + id, r); notify('Room #' + id + ' saved', 'success'); _triggersDirty = false; + saveTimer = null; updateUndoBar(); await loadMap(); - selectRoom(id); + if (idChanged || dirChanged) { + selectRoom(id); + } } catch (e) { notify('Save failed: ' + extractError(e), 'error'); } @@ -3423,6 +3433,7 @@ function renderEnterExitTab(r) { } switchPanelTab(8); _triggersDirty = true; + autoSave(); }; window._ieRenderOnly = window._ieRenderCurrent; window._ieSyncAll = ie_syncAllInteractions; @@ -3431,8 +3442,7 @@ function renderEnterExitTab(r) { {id: 'on_exit', path: 'on_exit', isArray: true, interactionStyle: true, itemIDAllowed: false, label: 'Trigger'} ]; - var h = '<div style="margin:8px 0"><button class="btn btn-primary" onclick="saveTriggers()">Save Triggers</button></div>'; - h += '<h3 style="margin:8px 0 4px">On-Enter Triggers</h3>'; + var h = '<h3 style="margin:8px 0 4px">On-Enter Triggers</h3>'; h += '<p style="color:#888;font-size:11px;margin:0 0 6px">Fires when a player enters this room. First matching entry wins.</p>'; h += renderTriggerListHTML(r.on_enter, 'on_enter', 'on_enter', false); h += '<hr style="border:none;border-top:1px solid var(--border);margin:12px 0">'; |
