site: add GitHub-like language bar (Java 49.4% Python 25.4% JS 12.7% CSS 7.3% HTML 3.5% Go 1.7% — 32k loc) + live fetch from GitHub/Gitea API
This commit is contained in:
@@ -719,6 +719,43 @@
|
||||
if (el) el.textContent = new Date().getFullYear();
|
||||
}
|
||||
|
||||
async function loadGithubLanguages() {
|
||||
const bar = document.getElementById('lang-bar');
|
||||
const legend = document.getElementById('lang-legend');
|
||||
if (!bar || !legend) return;
|
||||
const colors = { Java:'#b07219', Python:'#3572A5', JavaScript:'#f1e05a', TypeScript:'#3178c6', CSS:'#563d7c', HTML:'#e34c26', Go:'#00ADD8', Rust:'#dea584', Shell:'#89e051', Dockerfile:'#384d54' };
|
||||
const tryFetch = async (url) => {
|
||||
const r = await fetch(url, {headers:{'Accept':'application/vnd.github.v3+json'}});
|
||||
if (!r.ok) throw new Error(url);
|
||||
return r.json();
|
||||
};
|
||||
try {
|
||||
let data = null;
|
||||
try { data = await tryFetch('https://api.github.com/repos/SashegDev/launcher/languages'); } catch(e) {
|
||||
try { data = await tryFetch('https://git.swe.zernmc.ru/api/v1/repos/sasheg/launcher/languages'); } catch(e2) {}
|
||||
}
|
||||
if (!data || typeof data !== 'object') return;
|
||||
const total = Object.values(data).reduce((a,b)=>a+b,0);
|
||||
if (!total) return;
|
||||
const entries = Object.entries(data).map(([lang, bytes])=>({lang, bytes, pct: bytes/total*100})).sort((a,b)=>b.bytes-a.bytes).slice(0,6);
|
||||
// update bar
|
||||
bar.innerHTML = '';
|
||||
bar.title = entries.map(e=>`${e.lang} ${e.pct.toFixed(1)}%`).join(' · ');
|
||||
legend.innerHTML = '';
|
||||
entries.forEach(e=>{
|
||||
const seg = document.createElement('div');
|
||||
seg.style.flex = String(e.pct);
|
||||
seg.style.background = colors[e.lang] || 'var(--accent)';
|
||||
seg.title = `${e.lang} ${e.pct.toFixed(1)}%`;
|
||||
bar.appendChild(seg);
|
||||
const item = document.createElement('span');
|
||||
item.style.display='flex'; item.style.alignItems='center'; item.style.gap='6px';
|
||||
item.innerHTML = `<i style="width:10px;height:10px;border-radius:50%;background:${colors[e.lang]||'var(--accent)'};display:inline-block"></i> ${e.lang} ${e.pct.toFixed(1)}%`;
|
||||
legend.appendChild(item);
|
||||
});
|
||||
} catch(e) { /* keep static fallback */ }
|
||||
}
|
||||
|
||||
document.addEventListener('DOMContentLoaded', () => {
|
||||
applyI18n();
|
||||
|
||||
@@ -730,6 +767,7 @@
|
||||
loadNews();
|
||||
loadServerStatus();
|
||||
setInterval(loadServerStatus, 15000);
|
||||
loadGithubLanguages();
|
||||
initCarousel();
|
||||
initPreview();
|
||||
initNav();
|
||||
|
||||
Reference in New Issue
Block a user