Spaces:
Runtime error
Runtime error
| import re | |
| with open("modules/research_tab.py", "r", encoding="utf-8") as f: | |
| content = f.read() | |
| # 1. Define the new JS snippet | |
| FLOATING_CARD_JS = """ | |
| FLOATING_CARD_JS = ''' | |
| <script> | |
| if (typeof window.showCiteCard !== 'function') { | |
| window.showCiteCard = function(el, cid) { | |
| var data = JSON.parse(el.getAttribute('data-cite').replace(/"/g,'"').replace(/'/g,"'")); | |
| var card = document.getElementById('cite-card-global'); | |
| var overlay = document.getElementById('cite-card-overlay-global'); | |
| if (!card) { | |
| overlay = document.createElement('div'); | |
| overlay.id = 'cite-card-overlay-global'; | |
| overlay.style.cssText = "display:none; position:fixed; top:0; left:0; width:100%; height:100%; z-index:999998; background:transparent;"; | |
| overlay.onclick = window.closeCiteCard; | |
| document.body.appendChild(overlay); | |
| card = document.createElement('div'); | |
| card.id = 'cite-card-global'; | |
| card.style.cssText = "display:none; position:fixed; z-index:999999; width:380px; max-width:90vw; padding:18px 20px; background:rgba(17,24,39,0.95); backdrop-filter:blur(20px); border:1px solid rgba(139,92,246,0.3); border-radius:16px; box-shadow:0 20px 60px rgba(0,0,0,0.5), 0 0 30px rgba(139,92,246,0.1); font-family:'Inter',sans-serif; transition:opacity 0.2s ease, transform 0.2s ease; opacity:0; transform:translateY(8px);"; | |
| card.innerHTML = '<div id="cite-card-content-global"></div>'; | |
| document.body.appendChild(card); | |
| } | |
| var content = document.getElementById('cite-card-content-global'); | |
| var doiHtml = data.doi ? '<a href="'+(data.doi.startsWith("http")? data.doi : "https://doi.org/"+data.doi)+'" target="_blank" style="color:#3b82f6;font-size:11px;text-decoration:none;display:inline-flex;align-items:center;gap:4px;padding:3px 8px;border-radius:6px;background:rgba(59,130,246,0.08);border:1px solid rgba(59,130,246,0.2);">π DOI</a>' : ''; | |
| var pdfHtml = data.pdf_url ? '<a href="'+data.pdf_url+'" target="_blank" style="color:#ef4444;font-size:11px;text-decoration:none;display:inline-flex;align-items:center;gap:4px;padding:3px 8px;border-radius:6px;background:rgba(239,68,68,0.08);border:1px solid rgba(239,68,68,0.2);">π PDF</a>' : ''; | |
| var gradeHtml = data.grade ? '<span style="font-size:10px;font-weight:700;padding:2px 8px;border-radius:6px;background:rgba(16,185,129,0.1);border:1px solid rgba(16,185,129,0.3);color:#10b981;">'+data.grade+'</span>' : ''; | |
| var srcColor = {'semantic_scholar':'#f59e0b','openalex':'#3b82f6','pubmed':'#ef4444','arxiv':'#10b981','scopus':'#f97316'}[data.source?.toLowerCase()] || '#8b5cf6'; | |
| content.innerHTML = '<div style="display:flex;justify-content:space-between;align-items:flex-start;margin-bottom:10px;">' + | |
| '<span style="font-size:10px;font-weight:600;padding:2px 8px;border-radius:10px;background:'+srcColor+'18;border:1px solid '+srcColor+'40;color:'+srcColor+';">'+(data.source||'Desconocido')+'</span>' + | |
| '<button onclick="window.closeCiteCard()" style="background:none;border:none;color:#6b7280;cursor:pointer;font-size:16px;line-height:1;">β</button>' + | |
| '</div>' + | |
| '<div style="font-size:13px;font-weight:600;color:#f3f4f6;line-height:1.45;margin-bottom:8px;">'+data.title+'</div>' + | |
| '<div style="font-size:11px;color:#9ca3af;margin-bottom:6px;">'+data.authors+'</div>' + | |
| '<div style="font-size:11px;color:#d1d5db;margin-bottom:10px;">π '+data.year+'</div>' + | |
| '<div style="display:flex;gap:6px;flex-wrap:wrap;align-items:center;">'+doiHtml+pdfHtml+gradeHtml+'</div>'; | |
| var rect = el.getBoundingClientRect(); | |
| var cardW = 380; | |
| var left = rect.left + rect.width/2 - cardW/2; | |
| if(left < 10) left = 10; | |
| if(left + cardW > window.innerWidth - 10) left = window.innerWidth - cardW - 10; | |
| var top = rect.bottom + 10; | |
| if(top + 250 > window.innerHeight) top = rect.top - 260; | |
| if(top < 10) top = 10; | |
| card.style.left = left + 'px'; | |
| card.style.top = top + 'px'; | |
| overlay.style.display = 'block'; | |
| card.style.display = 'block'; | |
| setTimeout(function(){card.style.opacity='1';card.style.transform='translateY(0)';},10); | |
| }; | |
| window.closeCiteCard = function() { | |
| var card = document.getElementById('cite-card-global'); | |
| var overlay = document.getElementById('cite-card-overlay-global'); | |
| if (card) { | |
| card.style.opacity = '0'; | |
| card.style.transform = 'translateY(8px)'; | |
| setTimeout(function(){card.style.display='none'; if(overlay) overlay.style.display='none';},200); | |
| } | |
| }; | |
| } | |
| </script> | |
| <!-- MathJax for rendering LaTeX math expressions --> | |
| <script> | |
| window.MathJax = { | |
| tex: { inlineMath: [['$','$'], ['\\\\(','\\\\)']], displayMath: [['$$','$$'], ['\\\\[','\\\\]']] }, | |
| options: { skipHtmlTags: ['script','noscript','style','textarea','pre','code'] } | |
| }; | |
| </script> | |
| <script id="MathJax-script" async src="https://cdn.jsdelivr.net/npm/mathjax@3/es5/tex-mml-chtml.js"></script> | |
| ''' | |
| """ | |
| # Insert the global constant near the top after imports | |
| if "FLOATING_CARD_JS =" not in content: | |
| content = re.sub(r'import re\n', r'import re\n\n' + FLOATING_CARD_JS + '\n', content, count=1) | |
| # Modify _make_citations_interactive | |
| pattern_make_citations = re.compile( | |
| r'floating_card_js = \'\'\'\n\s*<div id="cite-card-overlay".*?<script id="MathJax-script"[^\n]+\n\s*\'\'\'', | |
| re.DOTALL | |
| ) | |
| if pattern_make_citations.search(content): | |
| content = pattern_make_citations.sub("floating_card_js = FLOATING_CARD_JS", content) | |
| # Modify _build_references_html | |
| if "html += FLOATING_CARD_JS" not in content: | |
| content = content.replace("html += '</div>'\n return html", "html += '</div>'\n html += FLOATING_CARD_JS\n return html") | |
| with open("modules/research_tab.py", "w", encoding="utf-8") as f: | |
| f.write(content) | |
| print("Script executed successfully.") | |