mirror of
				https://github.com/zadam/trilium.git
				synced 2025-11-03 20:06:08 +01:00 
			
		
		
		
	
		
			
	
	
		
			111 lines
		
	
	
		
			3.8 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
		
		
			
		
	
	
			111 lines
		
	
	
		
			3.8 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
| 
								 | 
							
								// Custom JavaScript for Trilium Notes documentation
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								// Add smooth scrolling for anchor links
							 | 
						||
| 
								 | 
							
								document.addEventListener('DOMContentLoaded', function() {
							 | 
						||
| 
								 | 
							
								    // Smooth scroll for internal links
							 | 
						||
| 
								 | 
							
								    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',
							 | 
						||
| 
								 | 
							
								                    block: 'start'
							 | 
						||
| 
								 | 
							
								                });
							 | 
						||
| 
								 | 
							
								            }
							 | 
						||
| 
								 | 
							
								        });
							 | 
						||
| 
								 | 
							
								    });
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    // Add copy button to code blocks if not already present
							 | 
						||
| 
								 | 
							
								    const codeBlocks = document.querySelectorAll('pre code');
							 | 
						||
| 
								 | 
							
								    codeBlocks.forEach(block => {
							 | 
						||
| 
								 | 
							
								        if (!block.parentElement.querySelector('.copy-button')) {
							 | 
						||
| 
								 | 
							
								            const button = document.createElement('button');
							 | 
						||
| 
								 | 
							
								            button.className = 'copy-button';
							 | 
						||
| 
								 | 
							
								            button.textContent = 'Copy';
							 | 
						||
| 
								 | 
							
								            button.addEventListener('click', () => {
							 | 
						||
| 
								 | 
							
								                navigator.clipboard.writeText(block.textContent);
							 | 
						||
| 
								 | 
							
								                button.textContent = 'Copied!';
							 | 
						||
| 
								 | 
							
								                setTimeout(() => {
							 | 
						||
| 
								 | 
							
								                    button.textContent = 'Copy';
							 | 
						||
| 
								 | 
							
								                }, 2000);
							 | 
						||
| 
								 | 
							
								            });
							 | 
						||
| 
								 | 
							
								            block.parentElement.appendChild(button);
							 | 
						||
| 
								 | 
							
								        }
							 | 
						||
| 
								 | 
							
								    });
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    // Add external link indicators
							 | 
						||
| 
								 | 
							
								    document.querySelectorAll('a[href^="http"]').forEach(link => {
							 | 
						||
| 
								 | 
							
								        if (!link.hostname.includes('trilium')) {
							 | 
						||
| 
								 | 
							
								            link.classList.add('external-link');
							 | 
						||
| 
								 | 
							
								            link.setAttribute('target', '_blank');
							 | 
						||
| 
								 | 
							
								            link.setAttribute('rel', 'noopener noreferrer');
							 | 
						||
| 
								 | 
							
								        }
							 | 
						||
| 
								 | 
							
								    });
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    // Platform detection for download buttons
							 | 
						||
| 
								 | 
							
								    const platform = detectPlatform();
							 | 
						||
| 
								 | 
							
								    const downloadButtons = document.querySelectorAll('.download-button');
							 | 
						||
| 
								 | 
							
								    downloadButtons.forEach(button => {
							 | 
						||
| 
								 | 
							
								        if (button.dataset.platform === platform) {
							 | 
						||
| 
								 | 
							
								            button.classList.add('recommended');
							 | 
						||
| 
								 | 
							
								            button.innerHTML += ' <span class="badge">Recommended</span>';
							 | 
						||
| 
								 | 
							
								        }
							 | 
						||
| 
								 | 
							
								    });
							 | 
						||
| 
								 | 
							
								});
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								// Detect user's platform
							 | 
						||
| 
								 | 
							
								function detectPlatform() {
							 | 
						||
| 
								 | 
							
								    const userAgent = navigator.userAgent.toLowerCase();
							 | 
						||
| 
								 | 
							
								    if (userAgent.includes('win')) return 'windows';
							 | 
						||
| 
								 | 
							
								    if (userAgent.includes('mac')) return 'macos';
							 | 
						||
| 
								 | 
							
								    if (userAgent.includes('linux')) return 'linux';
							 | 
						||
| 
								 | 
							
								    return 'unknown';
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								// Add search 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('.md-search__input');
							 | 
						||
| 
								 | 
							
								        if (searchInput) {
							 | 
						||
| 
								 | 
							
								            searchInput.focus();
							 | 
						||
| 
								 | 
							
								        }
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								});
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								// Version selector enhancement
							 | 
						||
| 
								 | 
							
								const versionSelector = document.querySelector('.md-version__current');
							 | 
						||
| 
								 | 
							
								if (versionSelector) {
							 | 
						||
| 
								 | 
							
								    // Add version comparison tooltip
							 | 
						||
| 
								 | 
							
								    versionSelector.addEventListener('mouseenter', function() {
							 | 
						||
| 
								 | 
							
								        const tooltip = document.createElement('div');
							 | 
						||
| 
								 | 
							
								        tooltip.className = 'version-tooltip';
							 | 
						||
| 
								 | 
							
								        tooltip.textContent = 'Click to view other versions';
							 | 
						||
| 
								 | 
							
								        this.appendChild(tooltip);
							 | 
						||
| 
								 | 
							
								    });
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								// Analytics event tracking for documentation
							 | 
						||
| 
								 | 
							
								if (typeof gtag !== 'undefined') {
							 | 
						||
| 
								 | 
							
								    // Track external link clicks
							 | 
						||
| 
								 | 
							
								    document.querySelectorAll('a[href^="http"]').forEach(link => {
							 | 
						||
| 
								 | 
							
								        link.addEventListener('click', () => {
							 | 
						||
| 
								 | 
							
								            gtag('event', 'click', {
							 | 
						||
| 
								 | 
							
								                'event_category': 'external_link',
							 | 
						||
| 
								 | 
							
								                'event_label': link.href
							 | 
						||
| 
								 | 
							
								            });
							 | 
						||
| 
								 | 
							
								        });
							 | 
						||
| 
								 | 
							
								    });
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    // Track code copy events
							 | 
						||
| 
								 | 
							
								    document.querySelectorAll('.copy-button').forEach(button => {
							 | 
						||
| 
								 | 
							
								        button.addEventListener('click', () => {
							 | 
						||
| 
								 | 
							
								            gtag('event', 'copy_code', {
							 | 
						||
| 
								 | 
							
								                'event_category': 'engagement',
							 | 
						||
| 
								 | 
							
								                'event_label': window.location.pathname
							 | 
						||
| 
								 | 
							
								            });
							 | 
						||
| 
								 | 
							
								        });
							 | 
						||
| 
								 | 
							
								    });
							 | 
						||
| 
								 | 
							
								}
							 |