better ui for anilist entries & fixes

This commit is contained in:
2025-12-07 02:24:30 +01:00
parent 6ae823ac0b
commit 1973069949
15 changed files with 1723 additions and 668 deletions

View File

@@ -34,8 +34,8 @@ function getSimpleAuthHeaders() {
};
}
// Lógica de chequeo de lista corregida para usar /list/entry/{id} y esperar 'found'
async function checkIfInList() {
const entryId = window.location.pathname.split('/').pop();
const source = extensionName || 'anilist';
const entryType = 'ANIME';
@@ -51,8 +51,7 @@ async function checkIfInList() {
if (response.ok) {
const data = await response.json();
if (data.found && data.entry) {
if (data.found && data.entry) { // Esperamos 'found'
isInList = true;
currentListEntry = data.entry;
} else {
@@ -69,6 +68,8 @@ async function checkIfInList() {
function updateAddToListButton() {
const btn = document.getElementById('add-to-list-btn');
if (!btn) return;
if (isInList) {
btn.innerHTML = `
<svg width="20" height="20" fill="currentColor" viewBox="0 0 24 24">
@@ -87,36 +88,73 @@ function updateAddToListButton() {
}
}
// Función openAddToListModal actualizada con todos los campos extendidos
function openAddToListModal() {
if (isInList) {
// Referencias
const modalTitle = document.getElementById('modal-title');
const deleteBtn = document.getElementById('modal-delete-btn');
document.getElementById('modal-status').value = currentListEntry.status || 'PLANNING';
document.getElementById('modal-progress').value = currentListEntry.progress || 0;
document.getElementById('modal-score').value = currentListEntry.score || '';
// Mapeo de prefijos (usamos 'entry-' para el HTML del modal extendido)
const statusEl = document.getElementById('entry-status');
const progressEl = document.getElementById('entry-progress');
const scoreEl = document.getElementById('entry-score');
const startDateEl = document.getElementById('entry-start-date');
const endDateEl = document.getElementById('entry-end-date');
const repeatCountEl = document.getElementById('entry-repeat-count');
const notesEl = document.getElementById('entry-notes');
const privateEl = document.getElementById('entry-is-private');
document.getElementById('modal-title').textContent = 'Edit List Entry';
document.getElementById('modal-delete-btn').style.display = 'block';
if (isInList && currentListEntry) {
statusEl.value = currentListEntry.status || 'PLANNING';
progressEl.value = currentListEntry.progress || 0;
scoreEl.value = currentListEntry.score || '';
// Campos extendidos
startDateEl.value = currentListEntry.start_date ? currentListEntry.start_date.split('T')[0] : '';
endDateEl.value = currentListEntry.end_date ? currentListEntry.end_date.split('T')[0] : '';
repeatCountEl.value = currentListEntry.repeat_count || 0;
notesEl.value = currentListEntry.notes || '';
privateEl.checked = currentListEntry.is_private === true || currentListEntry.is_private === 1;
modalTitle.textContent = 'Edit List Entry';
deleteBtn.style.display = 'block';
} else {
// Valores por defecto
statusEl.value = 'PLANNING';
progressEl.value = 0;
scoreEl.value = '';
startDateEl.value = '';
endDateEl.value = '';
repeatCountEl.value = 0;
notesEl.value = '';
privateEl.checked = false;
document.getElementById('modal-status').value = 'PLANNING';
document.getElementById('modal-progress').value = 0;
document.getElementById('modal-score').value = '';
document.getElementById('modal-title').textContent = 'Add to List';
document.getElementById('modal-delete-btn').style.display = 'none';
modalTitle.textContent = 'Add to List';
deleteBtn.style.display = 'none';
}
document.getElementById('modal-progress').max = totalEpisodes || 999;
document.getElementById('add-list-modal').classList.add('active');}
progressEl.max = totalEpisodes || 999;
document.getElementById('add-list-modal').classList.add('active');
}
function closeAddToListModal() {
document.getElementById('add-list-modal').classList.remove('active');
}
// Función saveToList actualizada con todos los campos extendidos
async function saveToList() {
const status = document.getElementById('modal-status').value;
const progress = parseInt(document.getElementById('modal-progress').value) || 0;
const score = parseFloat(document.getElementById('modal-score').value) || null;
const status = document.getElementById('entry-status').value;
const progress = parseInt(document.getElementById('entry-progress').value) || 0;
const scoreValue = document.getElementById('entry-score').value;
const score = scoreValue ? parseFloat(scoreValue) : null;
// Nuevos campos
const start_date = document.getElementById('entry-start-date').value || null;
const end_date = document.getElementById('entry-end-date').value || null;
const repeat_count = parseInt(document.getElementById('entry-repeat-count').value) || 0;
const notes = document.getElementById('entry-notes').value || null;
const is_private = document.getElementById('entry-is-private').checked;
try {
const response = await fetch(`${API_BASE}/list/entry`, {
@@ -128,7 +166,13 @@ async function saveToList() {
entry_type: 'ANIME',
status: status,
progress: progress,
score: score
score: score,
// Campos extendidos
start_date: start_date,
end_date: end_date,
repeat_count: repeat_count,
notes: notes,
is_private: is_private
})
});
@@ -136,16 +180,10 @@ async function saveToList() {
throw new Error('Failed to save entry');
}
isInList = true;
currentListEntry = {
entry_id: parseInt(animeId),
source: extensionName || 'anilist',
entry_type: 'ANIME',
const data = await response.json();
status,
progress,
score
};
isInList = true;
currentListEntry = data.entry;
updateAddToListButton();
closeAddToListModal();
showNotification(isInList ? 'Updated successfully!' : 'Added to your list!', 'success');
@@ -158,8 +196,11 @@ async function saveToList() {
async function deleteFromList() {
if (!confirm('Remove this anime from your list?')) return;
const source = extensionName || 'anilist';
const entryType = 'ANIME';
try {
const response = await fetch(`${API_BASE}/list/entry/${animeId}`, {
const response = await fetch(`${API_BASE}/list/entry/${animeId}?source=${source}&entry_type=${entryType}`, {
method: 'DELETE',
headers: getSimpleAuthHeaders()