Files
CoqResearch/assets/js/semantic_scholar_citation_count.js
T
alois b3c00734c2
Build and Deploy Jekyll / deploy (push) Successful in 42s
feat: migration vers template academic-homepage original
2026-05-25 20:23:42 +02:00

69 lines
2.7 KiB
JavaScript

const citationCountElements = document.querySelectorAll('[data-semantic-scholar-id]');
citationCountElements.forEach(element => {
const id = element.getAttribute('data-semantic-scholar-id');
if (id) {
element.setAttribute('data-semantic-scholar-id', id.toLowerCase());
}
});
const semanticScholarIds = new Set(Array.from(citationCountElements).map(element => element.getAttribute('data-semantic-scholar-id')).filter(id => id));
let uncachedSemanticScholarIds = [];
semanticScholarIds.forEach(id => {
const cacheKey = `semanticScholarCitationCount:${id}`;
const cachedData = localStorage.getItem(cacheKey);
if (cachedData) {
const { _, timestamp } = JSON.parse(cachedData);
// If cached data is older than 1 hour, consider it uncached
if (Date.now() - timestamp > 1 * 60 * 60 * 1000) {
uncachedSemanticScholarIds.push(id);
}
} else {
uncachedSemanticScholarIds.push(id);
}
});
let showSemanticScholarCitationCount = () => {
// Update the DOM with the cached citation counts
semanticScholarIds.forEach(id => {
const cacheKey = `semanticScholarCitationCount:${id}`;
const cachedData = localStorage.getItem(cacheKey);
if (cachedData) {
const { citationCount } = JSON.parse(cachedData);
const elements = document.querySelectorAll(`[data-semantic-scholar-id="${id}"]`);
elements.forEach(element => {
element.innerHTML = `<a class="badge badge-pill badge-publication badge-info" href="https://www.semanticscholar.org/paper/${id}" target="_blank"><i class="ai ai-semantic-scholar"></i> ${parseInt(citationCount).toLocaleString()} citations</a>`;
});
}
});
};
if (uncachedSemanticScholarIds.length > 0) {
fetch('https://api.semanticscholar.org/graph/v1/paper/batch?fields=citationCount', {
method: 'POST',
headers: {
'Content-Type': 'application/json'
},
body: JSON.stringify({
ids: Array.from(semanticScholarIds)
})
}).then(response => {
return response.json();
}).then(data => {
data.forEach(paper => {
console.log(paper);
// Cache citation count data
const cacheKey = `semanticScholarCitationCount:${paper.paperId}`;
const cacheData = {
citationCount: paper.citationCount,
timestamp: Date.now()
};
localStorage.setItem(cacheKey, JSON.stringify(cacheData));
});
}).catch(error => {
console.error('Error fetching Semantic Scholar data:', error);
}).finally(showSemanticScholarCitationCount);
} else {
showSemanticScholarCitationCount();
}