Clean up UI with dark theme and improved layout

This commit is contained in:
Jarian Cottingham 2026-02-22 01:42:20 -06:00
parent 13fd64aa9d
commit ecf75036ed
2 changed files with 257 additions and 275 deletions

View File

@ -5,351 +5,281 @@
<meta name="viewport" content="width=device-width, initial-scale=1.0"> <meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Movie Mapper</title> <title>Movie Mapper</title>
<style> <style>
* {
box-sizing: border-box;
}
body { body {
font-family: Arial, sans-serif; font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Oxygen, Ubuntu, sans-serif;
margin: 0; margin: 0;
padding: 20px; padding: 0;
background-color: #f5f5f5; background-color: #1a1a2e;
display: flex; color: #eee;
height: 100vh; height: 100vh;
overflow: hidden;
} }
.container { .container {
display: flex; display: flex;
width: 100%; height: 100vh;
max-width: 1200px;
margin: 0 auto;
background-color: white;
border-radius: 8px;
box-shadow: 0 2px 10px rgba(0,0,0,0.1);
height: calc(100vh - 40px);
} }
/* Left Sidebar - Search & Shows */
.sidebar { .sidebar {
width: 300px; width: 320px;
background-color: #16213e;
border-right: 1px solid #0f3460;
display: flex;
flex-direction: column;
flex-shrink: 0;
}
.sidebar-header {
padding: 20px; padding: 20px;
border-right: 1px solid #eee; background-color: #0f3460;
overflow-y: auto; border-bottom: 1px solid #1a1a2e;
} }
.main-content { .sidebar-header h1 {
flex: 1; margin: 0;
padding: 20px; font-size: 24px;
overflow-y: auto; color: #e94560;
}
h1 {
color: #333;
text-align: center;
margin-top: 0;
}
.controls {
margin-bottom: 20px;
padding: 15px;
background-color: #f8f9fa;
border-radius: 5px;
}
#select-dir-btn {
background-color: #007bff;
color: white;
padding: 10px 20px;
border: none;
border-radius: 5px;
cursor: pointer;
font-size: 16px;
width: 100%;
margin-bottom: 10px;
}
#select-dir-btn:hover {
background-color: #0056b3;
}
#selected-dir {
margin-top: 10px;
font-weight: bold;
color: #666;
} }
.search-section { .search-section {
margin: 20px 0; padding: 15px;
border-bottom: 1px solid #0f3460;
} }
#search-input { #search-input {
width: 100%; width: 100%;
padding: 10px; padding: 12px;
font-size: 16px; font-size: 14px;
border: 1px solid #ddd; border: none;
border-radius: 5px; border-radius: 8px;
box-sizing: border-box; background-color: #0f3460;
color: #eee;
outline: none;
}
#search-input::placeholder {
color: #888;
}
#search-input:focus {
box-shadow: 0 0 0 2px #e94560;
} }
#search-results { #search-results {
margin-top: 10px; max-height: 200px;
max-height: 300px;
overflow-y: auto; overflow-y: auto;
border: 1px solid #ddd; margin-top: 10px;
border-radius: 5px;
padding: 10px;
} }
.search-result-item { .search-result-item {
padding: 8px; padding: 10px;
cursor: pointer; cursor: pointer;
border-bottom: 1px solid #eee; border-radius: 6px;
margin-bottom: 4px;
transition: background-color 0.2s;
} }
.search-result-item:hover { .search-result-item:hover {
background-color: #e9ecef; background-color: #0f3460;
} }
/* Show Details Section */
#show-details {
flex: 1;
padding: 15px;
overflow-y: auto;
}
#show-title {
margin: 0 0 15px 0;
color: #e94560;
font-size: 18px;
}
#seasons-container {
display: flex;
flex-direction: column;
gap: 8px;
}
/* Main Content - Files */
.main-content {
flex: 1;
display: flex;
flex-direction: column;
background-color: #1a1a2e;
overflow: hidden;
}
.main-header {
padding: 15px 20px;
background-color: #16213e;
border-bottom: 1px solid #0f3460;
display: flex;
align-items: center;
gap: 15px;
}
#select-dir-btn {
background-color: #e94560;
color: white;
padding: 10px 20px;
border: none;
border-radius: 8px;
cursor: pointer;
font-size: 14px;
font-weight: 600;
transition: background-color 0.2s;
}
#select-dir-btn:hover {
background-color: #ff6b6b;
}
#selected-dir {
color: #888;
font-size: 13px;
overflow: hidden;
text-overflow: ellipsis;
white-space: nowrap;
}
/* Progress Spinner */
#progress-container {
display: none;
padding: 15px 20px;
background-color: #0f3460;
border-bottom: 1px solid #16213e;
}
.spinner {
width: 24px;
height: 24px;
border: 3px solid #16213e;
border-top: 3px solid #e94560;
border-radius: 50%;
animation: spin 0.8s linear infinite;
}
@keyframes spin {
0% { transform: rotate(0deg); }
100% { transform: rotate(360deg); }
}
/* File List */
.file-list { .file-list {
margin-top: 20px; flex: 1;
overflow-y: auto;
padding: 10px;
}
#file-list {
display: flex;
flex-direction: column;
gap: 4px;
}
#file-list > p {
color: #888;
text-align: center;
padding: 40px;
} }
.file-item { .file-item {
display: flex; display: flex;
justify-content: space-between;
align-items: center; align-items: center;
padding: 10px; padding: 12px 15px;
border-bottom: 1px solid #eee; background-color: #16213e;
border-radius: 8px;
transition: background-color 0.2s;
}
.file-item:hover {
background-color: #0f3460;
} }
.file-name { .file-name {
flex: 1; flex: 1;
cursor: pointer; cursor: pointer;
padding: 5px; padding: 4px 8px;
border-radius: 4px;
overflow: hidden;
text-overflow: ellipsis;
white-space: nowrap;
} }
.file-name.editing { .file-name.editing {
border: 1px solid #007bff; background-color: #0f3460;
background-color: #f8f9fa; outline: 2px solid #e94560;
}
.file-name.folder-name {
color: #4fc3f7;
font-weight: 500;
} }
.file-duration, .file-quality, .file-fps { .file-duration, .file-quality, .file-fps {
margin: 0 10px; color: #888;
color: #666; font-size: 12px;
min-width: 80px; /* Ensure consistent column width */ min-width: 60px;
text-align: center;
} }
.file-item:last-child {
border-bottom: none;
}
.status {
margin-top: 10px;
padding: 10px;
border-radius: 5px;
}
.status.error {
background-color: #f8d7da;
color: #721c24;
border: 1px solid #f5c6cb;
}
.status.success {
background-color: #d4edda;
color: #155724;
border: 1px solid #c3e6cb;
}
</style>
</head>
<body>
<div class="container">
<div class="sidebar">
<h1>Movie Mapper 🎬</h1>
<div class="controls">
<button id="select-dir-btn">Select Directory</button>
<div id="selected-dir">No directory selected</div>
</div>
<div class="search-section">
<input type="text" id="search-input" placeholder="Search TV shows...">
<div id="search-results"></div>
</div>
<div id="show-details" style="margin-top: 20px; padding: 15px; border-top: 1px solid #eee;">
<h3 id="show-title" style="margin-top: 0; color: #333;"></h3>
<div id="seasons-container"></div>
</div>
</div>
<div class="main-content">
<div id="progress-container" style="display: none; margin-bottom: 15px;">
<div style="display: flex; align-items: center; gap: 15px;">
<div class="spinner"></div>
<div>
<div id="progress-text" style="font-weight: bold;">Processing files...</div>
<div id="progress-count" style="color: #666; font-size: 14px;"></div>
</div>
</div>
</div>
<style>
.spinner {
width: 30px;
height: 30px;
border: 4px solid #e9ecef;
border-top: 4px solid #007bff;
border-radius: 50%;
animation: spin 0.8s linear infinite;
}
@keyframes spin {
0% { transform: rotate(0deg); }
100% { transform: rotate(360deg); }
}
</style>
<div class="file-list">
<div id="file-list">
<p>Click "Select Directory" to start browsing media files.</p>
</div>
</div>
</div>
</div>
<style>
/* Add some additional styling to better align the views */
.file-list-container {
display: flex;
flex-direction: column;
height: 100%;
}
.file-list-header {
display: flex;
justify-content: space-between;
align-items: center;
margin-bottom: 15px;
padding-bottom: 10px;
border-bottom: 1px solid #eee;
}
.file-list-header h3 {
margin: 0;
color: #333;
}
.episode-info {
margin-top: 15px;
padding: 12px;
background-color: #e7f3ff;
border: 1px solid #b3d9ff;
border-radius: 6px;
font-size: 14px;
}
.episode-info strong {
color: #007bff;
}
.file-item-with-episode {
position: relative;
}
.episode-match-indicator {
position: absolute;
right: 10px;
top: 50%;
transform: translateY(-50%);
background-color: #28a745;
color: white;
border-radius: 12px;
padding: 2px 8px;
font-size: 10px;
display: none;
}
.file-item-with-episode:hover .episode-match-indicator {
display: block;
}
/* Tag styling */
.file-tags { .file-tags {
display: flex; display: flex;
gap: 8px; gap: 6px;
align-items: center; align-items: center;
opacity: 0.7; margin-left: 10px;
transition: opacity 0.2s;
min-width: 0; /* Prevent flex items from overflowing */
}
.file-item:hover .file-tags {
opacity: 1;
} }
.tag-icon { .tag-icon {
cursor: pointer; cursor: pointer;
font-size: 16px; font-size: 16px;
opacity: 0.7; opacity: 0.6;
transition: all 0.2s; transition: all 0.2s;
padding: 4px; padding: 4px;
border-radius: 4px; border-radius: 4px;
position: relative;
} }
.tag-icon:hover { .tag-icon:hover {
opacity: 1; opacity: 1;
transform: scale(1.1); transform: scale(1.2);
} }
/* For tagged state, use pseudo-elements to show the highlight */ .play-button {
.tag-icon[data-tagged-extra]::after { background: none;
content: ''; border: none;
position: absolute; font-size: 16px;
top: 0; cursor: pointer;
left: 0; padding: 4px;
right: 0;
bottom: 0;
background-color: rgba(255, 215, 0, 0.3);
border-radius: 4px;
z-index: -1;
} }
.tag-icon[data-tagged-commentary]::after { /* Floating Action Button */
content: '';
position: absolute;
top: 0;
left: 0;
right: 0;
bottom: 0;
background-color: rgba(25, 160, 184, 0.3);
border-radius: 4px;
z-index: -1;
}
.extra-tag {
color: #ffc107;
}
.commentary-tag {
color: #17a2b8;
}
/* Floating circle on bottom right */
.floating-circle { .floating-circle {
position: fixed; position: fixed;
bottom: 20px; bottom: 25px;
right: 20px; right: 25px;
width: 75px; width: 60px;
height: 75px; height: 60px;
background-color: rgba(0, 123, 255, 0.5); background-color: #e94560;
border-radius: 50%; border-radius: 50%;
display: flex; display: flex;
align-items: center; align-items: center;
justify-content: center; justify-content: center;
cursor: pointer; cursor: pointer;
box-shadow: 0 2px 10px rgba(0,0,0,0.2); box-shadow: 0 4px 15px rgba(233, 69, 96, 0.4);
z-index: 1000; z-index: 1000;
transition: all 0.3s ease; transition: all 0.3s ease;
transform: translateY(0);
} }
.floating-circle i { .floating-circle:hover {
color: white; transform: scale(1.1);
font-size: 24px; box-shadow: 0 6px 20px rgba(233, 69, 96, 0.6);
} }
#tagged-count { #tagged-count {
@ -358,22 +288,74 @@
font-size: 18px; font-size: 18px;
} }
.floating-circle:hover { /* Scrollbar Styling */
background-color: #0056b3; ::-webkit-scrollbar {
transform: scale(1.1); width: 8px;
} }
.floating-circle i { ::-webkit-scrollbar-track {
color: white; background: #1a1a2e;
font-size: 24px; }
::-webkit-scrollbar-thumb {
background: #0f3460;
border-radius: 4px;
}
::-webkit-scrollbar-thumb:hover {
background: #e94560;
} }
</style> </style>
</head>
<body>
<div class="container">
<!-- Left Sidebar -->
<div class="sidebar">
<div class="sidebar-header">
<h1>🎬 Movie Mapper</h1>
</div>
<script src="renderer.js"></script> <div class="search-section">
<input type="text" id="search-input" placeholder="Search TV shows...">
<div id="search-results"></div>
</div>
<!-- Floating circle on bottom right --> <div id="show-details">
<h3 id="show-title"></h3>
<div id="seasons-container"></div>
</div>
</div>
<!-- Main Content -->
<div class="main-content">
<div class="main-header">
<button id="select-dir-btn">Select Directory</button>
<div id="selected-dir">No directory selected</div>
</div>
<div id="progress-container">
<div style="display: flex; align-items: center; gap: 15px;">
<div class="spinner"></div>
<div>
<div id="progress-text" style="font-weight: 500;">Processing files...</div>
<div id="progress-count" style="color: #888; font-size: 13px;"></div>
</div>
</div>
</div>
<div class="file-list">
<div id="file-list">
<p>Click "Select Directory" to start browsing media files.</p>
</div>
</div>
</div>
</div>
<!-- Floating Action Button -->
<div class="floating-circle" id="tagged-circle"> <div class="floating-circle" id="tagged-circle">
<span id="tagged-count">0</span> <span id="tagged-count">0</span>
</div> </div>
<script src="renderer.js"></script>
</body> </body>
</html> </html>

View File

@ -186,8 +186,8 @@ function displayFiles(files) {
fileItem.classList.add('folder-item'); fileItem.classList.add('folder-item');
fileItem.style.cursor = 'pointer'; fileItem.style.cursor = 'pointer';
fileItem.innerHTML = ` fileItem.innerHTML = `
<div class="folder-icon" style="font-size: 20px; margin-right: 8px;">📁</div> <div style="font-size: 18px; margin-right: 10px;">📁</div>
<div class="file-name folder-name" data-file-path="${file.path}" style="font-weight: bold; color: #007bff;">${file.name}</div> <div class="file-name folder-name" data-file-path="${file.path}">${file.name}</div>
<div class="file-duration"></div> <div class="file-duration"></div>
<div class="file-quality"></div> <div class="file-quality"></div>
<div class="file-fps"></div> <div class="file-fps"></div>