Update index.html
Browse files- index.html +169 -16
index.html
CHANGED
@@ -170,7 +170,6 @@
|
|
170 |
}
|
171 |
|
172 |
.treemap-node.file {
|
173 |
-
background: linear-gradient(135deg, #74b9ff 0%, #0984e3 100%);
|
174 |
color: white;
|
175 |
}
|
176 |
|
@@ -179,6 +178,66 @@
|
|
179 |
color: white;
|
180 |
}
|
181 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
182 |
.tooltip {
|
183 |
position: absolute;
|
184 |
background: rgba(0, 0, 0, 0.9);
|
@@ -282,6 +341,40 @@
|
|
282 |
<div class="stat-label">Max Depth</div>
|
283 |
</div>
|
284 |
</div>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
285 |
</div>
|
286 |
</div>
|
287 |
|
@@ -436,7 +529,7 @@
|
|
436 |
name: 'Demo Project',
|
437 |
path: '',
|
438 |
type: 'directory',
|
439 |
-
size:
|
440 |
children: [
|
441 |
{
|
442 |
name: 'src',
|
@@ -445,33 +538,45 @@
|
|
445 |
size: 28500000,
|
446 |
children: [
|
447 |
{ name: 'main.js', path: 'src/main.js', type: 'file', size: 15200000 },
|
448 |
-
{ name: 'utils.
|
449 |
-
{ name: 'config.
|
450 |
-
{ name: '
|
451 |
]
|
452 |
},
|
453 |
{
|
454 |
name: 'assets',
|
455 |
path: 'assets',
|
456 |
type: 'directory',
|
457 |
-
size:
|
458 |
children: [
|
|
|
459 |
{ name: 'logo.png', path: 'assets/logo.png', type: 'file', size: 5600000 },
|
460 |
{ name: 'background.jpg', path: 'assets/background.jpg', type: 'file', size: 4200000 },
|
461 |
-
{ name: '
|
462 |
]
|
463 |
},
|
464 |
{
|
465 |
name: 'docs',
|
466 |
path: 'docs',
|
467 |
type: 'directory',
|
468 |
-
size:
|
469 |
children: [
|
470 |
-
{ name: '
|
471 |
-
{ name: '
|
|
|
472 |
{ name: 'CHANGELOG.md', path: 'docs/CHANGELOG.md', type: 'file', size: 700000 }
|
473 |
]
|
474 |
},
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
475 |
{
|
476 |
name: 'tests',
|
477 |
path: 'tests',
|
@@ -479,12 +584,13 @@
|
|
479 |
size: 1320000,
|
480 |
children: [
|
481 |
{ name: 'main.test.js', path: 'tests/main.test.js', type: 'file', size: 680000 },
|
482 |
-
{ name: 'utils.test.
|
483 |
-
{ name: 'config.test.
|
484 |
]
|
485 |
},
|
486 |
{ name: 'package.json', path: 'package.json', type: 'file', size: 180000 },
|
487 |
-
{ name: 'webpack.config.js', path: 'webpack.config.js', type: 'file', size: 120000 }
|
|
|
488 |
]
|
489 |
};
|
490 |
|
@@ -553,6 +659,30 @@
|
|
553 |
document.getElementById('totalSize').textContent = this.formatFileSize(stats.size);
|
554 |
document.getElementById('maxDepth').textContent = stats.depth;
|
555 |
document.getElementById('stats').style.display = 'flex';
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
556 |
}
|
557 |
|
558 |
calculateStats(node, depth = 0) {
|
@@ -749,7 +879,15 @@
|
|
749 |
|
750 |
layout.forEach(rect => {
|
751 |
const element = document.createElement('div');
|
752 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
753 |
|
754 |
element.style.left = `${rect.x}px`;
|
755 |
element.style.top = `${rect.y}px`;
|
@@ -780,8 +918,23 @@
|
|
780 |
|
781 |
createTooltipContent(data) {
|
782 |
let content = `<strong>${data.name}</strong><br>`;
|
783 |
-
content += `Type: ${data.type}
|
784 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
785 |
content += `Path: ${data.path}<br>`;
|
786 |
|
787 |
if (data.type === 'file' && data.lastModified) {
|
|
|
170 |
}
|
171 |
|
172 |
.treemap-node.file {
|
|
|
173 |
color: white;
|
174 |
}
|
175 |
|
|
|
178 |
color: white;
|
179 |
}
|
180 |
|
181 |
+
/* File type specific colors */
|
182 |
+
.treemap-node.file-image {
|
183 |
+
background: linear-gradient(135deg, #00cec9 0%, #00b894 100%);
|
184 |
+
}
|
185 |
+
|
186 |
+
.treemap-node.file-video {
|
187 |
+
background: linear-gradient(135deg, #e17055 0%, #d63031 100%);
|
188 |
+
}
|
189 |
+
|
190 |
+
.treemap-node.file-audio {
|
191 |
+
background: linear-gradient(135deg, #a29bfe 0%, #6c5ce7 100%);
|
192 |
+
}
|
193 |
+
|
194 |
+
.treemap-node.file-document {
|
195 |
+
background: linear-gradient(135deg, #fdcb6e 0%, #e17055 100%);
|
196 |
+
}
|
197 |
+
|
198 |
+
.treemap-node.file-office {
|
199 |
+
background: linear-gradient(135deg, #00b894 0%, #00a085 100%);
|
200 |
+
}
|
201 |
+
|
202 |
+
.treemap-node.file-code {
|
203 |
+
background: linear-gradient(135deg, #81ecec 0%, #00cec9 100%);
|
204 |
+
}
|
205 |
+
|
206 |
+
.legend {
|
207 |
+
display: flex;
|
208 |
+
justify-content: center;
|
209 |
+
flex-wrap: wrap;
|
210 |
+
gap: 15px;
|
211 |
+
margin-top: 20px;
|
212 |
+
padding: 20px;
|
213 |
+
background: white;
|
214 |
+
border-radius: 10px;
|
215 |
+
box-shadow: 0 2px 10px rgba(0,0,0,0.1);
|
216 |
+
}
|
217 |
+
|
218 |
+
.legend-item {
|
219 |
+
display: flex;
|
220 |
+
align-items: center;
|
221 |
+
gap: 8px;
|
222 |
+
font-size: 0.9em;
|
223 |
+
}
|
224 |
+
|
225 |
+
.legend-color {
|
226 |
+
width: 16px;
|
227 |
+
height: 16px;
|
228 |
+
border-radius: 3px;
|
229 |
+
border: 1px solid rgba(0,0,0,0.1);
|
230 |
+
}
|
231 |
+
|
232 |
+
.legend-color.folder { background: linear-gradient(135deg, #fd79a8 0%, #e84393 100%); }
|
233 |
+
.legend-color.image { background: linear-gradient(135deg, #00cec9 0%, #00b894 100%); }
|
234 |
+
.legend-color.video { background: linear-gradient(135deg, #e17055 0%, #d63031 100%); }
|
235 |
+
.legend-color.audio { background: linear-gradient(135deg, #a29bfe 0%, #6c5ce7 100%); }
|
236 |
+
.legend-color.document { background: linear-gradient(135deg, #fdcb6e 0%, #e17055 100%); }
|
237 |
+
.legend-color.office { background: linear-gradient(135deg, #00b894 0%, #00a085 100%); }
|
238 |
+
.legend-color.code { background: linear-gradient(135deg, #81ecec 0%, #00cec9 100%); }
|
239 |
+
.legend-color.other { background: linear-gradient(135deg, #74b9ff 0%, #0984e3 100%); }
|
240 |
+
|
241 |
.tooltip {
|
242 |
position: absolute;
|
243 |
background: rgba(0, 0, 0, 0.9);
|
|
|
341 |
<div class="stat-label">Max Depth</div>
|
342 |
</div>
|
343 |
</div>
|
344 |
+
<div class="legend" id="legend" style="display: none;">
|
345 |
+
<div class="legend-item">
|
346 |
+
<div class="legend-color folder"></div>
|
347 |
+
<span>π Folders</span>
|
348 |
+
</div>
|
349 |
+
<div class="legend-item">
|
350 |
+
<div class="legend-color image"></div>
|
351 |
+
<span>πΌοΈ Images</span>
|
352 |
+
</div>
|
353 |
+
<div class="legend-item">
|
354 |
+
<div class="legend-color video"></div>
|
355 |
+
<span>π₯ Video</span>
|
356 |
+
</div>
|
357 |
+
<div class="legend-item">
|
358 |
+
<div class="legend-color audio"></div>
|
359 |
+
<span>π΅ Audio</span>
|
360 |
+
</div>
|
361 |
+
<div class="legend-item">
|
362 |
+
<div class="legend-color document"></div>
|
363 |
+
<span>π Documents</span>
|
364 |
+
</div>
|
365 |
+
<div class="legend-item">
|
366 |
+
<div class="legend-color office"></div>
|
367 |
+
<span>π Office</span>
|
368 |
+
</div>
|
369 |
+
<div class="legend-item">
|
370 |
+
<div class="legend-color code"></div>
|
371 |
+
<span>π» Code</span>
|
372 |
+
</div>
|
373 |
+
<div class="legend-item">
|
374 |
+
<div class="legend-color other"></div>
|
375 |
+
<span>π¦ Other</span>
|
376 |
+
</div>
|
377 |
+
</div>
|
378 |
</div>
|
379 |
</div>
|
380 |
|
|
|
529 |
name: 'Demo Project',
|
530 |
path: '',
|
531 |
type: 'directory',
|
532 |
+
size: 78650000,
|
533 |
children: [
|
534 |
{
|
535 |
name: 'src',
|
|
|
538 |
size: 28500000,
|
539 |
children: [
|
540 |
{ name: 'main.js', path: 'src/main.js', type: 'file', size: 15200000 },
|
541 |
+
{ name: 'utils.py', path: 'src/utils.py', type: 'file', size: 8500000 },
|
542 |
+
{ name: 'config.json', path: 'src/config.json', type: 'file', size: 3200000 },
|
543 |
+
{ name: 'index.html', path: 'src/index.html', type: 'file', size: 1600000 }
|
544 |
]
|
545 |
},
|
546 |
{
|
547 |
name: 'assets',
|
548 |
path: 'assets',
|
549 |
type: 'directory',
|
550 |
+
size: 25800000,
|
551 |
children: [
|
552 |
+
{ name: 'hero-video.mp4', path: 'assets/hero-video.mp4', type: 'file', size: 12400000 },
|
553 |
{ name: 'logo.png', path: 'assets/logo.png', type: 'file', size: 5600000 },
|
554 |
{ name: 'background.jpg', path: 'assets/background.jpg', type: 'file', size: 4200000 },
|
555 |
+
{ name: 'theme-song.mp3', path: 'assets/theme-song.mp3', type: 'file', size: 3600000 }
|
556 |
]
|
557 |
},
|
558 |
{
|
559 |
name: 'docs',
|
560 |
path: 'docs',
|
561 |
type: 'directory',
|
562 |
+
size: 8900000,
|
563 |
children: [
|
564 |
+
{ name: 'manual.pdf', path: 'docs/manual.pdf', type: 'file', size: 5200000 },
|
565 |
+
{ name: 'README.md', path: 'docs/README.md', type: 'file', size: 1800000 },
|
566 |
+
{ name: 'API.txt', path: 'docs/API.txt', type: 'file', size: 1200000 },
|
567 |
{ name: 'CHANGELOG.md', path: 'docs/CHANGELOG.md', type: 'file', size: 700000 }
|
568 |
]
|
569 |
},
|
570 |
+
{
|
571 |
+
name: 'data',
|
572 |
+
path: 'data',
|
573 |
+
type: 'directory',
|
574 |
+
size: 11200000,
|
575 |
+
children: [
|
576 |
+
{ name: 'report.xlsx', path: 'data/report.xlsx', type: 'file', size: 6800000 },
|
577 |
+
{ name: 'presentation.pptx', path: 'data/presentation.pptx', type: 'file', size: 4400000 }
|
578 |
+
]
|
579 |
+
},
|
580 |
{
|
581 |
name: 'tests',
|
582 |
path: 'tests',
|
|
|
584 |
size: 1320000,
|
585 |
children: [
|
586 |
{ name: 'main.test.js', path: 'tests/main.test.js', type: 'file', size: 680000 },
|
587 |
+
{ name: 'utils.test.py', path: 'tests/utils.test.py', type: 'file', size: 440000 },
|
588 |
+
{ name: 'config.test.json', path: 'tests/config.test.json', type: 'file', size: 200000 }
|
589 |
]
|
590 |
},
|
591 |
{ name: 'package.json', path: 'package.json', type: 'file', size: 180000 },
|
592 |
+
{ name: 'webpack.config.js', path: 'webpack.config.js', type: 'file', size: 120000 },
|
593 |
+
{ name: 'archive.zip', path: 'archive.zip', type: 'file', size: 2630000 }
|
594 |
]
|
595 |
};
|
596 |
|
|
|
659 |
document.getElementById('totalSize').textContent = this.formatFileSize(stats.size);
|
660 |
document.getElementById('maxDepth').textContent = stats.depth;
|
661 |
document.getElementById('stats').style.display = 'flex';
|
662 |
+
document.getElementById('legend').style.display = 'flex';
|
663 |
+
}
|
664 |
+
|
665 |
+
getFileTypeCategory(filename) {
|
666 |
+
if (!filename || filename.indexOf('.') === -1) return 'other';
|
667 |
+
|
668 |
+
const extension = filename.toLowerCase().split('.').pop();
|
669 |
+
|
670 |
+
const categories = {
|
671 |
+
image: ['jpg', 'jpeg', 'png', 'webp', 'gif', 'bmp', 'ico'],
|
672 |
+
video: ['mp4', 'avi', 'mov', 'mkv', 'wmv', 'flv', 'webm'],
|
673 |
+
audio: ['mp3', 'wav', 'flac', 'aac', 'ogg', 'm4a'],
|
674 |
+
document: ['pdf', 'md', 'txt', 'rtf', 'doc', 'docx'],
|
675 |
+
office: ['xlsx', 'xls', 'pptx', 'ppt', 'csv'],
|
676 |
+
code: ['html', 'htm', 'css', 'js', 'ts', 'py', 'java', 'cpp', 'c', 'php', 'rb', 'go', 'rs', 'swift', 'kt', 'json', 'xml', 'yml', 'yaml', 'svg']
|
677 |
+
};
|
678 |
+
|
679 |
+
for (const [category, extensions] of Object.entries(categories)) {
|
680 |
+
if (extensions.includes(extension)) {
|
681 |
+
return category;
|
682 |
+
}
|
683 |
+
}
|
684 |
+
|
685 |
+
return 'other';
|
686 |
}
|
687 |
|
688 |
calculateStats(node, depth = 0) {
|
|
|
879 |
|
880 |
layout.forEach(rect => {
|
881 |
const element = document.createElement('div');
|
882 |
+
let cssClass = `treemap-node ${rect.data.type}`;
|
883 |
+
|
884 |
+
// Add file type specific class for files
|
885 |
+
if (rect.data.type === 'file') {
|
886 |
+
const fileType = this.getFileTypeCategory(rect.data.name);
|
887 |
+
cssClass = `treemap-node file-${fileType}`;
|
888 |
+
}
|
889 |
+
|
890 |
+
element.className = cssClass;
|
891 |
|
892 |
element.style.left = `${rect.x}px`;
|
893 |
element.style.top = `${rect.y}px`;
|
|
|
918 |
|
919 |
createTooltipContent(data) {
|
920 |
let content = `<strong>${data.name}</strong><br>`;
|
921 |
+
content += `Type: ${data.type}`;
|
922 |
+
|
923 |
+
if (data.type === 'file') {
|
924 |
+
const fileType = this.getFileTypeCategory(data.name);
|
925 |
+
const typeLabels = {
|
926 |
+
image: 'πΌοΈ Image',
|
927 |
+
video: 'π₯ Video',
|
928 |
+
audio: 'π΅ Audio',
|
929 |
+
document: 'π Document',
|
930 |
+
office: 'π Office',
|
931 |
+
code: 'π» Code',
|
932 |
+
other: 'π¦ Other'
|
933 |
+
};
|
934 |
+
content += ` (${typeLabels[fileType]})`;
|
935 |
+
}
|
936 |
+
|
937 |
+
content += `<br>Size: ${this.formatFileSize(data.size)}<br>`;
|
938 |
content += `Path: ${data.path}<br>`;
|
939 |
|
940 |
if (data.type === 'file' && data.lastModified) {
|