55 */
66declare (strict_types=1 );
77
8+ use Hyva \Theme \Model \ViewModelRegistry ;
89use Magento \Framework \View \Element \Template ;
910use Opengento \Snowflake \ViewModel \Snowflake ;
1011
1112/** @var Template $block */
12- /** @var Snowflake $viewModel */
13- $ viewModel = $ block ->getData ('viewModel ' );
13+ /** @var ViewModelRegistry $viewModels */
14+
15+ /** @var Snowflake $snowflake */
16+ $ snowflake = $ viewModels ->require (Snowflake::class)
1417?>
1518<div id="snowflake_container"></div>
1619
1720<script>
18- require([
19- 'jquery',
20- 'jquery/ui',
21- 'domReady!'
22- ], function($) {
21+ document.addEventListener('DOMContentLoaded', function() {
2322 "use strict";
2423
25- <?php if ($ viewModel ->isForceSnow ()): ?>
24+ // Vérifiez si la neige de saucisses doit commencer
25+ if (forceSnow()) {
2626 letSnow();
27- <?php elseif ($ viewModel ->isApiEnabled ()): ?>
28- let lat, lon, settings = {
29- "url": "<?= $ viewModel ->getIpLocatorApiUrl () ?> ",
30- "method": "GET",
31- "timeout": 0
32- };
33- $.ajax(settings).done(function (response) {
34- [lat, lon] = response.loc.split(',');
35- $.ajax({
36- url: '<?= $ block ->getData ('meteoUrl ' ) ?> lat/' + lat + '/lon/' + lon,
37- type: "GET",
38- }).done(function (data) {
27+ } else if (isApiEnabled()) {
28+ fetch("<?= $ snowflake ->getIpLocatorApiUrl () ?> ")
29+ .then(response => response.json())
30+ .then(data => {
31+ let [lat, lon] = data.loc.split(',');
32+ return fetch(`<?= $ block ->getData ('meteoUrl ' ) ?> lat/${lat}/lon/${lon}`);
33+ })
34+ .then(response => response.json())
35+ .then(data => {
3936 if (data.is_snowing) {
4037 letSnow();
4138 }
42- });
43- } );
44- <?php endif ; ?>
39+ })
40+ .catch(error => console.error('Error:', error) );
41+ }
4542
4643 function letSnow() {
47- let snowMax = <?= $ viewModel ->getSnowflakeQty () ?> ;
48- let snowColor = ["#DDD", "#BBB", "#AAA", "#EEE", "#CCC"];
49- let snowEntity = "<?= $ viewModel ->getSnowflakeChar () ?> ";
50- let snowVSpeed = <?= $ viewModel ->getSnowflakeVSpeed () ?> ;
51- let snowHSpeed = <?= $ viewModel ->getSnowflakeHSpeed () ?> ;
52- let snowRotSpeed = <?= $ viewModel ->getSnowflakeRotSpeed () ?> ;
53- let snowMinSize = <?= $ viewModel ->getSnowflakeMinSize () ?> ;
54- const snowMaxSize = <?= $ viewModel ->getSnowflakeMaxSize () ?> ;
44+ let snowMax = <?= $ snowflake ->getSnowflakeQty () ?> ;
45+ let snowEntities = <?= $ snowflake ->getIconsForSelectedSeason () ?> ;
46+ let snowVSpeed = <?= $ snowflake ->getSnowflakeVSpeed () ?> ;
47+ let snowHSpeed = <?= $ snowflake ->getSnowflakeHSpeed () ?> ;
48+ let snowRotSpeed = <?= $ snowflake ->getSnowflakeRotSpeed () ?> ;
49+ let snowMinSize = <?= $ snowflake ->getSnowflakeMinSize () ?> ;
50+ const snowMaxSize = <?= $ snowflake ->getSnowflakeMaxSize () ?> ;
5551 const snowRefresh = 50;
56- const snowMaxBlur = 3 ;
52+ const snowMaxBlur = 0 ;
5753 const snowStyles = "cursor: default; -webkit-user-select: none; -moz-user-select: none; -ms-user-select: none; -o-user-select: none; user-select: none;";
5854
59- let snow = [],
60- pos = [],
61- coords = [],
62- left = [],
63- marginBottom,
64- marginRight;
55+ let snow = [];
56+ let pos = [];
57+ let coords = [];
58+ let left = [];
59+ let marginBottom;
60+ let marginRight;
6561
6662 let newPositions = '';
6763
6864 for (let i = 0; i <= snowMax; i++) {
69- newPositions += ("<span id='flake" + i + "'" +
70- " style='" + snowStyles + "position:absolute;top:-" + snowMaxSize + "'>"
71- + snowEntity + " </span>") ;
65+ // Utiliser l'index modulo pour choisir une icône différente à chaque itération
66+ let entity = snowEntities[i % snowEntities.length].trim(); // Utilisation de trim() pour éviter les espaces indésirables
67+ newPositions += `<span id='flake${i}' style='${snowStyles} position:absolute; top:-${snowMaxSize}px;'>${entity} </span>` ;
7268 }
73- $('# snowflake_container').html( newPositions) ;
69+ document.getElementById(' snowflake_container').innerHTML = newPositions;
7470
7571 let snowSize = snowMaxSize - snowMinSize;
7672 marginBottom = document.body.scrollHeight - 5;
@@ -80,23 +76,22 @@ $viewModel = $block->getData('viewModel');
8076 coords[i] = 0;
8177 left[i] = Math.random() * 15;
8278 pos[i] = 0.03 + Math.random() / 10;
83- snow[i] = document.getElementById(" flake" + i );
79+ snow[i] = document.getElementById(` flake${i}` );
8480 snow[i].style.fontFamily = "inherit";
85- let size = randomise(snowSize) + snowMinSize
81+ let size = randomise(snowSize) + snowMinSize;
8682 snow[i].size = size;
8783 snow[i].speedFactor = snowMaxSize / size / 2;
88- snow[i].style.filter = "blur(" + (snowMaxBlur * ((snowMaxSize - size) / (snowMaxSize - snowMinSize))) / 2 + "px)";
89- snow[i].style.fontSize = snow[i].size + "px";
90- snow[i].style.color = snowColor[randomise(snowColor.length)];
84+ snow[i].style.filter = `blur(${(snowMaxBlur * ((snowMaxSize - size) / (snowMaxSize - snowMinSize))) / 2}px)`;
85+ snow[i].style.fontSize = `${size}px`;
9186 snow[i].style.zIndex = 1000;
9287 snow[i].style.textShadow = "1px 1px 5px #0000DD55";
9388 snow[i].style.transform = "rotate(0deg)";
94- snow[i].vsink = snowVSpeed * snow[i]. size / 5;
95- snow[i].hsink = snowHSpeed * snow[i]. size / 5;
96- snow[i].posX = randomise(marginRight - snow[i]. size);
97- snow[i].posY = randomise(2 * marginBottom - marginBottom - 2 * snow[i]. size);
98- snow[i].style.left = snow[i].posX + "px" ;
99- snow[i].style.top = snow[i].posY + "px" ;
89+ snow[i].vsink = snowVSpeed * size / 5;
90+ snow[i].hsink = snowHSpeed * size / 5;
91+ snow[i].posX = randomise(marginRight - size);
92+ snow[i].posY = randomise(2 * marginBottom - marginBottom - 2 * size);
93+ snow[i].style.left = `${ snow[i].posX}px` ;
94+ snow[i].style.top = `${ snow[i].posY}px` ;
10095
10196 snow[i].rotationAngleStep = 0;
10297 snow[i].rotationAngActual = 0;
@@ -125,31 +120,38 @@ $viewModel = $block->getData('viewModel');
125120 coords[i] += pos[i];
126121 snow[i].posY += snow[i].vsink;
127122 snow[i].posX += snow[i].hsink * snow[i].speedFactor;
128- snow[i].style.left = snow[i].posX + left[i] * Math.sin(coords[i]) + "px" ;
129- snow[i].style.top = snow[i].posY + "px" ;
123+ snow[i].style.left = `${ snow[i].posX + left[i] * Math.sin(coords[i])}px` ;
124+ snow[i].style.top = `${ snow[i].posY}px` ;
130125 snow[i].rotationAngActual += snow[i].rotationAngleStep;
131- snow[i].style.transform = " rotate(" + snow[i].rotationAngActual + " deg)" ;
126+ snow[i].style.transform = ` rotate(${ snow[i].rotationAngActual} deg)` ;
132127
133- // if (snowVSpeed > 0 && (snow[i].posY >= marginBottom - 2 * snow[i].size || parseInt(snow[i].style.left) > (marginRight - 3 * left[i]))) {
134- if (snowVSpeed > 0 && (snow[i].posY >= marginBottom - 2 * snow[i].size)) {
128+ if (snowVSpeed > 0 && snow[i].posY >= marginBottom - 2 * snow[i].size) {
135129 snow[i].posX = randomise(marginRight - snow[i].size);
136130 snow[i].posY = 0;
137131 }
138- if (snowVSpeed < 0 && ( snow[i].posY < 0) ) {
139- snow[i].posY = document.body.scrollHeight - snow[i].size *2;
132+ if (snowVSpeed < 0 && snow[i].posY < 0) {
133+ snow[i].posY = document.body.scrollHeight - snow[i].size * 2;
140134 }
141- if (snowHSpeed > 0 && ( snow[i].posX >= marginRight - 2 * snow[i].size) ) {
135+ if (snowHSpeed > 0 && snow[i].posX >= marginRight - 2 * snow[i].size) {
142136 snow[i].posX = randomise(marginRight - snow[i].size);
143137 snow[i].posY = 0;
144138 }
145- if (snowHSpeed < 0 && ( snow[i].posX < 0) ) {
139+ if (snowHSpeed < 0 && snow[i].posX < 0) {
146140 snow[i].posY = document.body.clientWidth - snow[i].size * 2;
147141 }
148142 }
149143 }
150144
151145 window.addEventListener('resize', resize);
152- window.setInterval(moveSnow, snowRefresh);
146+ setInterval(moveSnow, snowRefresh);
147+ }
148+
149+ function forceSnow() {
150+ return <?= $ snowflake ->isForceSnow () ?> ;
151+ }
152+
153+ function isApiEnabled() {
154+ return <?= $ snowflake ->isApiEnabled () ?> ;
153155 }
154156 });
155157</script>
0 commit comments