Compare commits

...

12 Commits

Author SHA1 Message Date
CodeDevMLH
a67e3c5763 Add disabled options for St. Patrick's Day and Thanksgiving in seasonal selection [skip ci] 2026-02-28 16:40:11 +01:00
CodeDevMLH
b810c9cbaf Remove Olympia event from seasonal rules configuration [skip ci] 2026-02-28 16:39:17 +01:00
CodeDevMLH
d55d52c538 Update seasonal rules configuration with additional events and improved formatting [skip ci] 2026-02-28 16:38:03 +01:00
CodeDevMLH
faa867956a Update manifest.json for release v2.0.0.8 [skip ci] 2026-02-28 15:28:11 +00:00
CodeDevMLH
5b3e405b99 Bump version to 2.0.0.8s
All checks were successful
Auto Release Plugin / build-and-release (push) Successful in 53s
2026-02-28 16:27:19 +01:00
CodeDevMLH
30e624fa64 fix loading error 2026-02-28 16:26:59 +01:00
CodeDevMLH
41494785ca Refactor checkbox descriptions for improved HTML structure and accessibility
All checks were successful
Auto Release Plugin / build-and-release (push) Successful in 37s
2026-02-28 15:25:28 +01:00
CodeDevMLH
4196a72615 Update manifest.json for release v2.0.0.7 [skip ci] 2026-02-28 14:16:09 +00:00
CodeDevMLH
9a4ef773dc Bump version to 2.0.0.7
All checks were successful
Auto Release Plugin / build-and-release (push) Successful in 52s
2026-02-28 15:15:17 +01:00
CodeDevMLH
7e67233dea Refactor seasonal configuration logic to streamline event handling and enhance maintainability 2026-02-28 15:14:55 +01:00
CodeDevMLH
6ca3098432 Refactor birthday and event configuration logic for improved clarity and consistency [skip ci] 2026-02-28 14:40:27 +01:00
CodeDevMLH
1a3a5b7cff ordered load logik 2026-02-28 14:33:29 +01:00
4 changed files with 341 additions and 386 deletions

View File

@@ -77,7 +77,32 @@ public class PluginConfiguration : BasePluginConfiguration
/// <summary>
/// Gets or sets the seasonal rules configuration as JSON.
/// </summary>
public string SeasonalRules { get; set; } = "[{\"Name\":\"New Year Fireworks\",\"StartDay\":28,\"StartMonth\":12,\"EndDay\":5,\"EndMonth\":1,\"Theme\":\"fireworks\"},{\"Name\":\"Carnival\",\"StartDay\":19,\"StartMonth\":2,\"EndDay\":28,\"EndMonth\":2,\"Theme\":\"carnival\"},{\"Name\":\"Valentine's Day\",\"StartDay\":10,\"StartMonth\":2,\"EndDay\":18,\"EndMonth\":2,\"Theme\":\"hearts\"},{\"Name\":\"Spring\",\"StartDay\":1,\"StartMonth\":3,\"EndDay\":31,\"EndMonth\":5,\"Theme\":\"spring\"},{\"Name\":\"Summer\",\"StartDay\":1,\"StartMonth\":6,\"EndDay\":31,\"EndMonth\":8,\"Theme\":\"summer\"},{\"Name\":\"Santa\",\"StartDay\":22,\"StartMonth\":12,\"EndDay\":27,\"EndMonth\":12,\"Theme\":\"santa\"},{\"Name\":\"Snowflakes (December)\",\"StartDay\":1,\"StartMonth\":12,\"EndDay\":31,\"EndMonth\":12,\"Theme\":\"snowflakes\"},{\"Name\":\"Snowfall (January)\",\"StartDay\":1,\"StartMonth\":1,\"EndDay\":31,\"EndMonth\":1,\"Theme\":\"snowfall\"},{\"Name\":\"Snowfall (February)\",\"StartDay\":1,\"StartMonth\":2,\"EndDay\":29,\"EndMonth\":2,\"Theme\":\"snowfall\"},{\"Name\":\"Easter\",\"StartDay\":25,\"StartMonth\":3,\"EndDay\":25,\"EndMonth\":4,\"Theme\":\"easter\"},{\"Name\":\"Halloween\",\"StartDay\":24,\"StartMonth\":10,\"EndDay\":5,\"EndMonth\":11,\"Theme\":\"halloween\"},{\"Name\":\"Autumn\",\"StartDay\":1,\"StartMonth\":9,\"EndDay\":30,\"EndMonth\":11,\"Theme\":\"autumn\"},{\"Name\":\"Cherry Blossom\",\"StartDay\":1,\"StartMonth\":4,\"EndDay\":30,\"EndMonth\":4,\"Theme\":\"cherryblossom\"}]";
public string SeasonalRules { get; set; } = "[" +
"{\"Name\":\"New Year Fireworks\",\"StartDay\":28,\"StartMonth\":12,\"EndDay\":5,\"EndMonth\":1,\"Theme\":\"fireworks\"}," +
"{\"Name\":\"Snowfall (January)\",\"StartDay\":1,\"StartMonth\":1,\"EndDay\":31,\"EndMonth\":1,\"Theme\":\"snowfall\"}," +
"{\"Name\":\"Snowfall (February)\",\"StartDay\":1,\"StartMonth\":2,\"EndDay\":29,\"EndMonth\":2,\"Theme\":\"snowfall\"}," +
"{\"Name\":\"Valentine's Day\",\"StartDay\":10,\"StartMonth\":2,\"EndDay\":18,\"EndMonth\":2,\"Theme\":\"hearts\"}," +
"{\"Name\":\"Carnival\",\"StartDay\":19,\"StartMonth\":2,\"EndDay\":28,\"EndMonth\":2,\"Theme\":\"carnival\"}," +
"{\"Name\":\"Oscar Awards\",\"StartDay\":23,\"StartMonth\":2,\"EndDay\":5,\"EndMonth\":3,\"Theme\":\"oscar\"}," +
"{\"Name\":\"Mario Day\",\"StartDay\":10,\"StartMonth\":3,\"EndDay\":10,\"EndMonth\":3,\"Theme\":\"marioday\"}," +
"{\"Name\":\"Film Noir Day\",\"StartDay\":17,\"StartMonth\":3,\"EndDay\":17,\"EndMonth\":3,\"Theme\":\"filmnoir\"}," +
"{\"Name\":\"Spring\",\"StartDay\":1,\"StartMonth\":3,\"EndDay\":31,\"EndMonth\":5,\"Theme\":\"spring\"}," +
"{\"Name\":\"Cherry Blossom\",\"StartDay\":1,\"StartMonth\":4,\"EndDay\":30,\"EndMonth\":4,\"Theme\":\"cherryblossom\"}," +
"{\"Name\":\"Easter\",\"StartDay\":25,\"StartMonth\":3,\"EndDay\":25,\"EndMonth\":4,\"Theme\":\"easter\"}," +
"{\"Name\":\"Earth Day\",\"StartDay\":22,\"StartMonth\":4,\"EndDay\":22,\"EndMonth\":4,\"Theme\":\"earthday\"}," +
"{\"Name\":\"Space Day\",\"StartDay\":12,\"StartMonth\":4,\"EndDay\":12,\"EndMonth\":4,\"Theme\":\"space\"}," +
"{\"Name\":\"Star Wars Day\",\"StartDay\":4,\"StartMonth\":5,\"EndDay\":5,\"EndMonth\":5,\"Theme\":\"starwars\"}," +
"{\"Name\":\"Eurovision\",\"StartDay\":6,\"StartMonth\":5,\"EndDay\":12,\"EndMonth\":5,\"Theme\":\"eurovision\"}," +
"{\"Name\":\"Pride Month\",\"StartDay\":1,\"StartMonth\":6,\"EndDay\":30,\"EndMonth\":6,\"Theme\":\"pride\"}," +
"{\"Name\":\"Summer\",\"StartDay\":1,\"StartMonth\":6,\"EndDay\":31,\"EndMonth\":8,\"Theme\":\"summer\"}," +
"{\"Name\":\"Underwater\",\"StartDay\":1,\"StartMonth\":7,\"EndDay\":31,\"EndMonth\":8,\"Theme\":\"underwater\"}," +
"{\"Name\":\"Autumn\",\"StartDay\":1,\"StartMonth\":9,\"EndDay\":30,\"EndMonth\":11,\"Theme\":\"autumn\"}," +
"{\"Name\":\"Oktoberfest\",\"StartDay\":20,\"StartMonth\":9,\"EndDay\":5,\"EndMonth\":10,\"Theme\":\"oktoberfest\"}," +
"{\"Name\":\"Halloween\",\"StartDay\":24,\"StartMonth\":10,\"EndDay\":5,\"EndMonth\":11,\"Theme\":\"halloween\"}," +
"{\"Name\":\"Spooky (Pre-Halloween)\",\"StartDay\":1,\"StartMonth\":10,\"EndDay\":23,\"EndMonth\":10,\"Theme\":\"spooky\"}," +
"{\"Name\":\"Snowflakes (December)\",\"StartDay\":1,\"StartMonth\":12,\"EndDay\":31,\"EndMonth\":12,\"Theme\":\"snowflakes\"}," +
"{\"Name\":\"Santa\",\"StartDay\":22,\"StartMonth\":12,\"EndDay\":27,\"EndMonth\":12,\"Theme\":\"santa\"}" +
"]";
/// <summary>
/// Gets or sets the Seasonals options.

View File

@@ -90,6 +90,8 @@
<option value="storm">Storm (⚠Epilepsy Warning⚠)</option>
<option value="summer">Summer (Bubbles)</option>
<option value="underwater">Underwater</option>
<option value="patrick" disabled>St. Patrick's Day (not implemented yet. Please commit ideas/implementation in a issue or PR)</option>
<option value="thanksgiving" disabled>Thanksgiving (not implemented yet. Please commit ideas/implementation in a issue or PR)</option>
</select>
<div class="fieldDescription">The season to display if automation is disabled or no "Auto Selection" rule matches the current date.</div>
</div>
@@ -350,8 +352,8 @@
<label class="emby-checkbox-label">
<input id="EnableEid" name="EnableEid" type="checkbox" is="emby-checkbox" />
<span>Enable Eid al-Fitr Seasonal</span>
<div class="fieldDescription">Enable the Eid al-Fitr theme in general (e.g. for automation).</div>
</label>
<div class="fieldDescription">Enable the Eid al-Fitr theme in general (e.g. for automation).</div>
</div>
<div class="inputContainer">
<label class="inputLabel" for="EidLanternCount">Lantern Count</label>
@@ -413,8 +415,8 @@
<label class="emby-checkbox-label">
<input id="EnableFilmNoir" name="EnableFilmNoir" type="checkbox" is="emby-checkbox" />
<span>Enable Film-Noir Seasonal</span>
<div class="fieldDescription">Enable the Film-Noir theme in general (e.g. for automation).</div>
</label>
<div class="fieldDescription">Enable the Film-Noir theme in general (e.g. for automation).</div>
</div>
</details>
<hr style="max-width: 800px; margin: 1em 0;">
@@ -464,8 +466,8 @@
<label class="emby-checkbox-label">
<input id="EnableFriday13" name="EnableFriday13" type="checkbox" is="emby-checkbox" />
<span>Enable Friday the 13th Seasonal</span>
<div class="fieldDescription">Enable the Friday the 13th theme in general (e.g. for automation).</div>
</label>
<div class="fieldDescription">Enable the Friday the 13th theme in general (e.g. for automation).</div>
</div>
</details>
<hr style="max-width: 800px; margin: 1em 0;">
@@ -476,8 +478,8 @@
<label class="emby-checkbox-label">
<input id="EnableFrost" name="EnableFrost" type="checkbox" is="emby-checkbox" />
<span>Enable Frost Seasonal</span>
<div class="fieldDescription">Enable the Frost theme in general (e.g. for automation).</div>
</label>
<div class="fieldDescription">Enable the Frost theme in general (e.g. for automation).</div>
</div>
</details>
<hr style="max-width: 800px; margin: 1em 0;">
@@ -560,15 +562,15 @@
<label class="emby-checkbox-label">
<input id="EnableMarioDay" name="EnableMarioDay" type="checkbox" is="emby-checkbox" />
<span>Enable Mario Day Seasonal</span>
<div class="fieldDescription">Enable the Mario Day theme in general (e.g. for automation).</div>
</label>
<div class="fieldDescription">Enable the Mario Day theme in general (e.g. for automation).</div>
</div>
<div class="checkboxContainer checkboxContainer-withDescription">
<label class="emby-checkbox-label">
<input id="LetMarioJump" name="LetMarioJump" type="checkbox" is="emby-checkbox" />
<span>Let Mario Jump</span>
<div class="fieldDescription">Lets Mario jump randomly.</div>
</label>
<div class="fieldDescription">Lets Mario jump randomly.</div>
</div>
</details>
<hr style="max-width: 800px; margin: 1em 0;">
@@ -608,8 +610,8 @@
<label class="emby-checkbox-label">
<input id="EnableOktoberfest" name="EnableOktoberfest" type="checkbox" is="emby-checkbox" />
<span>Enable Oktoberfest Seasonal</span>
<div class="fieldDescription">Enable the Oktoberfest theme in general (e.g. for automation).</div>
</label>
<div class="fieldDescription">Enable the Oktoberfest theme in general (e.g. for automation).</div>
</div>
<div class="inputContainer">
<label class="inputLabel" for="OktoberfestCount">Symbol Count</label>
@@ -625,8 +627,8 @@
<label class="emby-checkbox-label">
<input id="EnableDifferentDurationOktoberfest" name="EnableDifferentDurationOktoberfest" type="checkbox" is="emby-checkbox" />
<span>Enable Different Duration</span>
<div class="fieldDescription">Randomize the Oktoberfest symbol duration.</div>
</label>
<div class="fieldDescription">Randomize the Oktoberfest symbol duration.</div>
</div>
</details>
<hr style="max-width: 800px; margin: 1em 0;">
@@ -665,8 +667,8 @@
<label class="emby-checkbox-label">
<input id="EnableOscar" name="EnableOscar" type="checkbox" is="emby-checkbox" />
<span>Enable Oscar Awards Seasonal</span>
<div class="fieldDescription">Enable the Oscar Awards theme in general (e.g. for automation).</div>
</label>
<div class="fieldDescription">Enable the Oscar Awards theme in general (e.g. for automation).</div>
</div>
</details>
<hr style="max-width: 800px; margin: 1em 0;">
@@ -975,11 +977,6 @@
<input is="emby-input" type="number" id="SpookyCount" name="SpookyCount" />
<div class="fieldDescription">Number of floating symbols.</div>
</div>
<div class="inputContainer">
<label class="inputLabel" for="SpookyCountMobile">Symbol Count (Mobile)</label>
<input is="emby-input" type="number" id="SpookyCountMobile" name="SpookyCountMobile" />
<div class="fieldDescription">Amount of symbols on mobile. Minimum 0. Warning: High values may affect performance.</div>
</div>
<div class="inputContainer">
<label class="inputLabel" for="SpookySize">Symbol Size</label>
<input is="emby-input" type="number" id="SpookySize" name="SpookySize" />
@@ -990,12 +987,14 @@
<input id="EnableDifferentDurationSpooky" name="EnableDifferentDurationSpooky" type="checkbox" is="emby-checkbox" />
<span>Enable Different Symbol Durations</span>
</label>
<div class="fieldDescription">Enable different animation durations for symbols.</div>
</div>
<div class="checkboxContainer">
<label class="emby-checkbox-label">
<input id="EnableSpookySway" name="EnableSpookySway" type="checkbox" is="emby-checkbox" />
<span>Enable Swaying Motion</span>
</label>
<div class="fieldDescription">Enable swaying motion for symbols.</div>
</div>
<div class="inputContainer">
<label class="inputLabel" for="SpookyGlowSize">Glow Size</label>
@@ -1161,8 +1160,8 @@
<label class="emby-checkbox-label">
<input id="EnableStarWars" name="EnableStarWars" type="checkbox" is="emby-checkbox" />
<span>Enable Star Wars Seasonal</span>
<div class="fieldDescription">Enable the Star Wars theme in general (e.g. for automation).</div>
</label>
<div class="fieldDescription">Enable the Star Wars theme in general (e.g. for automation).</div>
</div>
</details>
<hr style="max-width: 800px; margin: 1em 0;">
@@ -1579,41 +1578,41 @@
document.querySelector('#SeasonalsSelectedSeason').value = config.SelectedSeason;
document.querySelector('#SeasonalsAutomateSeasonSelection').checked = config.AutomateSeasonSelection;
document.querySelector('#SeasonalsEnableClientSideToggle').checked = config.EnableClientSideToggle !== undefined ? config.EnableClientSideToggle : true;
if (!config.Autumn) config.Autumn = {};
if (!config.Birthday) config.Birthday = {};
if (!config.Carnival) config.Carnival = {};
if (!config.CherryBlossom) config.CherryBlossom = {};
if (!config.Christmas) config.Christmas = {};
if (!config.EarthDay) config.EarthDay = {};
if (!config.Easter) config.Easter = {};
if (!config.Eid) config.Eid = {};
if (!config.Eurovision) config.Eurovision = {};
if (!config.FilmNoir) config.FilmNoir = {};
if (!config.Fireworks) config.Fireworks = {};
if (!config.Friday13) config.Friday13 = {};
if (!config.Frost) config.Frost = {};
if (!config.Halloween) config.Halloween = {};
if (!config.Hearts) config.Hearts = {};
if (!config.MarioDay) config.MarioDay = {};
if (!config.Matrix) config.Matrix = {};
if (!config.Oktoberfest) config.Oktoberfest = {};
if (!config.Olympia) config.Olympia = {};
if (!config.Oscar) config.Oscar = {};
if (!config.Pride) config.Pride = {};
if (!config.Rain) config.Rain = {};
if (!config.Resurrection) config.Resurrection = {};
if (!config.Santa) config.Santa = {};
if (!config.Snowfall) config.Snowfall = {};
if (!config.Snowflakes) config.Snowflakes = {};
if (!config.Snowstorm) config.Snowstorm = {};
if (!config.Space) config.Space = {};
if (!config.Spooky) config.Spooky = {};
if (!config.Sports) config.Sports = {};
if (!config.Spring) config.Spring = {};
if (!config.StarWars) config.StarWars = {};
if (!config.Storm) config.Storm = {};
if (!config.Summer) config.Summer = {};
if (!config.Underwater) config.Underwater = {};
if (!config.Autumn) config.Autumn = { EnableAutumn: true, LeafCount: 35, LeafCountMobile: 10, EnableDifferentDuration: true, EnableRotation: false };
if (!config.Birthday) config.Birthday = { EnableBirthday: true, SymbolCount: 12, SymbolCountMobile: 5, EnableDifferentDuration: true, ConfettiCount: 60 };
if (!config.Carnival) config.Carnival = { EnableCarnival: true, EnableDifferentDuration: true, EnableCarnivalSway: true, ObjectCount: 120, ObjectCountMobile: 60 };
if (!config.CherryBlossom) config.CherryBlossom = { EnableCherryBlossom: true, PetalCount: 25, PetalCountMobile: 15, EnableDifferentDuration: true };
if (!config.Christmas) config.Christmas = { EnableChristmas: true, SymbolCount: 25, SymbolCountMobile: 10, EnableDifferentDuration: true };
if (!config.EarthDay) config.EarthDay = { EnableEarthDay: true, FlowersCount: 60, FlowersCountMobile: 20 };
if (!config.Easter) config.Easter = { EnableEaster: true, EnableBunny: true, MinBunnyRestTime: 2000, MaxBunnyRestTime: 5000, EggCount: 15 };
if (!config.Eid) config.Eid = { EnableEid: true, LanternCount: 8, LanternCountMobile: 3 };
if (!config.Eurovision) config.Eurovision = { EnableEurovision: true, SymbolCount: 25, EnableDifferentDuration: true, EnableColorfulNotes: true, EurovisionColors: '#ff0026ff,#17a6ffff,#32d432ff,#FFD700,#f0821bff,#f826f8ff', EurovisionGlowSize: 2 };
if (!config.FilmNoir) config.FilmNoir = { EnableFilmNoir: true };
if (!config.Fireworks) config.Fireworks = { EnableFireworks: true, ScrollFireworks: true, ParticleCount: 50, MinFireworks: 3, MaxFireworks: 6, LaunchInterval: 3200 };
if (!config.Friday13) config.Friday13 = { EnableFriday13: true };
if (!config.Frost) config.Frost = { EnableFrost: true };
if (!config.Halloween) config.Halloween = { EnableHalloween: true, SymbolCount: 25, SymbolCountMobile: 10, EnableDifferentDuration: true, EnableSpiders: true, EnableMice: true };
if (!config.Hearts) config.Hearts = { EnableHearts: true, SymbolCount: 25, SymbolCountMobile: 10, EnableDifferentDuration: true };
if (!config.MarioDay) config.MarioDay = { EnableMarioDay: true, LetMarioJump: true };
if (!config.Matrix) config.Matrix = { EnableMatrix: true, SymbolCount: 25, EnableMatrixBackground: false, MatrixChars: '0123456789' };
if (!config.Oktoberfest) config.Oktoberfest = { EnableOktoberfest: true, SymbolCount: 25, SymbolCountMobile: 10, EnableDifferentDuration: true };
if (!config.Olympia) config.Olympia = { EnableOlympia: true, SymbolCount: 25, SymbolCountMobile: 10, EnableDifferentDuration: true };
if (!config.Oscar) config.Oscar = { EnableOscar: true };
if (!config.Pride) config.Pride = { EnablePride: true, HeartCount: 20, HeartSize: 1.5, ColorHeader: true };
if (!config.Rain) config.Rain = { EnableRain: true, RaindropCount: 300, RaindropCountMobile: 150, RainSpeed: 1.0 };
if (!config.Resurrection) config.Resurrection = { EnableResurrection: true, SymbolCount: 12, SymbolCountMobile: 5, EnableDifferentDuration: true };
if (!config.Santa) config.Santa = { EnableSanta: true, SnowflakesCount: 500, SnowflakesCountMobile: 250, SnowFallSpeed: 3, SantaSpeed: 10, SantaSpeedMobile: 8, MaxSantaRestTime: 8, MinSantaRestTime: 3, MaxPresentFallSpeed: 5, MinPresentFallSpeed: 2 };
if (!config.Snowfall) config.Snowfall = { EnableSnowfall: true, SnowflakesCount: 500, SnowflakesCountMobile: 250, Speed: 3 };
if (!config.Snowflakes) config.Snowflakes = { EnableSnowflakes: true, SnowflakeCount: 25, SnowflakeCountMobile: 10, EnableColoredSnowflakes: true, EnableDifferentDuration: true };
if (!config.Snowstorm) config.Snowstorm = { EnableSnowstorm: true, SnowflakesCount: 500, SnowflakesCountMobile: 250, Speed: 6, HorizontalWind: 4, VerticalVariation: 2 };
if (!config.Space) config.Space = { EnableSpace: true, PlanetCount: 6, AstronautCount: 1, SatelliteCount: 4, IssCount: 1, RocketCount: 1, EnableDifferentDuration: true, SymbolCountMobile: 2 };
if (!config.Spooky) config.Spooky = { EnableSpooky: true, SymbolCount: 25, EnableDifferentDuration: true, EnableSpookySway: true, SpookySize: 20, SpookyGlowSize: 2 };
if (!config.Sports) config.Sports = { EnableSports: true, SymbolCount: 5, EnableDifferentDuration: true, TurfColor: '#228b22', SportsBalls: 'football,basketball,tennis,volleyball', EnableTrophy: false, ConfettiColors: '#000000,#FF0000,#FFCC00' };
if (!config.Spring) config.Spring = { EnableSpring: true, PollenCount: 30, EnableSpringSunbeams: true, SunbeamCount: 5, BirdCount: 3, ButterflyCount: 4, BeeCount: 2, LadybugCount: 2, SymbolCountMobile: 2 };
if (!config.StarWars) config.StarWars = { EnableStarWars: true };
if (!config.Storm) config.Storm = { EnableStorm: true, RaindropCount: 300, RaindropCountMobile: 150, EnableLightning: true, RainSpeed: 1.0 };
if (!config.Summer) config.Summer = { EnableSummer: true, BubbleCount: 30, DustCount: 50, SymbolCountMobile: 2, EnableDifferentDuration: true };
if (!config.Underwater) config.Underwater = { EnableUnderwater: true, SymbolCountMobile: 2, EnableDifferentDuration: true, EnableLightRays: true, SeaweedCount: 50, CrabCount: 2, StarfishCount: 2, ShellCount: 2, FishCount: 15, SeahorseCount: 3, JellyfishCount: 3, TurtleCount: 1 };
// Load Rules
try {
@@ -1625,8 +1624,8 @@
// Advanced Config
// Autumn
// Autumn
document.querySelector('#EnableAutumn').checked = config.Autumn.EnableAutumn;
document.querySelector('#AutumnLeafCount').value = config.Autumn.LeafCount;
document.querySelector('#AutumnLeafCountMobile').value = config.Autumn.LeafCountMobile;
@@ -1634,61 +1633,60 @@
document.querySelector('#EnableRotation').checked = config.Autumn.EnableRotation;
// Birthday
document.querySelector('#EnableBirthday').checked = config.Birthday.EnableBirthday !== false;
document.querySelector('#EnableDifferentDurationBirthday').checked = config.Birthday.EnableDifferentDuration !== false;
document.querySelector('#BirthdaySymbolCount').value = config.Birthday.SymbolCount || 25;
document.querySelector('#BirthdaySymbolCountMobile').value = config.Birthday.SymbolCountMobile || 10;
document.querySelector('#BirthdayConfettiCount').value = config.Birthday.ConfettiCount || 60;
config.Birthday = config.Birthday || {};
document.querySelector('#EnableBirthday').checked = config.Birthday.EnableBirthday;
document.querySelector('#EnableDifferentDurationBirthday').checked = config.Birthday.EnableDifferentDuration;
document.querySelector('#BirthdaySymbolCount').value = config.Birthday.SymbolCount;
document.querySelector('#BirthdaySymbolCountMobile').value = config.Birthday.SymbolCountMobile;
document.querySelector('#BirthdayConfettiCount').value = config.Birthday.ConfettiCount;
// Carnival
document.querySelector('#EnableCarnival').checked = config.Carnival.EnableCarnival;
document.querySelector('#EnableCarnivalSway').checked = config.Carnival.EnableCarnivalSway !== undefined ? config.Carnival.EnableCarnivalSway : true;
document.querySelector('#EnableCarnivalSway').checked = config.Carnival.EnableCarnivalSway;
document.querySelector('#CarnivalObjectCount').value = config.Carnival.ObjectCount;
document.querySelector('#CarnivalObjectCountMobile').value = config.Carnival.ObjectCountMobile;
document.querySelector('#EnableDifferentDurationCarnival').checked = config.Carnival.EnableDifferentDuration;
// CherryBlossom
document.querySelector('#EnableCherryBlossom').checked = config.CherryBlossom.EnableCherryBlossom;
document.querySelector('#CherryBlossomPetalCount').value = config.CherryBlossom.PetalCount;
document.querySelector('#CherryBlossomPetalCountMobile').value = config.CherryBlossom.PetalCountMobile;
document.querySelector('#EnableDifferentDurationCherryBlossom').checked = config.CherryBlossom.EnableDifferentDuration;
// Christmas
document.querySelector('#EnableChristmas').checked = config.Christmas.EnableChristmas;
document.querySelector('#ChristmasCount').value = config.Christmas.SymbolCount;
document.querySelector('#ChristmasCountMobile').value = config.Christmas.SymbolCountMobile;
document.querySelector('#EnableDifferentDurationChristmas').checked = config.Christmas.EnableDifferentDuration;
// EarthDay
document.querySelector('#EnableEarthDay').checked = config.EarthDay.EnableEarthDay;
document.querySelector('#EarthDayFlowersCount').value = config.EarthDay.FlowersCount !== undefined ? config.EarthDay.FlowersCount : 60;
document.querySelector('#EarthDayFlowersCountMobile').value = config.EarthDay.FlowersCountMobile !== undefined ? config.EarthDay.FlowersCountMobile : 20;
document.querySelector('#EarthDayFlowersCount').value = config.EarthDay.FlowersCount;
document.querySelector('#EarthDayFlowersCountMobile').value = config.EarthDay.FlowersCountMobile;
// Easter
document.querySelector('#EnableEaster').checked = config.Easter.EnableEaster;
document.querySelector('#EasterEggCount').value = config.Easter.EggCount;
document.querySelector('#EasterBunny').checked = config.Easter.EnableBunny;
document.querySelector('#MinBunnyRestTime').value = config.Easter.MinBunnyRestTime;
document.querySelector('#MaxBunnyRestTime').value = config.Easter.MaxBunnyRestTime;
// Eurovision
// Eid al-Fitr
document.querySelector('#EnableEid').checked = config.Eid.EnableEid;
document.querySelector('#EidLanternCount').value = config.Eid.LanternCount;
document.querySelector('#EidLanternCountMobile').value = config.Eid.LanternCountMobile;
document.querySelector('#EnableEurovision').checked = config.Eurovision.EnableEurovision !== false;
document.querySelector('#EurovisionSymbolCount').value = config.Eurovision.SymbolCount !== undefined ? config.Eurovision.SymbolCount : 25;
document.querySelector('#EnableDifferentDurationEurovision').checked = config.Eurovision.EnableDifferentDuration !== false;
document.querySelector('#EnableColorfulNotes').checked = config.Eurovision.EnableColorfulNotes !== false;
document.querySelector('#EurovisionColors').value = config.Eurovision.EurovisionColors || '#ff0026ff,#17a6ffff,#32d432ff,#FFD700,#f0821bff,#f826f8ff';
document.querySelector('#EurovisionGlowSize').value = config.Eurovision.EurovisionGlowSize !== undefined ? config.Eurovision.EurovisionGlowSize : 2;
// Eurovision
document.querySelector('#EnableEurovision').checked = config.Eurovision.EnableEurovision;
document.querySelector('#EurovisionSymbolCount').value = config.Eurovision.SymbolCount;
document.querySelector('#EnableDifferentDurationEurovision').checked = config.Eurovision.EnableDifferentDuration;
document.querySelector('#EnableColorfulNotes').checked = config.Eurovision.EnableColorfulNotes;
document.querySelector('#EurovisionColors').value = config.Eurovision.EurovisionColors;
document.querySelector('#EurovisionGlowSize').value = config.Eurovision.EurovisionGlowSize;
// Film Noir
document.querySelector('#EnableFilmNoir').checked = config.FilmNoir.EnableFilmNoir;
// Fireworks
document.querySelector('#EnableFireworks').checked = config.Fireworks.EnableFireworks;
document.querySelector('#FireworksParticles').value = config.Fireworks.ParticleCount;
document.querySelector('#FireworksInterval').value = config.Fireworks.LaunchInterval;
@@ -1696,61 +1694,70 @@
document.querySelector('#MinFireworks').value = config.Fireworks.MinFireworks;
document.querySelector('#MaxFireworks').value = config.Fireworks.MaxFireworks;
// Halloween
// Friday the 13th
document.querySelector('#EnableFriday13').checked = config.Friday13.EnableFriday13;
// Frost
document.querySelector('#EnableFrost').checked = config.Frost.EnableFrost;
// Halloween
document.querySelector('#EnableHalloween').checked = config.Halloween.EnableHalloween;
document.querySelector('#HalloweenCount').value = config.Halloween.SymbolCount;
document.querySelector('#HalloweenCountMobile').value = config.Halloween.SymbolCountMobile;
document.querySelector('#EnableDifferentDurationHalloween').checked = config.Halloween.EnableDifferentDuration;
document.querySelector('#EnableSpiders').checked = config.Halloween.EnableSpiders !== undefined ? config.Halloween.EnableSpiders : true;
document.querySelector('#EnableMice').checked = config.Halloween.EnableMice !== undefined ? config.Halloween.EnableMice : true;
document.querySelector('#EnableSpiders').checked = config.Halloween.EnableSpiders;
document.querySelector('#EnableMice').checked = config.Halloween.EnableMice;
// Hearts
document.querySelector('#EnableHearts').checked = config.Hearts.EnableHearts;
document.querySelector('#HeartsCount').value = config.Hearts.SymbolCount;
document.querySelector('#HeartsCountMobile').value = config.Hearts.SymbolCountMobile;
document.querySelector('#EnableDifferentDurationHearts').checked = config.Hearts.EnableDifferentDuration;
// Matrix
// Mario Day
document.querySelector('#EnableMarioDay').checked = config.MarioDay.EnableMarioDay;
document.querySelector('#LetMarioJump').checked = config.MarioDay.LetMarioJump;
document.querySelector('#EnableMatrix').checked = config.Matrix.EnableMatrix !== false;
document.querySelector('#MatrixSymbolCount').value = config.Matrix.SymbolCount !== undefined ? config.Matrix.SymbolCount : 25;
document.querySelector('#MatrixChars').value = config.Matrix.MatrixChars !== undefined ? config.Matrix.MatrixChars : '0123456789';
document.querySelector('#EnableMatrixBackground').checked = config.Matrix.EnableMatrixBackground !== undefined ? config.Matrix.EnableMatrixBackground : false;
// Matrix
document.querySelector('#EnableMatrix').checked = config.Matrix.EnableMatrix;
document.querySelector('#MatrixSymbolCount').value = config.Matrix.SymbolCount;
document.querySelector('#MatrixChars').value = config.Matrix.MatrixChars;
document.querySelector('#EnableMatrixBackground').checked = config.Matrix.EnableMatrixBackground;
// Oktoberfest
document.querySelector('#EnableOktoberfest').checked = config.Oktoberfest.EnableOktoberfest;
document.querySelector('#OktoberfestCount').value = config.Oktoberfest.SymbolCount;
document.querySelector('#OktoberfestCountMobile').value = config.Oktoberfest.SymbolCountMobile;
document.querySelector('#EnableDifferentDurationOktoberfest').checked = config.Oktoberfest.EnableDifferentDuration;
// Olympia
document.querySelector('#EnableOlympia').checked = config.Olympia.EnableOlympia;
document.querySelector('#EnableDifferentDurationOlympia').checked = config.Olympia.EnableDifferentDuration;
document.querySelector('#OlympiaSymbolCount').value = config.Olympia.SymbolCount;
document.querySelector('#OlympiaSymbolCountMobile').value = config.Olympia.SymbolCountMobile;
if (!config.Olympia) config.Olympia = { EnableOlympia: true, SymbolCount: 25, EnableRandomSymbols: true, EnableRandomSymbolsMobile: false, EnableDifferentDuration: true };
document.querySelector('#EnableOlympia').checked = config.Olympia.EnableOlympia !== false;
document.querySelector('#EnableDifferentDurationOlympia').checked = config.Olympia.EnableDifferentDuration !== false;
document.querySelector('#OlympiaSymbolCount').value = config.Olympia.SymbolCount || 25;
document.querySelector('#OlympiaSymbolCountMobile').value = config.Olympia.SymbolCountMobile || 10;
// Oscar
document.querySelector('#EnableOscar').checked = config.Oscar.EnableOscar;
// Pride
document.querySelector('#EnablePride').checked = config.Pride.EnablePride;
document.querySelector('#PrideHeartCount').value = config.Pride.HeartCount;
document.querySelector('#PrideHeartSize').value = config.Pride.HeartSize;
document.querySelector('#PrideColorHeader').checked = config.Pride.ColorHeader;
// Rain
document.querySelector('#EnableRain').checked = config.Rain.EnableRain;
document.querySelector('#RaindropCount').value = config.Rain.RaindropCount;
document.querySelector('#RaindropCountMobile').value = config.Rain.RaindropCountMobile;
document.querySelector('#RainSpeed').value = config.Rain.RainSpeed;
// Resurrection
document.querySelector('#EnableResurrection').checked = config.Resurrection.EnableResurrection;
document.querySelector('#ResurrectionSymbolCount').value = config.Resurrection.SymbolCount;
document.querySelector('#ResurrectionSymbolCountMobile').value = config.Resurrection.SymbolCountMobile;
document.querySelector('#EnableDifferentDurationResurrection').checked = config.Resurrection.EnableDifferentDuration;
// Santa
document.querySelector('#EnableSanta').checked = config.Santa.EnableSanta;
document.querySelector('#SantaSnowflakes').value = config.Santa.SnowflakesCount;
document.querySelector('#SantaSnowflakesMobile').value = config.Santa.SnowflakesCountMobile;
@@ -1763,14 +1770,12 @@
document.querySelector('#MinPresentFallSpeed').value = config.Santa.MinPresentFallSpeed;
// Snowfall
document.querySelector('#EnableSnowfall').checked = config.Snowfall.EnableSnowfall;
document.querySelector('#SnowfallCount').value = config.Snowfall.SnowflakesCount;
document.querySelector('#SnowfallCountMobile').value = config.Snowfall.SnowflakesCountMobile;
document.querySelector('#SnowfallSpeed').value = config.Snowfall.Speed;
// Snowflakes
document.querySelector('#SnowflakesCount').value = config.Snowflakes.SnowflakeCount;
document.querySelector('#SnowflakeCountMobile').value = config.Snowflakes.SnowflakeCountMobile;
document.querySelector('#EnableSnowflakes').checked = config.Snowflakes.EnableSnowflakes;
@@ -1778,7 +1783,6 @@
document.querySelector('#EnableDifferentDurationSnowflakes').checked = config.Snowflakes.EnableDifferentDuration;
// Snowstorm
document.querySelector('#EnableSnowstorm').checked = config.Snowstorm.EnableSnowstorm;
document.querySelector('#SnowstormCount').value = config.Snowstorm.SnowflakesCount;
document.querySelector('#SnowstormCountMobile').value = config.Snowstorm.SnowflakesCountMobile;
@@ -1787,93 +1791,78 @@
document.querySelector('#SnowstormVerticalVariation').value = config.Snowstorm.VerticalVariation;
// Space
document.querySelector('#EnableSpace').checked = config.Space.EnableSpace || false;
document.querySelector('#EnableDifferentDurationSpace').checked = config.Space.EnableDifferentDuration || false;
document.querySelector('#PlanetCount').value = config.Space.PlanetCount !== undefined ? config.Space.PlanetCount : 12;
document.querySelector('#AstronautCount').value = config.Space.AstronautCount !== undefined ? config.Space.AstronautCount : 5;
document.querySelector('#SatelliteCount').value = config.Space.SatelliteCount !== undefined ? config.Space.SatelliteCount : 2;
document.querySelector('#IssCount').value = config.Space.IssCount !== undefined ? config.Space.IssCount : 1;
document.querySelector('#RocketCount').value = config.Space.RocketCount !== undefined ? config.Space.RocketCount : 1;
document.querySelector('#SpaceSymbolCountMobile').value = config.Space.SymbolCountMobile !== undefined ? config.Space.SymbolCountMobile : 2;
document.querySelector('#EnableSpace').checked = config.Space.EnableSpace;
document.querySelector('#EnableDifferentDurationSpace').checked = config.Space.EnableDifferentDuration;
document.querySelector('#PlanetCount').value = config.Space.PlanetCount;
document.querySelector('#AstronautCount').value = config.Space.AstronautCount;
document.querySelector('#SatelliteCount').value = config.Space.SatelliteCount;
document.querySelector('#IssCount').value = config.Space.IssCount;
document.querySelector('#RocketCount').value = config.Space.RocketCount;
document.querySelector('#SpaceSymbolCountMobile').value = config.Space.SymbolCountMobile;
// Spooky
document.querySelector('#SpookyCount').value = config.Spooky.SymbolCount !== undefined ? config.Spooky.SymbolCount : 25;
document.querySelector('#SpookyCountMobile').value = config.Spooky.SymbolCountMobile !== undefined ? config.Spooky.SymbolCountMobile : 10;
document.querySelector('#EnableSpooky').checked = config.Spooky.EnableSpooky !== undefined ? config.Spooky.EnableSpooky : true;
document.querySelector('#SpookySize').value = config.Spooky.SpookySize !== undefined ? config.Spooky.SpookySize : 30;
document.querySelector('#EnableSpookySway').checked = config.Spooky.EnableSpookySway !== undefined ? config.Spooky.EnableSpookySway : true;
document.querySelector('#SpookyGlowSize').value = config.Spooky.SpookyGlowSize !== undefined ? config.Spooky.SpookyGlowSize : 5;
document.querySelector('#EnableDifferentDurationSpooky').checked = config.Spooky.EnableDifferentDuration !== false;
document.querySelector('#SpookyCount').value = config.Spooky.SymbolCount;
document.querySelector('#EnableSpooky').checked = config.Spooky.EnableSpooky;
document.querySelector('#SpookySize').value = config.Spooky.SpookySize;
document.querySelector('#EnableSpookySway').checked = config.Spooky.EnableSpookySway;
document.querySelector('#SpookyGlowSize').value = config.Spooky.SpookyGlowSize;
document.querySelector('#EnableDifferentDurationSpooky').checked = config.Spooky.EnableDifferentDuration;
// Sports
const savedBallsString = config.Sports.SportsBalls || 'football,basketball,tennis,volleyball';
const savedBallsString = config.Sports.SportsBalls;
const savedBalls = savedBallsString.split(',');
document.querySelector('#EnableSports').checked = config.Sports.EnableSports !== false;
document.querySelector('#EnableDifferentDurationSports').checked = config.Sports.EnableDifferentDuration !== false;
document.querySelector('#SportsSymbolCount').value = config.Sports.SymbolCount !== undefined ? config.Sports.SymbolCount : 5;
document.querySelector('#TurfColor').value = config.Sports.TurfColor || '#228b22';
document.querySelector('#SportsConfettiColors').value = config.Sports.ConfettiColors || '#000000,#FF0000,#FFCC00';
document.querySelector('#EnableTrophy').checked = config.Sports.EnableTrophy === true;
document.querySelector('#EnableSports').checked = config.Sports.EnableSports;
document.querySelector('#EnableDifferentDurationSports').checked = config.Sports.EnableDifferentDuration;
document.querySelector('#SportsSymbolCount').value = config.Sports.SymbolCount;
document.querySelector('#TurfColor').value = config.Sports.TurfColor;
document.querySelector('#SportsConfettiColors').value = config.Sports.ConfettiColors;
document.querySelector('#EnableTrophy').checked = config.Sports.EnableTrophy;
document.querySelectorAll('.sport-ball-cb').forEach(cb => {
cb.checked = savedBalls.some(b => b === cb.value || b.startsWith(cb.value + '_'));
});
// Spring
document.querySelector('#EnableSpring').checked = config.Spring.EnableSpring !== false;
document.querySelector('#EnableSpringSunbeams').checked = config.Spring.EnableSpringSunbeams !== false;
document.querySelector('#SpringPollenCount').value = config.Spring.PollenCount !== undefined ? config.Spring.PollenCount : 30;
document.querySelector('#SpringSunbeamCount').value = config.Spring.SunbeamCount !== undefined ? config.Spring.SunbeamCount : 5;
document.querySelector('#SpringBirdCount').value = config.Spring.BirdCount !== undefined ? config.Spring.BirdCount : 3;
document.querySelector('#SpringButterflyCount').value = config.Spring.ButterflyCount !== undefined ? config.Spring.ButterflyCount : 4;
document.querySelector('#SpringBeeCount').value = config.Spring.BeeCount !== undefined ? config.Spring.BeeCount : 2;
document.querySelector('#SpringLadybugCount').value = config.Spring.LadybugCount !== undefined ? config.Spring.LadybugCount : 2;
document.querySelector('#SpringSymbolCountMobile').value = config.Spring.SymbolCountMobile !== undefined ? config.Spring.SymbolCountMobile : 2;
document.querySelector('#EnableSpring').checked = config.Spring.EnableSpring;
document.querySelector('#EnableSpringSunbeams').checked = config.Spring.EnableSpringSunbeams;
document.querySelector('#SpringPollenCount').value = config.Spring.PollenCount;
document.querySelector('#SpringSunbeamCount').value = config.Spring.SunbeamCount;
document.querySelector('#SpringBirdCount').value = config.Spring.BirdCount;
document.querySelector('#SpringButterflyCount').value = config.Spring.ButterflyCount;
document.querySelector('#SpringBeeCount').value = config.Spring.BeeCount;
document.querySelector('#SpringLadybugCount').value = config.Spring.LadybugCount;
document.querySelector('#SpringSymbolCountMobile').value = config.Spring.SymbolCountMobile;
// Star Wars
document.querySelector('#EnableStarWars').checked = config.StarWars.EnableStarWars;
// Storm
document.querySelector('#EnableStorm').checked = config.Storm.EnableStorm !== false;
document.querySelector('#StormRaindropCount').value = config.Storm.RaindropCount !== undefined ? config.Storm.RaindropCount : 300;
document.querySelector('#StormRaindropCountMobile').value = config.Storm.RaindropCountMobile !== undefined ? config.Storm.RaindropCountMobile : 150;
document.querySelector('#StormRainSpeed').value = config.Storm.RainSpeed !== undefined ? config.Storm.RainSpeed : 1.0;
document.querySelector('#StormEnableLightning').checked = config.Storm.EnableLightning !== false;
document.querySelector('#EnableStorm').checked = config.Storm.EnableStorm;
document.querySelector('#StormRaindropCount').value = config.Storm.RaindropCount;
document.querySelector('#StormRaindropCountMobile').value = config.Storm.RaindropCountMobile;
document.querySelector('#StormRainSpeed').value = config.Storm.RainSpeed;
document.querySelector('#StormEnableLightning').checked = config.Storm.EnableLightning;
// Summer
document.querySelector('#EnableSummer').checked = config.Summer.EnableSummer !== false;
document.querySelector('#SummerBubbleCount').value = config.Summer.BubbleCount !== undefined ? config.Summer.BubbleCount : 30;
document.querySelector('#SummerDustCount').value = config.Summer.DustCount !== undefined ? config.Summer.DustCount : 50;
document.querySelector('#SummerSymbolCountMobile').value = config.Summer.SymbolCountMobile !== undefined ? config.Summer.SymbolCountMobile : 2;
document.querySelector('#EnableDifferentDurationSummer').checked = config.Summer.EnableDifferentDuration !== false;
document.querySelector('#EnableSummer').checked = config.Summer.EnableSummer;
document.querySelector('#SummerBubbleCount').value = config.Summer.BubbleCount;
document.querySelector('#SummerDustCount').value = config.Summer.DustCount;
document.querySelector('#SummerSymbolCountMobile').value = config.Summer.SymbolCountMobile;
document.querySelector('#EnableDifferentDurationSummer').checked = config.Summer.EnableDifferentDuration;
// Underwater
document.querySelector('#EnableUnderwater').checked = config.Underwater.EnableUnderwater !== false;
document.querySelector('#EnableUnderwaterLightRays').checked = config.Underwater.EnableLightRays !== false;
document.querySelector('#EnableDifferentDurationUnderwater').checked = config.Underwater.EnableDifferentDuration !== false;
document.querySelector('#UnderwaterSymbolCountMobile').value = config.Underwater.SymbolCountMobile !== undefined ? config.Underwater.SymbolCountMobile : 2;
document.querySelector('#UnderwaterSeaweedCount').value = config.Underwater.SeaweedCount !== undefined ? config.Underwater.SeaweedCount : 50;
document.querySelector('#UnderwaterFishCount').value = config.Underwater.FishCount !== undefined ? config.Underwater.FishCount : 15;
document.querySelector('#UnderwaterSeahorseCount').value = config.Underwater.SeahorseCount !== undefined ? config.Underwater.SeahorseCount : 3;
document.querySelector('#UnderwaterJellyfishCount').value = config.Underwater.JellyfishCount !== undefined ? config.Underwater.JellyfishCount : 3;
document.querySelector('#UnderwaterTurtleCount').value = config.Underwater.TurtleCount !== undefined ? config.Underwater.TurtleCount : 1;
document.querySelector('#UnderwaterCrabCount').value = config.Underwater.CrabCount !== undefined ? config.Underwater.CrabCount : 2;
document.querySelector('#UnderwaterStarfishCount').value = config.Underwater.StarfishCount !== undefined ? config.Underwater.StarfishCount : 2;
document.querySelector('#UnderwaterShellCount').value = config.Underwater.ShellCount !== undefined ? config.Underwater.ShellCount : 2;
// Simple Themes
document.querySelector('#EnableFrost').checked = config.Frost.EnableFrost !== false;
document.querySelector('#EnableFilmNoir').checked = config.FilmNoir.EnableFilmNoir !== false;
document.querySelector('#EnableOscar').checked = config.Oscar.EnableOscar !== false;
document.querySelector('#EnableMarioDay').checked = config.MarioDay.EnableMarioDay !== false;
document.querySelector('#LetMarioJump').checked = config.MarioDay.LetMarioJump !== false;
document.querySelector('#EnableStarWars').checked = config.StarWars.EnableStarWars !== false;
document.querySelector('#EnableFriday13').checked = config.Friday13.EnableFriday13 !== false;
document.querySelector('#EnableOktoberfest').checked = config.Oktoberfest.EnableOktoberfest !== false;
document.querySelector('#OktoberfestCount').value = config.Oktoberfest.SymbolCount !== undefined ? config.Oktoberfest.SymbolCount : 25;
document.querySelector('#OktoberfestCountMobile').value = config.Oktoberfest.SymbolCountMobile !== undefined ? config.Oktoberfest.SymbolCountMobile : 10;
document.querySelector('#EnableDifferentDurationOktoberfest').checked = config.Oktoberfest.EnableDifferentDuration !== false;
document.querySelector('#EnableEid').checked = config.Eid.EnableEid !== false;
document.querySelector('#EidLanternCount').value = config.Eid.LanternCount !== undefined ? config.Eid.LanternCount : 8;
document.querySelector('#EidLanternCountMobile').value = config.Eid.LanternCountMobile !== undefined ? config.Eid.LanternCountMobile : 3;
document.querySelector('#EnableUnderwater').checked = config.Underwater.EnableUnderwater;
document.querySelector('#EnableUnderwaterLightRays').checked = config.Underwater.EnableLightRays;
document.querySelector('#EnableDifferentDurationUnderwater').checked = config.Underwater.EnableDifferentDuration;
document.querySelector('#UnderwaterSymbolCountMobile').value = config.Underwater.SymbolCountMobile;
document.querySelector('#UnderwaterSeaweedCount').value = config.Underwater.SeaweedCount;
document.querySelector('#UnderwaterFishCount').value = config.Underwater.FishCount;
document.querySelector('#UnderwaterSeahorseCount').value = config.Underwater.SeahorseCount;
document.querySelector('#UnderwaterJellyfishCount').value = config.Underwater.JellyfishCount;
document.querySelector('#UnderwaterTurtleCount').value = config.Underwater.TurtleCount;
document.querySelector('#UnderwaterCrabCount').value = config.Underwater.CrabCount;
document.querySelector('#UnderwaterStarfishCount').value = config.Underwater.StarfishCount;
document.querySelector('#UnderwaterShellCount').value = config.Underwater.ShellCount;
} catch(e) {
console.error('[Seasonals] Error loading config:', e);
@@ -1903,28 +1892,6 @@
config.Autumn.EnableDifferentDuration = document.querySelector('#EnableDifferentDurationAutumn').checked;
config.Autumn.EnableRotation = document.querySelector('#EnableRotation').checked;
// Sports (saved later to avoid duplicate)
// Olympia
if (!config.Olympia) config.Olympia = {};
config.Olympia.EnableOlympia = document.querySelector('#EnableOlympia').checked;
config.Olympia.EnableDifferentDuration = document.querySelector('#EnableDifferentDurationOlympia').checked;
config.Olympia.SymbolCount = parseInt(document.querySelector('#OlympiaSymbolCount').value);
config.Olympia.SymbolCountMobile = parseInt(document.querySelector('#OlympiaSymbolCountMobile').value);
// Space
if (!config.Space) config.Space = {};
config.Space.EnableSpace = document.querySelector('#EnableSpace').checked;
config.Space.EnableDifferentDuration = document.querySelector('#EnableDifferentDurationSpace').checked;
config.Space.PlanetCount = parseInt(document.querySelector('#PlanetCount').value);
config.Space.AstronautCount = parseInt(document.querySelector('#AstronautCount').value);
config.Space.SatelliteCount = parseInt(document.querySelector('#SatelliteCount').value);
config.Space.IssCount = parseInt(document.querySelector('#IssCount').value);
config.Space.RocketCount = parseInt(document.querySelector('#RocketCount').value);
config.Space.SymbolCountMobile = parseInt(document.querySelector('#SpaceSymbolCountMobile').value);
// Underwater (saved later)
// Birthday
if (!config.Birthday) config.Birthday = {};
config.Birthday.EnableBirthday = document.querySelector('#EnableBirthday').checked;
@@ -1933,26 +1900,52 @@
config.Birthday.SymbolCountMobile = parseInt(document.querySelector('#BirthdaySymbolCountMobile').value);
config.Birthday.ConfettiCount = parseInt(document.querySelector('#BirthdayConfettiCount').value);
// Snowflakes
config.Snowflakes.SnowflakeCount = parseInt(document.querySelector('#SnowflakesCount').value);
config.Snowflakes.SnowflakeCountMobile = parseInt(document.querySelector('#SnowflakeCountMobile').value);
config.Snowflakes.EnableSnowflakes = document.querySelector('#EnableSnowflakes').checked;
config.Snowflakes.EnableColoredSnowflakes = document.querySelector('#EnableColoredSnowflakes').checked;
config.Snowflakes.EnableDifferentDuration = document.querySelector('#EnableDifferentDurationSnowflakes').checked;
// Carnival
config.Carnival.EnableCarnival = document.querySelector('#EnableCarnival').checked;
config.Carnival.EnableCarnivalSway = document.querySelector('#EnableCarnivalSway').checked;
config.Carnival.ObjectCount = parseInt(document.querySelector('#CarnivalObjectCount').value);
config.Carnival.ObjectCountMobile = parseInt(document.querySelector('#CarnivalObjectCountMobile').value);
config.Carnival.EnableDifferentDuration = document.querySelector('#EnableDifferentDurationCarnival').checked;
// Snowfall
config.Snowfall.EnableSnowfall = document.querySelector('#EnableSnowfall').checked;
config.Snowfall.SnowflakesCount = parseInt(document.querySelector('#SnowfallCount').value);
config.Snowfall.SnowflakesCountMobile = parseInt(document.querySelector('#SnowfallCountMobile').value);
config.Snowfall.Speed = parseFloat(document.querySelector('#SnowfallSpeed').value);
// Cherry Blossom
config.CherryBlossom.EnableCherryBlossom = document.querySelector('#EnableCherryBlossom').checked;
config.CherryBlossom.PetalCount = parseInt(document.querySelector('#CherryBlossomPetalCount').value);
config.CherryBlossom.PetalCountMobile = parseInt(document.querySelector('#CherryBlossomPetalCountMobile').value);
config.CherryBlossom.EnableDifferentDuration = document.querySelector('#EnableDifferentDurationCherryBlossom').checked;
// Snowstorm
config.Snowstorm.EnableSnowstorm = document.querySelector('#EnableSnowstorm').checked;
config.Snowstorm.SnowflakesCount = parseInt(document.querySelector('#SnowstormCount').value);
config.Snowstorm.SnowflakesCountMobile = parseInt(document.querySelector('#SnowstormCountMobile').value);
config.Snowstorm.Speed = parseFloat(document.querySelector('#SnowstormSpeed').value);
config.Snowstorm.HorizontalWind = parseFloat(document.querySelector('#SnowstormHorizontalWind').value);
config.Snowstorm.VerticalVariation = parseFloat(document.querySelector('#SnowstormVerticalVariation').value);
// Christmas
config.Christmas.EnableChristmas = document.querySelector('#EnableChristmas').checked;
config.Christmas.SymbolCount = parseInt(document.querySelector('#ChristmasCount').value);
config.Christmas.SymbolCountMobile = parseInt(document.querySelector('#ChristmasCountMobile').value);
config.Christmas.EnableDifferentDuration = document.querySelector('#EnableDifferentDurationChristmas').checked;
// Earth Day
config.EarthDay.EnableEarthDay = document.querySelector('#EnableEarthDay').checked;
config.EarthDay.FlowersCount = parseInt(document.querySelector('#EarthDayFlowersCount').value);
config.EarthDay.FlowersCountMobile = parseInt(document.querySelector('#EarthDayFlowersCountMobile').value);
// Easter
config.Easter.EnableEaster = document.querySelector('#EnableEaster').checked;
config.Easter.EggCount = parseInt(document.querySelector('#EasterEggCount').value);
config.Easter.EnableBunny = document.querySelector('#EasterBunny').checked;
config.Easter.MinBunnyRestTime = parseInt(document.querySelector('#MinBunnyRestTime').value);
config.Easter.MaxBunnyRestTime = parseInt(document.querySelector('#MaxBunnyRestTime').value);
// Eid al-Fitr
config.Eid.EnableEid = document.querySelector('#EnableEid').checked;
config.Eid.LanternCount = parseInt(document.querySelector('#EidLanternCount').value);
config.Eid.LanternCountMobile = parseInt(document.querySelector('#EidLanternCountMobile').value);
// Eurovision
config.Eurovision.EnableEurovision = document.querySelector('#EnableEurovision').checked;
config.Eurovision.SymbolCount = parseInt(document.querySelector('#EurovisionSymbolCount').value);
config.Eurovision.EnableDifferentDuration = document.querySelector('#EnableDifferentDurationEurovision').checked;
config.Eurovision.EnableColorfulNotes = document.querySelector('#EnableColorfulNotes').checked;
config.Eurovision.EurovisionColors = document.querySelector('#EurovisionColors').value;
config.Eurovision.EurovisionGlowSize = parseInt(document.querySelector('#EurovisionGlowSize').value);
// Film Noir
config.FilmNoir.EnableFilmNoir = document.querySelector('#EnableFilmNoir').checked;
// Fireworks
config.Fireworks.EnableFireworks = document.querySelector('#EnableFireworks').checked;
@@ -1962,6 +1955,12 @@
config.Fireworks.MinFireworks = parseInt(document.querySelector('#MinFireworks').value);
config.Fireworks.MaxFireworks = parseInt(document.querySelector('#MaxFireworks').value);
// Friday the 13th
config.Friday13.EnableFriday13 = document.querySelector('#EnableFriday13').checked;
// Frost
config.Frost.EnableFrost = document.querySelector('#EnableFrost').checked;
// Halloween
config.Halloween.EnableHalloween = document.querySelector('#EnableHalloween').checked;
config.Halloween.SymbolCount = parseInt(document.querySelector('#HalloweenCount').value);
@@ -1976,87 +1975,9 @@
config.Hearts.SymbolCountMobile = parseInt(document.querySelector('#HeartsCountMobile').value);
config.Hearts.EnableDifferentDuration = document.querySelector('#EnableDifferentDurationHearts').checked;
// Christmas
config.Christmas.EnableChristmas = document.querySelector('#EnableChristmas').checked;
config.Christmas.SymbolCount = parseInt(document.querySelector('#ChristmasCount').value);
config.Christmas.SymbolCountMobile = parseInt(document.querySelector('#ChristmasCountMobile').value);
config.Christmas.EnableDifferentDuration = document.querySelector('#EnableDifferentDurationChristmas').checked;
// Santa
config.Santa.EnableSanta = document.querySelector('#EnableSanta').checked;
config.Santa.SnowflakesCount = parseInt(document.querySelector('#SantaSnowflakes').value);
config.Santa.SnowflakesCountMobile = parseInt(document.querySelector('#SantaSnowflakesMobile').value);
config.Santa.SantaSpeed = parseFloat(document.querySelector('#SantaSpeed').value);
config.Santa.SantaSpeedMobile = parseFloat(document.querySelector('#SantaSpeedMobile').value);
config.Santa.SnowFallSpeed = parseFloat(document.querySelector('#SantaSnowFallSpeed').value);
config.Santa.MaxSantaRestTime = parseFloat(document.querySelector('#MaxSantaRestTime').value);
config.Santa.MinSantaRestTime = parseFloat(document.querySelector('#MinSantaRestTime').value);
config.Santa.MaxPresentFallSpeed = parseFloat(document.querySelector('#MaxPresentFallSpeed').value);
config.Santa.MinPresentFallSpeed = parseFloat(document.querySelector('#MinPresentFallSpeed').value);
// Easter
config.Easter.EnableEaster = document.querySelector('#EnableEaster').checked;
config.Easter.EggCount = parseInt(document.querySelector('#EasterEggCount').value);
config.Easter.EnableBunny = document.querySelector('#EasterBunny').checked;
config.Easter.MinBunnyRestTime = parseInt(document.querySelector('#MinBunnyRestTime').value);
config.Easter.MaxBunnyRestTime = parseInt(document.querySelector('#MaxBunnyRestTime').value);
// Resurrection
config.Resurrection.EnableResurrection = document.querySelector('#EnableResurrection').checked;
config.Resurrection.SymbolCount = parseInt(document.querySelector('#ResurrectionSymbolCount').value);
config.Resurrection.SymbolCountMobile = parseInt(document.querySelector('#ResurrectionSymbolCountMobile').value);
config.Resurrection.EnableDifferentDuration = document.querySelector('#EnableDifferentDurationResurrection').checked;
// Spooky Theme
config.Spooky.EnableSpooky = document.querySelector('#EnableSpooky').checked;
config.Spooky.SymbolCount = parseInt(document.querySelector('#SpookyCount').value);
config.Spooky.SymbolCountMobile = parseInt(document.querySelector('#SpookyCountMobile').value);
config.Spooky.SpookySize = parseInt(document.querySelector('#SpookySize').value);
config.Spooky.EnableSpookySway = document.querySelector('#EnableSpookySway').checked;
config.Spooky.SpookyGlowSize = parseInt(document.querySelector('#SpookyGlowSize').value);
// Spring
config.Spring.EnableSpring = document.querySelector('#EnableSpring').checked;
config.Spring.EnableSpringSunbeams = document.querySelector('#EnableSpringSunbeams').checked;
config.Spring.PollenCount = parseInt(document.querySelector('#SpringPollenCount').value);
config.Spring.SunbeamCount = parseInt(document.querySelector('#SpringSunbeamCount').value);
config.Spring.BirdCount = parseInt(document.querySelector('#SpringBirdCount').value);
config.Spring.ButterflyCount = parseInt(document.querySelector('#SpringButterflyCount').value);
config.Spring.BeeCount = parseInt(document.querySelector('#SpringBeeCount').value);
config.Spring.LadybugCount = parseInt(document.querySelector('#SpringLadybugCount').value);
config.Spring.SymbolCountMobile = parseInt(document.querySelector('#SpringSymbolCountMobile').value);
// Summer
config.Summer.EnableSummer = document.querySelector('#EnableSummer').checked;
config.Summer.BubbleCount = parseInt(document.querySelector('#SummerBubbleCount').value);
config.Summer.DustCount = parseInt(document.querySelector('#SummerDustCount').value);
config.Summer.SymbolCountMobile = parseInt(document.querySelector('#SummerSymbolCountMobile').value);
config.Summer.EnableDifferentDuration = document.querySelector('#EnableDifferentDurationSummer').checked;
// Carnival
config.Carnival.EnableCarnival = document.querySelector('#EnableCarnival').checked;
config.Carnival.EnableCarnivalSway = document.querySelector('#EnableCarnivalSway').checked;
config.Carnival.ObjectCount = parseInt(document.querySelector('#CarnivalObjectCount').value);
config.Carnival.ObjectCountMobile = parseInt(document.querySelector('#CarnivalObjectCountMobile').value);
config.Carnival.EnableDifferentDuration = document.querySelector('#EnableDifferentDurationCarnival').checked;
// Cherry Blossom
config.CherryBlossom.EnableCherryBlossom = document.querySelector('#EnableCherryBlossom').checked;
config.CherryBlossom.PetalCount = parseInt(document.querySelector('#CherryBlossomPetalCount').value);
config.CherryBlossom.PetalCountMobile = parseInt(document.querySelector('#CherryBlossomPetalCountMobile').value);
config.CherryBlossom.EnableDifferentDuration = document.querySelector('#EnableDifferentDurationCherryBlossom').checked;
// Earth Day
config.EarthDay.EnableEarthDay = document.querySelector('#EnableEarthDay').checked;
config.EarthDay.FlowersCount = parseInt(document.querySelector('#EarthDayFlowersCount').value);
config.EarthDay.FlowersCountMobile = parseInt(document.querySelector('#EarthDayFlowersCountMobile').value);
// Eurovision
config.Eurovision.EnableEurovision = document.querySelector('#EnableEurovision').checked;
config.Eurovision.SymbolCount = parseInt(document.querySelector('#EurovisionSymbolCount').value);
config.Eurovision.EnableDifferentDuration = document.querySelector('#EnableDifferentDurationEurovision').checked;
config.Eurovision.EnableColorfulNotes = document.querySelector('#EnableColorfulNotes').checked;
config.Eurovision.EurovisionColors = document.querySelector('#EurovisionColors').value;
config.Eurovision.EurovisionGlowSize = parseInt(document.querySelector('#EurovisionGlowSize').value);
// Mario Day
config.MarioDay.EnableMarioDay = document.querySelector('#EnableMarioDay').checked;
config.MarioDay.LetMarioJump = document.querySelector('#LetMarioJump').checked;
// Matrix
config.Matrix.EnableMatrix = document.querySelector('#EnableMatrix').checked;
@@ -2064,6 +1985,21 @@
config.Matrix.MatrixChars = document.querySelector('#MatrixChars').value;
config.Matrix.EnableMatrixBackground = document.querySelector('#EnableMatrixBackground').checked;
// Oktoberfest
config.Oktoberfest.EnableOktoberfest = document.querySelector('#EnableOktoberfest').checked;
config.Oktoberfest.SymbolCount = parseInt(document.querySelector('#OktoberfestCount').value);
config.Oktoberfest.SymbolCountMobile = parseInt(document.querySelector('#OktoberfestCountMobile').value);
config.Oktoberfest.EnableDifferentDuration = document.querySelector('#EnableDifferentDurationOktoberfest').checked;
// Olympia
config.Olympia.EnableOlympia = document.querySelector('#EnableOlympia').checked;
config.Olympia.EnableDifferentDuration = document.querySelector('#EnableDifferentDurationOlympia').checked;
config.Olympia.SymbolCount = parseInt(document.querySelector('#OlympiaSymbolCount').value);
config.Olympia.SymbolCountMobile = parseInt(document.querySelector('#OlympiaSymbolCountMobile').value);
// Oscar
config.Oscar.EnableOscar = document.querySelector('#EnableOscar').checked;
// Pride
config.Pride.EnablePride = document.querySelector('#EnablePride').checked;
config.Pride.HeartCount = parseInt(document.querySelector('#PrideHeartCount').value);
@@ -2076,6 +2012,85 @@
config.Rain.RaindropCountMobile = parseInt(document.querySelector('#RaindropCountMobile').value);
config.Rain.RainSpeed = parseFloat(document.querySelector('#RainSpeed').value);
// Resurrection
config.Resurrection.EnableResurrection = document.querySelector('#EnableResurrection').checked;
config.Resurrection.SymbolCount = parseInt(document.querySelector('#ResurrectionSymbolCount').value);
config.Resurrection.SymbolCountMobile = parseInt(document.querySelector('#ResurrectionSymbolCountMobile').value);
config.Resurrection.EnableDifferentDuration = document.querySelector('#EnableDifferentDurationResurrection').checked;
// Santa
config.Santa.EnableSanta = document.querySelector('#EnableSanta').checked;
config.Santa.SnowflakesCount = parseInt(document.querySelector('#SantaSnowflakes').value);
config.Santa.SnowflakesCountMobile = parseInt(document.querySelector('#SantaSnowflakesMobile').value);
config.Santa.SantaSpeed = parseFloat(document.querySelector('#SantaSpeed').value);
config.Santa.SantaSpeedMobile = parseFloat(document.querySelector('#SantaSpeedMobile').value);
config.Santa.SnowFallSpeed = parseFloat(document.querySelector('#SantaSnowFallSpeed').value);
config.Santa.MaxSantaRestTime = parseFloat(document.querySelector('#MaxSantaRestTime').value);
config.Santa.MinSantaRestTime = parseFloat(document.querySelector('#MinSantaRestTime').value);
config.Santa.MaxPresentFallSpeed = parseFloat(document.querySelector('#MaxPresentFallSpeed').value);
config.Santa.MinPresentFallSpeed = parseFloat(document.querySelector('#MinPresentFallSpeed').value);
// Snowfall
config.Snowfall.EnableSnowfall = document.querySelector('#EnableSnowfall').checked;
config.Snowfall.SnowflakesCount = parseInt(document.querySelector('#SnowfallCount').value);
config.Snowfall.SnowflakesCountMobile = parseInt(document.querySelector('#SnowfallCountMobile').value);
config.Snowfall.Speed = parseFloat(document.querySelector('#SnowfallSpeed').value);
// Snowflakes
config.Snowflakes.SnowflakeCount = parseInt(document.querySelector('#SnowflakesCount').value);
config.Snowflakes.SnowflakeCountMobile = parseInt(document.querySelector('#SnowflakeCountMobile').value);
config.Snowflakes.EnableSnowflakes = document.querySelector('#EnableSnowflakes').checked;
config.Snowflakes.EnableColoredSnowflakes = document.querySelector('#EnableColoredSnowflakes').checked;
config.Snowflakes.EnableDifferentDuration = document.querySelector('#EnableDifferentDurationSnowflakes').checked;
// Snowstorm
config.Snowstorm.EnableSnowstorm = document.querySelector('#EnableSnowstorm').checked;
config.Snowstorm.SnowflakesCount = parseInt(document.querySelector('#SnowstormCount').value);
config.Snowstorm.SnowflakesCountMobile = parseInt(document.querySelector('#SnowstormCountMobile').value);
config.Snowstorm.Speed = parseFloat(document.querySelector('#SnowstormSpeed').value);
config.Snowstorm.HorizontalWind = parseFloat(document.querySelector('#SnowstormHorizontalWind').value);
config.Snowstorm.VerticalVariation = parseFloat(document.querySelector('#SnowstormVerticalVariation').value);
// Space
config.Space.EnableSpace = document.querySelector('#EnableSpace').checked;
config.Space.EnableDifferentDuration = document.querySelector('#EnableDifferentDurationSpace').checked;
config.Space.PlanetCount = parseInt(document.querySelector('#PlanetCount').value);
config.Space.AstronautCount = parseInt(document.querySelector('#AstronautCount').value);
config.Space.SatelliteCount = parseInt(document.querySelector('#SatelliteCount').value);
config.Space.IssCount = parseInt(document.querySelector('#IssCount').value);
config.Space.RocketCount = parseInt(document.querySelector('#RocketCount').value);
config.Space.SymbolCountMobile = parseInt(document.querySelector('#SpaceSymbolCountMobile').value);
// Spooky Theme
config.Spooky.EnableSpooky = document.querySelector('#EnableSpooky').checked;
config.Spooky.SymbolCount = parseInt(document.querySelector('#SpookyCount').value);
config.Spooky.SpookySize = parseInt(document.querySelector('#SpookySize').value);
config.Spooky.EnableSpookySway = document.querySelector('#EnableSpookySway').checked;
config.Spooky.SpookyGlowSize = parseInt(document.querySelector('#SpookyGlowSize').value);
// Sports
config.Sports.EnableSports = document.querySelector('#EnableSports').checked;
config.Sports.EnableDifferentDuration = document.querySelector('#EnableDifferentDurationSports').checked;
config.Sports.SymbolCount = parseInt(document.querySelector('#SportsSymbolCount').value);
config.Sports.TurfColor = document.querySelector('#TurfColor').value;
config.Sports.ConfettiColors = document.querySelector('#SportsConfettiColors').value;
config.Sports.EnableTrophy = document.querySelector('#EnableTrophy').checked;
config.Sports.SportsBalls = Array.from(document.querySelectorAll('.sport-ball-cb')).filter(cb => cb.checked).map(cb => cb.value).join(',');
// Spring
config.Spring.EnableSpring = document.querySelector('#EnableSpring').checked;
config.Spring.EnableSpringSunbeams = document.querySelector('#EnableSpringSunbeams').checked;
config.Spring.PollenCount = parseInt(document.querySelector('#SpringPollenCount').value);
config.Spring.SunbeamCount = parseInt(document.querySelector('#SpringSunbeamCount').value);
config.Spring.BirdCount = parseInt(document.querySelector('#SpringBirdCount').value);
config.Spring.ButterflyCount = parseInt(document.querySelector('#SpringButterflyCount').value);
config.Spring.BeeCount = parseInt(document.querySelector('#SpringBeeCount').value);
config.Spring.LadybugCount = parseInt(document.querySelector('#SpringLadybugCount').value);
config.Spring.SymbolCountMobile = parseInt(document.querySelector('#SpringSymbolCountMobile').value);
// Star Wars
config.StarWars.EnableStarWars = document.querySelector('#EnableStarWars').checked;
// Storm
config.Storm.EnableStorm = document.querySelector('#EnableStorm').checked;
config.Storm.RaindropCount = parseInt(document.querySelector('#StormRaindropCount').value);
@@ -2083,6 +2098,13 @@
config.Storm.RainSpeed = parseFloat(document.querySelector('#StormRainSpeed').value);
config.Storm.EnableLightning = document.querySelector('#StormEnableLightning').checked;
// Summer
config.Summer.EnableSummer = document.querySelector('#EnableSummer').checked;
config.Summer.BubbleCount = parseInt(document.querySelector('#SummerBubbleCount').value);
config.Summer.DustCount = parseInt(document.querySelector('#SummerDustCount').value);
config.Summer.SymbolCountMobile = parseInt(document.querySelector('#SummerSymbolCountMobile').value);
config.Summer.EnableDifferentDuration = document.querySelector('#EnableDifferentDurationSummer').checked;
// Underwater
config.Underwater.EnableUnderwater = document.querySelector('#EnableUnderwater').checked;
config.Underwater.EnableLightRays = document.querySelector('#EnableUnderwaterLightRays').checked;
@@ -2097,98 +2119,6 @@
config.Underwater.StarfishCount = parseInt(document.querySelector('#UnderwaterStarfishCount').value);
config.Underwater.ShellCount = parseInt(document.querySelector('#UnderwaterShellCount').value);
// Sports
if (!config.Sports) config.Sports = {};
config.Sports.EnableSports = document.querySelector('#EnableSports').checked;
config.Sports.EnableDifferentDuration = document.querySelector('#EnableDifferentDurationSports').checked;
config.Sports.SymbolCount = parseInt(document.querySelector('#SportsSymbolCount').value);
config.Sports.TurfColor = document.querySelector('#TurfColor').value;
config.Sports.ConfettiColors = document.querySelector('#SportsConfettiColors').value;
config.Sports.EnableTrophy = document.querySelector('#EnableTrophy').checked;
config.Sports.SportsBalls = Array.from(document.querySelectorAll('.sport-ball-cb'))
.filter(cb => cb.checked).map(cb => cb.value).join(',');
// Simple Themes (just on/off toggles)
config.Frost.EnableFrost = document.querySelector('#EnableFrost').checked;
config.FilmNoir.EnableFilmNoir = document.querySelector('#EnableFilmNoir').checked;
config.Oscar.EnableOscar = document.querySelector('#EnableOscar').checked;
config.MarioDay.EnableMarioDay = document.querySelector('#EnableMarioDay').checked;
config.MarioDay.LetMarioJump = document.querySelector('#LetMarioJump').checked;
config.StarWars.EnableStarWars = document.querySelector('#EnableStarWars').checked;
config.Oktoberfest.EnableOktoberfest = document.querySelector('#EnableOktoberfest').checked;
config.Oktoberfest.SymbolCount = parseInt(document.querySelector('#OktoberfestCount').value);
config.Oktoberfest.SymbolCountMobile = parseInt(document.querySelector('#OktoberfestCountMobile').value);
config.Oktoberfest.EnableDifferentDuration = document.querySelector('#EnableDifferentDurationOktoberfest').checked;
config.Friday13.EnableFriday13 = document.querySelector('#EnableFriday13').checked;
if (!config.Eid) config.Eid = {};
config.Eid.EnableEid = document.querySelector('#EnableEid').checked;
config.Eid.LanternCount = parseInt(document.querySelector('#EidLanternCount').value);
config.Eid.LanternCountMobile = parseInt(document.querySelector('#EidLanternCountMobile').value);
// Easter
config.Easter.EnableEaster = document.querySelector('#EnableEaster').checked;
config.Easter.EggCount = parseInt(document.querySelector('#EasterEggCount').value);
config.Easter.EnableBunny = document.querySelector('#EasterBunny').checked;
config.Easter.MinBunnyRestTime = parseInt(document.querySelector('#MinBunnyRestTime').value);
config.Easter.MaxBunnyRestTime = parseInt(document.querySelector('#MaxBunnyRestTime').value);
// Resurrection
config.Resurrection.EnableResurrection = document.querySelector('#EnableResurrection').checked;
config.Resurrection.SymbolCount = parseInt(document.querySelector('#ResurrectionSymbolCount').value);
config.Resurrection.SymbolCountMobile = parseInt(document.querySelector('#ResurrectionSymbolCountMobile').value);
config.Resurrection.EnableDifferentDuration = document.querySelector('#EnableDifferentDurationResurrection').checked;
// Spring
config.Spring.EnableSpring = document.querySelector('#EnableSpring').checked;
config.Spring.EnableSpringSunbeams = document.querySelector('#EnableSpringSunbeams').checked;
config.Spring.PollenCount = parseInt(document.querySelector('#SpringPollenCount').value);
config.Spring.SunbeamCount = parseInt(document.querySelector('#SpringSunbeamCount').value);
config.Spring.BirdCount = parseInt(document.querySelector('#SpringBirdCount').value);
config.Spring.ButterflyCount = parseInt(document.querySelector('#SpringButterflyCount').value);
config.Spring.BeeCount = parseInt(document.querySelector('#SpringBeeCount').value);
config.Spring.LadybugCount = parseInt(document.querySelector('#SpringLadybugCount').value);
config.Spring.SymbolCountMobile = parseInt(document.querySelector('#SpringSymbolCountMobile').value);
// Summer
config.Summer.EnableSummer = document.querySelector('#EnableSummer').checked;
config.Summer.BubbleCount = parseInt(document.querySelector('#SummerBubbleCount').value);
config.Summer.DustCount = parseInt(document.querySelector('#SummerDustCount').value);
config.Summer.SymbolCountMobile = parseInt(document.querySelector('#SummerSymbolCountMobile').value);
config.Summer.EnableDifferentDuration = document.querySelector('#EnableDifferentDurationSummer').checked;
// Carnival
config.Carnival.EnableCarnival = document.querySelector('#EnableCarnival').checked;
config.Carnival.EnableCarnivalSway = document.querySelector('#EnableCarnivalSway').checked;
config.Carnival.ObjectCount = parseInt(document.querySelector('#CarnivalObjectCount').value);
config.Carnival.ObjectCountMobile = parseInt(document.querySelector('#CarnivalObjectCountMobile').value);
config.Carnival.EnableDifferentDuration = document.querySelector('#EnableDifferentDurationCarnival').checked;
// Cherry Blossom
config.CherryBlossom.EnableCherryBlossom = document.querySelector('#EnableCherryBlossom').checked;
config.CherryBlossom.PetalCount = parseInt(document.querySelector('#CherryBlossomPetalCount').value);
config.CherryBlossom.PetalCountMobile = parseInt(document.querySelector('#CherryBlossomPetalCountMobile').value);
config.CherryBlossom.EnableDifferentDuration = document.querySelector('#EnableDifferentDurationCherryBlossom').checked;
// Earth Day
config.EarthDay.EnableEarthDay = document.querySelector('#EnableEarthDay').checked;
config.EarthDay.FlowersCount = parseInt(document.querySelector('#EarthDayFlowersCount').value);
config.EarthDay.FlowersCountMobile = parseInt(document.querySelector('#EarthDayFlowersCountMobile').value);
// Eurovision (second pass - deduplicated)
config.Eurovision.EnableEurovision = document.querySelector('#EnableEurovision').checked;
config.Eurovision.SymbolCount = parseInt(document.querySelector('#EurovisionSymbolCount').value);
config.Eurovision.EnableDifferentDuration = document.querySelector('#EnableDifferentDurationEurovision').checked;
config.Eurovision.EnableColorfulNotes = document.querySelector('#EnableColorfulNotes').checked;
config.Eurovision.EurovisionColors = document.querySelector('#EurovisionColors').value;
config.Eurovision.EurovisionGlowSize = parseInt(document.querySelector('#EurovisionGlowSize').value);
// Birthday
config.Birthday.EnableBirthday = document.querySelector('#EnableBirthday').checked;
config.Birthday.SymbolCount = parseInt(document.querySelector('#BirthdaySymbolCount').value);
config.Birthday.SymbolCountMobile = parseInt(document.querySelector('#BirthdaySymbolCountMobile').value);
config.Birthday.ConfettiCount = parseInt(document.querySelector('#BirthdayConfettiCount').value);
config.Birthday.EnableDifferentDuration = document.querySelector('#EnableDifferentDurationBirthday').checked;
ApiClient.updatePluginConfiguration(SeasonalsConfigPage.pluginUniqueId, config).then(function (result) {
Dashboard.processPluginConfigurationUpdateResult(result);
});

View File

@@ -12,7 +12,7 @@
<!-- <TreatWarningsAsErrors>false</TreatWarningsAsErrors> -->
<Title>Jellyfin Seasonals Plugin</Title>
<Authors>CodeDevMLH</Authors>
<Version>2.0.0.6</Version>
<Version>2.0.0.8</Version>
<RepositoryUrl>https://github.com/CodeDevMLH/Jellyfin-Seasonals</RepositoryUrl>
</PropertyGroup>

View File

@@ -9,12 +9,12 @@
"imageUrl": "https://git.mahom03-spacecloud.de/CodeDevMLH/Jellyfin-Seasonals-Plugin/raw/branch/main/logo.png",
"versions": [
{
"version": "2.0.0.6",
"changelog": "- feat: add new themes:\n- birthday (ballons, computer mouse interactive)\n- earthday\n- Eid al-Fitr (sugar feast/ramadan)\n- eurovision\n- Film Noir filter\n- Friday the 13\n- frost\n- Mario Day\n- Matrix\n- Oktoberfest\n- Olympia\n- Oscar Awards\n- Pride\n- Rain\n- Spooky\n- Sports (many selectable balls of ball games like handball, football (soccer) or tennis)\n- StarWars Day\n- Storm (Epilepsy Warning!!!, Thunderstorm)\n- refactored spring (new lawn with flowers), easter (new easter bunny, new lawn with flowers and ester eggs), halloween (add spiders (computer mouse sensitive), add mice, add fog) \n- fix: many improvements and bug fixes e.g. changed top to translate/transform for performance reasons",
"version": "2.0.0.8",
"changelog": "feat: add new themes:\n- birthday (ballons, computer mouse interactive)\n- earthday\n- Eid al-Fitr (sugar feast/ramadan)\n- eurovision\n- Film Noir filter\n- Friday the 13\n- frost\n- Mario Day\n- Matrix\n- Oktoberfest\n- Olympia\n- Oscar Awards\n- Pride\n- Rain\n- Spooky\n- Sports (many selectable balls of ball games like handball, football (soccer) or tennis)\n- StarWars Day\n- Storm (Epilepsy Warning!!!, Thunderstorm)\n\n- refactored spring (new lawn with flowers), easter (new easter bunny, new lawn with flowers and ester eggs), halloween (add spiders (computer mouse sensitive), add mice, add fog) \n- fix: many improvements and bug fixes e.g. changed top to translate/transform for performance reasons",
"targetAbi": "10.11.0.0",
"sourceUrl": "https://git.mahom03-spacecloud.de/CodeDevMLH/Jellyfin-Seasonals-Plugin/releases/download/v2.0.0.6/Jellyfin.Plugin.Seasonals.zip",
"checksum": "09f0f06ae228b4f439c6358558364368",
"timestamp": "2026-02-28T02:39:47Z"
"sourceUrl": "https://git.mahom03-spacecloud.de/CodeDevMLH/Jellyfin-Seasonals-Plugin/releases/download/v2.0.0.8/Jellyfin.Plugin.Seasonals.zip",
"checksum": "da10c4e44858f796cae1b77d0b866480",
"timestamp": "2026-02-28T15:28:11Z"
},
{
"version": "1.7.2.0",