lots of progress
This commit is contained in:
@@ -0,0 +1,161 @@
|
||||
@extends('layouts.app')
|
||||
|
||||
@section('title', 'Games - ClearGame')
|
||||
|
||||
@section('content')
|
||||
<div class="d-flex justify-content-between align-items-center mb-4">
|
||||
<h1 class="h2 fw-bold gradient-text">All Games</h1>
|
||||
<div class="d-flex gap-2">
|
||||
<form action="{{ route('games.index') }}" method="GET" class="d-flex me-2">
|
||||
<input type="text"
|
||||
name="search"
|
||||
class="form-control bg-dark text-white border-0"
|
||||
placeholder="Search games..."
|
||||
value="{{ request('search') }}"
|
||||
style="min-width: 250px;">
|
||||
<button type="submit" class="btn btn-gradient ms-2">
|
||||
<i class="fas fa-search"></i>
|
||||
</button>
|
||||
</form>
|
||||
<div class="dropdown">
|
||||
<button class="btn btn-outline-gradient dropdown-toggle" type="button" data-bs-toggle="dropdown">
|
||||
<i class="fas fa-sort me-1"></i> Sort by
|
||||
</button>
|
||||
<ul class="dropdown-menu">
|
||||
<li><a class="dropdown-item" href="{{ route('games.index', array_merge(request()->query(), ['sort' => 'first_release_date', 'direction' => 'desc'])) }}">
|
||||
<i class="fas fa-calendar me-2"></i> Release Date
|
||||
</a></li>
|
||||
<li><a class="dropdown-item" href="{{ route('games.index', array_merge(request()->query(), ['sort' => 'rating', 'direction' => 'desc'])) }}">
|
||||
<i class="fas fa-star me-2"></i> Rating
|
||||
</a></li>
|
||||
<li><a class="dropdown-item" href="{{ route('games.index', array_merge(request()->query(), ['sort' => 'rating_count', 'direction' => 'desc'])) }}">
|
||||
<i class="fas fa-fire me-2"></i> Popularity
|
||||
</a></li>
|
||||
</ul>
|
||||
</div>
|
||||
<div class="dropdown">
|
||||
<button class="btn btn-outline-gradient dropdown-toggle" type="button" data-bs-toggle="dropdown">
|
||||
<i class="fas fa-filter me-1"></i> Filter
|
||||
</button>
|
||||
<ul class="dropdown-menu p-3" style="min-width: 300px;">
|
||||
<li class="mb-2">
|
||||
<label class="form-label text-white mb-1"><i class="fas fa-tv me-1"></i> Platform</label>
|
||||
<select name="platform" class="form-select bg-dark text-white border-0" onchange="this.form.submit()">
|
||||
<option value="">All Platforms</option>
|
||||
@foreach($platforms as $platform)
|
||||
<option value="{{ $platform->slug }}" {{ request('platform') == $platform->slug ? 'selected' : '' }}>
|
||||
{{ $platform->name }}
|
||||
</option>
|
||||
@endforeach
|
||||
</select>
|
||||
</li>
|
||||
<li class="mb-2">
|
||||
<label class="form-label text-white mb-1"><i class="fas fa-tags me-1"></i> Genre</label>
|
||||
<select name="genre" class="form-select bg-dark text-white border-0" onchange="this.form.submit()">
|
||||
<option value="">All Genres</option>
|
||||
@foreach($genres as $genre)
|
||||
<option value="{{ $genre->slug }}" {{ request('genre') == $genre->slug ? 'selected' : '' }}>
|
||||
{{ $genre->name }}
|
||||
</option>
|
||||
@endforeach
|
||||
</select>
|
||||
</li>
|
||||
<li class="mb-2">
|
||||
<label class="form-label text-white mb-1"><i class="fas fa-calendar-alt me-1"></i> Release Year</label>
|
||||
<select name="year" class="form-select bg-dark text-white border-0" onchange="this.form.submit()">
|
||||
<option value="">All Years</option>
|
||||
@foreach($years as $year)
|
||||
<option value="{{ $year }}" {{ request('year') == $year ? 'selected' : '' }}>
|
||||
{{ $year }}
|
||||
</option>
|
||||
@endforeach
|
||||
</select>
|
||||
</li>
|
||||
<li class="mb-2">
|
||||
<label class="form-label text-white mb-1"><i class="fas fa-star me-1"></i> Rating Range</label>
|
||||
<select name="rating_range" class="form-select bg-dark text-white border-0" onchange="this.form.submit()">
|
||||
<option value="">All Ratings</option>
|
||||
<option value="90-100" {{ request('rating_range') == '90-100' ? 'selected' : '' }}>90+</option>
|
||||
<option value="80-89" {{ request('rating_range') == '80-89' ? 'selected' : '' }}>80-89</option>
|
||||
<option value="70-79" {{ request('rating_range') == '70-79' ? 'selected' : '' }}>70-79</option>
|
||||
<option value="60-69" {{ request('rating_range') == '60-69' ? 'selected' : '' }}>60-69</option>
|
||||
<option value="0-59" {{ request('rating_range') == '0-59' ? 'selected' : '' }}>Below 60</option>
|
||||
</select>
|
||||
</li>
|
||||
<li class="mt-3">
|
||||
<a href="{{ route('games.index') }}" class="btn btn-outline-gradient btn-sm w-100">
|
||||
<i class="fas fa-times me-1"></i> Clear Filters
|
||||
</a>
|
||||
</li>
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
@if(request()->hasAny(['platform', 'genre', 'year', 'rating_range']))
|
||||
<div class="mb-4">
|
||||
<div class="d-flex flex-wrap gap-2">
|
||||
@if(request('platform'))
|
||||
<span class="badge bg-primary">
|
||||
<i class="fas fa-tv me-1"></i> {{ $platforms->firstWhere('slug', request('platform'))->name }}
|
||||
<a href="{{ route('games.index', array_merge(request()->except('platform'), ['page' => 1])) }}" class="text-white ms-2">×</a>
|
||||
</span>
|
||||
@endif
|
||||
@if(request('genre'))
|
||||
<span class="badge bg-primary">
|
||||
<i class="fas fa-tags me-1"></i> {{ $genres->firstWhere('slug', request('genre'))->name }}
|
||||
<a href="{{ route('games.index', array_merge(request()->except('genre'), ['page' => 1])) }}" class="text-white ms-2">×</a>
|
||||
</span>
|
||||
@endif
|
||||
@if(request('year'))
|
||||
<span class="badge bg-primary">
|
||||
<i class="fas fa-calendar-alt me-1"></i> {{ request('year') }}
|
||||
<a href="{{ route('games.index', array_merge(request()->except('year'), ['page' => 1])) }}" class="text-white ms-2">×</a>
|
||||
</span>
|
||||
@endif
|
||||
@if(request('rating_range'))
|
||||
<span class="badge bg-primary">
|
||||
<i class="fas fa-star me-1"></i> {{ request('rating_range') }}
|
||||
<a href="{{ route('games.index', array_merge(request()->except('rating_range'), ['page' => 1])) }}" class="text-white ms-2">×</a>
|
||||
</span>
|
||||
@endif
|
||||
</div>
|
||||
</div>
|
||||
@endif
|
||||
|
||||
<div class="row row-cols-1 row-cols-md-2 row-cols-lg-3 row-cols-xl-4 g-4">
|
||||
@foreach($games as $game)
|
||||
<div class="col">
|
||||
<div class="card gradient-border h-100">
|
||||
<img src="{{ $game->cover_url ?? 'https://via.placeholder.com/300x400' }}"
|
||||
class="card-img-top"
|
||||
alt="{{ $game->name }}"
|
||||
style="height: 300px; object-fit: cover;">
|
||||
<div class="card-body">
|
||||
<h5 class="card-title">{{ $game->name }}</h5>
|
||||
<p class="card-text text-gray-400 small">
|
||||
{{ Str::limit($game->summary, 100) }}
|
||||
</p>
|
||||
<div class="d-flex gap-2 mb-3">
|
||||
@if($game->rating)
|
||||
<span class="badge bg-primary"><i class="fas fa-star me-1"></i> {{ number_format($game->rating, 1) }}</span>
|
||||
@endif
|
||||
@if($game->first_release_date)
|
||||
<span class="badge bg-secondary">
|
||||
<i class="fas fa-calendar-alt me-1"></i> {{ \Carbon\Carbon::parse($game->first_release_date)->format('Y') }}
|
||||
</span>
|
||||
@endif
|
||||
</div>
|
||||
<a href="{{ route('games.show', $game->slug) }}" class="btn btn-gradient w-100">
|
||||
<i class="fas fa-info-circle me-1"></i> View Details
|
||||
</a>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
@endforeach
|
||||
</div>
|
||||
|
||||
<div class="d-flex justify-content-center mt-5">
|
||||
{{ $games->links() }}
|
||||
</div>
|
||||
@endsection
|
||||
@@ -0,0 +1,177 @@
|
||||
@extends('layouts.app')
|
||||
|
||||
@section('title', $game->name)
|
||||
|
||||
@section('content')
|
||||
<div class="container py-4">
|
||||
<div class="row">
|
||||
<div class="col-md-4">
|
||||
<div class="card bg-dark text-white mb-4">
|
||||
<img src="{{ $game->cover_url }}" class="card-img-top" alt="{{ $game->name }}">
|
||||
<div class="card-body">
|
||||
<div class="d-flex justify-content-between align-items-center">
|
||||
<div>
|
||||
<h5 class="card-title mb-0">{{ $game->name }}</h5>
|
||||
<p class="text-muted mb-0">{{ $game->first_release_date->format('Y') }}</p>
|
||||
</div>
|
||||
@auth
|
||||
<div class="dropdown">
|
||||
<button class="btn btn-outline-primary dropdown-toggle" type="button" id="addToListDropdown"
|
||||
data-bs-toggle="dropdown" aria-expanded="false">
|
||||
<i class="fas fa-plus me-2"></i>Add to List
|
||||
</button>
|
||||
<ul class="dropdown-menu dropdown-menu-dark" aria-labelledby="addToListDropdown">
|
||||
@foreach(Auth::user()->lists as $list)
|
||||
<li>
|
||||
<form action="{{ route('lists.addGame', $list) }}" method="POST" class="d-inline">
|
||||
@csrf
|
||||
<input type="hidden" name="game_id" value="{{ $game->id }}">
|
||||
<button type="submit" class="dropdown-item">
|
||||
<i class="fas fa-list me-2"></i>{{ $list->name }}
|
||||
</button>
|
||||
</form>
|
||||
</li>
|
||||
@endforeach
|
||||
<li><hr class="dropdown-divider"></li>
|
||||
<li>
|
||||
<a class="dropdown-item" href="{{ route('lists.create') }}">
|
||||
<i class="fas fa-plus me-2"></i>Create New List
|
||||
</a>
|
||||
</li>
|
||||
</ul>
|
||||
</div>
|
||||
@endauth
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="card bg-dark text-white mb-4">
|
||||
<div class="card-header">
|
||||
<h5 class="mb-0">Details</h5>
|
||||
</div>
|
||||
<div class="card-body">
|
||||
<div class="mb-3">
|
||||
<h6 class="text-muted">Platforms</h6>
|
||||
<div class="d-flex flex-wrap gap-2">
|
||||
@foreach($game->platforms()->get() as $platform)
|
||||
<span class="badge bg-secondary">{{ $platform->name }}</span>
|
||||
@endforeach
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="mb-3">
|
||||
<h6 class="text-muted">Genres</h6>
|
||||
<div class="d-flex flex-wrap gap-2">
|
||||
@foreach($game->genres()->get() as $genre)
|
||||
<span class="badge bg-primary">{{ $genre->name }}</span>
|
||||
@endforeach
|
||||
</div>
|
||||
</div>
|
||||
|
||||
@if($game->rating)
|
||||
<div class="mb-3">
|
||||
<h6 class="text-muted">Rating</h6>
|
||||
<div class="d-flex align-items-center">
|
||||
<div class="rating-stars d-flex gap-1">
|
||||
@for($i = 1; $i <= 10; $i++)
|
||||
<i class="fas fa-star {{ $i <= $game->rating ? 'text-warning' : 'text-secondary' }}"></i>
|
||||
@endfor
|
||||
</div>
|
||||
<span class="ms-2">({{ $game->rating_count }} ratings)</span>
|
||||
</div>
|
||||
</div>
|
||||
@endif
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="col-md-8">
|
||||
<div class="card bg-dark text-white mb-4">
|
||||
<div class="card-header">
|
||||
<h5 class="mb-0">About</h5>
|
||||
</div>
|
||||
<div class="card-body">
|
||||
<p class="card-text">{{ $game->summary }}</p>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
@if($game->screenshots()->count())
|
||||
<div class="card bg-dark text-white mb-4">
|
||||
<div class="card-header">
|
||||
<h5 class="mb-0">Screenshots</h5>
|
||||
</div>
|
||||
<div class="card-body">
|
||||
<div class="row g-3">
|
||||
@foreach($game->screenshots()->get() as $screenshot)
|
||||
<div class="col-md-6">
|
||||
<img src="{{ $screenshot->url }}" class="img-fluid rounded" alt="Game Screenshot">
|
||||
</div>
|
||||
@endforeach
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
@endif
|
||||
|
||||
@if($game->videos()->count())
|
||||
<div class="card bg-dark text-white mb-4">
|
||||
<div class="card-header">
|
||||
<h5 class="mb-0">Videos</h5>
|
||||
</div>
|
||||
<div class="card-body">
|
||||
<div class="row g-3">
|
||||
@foreach($game->videos()->get() as $video)
|
||||
<div class="col-12">
|
||||
<div class="ratio ratio-16x9">
|
||||
<iframe src="https://www.youtube.com/embed/{{ $video->video_id }}"
|
||||
title="{{ $video->name }}" allowfullscreen></iframe>
|
||||
</div>
|
||||
</div>
|
||||
@endforeach
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
@endif
|
||||
|
||||
<div class="card bg-dark text-white">
|
||||
<div class="card-header d-flex justify-content-between align-items-center">
|
||||
<h5 class="mb-0">Reviews</h5>
|
||||
@auth
|
||||
<a href="{{ route('games.reviews.create', $game) }}" class="btn btn-gradient btn-sm">
|
||||
<i class="fas fa-plus me-2"></i>Write a Review
|
||||
</a>
|
||||
@endauth
|
||||
</div>
|
||||
<div class="card-body">
|
||||
@if($game->reviews->isEmpty())
|
||||
<p class="text-muted mb-0">No reviews yet. Be the first to review this game!</p>
|
||||
@else
|
||||
@foreach($game->reviews as $review)
|
||||
<div class="mb-4 pb-4 border-bottom border-secondary">
|
||||
<div class="d-flex justify-content-between align-items-center mb-2">
|
||||
<div>
|
||||
<h6 class="mb-0">{{ $review->user->name }}</h6>
|
||||
<small class="text-muted">{{ $review->created_at->diffForHumans() }}</small>
|
||||
</div>
|
||||
<div class="d-flex align-items-center">
|
||||
<div class="rating-stars d-flex gap-1 me-2">
|
||||
@for($i = 1; $i <= 10; $i++)
|
||||
<i class="fas fa-star {{ $i <= $review->rating ? 'text-warning' : 'text-secondary' }}"></i>
|
||||
@endfor
|
||||
</div>
|
||||
@if($review->recommended)
|
||||
<span class="badge bg-success">Recommended</span>
|
||||
@else
|
||||
<span class="badge bg-danger">Not Recommended</span>
|
||||
@endif
|
||||
</div>
|
||||
</div>
|
||||
<p class="mb-0">{{ $review->content }}</p>
|
||||
</div>
|
||||
@endforeach
|
||||
@endif
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
@endsection
|
||||
Reference in New Issue
Block a user