diff --git a/frontend/css/style.css b/frontend/css/style.css
index ee5626e..0e14907 100644
--- a/frontend/css/style.css
+++ b/frontend/css/style.css
@@ -737,7 +737,7 @@ body.theme-light .setting-item select option {
/* Grid Container */
.grid-container {
display: grid;
- grid-template-columns: repeat(auto-fill, minmax(220px, 1fr));
+ grid-template-columns: repeat(auto-fill, minmax(260px, 1fr));
gap: 16px;
padding: 24px;
max-width: var(--grid-max);
@@ -894,6 +894,21 @@ body.theme-light .setting-item select option {
padding-bottom: 4px;
}
+.uploader-link {
+ background: transparent;
+ border: none;
+ color: inherit;
+ font: inherit;
+ cursor: pointer;
+ padding: 0;
+ text-align: left;
+}
+
+.uploader-link:hover {
+ color: var(--text-primary);
+ text-decoration: underline;
+}
+
.video-duration {
color: var(--text-primary);
opacity: 0.8;
diff --git a/frontend/js/favorites.js b/frontend/js/favorites.js
index ce2d426..e0f3d89 100644
--- a/frontend/js/favorites.js
+++ b/frontend/js/favorites.js
@@ -34,6 +34,7 @@ App.favorites = App.favorites || {};
title: video.title || '',
thumb: video.thumb || '',
channel: video.channel || '',
+ uploader: video.uploader || video.channel || '',
duration: video.duration || 0
};
};
@@ -98,12 +99,13 @@ App.favorites = App.favorites || {};
const card = document.createElement('div');
card.className = 'favorite-card';
card.dataset.favKey = item.key;
+ const uploaderText = item.uploader || item.channel || '';
card.innerHTML = `
${item.channel}
+ ${uploaderText ? `` : ''}${durationText}
` : ''} `; const favoriteBtn = card.querySelector('.favorite-btn'); @@ -110,6 +111,14 @@ App.videos = App.videos || {}; App.favorites.toggle(v); }; } + const uploaderBtn = card.querySelector('.uploader-link'); + if (uploaderBtn) { + uploaderBtn.onclick = (event) => { + event.stopPropagation(); + const uploader = uploaderBtn.dataset.uploader || uploaderBtn.textContent || ''; + App.videos.handleSearch(uploader); + }; + } card.onclick = () => App.player.open(v.url); grid.appendChild(card); state.renderedVideoIds.add(v.id); @@ -119,6 +128,12 @@ App.videos = App.videos || {}; }; App.videos.handleSearch = function(value) { + if (typeof value === 'string') { + const searchInput = document.getElementById('search-input'); + if (searchInput && searchInput.value !== value) { + searchInput.value = value; + } + } state.currentPage = 1; state.hasNextPage = true; state.renderedVideoIds.clear();