mirror of
https://github.com/sp-tarkov/forge.git
synced 2025-02-12 12:10:41 -05:00
To many things to mention
Shut up.
This commit is contained in:
parent
4548ed93bd
commit
8d5920468d
@ -11,7 +11,7 @@ trim_trailing_whitespace = true
|
|||||||
[*.md]
|
[*.md]
|
||||||
trim_trailing_whitespace = false
|
trim_trailing_whitespace = false
|
||||||
|
|
||||||
[*.{yml,yaml}]
|
[*.{yml,yaml,neon}]
|
||||||
indent_size = 2
|
indent_size = 2
|
||||||
|
|
||||||
[docker-compose.yml]
|
[docker-compose.yml]
|
||||||
|
@ -38,6 +38,11 @@ class Mod extends Model
|
|||||||
return $this->hasMany(ModVersion::class);
|
return $this->hasMany(ModVersion::class);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public function versionWithHighestSptVersion()
|
||||||
|
{
|
||||||
|
return $this->hasOne(ModVersion::class)->highestSptVersion();
|
||||||
|
}
|
||||||
|
|
||||||
protected function slug(): Attribute
|
protected function slug(): Attribute
|
||||||
{
|
{
|
||||||
return Attribute::make(
|
return Attribute::make(
|
||||||
|
@ -25,8 +25,15 @@ class ModVersion extends Model
|
|||||||
return $this->belongsTo(Mod::class);
|
return $this->belongsTo(Mod::class);
|
||||||
}
|
}
|
||||||
|
|
||||||
public function spt_version(): BelongsTo
|
public function sptVersion(): belongsTo
|
||||||
{
|
{
|
||||||
return $this->belongsTo(SptVersion::class, 'spt_version_id');
|
return $this->belongsTo(SptVersion::class);
|
||||||
|
}
|
||||||
|
|
||||||
|
public function scopeHighestSptVersion($query)
|
||||||
|
{
|
||||||
|
return $query->orderByDesc(
|
||||||
|
SptVersion::select('spt_versions.version')->whereColumn('mod_versions.spt_version_id', 'spt_versions.id')
|
||||||
|
)->orderByDesc('mod_versions.version');
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -16,7 +16,7 @@ class SptVersion extends Model
|
|||||||
'color_class',
|
'color_class',
|
||||||
];
|
];
|
||||||
|
|
||||||
public function mod_versions(): HasMany
|
public function modVersions(): HasMany
|
||||||
{
|
{
|
||||||
return $this->hasMany(ModVersion::class);
|
return $this->hasMany(ModVersion::class);
|
||||||
}
|
}
|
||||||
|
17
app/View/Components/LatestModListing.php
Normal file
17
app/View/Components/LatestModListing.php
Normal file
@ -0,0 +1,17 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
namespace App\View\Components;
|
||||||
|
|
||||||
|
use App\Models\Mod;
|
||||||
|
use Illuminate\Contracts\View\View;
|
||||||
|
use Illuminate\View\Component;
|
||||||
|
|
||||||
|
class LatestModListing extends Component
|
||||||
|
{
|
||||||
|
public function render(): View
|
||||||
|
{
|
||||||
|
return view('components.latest-mod-listing', [
|
||||||
|
'latestMods' => Mod::with('versionWithHighestSptVersion.sptVersion')->latest()->take(6)->get(),
|
||||||
|
]);
|
||||||
|
}
|
||||||
|
}
|
@ -15,6 +15,7 @@
|
|||||||
"livewire/livewire": "^3.0"
|
"livewire/livewire": "^3.0"
|
||||||
},
|
},
|
||||||
"require-dev": {
|
"require-dev": {
|
||||||
|
"barryvdh/laravel-debugbar": "^3.13",
|
||||||
"fakerphp/faker": "^1.23",
|
"fakerphp/faker": "^1.23",
|
||||||
"larastan/larastan": "^2.9",
|
"larastan/larastan": "^2.9",
|
||||||
"laravel/pint": "^1.13",
|
"laravel/pint": "^1.13",
|
||||||
|
154
composer.lock
generated
154
composer.lock
generated
@ -4,7 +4,7 @@
|
|||||||
"Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies",
|
"Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies",
|
||||||
"This file is @generated automatically"
|
"This file is @generated automatically"
|
||||||
],
|
],
|
||||||
"content-hash": "2c33659a8a7e803ed06f34292950d0f2",
|
"content-hash": "97244cec2c528738d97cf3b96c127b04",
|
||||||
"packages": [
|
"packages": [
|
||||||
{
|
{
|
||||||
"name": "bacon/bacon-qr-code",
|
"name": "bacon/bacon-qr-code",
|
||||||
@ -7168,6 +7168,90 @@
|
|||||||
}
|
}
|
||||||
],
|
],
|
||||||
"packages-dev": [
|
"packages-dev": [
|
||||||
|
{
|
||||||
|
"name": "barryvdh/laravel-debugbar",
|
||||||
|
"version": "v3.13.5",
|
||||||
|
"source": {
|
||||||
|
"type": "git",
|
||||||
|
"url": "https://github.com/barryvdh/laravel-debugbar.git",
|
||||||
|
"reference": "92d86be45ee54edff735e46856f64f14b6a8bb07"
|
||||||
|
},
|
||||||
|
"dist": {
|
||||||
|
"type": "zip",
|
||||||
|
"url": "https://api.github.com/repos/barryvdh/laravel-debugbar/zipball/92d86be45ee54edff735e46856f64f14b6a8bb07",
|
||||||
|
"reference": "92d86be45ee54edff735e46856f64f14b6a8bb07",
|
||||||
|
"shasum": ""
|
||||||
|
},
|
||||||
|
"require": {
|
||||||
|
"illuminate/routing": "^9|^10|^11",
|
||||||
|
"illuminate/session": "^9|^10|^11",
|
||||||
|
"illuminate/support": "^9|^10|^11",
|
||||||
|
"maximebf/debugbar": "~1.22.0",
|
||||||
|
"php": "^8.0",
|
||||||
|
"symfony/finder": "^6|^7"
|
||||||
|
},
|
||||||
|
"require-dev": {
|
||||||
|
"mockery/mockery": "^1.3.3",
|
||||||
|
"orchestra/testbench-dusk": "^5|^6|^7|^8|^9",
|
||||||
|
"phpunit/phpunit": "^9.6|^10.5",
|
||||||
|
"squizlabs/php_codesniffer": "^3.5"
|
||||||
|
},
|
||||||
|
"type": "library",
|
||||||
|
"extra": {
|
||||||
|
"branch-alias": {
|
||||||
|
"dev-master": "3.13-dev"
|
||||||
|
},
|
||||||
|
"laravel": {
|
||||||
|
"providers": [
|
||||||
|
"Barryvdh\\Debugbar\\ServiceProvider"
|
||||||
|
],
|
||||||
|
"aliases": {
|
||||||
|
"Debugbar": "Barryvdh\\Debugbar\\Facades\\Debugbar"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"autoload": {
|
||||||
|
"files": [
|
||||||
|
"src/helpers.php"
|
||||||
|
],
|
||||||
|
"psr-4": {
|
||||||
|
"Barryvdh\\Debugbar\\": "src/"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"notification-url": "https://packagist.org/downloads/",
|
||||||
|
"license": [
|
||||||
|
"MIT"
|
||||||
|
],
|
||||||
|
"authors": [
|
||||||
|
{
|
||||||
|
"name": "Barry vd. Heuvel",
|
||||||
|
"email": "barryvdh@gmail.com"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"description": "PHP Debugbar integration for Laravel",
|
||||||
|
"keywords": [
|
||||||
|
"debug",
|
||||||
|
"debugbar",
|
||||||
|
"laravel",
|
||||||
|
"profiler",
|
||||||
|
"webprofiler"
|
||||||
|
],
|
||||||
|
"support": {
|
||||||
|
"issues": "https://github.com/barryvdh/laravel-debugbar/issues",
|
||||||
|
"source": "https://github.com/barryvdh/laravel-debugbar/tree/v3.13.5"
|
||||||
|
},
|
||||||
|
"funding": [
|
||||||
|
{
|
||||||
|
"url": "https://fruitcake.nl",
|
||||||
|
"type": "custom"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"url": "https://github.com/barryvdh",
|
||||||
|
"type": "github"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"time": "2024-04-12T11:20:37+00:00"
|
||||||
|
},
|
||||||
{
|
{
|
||||||
"name": "fakerphp/faker",
|
"name": "fakerphp/faker",
|
||||||
"version": "v1.23.1",
|
"version": "v1.23.1",
|
||||||
@ -7521,6 +7605,74 @@
|
|||||||
},
|
},
|
||||||
"time": "2024-04-30T15:02:26+00:00"
|
"time": "2024-04-30T15:02:26+00:00"
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
"name": "maximebf/debugbar",
|
||||||
|
"version": "v1.22.3",
|
||||||
|
"source": {
|
||||||
|
"type": "git",
|
||||||
|
"url": "https://github.com/maximebf/php-debugbar.git",
|
||||||
|
"reference": "7aa9a27a0b1158ed5ad4e7175e8d3aee9a818b96"
|
||||||
|
},
|
||||||
|
"dist": {
|
||||||
|
"type": "zip",
|
||||||
|
"url": "https://api.github.com/repos/maximebf/php-debugbar/zipball/7aa9a27a0b1158ed5ad4e7175e8d3aee9a818b96",
|
||||||
|
"reference": "7aa9a27a0b1158ed5ad4e7175e8d3aee9a818b96",
|
||||||
|
"shasum": ""
|
||||||
|
},
|
||||||
|
"require": {
|
||||||
|
"php": "^7.2|^8",
|
||||||
|
"psr/log": "^1|^2|^3",
|
||||||
|
"symfony/var-dumper": "^4|^5|^6|^7"
|
||||||
|
},
|
||||||
|
"require-dev": {
|
||||||
|
"dbrekelmans/bdi": "^1",
|
||||||
|
"phpunit/phpunit": "^8|^9",
|
||||||
|
"symfony/panther": "^1|^2.1",
|
||||||
|
"twig/twig": "^1.38|^2.7|^3.0"
|
||||||
|
},
|
||||||
|
"suggest": {
|
||||||
|
"kriswallsmith/assetic": "The best way to manage assets",
|
||||||
|
"monolog/monolog": "Log using Monolog",
|
||||||
|
"predis/predis": "Redis storage"
|
||||||
|
},
|
||||||
|
"type": "library",
|
||||||
|
"extra": {
|
||||||
|
"branch-alias": {
|
||||||
|
"dev-master": "1.22-dev"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"autoload": {
|
||||||
|
"psr-4": {
|
||||||
|
"DebugBar\\": "src/DebugBar/"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"notification-url": "https://packagist.org/downloads/",
|
||||||
|
"license": [
|
||||||
|
"MIT"
|
||||||
|
],
|
||||||
|
"authors": [
|
||||||
|
{
|
||||||
|
"name": "Maxime Bouroumeau-Fuseau",
|
||||||
|
"email": "maxime.bouroumeau@gmail.com",
|
||||||
|
"homepage": "http://maximebf.com"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "Barry vd. Heuvel",
|
||||||
|
"email": "barryvdh@gmail.com"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"description": "Debug bar in the browser for php application",
|
||||||
|
"homepage": "https://github.com/maximebf/php-debugbar",
|
||||||
|
"keywords": [
|
||||||
|
"debug",
|
||||||
|
"debugbar"
|
||||||
|
],
|
||||||
|
"support": {
|
||||||
|
"issues": "https://github.com/maximebf/php-debugbar/issues",
|
||||||
|
"source": "https://github.com/maximebf/php-debugbar/tree/v1.22.3"
|
||||||
|
},
|
||||||
|
"time": "2024-04-03T19:39:26+00:00"
|
||||||
|
},
|
||||||
{
|
{
|
||||||
"name": "mockery/mockery",
|
"name": "mockery/mockery",
|
||||||
"version": "1.6.11",
|
"version": "1.6.11",
|
||||||
|
@ -14,7 +14,7 @@ class SptVersionFactory extends Factory
|
|||||||
{
|
{
|
||||||
return [
|
return [
|
||||||
'version' => $this->faker->numerify('1.#.#'),
|
'version' => $this->faker->numerify('1.#.#'),
|
||||||
'color_class' => $this->faker->word(),
|
'color_class' => $this->faker->randomElement(['green', 'yellow', 'red', 'gray']),
|
||||||
'created_at' => Carbon::now(),
|
'created_at' => Carbon::now(),
|
||||||
'updated_at' => Carbon::now(),
|
'updated_at' => Carbon::now(),
|
||||||
];
|
];
|
||||||
|
24
phpstan.neon
24
phpstan.neon
@ -1,6 +1,22 @@
|
|||||||
includes:
|
includes:
|
||||||
- vendor/larastan/larastan/extension.neon
|
- vendor/larastan/larastan/extension.neon
|
||||||
|
|
||||||
parameters:
|
parameters:
|
||||||
paths:
|
level: 6
|
||||||
- app/
|
|
||||||
level: 5
|
paths:
|
||||||
|
- app/
|
||||||
|
- tests/
|
||||||
|
|
||||||
|
scanFiles:
|
||||||
|
- tests/Pest.php
|
||||||
|
- vendor/mockery/mockery/library/helpers.php
|
||||||
|
|
||||||
|
ignoreErrors:
|
||||||
|
- message: '#^Undefined variable: \$this$#'
|
||||||
|
paths:
|
||||||
|
- tests/*
|
||||||
|
|
||||||
|
- message: '#Call to an undefined method Pest\\Expectation|Pest\\Support\\Extendable::#'
|
||||||
|
paths:
|
||||||
|
- tests/*
|
||||||
|
@ -5,3 +5,12 @@
|
|||||||
[x-cloak] {
|
[x-cloak] {
|
||||||
display: none;
|
display: none;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
button[type="submit"]:not([role="menuitem"]),
|
||||||
|
button[type="button"]:not([role="menuitem"]) {
|
||||||
|
@apply border border-transparent rounded-md text-white bg-gray-900 hover:bg-gray-800 focus:outline-none focus:ring-2 focus:ring-offset-2 focus:ring-gray-600
|
||||||
|
}
|
||||||
|
|
||||||
|
input[type="checkbox"] {
|
||||||
|
@apply text-gray-800 focus:ring-gray-600 border-gray-300 rounded
|
||||||
|
}
|
||||||
|
File diff suppressed because one or more lines are too long
Before Width: | Height: | Size: 428 B After Width: | Height: | Size: 22 KiB |
File diff suppressed because one or more lines are too long
48
resources/views/components/latest-mod-listing.blade.php
Normal file
48
resources/views/components/latest-mod-listing.blade.php
Normal file
@ -0,0 +1,48 @@
|
|||||||
|
<div class="mx-auto max-w-7xl px-4 py-12 sm:px-6 lg:px-8">
|
||||||
|
|
||||||
|
<div class="md:flex md:items-center md:justify-between border-b pb-4 mb-6">
|
||||||
|
<div class="min-w-0 flex-1">
|
||||||
|
<h2 class="text-2xl font-bold leading-7 text-gray-900 sm:truncate sm:text-3xl sm:tracking-tight">{{ __('Latest Mods') }}</h2>
|
||||||
|
</div>
|
||||||
|
<div class="mt-4 flex md:ml-4 md:mt-0">
|
||||||
|
<button type="button" class="ml-3 inline-flex items-center rounded-md bg-indigo-600 px-3 py-2 text-sm font-semibold text-white shadow-sm hover:bg-indigo-700 focus-visible:outline focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-indigo-600">{{ __('View All') }}</button>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<ul role="list" class="grid grid-cols-1 gap-6 sm:grid-cols-2 lg:grid-cols-3">
|
||||||
|
@foreach ($latestMods as $mod)
|
||||||
|
<li class="col-span-1 divide-y divide-gray-200 rounded-lg bg-white shadow">
|
||||||
|
<div class="flex w-full items-center justify-between space-x-6 p-6">
|
||||||
|
<img class="h-10 w-10 flex-shrink-0 rounded-[5px] bg-gray-300" src="https://placehold.co/300x300/EEE/31343C?font=open-sans&text=MOD" alt="">
|
||||||
|
<div class="flex-1 truncate">
|
||||||
|
<div class="flex items-center space-x-3">
|
||||||
|
<h3 class="truncate text-sm font-medium text-gray-900">{{ $mod->name }}</h3>
|
||||||
|
<span class="inline-flex flex-shrink-0 items-center rounded-full bg-{{ $mod->versionWithHighestSptVersion->sptVersion->color_class }}-50 px-1.5 py-0.5 text-xs font-medium text-{{ $mod->versionWithHighestSptVersion->sptVersion->color_class }}-700 ring-1 ring-inset ring-{{ $mod->versionWithHighestSptVersion->sptVersion->color_class }}-600/20">{{ $mod->versionWithHighestSptVersion->sptVersion->version }}</span>
|
||||||
|
</div>
|
||||||
|
<p class="mt-1 truncate text-sm text-gray-500">{{ $mod->description }}</p>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div>
|
||||||
|
<div class="-mt-px flex divide-x divide-gray-200">
|
||||||
|
<div class="flex w-0 flex-1">
|
||||||
|
<a href="/mod/{{ $mod->id }}/{{ $mod->slug }}" class="relative -mr-px inline-flex w-0 flex-1 items-center justify-center gap-x-3 rounded-bl-lg border border-t-0 border-transparent py-4 text-sm font-semibold text-gray-900">
|
||||||
|
<svg class="h-5 w-5 text-gray-400" xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24" stroke-width="1.5" stroke="currentColor">
|
||||||
|
<path stroke-linecap="round" stroke-linejoin="round" d="M19.5 14.25v-2.625a3.375 3.375 0 0 0-3.375-3.375h-1.5A1.125 1.125 0 0 1 13.5 7.125v-1.5a3.375 3.375 0 0 0-3.375-3.375H8.25m0 12.75h7.5m-7.5 3H12M10.5 2.25H5.625c-.621 0-1.125.504-1.125 1.125v17.25c0 .621.504 1.125 1.125 1.125h12.75c.621 0 1.125-.504 1.125-1.125V11.25a9 9 0 0 0-9-9Z"/>
|
||||||
|
</svg>
|
||||||
|
{{ __('View Details') }}
|
||||||
|
</a>
|
||||||
|
</div>
|
||||||
|
<div class="-ml-px flex w-0 flex-1">
|
||||||
|
<a href="/mod/{{ $mod->id }}/{{ $mod->slug }}/download" class="relative inline-flex w-0 flex-1 items-center justify-center gap-x-3 rounded-br-lg border border-t-0 border-transparent py-4 text-sm font-semibold text-gray-900">
|
||||||
|
<svg class="h-5 w-5 text-gray-400" xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24" stroke-width="1.5" stroke="currentColor">
|
||||||
|
<path stroke-linecap="round" stroke-linejoin="round" d="M12 9.75v6.75m0 0-3-3m3 3 3-3m-8.25 6a4.5 4.5 0 0 1-1.41-8.775 5.25 5.25 0 0 1 10.233-2.33 3 3 0 0 1 3.758 3.848A3.752 3.752 0 0 1 18 19.5H6.75Z"/>
|
||||||
|
</svg>
|
||||||
|
{{ __('Download') }}
|
||||||
|
</a>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</li>
|
||||||
|
@endforeach
|
||||||
|
</ul>
|
||||||
|
</div>
|
4
resources/views/components/warning.blade.php
Normal file
4
resources/views/components/warning.blade.php
Normal file
@ -0,0 +1,4 @@
|
|||||||
|
<div class="items-center justify-between gap-x-6 bg-gray-900 px-6 py-2.5 sm:pr-3.5 lg:pl-8">
|
||||||
|
<p class="text-center text-sm leading-6 text-white">Notice: The Forge is currently under
|
||||||
|
<em class="font-bold">heavy</em> construction. Expect nothing to work.</p>
|
||||||
|
</div>
|
29
resources/views/home.blade.php
Normal file
29
resources/views/home.blade.php
Normal file
@ -0,0 +1,29 @@
|
|||||||
|
<x-app-layout>
|
||||||
|
|
||||||
|
<div class="py-12">
|
||||||
|
<div class="max-w-7xl mx-auto sm:px-6 lg:px-8">
|
||||||
|
<div class="bg-white overflow-hidden shadow-xl sm:rounded-lg">
|
||||||
|
{{-- Welcome Section --}}
|
||||||
|
<div class="relative isolate overflow-hidden bg-gray-900 px-6 py-24 sm:py-32 lg:px-8 rounded-md">
|
||||||
|
<video autoplay muted loop class="absolute inset-0 -z-10 h-full w-full object-cover">
|
||||||
|
<source src="/video/welcome.mp4" type="video/mp4">
|
||||||
|
</video>
|
||||||
|
<div class="hidden sm:absolute sm:-top-10 sm:right-1/2 sm:-z-10 sm:mr-10 sm:block sm:transform-gpu sm:blur-3xl" aria-hidden="true">
|
||||||
|
<div class="aspect-[1097/845] w-[68.5625rem] bg-gradient-to-tr from-[#333] to-[#000] opacity-20" style="clip-path: polygon(74.1% 44.1%, 100% 61.6%, 97.5% 26.9%, 85.5% 0.1%, 80.7% 2%, 72.5% 32.5%, 60.2% 62.4%, 52.4% 68.1%, 47.5% 58.3%, 45.2% 34.5%, 27.5% 76.7%, 0.1% 64.9%, 17.9% 100%, 27.6% 76.8%, 76.1% 97.7%, 74.1% 44.1%)"></div>
|
||||||
|
</div>
|
||||||
|
<div class="absolute -top-52 left-1/2 -z-10 -translate-x-1/2 transform-gpu blur-3xl sm:top-[-28rem] sm:ml-16 sm:translate-x-0 sm:transform-gpu" aria-hidden="true">
|
||||||
|
<div class="aspect-[1097/845] w-[68.5625rem] bg-gradient-to-tr from-[#333] to-[#000] opacity-20" style="clip-path: polygon(74.1% 44.1%, 100% 61.6%, 97.5% 26.9%, 85.5% 0.1%, 80.7% 2%, 72.5% 32.5%, 60.2% 62.4%, 52.4% 68.1%, 47.5% 58.3%, 45.2% 34.5%, 27.5% 76.7%, 0.1% 64.9%, 17.9% 100%, 27.6% 76.8%, 76.1% 97.7%, 74.1% 44.1%)"></div>
|
||||||
|
</div>
|
||||||
|
<div class="mx-auto max-w-2xl text-center">
|
||||||
|
<h2 class="text-4xl font-bold tracking-tight text-white sm:text-6xl drop-shadow-md">Step into
|
||||||
|
<em>{{ config('app.name', 'The Forge') }}</em></h2>
|
||||||
|
<p class="mt-6 text-lg leading-8 text-gray-300 drop-shadow-md">The greatest resource available for Single Player Tarkov modifications. Where modding legends are made. Discover powerful tools, expert-written guides, and exclusive mods. Craft your vision. Transform the game.</p>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<x-latest-mod-listing/>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</x-app-layout>
|
||||||
|
|
@ -1,45 +1,47 @@
|
|||||||
<!DOCTYPE html>
|
<!DOCTYPE html>
|
||||||
<html lang="{{ str_replace('_', '-', app()->getLocale()) }}">
|
<html lang="{{ str_replace('_', '-', app()->getLocale()) }}">
|
||||||
<head>
|
<head>
|
||||||
<meta charset="utf-8">
|
<meta charset="utf-8">
|
||||||
<meta name="viewport" content="width=device-width, initial-scale=1">
|
<meta name="viewport" content="width=device-width, initial-scale=1">
|
||||||
<meta name="csrf-token" content="{{ csrf_token() }}">
|
<meta name="csrf-token" content="{{ csrf_token() }}">
|
||||||
|
|
||||||
<title>{{ config('app.name', 'Laravel') }}</title>
|
<title>{{ config('app.name', 'The Forge') }}</title>
|
||||||
|
|
||||||
<!-- Fonts -->
|
<!-- Fonts -->
|
||||||
<link rel="preconnect" href="https://fonts.bunny.net">
|
<link rel="preconnect" href="https://fonts.bunny.net">
|
||||||
<link href="https://fonts.bunny.net/css?family=figtree:400,500,600&display=swap" rel="stylesheet" />
|
<link href="https://fonts.bunny.net/css?family=figtree:400,500,600&display=swap" rel="stylesheet"/>
|
||||||
|
|
||||||
<!-- Scripts -->
|
<!-- Scripts -->
|
||||||
@vite(['resources/css/app.css', 'resources/js/app.js'])
|
@vite(['resources/css/app.css', 'resources/js/app.js'])
|
||||||
|
|
||||||
<!-- Styles -->
|
<!-- Styles -->
|
||||||
@livewireStyles
|
@livewireStyles
|
||||||
</head>
|
</head>
|
||||||
<body class="font-sans antialiased">
|
<body class="font-sans antialiased">
|
||||||
<x-banner />
|
|
||||||
|
|
||||||
<div class="min-h-screen bg-gray-100">
|
<x-warning/>
|
||||||
@livewire('navigation-menu')
|
<x-banner/>
|
||||||
|
|
||||||
<!-- Page Heading -->
|
<div class="min-h-screen bg-gray-100">
|
||||||
@if (isset($header))
|
@livewire('navigation-menu')
|
||||||
<header class="bg-white shadow">
|
|
||||||
<div class="max-w-7xl mx-auto py-6 px-4 sm:px-6 lg:px-8">
|
|
||||||
{{ $header }}
|
|
||||||
</div>
|
|
||||||
</header>
|
|
||||||
@endif
|
|
||||||
|
|
||||||
<!-- Page Content -->
|
<!-- Page Heading -->
|
||||||
<main>
|
@if (isset($header))
|
||||||
{{ $slot }}
|
<header class="bg-white shadow">
|
||||||
</main>
|
<div class="max-w-7xl mx-auto py-6 px-4 sm:px-6 lg:px-8">
|
||||||
</div>
|
{{ $header }}
|
||||||
|
</div>
|
||||||
|
</header>
|
||||||
|
@endif
|
||||||
|
|
||||||
@stack('modals')
|
<!-- Page Content -->
|
||||||
|
<main>
|
||||||
|
{{ $slot }}
|
||||||
|
</main>
|
||||||
|
</div>
|
||||||
|
|
||||||
@livewireScripts
|
@stack('modals')
|
||||||
</body>
|
|
||||||
|
@livewireScripts
|
||||||
|
</body>
|
||||||
</html>
|
</html>
|
||||||
|
54
resources/views/livewire/latest-mod-listing.blade.php
Normal file
54
resources/views/livewire/latest-mod-listing.blade.php
Normal file
@ -0,0 +1,54 @@
|
|||||||
|
<div class="pb-6">
|
||||||
|
<div class="max-w-7xl mx-auto sm:px-6 lg:px-8">
|
||||||
|
<div class="bg-white overflow-hidden shadow-xl sm:rounded-lg">
|
||||||
|
|
||||||
|
<div class="border-b border-gray-200 bg-white px-4 py-5 sm:px-6">
|
||||||
|
<div class="-ml-4 -mt-2 flex flex-wrap items-center justify-between sm:flex-nowrap">
|
||||||
|
<div class="ml-4 mt-2">
|
||||||
|
<h3 class="text-base font-semibold leading-6 text-gray-900">{{ __('Latest Mods') }}</h3>
|
||||||
|
</div>
|
||||||
|
<div class="ml-4 mt-2 flex-shrink-0">
|
||||||
|
<button type="button" class="relative inline-flex items-center rounded-md bg-indigo-600 px-3 py-2 text-sm font-semibold text-white shadow-sm hover:bg-indigo-500 focus-visible:outline focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-indigo-600">{{ __('View All') }}</button>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<ul role="list" class="grid grid-cols-1 gap-6 sm:grid-cols-2 lg:grid-cols-3">
|
||||||
|
@foreach ($latestMods as $mod)
|
||||||
|
<li class="col-span-1 divide-y divide-gray-200 rounded-lg bg-white shadow">
|
||||||
|
<div class="flex w-full items-center justify-between space-x-6 p-6">
|
||||||
|
<div class="flex-1 truncate">
|
||||||
|
<div class="flex items-center space-x-3">
|
||||||
|
<h3 class="truncate text-sm font-medium text-gray-900">{{ $mod->name }}</h3>
|
||||||
|
<span class="inline-flex flex-shrink-0 items-center rounded-full bg-{{ $mod->spt_version_color_class }}-50 px-1.5 py-0.5 text-xs font-medium text-{{ $mod->spt_version_color_class }}-700 ring-1 ring-inset ring-{{ $mod->spt_version_color_class }}-600/20">{{ $mod->spt_version }}</span>
|
||||||
|
</div>
|
||||||
|
<p class="mt-1 truncate text-sm text-gray-500">{{ $mod->description }}</p>
|
||||||
|
</div>
|
||||||
|
<img class="h-10 w-10 flex-shrink-0 rounded-[5px] bg-gray-300" src="https://placehold.co/300x300/EEE/31343C?font=open-sans&text=MOD" alt="">
|
||||||
|
</div>
|
||||||
|
<div>
|
||||||
|
<div class="-mt-px flex divide-x divide-gray-200">
|
||||||
|
<div class="flex w-0 flex-1">
|
||||||
|
<a href="/mod/{{ $mod->id }}/{{ $mod->slug }}" class="relative -mr-px inline-flex w-0 flex-1 items-center justify-center gap-x-3 rounded-bl-lg border border-transparent py-4 text-sm font-semibold text-gray-900">
|
||||||
|
<svg class="h-5 w-5 text-gray-400" xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24" stroke-width="1.5" stroke="currentColor">
|
||||||
|
<path stroke-linecap="round" stroke-linejoin="round" d="M19.5 14.25v-2.625a3.375 3.375 0 0 0-3.375-3.375h-1.5A1.125 1.125 0 0 1 13.5 7.125v-1.5a3.375 3.375 0 0 0-3.375-3.375H8.25m0 12.75h7.5m-7.5 3H12M10.5 2.25H5.625c-.621 0-1.125.504-1.125 1.125v17.25c0 .621.504 1.125 1.125 1.125h12.75c.621 0 1.125-.504 1.125-1.125V11.25a9 9 0 0 0-9-9Z"/>
|
||||||
|
</svg>
|
||||||
|
{{ __('View Details') }}
|
||||||
|
</a>
|
||||||
|
</div>
|
||||||
|
<div class="-ml-px flex w-0 flex-1">
|
||||||
|
<a href="/mod/{{ $mod->id }}/{{ $mod->slug }}/download" class="relative inline-flex w-0 flex-1 items-center justify-center gap-x-3 rounded-br-lg border border-transparent py-4 text-sm font-semibold text-gray-900">
|
||||||
|
<svg class="h-5 w-5 text-gray-400" xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24" stroke-width="1.5" stroke="currentColor">
|
||||||
|
<path stroke-linecap="round" stroke-linejoin="round" d="M12 9.75v6.75m0 0-3-3m3 3 3-3m-8.25 6a4.5 4.5 0 0 1-1.41-8.775 5.25 5.25 0 0 1 10.233-2.33 3 3 0 0 1 3.758 3.848A3.752 3.752 0 0 1 18 19.5H6.75Z"/>
|
||||||
|
</svg>
|
||||||
|
{{ __('Download') }}
|
||||||
|
</a>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</li>
|
||||||
|
@endforeach
|
||||||
|
</ul>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
@ -6,7 +6,7 @@
|
|||||||
<!-- Logo -->
|
<!-- Logo -->
|
||||||
<div class="shrink-0 flex items-center">
|
<div class="shrink-0 flex items-center">
|
||||||
<a href="{{ route('dashboard') }}">
|
<a href="{{ route('dashboard') }}">
|
||||||
<x-application-mark class="block h-9 w-auto" />
|
<x-application-mark class="block h-9 w-auto"/>
|
||||||
</a>
|
</a>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
@ -29,7 +29,7 @@
|
|||||||
{{ Auth::user()->currentTeam->name }}
|
{{ Auth::user()->currentTeam->name }}
|
||||||
|
|
||||||
<svg class="ms-2 -me-0.5 h-4 w-4" xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24" stroke-width="1.5" stroke="currentColor">
|
<svg class="ms-2 -me-0.5 h-4 w-4" xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24" stroke-width="1.5" stroke="currentColor">
|
||||||
<path stroke-linecap="round" stroke-linejoin="round" d="M8.25 15L12 18.75 15.75 15m-7.5-6L12 5.25 15.75 9" />
|
<path stroke-linecap="round" stroke-linejoin="round" d="M8.25 15L12 18.75 15.75 15m-7.5-6L12 5.25 15.75 9"/>
|
||||||
</svg>
|
</svg>
|
||||||
</button>
|
</button>
|
||||||
</span>
|
</span>
|
||||||
@ -62,7 +62,7 @@
|
|||||||
</div>
|
</div>
|
||||||
|
|
||||||
@foreach (Auth::user()->allTeams() as $team)
|
@foreach (Auth::user()->allTeams() as $team)
|
||||||
<x-switchable-team :team="$team" />
|
<x-switchable-team :team="$team"/>
|
||||||
@endforeach
|
@endforeach
|
||||||
@endif
|
@endif
|
||||||
</div>
|
</div>
|
||||||
@ -75,21 +75,23 @@
|
|||||||
<div class="ms-3 relative">
|
<div class="ms-3 relative">
|
||||||
<x-dropdown align="right" width="48">
|
<x-dropdown align="right" width="48">
|
||||||
<x-slot name="trigger">
|
<x-slot name="trigger">
|
||||||
@if (Laravel\Jetstream\Jetstream::managesProfilePhotos())
|
@auth()
|
||||||
<button class="flex text-sm border-2 border-transparent rounded-full focus:outline-none focus:border-gray-300 transition">
|
@if (Laravel\Jetstream\Jetstream::managesProfilePhotos())
|
||||||
<img class="h-8 w-8 rounded-full object-cover" src="{{ Auth::user()->profile_photo_url }}" alt="{{ Auth::user()->name }}" />
|
<button class="flex text-sm border-2 border-transparent rounded-full focus:outline-none focus:border-gray-300 transition">
|
||||||
</button>
|
<img class="h-8 w-8 rounded-full object-cover" src="{{ Auth::user()->profile_photo_url }}" alt="{{ Auth::user()->name }}"/>
|
||||||
@else
|
|
||||||
<span class="inline-flex rounded-md">
|
|
||||||
<button type="button" class="inline-flex items-center px-3 py-2 border border-transparent text-sm leading-4 font-medium rounded-md text-gray-500 bg-white hover:text-gray-700 focus:outline-none focus:bg-gray-50 active:bg-gray-50 transition ease-in-out duration-150">
|
|
||||||
{{ Auth::user()->name }}
|
|
||||||
|
|
||||||
<svg class="ms-2 -me-0.5 h-4 w-4" xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24" stroke-width="1.5" stroke="currentColor">
|
|
||||||
<path stroke-linecap="round" stroke-linejoin="round" d="M19.5 8.25l-7.5 7.5-7.5-7.5" />
|
|
||||||
</svg>
|
|
||||||
</button>
|
</button>
|
||||||
</span>
|
@else
|
||||||
@endif
|
<span class="inline-flex rounded-md">
|
||||||
|
<button type="button" class="inline-flex items-center px-3 py-2 border border-transparent text-sm leading-4 font-medium rounded-md text-gray-500 bg-white hover:text-gray-700 focus:outline-none focus:bg-gray-50 active:bg-gray-50 transition ease-in-out duration-150">
|
||||||
|
{{ Auth::user()->name }}
|
||||||
|
|
||||||
|
<svg class="ms-2 -me-0.5 h-4 w-4" xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24" stroke-width="1.5" stroke="currentColor">
|
||||||
|
<path stroke-linecap="round" stroke-linejoin="round" d="M19.5 8.25l-7.5 7.5-7.5-7.5"/>
|
||||||
|
</svg>
|
||||||
|
</button>
|
||||||
|
</span>
|
||||||
|
@endif
|
||||||
|
@endauth
|
||||||
</x-slot>
|
</x-slot>
|
||||||
|
|
||||||
<x-slot name="content">
|
<x-slot name="content">
|
||||||
@ -114,8 +116,7 @@
|
|||||||
<form method="POST" action="{{ route('logout') }}" x-data>
|
<form method="POST" action="{{ route('logout') }}" x-data>
|
||||||
@csrf
|
@csrf
|
||||||
|
|
||||||
<x-dropdown-link href="{{ route('logout') }}"
|
<x-dropdown-link href="{{ route('logout') }}" @click.prevent="$root.submit();">
|
||||||
@click.prevent="$root.submit();">
|
|
||||||
{{ __('Log Out') }}
|
{{ __('Log Out') }}
|
||||||
</x-dropdown-link>
|
</x-dropdown-link>
|
||||||
</form>
|
</form>
|
||||||
@ -128,8 +129,8 @@
|
|||||||
<div class="-me-2 flex items-center sm:hidden">
|
<div class="-me-2 flex items-center sm:hidden">
|
||||||
<button @click="open = ! open" class="inline-flex items-center justify-center p-2 rounded-md text-gray-400 hover:text-gray-500 hover:bg-gray-100 focus:outline-none focus:bg-gray-100 focus:text-gray-500 transition duration-150 ease-in-out">
|
<button @click="open = ! open" class="inline-flex items-center justify-center p-2 rounded-md text-gray-400 hover:text-gray-500 hover:bg-gray-100 focus:outline-none focus:bg-gray-100 focus:text-gray-500 transition duration-150 ease-in-out">
|
||||||
<svg class="h-6 w-6" stroke="currentColor" fill="none" viewBox="0 0 24 24">
|
<svg class="h-6 w-6" stroke="currentColor" fill="none" viewBox="0 0 24 24">
|
||||||
<path :class="{'hidden': open, 'inline-flex': ! open }" class="inline-flex" stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M4 6h16M4 12h16M4 18h16" />
|
<path :class="{'hidden': open, 'inline-flex': ! open }" class="inline-flex" stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M4 6h16M4 12h16M4 18h16"/>
|
||||||
<path :class="{'hidden': ! open, 'inline-flex': open }" class="hidden" stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M6 18L18 6M6 6l12 12" />
|
<path :class="{'hidden': ! open, 'inline-flex': open }" class="hidden" stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M6 18L18 6M6 6l12 12"/>
|
||||||
</svg>
|
</svg>
|
||||||
</button>
|
</button>
|
||||||
</div>
|
</div>
|
||||||
@ -147,16 +148,18 @@
|
|||||||
<!-- Responsive Settings Options -->
|
<!-- Responsive Settings Options -->
|
||||||
<div class="pt-4 pb-1 border-t border-gray-200">
|
<div class="pt-4 pb-1 border-t border-gray-200">
|
||||||
<div class="flex items-center px-4">
|
<div class="flex items-center px-4">
|
||||||
@if (Laravel\Jetstream\Jetstream::managesProfilePhotos())
|
@auth()
|
||||||
<div class="shrink-0 me-3">
|
@if (Laravel\Jetstream\Jetstream::managesProfilePhotos())
|
||||||
<img class="h-10 w-10 rounded-full object-cover" src="{{ Auth::user()->profile_photo_url }}" alt="{{ Auth::user()->name }}" />
|
<div class="shrink-0 me-3">
|
||||||
</div>
|
<img class="h-10 w-10 rounded-full object-cover" src="{{ Auth::user()->profile_photo_url }}" alt="{{ Auth::user()->name }}"/>
|
||||||
@endif
|
</div>
|
||||||
|
@endif
|
||||||
|
|
||||||
<div>
|
<div>
|
||||||
<div class="font-medium text-base text-gray-800">{{ Auth::user()->name }}</div>
|
<div class="font-medium text-base text-gray-800">{{ Auth::user()->name }}</div>
|
||||||
<div class="font-medium text-sm text-gray-500">{{ Auth::user()->email }}</div>
|
<div class="font-medium text-sm text-gray-500">{{ Auth::user()->email }}</div>
|
||||||
</div>
|
</div>
|
||||||
|
@endauth()
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div class="mt-3 space-y-1">
|
<div class="mt-3 space-y-1">
|
||||||
@ -175,8 +178,7 @@
|
|||||||
<form method="POST" action="{{ route('logout') }}" x-data>
|
<form method="POST" action="{{ route('logout') }}" x-data>
|
||||||
@csrf
|
@csrf
|
||||||
|
|
||||||
<x-responsive-nav-link href="{{ route('logout') }}"
|
<x-responsive-nav-link href="{{ route('logout') }}" @click.prevent="$root.submit();">
|
||||||
@click.prevent="$root.submit();">
|
|
||||||
{{ __('Log Out') }}
|
{{ __('Log Out') }}
|
||||||
</x-responsive-nav-link>
|
</x-responsive-nav-link>
|
||||||
</form>
|
</form>
|
||||||
@ -209,7 +211,7 @@
|
|||||||
</div>
|
</div>
|
||||||
|
|
||||||
@foreach (Auth::user()->allTeams() as $team)
|
@foreach (Auth::user()->allTeams() as $team)
|
||||||
<x-switchable-team :team="$team" component="responsive-nav-link" />
|
<x-switchable-team :team="$team" component="responsive-nav-link"/>
|
||||||
@endforeach
|
@endforeach
|
||||||
@endif
|
@endif
|
||||||
@endif
|
@endif
|
||||||
|
@ -3,7 +3,7 @@
|
|||||||
use Illuminate\Support\Facades\Route;
|
use Illuminate\Support\Facades\Route;
|
||||||
|
|
||||||
Route::get('/', function () {
|
Route::get('/', function () {
|
||||||
return view('welcome');
|
return view('home');
|
||||||
});
|
});
|
||||||
|
|
||||||
Route::middleware(['auth:sanctum', config('jetstream.auth_session'), 'verified'])->group(function () {
|
Route::middleware(['auth:sanctum', config('jetstream.auth_session'), 'verified'])->group(function () {
|
||||||
|
2
storage/debugbar/.gitignore
vendored
Normal file
2
storage/debugbar/.gitignore
vendored
Normal file
@ -0,0 +1,2 @@
|
|||||||
|
*
|
||||||
|
!.gitignore
|
@ -1,23 +1,29 @@
|
|||||||
import defaultTheme from 'tailwindcss/defaultTheme';
|
import defaultTheme from "tailwindcss/defaultTheme";
|
||||||
import forms from '@tailwindcss/forms';
|
import forms from "@tailwindcss/forms";
|
||||||
import typography from '@tailwindcss/typography';
|
import typography from "@tailwindcss/typography";
|
||||||
|
|
||||||
/** @type {import('tailwindcss').Config} */
|
/** @type {import('tailwindcss').Config} */
|
||||||
export default {
|
export default {
|
||||||
content: [
|
content: [
|
||||||
'./vendor/laravel/framework/src/Illuminate/Pagination/resources/views/*.blade.php',
|
"./vendor/laravel/framework/src/Illuminate/Pagination/resources/views/*.blade.php",
|
||||||
'./vendor/laravel/jetstream/**/*.blade.php',
|
"./vendor/laravel/jetstream/**/*.blade.php",
|
||||||
'./storage/framework/views/*.php',
|
"./storage/framework/views/*.php",
|
||||||
'./resources/views/**/*.blade.php',
|
"./resources/views/**/*.blade.php",
|
||||||
],
|
],
|
||||||
|
|
||||||
theme: {
|
theme: {
|
||||||
extend: {
|
extend: {
|
||||||
fontFamily: {
|
fontFamily: {
|
||||||
sans: ['Figtree', ...defaultTheme.fontFamily.sans],
|
sans: ["Figtree", ...defaultTheme.fontFamily.sans],
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
|
|
||||||
|
safelist: [
|
||||||
|
{
|
||||||
|
pattern: /(bg|text|ring)-(green|yellow|red|grey)-(50|700|600\/20)/,
|
||||||
|
},
|
||||||
|
],
|
||||||
|
|
||||||
plugins: [forms, typography],
|
plugins: [forms, typography],
|
||||||
};
|
};
|
||||||
|
Loading…
x
Reference in New Issue
Block a user