File size: 4,887 Bytes
f0bb158
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
export class PixelCounter {
    constructor() {
        this.patterns = {
            '1': [
                '00100',
                '01100',
                '00100',
                '00100',
                '00100',
                '00100',
                '01110'
            ],
            '2': [
                '01110',
                '10001',
                '00001',
                '00010',
                '00100',
                '01000',
                '11111'
            ],
            '3': [
                '01110',
                '10001',
                '00001',
                '00110',
                '00001',
                '10001',
                '01110'
            ],
            '4': [
                '00010',
                '00110',
                '01010',
                '10010',
                '11111',
                '00010',
                '00010'
            ],
            '5': [
                '11111',
                '10000',
                '10000',
                '11110',
                '00001',
                '10001',
                '01110'
            ],
            '6': [
                '01110',
                '10001',
                '10000',
                '11110',
                '10001',
                '10001',
                '01110'
            ],
            '7': [
                '11111',
                '00001',
                '00010',
                '00100',
                '01000',
                '01000',
                '01000'
            ],
            '8': [
                '01110',
                '10001',
                '10001',
                '01110',
                '10001',
                '10001',
                '01110'
            ],
            '9': [
                '01110',
                '10001',
                '10001',
                '01111',
                '00001',
                '10001',
                '01110'
            ],
            '0': [
                '01110',
                '10001',
                '10001',
                '10001',
                '10001',
                '10001',
                '01110'
            ],
            '.': [
                '00000',
                '00000',
                '00000',
                '00000',
                '00000',
                '00100',
                '01110'
            ],
            'P': [
                '11110',
                '10001',
                '10001',
                '11110',
                '10000',
                '10000',
                '10000'
            ],
            'B': [
                '11110',
                '10001',
                '10001',
                '11110',
                '10001',
                '10001',
                '11110'
            ]
        };
    }

    createCounter(bytesData) {
        console.log(bytesData[bytesData.length - 1].bytes);
        const bytesInPB = 1024 ** 5;
        const text = (bytesData[bytesData.length - 1].bytes / bytesInPB).toFixed(2) + 'PB';
        console.log(text);
        const container = document.getElementById('counter');
        const pixelSize = 5;
        const pixelGap = 1;
        let allPixels = [];

        text.split('').forEach((char, charIndex) => {
            const charDiv = document.createElement('div');
            charDiv.className = 'character';
            
            const pattern = this.patterns[char];
            if (!pattern) return;

            pattern.forEach((row, rowIndex) => {
                row.split('').forEach((cell, colIndex) => {
                    if (cell === '1') {
                        const pixel = document.createElement('div');
                        pixel.className = 'pixel';
                        
                        const finalX = colIndex * (pixelSize + pixelGap);
                        const finalY = rowIndex * (pixelSize + pixelGap);
                        
                        pixel.style.left = `${finalX}px`;
                        pixel.style.top = `${finalY}px`;
                        
                        charDiv.appendChild(pixel);
                        allPixels.push(pixel);
                    }
                });
            });
            
            container.appendChild(charDiv);
        });

        console.log(allPixels);

        allPixels.forEach((pixel, index) => {
            const delay = Math.random() * 50 + (index * 50);
            
            setTimeout(() => {
                pixel.classList.add('landed');
            }, delay);
        });
        const maxDelay = Math.max(...allPixels.map((_, index) => Math.random() * 50 + (index * 50)));
        setTimeout(() => {
            const textDiv = document.getElementById('counterText');
            textDiv.style.opacity = '1';
        }, maxDelay + 500);
    }

    init(bytesData) {
        this.createCounter(bytesData);
    }
}