From 5985887fb8f09f15192984a0726971481e22f325 Mon Sep 17 00:00:00 2001 From: SashegDev Date: Tue, 1 Sep 2026 06:39:06 +0000 Subject: [PATCH] =?UTF-8?q?site:=20add=20GitHub-like=20language=20bar=20(J?= =?UTF-8?q?ava=2049.4%=20Python=2025.4%=20JS=2012.7%=20CSS=207.3%=20HTML?= =?UTF-8?q?=203.5%=20Go=201.7%=20=E2=80=94=2032k=20loc)=20+=20live=20fetch?= =?UTF-8?q?=20from=20GitHub/Gitea=20API?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- server/site/index.html | 20 ++++++++++++++++++++ server/site/js/main.js | 38 ++++++++++++++++++++++++++++++++++++++ 2 files changed, 58 insertions(+) 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 зеркало + +
+
+
+
+
+
+
+
+
+
+ Java 49.4% + Python 25.4% + JavaScript 12.7% + CSS 7.3% + HTML 3.5% + Go 1.7% +
+

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();