Download index.html from didiaodeking/diskmaster-explorer: direct link, hf CLI and curl.
- Browser
- Download file 18.5 kB
-
https://huggingface.co/spaces/didiaodeking/diskmaster-explorer/resolve/main/index.html
- Command line
-
hf download hf://spaces/didiaodeking/diskmaster-explorer/index.html
-
curl -L -o index.html https://huggingface.co/spaces/didiaodeking/diskmaster-explorer/resolve/main/index.html
18.5 kB
| <html lang="en"> | |
| <head> | |
| <meta charset="UTF-8"> | |
| <meta name="viewport" content="width=device-width, initial-scale=1.0"> | |
| <title>DiskMaster Explorer</title> | |
| <script src="https://cdn.tailwindcss.com"></script> | |
| <script src="https://unpkg.com/feather-icons"></script> | |
| <style> | |
| /* Custom scrollbar */ | |
| ::-webkit-scrollbar { | |
| width: 8px; | |
| height: 8px; | |
| } | |
| ::-webkit-scrollbar-track { | |
| background: #f1f1f1; | |
| } | |
| ::-webkit-scrollbar-thumb { | |
| background: #888; | |
| border-radius: 4px; | |
| } | |
| ::-webkit-scrollbar-thumb:hover { | |
| background: #555; | |
| } | |
| /* Windows-like folder icon */ | |
| .folder-icon { | |
| color: #0078d7; | |
| } | |
| /* File icon colors */ | |
| .file-icon { | |
| color: #737373; | |
| } | |
| .doc-icon { | |
| color: #2b579a; | |
| } | |
| .img-icon { | |
| color: #d24726; | |
| } | |
| .exe-icon { | |
| color: #68217a; | |
| } | |
| </style> | |
| </head> | |
| <body class="bg-gray-100 font-sans"> | |
| <!-- Menu Bar --> | |
| <div class="bg-gray-200 border-b border-gray-300 text-sm"> | |
| <div class="flex items-center justify-between px-2 h-8"> | |
| <div class="relative group"> | |
| <button class="px-2 hover:bg-gray-300 rounded">File</button> | |
| <div class="hidden group-hover:block absolute bg-white shadow-lg z-10 w-48"> | |
| <button class="block w-full text-left px-4 py-1 hover:bg-blue-100">New Disk</button> | |
| <button class="block w-full text-left px-4 py-1 hover:bg-blue-100">Open Disk</button> | |
| <button class="block w-full text-left px-4 py-1 hover:bg-blue-100">Sign Out</button> | |
| </div> | |
| </div> | |
| <div class="text-sm font-medium">Welcome, Admin</div> | |
| </div> | |
| </div> | |
| <div class="flex h-screen overflow-hidden" style="height: calc(100vh - 2rem)"> | |
| <!-- Sidebar - Disk List --> | |
| <div class="w-64 bg-white border-r border-gray-300 flex flex-col"> | |
| <div class="p-4 border-b border-gray-300"> | |
| <h2 class="text-lg font-semibold">DiskMaster</h2> | |
| </div> | |
| <div class="flex-1 overflow-y-auto"> | |
| <div class="p-2"> | |
| <div class="px-2 py-1 hover:bg-blue-50 rounded cursor-pointer"> | |
| <div class="flex items-center"> | |
| <i data-feather="hard-drive" class="mr-2 text-blue-500"></i> | |
| <span>Local Disk (C:)</span> | |
| </div> | |
| <div class="mt-1 h-1 w-full bg-gray-200 rounded-full overflow-hidden"> | |
| <div class="h-full bg-blue-500" style="width: 65%"></div> | |
| </div> | |
| <div class="text-xs text-gray-500 mt-1">82.4 GB / 120 GB</div> | |
| </div> | |
| <div class="px-2 py-1 hover:bg-blue-50 rounded cursor-pointer"> | |
| <div class="flex items-center"> | |
| <i data-feather="hard-drive" class="mr-2 text-blue-500"></i> | |
| <span>Data (D:)</span> | |
| </div> | |
| <div class="mt-1 h-1 w-full bg-gray-200 rounded-full overflow-hidden"> | |
| <div class="h-full bg-green-500" style="width: 32%"></div> | |
| </div> | |
| <div class="text-xs text-gray-500 mt-1">128 GB / 400 GB</div> | |
| </div> | |
| <div class="px-2 py-1 hover:bg-blue-50 rounded cursor-pointer"> | |
| <div class="flex items-center"> | |
| <i data-feather="hard-drive" class="mr-2 text-blue-500"></i> | |
| <span>Backup (E:)</span> | |
| </div> | |
| <div class="mt-1 h-1 w-full bg-gray-200 rounded-full overflow-hidden"> | |
| <div class="h-full bg-yellow-500" style="width: 78%"></div> | |
| </div> | |
| <div class="text-xs text-gray-500 mt-1">780 GB / 1 TB</div> | |
| </div> | |
| <div class="px-2 py-1 hover:bg-blue-50 rounded cursor-pointer"> | |
| <div class="flex items-center"> | |
| <i data-feather="hard-drive" class="mr-2 text-blue-500"></i> | |
| <span>External (F:)</span> | |
| </div> | |
| <div class="mt-1 h-1 w-full bg-gray-200 rounded-full overflow-hidden"> | |
| <div class="h-full bg-red-500" style="width: 15%"></div> | |
| </div> | |
| <div class="text-xs text-gray-500 mt-1">30 GB / 200 GB</div> | |
| </div> | |
| </div> | |
| </div> | |
| </div> | |
| <!-- Main Content Area --> | |
| <div class="flex-1 flex flex-col overflow-hidden"> | |
| <!-- Toolbar --> | |
| <div class="bg-gray-200 p-2 border-b border-gray-300 flex items-center"> | |
| <div class="flex space-x-1"> | |
| <button class="p-1 hover:bg-gray-300 rounded"> | |
| <i data-feather="arrow-left"></i> | |
| </button> | |
| <button class="p-1 hover:bg-gray-300 rounded"> | |
| <i data-feather="arrow-right"></i> | |
| </button> | |
| <button class="p-1 hover:bg-gray-300 rounded"> | |
| <i data-feather="refresh-cw"></i> | |
| </button> | |
| <div class="relative group"> | |
| <button class="p-1 hover:bg-gray-300 rounded"> | |
| <i data-feather="plus"></i> | |
| </button> | |
| <div class="hidden group-hover:block absolute bg-white shadow-lg z-10 w-48 left-0 top-full mt-1"> | |
| <button id="newFolderBtn" class="block w-full text-left px-4 py-1 hover:bg-blue-100">New Folder</button> | |
| <button id="newFileBtn" class="block w-full text-left px-4 py-1 hover:bg-blue-100">New File</button> | |
| </div> | |
| </div> | |
| </div> | |
| <!-- Address Bar --> | |
| <div class="flex-1 mx-4 bg-white rounded border border-gray-300 px-2 py-1 text-sm"> | |
| This PC > Local Disk (C:) | |
| </div> | |
| <!-- Search Box --> | |
| <div class="flex items-center bg-white rounded border border-gray-300 overflow-hidden"> | |
| <input type="text" placeholder="Search Local Disk (C:)" class="px-2 py-1 outline-none w-64"> | |
| <button class="px-2 py-1 bg-gray-100 hover:bg-gray-200"> | |
| <i data-feather="search"></i> | |
| </button> | |
| </div> | |
| </div> | |
| <!-- Main File Browser --> | |
| <div class="flex-1 overflow-auto bg-white" style="height: calc(100% - 8rem)"> | |
| <!-- File Grid View --> | |
| <div class="p-4 grid grid-cols-6 gap-4"> | |
| <!-- Folders --> | |
| <div class="flex flex-col items-center p-2 hover:bg-blue-50 rounded cursor-pointer"> | |
| <i data-feather="folder" class="folder-icon w-12 h-12"></i> | |
| <span class="text-sm mt-1 text-center">Program Files</span> | |
| </div> | |
| <div class="flex flex-col items-center p-2 hover:bg-blue-50 rounded cursor-pointer"> | |
| <i data-feather="folder" class="folder-icon w-12 h-12"></i> | |
| <span class="text-sm mt-1 text-center">Users</span> | |
| </div> | |
| <div class="flex flex-col items-center p-2 hover:bg-blue-50 rounded cursor-pointer"> | |
| <i data-feather="folder" class="folder-icon w-12 h-12"></i> | |
| <span class="text-sm mt-1 text-center">Windows</span> | |
| </div> | |
| <div class="flex flex-col items-center p-2 hover:bg-blue-50 rounded cursor-pointer"> | |
| <i data-feather="folder" class="folder-icon w-12 h-12"></i> | |
| <span class="text-sm mt-1 text-center">Documents</span> | |
| </div> | |
| <!-- Files --> | |
| <div class="flex flex-col items-center p-2 hover:bg-blue-50 rounded cursor-pointer"> | |
| <i data-feather="file-text" class="doc-icon w-12 h-12"></i> | |
| <span class="text-sm mt-1 text-center">readme.txt</span> | |
| </div> | |
| <div class="flex flex-col items-center p-2 hover:bg-blue-50 rounded cursor-pointer"> | |
| <i data-feather="image" class="img-icon w-12 h-12"></i> | |
| <span class="text-sm mt-1 text-center">wallpaper.jpg</span> | |
| </div> | |
| <div class="flex flex-col items-center p-2 hover:bg-blue-50 rounded cursor-pointer"> | |
| <i data-feather="file" class="file-icon w-12 h-12"></i> | |
| <span class="text-sm mt-1 text-center">notes.txt</span> | |
| </div> | |
| <div class="flex flex-col items-center p-2 hover:bg-blue-50 rounded cursor-pointer"> | |
| <i data-feather="box" class="exe-icon w-12 h-12"></i> | |
| <span class="text-sm mt-1 text-center">setup.exe</span> | |
| </div> | |
| </div> | |
| </div> | |
| <!-- Details Panel --> | |
| <div class="bg-gray-100 border-t border-gray-300 p-4 hidden" id="detailsPanel"> | |
| <h3 class="font-semibold mb-2">File Details</h3> | |
| <div class="grid grid-cols-2 gap-2 text-sm"> | |
| <div class="text-gray-600">Name:</div> | |
| <div id="detail-name">-</div> | |
| <div class="text-gray-600">Type:</div> | |
| <div id="detail-type">-</div> | |
| <div class="text-gray-600">Size:</div> | |
| <div id="detail-size">-</div> | |
| <div class="text-gray-600">Created:</div> | |
| <div id="detail-created">-</div> | |
| <div class="text-gray-600">Modified:</div> | |
| <div id="detail-modified">-</div> | |
| </div> | |
| </div> | |
| <!-- Status Bar --> | |
| <div class="bg-gray-200 p-1 border-t border-gray-300 text-xs flex justify-between px-2"> | |
| <div id="itemCount">12 items</div> | |
| <div>4.2 GB free of 120 GB</div> | |
| </div> | |
| </div> | |
| </div> | |
| <script> | |
| feather.replace(); | |
| // New Folder Dialog | |
| const newFolderDialog = ` | |
| <div id="newFolderDialog" class="fixed inset-0 bg-black bg-opacity-50 flex items-center justify-center z-50 hidden"> | |
| <div class="bg-white p-4 rounded shadow-lg w-80"> | |
| <h3 class="font-semibold mb-4">Create New Folder</h3> | |
| <input type="text" id="folderName" placeholder="Folder name" class="w-full p-2 border rounded mb-4"> | |
| <div class="flex justify-end space-x-2"> | |
| <button id="cancelFolderBtn" class="px-4 py-2 bg-gray-200 rounded hover:bg-gray-300">Cancel</button> | |
| <button id="createFolderBtn" class="px-4 py-2 bg-blue-500 text-white rounded hover:bg-blue-600">Create</button> | |
| </div> | |
| </div> | |
| </div> | |
| `; | |
| // New File Dialog | |
| const newFileDialog = ` | |
| <div id="newFileDialog" class="fixed inset-0 bg-black bg-opacity-50 flex items-center justify-center z-50 hidden"> | |
| <div class="bg-white p-4 rounded shadow-lg w-80"> | |
| <h3 class="font-semibold mb-4">Create New File</h3> | |
| <input type="text" id="fileName" placeholder="File name" class="w-full p-2 border rounded mb-2"> | |
| <select id="fileType" class="w-full p-2 border rounded mb-4"> | |
| <option value="text">Text File</option> | |
| <option value="image">Image</option> | |
| <option value="document">Document</option> | |
| </select> | |
| <div class="flex justify-end space-x-2"> | |
| <button id="cancelFileBtn" class="px-4 py-2 bg-gray-200 rounded hover:bg-gray-300">Cancel</button> | |
| <button id="createFileBtn" class="px-4 py-2 bg-blue-500 text-white rounded hover:bg-blue-600">Create</button> | |
| </div> | |
| </div> | |
| </div> | |
| `; | |
| document.body.insertAdjacentHTML('beforeend', newFolderDialog); | |
| document.body.insertAdjacentHTML('beforeend', newFileDialog); | |
| // Handle new folder creation | |
| document.getElementById('newFolderBtn').addEventListener('click', () => { | |
| document.getElementById('newFolderDialog').classList.remove('hidden'); | |
| }); | |
| document.getElementById('cancelFolderBtn').addEventListener('click', () => { | |
| document.getElementById('newFolderDialog').classList.add('hidden'); | |
| }); | |
| document.getElementById('createFolderBtn').addEventListener('click', () => { | |
| const folderName = document.getElementById('folderName').value.trim(); | |
| if (folderName) { | |
| const fileGrid = document.querySelector('.grid'); | |
| const newFolder = ` | |
| <div class="flex flex-col items-center p-2 hover:bg-blue-50 rounded cursor-pointer"> | |
| <i data-feather="folder" class="folder-icon w-12 h-12"></i> | |
| <span class="text-sm mt-1 text-center">${folderName}</span> | |
| </div> | |
| `; | |
| fileGrid.insertAdjacentHTML('beforeend', newFolder); | |
| feather.replace(); | |
| document.getElementById('newFolderDialog').classList.add('hidden'); | |
| document.getElementById('folderName').value = ''; | |
| } | |
| }); | |
| // Handle new file creation | |
| document.getElementById('newFileBtn').addEventListener('click', () => { | |
| document.getElementById('newFileDialog').classList.remove('hidden'); | |
| }); | |
| document.getElementById('cancelFileBtn').addEventListener('click', () => { | |
| document.getElementById('newFileDialog').classList.add('hidden'); | |
| }); | |
| document.getElementById('createFileBtn').addEventListener('click', () => { | |
| const fileName = document.getElementById('fileName').value.trim(); | |
| const fileType = document.getElementById('fileType').value; | |
| if (fileName) { | |
| const fileGrid = document.querySelector('.grid'); | |
| let iconClass = 'file-icon'; | |
| let iconName = 'file'; | |
| switch(fileType) { | |
| case 'text': | |
| iconClass = 'doc-icon'; | |
| iconName = 'file-text'; | |
| break; | |
| case 'image': | |
| iconClass = 'img-icon'; | |
| iconName = 'image'; | |
| break; | |
| case 'document': | |
| iconClass = 'doc-icon'; | |
| iconName = 'file-text'; | |
| break; | |
| } | |
| const newFile = ` | |
| <div class="flex flex-col items-center p-2 hover:bg-blue-50 rounded cursor-pointer"> | |
| <i data-feather="${iconName}" class="${iconClass} w-12 h-12"></i> | |
| <span class="text-sm mt-1 text-center">${fileName}</span> | |
| </div> | |
| `; | |
| fileGrid.insertAdjacentHTML('beforeend', newFile); | |
| feather.replace(); | |
| document.getElementById('newFileDialog').classList.add('hidden'); | |
| document.getElementById('fileName').value = ''; | |
| } | |
| }); | |
| // Simulate disk selection | |
| document.querySelectorAll('div.px-2.py-1').forEach(item => { | |
| item.addEventListener('click', function() { | |
| // Remove active class from all | |
| document.querySelectorAll('div.px-2.py-1').forEach(i => { | |
| i.classList.remove('bg-blue-100'); | |
| }); | |
| // Add to clicked | |
| this.classList.add('bg-blue-100'); | |
| // Update address bar and search placeholder | |
| const diskName = this.querySelector('div > span').textContent; | |
| document.querySelector('.address-bar').textContent = `This PC > ${diskName}`; | |
| document.querySelector('input[type="text"]').placeholder = `Search ${diskName}`; | |
| }); | |
| }); | |
| // File/folder click handler | |
| document.querySelectorAll('.flex.flex-col.items-center').forEach(item => { | |
| item.addEventListener('click', function() { | |
| const panel = document.getElementById('detailsPanel'); | |
| panel.classList.remove('hidden'); | |
| const name = this.querySelector('span').textContent; | |
| const isFolder = this.querySelector('[data-feather="folder"]') !== null; | |
| document.getElementById('detail-name').textContent = name; | |
| document.getElementById('detail-type').textContent = isFolder ? 'Folder' : 'File'; | |
| document.getElementById('detail-size').textContent = isFolder ? '-' : (Math.random() * 10).toFixed(1) + ' MB'; | |
| const now = new Date(); | |
| document.getElementById('detail-created').textContent = now.toLocaleString(); | |
| document.getElementById('detail-modified').textContent = now.toLocaleString(); | |
| }); | |
| }); | |
| // Update item count | |
| function updateItemCount() { | |
| const count = document.querySelectorAll('.flex.flex-col.items-center').length; | |
| document.getElementById('itemCount').textContent = `${count} items`; | |
| } | |
| // Initialize | |
| updateItemCount(); | |
| </script> | |
| </body> | |
| </html> | |