mirror of
https://github.com/ranaldsgift/KefinTweaks.git
synced 2026-11-05 15:52:47 +01:00
Small fixes for Header Tabs mainly for Home Screen Custom Tabs
This commit is contained in:
1 parent
0a8458e43e
commit
e8f8509aa7
1 file changed
+62
-6
+62
-6
@@ -234,8 +234,55 @@
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
async function pollForElement(selectorFn, maxAttempts = 50, pollInterval = 100) {
|
||||||
|
let attempts = 0;
|
||||||
|
while (attempts < maxAttempts) {
|
||||||
|
const element = selectorFn();
|
||||||
|
if (element) {
|
||||||
|
return element;
|
||||||
|
}
|
||||||
|
attempts++;
|
||||||
|
await new Promise(resolve => setTimeout(resolve, pollInterval));
|
||||||
|
}
|
||||||
|
WARN('Element not found after', attempts, 'attempts');
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
// Synchronize active tab state with URL parameter
|
// Synchronize active tab state with URL parameter
|
||||||
async function syncActiveTabState() {
|
async function syncActiveTabState(currentTabIndex) {
|
||||||
|
const headerTabButtons = document.querySelectorAll('.headerTabs button');
|
||||||
|
let targetTabButton = document.querySelector(`.headerTabs button[data-index="${currentTabIndex}"]`);
|
||||||
|
|
||||||
|
// If the target tab is a custom home tab, we may need to wait for it to be rendered
|
||||||
|
if (!targetTabButton && currentTabIndex > 1) {
|
||||||
|
// Wait for the target tab button to be rendered
|
||||||
|
targetTabButton = await pollForElement(() => document.querySelector(`.headerTabs button[data-index="${currentTabIndex}"]`), 50, 100);
|
||||||
|
}
|
||||||
|
|
||||||
|
const pageTabContents = document.querySelectorAll('.libraryPage:not(.hide) .pageTabContent');
|
||||||
|
const targetPageTabContent = document.querySelector(`.libraryPage:not(.hide) .pageTabContent[data-index="${currentTabIndex}"]`);
|
||||||
|
|
||||||
|
if (headerTabButtons && targetTabButton && pageTabContents && targetPageTabContent) {
|
||||||
|
// Remove is-active class from all tab buttons
|
||||||
|
headerTabButtons.forEach(button => {
|
||||||
|
button.classList.remove('emby-tab-button-active');
|
||||||
|
});
|
||||||
|
// Add is-active class to the active tab button
|
||||||
|
targetTabButton.classList.add('emby-tab-button-active');
|
||||||
|
LOG('Set active tab button:', currentTabIndex);
|
||||||
|
|
||||||
|
// Remove is-active class from all page tab contents
|
||||||
|
pageTabContents.forEach(content => {
|
||||||
|
content.classList.remove('is-active');
|
||||||
|
});
|
||||||
|
// Add is-active class to the target page tab content
|
||||||
|
targetPageTabContent.classList.add('is-active');
|
||||||
|
LOG('Set active page tab content:', currentTabIndex);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
return;
|
||||||
const headerTabs = document.querySelector('.headerTabs');
|
const headerTabs = document.querySelector('.headerTabs');
|
||||||
if (!headerTabs) return;
|
if (!headerTabs) return;
|
||||||
|
|
||||||
@@ -385,7 +432,7 @@
|
|||||||
// All custom tabs are now present
|
// All custom tabs are now present
|
||||||
obs.disconnect();
|
obs.disconnect();
|
||||||
LOG('All custom tabs rendered, adding click listeners');
|
LOG('All custom tabs rendered, adding click listeners');
|
||||||
syncActiveTabState();
|
//syncActiveTabState();
|
||||||
|
|
||||||
// Add click listeners to all buttons including the new custom tabs
|
// Add click listeners to all buttons including the new custom tabs
|
||||||
const allButtons = headerTabs.querySelectorAll('.emby-tab-button');
|
const allButtons = headerTabs.querySelectorAll('.emby-tab-button');
|
||||||
@@ -435,13 +482,22 @@
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Register onViewPage handler to sync active tab state
|
// Register onViewPage handler to sync active tab state
|
||||||
window.KefinTweaksUtils.onViewPage((view, element) => {
|
window.KefinTweaksUtils.onViewPage((view, element, hash) => {
|
||||||
LOG('onViewPage handler triggered for view:', view);
|
LOG('onViewPage handler triggered for view:', view);
|
||||||
addClickListeners();
|
addClickListeners();
|
||||||
|
// Get selected tab from hash
|
||||||
|
const hashParams = hash.includes('?') ? hash.split('?')[1] : '';
|
||||||
|
const urlParams = new URLSearchParams(hashParams);
|
||||||
|
const currentTab = urlParams.get('tab');
|
||||||
|
const currentTabIndex = currentTab ? parseInt(currentTab, 10) : 0;
|
||||||
|
|
||||||
// Sync active tab state when page view changes
|
// Sync active tab state when page view changes
|
||||||
syncActiveTabState().catch(err => {
|
// This is only necessary for the home page with custom tabs
|
||||||
ERR('Error in syncActiveTabState:', err);
|
if ((view === 'home' || view === 'home.html') && currentTabIndex > 1) {
|
||||||
});
|
syncActiveTabState(currentTabIndex).catch(err => {
|
||||||
|
ERR('Error in syncActiveTabState:', err);
|
||||||
|
});
|
||||||
|
}
|
||||||
}, {
|
}, {
|
||||||
pages: SUPPORTED_PAGES // Only trigger for supported pages
|
pages: SUPPORTED_PAGES // Only trigger for supported pages
|
||||||
});
|
});
|
||||||
|
|||||||
Reference in new issue
Block a user