current state

This commit is contained in:
2026-02-08 10:42:01 +01:00
parent 0a4372c40d
commit e055af9248
70 changed files with 4882 additions and 330 deletions

View File

@@ -0,0 +1,177 @@
<!DOCTYPE html>
<html lang="en">
<head>
<title>{{ $page_title ?? 'Skinbase' }}</title>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<meta name="description" content="{{ $page_meta_description ?? '' }}">
<meta name="keywords" content="{{ $page_meta_keywords ?? '' }}">
<!-- Icons (kept for now to preserve current visual output) -->
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.5.0/css/all.min.css" />
<link rel="shortcut icon" href="/favicon.ico">
@vite(['resources/css/app.css','resources/scss/nova.scss','resources/js/nova.js'])
@stack('head')
</head>
<body class="bg-neutral-950 text-neutral-200 min-h-screen">
<header class="fixed top-0 left-0 right-0 h-16 bg-neutral-900 border-b border-neutral-800 z-50">
<div class="h-full px-5 flex items-center justify-between gap-4">
<!-- LEFT -->
<div class="flex items-center gap-4">
<button type="button" class="md:hidden text-neutral-200 hover:text-sky-400" data-mobile-toggle aria-controls="mobileMenu" aria-expanded="false" aria-label="Toggle menu">
<i class="fas fa-bars text-lg"></i>
</button>
<a href="/" class="text-sky-400 font-semibold text-xl">Skinbase</a>
</div>
<!-- CENTER SEARCH (hidden on mobile) -->
<div class="hidden md:block flex-1 max-w-xl">
<form action="/search" method="get" class="relative">
<input type="search" name="q" value="{{ request('q') }}" placeholder="Search tags, artworks, artists…"
class="w-full bg-neutral-800 border border-neutral-700 rounded-lg py-2.5 pl-3.5 pr-10 text-white outline-none focus:border-sky-400">
<i class="fas fa-search absolute right-3.5 top-1/2 -translate-y-1/2 text-neutral-400"></i>
</form>
</div>
<!-- RIGHT -->
<div class="flex items-center gap-4 sm:gap-5">
@guest
<div class="hidden sm:flex items-center gap-4 text-sm">
<a href="/signup" class="hover:text-sky-400">Join</a>
<a href="/login" class="hover:text-sky-400">Sign in</a>
</div>
@endguest
@auth
@php
$userId = auth()->id();
$novaCounts = $novaCounts ?? [];
$favCount = $novaCounts['favourites'] ?? null;
$msgCount = $novaCounts['messages'] ?? null;
$noticeCount = $novaCounts['notifications'] ?? null;
@endphp
<a href="/upload" class="relative text-neutral-200 hover:text-sky-400" title="Upload">
<i class="fas fa-upload"></i>
</a>
<a href="/favourites/{{ $userId }}/{{ auth()->user()->username ?? '' }}" class="relative text-neutral-200 hover:text-sky-400" title="Favourites">
<i class="fas fa-heart"></i>
@if($favCount)
<span class="absolute -top-1 -right-2 bg-red-500 text-white text-xs px-1.5 py-0.5 rounded-full leading-none">{{ $favCount }}</span>
@endif
</a>
<a href="/messages" class="relative text-neutral-200 hover:text-sky-400" title="Messages">
<i class="fas fa-envelope"></i>
@if($msgCount)
<span class="absolute -top-1 -right-2 bg-red-500 text-white text-xs px-1.5 py-0.5 rounded-full leading-none">{{ $msgCount }}</span>
@endif
</a>
<a href="/notices" class="relative text-neutral-200 hover:text-sky-400" title="Notifications">
<i class="fas fa-bell"></i>
@if($noticeCount)
<span class="absolute -top-1 -right-2 bg-red-500 text-white text-xs px-1.5 py-0.5 rounded-full leading-none">{{ $noticeCount }}</span>
@endif
</a>
@endauth
<!-- BROWSE DROPDOWN -->
<div class="relative" data-dropdown>
<button type="button" class="text-neutral-200 hover:text-sky-400" data-dropdown-toggle aria-expanded="false" aria-label="Browse">
<i class="fas fa-layer-group"></i>
</button>
<div class="hidden absolute top-[120%] right-0 bg-neutral-800 border border-neutral-700 rounded-lg min-w-[200px] overflow-visible shadow-lg" data-dropdown-menu>
<div class="rounded-lg overflow-hidden">
<a class="block px-3.5 py-2.5 text-sm hover:bg-neutral-700" href="/browse">All Artworks</a>
<!-- Submenu: Types -->
<div class="relative group" data-submenu>
<button type="button" class="w-full text-left px-3.5 py-2.5 text-sm hover:bg-neutral-700 flex items-center justify-between gap-3" data-submenu-toggle aria-expanded="false">
<span>Types</span>
<i class="fas fa-chevron-right text-[11px] opacity-70"></i>
</button>
<div class="hidden group-hover:block absolute left-full top-0 ml-1 bg-neutral-800 border border-neutral-700 rounded-lg min-w-[200px] shadow-lg z-50" data-submenu-menu>
<div class="rounded-lg overflow-hidden">
<a class="block px-3.5 py-2.5 text-sm hover:bg-neutral-700" href="/photography">Photography</a>
<a class="block px-3.5 py-2.5 text-sm hover:bg-neutral-700" href="/wallpapers">Wallpapers</a>
<a class="block px-3.5 py-2.5 text-sm hover:bg-neutral-700" href="/skins">Skins</a>
<a class="block px-3.5 py-2.5 text-sm hover:bg-neutral-700" href="/other">Other</a>
</div>
</div>
</div>
<a class="block px-3.5 py-2.5 text-sm hover:bg-neutral-700" href="/featured-artworks">Featured</a>
</div>
</div>
</div>
<a href="/forum" class="hidden sm:inline text-sm hover:text-sky-400">Forum</a>
<!-- USER DROPDOWN -->
<div class="relative" data-dropdown>
<button type="button" class="text-neutral-200 hover:text-sky-400" data-dropdown-toggle aria-expanded="false" aria-label="User">
<i class="fas fa-user"></i>
</button>
<div class="hidden absolute top-[120%] right-0 bg-neutral-800 border border-neutral-700 rounded-lg min-w-[220px] overflow-hidden shadow-lg" data-dropdown-menu>
@auth
<a class="block px-3.5 py-2.5 text-sm hover:bg-neutral-700" href="/upload">Upload</a>
<a class="block px-3.5 py-2.5 text-sm hover:bg-neutral-700" href="{{ route('dashboard.artworks.index') }}">Edit Artworks</a>
<div class="h-px bg-neutral-700"></div>
<a class="block px-3.5 py-2.5 text-sm hover:bg-neutral-700" href="/statistics">Statistics</a>
<a class="block px-3.5 py-2.5 text-sm hover:bg-neutral-700" href="/mybuddies.php">My Followers</a>
<a class="block px-3.5 py-2.5 text-sm hover:bg-neutral-700" href="/buddies.php">Who I Follow</a>
<div class="h-px bg-neutral-700"></div>
<a class="block px-3.5 py-2.5 text-sm hover:bg-neutral-700" href="/recieved-comments">Received Comments</a>
<a class="block px-3.5 py-2.5 text-sm hover:bg-neutral-700" href="/favourites/{{ $userId }}/{{ auth()->user()->username ?? '' }}">My Favourites</a>
<a class="block px-3.5 py-2.5 text-sm hover:bg-neutral-700" href="/gallery/{{ $userId }}/{{ auth()->user()->username ?? '' }}">My Gallery</a>
<div class="h-px bg-neutral-700"></div>
<a class="block px-3.5 py-2.5 text-sm hover:bg-neutral-700" href="/user">Edit Profile</a>
<a class="block px-3.5 py-2.5 text-sm hover:bg-neutral-700" href="/profile/{{ $userId }}/{{ auth()->user()->username ?? '' }}">View Profile</a>
<form method="POST" action="/logout" class="m-0">
@csrf
<button type="submit" class="w-full text-left px-3.5 py-2.5 text-sm hover:bg-neutral-700">Logout</button>
</form>
@else
<a class="block px-3.5 py-2.5 text-sm hover:bg-neutral-700" href="/signup">Join</a>
<a class="block px-3.5 py-2.5 text-sm hover:bg-neutral-700" href="/login">Sign in</a>
@endauth
</div>
</div>
</div>
</div>
</header>
<!-- MOBILE MENU -->
<div class="hidden fixed top-16 left-0 right-0 bg-neutral-950 border-b border-neutral-800 p-4" id="mobileMenu">
<div class="space-y-2">
@guest
<a class="block py-2 border-b border-neutral-900" href="/signup">Join</a>
<a class="block py-2 border-b border-neutral-900" href="/login">Sign in</a>
@endguest
<a class="block py-2 border-b border-neutral-900" href="/browse">All Artworks</a>
<a class="block py-2 border-b border-neutral-900" href="/photography">Photography</a>
<a class="block py-2 border-b border-neutral-900" href="/wallpapers">Wallpapers</a>
<a class="block py-2 border-b border-neutral-900" href="/skins">Skins</a>
<a class="block py-2 border-b border-neutral-900" href="/other">Other</a>
<a class="block py-2 border-b border-neutral-900" href="/featured-artworks">Featured</a>
<a class="block py-2 border-b border-neutral-900" href="/forum">Forum</a>
<a class="block py-2 border-b border-neutral-900" href="/profile">Profile</a>
<a class="block py-2" href="/settings">Settings</a>
</div>
</div>
<main class="pt-20">
@yield('content')
</main>
</body>
</html>

View File

@@ -0,0 +1,11 @@
<footer id="mainFooter">
<p>&copy; 2000 - {{ date('Y') }} by SkinBase.org. All artwork copyrighted to its Author. (Dragon II Edition)</p>
<div class="footer_links">
<a href="/bug-report" title="Inform us about any bugs you found">Bug report</a> :
<a href="/rss-feeds" title="Skinbase RSS Feeds about new Artworks">RSS Feeds</a> :
<a href="/faq" title="Frequently Asked Questions">FAQ</a> :
<a href="/rules" title="Rules and Guidelines">Rules and Guidelines</a> :
<a href="/staff" title="Who is actually behind Skinbase">Staff</a> :
<a href="/privacy" title="Privacy Policy">Privacy Policy</a>
</div>
</footer>

View File

@@ -0,0 +1,214 @@
<nav class="nb-navbar" role="navigation">
<div class="nb-container">
<div class="nb-header">
<button type="button" class="nb-toggle" aria-expanded="false" aria-controls="nb-main-nav">
<span class="nb-sr">Toggle navigation</span>
<span class="nb-bar"></span>
<span class="nb-bar"></span>
<span class="nb-bar"></span>
</button>
<a href="/" class="nb-brand" title="SkinBase">SkinBase</a>
</div>
<div id="nb-main-nav" class="nb-collapse">
<form class="nb-search" action="/search" method="get" id="search_box">
<input type="text" name="q" value="{{ request('q') }}" placeholder="Search">
<input type="hidden" name="group" value="all">
<button type="submit" aria-label="Search"><svg class="icon icon-search" viewBox="0 0 24 24" aria-hidden="true"><use xlink:href="#icon-search"></use></svg></button>
</form>
<ul class="nb-nav">
<li class="nb-dropdown nb-mega">
<button class="nb-dropbtn"> <svg class="icon" viewBox="0 0 24 24" aria-hidden="true"><use xlink:href="#icon-cloud"></use></svg> Browse <svg class="icon icon-caret" viewBox="0 0 24 24"><use xlink:href="#icon-caret"></use></svg></button>
<div class="nb-mega-panel" aria-hidden="true">
<div class="nb-mega-row">
<div class="nb-mega-col">
<div class="nb-mega-title">Browse Artworks</div>
<ul>
<li><a href="/browse">All Artworks</a></li>
<li><a href="/photography">Photography</a></li>
<li><a href="/wallpapers">Wallpapers</a></li>
<li><a href="/skins">Skins</a></li>
<li><a href="/other">Other</a></li>
<li><a href="/featured-artworks">Featured</a></li>
</ul>
</div>
<div class="nb-mega-col">
<div class="nb-mega-title">View</div>
<ul>
<li><a href="/forum">Forum</a></li>
<li><a href="/chat">Chat</a></li>
<li><a href="/browse-categories">Categories</a></li>
<li><a href="/latest-artworks">Latest Uploads</a></li>
<li><a href="/daily-uploads">Recent Uploads</a></li>
<li><a href="/today-in-history">Today in History</a></li>
</ul>
</div>
<div class="nb-mega-col">
<div class="nb-mega-title">Authors</div>
<ul>
<li><a href="/interviews">Interviews</a></li>
<li><a href="/Members/MembersPhotos/545">Members Photos</a></li>
<li><a href="/top-authors">Top Authors</a></li>
<li><a href="/latest-comments">Latest Comments</a></li>
<li><a href="/monthly-commentators">Monthly Top Comments</a></li>
</ul>
</div>
<div class="nb-mega-col">
<div class="nb-mega-title">Statistics</div>
<ul>
<li><a href="/today-downloads">Today Downloads</a></li>
<li><a href="/top-favourites">Top Favourites</a></li>
</ul>
</div>
</div>
</div>
</li>
<li class="nb-dropdown">
<button class="nb-dropbtn"> <svg class="icon" viewBox="0 0 24 24" aria-hidden="true"><use xlink:href="#icon-list"></use></svg> Categories <svg class="icon icon-caret" viewBox="0 0 24 24"><use xlink:href="#icon-caret"></use></svg></button>
<div class="nb-dropdown-panel" aria-hidden="true">
<ul>
<li><a href="/photography">Photography</a></li>
<li><a href="/wallpapers">Wallpapers</a></li>
<li><a href="/skins">Skins</a></li>
<li><a href="/other">Others</a></li>
<li class="nb-divider" role="separator"></li>
<li><a href="/browse-categories" class="btn_category">Categories List</a></li>
</ul>
</div>
</li>
</ul>
<ul class="nb-nav nb-right">
@auth
@php
$userId = auth()->id();
try {
$uploadCount = \Illuminate\Support\Facades\DB::table('artworks')->where('user_id', $userId)->count();
} catch (\Throwable $e) {
$uploadCount = 0;
}
try {
$favCount = \Illuminate\Support\Facades\DB::table('favourites')->where('user_id', $userId)->count();
} catch (\Throwable $e) {
$favCount = 0;
}
try {
$msgCount = \Illuminate\Support\Facades\DB::table('messages')->where('reciever_id', $userId)->whereNull('read_at')->count();
} catch (\Throwable $e) {
$msgCount = 0;
}
try {
$noticeCount = \Illuminate\Support\Facades\DB::table('notification')->where('user_id', $userId)->where('new', 1)->count();
} catch (\Throwable $e) {
$noticeCount = 0;
}
try {
$profile = \Illuminate\Support\Facades\DB::table('user_profiles')->where('user_id', $userId)->first();
$avatar = $profile->avatar ?? null;
} catch (\Throwable $e) {
$avatar = null;
}
$displayName = auth()->user()->name ?: (auth()->user()->username ?? '');
@endphp
<li class="nb-notice">
<a href="/upload" title="Upload new Artwork"><svg class="icon" viewBox="0 0 24 24"><use xlink:href="#icon-upload"></use></svg><br> {{ $uploadCount }}</a>
</li>
<li class="nb-notice">
<a href="/favourites/{{ $userId }}/{{ auth()->user()->username ?? '' }}" title="Your Favourite Artworks"><svg class="icon" viewBox="0 0 24 24"><use xlink:href="#icon-heart"></use></svg><br> {{ $favCount }}</a>
</li>
<li class="nb-notice">
<a href="/messages" title="Messages"><svg class="icon" viewBox="0 0 24 24"><use xlink:href="#icon-mail"></use></svg><br> {{ $msgCount }}</a>
</li>
<li class="nb-notice">
<a href="/notices" title="Notices"><svg class="icon" viewBox="0 0 24 24"><use xlink:href="#icon-bell"></use></svg><br> {{ $noticeCount }}</a>
</li>
<li class="nb-dropdown nb-user">
<button class="nb-dropbtn">
@if($avatar)
<img src="/storage/{{ ltrim($avatar, '/') }}" alt="{{ $displayName }}" width="20">&nbsp;&nbsp;
@endif
<span class="username">{{ $displayName }}</span>
<svg class="icon icon-caret" viewBox="0 0 24 24"><use xlink:href="#icon-caret"></use></svg>
</button>
<div class="nb-dropdown-panel">
<ul>
<li><a href="/upload">Upload</a></li>
<li><a href="{{ route('dashboard.artworks.index') }}">Edit Artworks</a></li>
<li class="nb-divider" role="presentation"></li>
<li><a href="/statistics">Statistics</a></li>
<li><a href="/mybuddies.php">My Followes</a></li>
<li><a href="/buddies.php">Who follows me</a></li>
<li class="nb-divider" role="presentation"></li>
<li><a href="/recieved-comments">Received Comments</a></li>
<li><a href="/favourites/{{ $userId }}/{{ auth()->user()->username ?? '' }}">My Favourites</a></li>
<li><a href="/gallery/{{ $userId }}/{{ auth()->user()->username ?? '' }}">My Gallery</a></li>
<li class="nb-divider" role="presentation"></li>
<li><a href="/user">Edit Profile</a></li>
<li><a href="/profile/{{ $userId }}/{{ auth()->user()->username ?? '' }}">View My Profile</a></li>
<li class="nb-dropdown-footer clearfix">
<form method="POST" action="/logout" style="margin:0;">
@csrf
<button type="submit" class="nb-btn-link">Logout</button>
</form>
</li>
</ul>
</div>
</li>
<li class="nb-chat">
<button class="nb-chat-toggle" title="Chat"><svg class="icon" viewBox="0 0 24 24"><use xlink:href="#icon-chat"></use></svg></button>
</li>
@else
<li class="nb-link"><a href="/signup" title="Signup for a new account">Join</a></li>
<li class="nb-link"><a href="/login" title="Login to Skinbase account">Sign in</a></li>
@endauth
</ul>
</div>
</div>
<!-- SVG icons -->
<svg style="display:none;" aria-hidden="true">
<symbol id="icon-search" viewBox="0 0 24 24"><path d="M15.5 14h-.79l-.28-.27A6.471 6.471 0 0016 9.5 6.5 6.5 0 109.5 16c1.61 0 3.09-.59 4.23-1.57l.27.28v.79l5 4.99L20.49 19l-4.99-5zM10 14a4 4 0 110-8 4 4 0 010 8z"/></symbol>
<symbol id="icon-cloud" viewBox="0 0 24 24"><path d="M19.36 10.46A7 7 0 005 9a5 5 0 00.11 10H19a4 4 0 00.36-8.54z"/></symbol>
<symbol id="icon-caret" viewBox="0 0 24 24"><path d="M7 10l5 5 5-5z"/></symbol>
<symbol id="icon-list" viewBox="0 0 24 24"><path d="M3 13h2v-2H3v2zm0 4h2v-2H3v2zm0-8h2V7H3v2zm4 4h14v-2H7v2zm0 4h14v-2H7v2zm0-8h14V7H7v2z"/></symbol>
<symbol id="icon-upload" viewBox="0 0 24 24"><path d="M19 15v4H5v-4H3v4a2 2 0 002 2h14a2 2 0 002-2v-4h-2zM11 19h2V9h3l-4-5-4 5h3z"/></symbol>
<symbol id="icon-heart" viewBox="0 0 24 24"><path d="M12 21s-7-4.35-9-7.03C-1.2 9.9 4.7 4 8.5 7.5 11 9.7 12 11 12 11s1-1.3 3.5-3.5C19.3 4 25.2 9.9 21 13.97 19 16.65 12 21 12 21z"/></symbol>
<symbol id="icon-mail" viewBox="0 0 24 24"><path d="M20 4H4c-1.1 0-2 .9-2 2v12c0 1.1.9 2 2 2h16c1.1 0 2-.9 2-2V6c0-1.1-.9-2-2-2zm0 4l-8 5-8-5V6l8 5 8-5v2z"/></symbol>
<symbol id="icon-bell" viewBox="0 0 24 24"><path d="M12 22a2 2 0 002-2H10a2 2 0 002 2zm6-6V10c0-3.07-1.63-5.64-4.5-6.32V3a1.5 1.5 0 10-3 0v.68C7.63 4.36 6 6.92 6 10v6l-2 2v1h16v-1l-2-2z"/></symbol>
<symbol id="icon-chat" viewBox="0 0 24 24"><path d="M21 6h-2v9H7l-4 4V6a2 2 0 012-2h16a2 2 0 012 2z"/></symbol>
</svg>
</nav>
<!-- MOBILE MENU (hidden on desktop) -->
<div id="nb-mobile-menu" class="nb-mobile-menu" aria-hidden="true">
<div class="nb-mobile-inner">
@auth
<a href="/upload">Upload</a>
<a href="/favourites/{{ auth()->id() }}/{{ auth()->user()->username ?? '' }}">Favourites</a>
<a href="/messages">Messages</a>
<a href="/notices">Notices</a>
@else
<a href="/signup">Join</a>
<a href="/login">Sign in</a>
@endauth
<hr class="nb-mobile-sep">
<a href="/browse">All Artworks</a>
<a href="/photography">Photography</a>
<a href="/wallpapers">Wallpapers</a>
<a href="/skins">Skins</a>
<a href="/other">Other</a>
<a href="/featured-artworks">Featured</a>
<hr class="nb-mobile-sep">
<a href="/forum">Forum</a>
<a href="/profile">Profile</a>
<a href="/settings">Settings</a>
</div>
</div>