/** * Marimo Badge Integration for TinyTorch * Adds Marimo "Open in Marimo" badges to notebook pages */ document.addEventListener('DOMContentLoaded', function() { // Find all notebook pages (they have launch buttons) const launchButtons = document.querySelectorAll('.launch-buttons, .jb-launch-buttons'); if (launchButtons.length === 0) return; // Add informational message about local setup requirement const infoMessage = document.createElement('div'); infoMessage.className = 'notebook-platform-info'; infoMessage.style.cssText = ` margin: 1rem 0; padding: 1rem; background: #fff3cd; border-left: 4px solid #ffc107; border-radius: 0.25rem; font-size: 0.9rem; color: #856404; `; infoMessage.innerHTML = ` 💡 Note: These online notebooks are for viewing and exploration only. To actually build modules, run milestone validations, and use the full TinyTorch package, you need local setup. `; // Get the current page path to construct marimo URL const currentPath = window.location.pathname; const notebookName = currentPath.split('/').pop().replace('.html', ''); // Find the repository info from the page const repoUrl = 'https://github.com/harvard-edge/cs249r_book'; const repoPath = 'harvard-edge/cs249r_book'; const branch = 'main'; // Construct marimo molab URL // Marimo can open .ipynb files directly from GitHub // Format: https://marimo.app/molab?repo=owner/repo&path=path/to/file.ipynb // Works for all modules: 01_tensor, 02_activations, etc. const marimoUrl = `https://marimo.app/molab?repo=${repoPath}&path=tinytorch/modules/${notebookName}.ipynb`; // Create marimo badge const marimoBadge = document.createElement('div'); marimoBadge.className = 'marimo-launch-badge'; marimoBadge.style.cssText = ` margin-top: 1rem; padding: 0.75rem; background: linear-gradient(135deg, #667eea 0%, #764ba2 100%); border-radius: 0.5rem; text-align: center; `; const marimoLink = document.createElement('a'); marimoLink.href = marimoUrl; marimoLink.target = '_blank'; marimoLink.rel = 'noopener noreferrer'; marimoLink.style.cssText = ` color: white; text-decoration: none; font-weight: 600; display: inline-flex; align-items: center; gap: 0.5rem; `; marimoLink.innerHTML = ` 🍃 Open in Marimo `; marimoBadge.appendChild(marimoLink); // Add info message and marimo badge after launch buttons launchButtons.forEach(buttonContainer => { // Add info message first (if not already present) if (!buttonContainer.querySelector('.notebook-platform-info')) { buttonContainer.appendChild(infoMessage.cloneNode(true)); } // Check if marimo badge already exists if (!buttonContainer.querySelector('.marimo-launch-badge')) { buttonContainer.appendChild(marimoBadge.cloneNode(true)); } }); // Also add to any existing launch button sections const launchSections = document.querySelectorAll('[class*="launch"], [id*="launch"]'); launchSections.forEach(section => { // Add info message if not present if (!section.querySelector('.notebook-platform-info')) { const infoClone = infoMessage.cloneNode(true); infoClone.style.marginTop = '1rem'; section.appendChild(infoClone); } // Add marimo badge if not present if (!section.querySelector('.marimo-launch-badge')) { const badgeClone = marimoBadge.cloneNode(true); badgeClone.style.marginTop = '1rem'; section.appendChild(badgeClone); } }); });