Spaces:
Running
Running
| (function() { | |
| 'use strict'; | |
| // Check if badge already exists | |
| if (document.getElementById('deepsite-badge-wrapper')) { | |
| return; | |
| } | |
| // Don't show badge on huggingface.co/deepsite | |
| const hostname = window.location.hostname; | |
| const pathname = window.location.pathname; | |
| if (hostname === 'huggingface.co' && pathname.startsWith('/deepsite')) { | |
| return; | |
| } | |
| // Inject keyframes for gradient rotation | |
| const style = document.createElement('style'); | |
| style.textContent = ` | |
| @keyframes deepsite-spin { | |
| 0% { | |
| transform: translate(-50%, -50%) rotate(0deg); | |
| } | |
| 100% { | |
| transform: translate(-50%, -50%) rotate(360deg); | |
| } | |
| } | |
| #deepsite-badge-wrapper i { | |
| pointer-events: none; | |
| position: absolute; | |
| top: 0; | |
| right: 0; | |
| bottom: 0; | |
| left: 0; | |
| z-index: -1; | |
| padding: 1.5px; | |
| transition-property: all; | |
| transition-timing-function: cubic-bezier(.4, 0, .2, 1); | |
| transition-duration: .2s; | |
| -webkit-mask: linear-gradient(#fff 0 0) content-box, linear-gradient(#fff 0 0); | |
| mask: linear-gradient(#fff 0 0) content-box, linear-gradient(#fff 0 0); | |
| -webkit-mask-composite: xor; | |
| mask-composite: exclude; | |
| border-radius: inherit; | |
| } | |
| #deepsite-badge-wrapper i::before { | |
| content: ""; | |
| position: absolute; | |
| left: 50%; | |
| top: 50%; | |
| display: block; | |
| border-radius: 9999px; | |
| opacity: 0; | |
| background: conic-gradient(from 0deg at 50% 50%, #ec4899, #fbbf24, #3b82f6, #ec4899); | |
| width: calc(100% * 2); | |
| padding-bottom: calc(100% * 2); | |
| transform: translate(-50%, -50%); | |
| z-index: -1; | |
| will-change: transform; | |
| } | |
| #deepsite-badge-wrapper:hover i::before { | |
| opacity: 1; | |
| animation: deepsite-spin 3s linear infinite; | |
| } | |
| `; | |
| document.head.appendChild(style); | |
| // Create badge wrapper (like the button element) | |
| const badgeWrapper = document.createElement('div'); | |
| badgeWrapper.id = 'deepsite-badge-wrapper'; | |
| // Create inner badge (like the span element) | |
| const badgeInner = document.createElement('span'); | |
| badgeInner.id = 'deepsite-badge-inner'; | |
| // Create mask element (the i element) | |
| const borderMask = document.createElement('i'); | |
| // Create link | |
| const link = document.createElement('a'); | |
| link.href = 'https://huggingface.co/deepsite'; | |
| link.target = '_blank'; | |
| link.rel = 'noopener noreferrer'; | |
| // Create icon placeholder | |
| const icon = document.createElement('img'); | |
| icon.src = 'https://huggingface.co/deepsite/logo.svg'; | |
| icon.alt = 'DeepSite'; | |
| icon.style.marginRight = '6px'; | |
| icon.style.width = '16px'; | |
| icon.style.height = '16px'; | |
| icon.style.filter = 'brightness(0) invert(1)'; | |
| // Create text | |
| const text = document.createTextNode('Made with DeepSite'); | |
| // Apply styles to wrapper (like button element) | |
| Object.assign(badgeWrapper.style, { | |
| position: 'fixed', | |
| bottom: '20px', | |
| left: '20px', | |
| zIndex: '999999', | |
| color: '#ffffff', | |
| borderRadius: '9999px', | |
| background: 'rgba(0, 0, 0, 0.4)', | |
| fontSize: '12px', | |
| fontWeight: '500', | |
| display: 'inline-block', | |
| cursor: 'pointer', | |
| padding: '1.5px', | |
| overflow: 'hidden', | |
| backdropFilter: 'blur(16px) saturate(180%)', | |
| WebkitBackdropFilter: 'blur(16px) saturate(180%)', | |
| }); | |
| // Apply styles to inner badge (like span element) | |
| Object.assign(badgeInner.style, { | |
| background: 'rgba(0, 0, 0, 0.6)', | |
| padding: '8px 16px', | |
| display: 'flex', | |
| alignItems: 'center', | |
| borderRadius: '9999px', | |
| boxShadow: '0 8px 32px 0 rgba(0, 0, 0, 0.5)', | |
| transition: 'all 0.3s ease', | |
| border: '1px solid rgba(255, 255, 255, 0.1)' | |
| }); | |
| // Apply styles to link | |
| Object.assign(link.style, { | |
| color: '#ffffff', | |
| textDecoration: 'none', | |
| fontWeight: '500', | |
| display: 'flex', | |
| alignItems: 'center', | |
| fontFamily: '-apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif', | |
| textShadow: '0 2px 4px rgba(0, 0, 0, 0.3)' | |
| }); | |
| // Add hover effect | |
| badgeWrapper.addEventListener('mouseenter', function() { | |
| badgeInner.style.background = 'rgba(0, 0, 0, 0.75)'; | |
| badgeInner.style.boxShadow = '0 8px 32px 0 rgba(0, 0, 0, 0.7)'; | |
| }); | |
| badgeWrapper.addEventListener('mouseleave', function() { | |
| badgeInner.style.background = 'rgba(0, 0, 0, 0.6)'; | |
| badgeInner.style.boxShadow = '0 8px 32px 0 rgba(0, 0, 0, 0.5)'; | |
| }); | |
| // Append elements | |
| link.appendChild(icon); | |
| link.appendChild(text); | |
| badgeInner.appendChild(link); | |
| badgeWrapper.appendChild(badgeInner); | |
| badgeWrapper.appendChild(borderMask); | |
| // Wait for DOM to be ready | |
| function init() { | |
| if (document.body) { | |
| document.body.appendChild(badgeWrapper); | |
| } else { | |
| document.addEventListener('DOMContentLoaded', function() { | |
| document.body.appendChild(badgeWrapper); | |
| }); | |
| } | |
| } | |
| // Initialize | |
| if (document.readyState === 'loading') { | |
| document.addEventListener('DOMContentLoaded', init); | |
| } else { | |
| init(); | |
| } | |
| })(); | |