Migration complete

This commit is contained in:
2026-06-23 19:24:38 +02:00
parent 279160c1cb
commit 64b26ef059
126 changed files with 8121 additions and 221 deletions

View File

@@ -1,4 +1,4 @@
<div class="filter-group" x-data="{open:false,search:''}">
<div class="filter-group" x-data="{open:false}">
<div class="filter-title-row" @click="open = !open">
<div class="filter-title-left">
<h4 class="filter-title">{{ $title }}</h4>
@@ -18,11 +18,11 @@
<div x-show="open" x-transition>
<div class="internal-filter-search">
<i data-lucide="search" size="13"></i>
<input type="text" x-model="search" placeholder="Search...">
<input type="text" wire:model.live.debounce.300ms="{{ $searchModel }}" placeholder="Search...">
</div>
<div class="filter-options">
@foreach($items as $item)
<label class="filter-option" x-show="search.length >= 3 && '{{strtolower($item->{$nameProperty}) }}'.includes(search.toLowerCase())">
<label class="filter-option">
<input type="checkbox" wire:model.live="{{ $model }}" value="{{ $item->{$idProperty} }}">
{{ $item->{$nameProperty} }}
</label>

View File

@@ -1,4 +1,4 @@
<div class="filter-group" x-data="{open: false,search:''}">
<div class="filter-group" x-data="{open: false}">
<div class="filter-title-row" @click="open = !open">
<div class="filter-title-left">
<h4 class="filter-title">{{ $title }}</h4>
@@ -14,11 +14,11 @@
<div x-show="open" x-transition>
<div class="internal-filter-search">
<i data-lucide="search" size="13"></i>
<input type="text" x-model="search" placeholder="Search...">
<input type="text" wire:model.live.debounce.300ms="{{ $searchModel }}" placeholder="Search...">
</div>
<div class="filter-options">
@foreach($items as $item)
<label class="filter-option" x-show="search.length >= 3 && '{{strtolower($item->{$nameProperty}) }}'.includes(search.toLowerCase())">
<label class="filter-option">
<input type="checkbox" wire:model.live="{{ $model }}" value="{{ $item->{$idProperty} }}">
{{ $item->{$nameProperty} }}
</label>

View File

@@ -8,7 +8,7 @@
@endif
</div>
<div class="entry-card-info">
<a href="{{ route('entries.show', [ 'section' => $entry->type, 'entry' => $entry ] ) }}" class="entry-card-title">{{ $entry->title }}</a>
<a href="{{ route('entries.show', [ 'section' => $entry->type, 'entry' => $entry ] ) }}" class="entry-card-title">{{ $entry->title ?? $entry->complete_title }}</a>
<div class="entry-card-author">
@forelse( $entry->authors as $author)
@if($loop->first)By @endif

View File

@@ -1,3 +1,3 @@
<div class="block-error">
<i data-lucide="{{ $errorArray['icon'] ?? '' }}"></i> {{ sprintf( $errorArray['message'], $message ) }}
<i data-lucide="{{ $errorArray['icon'] ?? '' }}"></i> {!! sprintf( $errorArray['message'], $message ) !!}
</div>

View File

@@ -1,4 +1,4 @@
<div x-data="GalleryManager()" x-init="init(@js($oldPaths))">
<div x-data="GalleryManager()" x-init="init(@js($oldPaths))" x-ref="gallery-field">
<x-form-field-title name="Screenshots" helper="At least 1 Screenshot required, Maximum 20." required="{{ $required ? 'true' : 'false' }}" />
<div class="form-group main-image-grid">
<div class="form-upload" style="flex:1;" :class="{ 'disabled': isFull }">

View File

@@ -18,12 +18,11 @@
<i data-lucide="x"></i>
</button>
</div>
<div class="language-list" id="languages-group">
<div class="language-list" x-ref="languagesGroup" id="languages-group">
@foreach( $languages as $language )
<label class="language-item" x-show="'{{ strtolower($language->name) }}'.includes(search.toLowerCase())">
<input type="checkbox" name="languages[]" value="{{ $language->id }}" x-model="selected" :value="{{ $language->id }}" {{ in_array($language->id, $selected) ? 'checked' : '' }}> {{ $language->name }}
</label>
@endforeach
</div>
</div>

View File

@@ -1,4 +1,5 @@
<div x-data="MainImageManager()" x-init="init('{{$oldPath}}')">
<div x-data="MainImageManager()" x-init="init('{{$oldPath}}')" x-ref="main-image-field">
<x-form-field-title name="Main image" helper="This will show up on the index and on top of the entry. A screenshot or custom cover is prefered else all entries of same game will look the same." required="{{ $required ? 'true' : 'false' }}" />
<div class="form-group main-image-grid">
<div class="form-upload" style="flex:4;">

View File

@@ -3,12 +3,7 @@
window.mde_{{ $name }} = new EasyMDE({
element: $el.querySelector('#field_{{ $name }}'),
minHeight: '{{ $minHeight }}',
toolbar: {{ Js::from( $toolbar ) }},
autosave: {
enabled: true,
uniqueId: '{{ $name }}',
delay: 1000,
},
toolbar: {{ Js::from( $toolbar ) }}
})
"
>

View File

@@ -1,41 +0,0 @@
<nav id="menu">
<div class="menu-header">
<img src="{{ asset('logo/plaza-logo-wide.png') }}">
</div>
<div class="menu-navigation">
@foreach( config('menu') as $menu )
<div class="menu-group">
<div class="menu-group-title">{{ $menu['name'] }}</div>
@foreach( $menu['items'] as $item )
@if( !isset( $item['requires_auth'] ) || $item['requires_auth'] === true && !\Auth::guest() )
<a href="{{ isset($item['xf_route']) ? xfRoute($item['xf_route']) : route($item['route']) }}"
@class(['menu-item', 'active' => request()->routeIs( $item['route'] ?? '' )]) >
<i data-lucide="{{ $item['icon'] }}"></i><span>{{ $item['name'] }}</span>
</a>
@endif
@endforeach
</div>
@endforeach
</div>
<div class="menu-user">
<div class="menu-user-avatar">
<x-xen-foro-avatar />
</div>
<div class="menu-user-info">
<span class="username">
{{ \Auth::user()?->username ?? "Guest" }}
</span>
<span class="user_role">
<a href="{{ \Auth::guest() ? xfRoute('login') : xfRoute('logout') . '?t=' . xfCsrfToken() }}">
{{ \Auth::guest() ? 'Login' : 'Logout' }}
</a>
</span>
</div>
</div>
</nav>

View File

@@ -0,0 +1,23 @@
<div class="comment-block">
<x-xen-foro-avatar :user="$review->user_id" />
<div class="comment-content">
<div class="comment-meta">
<span class="comment-author">{{ $review->xenforoUser()?->username }}</span>
<span class="comment-separator"></span>
<x-review-star-rating :rating="$review->rating" />
<span class="comment-separator"></span>
<span class="comment-date">{{ $review->created_at->format('Y-m-d') }}</span>
@if( $entryShow && $review->entry()->exists() )
<span class="comment-separator"></span>
<a href="{{ route('entries.show', ['section' => $review->entry?->type, 'entry' => $review->entry ]) }}">{{ $review->entry->complete_title ?? $review->entry->title }}</a>
@endif
</div>
<div class="review-title">{{ $review->title }}</div>
<div class="comment-body markdown-body">
{!! $review->description_html !!}
</div>
</div>
</div>

View File

@@ -0,0 +1,5 @@
<span class="star-rating-display">
@for($i = 1; $i <= 5; $i++)
<i data-lucide="star" size="13" class="{{ $i <= $rating ? 'star-filled' : 'star-empty' }}"></i>
@endfor
</span>

View File

@@ -4,49 +4,121 @@
<i data-lucide="menu"></i>
</button>
<form class="search-bar" action="{{ route('entries.index') }}">
<input type="text" name="s" placeholder="Search" />
<button type="submit" class="search-button">
<i data-lucide="search" size="18" color="var(--text2)"></i>
</button>
</form>
<form id="topbar-search-form" class="search-bar" method="GET">
<select id="search-scope" class="search-scope-select" name="search_scope">
<option value="entries" selected>Entries</option>
<option value="news">News</option>
<option value="forum">Forum</option>
</select>
<input type="text" id="search-input" placeholder="Search" autocomplete="off">
<button type="submit" class="search-button">
<i data-lucide="search" size="18" color="var(--text2)"></i>
</button>
</form>
<script>
(function () {
const form = document.getElementById('topbar-search-form');
const select = document.getElementById('search-scope');
const input = document.getElementById('search-input');
const scopes = {
entries: { action: '{{ route('entries.index') }}', param: 's' },
news: { action: '{{ route('news.index') }}', param: 's' },
forum: {
action: '{{ xfRoute('search/2147483647/') }}',
param: 'q',
extra: { o: 'relevance' },
},
};
form.addEventListener('submit', function (e) {
e.preventDefault();
const term = input.value.trim();
if (!term) return;
const cfg = scopes[select.value];
const params = new URLSearchParams({ [cfg.param]: term, ...(cfg.extra || {}) });
window.location = cfg.action + '?' + params.toString();
});
})();
</script>
<div class="topbar-actions">
@can('is-admin')
@php $topbarAdminSeparator = true; @endphp
<a href="{{ config('app.forum_url') . '/admin.php' }}" class="btn">
<a href="{{ config('app.forum_url') . '/admin.php' }}" class="btn topbar-admin-btn" title="Admin">
<i data-lucide="landmark" size="18"></i>
</a>
<a href="{{ config('app.url') . '/manage' }}" class="btn">
<a href="{{ config('app.url') . '/manage' }}" class="btn topbar-admin-btn" title="Manage">
<i data-lucide="shield-cog" size="18"></i>
</a>
@endcan
@if( $topbarAdminSeparator )
<div class="vertical-separator"></div>
<div class="vertical-separator topbar-admin-btn"></div>
@endif
@can('is-mod')
@php $topbarModSeparator = true; @endphp
<a href="{{ route('modcp.index') }}" class="btn">
<a href="{{ route('modcp.index') }}" class="btn topbar-mod-btn" title="Moderation">
<i data-lucide="siren" size="18"></i>
</a>
<a href="{{ xfRoute('approval-queue') }}" class="btn">
<a href="{{ xfRoute('approval-queue') }}" class="btn topbar-mod-btn" title="Approvals">
<i data-lucide="message-circle-check" size="18"></i>
</a>
<a href="{{ xfRoute('reports') }}" class="btn">
<a href="{{ xfRoute('reports') }}" class="btn topbar-mod-btn" title="Reports">
<i data-lucide="triangle-alert" size="18"></i>
</a>
@endcan
@if( $topbarModSeparator )
<div class="vertical-separator"></div>
<div class="vertical-separator topbar-mod-btn"></div>
@endif
{{-- Users --}}
<div x-data="{ open: false }" class="topbar-more-container" style="position: relative;">
@canany(['is-admin','is-mod'])
<button @click="open = !open" @click.outside="open = false" class="btn topbar-btn-more" title="More actions">
<i data-lucide="more-vertical" size="18"></i>
</button>
<div x-show="open" class="topbar-more-menu">
@can('is-admin')
<a href="{{ config('app.forum_url') . '/admin.php' }}" class="topbar-more-item" title="Admin">
<i data-lucide="landmark" size="16"></i>
<span>Admin</span>
</a>
<a href="{{ config('app.url') . '/manage' }}" class="topbar-more-item" title="Manage">
<i data-lucide="shield-cog" size="16"></i>
<span>Manage</span>
</a>
@endcan
@can('is-mod')
<a href="{{ route('modcp.index') }}" class="topbar-more-item" title="Moderation">
<i data-lucide="siren" size="16"></i>
<span>Mod CP</span>
</a>
<a href="{{ xfRoute('approval-queue') }}" class="topbar-more-item" title="Approvals">
<i data-lucide="message-circle-check" size="16"></i>
<span>Approval Queue</span>
</a>
<a href="{{ xfRoute('reports') }}" class="topbar-more-item" title="Reports">
<i data-lucide="triangle-alert" size="16"></i>
<span>Reports</span>
</a>
@endcan
</div>
@endcanany
</div>
@can('create','\App\Models\Entry')
<a href="{{ route('submit.index') }}" class="btn">
<a href="{{ route('submit.index') }}" class="btn" title="Submit">
<i data-lucide="hard-drive-upload" size="18"></i>
</a>
@endcan

View File

@@ -1,6 +1,7 @@
<span x-data class="userlink"
@mouseenter.debounce.300ms="$store.hovercard.open($el,'{{ route('dynamic.hovercard', ['user_id' => $user?->user_id ?? 0 ]) }}')"
@mouseleave="setTimeout(() => { const C = document.querySelector('.hovercard'); if(!C?.matches(':hover')) $store.hovercard.close(); }, 200)"
@click="window.location.href = '{{ xfRoute('members/.') . $user?->user_id }}'"
>
{{ $user->username }}
</span>