diff --git a/frontend/js/app.js b/frontend/js/app.js index 36a0fdef..8a97b3f2 100644 --- a/frontend/js/app.js +++ b/frontend/js/app.js @@ -152,7 +152,7 @@ const CollectionAPI = { method: 'POST', headers: this.getHeaders(), credentials: 'include', - body: JSON.stringify({ user_id: parseInt(userId), name, description, is_public: isPublic }) + body: JSON.stringify({ user_id: parseInt(userId, 10), name, description, is_public: isPublic }) }); if (!res.ok) { const errData = await res.json().catch(() => ({})); @@ -222,7 +222,7 @@ const CollectionAPI = { headers: this.getHeaders(), credentials: 'include', body: JSON.stringify({ - user_id: parseInt(userId), + user_id: parseInt(userId, 10), google_books_id: bookId, title: title, authors: Array.isArray(authors) ? authors.join(', ') : authors, @@ -939,7 +939,7 @@ class BookRenderer { const slider = scene.querySelector('.progress-slider'); if (slider) { slider.addEventListener('change', (e) => { - const newProgress = parseInt(e.target.value); + const newProgress = parseInt(e.target.value, 10); if (this.libraryManager) { this.libraryManager.updateBook(id, { progress: newProgress }); } @@ -3483,7 +3483,7 @@ document.addEventListener('DOMContentLoaded', async () => { if (saveGoalBtn) { saveGoalBtn.addEventListener('click', async () => { - const target = parseInt(goalInput.value); + const target = parseInt(goalInput.value, 10); if (isNaN(target) || target < 1) return; const token = SafeStorage.get('bibliodrift_token'); @@ -3782,13 +3782,13 @@ document.addEventListener('DOMContentLoaded', async () => { const saveBtn = card.querySelector('.progress-card-save-btn'); slider.addEventListener('input', () => { - const val = parseInt(slider.value); + const val = parseInt(slider.value, 10); barFill.style.width = `${val}%`; pctLabel.textContent = `${val}%`; }); saveBtn.addEventListener('click', async () => { - const newProgress = parseInt(slider.value); + const newProgress = parseInt(slider.value, 10); saveBtn.disabled = true; saveBtn.innerHTML = ''; try { diff --git a/frontend/js/library-3d.js b/frontend/js/library-3d.js index ba5cc1c6..de4ab340 100644 --- a/frontend/js/library-3d.js +++ b/frontend/js/library-3d.js @@ -2407,7 +2407,7 @@ class BookshelfRenderer3D { if (progressBadge) progressBadge.textContent = `${clamped}% `; // Sync pages input if (pagesReadInput && pagesTotalInput) { - const pages = Math.round((clamped / 100) * parseInt(pagesTotalInput.value || totalPages)); + const pages = Math.round((clamped / 100) * parseInt(pagesTotalInput.value || totalPages, 10)); pagesReadInput.value = pages; } if (pagesBar) pagesBar.style.width = `${clamped}% `; @@ -2450,12 +2450,12 @@ class BookshelfRenderer3D { progressSlider.parentNode.replaceChild(newSlider, progressSlider); newSlider.value = currentProgress; newSlider.addEventListener('input', () => { - const pct = parseInt(newSlider.value); + const pct = parseInt(newSlider.value, 10); if (progressBar) progressBar.style.width = `${pct}% `; if (progressValue) progressValue.textContent = `${pct}% `; if (progressBadge) progressBadge.textContent = `${pct}% `; // Sync pages - const total = parseInt(document.getElementById('modal-pages-total')?.value || totalPages); + const total = parseInt(document.getElementById('modal-pages-total', 10)?.value || totalPages); const pages = Math.round((pct / 100) * total); const pagesReadEl = document.getElementById('modal-pages-read'); if (pagesReadEl) pagesReadEl.value = pages; @@ -2469,8 +2469,8 @@ class BookshelfRenderer3D { const pagesTotalEl = document.getElementById('modal-pages-total'); const sliderEl = document.getElementById('modal-progress-slider'); if (!pagesReadEl || !pagesTotalEl) return; - const read = Math.max(0, parseInt(pagesReadEl.value) || 0); - const total = Math.max(1, parseInt(pagesTotalEl.value) || 1); + const read = Math.max(0, parseInt(pagesReadEl.value, 10) || 0); + const total = Math.max(1, parseInt(pagesTotalEl.value, 10) || 1); const pct = Math.min(100, Math.round((read / total) * 100)); if (sliderEl) sliderEl.value = pct; if (progressBar) progressBar.style.width = `${pct}% `; @@ -2497,7 +2497,7 @@ class BookshelfRenderer3D { progressSaveBtn.parentNode.replaceChild(newSaveBtn, progressSaveBtn); newSaveBtn.addEventListener('click', async () => { const sliderEl = document.getElementById('modal-progress-slider'); - const newProgress = sliderEl ? parseInt(sliderEl.value) : currentProgress; + const newProgress = sliderEl ? parseInt(sliderEl.value, 10) : currentProgress; newSaveBtn.disabled = true; newSaveBtn.innerHTML = ' Saving...';