better ui for anilist entries & fixes
This commit is contained in:
@@ -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()
|
||||
|
||||
|
||||
Reference in New Issue
Block a user