diff --git a/server/site/index.html b/server/site/index.html index f71f49d..441156f 100644 --- a/server/site/index.html +++ b/server/site/index.html @@ -417,6 +417,26 @@ Открыть в Gitea GitHub зеркало + +
32 120 строк · Java 15 858 · Python 8 172 · JS 4 083 · CSS 2 345 · HTML 1 110 · Go 552
+git clone ssh://git@git.swe.zernmc.ru:2222/sasheg/launcher.git
diff --git a/server/site/js/main.js b/server/site/js/main.js
index ca0c0fe..0328beb 100644
--- a/server/site/js/main.js
+++ b/server/site/js/main.js
@@ -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 = ` ${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();