refactor: split CSS and JS into modular files (SRP)
This commit is contained in:
103
src/server/web/static/js/index/app-init.js
Normal file
103
src/server/web/static/js/index/app-init.js
Normal file
@@ -0,0 +1,103 @@
|
||||
/**
|
||||
* AniWorld - Index Page Application Initializer
|
||||
*
|
||||
* Main entry point for the index page. Initializes all modules.
|
||||
*
|
||||
* Dependencies: All shared and index modules
|
||||
*/
|
||||
|
||||
var AniWorld = window.AniWorld || {};
|
||||
|
||||
AniWorld.IndexApp = (function() {
|
||||
'use strict';
|
||||
|
||||
let localization = null;
|
||||
|
||||
/**
|
||||
* Initialize the index page application
|
||||
*/
|
||||
async function init() {
|
||||
console.log('AniWorld Index App initializing...');
|
||||
|
||||
// Initialize localization if available
|
||||
if (typeof Localization !== 'undefined') {
|
||||
localization = new Localization();
|
||||
}
|
||||
|
||||
// Check authentication first
|
||||
const isAuthenticated = await AniWorld.Auth.checkAuth();
|
||||
if (!isAuthenticated) {
|
||||
return; // Auth module handles redirect
|
||||
}
|
||||
|
||||
// Initialize theme
|
||||
AniWorld.Theme.init();
|
||||
|
||||
// Initialize WebSocket connection
|
||||
AniWorld.WebSocketClient.init();
|
||||
|
||||
// Initialize socket event handlers for this page
|
||||
AniWorld.IndexSocketHandler.init(localization);
|
||||
|
||||
// Initialize page modules
|
||||
AniWorld.SeriesManager.init();
|
||||
AniWorld.SelectionManager.init();
|
||||
AniWorld.Search.init();
|
||||
AniWorld.ScanManager.init();
|
||||
AniWorld.ConfigManager.init();
|
||||
|
||||
// Bind global events
|
||||
bindGlobalEvents();
|
||||
|
||||
// Load initial data
|
||||
await AniWorld.SeriesManager.loadSeries();
|
||||
|
||||
console.log('AniWorld Index App initialized successfully');
|
||||
}
|
||||
|
||||
/**
|
||||
* Bind global event handlers
|
||||
*/
|
||||
function bindGlobalEvents() {
|
||||
// Theme toggle
|
||||
const themeToggle = document.getElementById('theme-toggle');
|
||||
if (themeToggle) {
|
||||
themeToggle.addEventListener('click', function() {
|
||||
AniWorld.Theme.toggle();
|
||||
});
|
||||
}
|
||||
|
||||
// Logout button
|
||||
const logoutBtn = document.getElementById('logout-btn');
|
||||
if (logoutBtn) {
|
||||
logoutBtn.addEventListener('click', function() {
|
||||
AniWorld.Auth.logout(AniWorld.UI.showToast);
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Get localization instance
|
||||
*/
|
||||
function getLocalization() {
|
||||
return localization;
|
||||
}
|
||||
|
||||
// Public API
|
||||
return {
|
||||
init: init,
|
||||
getLocalization: getLocalization
|
||||
};
|
||||
})();
|
||||
|
||||
// Initialize the application when DOM is loaded
|
||||
document.addEventListener('DOMContentLoaded', function() {
|
||||
AniWorld.IndexApp.init();
|
||||
});
|
||||
|
||||
// Expose app globally for inline event handlers (backwards compatibility)
|
||||
window.app = {
|
||||
addSeries: function(link, name) {
|
||||
return AniWorld.Search.addSeries(link, name);
|
||||
}
|
||||
};
|
||||
Reference in New Issue
Block a user