Spaces:
Running
Running
about to refactor
Browse files- index.html +221 -5
- style.css +60 -0
- xet.png +0 -0
index.html
CHANGED
@@ -29,7 +29,14 @@
|
|
29 |
</div>
|
30 |
</div>
|
31 |
</div>
|
32 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
33 |
<div class="charts-container">
|
34 |
<div class="chart-card">
|
35 |
<div class="card">
|
@@ -49,7 +56,6 @@
|
|
49 |
</div>
|
50 |
</div>
|
51 |
</div>
|
52 |
-
|
53 |
|
54 |
<script>
|
55 |
|
@@ -58,12 +64,15 @@
|
|
58 |
|
59 |
const FILE_CSV_URL = 'https://huggingface.co/datasets/jsulz/ready-xet-go/resolve/main/file-progress.csv';
|
60 |
|
|
|
|
|
61 |
(async () => {
|
62 |
/*
|
63 |
* Data fetching and parsing
|
64 |
*/
|
65 |
const repo_rows = [];
|
66 |
-
const file_rows = [];
|
|
|
67 |
|
68 |
const repo_csv = await new Promise((resolve, reject) => {
|
69 |
Papa.parse(REPO_CSV_URL, {
|
@@ -101,6 +110,23 @@
|
|
101 |
}
|
102 |
});
|
103 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
104 |
/*
|
105 |
* Progress Bar
|
106 |
*/
|
@@ -192,8 +218,8 @@
|
|
192 |
//
|
193 |
|
194 |
// Set up donut chart data
|
195 |
-
lfs_file_count = file_rows[file_rows.length - 1].lfs_files;
|
196 |
-
xet_file_count = file_rows[file_rows.length - 1].xet_files;
|
197 |
|
198 |
|
199 |
// Initialize donut chart
|
@@ -226,7 +252,197 @@
|
|
226 |
}
|
227 |
}
|
228 |
});
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
229 |
})();
|
|
|
|
|
230 |
</script>
|
231 |
</body>
|
232 |
</html>
|
|
|
29 |
</div>
|
30 |
</div>
|
31 |
</div>
|
32 |
+
<div class="container">
|
33 |
+
<div class="counter-wrapper">
|
34 |
+
<div class="counter-container" id="counter"></div>
|
35 |
+
<div class="counter-text" id="counterText" style="opacity: 0; transition: opacity 1s ease-in;">
|
36 |
+
in <img src="xet.png" alt="Xet" class="xet-logo">
|
37 |
+
</div>
|
38 |
+
</div>
|
39 |
+
</div>
|
40 |
<div class="charts-container">
|
41 |
<div class="chart-card">
|
42 |
<div class="card">
|
|
|
56 |
</div>
|
57 |
</div>
|
58 |
</div>
|
|
|
59 |
|
60 |
<script>
|
61 |
|
|
|
64 |
|
65 |
const FILE_CSV_URL = 'https://huggingface.co/datasets/jsulz/ready-xet-go/resolve/main/file-progress.csv';
|
66 |
|
67 |
+
const BYTES_CSV_URL = 'https://huggingface.co/datasets/jsulz/ready-xet-go/resolve/main/bytes-progress.csv';
|
68 |
+
|
69 |
(async () => {
|
70 |
/*
|
71 |
* Data fetching and parsing
|
72 |
*/
|
73 |
const repo_rows = [];
|
74 |
+
const file_rows = [];
|
75 |
+
const bytes_rows = [];
|
76 |
|
77 |
const repo_csv = await new Promise((resolve, reject) => {
|
78 |
Papa.parse(REPO_CSV_URL, {
|
|
|
110 |
}
|
111 |
});
|
112 |
|
113 |
+
const bytes_csv = await new Promise((resolve, reject) => {
|
114 |
+
Papa.parse(BYTES_CSV_URL, {
|
115 |
+
download: true,
|
116 |
+
header : true,
|
117 |
+
complete: resolve,
|
118 |
+
error : reject
|
119 |
+
});
|
120 |
+
});
|
121 |
+
bytes_csv.data.forEach(row => {
|
122 |
+
if (row.date && row.bytes) {
|
123 |
+
bytes_rows.push({
|
124 |
+
date: new Date(row.date),
|
125 |
+
bytes: parseInt(row.bytes, 10)
|
126 |
+
});
|
127 |
+
}
|
128 |
+
});
|
129 |
+
|
130 |
/*
|
131 |
* Progress Bar
|
132 |
*/
|
|
|
218 |
//
|
219 |
|
220 |
// Set up donut chart data
|
221 |
+
const lfs_file_count = file_rows[file_rows.length - 1].lfs_files;
|
222 |
+
const xet_file_count = file_rows[file_rows.length - 1].xet_files;
|
223 |
|
224 |
|
225 |
// Initialize donut chart
|
|
|
252 |
}
|
253 |
}
|
254 |
});
|
255 |
+
|
256 |
+
|
257 |
+
|
258 |
+
|
259 |
+
/*
|
260 |
+
* Counter
|
261 |
+
*/
|
262 |
+
|
263 |
+
// 5x7 pixel patterns for each character (1=pixel on, 0=pixel off)
|
264 |
+
const patterns = {
|
265 |
+
'1': [
|
266 |
+
'00100',
|
267 |
+
'01100',
|
268 |
+
'00100',
|
269 |
+
'00100',
|
270 |
+
'00100',
|
271 |
+
'00100',
|
272 |
+
'01110'
|
273 |
+
],
|
274 |
+
'2': [
|
275 |
+
'01110',
|
276 |
+
'10001',
|
277 |
+
'00001',
|
278 |
+
'00010',
|
279 |
+
'00100',
|
280 |
+
'01000',
|
281 |
+
'11111'
|
282 |
+
],
|
283 |
+
'3': [
|
284 |
+
'01110',
|
285 |
+
'10001',
|
286 |
+
'00001',
|
287 |
+
'00110',
|
288 |
+
'00001',
|
289 |
+
'10001',
|
290 |
+
'01110'
|
291 |
+
],
|
292 |
+
'4': [
|
293 |
+
'00010',
|
294 |
+
'00110',
|
295 |
+
'01010',
|
296 |
+
'10010',
|
297 |
+
'11111',
|
298 |
+
'00010',
|
299 |
+
'00010'
|
300 |
+
],
|
301 |
+
'5': [
|
302 |
+
'11111',
|
303 |
+
'10000',
|
304 |
+
'10000',
|
305 |
+
'11110',
|
306 |
+
'00001',
|
307 |
+
'10001',
|
308 |
+
'01110'
|
309 |
+
],
|
310 |
+
'6': [
|
311 |
+
'01110',
|
312 |
+
'10001',
|
313 |
+
'10000',
|
314 |
+
'11110',
|
315 |
+
'10001',
|
316 |
+
'10001',
|
317 |
+
'01110'
|
318 |
+
],
|
319 |
+
'7': [
|
320 |
+
'11111',
|
321 |
+
'00001',
|
322 |
+
'00010',
|
323 |
+
'00100',
|
324 |
+
'01000',
|
325 |
+
'01000',
|
326 |
+
'01000'
|
327 |
+
],
|
328 |
+
'8': [
|
329 |
+
'01110',
|
330 |
+
'10001',
|
331 |
+
'10001',
|
332 |
+
'01110',
|
333 |
+
'10001',
|
334 |
+
'10001',
|
335 |
+
'01110'
|
336 |
+
],
|
337 |
+
'9': [
|
338 |
+
'01110',
|
339 |
+
'10001',
|
340 |
+
'10001',
|
341 |
+
'01111',
|
342 |
+
'00001',
|
343 |
+
'10001',
|
344 |
+
'01110'
|
345 |
+
],
|
346 |
+
'0': [
|
347 |
+
'01110',
|
348 |
+
'10001',
|
349 |
+
'10001',
|
350 |
+
'10001',
|
351 |
+
'10001',
|
352 |
+
'10001',
|
353 |
+
'01110'
|
354 |
+
],
|
355 |
+
'.': [
|
356 |
+
'00000',
|
357 |
+
'00000',
|
358 |
+
'00000',
|
359 |
+
'00000',
|
360 |
+
'00000',
|
361 |
+
'00100',
|
362 |
+
'01110'
|
363 |
+
],
|
364 |
+
'P': [
|
365 |
+
'11110',
|
366 |
+
'10001',
|
367 |
+
'10001',
|
368 |
+
'11110',
|
369 |
+
'10000',
|
370 |
+
'10000',
|
371 |
+
'10000'
|
372 |
+
],
|
373 |
+
'B': [
|
374 |
+
'11110',
|
375 |
+
'10001',
|
376 |
+
'10001',
|
377 |
+
'11110',
|
378 |
+
'10001',
|
379 |
+
'10001',
|
380 |
+
'11110'
|
381 |
+
]
|
382 |
+
};
|
383 |
+
|
384 |
+
console.log(bytes_rows[bytes_rows.length - 1].bytes)
|
385 |
+
// Convert bytes to PB and format as string
|
386 |
+
const bytesInPB = 1024 ** 5;
|
387 |
+
// Calculate the number of PBs and round to 2 decimal places
|
388 |
+
const text = (bytes_rows[bytes_rows.length - 1].bytes / bytesInPB).toFixed(2) + 'PB';
|
389 |
+
console.log(text)
|
390 |
+
const container = document.getElementById('counter');
|
391 |
+
const pixelSize = 5; // Match CSS variable
|
392 |
+
const pixelGap = 1;
|
393 |
+
let allPixels = [];
|
394 |
+
|
395 |
+
// Create characters and their pixels
|
396 |
+
text.split('').forEach((char, charIndex) => {
|
397 |
+
const charDiv = document.createElement('div');
|
398 |
+
charDiv.className = 'character';
|
399 |
+
|
400 |
+
const pattern = patterns[char];
|
401 |
+
if (!pattern) return;
|
402 |
+
|
403 |
+
// Generate pixels based on pattern
|
404 |
+
pattern.forEach((row, rowIndex) => {
|
405 |
+
row.split('').forEach((cell, colIndex) => {
|
406 |
+
if (cell === '1') {
|
407 |
+
const pixel = document.createElement('div');
|
408 |
+
pixel.className = 'pixel';
|
409 |
+
|
410 |
+
// Calculate final position within character grid
|
411 |
+
const finalX = colIndex * (pixelSize + pixelGap);
|
412 |
+
const finalY = rowIndex * (pixelSize + pixelGap);
|
413 |
+
|
414 |
+
pixel.style.left = `${finalX}px`;
|
415 |
+
pixel.style.top = `${finalY}px`;
|
416 |
+
|
417 |
+
charDiv.appendChild(pixel);
|
418 |
+
allPixels.push(pixel);
|
419 |
+
}
|
420 |
+
});
|
421 |
+
});
|
422 |
+
|
423 |
+
container.appendChild(charDiv);
|
424 |
+
});
|
425 |
+
|
426 |
+
console.log(allPixels)
|
427 |
+
|
428 |
+
// Animate pixels falling into their final positions
|
429 |
+
allPixels.forEach((pixel, index) => {
|
430 |
+
// Stagger the landing times for a cascading effect
|
431 |
+
const delay = Math.random() * 50 + (index * 50);
|
432 |
+
|
433 |
+
setTimeout(() => {
|
434 |
+
pixel.classList.add('landed');
|
435 |
+
}, delay);
|
436 |
+
});
|
437 |
+
const maxDelay = Math.max(...allPixels.map((_, index) => Math.random() * 50 + (index * 50)));
|
438 |
+
setTimeout(() => {
|
439 |
+
const textDiv = document.getElementById('counterText');
|
440 |
+
textDiv.style.opacity = '1';
|
441 |
+
}, maxDelay + 500);
|
442 |
+
|
443 |
})();
|
444 |
+
|
445 |
+
|
446 |
</script>
|
447 |
</body>
|
448 |
</html>
|
style.css
CHANGED
@@ -268,4 +268,64 @@ canvas {
|
|
268 |
flex-direction: column;
|
269 |
gap: 24px;
|
270 |
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
271 |
}
|
|
|
268 |
flex-direction: column;
|
269 |
gap: 24px;
|
270 |
}
|
271 |
+
}
|
272 |
+
|
273 |
+
:root {
|
274 |
+
--pixel-size: 5px;
|
275 |
+
--pixel-color: oklch(.585 .233 277.117);
|
276 |
+
--bg-color: #000;
|
277 |
+
}
|
278 |
+
|
279 |
+
.counter-container {
|
280 |
+
display: flex;
|
281 |
+
gap: calc(var(--pixel-size) * 3);
|
282 |
+
position: relative;
|
283 |
+
max-width: 350px;
|
284 |
+
max-height: 150px;
|
285 |
+
overflow: hidden;
|
286 |
+
margin: 0 auto;
|
287 |
+
justify-content: center;
|
288 |
+
}
|
289 |
+
|
290 |
+
.character {
|
291 |
+
width: calc(var(--pixel-size) * 5 + 4px);
|
292 |
+
height: calc(var(--pixel-size) * 7 + 6px);
|
293 |
+
position: relative;
|
294 |
+
}
|
295 |
+
|
296 |
+
.pixel {
|
297 |
+
width: var(--pixel-size);
|
298 |
+
height: var(--pixel-size);
|
299 |
+
background: var(--pixel-color);
|
300 |
+
position: absolute;
|
301 |
+
transition: transform 1.2s cubic-bezier(0.4, 0, 0.2, 1);
|
302 |
+
transform: translateY(-200px);
|
303 |
+
opacity: 1;
|
304 |
+
box-shadow: 0 0 2px var(--pixel-color);
|
305 |
+
}
|
306 |
+
|
307 |
+
.pixel.landed {
|
308 |
+
transform: translateY(0);
|
309 |
+
}
|
310 |
+
|
311 |
+
.counter-wrapper {
|
312 |
+
display: flex;
|
313 |
+
flex-direction: column;
|
314 |
+
align-items: center;
|
315 |
+
gap: 1rem; /* Adjust spacing as needed */
|
316 |
+
}
|
317 |
+
|
318 |
+
.counter-text {
|
319 |
+
display: flex;
|
320 |
+
align-items: center; /* or center */
|
321 |
+
gap: 0.5rem;
|
322 |
+
justify-content: center;
|
323 |
+
line-height: 2em;
|
324 |
+
}
|
325 |
+
|
326 |
+
.xet-logo {
|
327 |
+
height: 2.5em; /* Match text size exactly */
|
328 |
+
width: auto;
|
329 |
+
display: inline-block;
|
330 |
+
vertical-align: baseline;
|
331 |
}
|
xet.png
ADDED
![]() |