mirror of
https://github.com/imgfloat/server.git
synced 2026-06-22 21:01:23 +00:00
fix: remove duplicate playlist title row when expanded
Move rename/delete buttons into the list item row (only shown when expanded) and remove the redundant title/header section from the detail panel, so the playlist name only appears once regardless of expansion state
This commit is contained in:
@@ -34,9 +34,6 @@
|
|||||||
createBtn: () => document.getElementById("create-playlist-btn"),
|
createBtn: () => document.getElementById("create-playlist-btn"),
|
||||||
list: () => document.getElementById("playlist-list"),
|
list: () => document.getElementById("playlist-list"),
|
||||||
detail: () => document.getElementById("playlist-detail"),
|
detail: () => document.getElementById("playlist-detail"),
|
||||||
detailName: () => document.getElementById("playlist-detail-name"),
|
|
||||||
renameBtn: () => document.getElementById("playlist-rename-btn"),
|
|
||||||
deleteBtn: () => document.getElementById("playlist-delete-btn"),
|
|
||||||
renameForm: () => document.getElementById("playlist-rename-form"),
|
renameForm: () => document.getElementById("playlist-rename-form"),
|
||||||
renameInput: () => document.getElementById("playlist-rename-input"),
|
renameInput: () => document.getElementById("playlist-rename-input"),
|
||||||
renameSave: () => document.getElementById("playlist-rename-save"),
|
renameSave: () => document.getElementById("playlist-rename-save"),
|
||||||
@@ -206,6 +203,30 @@
|
|||||||
selectBtn.addEventListener("click", (e) => { e.stopPropagation(); toggleActivePlaylist(p.id); });
|
selectBtn.addEventListener("click", (e) => { e.stopPropagation(); toggleActivePlaylist(p.id); });
|
||||||
|
|
||||||
actions.appendChild(selectBtn);
|
actions.appendChild(selectBtn);
|
||||||
|
|
||||||
|
if (p.id === expandedPlaylistId) {
|
||||||
|
const renameBtn = document.createElement("button");
|
||||||
|
renameBtn.type = "button";
|
||||||
|
renameBtn.className = "ghost small icon-button";
|
||||||
|
renameBtn.title = "Rename playlist";
|
||||||
|
renameBtn.innerHTML = '<i class="fa-solid fa-pencil" aria-hidden="true"></i>';
|
||||||
|
renameBtn.addEventListener("click", (e) => {
|
||||||
|
e.stopPropagation();
|
||||||
|
el.renameInput().value = p.name;
|
||||||
|
el.renameForm()?.classList.remove("hidden");
|
||||||
|
el.renameInput()?.focus();
|
||||||
|
});
|
||||||
|
|
||||||
|
const deleteBtn = document.createElement("button");
|
||||||
|
deleteBtn.type = "button";
|
||||||
|
deleteBtn.className = "ghost small icon-button danger-icon";
|
||||||
|
deleteBtn.title = "Delete playlist";
|
||||||
|
deleteBtn.innerHTML = '<i class="fa-solid fa-trash" aria-hidden="true"></i>';
|
||||||
|
deleteBtn.addEventListener("click", (e) => { e.stopPropagation(); deletePlaylist(); });
|
||||||
|
|
||||||
|
actions.appendChild(renameBtn);
|
||||||
|
actions.appendChild(deleteBtn);
|
||||||
|
}
|
||||||
li.appendChild(nameSpan);
|
li.appendChild(nameSpan);
|
||||||
li.appendChild(actions);
|
li.appendChild(actions);
|
||||||
list.appendChild(li);
|
list.appendChild(li);
|
||||||
@@ -239,26 +260,17 @@
|
|||||||
// ── Detail panel ──────────────────────────────────────────────────────
|
// ── Detail panel ──────────────────────────────────────────────────────
|
||||||
|
|
||||||
function bindDetailButtons() {
|
function bindDetailButtons() {
|
||||||
el.renameBtn()?.addEventListener("click", () => {
|
|
||||||
const p = getExpanded();
|
|
||||||
if (!p) return;
|
|
||||||
el.renameInput().value = p.name;
|
|
||||||
el.renameForm()?.classList.remove("hidden");
|
|
||||||
});
|
|
||||||
el.renameSave()?.addEventListener("click", saveRename);
|
el.renameSave()?.addEventListener("click", saveRename);
|
||||||
el.renameInput()?.addEventListener("keydown", e => { if (e.key === "Enter") saveRename(); });
|
el.renameInput()?.addEventListener("keydown", e => { if (e.key === "Enter") saveRename(); });
|
||||||
el.renameCancel()?.addEventListener("click", () => el.renameForm()?.classList.add("hidden"));
|
el.renameCancel()?.addEventListener("click", () => el.renameForm()?.classList.add("hidden"));
|
||||||
el.deleteBtn()?.addEventListener("click", deletePlaylist);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
function renderDetail() {
|
function renderDetail() {
|
||||||
const detail = el.detail();
|
const detail = el.detail();
|
||||||
if (!detail) return;
|
if (!detail) return;
|
||||||
const p = getExpanded();
|
const p = getExpanded();
|
||||||
if (!p) { detail.classList.add("hidden"); return; }
|
if (!p) { detail.classList.add("hidden"); el.renameForm()?.classList.add("hidden"); return; }
|
||||||
detail.classList.remove("hidden");
|
detail.classList.remove("hidden");
|
||||||
el.detailName().textContent = p.name;
|
|
||||||
el.renameForm()?.classList.add("hidden");
|
|
||||||
renderControls(p);
|
renderControls(p);
|
||||||
renderTrackList(p);
|
renderTrackList(p);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -97,24 +97,11 @@
|
|||||||
<ul id="playlist-list" class="playlist-list"></ul>
|
<ul id="playlist-list" class="playlist-list"></ul>
|
||||||
<!-- Playlist detail (shown when one is expanded) -->
|
<!-- Playlist detail (shown when one is expanded) -->
|
||||||
<div id="playlist-detail" class="playlist-detail hidden">
|
<div id="playlist-detail" class="playlist-detail hidden">
|
||||||
<div class="playlist-detail-header">
|
|
||||||
<div class="playlist-detail-title-row">
|
|
||||||
<span id="playlist-detail-name" class="playlist-detail-name"></span>
|
|
||||||
<div class="playlist-detail-actions">
|
|
||||||
<button type="button" id="playlist-rename-btn" class="ghost small icon-button" title="Rename playlist">
|
|
||||||
<i class="fa-solid fa-pencil" aria-hidden="true"></i>
|
|
||||||
</button>
|
|
||||||
<button type="button" id="playlist-delete-btn" class="ghost small icon-button danger-icon" title="Delete playlist">
|
|
||||||
<i class="fa-solid fa-trash" aria-hidden="true"></i>
|
|
||||||
</button>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
<div id="playlist-rename-form" class="playlist-rename-form hidden">
|
<div id="playlist-rename-form" class="playlist-rename-form hidden">
|
||||||
<input id="playlist-rename-input" type="text" maxlength="100" autocomplete="off" />
|
<input id="playlist-rename-input" type="text" maxlength="100" autocomplete="off" />
|
||||||
<button type="button" id="playlist-rename-save" class="ghost small">Save</button>
|
<button type="button" id="playlist-rename-save" class="ghost small">Save</button>
|
||||||
<button type="button" id="playlist-rename-cancel" class="ghost small">Cancel</button>
|
<button type="button" id="playlist-rename-cancel" class="ghost small">Cancel</button>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
|
||||||
<!-- Playback controls (only when this playlist is active) -->
|
<!-- Playback controls (only when this playlist is active) -->
|
||||||
<div id="playlist-controls" class="playlist-controls hidden">
|
<div id="playlist-controls" class="playlist-controls hidden">
|
||||||
<div class="playlist-now-playing" id="playlist-now-playing-label"></div>
|
<div class="playlist-now-playing" id="playlist-now-playing-label"></div>
|
||||||
|
|||||||
Reference in New Issue
Block a user