Improve browse page

This commit is contained in:
DariusIII
2025-04-09 11:49:01 +02:00
parent 1749c24d7c
commit 539258697a
5 changed files with 450 additions and 236 deletions
+1 -1
View File
@@ -1,6 +1,6 @@
{
"private": true,
"type": "module",
"type": "",
"scripts": {
"dev": "npm run development",
"development": "mix",
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
+47
View File
@@ -5009,3 +5009,50 @@ ul.notifications {
.calendar-exibit .calendar-table {
padding: 0 0 4px 0;
}
.badge {
transition: all 0.2s ease;
}
a.badge:hover {
opacity: 0.9;
transform: translateY(-1px);
box-shadow: 0 2px 3px rgba(0, 0, 0, 0.1);
}
/* Group badges by color */
.badge.bg-primary, .badge.bg-success, .badge.bg-info {
font-weight: 500;
}
.badge.bg-dark {
font-size: 0.75rem;
}
.sort-controls {
display: inline-flex;
gap: 4px;
}
.sort-icon {
color: rgba(108, 117, 125, 0.6);
transition: color 0.2s, transform 0.2s;
font-size: 0.85rem;
}
.sort-icon:hover {
color: #0d6efd;
transform: translateY(-1px);
}
.sort-icon.active {
color: #0d6efd;
}
th .d-flex {
min-height: 24px;
}
thead th {
font-weight: 600;
border-bottom-width: 2px;
}
+398 -231
View File
@@ -1,239 +1,406 @@
<div class="header">
<div class="breadcrumb-wrapper">
<ul class="breadcrumb">
<li><a href="{{url("{$site->home_link}")}}">Home</a></li>
{if $parentcat == ''}
<a href="{{url("/browse/$catname")}}">/Browse/{$catname}</a>
{else}
/
<a href="{{url("/{if preg_match('/^alt\.binaries|a\.b|dk\./i', $parentcat)}browse/group?g={else}browse/{/if}{if ($parentcat == 'music')}Audio{else}{$parentcat}{/if}")}}">{$parentcat}</a>
{if ($catname != '' && $catname != 'all')}/
<a href="{{url("/browse/{$parentcat}/{$catname}")}}">{$catname}</a>
{/if}
{/if}
</ul>
</div>
</div>
{$site->adbrowse}
{if count($results) > 0}
{{Form::open(['id' => 'nzb_multi_operations_form', 'method' => 'get'])}}
<div class="box-body">
<div class="row">
<div class="col-md-12 col-12">
<div class="card card-default">
<div class="card-body">
<div class="row">
<div class="col-md-4">
{if isset($shows)}
<p>
<a href="{{route('series')}}"
title="View available TV series">Series List</a> |
<a title="Manage your shows" href="{{route('myshows')}}">Manage
My Shows</a> |
<a title="All releases in your shows as an RSS feed"
href="{{url("/rss/myshows?dl=1&amp;i={$userdata.id}&amp;api_token={$userdata.api_token}")}}">Rss
Feed</a>
</p>
{/if}
<div class="nzb_multi_operations">
{if isset($covgroup) && $covgroup != ''}View:
<a href="{{url("/{$covgroup}/{$category}")}}">Covers
</a>
|
<b>List</b>
<br/>
{/if}
With Selected:
<div class="btn-group">
<button type="button"
class="nzb_multi_operations_download btn btn-sm btn-success"
data-bs-toggle="tooltip" data-bs-placement="top" title
data-original-title="Download NZBs">
<i class="fa fa-cloud-download"></i></button>
<button type="button"
class="nzb_multi_operations_cart btn btn-sm btn-info"
data-bs-toggle="tooltip" data-bs-placement="top" title
data-original-title="Send to my Download Basket">
<i class="fa fa-shopping-basket"></i></button>
{if isset($isadmin)}
<input type="button"
class="nzb_multi_operations_edit btn btn-sm btn-warning"
value="Edit"/>
<input type="button"
class="nzb_multi_operations_delete btn btn-sm btn-danger"
value="Delete"/>
{/if}
</div>
</div>
</div>
<div class="col-md-8">
{$results->onEachSide(5)->links()}
</div>
</div>
<hr>
<div class="container">
<table class="data table table-striped">
<thead class="thead-light">
<tr class="headings">
<th><input id="check-all" type="checkbox" class="flat-all"></th>
<th>Name<br>
<a title="Sort Descending" href="{$orderbyname_desc}"><i class="fas fa-chevron-down"></i></a>
<a title="Sort Ascending" href="{$orderbyname_asc}"><i class="fas fa-chevron-up"> </i></a>
</th>
<th class="column-title" style="display: table-cell;">Category<br>
<a title="Sort Descending" href="{$orderbycat_desc}"><i class="fas fa-chevron-down"></i></a>
<a title="Sort Ascending" href="{$orderbycat_asc}"><i class="fas fa-chevron-up"></i></a>
</th>
<th class="column-title" style="display: table-cell;">Posted<br>
<a title="Sort Descending" href="{$orderbyposted_desc}"><i class="fas fa-chevron-down"></i></a>
<a title="Sort Ascending" href="{$orderbyposted_asc}"><i class="fas fa-chevron-up"></i></a>
</th>
<th style="vertical-align:top;text-align:center;">Size<br>
<a title="Sort Descending" href="{$orderbysize_desc}"><i class="fas fa-chevron-down"></i></a>
<a title="Sort Ascending" href="{$orderbysize_asc}"><i class="fas fa-chevron-up"></i></a>
</th>
<th style="vertical-align:top;text-align:center;">Files<br>
<a title="Sort Descending" href="{$orderbyfiles_desc}"><i class="fas fa-chevron-down"></i></a>
<a title="Sort Ascending" href="{$orderbyfiles_asc}"><i class="fas fa-chevron-up"></i></a>
</th>
<th style="vertical-align:top;text-align:center;">Downloads<br>
<a title="Sort Descending" href="{$orderbystats_desc}"><i class="fas fa-chevron-down"></i></a>
<a title="Sort Ascending" href="{$orderbystats_asc}"><i class="fas fa-chevron-up"></i></a>
</th>
<th class="column-title no-link last" style="display: table-cell;">Action</th>
</tr>
</thead>
<tbody>
{foreach $resultsadd as $result}
<tr id="guid{$result->guid}">
<td><input id="chk{$result->guid|substr:0:7}"
type="checkbox" name="table_records" class="flat"
value="{$result->guid}"/></td>
<td>
<a href="{{url("/details/{$result->guid}")}}"
class="title">{$result->searchname|escape:"htmlall"|replace:".":" "}</a>{if !empty($result->failed)}
<i class="fa fa-exclamation-circle" style="color: red"
title="This release has failed to download for some users"></i>{/if}
<br/>
<span class="badge bg-info">{$result->grabs}
Grab{if $result->grabs != 1}s{/if}</span>
{if $result->nfoid > 0}<span><a
href="{{url("/nfo/{$result->guid}")}}"
class="modal_nfo badge bg-info" rel="nfo">NFO</a>
</span>{/if}
{if $result->jpgstatus == 1 && $userdata->can('preview') == true}<span><a
href="{{url("/covers/sample/{$result->guid}_thumb.jpg")}}"
name="name{$result->guid}"
data-fancybox
class="badge bg-info"
rel="preview">Sample</a></span>{/if}
{if $result->haspreview == 1 && $userdata->can('preview') == true}<span><a
href="{{url("/covers/preview/{$result->guid}_thumb.jpg")}}"
name="name{$result->guid}"
data-fancybox
class="badge bg-info"
rel="preview">Preview</a></span>{/if}
{if $result->videos_id > 0}<span><a
href="{{url("/series/{$result->videos_id}")}}"
class="badge bg-info" rel="series">View TV</a>
</span>{/if}
{if !empty($result->firstaired)}<span
class="seriesinfo badge bg-info" title="{$result->guid}">
Aired {if $result->firstaired|strtotime > $smarty.now}in future{else}{$result->firstaired|daysago}{/if}</span>{/if}
{if $result->anidbid > 0}<span><a class="badge bg-info"
href="{{url("/anime?id={$result->anidbid}")}}">View
Anime</a></span>{/if}
{if !empty($result->failed)}<span class="badge bg-info">
<i class="fa fa-thumbs-o-up"></i>
{$result->grabs} Grab{if $result->grabs != 1}s{/if} /
<i class="fa fa-thumbs-o-down"></i>
{$result->failed} Failed Download{if $result->failed != 1}s{/if}
</span>{/if}
<span class="badge bg-info">{$result->group_name}</span>
<span class="badge bg-info">{$result->fromname}</span>
{if $lastvisit|strtotime<$result->adddate|strtotime}
<span class="badge bg-success">New</span>
{/if}
</td>
<td><span class="badge bg-info">{$result->category_name}</span>
</td>
<td>{$result->postdate|timeago}</td>
<td>{$result->size|filesize}</td>
<td style="width:auto;text-align:center;white-space:nowrap;">
<a title="View file list" href="{{url("/filelist/{$result.guid}")}}">{$result->totalpart}</a>
<i class="far fa-file"></i>
{if $result->rarinnerfilecount > 0}
<div class="rarfilelist">
<i class="fas fa-search-plus"></i>
<div class="breadcrumb-wrapper">
<nav aria-label="breadcrumb">
<ol class="breadcrumb">
<li class="breadcrumb-item"><a href="{{url("{$site->home_link}")}}">Home</a></li>
{if $parentcat == ''}
<li class="breadcrumb-item active"><a href="{{url("/browse/$catname")}}">Browse/{$catname}</a></li>
{else}
<li class="breadcrumb-item"><a href="{{url("/{if preg_match('/^alt\.binaries|a\.b|dk\./i', $parentcat)}browse/group?g={else}browse/{/if}{if ($parentcat == 'music')}Audio{else}{$parentcat}{/if}")}}">{$parentcat}</a></li>
{if ($catname != '' && $catname != 'all')}
<li class="breadcrumb-item active"><a href="{{url("/browse/{$parentcat}/{$catname}")}}">{$catname}</a></li>
{/if}
{/if}
</ol>
</nav>
</div>
</div>
{$site->adbrowse}
{if count($results) > 0}
{{Form::open(['id' => 'nzb_multi_operations_form', 'method' => 'get'])}}
<div class="card card-default shadow-sm mb-4">
<div class="card-header bg-light">
<div class="row">
<div class="col-md-4">
{if isset($shows)}
<div class="mb-2">
<a href="{{route('series')}}" class="me-2" title="View available TV series">Series List</a> |
<a href="{{route('myshows')}}" class="mx-2" title="Manage your shows">Manage My Shows</a> |
<a href="{{url("/rss/myshows?dl=1&amp;i={$userdata.id}&amp;api_token={$userdata.api_token}")}}" class="ms-2" title="All releases in your shows as an RSS feed">RSS Feed</a>
</div>
{/if}
{if isset($covgroup) && $covgroup != ''}
<div class="mb-2">
<span class="me-2">View:</span>
<a href="{{url("/{$covgroup}/{$category}")}}" class="me-2">Covers</a> |
<b class="ms-2">List</b>
</div>
{/if}
<div class="nzb_multi_operations d-flex align-items-center">
<small class="me-2">With Selected:</small>
<div class="btn-group">
<button type="button" class="nzb_multi_operations_download btn btn-sm btn-success" data-bs-toggle="tooltip" data-bs-placement="top" title="Download NZBs">
<i class="fa fa-cloud-download"></i>
</button>
<button type="button" class="nzb_multi_operations_cart btn btn-sm btn-info" data-bs-toggle="tooltip" data-bs-placement="top" title="Send to my Download Basket">
<i class="fa fa-shopping-basket"></i>
</button>
{if isset($isadmin)}
<button type="button" class="nzb_multi_operations_edit btn btn-sm btn-warning">Edit</button>
<button type="button" class="nzb_multi_operations_delete btn btn-sm btn-danger">Delete</button>
{/if}
</div>
</div>
</div>
<div class="col-md-8 d-flex justify-content-end align-items-center">
{$results->onEachSide(5)->links()}
</div>
</div>
</div>
{/if}
</td>
<td>{$result->grabs}</td>
<td>
<a href="{{url("/getnzb?id={$result->guid}")}}"
class="icon_nzb text-muted"><i
class="fa fa-cloud-download text-muted"
data-bs-toggle="tooltip" data-bs-placement="top" title
data-original-title="Download NZB"></i></a>
<a href="{{url("/details/{$result->guid}/#comments")}}"><i
class="fa fa-comments-o text-muted"
data-bs-toggle="tooltip" data-bs-placement="top" title
data-original-title="Comments"></i></a>
<a href="#"><i
id="guid{$result->guid}"
class="icon_cart text-muted fa fa-shopping-basket"
data-bs-toggle="tooltip"
data-bs-placement="top" title
data-original-title="Send to my download basket"></i></a>
</td>
</tr>
{/foreach}
</tbody>
</table>
</div>
<hr>
<div class="row">
<div class="col-md-4">
<div class="nzb_multi_operations">
{if isset($covgroup) && $covgroup != ''}View:
<a href="{{url("/{$covgroup}/{$category}")}}">Covers</a>
|
<b>List</b>
<br/>
{/if}
With Selected:
<div class="btn-group">
<button type="button"
class="nzb_multi_operations_download btn btn-sm btn-success"
data-bs-toggle="tooltip" data-bs-placement="top" title
data-original-title="Download NZBs">
<i class="fa fa-cloud-download"></i></button>
<button type="button"
class="nzb_multi_operations_cart btn btn-sm btn-info"
data-bs-toggle="tooltip" data-bs-placement="top" title
data-original-title="Send to my Download Basket">
<i class="fa fa-shopping-basket"></i></button>
{if isset($isadmin)}
<input type="button"
class="nzb_multi_operations_edit btn btn-sm btn-warning"
value="Edit"/>
<input type="button"
class="nzb_multi_operations_delete btn btn-sm btn-danger"
value="Delete"/>
<div class="card-body px-0 py-0">
<div class="table-responsive">
<table class="table table-striped table-hover mb-0">
<thead class="thead-light">
<tr>
<th style="width: 30px">
<input id="check-all" type="checkbox" class="flat-all">
</th>
<th>
<div class="d-flex align-items-center gap-2">
<span>Name</span>
<div class="sort-controls">
<a href="{$orderbyname_asc}" class="sort-icon {if isset($orderby) && $orderby == 'name_asc'}active{/if}" title="Sort Ascending">
<i class="fas fa-sort-alpha-down"></i>
</a>
<a href="{$orderbyname_desc}" class="sort-icon {if isset($orderby) && $orderby == 'name_desc'}active{/if}" title="Sort Descending">
<i class="fas fa-sort-alpha-down-alt"></i>
</a>
</div>
</div>
</th>
<th>
<div class="d-flex align-items-center gap-2">
<span>Category</span>
<div class="sort-controls">
<a href="{$orderbycat_asc}" class="sort-icon {if isset($orderby) && $orderby == 'cat_asc'}active{/if}" title="Sort Ascending">
<i class="fas fa-sort-alpha-down"></i>
</a>
<a href="{$orderbycat_desc}" class="sort-icon {if isset($orderby) && $orderby == 'cat_desc'}active{/if}" title="Sort Descending">
<i class="fas fa-sort-alpha-down-alt"></i>
</a>
</div>
</div>
</th>
<th>
<div class="d-flex align-items-center gap-2">
<span>Posted</span>
<div class="sort-controls">
<a href="{$orderbyposted_asc}" class="sort-icon {if isset($orderby) && $orderby == 'posted_asc'}active{/if}" title="Sort Oldest First">
<i class="fas fa-sort-numeric-down"></i>
</a>
<a href="{$orderbyposted_desc}" class="sort-icon {if isset($orderby) && $orderby == 'posted_desc'}active{/if}" title="Sort Newest First">
<i class="fas fa-sort-numeric-down-alt"></i>
</a>
</div>
</div>
</th>
<th>
<div class="d-flex align-items-center justify-content-center gap-2">
<span>Size</span>
<div class="sort-controls">
<a href="{$orderbysize_asc}" class="sort-icon {if isset($orderby) && $orderby == 'size_asc'}active{/if}" title="Sort Smallest First">
<i class="fas fa-sort-numeric-down"></i>
</a>
<a href="{$orderbysize_desc}" class="sort-icon {if isset($orderby) && $orderby == 'size_desc'}active{/if}" title="Sort Largest First">
<i class="fas fa-sort-numeric-down-alt"></i>
</a>
</div>
</div>
</th>
<th>
<div class="d-flex align-items-center justify-content-center gap-2">
<span>Files</span>
<div class="sort-controls">
<a href="{$orderbyfiles_asc}" class="sort-icon {if isset($orderby) && $orderby == 'files_asc'}active{/if}" title="Sort Fewest First">
<i class="fas fa-sort-numeric-down"></i>
</a>
<a href="{$orderbyfiles_desc}" class="sort-icon {if isset($orderby) && $orderby == 'files_desc'}active{/if}" title="Sort Most First">
<i class="fas fa-sort-numeric-down-alt"></i>
</a>
</div>
</div>
</th>
<th>
<div class="d-flex align-items-center justify-content-center gap-2">
<span>Downloads</span>
<div class="sort-controls">
<a href="{$orderbystats_asc}" class="sort-icon {if isset($orderby) && $orderby == 'stats_asc'}active{/if}" title="Sort Fewest First">
<i class="fas fa-sort-numeric-down"></i>
</a>
<a href="{$orderbystats_desc}" class="sort-icon {if isset($orderby) && $orderby == 'stats_desc'}active{/if}" title="Sort Most First">
<i class="fas fa-sort-numeric-down-alt"></i>
</a>
</div>
</div>
</th>
<th class="text-end">Action</th>
</tr>
</thead>
<tbody>
{foreach $resultsadd as $result}
<tr id="guid{$result->guid}">
<td>
<input id="chk{$result->guid|substr:0:7}" type="checkbox" name="table_records" class="flat" value="{$result->guid}">
</td>
<td>
<div class="mb-1">
<a href="{{url("/details/{$result->guid}")}}" class="title fw-semibold">{$result->searchname|escape:"htmlall"|replace:".":" "}</a>
{if !empty($result->failed)}
<i class="fa fa-exclamation-circle text-danger ms-1" title="This release has failed to download for some users"></i>
{/if}
{if $lastvisit|strtotime < $result->adddate|strtotime}
<span class="badge bg-success ms-1">New</span>
{/if}
</div>
<div class="d-flex flex-wrap gap-2 mt-2">
<!-- Downloads indicator -->
<span class="badge bg-secondary text-white">
<i class="fa fa-download me-1"></i>{$result->grabs} Grab{if $result->grabs != 1}s{/if}
</span>
<!-- Media badges -->
{if $result->nfoid > 0}
<a href="#" data-bs-toggle="modal" data-bs-target="#nfoModal" data-guid="{$result->guid}" class="nfo-modal-trigger badge bg-info">
<i class="fa fa-file-text-o me-1"></i>NFO
</a>
{/if}
{if $result->jpgstatus == 1 && $userdata->can('preview') == true}
<a href="{{url("/covers/sample/{$result->guid}_thumb.jpg")}}" name="name{$result->guid}" data-fancybox class="badge bg-primary" rel="preview">
<i class="fa fa-image me-1"></i>Sample
</a>
{/if}
{if $result->haspreview == 1 && $userdata->can('preview') == true}
<a href="{{url("/covers/preview/{$result->guid}_thumb.jpg")}}" name="name{$result->guid}" data-fancybox class="badge bg-primary" rel="preview">
<i class="fa fa-film me-1"></i>Preview
</a>
{/if}
<!-- Media type badges -->
{if $result->videos_id > 0}
<a href="{{url("/series/{$result->videos_id}")}}" class="badge bg-success" rel="series">
<i class="fa fa-tv me-1"></i>View TV
</a>
{/if}
{if !empty($result->firstaired)}
<span class="seriesinfo badge bg-warning text-dark" title="{$result->guid}">
<i class="fa fa-calendar me-1"></i>Aired {if $result->firstaired|strtotime > $smarty.now}in future{else}{$result->firstaired|daysago}{/if}
</span>
{/if}
{if $result->anidbid > 0}
<a class="badge bg-success" href="{{url("/anime?id={$result->anidbid}")}}">
<i class="fa fa-play-circle me-1"></i>View Anime
</a>
{/if}
<!-- Stats badges -->
{if !empty($result->failed)}
<span class="badge bg-danger">
<i class="fa fa-exclamation-triangle me-1"></i>{$result->failed} Failed
</span>
{/if}
<!-- Source badges -->
<span class="badge bg-dark">
<i class="fa fa-users me-1"></i>{$result->group_name}
</span>
<span class="badge bg-dark">
<i class="fa fa-user me-1"></i>{$result->fromname}
</span>
</div>
</td>
<td>
<span class="badge bg-secondary text-white rounded-pill">
<i class="fa fa-folder-open me-1"></i>{$result->category_name}
</span>
</td>
<td>
<div class="d-flex align-items-center">
<i class="fa fa-clock-o text-muted me-2"></i>
<span title="{$result->postdate}">{$result->postdate|timeago}</span>
</div>
</td>
<td class="text-center">
<div class="d-flex align-items-center justify-content-center">
<i class="fa fa-hdd-o text-muted me-2"></i>
<span class="fw-medium">{$result->size|filesize}</span>
</div>
</td>
<td class="text-center">
<div class="d-flex align-items-center justify-content-center">
<a class="d-flex align-items-center text-decoration-none" title="View file list" href="{{url("/filelist/{$result.guid}")}}">
<i class="far fa-file text-primary me-1"></i>
<span class="fw-medium">{$result->totalpart}</span>
</a>
{if $result->rarinnerfilecount > 0}
<div class="rarfilelist d-inline-block ms-2" title="View RAR contents">
<i class="fas fa-search-plus text-info"></i>
</div>
{/if}
</div>
</td>
<td class="text-center">
<div class="d-flex align-items-center justify-content-center">
<i class="fa fa-download text-muted me-2"></i>
<span class="fw-medium">{$result->grabs}</span>
</div>
</td>
<td class="text-end">
<div class="d-flex justify-content-end gap-2">
<a href="{{url("/getnzb?id={$result->guid}")}}" class="btn btn-sm btn-outline-secondary" data-bs-toggle="tooltip" data-bs-placement="top" title="Download NZB">
<i class="fa fa-cloud-download"></i>
</a>
<a href="{{url("/details/{$result->guid}/#comments")}}" class="btn btn-sm btn-outline-secondary" data-bs-toggle="tooltip" data-bs-placement="top" title="Comments">
<i class="fa fa-comments-o"></i>
</a>
<a href="#" class="btn btn-sm btn-outline-secondary" data-bs-toggle="tooltip" data-bs-placement="top" title="Send to my download basket">
<i id="guid{$result->guid}" class="icon_cart fa fa-shopping-basket"></i>
</a>
</div>
</td>
</tr>
{/foreach}
</tbody>
</table>
</div>
</div>
<div class="card-footer">
<div class="row">
<div class="col-md-4">
<div class="nzb_multi_operations">
<div class="d-flex align-items-center gap-2">
<small>With Selected:</small>
<div class="btn-group">
<button type="button" class="nzb_multi_operations_download btn btn-sm btn-success" data-bs-toggle="tooltip" data-bs-placement="top" title="Download NZBs">
<i class="fa fa-cloud-download"></i>
</button>
<button type="button" class="nzb_multi_operations_cart btn btn-sm btn-info" data-bs-toggle="tooltip" data-bs-placement="top" title="Send to my Download Basket">
<i class="fa fa-shopping-basket"></i>
</button>
{if isset($isadmin)}
<button type="button" class="nzb_multi_operations_edit btn btn-sm btn-warning">Edit</button>
<button type="button" class="nzb_multi_operations_delete btn btn-sm btn-danger">Delete</button>
{/if}
</div>
</div>
</div>
</div>
<div class="col-md-8 d-flex justify-content-end align-items-center">
{$results->onEachSide(5)->links()}
</div>
</div>
</div>
</div>
{{Form::close()}}
{else}
<div class="alert alert-info">No releases indexed yet!</div>
{/if}
</div>
</div>
</div>
<div class="col-md-8">
{$results->onEachSide(5)->links()}
</div>
</div>
<!-- NFO Modal -->
<div class="modal fade" id="nfoModal" tabindex="-1" aria-labelledby="nfoModalLabel" aria-hidden="true">
<div class="modal-dialog modal-lg modal-dialog-scrollable">
<div class="modal-content">
<div class="modal-header">
<h5 class="modal-title" id="nfoModalLabel">NFO Information</h5>
<button type="button" class="btn-close" data-bs-dismiss="modal" aria-label="Close"></button>
</div>
<div class="modal-body">
<div class="text-center mb-3 nfo-loading">
<div class="spinner-border text-primary" role="status">
<span class="visually-hidden">Loading...</span>
</div>
<p class="mt-2">Loading NFO content...</p>
</div>
<pre id="nfoContent" class="bg-dark text-light p-3 rounded d-none" style="white-space: pre; font-family: monospace; overflow-x: auto;"></pre>
</div>
<div class="modal-footer">
<button type="button" class="btn btn-secondary" data-bs-dismiss="modal">Close</button>
</div>
</div>
</div>
{{Form::close()}}
{else}
No releases indexed yet!
{/if}
</div>
<script>
{literal}
// NFO Modal content loading
document.addEventListener('DOMContentLoaded', function() {
const nfoModal = document.getElementById('nfoModal');
if (nfoModal) {
nfoModal.addEventListener('show.bs.modal', function(event) {
const button = event.relatedTarget;
const guid = button.getAttribute('data-guid');
const modalTitle = nfoModal.querySelector('.modal-title');
const loading = nfoModal.querySelector('.nfo-loading');
const contentElement = document.getElementById('nfoContent');
// Reset and show loading state
loading.style.display = 'block';
contentElement.classList.add('d-none');
contentElement.textContent = '';
// Fetch the NFO content via AJAX
fetch(`/nfo/${guid}`, {
headers: {
'X-Requested-With': 'XMLHttpRequest'
}
})
.then(response => response.text())
.then(html => {
// Extract just the NFO content from the response
const parser = new DOMParser();
const doc = parser.parseFromString(html, 'text/html');
// Look for the pre element that likely contains the NFO
let nfoText = '';
const preElement = doc.querySelector('pre');
if (preElement) {
// Found a pre element, use its content
nfoText = preElement.textContent;
} else {
// Try to find the main content area
const mainContent = doc.querySelector('.card-body, .main-content, .content-area, main');
if (mainContent) {
nfoText = mainContent.textContent;
} else {
// Fallback: use the whole page but clean it up
nfoText = doc.body.textContent;
}
}
// Update the modal
loading.style.display = 'none';
contentElement.classList.remove('d-none');
contentElement.textContent = nfoText.trim();
})
.catch(error => {
console.error('Error fetching NFO content:', error);
loading.style.display = 'none';
contentElement.classList.remove('d-none');
contentElement.textContent = 'Error loading NFO content';
});
});
}
});
{/literal}
</script>