diff --git a/.gitignore b/.gitignore index d38ba36..5711796 100644 --- a/.gitignore +++ b/.gitignore @@ -19,3 +19,5 @@ yarn-error.log /.vscode _ide_helper.php .phpstorm.meta.php + +_ide_helper_models.php diff --git a/app/Http/Controllers/ChampionController.php b/app/Http/Controllers/ChampionController.php index b0f582f..cdc833f 100644 --- a/app/Http/Controllers/ChampionController.php +++ b/app/Http/Controllers/ChampionController.php @@ -2,8 +2,6 @@ namespace App\Http\Controllers; -use App\Http\Requests\StoreChampionRequest; -use App\Http\Requests\UpdateChampionRequest; use App\Models\Champion; use App\Models\ChampionRoles; use Illuminate\Support\Facades\Cache; @@ -24,22 +22,6 @@ class ChampionController extends Controller return view('champions.index', ['champions' => $champions, 'roles' => $roles]); } - /** - * Show the form for creating a new resource. - */ - public function create() - { - // - } - - /** - * Store a newly created resource in storage. - */ - public function store(StoreChampionRequest $request) - { - // - } - /** * Display the specified resource. */ @@ -48,7 +30,9 @@ class ChampionController extends Controller $threeDaysInSeconds = 60 * 60 * 24 * 3; $sixMonthsInSeconds = 60 * 60 * 24 * 30 * 6; - $champion = Cache::remember('championShowCache'.$champion->slug, $threeDaysInSeconds, static fn () => $champion->load('skins', 'lanes')); + $champion = Cache::remember('championShowCache'.$champion->slug, $threeDaysInSeconds, static fn () => $champion->load('streamers', 'skins', 'lanes')); + + $streamers = $champion->load('streamers')->streamers; $splashColor = Cache::remember( 'championSplashColorCache'.$champion->slug, @@ -58,30 +42,6 @@ class ChampionController extends Controller $champion->splash_color = $splashColor; - return view('champions.show', ['champion' => $champion]); - } - - /** - * Show the form for editing the specified resource. - */ - public function edit(Champion $champion) - { - // - } - - /** - * Update the specified resource in storage. - */ - public function update(UpdateChampionRequest $request, Champion $champion) - { - // - } - - /** - * Remove the specified resource from storage. - */ - public function destroy(Champion $champion) - { - // + return view('champions.show', ['champion' => $champion, 'streamers' => $streamers]); } } diff --git a/app/Http/Controllers/StreamerController.php b/app/Http/Controllers/StreamerController.php new file mode 100644 index 0000000..20f37dc --- /dev/null +++ b/app/Http/Controllers/StreamerController.php @@ -0,0 +1,36 @@ + Streamer::orderBy('champion_id')->get()); + + return response()->json($streamers); + } +} diff --git a/app/Http/Controllers/StreamerPanelController.php b/app/Http/Controllers/StreamerPanelController.php new file mode 100644 index 0000000..1d64fa8 --- /dev/null +++ b/app/Http/Controllers/StreamerPanelController.php @@ -0,0 +1,91 @@ + Streamer::with('champion')->get(), + ]); + } + + /** + * Show the form for creating a new resource. + */ + public function create() + { + return view('streamerpanel.streamer-create', [ + 'champions' => Champion::all(), + ]); + } + + /** + * Store a newly created resource in storage. + */ + public function store(Request $request) + { + $request->validate(['champion_id' => 'required|exists:champions,champion_id', + 'platform' => 'required|in:twitch,youtube,kick,douyu,huya', + 'username' => 'required|string', + 'displayname' => 'required|string', + ]); + + Streamer::create($request->all()); + + Cache::forget('streamersListAllAPICache'); + + return redirect()->route('streamerpanel.index'); + } + + /** + * Show the form for editing the specified resource. + */ + public function edit(Streamer $streamer) + { + return view('streamerpanel.streamer-edit', [ + 'streamer' => $streamer, + 'champions' => Champion::all(), + ]); + } + + /** + * Update the specified resource in storage. + */ + public function update(Request $request, Streamer $streamer) + { + $request->validate([ + 'champion_id' => 'required|exists:champions,id', + 'platform' => 'required|in:twitch,youtube,kick,douyu,huya', + 'username' => 'required|string', + 'displayname' => 'required|string', + ]); + + $streamer->update($request->all()); + + Cache::forget('streamersListAllAPICache'); + + return redirect()->route('streamerpanel.index'); + } + + /** + * Remove the specified resource from storage. + */ + public function destroy(Streamer $streamer) + { + $streamer->delete(); + + Cache::forget('streamersListAllAPICache'); + + return redirect()->route('streamerpanel.index'); + } +} diff --git a/app/Models/Champion.php b/app/Models/Champion.php index 3e9e49b..73576e5 100644 --- a/app/Models/Champion.php +++ b/app/Models/Champion.php @@ -94,6 +94,11 @@ class Champion extends Model return $this->hasOne(ChampionRoles::class, 'champion_id', 'champion_id'); } + public function streamers() + { + return $this->hasMany(Streamer::class, 'champion_id', 'champion_id'); + } + public function getChampionImageAttribute($centered = true): string { $url = 'https://cdn.communitydragon.org/latest/champion/'.$this->champion_id.'/splash-art'; diff --git a/app/Models/Streamer.php b/app/Models/Streamer.php new file mode 100644 index 0000000..5ad7b52 --- /dev/null +++ b/app/Models/Streamer.php @@ -0,0 +1,43 @@ + 'Twitch', + 'youtube' => 'YouTube', + 'kick' => 'Kick', + 'douyu' => 'Douyu', + 'huya' => 'Huya', + ]; + + return $platforms[$value]; + } + + public function getStreamerUrlAttribute(): string + { + return match ($this->platform) { + 'Twitch' => "https://www.twitch.tv/{$this->username}", + 'YouTube' => "https://www.youtube.com/@{$this->username}", + 'Kick' => "https://kick.com/{$this->username}", + 'Douyu' => "https://www.douyu.com/{$this->username}", + 'Huya' => "https://www.huya.com/{$this->username}", + }; + } + + public function champion(): BelongsTo + { + return $this->belongsTo(Champion::class, 'champion_id', 'champion_id'); + } +} diff --git a/app/View/Components/Streamerpanel/StreamerCreateForm.php b/app/View/Components/Streamerpanel/StreamerCreateForm.php new file mode 100644 index 0000000..8a15adb --- /dev/null +++ b/app/View/Components/Streamerpanel/StreamerCreateForm.php @@ -0,0 +1,26 @@ +streamers = $streamers; + } + + /** + * Get the view / contents that represent the component. + */ + public function render(): View + { + return view('components.streamerpanel.streamers-table'); + } +} diff --git a/composer.lock b/composer.lock index 8e546b8..3be4300 100644 --- a/composer.lock +++ b/composer.lock @@ -118,16 +118,16 @@ }, { "name": "aws/aws-sdk-php", - "version": "3.301.1", + "version": "3.301.4", "source": { "type": "git", "url": "https://github.com/aws/aws-sdk-php.git", - "reference": "0a910d2b35e7087337cdf3569dc9b6ce232aafba" + "reference": "1d04b11a621eaceb389d2cfbd82bcdc423903796" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/aws/aws-sdk-php/zipball/0a910d2b35e7087337cdf3569dc9b6ce232aafba", - "reference": "0a910d2b35e7087337cdf3569dc9b6ce232aafba", + "url": "https://api.github.com/repos/aws/aws-sdk-php/zipball/1d04b11a621eaceb389d2cfbd82bcdc423903796", + "reference": "1d04b11a621eaceb389d2cfbd82bcdc423903796", "shasum": "" }, "require": { @@ -207,9 +207,9 @@ "support": { "forum": "https://forums.aws.amazon.com/forum.jspa?forumID=80", "issues": "https://github.com/aws/aws-sdk-php/issues", - "source": "https://github.com/aws/aws-sdk-php/tree/3.301.1" + "source": "https://github.com/aws/aws-sdk-php/tree/3.301.4" }, - "time": "2024-03-15T18:14:42+00:00" + "time": "2024-03-20T18:16:55+00:00" }, { "name": "blade-ui-kit/blade-icons", @@ -5036,16 +5036,16 @@ }, { "name": "spatie/laravel-package-tools", - "version": "1.16.3", + "version": "1.16.4", "source": { "type": "git", "url": "https://github.com/spatie/laravel-package-tools.git", - "reference": "59db18c2e20d49a0b6d447bb1c654f6c123beb9e" + "reference": "ddf678e78d7f8b17e5cdd99c0c3413a4a6592e53" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/spatie/laravel-package-tools/zipball/59db18c2e20d49a0b6d447bb1c654f6c123beb9e", - "reference": "59db18c2e20d49a0b6d447bb1c654f6c123beb9e", + "url": "https://api.github.com/repos/spatie/laravel-package-tools/zipball/ddf678e78d7f8b17e5cdd99c0c3413a4a6592e53", + "reference": "ddf678e78d7f8b17e5cdd99c0c3413a4a6592e53", "shasum": "" }, "require": { @@ -5084,7 +5084,7 @@ ], "support": { "issues": "https://github.com/spatie/laravel-package-tools/issues", - "source": "https://github.com/spatie/laravel-package-tools/tree/1.16.3" + "source": "https://github.com/spatie/laravel-package-tools/tree/1.16.4" }, "funding": [ { @@ -5092,7 +5092,7 @@ "type": "github" } ], - "time": "2024-03-07T07:35:57+00:00" + "time": "2024-03-20T07:29:11+00:00" }, { "name": "spatie/laravel-query-builder", @@ -8726,16 +8726,16 @@ }, { "name": "composer/pcre", - "version": "3.1.2", + "version": "3.1.3", "source": { "type": "git", "url": "https://github.com/composer/pcre.git", - "reference": "4775f35b2d70865807c89d32c8e7385b86eb0ace" + "reference": "5b16e25a5355f1f3afdfc2f954a0a80aec4826a8" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/composer/pcre/zipball/4775f35b2d70865807c89d32c8e7385b86eb0ace", - "reference": "4775f35b2d70865807c89d32c8e7385b86eb0ace", + "url": "https://api.github.com/repos/composer/pcre/zipball/5b16e25a5355f1f3afdfc2f954a0a80aec4826a8", + "reference": "5b16e25a5355f1f3afdfc2f954a0a80aec4826a8", "shasum": "" }, "require": { @@ -8777,7 +8777,7 @@ ], "support": { "issues": "https://github.com/composer/pcre/issues", - "source": "https://github.com/composer/pcre/tree/3.1.2" + "source": "https://github.com/composer/pcre/tree/3.1.3" }, "funding": [ { @@ -8793,7 +8793,7 @@ "type": "tidelift" } ], - "time": "2024-03-07T15:38:35+00:00" + "time": "2024-03-19T10:26:25+00:00" }, { "name": "doctrine/deprecations", @@ -9223,16 +9223,16 @@ }, { "name": "mockery/mockery", - "version": "1.6.9", + "version": "1.6.10", "source": { "type": "git", "url": "https://github.com/mockery/mockery.git", - "reference": "0cc058854b3195ba21dc6b1f7b1f60f4ef3a9c06" + "reference": "47065d1be1fa05def58dc14c03cf831d3884ef0b" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/mockery/mockery/zipball/0cc058854b3195ba21dc6b1f7b1f60f4ef3a9c06", - "reference": "0cc058854b3195ba21dc6b1f7b1f60f4ef3a9c06", + "url": "https://api.github.com/repos/mockery/mockery/zipball/47065d1be1fa05def58dc14c03cf831d3884ef0b", + "reference": "47065d1be1fa05def58dc14c03cf831d3884ef0b", "shasum": "" }, "require": { @@ -9244,8 +9244,8 @@ "phpunit/phpunit": "<8.0" }, "require-dev": { - "phpunit/phpunit": "^8.5 || ^9.6.10", - "symplify/easy-coding-standard": "^12.0.8" + "phpunit/phpunit": "^8.5 || ^9.6.17", + "symplify/easy-coding-standard": "^12.1.14" }, "type": "library", "autoload": { @@ -9302,7 +9302,7 @@ "security": "https://github.com/mockery/mockery/security/advisories", "source": "https://github.com/mockery/mockery" }, - "time": "2023-12-10T02:24:34+00:00" + "time": "2024-03-19T16:15:45+00:00" }, { "name": "myclabs/deep-copy", @@ -9738,16 +9738,16 @@ }, { "name": "phpstan/phpstan", - "version": "1.10.62", + "version": "1.10.63", "source": { "type": "git", "url": "https://github.com/phpstan/phpstan.git", - "reference": "cd5c8a1660ed3540b211407c77abf4af193a6af9" + "reference": "ad12836d9ca227301f5fb9960979574ed8628339" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/phpstan/phpstan/zipball/cd5c8a1660ed3540b211407c77abf4af193a6af9", - "reference": "cd5c8a1660ed3540b211407c77abf4af193a6af9", + "url": "https://api.github.com/repos/phpstan/phpstan/zipball/ad12836d9ca227301f5fb9960979574ed8628339", + "reference": "ad12836d9ca227301f5fb9960979574ed8628339", "shasum": "" }, "require": { @@ -9796,7 +9796,7 @@ "type": "tidelift" } ], - "time": "2024-03-13T12:27:20+00:00" + "time": "2024-03-18T16:53:53+00:00" }, { "name": "phpunit/php-code-coverage", diff --git a/database/migrations/2024_03_20_233357_create_streamers_table.php b/database/migrations/2024_03_20_233357_create_streamers_table.php new file mode 100644 index 0000000..c59477a --- /dev/null +++ b/database/migrations/2024_03_20_233357_create_streamers_table.php @@ -0,0 +1,34 @@ +id(); + $table->integer('champion_id'); + $table->enum('platform', ['twitch', 'youtube', 'kick', 'douyu', 'huya']); + $table->string('username'); + $table->string('displayname'); + + $table->foreign('champion_id')->references('champion_id')->on('champions')->onDelete('cascade'); + + $table->timestamps(); + }); + } + + /** + * Reverse the migrations. + */ + public function down(): void + { + Schema::dropIfExists('streamers'); + } +}; diff --git a/dev_quickstart.bat b/dev_quickstart.bat new file mode 100644 index 0000000..4cba6ac --- /dev/null +++ b/dev_quickstart.bat @@ -0,0 +1 @@ +npm run dev-all \ No newline at end of file diff --git a/resources/css/app.css b/resources/css/app.css index a320b96..787170f 100644 --- a/resources/css/app.css +++ b/resources/css/app.css @@ -2,6 +2,78 @@ @tailwind components; @tailwind utilities; +@font-face { + font-display: swap; + font-family: "Inter"; + font-style: normal; + font-weight: 100; + src: url("/fonts/inter-v13-latin-100.woff2") format("woff2"); +} + +@font-face { + font-display: swap; + font-family: "Inter"; + font-style: normal; + font-weight: 200; + src: url("/fonts/inter-v13-latin-200.woff2") format("woff2"); +} + +@font-face { + font-display: swap; + font-family: "Inter"; + font-style: normal; + font-weight: 300; + src: url("/fonts/inter-v13-latin-300.woff2") format("woff2"); +} + +@font-face { + font-display: swap; + font-family: "Inter"; + font-style: normal; + font-weight: 400; + src: url("/fonts/inter-v13-latin-regular.woff2") format("woff2"); +} + +@font-face { + font-display: swap; + font-family: "Inter"; + font-style: normal; + font-weight: 500; + src: url("/fonts/inter-v13-latin-500.woff2") format("woff2"); +} + +@font-face { + font-display: swap; + font-family: "Inter"; + font-style: normal; + font-weight: 600; + src: url("/fonts/inter-v13-latin-600.woff2") format("woff2"); +} + +@font-face { + font-display: swap; + font-family: "Inter"; + font-style: normal; + font-weight: 700; + src: url("/fonts/inter-v13-latin-700.woff2") format("woff2"); +} + +@font-face { + font-display: swap; + font-family: "Inter"; + font-style: normal; + font-weight: 800; + src: url("/fonts/inter-v13-latin-800.woff2") format("woff2"); +} + +@font-face { + font-display: swap; + font-family: "Inter"; + font-style: normal; + font-weight: 900; + src: url("/fonts/inter-v13-latin-900.woff2") format("woff2"); +} + .glow-shadow::before { content: ""; position: absolute; @@ -13,13 +85,18 @@ animation: glow 4s infinite; --tw-scale-x: 1.02; --tw-scale-y: 1.02; - transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y)); + transform: translate(var(--tw-translate-x), var(--tw-translate-y)) + rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) + scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y)); } .shadow-md-splash { - --tw-shadow: 0 4px 6px -1px rgb(0 0 0 / 0.1), 0 2px 4px -2px rgb(0 0 0 / 0.1); - --tw-shadow-colored: 0 4px 6px -1px var(--splash-color), 0 2px 4px -2px var(--splash-color); - box-shadow: var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000), var(--tw-shadow); + --tw-shadow: 0 4px 6px -1px rgb(0 0 0 / 0.1), + 0 2px 4px -2px rgb(0 0 0 / 0.1); + --tw-shadow-colored: 0 4px 6px -1px var(--splash-color), + 0 2px 4px -2px var(--splash-color); + box-shadow: var(--tw-ring-offset-shadow, 0 0 #0000), + var(--tw-ring-shadow, 0 0 #0000), var(--tw-shadow); } @keyframes glow { @@ -27,10 +104,12 @@ opacity: 0.8; filter: blur(8px); } + 50% { opacity: 0.45; filter: blur(11px); } + 100% { opacity: 0.8; filter: blur(8px); @@ -47,75 +126,22 @@ box-shadow: 0 50vh 0 50vh #292524; } -/* inter-100 - latin */ -@font-face { - font-display: swap; /* Check https://developer.mozilla.org/en-US/docs/Web/CSS/@font-face/font-display for other options. */ - font-family: 'Inter'; - font-style: normal; - font-weight: 100; - src: url('/fonts/inter-v13-latin-100.woff2') format('woff2'); /* Chrome 36+, Opera 23+, Firefox 39+, Safari 12+, iOS 10+ */ +.text-shadow-twitch { + text-shadow: 1px 1px 2px #6441a5; } -/* inter-200 - latin */ -@font-face { - font-display: swap; /* Check https://developer.mozilla.org/en-US/docs/Web/CSS/@font-face/font-display for other options. */ - font-family: 'Inter'; - font-style: normal; - font-weight: 200; - src: url('/fonts/inter-v13-latin-200.woff2') format('woff2'); /* Chrome 36+, Opera 23+, Firefox 39+, Safari 12+, iOS 10+ */ + +.text-shadow-youtube { + text-shadow: 1px 1px 2px #ff0000; } -/* inter-300 - latin */ -@font-face { - font-display: swap; /* Check https://developer.mozilla.org/en-US/docs/Web/CSS/@font-face/font-display for other options. */ - font-family: 'Inter'; - font-style: normal; - font-weight: 300; - src: url('/fonts/inter-v13-latin-300.woff2') format('woff2'); /* Chrome 36+, Opera 23+, Firefox 39+, Safari 12+, iOS 10+ */ + +.text-shadow-kick { + text-shadow: 1px 1px 2px #53fc18; } -/* inter-regular - latin */ -@font-face { - font-display: swap; /* Check https://developer.mozilla.org/en-US/docs/Web/CSS/@font-face/font-display for other options. */ - font-family: 'Inter'; - font-style: normal; - font-weight: 400; - src: url('/fonts/inter-v13-latin-regular.woff2') format('woff2'); /* Chrome 36+, Opera 23+, Firefox 39+, Safari 12+, iOS 10+ */ + +.text-shadow-douyu { + text-shadow: 1px 1px 2px #ff5f3a; } -/* inter-500 - latin */ -@font-face { - font-display: swap; /* Check https://developer.mozilla.org/en-US/docs/Web/CSS/@font-face/font-display for other options. */ - font-family: 'Inter'; - font-style: normal; - font-weight: 500; - src: url('/fonts/inter-v13-latin-500.woff2') format('woff2'); /* Chrome 36+, Opera 23+, Firefox 39+, Safari 12+, iOS 10+ */ + +.text-shadow-huya { + text-shadow: 1px 1px 2px #ffaa06; } -/* inter-600 - latin */ -@font-face { - font-display: swap; /* Check https://developer.mozilla.org/en-US/docs/Web/CSS/@font-face/font-display for other options. */ - font-family: 'Inter'; - font-style: normal; - font-weight: 600; - src: url('/fonts/inter-v13-latin-600.woff2') format('woff2'); /* Chrome 36+, Opera 23+, Firefox 39+, Safari 12+, iOS 10+ */ -} -/* inter-700 - latin */ -@font-face { - font-display: swap; /* Check https://developer.mozilla.org/en-US/docs/Web/CSS/@font-face/font-display for other options. */ - font-family: 'Inter'; - font-style: normal; - font-weight: 700; - src: url('/fonts/inter-v13-latin-700.woff2') format('woff2'); /* Chrome 36+, Opera 23+, Firefox 39+, Safari 12+, iOS 10+ */ -} -/* inter-800 - latin */ -@font-face { - font-display: swap; /* Check https://developer.mozilla.org/en-US/docs/Web/CSS/@font-face/font-display for other options. */ - font-family: 'Inter'; - font-style: normal; - font-weight: 800; - src: url('/fonts/inter-v13-latin-800.woff2') format('woff2'); /* Chrome 36+, Opera 23+, Firefox 39+, Safari 12+, iOS 10+ */ -} -/* inter-900 - latin */ -@font-face { - font-display: swap; /* Check https://developer.mozilla.org/en-US/docs/Web/CSS/@font-face/font-display for other options. */ - font-family: 'Inter'; - font-style: normal; - font-weight: 900; - src: url('/fonts/inter-v13-latin-900.woff2') format('woff2'); /* Chrome 36+, Opera 23+, Firefox 39+, Safari 12+, iOS 10+ */ -} \ No newline at end of file diff --git a/resources/views/champions/show.blade.php b/resources/views/champions/show.blade.php index f0f744e..b50ca14 100644 --- a/resources/views/champions/show.blade.php +++ b/resources/views/champions/show.blade.php @@ -5,7 +5,7 @@ about ' . $champion->name . ', ' . $champion->title . '. ' . substr($champion->lore, 0, 50) . '...') @section('content') - + @endsection @push('bottom_scripts') diff --git a/resources/views/components/champions/grid_info.blade.php b/resources/views/components/champions/grid_info.blade.php index a3d0421..d47bb64 100644 --- a/resources/views/components/champions/grid_info.blade.php +++ b/resources/views/components/champions/grid_info.blade.php @@ -5,125 +5,134 @@ CHAMPION DETAILS

- {{$champion->name}}

+ {{ $champion->name }}

- {{$champion->title}}

+ class="text-sm font-bold text-center text-transparent uppercase md:text-lg bg-gradient-to-bl from-orange-300 to-orange-500 bg-clip-text"> + {{ $champion->title }} -
-
+
+
-
-
- {{$champion->name}} Splash Art + class="relative border shadow-sm aspect-video rounded-2xl bg-stone-800/40 border-neutral-300/5 shadow-stone-800/80 lg:col-span-2"> +
+
+ {{ $champion->name }} Splash Art
-
+

- {{$champion->name}} Information

+ {{ $champion->name }} Information
    -
  • - Full Title: {{$champion->name}}, {{$champion->title}}. +
  • + Full Title: {{ $champion->name }}, {{ $champion->title }}.
  • -
  • - Popular Positions: @foreach($champion->lanes->roles as $lane) - {{$lane}} @svg(getRoleIconSvg($lane), 'w-5 h-5 inline-block') - @if(!$loop->last) +
  • + Popular Positions: + @foreach ($champion->lanes->roles as $lane) + {{ $lane }} @svg(getRoleIconSvg($lane), 'w-5 h-5 inline-block') + @if (!$loop->last) - - @endif + @endif + @endforeach
  • -
  • Blue Essence Cost: - {{$champion->price_be}} BE + {{ $champion->price_be }} BE
  • -
  • Riot Points Cost: - {{$champion->price_rp}} RP + {{ $champion->price_rp }} RP
  • -
  • - Roles: @foreach($champion->roles as $role) - {{$role}} - @if(!$loop->last) +
  • + Roles: + @foreach ($champion->roles as $role) + {{ $role }} + @if (!$loop->last) - - @endif + @endif + @endforeach
  • -
  • +
  • Attack Type: {{$champion->attack_type}} + class="inline-block lowercase capitalize-first">{{ $champion->attack_type }}
  • -
  • - Damage Type: {{$champion->adaptive_type}} +
  • + Damage Type: {{ $champion->adaptive_type }}
  • -
  • - Resource Type: {{$champion->resource_type}} +
  • + Resource Type: {{ $champion->resource_type }}
  • -
  • +
  • Champion ID: {{$champion->champion_id}} + class="font-mono font-medium">{{ $champion->champion_id }}
  • -
  • - Release Date: {{$champion->release_date}} +
  • + Release Date: {{ $champion->release_date }}
  • -
  • - Release Patch: Patch {{$champion->release_patch}} +
  • + Release Patch: Patch {{ $champion->release_patch }}
-
+

- {{$champion->name}} Lore

-

- {{$champion->lore}} + {{ $champion->name }} Streamers +

+ A list of streamers who play {{ $champion->name }} and are atleast Diamond 2 or higher.

+
+ @foreach ($streamers as $streamer) + + @endforeach +
-
-
+

- {{$champion->name}} Skins ({{count($champion->skins)}})

+ {{ $champion->name }} Skins ({{ count($champion->skins) }})
- @foreach($champion->skins as $key => $skin) -
+
+
+

+ {{ $champion->name }} Lore

+

+ {{ $champion->lore }} +

+
+
diff --git a/resources/views/components/navbar.blade.php b/resources/views/components/navbar.blade.php index 540c44d..656a0a5 100644 --- a/resources/views/components/navbar.blade.php +++ b/resources/views/components/navbar.blade.php @@ -1,77 +1,77 @@