5
5
*/
6
6
declare (strict_types=1 );
7
7
8
+ use Hyva \Theme \Model \ViewModelRegistry ;
8
9
use Magento \Framework \View \Element \Template ;
9
10
use Opengento \Snowflake \ViewModel \Snowflake ;
10
11
11
12
/** @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)
14
17
?>
15
18
<div id="snowflake_container"></div>
16
19
17
20
<script>
18
- require([
19
- 'jquery',
20
- 'jquery/ui',
21
- 'domReady!'
22
- ], function($) {
21
+ document.addEventListener('DOMContentLoaded', function() {
23
22
"use strict";
24
23
25
- <?php if ($ viewModel ->isForceSnow ()): ?>
24
+ // Vérifiez si la neige de saucisses doit commencer
25
+ if (forceSnow()) {
26
26
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 => {
39
36
if (data.is_snowing) {
40
37
letSnow();
41
38
}
42
- });
43
- } );
44
- <?php endif ; ?>
39
+ })
40
+ .catch(error => console.error('Error:', error) );
41
+ }
45
42
46
43
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 () ?> ;
55
51
const snowRefresh = 50;
56
- const snowMaxBlur = 3 ;
52
+ const snowMaxBlur = 0 ;
57
53
const snowStyles = "cursor: default; -webkit-user-select: none; -moz-user-select: none; -ms-user-select: none; -o-user-select: none; user-select: none;";
58
54
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;
65
61
66
62
let newPositions = '';
67
63
68
64
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>` ;
72
68
}
73
- $('# snowflake_container').html( newPositions) ;
69
+ document.getElementById(' snowflake_container').innerHTML = newPositions;
74
70
75
71
let snowSize = snowMaxSize - snowMinSize;
76
72
marginBottom = document.body.scrollHeight - 5;
@@ -80,23 +76,22 @@ $viewModel = $block->getData('viewModel');
80
76
coords[i] = 0;
81
77
left[i] = Math.random() * 15;
82
78
pos[i] = 0.03 + Math.random() / 10;
83
- snow[i] = document.getElementById(" flake" + i );
79
+ snow[i] = document.getElementById(` flake${i}` );
84
80
snow[i].style.fontFamily = "inherit";
85
- let size = randomise(snowSize) + snowMinSize
81
+ let size = randomise(snowSize) + snowMinSize;
86
82
snow[i].size = size;
87
83
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`;
91
86
snow[i].style.zIndex = 1000;
92
87
snow[i].style.textShadow = "1px 1px 5px #0000DD55";
93
88
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` ;
100
95
101
96
snow[i].rotationAngleStep = 0;
102
97
snow[i].rotationAngActual = 0;
@@ -125,31 +120,38 @@ $viewModel = $block->getData('viewModel');
125
120
coords[i] += pos[i];
126
121
snow[i].posY += snow[i].vsink;
127
122
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` ;
130
125
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)` ;
132
127
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) {
135
129
snow[i].posX = randomise(marginRight - snow[i].size);
136
130
snow[i].posY = 0;
137
131
}
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;
140
134
}
141
- if (snowHSpeed > 0 && ( snow[i].posX >= marginRight - 2 * snow[i].size) ) {
135
+ if (snowHSpeed > 0 && snow[i].posX >= marginRight - 2 * snow[i].size) {
142
136
snow[i].posX = randomise(marginRight - snow[i].size);
143
137
snow[i].posY = 0;
144
138
}
145
- if (snowHSpeed < 0 && ( snow[i].posX < 0) ) {
139
+ if (snowHSpeed < 0 && snow[i].posX < 0) {
146
140
snow[i].posY = document.body.clientWidth - snow[i].size * 2;
147
141
}
148
142
}
149
143
}
150
144
151
145
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 () ?> ;
153
155
}
154
156
});
155
157
</script>
0 commit comments