Compare commits
14 Commits
v2.0.0.0
...
b1d1ce79e6
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
b1d1ce79e6 | ||
|
|
0b7b506b8d | ||
|
|
f3ea84cc80 | ||
|
|
3d9a474aae | ||
|
|
db5baa1fd7 | ||
|
|
72ad4ee1a4 | ||
|
|
bb6c7796d5 | ||
|
|
bd8088c52b | ||
|
|
3c1bd01373 | ||
|
|
669ac6d3da | ||
|
|
73f9be91ef | ||
|
|
f14785c54a | ||
|
|
296873f89e | ||
|
|
d6a9ff7176 |
@@ -18,40 +18,40 @@ public class PluginConfiguration : BasePluginConfiguration
|
|||||||
EnableClientSideToggle = true;
|
EnableClientSideToggle = true;
|
||||||
|
|
||||||
Autumn = new AutumnOptions();
|
Autumn = new AutumnOptions();
|
||||||
Snowflakes = new SnowflakesOptions();
|
Birthday = new BirthdayOptions();
|
||||||
Snowfall = new SnowfallOptions();
|
Carnival = new CarnivalOptions();
|
||||||
Snowstorm = new SnowstormOptions();
|
CherryBlossom = new CherryBlossomOptions();
|
||||||
|
Christmas = new ChristmasOptions();
|
||||||
|
EarthDay = new EarthDayOptions();
|
||||||
|
Easter = new EasterOptions();
|
||||||
|
Eid = new EidOptions();
|
||||||
|
Eurovision = new EurovisionOptions();
|
||||||
|
FilmNoir = new FilmNoirOptions();
|
||||||
Fireworks = new FireworksOptions();
|
Fireworks = new FireworksOptions();
|
||||||
|
Friday13 = new Friday13Options();
|
||||||
|
Frost = new FrostOptions();
|
||||||
Halloween = new HalloweenOptions();
|
Halloween = new HalloweenOptions();
|
||||||
Hearts = new HeartsOptions();
|
Hearts = new HeartsOptions();
|
||||||
Christmas = new ChristmasOptions();
|
|
||||||
Santa = new SantaOptions();
|
|
||||||
Easter = new EasterOptions();
|
|
||||||
Resurrection = new ResurrectionOptions();
|
|
||||||
Spring = new SpringOptions();
|
|
||||||
Summer = new SummerOptions();
|
|
||||||
CherryBlossom = new CherryBlossomOptions();
|
|
||||||
Carnival = new CarnivalOptions();
|
|
||||||
Matrix = new MatrixOptions();
|
|
||||||
Eurovision = new EurovisionOptions();
|
|
||||||
Storm = new StormOptions();
|
|
||||||
Pride = new PrideOptions();
|
|
||||||
EarthDay = new EarthDayOptions();
|
|
||||||
Rain = new RainOptions();
|
|
||||||
Frost = new FrostOptions();
|
|
||||||
FilmNoir = new FilmNoirOptions();
|
|
||||||
Oscar = new OscarOptions();
|
|
||||||
MarioDay = new MarioDayOptions();
|
MarioDay = new MarioDayOptions();
|
||||||
StarWars = new StarWarsOptions();
|
Matrix = new MatrixOptions();
|
||||||
Oktoberfest = new OktoberfestOptions();
|
Oktoberfest = new OktoberfestOptions();
|
||||||
Friday13 = new Friday13Options();
|
Olympia = new OlympiaOptions();
|
||||||
Eid = new EidOptions();
|
Oscar = new OscarOptions();
|
||||||
|
Rain = new RainOptions();
|
||||||
|
Pride = new PrideOptions();
|
||||||
|
Resurrection = new ResurrectionOptions();
|
||||||
|
Santa = new SantaOptions();
|
||||||
|
Snowfall = new SnowfallOptions();
|
||||||
|
Snowflakes = new SnowflakesOptions();
|
||||||
|
Snowstorm = new SnowstormOptions();
|
||||||
|
Space = new SpaceOptions();
|
||||||
Spooky = new SpookyOptions();
|
Spooky = new SpookyOptions();
|
||||||
Sports = new SportsOptions();
|
Sports = new SportsOptions();
|
||||||
Olympia = new OlympiaOptions();
|
Spring = new SpringOptions();
|
||||||
Space = new SpaceOptions();
|
StarWars = new StarWarsOptions();
|
||||||
|
Storm = new StormOptions();
|
||||||
|
Summer = new SummerOptions();
|
||||||
Underwater = new UnderwaterOptions();
|
Underwater = new UnderwaterOptions();
|
||||||
Birthday = new BirthdayOptions();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
@@ -83,44 +83,43 @@ public class PluginConfiguration : BasePluginConfiguration
|
|||||||
/// Gets or sets the Seasonals options.
|
/// Gets or sets the Seasonals options.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
public AutumnOptions Autumn { get; set; }
|
public AutumnOptions Autumn { get; set; }
|
||||||
public SnowflakesOptions Snowflakes { get; set; }
|
public BirthdayOptions Birthday { get; set; }
|
||||||
public SnowfallOptions Snowfall { get; set; }
|
public CarnivalOptions Carnival { get; set; }
|
||||||
public SnowstormOptions Snowstorm { get; set; }
|
public CherryBlossomOptions CherryBlossom { get; set; }
|
||||||
|
public ChristmasOptions Christmas { get; set; }
|
||||||
|
public EarthDayOptions EarthDay { get; set; }
|
||||||
|
public EasterOptions Easter { get; set; }
|
||||||
|
public EidOptions Eid { get; set; }
|
||||||
|
public EurovisionOptions Eurovision { get; set; }
|
||||||
|
public FilmNoirOptions FilmNoir { get; set; }
|
||||||
public FireworksOptions Fireworks { get; set; }
|
public FireworksOptions Fireworks { get; set; }
|
||||||
|
public Friday13Options Friday13 { get; set; }
|
||||||
|
public FrostOptions Frost { get; set; }
|
||||||
public HalloweenOptions Halloween { get; set; }
|
public HalloweenOptions Halloween { get; set; }
|
||||||
public HeartsOptions Hearts { get; set; }
|
public HeartsOptions Hearts { get; set; }
|
||||||
public ChristmasOptions Christmas { get; set; }
|
|
||||||
public SantaOptions Santa { get; set; }
|
|
||||||
public EasterOptions Easter { get; set; }
|
|
||||||
public ResurrectionOptions Resurrection { get; set; }
|
|
||||||
public SpringOptions Spring { get; set; }
|
|
||||||
public SummerOptions Summer { get; set; }
|
|
||||||
public CherryBlossomOptions CherryBlossom { get; set; }
|
|
||||||
public CarnivalOptions Carnival { get; set; }
|
|
||||||
public MatrixOptions Matrix { get; set; }
|
|
||||||
public EurovisionOptions Eurovision { get; set; }
|
|
||||||
public StormOptions Storm { get; set; }
|
|
||||||
public PrideOptions Pride { get; set; }
|
|
||||||
public EarthDayOptions EarthDay { get; set; }
|
|
||||||
public RainOptions Rain { get; set; }
|
|
||||||
public FrostOptions Frost { get; set; }
|
|
||||||
public FilmNoirOptions FilmNoir { get; set; }
|
|
||||||
public OscarOptions Oscar { get; set; }
|
|
||||||
public MarioDayOptions MarioDay { get; set; }
|
public MarioDayOptions MarioDay { get; set; }
|
||||||
public StarWarsOptions StarWars { get; set; }
|
public MatrixOptions Matrix { get; set; }
|
||||||
public OktoberfestOptions Oktoberfest { get; set; }
|
public OktoberfestOptions Oktoberfest { get; set; }
|
||||||
public Friday13Options Friday13 { get; set; }
|
public OlympiaOptions Olympia { get; set; }
|
||||||
public EidOptions Eid { get; set; }
|
public OscarOptions Oscar { get; set; }
|
||||||
|
public PrideOptions Pride { get; set; }
|
||||||
|
public RainOptions Rain { get; set; }
|
||||||
|
public ResurrectionOptions Resurrection { get; set; }
|
||||||
|
public SantaOptions Santa { get; set; }
|
||||||
|
public SnowfallOptions Snowfall { get; set; }
|
||||||
|
public SnowflakesOptions Snowflakes { get; set; }
|
||||||
|
public SnowstormOptions Snowstorm { get; set; }
|
||||||
|
public SpaceOptions Space { get; set; }
|
||||||
public SpookyOptions Spooky { get; set; }
|
public SpookyOptions Spooky { get; set; }
|
||||||
public SportsOptions Sports { get; set; }
|
public SportsOptions Sports { get; set; }
|
||||||
public OlympiaOptions Olympia { get; set; }
|
public SpringOptions Spring { get; set; }
|
||||||
public SpaceOptions Space { get; set; }
|
public StarWarsOptions StarWars { get; set; }
|
||||||
|
public StormOptions Storm { get; set; }
|
||||||
|
public SummerOptions Summer { get; set; }
|
||||||
public UnderwaterOptions Underwater { get; set; }
|
public UnderwaterOptions Underwater { get; set; }
|
||||||
public BirthdayOptions Birthday { get; set; }
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public class AutumnOptions
|
public class AutumnOptions {
|
||||||
{
|
|
||||||
public int LeafCount { get; set; } = 25;
|
public int LeafCount { get; set; } = 25;
|
||||||
public bool EnableAutumn { get; set; } = true;
|
public bool EnableAutumn { get; set; } = true;
|
||||||
public bool EnableRandomLeaves { get; set; } = true;
|
public bool EnableRandomLeaves { get; set; } = true;
|
||||||
@@ -129,300 +128,261 @@ public class AutumnOptions
|
|||||||
public bool EnableRotation { get; set; } = false;
|
public bool EnableRotation { get; set; } = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
public class SnowflakesOptions
|
public class BirthdayOptions {
|
||||||
{
|
public bool EnableBirthday { get; set; } = true;
|
||||||
public int SnowflakeCount { get; set; } = 25;
|
public int SymbolCount { get; set; } = 12;
|
||||||
public bool EnableSnowflakes { get; set; } = true;
|
public int SymbolCountMobile { get; set; } = 5;
|
||||||
public bool EnableRandomSnowflakes { get; set; } = true;
|
public bool EnableDifferentDuration { get; set; } = true;
|
||||||
public bool EnableRandomSnowflakesMobile { get; set; } = false;
|
public int ConfettiCount { get; set; } = 60;
|
||||||
public bool EnableColoredSnowflakes { get; set; } = true;
|
}
|
||||||
|
|
||||||
|
public class CarnivalOptions {
|
||||||
|
public bool EnableCarnival { get; set; } = true;
|
||||||
|
public bool EnableRandomCarnival { get; set; } = true;
|
||||||
|
public bool EnableRandomCarnivalMobile { get; set; } = false;
|
||||||
|
public bool EnableDifferentDuration { get; set; } = true;
|
||||||
|
public bool EnableCarnivalSway { get; set; } = true;
|
||||||
|
public int ObjectCount { get; set; } = 120;
|
||||||
|
}
|
||||||
|
|
||||||
|
public class CherryBlossomOptions {
|
||||||
|
public bool EnableCherryBlossom { get; set; } = true;
|
||||||
|
public int PetalCount { get; set; } = 25;
|
||||||
|
public bool EnableRandomCherryBlossom { get; set; } = true;
|
||||||
|
public bool EnableRandomCherryBlossomMobile { get; set; } = false;
|
||||||
public bool EnableDifferentDuration { get; set; } = true;
|
public bool EnableDifferentDuration { get; set; } = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
public class SnowfallOptions
|
public class ChristmasOptions {
|
||||||
{
|
public bool EnableChristmas { get; set; } = true;
|
||||||
public int SnowflakesCount { get; set; } = 500;
|
public bool EnableRandomChristmas { get; set; } = true;
|
||||||
public int SnowflakesCountMobile { get; set; } = 250;
|
public bool EnableRandomChristmasMobile { get; set; } = false;
|
||||||
public double Speed { get; set; } = 3;
|
public bool EnableDifferentDuration { get; set; } = true;
|
||||||
public bool EnableSnowfall { get; set; } = true;
|
public int SymbolCount { get; set; } = 25;
|
||||||
}
|
}
|
||||||
|
|
||||||
public class SnowstormOptions
|
public class EarthDayOptions {
|
||||||
{
|
public bool EnableEarthDay { get; set; } = true;
|
||||||
public int SnowflakesCount { get; set; } = 500;
|
public int VineCount { get; set; } = 4;
|
||||||
public int SnowflakesCountMobile { get; set; } = 250;
|
|
||||||
public double Speed { get; set; } = 6;
|
|
||||||
public bool EnableSnowstorm { get; set; } = true;
|
|
||||||
public double HorizontalWind { get; set; } = 4;
|
|
||||||
public double VerticalVariation { get; set; } = 2;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public class FireworksOptions
|
public class EasterOptions {
|
||||||
{
|
public bool EnableEaster { get; set; } = true;
|
||||||
public int ParticleCount { get; set; } = 50;
|
public bool EnableBunny { get; set; } = true;
|
||||||
public int LaunchInterval { get; set; } = 3200;
|
public int MinBunnyRestTime { get; set; } = 2000;
|
||||||
|
public int MaxBunnyRestTime { get; set; } = 5000;
|
||||||
|
public int EggCount { get; set; } = 15;
|
||||||
|
}
|
||||||
|
|
||||||
|
public class EidOptions {
|
||||||
|
public bool EnableEid { get; set; } = true;
|
||||||
|
public int LanternCount { get; set; } = 8;
|
||||||
|
public int LanternCountMobile { get; set; } = 3;
|
||||||
|
}
|
||||||
|
|
||||||
|
public class EurovisionOptions {
|
||||||
|
public bool EnableEurovision { get; set; } = true;
|
||||||
|
public int SymbolCount { get; set; } = 25;
|
||||||
|
public bool EnableDifferentDuration { get; set; } = true;
|
||||||
|
public bool EnableColorfulNotes { get; set; } = true;
|
||||||
|
public string EurovisionColors { get; set; } = "#ff0026ff,#17a6ffff,#32d432ff,#FFD700,#f0821bff,#f826f8ff";
|
||||||
|
public int EurovisionGlowSize { get; set; } = 2;
|
||||||
|
}
|
||||||
|
|
||||||
|
public class FilmNoirOptions {
|
||||||
|
public bool EnableFilmNoir { get; set; } = true;
|
||||||
|
}
|
||||||
|
|
||||||
|
public class FireworksOptions {
|
||||||
public bool EnableFireworks { get; set; } = true;
|
public bool EnableFireworks { get; set; } = true;
|
||||||
public bool ScrollFireworks { get; set; } = true;
|
public bool ScrollFireworks { get; set; } = true;
|
||||||
|
public int ParticleCount { get; set; } = 50;
|
||||||
public int MinFireworks { get; set; } = 3;
|
public int MinFireworks { get; set; } = 3;
|
||||||
public int MaxFireworks { get; set; } = 6;
|
public int MaxFireworks { get; set; } = 6;
|
||||||
|
public int LaunchInterval { get; set; } = 3200;
|
||||||
}
|
}
|
||||||
|
|
||||||
public class HalloweenOptions
|
public class Friday13Options {
|
||||||
{
|
public bool EnableFriday13 { get; set; } = true;
|
||||||
public int SymbolCount { get; set; } = 25;
|
}
|
||||||
|
|
||||||
|
public class FrostOptions {
|
||||||
|
public bool EnableFrost { get; set; } = true;
|
||||||
|
}
|
||||||
|
|
||||||
|
public class HalloweenOptions {
|
||||||
public bool EnableHalloween { get; set; } = true;
|
public bool EnableHalloween { get; set; } = true;
|
||||||
public bool EnableRandomSymbols { get; set; } = true;
|
public bool EnableRandomSymbols { get; set; } = true;
|
||||||
public bool EnableRandomSymbolsMobile { get; set; } = false;
|
public bool EnableRandomSymbolsMobile { get; set; } = false;
|
||||||
public bool EnableDifferentDuration { get; set; } = true;
|
public bool EnableDifferentDuration { get; set; } = true;
|
||||||
public bool EnableSpiders { get; set; } = true;
|
public bool EnableSpiders { get; set; } = true;
|
||||||
public bool EnableMice { get; set; } = true;
|
public bool EnableMice { get; set; } = true;
|
||||||
|
public int SymbolCount { get; set; } = 25;
|
||||||
}
|
}
|
||||||
|
|
||||||
public class HeartsOptions
|
public class HeartsOptions {
|
||||||
{
|
|
||||||
public int SymbolCount { get; set; } = 25;
|
|
||||||
public bool EnableHearts { get; set; } = true;
|
public bool EnableHearts { get; set; } = true;
|
||||||
public bool EnableRandomSymbols { get; set; } = true;
|
public bool EnableRandomSymbols { get; set; } = true;
|
||||||
public bool EnableRandomSymbolsMobile { get; set; } = false;
|
public bool EnableRandomSymbolsMobile { get; set; } = false;
|
||||||
public bool EnableDifferentDuration { get; set; } = true;
|
public bool EnableDifferentDuration { get; set; } = true;
|
||||||
|
public int SymbolCount { get; set; } = 25;
|
||||||
}
|
}
|
||||||
|
|
||||||
public class ChristmasOptions
|
public class MarioDayOptions {
|
||||||
{
|
public bool EnableMarioDay { get; set; } = true;
|
||||||
|
public bool LetMarioJump { get; set; } = true;
|
||||||
|
}
|
||||||
|
|
||||||
|
public class MatrixOptions {
|
||||||
|
public bool EnableMatrix { get; set; } = true;
|
||||||
public int SymbolCount { get; set; } = 25;
|
public int SymbolCount { get; set; } = 25;
|
||||||
public bool EnableChristmas { get; set; } = true;
|
public bool EnableMatrixBackground { get; set; } = false;
|
||||||
public bool EnableRandomChristmas { get; set; } = true;
|
public string MatrixChars { get; set; } = "0123456789";
|
||||||
public bool EnableRandomChristmasMobile { get; set; } = false;
|
}
|
||||||
|
|
||||||
|
public class OktoberfestOptions {
|
||||||
|
public bool EnableOktoberfest { get; set; } = true;
|
||||||
|
}
|
||||||
|
|
||||||
|
public class OlympiaOptions {
|
||||||
|
public bool EnableOlympia { get; set; } = true;
|
||||||
|
public int SymbolCount { get; set; } = 25;
|
||||||
|
public bool SymbolCountMobile { get; set; } = 10;
|
||||||
public bool EnableDifferentDuration { get; set; } = true;
|
public bool EnableDifferentDuration { get; set; } = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
public class SantaOptions
|
public class OscarOptions {
|
||||||
{
|
public bool EnableOscar { get; set; } = true;
|
||||||
|
}
|
||||||
|
|
||||||
|
public class PrideOptions {
|
||||||
|
public bool EnablePride { get; set; } = true;
|
||||||
|
public int HeartCount { get; set; } = 20;
|
||||||
|
public int HeartSize { get; set; } = 1.5;
|
||||||
|
public bool ColorHeader { get; set; } = true;
|
||||||
|
}
|
||||||
|
|
||||||
|
public class RainOptions {
|
||||||
|
public bool EnableRain { get; set; } = true;
|
||||||
|
public int RaindropCount { get; set; } = 300;
|
||||||
|
public int RaindropCountMobile { get; set; } = 150;
|
||||||
|
public double RainSpeed { get; set; } = 1.0;
|
||||||
|
}
|
||||||
|
|
||||||
|
public class ResurrectionOptions {
|
||||||
|
public bool EnableResurrection { get; set; } = true;
|
||||||
|
public bool EnableRandomSymbols { get; set; } = true;
|
||||||
|
public bool EnableRandomSymbolsMobile { get; set; } = false;
|
||||||
|
public bool EnableDifferentDuration { get; set; } = true;
|
||||||
|
public int SymbolCount { get; set; } = 12;
|
||||||
|
}
|
||||||
|
|
||||||
|
public class SantaOptions {
|
||||||
|
public bool EnableSanta { get; set; } = true;
|
||||||
public int SnowflakesCount { get; set; } = 500;
|
public int SnowflakesCount { get; set; } = 500;
|
||||||
public int SnowflakesCountMobile { get; set; } = 250;
|
public int SnowflakesCountMobile { get; set; } = 250;
|
||||||
|
public double SnowFallSpeed { get; set; } = 3;
|
||||||
public double SantaSpeed { get; set; } = 10;
|
public double SantaSpeed { get; set; } = 10;
|
||||||
public double SantaSpeedMobile { get; set; } = 8;
|
public double SantaSpeedMobile { get; set; } = 8;
|
||||||
public bool EnableSanta { get; set; } = true;
|
|
||||||
public double SnowFallSpeed { get; set; } = 3;
|
|
||||||
public double MaxSantaRestTime { get; set; } = 8;
|
public double MaxSantaRestTime { get; set; } = 8;
|
||||||
public double MinSantaRestTime { get; set; } = 3;
|
public double MinSantaRestTime { get; set; } = 3;
|
||||||
public double MaxPresentFallSpeed { get; set; } = 5;
|
public double MaxPresentFallSpeed { get; set; } = 5;
|
||||||
public double MinPresentFallSpeed { get; set; } = 2;
|
public double MinPresentFallSpeed { get; set; } = 2;
|
||||||
}
|
}
|
||||||
|
|
||||||
public class EasterOptions
|
public class SnowfallOptions {
|
||||||
{
|
public bool EnableSnowfall { get; set; } = true;
|
||||||
public int EggCount { get; set; } = 20;
|
public int SnowflakesCount { get; set; } = 500;
|
||||||
public bool EnableEaster { get; set; } = true;
|
public int SnowflakesCountMobile { get; set; } = 250;
|
||||||
public bool EnableRandomEaster { get; set; } = true;
|
public double Speed { get; set; } = 3;
|
||||||
public bool EnableRandomEasterMobile { get; set; } = false;
|
|
||||||
public bool EnableDifferentDuration { get; set; } = true;
|
|
||||||
public bool EnableBunny { get; set; } = true;
|
|
||||||
public int BunnyDuration { get; set; } = 12000;
|
|
||||||
public int HopHeight { get; set; } = 12;
|
|
||||||
public int MinBunnyRestTime { get; set; } = 2000;
|
|
||||||
public int MaxBunnyRestTime { get; set; } = 5000;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public class ResurrectionOptions
|
public class SnowflakesOptions {
|
||||||
{
|
public bool EnableSnowflakes { get; set; } = true;
|
||||||
public int SymbolCount { get; set; } = 12;
|
public int SnowflakeCount { get; set; } = 25;
|
||||||
public bool EnableResurrection { get; set; } = true;
|
public bool EnableRandomSnowflakes { get; set; } = true;
|
||||||
public bool EnableRandomSymbols { get; set; } = true;
|
public bool EnableRandomSnowflakesMobile { get; set; } = false;
|
||||||
public bool EnableRandomSymbolsMobile { get; set; } = false;
|
public bool EnableColoredSnowflakes { get; set; } = true;
|
||||||
public bool EnableDifferentDuration { get; set; } = true;
|
public bool EnableDifferentDuration { get; set; } = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
public class SpringOptions
|
public class SnowstormOptions {
|
||||||
{
|
public bool EnableSnowstorm { get; set; } = true;
|
||||||
public int PollenCount { get; set; } = 30;
|
public int SnowflakesCount { get; set; } = 500;
|
||||||
public int SunbeamCount { get; set; } = 5;
|
public int SnowflakesCountMobile { get; set; } = 250;
|
||||||
public int BirdCount { get; set; } = 4;
|
public double Speed { get; set; } = 6;
|
||||||
public int ButterflyCount { get; set; } = 4;
|
public double HorizontalWind { get; set; } = 4;
|
||||||
public int BeeCount { get; set; } = 2;
|
public double VerticalVariation { get; set; } = 2;
|
||||||
public int LadybugCount { get; set; } = 2;
|
}
|
||||||
public bool EnableSpring { get; set; } = true;
|
|
||||||
public bool EnableSpringSunbeams { get; set; } = true;
|
public class SpaceOptions {
|
||||||
public bool EnableRandomSpring { get; set; } = true;
|
public bool EnableSpace { get; set; } = true;
|
||||||
public bool EnableRandomSpringMobile { get; set; } = false;
|
public int PlanetCount { get; set; } = 6;
|
||||||
|
public int AstronautCount { get; set; } = 1;
|
||||||
|
public int SatelliteCount { get; set; } = 4;
|
||||||
|
public int IssCount { get; set; } = 1;
|
||||||
|
public int RocketCount { get; set; } = 1;
|
||||||
public bool EnableDifferentDuration { get; set; } = true;
|
public bool EnableDifferentDuration { get; set; } = true;
|
||||||
|
public bool SymbolCountMobile { get; set; } = 2;
|
||||||
}
|
}
|
||||||
|
|
||||||
public class SummerOptions
|
public class SpookyOptions {
|
||||||
{
|
|
||||||
public int BubbleCount { get; set; } = 20;
|
|
||||||
public int DustCount { get; set; } = 50;
|
|
||||||
public bool EnableSummer { get; set; } = true;
|
|
||||||
public bool EnableRandomSummer { get; set; } = true;
|
|
||||||
public bool EnableRandomSummerMobile { get; set; } = false;
|
|
||||||
public bool EnableDifferentDuration { get; set; } = true;
|
|
||||||
}
|
|
||||||
|
|
||||||
public class CarnivalOptions
|
|
||||||
{
|
|
||||||
public int ObjectCount { get; set; } = 25;
|
|
||||||
public bool EnableCarnival { get; set; } = true;
|
|
||||||
public bool EnableRandomCarnival { get; set; } = true;
|
|
||||||
public bool EnableRandomCarnivalMobile { get; set; } = false;
|
|
||||||
public bool EnableDifferentDuration { get; set; } = true;
|
|
||||||
public bool EnableCarnivalSway { get; set; } = true;
|
|
||||||
}
|
|
||||||
|
|
||||||
public class CherryBlossomOptions
|
|
||||||
{
|
|
||||||
public int PetalCount { get; set; } = 25;
|
|
||||||
public bool EnableCherryBlossom { get; set; } = true;
|
|
||||||
public bool EnableRandomCherryBlossom { get; set; } = true;
|
|
||||||
public bool EnableRandomCherryBlossomMobile { get; set; } = false;
|
|
||||||
public bool EnableDifferentDuration { get; set; } = true;
|
|
||||||
}
|
|
||||||
|
|
||||||
public class MatrixOptions
|
|
||||||
{
|
|
||||||
public int SymbolCount { get; set; } = 25;
|
|
||||||
public bool EnableMatrix { get; set; } = true;
|
|
||||||
public bool EnableRandomMatrix { get; set; } = true;
|
|
||||||
public bool EnableRandomMatrixMobile { get; set; } = false;
|
|
||||||
public bool EnableDifferentDuration { get; set; } = true;
|
|
||||||
public bool EnableMatrixBackground { get; set; } = false;
|
|
||||||
public string MatrixChars { get; set; } = "0123456789";
|
|
||||||
}
|
|
||||||
|
|
||||||
public class EurovisionOptions
|
|
||||||
{
|
|
||||||
public int SymbolCount { get; set; } = 25;
|
|
||||||
public bool EnableEurovision { get; set; } = true;
|
|
||||||
public bool EnableRandomEurovision { get; set; } = true;
|
|
||||||
public bool EnableRandomEurovisionMobile { get; set; } = false;
|
|
||||||
public bool EnableDifferentDuration { get; set; } = true;
|
|
||||||
public bool EnableColorfulNotes { get; set; } = true;
|
|
||||||
public string EurovisionColors { get; set; } = "#ff0026ff,#17a6ffff,#32d432ff,#FFD700,#f0821bff,#f826f8ff";
|
|
||||||
public int EurovisionGlowSize { get; set; } = 8;
|
|
||||||
}
|
|
||||||
|
|
||||||
public class StormOptions
|
|
||||||
{
|
|
||||||
public int RaindropCount { get; set; } = 300;
|
|
||||||
public int RaindropCountMobile { get; set; } = 150;
|
|
||||||
public bool EnableStorm { get; set; } = true;
|
|
||||||
public bool EnableLightning { get; set; } = true;
|
|
||||||
public double RainSpeed { get; set; } = 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
public class PrideOptions
|
|
||||||
{
|
|
||||||
public bool EnablePride { get; set; } = true;
|
|
||||||
public int HeartCount { get; set; } = 20;
|
|
||||||
public int HeartSize { get; set; } = 2;
|
|
||||||
public bool ColorHeader { get; set; } = true;
|
|
||||||
}
|
|
||||||
|
|
||||||
public class EarthDayOptions
|
|
||||||
{
|
|
||||||
public bool EnableEarthDay { get; set; } = true;
|
|
||||||
public int VineCount { get; set; } = 4;
|
|
||||||
}
|
|
||||||
|
|
||||||
public class RainOptions
|
|
||||||
{
|
|
||||||
public bool EnableRain { get; set; } = true;
|
|
||||||
public int RaindropCount { get; set; } = 300;
|
|
||||||
public int RaindropCountMobile { get; set; } = 150;
|
|
||||||
public double RainSpeed { get; set; } = 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
public class FrostOptions
|
|
||||||
{
|
|
||||||
public bool EnableFrost { get; set; } = true;
|
|
||||||
}
|
|
||||||
|
|
||||||
public class FilmNoirOptions
|
|
||||||
{
|
|
||||||
public bool EnableFilmNoir { get; set; } = true;
|
|
||||||
}
|
|
||||||
|
|
||||||
public class OscarOptions
|
|
||||||
{
|
|
||||||
public bool EnableOscar { get; set; } = true;
|
|
||||||
}
|
|
||||||
|
|
||||||
public class MarioDayOptions
|
|
||||||
{
|
|
||||||
public bool EnableMarioDay { get; set; } = true;
|
|
||||||
}
|
|
||||||
|
|
||||||
public class StarWarsOptions
|
|
||||||
{
|
|
||||||
public bool EnableStarWars { get; set; } = true;
|
|
||||||
}
|
|
||||||
|
|
||||||
public class OktoberfestOptions
|
|
||||||
{
|
|
||||||
public bool EnableOktoberfest { get; set; } = true;
|
|
||||||
}
|
|
||||||
|
|
||||||
public class Friday13Options
|
|
||||||
{
|
|
||||||
public bool EnableFriday13 { get; set; } = true;
|
|
||||||
}
|
|
||||||
|
|
||||||
public class EidOptions
|
|
||||||
{
|
|
||||||
public bool EnableEid { get; set; } = true;
|
|
||||||
}
|
|
||||||
|
|
||||||
public class SpookyOptions
|
|
||||||
{
|
|
||||||
public bool EnableSpooky { get; set; } = true;
|
public bool EnableSpooky { get; set; } = true;
|
||||||
public int SymbolCount { get; set; } = 25;
|
public int SymbolCount { get; set; } = 25;
|
||||||
|
public bool EnableDifferentDuration { get; set; } = true;
|
||||||
public bool EnableSpookySway { get; set; } = true;
|
public bool EnableSpookySway { get; set; } = true;
|
||||||
public int SpookySize { get; set; } = 20;
|
public int SpookySize { get; set; } = 20;
|
||||||
public int SpookyGlowSize { get; set; } = 2;
|
public int SpookyGlowSize { get; set; } = 2;
|
||||||
}
|
}
|
||||||
|
|
||||||
public class SportsOptions
|
public class SportsOptions {
|
||||||
{
|
|
||||||
public int SymbolCount { get; set; } = 5;
|
|
||||||
public bool EnableSports { get; set; } = true;
|
public bool EnableSports { get; set; } = true;
|
||||||
public bool EnableRandomSymbols { get; set; } = true;
|
public int SymbolCount { get; set; } = 5;
|
||||||
public bool EnableRandomSymbolsMobile { get; set; } = false;
|
|
||||||
public bool EnableDifferentDuration { get; set; } = true;
|
public bool EnableDifferentDuration { get; set; } = true;
|
||||||
public string TurfColor { get; set; } = "#228b22";
|
public string TurfColor { get; set; } = "#228b22";
|
||||||
public string SportsBalls { get; set; } = "football,basketball,tennis,volleyball";
|
public string SportsBalls { get; set; } = "football,basketball,tennis,volleyball";
|
||||||
public bool EnableTrophy { get; set; } = false;
|
public bool EnableTrophy { get; set; } = false;
|
||||||
|
public string ConfettiColors { get; set; } = "#000000,#FF0000,#FFCC00";
|
||||||
}
|
}
|
||||||
|
|
||||||
public class OlympiaOptions
|
public class SpringOptions {
|
||||||
{
|
public bool EnableSpring { get; set; } = true;
|
||||||
public int SymbolCount { get; set; } = 25;
|
public int PollenCount { get; set; } = 30;
|
||||||
public bool EnableOlympia { get; set; } = true;
|
public bool EnableSpringSunbeams { get; set; } = true;
|
||||||
public bool EnableRandomSymbols { get; set; } = true;
|
public int SunbeamCount { get; set; } = 5;
|
||||||
public bool EnableRandomSymbolsMobile { get; set; } = false;
|
public int BirdCount { get; set; } = 3;
|
||||||
|
public int ButterflyCount { get; set; } = 4;
|
||||||
|
public int BeeCount { get; set; } = 2;
|
||||||
|
public int LadybugCount { get; set; } = 2;
|
||||||
|
public bool SymbolCountMobile { get; set; } = 2;
|
||||||
|
}
|
||||||
|
|
||||||
|
public class StarWarsOptions {
|
||||||
|
public bool EnableStarWars { get; set; } = true;
|
||||||
|
}
|
||||||
|
|
||||||
|
public class StormOptions {
|
||||||
|
public bool EnableStorm { get; set; } = true;
|
||||||
|
public int RaindropCount { get; set; } = 300;
|
||||||
|
public int RaindropCountMobile { get; set; } = 150;
|
||||||
|
public bool EnableLightning { get; set; } = true;
|
||||||
|
public double RainSpeed { get; set; } = 1.0;
|
||||||
|
}
|
||||||
|
|
||||||
|
public class SummerOptions {
|
||||||
|
public bool EnableSummer { get; set; } = true;
|
||||||
|
public int BubbleCount { get; set; } = 30;
|
||||||
|
public int DustCount { get; set; } = 50;
|
||||||
|
public bool SymbolCountMobile { get; set; } = 2;
|
||||||
public bool EnableDifferentDuration { get; set; } = true;
|
public bool EnableDifferentDuration { get; set; } = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
public class SpaceOptions
|
public class UnderwaterOptions {
|
||||||
{
|
|
||||||
public int PlanetCount { get; set; } = 12;
|
|
||||||
public int AstronautCount { get; set; } = 5;
|
|
||||||
public int SatelliteCount { get; set; } = 2;
|
|
||||||
public int IssCount { get; set; } = 1;
|
|
||||||
public int RocketCount { get; set; } = 1;
|
|
||||||
public bool EnableSpace { get; set; } = true;
|
|
||||||
public bool EnableRandomSymbols { get; set; } = true;
|
|
||||||
public bool EnableRandomSymbolsMobile { get; set; } = false;
|
|
||||||
public bool EnableDifferentDuration { get; set; } = true;
|
|
||||||
}
|
|
||||||
|
|
||||||
public class UnderwaterOptions
|
|
||||||
{
|
|
||||||
public int SymbolCount { get; set; } = 15;
|
|
||||||
public bool EnableUnderwater { get; set; } = true;
|
public bool EnableUnderwater { get; set; } = true;
|
||||||
public bool EnableRandomSymbols { get; set; } = true;
|
public bool SymbolCountMobile { get; set; } = 2;
|
||||||
public bool EnableRandomSymbolsMobile { get; set; } = false;
|
|
||||||
public bool EnableDifferentDuration { get; set; } = true;
|
public bool EnableDifferentDuration { get; set; } = true;
|
||||||
public bool EnableLightRays { get; set; } = true;
|
public bool EnableLightRays { get; set; } = true;
|
||||||
public int SeaweedCount { get; set; } = 30;
|
public int SeaweedCount { get; set; } = 50;
|
||||||
public int CrabCount { get; set; } = 2;
|
public int CrabCount { get; set; } = 2;
|
||||||
public int StarfishCount { get; set; } = 2;
|
public int StarfishCount { get; set; } = 2;
|
||||||
public int ShellCount { get; set; } = 2;
|
public int ShellCount { get; set; } = 2;
|
||||||
@@ -430,15 +390,4 @@ public class UnderwaterOptions
|
|||||||
public int SeahorseCount { get; set; } = 3;
|
public int SeahorseCount { get; set; } = 3;
|
||||||
public int JellyfishCount { get; set; } = 3;
|
public int JellyfishCount { get; set; } = 3;
|
||||||
public int TurtleCount { get; set; } = 1;
|
public int TurtleCount { get; set; } = 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
public class BirthdayOptions
|
|
||||||
{
|
|
||||||
public int SymbolCount { get; set; } = 5;
|
|
||||||
public int ConfettiCount { get; set; } = 60;
|
|
||||||
public bool EnableBirthday { get; set; } = true;
|
|
||||||
public bool EnableRandomSymbols { get; set; } = true;
|
|
||||||
public bool EnableRandomSymbolsMobile { get; set; } = false;
|
|
||||||
public bool EnableDifferentDuration { get; set; } = true;
|
|
||||||
public bool EnableGarland { get; set; } = true;
|
|
||||||
}
|
|
||||||
@@ -388,6 +388,12 @@
|
|||||||
<input is="emby-input" type="number" id="SpookySize" name="SpookySize" />
|
<input is="emby-input" type="number" id="SpookySize" name="SpookySize" />
|
||||||
<div class="fieldDescription">Size of the floating symbols in pixels (default 30).</div>
|
<div class="fieldDescription">Size of the floating symbols in pixels (default 30).</div>
|
||||||
</div>
|
</div>
|
||||||
|
<div class="checkboxContainer">
|
||||||
|
<label class="emby-checkbox-label">
|
||||||
|
<input id="EnableDifferentDurationSpooky" name="EnableDifferentDurationSpooky" type="checkbox" is="emby-checkbox" />
|
||||||
|
<span>Enable Different Symbol Durations</span>
|
||||||
|
</label>
|
||||||
|
</div>
|
||||||
<div class="checkboxContainer">
|
<div class="checkboxContainer">
|
||||||
<label class="emby-checkbox-label">
|
<label class="emby-checkbox-label">
|
||||||
<input id="EnableSpookySway" name="EnableSpookySway" type="checkbox" is="emby-checkbox" />
|
<input id="EnableSpookySway" name="EnableSpookySway" type="checkbox" is="emby-checkbox" />
|
||||||
@@ -1779,6 +1785,7 @@
|
|||||||
|
|
||||||
// Advanced Config
|
// Advanced Config
|
||||||
// Autumn
|
// Autumn
|
||||||
|
|
||||||
document.querySelector('#EnableAutumn').checked = config.Autumn.EnableAutumn;
|
document.querySelector('#EnableAutumn').checked = config.Autumn.EnableAutumn;
|
||||||
document.querySelector('#AutumnLeafCount').value = config.Autumn.LeafCount;
|
document.querySelector('#AutumnLeafCount').value = config.Autumn.LeafCount;
|
||||||
document.querySelector('#EnableRandomLeaves').checked = config.Autumn.EnableRandomLeaves;
|
document.querySelector('#EnableRandomLeaves').checked = config.Autumn.EnableRandomLeaves;
|
||||||
@@ -1786,152 +1793,49 @@
|
|||||||
document.querySelector('#EnableDifferentDurationAutumn').checked = config.Autumn.EnableDifferentDuration;
|
document.querySelector('#EnableDifferentDurationAutumn').checked = config.Autumn.EnableDifferentDuration;
|
||||||
document.querySelector('#EnableRotation').checked = config.Autumn.EnableRotation;
|
document.querySelector('#EnableRotation').checked = config.Autumn.EnableRotation;
|
||||||
|
|
||||||
// Snowflakes
|
|
||||||
document.querySelector('#SnowflakesCount').value = config.Snowflakes.SnowflakeCount;
|
|
||||||
document.querySelector('#EnableSnowflakes').checked = config.Snowflakes.EnableSnowflakes;
|
|
||||||
document.querySelector('#EnableRandomSnowflakes').checked = config.Snowflakes.EnableRandomSnowflakes;
|
|
||||||
document.querySelector('#EnableRandomSnowflakesMobile').checked = config.Snowflakes.EnableRandomSnowflakesMobile;
|
|
||||||
document.querySelector('#EnableColoredSnowflakes').checked = config.Snowflakes.EnableColoredSnowflakes;
|
|
||||||
document.querySelector('#EnableDifferentDurationSnowflakes').checked = config.Snowflakes.EnableDifferentDuration;
|
|
||||||
|
|
||||||
// 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;
|
|
||||||
|
|
||||||
// Snowstorm
|
|
||||||
document.querySelector('#EnableSnowstorm').checked = config.Snowstorm.EnableSnowstorm;
|
|
||||||
document.querySelector('#SnowstormCount').value = config.Snowstorm.SnowflakesCount;
|
|
||||||
document.querySelector('#SnowstormCountMobile').value = config.Snowstorm.SnowflakesCountMobile;
|
|
||||||
document.querySelector('#SnowstormSpeed').value = config.Snowstorm.Speed;
|
|
||||||
document.querySelector('#SnowstormHorizontalWind').value = config.Snowstorm.HorizontalWind;
|
|
||||||
document.querySelector('#SnowstormVerticalVariation').value = config.Snowstorm.VerticalVariation;
|
|
||||||
|
|
||||||
// Fireworks
|
|
||||||
document.querySelector('#EnableFireworks').checked = config.Fireworks.EnableFireworks;
|
|
||||||
document.querySelector('#FireworksParticles').value = config.Fireworks.ParticleCount;
|
|
||||||
document.querySelector('#FireworksInterval').value = config.Fireworks.LaunchInterval;
|
|
||||||
document.querySelector('#ScrollFireworks').checked = config.Fireworks.ScrollFireworks;
|
|
||||||
document.querySelector('#MinFireworks').value = config.Fireworks.MinFireworks;
|
|
||||||
document.querySelector('#MaxFireworks').value = config.Fireworks.MaxFireworks;
|
|
||||||
|
|
||||||
// Eid
|
|
||||||
document.querySelector('#EidSymbolCount').value = config.Eid.SymbolCount || 25;
|
|
||||||
|
|
||||||
// Spooky Theme
|
|
||||||
document.querySelector('#SpookyCount').value = config.Spooky.SymbolCount || 25;
|
|
||||||
|
|
||||||
// Sports
|
|
||||||
document.querySelector('#EnableSports').checked = config.Sports.EnableSports || false;
|
|
||||||
document.querySelector('#EnableRandomSymbolsSports').checked = config.Sports.EnableRandomSymbols || false;
|
|
||||||
document.querySelector('#EnableRandomSymbolsMobileSports').checked = config.Sports.EnableRandomSymbolsMobile || false;
|
|
||||||
document.querySelector('#EnableDifferentDurationSports').checked = config.Sports.EnableDifferentDuration || false;
|
|
||||||
document.querySelector('#SportsSymbolCount').value = config.Sports.SymbolCount || 25;
|
|
||||||
|
|
||||||
// Olympia
|
|
||||||
document.querySelector('#EnableOlympia').checked = config.Olympia.EnableOlympia || false;
|
|
||||||
document.querySelector('#EnableRandomSymbolsOlympia').checked = config.Olympia.EnableRandomSymbols || false;
|
|
||||||
document.querySelector('#EnableRandomSymbolsMobileOlympia').checked = config.Olympia.EnableRandomSymbolsMobile || false;
|
|
||||||
document.querySelector('#EnableDifferentDurationOlympia').checked = config.Olympia.EnableDifferentDuration || false;
|
|
||||||
document.querySelector('#OlympiaSymbolCount').value = config.Olympia.SymbolCount || 25;
|
|
||||||
|
|
||||||
// Space
|
|
||||||
document.querySelector('#EnableSpace').checked = config.Space.EnableSpace || false;
|
|
||||||
document.querySelector('#EnableRandomSymbolsSpace').checked = config.Space.EnableRandomSymbols || false;
|
|
||||||
document.querySelector('#EnableRandomSymbolsMobileSpace').checked = config.Space.EnableRandomSymbolsMobile || 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;
|
|
||||||
|
|
||||||
// Underwater
|
|
||||||
document.querySelector('#EnableUnderwater').checked = config.Underwater.EnableUnderwater || false;
|
|
||||||
document.querySelector('#EnableRandomSymbolsUnderwater').checked = config.Underwater.EnableRandomSymbols || false;
|
|
||||||
document.querySelector('#EnableRandomSymbolsMobileUnderwater').checked = config.Underwater.EnableRandomSymbolsMobile || false;
|
|
||||||
document.querySelector('#EnableDifferentDurationUnderwater').checked = config.Underwater.EnableDifferentDuration || false;
|
|
||||||
document.querySelector('#UnderwaterSeaweedCount').value = config.Underwater.SeaweedCount !== undefined ? config.Underwater.SeaweedCount : 30;
|
|
||||||
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;
|
|
||||||
|
|
||||||
// Birthday
|
// Birthday
|
||||||
document.querySelector('#EnableBirthday').checked = config.Birthday.EnableBirthday || false;
|
|
||||||
|
document.querySelector('#EnableBirthday').checked = config.Birthday.EnableBirthday !== false;
|
||||||
document.querySelector('#EnableGarland').checked = config.Birthday.EnableGarland !== false;
|
document.querySelector('#EnableGarland').checked = config.Birthday.EnableGarland !== false;
|
||||||
document.querySelector('#EnableRandomSymbolsBirthday').checked = config.Birthday.EnableRandomSymbols || false;
|
document.querySelector('#EnableRandomSymbolsBirthday').checked = config.Birthday.EnableRandomSymbols !== false;
|
||||||
document.querySelector('#EnableRandomSymbolsMobileBirthday').checked = config.Birthday.EnableRandomSymbolsMobile || false;
|
document.querySelector('#EnableRandomSymbolsMobileBirthday').checked = config.Birthday.EnableRandomSymbolsMobile === true;
|
||||||
document.querySelector('#EnableDifferentDurationBirthday').checked = config.Birthday.EnableDifferentDuration || false;
|
document.querySelector('#EnableDifferentDurationBirthday').checked = config.Birthday.EnableDifferentDuration !== false;
|
||||||
document.querySelector('#BirthdaySymbolCount').value = config.Birthday.SymbolCount || 25;
|
document.querySelector('#BirthdaySymbolCount').value = config.Birthday.SymbolCount || 25;
|
||||||
document.querySelector('#BirthdayConfettiCount').value = config.Birthday.ConfettiCount || 60;
|
document.querySelector('#BirthdayConfettiCount').value = config.Birthday.ConfettiCount || 60;
|
||||||
|
config.Birthday = config.Birthday || {};
|
||||||
|
|
||||||
// Sports
|
// Carnival
|
||||||
if (!config.Sports) config.Sports = { EnableSports: true, SymbolCount: 25, EnableRandomSymbols: true, EnableRandomSymbolsMobile: false, EnableDifferentDuration: true };
|
|
||||||
document.querySelector('#EnableSports').checked = config.Sports.EnableSports !== false;
|
|
||||||
document.querySelector('#EnableRandomSymbolsSports').checked = config.Sports.EnableRandomSymbols !== false;
|
|
||||||
document.querySelector('#EnableRandomSymbolsMobileSports').checked = config.Sports.EnableRandomSymbolsMobile === true;
|
|
||||||
document.querySelector('#EnableDifferentDurationSports').checked = config.Sports.EnableDifferentDuration !== false;
|
|
||||||
document.querySelector('#SportsSymbolCount').value = config.Sports.SymbolCount || 25;
|
|
||||||
document.querySelector('#TurfColor').value = config.Sports.TurfColor || '#228b22';
|
|
||||||
document.querySelector('#EnableTrophy').checked = config.Sports.EnableTrophy !== false;
|
|
||||||
|
|
||||||
// Load Checkboxes
|
|
||||||
const savedBallsString = config.Sports.SportsBalls || 'football,basketball,tennis,volleyball';
|
|
||||||
const savedBalls = savedBallsString.split(',');
|
|
||||||
document.querySelectorAll('.sport-ball-cb').forEach(cb => {
|
|
||||||
// Support for both new category string and legacy filename strings
|
|
||||||
cb.checked = savedBalls.some(b => b === cb.value || b.startsWith(cb.value + '_'));
|
|
||||||
});
|
|
||||||
|
|
||||||
// Olympia
|
document.querySelector('#EnableCarnival').checked = config.Carnival.EnableCarnival;
|
||||||
if (!config.Olympia) config.Olympia = { EnableOlympia: true, SymbolCount: 25, EnableRandomSymbols: true, EnableRandomSymbolsMobile: false, EnableDifferentDuration: true };
|
document.querySelector('#EnableCarnivalSway').checked = config.Carnival.EnableCarnivalSway !== undefined ? config.Carnival.EnableCarnivalSway : true;
|
||||||
document.querySelector('#EnableOlympia').checked = config.Olympia.EnableOlympia !== false;
|
document.querySelector('#CarnivalObjectCount').value = config.Carnival.ObjectCount;
|
||||||
document.querySelector('#EnableRandomSymbolsOlympia').checked = config.Olympia.EnableRandomSymbols !== false;
|
document.querySelector('#EnableRandomCarnival').checked = config.Carnival.EnableRandomCarnival;
|
||||||
document.querySelector('#EnableRandomSymbolsMobileOlympia').checked = config.Olympia.EnableRandomSymbolsMobile === true;
|
document.querySelector('#EnableRandomCarnivalMobile').checked = config.Carnival.EnableRandomCarnivalMobile;
|
||||||
document.querySelector('#EnableDifferentDurationOlympia').checked = config.Olympia.EnableDifferentDuration !== false;
|
document.querySelector('#EnableDifferentDurationCarnival').checked = config.Carnival.EnableDifferentDuration;
|
||||||
document.querySelector('#OlympiaSymbolCount').value = config.Olympia.SymbolCount || 25;
|
|
||||||
|
|
||||||
// Halloween
|
// CherryBlossom
|
||||||
document.querySelector('#EnableHalloween').checked = config.Halloween.EnableHalloween;
|
|
||||||
document.querySelector('#HalloweenCount').value = config.Halloween.SymbolCount;
|
|
||||||
document.querySelector('#EnableRandomHalloween').checked = config.Halloween.EnableRandomSymbols;
|
|
||||||
document.querySelector('#EnableRandomHalloweenMobile').checked = config.Halloween.EnableRandomSymbolsMobile;
|
|
||||||
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;
|
|
||||||
|
|
||||||
// Hearts
|
document.querySelector('#EnableCherryBlossom').checked = config.CherryBlossom.EnableCherryBlossom;
|
||||||
document.querySelector('#EnableHearts').checked = config.Hearts.EnableHearts;
|
document.querySelector('#CherryBlossomPetalCount').value = config.CherryBlossom.PetalCount;
|
||||||
document.querySelector('#HeartsCount').value = config.Hearts.SymbolCount;
|
document.querySelector('#EnableRandomCherryBlossom').checked = config.CherryBlossom.EnableRandomCherryBlossom;
|
||||||
document.querySelector('#EnableRandomHearts').checked = config.Hearts.EnableRandomSymbols;
|
document.querySelector('#EnableRandomCherryBlossomMobile').checked = config.CherryBlossom.EnableRandomCherryBlossomMobile;
|
||||||
document.querySelector('#EnableRandomHeartsMobile').checked = config.Hearts.EnableRandomSymbolsMobile;
|
document.querySelector('#EnableDifferentDurationCherryBlossom').checked = config.CherryBlossom.EnableDifferentDuration;
|
||||||
document.querySelector('#EnableDifferentDurationHearts').checked = config.Hearts.EnableDifferentDuration;
|
|
||||||
|
|
||||||
// Christmas
|
// Christmas
|
||||||
|
|
||||||
document.querySelector('#EnableChristmas').checked = config.Christmas.EnableChristmas;
|
document.querySelector('#EnableChristmas').checked = config.Christmas.EnableChristmas;
|
||||||
document.querySelector('#ChristmasCount').value = config.Christmas.SymbolCount;
|
document.querySelector('#ChristmasCount').value = config.Christmas.SymbolCount;
|
||||||
document.querySelector('#EnableRandomChristmas').checked = config.Christmas.EnableRandomChristmas;
|
document.querySelector('#EnableRandomChristmas').checked = config.Christmas.EnableRandomChristmas;
|
||||||
document.querySelector('#EnableRandomChristmasMobile').checked = config.Christmas.EnableRandomChristmasMobile;
|
document.querySelector('#EnableRandomChristmasMobile').checked = config.Christmas.EnableRandomChristmasMobile;
|
||||||
document.querySelector('#EnableDifferentDurationChristmas').checked = config.Christmas.EnableDifferentDuration;
|
document.querySelector('#EnableDifferentDurationChristmas').checked = config.Christmas.EnableDifferentDuration;
|
||||||
|
|
||||||
// Santa
|
// EarthDay
|
||||||
document.querySelector('#EnableSanta').checked = config.Santa.EnableSanta;
|
|
||||||
document.querySelector('#SantaSnowflakes').value = config.Santa.SnowflakesCount;
|
document.querySelector('#EnableEarthDay').checked = config.EarthDay.EnableEarthDay;
|
||||||
document.querySelector('#SantaSnowflakesMobile').value = config.Santa.SnowflakesCountMobile;
|
document.querySelector('#EarthDayVineCount').value = config.EarthDay.VineCount;
|
||||||
document.querySelector('#SantaSpeed').value = config.Santa.SantaSpeed;
|
|
||||||
document.querySelector('#SantaSpeedMobile').value = config.Santa.SantaSpeedMobile;
|
|
||||||
document.querySelector('#SantaSnowFallSpeed').value = config.Santa.SnowFallSpeed;
|
|
||||||
document.querySelector('#MaxSantaRestTime').value = config.Santa.MaxSantaRestTime;
|
|
||||||
document.querySelector('#MinSantaRestTime').value = config.Santa.MinSantaRestTime;
|
|
||||||
document.querySelector('#MaxPresentFallSpeed').value = config.Santa.MaxPresentFallSpeed;
|
|
||||||
document.querySelector('#MinPresentFallSpeed').value = config.Santa.MinPresentFallSpeed;
|
|
||||||
|
|
||||||
// Easter
|
// Easter
|
||||||
|
|
||||||
document.querySelector('#EnableEaster').checked = config.Easter.EnableEaster;
|
document.querySelector('#EnableEaster').checked = config.Easter.EnableEaster;
|
||||||
document.querySelector('#EasterEggCount').value = config.Easter.EggCount;
|
document.querySelector('#EasterEggCount').value = config.Easter.EggCount;
|
||||||
document.querySelector('#EnableRandomEaster').checked = config.Easter.EnableRandomEaster;
|
document.querySelector('#EnableRandomEaster').checked = config.Easter.EnableRandomEaster;
|
||||||
@@ -1943,14 +1847,163 @@
|
|||||||
document.querySelector('#MinBunnyRestTime').value = config.Easter.MinBunnyRestTime;
|
document.querySelector('#MinBunnyRestTime').value = config.Easter.MinBunnyRestTime;
|
||||||
document.querySelector('#MaxBunnyRestTime').value = config.Easter.MaxBunnyRestTime;
|
document.querySelector('#MaxBunnyRestTime').value = config.Easter.MaxBunnyRestTime;
|
||||||
|
|
||||||
|
// Eurovision
|
||||||
|
|
||||||
|
document.querySelector('#EnableEurovision').checked = config.Eurovision.EnableEurovision;
|
||||||
|
document.querySelector('#EurovisionSymbolCount').value = config.Eurovision.SymbolCount;
|
||||||
|
document.querySelector('#EnableRandomEurovision').checked = config.Eurovision.EnableRandomEurovision;
|
||||||
|
document.querySelector('#EnableRandomEurovisionMobile').checked = config.Eurovision.EnableRandomEurovisionMobile;
|
||||||
|
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;
|
||||||
|
|
||||||
|
// Fireworks
|
||||||
|
|
||||||
|
document.querySelector('#EnableFireworks').checked = config.Fireworks.EnableFireworks;
|
||||||
|
document.querySelector('#FireworksParticles').value = config.Fireworks.ParticleCount;
|
||||||
|
document.querySelector('#FireworksInterval').value = config.Fireworks.LaunchInterval;
|
||||||
|
document.querySelector('#ScrollFireworks').checked = config.Fireworks.ScrollFireworks;
|
||||||
|
document.querySelector('#MinFireworks').value = config.Fireworks.MinFireworks;
|
||||||
|
document.querySelector('#MaxFireworks').value = config.Fireworks.MaxFireworks;
|
||||||
|
|
||||||
|
// Halloween
|
||||||
|
|
||||||
|
document.querySelector('#EnableHalloween').checked = config.Halloween.EnableHalloween;
|
||||||
|
document.querySelector('#HalloweenCount').value = config.Halloween.SymbolCount;
|
||||||
|
document.querySelector('#EnableRandomHalloween').checked = config.Halloween.EnableRandomSymbols;
|
||||||
|
document.querySelector('#EnableRandomHalloweenMobile').checked = config.Halloween.EnableRandomSymbolsMobile;
|
||||||
|
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;
|
||||||
|
|
||||||
|
// Hearts
|
||||||
|
|
||||||
|
document.querySelector('#EnableHearts').checked = config.Hearts.EnableHearts;
|
||||||
|
document.querySelector('#HeartsCount').value = config.Hearts.SymbolCount;
|
||||||
|
document.querySelector('#EnableRandomHearts').checked = config.Hearts.EnableRandomSymbols;
|
||||||
|
document.querySelector('#EnableRandomHeartsMobile').checked = config.Hearts.EnableRandomSymbolsMobile;
|
||||||
|
document.querySelector('#EnableDifferentDurationHearts').checked = config.Hearts.EnableDifferentDuration;
|
||||||
|
|
||||||
|
// Matrix
|
||||||
|
|
||||||
|
document.querySelector('#EnableMatrix').checked = config.Matrix.EnableMatrix;
|
||||||
|
document.querySelector('#MatrixSymbolCount').value = config.Matrix.SymbolCount;
|
||||||
|
document.querySelector('#MatrixChars').value = config.Matrix.MatrixChars !== undefined ? config.Matrix.MatrixChars : '0123456789';
|
||||||
|
document.querySelector('#EnableRandomMatrix').checked = config.Matrix.EnableRandomMatrix;
|
||||||
|
document.querySelector('#EnableRandomMatrixMobile').checked = config.Matrix.EnableRandomMatrixMobile;
|
||||||
|
document.querySelector('#EnableDifferentDurationMatrix').checked = config.Matrix.EnableDifferentDuration;
|
||||||
|
document.querySelector('#EnableMatrixBackground').checked = config.Matrix.EnableMatrixBackground !== undefined ? config.Matrix.EnableMatrixBackground : false;
|
||||||
|
|
||||||
|
// Olympia
|
||||||
|
|
||||||
|
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('#EnableRandomSymbolsOlympia').checked = config.Olympia.EnableRandomSymbols !== false;
|
||||||
|
document.querySelector('#EnableRandomSymbolsMobileOlympia').checked = config.Olympia.EnableRandomSymbolsMobile === true;
|
||||||
|
document.querySelector('#EnableDifferentDurationOlympia').checked = config.Olympia.EnableDifferentDuration !== false;
|
||||||
|
document.querySelector('#OlympiaSymbolCount').value = config.Olympia.SymbolCount || 25;
|
||||||
|
|
||||||
|
// 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
|
// Resurrection
|
||||||
|
|
||||||
document.querySelector('#EnableResurrection').checked = config.Resurrection.EnableResurrection;
|
document.querySelector('#EnableResurrection').checked = config.Resurrection.EnableResurrection;
|
||||||
document.querySelector('#ResurrectionSymbolCount').value = config.Resurrection.SymbolCount;
|
document.querySelector('#ResurrectionSymbolCount').value = config.Resurrection.SymbolCount;
|
||||||
document.querySelector('#EnableRandomResurrection').checked = config.Resurrection.EnableRandomSymbols;
|
document.querySelector('#EnableRandomResurrection').checked = config.Resurrection.EnableRandomSymbols;
|
||||||
document.querySelector('#EnableRandomResurrectionMobile').checked = config.Resurrection.EnableRandomSymbolsMobile;
|
document.querySelector('#EnableRandomResurrectionMobile').checked = config.Resurrection.EnableRandomSymbolsMobile;
|
||||||
document.querySelector('#EnableDifferentDurationResurrection').checked = config.Resurrection.EnableDifferentDuration;
|
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;
|
||||||
|
document.querySelector('#SantaSpeed').value = config.Santa.SantaSpeed;
|
||||||
|
document.querySelector('#SantaSpeedMobile').value = config.Santa.SantaSpeedMobile;
|
||||||
|
document.querySelector('#SantaSnowFallSpeed').value = config.Santa.SnowFallSpeed;
|
||||||
|
document.querySelector('#MaxSantaRestTime').value = config.Santa.MaxSantaRestTime;
|
||||||
|
document.querySelector('#MinSantaRestTime').value = config.Santa.MinSantaRestTime;
|
||||||
|
document.querySelector('#MaxPresentFallSpeed').value = config.Santa.MaxPresentFallSpeed;
|
||||||
|
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('#EnableSnowflakes').checked = config.Snowflakes.EnableSnowflakes;
|
||||||
|
document.querySelector('#EnableRandomSnowflakes').checked = config.Snowflakes.EnableRandomSnowflakes;
|
||||||
|
document.querySelector('#EnableRandomSnowflakesMobile').checked = config.Snowflakes.EnableRandomSnowflakesMobile;
|
||||||
|
document.querySelector('#EnableColoredSnowflakes').checked = config.Snowflakes.EnableColoredSnowflakes;
|
||||||
|
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;
|
||||||
|
document.querySelector('#SnowstormSpeed').value = config.Snowstorm.Speed;
|
||||||
|
document.querySelector('#SnowstormHorizontalWind').value = config.Snowstorm.HorizontalWind;
|
||||||
|
document.querySelector('#SnowstormVerticalVariation').value = config.Snowstorm.VerticalVariation;
|
||||||
|
|
||||||
|
// Space
|
||||||
|
|
||||||
|
document.querySelector('#EnableSpace').checked = config.Space.EnableSpace || false;
|
||||||
|
document.querySelector('#EnableRandomSymbolsSpace').checked = config.Space.EnableRandomSymbols || false;
|
||||||
|
document.querySelector('#EnableRandomSymbolsMobileSpace').checked = config.Space.EnableRandomSymbolsMobile || 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;
|
||||||
|
|
||||||
|
// Spooky
|
||||||
|
|
||||||
|
document.querySelector('#SpookyCount').value = config.Spooky.SymbolCount !== undefined ? config.Spooky.SymbolCount : 25;
|
||||||
|
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;
|
||||||
|
|
||||||
|
// 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 savedBalls = savedBallsString.split(',');
|
||||||
|
document.querySelector('#EnableSports').checked = config.Sports.EnableSports !== false;
|
||||||
|
document.querySelector('#EnableRandomSymbolsSports').checked = config.Sports.EnableRandomSymbols !== false;
|
||||||
|
document.querySelector('#EnableRandomSymbolsMobileSports').checked = config.Sports.EnableRandomSymbolsMobile === true;
|
||||||
|
document.querySelector('#EnableDifferentDurationSports').checked = config.Sports.EnableDifferentDuration !== false;
|
||||||
|
document.querySelector('#SportsSymbolCount').value = config.Sports.SymbolCount || 25;
|
||||||
|
document.querySelector('#TurfColor').value = config.Sports.TurfColor || '#228b22';
|
||||||
|
document.querySelector('#EnableTrophy').checked = config.Sports.EnableTrophy !== false;
|
||||||
|
document.querySelectorAll('.sport-ball-cb').forEach(cb => {
|
||||||
|
|
||||||
// Spring
|
// Spring
|
||||||
|
|
||||||
document.querySelector('#EnableSpring').checked = config.Spring.EnableSpring;
|
document.querySelector('#EnableSpring').checked = config.Spring.EnableSpring;
|
||||||
document.querySelector('#EnableSpringSunbeams').checked = config.Spring.EnableSpringSunbeams !== undefined ? config.Spring.EnableSpringSunbeams : true;
|
document.querySelector('#EnableSpringSunbeams').checked = config.Spring.EnableSpringSunbeams !== undefined ? config.Spring.EnableSpringSunbeams : true;
|
||||||
document.querySelector('#SpringPollenCount').value = config.Spring.PollenCount;
|
document.querySelector('#SpringPollenCount').value = config.Spring.PollenCount;
|
||||||
@@ -1963,7 +2016,16 @@
|
|||||||
document.querySelector('#EnableRandomSpringMobile').checked = config.Spring.EnableRandomSpringMobile;
|
document.querySelector('#EnableRandomSpringMobile').checked = config.Spring.EnableRandomSpringMobile;
|
||||||
document.querySelector('#EnableDifferentDurationSpring').checked = config.Spring.EnableDifferentDuration;
|
document.querySelector('#EnableDifferentDurationSpring').checked = config.Spring.EnableDifferentDuration;
|
||||||
|
|
||||||
|
// 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
|
// Summer
|
||||||
|
|
||||||
document.querySelector('#EnableSummer').checked = config.Summer.EnableSummer;
|
document.querySelector('#EnableSummer').checked = config.Summer.EnableSummer;
|
||||||
document.querySelector('#SummerBubbleCount').value = config.Summer.BubbleCount;
|
document.querySelector('#SummerBubbleCount').value = config.Summer.BubbleCount;
|
||||||
document.querySelector('#SummerDustCount').value = config.Summer.DustCount;
|
document.querySelector('#SummerDustCount').value = config.Summer.DustCount;
|
||||||
@@ -1971,88 +2033,29 @@
|
|||||||
document.querySelector('#EnableRandomSummerMobile').checked = config.Summer.EnableRandomSummerMobile;
|
document.querySelector('#EnableRandomSummerMobile').checked = config.Summer.EnableRandomSummerMobile;
|
||||||
document.querySelector('#EnableDifferentDurationSummer').checked = config.Summer.EnableDifferentDuration;
|
document.querySelector('#EnableDifferentDurationSummer').checked = config.Summer.EnableDifferentDuration;
|
||||||
|
|
||||||
// Carnival
|
// Support for both new category string and legacy filename strings
|
||||||
document.querySelector('#EnableCarnival').checked = config.Carnival.EnableCarnival;
|
cb.checked = savedBalls.some(b => b === cb.value || b.startsWith(cb.value + '_'));
|
||||||
document.querySelector('#EnableCarnivalSway').checked = config.Carnival.EnableCarnivalSway !== undefined ? config.Carnival.EnableCarnivalSway : true;
|
});
|
||||||
document.querySelector('#CarnivalObjectCount').value = config.Carnival.ObjectCount;
|
|
||||||
document.querySelector('#EnableRandomCarnival').checked = config.Carnival.EnableRandomCarnival;
|
|
||||||
document.querySelector('#EnableRandomCarnivalMobile').checked = config.Carnival.EnableRandomCarnivalMobile;
|
|
||||||
document.querySelector('#EnableDifferentDurationCarnival').checked = config.Carnival.EnableDifferentDuration;
|
|
||||||
|
|
||||||
// Cherry Blossom
|
|
||||||
document.querySelector('#EnableCherryBlossom').checked = config.CherryBlossom.EnableCherryBlossom;
|
|
||||||
document.querySelector('#CherryBlossomPetalCount').value = config.CherryBlossom.PetalCount;
|
|
||||||
document.querySelector('#EnableRandomCherryBlossom').checked = config.CherryBlossom.EnableRandomCherryBlossom;
|
|
||||||
document.querySelector('#EnableRandomCherryBlossomMobile').checked = config.CherryBlossom.EnableRandomCherryBlossomMobile;
|
|
||||||
document.querySelector('#EnableDifferentDurationCherryBlossom').checked = config.CherryBlossom.EnableDifferentDuration;
|
|
||||||
|
|
||||||
// Earth Day
|
|
||||||
document.querySelector('#EnableEarthDay').checked = config.EarthDay.EnableEarthDay;
|
|
||||||
document.querySelector('#EarthDayVineCount').value = config.EarthDay.VineCount;
|
|
||||||
|
|
||||||
// Eurovision
|
|
||||||
document.querySelector('#EnableEurovision').checked = config.Eurovision.EnableEurovision;
|
|
||||||
document.querySelector('#EurovisionSymbolCount').value = config.Eurovision.SymbolCount;
|
|
||||||
document.querySelector('#EnableRandomEurovision').checked = config.Eurovision.EnableRandomEurovision;
|
|
||||||
document.querySelector('#EnableRandomEurovisionMobile').checked = config.Eurovision.EnableRandomEurovisionMobile;
|
|
||||||
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;
|
|
||||||
|
|
||||||
// Matrix
|
|
||||||
document.querySelector('#EnableMatrix').checked = config.Matrix.EnableMatrix;
|
|
||||||
document.querySelector('#MatrixSymbolCount').value = config.Matrix.SymbolCount;
|
|
||||||
document.querySelector('#MatrixChars').value = config.Matrix.MatrixChars !== undefined ? config.Matrix.MatrixChars : '0123456789';
|
|
||||||
document.querySelector('#EnableRandomMatrix').checked = config.Matrix.EnableRandomMatrix;
|
|
||||||
document.querySelector('#EnableRandomMatrixMobile').checked = config.Matrix.EnableRandomMatrixMobile;
|
|
||||||
document.querySelector('#EnableDifferentDurationMatrix').checked = config.Matrix.EnableDifferentDuration;
|
|
||||||
document.querySelector('#EnableMatrixBackground').checked = config.Matrix.EnableMatrixBackground !== undefined ? config.Matrix.EnableMatrixBackground : false;
|
|
||||||
|
|
||||||
// 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;
|
|
||||||
|
|
||||||
// Spooky Theme
|
|
||||||
document.querySelector('#EnableSpooky').checked = config.Spooky.EnableSpooky !== undefined ? config.Spooky.EnableSpooky : true;
|
|
||||||
document.querySelector('#SpookyCount').value = config.Spooky.SymbolCount !== undefined ? config.Spooky.SymbolCount : 25;
|
|
||||||
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;
|
|
||||||
|
|
||||||
// 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;
|
|
||||||
|
|
||||||
// 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;
|
|
||||||
|
|
||||||
// Underwater
|
// Underwater
|
||||||
config.Underwater = config.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('#UnderwaterSymbolCount').value = config.Underwater.SymbolCount || 15;
|
|
||||||
document.querySelector('#EnableRandomSymbolsUnderwater').checked = config.Underwater.EnableRandomSymbols !== false;
|
document.querySelector('#EnableRandomSymbolsUnderwater').checked = config.Underwater.EnableRandomSymbols !== false;
|
||||||
document.querySelector('#EnableRandomSymbolsMobileUnderwater').checked = config.Underwater.EnableRandomSymbolsMobile === true;
|
document.querySelector('#EnableRandomSymbolsMobileUnderwater').checked = config.Underwater.EnableRandomSymbolsMobile === true;
|
||||||
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('#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;
|
||||||
|
config.Underwater = config.Underwater || {};
|
||||||
|
document.querySelector('#EnableUnderwaterLightRays').checked = config.Underwater.EnableLightRays !== false;
|
||||||
|
document.querySelector('#UnderwaterSymbolCount').value = config.Underwater.SymbolCount || 15;
|
||||||
|
|
||||||
// Birthday
|
|
||||||
config.Birthday = config.Birthday || {};
|
|
||||||
document.querySelector('#EnableBirthday').checked = config.Birthday.EnableBirthday !== false;
|
|
||||||
document.querySelector('#EnableGarland').checked = config.Birthday.EnableGarland !== false;
|
|
||||||
document.querySelector('#BirthdaySymbolCount').value = config.Birthday.SymbolCount || 25;
|
|
||||||
document.querySelector('#BirthdayConfettiCount').value = config.Birthday.ConfettiCount || 60;
|
|
||||||
document.querySelector('#EnableRandomSymbolsBirthday').checked = config.Birthday.EnableRandomSymbols !== false;
|
|
||||||
document.querySelector('#EnableRandomSymbolsMobileBirthday').checked = config.Birthday.EnableRandomSymbolsMobile === true;
|
|
||||||
document.querySelector('#EnableDifferentDurationBirthday').checked = config.Birthday.EnableDifferentDuration !== false;
|
|
||||||
|
|
||||||
Dashboard.hideLoadingMsg();
|
Dashboard.hideLoadingMsg();
|
||||||
});
|
});
|
||||||
@@ -2079,22 +2082,6 @@
|
|||||||
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;
|
||||||
|
|
||||||
// Friday13
|
|
||||||
if (!config.Friday13) config.Friday13 = {};
|
|
||||||
config.Friday13.EnableFriday13 = document.querySelector('#EnableFriday13').checked;
|
|
||||||
config.Friday13.SymbolCount = parseInt(document.querySelector('#Friday13SymbolCount').value);
|
|
||||||
config.Friday13.EnableRandomSymbols = document.querySelector('#EnableRandomFriday13').checked;
|
|
||||||
config.Friday13.EnableRandomSymbolsMobile = document.querySelector('#EnableRandomFriday13Mobile').checked;
|
|
||||||
config.Friday13.EnableDifferentDuration = document.querySelector('#EnableDifferentDurationFriday13').checked;
|
|
||||||
|
|
||||||
// Eid
|
|
||||||
if (!config.Eid) config.Eid = {};
|
|
||||||
config.Eid.EnableEid = document.querySelector('#EnableEid').checked;
|
|
||||||
config.Eid.EnableRandomSymbols = document.querySelector('#EnableRandomEid').checked;
|
|
||||||
config.Eid.EnableRandomSymbolsMobile = document.querySelector('#EnableRandomEidMobile').checked;
|
|
||||||
config.Eid.EnableDifferentDuration = document.querySelector('#EnableDifferentDurationEid').checked;
|
|
||||||
config.Eid.SymbolCount = parseInt(document.querySelector('#EidSymbolCount').value);
|
|
||||||
|
|
||||||
// Legacy Halloween
|
// Legacy Halloween
|
||||||
if (!config.LegacyHalloween) config.LegacyHalloween = {};
|
if (!config.LegacyHalloween) config.LegacyHalloween = {};
|
||||||
config.LegacyHalloween.SymbolCount = parseInt(document.querySelector('#LegacyHalloweenSymbolCount').value);
|
config.LegacyHalloween.SymbolCount = parseInt(document.querySelector('#LegacyHalloweenSymbolCount').value);
|
||||||
@@ -2339,7 +2326,7 @@
|
|||||||
config.Underwater.EnableRandomSymbolsMobile = document.querySelector('#EnableRandomUnderwaterMobile').checked;
|
config.Underwater.EnableRandomSymbolsMobile = document.querySelector('#EnableRandomUnderwaterMobile').checked;
|
||||||
config.Underwater.EnableDifferentDuration = document.querySelector('#EnableDifferentDurationUnderwater').checked;
|
config.Underwater.EnableDifferentDuration = document.querySelector('#EnableDifferentDurationUnderwater').checked;
|
||||||
|
|
||||||
// New Themes
|
// Simple Themes (just on/off toggles)
|
||||||
config.Frost.EnableFrost = document.querySelector('#EnableFrost').checked;
|
config.Frost.EnableFrost = document.querySelector('#EnableFrost').checked;
|
||||||
config.FilmNoir.EnableFilmNoir = document.querySelector('#EnableFilmNoir').checked;
|
config.FilmNoir.EnableFilmNoir = document.querySelector('#EnableFilmNoir').checked;
|
||||||
config.Oscar.EnableOscar = document.querySelector('#EnableOscar').checked;
|
config.Oscar.EnableOscar = document.querySelector('#EnableOscar').checked;
|
||||||
@@ -2446,13 +2433,6 @@
|
|||||||
config.Olympia.EnableRandomSymbolsMobile = document.querySelector('#EnableRandomSymbolsMobileOlympia').checked;
|
config.Olympia.EnableRandomSymbolsMobile = document.querySelector('#EnableRandomSymbolsMobileOlympia').checked;
|
||||||
config.Olympia.EnableDifferentDuration = document.querySelector('#EnableDifferentDurationOlympia').checked;
|
config.Olympia.EnableDifferentDuration = document.querySelector('#EnableDifferentDurationOlympia').checked;
|
||||||
|
|
||||||
// Pi-Day
|
|
||||||
config.PiDay.EnablePiDay = document.querySelector('#EnablePiDay').checked;
|
|
||||||
config.PiDay.SymbolCount = parseInt(document.querySelector('#PiDaySymbolCount').value);
|
|
||||||
config.PiDay.EnableRandomPiDay = document.querySelector('#EnableRandomPiDay').checked;
|
|
||||||
config.PiDay.EnableRandomPiDayMobile = document.querySelector('#EnableRandomPiDayMobile').checked;
|
|
||||||
config.PiDay.EnableDifferentDuration = document.querySelector('#EnableDifferentDurationPiDay').checked;
|
|
||||||
|
|
||||||
// Pride
|
// Pride
|
||||||
config.Pride.EnablePride = document.querySelector('#EnablePride').checked;
|
config.Pride.EnablePride = document.querySelector('#EnablePride').checked;
|
||||||
config.Pride.HeartCount = parseInt(document.querySelector('#PrideHeartCount').value);
|
config.Pride.HeartCount = parseInt(document.querySelector('#PrideHeartCount').value);
|
||||||
|
|||||||
@@ -12,7 +12,7 @@
|
|||||||
<!-- <TreatWarningsAsErrors>false</TreatWarningsAsErrors> -->
|
<!-- <TreatWarningsAsErrors>false</TreatWarningsAsErrors> -->
|
||||||
<Title>Jellyfin Seasonals Plugin</Title>
|
<Title>Jellyfin Seasonals Plugin</Title>
|
||||||
<Authors>CodeDevMLH</Authors>
|
<Authors>CodeDevMLH</Authors>
|
||||||
<Version>2.0.0.0</Version>
|
<Version>2.0.0.1</Version>
|
||||||
<RepositoryUrl>https://github.com/CodeDevMLH/Jellyfin-Seasonals</RepositoryUrl>
|
<RepositoryUrl>https://github.com/CodeDevMLH/Jellyfin-Seasonals</RepositoryUrl>
|
||||||
</PropertyGroup>
|
</PropertyGroup>
|
||||||
|
|
||||||
|
|||||||
@@ -1,164 +1,139 @@
|
|||||||
.autumn-container {
|
.autumn-container {
|
||||||
display: block;
|
display: block;
|
||||||
position: fixed;
|
position: fixed;
|
||||||
overflow: hidden;
|
overflow: hidden;
|
||||||
top: 0;
|
top: 0;
|
||||||
left: 0;
|
left: 0;
|
||||||
width: 100%;
|
width: 100%;
|
||||||
height: 100%;
|
height: 100%;
|
||||||
pointer-events: none;
|
pointer-events: none;
|
||||||
z-index: 10;
|
z-index: 10;
|
||||||
contain: layout paint;
|
contain: layout paint;
|
||||||
}
|
}
|
||||||
|
|
||||||
.leaf {
|
.leaf {
|
||||||
position: fixed;
|
position: fixed;
|
||||||
z-index: 15;
|
z-index: 15;
|
||||||
top: 0;
|
top: 0;
|
||||||
will-change: transform;
|
will-change: transform;
|
||||||
translate: 0 -10vh;
|
translate: 0 -10vh;
|
||||||
font-size: 1em;
|
font-size: 1em;
|
||||||
color: #fff;
|
color: #fff;
|
||||||
font-family: Arial, sans-serif;
|
font-family: Arial, sans-serif;
|
||||||
text-shadow: 0 0 5px #000;
|
text-shadow: 0 0 5px #000;
|
||||||
user-select: none;
|
user-select: none;
|
||||||
-webkit-user-select: none;
|
cursor: default;
|
||||||
cursor: default;
|
animation-name: leaf-fall, leaf-shake;
|
||||||
-webkit-animation-name: leaf-fall, leaf-shake;
|
animation-duration: 7s, 4s;
|
||||||
-webkit-animation-duration: 7s, 4s;
|
animation-timing-function: linear, ease-in-out;
|
||||||
-webkit-animation-timing-function: linear, ease-in-out;
|
animation-iteration-count: infinite, infinite;
|
||||||
-webkit-animation-iteration-count: infinite, infinite;
|
}
|
||||||
-webkit-user-select: none;
|
|
||||||
animation-name: leaf-fall, leaf-shake;
|
/* Class to disable rotation */
|
||||||
animation-duration: 7s, 4s;
|
.no-rotation {
|
||||||
animation-timing-function: linear, ease-in-out;
|
--rotate-start: 0deg !important;
|
||||||
animation-iteration-count: infinite, infinite;
|
--rotate-end: 0deg !important;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Class to disable rotation */
|
|
||||||
.no-rotation {
|
@keyframes leaf-fall {
|
||||||
--rotate-start: 0deg !important;
|
0% {
|
||||||
--rotate-end: 0deg !important;
|
translate: 0 -10vh;
|
||||||
}
|
}
|
||||||
|
|
||||||
@-webkit-keyframes leaf-fall {
|
100% {
|
||||||
0% {
|
translate: 0 100vh;
|
||||||
translate: 0 -10vh;
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
100% {
|
|
||||||
translate: 0 100vh;
|
@keyframes leaf-shake {
|
||||||
}
|
0%, 100% {
|
||||||
}
|
transform: translateX(0) rotate(var(--rotate-start, -20deg));
|
||||||
|
}
|
||||||
@keyframes leaf-fall {
|
50% {
|
||||||
0% {
|
transform: translateX(80px) rotate(var(--rotate-end, 20deg));
|
||||||
translate: 0 -10vh;
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
100% {
|
.leaf:nth-of-type(0) {
|
||||||
translate: 0 100vh;
|
left: 0%;
|
||||||
}
|
animation-delay: 0s, 0s;
|
||||||
}
|
--rotate-start: -25deg;
|
||||||
|
--rotate-end: 22deg;
|
||||||
@-webkit-keyframes leaf-shake {
|
}
|
||||||
0%, 100% {
|
|
||||||
transform: translateX(0) rotate(var(--rotate-start, -20deg));
|
.leaf:nth-of-type(1) {
|
||||||
}
|
left: 10%;
|
||||||
50% {
|
animation-delay: 1s, 0.5s;
|
||||||
transform: translateX(80px) rotate(var(--rotate-end, 20deg));
|
--rotate-start: -32deg;
|
||||||
}
|
--rotate-end: 35deg;
|
||||||
}
|
}
|
||||||
|
|
||||||
@keyframes leaf-shake {
|
.leaf:nth-of-type(2) {
|
||||||
0%, 100% {
|
left: 20%;
|
||||||
transform: translateX(0) rotate(var(--rotate-start, -20deg));
|
animation-delay: 6s, 1s;
|
||||||
}
|
--rotate-start: -28deg;
|
||||||
50% {
|
--rotate-end: 28deg;
|
||||||
transform: translateX(80px) rotate(var(--rotate-end, 20deg));
|
}
|
||||||
}
|
|
||||||
}
|
.leaf:nth-of-type(3) {
|
||||||
|
left: 30%;
|
||||||
.leaf:nth-of-type(0) {
|
animation-delay: 4s, 1.5s;
|
||||||
left: 0%;
|
--rotate-start: -38deg;
|
||||||
animation-delay: 0s, 0s;
|
--rotate-end: 32deg;
|
||||||
--rotate-start: -25deg;
|
}
|
||||||
--rotate-end: 22deg;
|
|
||||||
}
|
.leaf:nth-of-type(4) {
|
||||||
|
left: 40%;
|
||||||
.leaf:nth-of-type(1) {
|
animation-delay: 2s, 0.8s;
|
||||||
left: 10%;
|
--rotate-start: -22deg;
|
||||||
animation-delay: 1s, 0.5s;
|
--rotate-end: 38deg;
|
||||||
--rotate-start: -32deg;
|
}
|
||||||
--rotate-end: 35deg;
|
|
||||||
}
|
.leaf:nth-of-type(5) {
|
||||||
|
left: 50%;
|
||||||
.leaf:nth-of-type(2) {
|
animation-delay: 8s, 2s;
|
||||||
left: 20%;
|
--rotate-start: -35deg;
|
||||||
animation-delay: 6s, 1s;
|
--rotate-end: 25deg;
|
||||||
--rotate-start: -28deg;
|
}
|
||||||
--rotate-end: 28deg;
|
|
||||||
}
|
.leaf:nth-of-type(6) {
|
||||||
|
left: 60%;
|
||||||
.leaf:nth-of-type(3) {
|
animation-delay: 6s, 1.2s;
|
||||||
left: 30%;
|
--rotate-start: -40deg;
|
||||||
animation-delay: 4s, 1.5s;
|
--rotate-end: 40deg;
|
||||||
--rotate-start: -38deg;
|
}
|
||||||
--rotate-end: 32deg;
|
|
||||||
}
|
.leaf:nth-of-type(7) {
|
||||||
|
left: 70%;
|
||||||
.leaf:nth-of-type(4) {
|
animation-delay: 2.5s, 0.3s;
|
||||||
left: 40%;
|
--rotate-start: -30deg;
|
||||||
animation-delay: 2s, 0.8s;
|
--rotate-end: 30deg;
|
||||||
--rotate-start: -22deg;
|
}
|
||||||
--rotate-end: 38deg;
|
|
||||||
}
|
.leaf:nth-of-type(8) {
|
||||||
|
left: 80%;
|
||||||
.leaf:nth-of-type(5) {
|
animation-delay: 1s, 1.8s;
|
||||||
left: 50%;
|
--rotate-start: -26deg;
|
||||||
animation-delay: 8s, 2s;
|
--rotate-end: 36deg;
|
||||||
--rotate-start: -35deg;
|
}
|
||||||
--rotate-end: 25deg;
|
|
||||||
}
|
.leaf:nth-of-type(9) {
|
||||||
|
left: 90%;
|
||||||
.leaf:nth-of-type(6) {
|
animation-delay: 3s, 0.7s;
|
||||||
left: 60%;
|
--rotate-start: -34deg;
|
||||||
animation-delay: 6s, 1.2s;
|
--rotate-end: 24deg;
|
||||||
--rotate-start: -40deg;
|
}
|
||||||
--rotate-end: 40deg;
|
|
||||||
}
|
.leaf:nth-of-type(10) {
|
||||||
|
left: 25%;
|
||||||
.leaf:nth-of-type(7) {
|
animation-delay: 2s, 2.3s;
|
||||||
left: 70%;
|
--rotate-start: -29deg;
|
||||||
animation-delay: 2.5s, 0.3s;
|
--rotate-end: 33deg;
|
||||||
--rotate-start: -30deg;
|
}
|
||||||
--rotate-end: 30deg;
|
|
||||||
}
|
.leaf:nth-of-type(11) {
|
||||||
|
left: 65%;
|
||||||
.leaf:nth-of-type(8) {
|
animation-delay: 4s, 1.4s;
|
||||||
left: 80%;
|
|
||||||
animation-delay: 1s, 1.8s;
|
|
||||||
--rotate-start: -26deg;
|
|
||||||
--rotate-end: 36deg;
|
|
||||||
}
|
|
||||||
|
|
||||||
.leaf:nth-of-type(9) {
|
|
||||||
left: 90%;
|
|
||||||
animation-delay: 3s, 0.7s;
|
|
||||||
--rotate-start: -34deg;
|
|
||||||
--rotate-end: 24deg;
|
|
||||||
}
|
|
||||||
|
|
||||||
.leaf:nth-of-type(10) {
|
|
||||||
left: 25%;
|
|
||||||
animation-delay: 2s, 2.3s;
|
|
||||||
--rotate-start: -29deg;
|
|
||||||
--rotate-end: 33deg;
|
|
||||||
}
|
|
||||||
|
|
||||||
.leaf:nth-of-type(11) {
|
|
||||||
left: 65%;
|
|
||||||
animation-delay: 4s, 1.4s;
|
|
||||||
--rotate-start: -37deg;
|
|
||||||
--rotate-end: 27deg;
|
|
||||||
--rotate-start: -37deg;
|
--rotate-start: -37deg;
|
||||||
@@ -5,12 +5,14 @@
|
|||||||
width: 100vw;
|
width: 100vw;
|
||||||
height: 100vh;
|
height: 100vh;
|
||||||
pointer-events: none;
|
pointer-events: none;
|
||||||
z-index: 9999;
|
z-index: 10;
|
||||||
overflow: hidden;
|
overflow: hidden;
|
||||||
contain: strict;
|
contain: strict;
|
||||||
|
contain: layout paint;
|
||||||
}
|
}
|
||||||
|
|
||||||
.birthday-symbol {
|
.birthday-symbol {
|
||||||
|
will-change: opacity;
|
||||||
position: fixed;
|
position: fixed;
|
||||||
top: 0;
|
top: 0;
|
||||||
left: 0;
|
left: 0;
|
||||||
@@ -29,7 +31,7 @@
|
|||||||
}
|
}
|
||||||
|
|
||||||
.birthday-inner {
|
.birthday-inner {
|
||||||
pointer-events: auto; /* Allow hover over the actual item */
|
pointer-events: auto;
|
||||||
cursor: crosshair;
|
cursor: crosshair;
|
||||||
display: inline-block;
|
display: inline-block;
|
||||||
}
|
}
|
||||||
@@ -138,7 +140,7 @@
|
|||||||
opacity: 1;
|
opacity: 1;
|
||||||
}
|
}
|
||||||
100% {
|
100% {
|
||||||
transform: translateY(calc(var(--burst-y) + 150px)); /* Gravity pull downwards */
|
transform: translateY(calc(var(--burst-y) + 150px));
|
||||||
opacity: 0;
|
opacity: 0;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -228,7 +228,19 @@ function createBirthday() {
|
|||||||
// Ensure the burst container is appended to the main document body or the birthday container
|
// Ensure the burst container is appended to the main document body or the birthday container
|
||||||
createBalloonPopConfetti(document.body, cx, cy, balloonColors[randomItem]);
|
createBalloonPopConfetti(document.body, cx, cy, balloonColors[randomItem]);
|
||||||
}
|
}
|
||||||
}, { once: true });
|
});
|
||||||
|
|
||||||
|
// Reset the balloon when it reappears at the bottom of the screen
|
||||||
|
symbol.addEventListener('animationiteration', function(e) {
|
||||||
|
// Ignore bubbling events from the inner sway animation
|
||||||
|
if (e.animationName === 'birthday-rise' || e.target === symbol) {
|
||||||
|
if (innerDiv.classList.contains('popped')) {
|
||||||
|
innerDiv.classList.remove('popped');
|
||||||
|
innerDiv.style.animation = '';
|
||||||
|
innerDiv.style.pointerEvents = 'auto';
|
||||||
|
}
|
||||||
|
}
|
||||||
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
const startRot = (Math.random() * 20) - 10; // -10 to +10 spread
|
const startRot = (Math.random() * 20) - 10; // -10 to +10 spread
|
||||||
|
|||||||
@@ -41,7 +41,6 @@ function toggleCarnival() {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// observe changes in the DOM
|
|
||||||
const observer = new MutationObserver(toggleCarnival);
|
const observer = new MutationObserver(toggleCarnival);
|
||||||
observer.observe(document.body, {
|
observer.observe(document.body, {
|
||||||
childList: true,
|
childList: true,
|
||||||
|
|||||||
@@ -1,138 +1,112 @@
|
|||||||
.christmas-container {
|
.christmas-container {
|
||||||
display: block;
|
display: block;
|
||||||
position: fixed;
|
position: fixed;
|
||||||
overflow: hidden;
|
overflow: hidden;
|
||||||
top: 0;
|
top: 0;
|
||||||
left: 0;
|
left: 0;
|
||||||
width: 100%;
|
width: 100%;
|
||||||
height: 100%;
|
height: 100%;
|
||||||
pointer-events: none;
|
pointer-events: none;
|
||||||
z-index: 10;
|
z-index: 10;
|
||||||
contain: layout paint;
|
contain: layout paint;
|
||||||
}
|
}
|
||||||
|
|
||||||
.christmas {
|
.christmas {
|
||||||
position: fixed;
|
position: fixed;
|
||||||
z-index: 15;
|
z-index: 15;
|
||||||
top: 0;
|
top: 0;
|
||||||
will-change: transform;
|
will-change: transform;
|
||||||
translate: 0 -10vh;
|
translate: 0 -10vh;
|
||||||
font-size: 1em;
|
font-size: 1em;
|
||||||
color: #fff;
|
color: #fff;
|
||||||
font-family: Arial, sans-serif;
|
font-family: Arial, sans-serif;
|
||||||
text-shadow: 0 0 5px #000;
|
text-shadow: 0 0 5px #000;
|
||||||
user-select: none;
|
user-select: none;
|
||||||
cursor: default;
|
cursor: default;
|
||||||
-webkit-user-select: none;
|
animation-name: christmas-fall, christmas-shake;
|
||||||
-webkit-animation-name: christmas-fall, christmas-shake;
|
animation-duration: 10s, 3s;
|
||||||
-webkit-animation-duration: 10s, 3s;
|
animation-timing-function: linear, ease-in-out;
|
||||||
-webkit-animation-timing-function: linear, ease-in-out;
|
animation-iteration-count: infinite, infinite;
|
||||||
-webkit-animation-iteration-count: infinite, infinite;
|
}
|
||||||
animation-name: christmas-fall, christmas-shake;
|
|
||||||
animation-duration: 10s, 3s;
|
|
||||||
animation-timing-function: linear, ease-in-out;
|
|
||||||
animation-iteration-count: infinite, infinite;
|
@keyframes christmas-fall {
|
||||||
}
|
0% {
|
||||||
|
translate: 0 -10vh;
|
||||||
@-webkit-keyframes christmas-fall {
|
}
|
||||||
0% {
|
|
||||||
translate: 0 -10vh;
|
100% {
|
||||||
}
|
translate: 0 110vh;
|
||||||
|
}
|
||||||
100% {
|
}
|
||||||
translate: 0 110vh;
|
|
||||||
}
|
@keyframes christmas-shake {
|
||||||
}
|
0%,
|
||||||
|
100% {
|
||||||
@-webkit-keyframes christmas-shake {
|
transform: translateX(0);
|
||||||
|
}
|
||||||
0%,
|
|
||||||
100% {
|
50% {
|
||||||
transform: translateX(0);
|
transform: translateX(80px);
|
||||||
}
|
}
|
||||||
|
}
|
||||||
50% {
|
|
||||||
transform: translateX(80px);
|
.christmas:nth-of-type(0) {
|
||||||
}
|
left: 0%;
|
||||||
}
|
animation-delay: 0s, 0s;
|
||||||
|
}
|
||||||
@keyframes christmas-fall {
|
|
||||||
0% {
|
.christmas:nth-of-type(1) {
|
||||||
translate: 0 -10vh;
|
left: 10%;
|
||||||
}
|
animation-delay: 1s, 1s;
|
||||||
|
}
|
||||||
100% {
|
|
||||||
translate: 0 110vh;
|
.christmas:nth-of-type(2) {
|
||||||
}
|
left: 20%;
|
||||||
}
|
animation-delay: 6s, 0.5s;
|
||||||
|
}
|
||||||
@keyframes christmas-shake {
|
|
||||||
0%,
|
.christmas:nth-of-type(3) {
|
||||||
100% {
|
left: 30%;
|
||||||
transform: translateX(0);
|
animation-delay: 4s, 2s;
|
||||||
}
|
}
|
||||||
|
|
||||||
50% {
|
.christmas:nth-of-type(4) {
|
||||||
transform: translateX(80px);
|
left: 40%;
|
||||||
}
|
animation-delay: 2s, 2s;
|
||||||
}
|
}
|
||||||
|
|
||||||
.christmas:nth-of-type(0) {
|
.christmas:nth-of-type(5) {
|
||||||
left: 0%;
|
left: 50%;
|
||||||
animation-delay: 0s, 0s;
|
animation-delay: 8s, 3s;
|
||||||
}
|
}
|
||||||
|
|
||||||
.christmas:nth-of-type(1) {
|
.christmas:nth-of-type(6) {
|
||||||
left: 10%;
|
left: 60%;
|
||||||
animation-delay: 1s, 1s;
|
animation-delay: 6s, 2s;
|
||||||
}
|
}
|
||||||
|
|
||||||
.christmas:nth-of-type(2) {
|
.christmas:nth-of-type(7) {
|
||||||
left: 20%;
|
left: 70%;
|
||||||
animation-delay: 6s, 0.5s;
|
animation-delay: 2.5s, 1s;
|
||||||
}
|
}
|
||||||
|
|
||||||
.christmas:nth-of-type(3) {
|
.christmas:nth-of-type(8) {
|
||||||
left: 30%;
|
left: 80%;
|
||||||
animation-delay: 4s, 2s;
|
animation-delay: 1s, 0s;
|
||||||
}
|
}
|
||||||
|
|
||||||
.christmas:nth-of-type(4) {
|
.christmas:nth-of-type(9) {
|
||||||
left: 40%;
|
left: 90%;
|
||||||
animation-delay: 2s, 2s;
|
animation-delay: 3s, 1.5s;
|
||||||
}
|
}
|
||||||
|
|
||||||
.christmas:nth-of-type(5) {
|
.christmas:nth-of-type(10) {
|
||||||
left: 50%;
|
left: 25%;
|
||||||
animation-delay: 8s, 3s;
|
animation-delay: 2s, 0s;
|
||||||
}
|
}
|
||||||
|
|
||||||
.christmas:nth-of-type(6) {
|
.christmas:nth-of-type(11) {
|
||||||
left: 60%;
|
left: 65%;
|
||||||
animation-delay: 6s, 2s;
|
|
||||||
}
|
|
||||||
|
|
||||||
.christmas:nth-of-type(7) {
|
|
||||||
left: 70%;
|
|
||||||
animation-delay: 2.5s, 1s;
|
|
||||||
}
|
|
||||||
|
|
||||||
.christmas:nth-of-type(8) {
|
|
||||||
left: 80%;
|
|
||||||
animation-delay: 1s, 0s;
|
|
||||||
}
|
|
||||||
|
|
||||||
.christmas:nth-of-type(9) {
|
|
||||||
left: 90%;
|
|
||||||
animation-delay: 3s, 1.5s;
|
|
||||||
}
|
|
||||||
|
|
||||||
.christmas:nth-of-type(10) {
|
|
||||||
left: 25%;
|
|
||||||
animation-delay: 2s, 0s;
|
|
||||||
}
|
|
||||||
|
|
||||||
.christmas:nth-of-type(11) {
|
|
||||||
left: 65%;
|
|
||||||
animation-delay: 4s, 2.5s;
|
|
||||||
animation-delay: 4s, 2.5s;
|
animation-delay: 4s, 2.5s;
|
||||||
@@ -7,9 +7,11 @@
|
|||||||
pointer-events: none;
|
pointer-events: none;
|
||||||
z-index: 1000;
|
z-index: 1000;
|
||||||
overflow: hidden;
|
overflow: hidden;
|
||||||
|
contain: layout paint;
|
||||||
}
|
}
|
||||||
|
|
||||||
.earthday-meadow {
|
.earthday-meadow {
|
||||||
|
will-change: transform;
|
||||||
position: absolute;
|
position: absolute;
|
||||||
bottom: 0;
|
bottom: 0;
|
||||||
left: 0;
|
left: 0;
|
||||||
@@ -25,6 +27,7 @@
|
|||||||
}
|
}
|
||||||
|
|
||||||
.earthday-sway {
|
.earthday-sway {
|
||||||
|
will-change: transform;
|
||||||
transform-origin: bottom center;
|
transform-origin: bottom center;
|
||||||
animation: sway-grass 4s ease-in-out infinite alternate;
|
animation: sway-grass 4s ease-in-out infinite alternate;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -9,6 +9,7 @@
|
|||||||
z-index: 10000;
|
z-index: 10000;
|
||||||
contain: strict;
|
contain: strict;
|
||||||
overflow: hidden;
|
overflow: hidden;
|
||||||
|
contain: layout paint;
|
||||||
}
|
}
|
||||||
|
|
||||||
.easter-grass-container {
|
.easter-grass-container {
|
||||||
@@ -38,6 +39,7 @@
|
|||||||
|
|
||||||
/* sway */
|
/* sway */
|
||||||
.easter-sway {
|
.easter-sway {
|
||||||
|
will-change: transform;
|
||||||
transform-origin: bottom center;
|
transform-origin: bottom center;
|
||||||
animation: easter-wind-sway 6s ease-in-out infinite alternate;
|
animation: easter-wind-sway 6s ease-in-out infinite alternate;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -2,17 +2,18 @@ const config = window.SeasonalsPluginConfig?.Easter || {};
|
|||||||
|
|
||||||
const easter = config.EnableEaster !== undefined ? config.EnableEaster : true;
|
const easter = config.EnableEaster !== undefined ? config.EnableEaster : true;
|
||||||
const enableBunny = config.EnableBunny !== undefined ? config.EnableBunny : true;
|
const enableBunny = config.EnableBunny !== undefined ? config.EnableBunny : true;
|
||||||
|
const minBunnyRestTime = config.MinBunnyRestTime || 2000;
|
||||||
|
const maxBunnyRestTime = config.MaxBunnyRestTime || 5000;
|
||||||
|
const eggCount = config.EggCount || 15;
|
||||||
|
|
||||||
/* MARK: Bunny movement config */
|
/* MARK: Bunny movement config */
|
||||||
const jumpDistanceVw = 5; // Distance in vw the bunny covers per jump
|
const jumpDistanceVw = 5; // Distance in vw the bunny covers per jump
|
||||||
const jumpDurationMs = 770; // Time in ms the bunny spends moving during a jump
|
const jumpDurationMs = 770; // Time in ms the bunny spends moving during a jump
|
||||||
const pauseDurationMs = 116.6666; // Time in ms the bunny pauses between jumps
|
const pauseDurationMs = 116.6666; // Time in ms the bunny pauses between jumps
|
||||||
|
|
||||||
const minBunnyRestTime = config.MinBunnyRestTime || 2000;
|
|
||||||
const maxBunnyRestTime = config.MaxBunnyRestTime || 5000;
|
|
||||||
const eggCount = config.EggCount || 15;
|
|
||||||
|
|
||||||
const rabbit = "../Seasonals/Resources/easter_images/Osterhase.gif";
|
const rabbit = "../Seasonals/Resources/easter_images/Osterhase.gif";
|
||||||
|
|
||||||
|
// Credit: https://flaticon.com
|
||||||
const easterEggImages = [
|
const easterEggImages = [
|
||||||
"../Seasonals/Resources/easter_images/egg_1.png",
|
"../Seasonals/Resources/easter_images/egg_1.png",
|
||||||
"../Seasonals/Resources/easter_images/egg_2.png",
|
"../Seasonals/Resources/easter_images/egg_2.png",
|
||||||
@@ -197,6 +198,8 @@ function animateRabbit(rabbit) {
|
|||||||
|
|
||||||
rabbit.style.transition = 'none';
|
rabbit.style.transition = 'none';
|
||||||
const transformScale = startFromLeft ? 'scaleX(-1)' : '';
|
const transformScale = startFromLeft ? 'scaleX(-1)' : '';
|
||||||
|
// Set bounding box center-of-gravity shift when graphic is flipped
|
||||||
|
rabbit.style.transformOrigin = startFromLeft ? '59% 50%' : '50% 50%';
|
||||||
rabbit.style.transform = `translateX(${currentX}vw) ${transformScale}`;
|
rabbit.style.transform = `translateX(${currentX}vw) ${transformScale}`;
|
||||||
|
|
||||||
const loopDurationMs = jumpDurationMs + pauseDurationMs;
|
const loopDurationMs = jumpDurationMs + pauseDurationMs;
|
||||||
@@ -211,10 +214,8 @@ function animateRabbit(rabbit) {
|
|||||||
|
|
||||||
if (!startTime) {
|
if (!startTime) {
|
||||||
startTime = timestamp;
|
startTime = timestamp;
|
||||||
// resetting gif, forces the browser to restart the GIF from the first frame (crucial for syncing hops with movement)
|
|
||||||
const currSrc = rabbit.src.split('?')[0];
|
const currSrc = rabbit.src.split('?')[0];
|
||||||
rabbit.src = '';
|
rabbit.src = currSrc + '?t=' + Date.now();
|
||||||
rabbit.src = currSrc;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
const elapsed = timestamp - startTime;
|
const elapsed = timestamp - startTime;
|
||||||
@@ -234,7 +235,6 @@ function animateRabbit(rabbit) {
|
|||||||
|
|
||||||
currentX = startX + (completedLoops * jumpDistanceVw + currentLoopDistance) * direction;
|
currentX = startX + (completedLoops * jumpDistanceVw + currentLoopDistance) * direction;
|
||||||
|
|
||||||
// Update DOM without CSS transitions
|
|
||||||
rabbit.style.transform = `translateX(${currentX}vw) ${transformScale}`;
|
rabbit.style.transform = `translateX(${currentX}vw) ${transformScale}`;
|
||||||
|
|
||||||
// Check if finished crossing
|
// Check if finished crossing
|
||||||
@@ -243,6 +243,7 @@ function animateRabbit(rabbit) {
|
|||||||
|
|
||||||
isAnimating = false;
|
isAnimating = false;
|
||||||
rabbitTimeout = setTimeout(() => {
|
rabbitTimeout = setTimeout(() => {
|
||||||
|
if (!document.body.contains(rabbit)) return;
|
||||||
animateRabbit(document.querySelector('#rabbit'));
|
animateRabbit(document.querySelector('#rabbit'));
|
||||||
}, restTime);
|
}, restTime);
|
||||||
return;
|
return;
|
||||||
|
|||||||
@@ -9,6 +9,7 @@
|
|||||||
z-index: 10;
|
z-index: 10;
|
||||||
contain: strict;
|
contain: strict;
|
||||||
overflow: hidden;
|
overflow: hidden;
|
||||||
|
contain: layout paint;
|
||||||
}
|
}
|
||||||
|
|
||||||
.eid-symbol {
|
.eid-symbol {
|
||||||
@@ -18,12 +19,14 @@
|
|||||||
}
|
}
|
||||||
|
|
||||||
.eid-symbol.floating-star {
|
.eid-symbol.floating-star {
|
||||||
|
will-change: opacity;
|
||||||
opacity: 0;
|
opacity: 0;
|
||||||
animation: eid-twinkle 4s ease-in-out infinite;
|
animation: eid-twinkle 4s ease-in-out infinite;
|
||||||
mix-blend-mode: screen;
|
mix-blend-mode: screen;
|
||||||
}
|
}
|
||||||
|
|
||||||
.lantern-rope {
|
.lantern-rope {
|
||||||
|
will-change: transform;
|
||||||
position: absolute;
|
position: absolute;
|
||||||
top: 0;
|
top: 0;
|
||||||
width: 2px;
|
width: 2px;
|
||||||
|
|||||||
@@ -9,7 +9,6 @@ const glowSize = config.EurovisionGlowSize !== undefined ? config.EurovisionGlow
|
|||||||
|
|
||||||
let msgPrinted = false;
|
let msgPrinted = false;
|
||||||
|
|
||||||
// Toggle Function
|
|
||||||
function toggleEurovision() {
|
function toggleEurovision() {
|
||||||
const container = document.querySelector('.eurovision-container');
|
const container = document.querySelector('.eurovision-container');
|
||||||
if (!container) return;
|
if (!container) return;
|
||||||
|
|||||||
@@ -22,8 +22,9 @@
|
|||||||
|
|
||||||
/* Film grain */
|
/* Film grain */
|
||||||
.filmnoir-grain {
|
.filmnoir-grain {
|
||||||
|
will-change: transform, opacity;
|
||||||
position: absolute;
|
position: absolute;
|
||||||
top: -50%;
|
top: 0;
|
||||||
left: -50%;
|
left: -50%;
|
||||||
width: 200%;
|
width: 200%;
|
||||||
height: 200%;
|
height: 200%;
|
||||||
@@ -32,6 +33,7 @@
|
|||||||
pointer-events: none;
|
pointer-events: none;
|
||||||
mix-blend-mode: overlay;
|
mix-blend-mode: overlay;
|
||||||
opacity: 0.3;
|
opacity: 0.3;
|
||||||
|
translate: 0 -50vh;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Vignette */
|
/* Vignette */
|
||||||
@@ -48,6 +50,7 @@
|
|||||||
|
|
||||||
/* Occasional flicker and scratch */
|
/* Occasional flicker and scratch */
|
||||||
.filmnoir-scratches {
|
.filmnoir-scratches {
|
||||||
|
will-change: opacity;
|
||||||
position: absolute;
|
position: absolute;
|
||||||
top: 0;
|
top: 0;
|
||||||
left: 0;
|
left: 0;
|
||||||
|
|||||||
@@ -11,9 +11,10 @@
|
|||||||
}
|
}
|
||||||
|
|
||||||
.rocket-trail {
|
.rocket-trail {
|
||||||
|
will-change: transform;
|
||||||
position: absolute;
|
position: absolute;
|
||||||
left: var(--trailX);
|
left: var(--trailX);
|
||||||
top: var(--trailStartY);
|
top: 0;
|
||||||
width: 4px;
|
width: 4px;
|
||||||
|
|
||||||
/* activate the following for rocket trail */
|
/* activate the following for rocket trail */
|
||||||
@@ -28,6 +29,7 @@
|
|||||||
box-shadow: 0 0 8px 2px white;*/
|
box-shadow: 0 0 8px 2px white;*/
|
||||||
|
|
||||||
animation: rocket-trail-animation 1s linear forwards;
|
animation: rocket-trail-animation 1s linear forwards;
|
||||||
|
translate: 0 var(--trailStartY);
|
||||||
}
|
}
|
||||||
|
|
||||||
@keyframes rocket-trail-animation {
|
@keyframes rocket-trail-animation {
|
||||||
@@ -56,6 +58,7 @@
|
|||||||
}
|
}
|
||||||
|
|
||||||
.firework {
|
.firework {
|
||||||
|
will-change: transform;
|
||||||
position: absolute;
|
position: absolute;
|
||||||
width: 5px;
|
width: 5px;
|
||||||
height: 5px;
|
height: 5px;
|
||||||
|
|||||||
@@ -162,6 +162,7 @@ function startFireworks() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
fireworksInterval = setInterval(() => {
|
fireworksInterval = setInterval(() => {
|
||||||
|
if (!document.body.contains(fireworkContainer)) { clearInterval(fireworksInterval); return; }
|
||||||
const randomCount = Math.floor(Math.random() * maxFireworks) + minFireworks;
|
const randomCount = Math.floor(Math.random() * maxFireworks) + minFireworks;
|
||||||
for (let i = 0; i < randomCount; i++) {
|
for (let i = 0; i < randomCount; i++) {
|
||||||
setTimeout(() => {
|
setTimeout(() => {
|
||||||
|
|||||||
@@ -61,12 +61,12 @@ function createFriday13(container) {
|
|||||||
cat.parentNode.removeChild(cat);
|
cat.parentNode.removeChild(cat);
|
||||||
}
|
}
|
||||||
// Respawn with random delay between 5 to 25 seconds
|
// Respawn with random delay between 5 to 25 seconds
|
||||||
setTimeout(spawnCat, Math.random() * 20000 + 5000);
|
setTimeout(() => { if (document.body.contains(container)) spawnCat(); }, Math.random() * 20000 + 5000);
|
||||||
}, (catWalkDurationSeconds * 1000) + 500); // Wait for duration + 500ms safety margin
|
}, (catWalkDurationSeconds * 1000) + 500); // Wait for duration + 500ms safety margin
|
||||||
}
|
}
|
||||||
|
|
||||||
// Initial spawn with random delay
|
// Initial spawn with random delay
|
||||||
setTimeout(spawnCat, Math.random() * 5000);
|
setTimeout(() => { if (document.body.contains(container)) spawnCat(); }, Math.random() * 5000);
|
||||||
}
|
}
|
||||||
|
|
||||||
function initializeFriday13() {
|
function initializeFriday13() {
|
||||||
|
|||||||
@@ -9,16 +9,17 @@
|
|||||||
z-index: 10;
|
z-index: 10;
|
||||||
overflow: hidden;
|
overflow: hidden;
|
||||||
contain: strict;
|
contain: strict;
|
||||||
|
contain: layout paint;
|
||||||
}
|
}
|
||||||
|
|
||||||
.frost-layer {
|
.frost-layer {
|
||||||
|
will-change: transform;
|
||||||
position: absolute;
|
position: absolute;
|
||||||
top: 0;
|
top: 0;
|
||||||
left: 0;
|
left: 0;
|
||||||
width: 100%;
|
width: 100%;
|
||||||
height: 100%;
|
height: 100%;
|
||||||
pointer-events: none;
|
pointer-events: none;
|
||||||
/* A glowing white-blue gradient from edges */
|
|
||||||
background: radial-gradient(ellipse at center, transparent 60%, rgba(180, 220, 255, 0.4) 100%);
|
background: radial-gradient(ellipse at center, transparent 60%, rgba(180, 220, 255, 0.4) 100%);
|
||||||
box-shadow: inset 0 0 60px rgba(200, 230, 255, 0.5), inset 0 0 120px rgba(255, 255, 255, 0.3);
|
box-shadow: inset 0 0 60px rgba(200, 230, 255, 0.5), inset 0 0 120px rgba(255, 255, 255, 0.3);
|
||||||
|
|
||||||
@@ -27,14 +28,13 @@
|
|||||||
animation: frost-creep 4s ease-out forwards;
|
animation: frost-creep 4s ease-out forwards;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Subtle repeating star/crystal pattern */
|
|
||||||
.frost-crystals {
|
.frost-crystals {
|
||||||
|
will-change: transform;
|
||||||
position: absolute;
|
position: absolute;
|
||||||
top: -5%;
|
top: 0;
|
||||||
left: -5%;
|
left: -5%;
|
||||||
width: 110%;
|
width: 110%;
|
||||||
height: 110%;
|
height: 110%;
|
||||||
/* Use multi-layered star patterns for a random, crystalline spread */
|
|
||||||
background-image:
|
background-image:
|
||||||
url('data:image/svg+xml;utf8,<svg xmlns="http://www.w3.org/2000/svg" width="60" height="60"><circle cx="10" cy="10" r="1.5" fill="rgba(255,255,255,0.2)"/><circle cx="40" cy="30" r="1" fill="rgba(255,255,255,0.15)"/><circle cx="20" cy="50" r="2" fill="rgba(255,255,255,0.1)"/><path d="M50 10 L51 15 L56 16 L51 17 L50 22 L49 17 L44 16 L49 15 Z" fill="rgba(255,255,255,0.2)"/></svg>'),
|
url('data:image/svg+xml;utf8,<svg xmlns="http://www.w3.org/2000/svg" width="60" height="60"><circle cx="10" cy="10" r="1.5" fill="rgba(255,255,255,0.2)"/><circle cx="40" cy="30" r="1" fill="rgba(255,255,255,0.15)"/><circle cx="20" cy="50" r="2" fill="rgba(255,255,255,0.1)"/><path d="M50 10 L51 15 L56 16 L51 17 L50 22 L49 17 L44 16 L49 15 Z" fill="rgba(255,255,255,0.2)"/></svg>'),
|
||||||
url('data:image/svg+xml;utf8,<svg xmlns="http://www.w3.org/2000/svg" width="40" height="40"><circle cx="5" cy="20" r="1" fill="rgba(255,255,255,0.15)"/><circle cx="25" cy="5" r="1.5" fill="rgba(255,255,255,0.1)"/><path d="M20 20 L21 23 L24 24 L21 25 L20 28 L19 25 L16 24 L19 23 Z" fill="rgba(255,255,255,0.15)"/></svg>'),
|
url('data:image/svg+xml;utf8,<svg xmlns="http://www.w3.org/2000/svg" width="40" height="40"><circle cx="5" cy="20" r="1" fill="rgba(255,255,255,0.15)"/><circle cx="25" cy="5" r="1.5" fill="rgba(255,255,255,0.1)"/><path d="M20 20 L21 23 L24 24 L21 25 L20 28 L19 25 L16 24 L19 23 Z" fill="rgba(255,255,255,0.15)"/></svg>'),
|
||||||
@@ -43,12 +43,9 @@
|
|||||||
background-size: 110px 110px, 60px 60px, 30px 30px;
|
background-size: 110px 110px, 60px 60px, 30px 30px;
|
||||||
background-position: 0 0, 15px 15px, 5px 10px;
|
background-position: 0 0, 15px 15px, 5px 10px;
|
||||||
mix-blend-mode: overlay;
|
mix-blend-mode: overlay;
|
||||||
|
|
||||||
/* Mask out the center so crystals only appear strongly on the edges */
|
|
||||||
-webkit-mask-image: radial-gradient(ellipse at center, transparent 50%, black 100%);
|
|
||||||
mask-image: radial-gradient(ellipse at center, transparent 50%, black 100%);
|
mask-image: radial-gradient(ellipse at center, transparent 50%, black 100%);
|
||||||
|
|
||||||
animation: frost-shimmer 6s infinite alternate ease-in-out;
|
animation: frost-shimmer 6s infinite alternate ease-in-out;
|
||||||
|
translate: 0 -5vh;
|
||||||
}
|
}
|
||||||
|
|
||||||
@keyframes frost-creep {
|
@keyframes frost-creep {
|
||||||
|
|||||||
@@ -7,25 +7,17 @@
|
|||||||
width: 100%;
|
width: 100%;
|
||||||
height: 100%;
|
height: 100%;
|
||||||
pointer-events: none;
|
pointer-events: none;
|
||||||
z-index: 10000;
|
z-index: 10;
|
||||||
contain: layout paint;
|
contain: layout paint;
|
||||||
}
|
}
|
||||||
|
|
||||||
.halloween {
|
.halloween {
|
||||||
|
will-change: transform;
|
||||||
position: fixed;
|
position: fixed;
|
||||||
bottom: -10%;
|
bottom: -10%;
|
||||||
z-index: 15;
|
z-index: 15;
|
||||||
-webkit-user-select: none;
|
|
||||||
-moz-user-select: none;
|
|
||||||
-ms-user-select: none;
|
|
||||||
user-select: none;
|
user-select: none;
|
||||||
-webkit-user-select: none;
|
|
||||||
cursor: default;
|
cursor: default;
|
||||||
-webkit-animation-name: halloween-fall, halloween-shake;
|
|
||||||
-webkit-animation-duration: 10s, 3s;
|
|
||||||
-webkit-animation-timing-function: linear, ease-in-out;
|
|
||||||
-webkit-animation-iteration-count: infinite, infinite;
|
|
||||||
-webkit-animation-play-state: running, running;
|
|
||||||
animation-name: halloween-fall, halloween-shake;
|
animation-name: halloween-fall, halloween-shake;
|
||||||
animation-duration: 10s, 3s;
|
animation-duration: 10s, 3s;
|
||||||
animation-timing-function: linear, ease-in-out;
|
animation-timing-function: linear, ease-in-out;
|
||||||
@@ -33,29 +25,7 @@
|
|||||||
animation-play-state: running, running
|
animation-play-state: running, running
|
||||||
}
|
}
|
||||||
|
|
||||||
@-webkit-keyframes halloween-fall {
|
|
||||||
0% {
|
|
||||||
bottom: -10%;
|
|
||||||
}
|
|
||||||
|
|
||||||
100% {
|
|
||||||
bottom: 110%;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
@-webkit-keyframes halloween-shake {
|
|
||||||
|
|
||||||
0%,
|
|
||||||
100% {
|
|
||||||
-webkit-transform: translateX(0);
|
|
||||||
transform: translateX(0)
|
|
||||||
}
|
|
||||||
|
|
||||||
50% {
|
|
||||||
-webkit-transform: translateX(80px);
|
|
||||||
transform: translateX(80px)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
@keyframes halloween-fall {
|
@keyframes halloween-fall {
|
||||||
0% {
|
0% {
|
||||||
@@ -81,73 +51,61 @@
|
|||||||
|
|
||||||
.halloween:nth-of-type(0) {
|
.halloween:nth-of-type(0) {
|
||||||
left: 1%;
|
left: 1%;
|
||||||
-webkit-animation-delay: 0s, 0s;
|
|
||||||
animation-delay: 0s, 0s;
|
animation-delay: 0s, 0s;
|
||||||
}
|
}
|
||||||
|
|
||||||
.halloween:nth-of-type(1) {
|
.halloween:nth-of-type(1) {
|
||||||
left: 10%;
|
left: 10%;
|
||||||
-webkit-animation-delay: -1s, -1s;
|
|
||||||
animation-delay: -1s, -1s;
|
animation-delay: -1s, -1s;
|
||||||
}
|
}
|
||||||
|
|
||||||
.halloween:nth-of-type(2) {
|
.halloween:nth-of-type(2) {
|
||||||
left: 20%;
|
left: 20%;
|
||||||
-webkit-animation-delay: -2s, -2s;
|
|
||||||
animation-delay: -2s, -2s;
|
animation-delay: -2s, -2s;
|
||||||
}
|
}
|
||||||
|
|
||||||
.halloween:nth-of-type(3) {
|
.halloween:nth-of-type(3) {
|
||||||
left: 30%;
|
left: 30%;
|
||||||
-webkit-animation-delay: -3s, -3s;
|
|
||||||
animation-delay: -3s, -3s;
|
animation-delay: -3s, -3s;
|
||||||
}
|
}
|
||||||
|
|
||||||
.halloween:nth-of-type(4) {
|
.halloween:nth-of-type(4) {
|
||||||
left: 40%;
|
left: 40%;
|
||||||
-webkit-animation-delay: -4s, -4s;
|
|
||||||
animation-delay: -4s, -4s;
|
animation-delay: -4s, -4s;
|
||||||
}
|
}
|
||||||
|
|
||||||
.halloween:nth-of-type(5) {
|
.halloween:nth-of-type(5) {
|
||||||
left: 50%;
|
left: 50%;
|
||||||
-webkit-animation-delay: -5s, -5s;
|
|
||||||
animation-delay: -5s, -5s;
|
animation-delay: -5s, -5s;
|
||||||
}
|
}
|
||||||
|
|
||||||
.halloween:nth-of-type(6) {
|
.halloween:nth-of-type(6) {
|
||||||
left: 60%;
|
left: 60%;
|
||||||
-webkit-animation-delay: -6s, -6s;
|
|
||||||
animation-delay: -6s, -6s;
|
animation-delay: -6s, -6s;
|
||||||
}
|
}
|
||||||
|
|
||||||
.halloween:nth-of-type(7) {
|
.halloween:nth-of-type(7) {
|
||||||
left: 70%;
|
left: 70%;
|
||||||
-webkit-animation-delay: -7s, -7s;
|
|
||||||
animation-delay: -7s, -7s;
|
animation-delay: -7s, -7s;
|
||||||
}
|
}
|
||||||
|
|
||||||
.halloween:nth-of-type(8) {
|
.halloween:nth-of-type(8) {
|
||||||
left: 80%;
|
left: 80%;
|
||||||
-webkit-animation-delay: -8s, -8s;
|
|
||||||
animation-delay: -8s, -8s;
|
animation-delay: -8s, -8s;
|
||||||
}
|
}
|
||||||
|
|
||||||
.halloween:nth-of-type(9) {
|
.halloween:nth-of-type(9) {
|
||||||
left: 90%;
|
left: 90%;
|
||||||
-webkit-animation-delay: -9s, -9s;
|
|
||||||
animation-delay: -9s, -9s;
|
animation-delay: -9s, -9s;
|
||||||
}
|
}
|
||||||
|
|
||||||
.halloween:nth-of-type(10) {
|
.halloween:nth-of-type(10) {
|
||||||
left: 25%;
|
left: 25%;
|
||||||
-webkit-animation-delay: -10s, -10s;
|
|
||||||
animation-delay: -10s, -10s;
|
animation-delay: -10s, -10s;
|
||||||
}
|
}
|
||||||
|
|
||||||
.halloween:nth-of-type(11) {
|
.halloween:nth-of-type(11) {
|
||||||
left: 65%;
|
left: 65%;
|
||||||
-webkit-animation-delay: -11s, -11s;
|
|
||||||
animation-delay: -11s, -11s;
|
animation-delay: -11s, -11s;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -162,7 +120,6 @@
|
|||||||
z-index: 1000;
|
z-index: 1000;
|
||||||
overflow: hidden;
|
overflow: hidden;
|
||||||
mask-image: linear-gradient(to top, black, transparent);
|
mask-image: linear-gradient(to top, black, transparent);
|
||||||
-webkit-mask-image: linear-gradient(to top, black, transparent);
|
|
||||||
}
|
}
|
||||||
.halloween-fog-blob {
|
.halloween-fog-blob {
|
||||||
position: absolute;
|
position: absolute;
|
||||||
@@ -174,10 +131,12 @@
|
|||||||
filter: blur(15px);
|
filter: blur(15px);
|
||||||
}
|
}
|
||||||
.halloween-fog-blob:nth-child(1) {
|
.halloween-fog-blob:nth-child(1) {
|
||||||
|
will-change: transform;
|
||||||
left: -20vw;
|
left: -20vw;
|
||||||
animation: fog-float1 25s ease-in-out infinite alternate;
|
animation: fog-float1 25s ease-in-out infinite alternate;
|
||||||
}
|
}
|
||||||
.halloween-fog-blob:nth-child(2) {
|
.halloween-fog-blob:nth-child(2) {
|
||||||
|
will-change: transform;
|
||||||
left: -50vw;
|
left: -50vw;
|
||||||
background: radial-gradient(ellipse at center, rgba(100, 110, 120, 0.3) 0%, transparent 65%);
|
background: radial-gradient(ellipse at center, rgba(100, 110, 120, 0.3) 0%, transparent 65%);
|
||||||
animation: fog-float2 35s ease-in-out infinite alternate;
|
animation: fog-float2 35s ease-in-out infinite alternate;
|
||||||
@@ -196,7 +155,7 @@
|
|||||||
/* --- Spiders --- */
|
/* --- Spiders --- */
|
||||||
.halloween-spider-wrapper {
|
.halloween-spider-wrapper {
|
||||||
position: absolute;
|
position: absolute;
|
||||||
top: -50px;
|
top: 0;
|
||||||
display: flex;
|
display: flex;
|
||||||
flex-direction: column;
|
flex-direction: column;
|
||||||
align-items: center;
|
align-items: center;
|
||||||
@@ -204,8 +163,10 @@
|
|||||||
transform-origin: top;
|
transform-origin: top;
|
||||||
will-change: transform;
|
will-change: transform;
|
||||||
pointer-events: auto;
|
pointer-events: auto;
|
||||||
padding: 20px; /* Increase hit area safely */
|
padding: 20px; /* Increase hit area */
|
||||||
|
translate: 0 -50px;
|
||||||
}
|
}
|
||||||
|
|
||||||
.halloween-thread {
|
.halloween-thread {
|
||||||
width: 30px; /* Wider hit area for mouse interaction */
|
width: 30px; /* Wider hit area for mouse interaction */
|
||||||
height: 100vh;
|
height: 100vh;
|
||||||
@@ -223,12 +184,12 @@
|
|||||||
background: linear-gradient(to bottom, rgba(200, 200, 200, 0.1), rgba(200, 200, 200, 0.6));
|
background: linear-gradient(to bottom, rgba(200, 200, 200, 0.1), rgba(200, 200, 200, 0.6));
|
||||||
}
|
}
|
||||||
.halloween-spider {
|
.halloween-spider {
|
||||||
|
will-change: transform;
|
||||||
animation: spider-swing 3s ease-in-out infinite alternate;
|
animation: spider-swing 3s ease-in-out infinite alternate;
|
||||||
transform-origin: top center;
|
transform-origin: top center;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* MARK: SPIDER SWAY CONFIGURATION */
|
/* MARK: SPIDER SWAY CONFIGURATION */
|
||||||
/* Adjust degrees in 'rotate(...)' to change how far spider and thread swing in wind. */
|
|
||||||
@keyframes wind-sway {
|
@keyframes wind-sway {
|
||||||
0% { transform: rotate(0deg); }
|
0% { transform: rotate(0deg); }
|
||||||
25% { transform: rotate(2deg); }
|
25% { transform: rotate(2deg); }
|
||||||
|
|||||||
@@ -14,7 +14,7 @@ const images = [
|
|||||||
"../Seasonals/Resources/halloween_images/pumpkin_20x20.png",
|
"../Seasonals/Resources/halloween_images/pumpkin_20x20.png",
|
||||||
];
|
];
|
||||||
|
|
||||||
let msgPrinted = false; // flag to prevent multiple console messages
|
let msgPrinted = false;
|
||||||
|
|
||||||
// function to check and control the halloween
|
// function to check and control the halloween
|
||||||
function toggleHalloween() {
|
function toggleHalloween() {
|
||||||
@@ -42,7 +42,6 @@ function toggleHalloween() {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// observe changes in the DOM
|
|
||||||
const observer = new MutationObserver(toggleHalloween);
|
const observer = new MutationObserver(toggleHalloween);
|
||||||
observer.observe(document.body, {
|
observer.observe(document.body, {
|
||||||
childList: true,
|
childList: true,
|
||||||
@@ -52,26 +51,22 @@ observer.observe(document.body, {
|
|||||||
|
|
||||||
|
|
||||||
function addRandomSymbols(count) {
|
function addRandomSymbols(count) {
|
||||||
const halloweenContainer = document.querySelector('.halloween-container'); // get the halloween container
|
const halloweenContainer = document.querySelector('.halloween-container');
|
||||||
if (!halloweenContainer) return; // exit if halloween container is not found
|
if (!halloweenContainer) return;
|
||||||
|
|
||||||
console.log('Adding random halloween symbols');
|
console.log('Adding random halloween symbols');
|
||||||
|
|
||||||
|
|
||||||
for (let i = 0; i < count; i++) {
|
for (let i = 0; i < count; i++) {
|
||||||
// create a new halloween elements
|
|
||||||
const halloweenDiv = document.createElement("div");
|
const halloweenDiv = document.createElement("div");
|
||||||
halloweenDiv.className = "halloween";
|
halloweenDiv.className = "halloween";
|
||||||
|
|
||||||
// pick a random halloween symbol
|
|
||||||
const imageSrc = images[Math.floor(Math.random() * images.length)];
|
const imageSrc = images[Math.floor(Math.random() * images.length)];
|
||||||
const img = document.createElement("img");
|
const img = document.createElement("img");
|
||||||
img.src = imageSrc;
|
img.src = imageSrc;
|
||||||
|
|
||||||
halloweenDiv.appendChild(img);
|
halloweenDiv.appendChild(img);
|
||||||
|
|
||||||
|
|
||||||
// set random horizontal position, animation delay and size(uncomment lines to enable)
|
|
||||||
const randomLeft = Math.random() * 100; // position (0% to 100%)
|
const randomLeft = Math.random() * 100; // position (0% to 100%)
|
||||||
const randomAnimationDelay = Math.random() * 10; // delay (0s to 10s)
|
const randomAnimationDelay = Math.random() * 10; // delay (0s to 10s)
|
||||||
const randomAnimationDelay2 = -(Math.random() * 3); // delay (-3s to 0s)
|
const randomAnimationDelay2 = -(Math.random() * 3); // delay (-3s to 0s)
|
||||||
@@ -87,13 +82,11 @@ function addRandomSymbols(count) {
|
|||||||
halloweenDiv.style.animationDuration = `${randomAnimationDuration}s, ${randomAnimationDuration2}s`;
|
halloweenDiv.style.animationDuration = `${randomAnimationDuration}s, ${randomAnimationDuration2}s`;
|
||||||
}
|
}
|
||||||
|
|
||||||
// add the halloween to the container
|
|
||||||
halloweenContainer.appendChild(halloweenDiv);
|
halloweenContainer.appendChild(halloweenDiv);
|
||||||
}
|
}
|
||||||
console.log('Random halloween symbols added');
|
console.log('Random halloween symbols added');
|
||||||
}
|
}
|
||||||
|
|
||||||
// create halloween objects
|
|
||||||
function createHalloween() {
|
function createHalloween() {
|
||||||
const container = document.querySelector('.halloween-container') || document.createElement("div");
|
const container = document.querySelector('.halloween-container') || document.createElement("div");
|
||||||
|
|
||||||
@@ -182,14 +175,18 @@ function createSpider(container) {
|
|||||||
|
|
||||||
setTimeout(() => {
|
setTimeout(() => {
|
||||||
wrapper.remove();
|
wrapper.remove();
|
||||||
setTimeout(() => createSpider(container), Math.random() * 5000 + 1000);
|
if (document.body.contains(container)) {
|
||||||
|
setTimeout(() => createSpider(container), Math.random() * 5000 + 1000);
|
||||||
|
}
|
||||||
}, 500);
|
}, 500);
|
||||||
});
|
});
|
||||||
|
|
||||||
wrapper.addEventListener('animationend', () => {
|
wrapper.addEventListener('animationend', () => {
|
||||||
if (isRetreating) return;
|
if (isRetreating) return;
|
||||||
wrapper.remove();
|
wrapper.remove();
|
||||||
setTimeout(() => createSpider(container), Math.random() * 5000 + 1000);
|
if (document.body.contains(container)) {
|
||||||
|
setTimeout(() => createSpider(container), Math.random() * 5000 + 1000);
|
||||||
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
container.appendChild(wrapper);
|
container.appendChild(wrapper);
|
||||||
@@ -223,15 +220,16 @@ function createMouse(container) {
|
|||||||
|
|
||||||
mouse.addEventListener('animationend', () => {
|
mouse.addEventListener('animationend', () => {
|
||||||
mouse.remove();
|
mouse.remove();
|
||||||
setTimeout(() => createMouse(container), Math.random() * 4000 + 2000);
|
if (document.body.contains(container)) {
|
||||||
|
setTimeout(() => createMouse(container), Math.random() * 4000 + 2000);
|
||||||
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
container.appendChild(mouse);
|
container.appendChild(mouse);
|
||||||
}
|
}
|
||||||
|
|
||||||
// initialize halloween
|
|
||||||
function initializeHalloween() {
|
function initializeHalloween() {
|
||||||
if (!halloween) return; // exit if halloween is disabled
|
if (!halloween) return;
|
||||||
createHalloween();
|
createHalloween();
|
||||||
toggleHalloween();
|
toggleHalloween();
|
||||||
|
|
||||||
@@ -256,7 +254,7 @@ function initializeHalloween() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
const screenWidth = window.innerWidth; // get the screen width to detect mobile devices
|
const screenWidth = window.innerWidth; // get the screen width to detect mobile devices
|
||||||
if (randomSymbols && (screenWidth > 768 || randomSymbolsMobile)) { // add random halloweens only on larger screens, unless enabled for mobile devices
|
if (randomSymbols && (screenWidth > 768 || randomSymbolsMobile)) {
|
||||||
addRandomSymbols(halloweenCount);
|
addRandomSymbols(halloweenCount);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -12,48 +12,21 @@
|
|||||||
}
|
}
|
||||||
|
|
||||||
.heart {
|
.heart {
|
||||||
|
will-change: transform;
|
||||||
position: fixed;
|
position: fixed;
|
||||||
bottom: -10%;
|
bottom: -10%;
|
||||||
z-index: 15;
|
z-index: 15;
|
||||||
-webkit-user-select: none;
|
|
||||||
-moz-user-select: none;
|
-moz-user-select: none;
|
||||||
-ms-user-select: none;
|
-ms-user-select: none;
|
||||||
user-select: none;
|
user-select: none;
|
||||||
-webkit-user-select: none;
|
|
||||||
cursor: default;
|
cursor: default;
|
||||||
-webkit-animation-name: heart-fall, heart-shake;
|
|
||||||
-webkit-animation-duration: 14s, 5s;
|
|
||||||
-webkit-animation-timing-function: linear, ease-in-out;
|
|
||||||
-webkit-animation-iteration-count: infinite, infinite;
|
|
||||||
animation-name: heart-fall, heart-shake;
|
animation-name: heart-fall, heart-shake;
|
||||||
animation-duration: 14s, 5s;
|
animation-duration: 14s, 5s;
|
||||||
animation-timing-function: linear, ease-in-out;
|
animation-timing-function: linear, ease-in-out;
|
||||||
animation-iteration-count: infinite, infinite;
|
animation-iteration-count: infinite, infinite;
|
||||||
}
|
}
|
||||||
|
|
||||||
@-webkit-keyframes heart-fall {
|
|
||||||
0% {
|
|
||||||
bottom: -10%;
|
|
||||||
}
|
|
||||||
|
|
||||||
100% {
|
|
||||||
bottom: 110%;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
@-webkit-keyframes heart-shake {
|
|
||||||
|
|
||||||
0%,
|
|
||||||
100% {
|
|
||||||
-webkit-transform: translateX(0);
|
|
||||||
transform: translateX(0)
|
|
||||||
}
|
|
||||||
|
|
||||||
50% {
|
|
||||||
-webkit-transform: translateX(80px);
|
|
||||||
transform: translateX(80px)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
@keyframes heart-fall {
|
@keyframes heart-fall {
|
||||||
0% {
|
0% {
|
||||||
@@ -79,72 +52,60 @@
|
|||||||
|
|
||||||
.heart:nth-of-type(0) {
|
.heart:nth-of-type(0) {
|
||||||
left: 1%;
|
left: 1%;
|
||||||
-webkit-animation-delay: 0s, 0s;
|
|
||||||
animation-delay: 0s, 0s
|
animation-delay: 0s, 0s
|
||||||
}
|
}
|
||||||
|
|
||||||
.heart:nth-of-type(1) {
|
.heart:nth-of-type(1) {
|
||||||
left: 10%;
|
left: 10%;
|
||||||
-webkit-animation-delay: 1s, 1s;
|
|
||||||
animation-delay: 1s, 1s
|
animation-delay: 1s, 1s
|
||||||
}
|
}
|
||||||
|
|
||||||
.heart:nth-of-type(2) {
|
.heart:nth-of-type(2) {
|
||||||
left: 20%;
|
left: 20%;
|
||||||
-webkit-animation-delay: 6s, .5s;
|
|
||||||
animation-delay: 6s, .5s
|
animation-delay: 6s, .5s
|
||||||
}
|
}
|
||||||
|
|
||||||
.heart:nth-of-type(3) {
|
.heart:nth-of-type(3) {
|
||||||
left: 30%;
|
left: 30%;
|
||||||
-webkit-animation-delay: 4s, 2s;
|
|
||||||
animation-delay: 4s, 2s
|
animation-delay: 4s, 2s
|
||||||
}
|
}
|
||||||
|
|
||||||
.heart:nth-of-type(4) {
|
.heart:nth-of-type(4) {
|
||||||
left: 40%;
|
left: 40%;
|
||||||
-webkit-animation-delay: 2s, 2s;
|
|
||||||
animation-delay: 2s, 2s
|
animation-delay: 2s, 2s
|
||||||
}
|
}
|
||||||
|
|
||||||
.heart:nth-of-type(5) {
|
.heart:nth-of-type(5) {
|
||||||
left: 50%;
|
left: 50%;
|
||||||
-webkit-animation-delay: 8s, 3s;
|
|
||||||
animation-delay: 8s, 3s
|
animation-delay: 8s, 3s
|
||||||
}
|
}
|
||||||
|
|
||||||
.heart:nth-of-type(6) {
|
.heart:nth-of-type(6) {
|
||||||
left: 60%;
|
left: 60%;
|
||||||
-webkit-animation-delay: 6s, 2s;
|
|
||||||
animation-delay: 6s, 2s
|
animation-delay: 6s, 2s
|
||||||
}
|
}
|
||||||
|
|
||||||
.heart:nth-of-type(7) {
|
.heart:nth-of-type(7) {
|
||||||
left: 70%;
|
left: 70%;
|
||||||
-webkit-animation-delay: 2.5s, 1s;
|
|
||||||
animation-delay: 2.5s, 1s
|
animation-delay: 2.5s, 1s
|
||||||
}
|
}
|
||||||
|
|
||||||
.heart:nth-of-type(8) {
|
.heart:nth-of-type(8) {
|
||||||
left: 80%;
|
left: 80%;
|
||||||
-webkit-animation-delay: 1s, 0s;
|
|
||||||
animation-delay: 1s, 0s
|
animation-delay: 1s, 0s
|
||||||
}
|
}
|
||||||
|
|
||||||
.heart:nth-of-type(9) {
|
.heart:nth-of-type(9) {
|
||||||
left: 90%;
|
left: 90%;
|
||||||
-webkit-animation-delay: 3s, 1.5s;
|
|
||||||
animation-delay: 3s, 1.5s
|
animation-delay: 3s, 1.5s
|
||||||
}
|
}
|
||||||
|
|
||||||
.heart:nth-of-type(10) {
|
.heart:nth-of-type(10) {
|
||||||
left: 25%;
|
left: 25%;
|
||||||
-webkit-animation-delay: 2s, 0s;
|
|
||||||
animation-delay: 2s, 0s
|
animation-delay: 2s, 0s
|
||||||
}
|
}
|
||||||
|
|
||||||
.heart:nth-of-type(11) {
|
.heart:nth-of-type(11) {
|
||||||
left: 65%;
|
left: 65%;
|
||||||
-webkit-animation-delay: 4s, 2.5s;
|
|
||||||
animation-delay: 4s, 2.5s
|
animation-delay: 4s, 2.5s
|
||||||
}
|
}
|
||||||
@@ -29,11 +29,13 @@
|
|||||||
}
|
}
|
||||||
|
|
||||||
.mario-jump {
|
.mario-jump {
|
||||||
|
will-change: transform;
|
||||||
animation: jump-arc 0.8s ease-in-out;
|
animation: jump-arc 0.8s ease-in-out;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* 8-bit coin styling */
|
/* 8-bit coin styling */
|
||||||
.mario-coin {
|
.mario-coin {
|
||||||
|
will-change: transform;
|
||||||
position: absolute;
|
position: absolute;
|
||||||
width: 32px;
|
width: 32px;
|
||||||
height: 32px;
|
height: 32px;
|
||||||
@@ -47,11 +49,12 @@
|
|||||||
.mario-coin::after {
|
.mario-coin::after {
|
||||||
content: '';
|
content: '';
|
||||||
position: absolute;
|
position: absolute;
|
||||||
top: 6px;
|
top: 0;
|
||||||
left: 10px;
|
left: 10px;
|
||||||
width: 4px;
|
width: 4px;
|
||||||
height: 12px;
|
height: 12px;
|
||||||
background: #daa520;
|
background: #daa520;
|
||||||
|
translate: 0 6px;
|
||||||
}
|
}
|
||||||
|
|
||||||
@keyframes mario-run {
|
@keyframes mario-run {
|
||||||
|
|||||||
@@ -51,8 +51,9 @@ function createMarioDay(container) {
|
|||||||
container.appendChild(wrapper);
|
container.appendChild(wrapper);
|
||||||
|
|
||||||
// Periodically throw out an 8-bit coin
|
// Periodically throw out an 8-bit coin
|
||||||
setInterval(() => {
|
const intervalId = setInterval(() => {
|
||||||
if (!document.querySelector('.marioday-container')) return;
|
if (!document.body.contains(container)) { clearInterval(intervalId); return; }
|
||||||
|
if (container.style.display === 'none') return;
|
||||||
const coin = document.createElement('div');
|
const coin = document.createElement('div');
|
||||||
coin.className = 'mario-coin';
|
coin.className = 'mario-coin';
|
||||||
|
|
||||||
|
|||||||
@@ -5,7 +5,7 @@
|
|||||||
width: 100vw;
|
width: 100vw;
|
||||||
height: 100vh;
|
height: 100vh;
|
||||||
pointer-events: none;
|
pointer-events: none;
|
||||||
z-index: 1000;
|
z-index: 10;
|
||||||
overflow: hidden;
|
overflow: hidden;
|
||||||
contain: layout paint;
|
contain: layout paint;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -136,6 +136,7 @@ function createElements() {
|
|||||||
for(let i=0; i<maxTrails; i++) trails.push(new Trail());
|
for(let i=0; i<maxTrails; i++) trails.push(new Trail());
|
||||||
|
|
||||||
function loop() {
|
function loop() {
|
||||||
|
if (!document.body.contains(container)) { clearInterval(window.matrixInterval); return; }
|
||||||
if (isHidden) return; // Pause drawing when hidden
|
if (isHidden) return; // Pause drawing when hidden
|
||||||
ctx.clearRect(0, 0, canvas.width, canvas.height);
|
ctx.clearRect(0, 0, canvas.width, canvas.height);
|
||||||
ctx.font = 'bold ' + fontSize + 'px monospace';
|
ctx.font = 'bold ' + fontSize + 'px monospace';
|
||||||
|
|||||||
@@ -12,13 +12,15 @@
|
|||||||
}
|
}
|
||||||
|
|
||||||
.oktoberfest-symbol {
|
.oktoberfest-symbol {
|
||||||
|
will-change: transform;
|
||||||
position: absolute;
|
position: absolute;
|
||||||
top: -10%;
|
top: 0;
|
||||||
font-size: 2.2em;
|
font-size: 2.2em;
|
||||||
user-select: none;
|
user-select: none;
|
||||||
animation-name: oktoberfest-fall, oktoberfest-sway;
|
animation-name: oktoberfest-fall, oktoberfest-sway;
|
||||||
animation-timing-function: linear, ease-in-out;
|
animation-timing-function: linear, ease-in-out;
|
||||||
animation-iteration-count: infinite, infinite;
|
animation-iteration-count: infinite, infinite;
|
||||||
|
translate: 0 -10vh;
|
||||||
}
|
}
|
||||||
|
|
||||||
@keyframes oktoberfest-fall {
|
@keyframes oktoberfest-fall {
|
||||||
|
|||||||
@@ -31,7 +31,6 @@ function toggleOktoberfest() {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// observe changes in the DOM
|
|
||||||
const observer = new MutationObserver(toggleOktoberfest);
|
const observer = new MutationObserver(toggleOktoberfest);
|
||||||
observer.observe(document.body, {
|
observer.observe(document.body, {
|
||||||
childList: true,
|
childList: true,
|
||||||
|
|||||||
@@ -12,10 +12,11 @@
|
|||||||
|
|
||||||
.olympia-symbol {
|
.olympia-symbol {
|
||||||
position: absolute;
|
position: absolute;
|
||||||
top: -10vh;
|
top: 0;
|
||||||
opacity: 0.95;
|
opacity: 0.95;
|
||||||
text-shadow: 0 0 10px rgba(255,255,255,0.2);
|
text-shadow: 0 0 10px rgba(255,255,255,0.2);
|
||||||
z-index: 40;
|
z-index: 40;
|
||||||
|
translate: 0 -10vh;
|
||||||
}
|
}
|
||||||
|
|
||||||
.olympia-flame {
|
.olympia-flame {
|
||||||
@@ -34,8 +35,8 @@
|
|||||||
.olympia-ring-css::before {
|
.olympia-ring-css::before {
|
||||||
content: '';
|
content: '';
|
||||||
position: absolute;
|
position: absolute;
|
||||||
top: 50%; left: 50%;
|
top: 0;
|
||||||
transform: translate(-50%, -50%);
|
translate: -50% -50%;
|
||||||
width: 30px;
|
width: 30px;
|
||||||
height: 30px;
|
height: 30px;
|
||||||
border: 5px solid #0081C8; /* Default blue ring */
|
border: 5px solid #0081C8; /* Default blue ring */
|
||||||
@@ -46,13 +47,15 @@
|
|||||||
}
|
}
|
||||||
.olympia-symbol {
|
.olympia-symbol {
|
||||||
position: absolute;
|
position: absolute;
|
||||||
top: -10vh;
|
top: 0;
|
||||||
opacity: 0.95;
|
opacity: 0.95;
|
||||||
text-shadow: 0 0 10px rgba(255,255,255,0.2);
|
text-shadow: 0 0 10px rgba(255,255,255,0.2);
|
||||||
z-index: 40;
|
z-index: 40;
|
||||||
|
translate: 0 -10vh;
|
||||||
}
|
}
|
||||||
|
|
||||||
.olympia-inner {
|
.olympia-inner {
|
||||||
|
will-change: transform;
|
||||||
display: inline-block;
|
display: inline-block;
|
||||||
animation: olympia-sway linear infinite alternate;
|
animation: olympia-sway linear infinite alternate;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -6,7 +6,7 @@
|
|||||||
width: 100%;
|
width: 100%;
|
||||||
height: 100%;
|
height: 100%;
|
||||||
pointer-events: none;
|
pointer-events: none;
|
||||||
z-index: 10; /* Behind popups but over background */
|
z-index: 10;
|
||||||
contain: strict;
|
contain: strict;
|
||||||
overflow: hidden;
|
overflow: hidden;
|
||||||
}
|
}
|
||||||
@@ -30,8 +30,9 @@
|
|||||||
}
|
}
|
||||||
|
|
||||||
.oscar-spotlight {
|
.oscar-spotlight {
|
||||||
|
will-change: transform;
|
||||||
position: absolute;
|
position: absolute;
|
||||||
top: -10vh;
|
top: 0;
|
||||||
/* MARK: SPOTLIGHT WIDTH CONFIGURATION */
|
/* MARK: SPOTLIGHT WIDTH CONFIGURATION */
|
||||||
/* To adjust bottom width (spread), change 'width' property (e.g., 20vw for narrow, 40vw for wide). */
|
/* To adjust bottom width (spread), change 'width' property (e.g., 20vw for narrow, 40vw for wide). */
|
||||||
/* To adjust top width (origin), modify first two percentages in 'clip-path' (e.g., 48% 0, 52% 0 for a very thin start). */
|
/* To adjust top width (origin), modify first two percentages in 'clip-path' (e.g., 48% 0, 52% 0 for a very thin start). */
|
||||||
@@ -42,9 +43,11 @@
|
|||||||
transform-origin: top center;
|
transform-origin: top center;
|
||||||
animation: spotlight-sweep 12s infinite alternate ease-in-out;
|
animation: spotlight-sweep 12s infinite alternate ease-in-out;
|
||||||
mix-blend-mode: screen;
|
mix-blend-mode: screen;
|
||||||
|
translate: 0 -10vh;
|
||||||
}
|
}
|
||||||
|
|
||||||
.oscar-flash {
|
.oscar-flash {
|
||||||
|
will-change: transform;
|
||||||
position: absolute;
|
position: absolute;
|
||||||
width: 10px;
|
width: 10px;
|
||||||
height: 10px;
|
height: 10px;
|
||||||
|
|||||||
@@ -56,9 +56,9 @@ function createOscar(container) {
|
|||||||
container.appendChild(carpet);
|
container.appendChild(carpet);
|
||||||
container.appendChild(spotlights);
|
container.appendChild(spotlights);
|
||||||
|
|
||||||
// Paparazzi flashes with randomized intervals
|
|
||||||
function flashLoop() {
|
function flashLoop() {
|
||||||
if (!document.querySelector('.oscar-container')) {
|
if (!document.body.contains(container)) return; // Kill the loop if container is removed
|
||||||
|
if (container.style.display === 'none') {
|
||||||
setTimeout(flashLoop, 1000); // Check again later if hidden
|
setTimeout(flashLoop, 1000); // Check again later if hidden
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -5,7 +5,7 @@
|
|||||||
width: 100vw;
|
width: 100vw;
|
||||||
height: 100vh;
|
height: 100vh;
|
||||||
pointer-events: none;
|
pointer-events: none;
|
||||||
z-index: 9999;
|
z-index: 10;
|
||||||
overflow: hidden;
|
overflow: hidden;
|
||||||
contain: layout paint;
|
contain: layout paint;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,4 +1,3 @@
|
|||||||
// 1. Read Configuration
|
|
||||||
const config = window.SeasonalsPluginConfig?.Pride || {};
|
const config = window.SeasonalsPluginConfig?.Pride || {};
|
||||||
|
|
||||||
const enabled = config.EnablePride !== undefined ? config.EnablePride : true;
|
const enabled = config.EnablePride !== undefined ? config.EnablePride : true;
|
||||||
@@ -8,8 +7,6 @@ const colorHeader = config.ColorHeader !== undefined ? config.ColorHeader : true
|
|||||||
|
|
||||||
let msgPrinted = false;
|
let msgPrinted = false;
|
||||||
|
|
||||||
// 2. Toggle Function
|
|
||||||
// Hides the effect when a video player, trailer (in full width mode), dashboard, or user menu is active.
|
|
||||||
function togglePride() {
|
function togglePride() {
|
||||||
const container = document.querySelector('.pride-container');
|
const container = document.querySelector('.pride-container');
|
||||||
if (!container) return;
|
if (!container) return;
|
||||||
@@ -34,8 +31,6 @@ function togglePride() {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// 3. MutationObserver
|
|
||||||
// Watches the DOM for changes so the effect can auto-hide/show.
|
|
||||||
const observer = new MutationObserver(togglePride);
|
const observer = new MutationObserver(togglePride);
|
||||||
observer.observe(document.body, {
|
observer.observe(document.body, {
|
||||||
childList: true,
|
childList: true,
|
||||||
@@ -43,8 +38,6 @@ observer.observe(document.body, {
|
|||||||
attributes: true
|
attributes: true
|
||||||
});
|
});
|
||||||
|
|
||||||
// 4. Element Creation
|
|
||||||
// Create and append your animated elements to the container.
|
|
||||||
function createElements() {
|
function createElements() {
|
||||||
const container = document.querySelector('.pride-container') || document.createElement('div');
|
const container = document.querySelector('.pride-container') || document.createElement('div');
|
||||||
|
|
||||||
@@ -82,7 +75,6 @@ function createElements() {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// 5. Initialization
|
|
||||||
function initializePride() {
|
function initializePride() {
|
||||||
if (!enabled) return;
|
if (!enabled) return;
|
||||||
createElements();
|
createElements();
|
||||||
|
|||||||
@@ -1,68 +1,66 @@
|
|||||||
.resurrection-container {
|
.resurrection-container {
|
||||||
display: block;
|
display: block;
|
||||||
position: fixed;
|
position: fixed;
|
||||||
overflow: hidden;
|
overflow: hidden;
|
||||||
top: 0;
|
top: 0;
|
||||||
left: 0;
|
left: 0;
|
||||||
width: 100%;
|
width: 100%;
|
||||||
height: 100%;
|
height: 100%;
|
||||||
pointer-events: none;
|
pointer-events: none;
|
||||||
z-index: 10;
|
z-index: 10;
|
||||||
contain: layout paint;
|
contain: layout paint;
|
||||||
}
|
}
|
||||||
|
|
||||||
.resurrection-symbol {
|
.resurrection-symbol {
|
||||||
position: fixed;
|
position: fixed;
|
||||||
z-index: 15;
|
z-index: 15;
|
||||||
top: 0;
|
top: 0;
|
||||||
translate: 0 -15vh;
|
translate: 0 -15vh;
|
||||||
user-select: none;
|
user-select: none;
|
||||||
-webkit-user-select: none;
|
cursor: default;
|
||||||
cursor: default;
|
animation-name: resurrection-fall;
|
||||||
animation-name: resurrection-fall;
|
animation-timing-function: linear;
|
||||||
animation-timing-function: linear;
|
animation-iteration-count: infinite;
|
||||||
animation-iteration-count: infinite;
|
will-change: transform;
|
||||||
will-change: transform;
|
}
|
||||||
}
|
|
||||||
|
.resurrection-sway-wrapper {
|
||||||
.resurrection-sway-wrapper {
|
will-change: transform;
|
||||||
will-change: transform;
|
animation-name: resurrection-sway;
|
||||||
animation-name: resurrection-sway;
|
animation-timing-function: ease-in-out;
|
||||||
animation-timing-function: ease-in-out;
|
animation-iteration-count: infinite;
|
||||||
animation-iteration-count: infinite;
|
}
|
||||||
}
|
|
||||||
|
.resurrection-symbol img {
|
||||||
.resurrection-symbol img {
|
z-index: 15;
|
||||||
z-index: 15;
|
height: auto;
|
||||||
height: auto;
|
width: 56px;
|
||||||
width: 56px;
|
opacity: 0.95;
|
||||||
opacity: 0.95;
|
filter: drop-shadow(0 0 8px rgba(255, 215, 130, 0.5));
|
||||||
filter: drop-shadow(0 0 8px rgba(255, 215, 130, 0.5));
|
}
|
||||||
}
|
|
||||||
|
@media (max-width: 768px) {
|
||||||
@media (max-width: 768px) {
|
.resurrection-symbol img {
|
||||||
.resurrection-symbol img {
|
width: 42px;
|
||||||
width: 42px;
|
}
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
@keyframes resurrection-fall {
|
||||||
@keyframes resurrection-fall {
|
0% {
|
||||||
0% {
|
transform: translate3d(0, -15vh, 0);
|
||||||
transform: translate3d(0, -15vh, 0);
|
}
|
||||||
}
|
|
||||||
|
100% {
|
||||||
100% {
|
transform: translate3d(0, 105vh, 0);
|
||||||
transform: translate3d(0, 105vh, 0);
|
}
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
@keyframes resurrection-sway {
|
||||||
@keyframes resurrection-sway {
|
0%,
|
||||||
0%,
|
100% {
|
||||||
100% {
|
transform: translateX(0);
|
||||||
transform: translateX(0);
|
}
|
||||||
}
|
|
||||||
|
50% {
|
||||||
50% {
|
transform: translateX(65px);
|
||||||
transform: translateX(65px);
|
}
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|||||||
@@ -238,7 +238,7 @@ function animateSanta() {
|
|||||||
function startAnimation() {
|
function startAnimation() {
|
||||||
const santaHeight = santa.offsetHeight;
|
const santaHeight = santa.offsetHeight;
|
||||||
if (santaHeight === 0) {
|
if (santaHeight === 0) {
|
||||||
setTimeout(startAnimation, 100);
|
setTimeout(() => { if (document.body.contains(santa)) startAnimation(); }, 100);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
// console.log('Santa height: ', santaHeight);
|
// console.log('Santa height: ', santaHeight);
|
||||||
@@ -283,7 +283,7 @@ function animateSanta() {
|
|||||||
animationFrameIdSanta = requestAnimationFrame(move);
|
animationFrameIdSanta = requestAnimationFrame(move);
|
||||||
} else {
|
} else {
|
||||||
const pause = Math.random() * ((maxSantaRestTime - minSantaRestTime) * 1000) + minSantaRestTime * 1000;
|
const pause = Math.random() * ((maxSantaRestTime - minSantaRestTime) * 1000) + minSantaRestTime * 1000;
|
||||||
setTimeout(animateSanta, pause);
|
setTimeout(() => { if (document.body.contains(santa)) animateSanta(); }, pause);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -1,139 +1,112 @@
|
|||||||
.snowflakes {
|
.snowflakes {
|
||||||
display: block;
|
display: block;
|
||||||
position: fixed;
|
position: fixed;
|
||||||
overflow: hidden;
|
overflow: hidden;
|
||||||
top: 0;
|
top: 0;
|
||||||
left: 0;
|
left: 0;
|
||||||
width: 100%;
|
width: 100%;
|
||||||
height: 100%;
|
height: 100%;
|
||||||
pointer-events: none;
|
pointer-events: none;
|
||||||
z-index: 10;
|
z-index: 10;
|
||||||
contain: layout paint;
|
contain: layout paint;
|
||||||
}
|
}
|
||||||
|
|
||||||
.snowflake {
|
.snowflake {
|
||||||
position: fixed;
|
position: fixed;
|
||||||
z-index: 15;
|
z-index: 15;
|
||||||
top: 0;
|
top: 0;
|
||||||
will-change: transform;
|
will-change: transform;
|
||||||
translate: 0 -10vh;
|
translate: 0 -10vh;
|
||||||
font-size: 1em;
|
font-size: 1em;
|
||||||
color: #fff;
|
color: #fff;
|
||||||
font-family: Arial, sans-serif;
|
font-family: Arial, sans-serif;
|
||||||
text-shadow: 0 0 5px #000;
|
text-shadow: 0 0 5px #000;
|
||||||
user-select: none;
|
user-select: none;
|
||||||
-webkit-user-select: none;
|
cursor: default;
|
||||||
cursor: default;
|
animation-name: snowflakes-fall, snowflakes-shake;
|
||||||
-webkit-animation-name: heart-fall, heart-shake;
|
animation-duration: 12s, 3s;
|
||||||
-webkit-animation-duration: 12s, 3s;
|
animation-timing-function: linear, ease-in-out;
|
||||||
-webkit-animation-timing-function: linear, ease-in-out;
|
animation-iteration-count: infinite, infinite;
|
||||||
-webkit-animation-iteration-count: infinite, infinite;
|
}
|
||||||
animation-name: snowflakes-fall, snowflakes-shake;
|
|
||||||
animation-duration: 12s, 3s;
|
|
||||||
animation-timing-function: linear, ease-in-out;
|
|
||||||
animation-iteration-count: infinite, infinite;
|
@keyframes snowflakes-fall {
|
||||||
}
|
0% {
|
||||||
|
translate: 0 -10vh;
|
||||||
@-webkit-keyframes snowflakes-fall {
|
}
|
||||||
0% {
|
|
||||||
translate: 0 -10vh;
|
100% {
|
||||||
}
|
translate: 0 110vh;
|
||||||
|
}
|
||||||
100% {
|
}
|
||||||
translate: 0 110vh;
|
|
||||||
}
|
@keyframes snowflakes-shake {
|
||||||
}
|
|
||||||
|
0%,
|
||||||
@-webkit-keyframes snowflakes-shake {
|
100% {
|
||||||
|
transform: translateX(0);
|
||||||
0%,
|
}
|
||||||
100% {
|
|
||||||
transform: translateX(0);
|
50% {
|
||||||
}
|
transform: translateX(80px);
|
||||||
|
}
|
||||||
50% {
|
}
|
||||||
transform: translateX(80px);
|
|
||||||
}
|
.snowflake:nth-of-type(0) {
|
||||||
}
|
left: 0%;
|
||||||
|
animation-delay: 0s, 0s;
|
||||||
@keyframes snowflakes-fall {
|
}
|
||||||
0% {
|
|
||||||
translate: 0 -10vh;
|
.snowflake:nth-of-type(1) {
|
||||||
}
|
left: 10%;
|
||||||
|
animation-delay: 1s, 1s;
|
||||||
100% {
|
}
|
||||||
translate: 0 110vh;
|
|
||||||
}
|
.snowflake:nth-of-type(2) {
|
||||||
}
|
left: 20%;
|
||||||
|
animation-delay: 6s, 0.5s;
|
||||||
@keyframes snowflakes-shake {
|
}
|
||||||
|
|
||||||
0%,
|
.snowflake:nth-of-type(3) {
|
||||||
100% {
|
left: 30%;
|
||||||
transform: translateX(0);
|
animation-delay: 4s, 2s;
|
||||||
}
|
}
|
||||||
|
|
||||||
50% {
|
.snowflake:nth-of-type(4) {
|
||||||
transform: translateX(80px);
|
left: 40%;
|
||||||
}
|
animation-delay: 2s, 2s;
|
||||||
}
|
}
|
||||||
|
|
||||||
.snowflake:nth-of-type(0) {
|
.snowflake:nth-of-type(5) {
|
||||||
left: 0%;
|
left: 50%;
|
||||||
animation-delay: 0s, 0s;
|
animation-delay: 8s, 3s;
|
||||||
}
|
}
|
||||||
|
|
||||||
.snowflake:nth-of-type(1) {
|
.snowflake:nth-of-type(6) {
|
||||||
left: 10%;
|
left: 60%;
|
||||||
animation-delay: 1s, 1s;
|
animation-delay: 6s, 2s;
|
||||||
}
|
}
|
||||||
|
|
||||||
.snowflake:nth-of-type(2) {
|
.snowflake:nth-of-type(7) {
|
||||||
left: 20%;
|
left: 70%;
|
||||||
animation-delay: 6s, 0.5s;
|
animation-delay: 2.5s, 1s;
|
||||||
}
|
}
|
||||||
|
|
||||||
.snowflake:nth-of-type(3) {
|
.snowflake:nth-of-type(8) {
|
||||||
left: 30%;
|
left: 80%;
|
||||||
animation-delay: 4s, 2s;
|
animation-delay: 1s, 0s;
|
||||||
}
|
}
|
||||||
|
|
||||||
.snowflake:nth-of-type(4) {
|
.snowflake:nth-of-type(9) {
|
||||||
left: 40%;
|
left: 90%;
|
||||||
animation-delay: 2s, 2s;
|
animation-delay: 3s, 1.5s;
|
||||||
}
|
}
|
||||||
|
|
||||||
.snowflake:nth-of-type(5) {
|
.snowflake:nth-of-type(10) {
|
||||||
left: 50%;
|
left: 25%;
|
||||||
animation-delay: 8s, 3s;
|
animation-delay: 2s, 0s;
|
||||||
}
|
}
|
||||||
|
|
||||||
.snowflake:nth-of-type(6) {
|
.snowflake:nth-of-type(11) {
|
||||||
left: 60%;
|
|
||||||
animation-delay: 6s, 2s;
|
|
||||||
}
|
|
||||||
|
|
||||||
.snowflake:nth-of-type(7) {
|
|
||||||
left: 70%;
|
|
||||||
animation-delay: 2.5s, 1s;
|
|
||||||
}
|
|
||||||
|
|
||||||
.snowflake:nth-of-type(8) {
|
|
||||||
left: 80%;
|
|
||||||
animation-delay: 1s, 0s;
|
|
||||||
}
|
|
||||||
|
|
||||||
.snowflake:nth-of-type(9) {
|
|
||||||
left: 90%;
|
|
||||||
animation-delay: 3s, 1.5s;
|
|
||||||
}
|
|
||||||
|
|
||||||
.snowflake:nth-of-type(10) {
|
|
||||||
left: 25%;
|
|
||||||
animation-delay: 2s, 0s;
|
|
||||||
}
|
|
||||||
|
|
||||||
.snowflake:nth-of-type(11) {
|
|
||||||
left: 65%;
|
|
||||||
animation-delay: 4s, 2.5s;
|
|
||||||
left: 65%;
|
left: 65%;
|
||||||
@@ -1,11 +1,11 @@
|
|||||||
const config = window.SeasonalsPluginConfig?.Snowflakes || {};
|
const config = window.SeasonalsPluginConfig?.Snowflakes || {};
|
||||||
|
|
||||||
const snowflakes = config.EnableSnowflakes !== undefined ? config.EnableSnowflakes : true; // enable/disable snowflakes
|
const snowflakes = config.EnableSnowflakes !== undefined ? config.EnableSnowflakes : true; // enable/disable snowflakes
|
||||||
|
const snowflakeCount = config.SnowflakeCount || 25; // count of random extra snowflakes
|
||||||
const randomSnowflakes = config.EnableRandomSnowflakes !== undefined ? config.EnableRandomSnowflakes : true; // enable random Snowflakes
|
const randomSnowflakes = config.EnableRandomSnowflakes !== undefined ? config.EnableRandomSnowflakes : true; // enable random Snowflakes
|
||||||
const randomSnowflakesMobile = config.EnableRandomSnowflakesMobile !== undefined ? config.EnableRandomSnowflakesMobile : false; // enable random Snowflakes on mobile devices
|
const randomSnowflakesMobile = config.EnableRandomSnowflakesMobile !== undefined ? config.EnableRandomSnowflakesMobile : false; // enable random Snowflakes on mobile devices
|
||||||
const enableColoredSnowflakes = config.EnableColoredSnowflakes !== undefined ? config.EnableColoredSnowflakes : true; // enable colored snowflakes
|
const enableColoredSnowflakes = config.EnableColoredSnowflakes !== undefined ? config.EnableColoredSnowflakes : true; // enable colored snowflakes
|
||||||
const enableDiffrentDuration = config.EnableDifferentDuration !== undefined ? config.EnableDifferentDuration : true; // enable different animation duration
|
const enableDiffrentDuration = config.EnableDifferentDuration !== undefined ? config.EnableDifferentDuration : true; // enable different animation duration
|
||||||
const snowflakeCount = config.SnowflakeCount || 25; // count of random extra snowflakes
|
|
||||||
|
|
||||||
const snowflakeSymbols = ['❅', '❆']; // some snowflake symbols
|
const snowflakeSymbols = ['❅', '❆']; // some snowflake symbols
|
||||||
const snowflakeSymbolsMobile = ['❅', '❆', '❄']; // some snowflake symbols mobile version
|
const snowflakeSymbolsMobile = ['❅', '❆', '❄']; // some snowflake symbols mobile version
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
const config = window.SeasonalsPluginConfig?.Snowstorm || {};
|
const config = window.SeasonalsPluginConfig?.Snowstorm || {};
|
||||||
|
|
||||||
const snowstorm = config.enableSnowstorm !== undefined ? config.EnableSnowstorm : true; // enable/disable snowstorm
|
const snowstorm = config.EnableSnowstorm !== undefined ? config.EnableSnowstorm : true; // enable/disable snowstorm
|
||||||
let snowflakesCount = config.SnowflakesCount || 500; // count of snowflakes (recommended values: 300-600)
|
let snowflakesCount = config.SnowflakesCount || 500; // count of snowflakes (recommended values: 300-600)
|
||||||
const snowflakesCountMobile = config.SnowflakesCountMobile || 250; // count of snowflakes on mobile devices (Warning: High values may affect performance)
|
const snowflakesCountMobile = config.SnowflakesCountMobile || 250; // count of snowflakes on mobile devices (Warning: High values may affect performance)
|
||||||
const snowFallSpeed = config.Speed || 6; // speed of snowfall (recommended values: 4-8)
|
const snowFallSpeed = config.Speed || 6; // speed of snowfall (recommended values: 4-8)
|
||||||
|
|||||||
@@ -5,12 +5,13 @@
|
|||||||
width: 100vw;
|
width: 100vw;
|
||||||
height: 100vh;
|
height: 100vh;
|
||||||
pointer-events: none;
|
pointer-events: none;
|
||||||
z-index: 9999;
|
z-index: 10;
|
||||||
overflow: hidden;
|
overflow: hidden;
|
||||||
contain: strict;
|
contain: strict;
|
||||||
}
|
}
|
||||||
|
|
||||||
.space-bg-glow {
|
.space-bg-glow {
|
||||||
|
will-change: transform;
|
||||||
position: absolute;
|
position: absolute;
|
||||||
top: 0; left: 0; width: 100vw; height: 100vh;
|
top: 0; left: 0; width: 100vw; height: 100vh;
|
||||||
background: radial-gradient(circle at 70% 30%, rgba(138, 43, 226, 0.15), transparent 60%),
|
background: radial-gradient(circle at 70% 30%, rgba(138, 43, 226, 0.15), transparent 60%),
|
||||||
@@ -33,6 +34,7 @@
|
|||||||
}
|
}
|
||||||
|
|
||||||
.space-shooting-star {
|
.space-shooting-star {
|
||||||
|
will-change: opacity;
|
||||||
position: absolute;
|
position: absolute;
|
||||||
width: 250px;
|
width: 250px;
|
||||||
height: 3px;
|
height: 3px;
|
||||||
@@ -61,11 +63,11 @@
|
|||||||
}
|
}
|
||||||
|
|
||||||
.space-symbol img {
|
.space-symbol img {
|
||||||
|
will-change: transform;
|
||||||
width: 6vh;
|
width: 6vh;
|
||||||
height: auto;
|
height: auto;
|
||||||
max-width: 60px;
|
max-width: 60px;
|
||||||
object-fit: contain;
|
object-fit: contain;
|
||||||
/* Add a slow spin to images */
|
|
||||||
animation: space-slow-spin var(--rot-dur, 20s) linear infinite;
|
animation: space-slow-spin var(--rot-dur, 20s) linear infinite;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -252,7 +252,8 @@ function createSpace() {
|
|||||||
// Swap to a random image from the pool every time it completes an orbit (disappears)
|
// Swap to a random image from the pool every time it completes an orbit (disappears)
|
||||||
if (imageArr.length > 1) {
|
if (imageArr.length > 1) {
|
||||||
// The animation delay pushes the initial cycle, so we use setInterval matched to duration
|
// The animation delay pushes the initial cycle, so we use setInterval matched to duration
|
||||||
setInterval(() => {
|
const intervalId = setInterval(() => {
|
||||||
|
if (!document.body.contains(container)) { clearInterval(intervalId); return; }
|
||||||
// Update only if currently out of bounds to avoid popping
|
// Update only if currently out of bounds to avoid popping
|
||||||
const rect = symbol.getBoundingClientRect();
|
const rect = symbol.getBoundingClientRect();
|
||||||
if (rect.right < 0 || rect.left > window.innerWidth) {
|
if (rect.right < 0 || rect.left > window.innerWidth) {
|
||||||
|
|||||||
@@ -8,6 +8,7 @@
|
|||||||
height: 100%;
|
height: 100%;
|
||||||
pointer-events: none;
|
pointer-events: none;
|
||||||
z-index: 10;
|
z-index: 10;
|
||||||
|
contain: layout paint;
|
||||||
}
|
}
|
||||||
|
|
||||||
.spooky {
|
.spooky {
|
||||||
@@ -16,19 +17,8 @@
|
|||||||
will-change: transform;
|
will-change: transform;
|
||||||
translate: 0 120vh;
|
translate: 0 120vh;
|
||||||
z-index: 15;
|
z-index: 15;
|
||||||
-webkit-user-select: none;
|
|
||||||
-moz-user-select: none;
|
|
||||||
-ms-user-select: none;
|
|
||||||
user-select: none;
|
user-select: none;
|
||||||
-webkit-user-select: none;
|
|
||||||
cursor: default;
|
cursor: default;
|
||||||
|
|
||||||
-webkit-animation-name: spooky-float;
|
|
||||||
-webkit-animation-duration: 10s;
|
|
||||||
-webkit-animation-timing-function: linear;
|
|
||||||
-webkit-animation-iteration-count: infinite;
|
|
||||||
-webkit-animation-play-state: running;
|
|
||||||
|
|
||||||
animation-name: spooky-float;
|
animation-name: spooky-float;
|
||||||
animation-duration: 10s;
|
animation-duration: 10s;
|
||||||
animation-timing-function: linear;
|
animation-timing-function: linear;
|
||||||
@@ -40,13 +30,6 @@
|
|||||||
width: 30px;
|
width: 30px;
|
||||||
height: auto;
|
height: auto;
|
||||||
will-change: transform;
|
will-change: transform;
|
||||||
|
|
||||||
-webkit-animation-name: spooky-shake;
|
|
||||||
-webkit-animation-duration: 3s;
|
|
||||||
-webkit-animation-timing-function: ease-in-out;
|
|
||||||
-webkit-animation-iteration-count: infinite;
|
|
||||||
-webkit-animation-play-state: running;
|
|
||||||
|
|
||||||
animation-name: spooky-shake;
|
animation-name: spooky-shake;
|
||||||
animation-duration: 3s;
|
animation-duration: 3s;
|
||||||
animation-timing-function: ease-in-out;
|
animation-timing-function: ease-in-out;
|
||||||
@@ -59,22 +42,6 @@
|
|||||||
width: 100%;
|
width: 100%;
|
||||||
}
|
}
|
||||||
|
|
||||||
@-webkit-keyframes spooky-float {
|
|
||||||
0% {
|
|
||||||
translate: 0 120vh;
|
|
||||||
opacity: 0;
|
|
||||||
}
|
|
||||||
10% {
|
|
||||||
opacity: 0.8;
|
|
||||||
}
|
|
||||||
90% {
|
|
||||||
opacity: 0.8;
|
|
||||||
}
|
|
||||||
100% {
|
|
||||||
translate: 0 -150px;
|
|
||||||
opacity: 0;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
@keyframes spooky-float {
|
@keyframes spooky-float {
|
||||||
0% {
|
0% {
|
||||||
@@ -93,14 +60,6 @@
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@-webkit-keyframes spooky-shake {
|
|
||||||
0%, 100% {
|
|
||||||
transform: translateX(0) scale(1) rotate(15deg);
|
|
||||||
}
|
|
||||||
50% {
|
|
||||||
transform: translateX(80px) scale(1.2) rotate(-15deg);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
@keyframes spooky-shake {
|
@keyframes spooky-shake {
|
||||||
0%, 100% {
|
0%, 100% {
|
||||||
@@ -111,7 +70,6 @@
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Base predefined starting offsets (if not overridden by js) */
|
|
||||||
.spooky:nth-of-type(0) { left: 1%; }
|
.spooky:nth-of-type(0) { left: 1%; }
|
||||||
.spooky:nth-of-type(1) { left: 10%; }
|
.spooky:nth-of-type(1) { left: 10%; }
|
||||||
.spooky:nth-of-type(2) { left: 20%; }
|
.spooky:nth-of-type(2) { left: 20%; }
|
||||||
|
|||||||
@@ -7,6 +7,12 @@ const enableSpookySway = config.EnableSpookySway !== undefined ? config.EnableSp
|
|||||||
const spookySize = config.SpookySize || 20;
|
const spookySize = config.SpookySize || 20;
|
||||||
const spookyGlowSize = config.SpookyGlowSize !== undefined ? config.SpookyGlowSize : 2;
|
const spookyGlowSize = config.SpookyGlowSize !== undefined ? config.SpookyGlowSize : 2;
|
||||||
|
|
||||||
|
const spookyImages = [
|
||||||
|
"../Seasonals/Resources/halloween_images/ghost_20x20.png",
|
||||||
|
"../Seasonals/Resources/halloween_images/bat_20x20.png",
|
||||||
|
"../Seasonals/Resources/halloween_images/pumpkin_20x20.png",
|
||||||
|
];
|
||||||
|
|
||||||
let msgPrinted = false;
|
let msgPrinted = false;
|
||||||
|
|
||||||
// function to check and control the spooky theme
|
// function to check and control the spooky theme
|
||||||
@@ -20,13 +26,13 @@ function toggleSpooky() {
|
|||||||
const hasUserMenu = document.querySelector('#app-user-menu');
|
const hasUserMenu = document.querySelector('#app-user-menu');
|
||||||
|
|
||||||
if (videoPlayer || trailerPlayer || isDashboard || hasUserMenu) {
|
if (videoPlayer || trailerPlayer || isDashboard || hasUserMenu) {
|
||||||
spookyContainer.style.display = 'none'; // hide spooky
|
spookyContainer.style.display = 'none';
|
||||||
if (!msgPrinted) {
|
if (!msgPrinted) {
|
||||||
console.log('Spooky Theme hidden');
|
console.log('Spooky Theme hidden');
|
||||||
msgPrinted = true;
|
msgPrinted = true;
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
spookyContainer.style.display = 'block'; // show spooky
|
spookyContainer.style.display = 'block';
|
||||||
if (msgPrinted) {
|
if (msgPrinted) {
|
||||||
console.log('Spooky Theme visible');
|
console.log('Spooky Theme visible');
|
||||||
msgPrinted = false;
|
msgPrinted = false;
|
||||||
@@ -34,7 +40,6 @@ function toggleSpooky() {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// observe changes in the DOM
|
|
||||||
const observer = new MutationObserver(toggleSpooky);
|
const observer = new MutationObserver(toggleSpooky);
|
||||||
observer.observe(document.body, {
|
observer.observe(document.body, {
|
||||||
childList: true,
|
childList: true,
|
||||||
@@ -42,13 +47,7 @@ observer.observe(document.body, {
|
|||||||
attributes: true
|
attributes: true
|
||||||
});
|
});
|
||||||
|
|
||||||
const spookyImages = [
|
|
||||||
"../Seasonals/Resources/halloween_images/ghost_20x20.png",
|
|
||||||
"../Seasonals/Resources/halloween_images/bat_20x20.png",
|
|
||||||
"../Seasonals/Resources/halloween_images/pumpkin_20x20.png",
|
|
||||||
];
|
|
||||||
|
|
||||||
// create spooky objects
|
|
||||||
function createSpooky() {
|
function createSpooky() {
|
||||||
const container = document.querySelector('.spooky-container') || document.createElement("div");
|
const container = document.querySelector('.spooky-container') || document.createElement("div");
|
||||||
|
|
||||||
@@ -95,7 +94,6 @@ function createSpooky() {
|
|||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
// Add configured extra symbols
|
|
||||||
for (let i = 0; i < spookyCount; i++) {
|
for (let i = 0; i < spookyCount; i++) {
|
||||||
const spookyOuter = document.createElement("div");
|
const spookyOuter = document.createElement("div");
|
||||||
spookyOuter.className = "spooky";
|
spookyOuter.className = "spooky";
|
||||||
|
|||||||
@@ -5,16 +5,17 @@
|
|||||||
width: 100vw;
|
width: 100vw;
|
||||||
height: 100vh;
|
height: 100vh;
|
||||||
pointer-events: none;
|
pointer-events: none;
|
||||||
z-index: 9999;
|
z-index: 10;
|
||||||
overflow: hidden;
|
overflow: hidden;
|
||||||
contain: strict;
|
contain: strict;
|
||||||
}
|
}
|
||||||
|
|
||||||
.sports-symbol {
|
.sports-symbol {
|
||||||
position: absolute;
|
position: absolute;
|
||||||
top: -10vh;
|
top: 0;
|
||||||
opacity: 0.9;
|
opacity: 0.9;
|
||||||
z-index: 40;
|
z-index: 40;
|
||||||
|
translate: 0 -10vh;
|
||||||
}
|
}
|
||||||
|
|
||||||
.sports-inner {
|
.sports-inner {
|
||||||
@@ -29,13 +30,15 @@
|
|||||||
}
|
}
|
||||||
|
|
||||||
.sports-confetti {
|
.sports-confetti {
|
||||||
|
will-change: transform, opacity;
|
||||||
position: absolute;
|
position: absolute;
|
||||||
top: -5vh;
|
top: 0;
|
||||||
width: 10px;
|
width: 10px;
|
||||||
height: 15px;
|
height: 15px;
|
||||||
opacity: 0.8;
|
opacity: 0.8;
|
||||||
animation: sports-confetti-fall linear infinite;
|
animation: sports-confetti-fall linear infinite;
|
||||||
border-radius: 2px;
|
border-radius: 2px;
|
||||||
|
translate: 0 -5vh;
|
||||||
}
|
}
|
||||||
|
|
||||||
.sports-confetti.circle {
|
.sports-confetti.circle {
|
||||||
|
|||||||
@@ -203,12 +203,12 @@ function createSports() {
|
|||||||
}, arcDuration * 1000 + 500);
|
}, arcDuration * 1000 + 500);
|
||||||
|
|
||||||
// Schedule the next trophy
|
// Schedule the next trophy
|
||||||
setTimeout(launchTrophy, Math.random() * 20000 + 10000); // Wait 10-30s until next trophy
|
setTimeout(() => { if (document.body.contains(container)) launchTrophy(); }, Math.random() * 20000 + 10000); // Wait 10-30s until next trophy
|
||||||
}
|
}
|
||||||
|
|
||||||
// Launch initial trophy after a short delay
|
// Launch initial trophy after a short delay
|
||||||
if (enableTrophy) {
|
if (enableTrophy) {
|
||||||
setTimeout(launchTrophy, Math.random() * 5000 + 2000);
|
setTimeout(() => { if (document.body.contains(container)) launchTrophy(); }, Math.random() * 5000 + 2000);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Add Germany Colored confetti (Black, Red, Gold)
|
// Add Germany Colored confetti (Black, Red, Gold)
|
||||||
|
|||||||
@@ -29,13 +29,14 @@
|
|||||||
/* Sunbeams */
|
/* Sunbeams */
|
||||||
.spring-sunbeam {
|
.spring-sunbeam {
|
||||||
position: fixed;
|
position: fixed;
|
||||||
top: -50%;
|
top: 0;
|
||||||
height: 200%;
|
height: 200%;
|
||||||
background: linear-gradient(to bottom, rgba(255, 255, 255, 0), rgba(255, 255, 200, 0.08) 50%, rgba(255, 255, 255, 0));
|
background: linear-gradient(to bottom, rgba(255, 255, 255, 0), rgba(255, 255, 200, 0.08) 50%, rgba(255, 255, 255, 0));
|
||||||
z-index: 5;
|
z-index: 5;
|
||||||
transform-origin: top center;
|
transform-origin: top center;
|
||||||
pointer-events: none;
|
pointer-events: none;
|
||||||
opacity: 0;
|
opacity: 0;
|
||||||
|
translate: 0 -50vh;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Grass Container (Wrapper) */
|
/* Grass Container (Wrapper) */
|
||||||
@@ -72,6 +73,7 @@
|
|||||||
|
|
||||||
/* SVG Meadow Layer */
|
/* SVG Meadow Layer */
|
||||||
.spring-meadow-layer {
|
.spring-meadow-layer {
|
||||||
|
will-change: transform;
|
||||||
position: absolute;
|
position: absolute;
|
||||||
bottom: 0;
|
bottom: 0;
|
||||||
left: 0;
|
left: 0;
|
||||||
@@ -94,6 +96,7 @@
|
|||||||
}
|
}
|
||||||
|
|
||||||
.spring-sway {
|
.spring-sway {
|
||||||
|
will-change: transform;
|
||||||
transform-origin: bottom center;
|
transform-origin: bottom center;
|
||||||
animation: spring-meadow-sway 4s ease-in-out infinite alternate;
|
animation: spring-meadow-sway 4s ease-in-out infinite alternate;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -295,7 +295,7 @@ function createBird(container) {
|
|||||||
wrapper.addEventListener('animationend', (e) => {
|
wrapper.addEventListener('animationend', (e) => {
|
||||||
if (e.animationName.includes('fly-')) {
|
if (e.animationName.includes('fly-')) {
|
||||||
wrapper.remove();
|
wrapper.remove();
|
||||||
createBird(container);
|
if (document.body.contains(container)) createBird(container);
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
@@ -338,7 +338,7 @@ function createButterfly(container) {
|
|||||||
wrapper.addEventListener('animationend', (e) => {
|
wrapper.addEventListener('animationend', (e) => {
|
||||||
if (e.animationName.includes('fly-')) {
|
if (e.animationName.includes('fly-')) {
|
||||||
wrapper.remove();
|
wrapper.remove();
|
||||||
createButterfly(container);
|
if (document.body.contains(container)) createButterfly(container);
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
@@ -385,7 +385,7 @@ function createBee(container) {
|
|||||||
wrapper.addEventListener('animationend', (e) => {
|
wrapper.addEventListener('animationend', (e) => {
|
||||||
if (e.animationName.includes('fly-')) {
|
if (e.animationName.includes('fly-')) {
|
||||||
wrapper.remove();
|
wrapper.remove();
|
||||||
createBee(container);
|
if (document.body.contains(container)) createBee(container);
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
@@ -428,7 +428,7 @@ function createLadybugGif(container) {
|
|||||||
wrapper.addEventListener('animationend', (e) => {
|
wrapper.addEventListener('animationend', (e) => {
|
||||||
if (e.animationName.includes('walk-')) {
|
if (e.animationName.includes('walk-')) {
|
||||||
wrapper.remove();
|
wrapper.remove();
|
||||||
createLadybugGif(container);
|
if (document.body.contains(container)) createLadybugGif(container);
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|||||||
@@ -13,10 +13,11 @@
|
|||||||
|
|
||||||
.starwars-center {
|
.starwars-center {
|
||||||
position: absolute;
|
position: absolute;
|
||||||
top: 50%;
|
top: 0;
|
||||||
left: 50%;
|
left: 50%;
|
||||||
width: 0;
|
width: 0;
|
||||||
height: 0;
|
height: 0;
|
||||||
|
translate: 0 50vh;
|
||||||
}
|
}
|
||||||
|
|
||||||
.starwars-streak {
|
.starwars-streak {
|
||||||
|
|||||||
@@ -35,6 +35,7 @@
|
|||||||
}
|
}
|
||||||
|
|
||||||
.underwater-seaweed {
|
.underwater-seaweed {
|
||||||
|
will-change: transform, opacity;
|
||||||
position: absolute;
|
position: absolute;
|
||||||
bottom: -1vh;
|
bottom: -1vh;
|
||||||
font-size: 4rem;
|
font-size: 4rem;
|
||||||
@@ -52,6 +53,7 @@
|
|||||||
}
|
}
|
||||||
|
|
||||||
.underwater-bubble {
|
.underwater-bubble {
|
||||||
|
will-change: transform;
|
||||||
position: absolute;
|
position: absolute;
|
||||||
bottom: -5vh;
|
bottom: -5vh;
|
||||||
border-radius: 50%;
|
border-radius: 50%;
|
||||||
@@ -73,13 +75,13 @@
|
|||||||
}
|
}
|
||||||
|
|
||||||
@keyframes underwater-traverse-up {
|
@keyframes underwater-traverse-up {
|
||||||
0% { top: 120vh; }
|
0% { top: 0; translate: 0 120vh; }
|
||||||
100% { top: -20vh; }
|
100% { top: 0; translate: 0 -20vh; }
|
||||||
}
|
}
|
||||||
|
|
||||||
@keyframes underwater-traverse-down {
|
@keyframes underwater-traverse-down {
|
||||||
0% { top: -20vh; }
|
0% { top: 0; translate: 0 -20vh; }
|
||||||
100% { top: 120vh; }
|
100% { top: 0; translate: 0 120vh; }
|
||||||
}
|
}
|
||||||
|
|
||||||
@keyframes underwater-sway-y {
|
@keyframes underwater-sway-y {
|
||||||
@@ -101,8 +103,9 @@
|
|||||||
}
|
}
|
||||||
|
|
||||||
.underwater-god-rays {
|
.underwater-god-rays {
|
||||||
|
will-change: transform;
|
||||||
position: absolute;
|
position: absolute;
|
||||||
top: -50vh;
|
top: 0;
|
||||||
left: -50vw;
|
left: -50vw;
|
||||||
width: 200vw;
|
width: 200vw;
|
||||||
height: 200vh;
|
height: 200vh;
|
||||||
@@ -119,6 +122,7 @@
|
|||||||
transform-origin: top center;
|
transform-origin: top center;
|
||||||
mix-blend-mode: overlay;
|
mix-blend-mode: overlay;
|
||||||
filter: blur(5px);
|
filter: blur(5px);
|
||||||
|
translate: 0 -50vh;
|
||||||
}
|
}
|
||||||
|
|
||||||
@keyframes god-rays-sway {
|
@keyframes god-rays-sway {
|
||||||
|
|||||||
@@ -9,12 +9,12 @@
|
|||||||
"imageUrl": "https://git.mahom03-spacecloud.de/CodeDevMLH/Jellyfin-Seasonals-Plugin/raw/branch/main/logo.png",
|
"imageUrl": "https://git.mahom03-spacecloud.de/CodeDevMLH/Jellyfin-Seasonals-Plugin/raw/branch/main/logo.png",
|
||||||
"versions": [
|
"versions": [
|
||||||
{
|
{
|
||||||
"version": "2.0.0.0",
|
"version": "2.0.0.1",
|
||||||
"changelog": "- feat: add many themes\n- fix: improve performance",
|
"changelog": "- feat: add many themes\n- fix: improve performance",
|
||||||
"targetAbi": "10.11.0.0",
|
"targetAbi": "10.11.0.0",
|
||||||
"sourceUrl": "https://git.mahom03-spacecloud.de/CodeDevMLH/Jellyfin-Seasonals-Plugin/releases/download/v2.0.0.0/Jellyfin.Plugin.Seasonals.zip",
|
"sourceUrl": "https://git.mahom03-spacecloud.de/CodeDevMLH/Jellyfin-Seasonals-Plugin/releases/download/v2.0.0.1/Jellyfin.Plugin.Seasonals.zip",
|
||||||
"checksum": "11a55b3af5536ad6b3d281746e61f8e6",
|
"checksum": "2eb9ce92f3aa89d133ad09cd874b7c85",
|
||||||
"timestamp": "2026-02-27T00:20:15Z"
|
"timestamp": "2026-02-27T03:27:02Z"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"version": "1.7.2.0",
|
"version": "1.7.2.0",
|
||||||
|
|||||||
Reference in New Issue
Block a user