A lot of things
This commit is contained in:
210
resources/views/livewire/activity-logs.blade.php
Normal file
210
resources/views/livewire/activity-logs.blade.php
Normal file
@@ -0,0 +1,210 @@
|
||||
<div>
|
||||
<div class="log-filters" x-data="{ open: {{ $hasFilters ? 'true' : 'false' }} }">
|
||||
|
||||
<div class="log-filters-main">
|
||||
<div class="log-search-wrap">
|
||||
<i data-lucide="search" size="13"></i>
|
||||
<input
|
||||
wire:model.live.debounce.300ms="search"
|
||||
type="text"
|
||||
class="form-input"
|
||||
placeholder="Search description, subject, channel…"
|
||||
>
|
||||
</div>
|
||||
|
||||
<select wire:model.live="event" class="form-select log-select">
|
||||
<option value="">All events</option>
|
||||
@foreach($events as $e)
|
||||
<option value="{{ $e }}">{{ ucfirst($e) }}</option>
|
||||
@endforeach
|
||||
</select>
|
||||
|
||||
<select wire:model.live="logName" class="form-select log-select">
|
||||
<option value="">All channels</option>
|
||||
@foreach($logNames as $name)
|
||||
<option value="{{ $name }}">{{ $name }}</option>
|
||||
@endforeach
|
||||
</select>
|
||||
|
||||
<button @click="open = !open" class="btn {{ $hasFilters ? 'btn--active' : '' }}">
|
||||
<i data-lucide="sliders-horizontal" size="13"></i>
|
||||
More filters
|
||||
@if($hasFilters)
|
||||
<span class="log-filter-dot"></span>
|
||||
@endif
|
||||
</button>
|
||||
|
||||
@if($search || $hasFilters)
|
||||
<button wire:click="clearFilters" class="btn">
|
||||
<i data-lucide="x" size="13"></i> Clear
|
||||
</button>
|
||||
@endif
|
||||
</div>
|
||||
|
||||
<div
|
||||
x-show="open"
|
||||
x-transition:enter="log-transition-enter"
|
||||
x-transition:leave="log-transition-leave"
|
||||
class="log-filters-extra"
|
||||
>
|
||||
<div class="log-filters-extra-inner">
|
||||
<div class="log-filter-field">
|
||||
<label class="log-filter-label">From</label>
|
||||
<input wire:model.live="dateFrom" type="date" class="form-input">
|
||||
</div>
|
||||
<div class="log-filter-field">
|
||||
<label class="log-filter-label">To</label>
|
||||
<input wire:model.live="dateTo" type="date" class="form-input">
|
||||
</div>
|
||||
<div class="log-filter-field">
|
||||
<label class="log-filter-label">User ID</label>
|
||||
<input
|
||||
wire:model.live.debounce.400ms="causerId"
|
||||
type="text"
|
||||
class="form-input"
|
||||
placeholder="XenForo user ID"
|
||||
>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
|
||||
<div class="log-results-bar">
|
||||
<span class="log-results-count">
|
||||
<span wire:loading.class="log-loading">
|
||||
{{ number_format($logs->total()) }} log entries
|
||||
</span>
|
||||
</span>
|
||||
<span class="log-results-pages">
|
||||
Page {{ $logs->currentPage() }} / {{ $logs->lastPage() }}
|
||||
</span>
|
||||
</div>
|
||||
|
||||
@if($logs->isEmpty())
|
||||
<div class="modcp-empty">
|
||||
<i data-lucide="search-x" size="36"></i>
|
||||
<p>No logs match your search.</p>
|
||||
</div>
|
||||
@else
|
||||
<div class="modcp-list">
|
||||
@foreach($logs as $log)
|
||||
|
||||
@php
|
||||
$old = $log->properties->get('old', []);
|
||||
$attrs = $log->properties->get('attributes', []);
|
||||
$extra = array_diff_key($log->properties->toArray(), array_flip(['old', 'attributes']));
|
||||
$hasDiff = !empty($old) || !empty($attrs) || !empty($extra);
|
||||
@endphp
|
||||
|
||||
<div
|
||||
class="modcp-list-item log-item"
|
||||
x-data="{ open: false }"
|
||||
:class="open && 'log-item--open'"
|
||||
>
|
||||
<div class="log-event-dot log-event-dot--{{ $log->event ?? 'custom' }}">
|
||||
@switch($log->event)
|
||||
@case('created') <i data-lucide="plus" size="12"></i> @break
|
||||
@case('updated') <i data-lucide="pen-line" size="12"></i> @break
|
||||
@case('deleted') <i data-lucide="trash-2" size="12"></i> @break
|
||||
@default <i data-lucide="zap" size="12"></i>
|
||||
@endswitch
|
||||
</div>
|
||||
|
||||
<div class="modcp-list-item-info">
|
||||
<span class="modcp-list-item-title">{{ $log->description }}</span>
|
||||
<div class="modcp-list-item-meta">
|
||||
|
||||
@if($log->log_name)
|
||||
<span class="log-channel-badge">{{ $log->log_name }}</span>
|
||||
<span class="log-sep">·</span>
|
||||
@endif
|
||||
|
||||
@if($log->subject_type)
|
||||
<span>
|
||||
{{ class_basename($log->subject_type) }}
|
||||
<span class="log-id">#{{ $log->subject_id }}</span>
|
||||
</span>
|
||||
<span class="log-sep">·</span>
|
||||
@endif
|
||||
|
||||
@if($log->causer_id)
|
||||
<span>
|
||||
<i data-lucide="user" size="10"></i>
|
||||
<x-xf-username-link :user-id="$log->causer_id" />
|
||||
</span>
|
||||
<span class="log-sep">·</span>
|
||||
@endif
|
||||
|
||||
<span title="{{ $log->created_at->format('d M Y, H:i:s') }}">
|
||||
{{ $log->created_at->diffForHumans() }}
|
||||
</span>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="log-item-right">
|
||||
<span class="log-timestamp">{{ $log->created_at->format('d M Y, H:i') }}</span>
|
||||
|
||||
@if($hasDiff)
|
||||
<button
|
||||
@click="open = !open"
|
||||
class="btn btn--sm log-expand-btn"
|
||||
:class="open && 'btn--active'"
|
||||
:aria-label="open ? 'Hide details' : 'Show details'"
|
||||
>
|
||||
<i data-lucide="chevron-down" size="12"
|
||||
style="transition: transform .15s"
|
||||
:style="open ? 'transform:rotate(180deg)' : ''">
|
||||
</i>
|
||||
</button>
|
||||
@endif
|
||||
</div>
|
||||
</div>
|
||||
|
||||
@if($hasDiff)
|
||||
<div x-show="open" x-transition class="log-properties">
|
||||
|
||||
@if(!empty($old) || !empty($attrs))
|
||||
<div class="log-diff-label">Changes</div>
|
||||
<table class="log-diff">
|
||||
<thead>
|
||||
<tr>
|
||||
<th>Field</th>
|
||||
<th class="log-diff-old-head">Before</th>
|
||||
<th class="log-diff-new-head">After</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
@foreach(array_unique(array_merge(array_keys((array)$old), array_keys((array)$attrs))) as $key)
|
||||
<tr>
|
||||
<td class="log-diff-key">{{ $key }}</td>
|
||||
<td class="log-diff-old">
|
||||
{{ is_array($old[$key] ?? null) ? json_encode($old[$key]) : ($old[$key] ?? '—') }}
|
||||
</td>
|
||||
<td class="log-diff-new">
|
||||
{{ is_array($attrs[$key] ?? null) ? json_encode($attrs[$key]) : ($attrs[$key] ?? '—') }}
|
||||
</td>
|
||||
</tr>
|
||||
@endforeach
|
||||
</tbody>
|
||||
</table>
|
||||
@endif
|
||||
|
||||
@if(!empty($extra))
|
||||
<div class="log-diff-label" style="margin-top: 10px">Properties</div>
|
||||
<pre class="log-raw">{{ json_encode($extra, JSON_PRETTY_PRINT | JSON_UNESCAPED_UNICODE) }}</pre>
|
||||
@endif
|
||||
|
||||
</div>
|
||||
@endif
|
||||
|
||||
@endforeach
|
||||
</div>
|
||||
|
||||
<div class="log-pagination">
|
||||
{{ $logs->links() }}
|
||||
</div>
|
||||
@endif
|
||||
|
||||
</div>
|
||||
@@ -5,7 +5,7 @@
|
||||
<div class="game-selector">
|
||||
<div class="game-selector-level2">
|
||||
<x-form-field-title name="Authors" helper="Person or Group who created this, if it's you add/select yourself." required="true" />
|
||||
<input id="author-search" class="form-input" type="text" wire:model.live.debounce="search" placeholder="Search a game..." autocomplete="off"
|
||||
<input id="author-search" class="form-input" type="text" wire:model.live.debounce="search" placeholder="Search an author..." autocomplete="off"
|
||||
@focus="$wire.dropdown = $wire.search.length >= 2" @click.outside="$wire.dropdown = false" >
|
||||
</div>
|
||||
@if( $dropdown )
|
||||
|
||||
@@ -6,7 +6,7 @@
|
||||
placeholder="Search..."
|
||||
class="form-input filter-bar-search"
|
||||
>
|
||||
@if( $search || $types || $platforms || $games || $statuses || $authors || $languages || $modifications )
|
||||
@if( $search || $types || $platforms || $games || $statuses || $authors || $languages || $modifications || $categories || $levels || $systems )
|
||||
<button type="button" wire:click="clearFilters" class="btn">
|
||||
<i data-lucide="x"></i> Clear filters
|
||||
</button>
|
||||
|
||||
@@ -20,13 +20,18 @@
|
||||
<div class="file-item">
|
||||
<div class="file-info">
|
||||
<span class="file-name">{{ $file->filename }}</span>
|
||||
<span class="file-meta">{{ $file->filesize }} - 0 downloads</span>
|
||||
<span class="file-meta">{{ $file->filesize }} - {{ $file->download_count }} downloads</span>
|
||||
</div>
|
||||
<div style="display:flex;flex-direction:column;gap:15px;">
|
||||
<a href="{{ route('fs.download', ['entry_id' => $entryId, 'file' => $file->file_uuid] ) }}" class="btn primary"><i data-lucide="download"></i> Download</a>
|
||||
@if( $file->online_patcher )
|
||||
<a href="{{ route('tools.direct-patch', ['entry_id' => $entryId, 'file' => $file->file_uuid] ) }}" class="btn"><i data-lucide="stamp"></i> Patch</a>
|
||||
@endif
|
||||
@if( $file->playOnlineSetting )
|
||||
@auth
|
||||
<a href="{{ route('tools.play', ['entry_id' => $entryId, 'file' => $file->file_uuid] ) }}" class="btn"><i data-lucide="gamepad-2"></i> Try it online</a>
|
||||
@endauth
|
||||
@endif
|
||||
</div>
|
||||
</div>
|
||||
@empty
|
||||
|
||||
41
resources/views/livewire/entry-selector.blade.php
Normal file
41
resources/views/livewire/entry-selector.blade.php
Normal file
@@ -0,0 +1,41 @@
|
||||
<div class="form-group">
|
||||
<div class="game-selector">
|
||||
<div class="game-selector-level2">
|
||||
<x-form-field-title name="Related Entry" required="" />
|
||||
<input id="entry-search" class="form-input" type="text" wire:model.live.debounce="search" placeholder="Search an entry..." autocomplete="off"
|
||||
@focus="$wire.dropdown = $wire.search.length > 2" @click.outside="$wire.dropdown = false"
|
||||
>
|
||||
|
||||
<input type="hidden" name="entry_id" value="{{ $selectedEntryId ?? '' }}" />
|
||||
|
||||
</div>
|
||||
@if( $dropdown )
|
||||
<ul class="game-selector-dropdown">
|
||||
@forelse( $entries as $entry )
|
||||
<li>
|
||||
<button type="button"
|
||||
wire:click="selectEntry({{ $entry->id }})" class="dropdown-item" {{ $selectedEntryId === $entry->id ? 'selected' : '' }}>
|
||||
<span class="dropdown-item-name">
|
||||
{{ $entry->complete_title ?? $entry->title }}
|
||||
</span>
|
||||
<span class="badge {{ $entry->type }}">
|
||||
{{ \App\View\Components\EntryCard::ENTRY_TYPES_BADGE[$entry->type] ?? $entry->type }}
|
||||
</span>
|
||||
</button>
|
||||
</li>
|
||||
@empty
|
||||
<li class="dropdown-empty">No entry found</li>
|
||||
@endforelse
|
||||
</ul>
|
||||
@endif
|
||||
</div>
|
||||
|
||||
<div style="display:flex;align-items: flex-end;justify-content: right;gap:15px;margin-top: 15px;">
|
||||
@if($selectedEntryId)
|
||||
<button type="button" class="btn" wire:click="clearEntry">
|
||||
Remove
|
||||
</button>
|
||||
@endif
|
||||
</div>
|
||||
|
||||
</div>
|
||||
43
resources/views/livewire/news-database.blade.php
Normal file
43
resources/views/livewire/news-database.blade.php
Normal file
@@ -0,0 +1,43 @@
|
||||
<div @filters-updated.window="refreshIcons($el)">
|
||||
<div class="database-search filter-bar">
|
||||
<input type="text" wire:model.live.debounce="search"
|
||||
placeholder="Search..." class="form-input filter-bar-search"
|
||||
>
|
||||
@if($search || $categories )
|
||||
<button type="button" wire:click="clearFilters" class="btn">
|
||||
<i data-lucide="x"></i> Clear filters
|
||||
</button>
|
||||
@endif
|
||||
</div>
|
||||
<div class="database-wrapper">
|
||||
<aside class="database-filters">
|
||||
{{-- Categories --}}
|
||||
<x-database-filter-without-mode title="Categories" :items="$allCategories" model="categories" />
|
||||
</aside>
|
||||
|
||||
<div class="database-results">
|
||||
<div class="database-sort">
|
||||
@foreach( \App\Livewire\NewsDatabase::SORT_OPTIONS as $k => $v )
|
||||
<button type="button" wire:click="setSort('{{ $k }}')" class="btn {{ $sortBy === $k ? 'active' : '' }}">
|
||||
{{ $v }}
|
||||
</button>
|
||||
@if( $sortBy === $k )
|
||||
<i data-lucide="{{ $sortDir === 'asc' ? 'arrow-up' : 'arrow-down' }}"></i>
|
||||
@endif
|
||||
@endforeach
|
||||
<span class="database-results-count">{{ $news->total() }} results</span>
|
||||
</div>
|
||||
|
||||
<div class="news-grid">
|
||||
@forelse($news as $item)
|
||||
<x-news-card :news="$item" />
|
||||
@empty
|
||||
<p>No news found.</p>
|
||||
@endforelse
|
||||
</div>
|
||||
|
||||
{{ $news->links() }}
|
||||
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
Reference in New Issue
Block a user