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...';