Improve rss description page

This commit is contained in:
DariusIII
2025-10-07 14:43:19 +02:00
parent 522f7e1753
commit c16ca9fbcb
+231 -175
View File
@@ -1,211 +1,237 @@
@extends('layouts.main')
@section('content')
<div class="card card-default shadow-sm mb-4">
<div class="card-header bg-light">
<h3 class="mb-0"><i class="fa fa-rss me-2 text-warning"></i>{{ $title }}</h3>
<div class="bg-white rounded-lg shadow-sm mb-6 dark:bg-gray-800">
<div class="bg-gray-50 px-6 py-4 border-b border-gray-200 rounded-t-lg dark:bg-gray-700 dark:border-gray-600">
<h3 class="text-2xl font-bold text-gray-900 dark:text-white flex items-center">
<i class="fa fa-rss mr-2 text-orange-500 dark:text-orange-400"></i>{{ $title }}
</h3>
</div>
<div class="card-body">
<p class="lead">
<div class="p-6">
<p class="text-lg text-gray-700 mb-6 dark:text-gray-300">
Here you can find RSS feeds for various categories and content types. These feeds provide either descriptions or
direct NZB downloads based on your preferences.
</p>
@if($loggedin ?? false)
<div class="card card-body bg-light mb-4">
<h4 class="mb-3"><i class="fa fa-key me-2 text-secondary"></i>Your API Token</h4>
<div class="input-group">
<input type="text" class="form-control font-monospace" value="api_token={{ $userdata->api_token }}" readonly id="apiTokenInput">
<button class="btn btn-outline-secondary" type="button" id="copyApiToken" title="Copy to clipboard">
<div class="bg-gray-50 rounded-lg p-6 mb-6 border border-gray-200 dark:bg-gray-700 dark:border-gray-600">
<h4 class="text-lg font-semibold mb-3 text-gray-900 dark:text-white flex items-center">
<i class="fa fa-key mr-2 text-gray-600 dark:text-gray-400"></i>Your API Token
</h4>
<div class="flex rounded-md shadow-sm">
<input type="text" class="flex-1 rounded-l-md border-gray-300 font-mono text-sm focus:border-blue-500 focus:ring-blue-500 dark:bg-gray-600 dark:border-gray-500 dark:text-white" value="api_token={{ $userdata->api_token }}" readonly id="apiTokenInput">
<button class="inline-flex items-center px-4 py-2 border border-l-0 border-gray-300 rounded-r-md bg-white text-gray-700 hover:bg-gray-50 focus:outline-none focus:ring-2 focus:ring-offset-2 focus:ring-blue-500 dark:bg-gray-600 dark:text-gray-200 dark:border-gray-500 dark:hover:bg-gray-500" type="button" id="copyApiToken" title="Copy to clipboard">
<i class="fa fa-copy"></i>
</button>
</div>
</div>
@endif
<h4 class="mb-3"><i class="fa fa-cog me-2 text-secondary"></i>RSS Configuration Options</h4>
<div class="table-responsive">
<table class="table table-striped table-bordered" style="table-layout: fixed;">
<thead class="table-light">
<h4 class="text-lg font-semibold mb-3 text-gray-900 dark:text-white flex items-center">
<i class="fa fa-cog mr-2 text-gray-600 dark:text-gray-400"></i>RSS Configuration Options
</h4>
<div class="overflow-x-auto mb-6">
<table class="min-w-full divide-y divide-gray-200 dark:divide-gray-700">
<thead class="bg-gray-50 dark:bg-gray-700">
<tr>
<th style="width: 20%; padding-right: 2rem;">Parameter</th>
<th style="width: 50%; padding-left: 2rem; padding-right: 2rem;">Description</th>
<th style="width: 30%; padding-left: 2rem;">Example</th>
<th scope="col" class="w-1/5 px-6 py-3 text-left text-xs font-medium text-gray-500 uppercase tracking-wider dark:text-gray-300">Parameter</th>
<th scope="col" class="w-1/2 px-6 py-3 text-left text-xs font-medium text-gray-500 uppercase tracking-wider dark:text-gray-300">Description</th>
<th scope="col" class="w-3/10 px-6 py-3 text-left text-xs font-medium text-gray-500 uppercase tracking-wider dark:text-gray-300">Example</th>
</tr>
</thead>
<tbody>
<tr>
<td style="padding-right: 2rem;"><code>api_token</code></td>
<td style="padding-left: 2rem; padding-right: 2rem;">Add this to your feed URL to allow NZB downloads without logging in</td>
<td style="padding-left: 2rem;"><code>&amp;api_token={{ $userdata->api_token ?? 'YOUR_TOKEN' }}</code></td>
<tbody class="bg-white divide-y divide-gray-200 dark:bg-gray-800 dark:divide-gray-700">
<tr class="hover:bg-gray-50 dark:hover:bg-gray-700">
<td class="px-6 py-4"><code class="px-2 py-1 bg-gray-100 rounded text-sm text-red-600 dark:bg-gray-700 dark:text-red-400">api_token</code></td>
<td class="px-6 py-4 text-gray-700 dark:text-gray-300">Add this to your feed URL to allow NZB downloads without logging in</td>
<td class="px-6 py-4"><code class="px-2 py-1 bg-gray-100 rounded text-sm text-red-600 dark:bg-gray-700 dark:text-red-400">&amp;api_token={{ $userdata->api_token ?? 'YOUR_TOKEN' }}</code></td>
</tr>
<tr>
<td style="padding-right: 2rem;"><code>del=1</code></td>
<td style="padding-left: 2rem; padding-right: 2rem;">Remove NZB from your cart after download</td>
<td style="padding-left: 2rem;"><code>&amp;del=1</code></td>
<tr class="hover:bg-gray-50 dark:hover:bg-gray-700">
<td class="px-6 py-4"><code class="px-2 py-1 bg-gray-100 rounded text-sm text-red-600 dark:bg-gray-700 dark:text-red-400">del=1</code></td>
<td class="px-6 py-4 text-gray-700 dark:text-gray-300">Remove NZB from your cart after download</td>
<td class="px-6 py-4"><code class="px-2 py-1 bg-gray-100 rounded text-sm text-red-600 dark:bg-gray-700 dark:text-red-400">&amp;del=1</code></td>
</tr>
<tr>
<td style="padding-right: 2rem;"><code>dl=1</code></td>
<td style="padding-left: 2rem; padding-right: 2rem;">Change the default link to download an NZB</td>
<td style="padding-left: 2rem;"><code>&amp;dl=1</code></td>
<tr class="hover:bg-gray-50 dark:hover:bg-gray-700">
<td class="px-6 py-4"><code class="px-2 py-1 bg-gray-100 rounded text-sm text-red-600 dark:bg-gray-700 dark:text-red-400">dl=1</code></td>
<td class="px-6 py-4 text-gray-700 dark:text-gray-300">Change the default link to download an NZB</td>
<td class="px-6 py-4"><code class="px-2 py-1 bg-gray-100 rounded text-sm text-red-600 dark:bg-gray-700 dark:text-red-400">&amp;dl=1</code></td>
</tr>
<tr>
<td style="padding-right: 2rem;"><code>num=50</code></td>
<td style="padding-left: 2rem; padding-right: 2rem;">Change the number of results returned (default: 25, max: 100)</td>
<td style="padding-left: 2rem;"><code>&amp;num=50</code></td>
<tr class="hover:bg-gray-50 dark:hover:bg-gray-700">
<td class="px-6 py-4"><code class="px-2 py-1 bg-gray-100 rounded text-sm text-red-600 dark:bg-gray-700 dark:text-red-400">num=50</code></td>
<td class="px-6 py-4 text-gray-700 dark:text-gray-300">Change the number of results returned (default: 25, max: 100)</td>
<td class="px-6 py-4"><code class="px-2 py-1 bg-gray-100 rounded text-sm text-red-600 dark:bg-gray-700 dark:text-red-400">&amp;num=50</code></td>
</tr>
<tr>
<td style="padding-right: 2rem;"><code>airdate=20</code></td>
<td style="padding-left: 2rem; padding-right: 2rem;">Return TV shows only aired in the last x days (default: all)</td>
<td style="padding-left: 2rem;"><code>&amp;airdate=20</code></td>
<tr class="hover:bg-gray-50 dark:hover:bg-gray-700">
<td class="px-6 py-4"><code class="px-2 py-1 bg-gray-100 rounded text-sm text-red-600 dark:bg-gray-700 dark:text-red-400">airdate=20</code></td>
<td class="px-6 py-4 text-gray-700 dark:text-gray-300">Return TV shows only aired in the last x days (default: all)</td>
<td class="px-6 py-4"><code class="px-2 py-1 bg-gray-100 rounded text-sm text-red-600 dark:bg-gray-700 dark:text-red-400">&amp;airdate=20</code></td>
</tr>
</tbody>
</table>
</div>
<div class="alert alert-info mt-4">
<i class="fa fa-info-circle me-2"></i>
<div class="bg-blue-50 border border-blue-200 text-blue-800 rounded-lg p-4 mb-4 dark:bg-blue-900 dark:border-blue-700 dark:text-blue-300">
<i class="fa fa-info-circle mr-2"></i>
Most NZB clients which support NZB RSS feeds will appreciate the full URL, with download link and your user token.
The feeds include additional attributes to help provide better filtering in your NZB client, such as size, group,
and categorization.
</div>
<div class="alert alert-primary">
<i class="fa fa-lightbulb-o me-2"></i>
<div class="bg-indigo-50 border border-indigo-200 text-indigo-800 rounded-lg p-4 mb-6 dark:bg-indigo-900 dark:border-indigo-700 dark:text-indigo-300">
<i class="fa fa-lightbulb-o mr-2"></i>
<strong>Pro Tip:</strong> If you want to chain multiple categories together or do more advanced searching, use the
<a href="{{ url('/apihelp') }}" class="alert-link">API</a>, which returns its data in an RSS-compatible format.
<a href="{{ url('/apihelp') }}" class="underline hover:text-indigo-900 dark:hover:text-indigo-200">API</a>, which returns its data in an RSS-compatible format.
</div>
<h4 class="mt-5 mb-3"><i class="fa fa-list me-2 text-secondary"></i>Available Feeds</h4>
<h4 class="text-lg font-semibold mt-6 mb-3 text-gray-900 dark:text-white flex items-center">
<i class="fa fa-list mr-2 text-gray-600 dark:text-gray-400"></i>Available Feeds
</h4>
<!-- General Feeds -->
<div class="card mb-4">
<div class="card-header bg-light">
<h5 class="mb-0"><i class="fa fa-globe me-2 text-primary"></i>General Feeds</h5>
<div class="bg-white rounded-lg border border-gray-200 shadow-sm mb-6 dark:bg-gray-800 dark:border-gray-600">
<div class="bg-gray-50 px-6 py-4 border-b border-gray-200 dark:bg-gray-700 dark:border-gray-600">
<h5 class="text-lg font-semibold text-gray-900 dark:text-white flex items-center">
<i class="fa fa-globe mr-2 text-blue-600 dark:text-blue-400"></i>General Feeds
</h5>
</div>
<div class="card-body p-0">
<div class="list-group list-group-flush">
<div class="list-group-item">
<div class="d-flex justify-content-between align-items-center mb-2">
<strong><i class="fa fa-rss me-2 text-warning"></i>Full Site Feed</strong>
<a href="{{ url('/rss/full-feed?dl=1&api_token=' . ($userdata->api_token ?? '')) }}" class="btn btn-sm btn-outline-primary" target="_blank">
<i class="fa fa-external-link me-1"></i>Open Feed
</a>
</div>
<div class="input-group">
<input type="text" class="form-control form-control-sm font-monospace" value="{{ url('/rss/full-feed?dl=1&api_token=' . ($userdata->api_token ?? '')) }}" readonly id="fullFeedUrl">
<button class="btn btn-sm btn-outline-secondary copy-btn" type="button" data-copy-target="fullFeedUrl">
<i class="fa fa-copy"></i>
</button>
</div>
<small class="text-muted mt-2 d-block">You can define limit and num parameters, which will decide how many items to show and what offset to use (default values: limit 100 and offset 0).</small>
<div class="divide-y divide-gray-200 dark:divide-gray-700">
<div class="p-4">
<div class="flex justify-between items-center mb-3">
<strong class="text-gray-900 dark:text-white flex items-center">
<i class="fa fa-rss mr-2 text-orange-500 dark:text-orange-400"></i>Full Site Feed
</strong>
<a href="{{ url('/rss/full-feed?dl=1&api_token=' . ($userdata->api_token ?? '')) }}" class="inline-flex items-center px-3 py-1.5 border border-blue-300 rounded text-xs font-medium text-blue-700 bg-white hover:bg-blue-50 focus:outline-none focus:ring-2 focus:ring-offset-2 focus:ring-blue-500 dark:bg-gray-700 dark:text-blue-400 dark:border-blue-600 dark:hover:bg-gray-600" target="_blank">
<i class="fa fa-external-link mr-1"></i>Open Feed
</a>
</div>
<div class="list-group-item">
<div class="d-flex justify-content-between align-items-center mb-2">
<strong><i class="fa fa-shopping-basket me-2 text-info"></i>My Cart Feed</strong>
<a href="{{ url('/rss/cart?dl=1&api_token=' . ($userdata->api_token ?? '') . '&del=1') }}" class="btn btn-sm btn-outline-primary" target="_blank">
<i class="fa fa-external-link me-1"></i>Open Feed
</a>
</div>
<div class="input-group">
<input type="text" class="form-control form-control-sm font-monospace" value="{{ url('/rss/cart?dl=1&api_token=' . ($userdata->api_token ?? '') . '&del=1') }}" readonly id="cartFeedUrl">
<button class="btn btn-sm btn-outline-secondary copy-btn" type="button" data-copy-target="cartFeedUrl">
<i class="fa fa-copy"></i>
</button>
</div>
<div class="flex rounded-md shadow-sm">
<input type="text" class="flex-1 rounded-l-md border-gray-300 font-mono text-xs focus:border-blue-500 focus:ring-blue-500 dark:bg-gray-700 dark:border-gray-600 dark:text-white" value="{{ url('/rss/full-feed?dl=1&api_token=' . ($userdata->api_token ?? '')) }}" readonly id="fullFeedUrl">
<button class="inline-flex items-center px-3 py-2 border border-l-0 border-gray-300 rounded-r-md bg-white text-gray-700 hover:bg-gray-50 focus:outline-none focus:ring-2 focus:ring-offset-2 focus:ring-blue-500 dark:bg-gray-600 dark:text-gray-200 dark:border-gray-500 dark:hover:bg-gray-500 copy-btn" type="button" data-copy-target="fullFeedUrl">
<i class="fa fa-copy"></i>
</button>
</div>
<small class="text-gray-500 text-xs mt-2 block dark:text-gray-400">You can define limit and num parameters, which will decide how many items to show and what offset to use (default values: limit 100 and offset 0).</small>
</div>
<div class="list-group-item">
<div class="d-flex justify-content-between align-items-center mb-2">
<strong><i class="fa fa-tv me-2 text-success"></i>My Shows Feed</strong>
<a href="{{ url('/rss/myshows?dl=1&api_token=' . ($userdata->api_token ?? '') . '&del=1') }}" class="btn btn-sm btn-outline-primary" target="_blank">
<i class="fa fa-external-link me-1"></i>Open Feed
</a>
</div>
<div class="input-group">
<input type="text" class="form-control form-control-sm font-monospace" value="{{ url('/rss/myshows?dl=1&api_token=' . ($userdata->api_token ?? '') . '&del=1') }}" readonly id="myShowsFeedUrl">
<button class="btn btn-sm btn-outline-secondary copy-btn" type="button" data-copy-target="myShowsFeedUrl">
<i class="fa fa-copy"></i>
</button>
</div>
<div class="p-4">
<div class="flex justify-between items-center mb-3">
<strong class="text-gray-900 dark:text-white flex items-center">
<i class="fa fa-shopping-basket mr-2 text-blue-500 dark:text-blue-400"></i>My Cart Feed
</strong>
<a href="{{ url('/rss/cart?dl=1&api_token=' . ($userdata->api_token ?? '') . '&del=1') }}" class="inline-flex items-center px-3 py-1.5 border border-blue-300 rounded text-xs font-medium text-blue-700 bg-white hover:bg-blue-50 focus:outline-none focus:ring-2 focus:ring-offset-2 focus:ring-blue-500 dark:bg-gray-700 dark:text-blue-400 dark:border-blue-600 dark:hover:bg-gray-600" target="_blank">
<i class="fa fa-external-link mr-1"></i>Open Feed
</a>
</div>
<div class="flex rounded-md shadow-sm">
<input type="text" class="flex-1 rounded-l-md border-gray-300 font-mono text-xs focus:border-blue-500 focus:ring-blue-500 dark:bg-gray-700 dark:border-gray-600 dark:text-white" value="{{ url('/rss/cart?dl=1&api_token=' . ($userdata->api_token ?? '') . '&del=1') }}" readonly id="cartFeedUrl">
<button class="inline-flex items-center px-3 py-2 border border-l-0 border-gray-300 rounded-r-md bg-white text-gray-700 hover:bg-gray-50 focus:outline-none focus:ring-2 focus:ring-offset-2 focus:ring-blue-500 dark:bg-gray-600 dark:text-gray-200 dark:border-gray-500 dark:hover:bg-gray-500 copy-btn" type="button" data-copy-target="cartFeedUrl">
<i class="fa fa-copy"></i>
</button>
</div>
</div>
<div class="list-group-item">
<div class="d-flex justify-content-between align-items-center mb-2">
<strong><i class="fa fa-film me-2 text-danger"></i>My Movies Feed</strong>
<a href="{{ url('/rss/mymovies?dl=1&api_token=' . ($userdata->api_token ?? '') . '&del=1') }}" class="btn btn-sm btn-outline-primary" target="_blank">
<i class="fa fa-external-link me-1"></i>Open Feed
</a>
</div>
<div class="input-group">
<input type="text" class="form-control form-control-sm font-monospace" value="{{ url('/rss/mymovies?dl=1&api_token=' . ($userdata->api_token ?? '') . '&del=1') }}" readonly id="myMoviesFeedUrl">
<button class="btn btn-sm btn-outline-secondary copy-btn" type="button" data-copy-target="myMoviesFeedUrl">
<i class="fa fa-copy"></i>
</button>
</div>
<div class="p-4">
<div class="flex justify-between items-center mb-3">
<strong class="text-gray-900 dark:text-white flex items-center">
<i class="fa fa-tv mr-2 text-green-600 dark:text-green-400"></i>My Shows Feed
</strong>
<a href="{{ url('/rss/myshows?dl=1&api_token=' . ($userdata->api_token ?? '') . '&del=1') }}" class="inline-flex items-center px-3 py-1.5 border border-blue-300 rounded text-xs font-medium text-blue-700 bg-white hover:bg-blue-50 focus:outline-none focus:ring-2 focus:ring-offset-2 focus:ring-blue-500 dark:bg-gray-700 dark:text-blue-400 dark:border-blue-600 dark:hover:bg-gray-600" target="_blank">
<i class="fa fa-external-link mr-1"></i>Open Feed
</a>
</div>
<div class="flex rounded-md shadow-sm">
<input type="text" class="flex-1 rounded-l-md border-gray-300 font-mono text-xs focus:border-blue-500 focus:ring-blue-500 dark:bg-gray-700 dark:border-gray-600 dark:text-white" value="{{ url('/rss/myshows?dl=1&api_token=' . ($userdata->api_token ?? '') . '&del=1') }}" readonly id="myShowsFeedUrl">
<button class="inline-flex items-center px-3 py-2 border border-l-0 border-gray-300 rounded-r-md bg-white text-gray-700 hover:bg-gray-50 focus:outline-none focus:ring-2 focus:ring-offset-2 focus:ring-blue-500 dark:bg-gray-600 dark:text-gray-200 dark:border-gray-500 dark:hover:bg-gray-500 copy-btn" type="button" data-copy-target="myShowsFeedUrl">
<i class="fa fa-copy"></i>
</button>
</div>
</div>
<div class="p-4">
<div class="flex justify-between items-center mb-3">
<strong class="text-gray-900 dark:text-white flex items-center">
<i class="fa fa-film mr-2 text-red-600 dark:text-red-400"></i>My Movies Feed
</strong>
<a href="{{ url('/rss/mymovies?dl=1&api_token=' . ($userdata->api_token ?? '') . '&del=1') }}" class="inline-flex items-center px-3 py-1.5 border border-blue-300 rounded text-xs font-medium text-blue-700 bg-white hover:bg-blue-50 focus:outline-none focus:ring-2 focus:ring-offset-2 focus:ring-blue-500 dark:bg-gray-700 dark:text-blue-400 dark:border-blue-600 dark:hover:bg-gray-600" target="_blank">
<i class="fa fa-external-link mr-1"></i>Open Feed
</a>
</div>
<div class="flex rounded-md shadow-sm">
<input type="text" class="flex-1 rounded-l-md border-gray-300 font-mono text-xs focus:border-blue-500 focus:ring-blue-500 dark:bg-gray-700 dark:border-gray-600 dark:text-white" value="{{ url('/rss/mymovies?dl=1&api_token=' . ($userdata->api_token ?? '') . '&del=1') }}" readonly id="myMoviesFeedUrl">
<button class="inline-flex items-center px-3 py-2 border border-l-0 border-gray-300 rounded-r-md bg-white text-gray-700 hover:bg-gray-50 focus:outline-none focus:ring-2 focus:ring-offset-2 focus:ring-blue-500 dark:bg-gray-600 dark:text-gray-200 dark:border-gray-500 dark:hover:bg-gray-500 copy-btn" type="button" data-copy-target="myMoviesFeedUrl">
<i class="fa fa-copy"></i>
</button>
</div>
</div>
</div>
</div>
<!-- Category Feeds -->
<div class="row">
<div class="col-md-6">
<div class="card mb-4">
<div class="card-header bg-light">
<h5 class="mb-0"><i class="fa fa-folder me-2 text-primary"></i>Parent Categories</h5>
</div>
<div class="card-body p-0">
<div class="list-group list-group-flush">
@foreach($parentcategorylist ?? [] as $category)
<div class="list-group-item">
<div class="d-flex justify-content-between align-items-center mb-2">
<strong><i class="fa fa-folder-open me-2 text-warning"></i>{{ $category['title'] }}</strong>
<a href="{{ url('/rss/category?id=' . $category['id'] . '&dl=1&api_token=' . ($userdata->api_token ?? '')) }}" class="btn btn-sm btn-outline-primary" target="_blank">
<i class="fa fa-external-link me-1"></i>Open Feed
</a>
</div>
<div class="input-group">
<input type="text" class="form-control form-control-sm font-monospace" value="{{ url('/rss/category?id=' . $category['id'] . '&dl=1&api_token=' . ($userdata->api_token ?? '')) }}" readonly id="parentCat{{ $category['id'] }}Url">
<button class="btn btn-sm btn-outline-secondary copy-btn" type="button" data-copy-target="parentCat{{ $category['id'] }}Url">
<i class="fa fa-copy"></i>
</button>
</div>
</div>
@endforeach
<div class="grid grid-cols-1 lg:grid-cols-2 gap-6">
<div class="bg-white rounded-lg border border-gray-200 shadow-sm dark:bg-gray-800 dark:border-gray-600">
<div class="bg-gray-50 px-6 py-4 border-b border-gray-200 dark:bg-gray-700 dark:border-gray-600">
<h5 class="text-lg font-semibold text-gray-900 dark:text-white flex items-center">
<i class="fa fa-folder mr-2 text-blue-600 dark:text-blue-400"></i>Parent Categories
</h5>
</div>
<div class="divide-y divide-gray-200 dark:divide-gray-700">
@forelse($parentcategorylist ?? [] as $category)
<div class="p-4">
<div class="flex justify-between items-center mb-3">
<strong class="text-gray-900 dark:text-white flex items-center">
<i class="fa fa-folder-open mr-2 text-yellow-600 dark:text-yellow-400"></i>{{ $category['title'] }}
</strong>
<a href="{{ url('/rss/category?id=' . $category['id'] . '&dl=1&api_token=' . ($userdata->api_token ?? '')) }}" class="inline-flex items-center px-3 py-1.5 border border-blue-300 rounded text-xs font-medium text-blue-700 bg-white hover:bg-blue-50 focus:outline-none focus:ring-2 focus:ring-offset-2 focus:ring-blue-500 dark:bg-gray-700 dark:text-blue-400 dark:border-blue-600 dark:hover:bg-gray-600" target="_blank">
<i class="fa fa-external-link mr-1"></i>Open Feed
</a>
</div>
<div class="flex rounded-md shadow-sm">
<input type="text" class="flex-1 rounded-l-md border-gray-300 font-mono text-xs focus:border-blue-500 focus:ring-blue-500 dark:bg-gray-700 dark:border-gray-600 dark:text-white" value="{{ url('/rss/category?id=' . $category['id'] . '&dl=1&api_token=' . ($userdata->api_token ?? '')) }}" readonly id="parentCat{{ $category['id'] }}Url">
<button class="inline-flex items-center px-3 py-2 border border-l-0 border-gray-300 rounded-r-md bg-white text-gray-700 hover:bg-gray-50 focus:outline-none focus:ring-2 focus:ring-offset-2 focus:ring-blue-500 dark:bg-gray-600 dark:text-gray-200 dark:border-gray-500 dark:hover:bg-gray-500 copy-btn" type="button" data-copy-target="parentCat{{ $category['id'] }}Url">
<i class="fa fa-copy"></i>
</button>
</div>
</div>
</div>
@empty
<div class="p-4 text-center text-gray-500 dark:text-gray-400">
<i class="fa fa-folder-open text-2xl mb-2"></i>
<p>No parent categories available</p>
</div>
@endforelse
</div>
</div>
<div class="col-md-6">
<div class="card mb-4">
<div class="card-header bg-light">
<h5 class="mb-0"><i class="fa fa-folder-open me-2 text-primary"></i>Sub Categories</h5>
</div>
<div class="card-body p-0">
<div class="list-group list-group-flush" style="max-height: 500px; overflow-y: auto;">
@foreach($categorylist ?? [] as $category)
@if(!empty($category['title']))
<div class="list-group-item">
<div class="d-flex justify-content-between align-items-center mb-2">
<strong><i class="fa fa-tag me-2 text-info"></i>{{ $category['title'] }}</strong>
<a href="{{ url('/rss/category?id=' . $category['id'] . '&dl=1&api_token=' . ($userdata->api_token ?? '')) }}" class="btn btn-sm btn-outline-primary" target="_blank">
<i class="fa fa-external-link me-1"></i>Open Feed
</a>
</div>
<div class="input-group">
<input type="text" class="form-control form-control-sm font-monospace" value="{{ url('/rss/category?id=' . $category['id'] . '&dl=1&api_token=' . ($userdata->api_token ?? '')) }}" readonly id="subCat{{ $category['id'] }}Url">
<button class="btn btn-sm btn-outline-secondary copy-btn" type="button" data-copy-target="subCat{{ $category['id'] }}Url">
<i class="fa fa-copy"></i>
</button>
</div>
</div>
@endif
@endforeach
<div class="bg-white rounded-lg border border-gray-200 shadow-sm dark:bg-gray-800 dark:border-gray-600">
<div class="bg-gray-50 px-6 py-4 border-b border-gray-200 dark:bg-gray-700 dark:border-gray-600">
<h5 class="text-lg font-semibold text-gray-900 dark:text-white flex items-center">
<i class="fa fa-folder-open mr-2 text-blue-600 dark:text-blue-400"></i>Sub Categories
</h5>
</div>
<div class="divide-y divide-gray-200 dark:divide-gray-700 max-h-[500px] overflow-y-auto">
@forelse($categorylist ?? [] as $category)
@if(!empty($category['title']))
<div class="p-4">
<div class="flex justify-between items-center mb-3">
<strong class="text-gray-900 dark:text-white flex items-center">
<i class="fa fa-tag mr-2 text-blue-500 dark:text-blue-400"></i>{{ $category['title'] }}
</strong>
<a href="{{ url('/rss/category?id=' . $category['id'] . '&dl=1&api_token=' . ($userdata->api_token ?? '')) }}" class="inline-flex items-center px-3 py-1.5 border border-blue-300 rounded text-xs font-medium text-blue-700 bg-white hover:bg-blue-50 focus:outline-none focus:ring-2 focus:ring-offset-2 focus:ring-blue-500 dark:bg-gray-700 dark:text-blue-400 dark:border-blue-600 dark:hover:bg-gray-600" target="_blank">
<i class="fa fa-external-link mr-1"></i>Open Feed
</a>
</div>
<div class="flex rounded-md shadow-sm">
<input type="text" class="flex-1 rounded-l-md border-gray-300 font-mono text-xs focus:border-blue-500 focus:ring-blue-500 dark:bg-gray-700 dark:border-gray-600 dark:text-white" value="{{ url('/rss/category?id=' . $category['id'] . '&dl=1&api_token=' . ($userdata->api_token ?? '')) }}" readonly id="subCat{{ $category['id'] }}Url">
<button class="inline-flex items-center px-3 py-2 border border-l-0 border-gray-300 rounded-r-md bg-white text-gray-700 hover:bg-gray-50 focus:outline-none focus:ring-2 focus:ring-offset-2 focus:ring-blue-500 dark:bg-gray-600 dark:text-gray-200 dark:border-gray-500 dark:hover:bg-gray-500 copy-btn" type="button" data-copy-target="subCat{{ $category['id'] }}Url">
<i class="fa fa-copy"></i>
</button>
</div>
</div>
@endif
@empty
<div class="p-4 text-center text-gray-500 dark:text-gray-400">
<i class="fa fa-tags text-2xl mb-2"></i>
<p>No sub categories available</p>
</div>
</div>
@endforelse
</div>
</div>
</div>
@@ -215,23 +241,38 @@
@push('scripts')
<script>
document.addEventListener('DOMContentLoaded', function() {
// Copy to clipboard functionality
// Copy to clipboard functionality using modern Clipboard API
document.querySelectorAll('.copy-btn').forEach(function(btn) {
btn.addEventListener('click', function() {
const targetId = this.getAttribute('data-copy-target');
const input = document.getElementById(targetId);
if (input) {
input.select();
document.execCommand('copy');
// Visual feedback
const icon = this.querySelector('i');
icon.classList.remove('fa-copy');
icon.classList.add('fa-check');
setTimeout(() => {
icon.classList.remove('fa-check');
icon.classList.add('fa-copy');
}, 2000);
input.setSelectionRange(0, 99999);
navigator.clipboard.writeText(input.value).then(() => {
// Visual feedback
const icon = this.querySelector('i');
icon.classList.remove('fa-copy');
icon.classList.add('fa-check');
this.classList.add('text-green-600');
setTimeout(() => {
icon.classList.remove('fa-check');
icon.classList.add('fa-copy');
this.classList.remove('text-green-600');
}, 2000);
}).catch(() => {
// Fallback for older browsers
document.execCommand('copy');
const icon = this.querySelector('i');
icon.classList.remove('fa-copy');
icon.classList.add('fa-check');
this.classList.add('text-green-600');
setTimeout(() => {
icon.classList.remove('fa-check');
icon.classList.add('fa-copy');
this.classList.remove('text-green-600');
}, 2000);
});
}
});
});
@@ -243,16 +284,31 @@
const input = document.getElementById('apiTokenInput');
if (input) {
input.select();
document.execCommand('copy');
// Visual feedback
const icon = this.querySelector('i');
icon.classList.remove('fa-copy');
icon.classList.add('fa-check');
setTimeout(() => {
icon.classList.remove('fa-check');
icon.classList.add('fa-copy');
}, 2000);
input.setSelectionRange(0, 99999);
navigator.clipboard.writeText(input.value).then(() => {
// Visual feedback
const icon = this.querySelector('i');
icon.classList.remove('fa-copy');
icon.classList.add('fa-check');
this.classList.add('text-green-600');
setTimeout(() => {
icon.classList.remove('fa-check');
icon.classList.add('fa-copy');
this.classList.remove('text-green-600');
}, 2000);
}).catch(() => {
// Fallback for older browsers
document.execCommand('copy');
const icon = this.querySelector('i');
icon.classList.remove('fa-copy');
icon.classList.add('fa-check');
this.classList.add('text-green-600');
setTimeout(() => {
icon.classList.remove('fa-check');
icon.classList.add('fa-copy');
this.classList.remove('text-green-600');
}, 2000);
});
}
});
}