119 lines
3.2 KiB
JavaScript
119 lines
3.2 KiB
JavaScript
// theme-configs.js
|
|
|
|
const automateThemeSelection = false; // Set to false to disable automatic theme selection based on the current month
|
|
const defaultTheme = 'snowfall'; // The theme to use if automatic theme selection is disabled
|
|
|
|
// theme configurations
|
|
const themeConfigs = {
|
|
snowflakes: {
|
|
css: 'snowflakes.css',
|
|
js: 'snowflakes.js',
|
|
containerClass: 'snowflakes'
|
|
},
|
|
snowfall: {
|
|
js: 'snowfall.js',
|
|
containerClass: 'snowfall'
|
|
},
|
|
snowstorm: {
|
|
css: 'snowstorm.css',
|
|
js: 'snowstorm.js',
|
|
containerClass: 'snowstorm'
|
|
},
|
|
fireworks: {
|
|
css: 'fireworks.css',
|
|
js: 'fireworks.js',
|
|
containerClass: 'fireworks'
|
|
},
|
|
halloween: {
|
|
css: 'halloween.css',
|
|
js: 'halloween.js',
|
|
containerClass: 'halloween'
|
|
},
|
|
summer: {
|
|
css: 'summer.css',
|
|
js: 'summer.js',
|
|
containerClass: 'summer'
|
|
},
|
|
autumn: {
|
|
css: 'autumn.css',
|
|
js: 'autumn.js',
|
|
containerClass: 'autumn'
|
|
},
|
|
spring: {
|
|
css: 'spring.css',
|
|
js: 'spring.js',
|
|
containerClass: 'spring'
|
|
},
|
|
};
|
|
|
|
// determine current theme based on the current month
|
|
function determineCurrentTheme() {
|
|
const date = new Date();
|
|
const month = date.getMonth();
|
|
const day = date.getDate();
|
|
|
|
if (month === 11 || month === 0 || month === 1) return 'snowfall'; // december, january, february
|
|
if (month === 9 && day === 31) return 'halloween'; // halloween
|
|
if (month === 0 && day === 1) return 'fireworks'; //new year
|
|
if (month >= 2 && month <= 4) return 'spring';
|
|
if (month >= 5 && month <= 7) return 'summer';
|
|
if (month >= 8 && month <= 10) return 'autumn';
|
|
|
|
return ''; // Fallback (nothing)
|
|
}
|
|
|
|
// load theme csss
|
|
function loadThemeCSS(cssPath) {
|
|
const link = document.createElement('link');
|
|
link.rel = 'stylesheet';
|
|
link.href = cssPath;
|
|
document.head.appendChild(link);
|
|
console.log(`CSS file "${cssPath}" loaded.`);
|
|
}
|
|
|
|
// load theme js
|
|
function loadThemeJS(jsPath) {
|
|
const script = document.createElement('script');
|
|
script.src = jsPath;
|
|
document.body.appendChild(script);
|
|
console.log(`JS file "${jsPath}" loaded.`);
|
|
}
|
|
|
|
// update theme container class name
|
|
function updateThemeContainer(containerClass) {
|
|
const container = document.querySelector('.seasonal-container');
|
|
if (!container) {
|
|
console.error('No element with the class "seasonal-container" found.');
|
|
return;
|
|
}
|
|
container.className = containerClass;
|
|
}
|
|
|
|
// initialize theme
|
|
function initializeTheme() {
|
|
if (!automateThemeSelection) {
|
|
const currentTheme = defaultTheme;
|
|
} else {
|
|
const currentTheme = determineCurrentTheme();
|
|
}
|
|
|
|
const theme = themeConfigs[currentTheme];
|
|
|
|
if (!theme) {
|
|
console.error(`Theme "${currentTheme}" not found.`);
|
|
return;
|
|
}
|
|
|
|
if (theme.css) loadThemeCSS(theme.css);
|
|
if (theme.js) loadThemeJS(theme.js);
|
|
|
|
updateThemeContainer(theme.containerClass);
|
|
|
|
console.log(`Theme "${currentTheme}" loaded.`);
|
|
}
|
|
|
|
|
|
//document.addEventListener('DOMContentLoaded', initializeTheme);
|
|
document.addEventListener('DOMContentLoaded', () => {
|
|
initializeTheme();
|
|
}); |