Compare commits
	
		
			21 commits
		
	
	
		
			
				v2025.06.1
			
			...
			
				master
			
		
	
	| Author | SHA1 | Date | |
|---|---|---|---|
| 
							
							
								
							
							
	
	
		
			
		
	
	fd82adc73e | 
						
						
							|||
| 
							
							
								
							
							
	
	
		
			
		
	
	49f9f7fd3c | 
						
						
							|||
| 
							
							
								
							
							
	
	
		
			
		
	
	288fe04e95 | 
						
						
							|||
| 
							
							
								
							
							
	
	
		
			
		
	
	800898153d | 
						
						
							|||
| 
							
							
								
							
							
	
	
		
			
		
	
	79d8294ba1 | 
						
						
							|||
| 
							
							
								
							
							
	
	
		
			
		
	
	c89bf3bf1a | 
						
						
							|||
| 
							
							
								
							
							
	
	
		
			
		
	
	ce45727b60 | 
						
						
							|||
| 
							
							
								
							
							
	
	
		
			
		
	
	7ba32186cf | 
						
						
							|||
| 
							
							
								
							
							
	
	
		
			
		
	
	01cf40d1b8 | 
						
						
							|||
| 
							
							
								
							
							
	
	
		
			
		
	
	db05b1d4e7 | 
						
						
							|||
| 
							
							
								
							
							
	
	
		
			
		
	
	166fab652d | 
						
						
							|||
| 
							
							
								
							
							
	
	
		
			
		
	
	310142efc3 | 
						
						
							|||
| 
							
							
								
							
							
	
	
		
			
		
	
	3c05fe4248 | 
						
						
							|||
| 
							
							
								
							
							
	
	
		
			
		
	
	81b43f3dca | 
						
						
							|||
| 
							
							
								
							
							
	
	
		
			
		
	
	05288f04aa | 
						
						
							|||
| 
							
							
								
							
							
	
	
		
			
		
	
	a4edd396f0 | 
						
						
							|||
| 
							
							
								
							
							
	
	
		
			
		
	
	57bb0e03a3 | 
						
						
							|||
| 
							
							
								
							
							
	
	
		
			
		
	
	429314efba | 
						
						
							|||
| 
							
							
								
							
							
	
	
		
			
		
	
	af4a460ceb | 
						
						
							|||
| 
							
							
								
							
							
	
	
		
			
		
	
	ffc8374b9f | 
						
						
							|||
| 
							
							
								
							
							
	
	
		
			
		
	
	7ed667e941 | 
						
						
							
							
								
								
									
										15
									
								
								app/Helpers/LegacyHelper.php
									
										
									
									
									
										Normal file
									
								
							
							
						
						| 
						 | 
				
			
			@ -0,0 +1,15 @@
 | 
			
		|||
<?php
 | 
			
		||||
 | 
			
		||||
if (!function_exists('isLegacy')) {
 | 
			
		||||
    /**
 | 
			
		||||
     * Checks if the current hostname should return the legacy site
 | 
			
		||||
     * @return bool
 | 
			
		||||
     */
 | 
			
		||||
    function isLegacy(): bool {
 | 
			
		||||
        return (
 | 
			
		||||
            request()->getHost() === "legacy.wah.moe" ||        // Accessed via legacy.wah.moe domain
 | 
			
		||||
            str_starts_with(request()->getHost(), "192.168") || // Accessed via local IP address
 | 
			
		||||
            !request()->hasHeader("Host")                  // Browser does not send Host header (e.g. NCSA MOSAIC)
 | 
			
		||||
        );
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			@ -25,7 +25,7 @@ public function getCurrentTrack() {
 | 
			
		|||
        $data = $response->json();
 | 
			
		||||
        $track_data = $data["recenttracks"]["track"][0];
 | 
			
		||||
        // $image = array_column($track_data["image"], null, 'size')['large'] ?? false;
 | 
			
		||||
        $image = $track_data["image"][(array_key_last($track_data["image"]))] ?? false;
 | 
			
		||||
        $image = end($track_data["image"]) ?? false;
 | 
			
		||||
        $now_playing = false;
 | 
			
		||||
        if (array_key_exists("@attr", $track_data)) {
 | 
			
		||||
            $now_playing = $track_data["@attr"]["nowplaying"] == "true" ?? ["url"=>null];
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -8,7 +8,11 @@
 | 
			
		|||
class RoscoLekoController extends Controller {
 | 
			
		||||
    public function getImages(): array {
 | 
			
		||||
        $images = [];
 | 
			
		||||
        foreach (File::glob(public_path('images/pandamonium').'/*') as $path) {
 | 
			
		||||
        $path = 'images/pandamonium';
 | 
			
		||||
        if (isLegacy()) {
 | 
			
		||||
            $path = 'images/pandamonium-legacy';
 | 
			
		||||
        }
 | 
			
		||||
        foreach (File::glob(public_path($path).'/*') as $path) {
 | 
			
		||||
            $image_data = [];
 | 
			
		||||
            try {
 | 
			
		||||
                $exif = exif_read_data($path);
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -24,12 +24,12 @@ public static function insertGuestbookEntry(Request $request) {
 | 
			
		|||
        $newEntry->message = $request->get('message');
 | 
			
		||||
        $newEntry->ip = $request->ip();
 | 
			
		||||
        $newEntry->agent = $request->userAgent();
 | 
			
		||||
        $newEntry->admin = auth()->check();
 | 
			
		||||
        $newEntry->legacy_flagged = isLegacy();
 | 
			
		||||
        $newEntry->save();
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public static function selectEntries() {
 | 
			
		||||
        $entries = GuestbookEntry::orderBy('created_at', 'desc')->get();
 | 
			
		||||
        $entries = GuestbookEntry::where("legacy_flagged", false)->orderBy('created_at', 'desc')->get();
 | 
			
		||||
        return $entries;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -17,9 +17,15 @@ public function __construct() {}
 | 
			
		|||
     * Get the view / contents that represent the component.
 | 
			
		||||
     */
 | 
			
		||||
    public function render(): View|Closure|string {
 | 
			
		||||
        return view('components.layout', [
 | 
			
		||||
            'isChristmas' => $this->isItChristmas()
 | 
			
		||||
        ]);
 | 
			
		||||
        if (isLegacy()) {
 | 
			
		||||
            return view('components.layout-legacy', [
 | 
			
		||||
                'isChristmas' => $this->isItChristmas()
 | 
			
		||||
            ]);
 | 
			
		||||
        } else {
 | 
			
		||||
            return view('components.layout', [
 | 
			
		||||
                'isChristmas' => $this->isItChristmas()
 | 
			
		||||
            ]);
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public function isItChristmas() : bool {
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -17,6 +17,17 @@ public function __construct() {}
 | 
			
		|||
 | 
			
		||||
 | 
			
		||||
    public function getWah(): string {
 | 
			
		||||
        if (isLegacy()) {
 | 
			
		||||
            try {
 | 
			
		||||
                $response = Http::get('https://api.tinyfox.dev/img.json?animal=wah');
 | 
			
		||||
                $data = $response->json();
 | 
			
		||||
                if ($data == null) return "";
 | 
			
		||||
                $path = parse_url("https://api.tinyfox.dev" . $data["loc"], PHP_URL_PATH);
 | 
			
		||||
                return "//".request()->getHttpHost()."/proxy/wah/".basename($path);
 | 
			
		||||
            } catch (Exception $ex) {
 | 
			
		||||
                return "";
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
        try {
 | 
			
		||||
            $response = Http::get('https://api.tinyfox.dev/img.json?animal=wah');
 | 
			
		||||
            $data = $response->json();
 | 
			
		||||
| 
						 | 
				
			
			@ -26,7 +37,6 @@ public function getWah(): string {
 | 
			
		|||
        } catch (Exception $ex) {
 | 
			
		||||
            return "";
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -6,6 +6,8 @@
 | 
			
		|||
    "license": "MIT",
 | 
			
		||||
    "require": {
 | 
			
		||||
        "php": "^8.1",
 | 
			
		||||
        "ext-exif": "*",
 | 
			
		||||
        "browner12/helpers": "^3.7",
 | 
			
		||||
        "guzzlehttp/guzzle": "^7.2",
 | 
			
		||||
        "intervention/image": "^3.9",
 | 
			
		||||
        "laravel/framework": "^10.10",
 | 
			
		||||
| 
						 | 
				
			
			@ -13,8 +15,7 @@
 | 
			
		|||
        "scrivo/highlight.php": "v9.18.1.10",
 | 
			
		||||
        "spatie/laravel-honeypot": "^4.3",
 | 
			
		||||
        "spatie/laravel-html": "^3.4",
 | 
			
		||||
        "ua-parser/uap-php": "^3.9.14",
 | 
			
		||||
        "ext-exif": "*"
 | 
			
		||||
        "ua-parser/uap-php": "^3.9.14"
 | 
			
		||||
    },
 | 
			
		||||
    "require-dev": {
 | 
			
		||||
        "fakerphp/faker": "^1.9.1",
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
							
								
								
									
										1251
									
								
								composer.lock
									
										
									
										generated
									
									
									
								
							
							
						
						| 
						 | 
				
			
			@ -5,7 +5,7 @@
 | 
			
		|||
 | 
			
		||||
return [
 | 
			
		||||
    'name' => env('APP_NAME', 'wah.moe'),
 | 
			
		||||
    'version' => '2025.06.12',
 | 
			
		||||
    'version' => '2025.08.30-patch2',
 | 
			
		||||
    'env' => env('APP_ENV', 'production'),
 | 
			
		||||
    'debug' => (bool) env('APP_DEBUG', false),
 | 
			
		||||
    'url' => env('APP_URL', 'http://localhost'),
 | 
			
		||||
| 
						 | 
				
			
			@ -25,6 +25,7 @@
 | 
			
		|||
        App\Providers\AuthServiceProvider::class,
 | 
			
		||||
        App\Providers\EventServiceProvider::class,
 | 
			
		||||
        App\Providers\RouteServiceProvider::class,
 | 
			
		||||
        browner12\helpers\HelperServiceProvider::class
 | 
			
		||||
    ])->toArray(),
 | 
			
		||||
    'aliases' => Facade::defaultAliases()->merge([
 | 
			
		||||
    ])->toArray(),
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
							
								
								
									
										104
									
								
								public/ai.txt
									
										
									
									
									
										Normal file
									
								
							
							
						
						| 
						 | 
				
			
			@ -0,0 +1,104 @@
 | 
			
		|||
#
 | 
			
		||||
# ai.txt
 | 
			
		||||
# Generated by Empathy First Media Digital Marketing Agency
 | 
			
		||||
# https://EmpathyFirstMedia.com
 | 
			
		||||
#
 | 
			
		||||
 | 
			
		||||
User-Agent: *
 | 
			
		||||
 | 
			
		||||
# Text Permissions
 | 
			
		||||
Disallow: *.txt
 | 
			
		||||
Disallow: *.pdf
 | 
			
		||||
Disallow: *.doc
 | 
			
		||||
Disallow: *.docx
 | 
			
		||||
Disallow: *.odt
 | 
			
		||||
Disallow: *.rtf
 | 
			
		||||
Disallow: *.tex
 | 
			
		||||
Disallow: *.wks
 | 
			
		||||
Disallow: *.wpd
 | 
			
		||||
Disallow: *.wps
 | 
			
		||||
Disallow: *.html
 | 
			
		||||
 | 
			
		||||
# Images Permissions
 | 
			
		||||
Disallow: *.bmp
 | 
			
		||||
Disallow: *.gif
 | 
			
		||||
Disallow: *.ico
 | 
			
		||||
Disallow: *.jpeg
 | 
			
		||||
Disallow: *.jpg
 | 
			
		||||
Disallow: *.png
 | 
			
		||||
Disallow: *.svg
 | 
			
		||||
Disallow: *.tif
 | 
			
		||||
Disallow: *.tiff
 | 
			
		||||
Disallow: *.webp
 | 
			
		||||
 | 
			
		||||
# Audio Permissions
 | 
			
		||||
Disallow: *.aac
 | 
			
		||||
Disallow: *.aiff
 | 
			
		||||
Disallow: *.amr
 | 
			
		||||
Disallow: *.flac
 | 
			
		||||
Disallow: *.m4a
 | 
			
		||||
Disallow: *.mp3
 | 
			
		||||
Disallow: *.oga
 | 
			
		||||
Disallow: *.opus
 | 
			
		||||
Disallow: *.wav
 | 
			
		||||
Disallow: *.wma
 | 
			
		||||
 | 
			
		||||
# Video Permissions
 | 
			
		||||
Disallow: *.mp4
 | 
			
		||||
Disallow: *.webm
 | 
			
		||||
Disallow: *.ogg
 | 
			
		||||
Disallow: *.avi
 | 
			
		||||
Disallow: *.mov
 | 
			
		||||
Disallow: *.wmv
 | 
			
		||||
Disallow: *.flv
 | 
			
		||||
Disallow: *.mkv
 | 
			
		||||
 | 
			
		||||
# Code Permissions
 | 
			
		||||
Disallow: *.py
 | 
			
		||||
Disallow: *.js
 | 
			
		||||
Disallow: *.java
 | 
			
		||||
Disallow: *.c
 | 
			
		||||
Disallow: *.cpp
 | 
			
		||||
Disallow: *.cs
 | 
			
		||||
Disallow: *.h
 | 
			
		||||
Disallow: *.css
 | 
			
		||||
Disallow: *.php
 | 
			
		||||
Disallow: *.swift
 | 
			
		||||
Disallow: *.go
 | 
			
		||||
Disallow: *.rb
 | 
			
		||||
Disallow: *.pl
 | 
			
		||||
Disallow: *.sh
 | 
			
		||||
Disallow: *.sql
 | 
			
		||||
 | 
			
		||||
# Disallow
 | 
			
		||||
Disallow: /
 | 
			
		||||
# --------------------------
 | 
			
		||||
# Empathy First Media AI.TXT
 | 
			
		||||
# --------------------------
 | 
			
		||||
 | 
			
		||||
# @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
 | 
			
		||||
# @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
 | 
			
		||||
# @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
 | 
			
		||||
# @@@@@@@@@@@@@@&&&&&&&&&&&&&&&&&&&&&&@@@@@@@@@@@@@@
 | 
			
		||||
# @@@@@@@@@@@@@&                      &@@@@@@@@@@@@@
 | 
			
		||||
# @@@@@@@@@@@@@&                      &@@@@@@@@@@@@@
 | 
			
		||||
# @@@@@@@@@@@@@&                      &@@@@@@@@@@@@@
 | 
			
		||||
# @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
 | 
			
		||||
# @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
 | 
			
		||||
# @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
 | 
			
		||||
# @@@@@@@@@@@@@&GGGGGGGGGGGGGGGGGGG#@@@@@@@@@@@@@@@@
 | 
			
		||||
# @@@@@@@@@@@@@&                    @@@@@@@@@@@@@@@@
 | 
			
		||||
# @@@@@@@@@@@@@&                    @@@@@@@@@@@@@@@@
 | 
			
		||||
# @@@@@@@@@@@@@@                    @@@@@@@@@@@@@@@@
 | 
			
		||||
# @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
 | 
			
		||||
# @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
 | 
			
		||||
# @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
 | 
			
		||||
# @@@@@@@@@@@@@&                      &@@@@@@@@@@@@@
 | 
			
		||||
# @@@@@@@@@@@@@&                      &@@@@@@@@@@@@@
 | 
			
		||||
# @@@@@@@@@@@@@&                      &@@@@@@@@@@@@@
 | 
			
		||||
# @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
 | 
			
		||||
# @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
 | 
			
		||||
# @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
 | 
			
		||||
 | 
			
		||||
# This ai.txt file was created by Empathy First Media.
 | 
			
		||||
# https://empathyfirstmedia.com/
 | 
			
		||||
| 
						 | 
				
			
			@ -1,7 +1,7 @@
 | 
			
		|||
body {
 | 
			
		||||
  background-color: #f2efbd;
 | 
			
		||||
  color: #2a271c;
 | 
			
		||||
  color: #2f2f42;
 | 
			
		||||
  margin: 20px;
 | 
			
		||||
  background: #80c9fa url("/images/peek.png") no-repeat bottom right 10px fixed;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
img {
 | 
			
		||||
| 
						 | 
				
			
			@ -9,12 +9,12 @@ img {
 | 
			
		|||
}
 | 
			
		||||
 | 
			
		||||
a {
 | 
			
		||||
  color: hsl(183, 93%, 27%);
 | 
			
		||||
  color: #2f2f42;
 | 
			
		||||
  text-decoration: underline dotted;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
a:hover {
 | 
			
		||||
  color: hsl(183, 93%, 15%);
 | 
			
		||||
  color: #2f2f42;
 | 
			
		||||
  text-decoration: underline solid;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -47,3 +47,8 @@ .description {
 | 
			
		|||
  font-size: 90%;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
hr {
 | 
			
		||||
    border: none;
 | 
			
		||||
    border-bottom: 2px solid #2f2f42;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -1,14 +1,14 @@
 | 
			
		|||
:root {
 | 
			
		||||
    --background: #f2efbd;
 | 
			
		||||
    --foreground: #2a271c;
 | 
			
		||||
    --border-color: #f27405;
 | 
			
		||||
    --background: hsl(214, 67%, 85%);
 | 
			
		||||
    --foreground: hsl(214, 20%, 14%);
 | 
			
		||||
    --border-color: hsl(214, 96%, 48%);
 | 
			
		||||
    --border: var(--border-color) 2px solid;
 | 
			
		||||
    --shadow-color: hsla(11, 96%, 43%, 0.4);
 | 
			
		||||
    --shadow-color: hsla(214, 96%, 43%, 0.4);
 | 
			
		||||
    --shadow: drop-shadow(8px 8px var(--shadow-color));
 | 
			
		||||
    --shadow-small: drop-shadow(3px 3px var(--shadow-color));
 | 
			
		||||
    --links: hsl(92, 27%, 22%);
 | 
			
		||||
    --links-hover: hsl(92, 27%, 15%)
 | 
			
		||||
    --table-header: hsla(11, 96%, 43%, 0.2);
 | 
			
		||||
    --links: hsl(214, 27%, 22%);
 | 
			
		||||
    --links-hover: hsl(214, 27%, 15%);
 | 
			
		||||
    --table-header: hsla(214, 96%, 43%, 0.2);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/* ───────────────────────────────────── Fonts ────────────────────────────────────── */
 | 
			
		||||
| 
						 | 
				
			
			@ -74,7 +74,7 @@ #prideflag {
 | 
			
		|||
    top: 0;
 | 
			
		||||
    right: 0;
 | 
			
		||||
    width: 120px;
 | 
			
		||||
    transform-origin: 100% 0%;
 | 
			
		||||
    transform-origin: 100% 0;
 | 
			
		||||
    transition: transform .5s cubic-bezier(.32,1.63,.41,1.01);
 | 
			
		||||
    z-index: 8008135;
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			@ -98,24 +98,13 @@ html {
 | 
			
		|||
body {
 | 
			
		||||
    color: var(--foreground);
 | 
			
		||||
    min-height: 100%;
 | 
			
		||||
    background-color: hsla(0, 0%, 0%, 0);
 | 
			
		||||
    padding: 10px;
 | 
			
		||||
    font-family: "PT Serif";
 | 
			
		||||
    background: url('/images/roscoe_tile.jpg');
 | 
			
		||||
    padding: 5px;
 | 
			
		||||
    font-family: "PT Serif", serif;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
body::before {
 | 
			
		||||
    content: "";
 | 
			
		||||
    position: fixed;
 | 
			
		||||
    top: 0;
 | 
			
		||||
    left: 0;
 | 
			
		||||
    background-image: url("/images/background.jpg");
 | 
			
		||||
    width: 100%;
 | 
			
		||||
    height: 100%;
 | 
			
		||||
    z-index: -1;
 | 
			
		||||
    opacity: 0.8;
 | 
			
		||||
    background-size: cover;
 | 
			
		||||
    background-attachment: fixed;
 | 
			
		||||
    overflow: hidden;
 | 
			
		||||
img.logo_paw {
 | 
			
		||||
    filter: grayscale(100%) sepia(100%) hue-rotate(180deg) saturate(300%);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
h1,
 | 
			
		||||
| 
						 | 
				
			
			@ -170,7 +159,7 @@ div.page-container > div:last-child {
 | 
			
		|||
 | 
			
		||||
header {
 | 
			
		||||
    display: grid;
 | 
			
		||||
    grid-template-columns: 66px 1fr;
 | 
			
		||||
    grid-template-columns: 64px 1fr;
 | 
			
		||||
    grid-template-rows: 1fr;
 | 
			
		||||
    grid-column-gap: 15px;
 | 
			
		||||
    grid-row-gap: 0;
 | 
			
		||||
| 
						 | 
				
			
			@ -178,8 +167,6 @@ header {
 | 
			
		|||
}
 | 
			
		||||
 | 
			
		||||
header img {
 | 
			
		||||
    filter: drop-shadow(2px 2px hsl(0, 0%, 66%));
 | 
			
		||||
    margin-right: 10px;
 | 
			
		||||
    image-rendering: pixelated;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
		 Before Width: | Height: | Size: 2.3 KiB After Width: | Height: | Size: 4 KiB  | 
| 
		 Before Width: | Height: | Size: 562 B After Width: | Height: | Size: 735 B  | 
| 
		 Before Width: | Height: | Size: 1.1 KiB After Width: | Height: | Size: 1.5 KiB  | 
| 
		 Before Width: | Height: | Size: 5.3 KiB After Width: | Height: | Size: 5.3 KiB  | 
							
								
								
									
										
											BIN
										
									
								
								public/images/buttons/servfail.png
									
										
									
									
									
										Normal file
									
								
							
							
						
						| 
		 After Width: | Height: | Size: 891 B  | 
							
								
								
									
										
											BIN
										
									
								
								public/images/logo-v2.gif
									
										
									
									
									
										Executable file
									
								
							
							
						
						| 
		 After Width: | Height: | Size: 746 B  | 
							
								
								
									
										
											BIN
										
									
								
								public/images/logo-v2.png
									
										
									
									
									
										Normal file
									
								
							
							
						
						| 
		 After Width: | Height: | Size: 833 B  | 
							
								
								
									
										
											BIN
										
									
								
								public/images/pandamonium-legacy/filters.jpg
									
										
									
									
									
										Normal file
									
								
							
							
						
						| 
		 After Width: | Height: | Size: 38 KiB  | 
							
								
								
									
										
											BIN
										
									
								
								public/images/pandamonium-legacy/frontrowseat.jpg
									
										
									
									
									
										Normal file
									
								
							
							
						
						| 
		 After Width: | Height: | Size: 42 KiB  | 
							
								
								
									
										
											BIN
										
									
								
								public/images/pandamonium-legacy/gel-drawer.jpg
									
										
									
									
									
										Normal file
									
								
							
							
						
						| 
		 After Width: | Height: | Size: 43 KiB  | 
							
								
								
									
										
											BIN
										
									
								
								public/images/pandamonium-legacy/lxdesk.jpg
									
										
									
									
									
										Normal file
									
								
							
							
						
						| 
		 After Width: | Height: | Size: 31 KiB  | 
							
								
								
									
										
											BIN
										
									
								
								public/images/pandamonium-legacy/pa_meister.jpg
									
										
									
									
									
										Normal file
									
								
							
							
						
						| 
		 After Width: | Height: | Size: 28 KiB  | 
							
								
								
									
										
											BIN
										
									
								
								public/images/pandamonium-legacy/projectionist.jpg
									
										
									
									
									
										Normal file
									
								
							
							
						
						| 
		 After Width: | Height: | Size: 25 KiB  | 
							
								
								
									
										
											BIN
										
									
								
								public/images/pandamonium-legacy/technician.jpg
									
										
									
									
									
										Normal file
									
								
							
							
						
						| 
		 After Width: | Height: | Size: 42 KiB  | 
							
								
								
									
										
											BIN
										
									
								
								public/images/pandamonium-legacy/three-of-them.jpg
									
										
									
									
									
										Normal file
									
								
							
							
						
						| 
		 After Width: | Height: | Size: 30 KiB  | 
							
								
								
									
										
											BIN
										
									
								
								public/images/pandamonium-legacy/two-of-them.jpg
									
										
									
									
									
										Normal file
									
								
							
							
						
						| 
		 After Width: | Height: | Size: 35 KiB  | 
							
								
								
									
										
											BIN
										
									
								
								public/images/peek.png
									
										
									
									
									
										Normal file
									
								
							
							
						
						| 
		 After Width: | Height: | Size: 12 KiB  | 
							
								
								
									
										
											BIN
										
									
								
								public/images/roscoe_tile.jpg
									
										
									
									
									
										Executable file
									
								
							
							
						
						| 
		 After Width: | Height: | Size: 53 KiB  | 
							
								
								
									
										
											BIN
										
									
								
								public/images/separator.gif
									
										
									
									
									
										Normal file
									
								
							
							
						
						| 
		 After Width: | Height: | Size: 145 B  | 
							
								
								
									
										
											BIN
										
									
								
								public/images/wah-paw-v2.gif
									
										
									
									
									
										Normal file
									
								
							
							
						
						| 
		 After Width: | Height: | Size: 746 B  | 
| 
						 | 
				
			
			@ -16,7 +16,7 @@
 | 
			
		|||
            <hr>
 | 
			
		||||
            <ul>
 | 
			
		||||
            @foreach($sites as $site)
 | 
			
		||||
                    <li><a href="{{ $site->url }}">{{ $site->name }}</a> - {{ $site->description }}</li>
 | 
			
		||||
                    <li><a href="{{ $site->url }}"><font color="#000000">{{ $site->name }}</font></a> - {{ $site->description }}</li>
 | 
			
		||||
            @endforeach
 | 
			
		||||
            </ul>
 | 
			
		||||
        </div>
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -1,10 +1,34 @@
 | 
			
		|||
@if (isLegacy())
 | 
			
		||||
    @php
 | 
			
		||||
    $artUrl = null;
 | 
			
		||||
    $path = parse_url($track["image"], PHP_URL_PATH);
 | 
			
		||||
    if ($track["image"] !== "") {
 | 
			
		||||
        $artUrl = "//" . request()->getHttpHost() . "/proxy/lastfm/" . basename($path);
 | 
			
		||||
    }
 | 
			
		||||
    @endphp
 | 
			
		||||
    <table border="0" cellpadding="0" cellspacing="0"><tr>
 | 
			
		||||
            @if ($artUrl !== null)
 | 
			
		||||
                <td><img src="{{ $artUrl }}" alt="Album cover for {{ $track["title"] }} by {{ $track["artist"] }}" border="1"></td>
 | 
			
		||||
            @endif
 | 
			
		||||
            <td width="10px"> </td>
 | 
			
		||||
            <td>
 | 
			
		||||
                <h2>{{ $track["header"] }}:</h2>
 | 
			
		||||
                <a href="{{ $track["url"] }}"><font color="#000000">{{ $track["title"] }}</font></a><br>
 | 
			
		||||
                by {{ $track["artist"] }}<br>
 | 
			
		||||
            </td>
 | 
			
		||||
        </tr></table>
 | 
			
		||||
    <br>
 | 
			
		||||
@else
 | 
			
		||||
<div class="current-track">
 | 
			
		||||
    @if($track["image"] !== "")
 | 
			
		||||
    <div>
 | 
			
		||||
        <img src="{{ $track["image"] }}" alt="Album cover for {{ $track["title"] }} by {{ $track["artist"] }}">
 | 
			
		||||
    </div>
 | 
			
		||||
    @endif
 | 
			
		||||
    <div>
 | 
			
		||||
        <h2>{{ $track["header"] }}:</h2>
 | 
			
		||||
        <a href="{{ $track["url"] }}">{{ $track["title"] }}</a><br>
 | 
			
		||||
        <a href="{{ $track["url"] }}"><font color="#000000">{{ $track["title"] }}</font></a><br>
 | 
			
		||||
        by {{ $track["artist"] }}<br>
 | 
			
		||||
    </div>
 | 
			
		||||
</div>
 | 
			
		||||
@endif
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -1,7 +1,12 @@
 | 
			
		|||
@if (isLegacy())
 | 
			
		||||
<table border="1" cellspacing="0" cellpadding="5">
 | 
			
		||||
    <font size="+2"><b>Top 10 Tracks (Last 30 days):</b></font>
 | 
			
		||||
@else
 | 
			
		||||
<table class="music-top10">
 | 
			
		||||
    <caption>
 | 
			
		||||
        <h2 style="margin-bottom: 5px">Top 10 Tracks (Last 30 days):</h2>
 | 
			
		||||
    </caption>
 | 
			
		||||
@endif
 | 
			
		||||
    <tr>
 | 
			
		||||
        <th><b>#</b></th>
 | 
			
		||||
        <th><b>Track</b></th>
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -1,6 +1,6 @@
 | 
			
		|||
<tr>
 | 
			
		||||
    <td>{{ $count }}</td>
 | 
			
		||||
    <td><a href="{{ $track["url"] }}">{{ $track["title"] }}</a></td>
 | 
			
		||||
    <td><a href="{{ $track["url"] }}"><font color="#000000">{{ $track["title"] }}</font></a></td>
 | 
			
		||||
    <td>{{ $track["artist"] }}</td>
 | 
			
		||||
    <td>{{ $track["plays"] }}</td>
 | 
			
		||||
</tr>
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -20,7 +20,7 @@
 | 
			
		|||
                    Root:    {!! url('') !!}<br>
 | 
			
		||||
                    Path:    @if(Request::path() == "/")/@else/{{ Request::path() }}/@endif<br>
 | 
			
		||||
                    Epoch:   {{ now()->timestamp }}<br>
 | 
			
		||||
                    Agent:   Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:122.0) Gecko/20100101 Firefox/122.0	</code>
 | 
			
		||||
                    Agent:   {{ request()->userAgent() }}</code>
 | 
			
		||||
            </td></tr></table>
 | 
			
		||||
    <hr align="left">
 | 
			
		||||
    <p>© RoscoeDaWah 2021-2024</p>
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
							
								
								
									
										102
									
								
								resources/views/components/layout-legacy.blade.php
									
										
									
									
									
										Normal file
									
								
							
							
						
						| 
						 | 
				
			
			@ -0,0 +1,102 @@
 | 
			
		|||
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
 | 
			
		||||
<!--suppress ALL -->
 | 
			
		||||
<html>
 | 
			
		||||
<head>
 | 
			
		||||
    <meta charset="utf-8">
 | 
			
		||||
    <title>wah! (dot moe) - {{ $title }}</title>
 | 
			
		||||
</head>
 | 
			
		||||
 | 
			
		||||
<body background="/images/roscoe_tile.jpg" bgcolor="#6595fb" text="#000000" link="#FFFFFF" alink="#999999" vlink="#FFFFFF">
 | 
			
		||||
<table bgcolor="#6595fb" width="850px" cellpadding="0" cellspacing="0" border="0">
 | 
			
		||||
    <!-- HEADER -->
 | 
			
		||||
    <tr>
 | 
			
		||||
        <td>
 | 
			
		||||
            <table border="0" cellpadding="0" cellspacing="0" class="nopad">
 | 
			
		||||
                <tr>
 | 
			
		||||
                    <td width="90px">
 | 
			
		||||
                        <img src="/images/logo-v2.gif">
 | 
			
		||||
                    </td>
 | 
			
		||||
                    <td valign="middle"><font color="#FFFFFF" face="sans-serif">
 | 
			
		||||
                            <font size="+10"><b><i>wah! (dot moe)</i></b></font><br>
 | 
			
		||||
                            <i>"i mean it looks alright, but then you realise its all tables" ~ <a href="https://nve.wtf/~alice/">alice</a></i>
 | 
			
		||||
                        </font></td>
 | 
			
		||||
                </tr>
 | 
			
		||||
            </table>
 | 
			
		||||
        </td>
 | 
			
		||||
    </tr>
 | 
			
		||||
    <!-- HEADER END -->
 | 
			
		||||
 | 
			
		||||
    <!-- TOP NAV -->
 | 
			
		||||
    <tr><td height="5px" bgcolor="#3366FF"><font size="-2"> </font></td></tr>
 | 
			
		||||
    <tr>
 | 
			
		||||
        <td>
 | 
			
		||||
            <table bgcolor="#3366FF" border="0" class="nopad" cellpadding="0" cellspacing="0">
 | 
			
		||||
                <tr>
 | 
			
		||||
                    <td width="10px" bgcolor="#3366FF"> </td>
 | 
			
		||||
                    <td bgcolor="#3366FF" width="100%"><font face="sans-serif" color="#FFFFFF">
 | 
			
		||||
                            <x-navigation></x-navigation>
 | 
			
		||||
                        </font></td>
 | 
			
		||||
                    <td width="5px" bgcolor="#3366FF" > </td>
 | 
			
		||||
                </tr>
 | 
			
		||||
            </table>
 | 
			
		||||
        </td>
 | 
			
		||||
    </tr>
 | 
			
		||||
    <tr><td height="5px" bgcolor="#3366FF"><font size="-2"> </font></td></tr>
 | 
			
		||||
    <!-- TOP NAV END -->
 | 
			
		||||
 | 
			
		||||
    <!-- CONTENT -->
 | 
			
		||||
    <tr><td height="5px" bgcolor="#FFFFFF"><font size="-2"> </font></td></tr>
 | 
			
		||||
    <tr>
 | 
			
		||||
        <td>
 | 
			
		||||
            <table bgcolor="#FFFFFF" border="0" class="nopad" cellpadding="0" cellspacing="0">
 | 
			
		||||
                <tr>
 | 
			
		||||
                    <td width="10px" bgcolor="#FFFFFF"> </td>
 | 
			
		||||
                    <td bgcolor="#ffffff" width="100%"><font face="sans-serif">
 | 
			
		||||
                            {{ $slot }}
 | 
			
		||||
                        </font></td>
 | 
			
		||||
                    <td width="5px" bgcolor="#FFFFFF" > </td>
 | 
			
		||||
                </tr>
 | 
			
		||||
            </table>
 | 
			
		||||
        </td>
 | 
			
		||||
    </tr>
 | 
			
		||||
    <tr><td height="5px" bgcolor="#FFFFFF"><font size="-2"> </font></td></tr>
 | 
			
		||||
    <!-- CONTENT END -->
 | 
			
		||||
 | 
			
		||||
    <!-- BOTTOM NAV -->
 | 
			
		||||
    <tr><td height="5px" bgcolor="#3366FF"><font size="-2"> </font></td></tr>
 | 
			
		||||
    <tr>
 | 
			
		||||
        <td>
 | 
			
		||||
            <table bgcolor="#3366FF" border="0" class="nopad" cellpadding="0" cellspacing="0">
 | 
			
		||||
                <tr>
 | 
			
		||||
                    <td width="10px" bgcolor="#3366FF"> </td>
 | 
			
		||||
                    <td bgcolor="#3366FF" width="100%"><font face="sans-serif" color="#FFFFFF">
 | 
			
		||||
                            <x-navigation></x-navigation>
 | 
			
		||||
                        </font></td>
 | 
			
		||||
                    <td width="5px" bgcolor="#3366FF" > </td>
 | 
			
		||||
                </tr>
 | 
			
		||||
            </table>
 | 
			
		||||
        </td>
 | 
			
		||||
    </tr>
 | 
			
		||||
    <tr><td height="5px" bgcolor="#3366FF"><font size="-2"> </font></td></tr>
 | 
			
		||||
    <!-- BOTTOM NAV END -->
 | 
			
		||||
 | 
			
		||||
    <!-- FOOTER -->
 | 
			
		||||
    <tr><td height="5px"><font size="-2"> </font></td></tr>
 | 
			
		||||
    <tr>
 | 
			
		||||
        <td>
 | 
			
		||||
            <table border="0" class="nopad" cellpadding="0" cellspacing="0">
 | 
			
		||||
                <tr>
 | 
			
		||||
                    <td width="10px"> </td>
 | 
			
		||||
                    <td width="100%"><font face="sans-serif" color="#FFFFFF">
 | 
			
		||||
                            © RoscoeDaWah 2021-2025
 | 
			
		||||
                        </font></td>
 | 
			
		||||
                    <td width="5px"> </td>
 | 
			
		||||
                </tr>
 | 
			
		||||
            </table>
 | 
			
		||||
        </td>
 | 
			
		||||
    </tr>
 | 
			
		||||
    <tr><td height="5px"><font size="-2"> </font></td></tr>
 | 
			
		||||
    <!-- FOOTER END -->
 | 
			
		||||
</table>
 | 
			
		||||
</body>
 | 
			
		||||
</html>
 | 
			
		||||
| 
						 | 
				
			
			@ -27,7 +27,7 @@
 | 
			
		|||
        <div id="header">
 | 
			
		||||
            <header>
 | 
			
		||||
                <div>
 | 
			
		||||
                    <img src="{{ asset('/images/logo.png') }}" width="65" alt="A pixel art depiction of a paw, in three alternating shades of orange.">
 | 
			
		||||
                    <img class="logo_paw" src="{{ asset('/images/logo-v2.png') }}" width="65" alt="A pixel art depiction of a paw, in three alternating shades of blue.">
 | 
			
		||||
                </div>
 | 
			
		||||
                <div>
 | 
			
		||||
                    <h1>wah!</h1>
 | 
			
		||||
| 
						 | 
				
			
			@ -41,6 +41,7 @@
 | 
			
		|||
        <div id="content">
 | 
			
		||||
            <main>
 | 
			
		||||
                {{ $slot }}
 | 
			
		||||
                <div class="clear"></div>
 | 
			
		||||
            </main>
 | 
			
		||||
        </div>
 | 
			
		||||
        <div>
 | 
			
		||||
| 
						 | 
				
			
			@ -50,7 +51,7 @@
 | 
			
		|||
                    <span>
 | 
			
		||||
                        © RoscoeDaWah 2021-{{ date('Y') }}<br>
 | 
			
		||||
                        v{{ config('app.version') }}, <a href="https://git.frzn.dev/RoscoeDaWah/wah.moe/releases/latest">Source</a><br>
 | 
			
		||||
                        Served by {{ gethostname() }}
 | 
			
		||||
                        <a href="https://webring.julimiro.eu/api/previous/wah.moe"><</a> <a href="https://webring.julimiro.eu/">the basename ring</a> <a href="https://webring.julimiro.eu/api/next/wah.moe">></a>
 | 
			
		||||
                    </span>
 | 
			
		||||
                </div>
 | 
			
		||||
                <div>
 | 
			
		||||
| 
						 | 
				
			
			@ -60,7 +61,7 @@
 | 
			
		|||
                    <a href="https://x86.isafox.gay/"><img src="{{ URL::asset('images/buttons/x86.gif') }}" alt="x86Overflow"></a>
 | 
			
		||||
                    <a href="https://thinliquid.dev/"><img src="{{ URL::asset('images/buttons/thnlqd.png') }}" alt="thinliquid"></a>
 | 
			
		||||
                    <a href="https://dimden.dev/"><img src="https://dimden.dev/services/images/88x31.gif" alt="Dimden's website"></a><br>
 | 
			
		||||
                    <a href="https://developer.mozilla.org/en-US/docs/Web/CSS"><img src="{{ URL::asset('images/buttons/csshard.gif') }}" alt="CSS is hard"></a>
 | 
			
		||||
                    <img src="{{ URL::asset('images/buttons/servfail.png') }}" alt="Servfail DNS">
 | 
			
		||||
                    <a href="https://linux.org/"><img src="{{ URL::asset('images/buttons/linuxnow.gif') }}" alt="Linux NOW!"></a>
 | 
			
		||||
                    <img src="{{ URL::asset('images/buttons/paws-aliased.png') }}" alt="Made with my own two paws">
 | 
			
		||||
                    <img src="{{ URL::asset('images/buttons/transrights.gif') }}" alt="Trans Rights NOW!">
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -1,9 +1,12 @@
 | 
			
		|||
<nav>
 | 
			
		||||
    <strong>Pages:</strong>
 | 
			
		||||
    <a href="/">home</a> |
 | 
			
		||||
    @if(!isLegacy())
 | 
			
		||||
    <a href="//wiki.wah.moe">wah-ki</a> |
 | 
			
		||||
    @endif
 | 
			
		||||
    <a href="//git.wah.moe">git</a> |
 | 
			
		||||
    <a href="/pub">files</a> |
 | 
			
		||||
    <a href="gopher://wah.moe">gopher</a> |
 | 
			
		||||
    <a href="/bookmarks">bookmarks</a> |
 | 
			
		||||
    <a href="/guestbook">guestbook</a> |
 | 
			
		||||
    <a href="/music">music</a> |
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -1,3 +1,4 @@
 | 
			
		|||
@if(!isLegacy())
 | 
			
		||||
<div class="wah">
 | 
			
		||||
    <h3>Random Wah!</h3>
 | 
			
		||||
    @if ($wah !== "")
 | 
			
		||||
| 
						 | 
				
			
			@ -8,3 +9,4 @@
 | 
			
		|||
        <p>Unable to retrieve image</p>
 | 
			
		||||
    @endif
 | 
			
		||||
</div>
 | 
			
		||||
@endif
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -5,7 +5,7 @@
 | 
			
		|||
            <td>
 | 
			
		||||
                <form method="POST" action="/guestbook">
 | 
			
		||||
                    @csrf
 | 
			
		||||
                    <x-honeypot/>
 | 
			
		||||
                    @if(!isLegacy())<x-honeypot/>@endif
 | 
			
		||||
                    <table class="form" role="presentation">
 | 
			
		||||
                        <tr>
 | 
			
		||||
                            <td>
 | 
			
		||||
| 
						 | 
				
			
			@ -32,7 +32,16 @@
 | 
			
		|||
                        <tr>
 | 
			
		||||
                            <td></td>
 | 
			
		||||
                            <td>
 | 
			
		||||
                                @if(isLegacy())
 | 
			
		||||
                                <input type="submit" name="Submit" VALUE="Submit">
 | 
			
		||||
                                @else
 | 
			
		||||
                                <button type="submit">Submit</button>
 | 
			
		||||
                                @endif
 | 
			
		||||
                            </td>
 | 
			
		||||
                        </tr>
 | 
			
		||||
                        <tr>
 | 
			
		||||
                            <td></td>
 | 
			
		||||
                            <td>
 | 
			
		||||
                            </td>
 | 
			
		||||
                        </tr>
 | 
			
		||||
                    </table>
 | 
			
		||||
| 
						 | 
				
			
			@ -44,12 +53,50 @@
 | 
			
		|||
                    <li>You can submit an entry <u>once every hour</u>.</li>
 | 
			
		||||
                    <li>Your IP address is logged but <u>not</u> publicly displayed.</li>
 | 
			
		||||
                    <li>Any entries that appear to be spam <u>will</u> be removed.</li>
 | 
			
		||||
                    @if (isLegacy())
 | 
			
		||||
                        <li>This form is broken in super-old browsers.</li>
 | 
			
		||||
                        <li>Entries submitted on this site are flagged for manual review.</li>
 | 
			
		||||
                    @endif
 | 
			
		||||
                </ul>
 | 
			
		||||
            </td>
 | 
			
		||||
        </tr>
 | 
			
		||||
    </table>
 | 
			
		||||
 | 
			
		||||
    @if (isLegacy())
 | 
			
		||||
    <font size="+2"><b>Entries ({{ count($entries) }} total)</b></font>
 | 
			
		||||
    <table cellspacing="10" cellpadding="0" border="0">
 | 
			
		||||
        @foreach ($entries as $entry)
 | 
			
		||||
            @php
 | 
			
		||||
                $user_agent = $parser->parse($entry->agent);
 | 
			
		||||
            @endphp
 | 
			
		||||
        <tr>
 | 
			
		||||
            <td>
 | 
			
		||||
                <table cellspacing="2" cellpadding="5" border="1" width="100%">
 | 
			
		||||
                    <tr><td>
 | 
			
		||||
                            Submitted by <b>{{ $entry->name }}</b>
 | 
			
		||||
                            on <b>{{ $entry->created_at->format('Y-m-d') }}</b>
 | 
			
		||||
                            at <b>{{ $entry->created_at->format('h:i:s A (e)') }}</b>
 | 
			
		||||
                        </td></tr>
 | 
			
		||||
                    <tr><td>{{ $entry->message }}</td></tr>
 | 
			
		||||
                    <tr><td>
 | 
			
		||||
                            @if($entry->agent === "Agent Unavailable")
 | 
			
		||||
                                <i>Agent unavailable</i>
 | 
			
		||||
                            @else
 | 
			
		||||
                                @if ($user_agent->ua->toString() == "Other" || $user_agent->os->toString() == "Other")
 | 
			
		||||
                                    <i>Posted using <b>{{ $entry->agent }}</b></i>
 | 
			
		||||
                                @else
 | 
			
		||||
                                <i>Posted using <b>{{ $user_agent->ua->toString() }}</b>
 | 
			
		||||
                                    on <b>{{ $user_agent->os->toString() }}</b></i>
 | 
			
		||||
                                @endif
 | 
			
		||||
                            @endif
 | 
			
		||||
                        </td></tr>
 | 
			
		||||
                </table>
 | 
			
		||||
            </td>
 | 
			
		||||
        </tr>
 | 
			
		||||
        @endforeach
 | 
			
		||||
 | 
			
		||||
    </table>
 | 
			
		||||
    @else
 | 
			
		||||
    <hr>
 | 
			
		||||
    <h2>Entries <small>({{ count($entries) }} total)</small></h2>
 | 
			
		||||
    @foreach ($entries as $entry)
 | 
			
		||||
| 
						 | 
				
			
			@ -66,10 +113,15 @@
 | 
			
		|||
            @if($entry->agent === "Agent Unavailable")
 | 
			
		||||
                <address>Agent unavailable</address>
 | 
			
		||||
            @else
 | 
			
		||||
                <address>Posted using <strong>{{ $user_agent->ua->toString() }}</strong>
 | 
			
		||||
                    on <strong>{{ $user_agent->os->toString() }}</strong></address>
 | 
			
		||||
                @if ($user_agent->ua->toString() == "Other" || $user_agent->os->toString() == "Other")
 | 
			
		||||
                    <address>Posted using <strong>{{ $entry->agent }}</strong></address>
 | 
			
		||||
                @else
 | 
			
		||||
                    <address>Posted using <strong>{{ $user_agent->ua->toString() }}</strong>
 | 
			
		||||
                        on <strong>{{ $user_agent->os->toString() }}</strong></address>
 | 
			
		||||
                @endif
 | 
			
		||||
            @endif
 | 
			
		||||
        </div>
 | 
			
		||||
        <br>
 | 
			
		||||
    @endforeach
 | 
			
		||||
    @endif
 | 
			
		||||
</x-layout>
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -5,25 +5,29 @@
 | 
			
		|||
    <p>Hi! This is my personal homepage on the <strong>W</strong>orld <strong>W</strong>ide
 | 
			
		||||
        <strong>W</strong>eb.
 | 
			
		||||
    </p>
 | 
			
		||||
    <br>
 | 
			
		||||
    @if(!isLegacy())
 | 
			
		||||
        <br>
 | 
			
		||||
    @endif
 | 
			
		||||
    <p>Some quick facts about me:</p>
 | 
			
		||||
    <ul>
 | 
			
		||||
        <li>{{ $age }} y/o, he/him, British</li>
 | 
			
		||||
        <li>Theatre Technician and "Web Developer"</li>
 | 
			
		||||
        <li>Loves ETC desks, prefers Generics to LEDs for some reason</li>
 | 
			
		||||
        <li>Spends way too much time on his computer</li>
 | 
			
		||||
        <li>Favorite games: <a href="https://steamcommunity.com/id/RoscoeDaWah/recommended/420530/">OneShot</a>,
 | 
			
		||||
        <li>Favorite games: <a href="https://steamcommunity.com/id/RoscoeDaWah/recommended/420530/"><font color="#000000">OneShot</font></a>,
 | 
			
		||||
            Minecraft, Stardew Valley, N++ and Starbound</li>
 | 
			
		||||
        <li><a href="http://wxqa.com/">CWOP</a> member</li>
 | 
			
		||||
        <li><a href="http://wxqa.com/"><font color="#000000">CWOP</font></a> member</li>
 | 
			
		||||
    </ul>
 | 
			
		||||
    <br>
 | 
			
		||||
    @if(!isLegacy())
 | 
			
		||||
        <br>
 | 
			
		||||
    @endif
 | 
			
		||||
    <p>Interests:</p>
 | 
			
		||||
    <ul>
 | 
			
		||||
        <li><strong>Tech Theatre</strong> - Lighting, Stage Management, etc.</li>
 | 
			
		||||
        <li><strong>Programming</strong> - HTML, CSS, JavaScript, C#, Java, PHP, Ruby, Python (<a
 | 
			
		||||
                href="https://github.com/RoscoeDaWah">GitHub</a>)</li>
 | 
			
		||||
        <li><strong>Photography</strong> - <a href="https://www.flickr.com/photos/roscoedawah/">Flickr</a></li>
 | 
			
		||||
        <li><strong>Gaming</strong> - <a href="https://steamcommunity.com/id/RoscoeDaWah/">Steam Profile</a>
 | 
			
		||||
                href="https://github.com/RoscoeDaWah"><font color="#000000">GitHub</font></a>)</li>
 | 
			
		||||
        <li><strong>Photography</strong> - <a href="https://www.flickr.com/photos/roscoedawah/"><font color="#000000">Flickr</font></a></li>
 | 
			
		||||
        <li><strong>Gaming</strong> - <a href="https://steamcommunity.com/id/RoscoeDaWah/"><font color="#000000">Steam Profile</font></a>
 | 
			
		||||
        </li>
 | 
			
		||||
    </ul>
 | 
			
		||||
</x-layout>
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -2,7 +2,16 @@
 | 
			
		|||
    <x-slot:title>Absolute Pandamonium!</x-slot:title>
 | 
			
		||||
    <x-slot:cardImage>{{ asset('/images/embeds/pandamonium.png') }}</x-slot:cardImage>
 | 
			
		||||
    <x-slot:cardDescription>Follow the adventures of Rosco, Leko, Viz and AJ!</x-slot:cardDescription>
 | 
			
		||||
    <div class="rosco-leko-gallery">
 | 
			
		||||
    @if (isLegacy())
 | 
			
		||||
        <p><i>Click images for full-size version (56k no!)</i></p>
 | 
			
		||||
        @foreach($images as $image)
 | 
			
		||||
                <a href="{{ str_replace('-legacy', '', $image["path"]) }}"><img src="{{ $image["path"] }}" @if(isset($image["description"])) alt="{{ $image["description"] }}" @endif></a>
 | 
			
		||||
                @if(isset($image["description"]))
 | 
			
		||||
                    <p>{{$image["description"]}}</p>
 | 
			
		||||
                @endif
 | 
			
		||||
        @endforeach
 | 
			
		||||
    @else
 | 
			
		||||
        <div class="rosco-leko-gallery">
 | 
			
		||||
        @foreach($images as $image)
 | 
			
		||||
            <div>
 | 
			
		||||
                <img src="{{ $image["path"] }}" @if(isset($image["description"])) alt="{{ $image["description"] }}" @endif>
 | 
			
		||||
| 
						 | 
				
			
			@ -11,5 +20,6 @@
 | 
			
		|||
                @endif
 | 
			
		||||
            </div>
 | 
			
		||||
        @endforeach
 | 
			
		||||
    </div>
 | 
			
		||||
        </div>
 | 
			
		||||
    @endif
 | 
			
		||||
</x-layout>
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -26,3 +26,19 @@
 | 
			
		|||
Route::post('/guestbook', [GuestbookController::class, 'addEntry'])
 | 
			
		||||
    ->middleware('validator')
 | 
			
		||||
    ->middleware('rate_limit');
 | 
			
		||||
 | 
			
		||||
Route::get('/proxy/wah/{image}', function (string $image) {
 | 
			
		||||
    $client = new \GuzzleHttp\Client();
 | 
			
		||||
    $response = $client->request('GET', 'https://api.tinyfox.dev/hourly/wahs/'.$image);
 | 
			
		||||
 | 
			
		||||
    return response($response->getBody())
 | 
			
		||||
        ->header('Content-Type', $response->getHeader('Content-Type'));
 | 
			
		||||
});
 | 
			
		||||
 | 
			
		||||
Route::get('/proxy/lastfm/{image}', function (string $image) {
 | 
			
		||||
    $client = new \GuzzleHttp\Client();
 | 
			
		||||
    $response = $client->request('GET', 'https://lastfm.freetls.fastly.net/i/u/174s/'.$image);
 | 
			
		||||
 | 
			
		||||
    return response($response->getBody())
 | 
			
		||||
        ->header('Content-Type', $response->getHeader('Content-Type'));
 | 
			
		||||
});
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||