mirror of
https://github.com/willmiao/ComfyUI-Lora-Manager.git
synced 2026-03-22 05:32:12 -03:00
135 lines
4.8 KiB
JavaScript
135 lines
4.8 KiB
JavaScript
import { updateService } from '../managers/UpdateService.js';
|
|
import { toggleTheme } from '../utils/uiHelpers.js';
|
|
import { SearchManager } from '../managers/SearchManager.js';
|
|
import { FilterManager } from '../managers/FilterManager.js';
|
|
import { initPageState } from '../state/index.js';
|
|
|
|
/**
|
|
* Header.js - Manages the application header behavior across different pages
|
|
* Handles initialization of appropriate search and filter managers based on current page
|
|
*/
|
|
export class HeaderManager {
|
|
constructor() {
|
|
this.currentPage = this.detectCurrentPage();
|
|
initPageState(this.currentPage);
|
|
this.searchManager = null;
|
|
this.filterManager = null;
|
|
|
|
// Initialize appropriate managers based on current page
|
|
this.initializeManagers();
|
|
|
|
// Set up common header functionality
|
|
this.initializeCommonElements();
|
|
}
|
|
|
|
detectCurrentPage() {
|
|
const path = window.location.pathname;
|
|
if (path.includes('/loras/recipes')) return 'recipes';
|
|
if (path.includes('/checkpoints')) return 'checkpoints';
|
|
if (path.includes('/loras')) return 'loras';
|
|
return 'unknown';
|
|
}
|
|
|
|
initializeManagers() {
|
|
// Initialize SearchManager for all page types
|
|
this.searchManager = new SearchManager({ page: this.currentPage });
|
|
window.searchManager = this.searchManager;
|
|
|
|
// Initialize FilterManager for all page types that have filters
|
|
if (document.getElementById('filterButton')) {
|
|
this.filterManager = new FilterManager({ page: this.currentPage });
|
|
window.filterManager = this.filterManager;
|
|
}
|
|
}
|
|
|
|
initializeCommonElements() {
|
|
// Handle theme toggle
|
|
const themeToggle = document.querySelector('.theme-toggle');
|
|
if (themeToggle) {
|
|
// Set initial state based on current theme
|
|
const currentTheme = localStorage.getItem('lm_theme') || 'auto';
|
|
themeToggle.classList.add(`theme-${currentTheme}`);
|
|
|
|
themeToggle.addEventListener('click', () => {
|
|
if (typeof toggleTheme === 'function') {
|
|
const newTheme = toggleTheme();
|
|
// Update tooltip based on next toggle action
|
|
if (newTheme === 'light') {
|
|
themeToggle.title = "Switch to dark theme";
|
|
} else if (newTheme === 'dark') {
|
|
themeToggle.title = "Switch to auto theme";
|
|
} else {
|
|
themeToggle.title = "Switch to light theme";
|
|
}
|
|
}
|
|
});
|
|
}
|
|
|
|
// Handle settings toggle
|
|
const settingsToggle = document.querySelector('.settings-toggle');
|
|
if (settingsToggle) {
|
|
settingsToggle.addEventListener('click', () => {
|
|
if (window.settingsManager) {
|
|
window.settingsManager.toggleSettings();
|
|
}
|
|
});
|
|
}
|
|
|
|
// Handle update toggle
|
|
const updateToggle = document.getElementById('updateToggleBtn');
|
|
if (updateToggle) {
|
|
updateToggle.addEventListener('click', () => {
|
|
updateService.toggleUpdateModal();
|
|
});
|
|
}
|
|
|
|
// Handle support toggle
|
|
const supportToggle = document.getElementById('supportToggleBtn');
|
|
if (supportToggle) {
|
|
supportToggle.addEventListener('click', () => {
|
|
if (window.modalManager) {
|
|
window.modalManager.toggleModal('supportModal');
|
|
}
|
|
});
|
|
}
|
|
|
|
// Handle QR code toggle
|
|
const qrToggle = document.getElementById('toggleQRCode');
|
|
const qrContainer = document.getElementById('qrCodeContainer');
|
|
|
|
if (qrToggle && qrContainer) {
|
|
qrToggle.addEventListener('click', function() {
|
|
qrContainer.classList.toggle('show');
|
|
qrToggle.classList.toggle('active');
|
|
|
|
const toggleText = qrToggle.querySelector('.toggle-text');
|
|
if (qrContainer.classList.contains('show')) {
|
|
toggleText.textContent = 'Hide WeChat QR Code';
|
|
// Add small delay to ensure DOM is updated before scrolling
|
|
setTimeout(() => {
|
|
const supportModal = document.querySelector('.support-modal');
|
|
if (supportModal) {
|
|
supportModal.scrollTo({
|
|
top: supportModal.scrollHeight,
|
|
behavior: 'smooth'
|
|
});
|
|
}
|
|
}, 250);
|
|
} else {
|
|
toggleText.textContent = 'Show WeChat QR Code';
|
|
}
|
|
});
|
|
}
|
|
|
|
// Handle help toggle
|
|
// const helpToggle = document.querySelector('.help-toggle');
|
|
// if (helpToggle) {
|
|
// helpToggle.addEventListener('click', () => {
|
|
// if (window.modalManager) {
|
|
// window.modalManager.toggleModal('helpModal');
|
|
// }
|
|
// });
|
|
// }
|
|
}
|
|
}
|