diff --git a/css/styles.css b/css/styles.css index 2781614..89ec74d 100644 --- a/css/styles.css +++ b/css/styles.css @@ -3001,3 +3001,50 @@ input:checked + .slider:before { .slot-picker-inv-card.active-wearer { border-color: var(--accent-gold); } + + +/* Git Branch Indicators */ +.badge-branch { + display: inline-flex; + align-items: center; + padding: 0.12rem 0.5rem; + border-radius: 6px; + background: rgba(99, 102, 241, 0.15); + border: 1px solid rgba(99, 102, 241, 0.35); + color: #a5b4fc; + font-size: 0.72rem; + font-weight: 700; + font-family: ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, monospace; + letter-spacing: 0.02em; + user-select: none; +} + +.nav-branch-pill { + margin-left: auto; + display: inline-flex; + align-items: center; + gap: 0.35rem; + padding: 0.25rem 0.65rem; + background: rgba(99, 102, 241, 0.12); + border: 1px solid rgba(99, 102, 241, 0.3); + border-radius: 9999px; + color: #a5b4fc; + font-size: 0.75rem; + font-family: ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, monospace; + font-weight: 600; + letter-spacing: 0.02em; + white-space: nowrap; + user-select: none; + transition: all 0.2s ease; +} + +.nav-branch-pill:hover { + background: rgba(99, 102, 241, 0.22); + border-color: rgba(99, 102, 241, 0.55); + color: #c7d2fe; +} + +.branch-icon { + flex-shrink: 0; + opacity: 0.85; +} diff --git a/index.html b/index.html index b859f22..c7f8279 100644 --- a/index.html +++ b/index.html @@ -3,7 +3,7 @@ - GaC-Srtool — Ultimate Star Rail Server & Build Manager + [test-gay] GaC-Srtool — Ultimate Star Rail Server & Build Manager @@ -15,7 +15,10 @@
GaC Logo
-
GaC-Srtool
+
+ GaC-Srtool + test-gay +
Star Rail FreeSR & Server Controller
@@ -60,6 +63,12 @@ + diff --git a/js/app.js b/js/app.js index 9a7032b..4cadf2b 100644 --- a/js/app.js +++ b/js/app.js @@ -841,6 +841,7 @@ function applyTranslations() { renderAvatarsGrid(); } loadEquipment(); + updateDocumentTitle(); } // Setup Language Selector @@ -6328,6 +6329,7 @@ function setupTabs() { if (targetContent) { targetContent.classList.add('active'); state.activeTab = targetId; + updateDocumentTitle(targetId); // On-demand tab refresh if (targetId === 'tab-avatars') { @@ -7278,6 +7280,85 @@ function setupEvents() { }); } +// ========================================== +// Git Branch Detection & Browser Tab Title +// ========================================== +let currentGitBranch = 'test-gay'; + +function updateDocumentTitle(tabId = state.activeTab || 'tab-dashboard') { + const branchPrefix = currentGitBranch ? `[${currentGitBranch}] ` : ''; + const tabNames = { + 'tab-dashboard': 'GaC-Srtool — Ultimate Star Rail Server & Build Manager', + 'tab-avatars': `👥 ${t('tabAvatars') || 'ตัวละคร'} | GaC-Srtool`, + 'tab-equipment': `🗡️ ${t('tabEquipment') || 'กรวยแสง & รีลิกส์'} | GaC-Srtool`, + 'tab-persistent': `💾 ${t('tabPersistent') || 'จัดการเซฟ GaC'} | GaC-Srtool`, + 'tab-exrank': `⚡ ${t('tabExrank') || 'สกิลพิเศษ Ex-Rank'} | GaC-Srtool`, + 'tab-json': `📝 ${t('tabJson') || 'จัดการไฟล์ JSON'} | GaC-Srtool`, + 'tab-settings': `⚙️ ${t('tabSettings') || 'ตั้งค่า'} | GaC-Srtool` + }; + const titleBody = tabNames[tabId] || 'GaC-Srtool — Ultimate Star Rail Server & Build Manager'; + document.title = `${branchPrefix}${titleBody}`; +} + +function applyBranchToUI(branch) { + state.currentBranch = branch; + currentGitBranch = branch; + + // 1. Browser Tab Title ( & document.title) + updateDocumentTitle(); + + // 2. Header Brand Badge + const headerBadge = document.getElementById('header-branch-badge'); + if (headerBadge) { + headerBadge.textContent = branch; + headerBadge.style.display = 'inline-flex'; + } + + // 3. Nav Tabs Branch Indicator + const navBadge = document.getElementById('nav-branch-name'); + if (navBadge) { + navBadge.textContent = branch; + } +} + +async function initGitBranchDisplay() { + // 1. URL Query Param ?branch=... + const urlParams = new URLSearchParams(window.location.search); + const branchFromUrl = urlParams.get('branch'); + if (branchFromUrl) { + applyBranchToUI(branchFromUrl.trim()); + return; + } + + // 2. version.json (Generated by sync-branch or git commit) + try { + const res = await fetch('version.json?t=' + Date.now()); + if (res.ok) { + const data = await res.json(); + if (data && data.branch) { + applyBranchToUI(data.branch.trim()); + return; + } + } + } catch (_) {} + + // 3. .git/HEAD (if served locally by dev server) + try { + const headRes = await fetch('.git/HEAD?t=' + Date.now()); + if (headRes.ok) { + const headText = await headRes.text(); + const match = headText.match(/ref:\s*refs\/heads\/([^\r\n]+)/); + if (match && match[1]) { + applyBranchToUI(match[1].trim()); + return; + } + } + } catch (_) {} + + // 4. Fallback + applyBranchToUI(currentGitBranch); +} + // Background Ping Loop function startPingLoop() { setInterval(() => { @@ -7287,6 +7368,7 @@ function startPingLoop() { // Initialize Application async function init() { + await initGitBranchDisplay(); await loadCachedGachabaseData({ idbGet, idbSet, diff --git a/package.json b/package.json index 9870146..839c664 100644 --- a/package.json +++ b/package.json @@ -4,8 +4,9 @@ "description": "Companion Web Management Dashboard & FreeSR Tool for GaC-hkrpg-go", "main": "index.html", "scripts": { - "dev": "npx serve . -l 5173", - "start": "npx serve . -l 5173", + "sync-branch": "node scripts/sync-branch.js", + "dev": "node scripts/sync-branch.js && npx serve . -l 5173", + "start": "node scripts/sync-branch.js && npx serve . -l 5173", "serve": "npx serve . -l 5173" }, "keywords": [ diff --git a/scripts/sync-branch.js b/scripts/sync-branch.js new file mode 100644 index 0000000..f9957ac --- /dev/null +++ b/scripts/sync-branch.js @@ -0,0 +1,22 @@ +const fs = require('fs'); +const { execSync } = require('child_process'); + +let branch = 'test-gay'; +try { + branch = execSync('git rev-parse --abbrev-ref HEAD', { encoding: 'utf8' }).trim(); +} catch (_) { + try { + const head = fs.readFileSync('.git/HEAD', 'utf8'); + const m = head.match(/ref:\s*refs\/heads\/([^\r\n]+)/); + if (m && m[1]) branch = m[1].trim(); + } catch (__) {} +} + +const versionData = { + branch, + version: '1.0.0', + updatedAt: new Date().toISOString() +}; + +fs.writeFileSync('version.json', JSON.stringify(versionData, null, 2) + '\n'); +console.log(`[sync-branch] Updated version.json with branch: ${branch}`); diff --git a/version.json b/version.json new file mode 100644 index 0000000..ff1ff16 --- /dev/null +++ b/version.json @@ -0,0 +1,5 @@ +{ + "branch": "test-gay", + "version": "1.0.0", + "updatedAt": "2026-10-17T04:56:43.360Z" +}