aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--internal/admin/static/admin.css48
-rw-r--r--internal/admin/static/dropeditor.js2
-rw-r--r--internal/admin/static/editor.js4
-rw-r--r--internal/admin/static/hazardeditor.js2
-rw-r--r--internal/admin/static/intereditor.js2
-rw-r--r--internal/admin/static/moduleeditor.js2
-rw-r--r--internal/admin/static/talktree.js12
-rw-r--r--internal/admin/static/techeditor.js2
-rw-r--r--internal/admin/static/triggerseditor.js2
-rw-r--r--internal/admin/templates/duplicate-rooms.html2
10 files changed, 45 insertions, 33 deletions
diff --git a/internal/admin/static/admin.css b/internal/admin/static/admin.css
index efe5abc..c500aad 100644
--- a/internal/admin/static/admin.css
+++ b/internal/admin/static/admin.css
@@ -1,4 +1,4 @@
-:root{--bg:#1a1a2e;--panel:#16213e;--text:#e0e0e0;--accent:#0f3460;--border:#2a2a4a;--hover:#1a3a6e;--danger:#c0392b;--success:#27ae60;--warn:#f39c12;--input-bg:#0d1b36;--input-border:#3a3a6a}
+:root{--bg:#1a1a2e;--panel:#16213e;--text:#e0e0e0;--accent:#0f3460;--border:#2a2a4a;--hover:#1a3a6e;--danger:#c0392b;--success:#27ae60;--warn:#f39c12;--input-bg:#0d1b36;--input-border:#3a3a6a;--cond:#136b3a;--cond-light:#5fd668;--cond-bd:rgba(19,107,58,.3);--cond-bg:rgba(19,107,58,.1);--act:#9e6307;--act-light:#f5b041;--act-bd:rgba(158,99,7,.3);--act-bg:rgba(158,99,7,.1)}
*{box-sizing:border-box;margin:0;padding:0}
input[type=number]{-moz-appearance:textfield}
input[type=number]::-webkit-inner-spin-button,input[type=number]::-webkit-outer-spin-button{-webkit-appearance:none;margin:0}
@@ -89,8 +89,8 @@ body{font-family:monospace;background:var(--bg);color:var(--text);display:flex;f
.talk-opt-text{color:var(--text);flex:1;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.talk-opt-goto{color:#8cf;font-weight:bold;white-space:nowrap;min-width:30px}
.talk-opt-tag{display:inline-block;padding:1px 6px;font-size:9px;border-radius:2px;line-height:1.4;flex-shrink:0;cursor:pointer;border:1px solid transparent}
-.talk-opt-tag-cond{background:rgba(100,160,255,.2);color:#6af}
-.talk-opt-tag-act{background:rgba(232,196,124,.2);color:#e8c47c}
+.talk-opt-tag-cond{background:var(--cond-bg);color:var(--cond-light)}
+.talk-opt-tag-act{background:var(--act-bg);color:var(--act-light)}
.talk-opt-del{padding:0 4px;font-size:10px;line-height:1.4;border:none;border-radius:2px;background:var(--danger);color:#fff;cursor:pointer;flex-shrink:0}
.talk-add-btn{display:inline-block;margin-top:4px;padding:3px 10px;font-size:10px;background:var(--accent);color:var(--text);border:1px solid #1a5a8e;border-radius:3px;cursor:pointer;font-family:monospace}
.talk-children{margin-top:0}
@@ -117,14 +117,22 @@ body{font-family:monospace;background:var(--bg);color:var(--text);display:flex;f
.talk-kv-del{font-size:9px;padding:0 4px;line-height:1.4;border:none;border-radius:2px;background:var(--danger);color:#fff;cursor:pointer;font-family:monospace;flex-shrink:0}
.talk-action-block{margin-top:3px;padding:6px;background:rgba(255,255,255,.02);border:1px solid var(--border);border-radius:4px}
.talk-action-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(130px,1fr));gap:3px 8px}
-.talk-add-cond-btn{font-size:9px;padding:1px 6px;line-height:1.4;border:1px solid rgba(100,160,255,.25);border-radius:2px;background:transparent;color:#6af;cursor:pointer;font-family:monospace;margin-bottom:6px}
-.talk-add-act-btn{font-size:9px;padding:1px 6px;line-height:1.4;border:1px solid rgba(232,196,124,.25);border-radius:2px;background:transparent;color:#e8c47c;cursor:pointer;font-family:monospace;margin-bottom:6px}
+.talk-add-cond-btn{font-size:9px;padding:1px 6px;line-height:1.4;border:1px solid var(--cond-bd);border-radius:3px;background:var(--cond);color:#fff;cursor:pointer;font-family:monospace;margin-bottom:6px}
+.talk-add-cond-btn:hover{filter:brightness(1.15)}
+.talk-add-act-btn{font-size:9px;padding:1px 6px;line-height:1.4;border:1px solid var(--act-bd);border-radius:3px;background:var(--act);color:#fff;cursor:pointer;font-family:monospace;margin-bottom:6px}
+.talk-add-act-btn:hover{filter:brightness(1.15)}
-.talk-cond-card{border:1px solid rgba(100,160,255,.25);border-radius:5px;margin-bottom:6px;overflow:hidden}
-.talk-cond-card-header{display:flex;align-items:center;justify-content:space-between;padding:6px 8px;background:rgba(100,160,255,.08);border-bottom:1px solid rgba(100,160,255,.15);font-size:10px;color:#aaa;text-transform:uppercase;letter-spacing:.3px}
+.talk-cond-card{border:1px solid var(--border);border-radius:5px;margin-bottom:6px;overflow:hidden}
+.talk-cond-card.cond{border-color:var(--cond-bd)}
+.talk-cond-card.act{border-color:var(--act-bd)}
+.talk-cond-card-header{display:flex;align-items:center;justify-content:space-between;padding:6px 8px;background:rgba(255,255,255,.03);border-bottom:1px solid var(--border);font-size:10px;color:#aaa;text-transform:uppercase;letter-spacing:.3px}
+.talk-cond-card.cond>.talk-cond-card-header{background:var(--cond-bg);border-bottom-color:var(--cond-bd);color:var(--cond-light)}
+.talk-cond-card.act>.talk-cond-card-header{background:var(--act-bg);border-bottom-color:var(--act-bd);color:var(--act-light)}
.talk-cond-card-body{padding:6px 8px}
.talk-cond-card-body .talk-action-block{margin-top:0;border:none;padding:0;border-radius:0;background:transparent}
-.talk-cond-card-sep{border-top:1px solid rgba(100,160,255,.12);margin:1px 0 4px 0}
+.talk-cond-card-sep{border-top:1px solid var(--border);margin:1px 0 4px 0}
+.talk-cond-card.cond .talk-cond-card-sep{border-top-color:var(--cond-bd)}
+.talk-cond-card.act .talk-cond-card-sep{border-top-color:var(--act-bd)}
.talk-cond-mode-row{display:flex;align-items:center;gap:6px;margin-bottom:4px}
.talk-cond-mode-row .talk-prop-label{font-size:9px;color:#888;text-transform:uppercase;letter-spacing:.3px}
@@ -370,7 +378,7 @@ g.ud-hover:hover text{font-weight:bold}
/* --- Structured condition & action editors (intereditor.js) --- */
-.ie-cond{background:rgba(100,160,255,.04);border:1px solid rgba(100,160,255,.12);border-radius:5px;padding:8px;margin-bottom:4px}
+.ie-cond{background:var(--cond-bg);border:1px solid var(--cond-bd);border-radius:5px;padding:8px;margin-bottom:4px}
.ie-cond-root{padding:0}
.ie-cond-modebar{display:flex;align-items:center;gap:8px;margin-bottom:6px;flex-wrap:wrap}
.ie-cond-modesel{font-size:11px;padding:2px 4px;background:var(--bg);color:var(--text);border:1px solid var(--border);border-radius:3px;font-family:monospace}
@@ -378,7 +386,7 @@ g.ud-hover:hover text{font-weight:bold}
.ie-cond-not{accent-color:var(--danger);margin:0}
.ie-cond-children{display:flex;flex-direction:column;gap:4px}
.ie-cond-leaf{display:flex;align-items:center;gap:6px;padding:4px 6px;background:var(--bg);border:1px solid var(--border);border-radius:3px}
-.ie-cond-leaf-label{font-size:10px;color:#6af;text-transform:uppercase;letter-spacing:.3px;font-weight:bold;white-space:nowrap;min-width:70px}
+.ie-cond-leaf-label{font-size:10px;color:var(--cond-light);text-transform:uppercase;letter-spacing:.3px;font-weight:bold;white-space:nowrap;min-width:70px}
.ie-cond-leaf input[type="text"],
.ie-cond-leaf input[type="number"],
.ie-cond-val{font-size:11px;padding:3px 6px;background:var(--bg);color:var(--text);border:1px solid var(--border);border-radius:3px;font-family:monospace;flex:1;min-width:80px}
@@ -389,12 +397,16 @@ g.ud-hover:hover text{font-weight:bold}
.ie-cond-addbar{display:grid;grid-template-columns:repeat(auto-fit,minmax(max(100%/5,110px),1fr));gap:4px;margin-top:4px}
.ie-add-btn{font-size:10px!important;padding:2px 6px!important;background:var(--accent)!important;color:var(--text)!important;border:1px solid #1a5a8e!important;font-family:monospace!important;border-radius:3px!important;cursor:pointer;white-space:nowrap}
.ie-add-btn:hover{background:#1a5a8e!important;color:#fff!important}
-.ie-cond-addbar .ie-add-btn,.ie-step-addbar .ie-add-btn,.ie-step-addbar-bottom .ie-add-btn,.ie-act-addbar .ie-add-btn{width:100%;min-width:0}
+.ie-cond-addbar .ie-add-btn,.ie-cond-empty-bar .ie-add-btn{background:var(--cond)!important;color:#fff!important;border-color:var(--cond-bd)!important}
+.ie-cond-addbar .ie-add-btn:hover,.ie-cond-empty-bar .ie-add-btn:hover{filter:brightness(1.15)!important}
+.ie-act-addbar .ie-add-btn,.ie-step-addbar .ie-add-btn,.ie-step-addbar-bottom .ie-add-btn,.ie-act-kv .ie-add-btn{background:var(--act)!important;color:#fff!important;border-color:var(--act-bd)!important}
+.ie-act-addbar .ie-add-btn:hover,.ie-step-addbar .ie-add-btn:hover,.ie-step-addbar-bottom .ie-add-btn:hover,.ie-act-kv .ie-add-btn:hover{filter:brightness(1.15)!important}
+.ie-cond-addbar .ie-add-btn,.ie-step-addbar .ie-add-btn,.ie-step-addbar-bottom .ie-add-btn,.ie-act-addbar .ie-add-btn,.ie-cond-empty-bar .ie-add-btn{width:100%;min-width:0}
/* Action editor */
-.ie-act-root{background:rgba(100,160,255,.04);border:1px solid rgba(100,160,255,.12);border-radius:5px;padding:8px;display:flex;flex-direction:column;gap:6px}
+.ie-act-root{background:var(--act-bg);border:1px solid var(--act-bd);border-radius:5px;padding:8px;display:flex;flex-direction:column;gap:6px}
.ie-act-row{display:flex;align-items:center;gap:6px}
-.ie-act-label{font-size:10px;color:#6af;text-transform:uppercase;letter-spacing:.3px;font-weight:bold;white-space:nowrap;min-width:90px}
+.ie-act-label{font-size:10px;color:var(--act-light);text-transform:uppercase;letter-spacing:.3px;font-weight:bold;white-space:nowrap;min-width:90px}
.ie-act-input{font-size:11px;padding:3px 6px;background:var(--bg);color:var(--text);border:1px solid var(--border);border-radius:3px;font-family:monospace}
.ie-act-rm{flex-shrink:0}
.ie-act-kv{background:var(--bg);border:1px solid var(--border);border-radius:3px;padding:6px}
@@ -425,17 +437,17 @@ g.ud-hover:hover text{font-weight:bold}
/* ── Step list: boxed steps with right-justified move/remove controls ── */
.ie-inter-steps{margin-top:4px}
.ie-step-list{display:flex;flex-direction:column;gap:4px}
-.ie-step-row{background:rgba(100,160,255,.03);border:1px solid rgba(100,160,255,.1);border-radius:6px;padding:8px;display:flex;flex-direction:column;gap:4px}
+.ie-step-row{background:var(--act-bg);border:1px solid var(--act-bd);border-radius:6px;padding:8px;display:flex;flex-direction:column;gap:4px}
.ie-step-header{display:flex;align-items:center;gap:6px;flex-wrap:wrap}
-.ie-step-label{font-size:10px;color:#6af;text-transform:uppercase;letter-spacing:.3px;font-weight:bold;white-space:nowrap}
-.ie-step-addmore{color:#6af;border:1px solid rgba(100,160,255,.25);background:transparent;font-size:10px;padding:1px 6px;border-radius:3px;cursor:pointer;font-family:monospace;line-height:1}
-.ie-step-addmore:hover{background:rgba(100,160,255,.1)}
+.ie-step-label{font-size:10px;color:var(--act-light);text-transform:uppercase;letter-spacing:.3px;font-weight:bold;white-space:nowrap}
+.ie-step-addmore{color:var(--act-light);border:1px solid var(--act-bd);background:transparent;font-size:10px;padding:1px 6px;border-radius:3px;cursor:pointer;font-family:monospace;line-height:1}
+.ie-step-addmore:hover{background:var(--act-bg)}
.ie-step-addmore::after{content:"+"}
.ie-step-row.show-addbar .ie-step-addmore::after{content:"-"}
.ie-step-spacer{flex:1}
.ie-step-up,.ie-step-dn{padding:2px 6px;font-size:9px}
.ie-step-cond-panel{margin:2px 0}
-.ie-cond-title{font-size:10px;color:#6af;text-transform:uppercase;letter-spacing:.3px;font-weight:bold;margin-bottom:2px}
+.ie-cond-title{font-size:10px;color:var(--cond-light);text-transform:uppercase;letter-spacing:.3px;font-weight:bold;margin-bottom:2px}
.ie-step-effects{margin:2px 0}
.ie-step-messages{margin:2px 0}
.ie-step-addbar{display:none;flex-wrap:wrap;gap:4px;margin-top:2px}
diff --git a/internal/admin/static/dropeditor.js b/internal/admin/static/dropeditor.js
index a6537e9..566d696 100644
--- a/internal/admin/static/dropeditor.js
+++ b/internal/admin/static/dropeditor.js
@@ -76,7 +76,7 @@ function renderDropEditor(id, data) {
html += '<div class="btn-row">';
html += '<button class="btn btn-primary" onclick="saveDrop()">Save</button>';
html += '<button class="btn" onclick="duplicateDrop()">Duplicate</button>';
- html += '<button class="btn btn-danger" onclick="deleteDrop()">Delete</button>';
+ html += '<button class="btn btn-danger" onclick="deleteDrop()">Remove</button>';
html += '<button class="btn btn-sm" style="margin-left:auto" onclick="createNewDir()">New Directory</button>';
html += '</div>';
diff --git a/internal/admin/static/editor.js b/internal/admin/static/editor.js
index 1bd6872..d5fb5c7 100644
--- a/internal/admin/static/editor.js
+++ b/internal/admin/static/editor.js
@@ -140,7 +140,7 @@ function renderEditor(id, data) {
html += '<div class="btn-row">';
html += '<button class="btn btn-primary" onclick="saveItem(\'' + esc(id) + '\')">Save</button>';
- html += '<button class="btn btn-danger" onclick="deleteItem(\'' + esc(id) + '\')">Delete</button>';
+ html += '<button class="btn btn-danger" onclick="deleteItem(\'' + esc(id) + '\')">Remove</button>';
html += '</div>';
$('#editorMain').innerHTML = html;
@@ -359,7 +359,7 @@ function showItemContextMenu(e, id) {
addBtn('Rename', '', function() { startInlineItemRename(id); });
addBtn('Duplicate', '', function() { duplicateFromMenu(id); });
- addBtn('Delete', 'danger', function() { deleteItem(id); });
+ addBtn('Remove', 'danger', function() { deleteItem(id); });
document.body.appendChild(overlay);
document.body.appendChild(menu);
diff --git a/internal/admin/static/hazardeditor.js b/internal/admin/static/hazardeditor.js
index c4eb0b5..10def4b 100644
--- a/internal/admin/static/hazardeditor.js
+++ b/internal/admin/static/hazardeditor.js
@@ -100,7 +100,7 @@ function renderHazardEditor(id, data) {
html += '<div class="btn-row">';
html += '<button class="btn btn-primary" onclick="saveHazard()">Save</button>';
html += '<button class="btn" onclick="duplicateHazard()">Duplicate</button>';
- html += '<button class="btn btn-danger" onclick="deleteHazard()">Delete</button>';
+ html += '<button class="btn btn-danger" onclick="deleteHazard()">Remove</button>';
html += '<button class="btn btn-sm" style="margin-left:auto" onclick="createNewDir()">New Directory</button>';
html += '</div>';
diff --git a/internal/admin/static/intereditor.js b/internal/admin/static/intereditor.js
index 152aef3..b6047b5 100644
--- a/internal/admin/static/intereditor.js
+++ b/internal/admin/static/intereditor.js
@@ -1336,7 +1336,7 @@ function ie_renderArraySection(ctx) {
h += '<button class="btn btn-sm ie-add-btn" onclick="ie_addRootConditionGroup(\'' + escAttr(sec.path) + '\',' + idx + ',\'entry\')">+ Add Condition</button>';
}
h += '<span class="ie-inter-header-spacer"></span>';
- h += '<button class="btn btn-sm btn-danger ie-inter-remove" onclick="' + ctx.showRemove(idx) + '">Remove Trigger</button>';
+ h += '<button class="btn btn-sm btn-danger ie-inter-remove" onclick="' + ctx.showRemove(idx) + '">Remove</button>';
h += '</div>';
h += '<div class="ie-inter-panel" style="display:' + (condExists ? 'block' : 'none') + '">';
diff --git a/internal/admin/static/moduleeditor.js b/internal/admin/static/moduleeditor.js
index ac632e8..739fc2e 100644
--- a/internal/admin/static/moduleeditor.js
+++ b/internal/admin/static/moduleeditor.js
@@ -101,7 +101,7 @@ function renderModuleEditor(id, data) {
html += '<div class="btn-row">';
html += '<button class="btn btn-primary" onclick="saveModule()">Save</button>';
html += '<button class="btn" onclick="duplicateModule()">Duplicate</button>';
- html += '<button class="btn btn-danger" onclick="deleteModule()">Delete</button>';
+ html += '<button class="btn btn-danger" onclick="deleteModule()">Remove</button>';
html += '<button class="btn btn-sm" style="margin-left:auto" onclick="createNewDir()">New Directory</button>';
html += '</div>';
diff --git a/internal/admin/static/talktree.js b/internal/admin/static/talktree.js
index ef6efd0..b8c7106 100644
--- a/internal/admin/static/talktree.js
+++ b/internal/admin/static/talktree.js
@@ -368,7 +368,7 @@
h += '<span class="talk-node-key">' + esc(key) + '</span>';
h += '<span class="talk-node-preview">' + esc((getNodePreview(node) || '').substring(0, 60)) + '</span>';
h += '<span class="talk-node-spacer"></span>';
- h += '<button class="talk-node-btn talk-node-del" data-action="delete-node" data-nk="' + escAttr(key) + '">Delete</button>';
+ h += '<button class="talk-node-btn talk-node-del" data-action="delete-node" data-nk="' + escAttr(key) + '">Remove</button>';
h += '</div>';
h += '<div class="talk-node-body">';
h += renderNodeBody(key, node, nodes);
@@ -398,7 +398,7 @@
html += '<span class="talk-node-key">' + esc(rootKey) + '</span>';
html += '<span class="talk-node-preview">' + esc((previewText || '').substring(0, 60)) + '</span>';
html += '<span class="talk-node-spacer"></span>';
- html += '<button class="talk-node-btn talk-node-del" data-action="delete-node" data-nk="' + escAttr(rootKey) + '">Delete</button>';
+ html += '<button class="talk-node-btn talk-node-del" data-action="delete-node" data-nk="' + escAttr(rootKey) + '">Remove</button>';
html += '</div>';
html += '<div class="talk-node-body">';
@@ -440,7 +440,7 @@
// Node condition (via intereditor)
if (hasCond) {
- html += '<div class="talk-cond-card">';
+ html += '<div class="talk-cond-card cond">';
html += '<div class="talk-cond-card-header">' +
'Condition (for this node)' +
'<button class="talk-section-remove" data-action="remove-node-cond" data-nk="' + escAttr(nodeKey) + '">Remove</button>' +
@@ -463,7 +463,7 @@
// Node action (via intereditor)
if (hasAct) {
- html += '<div class="talk-cond-card" style="margin-top:4px">';
+ html += '<div class="talk-cond-card act" style="margin-top:4px">';
html += '<div class="talk-cond-card-header">' +
'Action (at the start of this node)' +
'<button class="talk-section-remove" data-action="remove-node-act" data-nk="' + escAttr(nodeKey) + '">Remove</button></div>';
@@ -551,7 +551,7 @@
// Option condition detail
if (opt.condition && typeof opt.condition === 'object' && !Array.isArray(opt.condition)) {
html += '<div class="talk-opt-detail" style="display:block;margin-left:18px">';
- html += '<div class="talk-cond-card" style="margin-top:2px">';
+ html += '<div class="talk-cond-card cond" style="margin-top:2px">';
html += '<div class="talk-cond-card-header">Condition (for this option to show up)' +
'<button class="talk-section-remove" data-action="remove-opt-cond" data-nk="' + escAttr(nodeKey) + '" data-oi="' + idx + '">Remove</button></div>';
html += '<div class="talk-cond-card-body">';
@@ -564,7 +564,7 @@
// Option action detail
if (opt.action) {
html += '<div class="talk-opt-detail" style="display:block;margin-left:18px">';
- html += '<div class="talk-cond-card" style="margin-top:2px">';
+ html += '<div class="talk-cond-card act" style="margin-top:2px">';
html += '<div class="talk-cond-card-header">' +
'Action (when this option is chosen)' +
'<button class="talk-section-remove" data-action="remove-opt-act" data-nk="' + escAttr(nodeKey) + '" data-oi="' + idx + '">Remove</button></div>';
diff --git a/internal/admin/static/techeditor.js b/internal/admin/static/techeditor.js
index 8e18a7a..c9d7c24 100644
--- a/internal/admin/static/techeditor.js
+++ b/internal/admin/static/techeditor.js
@@ -90,7 +90,7 @@ function renderTechEditor(id, data) {
html += '<div class="btn-row">';
html += '<button class="btn btn-primary" onclick="saveTech()">Save</button>';
html += '<button class="btn" onclick="duplicateTech()">Duplicate</button>';
- html += '<button class="btn btn-danger" onclick="deleteTech()">Delete</button>';
+ html += '<button class="btn btn-danger" onclick="deleteTech()">Remove</button>';
html += '<button class="btn btn-sm" style="margin-left:auto" onclick="createNewDir()">New Directory</button>';
html += '</div>';
diff --git a/internal/admin/static/triggerseditor.js b/internal/admin/static/triggerseditor.js
index 03018a9..0312a41 100644
--- a/internal/admin/static/triggerseditor.js
+++ b/internal/admin/static/triggerseditor.js
@@ -170,7 +170,7 @@ function renderTriggerEditor(id, data) {
html += '<div class="btn-row">';
html += '<button class="btn btn-primary" onclick="saveTrigger()">Save</button>';
- html += '<button class="btn" style="margin-left:auto" onclick="deleteTrigger()">Delete</button>';
+ html += '<button class="btn" style="margin-left:auto" onclick="deleteTrigger()">Remove</button>';
html += '</div>';
$('#editorMain').innerHTML = html;
diff --git a/internal/admin/templates/duplicate-rooms.html b/internal/admin/templates/duplicate-rooms.html
index 9533460..0d70176 100644
--- a/internal/admin/templates/duplicate-rooms.html
+++ b/internal/admin/templates/duplicate-rooms.html
@@ -50,7 +50,7 @@ function checkDups() {
var short = p.replace(/^.*\/data\/rooms\//, '');
html += '<div class="dup-row">';
html += '<span class="dup-path"><code>' + esc(short) + '</code></span>';
- html += '<button class="btn btn-sm btn-danger" onclick="deleteDupFile(\'' + escAttr(p) + '\')">Delete</button>';
+ html += '<button class="btn btn-sm btn-danger" onclick="deleteDupFile(\'' + escAttr(p) + '\')">Remove</button>';
html += '<input type="number" id="rename-' + escAttr(d.id) + '-' + idx + '" placeholder="new ID" style="width:80px">';
html += '<button class="btn btn-sm btn-primary" onclick="renameDupFile(\'' + escAttr(p) + '\',\'rename-' + escAttr(d.id) + '-' + idx + '\')">Rename</button>';
html += '</div>';