mirror of
https://github.com/HDInnovations/UNIT3D-Community-Edition.git
synced 2026-04-22 18:20:31 -05:00
1099 lines
52 KiB
PHP
1099 lines
52 KiB
PHP
<div class="page__torrents torrent-search__component">
|
|
<search class="compact-search torrent-search__filters" x-data="toggle">
|
|
<div class="compact-search__visible-default">
|
|
<p class="form__group">
|
|
<input
|
|
id="name"
|
|
type="search"
|
|
autocomplete="off"
|
|
wire:model.live="name"
|
|
class="form__text"
|
|
placeholder=" "
|
|
@if (auth()->user()->settings->torrent_search_autofocus)
|
|
autofocus
|
|
@endif
|
|
/>
|
|
<label class="form__label form__label--floating" for="name">
|
|
{{ __('common.search') }}
|
|
</label>
|
|
</p>
|
|
<button class="form__button form__standard-icon-button" x-on:click="toggle">
|
|
<i class="{{ config('other.font-awesome') }} fa-sliders"></i>
|
|
</button>
|
|
</div>
|
|
<form class="form" x-cloak x-show="isToggledOn">
|
|
<div class="form__group--short-horizontal">
|
|
<p class="form__group">
|
|
<input
|
|
id="description"
|
|
wire:model.live="description"
|
|
class="form__text"
|
|
placeholder=" "
|
|
/>
|
|
<label class="form__label form__label--floating" for="description">
|
|
{{ __('torrent.description') }}
|
|
</label>
|
|
</p>
|
|
<p class="form__group">
|
|
<input
|
|
id="mediainfo"
|
|
wire:model.live="mediainfo"
|
|
class="form__text"
|
|
placeholder=" "
|
|
/>
|
|
<label class="form__label form__label--floating" for="mediainfo">
|
|
{{ __('torrent.media-info') }}
|
|
</label>
|
|
</p>
|
|
<p class="form__group">
|
|
<input
|
|
id="keywords"
|
|
wire:model.live="keywords"
|
|
class="form__text"
|
|
placeholder=" "
|
|
/>
|
|
<label class="form__label form__label--floating" for="keywords">
|
|
{{ __('torrent.keywords') }}
|
|
</label>
|
|
</p>
|
|
<p class="form__group">
|
|
<input
|
|
id="uploader"
|
|
wire:model.live="uploader"
|
|
class="form__text"
|
|
placeholder=" "
|
|
/>
|
|
<label class="form__label form__label--floating" for="uploader">
|
|
{{ __('torrent.uploader') }}
|
|
</label>
|
|
</p>
|
|
</div>
|
|
<div class="form__group--short-horizontal">
|
|
<div class="form__group--short-horizontal">
|
|
<p class="form__group" x-data="{ startYear: $wire.entangle('startYear') }">
|
|
<input
|
|
id="startYear"
|
|
x-on:input.debounce.150ms="
|
|
if ($el.checkValidity()) {
|
|
$wire.set('startYear', $event.target.value);
|
|
}
|
|
"
|
|
x-model.live="startYear"
|
|
class="form__text"
|
|
inputmode="numeric"
|
|
minlength="4"
|
|
pattern="[0-9]{4}"
|
|
placeholder=" "
|
|
/>
|
|
<label class="form__label form__label--floating" for="startYear">
|
|
{{ __('torrent.start-year') }}
|
|
</label>
|
|
</p>
|
|
<p class="form__group" x-data="{ endYear: $wire.entangle('endYear') }">
|
|
<input
|
|
id="endYear"
|
|
x-on:input.debounce.150ms="
|
|
if ($el.checkValidity()) {
|
|
$wire.set('endYear', $event.target.value);
|
|
}
|
|
"
|
|
x-model.live="endYear"
|
|
class="form__text"
|
|
inputmode="numeric"
|
|
minlength="4"
|
|
pattern="[0-9]{4}"
|
|
placeholder=" "
|
|
/>
|
|
<label class="form__label form__label--floating" for="endYear">
|
|
{{ __('torrent.end-year') }}
|
|
</label>
|
|
</p>
|
|
</div>
|
|
<div class="form__group--short-horizontal">
|
|
<p class="form__group">
|
|
<input
|
|
id="episodeNumber"
|
|
wire:model.live="episodeNumber"
|
|
class="form__text"
|
|
inputmode="numeric"
|
|
pattern="[0-9]*"
|
|
placeholder=" "
|
|
/>
|
|
<label class="form__label form__label--floating" for="episodeNumber">
|
|
{{ __('torrent.episode-number') }}
|
|
</label>
|
|
</p>
|
|
<p class="form__group">
|
|
<input
|
|
id="seasonNumber"
|
|
wire:model.live="seasonNumber"
|
|
class="form__text"
|
|
inputmode="numeric"
|
|
pattern="[0-9]*"
|
|
placeholder=" "
|
|
/>
|
|
<label class="form__label form__label--floating" for="seasonNumber">
|
|
{{ __('torrent.season-number') }}
|
|
</label>
|
|
</p>
|
|
</div>
|
|
<div class="form__group--short-horizontal">
|
|
<p class="form__group">
|
|
<input
|
|
id="minSize"
|
|
wire:model.live="minSize"
|
|
class="form__text"
|
|
inputmode="numeric"
|
|
pattern="[0-9]*"
|
|
placeholder=" "
|
|
/>
|
|
<label class="form__label form__label--floating" for="minSize">
|
|
Minimum size
|
|
</label>
|
|
</p>
|
|
<p class="form__group">
|
|
<select
|
|
id="minSizeMultiplier"
|
|
wire:model.live="minSizeMultiplier"
|
|
class="form__select"
|
|
placeholder=" "
|
|
>
|
|
<option value="1" selected>Bytes</option>
|
|
<option value="1000">KB</option>
|
|
<option value="1024">KiB</option>
|
|
<option value="1000000">MB</option>
|
|
<option value="1048576">MiB</option>
|
|
<option value="1000000000">GB</option>
|
|
<option value="1073741824">GiB</option>
|
|
<option value="1000000000000">TB</option>
|
|
<option value="1099511627776">TiB</option>
|
|
</select>
|
|
<label class="form__label form__label--floating" for="minSizeMultiplier">
|
|
Unit
|
|
</label>
|
|
</p>
|
|
</div>
|
|
<div class="form__group--short-horizontal">
|
|
<p class="form__group">
|
|
<input
|
|
id="maxSize"
|
|
wire:model.live="maxSize"
|
|
class="form__text"
|
|
inputmode="numeric"
|
|
pattern="[0-9]*"
|
|
placeholder=" "
|
|
/>
|
|
<label class="form__label form__label--floating" for="maxSize">
|
|
Maximum size
|
|
</label>
|
|
</p>
|
|
<p class="form__group">
|
|
<select
|
|
id="maxSizeMultiplier"
|
|
wire:model.live="maxSizeMultiplier"
|
|
class="form__select"
|
|
placeholder=" "
|
|
>
|
|
<option value="1" selected>Bytes</option>
|
|
<option value="1000">KB</option>
|
|
<option value="1024">KiB</option>
|
|
<option value="1000000">MB</option>
|
|
<option value="1048576">MiB</option>
|
|
<option value="1000000000">GB</option>
|
|
<option value="1073741824">GiB</option>
|
|
<option value="1000000000000">TB</option>
|
|
<option value="1099511627776">TiB</option>
|
|
</select>
|
|
<label class="form__label form__label--floating" for="maxSizeMultiplier">
|
|
Unit
|
|
</label>
|
|
</p>
|
|
</div>
|
|
</div>
|
|
<div class="form__group--short-horizontal">
|
|
<div class="form__group">
|
|
<div id="regions" wire:ignore></div>
|
|
</div>
|
|
<div class="form__group">
|
|
<div id="distributors" wire:ignore></div>
|
|
</div>
|
|
<p class="form__group">
|
|
<select id="adult" wire:model.live="adult" class="form__select" placeholder=" ">
|
|
<option value="any" selected>Any</option>
|
|
<option value="include">Include</option>
|
|
<option value="exclude">Exclude</option>
|
|
</select>
|
|
<label class="form__label form__label--floating" for="adult">Adult</label>
|
|
</p>
|
|
</div>
|
|
<div class="form__group--short-horizontal">
|
|
<p class="form__group">
|
|
<input
|
|
id="playlistId"
|
|
wire:model.live="playlistId"
|
|
class="form__text"
|
|
inputmode="numeric"
|
|
pattern="[0-9]*"
|
|
placeholder=" "
|
|
/>
|
|
<label class="form__label form__label--floating" for="playlistId">
|
|
Playlist ID
|
|
</label>
|
|
</p>
|
|
<p class="form__group">
|
|
<input
|
|
id="collectionId"
|
|
wire:model.live="collectionId"
|
|
class="form__text"
|
|
inputmode="numeric"
|
|
pattern="[0-9]*"
|
|
placeholder=" "
|
|
/>
|
|
<label class="form__label form__label--floating" for="collectionId">
|
|
Collection ID
|
|
</label>
|
|
</p>
|
|
<p class="form__group">
|
|
<input
|
|
id="companyId"
|
|
wire:model.live="companyId"
|
|
class="form__text"
|
|
inputmode="numeric"
|
|
pattern="[0-9]*"
|
|
placeholder=" "
|
|
/>
|
|
<label class="form__label form__label--floating" for="companyId">
|
|
Company ID
|
|
</label>
|
|
</p>
|
|
<p class="form__group">
|
|
<input
|
|
id="networkId"
|
|
wire:model.live="networkId"
|
|
class="form__text"
|
|
inputmode="numeric"
|
|
pattern="[0-9]*"
|
|
placeholder=" "
|
|
/>
|
|
<label class="form__label form__label--floating" for="networkId">
|
|
Network ID
|
|
</label>
|
|
</p>
|
|
</div>
|
|
<div class="form__group--short-horizontal">
|
|
<p class="form__group">
|
|
<input
|
|
id="tmdbId"
|
|
wire:model.live="tmdbId"
|
|
class="form__text"
|
|
inputmode="numeric"
|
|
pattern="[0-9]*"
|
|
placeholder=" "
|
|
/>
|
|
<label class="form__label form__label--floating" for="tmdbId">TMDb ID</label>
|
|
</p>
|
|
<p class="form__group">
|
|
<input
|
|
id="imdbId"
|
|
wire:model.live="imdbId"
|
|
class="form__text"
|
|
inputmode="numeric"
|
|
pattern="[0-9]+|tt0*\d{7,}"
|
|
placeholder=" "
|
|
/>
|
|
<label class="form__label form__label--floating" for="imdbId">IMDb ID</label>
|
|
</p>
|
|
<p class="form__group">
|
|
<input
|
|
id="tvdbId"
|
|
wire:model.live="tvdbId"
|
|
class="form__text"
|
|
inputmode="numeric"
|
|
pattern="[0-9]*"
|
|
placeholder=" "
|
|
/>
|
|
<label class="form__label form__label--floating" for="tvdbId">TVDb ID</label>
|
|
</p>
|
|
<p class="form__group">
|
|
<input
|
|
id="malId"
|
|
wire:model.live="malId"
|
|
class="form__text"
|
|
inputmode="numeric"
|
|
pattern="[0-9]*"
|
|
placeholder=" "
|
|
/>
|
|
<label class="form__label form__label--floating" for="malId">MAL ID</label>
|
|
</p>
|
|
</div>
|
|
<div class="form__group--short-horizontal">
|
|
<div class="form__group">
|
|
<fieldset class="form__fieldset">
|
|
<legend class="form__legend">{{ __('torrent.category') }}</legend>
|
|
<div class="form__fieldset-checkbox-container">
|
|
@foreach ($categories as $category)
|
|
<p class="form__group">
|
|
<label class="form__label">
|
|
<input
|
|
class="form__checkbox"
|
|
type="checkbox"
|
|
value="{{ $category->id }}"
|
|
wire:model.live="categoryIds"
|
|
/>
|
|
{{ $category->name }}
|
|
</label>
|
|
</p>
|
|
@endforeach
|
|
</div>
|
|
</fieldset>
|
|
</div>
|
|
<div class="form__group">
|
|
<fieldset class="form__fieldset">
|
|
<legend class="form__legend">{{ __('torrent.type') }}</legend>
|
|
<div class="form__fieldset-checkbox-container">
|
|
@foreach ($types as $type)
|
|
<p class="form__group">
|
|
<label class="form__label">
|
|
<input
|
|
class="form__checkbox"
|
|
type="checkbox"
|
|
value="{{ $type->id }}"
|
|
wire:model.live="typeIds"
|
|
/>
|
|
{{ $type->name }}
|
|
</label>
|
|
</p>
|
|
@endforeach
|
|
</div>
|
|
</fieldset>
|
|
</div>
|
|
<div class="form__group">
|
|
<fieldset class="form__fieldset">
|
|
<legend class="form__legend">{{ __('torrent.resolution') }}</legend>
|
|
<div class="form__fieldset-checkbox-container">
|
|
@foreach ($resolutions as $resolution)
|
|
<p class="form__group">
|
|
<label class="form__label">
|
|
<input
|
|
class="form__checkbox"
|
|
type="checkbox"
|
|
value="{{ $resolution->id }}"
|
|
wire:model.live="resolutionIds"
|
|
/>
|
|
{{ $resolution->name }}
|
|
</label>
|
|
</p>
|
|
@endforeach
|
|
</div>
|
|
</fieldset>
|
|
</div>
|
|
<div class="form__group">
|
|
<fieldset class="form__fieldset">
|
|
<legend class="form__legend">{{ __('torrent.genre') }}</legend>
|
|
<div class="form__fieldset-checkbox-container">
|
|
@foreach ($genres as $genre)
|
|
<p class="form__group">
|
|
<label class="form__label">
|
|
<input
|
|
class="form__checkbox"
|
|
type="checkbox"
|
|
value="{{ $genre->id }}"
|
|
wire:model.live="genreIds"
|
|
/>
|
|
{{ $genre->name }}
|
|
</label>
|
|
</p>
|
|
@endforeach
|
|
</div>
|
|
</fieldset>
|
|
</div>
|
|
<div class="form__group">
|
|
<fieldset class="form__fieldset">
|
|
<legend class="form__legend">Buff</legend>
|
|
<div class="form__fieldset-checkbox-container">
|
|
<p class="form__group">
|
|
<label class="form__label">
|
|
<input
|
|
class="form__checkbox"
|
|
type="checkbox"
|
|
value="0"
|
|
wire:model.live="free"
|
|
/>
|
|
0% Freeleech
|
|
</label>
|
|
</p>
|
|
<p class="form__group">
|
|
<label class="form__label">
|
|
<input
|
|
class="form__checkbox"
|
|
type="checkbox"
|
|
value="25"
|
|
wire:model.live="free"
|
|
/>
|
|
25% Freeleech
|
|
</label>
|
|
</p>
|
|
<p class="form__group">
|
|
<label class="form__label">
|
|
<input
|
|
class="form__checkbox"
|
|
type="checkbox"
|
|
value="50"
|
|
wire:model.live="free"
|
|
/>
|
|
50% Freeleech
|
|
</label>
|
|
</p>
|
|
<p class="form__group">
|
|
<label class="form__label">
|
|
<input
|
|
class="form__checkbox"
|
|
type="checkbox"
|
|
value="75"
|
|
wire:model.live="free"
|
|
/>
|
|
75% Freeleech
|
|
</label>
|
|
</p>
|
|
<p class="form__group">
|
|
<label class="form__label">
|
|
<input
|
|
class="form__checkbox"
|
|
type="checkbox"
|
|
value="100"
|
|
wire:model.live="free"
|
|
/>
|
|
100% Freeleech
|
|
</label>
|
|
</p>
|
|
<p class="form__group">
|
|
<label class="form__label">
|
|
<input
|
|
class="form__checkbox"
|
|
type="checkbox"
|
|
value="1"
|
|
wire:model.live="doubleup"
|
|
/>
|
|
Double upload
|
|
</label>
|
|
</p>
|
|
<p class="form__group">
|
|
<label class="form__label">
|
|
<input
|
|
class="form__checkbox"
|
|
type="checkbox"
|
|
value="1"
|
|
wire:model.live="featured"
|
|
/>
|
|
Featured
|
|
</label>
|
|
</p>
|
|
<p class="form__group">
|
|
<label class="form__label">
|
|
<input
|
|
class="form__checkbox"
|
|
type="checkbox"
|
|
value="1"
|
|
wire:model.live="refundable"
|
|
/>
|
|
Refundable
|
|
</label>
|
|
</p>
|
|
</div>
|
|
</fieldset>
|
|
</div>
|
|
<div class="form__group">
|
|
<fieldset class="form__fieldset">
|
|
<legend class="form__legend">Tags</legend>
|
|
<div class="form__fieldset-checkbox-container">
|
|
<p class="form__group">
|
|
<label class="form__label">
|
|
<input
|
|
class="form__checkbox"
|
|
type="checkbox"
|
|
value="1"
|
|
wire:model.live="internal"
|
|
/>
|
|
{{ __('torrent.internal') }}
|
|
</label>
|
|
</p>
|
|
<p class="form__group">
|
|
<label class="form__label">
|
|
<input
|
|
class="form__checkbox"
|
|
type="checkbox"
|
|
value="1"
|
|
wire:model.live="personalRelease"
|
|
/>
|
|
{{ __('torrent.personal-release') }}
|
|
</label>
|
|
</p>
|
|
<p class="form__group">
|
|
<label class="form__label">
|
|
<input
|
|
class="form__checkbox"
|
|
type="checkbox"
|
|
value="1"
|
|
wire:model.live="trumpable"
|
|
/>
|
|
Trumpable
|
|
</label>
|
|
</p>
|
|
<p class="form__group">
|
|
<label class="form__label">
|
|
<input
|
|
class="form__checkbox"
|
|
type="checkbox"
|
|
value="1"
|
|
wire:model.live="highspeed"
|
|
/>
|
|
{{ __('common.high-speeds') }}
|
|
</label>
|
|
</p>
|
|
<p class="form__group">
|
|
<label class="form__label">
|
|
<input
|
|
class="form__checkbox"
|
|
type="checkbox"
|
|
value="1"
|
|
wire:model.live="bookmarked"
|
|
/>
|
|
{{ __('common.bookmarked') }}
|
|
</label>
|
|
</p>
|
|
<p class="form__group">
|
|
<label class="form__label">
|
|
<input
|
|
class="form__checkbox"
|
|
type="checkbox"
|
|
value="1"
|
|
wire:model.live="wished"
|
|
/>
|
|
{{ __('common.wished') }}
|
|
</label>
|
|
</p>
|
|
</div>
|
|
</fieldset>
|
|
</div>
|
|
<div class="form__group">
|
|
<fieldset class="form__fieldset">
|
|
<legend class="form__legend">{{ __('torrent.health') }}</legend>
|
|
<div class="form__fieldset-checkbox-container">
|
|
<p class="form__group">
|
|
<label class="form__label">
|
|
<input
|
|
class="form__checkbox"
|
|
type="checkbox"
|
|
value="1"
|
|
wire:model.live="alive"
|
|
/>
|
|
{{ __('torrent.alive') }}
|
|
</label>
|
|
</p>
|
|
<p class="form__group">
|
|
<label class="form__label">
|
|
<input
|
|
class="form__checkbox"
|
|
type="checkbox"
|
|
value="1"
|
|
wire:model.live="dying"
|
|
/>
|
|
Dying
|
|
</label>
|
|
</p>
|
|
<p class="form__group">
|
|
<label class="form__label">
|
|
<input
|
|
class="form__checkbox"
|
|
type="checkbox"
|
|
value="1"
|
|
wire:model.live="dead"
|
|
/>
|
|
Dead
|
|
</label>
|
|
</p>
|
|
<p class="form__group">
|
|
<label class="form__label">
|
|
<input
|
|
class="form__checkbox"
|
|
type="checkbox"
|
|
value="1"
|
|
wire:model.live="graveyard"
|
|
/>
|
|
{{ __('graveyard.graveyard') }}
|
|
</label>
|
|
</p>
|
|
</div>
|
|
</fieldset>
|
|
</div>
|
|
<div class="form__group">
|
|
<fieldset class="form__fieldset">
|
|
<legend class="form__legend">{{ __('torrent.history') }}</legend>
|
|
<div class="form__fieldset-checkbox-container">
|
|
<p class="form__group">
|
|
<label class="form__label">
|
|
<input
|
|
class="form__checkbox"
|
|
type="checkbox"
|
|
value="1"
|
|
wire:model.live="notDownloaded"
|
|
/>
|
|
Not downloaded
|
|
</label>
|
|
</p>
|
|
<p class="form__group">
|
|
<label class="form__label">
|
|
<input
|
|
class="form__checkbox"
|
|
type="checkbox"
|
|
value="1"
|
|
wire:model.live="downloaded"
|
|
/>
|
|
Downloaded
|
|
</label>
|
|
</p>
|
|
<p class="form__group">
|
|
<label class="form__label">
|
|
<input
|
|
class="form__checkbox"
|
|
type="checkbox"
|
|
value="1"
|
|
wire:model.live="seeding"
|
|
/>
|
|
Seeding
|
|
</label>
|
|
</p>
|
|
<p class="form__group">
|
|
<label class="form__label">
|
|
<input
|
|
class="form__checkbox"
|
|
type="checkbox"
|
|
value="1"
|
|
wire:model.live="leeching"
|
|
/>
|
|
Leeching
|
|
</label>
|
|
</p>
|
|
<p class="form__group">
|
|
<label class="form__label">
|
|
<input
|
|
class="form__checkbox"
|
|
type="checkbox"
|
|
value="1"
|
|
wire:model.live="incomplete"
|
|
/>
|
|
Incomplete
|
|
</label>
|
|
</p>
|
|
</div>
|
|
</fieldset>
|
|
</div>
|
|
<div class="form__group">
|
|
<fieldset class="form__fieldset">
|
|
<legend class="form__legend">Primary language</legend>
|
|
<div class="form__fieldset-checkbox-container">
|
|
@foreach ($primaryLanguages as $primaryLanguage)
|
|
<p class="form__group">
|
|
<label class="form__label">
|
|
<input
|
|
class="form__checkbox"
|
|
type="checkbox"
|
|
value="{{ $primaryLanguage }}"
|
|
wire:model.live="primaryLanguageNames"
|
|
/>
|
|
{{ $primaryLanguage }}
|
|
</label>
|
|
</p>
|
|
@endforeach
|
|
</div>
|
|
</fieldset>
|
|
</div>
|
|
</div>
|
|
</form>
|
|
</search>
|
|
<section class="panelV2 torrent-search__results">
|
|
<header class="panel__header">
|
|
<h2 class="panel__heading">{{ __('torrent.torrents') }}</h2>
|
|
<div class="panel__actions">
|
|
<div class="panel__action">
|
|
<span class="panel__action-text">
|
|
{{ __('common.total') }}: {{ $torrentHealth->total }} |
|
|
{{ __('common.alive') }}: {{ $torrentHealth->alive }} |
|
|
{{ __('common.dead') }}: {{ $torrentHealth->dead }}
|
|
</span>
|
|
</div>
|
|
<div class="panel__action">
|
|
<div class="form__group">
|
|
<select id="view" class="form__select" wire:model.live="view" required>
|
|
<option value="list">{{ __('torrent.list') }}</option>
|
|
<option value="card">{{ __('torrent.cards') }}</option>
|
|
<option value="group">{{ __('torrent.groupings') }}</option>
|
|
<option value="poster">{{ __('torrent.poster') }}</option>
|
|
</select>
|
|
<label class="form__label form__label--floating" for="view">Layout</label>
|
|
</div>
|
|
</div>
|
|
<div class="panel__action">
|
|
<div class="form__group">
|
|
<select
|
|
id="perPage"
|
|
class="form__select"
|
|
wire:model.live="perPage"
|
|
required
|
|
>
|
|
@if (\in_array($view, ['card', 'poster']))
|
|
<option>24</option>
|
|
<option>48</option>
|
|
<option>72</option>
|
|
<option>96</option>
|
|
@else
|
|
<option>25</option>
|
|
<option>50</option>
|
|
<option>75</option>
|
|
<option>100</option>
|
|
@endif
|
|
</select>
|
|
<label class="form__label form__label--floating" for="perPage">
|
|
{{ __('common.quantity') }}
|
|
</label>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</header>
|
|
{{ $torrents->links('partials.pagination') }}
|
|
|
|
@switch(true)
|
|
@case($view === 'list')
|
|
<div class="data-table-wrapper torrent-search--list__results">
|
|
<table class="data-table">
|
|
<thead>
|
|
<tr
|
|
@class([
|
|
'torrent-search--list__headers' => auth()->user()->settings->show_poster,
|
|
'torrent-search--list__no-poster-headers' => ! auth()->user()->settings->show_poster,
|
|
])
|
|
>
|
|
@if (auth()->user()->settings->show_poster)
|
|
<th class="torrent-search--list__poster-header">Poster</th>
|
|
@endif
|
|
|
|
<th class="torrent-search--list__format-header">Format</th>
|
|
<th
|
|
class="torrent-search--list__name-header"
|
|
wire:click="sortBy('name')"
|
|
role="columnheader button"
|
|
>
|
|
{{ __('torrent.name') }}
|
|
@include('livewire.includes._sort-icon', ['field' => 'name'])
|
|
</th>
|
|
<th class="torrent-search--list__actions-header">
|
|
{{ __('common.actions') }}
|
|
</th>
|
|
<th
|
|
class="torrent-search--list__ratings-header"
|
|
wire:click="sortBy('rating')"
|
|
role="columnheader button"
|
|
>
|
|
Rating
|
|
@include('livewire.includes._sort-icon', ['field' => 'rating'])
|
|
</th>
|
|
<th
|
|
class="torrent-search--list__size-header"
|
|
wire:click="sortBy('size')"
|
|
role="columnheader button"
|
|
>
|
|
{{ __('torrent.size') }}
|
|
@include('livewire.includes._sort-icon', ['field' => 'size'])
|
|
</th>
|
|
<th
|
|
class="torrent-search--list__seeders-header"
|
|
wire:click="sortBy('seeders')"
|
|
role="columnheader button"
|
|
title="{{ __('torrent.seeders') }}"
|
|
>
|
|
<i class="fas fa-arrow-alt-circle-up"></i>
|
|
@include('livewire.includes._sort-icon', ['field' => 'seeders'])
|
|
</th>
|
|
<th
|
|
class="torrent-search--list__leechers-header"
|
|
wire:click="sortBy('leechers')"
|
|
role="columnheader button"
|
|
title="{{ __('torrent.leechers') }}"
|
|
>
|
|
<i class="fas fa-arrow-alt-circle-down"></i>
|
|
@include('livewire.includes._sort-icon', ['field' => 'leechers'])
|
|
</th>
|
|
<th
|
|
class="torrent-search--list__completed-header"
|
|
wire:click="sortBy('times_completed')"
|
|
role="columnheader button"
|
|
title="{{ __('torrent.completed') }}"
|
|
>
|
|
<i class="fas fa-check-circle"></i>
|
|
@include('livewire.includes._sort-icon', ['field' => 'times_completed'])
|
|
</th>
|
|
<th
|
|
class="torrent-search--list__age-header"
|
|
wire:click="sortBy('created_at')"
|
|
role="columnheader button"
|
|
>
|
|
{{ __('torrent.age') }}
|
|
@include('livewire.includes._sort-icon', ['field' => 'created_at'])
|
|
</th>
|
|
</tr>
|
|
</thead>
|
|
<tbody>
|
|
@forelse ($torrents as $torrent)
|
|
<x-torrent.row
|
|
:meta="$torrent->meta"
|
|
:torrent="$torrent"
|
|
:personalFreeleech="$personalFreeleech"
|
|
/>
|
|
@empty
|
|
<tr>
|
|
<td colspan="10">{{ __('common.no-result') }}</td>
|
|
</tr>
|
|
@endforelse
|
|
</tbody>
|
|
</table>
|
|
</div>
|
|
|
|
@break
|
|
@case($view === 'card')
|
|
<table class="data-table">
|
|
<thead>
|
|
<tr>
|
|
<th
|
|
class="torrent-search--list__name-header"
|
|
wire:click="sortBy('name')"
|
|
role="columnheader button"
|
|
>
|
|
{{ __('torrent.name') }}
|
|
@include('livewire.includes._sort-icon', ['field' => 'name'])
|
|
</th>
|
|
<th
|
|
class="torrent-search--list__size-header"
|
|
wire:click="sortBy('size')"
|
|
role="columnheader button"
|
|
>
|
|
{{ __('torrent.size') }}
|
|
@include('livewire.includes._sort-icon', ['field' => 'size'])
|
|
</th>
|
|
<th
|
|
class="torrent-search--list__seeders-header"
|
|
wire:click="sortBy('seeders')"
|
|
role="columnheader button"
|
|
title="{{ __('torrent.seeders') }}"
|
|
>
|
|
<i class="fas fa-arrow-alt-circle-up"></i>
|
|
@include('livewire.includes._sort-icon', ['field' => 'seeders'])
|
|
</th>
|
|
<th
|
|
class="torrent-search--list__leechers-header"
|
|
wire:click="sortBy('leechers')"
|
|
role="columnheader button"
|
|
title="{{ __('torrent.leechers') }}"
|
|
>
|
|
<i class="fas fa-arrow-alt-circle-down"></i>
|
|
@include('livewire.includes._sort-icon', ['field' => 'leechers'])
|
|
</th>
|
|
<th
|
|
class="torrent-search--list__completed-header"
|
|
wire:click="sortBy('times_completed')"
|
|
role="columnheader button"
|
|
title="{{ __('torrent.completed') }}"
|
|
>
|
|
<i class="fas fa-check-circle"></i>
|
|
@include('livewire.includes._sort-icon', ['field' => 'times_completed'])
|
|
</th>
|
|
<th
|
|
class="torrent-search--list__age-header"
|
|
wire:click="sortBy('created_at')"
|
|
role="columnheader button"
|
|
>
|
|
{{ __('common.created_at') }}
|
|
@include('livewire.includes._sort-icon', ['field' => 'created_at'])
|
|
</th>
|
|
</tr>
|
|
</thead>
|
|
</table>
|
|
<div class="panel__body torrent-search--card__results">
|
|
@forelse ($torrents as $torrent)
|
|
<x-torrent.card :meta="$torrent->meta" :torrent="$torrent" />
|
|
@empty
|
|
{{ __('common.no-result') }}
|
|
@endforelse
|
|
</div>
|
|
|
|
@break
|
|
@case($view === 'group')
|
|
<table class="data-table">
|
|
<thead>
|
|
<tr>
|
|
<th
|
|
class="torrent-search--list__completed-header"
|
|
wire:click="sortBy('times_completed')"
|
|
role="columnheader button"
|
|
title="{{ __('torrent.completed') }}"
|
|
>
|
|
<i class="fas fa-check-circle"></i>
|
|
@include('livewire.includes._sort-icon', ['field' => 'times_completed'])
|
|
</th>
|
|
<th
|
|
class="torrent-search--list__age-header"
|
|
wire:click="sortBy('created_at')"
|
|
role="columnheader button"
|
|
>
|
|
{{ __('common.created_at') }}
|
|
@include('livewire.includes._sort-icon', ['field' => 'created_at'])
|
|
</th>
|
|
</tr>
|
|
</thead>
|
|
</table>
|
|
<div class="panel__body torrent-search--grouped__results">
|
|
@forelse ($torrents as $group)
|
|
@isset($group, $group->id)
|
|
@switch($group->meta)
|
|
@case('movie')
|
|
<x-movie.card
|
|
:media="$group"
|
|
:personalFreeleech="$personalFreeleech"
|
|
/>
|
|
|
|
@break
|
|
@case('tv')
|
|
<x-tv.card
|
|
:media="$group"
|
|
:personalFreeleech="$personalFreeleech"
|
|
/>
|
|
|
|
@break
|
|
@endswitch
|
|
@endisset
|
|
@empty
|
|
{{ __('common.no-result') }}
|
|
@endforelse
|
|
</div>
|
|
|
|
@break
|
|
@case($view === 'poster')
|
|
<table class="data-table">
|
|
<thead>
|
|
<tr>
|
|
<th
|
|
class="torrent-search--list__completed-header"
|
|
wire:click="sortBy('times_completed')"
|
|
role="columnheader button"
|
|
title="{{ __('torrent.completed') }}"
|
|
>
|
|
<i class="fas fa-check-circle"></i>
|
|
@include('livewire.includes._sort-icon', ['field' => 'times_completed'])
|
|
</th>
|
|
<th
|
|
class="torrent-search--list__age-header"
|
|
wire:click="sortBy('created_at')"
|
|
role="columnheader button"
|
|
>
|
|
{{ __('common.created_at') }}
|
|
@include('livewire.includes._sort-icon', ['field' => 'created_at'])
|
|
</th>
|
|
</tr>
|
|
</thead>
|
|
</table>
|
|
<div class="panel__body torrent-search--poster__results">
|
|
@forelse ($torrents as $group)
|
|
@switch($group->meta)
|
|
@case('movie')
|
|
<x-movie.poster
|
|
:categoryId="$group->category_id"
|
|
:movie="$group->movie"
|
|
:tmdb="$group->tmdb_movie_id"
|
|
/>
|
|
|
|
@break
|
|
@case('tv')
|
|
<x-tv.poster
|
|
:categoryId="$group->category_id"
|
|
:tv="$group->tv"
|
|
:tmdb="$group->tmdb_tv_id"
|
|
/>
|
|
|
|
@break
|
|
@endswitch
|
|
@empty
|
|
{{ __('common.no-result') }}
|
|
@endforelse
|
|
</div>
|
|
|
|
@break
|
|
@endswitch
|
|
{{ $torrents->links('partials.pagination') }}
|
|
</section>
|
|
<script src="{{ asset('build/unit3d/virtual-select.js') }}" crossorigin="anonymous"></script>
|
|
<script nonce="{{ HDVinnie\SecureHeaders\SecureHeaders::nonce('script') }}">
|
|
document.addEventListener('livewire:init', function () {
|
|
let myRegions = [
|
|
{
|
|
label: "No region", value: "0"
|
|
},
|
|
... {{
|
|
Js::from(
|
|
$regions
|
|
->each(function ($region) {
|
|
$region->label = $region->name . ' (' . __('regions.' . $region->name) . ')';
|
|
$region->value = $region->id;
|
|
})
|
|
->select(['label', 'value'])
|
|
)
|
|
}}
|
|
];
|
|
|
|
VirtualSelect.init({
|
|
ele: '#regions',
|
|
options: myRegions,
|
|
multiple: true,
|
|
search: true,
|
|
placeholder: "{{ __('Select Regions') }}",
|
|
noOptionsText: "{{ __('No results found') }}",
|
|
})
|
|
|
|
let regions = document.querySelector('#regions')
|
|
regions.addEventListener('change', () => {
|
|
let data = regions.value
|
|
@this.set('regionIds', data)
|
|
})
|
|
|
|
let myDistributors = [
|
|
{
|
|
label: "No distributor", value: "0"
|
|
},
|
|
... {{
|
|
Js::from(
|
|
$distributors
|
|
->each(function ($distributor) {
|
|
$distributor->label = $distributor->name;
|
|
$distributor->value = $distributor->id;
|
|
})
|
|
->select(['label', 'value'])
|
|
)
|
|
}}
|
|
];
|
|
|
|
VirtualSelect.init({
|
|
ele: '#distributors',
|
|
options: myDistributors,
|
|
multiple: true,
|
|
search: true,
|
|
placeholder: "{{ __('Select Distributor') }}",
|
|
noOptionsText: "{{ __('No results found') }}",
|
|
})
|
|
|
|
let distributors = document.querySelector('#distributors')
|
|
distributors.addEventListener('change', () => {
|
|
let data = distributors.value
|
|
@this.set('distributorIds', data)
|
|
})
|
|
})
|
|
</script>
|
|
</div>
|