fdfsa
This commit is contained in:
@@ -11480,6 +11480,125 @@ document.addEventListener('click', (e) => {
|
||||
return;
|
||||
}
|
||||
|
||||
// Info Modal: Regenerate Thumbnail button
|
||||
const rethumbBtn = e.target.closest('#info-rethumb-btn');
|
||||
if (rethumbBtn) {
|
||||
e.preventDefault();
|
||||
const itemId = rethumbBtn.dataset.itemId || document.getElementById('info-title-input')?.dataset.itemId;
|
||||
if (!itemId) return;
|
||||
|
||||
rethumbBtn.disabled = true;
|
||||
const origText = rethumbBtn.innerHTML;
|
||||
rethumbBtn.innerHTML = '<i class="fa-solid fa-spinner fa-spin"></i> Regenerating...';
|
||||
|
||||
const csrf = window.f0ckSession?.csrf_token;
|
||||
fetch(`/api/v2/items/${itemId}/rethumb`, {
|
||||
method: 'POST',
|
||||
headers: {
|
||||
'Content-Type': 'application/json',
|
||||
'X-CSRF-Token': csrf
|
||||
}
|
||||
})
|
||||
.then(r => r.json())
|
||||
.then(data => {
|
||||
rethumbBtn.disabled = false;
|
||||
rethumbBtn.innerHTML = origText;
|
||||
if (data.success) {
|
||||
if (window.flashMessage) window.flashMessage('THUMBNAIL REGENERATED');
|
||||
else if (window.showFlash) window.showFlash('Thumbnail regenerated');
|
||||
// Cache-bust thumbnails on page
|
||||
const timestamp = Date.now();
|
||||
document.querySelectorAll(`img[src*="/t/${itemId}.webp"]`).forEach(img => {
|
||||
const url = new URL(img.src, window.location.origin);
|
||||
url.searchParams.set('t', timestamp);
|
||||
img.src = url.toString();
|
||||
});
|
||||
document.querySelectorAll(`.thumb[data-bg*="/t/${itemId}.webp"]`).forEach(thumb => {
|
||||
const bg = thumb.dataset.bg;
|
||||
if (bg) {
|
||||
const url = new URL(bg, window.location.origin);
|
||||
url.searchParams.set('t', timestamp);
|
||||
thumb.style.setProperty('--thumb-bg', `url('${url.toString()}')`);
|
||||
}
|
||||
});
|
||||
} else {
|
||||
if (window.flashError) window.flashError(data.msg || 'Regeneration failed');
|
||||
else alert(data.msg || 'Regeneration failed');
|
||||
}
|
||||
})
|
||||
.catch(err => {
|
||||
rethumbBtn.disabled = false;
|
||||
rethumbBtn.innerHTML = origText;
|
||||
console.error('Error regenerating thumbnail:', err);
|
||||
if (window.flashError) window.flashError('Network error');
|
||||
});
|
||||
return;
|
||||
}
|
||||
|
||||
// Info Modal: Set Expiry button
|
||||
const setExpiryBtn = e.target.closest('#info-set-expiry-btn');
|
||||
if (setExpiryBtn) {
|
||||
e.preventDefault();
|
||||
const select = document.getElementById('info-expiry-select');
|
||||
const itemId = setExpiryBtn.dataset.itemId || select?.dataset.itemId || document.getElementById('info-title-input')?.dataset.itemId;
|
||||
if (!itemId || !select) return;
|
||||
|
||||
const selectedExpiry = select.value;
|
||||
|
||||
setExpiryBtn.disabled = true;
|
||||
select.disabled = true;
|
||||
const origText = setExpiryBtn.innerHTML;
|
||||
setExpiryBtn.innerHTML = '<i class="fa-solid fa-spinner fa-spin"></i>';
|
||||
|
||||
const csrf = window.f0ckSession?.csrf_token;
|
||||
fetch(`/api/v2/items/${itemId}/expiry`, {
|
||||
method: 'POST',
|
||||
headers: {
|
||||
'Content-Type': 'application/json',
|
||||
'X-CSRF-Token': csrf
|
||||
},
|
||||
body: JSON.stringify({ expiry: selectedExpiry })
|
||||
})
|
||||
.then(r => r.json())
|
||||
.then(data => {
|
||||
setExpiryBtn.disabled = false;
|
||||
select.disabled = false;
|
||||
setExpiryBtn.innerHTML = origText;
|
||||
if (data.success) {
|
||||
const label = document.getElementById('info-expiry-label');
|
||||
if (label) {
|
||||
if (data.expires_at) {
|
||||
label.innerHTML = `<i class="fa-solid fa-clock"></i> ${data.expires_in || ('in ' + new Date(data.expires_at * 1000).toLocaleString())}`;
|
||||
label.setAttribute('title', new Date(data.expires_at * 1000).toLocaleString());
|
||||
label.style.color = '#ffaa00';
|
||||
} else {
|
||||
label.innerHTML = '<i class="fa-solid fa-clock-slash" style="color: var(--text-muted, #888);"></i> Never';
|
||||
label.removeAttribute('title');
|
||||
label.style.color = '';
|
||||
}
|
||||
}
|
||||
if (data.purged) {
|
||||
if (window.flashMessage) window.flashMessage('ITEM EXPIRED AND PURGED');
|
||||
setTimeout(() => {
|
||||
window.location.href = '/';
|
||||
}, 1200);
|
||||
} else {
|
||||
if (window.flashMessage) window.flashMessage('EXPIRATION UPDATED');
|
||||
}
|
||||
} else {
|
||||
if (window.flashError) window.flashError(data.msg || 'Failed to update expiry');
|
||||
}
|
||||
})
|
||||
.catch(err => {
|
||||
setExpiryBtn.disabled = false;
|
||||
select.disabled = false;
|
||||
setExpiryBtn.innerHTML = origText;
|
||||
console.error('Error setting expiry:', err);
|
||||
if (window.flashError) window.flashError('Network error');
|
||||
});
|
||||
return;
|
||||
}
|
||||
|
||||
// Close when clicking outside modal content
|
||||
const infoModal = document.getElementById('info-modal');
|
||||
if (infoModal && e.target === infoModal) {
|
||||
|
||||
Reference in New Issue
Block a user