- Pill now reads only 'Paste Created' (no combined 'Paste Created - Link Copied') - Copy fallback toast now says 'Link Copied' - Pill shrunk (smaller padding/font) and anchored tighter to the right side Fixes #168
55 lines
2.4 KiB
JavaScript
55 lines
2.4 KiB
JavaScript
// #53/#139: paste viewer page logic. Paste id arrives via <body data-paste-id>.
|
|
function toast(msg) {
|
|
let t = document.querySelector('.toast');
|
|
if (!t) { t = document.createElement('div'); t.className = 'toast'; document.body.appendChild(t); }
|
|
t.textContent = msg;
|
|
t.classList.add('show');
|
|
clearTimeout(t._h);
|
|
t._h = setTimeout(() => t.classList.remove('show'), 2000);
|
|
}
|
|
function toggleStats() {
|
|
const body = document.getElementById('stats-body');
|
|
const pill = document.getElementById('stats-pill');
|
|
const btn = document.getElementById('stats-toggle');
|
|
const open = body.hidden;
|
|
body.hidden = !open;
|
|
pill.classList.toggle('open', open);
|
|
btn.setAttribute('aria-expanded', open ? 'true' : 'false');
|
|
}
|
|
function copyContent(btn) {
|
|
navigator.clipboard.writeText(document.getElementById('raw-content').value);
|
|
// in-place success feedback (#53)
|
|
if (btn) {
|
|
btn.classList.add('ok');
|
|
btn.textContent = 'Success!';
|
|
clearTimeout(btn._okh);
|
|
btn._okh = setTimeout(() => { btn.classList.remove('ok'); btn.textContent = 'copy'; }, 2000);
|
|
} else {
|
|
toast('Link Copied', 'success');
|
|
}
|
|
}
|
|
function redeem() {
|
|
if (!confirm('Hard delete this paste immediately?')) return;
|
|
let tok = '';
|
|
try { tok = sessionStorage.getItem('deletion_token_' + PASTE_ID) || ''; } catch(e) {}
|
|
if (!tok) { alert('deletion token not available in this browser'); return; }
|
|
fetch('/api/pastes/' + PASTE_ID + '/redeem', {method: 'DELETE', headers: {'Authorization': 'Bearer ' + tok}})
|
|
.then(r => { if (r.ok) location.href = '/history'; else alert('delete failed'); });
|
|
}
|
|
|
|
// wiring (moved from inline handlers for CSP #139)
|
|
var PASTE_ID = document.currentScript.getAttribute('data-paste-id');
|
|
var copyBtn = document.getElementById('copy-btn');
|
|
if (copyBtn) copyBtn.addEventListener('click', function (e) { e.preventDefault(); copyContent(copyBtn); });
|
|
var delBtn = document.getElementById('delete-btn');
|
|
|
|
// #168: show the compact paste-created pill in the bottom corner, then fade it out
|
|
const createdPill = document.getElementById('created-pill');
|
|
if (createdPill) {
|
|
requestAnimationFrame(() => createdPill.classList.add('show'));
|
|
setTimeout(() => createdPill.classList.remove('show'), 4000);
|
|
}
|
|
if (delBtn) delBtn.addEventListener('click', function (e) { e.preventDefault(); redeem(); });
|
|
var statsToggle = document.getElementById('stats-toggle');
|
|
if (statsToggle) statsToggle.addEventListener('click', toggleStats);
|