Jesús Pérex 095fd89ff7
Some checks failed
CI/CD Pipeline / Test Suite (push) Has been cancelled
CI/CD Pipeline / Security Audit (push) Has been cancelled
CI/CD Pipeline / Build Docker Image (push) Has been cancelled
CI/CD Pipeline / Deploy to Staging (push) Has been cancelled
CI/CD Pipeline / Deploy to Production (push) Has been cancelled
CI/CD Pipeline / Performance Benchmarks (push) Has been cancelled
CI/CD Pipeline / Cleanup (push) Has been cancelled
chore: add scripts
2025-07-07 23:53:50 +01:00

116 lines
4.0 KiB
JavaScript

// Rustelo Documentation Custom JavaScript
// Add copy buttons to code blocks
document.addEventListener('DOMContentLoaded', function() {
// Add copy buttons to code blocks
const codeBlocks = document.querySelectorAll('pre > code');
codeBlocks.forEach(function(codeBlock) {
const pre = codeBlock.parentElement;
const button = document.createElement('button');
button.className = 'copy-button';
button.textContent = 'Copy';
button.style.cssText = `
position: absolute;
top: 8px;
right: 8px;
background: #4a5568;
color: white;
border: none;
padding: 4px 8px;
border-radius: 4px;
font-size: 12px;
cursor: pointer;
opacity: 0;
transition: opacity 0.2s;
`;
pre.style.position = 'relative';
pre.appendChild(button);
pre.addEventListener('mouseenter', function() {
button.style.opacity = '1';
});
pre.addEventListener('mouseleave', function() {
button.style.opacity = '0';
});
button.addEventListener('click', function() {
const text = codeBlock.textContent;
navigator.clipboard.writeText(text).then(function() {
button.textContent = 'Copied!';
button.style.background = '#48bb78';
setTimeout(function() {
button.textContent = 'Copy';
button.style.background = '#4a5568';
}, 2000);
});
});
});
// Add feature badges
const content = document.querySelector('.content');
if (content) {
let html = content.innerHTML;
// Replace feature indicators
html = html.replace(/\[FEATURE:([^\]]+)\]/g, '<span class="feature-badge enabled">$1</span>');
html = html.replace(/\[OPTIONAL:([^\]]+)\]/g, '<span class="feature-badge optional">$1</span>');
html = html.replace(/\[DISABLED:([^\]]+)\]/g, '<span class="feature-badge disabled">$1</span>');
// Add callout boxes
html = html.replace(/\[NOTE\]([\s\S]*?)\[\/NOTE\]/g, '<div class="callout note">$1</div>');
html = html.replace(/\[WARNING\]([\s\S]*?)\[\/WARNING\]/g, '<div class="callout warning">$1</div>');
html = html.replace(/\[TIP\]([\s\S]*?)\[\/TIP\]/g, '<div class="callout tip">$1</div>');
html = html.replace(/\[DANGER\]([\s\S]*?)\[\/DANGER\]/g, '<div class="callout danger">$1</div>');
content.innerHTML = html;
}
// Add smooth scrolling
document.querySelectorAll('a[href^="#"]').forEach(anchor => {
anchor.addEventListener('click', function (e) {
e.preventDefault();
const target = document.querySelector(this.getAttribute('href'));
if (target) {
target.scrollIntoView({
behavior: 'smooth'
});
}
});
});
});
// Add keyboard shortcuts
document.addEventListener('keydown', function(e) {
// Ctrl/Cmd + K to focus search
if ((e.ctrlKey || e.metaKey) && e.key === 'k') {
e.preventDefault();
const searchInput = document.querySelector('#searchbar');
if (searchInput) {
searchInput.focus();
}
}
});
// Add version info to footer
document.addEventListener('DOMContentLoaded', function() {
const content = document.querySelector('.content');
if (content) {
const footer = document.createElement('div');
footer.style.cssText = `
margin-top: 3rem;
padding: 2rem 0;
border-top: 1px solid #e2e8f0;
text-align: center;
font-size: 0.875rem;
color: #718096;
`;
footer.innerHTML = `
<p>Built with ❤️ using <a href="https://rust-lang.github.io/mdBook/" target="_blank">mdBook</a></p>
<p>Rustelo Documentation • Last updated: ${new Date().toLocaleDateString()}</p>
`;
content.appendChild(footer);
}
});