feat: Sample Tag Viewer — read-only tag browser for AKAI disk images #17

Merged
david merged 5 commits from feat/sample-tag-editor into main 2026-06-22 18:13:53 +00:00
Showing only changes of commit a489d523e3 - Show all commits
+19 -7
View File
@@ -428,9 +428,13 @@ async function browseISO() {
try { try {
const resp = await fetch(`${API}/disk/partitions?iso=${encodeURIComponent(iso)}`) const resp = await fetch(`${API}/disk/partitions?iso=${encodeURIComponent(iso)}`)
if (!resp.ok) {
status.textContent = 'HTTP ' + resp.status
return
}
const data = await resp.json() const data = await resp.json()
if (data.error) { if (!data || data.error) {
status.textContent = data.error status.textContent = (data && data.error) || 'server error'
return return
} }
status.textContent = data.length + ' partition' + (data.length === 1 ? '' : 's') status.textContent = data.length + ' partition' + (data.length === 1 ? '' : 's')
@@ -454,9 +458,13 @@ async function selectPartition(iso, part) {
try { try {
const resp = await fetch(`${API}/disk/volumes?iso=${encodeURIComponent(iso)}&part=${encodeURIComponent(part)}`) const resp = await fetch(`${API}/disk/volumes?iso=${encodeURIComponent(iso)}&part=${encodeURIComponent(part)}`)
if (!resp.ok) {
volsEl.innerHTML = '<span class="no-files">HTTP ' + resp.status + '</span>'
return
}
const data = await resp.json() const data = await resp.json()
if (data.error) { if (!data || data.error) {
volsEl.innerHTML = '<span class="no-files">' + data.error + '</span>' volsEl.innerHTML = '<span class="no-files">' + (data && data.error ? data.error : 'server error') + '</span>'
return return
} }
if (!Array.isArray(data) || data.length === 0) { if (!Array.isArray(data) || data.length === 0) {
@@ -464,7 +472,7 @@ async function selectPartition(iso, part) {
return return
} }
volsEl.innerHTML = data.map(v => ` volsEl.innerHTML = data.map(v => `
<div class="vol-item" data-action="tag-vol" data-iso="${esc(iso)}" data-part="${esc(part)}" data-vol="${esc(v.Name)}">${esc(v.Name)}</div> <div class="vol-item" data-action="tag-vol" data-iso="${esc(iso)}" data-part="${esc(part)}" data-vol="${esc(v.name)}">${esc(v.name)}</div>
`).join('') `).join('')
} catch (e) { } catch (e) {
volsEl.innerHTML = 'Failed: ' + e.message volsEl.innerHTML = 'Failed: ' + e.message
@@ -480,9 +488,13 @@ async function viewVolumeTags(iso, part, vol) {
try { try {
const resp = await fetch(`${API}/volume/tags?iso=${encodeURIComponent(iso)}&part=${encodeURIComponent(part)}&vol=${encodeURIComponent(vol)}`) const resp = await fetch(`${API}/volume/tags?iso=${encodeURIComponent(iso)}&part=${encodeURIComponent(part)}&vol=${encodeURIComponent(vol)}`)
if (!resp.ok) {
detailEl.innerHTML = '<span class="no-files">HTTP ' + resp.status + '</span>'
return
}
const data = await resp.json() const data = await resp.json()
if (data.error) { if (!data || data.error) {
detailEl.innerHTML = '<span class="no-files">' + data.error + '</span>' detailEl.innerHTML = '<span class="no-files">' + (data && data.error ? data.error : 'server error') + '</span>'
return return
} }
if (!Array.isArray(data) || data.length === 0) { if (!Array.isArray(data) || data.length === 0) {