clean up UI on drive viewer
This commit is contained in:
123
utils/file_icons.py
Normal file
123
utils/file_icons.py
Normal file
@@ -0,0 +1,123 @@
|
||||
import os
|
||||
|
||||
def get_file_icon(name, is_folder, with_color=False):
|
||||
"""Return a Nerd Font glyph based on file type or extension, optionally with color markup."""
|
||||
icon = ""
|
||||
color = ""
|
||||
|
||||
if is_folder:
|
||||
icon = "\uf07b" # Nerd Font folder icon
|
||||
color = "#FFB86C" # Folder color (orange/yellow)
|
||||
else:
|
||||
# Get the file extension
|
||||
_, ext = os.path.splitext(name.lower())
|
||||
|
||||
# Map extensions to icons and colors
|
||||
icons = {
|
||||
# Documents
|
||||
".pdf": ("\uf1c1", "#8BE9FD"), # PDF - cyan
|
||||
".doc": ("\uf1c2", "#8BE9FD"), ".docx": ("\uf1c2", "#8BE9FD"), # Word - cyan
|
||||
".xls": ("\uf1c3", "#8BE9FD"), ".xlsx": ("\uf1c3", "#8BE9FD"), # Excel - cyan
|
||||
".ppt": ("\uf1c4", "#8BE9FD"), ".pptx": ("\uf1c4", "#8BE9FD"), # PowerPoint - cyan
|
||||
".txt": ("\uf15c", "#8BE9FD"), # Text - cyan
|
||||
".md": ("\uf48a", "#8BE9FD"), # Markdown - cyan
|
||||
".rtf": ("\uf15c", "#8BE9FD"), # RTF - cyan
|
||||
".odt": ("\uf1c2", "#8BE9FD"), # ODT - cyan
|
||||
|
||||
# Code/Development
|
||||
".py": ("\ue73c", "#BD93F9"), # Python - purple
|
||||
".js": ("\ue781", "#BD93F9"), # JavaScript - purple
|
||||
".ts": ("\ue628", "#BD93F9"), # TypeScript - purple
|
||||
".html": ("\uf13b", "#BD93F9"), ".htm": ("\uf13b", "#BD93F9"), # HTML - purple
|
||||
".css": ("\uf13c", "#BD93F9"), # CSS - purple
|
||||
".json": ("\ue60b", "#BD93F9"), # JSON - purple
|
||||
".xml": ("\uf121", "#BD93F9"), # XML - purple
|
||||
".yml": ("\uf481", "#BD93F9"), ".yaml": ("\uf481", "#BD93F9"), # YAML - purple
|
||||
".sh": ("\uf489", "#BD93F9"), # Shell script - purple
|
||||
".bat": ("\uf489", "#BD93F9"), # Batch - purple
|
||||
".ps1": ("\uf489", "#BD93F9"), # PowerShell - purple
|
||||
".cpp": ("\ue61d", "#BD93F9"), ".c": ("\ue61e", "#BD93F9"), # C/C++ - purple
|
||||
".java": ("\ue738", "#BD93F9"), # Java - purple
|
||||
".rb": ("\ue739", "#BD93F9"), # Ruby - purple
|
||||
".go": ("\ue724", "#BD93F9"), # Go - purple
|
||||
".php": ("\ue73d", "#BD93F9"), # PHP - purple
|
||||
|
||||
# Images
|
||||
".jpg": ("\uf1c5", "#50FA7B"), ".jpeg": ("\uf1c5", "#50FA7B"), # JPEG - green
|
||||
".png": ("\uf1c5", "#50FA7B"), # PNG - green
|
||||
".gif": ("\uf1c5", "#50FA7B"), # GIF - green
|
||||
".svg": ("\uf1c5", "#50FA7B"), # SVG - green
|
||||
".bmp": ("\uf1c5", "#50FA7B"), # BMP - green
|
||||
".tiff": ("\uf1c5", "#50FA7B"), ".tif": ("\uf1c5", "#50FA7B"), # TIFF - green
|
||||
".ico": ("\uf1c5", "#50FA7B"), # ICO - green
|
||||
|
||||
# Media
|
||||
".mp3": ("\uf1c7", "#FF79C6"), # Audio - pink
|
||||
".wav": ("\uf1c7", "#FF79C6"), # Audio - pink
|
||||
".ogg": ("\uf1c7", "#FF79C6"), # Audio - pink
|
||||
".mp4": ("\uf1c8", "#FF79C6"), # Video - pink
|
||||
".avi": ("\uf1c8", "#FF79C6"), # Video - pink
|
||||
".mov": ("\uf1c8", "#FF79C6"), # Video - pink
|
||||
".mkv": ("\uf1c8", "#FF79C6"), # Video - pink
|
||||
".wmv": ("\uf1c8", "#FF79C6"), # Video - pink
|
||||
|
||||
# Archives
|
||||
".zip": ("\uf1c6", "#FF5555"), # ZIP - red
|
||||
".rar": ("\uf1c6", "#FF5555"), # RAR - red
|
||||
".7z": ("\uf1c6", "#FF5555"), # 7z - red
|
||||
".tar": ("\uf1c6", "#FF5555"), ".gz": ("\uf1c6", "#FF5555"), # TAR/GZ - red
|
||||
".bz2": ("\uf1c6", "#FF5555"), # BZ2 - red
|
||||
|
||||
# Others
|
||||
".exe": ("\uf085", "#F8F8F2"), # Executable - white
|
||||
".iso": ("\uf0a0", "#F8F8F2"), # ISO - white
|
||||
".dll": ("\uf085", "#F8F8F2"), # DLL - white
|
||||
".db": ("\uf1c0", "#F8F8F2"), # Database - white
|
||||
".sql": ("\uf1c0", "#F8F8F2"), # SQL - white
|
||||
}
|
||||
|
||||
# Set default icon and color for unknown file types
|
||||
icon = "\uf15b" # Default file icon
|
||||
color = "#F8F8F2" # Default color (white)
|
||||
|
||||
# Get icon and color from the map if the extension exists
|
||||
if ext in icons:
|
||||
icon, color = icons[ext]
|
||||
|
||||
# Return either plain icon or with color markup
|
||||
if with_color:
|
||||
return f"[{color}]{icon}[/]"
|
||||
else:
|
||||
return icon
|
||||
|
||||
def get_icon_class(name, is_folder):
|
||||
"""Determine CSS class for the icon based on file type."""
|
||||
if is_folder:
|
||||
return "folder-icon"
|
||||
|
||||
# Get the file extension
|
||||
_, ext = os.path.splitext(name.lower())
|
||||
|
||||
# Document files
|
||||
if ext in [".pdf", ".doc", ".docx", ".xls", ".xlsx", ".ppt", ".pptx", ".txt", ".md", ".rtf", ".odt"]:
|
||||
return "document-icon"
|
||||
|
||||
# Code files
|
||||
elif ext in [".py", ".js", ".ts", ".html", ".htm", ".css", ".json", ".xml", ".yml", ".yaml",
|
||||
".sh", ".bat", ".ps1", ".cpp", ".c", ".java", ".rb", ".go", ".php"]:
|
||||
return "code-icon"
|
||||
|
||||
# Image files
|
||||
elif ext in [".jpg", ".jpeg", ".png", ".gif", ".svg", ".bmp", ".tiff", ".tif", ".ico"]:
|
||||
return "image-icon"
|
||||
|
||||
# Archive files
|
||||
elif ext in [".zip", ".rar", ".7z", ".tar", ".gz", ".bz2"]:
|
||||
return "archive-icon"
|
||||
|
||||
# Media files
|
||||
elif ext in [".mp3", ".wav", ".ogg", ".mp4", ".avi", ".mov", ".mkv", ".wmv"]:
|
||||
return "media-icon"
|
||||
|
||||
# Default for other file types
|
||||
return ""
|
||||
Reference in New Issue
Block a user