@@ -54,39 +54,42 @@
< div class = "selectContainer" >
< div class = "selectContainer" >
< label class = "selectLabel" for = "SeasonalsSelectedSeason" > Standard Season< / label >
< label class = "selectLabel" for = "SeasonalsSelectedSeason" > Standard Season< / label >
< select is = "emby-select" id = "SeasonalsSelectedSeason" name = "SeasonalsSelectedSeason" class = "selectLayout emby-select-withcolor emby-select" style = "width: 100%; -webkit-appearance: menulist; appearance: menulist;" >
< select is = "emby-select" id = "SeasonalsSelectedSeason" name = "SeasonalsSelectedSeason" class = "selectLayout emby-select-withcolor emby-select" style = "width: 100%; -webkit-appearance: menulist; appearance: menulist;" >
< option value = "none" > None< / option >
< option value = "none" > None< / option >
< option value = "autumn" > Autumn (f alling l eaves)< / option >
< option value = "autumn" > Autumn (F alling L eaves)< / option >
< option value = "birthday" > Birthday (Balloons & Confetti)< / option >
< option value = "carnival" > Carnival (Confetti)< / option >
< option value = "carnival" > Carnival (Confetti)< / option >
< option value = "cherryblossom" > Cherry Blossom< / option >
< option value = "cherryblossom" > Cherry Blossom< / option >
< option value = "christmas" > Christmas< / option >
< option value = "christmas" > Christmas< / option >
< option value = "earthday" > Earth Day (Growing Vines) < / option >
< option value = "earthday" > Earth Day< / option >
< option value = "easter" > Easter< / option >
< option value = "easter" > Easter< / option >
< option value = "eidalfitr " > Eid al-Fitr (Sugar Feast)< / option >
< option value = "eid" > Eid al-Fitr (Sugar Feast)< / option >
< option value = "eurovision" > Eurovision (Dancing Notes) < / option >
< option value = "eurovision" > Eurovision< / option >
< option value = "filmnoir" > Film-Noir (Classic B& W Cinema)< / option >
< option value = "filmnoir" > Film-Noir (Classic B& W Cinema Filter )< / option >
< option value = "fireworks" > Fireworks< / option >
< option value = "fireworks" > Fireworks< / option >
< option value = "friday13" > Friday the 13th< / option >
< option value = "friday13" > Friday the 13th< / option >
< option value = "frost" > Frost / Ice< / option >
< option value = "frost" > Frost / Ice< / option >
< option value = "halloween" > Halloween< / option >
< option value = "halloween" > Halloween< / option >
< option value = "hearts" > Hearts< / option >
< option value = "hearts" > Hearts< / option >
< option value = "marioday" > Mario Day (March 10) < / option >
< option value = "marioday" > Mario Day< / option >
< option value = "matrix" > Matrix< / option >
< option value = "matrix" > Matrix< / option >
< option value = "oktoberfest" > Oktoberfest< / option >
< option value = "oktoberfest" > Oktoberfest< / option >
< option value = "oscar " > Oscar Awards (Glamour & Flashes) < / option >
< option value = "olympia " > Olympia < / option >
< option value = "pride " > Pride (Rainbow Border) < / option >
< option value = "oscar " > Oscar Awards < / option >
< option value = "rain " > Rain (Pure Rain) < / option >
< option value = "pride " > Pride < / option >
< option value = "rain" > Rain< / option >
< option value = "resurrection" > Resurrection by Bioflash257< / option >
< option value = "resurrection" > Resurrection by Bioflash257< / option >
< option value = "santa" > Santa (f lying s anta & s nowfall)< / option >
< option value = "santa" > Santa (F lying S anta & S nowfall)< / option >
< option value = "snowfall" > Snowfall< / option >
< option value = "snowfall" > Snowfall< / option >
< option value = "snowflakes" > Snowflakes< / option >
< option value = "snowflakes" > Snowflakes< / option >
< option value = "snowstorm" > Snowstorm< / option >
< option value = "snowstorm" > Snowstorm< / option >
< option value = "space" > Space< / option >
< option value = "spooky" > Spooky< / option >
< option value = "spooky" > Spooky< / option >
< option value = "sports" > Sports< / option >
< option value = "spring" > Spring< / option >
< option value = "spring" > Spring< / option >
< option value = "patrick" disabled > St. Patrick's Day (not implemented yet. Please commit ideas/implementation in a issue or PR) < / option >
< option value = "starwars" > Star Wars Day < / option >
< option value = "starwars " > Star Wars Day (May 4th )< / option >
< option value = "storm " > Storm (⚠️ Epilepsy Warning⚠️ )< / option >
< option value = "storm" > Storm (Heavy Rain & Lightning (⚠️ Epilepsy Warning⚠️ ))< / option >
< option value = "summer" > Summer (Bubbles)< / option >
< option value = "summer" > Summer (Bubbles)< / option >
< option value = "thanksgiving" disabled > Thanksgiving (not implemented yet. Please commit ideas/implementation in a issue or PR) < / option >
< option value = "underwater" > Underwater < / option >
< / select >
< / select >
< div class = "fieldDescription" > The season to display if automation is disabled or no "Auto Selection" rule matches the current date.< / div >
< div class = "fieldDescription" > The season to display if automation is disabled or no "Auto Selection" rule matches the current date.< / div >
< / div >
< / div >
@@ -392,52 +395,6 @@
< / details >
< / details >
< hr style = "max-width: 800px; margin: 1em 0;" >
< hr style = "max-width: 800px; margin: 1em 0;" >
< details >
< summary > Underwater< / summary >
< div class = "checkboxContainer checkboxContainer-withDescription" >
< label class = "emby-checkbox-label" >
< input id = "EnableUnderwater" name = "EnableUnderwater" type = "checkbox" is = "emby-checkbox" / >
< span > Enable Underwater Seasonal< / span >
< / label >
< div class = "fieldDescription" > Enable the Underwater theme (fishes, bubbles, seaweed).< / div >
< / div >
< div class = "checkboxContainer" >
< label class = "emby-checkbox-label" >
< input id = "EnableUnderwaterLightRays" name = "EnableUnderwaterLightRays" type = "checkbox" is = "emby-checkbox" / >
< span > Enable Light Rays (God Rays)< / span >
< / label >
< / div >
< div class = "inputContainer" >
< label class = "inputLabel" for = "UnderwaterSymbolCount" > Symbol Count< / label >
< input is = "emby-input" type = "number" id = "UnderwaterSymbolCount" name = "UnderwaterSymbolCount" / >
< div class = "fieldDescription" > Number of sea creatures.< / div >
< / div >
< div class = "inputContainer" >
< label class = "inputLabel" for = "UnderwaterSymbolCountMobile" > Symbol Count (Mobile)< / label >
< input is = "emby-input" type = "number" id = "UnderwaterSymbolCountMobile" name = "UnderwaterSymbolCountMobile" / >
< div class = "fieldDescription" > Amount of sea creatures on mobile. Minimum 0. Warning: High values may affect performance.< / div >
< / div >
< div class = "checkboxContainer checkboxContainer-withDescription" >
< label class = "emby-checkbox-label" >
< input id = "EnableRandomUnderwater" name = "EnableRandomUnderwater" type = "checkbox" is = "emby-checkbox" / >
< span > Enable Additional Random Symbols< / span >
< / label >
< / div >
< div class = "checkboxContainer checkboxContainer-withDescription" >
< label class = "emby-checkbox-label" >
< input id = "EnableRandomUnderwaterMobile" name = "EnableRandomUnderwaterMobile" type = "checkbox" is = "emby-checkbox" / >
< span > Enable Additional Random Symbols on Mobile< / span >
< / label >
< / div >
< div class = "checkboxContainer checkboxContainer-withDescription" >
< label class = "emby-checkbox-label" >
< input id = "EnableDifferentDurationUnderwater" name = "EnableDifferentDurationUnderwater" type = "checkbox" is = "emby-checkbox" / >
< span > Enable Different Duration< / span >
< / label >
< / div >
< / details >
< hr style = "max-width: 800px; margin: 1em 0;" >
< details >
< details >
< summary > Hearts< / summary >
< summary > Hearts< / summary >
< div class = "checkboxContainer checkboxContainer-withDescription" >
< div class = "checkboxContainer checkboxContainer-withDescription" >
@@ -581,16 +538,6 @@
< / label >
< / label >
< div class = "fieldDescription" > Show the Easter Bunny hopping across the screen.< / div >
< div class = "fieldDescription" > Show the Easter Bunny hopping across the screen.< / div >
< / div >
< / div >
< div class = "inputContainer" >
< label class = "inputLabel" for = "BunnyDuration" > Bunny Duration (ms)< / label >
< input is = "emby-input" type = "number" id = "BunnyDuration" name = "BunnyDuration" / >
< div class = "fieldDescription" > Time in milliseconds for one hop cycle.< / div >
< / div >
< div class = "inputContainer" >
< label class = "inputLabel" for = "HopHeight" > Hop Height (px)< / label >
< input is = "emby-input" type = "number" id = "HopHeight" name = "HopHeight" / >
< div class = "fieldDescription" > Height of the bunny's hop in pixels.< / div >
< / div >
< div class = "inputContainer" >
< div class = "inputContainer" >
< label class = "inputLabel" for = "MinBunnyRestTime" > Min Bunny Rest Time (ms)< / label >
< label class = "inputLabel" for = "MinBunnyRestTime" > Min Bunny Rest Time (ms)< / label >
< input is = "emby-input" type = "number" id = "MinBunnyRestTime" name = "MinBunnyRestTime" / >
< input is = "emby-input" type = "number" id = "MinBunnyRestTime" name = "MinBunnyRestTime" / >
@@ -830,30 +777,31 @@
< div class = "inputContainer" >
< div class = "inputContainer" >
< label class = "inputLabel" for = "SportsSymbolCount" > Symbol Count< / label >
< label class = "inputLabel" for = "SportsSymbolCount" > Symbol Count< / label >
< input is = "emby-input" type = "number" id = "SportsSymbolCount" name = "SportsSymbolCount" / >
< input is = "emby-input" type = "number" id = "SportsSymbolCount" name = "SportsSymbolCount" / >
< div class = "fieldDescription" > Number of additional symbo ls d isplayed (if enabled) .< / div >
< div class = "fieldDescription" > Number of bouncing sports bal ls v isible at once .< / div >
< / div >
< div class = "inputContainer" >
< label class = "inputLabel" for = "SportsSymbolCountMobile" > Symbol Count (Mobile)< / label >
< input is = "emby-input" type = "number" id = "SportsSymbolCountMobile" name = "SportsSymbolCountMobile" / >
< div class = "fieldDescription" > Amount of symbols on mobile. Minimum 0. Warning: High values may affect performance.< / div >
< / div >
< / div >
< div class = "checkboxContainer checkboxContainer-withDescription" >
< div class = "checkboxContainer checkboxContainer-withDescription" >
< label class = "emby-checkbox-label" >
< label class = "emby-checkbox-label" >
< input id = "EnableDifferentDurationSports" name = "EnableDifferentDurationSports" type = "checkbox" is = "emby-checkbox" / >
< input id = "EnableDifferentDurationSports" name = "EnableDifferentDurationSports" type = "checkbox" is = "emby-checkbox" / >
< span > Enable Different Duration< / span >
< span > Enable Different Duration< / span >
< / label >
< / label >
< div class = "fieldDescription" > Randomize the bouncing speed of each ball.< / div >
< / div >
< / div >
< div class = "checkboxContainer checkboxContainer-withDescription" >
< div class = "checkboxContainer checkboxContainer-withDescription" >
< label class = "emby-checkbox-label" >
< label class = "emby-checkbox-label" >
< input id = "EnableTrophy" name = "EnableTrophy" type = "checkbox" is = "emby-checkbox" / >
< input id = "EnableTrophy" name = "EnableTrophy" type = "checkbox" is = "emby-checkbox" / >
< span > Enable Trophy< / span >
< span > Enable Trophy< / span >
< / label >
< / label >
< div class = "fieldDescription" > Enable the flying trophy animation.< / div >
< div class = "fieldDescription" > Show a flying trophy animation.< / div >
< / div >
< / div >
< div class = "inputContainer" >
< div class = "inputContainer" >
< label class = "inputLabel" for = "TurfColor" > Turf Color< / label >
< label class = "inputLabel" for = "TurfColor" > Turf Color< / label >
< input is = "emby-input" type = "color" id = "TurfColor" name = "TurfColor" value = "#228b22" / >
< input is = "emby-input" type = "color" id = "TurfColor" name = "TurfColor" value = "#228b22" / >
< div class = "fieldDescription" > Color for the grass/turf overlay at the bottom.< / div >
< div class = "fieldDescription" > Color o f the grass/turf strip at the bottom.< / div >
< / div >
< div class = "inputContainer" >
< label class = "inputLabel" for = "SportsConfettiColors" > Confetti Colors (comma-separated hex)< / label >
< input is = "emby-input" type = "text" id = "SportsConfettiColors" name = "SportsConfettiColors" / >
< div class = "fieldDescription" > Colors used for the confetti burst. Example: #000000,#FF0000,#FFCC00< / div >
< / div >
< / div >
< div class = "inputContainer" >
< div class = "inputContainer" >
< label class = "inputLabel" > Enabled Sports Balls< / label >
< label class = "inputLabel" > Enabled Sports Balls< / label >
@@ -1010,6 +958,11 @@
< / div >
< / div >
< div class = "inputContainer" >
< label class = "inputLabel" for = "UnderwaterSymbolCountMobile" > Symbol Count (Mobile)< / label >
< input is = "emby-input" type = "number" id = "UnderwaterSymbolCountMobile" name = "UnderwaterSymbolCountMobile" / >
< div class = "fieldDescription" > Amount of sea creatures shown on mobile. Minimum 0.< / div >
< / div >
< div class = "inputContainer" >
< div class = "inputContainer" >
< label class = "inputLabel" for = "UnderwaterSeaweedCount" > Seaweed Count< / label >
< label class = "inputLabel" for = "UnderwaterSeaweedCount" > Seaweed Count< / label >
< input is = "emby-input" type = "number" id = "UnderwaterSeaweedCount" name = "UnderwaterSeaweedCount" / >
< input is = "emby-input" type = "number" id = "UnderwaterSeaweedCount" name = "UnderwaterSeaweedCount" / >
@@ -1103,12 +1056,7 @@
< div class = "inputContainer" >
< div class = "inputContainer" >
< label class = "inputLabel" for = "EurovisionSymbolCount" > Symbol Count< / label >
< label class = "inputLabel" for = "EurovisionSymbolCount" > Symbol Count< / label >
< input is = "emby-input" type = "number" id = "EurovisionSymbolCount" name = "EurovisionSymbolCount" / >
< input is = "emby-input" type = "number" id = "EurovisionSymbolCount" name = "EurovisionSymbolCount" / >
< div class = "fieldDescription" > Number of additional dancing music notes (if enabled) .< / div >
< div class = "fieldDescription" > Number of dancing music notes on screen .< / div >
< / div >
< div class = "inputContainer" >
< label class = "inputLabel" for = "EurovisionSymbolCountMobile" > Symbol Count (Mobile)< / label >
< input is = "emby-input" type = "number" id = "EurovisionSymbolCountMobile" name = "EurovisionSymbolCountMobile" / >
< div class = "fieldDescription" > Amount of notes on mobile. Minimum 0. Warning: High values may affect performance.< / div >
< / div >
< / div >
< div class = "checkboxContainer checkboxContainer-withDescription" >
< div class = "checkboxContainer checkboxContainer-withDescription" >
< label class = "emby-checkbox-label" >
< label class = "emby-checkbox-label" >
@@ -1153,11 +1101,6 @@
< input is = "emby-input" type = "number" id = "MatrixSymbolCount" name = "MatrixSymbolCount" / >
< input is = "emby-input" type = "number" id = "MatrixSymbolCount" name = "MatrixSymbolCount" / >
< div class = "fieldDescription" > Number of additional digital rain columns (if enabled).< / div >
< div class = "fieldDescription" > Number of additional digital rain columns (if enabled).< / div >
< / div >
< / div >
< div class = "inputContainer" >
< label class = "inputLabel" for = "MatrixSymbolCountMobile" > Symbol Count (Mobile)< / label >
< input is = "emby-input" type = "number" id = "MatrixSymbolCountMobile" name = "MatrixSymbolCountMobile" / >
< div class = "fieldDescription" > Amount of rain columns on mobile. Minimum 0. Warning: High values may affect performance.< / div >
< / div >
< div class = "inputContainer" >
< div class = "inputContainer" >
< label class = "inputLabel" for = "MatrixChars" > Raining Characters< / label >
< label class = "inputLabel" for = "MatrixChars" > Raining Characters< / label >
< input is = "emby-input" type = "text" id = "MatrixChars" name = "MatrixChars" / >
< input is = "emby-input" type = "text" id = "MatrixChars" name = "MatrixChars" / >
@@ -1197,12 +1140,7 @@
< div class = "inputContainer" >
< div class = "inputContainer" >
< label class = "inputLabel" for = "PrideHeartSize" > Heart Size (rem)< / label >
< label class = "inputLabel" for = "PrideHeartSize" > Heart Size (rem)< / label >
< input is = "emby-input" type = "number" id = "PrideHeartSize" name = "PrideHeartSize" step = "0.1" / >
< input is = "emby-input" type = "number" id = "PrideHeartSize" name = "PrideHeartSize" step = "0.1" / >
< div class = "fieldDescription" > Base size of the Pride hearts (default 2 ).< / div >
< div class = "fieldDescription" > Base size of the Pride hearts (default 1.5 ).< / div >
< / div >
< div class = "inputContainer" >
< label class = "inputLabel" for = "PrideConfettiCount" > Confetti Count< / label >
< input is = "emby-input" type = "number" id = "PrideConfettiCount" name = "PrideConfettiCount" / >
< div class = "fieldDescription" > Number of falling rainbow confetti pieces.< / div >
< / div >
< / div >
< div class = "checkboxContainer checkboxContainer-withDescription" >
< div class = "checkboxContainer checkboxContainer-withDescription" >
< label class = "emby-checkbox-label" >
< label class = "emby-checkbox-label" >
@@ -1322,7 +1260,6 @@
< input id = "LetMarioJump" name = "LetMarioJump" type = "checkbox" is = "emby-checkbox" / >
< input id = "LetMarioJump" name = "LetMarioJump" type = "checkbox" is = "emby-checkbox" / >
< span > Let Mario Jump< / span >
< span > Let Mario Jump< / span >
< / label >
< / label >
< div class = "fieldDescription" > Allow Mario to jump periodically.< / div >
< / div >
< / div >
< / details >
< / details >
< hr style = "max-width: 800px; margin: 1em 0;" >
< hr style = "max-width: 800px; margin: 1em 0;" >
@@ -1346,6 +1283,20 @@
< span > Enable Oktoberfest Seasonal< / span >
< span > Enable Oktoberfest Seasonal< / span >
< / label >
< / label >
< / div >
< / div >
< div class = "inputContainer" >
< label class = "inputLabel" for = "OktoberfestCount" > Symbol Count< / label >
< input is = "emby-input" type = "number" id = "OktoberfestCount" name = "OktoberfestCount" / >
< / div >
< div class = "inputContainer" >
< label class = "inputLabel" for = "OktoberfestCountMobile" > Symbol Count (Mobile)< / label >
< input is = "emby-input" type = "number" id = "OktoberfestCountMobile" name = "OktoberfestCountMobile" / >
< / div >
< div class = "checkboxContainer checkboxContainer-withDescription" >
< label class = "emby-checkbox-label" >
< input id = "EnableDifferentDurationOktoberfest" name = "EnableDifferentDurationOktoberfest" type = "checkbox" is = "emby-checkbox" / >
< span > Enable Different Duration< / span >
< / label >
< / div >
< / details >
< / details >
< hr style = "max-width: 800px; margin: 1em 0;" >
< hr style = "max-width: 800px; margin: 1em 0;" >
@@ -1546,15 +1497,16 @@
' <label class="selectLabel">Theme</label>' +
' <label class="selectLabel">Theme</label>' +
' <select class="emby-select emby-select-withcolor rule-theme" style="width: 100%; -webkit-appearance: menulist; appearance: menulist;">' +
' <select class="emby-select emby-select-withcolor rule-theme" style="width: 100%; -webkit-appearance: menulist; appearance: menulist;">' +
' <option value="none">None</option>' +
' <option value="none">None</option>' +
' <option value="autumn">Autumn (f alling l eaves)</option>' +
' <option value="autumn">Autumn (F alling L eaves)</option>' +
' <option value="birthday">Birthday (Balloons & Confetti)</option>' +
' <option value="carnival">Carnival (Confetti)</option>' +
' <option value="carnival">Carnival (Confetti)</option>' +
' <option value="cherryblossom">Cherry Blossom</option>' +
' <option value="cherryblossom">Cherry Blossom</option>' +
' <option value="christmas">Christmas</option>' +
' <option value="christmas">Christmas</option>' +
' <option value="earthday">Earth Day</option>' +
' <option value="earthday">Earth Day</option>' +
' <option value="easter">Easter</option>' +
' <option value="easter">Easter</option>' +
' <option value="eidalfitr">Eid al-Fitr</option>' +
' <option value="eidalfitr">Eid al-Fitr (Sugar Feast) </option>' +
' <option value="eurovision">Eurovision</option>' +
' <option value="eurovision">Eurovision</option>' +
' <option value="filmnoir">Film-Noir</option>' +
' <option value="filmnoir">Film-Noir (Classic B&W Cinema Filter) </option>' +
' <option value="fireworks">Fireworks</option>' +
' <option value="fireworks">Fireworks</option>' +
' <option value="friday13">Friday the 13th</option>' +
' <option value="friday13">Friday the 13th</option>' +
' <option value="frost">Frost / Ice</option>' +
' <option value="frost">Frost / Ice</option>' +
@@ -1563,19 +1515,23 @@
' <option value="marioday">Mario Day</option>' +
' <option value="marioday">Mario Day</option>' +
' <option value="matrix">Matrix</option>' +
' <option value="matrix">Matrix</option>' +
' <option value="oktoberfest">Oktoberfest</option>' +
' <option value="oktoberfest">Oktoberfest</option>' +
' <option value="olympia">Olympia</option>' +
' <option value="oscar">Oscar Awards</option>' +
' <option value="oscar">Oscar Awards</option>' +
' <option value="pride">Pride</option>' +
' <option value="pride">Pride</option>' +
' <option value="rain">Rain</option>' +
' <option value="rain">Rain</option>' +
' <option value="resurrection">Resurrection by Bioflash257</option>' +
' <option value="resurrection">Resurrection by Bioflash257</option>' +
' <option value="santa">Santa (f lying s anta & s nowfall)</option>' +
' <option value="santa">Santa (F lying S anta & S nowfall)</option>' +
' <option value="snowfall">Snowfall</option>' +
' <option value="snowfall">Snowfall</option>' +
' <option value="snowflakes">Snowflakes</option>' +
' <option value="snowflakes">Snowflakes</option>' +
' <option value="snowstorm">Snowstorm</option>' +
' <option value="snowstorm">Snowstorm</option>' +
' <option value="space">Space</option>' +
' <option value="spooky">Spooky</option>' +
' <option value="spooky">Spooky</option>' +
' <option value="sports">Sports</option>' +
' <option value="spring">Spring</option>' +
' <option value="spring">Spring</option>' +
' <option value="starwars">Star Wars Day</option>' +
' <option value="starwars">Star Wars Day</option>' +
' <option value="storm">Storm (Epilepsy Warning!)</option>' +
' <option value="storm">Storm (Epilepsy Warning!)</option>' +
' <option value="summer">Summer (Bubbles)</option>' +
' <option value="summer">Summer (Bubbles)</option>' +
' <option value="underwater">Underwater</option>' +
' </select>' +
' </select>' +
' </div>' +
' </div>' +
'</div>' ;
'</div>' ;
@@ -1642,11 +1598,48 @@
document . querySelector ( '#SeasonalsConfigPage' )
document . querySelector ( '#SeasonalsConfigPage' )
. addEventListener ( 'pageshow' , function ( ) {
. addEventListener ( 'pageshow' , function ( ) {
Dashboard . showLoadingMsg ( ) ;
Dashboard . showLoadingMsg ( ) ;
ApiClient . getPluginConfiguration ( SeasonalsConfigPage . pluginUniqueId ) . then ( function ( config ) {
ApiClient . getPluginConfiguration ( SeasonalsConfigPage . pluginUniqueId ) . then ( function ( config ) {
try {
document . querySelector ( '#SeasonalsIsEnabled' ) . checked = config . IsEnabled ;
document . querySelector ( '#SeasonalsIsEnabled' ) . checked = config . IsEnabled ;
document . querySelector ( '#SeasonalsSelectedSeason' ) . value = config . SelectedSeason ;
document . querySelector ( '#SeasonalsSelectedSeason' ) . value = config . SelectedSeason ;
document . querySelector ( '#SeasonalsAutomateSeasonSelection' ) . checked = config . AutomateSeasonSelection ;
document . querySelector ( '#SeasonalsAutomateSeasonSelection' ) . checked = config . AutomateSeasonSelection ;
document . querySelector ( '#SeasonalsEnableClientSideToggle' ) . checked = config . EnableClientSideToggle !== undefined ? config . EnableClientSideToggle : true ;
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 = { } ;
// Load Rules
// Load Rules
try {
try {
@@ -1712,13 +1705,12 @@
// Eurovision
// Eurovision
document . querySelector ( '#EnableEurovision' ) . checked = config . Eurovision . EnableEurovision ;
document . querySelector ( '#EnableEurovision' ) . checked = config . Eurovision . EnableEurovision !== false ;
document . querySelector ( '#EurovisionSymbolCount' ) . value = config . Eurovision . SymbolCount ;
document . querySelector ( '#EurovisionSymbolCount' ) . value = config . Eurovision . SymbolCount !== undefined ? config . Eurovision . SymbolCount : 25 ;
document . querySelector ( '#EurovisionSymbolCountMobile ' ) . value = config . Eurovision . SymbolCountMobil e;
document . querySelector ( '#EnableDifferentDurationEurovision ' ) . checked = config . Eurovision . EnableDifferentDuration !== fals e;
document . querySelector ( '#EnableDifferentDurationEurovision ' ) . checked = config . Eurovision . EnableDifferentDuration ;
document . querySelector ( '#EnableColorfulNotes ' ) . checked = config . Eurovision . EnableColorfulNotes !== false ;
document . querySelector ( '#EnableColorfulNote s' ) . checked = config . Eurovision . EnableColorfulNotes ;
document . querySelector ( '#EurovisionColor s' ) . value = config . Eurovision . EurovisionColors || '#ff0026ff,#17a6ffff,#32d432ff,#FFD700,#f0821bff,#f826f8ff' ;
document . querySelector ( '#EurovisionColors ' ) . value = config . Eurovision . EurovisionColors ;
document . querySelector ( '#EurovisionGlowSize ' ) . value = config . Eurovision . EurovisionGlowSize !== undefined ? config . Eurovision . EurovisionGlowSize : 2 ;
document . querySelector ( '#EurovisionGlowSize' ) . value = config . Eurovision . EurovisionGlowSize ;
// Fireworks
// Fireworks
@@ -1747,11 +1739,9 @@
// Matrix
// Matrix
document . querySelector ( '#EnableMatrix' ) . checked = config . Matrix . EnableMatrix ;
document . querySelector ( '#EnableMatrix' ) . checked = config . Matrix . EnableMatrix !== false ;
document . querySelector ( '#MatrixSymbolCount' ) . value = config . Matrix . SymbolCount ;
document . querySelector ( '#MatrixSymbolCount' ) . value = config . Matrix . SymbolCount !== undefined ? config . Matrix . SymbolCount : 25 ;
document . querySelector ( '#MatrixSymbolCountMobile' ) . value = config . Matrix . SymbolCountMobile ;
document . querySelector ( '#MatrixChars' ) . value = config . Matrix . MatrixChars !== undefined ? config . Matrix . MatrixChars : '0123456789' ;
document . querySelector ( '#MatrixChars' ) . value = config . Matrix . MatrixChars !== undefined ? config . Matrix . MatrixChars : '0123456789' ;
document . querySelector ( '#EnableDifferentDurationMatrix' ) . checked = config . Matrix . EnableDifferentDuration ;
document . querySelector ( '#EnableMatrixBackground' ) . checked = config . Matrix . EnableMatrixBackground !== undefined ? config . Matrix . EnableMatrixBackground : false ;
document . querySelector ( '#EnableMatrixBackground' ) . checked = config . Matrix . EnableMatrixBackground !== undefined ? config . Matrix . EnableMatrixBackground : false ;
// Olympia
// Olympia
@@ -1843,57 +1833,50 @@
document . querySelector ( '#EnableDifferentDurationSpooky' ) . checked = config . Spooky . EnableDifferentDuration !== false ;
document . querySelector ( '#EnableDifferentDurationSpooky' ) . checked = config . Spooky . EnableDifferentDuration !== false ;
// Sports
// Sports
if ( ! config . Sports ) config . Sports = { EnableSports : true , SymbolCount : 25 , EnableRandomSymbols : true , EnableRandomSymbolsMobile : false , EnableDifferentDuration : true } ;
// Load Checkboxes
const savedBallsString = config . Sports . SportsBalls || 'football,basketball,tennis,volleyball' ;
const savedBallsString = config . Sports . SportsBalls || 'football,basketball,tennis,volleyball' ;
const savedBalls = savedBallsString . split ( ',' ) ;
const savedBalls = savedBallsString . split ( ',' ) ;
document . querySelector ( '#EnableSports' ) . checked = config . Sports . EnableSports !== false ;
document . querySelector ( '#EnableSports' ) . checked = config . Sports . EnableSports !== false ;
document . querySelector ( '#EnableDifferentDurationSports' ) . checked = config . Sports . EnableDifferentDuration !== false ;
document . querySelector ( '#EnableDifferentDurationSports' ) . checked = config . Sports . EnableDifferentDuration !== false ;
document . querySelector ( '#SportsSymbolCount' ) . value = config . Sports . SymbolCount || 2 5;
document . querySelector ( '#SportsSymbolCount' ) . value = config . Sports . SymbolCount !== undefined ? config . Sports . SymbolCount : 5 ;
document . querySelector ( '#SportsSymbolCountMobile' ) . value = config . Sports . SymbolCountMobile || 10 ;
document . querySelector ( '#TurfColor' ) . value = config . Sports . TurfColor || '#228b22' ;
document . querySelector ( '#TurfColor' ) . value = config . Sports . TurfColor || '#228b22' ;
document . querySelector ( '#EnableTrophy ' ) . checked = config . Sports . EnableTrophy !== false ;
document . querySelector ( '#SportsConfettiColors ' ) . value = config . Sports . ConfettiColors || '#000000,#FF0000,#FFCC00' ;
document . querySelector ( '#EnableTrophy' ) . checked = config . Sports . EnableTrophy === true ;
document . querySelectorAll ( '.sport-ball-cb' ) . forEach ( cb => {
document . querySelectorAll ( '.sport-ball-cb' ) . forEach ( cb => {
// Spring
document . querySelector ( '#EnableSpring' ) . checked = config . Spring . EnableSpring ;
document . querySelector ( '#EnableSpringSunbeams' ) . checked = config . Spring . EnableSpringSunbeams !== undefined ? config . Spring . EnableSpringSunbeams : true ;
document . querySelector ( '#SpringPollenCount' ) . value = config . Spring . PollenCount ;
document . querySelector ( '#SpringSunbeamCount' ) . value = config . Spring . SunbeamCount ;
document . querySelector ( '#SpringBirdCount' ) . value = config . Spring . BirdCount !== undefined ? config . Spring . BirdCount : 3 ;
document . querySelector ( '#SpringButterflyCount' ) . value = config . Spring . ButterflyCount !== undefined ? config . Spring . ButterflyCount : 2 ;
document . querySelector ( '#SpringBeeCount' ) . value = config . Spring . BeeCount !== undefined ? config . Spring . BeeCount : 1 ;
document . querySelector ( '#SpringLadybugCount' ) . value = config . Spring . LadybugCount !== undefined ? config . Spring . LadybugCount : 1 ;
document . querySelector ( '#SpringSymbolCountMobile' ) . value = config . Spring . SymbolCountMobile !== undefined ? config . Spring . SymbolCountMobile : 5 ;
// Storm
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 ;
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 ;
// Support for both new category string and legacy filename strings
cb . checked = savedBalls . some ( b => b === cb . value || b . startsWith ( cb . value + '_' ) ) ;
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 ;
// 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 ;
// 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 ;
// Underwater
// Underwater
document . querySelector ( '#EnableUnderwater' ) . checked = config . Underwater . EnableUnderwater !== false ;
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 ( '#EnableDifferentDurationUnderwater' ) . checked = config . Underwater . EnableDifferentDuration !== false ;
document . querySelector ( '#UnderwaterSeaweedCount ' ) . value = config . Underwater . SeaweedCount !== undefined ? config . Underwater . SeaweedCount : 30 ;
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 ( '#UnderwaterFishCount' ) . value = config . Underwater . FishCount !== undefined ? config . Underwater . FishCount : 15 ;
document . querySelector ( '#UnderwaterSeahorseCount' ) . value = config . Underwater . SeahorseCount !== undefined ? config . Underwater . SeahorseCount : 3 ;
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 ( '#UnderwaterJellyfishCount' ) . value = config . Underwater . JellyfishCount !== undefined ? config . Underwater . JellyfishCount : 3 ;
@@ -1901,13 +1884,27 @@
document . querySelector ( '#UnderwaterCrabCount' ) . value = config . Underwater . CrabCount !== undefined ? config . Underwater . CrabCount : 2 ;
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 ( '#UnderwaterStarfishCount' ) . value = config . Underwater . StarfishCount !== undefined ? config . Underwater . StarfishCount : 2 ;
document . querySelector ( '#UnderwaterShellCount' ) . value = config . Underwater . ShellCount !== undefined ? config . Underwater . ShellCount : 2 ;
document . querySelector ( '#UnderwaterShellCount' ) . value = config . Underwater . ShellCount !== undefined ? config . Underwater . ShellCount : 2 ;
config . Underwater = config . Underwater || { } ;
// Simple Themes
document . querySelector ( '#EnableUnderwaterLightRays ' ) . checked = config . Underwater . EnableLightRays !== false ;
document . querySelector ( '#EnableFrost ' ) . checked = config . Frost . EnableFrost !== false ;
document . querySelector ( '#UnderwaterSymbolCount ' ) . value = config . Underwater . SymbolCount || 15 ;
document . querySelector ( '#EnableFilmNoir ' ) . checked = config . FilmNoir . EnableFilmNoir !== false ;
document . querySelector ( '#UnderwaterSymbolCountMobile ' ) . value = config . Underwater . SymbolCountMobile || 5 ;
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 ;
} catch ( e ) {
Dashboard . hideLoadingMsg ( ) ;
console . error ( '[Seasonals] Error loading config:' , e ) ;
} finally {
Dashboard . hideLoadingMsg ( ) ;
}
} ) ;
} ) ;
} ) ;
} ) ;
@@ -1931,22 +1928,7 @@
config . Autumn . EnableDifferentDuration = document . querySelector ( '#EnableDifferentDurationAutumn' ) . checked ;
config . Autumn . EnableDifferentDuration = document . querySelector ( '#EnableDifferentDurationAutumn' ) . checked ;
config . Autumn . EnableRotation = document . querySelector ( '#EnableRotation' ) . checked ;
config . Autumn . EnableRotation = document . querySelector ( '#EnableRotation' ) . checked ;
// Sports (saved later to avoid duplicate)
// 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 . SymbolCountMobile = parseInt ( document . querySelector ( '#SportsSymbolCountMobile' ) . value ) ;
config . Sports . TurfColor = document . querySelector ( '#TurfColor' ) . value ;
config . Sports . EnableTrophy = document . querySelector ( '#EnableTrophy' ) . checked ;
// Save Checkboxes
const selectedBalls = Array . from ( document . querySelectorAll ( '.sport-ball-cb' ) )
. filter ( cb => cb . checked )
. map ( cb => cb . value ) ;
config . Sports . SportsBalls = selectedBalls . join ( ',' ) ;
// Olympia
// Olympia
if ( ! config . Olympia ) config . Olympia = { } ;
if ( ! config . Olympia ) config . Olympia = { } ;
@@ -1966,21 +1948,7 @@
config . Space . RocketCount = parseInt ( document . querySelector ( '#RocketCount' ) . value ) ;
config . Space . RocketCount = parseInt ( document . querySelector ( '#RocketCount' ) . value ) ;
config . Space . SymbolCountMobile = parseInt ( document . querySelector ( '#SpaceSymbolCountMobile' ) . value ) ;
config . Space . SymbolCountMobile = parseInt ( document . querySelector ( '#SpaceSymbolCountMobile' ) . value ) ;
// Underwater
// Underwater (saved later)
if ( ! config . Underwater ) config . Underwater = { } ;
config . Underwater . EnableUnderwater = document . querySelector ( '#EnableUnderwater' ) . checked ;
config . Underwater . EnableUnderwaterLightRays = document . querySelector ( '#EnableUnderwaterLightRays' ) . checked ;
config . Underwater . EnableRandomSymbols = document . querySelector ( '#EnableRandomSymbolsUnderwater' ) . checked ;
config . Underwater . EnableRandomSymbolsMobile = document . querySelector ( '#EnableRandomSymbolsMobileUnderwater' ) . checked ;
config . Underwater . EnableDifferentDuration = document . querySelector ( '#EnableDifferentDurationUnderwater' ) . checked ;
config . Underwater . SeaweedCount = parseInt ( document . querySelector ( '#UnderwaterSeaweedCount' ) . value ) ;
config . Underwater . FishCount = parseInt ( document . querySelector ( '#UnderwaterFishCount' ) . value ) ;
config . Underwater . SeahorseCount = parseInt ( document . querySelector ( '#UnderwaterSeahorseCount' ) . value ) ;
config . Underwater . JellyfishCount = parseInt ( document . querySelector ( '#UnderwaterJellyfishCount' ) . value ) ;
config . Underwater . TurtleCount = parseInt ( document . querySelector ( '#UnderwaterTurtleCount' ) . value ) ;
config . Underwater . CrabCount = parseInt ( document . querySelector ( '#UnderwaterCrabCount' ) . value ) ;
config . Underwater . StarfishCount = parseInt ( document . querySelector ( '#UnderwaterStarfishCount' ) . value ) ;
config . Underwater . ShellCount = parseInt ( document . querySelector ( '#UnderwaterShellCount' ) . value ) ;
// Birthday
// Birthday
if ( ! config . Birthday ) config . Birthday = { } ;
if ( ! config . Birthday ) config . Birthday = { } ;
@@ -2109,7 +2077,6 @@
// Eurovision
// Eurovision
config . Eurovision . EnableEurovision = document . querySelector ( '#EnableEurovision' ) . checked ;
config . Eurovision . EnableEurovision = document . querySelector ( '#EnableEurovision' ) . checked ;
config . Eurovision . SymbolCount = parseInt ( document . querySelector ( '#EurovisionSymbolCount' ) . value ) ;
config . Eurovision . SymbolCount = parseInt ( document . querySelector ( '#EurovisionSymbolCount' ) . value ) ;
config . Eurovision . SymbolCountMobile = parseInt ( document . querySelector ( '#EurovisionSymbolCountMobile' ) . value ) ;
config . Eurovision . EnableDifferentDuration = document . querySelector ( '#EnableDifferentDurationEurovision' ) . checked ;
config . Eurovision . EnableDifferentDuration = document . querySelector ( '#EnableDifferentDurationEurovision' ) . checked ;
config . Eurovision . EnableColorfulNotes = document . querySelector ( '#EnableColorfulNotes' ) . checked ;
config . Eurovision . EnableColorfulNotes = document . querySelector ( '#EnableColorfulNotes' ) . checked ;
config . Eurovision . EurovisionColors = document . querySelector ( '#EurovisionColors' ) . value ;
config . Eurovision . EurovisionColors = document . querySelector ( '#EurovisionColors' ) . value ;
@@ -2118,9 +2085,7 @@
// Matrix
// Matrix
config . Matrix . EnableMatrix = document . querySelector ( '#EnableMatrix' ) . checked ;
config . Matrix . EnableMatrix = document . querySelector ( '#EnableMatrix' ) . checked ;
config . Matrix . SymbolCount = parseInt ( document . querySelector ( '#MatrixSymbolCount' ) . value ) ;
config . Matrix . SymbolCount = parseInt ( document . querySelector ( '#MatrixSymbolCount' ) . value ) ;
config . Matrix . SymbolCountMobile = parseInt ( document . querySelector ( '#MatrixSymbolCountMobile' ) . value ) ;
config . Matrix . MatrixChars = document . querySelector ( '#MatrixChars' ) . value ;
config . Matrix . MatrixChars = document . querySelector ( '#MatrixChars' ) . value ;
config . Matrix . EnableDifferentDuration = document . querySelector ( '#EnableDifferentDurationMatrix' ) . checked ;
config . Matrix . EnableMatrixBackground = document . querySelector ( '#EnableMatrixBackground' ) . checked ;
config . Matrix . EnableMatrixBackground = document . querySelector ( '#EnableMatrixBackground' ) . checked ;
// Pride
// Pride
@@ -2145,9 +2110,27 @@
// Underwater
// Underwater
config . Underwater . EnableUnderwater = document . querySelector ( '#EnableUnderwater' ) . checked ;
config . Underwater . EnableUnderwater = document . querySelector ( '#EnableUnderwater' ) . checked ;
config . Underwater . EnableLightRays = document . querySelector ( '#EnableUnderwaterLightRays' ) . checked ;
config . Underwater . EnableLightRays = document . querySelector ( '#EnableUnderwaterLightRays' ) . checked ;
config . Underwater . SymbolCount = parseInt ( document . querySelector ( '#UnderwaterSymbolCount' ) . value ) ;
config . Underwater . SymbolCountMobile = parseInt ( document . querySelector ( '#UnderwaterSymbolCountMobile' ) . value ) ;
config . Underwater . EnableDifferentDuration = document . querySelector ( '#EnableDifferentDurationUnderwater' ) . checked ;
config . Underwater . EnableDifferentDuration = document . querySelector ( '#EnableDifferentDurationUnderwater' ) . checked ;
config . Underwater . SymbolCountMobile = parseInt ( document . querySelector ( '#UnderwaterSymbolCountMobile' ) . value ) ;
config . Underwater . SeaweedCount = parseInt ( document . querySelector ( '#UnderwaterSeaweedCount' ) . value ) ;
config . Underwater . FishCount = parseInt ( document . querySelector ( '#UnderwaterFishCount' ) . value ) ;
config . Underwater . SeahorseCount = parseInt ( document . querySelector ( '#UnderwaterSeahorseCount' ) . value ) ;
config . Underwater . JellyfishCount = parseInt ( document . querySelector ( '#UnderwaterJellyfishCount' ) . value ) ;
config . Underwater . TurtleCount = parseInt ( document . querySelector ( '#UnderwaterTurtleCount' ) . value ) ;
config . Underwater . CrabCount = parseInt ( document . querySelector ( '#UnderwaterCrabCount' ) . value ) ;
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)
// Simple Themes (just on/off toggles)
config . Frost . EnableFrost = document . querySelector ( '#EnableFrost' ) . checked ;
config . Frost . EnableFrost = document . querySelector ( '#EnableFrost' ) . checked ;
@@ -2157,6 +2140,9 @@
config . MarioDay . LetMarioJump = document . querySelector ( '#LetMarioJump' ) . checked ;
config . MarioDay . LetMarioJump = document . querySelector ( '#LetMarioJump' ) . checked ;
config . StarWars . EnableStarWars = document . querySelector ( '#EnableStarWars' ) . checked ;
config . StarWars . EnableStarWars = document . querySelector ( '#EnableStarWars' ) . checked ;
config . Oktoberfest . EnableOktoberfest = document . querySelector ( '#EnableOktoberfest' ) . 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 ;
config . Friday13 . EnableFriday13 = document . querySelector ( '#EnableFriday13' ) . checked ;
if ( ! config . Eid ) config . Eid = { } ;
if ( ! config . Eid ) config . Eid = { } ;
config . Eid . EnableEid = document . querySelector ( '#EnableEid' ) . checked ;
config . Eid . EnableEid = document . querySelector ( '#EnableEid' ) . checked ;
@@ -2164,10 +2150,6 @@
config . Eid . LanternCountMobile = parseInt ( document . querySelector ( '#EidLanternCountMobile' ) . value ) ;
config . Eid . LanternCountMobile = parseInt ( document . querySelector ( '#EidLanternCountMobile' ) . 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
// Easter
config . Easter . EnableEaster = document . querySelector ( '#EnableEaster' ) . checked ;
config . Easter . EnableEaster = document . querySelector ( '#EnableEaster' ) . checked ;
config . Easter . EggCount = parseInt ( document . querySelector ( '#EasterEggCount' ) . value ) ;
config . Easter . EggCount = parseInt ( document . querySelector ( '#EasterEggCount' ) . value ) ;
@@ -2215,10 +2197,9 @@
config . EarthDay . EnableEarthDay = document . querySelector ( '#EnableEarthDay' ) . checked ;
config . EarthDay . EnableEarthDay = document . querySelector ( '#EnableEarthDay' ) . checked ;
config . EarthDay . VineCount = parseInt ( document . querySelector ( '#EarthDayVineCount' ) . value ) ;
config . EarthDay . VineCount = parseInt ( document . querySelector ( '#EarthDayVineCount' ) . value ) ;
// Eurovision
// Eurovision (second pass - deduplicated)
config . Eurovision . EnableEurovision = document . querySelector ( '#EnableEurovision' ) . checked ;
config . Eurovision . EnableEurovision = document . querySelector ( '#EnableEurovision' ) . checked ;
config . Eurovision . SymbolCount = parseInt ( document . querySelector ( '#EurovisionSymbolCount' ) . value ) ;
config . Eurovision . SymbolCount = parseInt ( document . querySelector ( '#EurovisionSymbolCount' ) . value ) ;
config . Eurovision . SymbolCountMobile = parseInt ( document . querySelector ( '#EurovisionSymbolCountMobile' ) . value ) ;
config . Eurovision . EnableDifferentDuration = document . querySelector ( '#EnableDifferentDurationEurovision' ) . checked ;
config . Eurovision . EnableDifferentDuration = document . querySelector ( '#EnableDifferentDurationEurovision' ) . checked ;
config . Eurovision . EnableColorfulNotes = document . querySelector ( '#EnableColorfulNotes' ) . checked ;
config . Eurovision . EnableColorfulNotes = document . querySelector ( '#EnableColorfulNotes' ) . checked ;
config . Eurovision . EurovisionColors = document . querySelector ( '#EurovisionColors' ) . value ;
config . Eurovision . EurovisionColors = document . querySelector ( '#EurovisionColors' ) . value ;
@@ -2231,37 +2212,6 @@
config . Birthday . ConfettiCount = parseInt ( document . querySelector ( '#BirthdayConfettiCount' ) . value ) ;
config . Birthday . ConfettiCount = parseInt ( document . querySelector ( '#BirthdayConfettiCount' ) . value ) ;
config . Birthday . EnableDifferentDuration = document . querySelector ( '#EnableDifferentDurationBirthday' ) . checked ;
config . Birthday . EnableDifferentDuration = document . querySelector ( '#EnableDifferentDurationBirthday' ) . checked ;
// Sports
config . Sports . EnableSports = document . querySelector ( '#EnableSports' ) . checked ;
config . Sports . SymbolCount = parseInt ( document . querySelector ( '#SportsSymbolCount' ) . value ) ;
config . Sports . SymbolCountMobile = parseInt ( document . querySelector ( '#SportsSymbolCountMobile' ) . value ) ;
config . Sports . EnableDifferentDuration = document . querySelector ( '#EnableDifferentDurationSports' ) . checked ;
// Olympia
config . Olympia . EnableOlympia = document . querySelector ( '#EnableOlympia' ) . checked ;
config . Olympia . SymbolCount = parseInt ( document . querySelector ( '#OlympiaSymbolCount' ) . value ) ;
config . Olympia . SymbolCountMobile = parseInt ( document . querySelector ( '#OlympiaSymbolCountMobile' ) . value ) ;
config . Olympia . EnableDifferentDuration = document . querySelector ( '#EnableDifferentDurationOlympia' ) . checked ;
// Pride
config . Pride . EnablePride = document . querySelector ( '#EnablePride' ) . checked ;
config . Pride . HeartCount = parseInt ( document . querySelector ( '#PrideHeartCount' ) . value ) ;
config . Pride . HeartSize = parseFloat ( document . querySelector ( '#PrideHeartSize' ) . value ) ;
config . Pride . ColorHeader = document . querySelector ( '#PrideColorHeader' ) . checked ;
// Rain
config . Rain . EnableRain = document . querySelector ( '#EnableRain' ) . checked ;
config . Rain . RaindropCount = parseInt ( document . querySelector ( '#RaindropCount' ) . value ) ;
config . Rain . RaindropCountMobile = parseInt ( document . querySelector ( '#RaindropCountMobile' ) . value ) ;
config . Rain . RainSpeed = parseFloat ( document . querySelector ( '#RainSpeed' ) . value ) ;
// Storm
config . Storm . EnableStorm = document . querySelector ( '#EnableStorm' ) . checked ;
config . Storm . RaindropCount = parseInt ( document . querySelector ( '#StormRaindropCount' ) . value ) ;
config . Storm . RaindropCountMobile = parseInt ( document . querySelector ( '#StormRaindropCountMobile' ) . value ) ;
config . Storm . RainSpeed = parseFloat ( document . querySelector ( '#StormRainSpeed' ) . value ) ;
config . Storm . EnableLightning = document . querySelector ( '#StormEnableLightning' ) . checked ;
ApiClient . updatePluginConfiguration ( SeasonalsConfigPage . pluginUniqueId , config ) . then ( function ( result ) {
ApiClient . updatePluginConfiguration ( SeasonalsConfigPage . pluginUniqueId , config ) . then ( function ( result ) {
Dashboard . processPluginConfigurationUpdateResult ( result ) ;
Dashboard . processPluginConfigurationUpdateResult ( result ) ;
} ) ;
} ) ;