This commit is contained in:
2025-09-18 15:31:27 +02:00
commit 2abba0c2b7
406 changed files with 31879 additions and 0 deletions

View File

@@ -0,0 +1,98 @@
@auth
<!--Verically centered modal-->
<div data-te-modal-init class="fixed left-0 top-0 z-[1055] hidden h-full w-full overflow-y-auto overflow-x-hidden outline-none" id="modalAddToPlaylist" tabindex="-1" aria-labelledby="Playlist" aria-modal="true" role="dialog">
<div data-te-modal-dialog-ref class="pointer-events-none relative flex min-h-[calc(100%-1rem)] w-auto translate-y-[-50px] items-center opacity-0 transition-all duration-300 ease-in-out min-[576px]:mx-auto min-[576px]:mt-7 min-[576px]:min-h-[calc(100%-3.5rem)] min-[576px]:max-w-[95%] md:min-[576px]:max-w-[90%] lg:min-[576px]:max-w-[80%] xl:min-[576px]:max-w-[70%] 2xl:min-[576px]:max-w-[30%]">
<div class="pointer-events-auto relative flex w-full flex-col rounded-md border-none bg-white bg-clip-padding text-current shadow-lg outline-none dark:bg-neutral-800">
<x-modal-header :title="__('Add to Playlist')" />
<!--Modal body-->
<div class="relative p-4">
<!-- Add to existing playlist -->
@php $playlists = Auth::user()->playlists; @endphp
@if (count($playlists) > 0)
<div class="p-4">
<label class="mb-2 leading-tight text-gray-800 dark:text-gray-200 w-full" for="playlist">Select Playlist:</label>
<select name="playlist" id="playlist" class="block w-full text-sm text-gray-900 border border-gray-300 rounded-lg bg-gray-50 focus:ring-rose-800 focus:border-rose-900 dark:bg-neutral-900 dark:border-neutral-600 dark:placeholder-gray-400 dark:text-white dark:focus:ring-rose-800 dark:focus:border-rose-900">
@foreach($playlists as $playlist)
<option value="{{ $playlist->id }}">
{{ $playlist->name }} -
{{ $playlist->is_private == 1 ? 'Private' : 'Public' }} -
{{ $playlist->episodes->count() }} Episodes
{{ $playlist->episodes->contains('episode_id', $episode->id) ? '- Episode Already Added' : '' }}
</option>
@endforeach
</select>
<x-input-error :messages="$errors->get('playlist')" class="mt-2" />
</div>
<div class="flex flex-shrink-0 flex-wrap items-center justify-end rounded-b-md p-4">
<a id="playlist-cancel" class="inline-block cursor-pointer rounded bg-primary-100 px-6 pb-2 pt-2.5 text-xs font-medium uppercase leading-normal text-primary-700 transition duration-150 ease-in-out hover:bg-primary-accent-100 focus:bg-primary-accent-100 focus:outline-none focus:ring-0 active:bg-primary-accent-200" data-te-modal-dismiss data-te-ripple-init data-te-ripple-color="light">
Cancel
</a>
<a id="playlist-add" class="ml-1 cursor-pointer inline-block rounded bg-rose-600 px-6 pb-2 pt-2.5 text-xs font-medium uppercase leading-normal text-white transition duration-150 ease-in-out hover:bg-rose-700 focus:bg-rose-600" data-te-ripple-init data-te-ripple-color="light">
Add
</a>
</div>
<div class="p-4">
<label class="mb-2 leading-tight text-gray-800 dark:text-gray-200 w-full" for="name">Enter Playlist Name Here:</label>
<x-text-input id="name" class="block mt-1 w-full" type="text" name="name" required autofocus/>
<x-input-error :messages="$errors->get('name')" class="mt-2" />
</div>
<div class="p-4">
<label class="mb-2 leading-tight text-gray-800 dark:text-gray-200 w-full" for="visiblity">Visiblity:</label>
<select name="visiblity" id="visiblity" class="block w-full text-sm text-gray-900 border border-gray-300 rounded-lg bg-gray-50 focus:ring-rose-800 focus:border-rose-900 dark:bg-neutral-900 dark:border-neutral-600 dark:placeholder-gray-400 dark:text-white dark:focus:ring-rose-800 dark:focus:border-rose-900">
<option value="public">Public</option>
<option value="private" selected>Private</option>
</select>
<x-input-error :messages="$errors->get('visiblity')" class="mt-2" />
</div>
<div class="flex flex-shrink-0 flex-wrap items-center justify-end rounded-b-md p-4">
<a id="playlist-create-and-add" class="ml-1 cursor-pointer inline-block rounded bg-rose-600 px-6 pb-2 pt-2.5 text-xs font-medium uppercase leading-normal text-white transition duration-150 ease-in-out hover:bg-rose-700 focus:bg-rose-600" data-te-ripple-init data-te-ripple-color="light">
Create and Add Episode
</a>
</div>
@else
<!-- Create Playlist -->
<a class="font-semibold text-gray-800 dark:text-gray-200 leading-tight">
No Playlists found. Please create a Playlist first!
</a>
<div class="p-4">
<label class="mb-2 leading-tight text-gray-800 dark:text-gray-200 w-full" for="name">Enter Playlist Name Here:</label>
<x-text-input id="name" class="block mt-1 w-full" type="text" name="name" required autofocus/>
<x-input-error :messages="$errors->get('name')" class="mt-2" />
</div>
<div class="mt-5 p-4">
<label class="mb-2 leading-tight text-gray-800 dark:text-gray-200 w-full" for="visiblity">Visiblity:</label>
<select name="visiblity" id="visiblity" class="block w-full text-sm text-gray-900 border border-gray-300 rounded-lg bg-gray-50 focus:ring-rose-800 focus:border-rose-900 dark:bg-neutral-900 dark:border-neutral-600 dark:placeholder-gray-400 dark:text-white dark:focus:ring-rose-800 dark:focus:border-rose-900">
<option value="public">Public</option>
<option value="private" selected>Private</option>
</select>
<x-input-error :messages="$errors->get('visiblity')" class="mt-2" />
</div>
<div class="flex flex-shrink-0 flex-wrap items-center justify-end rounded-b-md p-4">
<a id="playlist-cancel" class="inline-block cursor-pointer rounded bg-primary-100 px-6 pb-2 pt-2.5 text-xs font-medium uppercase leading-normal text-primary-700 transition duration-150 ease-in-out hover:bg-primary-accent-100 focus:bg-primary-accent-100 focus:outline-none focus:ring-0 active:bg-primary-accent-200" data-te-modal-dismiss data-te-ripple-init data-te-ripple-color="light">
Cancel
</a>
<a id="playlist-create-and-add" class="ml-1 cursor-pointer inline-block rounded bg-rose-600 px-6 pb-2 pt-2.5 text-xs font-medium uppercase leading-normal text-white transition duration-150 ease-in-out hover:bg-rose-700 focus:bg-rose-600" data-te-ripple-init data-te-ripple-color="light">
Create and Add Episode
</a>
</div>
@endif
</div>
</div>
</div>
</div>
@vite(['resources/js/modals-playlist.js'])
@endauth

View File

@@ -0,0 +1,50 @@
<!--Verically centered modal-->
<div
data-te-modal-init
class="fixed left-0 top-0 z-[1055] hidden h-full w-full overflow-y-auto overflow-x-hidden outline-none"
id="comment-modal-{{ $comment->getKey() }}"
tabindex="-1"
aria-labelledby="exampleModalCenterTitle"
aria-modal="true"
role="dialog">
<div data-te-modal-dialog-ref class="pointer-events-none relative flex min-h-[calc(100%-1rem)] w-auto translate-y-[-50px] items-center opacity-0 transition-all duration-300 ease-in-out min-[576px]:mx-auto min-[576px]:mt-7 min-[576px]:min-h-[calc(100%-3.5rem)] min-[576px]:max-w-[95%] md:min-[576px]:max-w-[90%] lg:min-[576px]:max-w-[80%] xl:min-[576px]:max-w-[70%] 2xl:min-[576px]:max-w-[40%]">
<div class="pointer-events-auto relative flex w-full flex-col rounded-md border-none bg-white bg-clip-padding text-current shadow-lg outline-none dark:bg-neutral-800">
<x-modal-header :title="__('comments::comments.edit_comment')" />
<!--Modal body-->
<div class="relative p-4">
<form method="POST" action="{{ route('comments.update', $comment->getKey()) }}">
@method('PUT')
@csrf
<div class="modal-body">
<div class="form-group">
<label class="mb-2 leading-tight text-gray-800 dark:text-gray-200 w-full" for="message">@lang('comments::comments.update_your_message_here')</label>
<textarea class="peer block min-h-[auto] w-full border-1 bg-transparent px-3 py-[0.32rem] leading-[1.6] outline-none transition-all duration-200 ease-linear dark:placeholder:text-neutral-200 border-gray-300 dark:border-neutral-950 dark:bg-neutral-900 dark:text-gray-300 focus:border-rose-500 dark:focus:border-rose-600 focus:ring-rose-500 dark:focus:ring-rose-600 rounded-md shadow-sm" name="message" rows="3">{{ $comment->comment }}</textarea>
</div>
</div>
<div class="flex flex-shrink-0 flex-wrap items-center justify-end rounded-b-md p-4">
<button
type="button"
id="modal-blacklist-filter-close-bottom"
class="inline-block rounded bg-primary-100 px-6 pb-2 pt-2.5 text-xs font-medium uppercase leading-normal text-primary-700 transition duration-150 ease-in-out hover:bg-primary-accent-100 focus:bg-primary-accent-100 focus:outline-none focus:ring-0 active:bg-primary-accent-200"
data-te-modal-dismiss
data-te-ripple-init
data-te-ripple-color="light">
@lang('comments::comments.cancel')
</button>
<button
type="submit"
id="modal-blacklist-filter-save"
class="ml-1 inline-block rounded bg-rose-600 px-6 pb-2 pt-2.5 text-xs font-medium uppercase leading-normal text-white transition duration-150 ease-in-out hover:bg-rose-700 focus:bg-rose-600"
data-te-modal-dismiss
data-te-ripple-init
data-te-ripple-color="light">
@lang('comments::comments.update')
</button>
</div>
</form>
</div>
</div>
</div>
</div>

View File

@@ -0,0 +1,49 @@
<!--Verically centered modal-->
<div
data-te-modal-init
class="fixed left-0 top-0 z-[1055] hidden h-full w-full overflow-y-auto overflow-x-hidden outline-none"
id="reply-modal-{{ $comment->getKey() }}"
tabindex="-1"
aria-labelledby="exampleModalCenterTitle"
aria-modal="true"
role="dialog">
<div data-te-modal-dialog-ref class="pointer-events-none relative flex min-h-[calc(100%-1rem)] w-auto translate-y-[-50px] items-center opacity-0 transition-all duration-300 ease-in-out min-[576px]:mx-auto min-[576px]:mt-7 min-[576px]:min-h-[calc(100%-3.5rem)] min-[576px]:max-w-[95%] md:min-[576px]:max-w-[90%] lg:min-[576px]:max-w-[80%] xl:min-[576px]:max-w-[70%] 2xl:min-[576px]:max-w-[40%]">
<div class="pointer-events-auto relative flex w-full flex-col rounded-md border-none bg-white bg-clip-padding text-current shadow-lg outline-none dark:bg-neutral-800">
<x-modal-header :title="__('comments::comments.reply_to_comment')" />
<!--Modal body-->
<div class="relative p-4">
<form method="POST" action="{{ route('comments.reply', $comment->getKey()) }}">
@csrf
<div class="modal-body">
<div class="form-group">
<label class="mb-2 leading-tight text-gray-800 dark:text-gray-200 w-full" for="message">@lang('comments::comments.enter_your_message_here')</label>
<textarea required class="peer block min-h-[auto] w-full border-1 bg-transparent px-3 py-[0.32rem] leading-[1.6] outline-none transition-all duration-200 ease-linear dark:placeholder:text-neutral-200 border-gray-300 dark:border-neutral-950 dark:bg-neutral-900 dark:text-gray-300 focus:border-rose-500 dark:focus:border-rose-600 focus:ring-rose-500 dark:focus:ring-rose-600 rounded-md shadow-sm" name="message" rows="3"></textarea>
</div>
</div>
<div class="flex flex-shrink-0 flex-wrap items-center justify-end rounded-b-md p-4">
<button
type="button"
id="modal-blacklist-filter-close-bottom"
class="inline-block rounded bg-primary-100 px-6 pb-2 pt-2.5 text-xs font-medium uppercase leading-normal text-primary-700 transition duration-150 ease-in-out hover:bg-primary-accent-100 focus:bg-primary-accent-100 focus:outline-none focus:ring-0 active:bg-primary-accent-200"
data-te-modal-dismiss
data-te-ripple-init
data-te-ripple-color="light">
@lang('comments::comments.cancel')
</button>
<button
type="submit"
id="modal-blacklist-filter-save"
class="ml-1 inline-block rounded bg-rose-600 px-6 pb-2 pt-2.5 text-xs font-medium uppercase leading-normal text-white transition duration-150 ease-in-out hover:bg-rose-700 focus:bg-rose-600"
data-te-modal-dismiss
data-te-ripple-init
data-te-ripple-color="light">
@lang('comments::comments.reply')
</button>
</div>
</form>
</div>
</div>
</div>
</div>

View File

@@ -0,0 +1,39 @@
<!--Verically centered modal-->
<div data-te-modal-init class="fixed left-0 top-0 z-[1055] hidden h-full w-full overflow-y-auto overflow-x-hidden outline-none" id="modalCreatePlaylist" tabindex="-1" aria-labelledby="Playlist" aria-modal="true" role="dialog">
<div data-te-modal-dialog-ref class="pointer-events-none relative flex min-h-[calc(100%-1rem)] w-auto translate-y-[-50px] items-center opacity-0 transition-all duration-300 ease-in-out min-[576px]:mx-auto min-[576px]:mt-7 min-[576px]:min-h-[calc(100%-3.5rem)] min-[576px]:max-w-[95%] md:min-[576px]:max-w-[90%] lg:min-[576px]:max-w-[80%] xl:min-[576px]:max-w-[70%] 2xl:min-[576px]:max-w-[30%]">
<div class="pointer-events-auto relative flex w-full flex-col rounded-md border-none bg-white bg-clip-padding text-current shadow-lg outline-none dark:bg-neutral-800">
<x-modal-header :title="__('Create Playlist')" />
<!--Modal body-->
<div class="relative p-4">
<form method="POST" action="{{ route('profile.playlists.create') }}">
@csrf
<div class="p-4">
<label class="mb-2 leading-tight text-gray-800 dark:text-gray-200 w-full" for="name">Enter Playlist Name Here:</label>
<x-text-input id="name" class="block mt-1 w-full" type="text" name="name" required autofocus/>
<x-input-error :messages="$errors->get('name')" class="mt-2" />
</div>
<div class="mt-5 p-4">
<label class="mb-2 leading-tight text-gray-800 dark:text-gray-200 w-full" for="visiblity">Visiblity:</label>
<select name="visiblity" id="visiblity" class="block w-full text-sm text-gray-900 border border-gray-300 rounded-lg bg-gray-50 focus:ring-rose-800 focus:border-rose-900 dark:bg-neutral-900 dark:border-neutral-600 dark:placeholder-gray-400 dark:text-white dark:focus:ring-rose-800 dark:focus:border-rose-900">
<option value="public">Public</option>
<option value="private" selected>Private</option>
</select>
<x-input-error :messages="$errors->get('visiblity')" class="mt-2" />
</div>
<div class="flex flex-shrink-0 flex-wrap items-center justify-end rounded-b-md p-4">
<button type="button" class="inline-block rounded bg-primary-100 px-6 pb-2 pt-2.5 text-xs font-medium uppercase leading-normal text-primary-700 transition duration-150 ease-in-out hover:bg-primary-accent-100 focus:bg-primary-accent-100 focus:outline-none focus:ring-0 active:bg-primary-accent-200" data-te-modal-dismiss data-te-ripple-init data-te-ripple-color="light">
Cancel
</button>
<button type="submit" class="ml-1 inline-block rounded bg-rose-600 px-6 pb-2 pt-2.5 text-xs font-medium uppercase leading-normal text-white transition duration-150 ease-in-out hover:bg-rose-700 focus:bg-rose-600" data-te-ripple-init data-te-ripple-color="light">
Create
</button>
</div>
</form>
</div>
</div>
</div>
</div>

View File

@@ -0,0 +1,19 @@
<!--Verically centered modal-->
<div data-te-modal-init class="fixed left-0 top-0 z-[1055] hidden h-full w-full overflow-y-auto overflow-x-hidden outline-none" id="modalDownload" tabindex="-1" aria-labelledby="Download" aria-modal="true" role="dialog">
<div data-te-modal-dialog-ref class="pointer-events-none relative flex min-h-[calc(100%-1rem)] w-auto translate-y-[-50px] items-center opacity-0 transition-all duration-300 ease-in-out min-[576px]:mx-auto min-[576px]:mt-7 min-[576px]:min-h-[calc(100%-3.5rem)] min-[576px]:max-w-[95%] md:min-[576px]:max-w-[90%] lg:min-[576px]:max-w-[80%] xl:min-[576px]:max-w-[50%] 2xl:min-[576px]:max-w-[30%]">
<div class="pointer-events-auto relative flex w-full flex-col rounded-md border-none bg-white bg-clip-padding text-current shadow-lg outline-none dark:bg-neutral-800">
<x-modal-header :title='__("Download {$episode->title} - {$episode->episode}")' />
@php
$dldomains = config('hstream.download_domain');
$dlDomainsBackup = config('hstream.asia_download_domain');
@endphp
<!--Modal body-->
<div class="relative p-4">
@include('modals.partials.download-guest')
@include('modals.partials.download-authorized')
</div>
</div>
</div>
</div>

View File

@@ -0,0 +1,165 @@
<!--Verically centered modal-->
<div data-te-modal-init
class="fixed left-0 top-0 z-[1055] hidden h-full w-full overflow-y-auto overflow-x-hidden outline-none"
id="modalBlacklist" tabindex="-1" aria-labelledby="modalBlacklist" aria-modal="true" role="dialog">
<div data-te-modal-dialog-ref
class="pointer-events-none relative flex min-h-[calc(100%-1rem)] w-auto translate-y-[-50px] items-center opacity-0 transition-all duration-300 ease-in-out min-[576px]:mx-auto min-[576px]:mt-7 min-[576px]:min-h-[calc(100%-3.5rem)] min-[576px]:max-w-[95%] md:min-[576px]:max-w-[90%] lg:min-[576px]:max-w-[80%] xl:min-[576px]:max-w-[70%] 2xl:min-[576px]:max-w-[60%]">
<div
class="pointer-events-auto relative flex w-full flex-col rounded-md border-none bg-white bg-clip-padding text-current shadow-lg outline-none dark:bg-neutral-800">
<x-modal-header :title="__('Blacklist')" />
<!--Modal body-->
<div class="relative p-4">
@php
$taglist = \cache()->remember(
'searchtags',
300,
fn() => Conner\Tagging\Model\Tag::where('count', '>', 0)->orderBy('slug', 'ASC')->get(),
);
$appearances = [
'Loli',
'Shota',
'Milf',
'Futanari',
'Big Boobs',
'Small Boobs',
'Dark Skin',
'Cosplay',
'Elf',
'Maid',
'Nekomimi',
'Nurse',
'School Girl',
'Succubus',
'Teacher',
'Trap',
'Pregnant',
'Glasses',
'Swim Suit',
'Ugly Bastard',
'Monster',
];
$types = [
'3D',
'4K',
'48Fps',
'4K 48Fps',
'Censored',
'Uncensored',
'Comedy',
'Fantasy',
'Horror',
'Vanilla',
'Ntr',
'Pov',
'Filmed',
'X-Ray',
];
$actions = [
'Anal',
'Bdsm',
'Facial',
'Blow Job',
'Boob Job',
'Foot Job',
'Hand Job',
'Rimjob',
'Inflation',
'Masturbation',
'Public Sex',
'Rape',
'Reverse Rape',
'Threesome',
'Orgy',
'Gangbang',
];
@endphp
<ul class="list-none text-justify" style="overflow: hidden;">
@foreach ($taglist as $tag)
@if (in_array($tag->name, $types) || in_array($tag->name, $appearances) || in_array($tag->name, $actions))
@continue
@endif
<li class="inline-block m-1">
<input class="m-5 hidden peer" wire:model="blacklist" type="checkbox"
id="blacklist-{{ $tag->slug }}" name="blacklist[]" value="{{ $tag->slug }}">
<label
class="relative block cursor-pointer p-2 rounded bg-neutral-200 dark:bg-neutral-600 peer-checked:bg-rose-600 text-black peer-checked:text-white dark:peer-checked:text-white dark:text-white select-none"
for="blacklist-{{ $tag->slug }}">{{ $tag->name }}</label>
</li>
@endforeach
</ul>
<br>
<!-- Actions -->
<p class="font-medium leading-normal text-neutral-800 dark:text-white">
Action
</p>
<ul class="list-none text-justify" style="overflow: hidden;">
@foreach ($actions as $tag)
<li class="inline-block m-1">
@php $slug = Illuminate\Support\Str::slug($tag); @endphp
<input class="m-5 hidden peer" wire:model="blacklist" type="checkbox"
id="blacklist-{{ $slug }}" name="blacklist[]" value="{{ $slug }}">
<label
class="relative block cursor-pointer p-2 rounded bg-neutral-200 dark:bg-neutral-600 peer-checked:bg-rose-600 text-black peer-checked:text-white dark:peer-checked:text-white dark:text-white select-none"
for="blacklist-{{ $slug }}">{{ $tag }}</label>
</li>
@endforeach
</ul>
<br>
<!-- Character Appearance -->
<p class="font-medium leading-normal text-neutral-800 dark:text-white">
Appearance
</p>
<ul class="list-none text-justify" style="overflow: hidden;">
@foreach ($appearances as $tag)
@guest
@php if ($tag === "Loli" || $tag === "Shota") continue; @endphp
@endguest
<li class="inline-block m-1">
@php $slug = Illuminate\Support\Str::slug($tag); @endphp
<input class="m-5 hidden peer" wire:model="blacklist" type="checkbox"
id="blacklist-{{ $slug }}" name="blacklist[]" value="{{ $slug }}">
<label
class="relative block cursor-pointer p-2 rounded bg-neutral-200 dark:bg-neutral-600 peer-checked:bg-rose-600 text-black peer-checked:text-white dark:peer-checked:text-white dark:text-white select-none"
for="blacklist-{{ $slug }}">{{ $tag }}</label>
</li>
@endforeach
</ul>
<br>
<!-- Video Types -->
<p class="font-medium leading-normal text-neutral-800 dark:text-white">
Type
</p>
<ul class="list-none text-justify" style="overflow: hidden;">
@foreach ($types as $tag)
<li class="inline-block m-1">
@php $slug = Illuminate\Support\Str::slug($tag); @endphp
<input class="m-5 hidden peer" wire:model="blacklist" type="checkbox"
id="blacklist-{{ $slug }}" name="blacklist[]" value="{{ $slug }}">
<label
class="relative block cursor-pointer p-2 rounded bg-neutral-200 dark:bg-neutral-600 peer-checked:bg-rose-600 text-black peer-checked:text-white dark:peer-checked:text-white dark:text-white select-none"
for="blacklist-{{ $slug }}">{{ $tag }}</label>
</li>
@endforeach
</ul>
</div>
<!--Modal footer-->
<div class="flex flex-shrink-0 flex-wrap items-center justify-end rounded-b-md p-4">
<button data-te-modal-dismiss wire:click="revertFilters" type="button"
class="inline-block rounded bg-primary-100 px-6 pb-2 pt-2.5 text-xs font-medium uppercase leading-normal text-primary-700 transition duration-150 ease-in-out hover:bg-primary-accent-100 focus:bg-primary-accent-100 focus:outline-none focus:ring-0 active:bg-primary-accent-200">
Close
</button>
<button data-te-modal-dismiss wire:click="applyFilters" type="button"
class="ml-1 inline-block rounded bg-rose-600 px-6 pb-2 pt-2.5 text-xs font-medium uppercase leading-normal text-white transition duration-150 ease-in-out hover:bg-rose-700 focus:bg-rose-600">
Apply
</button>
</div>
</div>
</div>
</div>

View File

@@ -0,0 +1,166 @@
<!--Verically centered modal-->
<div data-te-modal-init
class="fixed left-0 top-0 z-[1055] hidden h-full w-full overflow-y-auto overflow-x-hidden outline-none"
id="modalGenres" tabindex="-1" aria-labelledby="modalGenres" aria-modal="true" role="dialog">
<div data-te-modal-dialog-ref
class="pointer-events-none relative flex min-h-[calc(100%-1rem)] w-auto translate-y-[-50px] items-center opacity-0 transition-all duration-300 ease-in-out min-[576px]:mx-auto min-[576px]:mt-7 min-[576px]:min-h-[calc(100%-3.5rem)] min-[576px]:max-w-[95%] md:min-[576px]:max-w-[90%] lg:min-[576px]:max-w-[80%] xl:min-[576px]:max-w-[70%] 2xl:min-[576px]:max-w-[60%]">
<div
class="pointer-events-auto relative flex w-full flex-col rounded-md border-none bg-white bg-clip-padding text-current shadow-lg outline-none dark:bg-neutral-800">
<x-modal-header :title="__('Genres')" />
<form>
<!--Modal body-->
<div class="relative p-4">
@php
$taglist = cache()->remember(
'searchtags',
300,
fn() => Conner\Tagging\Model\Tag::where('count', '>', 0)->orderBy('slug', 'ASC')->get(),
);
$appearances = [
'Loli',
'Shota',
'Milf',
'Futanari',
'Big Boobs',
'Small Boobs',
'Dark Skin',
'Cosplay',
'Elf',
'Maid',
'Nekomimi',
'Nurse',
'School Girl',
'Succubus',
'Teacher',
'Trap',
'Pregnant',
'Glasses',
'Swim Suit',
'Ugly Bastard',
'Monster',
];
$types = [
'3D',
'4K',
'48Fps',
'4K 48Fps',
'Censored',
'Uncensored',
'Comedy',
'Fantasy',
'Horror',
'Vanilla',
'Ntr',
'Pov',
'Filmed',
'X-Ray',
];
$actions = [
'Anal',
'Bdsm',
'Facial',
'Blow Job',
'Boob Job',
'Foot Job',
'Hand Job',
'Rimjob',
'Inflation',
'Masturbation',
'Public Sex',
'Rape',
'Reverse Rape',
'Threesome',
'Orgy',
'Gangbang',
];
@endphp
<ul class="list-none text-justify" style="overflow: hidden;">
@foreach ($taglist as $tag)
@if (in_array($tag->name, $types) || in_array($tag->name, $appearances) || in_array($tag->name, $actions))
@continue
@endif
<li class="inline-block m-1">
<input class="m-5 hidden peer" wire:model="tags" type="checkbox"
id="tags-{{ $tag->slug }}" name="tags[]" value="{{ $tag->slug }}">
<label
class="relative block cursor-pointer p-2 rounded bg-neutral-200 dark:bg-neutral-600 peer-checked:bg-rose-600 text-black peer-checked:text-white dark:peer-checked:text-white dark:text-white select-none"
for="tags-{{ $tag->slug }}">{{ $tag->name }}</label>
</li>
@endforeach
</ul>
<br>
<!-- Actions -->
<p class="font-medium leading-normal text-neutral-800 dark:text-white">
Action
</p>
<ul class="list-none text-justify" style="overflow: hidden;">
@foreach ($actions as $tag)
<li class="inline-block m-1">
@php $slug = Illuminate\Support\Str::slug($tag); @endphp
<input class="m-5 hidden peer" wire:model="tags" type="checkbox"
id="tags-{{ $slug }}" name="tags[]" value="{{ $slug }}">
<label
class="relative block cursor-pointer p-2 rounded bg-neutral-200 dark:bg-neutral-600 peer-checked:bg-rose-600 text-black peer-checked:text-white dark:peer-checked:text-white dark:text-white select-none"
for="tags-{{ $slug }}">{{ $tag }}</label>
</li>
@endforeach
</ul>
<br>
<!-- Character Appearance -->
<p class="font-medium leading-normal text-neutral-800 dark:text-white">
Appearance
</p>
<ul class="list-none text-justify" style="overflow: hidden;">
@foreach ($appearances as $tag)
@guest
@php if ($tag === "Loli" || $tag === "Shota") continue; @endphp
@endguest
<li class="inline-block m-1">
@php $slug = Illuminate\Support\Str::slug($tag); @endphp
<input class="m-5 hidden peer" wire:model="tags" type="checkbox"
id="tags-{{ $slug }}" name="tags[]" value="{{ $slug }}">
<label
class="relative block cursor-pointer p-2 rounded bg-neutral-200 dark:bg-neutral-600 peer-checked:bg-rose-600 text-black peer-checked:text-white dark:peer-checked:text-white dark:text-white select-none"
for="tags-{{ $slug }}">{{ $tag }}</label>
</li>
@endforeach
</ul>
<br>
<!-- Video Types -->
<p class="font-medium leading-normal text-neutral-800 dark:text-white">
Type
</p>
<ul class="list-none text-justify" style="overflow: hidden;">
@foreach ($types as $tag)
<li class="inline-block m-1">
@php $slug = Illuminate\Support\Str::slug($tag); @endphp
<input class="m-5 hidden peer" wire:model="tags" type="checkbox"
id="tags-{{ $slug }}" name="tags[]" value="{{ $slug }}">
<label
class="relative block cursor-pointer p-2 rounded bg-neutral-200 dark:bg-neutral-600 peer-checked:bg-rose-600 text-black peer-checked:text-white dark:peer-checked:text-white dark:text-white select-none"
for="tags-{{ $slug }}">{{ $tag }}</label>
</li>
@endforeach
</ul>
</div>
<!--Modal footer-->
<div class="flex flex-shrink-0 flex-wrap items-center justify-end rounded-b-md p-4">
<button data-te-modal-dismiss wire:click="revertFilters" type="button"
class="inline-block rounded bg-primary-100 px-6 pb-2 pt-2.5 text-xs font-medium uppercase leading-normal text-primary-700 transition duration-150 ease-in-out hover:bg-primary-accent-100 focus:bg-primary-accent-100 focus:outline-none focus:ring-0 active:bg-primary-accent-200">
Close
</button>
<button data-te-modal-dismiss wire:click="applyFilters" type="button"
class="ml-1 inline-block rounded bg-rose-600 px-6 pb-2 pt-2.5 text-xs font-medium uppercase leading-normal text-white transition duration-150 ease-in-out hover:bg-rose-700 focus:bg-rose-600">
Apply
</button>
</div>
</form>
</div>
</div>
</div>

View File

@@ -0,0 +1,40 @@
<!--Verically centered modal-->
<div data-te-modal-init
class="fixed left-0 top-0 z-[1055] hidden h-full w-full overflow-y-auto overflow-x-hidden outline-none"
id="modalStudios" tabindex="-1" aria-labelledby="modalStudios" aria-modal="true" role="dialog">
<div data-te-modal-dialog-ref
class="pointer-events-none relative flex min-h-[calc(100%-1rem)] w-auto translate-y-[-50px] items-center opacity-0 transition-all duration-300 ease-in-out min-[576px]:mx-auto min-[576px]:mt-7 min-[576px]:min-h-[calc(100%-3.5rem)] min-[576px]:max-w-[95%] md:min-[576px]:max-w-[90%] lg:min-[576px]:max-w-[80%] xl:min-[576px]:max-w-[70%] 2xl:min-[576px]:max-w-[60%]">
<div
class="pointer-events-auto relative flex w-full flex-col rounded-md border-none bg-white bg-clip-padding text-current shadow-lg outline-none dark:bg-neutral-800">
<x-modal-header :title="__('Studios')" />
<!--Modal body-->
<div class="relative p-4">
<ul class="list-none text-justify" style="overflow: hidden;">
@php $studios = \cache()->remember('searchstudios', 300, fn () => App\Models\Studios::orderBy('name', 'ASC')->get()); @endphp
@foreach ($studios as $studio)
<li class="inline-block m-1">
<input class="m-5 hidden peer" wire:model="studios" type="checkbox"
id="studio-{{ $studio->slug }}" name="studios[]" value="{{ $studio->slug }}">
<label
class="relative block cursor-pointer p-2 rounded bg-neutral-200 dark:bg-neutral-600 peer-checked:bg-rose-600 text-black peer-checked:text-white dark:peer-checked:text-white dark:text-white select-none"
for="studio-{{ $studio->slug }}">{{ $studio->name }}</label>
</li>
@endforeach
</ul>
</div>
<!--Modal footer-->
<div class="flex flex-shrink-0 flex-wrap items-center justify-end rounded-b-md p-4">
<button data-te-modal-dismiss wire:click="revertFilters" type="button"
class="inline-block rounded bg-primary-100 px-6 pb-2 pt-2.5 text-xs font-medium uppercase leading-normal text-primary-700 transition duration-150 ease-in-out hover:bg-primary-accent-100 focus:bg-primary-accent-100 focus:outline-none focus:ring-0 active:bg-primary-accent-200">
Close
</button>
<button data-te-modal-dismiss wire:click="applyFilters" type="button"
class="ml-1 inline-block rounded bg-rose-600 px-6 pb-2 pt-2.5 text-xs font-medium uppercase leading-normal text-white transition duration-150 ease-in-out hover:bg-rose-700 focus:bg-rose-600">
Apply
</button>
</div>
</div>
</div>
</div>

View File

@@ -0,0 +1,47 @@
<!--Verically centered modal-->
<div data-te-modal-init
class="fixed left-0 top-0 z-[1055] hidden h-full w-full overflow-y-auto overflow-x-hidden outline-none"
id="modalLanguage" tabindex="-1" aria-modal="true" role="dialog">
<div data-te-modal-dialog-ref
class="pointer-events-none relative flex min-h-[calc(100%-1rem)] w-auto translate-y-[-50px] items-center opacity-0 transition-all duration-300 ease-in-out min-[576px]:mx-auto min-[576px]:mt-7 min-[576px]:min-h-[calc(100%-3.5rem)] min-[576px]:max-w-[90%] md:min-[576px]:max-w-[80%] lg:min-[576px]:max-w-[60%] xl:min-[576px]:max-w-[40%] 2xl:min-[576px]:max-w-[20%]">
<div
class="pointer-events-auto relative flex w-full flex-col rounded-md border-none bg-white bg-clip-padding text-current shadow-lg outline-none dark:bg-neutral-800">
<x-modal-header :title="__('Language')" />
<!--Modal body-->
<div class="relative p-4">
<form method="POST" action="{{ route('update.language') }}">
@csrf
<label class="mb-2 leading-tight text-gray-800 dark:text-gray-200 w-full" for="language">Select
Language:</label>
<select name="language" id="language"
class="block w-full text-sm text-gray-900 border border-gray-300 rounded-lg bg-gray-50 focus:ring-rose-800 focus:border-rose-900 dark:bg-neutral-900 dark:border-neutral-600 dark:placeholder-gray-400 dark:text-white dark:focus:ring-rose-800 dark:focus:border-rose-900">
<option value="en" @if ('en' == App::getLocale()) selected @endif>
English (en)
</option>
<option value="de" @if ('de' == App::getLocale()) selected @endif>
Deutsch (de)
</option>
<option value="fr" @if ('fr' == App::getLocale()) selected @endif>
Français (fr)
</option>
</select>
<div class="flex flex-shrink-0 flex-wrap items-center justify-end rounded-b-md p-4">
<button type="button"
class="inline-block rounded bg-primary-100 px-6 pb-2 pt-2.5 text-xs font-medium uppercase leading-normal text-primary-700 transition duration-150 ease-in-out hover:bg-primary-accent-100 focus:bg-primary-accent-100 focus:outline-none focus:ring-0 active:bg-primary-accent-200"
data-te-modal-dismiss data-te-ripple-init data-te-ripple-color="light">
Cancel
</button>
<button type="submit"
class="ml-1 inline-block rounded bg-rose-600 px-6 pb-2 pt-2.5 text-xs font-medium uppercase leading-normal text-white transition duration-150 ease-in-out hover:bg-rose-700 focus:bg-rose-600"
data-te-ripple-init data-te-ripple-color="light">
Apply
</button>
</div>
</form>
</div>
</div>
</div>
</div>

View File

@@ -0,0 +1,98 @@
@auth
<p class="font-bold text-gray-800 dark:text-gray-200">
<i class="fa-solid fa-lock-open pr-[4px] text-green-400"></i> 1080p
</p>
<div class="flex flex-wrap justify-around">
@php
$dlList = App\Models\Episode::where('hentai_id', $episode->hentai_id)
->orderBy('episode', 'asc')
->get();
$fillNumbers = $dlList->count() >= 10;
@endphp
@foreach ($dlList as $hdl)
@include('modals.partials.download-button')
@endforeach
@include('livewire.partials.torrent-button', ['hentai' => $episode->hentai])
</div>
@include('modals.partials.download-backup')
@if ($episode->interpolated)
<p class="font-bold text-gray-800 dark:text-gray-200">
<i class="fa-solid fa-lock-open pr-[4px] text-green-400"></i> 1080p 48fps
</p>
<div class="flex flex-wrap justify-around">
@foreach ($dlList as $hdl)
@include('modals.partials.download-button-interpolated')
@endforeach
</div>
@endif
<br>
@if (!Auth::user()->is_patreon)
@if (config('hstream.free_downloads'))
<p class="font-bold text-gray-800 dark:text-gray-200">
<i class="fa-solid fa-lock-open pr-[4px] text-yellow-600"></i> 4k
</p>
@livewire('downloads-free', ['episode' => $episode])
@else
<p class="font-bold text-gray-800 dark:text-gray-200">
<i class="fa-solid fa-lock pr-[4px] text-red-600"></i> 4k
</p>
<p class="text-gray-800 dark:text-gray-200">
4k Downloads are restricted to patreon subscribers. If you are subscribed to patreon and you have a patreon role
on our Discord server, you have to logout and login again.
</p>
@endif
@else
<p class="font-bold text-gray-800 dark:text-gray-200">
<i class="fa-solid fa-lock-open pr-[4px] text-green-400"></i> 4k
</p>
@php $dlpdomains = config('hstream.download_domain_4k'); @endphp
<div class="flex flex-wrap justify-around">
@foreach ($dlList as $hdl)
@include('modals.partials.download-button-patreon')
@endforeach
</div>
@endif
<br>
@if ($episode->interpolated_uhd)
@if (!Auth::user()->is_patreon)
@if (config('hstream.free_downloads'))
<p class="font-bold text-gray-800 dark:text-gray-200">
<i class="fa-solid fa-lock-open pr-[4px] text-yellow-600"></i> 4k 48fps
</p>
@livewire('downloads-free', ['episode' => $episode, 'interpolated' => true])
@else
<p class="font-bold text-gray-800 dark:text-gray-200">
<i class="fa-solid fa-lock pr-[4px] text-red-600"></i> 4k 48fps
</p>
<p class="text-gray-800 dark:text-gray-200">
4k 48fps Downloads are restricted to patreon subscribers. If you are subscribed to patreon and you have a patreon role
on our Discord server, you have to logout and login again.
</p>
@endif
@else
<p class="font-bold text-gray-800 dark:text-gray-200">
<i class="fa-solid fa-lock-open pr-[4px] text-green-400"></i> 4k 48fps
</p>
@php $dlpdomains = config('hstream.download_domain_4k'); @endphp
<div class="flex flex-wrap justify-around">
@foreach ($dlList as $hdl)
@include('modals.partials.download-button-patreon-interpolated')
@endforeach
</div>
@endif
@endif
@include('modals.partials.download-subtitles')
@endauth

View File

@@ -0,0 +1,28 @@
<div class="flex flex-col">
<a data-te-collapse-init data-te-ripple-init data-te-ripple-color="light" href="#collapseBackupDownloads" role="button" aria-expanded="false" aria-controls="collapseBackupDownloads" class="text-sm text-center cursor-pointer pt-2 text-rose-600">Backup server</a>
<div class="!visible hidden" id="collapseBackupDownloads" data-te-collapse-item>
<div class="block rounded-lg bg-neutral-200 p-6 dark:bg-neutral-900 dark:text-neutral-50">
<p class="text-sm text-red-600">Only use these if you live in Asia (e.g. Singapore/Philippines/...) and experience slow downloads (~10-100kbps) with the normal download links!</p>
<div class="flex flex-wrap justify-around">
@foreach ($dlList as $hdl)
@php
$download = $hdl->getDownloadByType('FHD');
$downloadURL = $dlDomainsBackup[array_rand($dlDomainsBackup)].'/'.$download->url;
$background = 'bg-green-600';
@endphp
<livewire:download-button
:download-url="$downloadURL"
:download-id="$download->id"
:download-count="$download->count"
:episode-number="$hdl->episode"
:fill-numbers="$fillNumbers"
:file-size="$download->getFileSize()"
:background="$background">
@endforeach
</div>
</div>
</div>
</div>

View File

@@ -0,0 +1,18 @@
@if(is_null($hdl->getDownloadByType('FHDi')))
<a class="inline-flex items-center ml-4 px-4 p-4 mt-4 cursor-not-allowed bg-gray-600 border border-transparent rounded-md font-semibold text-xs text-white uppercase tracking-widest hover:bg-gray-700 active:bg-gray-900 focus:outline-none focus:ring-2 focus:ring-rose-500 focus:ring-offset-2 dark:focus:ring-offset-gray-800 transition ease-in-out duration-150" id="downloadEpisode" alt="Kekw">
<i class="fa-solid fa-download mr-2"></i> Episode {{ $hdl->episode }} (Unavailable)
</a>
@else
@php
$download = $hdl->getDownloadByType('FHDi');
$downloadURL = $dldomains[array_rand($dldomains)].'/'.$download->url;
@endphp
<livewire:download-button
:download-url="$downloadURL"
:download-id="$download->id"
:download-count="$download->count"
:episode-number="$hdl->episode"
:fill-numbers="$fillNumbers"
:file-size="$download->getFileSize()">
@endif

View File

@@ -0,0 +1,24 @@
@if(is_null($hdl->getDownloadByType('UHDi')))
<a class="inline-flex items-center ml-4 px-4 p-4 mt-4 cursor-not-allowed bg-gray-600 border border-transparent rounded-md font-semibold text-xs text-white uppercase tracking-widest hover:bg-gray-700 active:bg-gray-900 focus:outline-none focus:ring-2 focus:ring-rose-500 focus:ring-offset-2 dark:focus:ring-offset-gray-800 transition ease-in-out duration-150" id="downloadEpisode" alt="Kekw">
<i class="fa-solid fa-download mr-2"></i> Episode {{ $hdl->episode }} (Unavailable)
</a>
@else
@php
$download = $hdl->getDownloadByType('UHDi');
$now = \Illuminate\Support\Carbon::now();
$expire = \Illuminate\Support\Facades\Crypt::encryptString($now->addHours(6));
$file = \Illuminate\Support\Facades\Crypt::encryptString('hentai/'.$download->url);
$downloadURL = $dlpdomains[array_rand($dlpdomains)].'/download/'.$file.'/'.$expire;
@endphp
<livewire:download-button
:download-url="$downloadURL"
:download-id="$download->id"
:download-count="$download->count"
:episode-number="$hdl->episode"
:fill-numbers="$fillNumbers"
:file-size="$download->getFileSize()">
@endif

View File

@@ -0,0 +1,24 @@
@if(is_null($hdl->getDownloadByType('UHD')))
<a class="inline-flex items-center ml-4 px-4 p-4 mt-4 cursor-not-allowed bg-gray-600 border border-transparent rounded-md font-semibold text-xs text-white uppercase tracking-widest hover:bg-gray-700 active:bg-gray-900 focus:outline-none focus:ring-2 focus:ring-rose-500 focus:ring-offset-2 dark:focus:ring-offset-gray-800 transition ease-in-out duration-150" id="downloadEpisode" alt="Kekw">
<i class="fa-solid fa-download mr-2"></i> Episode {{ $hdl->episode }} (Unavailable)
</a>
@else
@php
$download = $hdl->getDownloadByType('UHD');
$now = \Illuminate\Support\Carbon::now();
$expire = \Illuminate\Support\Facades\Crypt::encryptString($now->addHours(6));
$file = \Illuminate\Support\Facades\Crypt::encryptString('hentai/'.$download->url);
$downloadURL = $dlpdomains[array_rand($dlpdomains)].'/download/'.$file.'/'.$expire;
@endphp
<livewire:download-button
:download-url="$downloadURL"
:download-id="$download->id"
:download-count="$download->count"
:episode-number="$hdl->episode"
:fill-numbers="$fillNumbers"
:file-size="$download->getFileSize()">
@endif

View File

@@ -0,0 +1,12 @@
@php
$download = $hdl->getDownloadByType('FHD');
$downloadURL = $dldomains[array_rand($dldomains)].'/'.$download->url;
@endphp
<livewire:download-button
:download-url="$downloadURL"
:download-id="$download->id"
:download-count="$download->count"
:episode-number="$hdl->episode"
:fill-numbers="$fillNumbers"
:file-size="$download->getFileSize()">

View File

@@ -0,0 +1,94 @@
<div id="captcharequired">
<p class="text-gray-800 dark:text-gray-200 font-bold">
<i class="fa-solid fa-lock-open pr-[4px] text-yellow-400"></i> 1080p
</p>
<p class="text-gray-800 dark:text-gray-200">
Please solve the following captcha:
</p>
<p id="message" class="text-red-600">
</p>
<div class="flex pt-2">
<div id="captchaImg">
{!! captcha_img() !!}
</div>
<button type="button" class="inline-flex items-center ml-2 px-2 py-2 bg-white dark:bg-gray-800 border border-gray-300 dark:border-gray-500 rounded-md font-semibold text-xs text-gray-700 dark:text-gray-300 uppercase tracking-widest shadow-sm hover:bg-gray-50 dark:hover:bg-gray-700 focus:outline-none focus:ring-2 focus:ring-indigo-500 focus:ring-offset-2 dark:focus:ring-offset-gray-800 disabled:opacity-25 transition ease-in-out duration-150" id="reloadcaptcha" >
<i class="fa-solid fa-rotate-right"></i>
</button>
</div>
<div class="flex pt-2 mt-1">
<x-text-input id="captcha_text" class="block " type="text" name="captcha_text"/>
<button type="button" class="inline-flex items-center ml-2 px-2 -pt-1 bg-rose-600 border border-transparent rounded-md font-semibold text-xs text-white uppercase tracking-widest hover:bg-rose-700 active:bg-rose-900 focus:outline-none focus:ring-2 focus:ring-rose-500 focus:ring-offset-2 dark:focus:ring-offset-gray-800 transition ease-in-out duration-150" id="submitcaptcha" >
Submit
</button>
</div>
<br>
<p class="text-gray-800 dark:text-gray-200 text-sm">
You can log in with Discord to avoid the captcha.
</p>
</div>
<div id="captchsolved" style="display: none;">
<p class="text-gray-800 dark:text-gray-200 font-bold">
<i class="fa-solid fa-lock-open pr-[4px] text-green-400"></i> 1080p
</p>
<div id="dlbutton">
<a href="" id="downloadEpisode">
<button class="group rounded-md shadow bg-rose-600 text-white cursor-pointer flex justify-between items-center overflow-hidden transition-all hover:glow m-1 w-[190px] h-[65px]">
<div class="relative w-12 h-[65px] bg-white bg-opacity-20 text-white flex justify-center items-center transition-all">
<svg class="w-4 h-4 transition-all group-hover:-translate-y-1" fill="none" stroke="currentColor" viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg">
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M19 14l-7 7m0 0l-7-7m7 7V3"></path>
</svg>
</div>
<div class="flex flex-col text-center w-full">
<p class="text-xl">Episode {{ $episode->episode }}</p>
<p class="text-xs">HEVC MKV {{ $episode->getDownloadByType('FHD')->getFileSize() ?? '' }}</p>
<p class="text-xs" id="downloadCount">Downloaded {{ $episode->getDownloadByType('FHD')->count }} times</p>
</div>
</button>
</a>
</div>
</div>
<script>
var downloadCounter = 0;
function reloadCaptcha() {
window.axios.get('/reload-captcha').then(function (response) {
if (response.status == 200) {
document.querySelector("#captchaImg").innerHTML = response.data.captcha;
}
}).catch(function (error) {
console.log(error);
});
}
function submitCaptcha() {
document.querySelector("#message").innerHTML = '';
window.axios.post('/get-download', {
captcha: document.getElementById('captcha_text').value,
episode_id: document.getElementById('e_id').value
}).then(function (response) {
document.querySelector("#captcharequired").style.display = "none";
document.querySelector("#captchsolved").style.display = "block";
document.querySelector("#downloadEpisode").href = '{{ $dldomains[array_rand($dldomains)] }}/'+ response.data.download_url;
document.querySelector("#downloadCount").innerText = 'Downloaded ' + response.data.download_count + ' times';
downloadCounter = response.data.download_count;
}).catch(function (error) {
if (error.response.data.message == 'validation.captcha') {
document.querySelector("#message").innerHTML = 'Captcha Incorrect!';
reloadCaptcha();
} else {
document.querySelector("#message").innerHTML = error.response.data.message;
}
});
}
function increaseDownloadCounter() {
downloadCounter += 1;
document.querySelector("#downloadCount").innerText = 'Downloaded ' + downloadCounter + ' times';
}
document.querySelector("#downloadEpisode").addEventListener("click", increaseDownloadCounter);
document.querySelector("#reloadcaptcha").addEventListener("click", reloadCaptcha);
document.querySelector("#submitcaptcha").addEventListener("click", submitCaptcha);
</script>

View File

@@ -0,0 +1,32 @@
@guest
@include('modals.partials.download-captcha')
@if ($episode->interpolated)
<br>
<p class="text-gray-800 dark:text-gray-200 font-bold">
<i class="fa-solid fa-lock pr-[4px] text-red-600"></i> FHD 48fps
</p>
<p class="text-gray-800 dark:text-gray-200">
48fps Downloads are restricted to logged in users.
</p>
@endif
<br>
<p class="text-gray-800 dark:text-gray-200 font-bold">
<i class="fa-solid fa-lock pr-[4px] text-red-600"></i> 4k
</p>
<p class="text-gray-800 dark:text-gray-200">
4k Downloads are restricted to patreon subscribers.
</p>
@if ($episode->interpolated_uhd)
<br>
<p class="text-gray-800 dark:text-gray-200 font-bold">
<i class="fa-solid fa-lock pr-[4px] text-red-600"></i> 4k 48fps
</p>
<p class="text-gray-800 dark:text-gray-200">
4k 48fps Downloads are restricted to patreon subscribers.
</p>
@endif
@include('modals.partials.download-subtitles')
@endguest

View File

@@ -0,0 +1,34 @@
<br>
<p class="font-bold text-gray-800 dark:text-gray-200">
<i class="fa-solid fa-lock-open pr-[4px] text-green-400"></i> Subtitles
</p>
<div class="flex flex-wrap justify-around">
@php
$subtitles = collect([['English' => 'eng']])
->merge($episode->subtitles->map(fn($sub) => [
$sub->subtitle->name => 'autotrans/' . $sub->subtitle->slug,
]))
->toArray();
$streamDomains = config('hstream.stream_domain');
@endphp
@foreach($subtitles as $subtitle)
@foreach ($subtitle as $language => $value)
<a href="{{ $streamDomains[array_rand($streamDomains)] }}/{{ $episode->url }}/{{ $value }}.ass" download="{{ $episode->slug }}-{{ $language }}.ass">
<button class="group rounded-md shadow bg-rose-600 text-white cursor-pointer flex justify-between items-center overflow-hidden transition-all hover:glow m-1 w-[180px]">
<div class="relative w-12 h-12 bg-white bg-opacity-20 text-white flex justify-center items-center transition-all"><svg id="arrow" class="w-4 h-4 transition-all group-hover:-translate-y-1" fill="none" stroke="currentColor" viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg">
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M19 14l-7 7m0 0l-7-7m7 7V3"></path>
</svg>
<div id="progress" class="absolute w-full h-0 bg-white bg-opacity-20 top-0 duration-200"></div>
</div>
<div class="w-32 text-center">
<p class="px-5 text-sm row-span-2">{{ $language }}</p>
@if ($language != 'English')
<p class="px-5 text-xs">Auto Translated</p>
@endif
</div>
</button>
</a>
@endforeach
@endforeach
</div>

View File

@@ -0,0 +1,136 @@
<!--Verically centered modal-->
<div data-te-modal-init
class="fixed left-0 top-0 z-[1055] hidden h-full w-full overflow-y-auto overflow-x-hidden outline-none"
id="modalShare" tabindex="-1" aria-labelledby="Share" aria-modal="true" role="dialog">
<div data-te-modal-dialog-ref
class="pointer-events-none relative flex min-h-[calc(100%-1rem)] w-auto translate-y-[-50px] items-center opacity-0 transition-all duration-300 ease-in-out min-[576px]:mx-auto min-[576px]:mt-7 min-[576px]:min-h-[calc(100%-3.5rem)] min-[576px]:max-w-[95%] md:min-[576px]:max-w-[90%] lg:min-[576px]:max-w-[80%] xl:min-[576px]:max-w-[50%] 2xl:min-[576px]:max-w-[25%]">
<div
class="pointer-events-auto relative flex w-full flex-col rounded-md border-none bg-white bg-clip-padding text-current shadow-lg outline-none dark:bg-neutral-800">
<x-modal-header :title='__("Share {$episode->title} - {$episode->episode}")' />
<!--Modal body-->
<div class="relative p-4">
<!-- Social Media -->
@php
$currentUrl = url()->current();
$text = 'Watch ' . $episode->title . ' - ' . $episode->episode . ' in 4k on hstream.moe!';
@endphp
<div class="flex flex-wrap justify-stretch">
<a class="border-2 duration-200 ease inline-flex items-center mb-1 mr-1 transition py-3 px-5 rounded-lg text-white border-rose-600 bg-rose-600 hover:bg-rose-700 hover:border-rose-700"
target="_blank" rel="noopener"
href="https://facebook.com/sharer/sharer.php?u={{ $currentUrl }}"
aria-label="Share on Facebook" draggable="false">
<svg aria-hidden="true" fill="currentColor" xmlns="http://www.w3.org/2000/svg"
viewBox="0 0 512 512" class="w-6 h-6">
<title>Facebook</title>
<path
d="M379 22v75h-44c-36 0-42 17-42 41v54h84l-12 85h-72v217h-88V277h-72v-85h72v-62c0-72 45-112 109-112 31 0 58 3 65 4z">
</path>
</svg>
<span class="ml-2">Facebook</span>
</a>
<a class="border-2 duration-200 ease inline-flex items-center mb-1 mr-1 transition py-3 px-5 rounded-lg text-white border-rose-600 bg-rose-600 hover:bg-rose-700 hover:border-rose-700"
target="_blank" rel="noopener"
href="https://twitter.com/intent/tweet?url={{ $currentUrl }}&amp;text={{ $text }}"
aria-label="Share on Twitter" draggable="false">
<svg aria-hidden="true" fill="currentColor" xmlns="http://www.w3.org/2000/svg"
viewBox="0 0 512 512" class="w-6 h-6">
<title>Twitter</title>
<path
d="m459 152 1 13c0 139-106 299-299 299-59 0-115-17-161-47a217 217 0 0 0 156-44c-47-1-85-31-98-72l19 1c10 0 19-1 28-3-48-10-84-52-84-103v-2c14 8 30 13 47 14A105 105 0 0 1 36 67c51 64 129 106 216 110-2-8-2-16-2-24a105 105 0 0 1 181-72c24-4 47-13 67-25-8 24-25 45-46 58 21-3 41-8 60-17-14 21-32 40-53 55z">
</path>
</svg>
<span class="ml-2">Twitter</span>
</a>
<a class="border-2 duration-200 ease inline-flex items-center mb-1 mr-1 transition py-3 px-5 rounded-lg text-white border-rose-600 bg-rose-600 hover:bg-rose-700 hover:border-rose-700"
target="_blank" rel="noopener"
href="https://reddit.com/submit/?url={{ $currentUrl }}&amp;resubmit=true&amp;title={{ $text }}"
aria-label="Share on Reddit" draggable="false">
<svg aria-hidden="true" fill="currentColor" xmlns="http://www.w3.org/2000/svg"
viewBox="0 0 512 512" class="w-6 h-6">
<title>Reddit</title>
<path
d="M440 204c-15 0-28 6-38 15-35-24-83-40-137-42l28-125 88 20c0 22 18 39 39 39 22 0 40-18 40-39s-17-40-40-40c-15 0-28 9-35 22l-97-22c-5-1-10 3-11 7l-31 138c-53 2-100 18-136 43a53 53 0 0 0-38-16c-56 0-74 74-23 100l-3 24c0 84 95 152 210 152 117 0 211-68 211-152 0-8-1-17-3-25 50-25 32-99-24-99zM129 309a40 40 0 1 1 80 0 40 40 0 0 1-80 0zm215 93c-37 37-139 37-176 0-4-3-4-9 0-13s10-4 13 0c28 28 120 29 149 0 4-4 10-4 14 0s4 10 0 13zm-1-54c-22 0-39-17-39-39a39 39 0 1 1 39 39z">
</path>
</svg>
<span class="ml-2">Reddit</span>
</a>
<a class="border-2 duration-200 ease inline-flex items-center mb-1 mr-1 transition py-3 px-5 rounded-lg text-white border-rose-600 bg-rose-600 hover:bg-rose-700 hover:border-rose-700"
target="_blank" rel="noopener"
href="https://wa.me/?text={{ $text }}%20{{ $currentUrl }}"
aria-label="Share on Whatsapp" draggable="false" style="">
<svg aria-hidden="true" fill="currentColor" xmlns="http://www.w3.org/2000/svg"
viewBox="0 0 512 512" class="w-6 h-6">
<title>Whatsapp</title>
<path
d="M413 97A222 222 0 0 0 64 365L31 480l118-31a224 224 0 0 0 330-195c0-59-25-115-67-157zM256 439c-33 0-66-9-94-26l-7-4-70 18 19-68-4-7a185 185 0 0 1 287-229c34 36 56 82 55 131 1 102-84 185-186 185zm101-138c-5-3-33-17-38-18-5-2-9-3-12 2l-18 22c-3 4-6 4-12 2-32-17-54-30-75-66-6-10 5-10 16-31 2-4 1-7-1-10l-17-41c-4-10-9-9-12-9h-11c-4 0-9 1-15 7-5 5-19 19-19 46s20 54 23 57c2 4 39 60 94 84 36 15 49 17 67 14 11-2 33-14 37-27s5-24 4-26c-2-2-5-4-11-6z">
</path>
</svg>
<span class="ml-2">Whatsapp</span>
</a>
<a class="border-2 duration-200 ease inline-flex items-center mb-1 mr-1 transition py-3 px-5 rounded-lg text-white border-rose-600 bg-rose-600 hover:bg-rose-700 hover:border-rose-700"
target="_blank" rel="noopener"
href="https://telegram.me/share/url?text={{ $text }}&amp;url={{ $currentUrl }}"
aria-label="Share on Telegram" draggable="false">
<svg aria-hidden="true" fill="currentColor" xmlns="http://www.w3.org/2000/svg"
viewBox="0 0 512 512" class="w-6 h-6">
<title>Telegram</title>
<path
d="M256 8a248 248 0 1 0 0 496 248 248 0 0 0 0-496zm115 169c-4 39-20 134-28 178-4 19-10 25-17 25-14 2-25-9-39-18l-56-37c-24-17-8-25 6-40 3-4 67-61 68-67l-1-4-5-1q-4 1-105 70-15 10-27 9c-9 0-26-5-38-9-16-5-28-7-27-16q1-7 18-14l145-62c69-29 83-34 92-34 2 0 7 1 10 3l4 7a43 43 0 0 1 0 10z">
</path>
</svg>
<span class="ml-2">Telegram</span>
</a>
<a class="border-2 duration-200 ease inline-flex items-center mb-1 mr-1 transition py-3 px-5 rounded-lg text-white border-rose-600 bg-rose-600 hover:bg-rose-700 hover:border-rose-700"
target="_blank" rel="noopener"
href="mailto:?subject={{ $text }}&amp;body={{ $currentUrl }}"
aria-label="Share by Email" draggable="false">
<svg aria-hidden="true" fill="currentColor" xmlns="http://www.w3.org/2000/svg"
viewBox="0 0 512 512" class="w-6 h-6">
<title>Email</title>
<path
d="M464 64a48 48 0 0 1 29 86L275 314c-11 8-27 8-38 0L19 150a48 48 0 0 1 29-86h416zM218 339c22 17 54 17 76 0l218-163v208c0 35-29 64-64 64H64c-35 0-64-29-64-64V176l218 163z">
</path>
</svg>
<span class="ml-2">Email</span>
</a>
</div>
<br>
<div class="flex">
<div>
<button id="copy-button" type="button" data-te-clipboard-init
data-te-clipboard-target="#copy-target" data-te-ripple-init data-te-ripple-color="light"
class="inline-block rounded border-rose-600 bg-rose-600 hover:bg-rose-700 hover:border-rose-700 px-6 pb-2 pt-2.5 text-xs font-medium uppercase leading-normal text-white transition duration-150 ease-in-out focus:bg-rose-600 focus:outline-none focus:ring-0 active:bg-rose-700">
Copy
</button>
</div>
<div class="relative mb-3 w-full" data-te-input-wrapper-init>
<input type="text"
class="peer block min-h-[auto] w-full rounded border-0 bg-transparent px-3 py-[0.32rem] leading-[1.6] outline-none transition-all duration-200 ease-linear focus:placeholder:opacity-100 peer-focus:text-rose-700 data-[te-input-state-active]:placeholder:opacity-100 motion-reduce:transition-none dark:text-neutral-200 dark:placeholder:text-neutral-200 dark:peer-focus:text-rose-700 [&:not([data-te-input-placeholder-active])]:placeholder:opacity-0"
id="copy-target" value="{{ $currentUrl }}" readonly />
</div>
</div>
<div class="mb-[0.125rem] block min-h-[1.5rem] text-center">
<input class="w-4 h-4 text-rose-600 bg-gray-100 border-gray-300 rounded focus:ring-rose-500 dark:focus:ring-rose-600 dark:ring-offset-gray-800 focus:ring-2 dark:bg-gray-700 dark:border-gray-600"
type="checkbox" value="" id="checkBoxStartAt" />
<label class="inline-block pl-[0.15rem] hover:cursor-pointer dark:text-white" for="checkBoxStartAt">
Start at current time
</label>
</div>
<script>
const checkbox = document.getElementById('checkBoxStartAt');
const urlInput = document.getElementById('copy-target');
const url = '{{ $currentUrl }}';
checkbox.addEventListener('change', (event) => {
if (event.currentTarget.checked) {
urlInput.value = url + "?t=" + parseInt(player.currentTime);
} else {
urlInput.value = url;
}
});
</script>
</div>
</div>
</div>
</div>