aboutsummaryrefslogtreecommitdiff
path: root/internal/admin/static/admin.js
diff options
context:
space:
mode:
authorhistoria <[not public]>2026-07-05 18:52:51 -0400
committerhistoria <[not public]>2026-07-05 18:52:51 -0400
commit6bd5365cc22f84c047c1585e3f54571af46f53e5 (patch)
tree72df0934c72baa1e31817d7db999832c6efb115f /internal/admin/static/admin.js
parent9b54188970c51070d86f4c87e909ea7836c86f07 (diff)
downloadthehouseoficarus-6bd5365cc22f84c047c1585e3f54571af46f53e5.tar.gz
feat: renameable directories and files in admin gui
Diffstat (limited to 'internal/admin/static/admin.js')
-rw-r--r--internal/admin/static/admin.js65
1 files changed, 65 insertions, 0 deletions
diff --git a/internal/admin/static/admin.js b/internal/admin/static/admin.js
index f8e9d13..a6bb8b2 100644
--- a/internal/admin/static/admin.js
+++ b/internal/admin/static/admin.js
@@ -52,4 +52,69 @@ window.saveForm = function(url, data, msg) {
}).catch(function(e) { notify('Save failed: '+e.message, 'error'); });
};
+window.entityRename = function(type, oldID, newID) {
+ return API.post('/api/' + type + '/rename', {id: oldID, new_id: newID}).then(function(r) {
+ notify('Renamed ' + oldID + ' to ' + newID, 'success');
+ updateUndoBar();
+ return r;
+ });
+};
+
+window.renderRenameableHeader = function(label, id) {
+ var h = '<div class="rename-header">';
+ h += '<h2 class="rename-header-text">' + esc(label) + ': ' + esc(id) + '</h2>';
+ h += '<span class="rename-pencil" onclick="startHeaderRename(this,\'' + escAttr(id) + '\')" title="Rename">\u270E</span>';
+ h += '<div class="rename-edit-row" style="display:none"></div>';
+ h += '</div>';
+ return h;
+};
+
+window.handleHeaderRename = function(oldID, newID) {
+ var type = window.editorType || '';
+ if (!type) return;
+ entityRename(type, oldID, newID).then(function() {
+ window.currentID = newID;
+ var typeSingular = type.slice(0, -1) + 'ID';
+ if (window[typeSingular] !== undefined) window[typeSingular] = newID;
+ if (window.loadList) window.loadList();
+ if (window.loadItem) window.loadItem(newID);
+ }).catch(function(e) { notify('Rename failed: ' + e.message, 'error'); });
+};
+
+window.startHeaderRename = function(pencilEl, oldID) {
+ var header = pencilEl.parentElement;
+ var textSpan = header.querySelector('.rename-header-text');
+ var editRow = header.querySelector('.rename-edit-row');
+
+ textSpan.style.display = 'none';
+ pencilEl.style.display = 'none';
+ editRow.style.display = 'flex';
+ editRow.innerHTML = '<input class="rename-input" value="' + escAttr(oldID) + '" maxlength="128">' +
+ '<button class="btn btn-sm rename-btn-confirm" title="Confirm">\u2713</button>' +
+ '<button class="btn btn-sm rename-btn-cancel" title="Cancel">\u2717</button>';
+
+ var input = editRow.querySelector('.rename-input');
+ var confirmBtn = editRow.querySelector('.rename-btn-confirm');
+ var cancelBtn = editRow.querySelector('.rename-btn-cancel');
+
+ input.focus();
+ input.select();
+
+ function cancel() {
+ textSpan.style.display = '';
+ pencilEl.style.display = '';
+ editRow.style.display = 'none';
+ }
+
+ function confirm() {
+ var newID = input.value.trim();
+ if (!newID || newID === oldID) { cancel(); return; }
+ if (window.handleHeaderRename) handleHeaderRename(oldID, newID);
+ }
+
+ cancelBtn.onclick = cancel;
+ input.onkeydown = function(e) { if (e.key === 'Enter') confirm(); else if (e.key === 'Escape') cancel(); };
+ confirmBtn.onclick = confirm;
+};
+
document.addEventListener('DOMContentLoaded', function() { updateUndoBar(); });