format/js/backup-script.txt
2025-09-08 16:25:26 -05:00

130 lines
No EOL
4.5 KiB
Text

// code to preserve orignal code can be deleted once code run properly:
document.addEventListener('DOMContentLoaded', function() {
const markdownInput = document.getElementById('markdown-input');
const htmlOutput = document.getElementById('html-output');
const selectAllBtn = document.getElementById('select-all');
const copyBtn = document.getElementById('copy');
function updateOutput() {
const markdown = markdownInput.value;
if (!markdown.trim()) {
htmlOutput.innerHTML = '';
return;
}
// Convert markdown to HTML client-side
const html = marked(markdown);
htmlOutput.innerHTML = html;
// Apply alternating column colors to tables
const tables = htmlOutput.querySelectorAll('table');
tables.forEach(table => {
const rows = table.querySelectorAll('tr');
rows.forEach(row => {
const cells = row.querySelectorAll('td');
cells.forEach((cell, index) => {
if (index % 2 === 0) {
cell.style.backgroundColor = 'rgba(0, 0, 0, 0.25)';
}
});
});
});
}
markdownInput.addEventListener('input', updateOutput);
selectAllBtn.addEventListener('click', function() {
if (!htmlOutput.innerHTML.trim()) {
alert('No content to select');
return;
}
const range = document.createRange();
range.selectNodeContents(htmlOutput);
const selection = window.getSelection();
selection.removeAllRanges();
selection.addRange(range);
});
copyBtn.addEventListener('click', function() {
if (!htmlOutput.innerHTML.trim()) {
alert('No content to copy');
return;
}
// Use modern clipboard API if available
if (navigator.clipboard && window.isSecureContext) {
navigator.clipboard.writeText(htmlOutput.innerHTML).then(() => {
showNotification('HTML copied to clipboard!');
}).catch(err => {
console.error('Failed to copy:', err);
fallbackCopy();
});
} else {
fallbackCopy();
}
});
function fallbackCopy() {
const range = document.createRange();
range.selectNodeContents(htmlOutput);
const selection = window.getSelection();
selection.removeAllRanges();
selection.addRange(range);
try {
document.execCommand('copy');
showNotification('HTML copied to clipboard!');
} catch (err) {
console.error('Fallback copy failed:', err);
showNotification('Failed to copy to clipboard', 'error');
}
selection.removeAllRanges();
}
function showNotification(message, type = 'success') {
// Create notification element
const notification = document.createElement('div');
notification.textContent = message;
notification.style.cssText = `
position: fixed;
top: 20px;
right: 20px;
background: ${type === 'error' ? '#f44336' : '#4caf50'};
color: white;
padding: 12px 20px;
border-radius: 4px;
font-family: 'Montserrat', Arial, sans-serif;
z-index: 1000;
animation: slideIn 0.3s ease;
`;
// Add CSS animation
const style = document.createElement('style');
style.textContent = `
@keyframes slideIn {
from { transform: translateX(100%); opacity: 0; }
to { transform: translateX(0); opacity: 1; }
}
`;
document.head.appendChild(style);
document.body.appendChild(notification);
// Remove notification after 3 seconds
setTimeout(() => {
notification.remove();
style.remove();
}, 3000);
}
// Handle authentication errors gracefully
window.addEventListener('unhandledrejection', function(event) {
if (event.reason && event.reason.message && event.reason.message.includes('authentication')) {
showNotification('Authentication error. Please refresh and login again.', 'error');
}
});
});