Compare commits
No commits in common. "master" and "v2025.04.02" have entirely different histories.
master
...
v2025.04.0
|
|
@ -1,15 +0,0 @@
|
|||
<?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 = end($track_data["image"]) ?? false;
|
||||
$image = $track_data["image"][(array_key_last($track_data["image"]))] ?? false;
|
||||
$now_playing = false;
|
||||
if (array_key_exists("@attr", $track_data)) {
|
||||
$now_playing = $track_data["@attr"]["nowplaying"] == "true" ?? ["url"=>null];
|
||||
|
|
|
|||
|
|
@ -8,11 +8,7 @@
|
|||
class RoscoLekoController extends Controller {
|
||||
public function getImages(): array {
|
||||
$images = [];
|
||||
$path = 'images/pandamonium';
|
||||
if (isLegacy()) {
|
||||
$path = 'images/pandamonium-legacy';
|
||||
}
|
||||
foreach (File::glob(public_path($path).'/*') as $path) {
|
||||
foreach (File::glob(public_path('images/pandamonium').'/*') 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->legacy_flagged = isLegacy();
|
||||
$newEntry->admin = auth()->check();
|
||||
$newEntry->save();
|
||||
}
|
||||
|
||||
public static function selectEntries() {
|
||||
$entries = GuestbookEntry::where("legacy_flagged", false)->orderBy('created_at', 'desc')->get();
|
||||
$entries = GuestbookEntry::orderBy('created_at', 'desc')->get();
|
||||
return $entries;
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -17,16 +17,10 @@ public function __construct() {}
|
|||
* Get the view / contents that represent the component.
|
||||
*/
|
||||
public function render(): View|Closure|string {
|
||||
if (isLegacy()) {
|
||||
return view('components.layout-legacy', [
|
||||
'isChristmas' => $this->isItChristmas()
|
||||
]);
|
||||
} else {
|
||||
return view('components.layout', [
|
||||
'isChristmas' => $this->isItChristmas()
|
||||
]);
|
||||
}
|
||||
}
|
||||
|
||||
public function isItChristmas() : bool {
|
||||
$currentDate = new DateTime();
|
||||
|
|
|
|||
|
|
@ -17,17 +17,6 @@ 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();
|
||||
|
|
@ -37,6 +26,7 @@ public function getWah(): string {
|
|||
} catch (Exception $ex) {
|
||||
return "";
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
|
|||
|
|
@ -6,8 +6,6 @@
|
|||
"license": "MIT",
|
||||
"require": {
|
||||
"php": "^8.1",
|
||||
"ext-exif": "*",
|
||||
"browner12/helpers": "^3.7",
|
||||
"guzzlehttp/guzzle": "^7.2",
|
||||
"intervention/image": "^3.9",
|
||||
"laravel/framework": "^10.10",
|
||||
|
|
@ -15,7 +13,8 @@
|
|||
"scrivo/highlight.php": "v9.18.1.10",
|
||||
"spatie/laravel-honeypot": "^4.3",
|
||||
"spatie/laravel-html": "^3.4",
|
||||
"ua-parser/uap-php": "^3.9.14"
|
||||
"ua-parser/uap-php": "^3.9.14",
|
||||
"ext-exif": "*"
|
||||
},
|
||||
"require-dev": {
|
||||
"fakerphp/faker": "^1.9.1",
|
||||
|
|
|
|||
1251
composer.lock
generated
|
|
@ -5,7 +5,7 @@
|
|||
|
||||
return [
|
||||
'name' => env('APP_NAME', 'wah.moe'),
|
||||
'version' => '2025.08.30-patch2',
|
||||
'version' => '2025.04.02',
|
||||
'env' => env('APP_ENV', 'production'),
|
||||
'debug' => (bool) env('APP_DEBUG', false),
|
||||
'url' => env('APP_URL', 'http://localhost'),
|
||||
|
|
@ -25,7 +25,6 @@
|
|||
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
|
|
@ -1,104 +0,0 @@
|
|||
#
|
||||
# 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 {
|
||||
color: #2f2f42;
|
||||
background-color: #f2efbd;
|
||||
color: #2a271c;
|
||||
margin: 20px;
|
||||
background: #80c9fa url("/images/peek.png") no-repeat bottom right 10px fixed;
|
||||
}
|
||||
|
||||
img {
|
||||
|
|
@ -9,12 +9,12 @@ img {
|
|||
}
|
||||
|
||||
a {
|
||||
color: #2f2f42;
|
||||
color: hsl(183, 93%, 27%);
|
||||
text-decoration: underline dotted;
|
||||
}
|
||||
|
||||
a:hover {
|
||||
color: #2f2f42;
|
||||
color: hsl(183, 93%, 15%);
|
||||
text-decoration: underline solid;
|
||||
}
|
||||
|
||||
|
|
@ -47,8 +47,3 @@ .description {
|
|||
font-size: 90%;
|
||||
}
|
||||
|
||||
hr {
|
||||
border: none;
|
||||
border-bottom: 2px solid #2f2f42;
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -1,14 +1,14 @@
|
|||
:root {
|
||||
--background: hsl(214, 67%, 85%);
|
||||
--foreground: hsl(214, 20%, 14%);
|
||||
--border-color: hsl(214, 96%, 48%);
|
||||
--background: #f2efbd;
|
||||
--foreground: #2a271c;
|
||||
--border-color: #f27405;
|
||||
--border: var(--border-color) 2px solid;
|
||||
--shadow-color: hsla(214, 96%, 43%, 0.4);
|
||||
--shadow-color: hsla(11, 96%, 43%, 0.4);
|
||||
--shadow: drop-shadow(8px 8px var(--shadow-color));
|
||||
--shadow-small: drop-shadow(3px 3px var(--shadow-color));
|
||||
--links: hsl(214, 27%, 22%);
|
||||
--links-hover: hsl(214, 27%, 15%);
|
||||
--table-header: hsla(214, 96%, 43%, 0.2);
|
||||
--links: hsl(183, 93%, 27%);
|
||||
--links-hover: hsl(183, 93%, 15%);
|
||||
--table-header: hsla(11, 96%, 43%, 0.2);
|
||||
}
|
||||
|
||||
/* ───────────────────────────────────── Fonts ────────────────────────────────────── */
|
||||
|
|
@ -68,25 +68,7 @@ @font-face {
|
|||
font-style: italic;
|
||||
}
|
||||
|
||||
/* ───────────────────────────────────── Pride ────────────────────────────────────── */
|
||||
#prideflag {
|
||||
position: fixed;
|
||||
top: 0;
|
||||
right: 0;
|
||||
width: 120px;
|
||||
transform-origin: 100% 0;
|
||||
transition: transform .5s cubic-bezier(.32,1.63,.41,1.01);
|
||||
z-index: 8008135;
|
||||
}
|
||||
#prideflag:hover {
|
||||
transform: scale(110%);
|
||||
}
|
||||
#prideflag:active {
|
||||
transform: scale(110%);
|
||||
}
|
||||
#prideflag * {
|
||||
pointer-events: all;
|
||||
}
|
||||
|
||||
|
||||
/* ───────────────────────────────────── Global ───────────────────────────────────── */
|
||||
html {
|
||||
|
|
@ -98,13 +80,24 @@ html {
|
|||
body {
|
||||
color: var(--foreground);
|
||||
min-height: 100%;
|
||||
background: url('/images/roscoe_tile.jpg');
|
||||
padding: 5px;
|
||||
font-family: "PT Serif", serif;
|
||||
background-color: hsla(0, 0%, 0%, 0);
|
||||
padding: 10px;
|
||||
font-family: "PT Serif";
|
||||
}
|
||||
|
||||
img.logo_paw {
|
||||
filter: grayscale(100%) sepia(100%) hue-rotate(180deg) saturate(300%);
|
||||
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;
|
||||
}
|
||||
|
||||
h1,
|
||||
|
|
@ -157,34 +150,36 @@ div.page-container > div:last-child {
|
|||
margin-bottom: 0;
|
||||
}
|
||||
|
||||
header {
|
||||
div#header {
|
||||
display: grid;
|
||||
grid-template-columns: 64px 1fr;
|
||||
grid-template-columns: 66px 1fr;
|
||||
grid-template-rows: 1fr;
|
||||
grid-column-gap: 15px;
|
||||
grid-row-gap: 0;
|
||||
align-items: center;
|
||||
}
|
||||
|
||||
header img {
|
||||
div#header img {
|
||||
filter: drop-shadow(2px 2px hsl(0, 0%, 66%));
|
||||
margin-right: 10px;
|
||||
image-rendering: pixelated;
|
||||
}
|
||||
|
||||
header h1 {
|
||||
div#header h1 {
|
||||
margin: 0;
|
||||
font-style: italic;
|
||||
}
|
||||
|
||||
header h1,
|
||||
header p {
|
||||
div#header h1,
|
||||
div#header p {
|
||||
display: inline;
|
||||
}
|
||||
|
||||
main>div {
|
||||
div#content {
|
||||
position: relative;
|
||||
}
|
||||
|
||||
main>div::after {
|
||||
div#content::after {
|
||||
display: block;
|
||||
content: "";
|
||||
clear: both;
|
||||
|
|
|
|||
|
Before Width: | Height: | Size: 4 KiB After Width: | Height: | Size: 2.3 KiB |
|
Before Width: | Height: | Size: 735 B After Width: | Height: | Size: 562 B |
|
Before Width: | Height: | Size: 1.5 KiB After Width: | Height: | Size: 1.1 KiB |
|
Before Width: | Height: | Size: 5.3 KiB After Width: | Height: | Size: 5.3 KiB |
|
Before Width: | Height: | Size: 891 B |
|
Before Width: | Height: | Size: 2.5 MiB |
|
Before Width: | Height: | Size: 746 B |
|
Before Width: | Height: | Size: 833 B |
|
Before Width: | Height: | Size: 38 KiB |
|
Before Width: | Height: | Size: 42 KiB |
|
Before Width: | Height: | Size: 43 KiB |
|
Before Width: | Height: | Size: 31 KiB |
|
Before Width: | Height: | Size: 28 KiB |
|
Before Width: | Height: | Size: 25 KiB |
|
Before Width: | Height: | Size: 42 KiB |
|
Before Width: | Height: | Size: 30 KiB |
|
Before Width: | Height: | Size: 35 KiB |
|
Before Width: | Height: | Size: 12 KiB |
|
|
@ -1,31 +0,0 @@
|
|||
<!--
|
||||
pride flag - copyright (c) 2024 ari melody
|
||||
|
||||
this code is provided AS-IS, WITHOUT ANY WARRANTY, to be
|
||||
freely redistributed and/or modified as you please, however
|
||||
retaining this license in any redistribution.
|
||||
|
||||
please use this flag to link to an LGBTQI+-supporting page
|
||||
of your choosing!
|
||||
|
||||
web: https://arimelody.me
|
||||
source: https://git.arimelody.me/ari/prideflag
|
||||
-->
|
||||
|
||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 120 120" width="120" height="120">
|
||||
<path id="red" d="M120,80 L100,100 L120,120 Z" style="fill:#d20605"/>
|
||||
<path id="orange" d="M120,80 V40 L80,80 L100,100 Z" style="fill:#ef9c00"/>
|
||||
<path id="yellow" d="M120,40 V0 L60,60 L80,80 Z" style="fill:#e5fe02"/>
|
||||
<path id="green" d="M120,0 H80 L40,40 L60,60 Z" style="fill:#09be01"/>
|
||||
<path id="blue" d="M80,0 H40 L20,20 L40,40 Z" style="fill:#081a9a"/>
|
||||
<path id="purple" d="M40,0 H0 L20,20 Z" style="fill:#76008a"/>
|
||||
|
||||
<rect id="black" x="60" width="60" height="60" style="fill:#010101"/>
|
||||
<rect id="brown" x="70" width="50" height="50" style="fill:#603814"/>
|
||||
<rect id="lightblue" x="80" width="40" height="40" style="fill:#73d6ed"/>
|
||||
<rect id="pink" x="90" width="30" height="30" style="fill:#ffafc8"/>
|
||||
<rect id="white" x="100" width="20" height="20" style="fill:#fff"/>
|
||||
|
||||
<rect id="intyellow" x="110" width="10" height="10" style="fill:#fed800"/>
|
||||
<circle id="intpurple" cx="120" cy="0" r="5" stroke="#7601ad" stroke-width="2" fill="none"/>
|
||||
</svg>
|
||||
|
Before Width: | Height: | Size: 1.4 KiB |
|
Before Width: | Height: | Size: 53 KiB |
|
Before Width: | Height: | Size: 145 B |
|
Before Width: | Height: | Size: 746 B |
|
|
@ -16,7 +16,7 @@
|
|||
<hr>
|
||||
<ul>
|
||||
@foreach($sites as $site)
|
||||
<li><a href="{{ $site->url }}"><font color="#000000">{{ $site->name }}</font></a> - {{ $site->description }}</li>
|
||||
<li><a href="{{ $site->url }}">{{ $site->name }}</a> - {{ $site->description }}</li>
|
||||
@endforeach
|
||||
</ul>
|
||||
</div>
|
||||
|
|
|
|||
|
|
@ -1,34 +1,10 @@
|
|||
@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"] }}"><font color="#000000">{{ $track["title"] }}</font></a><br>
|
||||
<a href="{{ $track["url"] }}">{{ $track["title"] }}</a><br>
|
||||
by {{ $track["artist"] }}<br>
|
||||
</div>
|
||||
</div>
|
||||
@endif
|
||||
|
|
|
|||
|
|
@ -1,12 +1,7 @@
|
|||
@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"] }}"><font color="#000000">{{ $track["title"] }}</font></a></td>
|
||||
<td><a href="{{ $track["url"] }}">{{ $track["title"] }}</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: {{ request()->userAgent() }}</code>
|
||||
Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:122.0) Gecko/20100101 Firefox/122.0 </code>
|
||||
</td></tr></table>
|
||||
<hr align="left">
|
||||
<p>© RoscoeDaWah 2021-2024</p>
|
||||
|
|
|
|||
|
|
@ -1,102 +0,0 @@
|
|||
<!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>
|
||||
|
|
@ -6,7 +6,6 @@
|
|||
<meta property="og:type" content="website">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||
<meta name="theme-color" content="#f27405">
|
||||
<meta name="twitter:card" content="summary_large_image">
|
||||
<title>wah! (dot moe)</title>
|
||||
<link rel="stylesheet" href="{{ asset('/css/master.css') }}"/>
|
||||
<link rel="icon" type="image/png" href="{{ asset('/favicon-32x32.png') }}" sizes="32x32"/>
|
||||
|
|
@ -16,18 +15,13 @@
|
|||
|
||||
<!-- Page-specific -->
|
||||
<meta property="og:title" content="wah! (dot moe) - {{ $title }}">
|
||||
<meta property="og:image" content="{{ $cardImage ?? "/favicon-128x128.png" }}">
|
||||
<meta property="og:description" content="{{ $cardDescription ?? "" }}">
|
||||
<meta property="og:image" content="/favicon-128x128.png">
|
||||
</head>
|
||||
<body>
|
||||
<a href="https://git.arimelody.me/ari/prideflag" target="_blank" id="prideflag">
|
||||
<img src="{{ asset('/images/progress.svg') }}" width="120" height="120" alt="progressive pride flag">
|
||||
</a>
|
||||
<div class="page-container">
|
||||
<div id="header">
|
||||
<header>
|
||||
<div>
|
||||
<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.">
|
||||
<img src="{{ asset('/images/logo.png') }}" width="65">
|
||||
</div>
|
||||
<div>
|
||||
<h1>wah!</h1>
|
||||
|
|
@ -36,22 +30,16 @@
|
|||
</p>
|
||||
<x-navigation></x-navigation>
|
||||
</div>
|
||||
</header>
|
||||
</div>
|
||||
<div id="content">
|
||||
<main>
|
||||
{{ $slot }}
|
||||
<div class="clear"></div>
|
||||
</main>
|
||||
</div>
|
||||
<div>
|
||||
<footer>
|
||||
<div id="footer">
|
||||
<div>
|
||||
<span>
|
||||
© RoscoeDaWah 2021-{{ date('Y') }}<br>
|
||||
v{{ config('app.version') }}, <a href="https://git.frzn.dev/RoscoeDaWah/wah.moe/releases/latest">Source</a><br>
|
||||
<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>
|
||||
Served by {{ gethostname() }}
|
||||
</span>
|
||||
</div>
|
||||
<div>
|
||||
|
|
@ -60,8 +48,8 @@
|
|||
<a href="https://julimiro.eu/"><img src="{{ URL::asset('images/buttons/juli.gif') }}" alt="Julimiro.eu"></a>
|
||||
<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>
|
||||
<img src="{{ URL::asset('images/buttons/servfail.png') }}" alt="Servfail DNS">
|
||||
<a href="https://dimden.dev/"><img src="https://dimden.dev/services/images/88x31.gif" alt="dimden.dev"></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>
|
||||
<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!">
|
||||
|
|
@ -69,8 +57,6 @@
|
|||
<img src="{{ URL::asset('images/buttons/aliasing.png') }}" alt="I Heart Aliasing">
|
||||
</div>
|
||||
</div>
|
||||
</footer>
|
||||
</div>
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
||||
|
|
|
|||
|
|
@ -1,12 +1,9 @@
|
|||
<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,4 +1,3 @@
|
|||
@if(!isLegacy())
|
||||
<div class="wah">
|
||||
<h3>Random Wah!</h3>
|
||||
@if ($wah !== "")
|
||||
|
|
@ -9,4 +8,3 @@
|
|||
<p>Unable to retrieve image</p>
|
||||
@endif
|
||||
</div>
|
||||
@endif
|
||||
|
|
|
|||
|
|
@ -5,7 +5,7 @@
|
|||
<td>
|
||||
<form method="POST" action="/guestbook">
|
||||
@csrf
|
||||
@if(!isLegacy())<x-honeypot/>@endif
|
||||
<x-honeypot/>
|
||||
<table class="form" role="presentation">
|
||||
<tr>
|
||||
<td>
|
||||
|
|
@ -32,16 +32,7 @@
|
|||
<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>
|
||||
|
|
@ -53,50 +44,12 @@
|
|||
<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)
|
||||
|
|
@ -112,16 +65,11 @@
|
|||
<hr>
|
||||
@if($entry->agent === "Agent Unavailable")
|
||||
<address>Agent unavailable</address>
|
||||
@else
|
||||
@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,29 +5,25 @@
|
|||
<p>Hi! This is my personal homepage on the <strong>W</strong>orld <strong>W</strong>ide
|
||||
<strong>W</strong>eb.
|
||||
</p>
|
||||
@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/"><font color="#000000">OneShot</font></a>,
|
||||
<li>Favorite games: <a href="https://steamcommunity.com/id/RoscoeDaWah/recommended/420530/">OneShot</a>,
|
||||
Minecraft, Stardew Valley, N++ and Starbound</li>
|
||||
<li><a href="http://wxqa.com/"><font color="#000000">CWOP</font></a> member</li>
|
||||
<li><a href="http://wxqa.com/">CWOP</a> member</li>
|
||||
</ul>
|
||||
@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"><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>
|
||||
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>
|
||||
</li>
|
||||
</ul>
|
||||
</x-layout>
|
||||
|
|
|
|||
|
|
@ -1,16 +1,5 @@
|
|||
<x-layout>
|
||||
<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>
|
||||
@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
|
||||
<x-slot:title>Rosco and Leko</x-slot:title>
|
||||
<div class="rosco-leko-gallery">
|
||||
@foreach($images as $image)
|
||||
<div>
|
||||
|
|
@ -21,5 +10,4 @@
|
|||
</div>
|
||||
@endforeach
|
||||
</div>
|
||||
@endif
|
||||
</x-layout>
|
||||
|
|
|
|||
|
|
@ -26,19 +26,3 @@
|
|||
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'));
|
||||
});
|
||||
|
|
|
|||