feat(ui): display current git branch in browser tab, header, and nav tabs
- Add branch indicator in browser tab title ([test-gay] GaC-Srtool...) - Add dynamic tab switching updates preserving branch prefix in browser title - Add branch badge in brand header and right-aligned branch pill in navigation tabs - Add scripts/sync-branch.js and version.json for automated branch detection
This commit is contained in:
1 parent
ba4398fe42
commit
fbe6a5f47e
6 files changed
+170
-4
No files matched your search
@@ -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 (<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,
|
||||
|
||||
Reference in new issue
Block a user