✨ permalink option
This commit is contained in:
84
static/js/permalink.js
Normal file
84
static/js/permalink.js
Normal file
@@ -0,0 +1,84 @@
|
||||
// Permalink functionality for Sunday Comics
|
||||
// Handles copying comic permalinks to clipboard
|
||||
|
||||
(function() {
|
||||
'use strict';
|
||||
|
||||
const permalinkButton = document.getElementById('permalink-button');
|
||||
|
||||
if (!permalinkButton) {
|
||||
// Permalink feature not enabled or button not found
|
||||
return;
|
||||
}
|
||||
|
||||
// Get the site URL from the page
|
||||
const siteUrl = document.body.getAttribute('data-site-url') || window.location.origin;
|
||||
|
||||
// Copy permalink when button is clicked
|
||||
permalinkButton.addEventListener('click', function() {
|
||||
const comicNumber = this.getAttribute('data-comic-number');
|
||||
if (!comicNumber) return;
|
||||
|
||||
// Generate permalink URL
|
||||
const permalink = `${siteUrl}/comic/${comicNumber}`;
|
||||
|
||||
// Copy to clipboard
|
||||
copyToClipboard(permalink);
|
||||
});
|
||||
|
||||
// Copy text to clipboard
|
||||
function copyToClipboard(text) {
|
||||
// Modern clipboard API
|
||||
if (navigator.clipboard && navigator.clipboard.writeText) {
|
||||
navigator.clipboard.writeText(text).then(function() {
|
||||
showCopyFeedback();
|
||||
}).catch(function() {
|
||||
// Fallback for older browsers
|
||||
fallbackCopy(text);
|
||||
});
|
||||
} else {
|
||||
// Fallback for older browsers
|
||||
fallbackCopy(text);
|
||||
}
|
||||
}
|
||||
|
||||
// Fallback copy method for older browsers
|
||||
function fallbackCopy(text) {
|
||||
// Create temporary textarea
|
||||
const textarea = document.createElement('textarea');
|
||||
textarea.value = text;
|
||||
textarea.style.position = 'fixed';
|
||||
textarea.style.opacity = '0';
|
||||
document.body.appendChild(textarea);
|
||||
textarea.focus();
|
||||
textarea.select();
|
||||
|
||||
try {
|
||||
document.execCommand('copy');
|
||||
showCopyFeedback();
|
||||
} catch (err) {
|
||||
alert('Failed to copy. Please copy manually: ' + text);
|
||||
}
|
||||
|
||||
document.body.removeChild(textarea);
|
||||
}
|
||||
|
||||
// Show visual feedback that the permalink was copied
|
||||
function showCopyFeedback() {
|
||||
const originalText = permalinkButton.textContent;
|
||||
permalinkButton.textContent = 'Copied!';
|
||||
permalinkButton.classList.add('copied');
|
||||
|
||||
setTimeout(function() {
|
||||
permalinkButton.textContent = originalText;
|
||||
permalinkButton.classList.remove('copied');
|
||||
}, 2000);
|
||||
}
|
||||
|
||||
// Update permalink button when comic changes via client-side navigation
|
||||
window.addEventListener('comicUpdated', function(event) {
|
||||
if (event.detail && event.detail.comicNumber && permalinkButton) {
|
||||
permalinkButton.setAttribute('data-comic-number', event.detail.comicNumber);
|
||||
}
|
||||
});
|
||||
})();
|
||||
Reference in New Issue
Block a user