(async () => { const script = document.currentScript; const repoURL = script?.getAttribute("data-repo-url"); const repoId = script?.getAttribute("data-repo-id"); if (!repoURL || !repoId) return; if (repoId.startsWith("forgejo")) { console.log( "fetch-repo.js: Forgejo server blocks cross-origin requests. Live JavaScript updates are not supported.", ); return; } const platforms = { github: { full_name: "full_name", description: "description", stargazers_count: "stargazers", forks: "forks", }, gitlab: { name_with_namespace: "name_with_namespace", description: "description", star_count: "star_count", forks_count: "forks_count", }, gitea: { full_name: "full_name", description: "description", stars_count: "stars_count", forks_count: "forks_count", }, codeberg: { full_name: "full_name", description: "description", stars_count: "stars_count", forks_count: "forks_count", }, forgejo: { full_name: "full_name", description: "description", stars_count: "stars_count", forks_count: "forks_count", }, huggingface: { description: "description", likes: "likes", downloads: "downloads", }, }; const processors = { huggingface: { description: (value) => value?.replace(/Dataset Card for .+?\s+Dataset Summary\s+/, "").trim() || value, }, }; const platform = Object.keys(platforms).find((p) => repoId.startsWith(p)) || "github"; const mapping = platforms[platform]; try { const response = await fetch(repoURL, { headers: { "User-agent": "Mozilla/4.0 Custom User Agent" }, }); const data = await response.json(); if (!response.ok) { console.error(`fetch-repo.js: HTTP Error: ${response.status} ${response.statusText}`); return; } if (!data || typeof data !== "object") { console.error("fetch-repo.js: Invalid or empty data received from remote"); return; } Object.entries(mapping).forEach(([dataField, elementSuffix]) => { const element = document.getElementById(`${repoId}-${elementSuffix}`); if (element) { let value = data[dataField]; if (processors[platform]?.[dataField]) { value = processors[platform][dataField](value); } if (value != null && value !== "") { element.innerHTML = value; } } }); } catch (error) { console.error(`fetch-repo.js: ${error}`); } })();