Add DELETE /api/exports/{id} endpoint with cascade delete, trash icon
buttons on both the exports list and export detail pages, and disable
browser caching for static files to prevent stale JS issues.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
36 lines
1.4 KiB
JavaScript
36 lines
1.4 KiB
JavaScript
const router = {
|
|
go(page, params = {}) {
|
|
const hash = page + (params.id ? '/' + params.id : '') + (params.q ? '?q=' + encodeURIComponent(params.q) : '');
|
|
location.hash = hash;
|
|
},
|
|
parse() {
|
|
const h = location.hash.slice(1) || 'exports';
|
|
const [path, qs] = h.split('?');
|
|
const parts = path.split('/');
|
|
const params = {};
|
|
if (qs) qs.split('&').forEach(p => { const [k,v] = p.split('='); params[k] = decodeURIComponent(v); });
|
|
return { page: parts[0], id: parts[1], params };
|
|
},
|
|
init() {
|
|
window.addEventListener('hashchange', () => this.dispatch());
|
|
this.dispatch();
|
|
},
|
|
dispatch() {
|
|
const { page, id, params } = this.parse();
|
|
document.querySelectorAll('.nav-item').forEach(el => {
|
|
el.classList.toggle('active',
|
|
el.dataset.page === page ||
|
|
(page === 'export-detail' && el.dataset.page === 'exports') ||
|
|
(page === 'drawing-detail' && el.dataset.page === 'drawings'));
|
|
});
|
|
switch(page) {
|
|
case 'exports': pages.exports(params); break;
|
|
case 'export-detail': pages.exportDetail(id); break;
|
|
case 'drawings': pages.drawings(params); break;
|
|
case 'drawing-detail': pages.drawingDetail(id, params); break;
|
|
case 'files': pages.files(params); break;
|
|
default: pages.exports(params);
|
|
}
|
|
}
|
|
};
|