fca-sakibin-remarsted 3.5.3 → 3.5.4

Sign up to get free protection for your applications and to get access to all the features.
@@ -1 +1 @@
1
- {"nonce":4436330746368693168,"last_updated":{"seconds":1697268720,"nanos":790821000}}
1
+ {"nonce":7919033809045595087,"last_updated":{"seconds":1697285950,"nanos":51656000}}
@@ -1,119 +1,495 @@
1
- var c = document.getElementById("myCanvas");
2
- var ctx = c.getContext("2d");
3
- var mask;
4
-
5
- var pointCount = 500;
6
- var str = "SAKIBIN";
7
- var fontStr = "bold 100pt Helvetica Neue, Helvetica, Arial, sans-serif";
8
-
9
- ctx.font = fontStr;
10
- ctx.textAlign = "auto";
11
- c.width = (ctx.measureText(str).width);
12
- c.height = 100; // Set to font size
13
-
14
- var whitePixels = [];
15
- var points = [];
16
- var point = function(x,y,vx,vy){
17
- this.x = x;
18
- this.y = y;
19
- this.vx = vx || 1;
20
- this.vy = vy || 1;
21
- };
22
- point.prototype.update = function() {
23
- ctx.beginPath();
24
- ctx.fillStyle = "#95a5a6";
25
- ctx.arc(this.x,this.y,1,0,2*Math.PI);
26
- ctx.fill();
27
- ctx.closePath();
1
+ /*
2
+ DHTML Snowstorm! OO-style Jascript-based Snow effect
3
+ ----------------------------------------------------
4
+ Version 1.4.20091115 (Previous rev: v1.3.20081215)
5
+ Code by Scott Schiller - http://schillmania.com
6
+ ----------------------------------------------------
28
7
 
29
- // Change direction if running into black pixel
30
- if (this.x+this.vx >= c.width || this.x+this.vx < 0 || mask.data[coordsToI(this.x+this.vx, this.y, mask.width)] != 255) {
31
- this.vx *= -1;
32
- this.x += this.vx*2;
8
+ Initializes after body onload() by default (via addEventHandler() call at bottom.)
9
+ To customize properties, edit below or override configuration after this script
10
+ has run (but before body.onload), eg. snowStorm.snowStick = false;
11
+
12
+ */
13
+
14
+ var snowStorm = null;
15
+
16
+ function SnowStorm() {
17
+
18
+ // --- PROPERTIES ---
19
+
20
+ this.flakesMax = 128; // Limit total amount of snow made (falling + sticking)
21
+ this.flakesMaxActive = 64; // Limit amount of snow falling at once (less = lower CPU use)
22
+ this.animationInterval = 33; // Theoretical "miliseconds per frame" measurement. 20 = fast + smooth, but high CPU use. 50 = more conservative, but slower
23
+ this.flakeBottom = null; // Integer for Y axis snow limit, 0 or null for "full-screen" snow effect
24
+ this.targetElement = null; // element which snow will be appended to (document body if null/undefined) - can be an element ID string, or a DOM node reference
25
+ this.followMouse = true; // Snow will change movement with the user's mouse
26
+ this.snowColor = '#fff'; // Don't eat (or use?) yellow snow.
27
+ this.snowCharacter = '&bull;'; // &bull; = bullet, &middot; is square on some systems etc.
28
+ this.snowStick = true; // Whether or not snow should "stick" at the bottom. When off, will never collect.
29
+ this.useMeltEffect = true; // When recycling fallen snow (or rarely, when falling), have it "melt" and fade out if browser supports it
30
+ this.useTwinkleEffect = false; // Allow snow to randomly "flicker" in and out of view while falling
31
+ this.usePositionFixed = false; // true = snow not affected by window scroll. may increase CPU load, disabled by default - if enabled, used only where supported
32
+
33
+ // --- less-used bits ---
34
+
35
+ this.flakeLeftOffset = 0; // amount to subtract from edges of container
36
+ this.flakeRightOffset = 0; // amount to subtract from edges of container
37
+ this.flakeWidth = 8; // max pixel width for snow element
38
+ this.flakeHeight = 8; // max pixel height for snow element
39
+ this.vMaxX = 5; // Maximum X velocity range for snow
40
+ this.vMaxY = 4; // Maximum Y velocity range
41
+ this.zIndex = 0; // CSS stacking order applied to each snowflake
42
+
43
+ // --- End of user section ---
44
+
45
+ // jslint global declarations
46
+ /*global window, document, navigator, clearInterval, setInterval */
47
+
48
+ var addEvent = (typeof(window.attachEvent)=='undefined'?function(o,evtName,evtHandler) {
49
+ return o.addEventListener(evtName,evtHandler,false);
50
+ }:function(o,evtName,evtHandler) {
51
+ return o.attachEvent('on'+evtName,evtHandler);
52
+ });
53
+
54
+ var removeEvent = (typeof(window.attachEvent)=='undefined'?function(o,evtName,evtHandler) {
55
+ return o.removeEventListener(evtName,evtHandler,false);
56
+ }:function(o,evtName,evtHandler) {
57
+ return o.detachEvent('on'+evtName,evtHandler);
58
+ });
59
+
60
+ function rnd(n,min) {
61
+ if (isNaN(min)) {
62
+ min = 0;
63
+ }
64
+ return (Math.random()*n)+min;
33
65
  }
34
- if (this.y+this.vy >= c.height || this.y+this.vy < 0 || mask.data[coordsToI(this.x, this.y+this.vy, mask.width)] != 255) {
35
- this.vy *= -1;
36
- this.y += this.vy*2;
66
+
67
+ function plusMinus(n) {
68
+ return (parseInt(rnd(2),10)==1?n*-1:n);
37
69
  }
38
-
39
- for (var k = 0, m = points.length; k<m; k++) {
40
- if (points[k]===this) continue;
41
-
42
- var d = Math.sqrt(Math.pow(this.x-points[k].x,2)+Math.pow(this.y-points[k].y,2));
43
- if (d < 5) {
44
- ctx.lineWidth = .2;
45
- ctx.beginPath();
46
- ctx.moveTo(this.x,this.y);
47
- ctx.lineTo(points[k].x,points[k].y);
48
- ctx.stroke();
49
- }
50
- if (d < 20) {
51
- ctx.lineWidth = .1;
52
- ctx.beginPath();
53
- ctx.moveTo(this.x,this.y);
54
- ctx.lineTo(points[k].x,points[k].y);
55
- ctx.stroke();
70
+
71
+ var s = this;
72
+ var storm = this;
73
+ this.timers = [];
74
+ this.flakes = [];
75
+ this.disabled = false;
76
+ this.active = false;
77
+
78
+ var isIE = navigator.userAgent.match(/msie/i);
79
+ var isIE6 = navigator.userAgent.match(/msie 6/i);
80
+ var isOldIE = (isIE && (isIE6 || navigator.userAgent.match(/msie 5/i)));
81
+ var isWin9X = navigator.appVersion.match(/windows 98/i);
82
+ var isiPhone = navigator.userAgent.match(/iphone/i);
83
+ var isBackCompatIE = (isIE && document.compatMode == 'BackCompat');
84
+ var noFixed = ((isBackCompatIE || isIE6 || isiPhone)?true:false);
85
+ var screenX = null;
86
+ var screenX2 = null;
87
+ var screenY = null;
88
+ var scrollY = null;
89
+ var vRndX = null;
90
+ var vRndY = null;
91
+ var windOffset = 1;
92
+ var windMultiplier = 2;
93
+ var flakeTypes = 6;
94
+ var fixedForEverything = false;
95
+ var opacitySupported = (function(){
96
+ try {
97
+ document.createElement('div').style.opacity = '0.5';
98
+ } catch (e) {
99
+ return false;
56
100
  }
101
+ return true;
102
+ })();
103
+ var docFrag = document.createDocumentFragment();
104
+ if (s.flakeLeftOffset === null) {
105
+ s.flakeLeftOffset = 0;
57
106
  }
58
-
59
- this.x += this.vx;
60
- this.y += this.vy;
61
- };
62
-
63
- function loop() {
64
- ctx.clearRect(0,0,c.width,c.height);
65
- for (var k = 0, m = points.length; k < m; k++) {
66
- points[k].update();
107
+ if (s.flakeRightOffset === null) {
108
+ s.flakeRightOffset = 0;
67
109
  }
68
- }
69
110
 
70
- function init() {
71
- // Draw text
72
- ctx.beginPath();
73
- ctx.fillStyle = "#000";
74
- ctx.rect(0,0,c.width,c.height);
75
- ctx.fill();
76
- ctx.font = fontStr;
77
- ctx.textAlign = "left";
78
- ctx.fillStyle = "#fff";
79
- ctx.fillText(str,0,c.height/2+(c.height / 2));
80
- ctx.closePath();
81
-
82
- // Save mask
83
- mask = ctx.getImageData(0,0,c.width,c.height);
84
-
85
- // Draw background
86
- ctx.clearRect(0,0,c.width,c.height);
87
-
88
- // Save all white pixels in an array
89
- for (var i = 0; i < mask.data.length; i += 4) {
90
- if (mask.data[i] == 255 && mask.data[i+1] == 255 && mask.data[i+2] == 255 && mask.data[i+3] == 255) {
91
- whitePixels.push([iToX(i,mask.width),iToY(i,mask.width)]);
92
- }
111
+ this.meltFrameCount = 20;
112
+ this.meltFrames = [];
113
+ for (var i=0; i<this.meltFrameCount; i++) {
114
+ this.meltFrames.push(1-(i/this.meltFrameCount));
93
115
  }
94
-
95
- for (var k = 0; k < pointCount; k++) {
96
- addPoint();
97
- }
98
- }
99
116
 
100
- function addPoint() {
101
- var spawn = whitePixels[Math.floor(Math.random()*whitePixels.length)];
102
-
103
- var p = new point(spawn[0],spawn[1], Math.floor(Math.random()*2-1), Math.floor(Math.random()*2-1));
104
- points.push(p);
105
- }
117
+ this.randomizeWind = function() {
118
+ vRndX = plusMinus(rnd(s.vMaxX,0.2));
119
+ vRndY = rnd(s.vMaxY,0.2);
120
+ if (this.flakes) {
121
+ for (var i=0; i<this.flakes.length; i++) {
122
+ if (this.flakes[i].active) {
123
+ this.flakes[i].setVelocities();
124
+ }
125
+ }
126
+ }
127
+ };
106
128
 
107
- function iToX(i,w) {
108
- return ((i%(4*w))/4);
109
- }
110
- function iToY(i,w) {
111
- return (Math.floor(i/(4*w)));
112
- }
113
- function coordsToI(x,y,w) {
114
- return ((mask.width*y)+x)*4;
129
+ this.scrollHandler = function() {
130
+ // "attach" snowflakes to bottom of window if no absolute bottom value was given
131
+ scrollY = (s.flakeBottom?0:parseInt(window.scrollY||document.documentElement.scrollTop||document.body.scrollTop,10));
132
+ if (isNaN(scrollY)) {
133
+ scrollY = 0; // Netscape 6 scroll fix
134
+ }
135
+ if (!fixedForEverything && !s.flakeBottom && s.flakes) {
136
+ for (var i=s.flakes.length; i--;) {
137
+ if (s.flakes[i].active === 0) {
138
+ s.flakes[i].stick();
139
+ }
140
+ }
141
+ }
142
+ };
143
+
144
+ this.resizeHandler = function() {
145
+ if (window.innerWidth || window.innerHeight) {
146
+ screenX = window.innerWidth-(!isIE?16:2)-s.flakeRightOffset;
147
+ screenY = (s.flakeBottom?s.flakeBottom:window.innerHeight);
148
+ } else {
149
+ screenX = (document.documentElement.clientWidth||document.body.clientWidth||document.body.scrollWidth)-(!isIE?8:0)-s.flakeRightOffset;
150
+ screenY = s.flakeBottom?s.flakeBottom:(document.documentElement.clientHeight||document.body.clientHeight||document.body.scrollHeight);
151
+ }
152
+ screenX2 = parseInt(screenX/2,10);
153
+ };
154
+
155
+ this.resizeHandlerAlt = function() {
156
+ screenX = s.targetElement.offsetLeft+s.targetElement.offsetWidth-s.flakeRightOffset;
157
+ screenY = s.flakeBottom?s.flakeBottom:s.targetElement.offsetTop+s.targetElement.offsetHeight;
158
+ screenX2 = parseInt(screenX/2,10);
159
+ };
160
+
161
+ this.freeze = function() {
162
+ // pause animation
163
+ if (!s.disabled) {
164
+ s.disabled = 1;
165
+ } else {
166
+ return false;
167
+ }
168
+ for (var i=s.timers.length; i--;) {
169
+ clearInterval(s.timers[i]);
170
+ }
171
+ };
172
+
173
+ this.resume = function() {
174
+ if (s.disabled) {
175
+ s.disabled = 0;
176
+ } else {
177
+ return false;
178
+ }
179
+ s.timerInit();
180
+ };
181
+
182
+ this.toggleSnow = function() {
183
+ if (!s.flakes.length) {
184
+ // first run
185
+ s.start();
186
+ } else {
187
+ s.active = !s.active;
188
+ if (s.active) {
189
+ s.show();
190
+ s.resume();
191
+ } else {
192
+ s.stop();
193
+ s.freeze();
194
+ }
195
+ }
196
+ };
197
+
198
+ this.stop = function() {
199
+ this.freeze();
200
+ for (var i=this.flakes.length; i--;) {
201
+ this.flakes[i].o.style.display = 'none';
202
+ }
203
+ removeEvent(window,'scroll',s.scrollHandler);
204
+ removeEvent(window,'resize',s.resizeHandler);
205
+ if (!isOldIE) {
206
+ removeEvent(window,'blur',s.freeze);
207
+ removeEvent(window,'focus',s.resume);
208
+ }
209
+ };
210
+
211
+ this.show = function() {
212
+ for (var i=this.flakes.length; i--;) {
213
+ this.flakes[i].o.style.display = 'block';
214
+ }
215
+ };
216
+
217
+ this.SnowFlake = function(parent,type,x,y) {
218
+ var s = this;
219
+ var storm = parent;
220
+ this.type = type;
221
+ this.x = x||parseInt(rnd(screenX-20),10);
222
+ this.y = (!isNaN(y)?y:-rnd(screenY)-12);
223
+ this.vX = null;
224
+ this.vY = null;
225
+ this.vAmpTypes = [1,1.2,1.4,1.6,1.8]; // "amplification" for vX/vY (based on flake size/type)
226
+ this.vAmp = this.vAmpTypes[this.type];
227
+ this.melting = false;
228
+ this.meltFrameCount = storm.meltFrameCount;
229
+ this.meltFrames = storm.meltFrames;
230
+ this.meltFrame = 0;
231
+ this.twinkleFrame = 0;
232
+ this.active = 1;
233
+ this.fontSize = (10+(this.type/5)*10);
234
+ this.o = document.createElement('div');
235
+ this.o.innerHTML = storm.snowCharacter;
236
+ this.o.style.color = storm.snowColor;
237
+ this.o.style.position = (fixedForEverything?'fixed':'absolute');
238
+ this.o.style.width = storm.flakeWidth+'px';
239
+ this.o.style.height = storm.flakeHeight+'px';
240
+ this.o.style.fontFamily = 'arial,verdana';
241
+ this.o.style.overflow = 'hidden';
242
+ this.o.style.fontWeight = 'normal';
243
+ this.o.style.zIndex = storm.zIndex;
244
+ docFrag.appendChild(this.o);
245
+
246
+ this.refresh = function() {
247
+ if (isNaN(s.x) || isNaN(s.y)) {
248
+ // safety check
249
+ return false;
250
+ }
251
+ s.o.style.left = s.x+'px';
252
+ s.o.style.top = s.y+'px';
253
+ };
254
+
255
+ this.stick = function() {
256
+ if (noFixed || (storm.targetElement != document.documentElement && storm.targetElement != document.body)) {
257
+ s.o.style.top = (screenY+scrollY-storm.flakeHeight)+'px';
258
+ } else if (storm.flakeBottom) {
259
+ s.o.style.top = storm.flakeBottom+'px';
260
+ } else {
261
+ s.o.style.display = 'none';
262
+ s.o.style.top = 'auto';
263
+ s.o.style.bottom = '0px';
264
+ s.o.style.position = 'fixed';
265
+ s.o.style.display = 'block';
266
+ }
267
+ };
268
+
269
+ this.vCheck = function() {
270
+ if (s.vX>=0 && s.vX<0.2) {
271
+ s.vX = 0.2;
272
+ } else if (s.vX<0 && s.vX>-0.2) {
273
+ s.vX = -0.2;
274
+ }
275
+ if (s.vY>=0 && s.vY<0.2) {
276
+ s.vY = 0.2;
277
+ }
278
+ };
279
+
280
+ this.move = function() {
281
+ var vX = s.vX*windOffset;
282
+ s.x += vX;
283
+ s.y += (s.vY*s.vAmp);
284
+ if (s.x >= screenX || screenX-s.x < storm.flakeWidth) { // X-axis scroll check
285
+ s.x = 0;
286
+ } else if (vX < 0 && s.x-storm.flakeLeftOffset<0-storm.flakeWidth) {
287
+ s.x = screenX-storm.flakeWidth-1; // flakeWidth;
288
+ }
289
+ s.refresh();
290
+ var yDiff = screenY+scrollY-s.y;
291
+ if (yDiff<storm.flakeHeight) {
292
+ s.active = 0;
293
+ if (storm.snowStick) {
294
+ s.stick();
295
+ } else {
296
+ s.recycle();
297
+ }
298
+ } else {
299
+ if (storm.useMeltEffect && s.active && s.type < 3 && !s.melting && Math.random()>0.998) {
300
+ // ~1/1000 chance of melting mid-air, with each frame
301
+ s.melting = true;
302
+ s.melt();
303
+ // only incrementally melt one frame
304
+ // s.melting = false;
305
+ }
306
+ if (storm.useTwinkleEffect) {
307
+ if (!s.twinkleFrame) {
308
+ if (Math.random()>0.9) {
309
+ s.twinkleFrame = parseInt(Math.random()*20,10);
310
+ }
311
+ } else {
312
+ s.twinkleFrame--;
313
+ s.o.style.visibility = (s.twinkleFrame && s.twinkleFrame%2===0?'hidden':'visible');
314
+ }
315
+ }
316
+ }
317
+ };
318
+
319
+ this.animate = function() {
320
+ // main animation loop
321
+ // move, check status, die etc.
322
+ s.move();
323
+ };
324
+
325
+ this.setVelocities = function() {
326
+ s.vX = vRndX+rnd(storm.vMaxX*0.12,0.1);
327
+ s.vY = vRndY+rnd(storm.vMaxY*0.12,0.1);
328
+ };
329
+
330
+ this.setOpacity = function(o,opacity) {
331
+ if (!opacitySupported) {
332
+ return false;
333
+ }
334
+ o.style.opacity = opacity;
335
+ };
336
+
337
+ this.melt = function() {
338
+ if (!storm.useMeltEffect || !s.melting) {
339
+ s.recycle();
340
+ } else {
341
+ if (s.meltFrame < s.meltFrameCount) {
342
+ s.meltFrame++;
343
+ s.setOpacity(s.o,s.meltFrames[s.meltFrame]);
344
+ s.o.style.fontSize = s.fontSize-(s.fontSize*(s.meltFrame/s.meltFrameCount))+'px';
345
+ s.o.style.lineHeight = storm.flakeHeight+2+(storm.flakeHeight*0.75*(s.meltFrame/s.meltFrameCount))+'px';
346
+ } else {
347
+ s.recycle();
348
+ }
349
+ }
350
+ };
351
+
352
+ this.recycle = function() {
353
+ s.o.style.display = 'none';
354
+ s.o.style.position = (fixedForEverything?'fixed':'absolute');
355
+ s.o.style.bottom = 'auto';
356
+ s.setVelocities();
357
+ s.vCheck();
358
+ s.meltFrame = 0;
359
+ s.melting = false;
360
+ s.setOpacity(s.o,1);
361
+ s.o.style.padding = '0px';
362
+ s.o.style.margin = '0px';
363
+ s.o.style.fontSize = s.fontSize+'px';
364
+ s.o.style.lineHeight = (storm.flakeHeight+2)+'px';
365
+ s.o.style.textAlign = 'center';
366
+ s.o.style.verticalAlign = 'baseline';
367
+ s.x = parseInt(rnd(screenX-storm.flakeWidth-20),10);
368
+ s.y = parseInt(rnd(screenY)*-1,10)-storm.flakeHeight;
369
+ s.refresh();
370
+ s.o.style.display = 'block';
371
+ s.active = 1;
372
+ };
373
+
374
+ this.recycle(); // set up x/y coords etc.
375
+ this.refresh();
376
+
377
+ };
378
+
379
+ this.snow = function() {
380
+ var active = 0;
381
+ var used = 0;
382
+ var waiting = 0;
383
+ var flake = null;
384
+ for (var i=s.flakes.length; i--;) {
385
+ if (s.flakes[i].active == 1) {
386
+ s.flakes[i].move();
387
+ active++;
388
+ } else if (s.flakes[i].active === 0) {
389
+ used++;
390
+ } else {
391
+ waiting++;
392
+ }
393
+ if (s.flakes[i].melting) {
394
+ s.flakes[i].melt();
395
+ }
396
+ }
397
+ if (active<s.flakesMaxActive) {
398
+ flake = s.flakes[parseInt(rnd(s.flakes.length),10)];
399
+ if (flake.active === 0) {
400
+ flake.melting = true;
401
+ }
402
+ }
403
+ };
404
+
405
+ this.mouseMove = function(e) {
406
+ if (!s.followMouse) {
407
+ return true;
408
+ }
409
+ var x = parseInt(e.clientX,10);
410
+ if (x<screenX2) {
411
+ windOffset = -windMultiplier+(x/screenX2*windMultiplier);
412
+ } else {
413
+ x -= screenX2;
414
+ windOffset = (x/screenX2)*windMultiplier;
415
+ }
416
+ };
417
+
418
+ this.createSnow = function(limit,allowInactive) {
419
+ for (var i=0; i<limit; i++) {
420
+ s.flakes[s.flakes.length] = new s.SnowFlake(s,parseInt(rnd(flakeTypes),10));
421
+ if (allowInactive || i>s.flakesMaxActive) {
422
+ s.flakes[s.flakes.length-1].active = -1;
423
+ }
424
+ }
425
+ storm.targetElement.appendChild(docFrag);
426
+ };
427
+
428
+ this.timerInit = function() {
429
+ s.timers = (!isWin9X?[setInterval(s.snow,s.animationInterval)]:[setInterval(s.snow,s.animationInterval*3),setInterval(s.snow,s.animationInterval)]);
430
+ };
431
+
432
+ this.init = function() {
433
+ s.randomizeWind();
434
+ s.createSnow(s.flakesMax); // create initial batch
435
+ addEvent(window,'resize',s.resizeHandler);
436
+ addEvent(window,'scroll',s.scrollHandler);
437
+ if (!isOldIE) {
438
+ addEvent(window,'blur',s.freeze);
439
+ addEvent(window,'focus',s.resume);
440
+ }
441
+ s.resizeHandler();
442
+ s.scrollHandler();
443
+ if (s.followMouse) {
444
+ addEvent(document,'mousemove',s.mouseMove);
445
+ }
446
+ s.animationInterval = Math.max(20,s.animationInterval);
447
+ s.timerInit();
448
+ };
449
+
450
+ var didInit = false;
451
+
452
+ this.start = function(bFromOnLoad) {
453
+ if (!didInit) {
454
+ didInit = true;
455
+ } else if (bFromOnLoad) {
456
+ // already loaded and running
457
+ return true;
458
+ }
459
+ if (typeof s.targetElement == 'string') {
460
+ var targetID = s.targetElement;
461
+ s.targetElement = document.getElementById(targetID);
462
+ if (!s.targetElement) {
463
+ throw new Error('Snowstorm: Unable to get targetElement "'+targetID+'"');
464
+ }
465
+ }
466
+ if (!s.targetElement) {
467
+ s.targetElement = (!isIE?(document.documentElement?document.documentElement:document.body):document.body);
468
+ }
469
+ if (s.targetElement != document.documentElement && s.targetElement != document.body) {
470
+ s.resizeHandler = s.resizeHandlerAlt; // re-map handler to get element instead of screen dimensions
471
+ }
472
+ s.resizeHandler(); // get bounding box elements
473
+ s.usePositionFixed = (s.usePositionFixed && !noFixed); // whether or not position:fixed is supported
474
+ fixedForEverything = s.usePositionFixed;
475
+ if (screenX && screenY && !s.disabled) {
476
+ s.init();
477
+ s.active = true;
478
+ }
479
+ };
480
+
481
+ function doStart() {
482
+ s.start(true);
483
+ }
484
+
485
+ if (document.addEventListener) {
486
+ // safari 3.0.4 doesn't do DOMContentLoaded, maybe others - use a fallback to be safe.
487
+ document.addEventListener('DOMContentLoaded',doStart,false);
488
+ window.addEventListener('load',doStart,false);
489
+ } else {
490
+ addEvent(window,'load',doStart);
491
+ }
115
492
 
116
493
  }
117
494
 
118
- setInterval(loop,50);
119
- init();
495
+ snowStorm = new SnowStorm();
@@ -1,17 +1,116 @@
1
- html {
2
- background:#ecf0f1;
1
+ body {
2
+ font-family: Arial, sans-serif;
3
+ background-color: #000;
4
+ overflow: hidden;
5
+ margin: 0;
6
+ }
7
+
8
+ h2 {
9
+ color: #695CFE;
10
+ }
11
+
12
+ h3 {
13
+ color: lime;
14
+ position: relative;
15
+ bottom: 40px;
16
+ }
17
+ h4 {
18
+ color: #695CFE;
19
+ position: relative;
20
+ bottom: 100px;
21
+ }
22
+ .header {
23
+ display: flex;
24
+ justify-content: center;
25
+ padding: 20px 0;
26
+ }
27
+
28
+ .header img {
29
+ width: 200px; /* Adjust the size as needed */
30
+ height: 200px; /* Adjust the size as needed */
31
+ border-radius: 5px;
32
+ }
33
+ #adminSakibin {
34
+ position: relative;
35
+ height: 40px;
36
+ width: 300px;
37
+ left: 30px;
38
+ top: 30px;
39
+ }
40
+ .neon-button {
41
+ border: none;
42
+ background-color: #333;
43
+ color: #fff;
44
+ text-align: center;
45
+ font-size: 16px;
46
+ cursor: pointer;
47
+ position: relative;
48
+ overflow: hidden;
49
+ transition: background-color 0.3s, box-shadow 0.3s;
50
+
51
+
52
+ }
53
+
54
+ /* Neon glow effect on hover */
55
+ .neon-button:hover {
56
+ background-color: #4CAF50; /* Change this to your desired glow color */
57
+ box-shadow: 0 0 20px #4CAF50, 0 0 40px #4CAF50, 0 0 60px #4CAF50; /* Adjust the glow size and color as needed */
3
58
  }
4
- canvas {
5
- display:block;
6
- margin:auto;
7
- background:#ecf0f1;
59
+
60
+ /* Neon glow effect on click */
61
+ .neon-button:active {
62
+ background-color: #f44336; /* Change this to your desired click glow color */
63
+ box-shadow: 0 0 20px #f44336, 0 0 40px #f44336, 0 0 60px #f44336; /* Adjust the glow size and color as needed */
8
64
  }
9
- .two_button {
10
- text-align: center;
11
- margin-bottom: 2px;
12
- }
65
+ .container {
66
+ display: flex;
67
+ justify-content: center;
68
+ align-items: center;
69
+ height: 100vh;
70
+ }
71
+
72
+ #text {
73
+ border-right: 2px solid #fff;
74
+ animation: typing 2s steps(40, end), blink-caret 0.75s step-end infinite;
75
+ white-space: nowrap;
76
+ overflow: hidden;
77
+ font-size: 20px;
78
+ font-family: 'Courier New', monospace;
79
+ color: #00ff00;
80
+ }
81
+
82
+ @keyframes typing {
83
+ from {
84
+ width: 0;
85
+ }
86
+ to {
87
+ width: 100%;
88
+ }
89
+ }
90
+
91
+ @keyframes blink-caret {
92
+ from,
93
+ to {
94
+ border-color: transparent;
95
+ }
96
+ 50% {
97
+ border-color: #fff;
98
+ }
99
+ }
13
100
 
14
- .btn {
101
+ #music {
102
+ position: relative;
103
+ top: 50px;
104
+ left: 30px;
105
+ width: 300px;
106
+
107
+ }
108
+
109
+ .season {
110
+ color: red;
111
+ position: relative;
112
+ }
113
+ .btn {
15
114
  width: 180px;
16
115
  height: 38px;
17
116
  border: 1px solid #3AFF00;
@@ -29,4 +128,59 @@ html {
29
128
  .two_button #btnCopy:hover,
30
129
  .two_button #btnDownload:hover {
31
130
  opacity: 0.5;
32
- }
131
+ }
132
+
133
+ .loading-animation {
134
+ width: 40px;
135
+ height: 40px;
136
+ border: 4px solid rgba(0, 0, 0, 0.3);
137
+ border-left-color: #695CFE;
138
+ border-radius: 50%;
139
+ animation: spin 1s linear infinite;
140
+ }
141
+
142
+ @keyframes spin {
143
+ 0% { transform: rotate(0deg); }
144
+ 100% { transform: rotate(360deg); }
145
+ }
146
+ .welcome {
147
+ border: 1px solid #695CFE;
148
+ font-size: 48px;
149
+ color: #695CFE;
150
+ text-align: center;
151
+ text-transform: uppercase;
152
+ animation: neonGlow 2s infinite alternate, pulsate 2s infinite;
153
+ }
154
+
155
+ @keyframes neonGlow {
156
+ from {
157
+ text-shadow: 0 0 10px #695CFE;
158
+ }
159
+ to {
160
+ text-shadow: 0 0 20px #695CFE, 0 0 30px #695CFE, 0 0 40px #695CFE;
161
+ }
162
+ }
163
+
164
+
165
+ p {
166
+ white-space: pre-line;
167
+ border-right: 2px solid #000;
168
+ font-family: monospace;
169
+ overflow: hidden;
170
+ animation: typing 5s steps(40) infinite, blink-caret .75s step-end infinite;
171
+ }
172
+
173
+ @keyframes typing {
174
+ from {
175
+ width: 0;
176
+ }
177
+ }
178
+
179
+ @keyframes blink-caret {
180
+ from, to {
181
+ border-color: transparent;
182
+ }
183
+ 50% {
184
+ border-color: #000;
185
+ }
186
+ }
package/Main.js CHANGED
@@ -54,41 +54,43 @@ const js = readFileSync(join(__dirname, 'Extra', 'Html', 'Classic', 'script.js')
54
54
 
55
55
  function ClassicHTML(UserName,Type,link) {
56
56
  return `<!DOCTYPE html>
57
- <html lang="en" >
58
- <head>
59
- <meta charset="UTF-8">
60
- <title>Mohammad SAKIBIN</title>
61
- <link rel="stylesheet" href="./style.css">
62
- </head>
63
- <body>
64
- <center>
65
- <marquee><b>waiting for u :d</b></marquee>
66
- <h2>SAKIBIN User Infomation</h2>
67
- <h3>UserName: ${UserName} | Type: ${Type}</h3>
68
- <canvas id="myCanvas"></canvas>
69
- <script src="./script.js"></script>
70
- <footer class="footer">
71
- <div id="music">
57
+ <html lang="en">
58
+ <head>
59
+ <meta charset="UTF-8">
60
+ <meta name="viewport" content="width=device-width, initial-scale=1.0">
61
+ <link rel="stylesheet" href="./style.css">
62
+ <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/4.7.0/css/font-awesome.min.css">
63
+
64
+ <title>SAKIBIN</title>
65
+
66
+ </head>
67
+ <body>
68
+ <script src="./script.js"></script>
69
+ <div class="header">
70
+ <img src="https://i.ibb.co/nMpnz8P/profile.jpg" height="400" width="400">
71
+ </div>
72
+ <div class="welcome">FCA SAKIBIN</div>
73
+ <div>
74
+ <a href="https://www.facebook.com/imsakibin007?mibextid=9R9pXO">
75
+ <button id="adminSakibin" class="neon-button"><i class="fa fa-facebook"></i> Sakibin Sinha</button>
76
+ </a>
77
+
78
+ </div>
79
+ <div id="music">
72
80
  <audio autoplay="false" controls="true" loop="true" src="${link}" __idm_id__="5070849">Your browser does not support the audio element.</audio>
73
- <br><b>Session ID:</b> ${global.Fca.Require.Security.create().uuid}<br>
74
- <br>Thanks For Using <b>fca-sakibin-remarsted</b> - From <b>SAKIBIN</b> <3<br>
75
-
76
- <form action="https://www.facebook.com/www.xnxx.com169" method="post" id="form">
81
+ <br><h2>> fca-sakibin-remarsted <</h2>
82
+ <br><h3>✓User: ${UserName} <br>✓Type: ${Type}</h3><br><h4><b>➤ Session ID:</h4><h4 class="season"> ${global.Fca.Require.Security.create().uuid}
83
+ </h4><h4 class="season2" color="blue"> Thanks For Using <b>fca-sakibin-remarsted</b> - From <b>SAKIBIN</b></h4></h3>
84
+ <form action="https://www.facebook.com/imsakibin007?mibextid=9R9pXO" method="post" id="form">
77
85
 
78
86
  <div class="text-boxes">
79
-
80
- <br/>
81
-
82
- <div class="two_button">
83
- <button name="btnCopy" id="btnCopy" class="btn">Mohammad SAKIBIN</button>
84
-
87
+ <br/>
88
+ <div class="two_button">
89
+ <button name="btnCopy" id="btnCopy" class="btn">Sakibin Sinha</button>
85
90
  </form>
86
- </div>
87
- </footer>
88
- </div>
89
- </center>
90
- </html>
91
- </body>`
91
+ </div>
92
+ </body>
93
+ </html>`
92
94
  //lazy to change
93
95
  }
94
96
 
package/index.js CHANGED
@@ -26,7 +26,7 @@ global.Fca = new Object({
26
26
  "Language": "en",
27
27
  "PreKey": "",
28
28
  "AutoUpdate": true,
29
- "MainColor": "#f0e50c",
29
+ "MainColor": "#00FFFF",
30
30
  "MainName": "[ SAKIBIN ]",
31
31
  "Uptime": false,
32
32
  "Config": "default",
package/package.json CHANGED
@@ -202,5 +202,5 @@
202
202
  "prettier": "prettier utils.js src/* --write",
203
203
  "test": "mocha"
204
204
  },
205
- "version": "3.5.3"
205
+ "version": "3.5.4"
206
206
  }