Updated readme
All checks were successful
🏗️ Build Plugin / build (push) Successful in 2m4s
🧪 Test Plugin / test (push) Successful in 1m1s
🚀 Release Plugin / build-and-release (push) Successful in 2m39s

fixed rending error on pod management page
This commit is contained in:
Duncan Tourolle 2025-12-14 14:25:43 +01:00
parent c1f7981ed7
commit b4275837bc
4 changed files with 76 additions and 35 deletions

View File

@ -4,42 +4,64 @@
<meta charset="utf-8"> <meta charset="utf-8">
<title>Jellypod</title> <title>Jellypod</title>
<style> <style>
.podcast-item { .podcast-table {
display: flex; width: 100%;
align-items: center; border-collapse: collapse;
}
.podcast-table th {
text-align: left;
padding: 0.75em;
border-bottom: 2px solid rgba(255,255,255,0.2);
font-weight: 600;
}
.podcast-table td {
padding: 0.75em; padding: 0.75em;
border-bottom: 1px solid rgba(255,255,255,0.1); border-bottom: 1px solid rgba(255,255,255,0.1);
vertical-align: middle;
} }
.podcast-item:last-child { .podcast-table tr:last-child td {
border-bottom: none; border-bottom: none;
} }
.podcast-image { .podcast-table tr:hover {
width: 50px; background: rgba(255,255,255,0.05);
height: 50px;
max-width: 50px;
max-height: 50px;
min-width: 50px;
min-height: 50px;
object-fit: cover;
border-radius: 4px;
margin-right: 1em;
background: #333;
flex-shrink: 0;
} }
.podcast-info { .podcast-image {
flex: 1; width: 50px !important;
height: 50px !important;
max-width: 50px !important;
max-height: 50px !important;
min-width: 50px !important;
min-height: 50px !important;
object-fit: cover !important;
border-radius: 4px !important;
background: #333 !important;
display: block !important;
}
.col-image img {
width: 50px !important;
height: 50px !important;
max-width: 50px !important;
max-height: 50px !important;
} }
.podcast-title { .podcast-title {
font-weight: bold; font-weight: bold;
margin-bottom: 0.25em;
} }
.podcast-meta { .podcast-meta {
font-size: 0.85em; font-size: 0.85em;
opacity: 0.7; opacity: 0.7;
margin-top: 0.25em;
} }
.podcast-actions { .podcast-actions {
display: flex; display: flex;
gap: 0.5em; gap: 0.5em;
justify-content: flex-end;
}
.col-image {
width: 50px;
}
.col-actions {
width: 100px;
text-align: right;
} }
.add-podcast-form { .add-podcast-form {
display: flex; display: flex;
@ -224,7 +246,7 @@
return; return;
} }
var html = podcasts.map(function(podcast) { var rows = podcasts.map(function(podcast) {
// Handle both PascalCase (C#) and camelCase (JSON) property names // Handle both PascalCase (C#) and camelCase (JSON) property names
var episodeCount = (podcast.Episodes || podcast.episodes || []).length; var episodeCount = (podcast.Episodes || podcast.episodes || []).length;
var lastUpdated = podcast.LastUpdated || podcast.lastUpdated; var lastUpdated = podcast.LastUpdated || podcast.lastUpdated;
@ -235,14 +257,15 @@
console.log('Jellypod: Rendering podcast:', podcastTitle, 'ID:', podcastId); console.log('Jellypod: Rendering podcast:', podcastTitle, 'ID:', podcastId);
return '<div class="podcast-item" data-id="' + podcastId + '">' + return '<tr data-id="' + podcastId + '">' +
'<img class="podcast-image" src="' + podcastImage + '" alt="" onerror="this.style.display=\'none\'">' + '<td class="col-image">' +
'<div class="podcast-info">' + '<img class="podcast-image" src="' + podcastImage + '" alt="" style="width:50px;height:50px;max-width:50px;max-height:50px;object-fit:cover;" onerror="this.style.display=\'none\'">' +
'</td>' +
'<td>' +
'<div class="podcast-title">' + escapeHtml(podcastTitle) + '</div>' + '<div class="podcast-title">' + escapeHtml(podcastTitle) + '</div>' +
'<div class="podcast-meta">' + '<div class="podcast-meta">' + episodeCount + ' episodes | Updated: ' + lastUpdatedStr + '</div>' +
episodeCount + ' episodes | Updated: ' + lastUpdatedStr + '</td>' +
'</div>' + '<td class="col-actions">' +
'</div>' +
'<div class="podcast-actions">' + '<div class="podcast-actions">' +
'<button is="emby-button" type="button" class="emby-button" onclick="refreshPodcast(\'' + podcastId + '\')" title="Refresh Feed">' + '<button is="emby-button" type="button" class="emby-button" onclick="refreshPodcast(\'' + podcastId + '\')" title="Refresh Feed">' +
'<span class="material-icons">refresh</span>' + '<span class="material-icons">refresh</span>' +
@ -251,9 +274,19 @@
'<span class="material-icons">delete</span>' + '<span class="material-icons">delete</span>' +
'</button>' + '</button>' +
'</div>' + '</div>' +
'</div>'; '</td>' +
'</tr>';
}).join(''); }).join('');
var html = '<table class="podcast-table">' +
'<thead><tr>' +
'<th class="col-image"></th>' +
'<th>Podcast</th>' +
'<th class="col-actions">Actions</th>' +
'</tr></thead>' +
'<tbody>' + rows + '</tbody>' +
'</table>';
container.innerHTML = html; container.innerHTML = html;
console.log('Jellypod: Rendered HTML length:', html.length); console.log('Jellypod: Rendered HTML length:', html.length);
} }

View File

@ -8,6 +8,14 @@ A Jellyfin plugin that adds podcast support to your media server.
- Automatic episode downloads - Automatic episode downloads
- Integration with Jellyfin's library system - Integration with Jellyfin's library system
## Screenshots
### Podcast Library
![Podcast Library](images/library.png)
### Plugin Settings
![Plugin Settings](images/settings.png)
## Installation ## Installation
### Manual Installation ### Manual Installation

BIN
images/library.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 192 KiB

BIN
images/settings.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 122 KiB