143 lines
4.5 KiB
JavaScript
143 lines
4.5 KiB
JavaScript
/**
|
|
* Simple Metadata Section Toggle
|
|
*
|
|
* Handles showing/hiding the metadata grid with a simple button
|
|
*/
|
|
|
|
// Global function to toggle metadata section visibility
|
|
function toggleMetadataSection() {
|
|
console.log('toggleMetadataSection called');
|
|
|
|
const content = document.getElementById('metadataContent');
|
|
const arrow = document.getElementById('metadataArrow');
|
|
|
|
if (!content) {
|
|
console.log('No metadata content found');
|
|
return;
|
|
}
|
|
|
|
const isVisible = content.style.display !== 'none';
|
|
|
|
if (isVisible) {
|
|
// Hide the content
|
|
content.style.display = 'none';
|
|
if (arrow) arrow.textContent = '▼';
|
|
console.log('Metadata hidden');
|
|
} else {
|
|
// Show the content
|
|
content.style.display = 'block';
|
|
if (arrow) arrow.textContent = '▲';
|
|
console.log('Metadata shown');
|
|
|
|
// Trigger MathJax rendering for LaTeX content
|
|
if (typeof MathJax !== 'undefined') {
|
|
MathJax.typesetPromise([content]).catch(function (err) {
|
|
console.log('MathJax typeset failed: ' + err.message);
|
|
});
|
|
}
|
|
}
|
|
|
|
// Save state to localStorage
|
|
localStorage.setItem('metadataVisible', (!isVisible).toString());
|
|
}
|
|
|
|
// Function to expand long text
|
|
function expandText(button) {
|
|
const longText = button.previousElementSibling;
|
|
const fullText = button.nextElementSibling;
|
|
|
|
if (fullText.style.display === 'none') {
|
|
longText.style.display = 'none';
|
|
fullText.style.display = 'inline';
|
|
button.textContent = 'Show less';
|
|
} else {
|
|
longText.style.display = 'inline';
|
|
fullText.style.display = 'none';
|
|
button.textContent = 'Show more';
|
|
}
|
|
}
|
|
|
|
// Copy metadata file path to clipboard
|
|
async function copyMetadataPath() {
|
|
const pathElement = document.getElementById('metadata-file-path');
|
|
const copyBtn = document.querySelector('.copy-path-btn');
|
|
|
|
if (!pathElement || !copyBtn) {
|
|
console.log('Path element or copy button not found');
|
|
return;
|
|
}
|
|
|
|
const path = pathElement.textContent;
|
|
console.log('Attempting to copy path:', path);
|
|
|
|
try {
|
|
// Try using the modern clipboard API
|
|
if (navigator.clipboard && window.isSecureContext) {
|
|
await navigator.clipboard.writeText(path);
|
|
} else {
|
|
// Fallback for older browsers
|
|
const textArea = document.createElement('textarea');
|
|
textArea.value = path;
|
|
textArea.style.position = 'fixed';
|
|
textArea.style.left = '-999999px';
|
|
textArea.style.top = '-999999px';
|
|
document.body.appendChild(textArea);
|
|
textArea.focus();
|
|
textArea.select();
|
|
document.execCommand('copy');
|
|
textArea.remove();
|
|
}
|
|
|
|
// Visual feedback
|
|
const originalText = copyBtn.innerHTML;
|
|
copyBtn.innerHTML = '✅ Copied!';
|
|
copyBtn.classList.add('copied');
|
|
|
|
setTimeout(() => {
|
|
copyBtn.innerHTML = originalText;
|
|
copyBtn.classList.remove('copied');
|
|
}, 2000);
|
|
|
|
console.log('Path copied successfully');
|
|
|
|
} catch (err) {
|
|
console.error('Failed to copy path: ', err);
|
|
|
|
// Show error feedback
|
|
const originalText = copyBtn.innerHTML;
|
|
copyBtn.innerHTML = '❌ Failed';
|
|
|
|
setTimeout(() => {
|
|
copyBtn.innerHTML = originalText;
|
|
}, 2000);
|
|
}
|
|
}
|
|
|
|
// Make functions globally available
|
|
window.toggleMetadataSection = toggleMetadataSection;
|
|
window.expandText = expandText;
|
|
window.copyMetadataPath = copyMetadataPath;
|
|
|
|
// Initialize on page load
|
|
document.addEventListener('DOMContentLoaded', function() {
|
|
console.log('Metadata section script loaded');
|
|
|
|
const content = document.getElementById('metadataContent');
|
|
if (content) {
|
|
// Check if user previously had it expanded
|
|
const wasVisible = localStorage.getItem('metadataVisible') === 'true';
|
|
|
|
if (wasVisible) {
|
|
content.style.display = 'block';
|
|
const arrow = document.getElementById('metadataArrow');
|
|
if (arrow) arrow.textContent = '▲';
|
|
} else {
|
|
content.style.display = 'none';
|
|
const arrow = document.getElementById('metadataArrow');
|
|
if (arrow) arrow.textContent = '▼';
|
|
}
|
|
|
|
console.log('Metadata section initialized, visible:', wasVisible);
|
|
}
|
|
});
|