Click the file select icon to "edit" content.Loading...
'; const start = (currentPage - 1) * itemsPerPage; const pageItems = filteredResults.slice(start, start + itemsPerPage); buildContentTable(pageItems); } catch (error) { console.error('Error fetching page:', error); document.getElementById('content-details').innerHTML = `Error: ${error.message}
`; } } // ===== Table & pagination ===== function buildIdentifierCellHTML(result, identifier) { const svc = result.service; const key = selKey(svc, identifier); const checkbox = ``; const deleteIcon = `
`;
const embedIcon = isEmbedService(svc) ? (
``
) : '';
return `${checkbox}${deleteIcon}${editIcon}${identifier}${embedIcon}`;
}
function setBulkMode(on) {
bulkDeleteMode = !!on;
document.body.classList.toggle('bulk-mode', bulkDeleteMode);
updateBulkControlsUI();
}
// ===== Bulk delete UI wiring =====
function updateBulkControlsUI() {
const btn = document.getElementById('bulk-delete-toggle');
if (btn) {
const count = getSelectedCount();
if (!bulkDeleteMode) btn.textContent = 'Delete Files';
else btn.textContent = count > 0 ? `Delete ${count} Files` : 'Deleting Files';
}
const selAll = document.getElementById('select-all-checkbox');
if (selAll) {
// Determine if all visible are checked
const boxes = Array.from(document.querySelectorAll('.bulk-select'));
const allChecked = boxes.length > 0 && boxes.every(cb => cb.checked);
selAll.checked = allChecked;
selAll.indeterminate = boxes.some(cb => cb.checked) && !allChecked;
}
}
async function bulkDeleteSelected() {
try {
if (!userName || userName === 'Name unavailable') return;
const entries = Array.from(selectedForDeletion).map(k => {
const [svc, ident] = k.split('||');
return { service: svc, identifier: ident === 'default' ? undefined : ident };
});
if (entries.length === 0) return;
showPublishModal("Deleting selected files…");
// Build a tiny non-empty file to mark as deleted
const emptyFile = new Blob(['\n'], { type: 'application/octet-stream' });
const resourceArray = entries.map(e => ({
name: userName,
service: e.service,
identifier: e.identifier || 'default',
file: emptyFile
}));
const response = await qortalRequest({ action: 'PUBLISH_MULTIPLE_QDN_RESOURCES', resources: resourceArray });
console.log('Bulk delete response:', response);
// Remove deleted from masterResults
const keySet = new Set(resourceArray.map(r => selKey(r.service, r.identifier)));
masterResults = masterResults.filter(r => !keySet.has(selKey(r.service, r.identifier)));
// Recompute derived collections
recomputeServiceCounts();
applyServiceFilter();
selectedForDeletion.clear();
setBulkMode(false);
await fetchPage();
} catch (err) {
alert('Bulk delete failed: ' + (err?.message || err));
} finally {
closePublishModal();
}
}
function buildContentTable(results) {
const contentDetailsDiv = document.getElementById('content-details');
const contentSummaryDiv = document.getElementById('content-summary');
if (results.length === 0) {
contentDetailsDiv.innerHTML = 'No results found.
'; contentSummaryDiv.innerHTML = ''; document.getElementById('pagination-top').innerHTML = ''; document.getElementById('pagination-bottom').innerHTML = ''; return; } results.sort((a, b) => (b.updated || b.created) - (a.updated || a.created)); let tableHtml = '| Service | Identifier ${ bulkDeleteMode ? '' : '' } | Metadata | Preview | Size | Created / Updated |
|---|---|---|---|---|---|
| ${result.service} | ${buildIdentifierCellHTML(result, identifier)} | ${generatePreviewHTML(result, userName, identifier)} | ${sizeString} | ${createdString} ${updatedString} |