Deploy Ladill Servers / deploy (push) Successful in 56s
InjectBootSplash middleware shows a self-branded loading splash once per session while the app boots, then fades out. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
47 lines
1.3 KiB
PHP
47 lines
1.3 KiB
PHP
<?php
|
|
|
|
namespace App\Http\Middleware;
|
|
|
|
use Closure;
|
|
use Illuminate\Http\Request;
|
|
use Illuminate\Support\Facades\Auth;
|
|
use Illuminate\Support\Facades\View;
|
|
use Symfony\Component\HttpFoundation\Response;
|
|
|
|
/**
|
|
* Injects a branded boot splash (Ladill Mail style) into authenticated HTML
|
|
* pages. The splash shows once per browser session while the app loads, then
|
|
* fades out — masking the client-side boot so the app feels instant.
|
|
*/
|
|
class InjectBootSplash
|
|
{
|
|
public function handle(Request $request, Closure $next): Response
|
|
{
|
|
$response = $next($request);
|
|
|
|
if (! $request->isMethod('GET') || ! Auth::check()) {
|
|
return $response;
|
|
}
|
|
|
|
if (! str_contains((string) $response->headers->get('Content-Type', ''), 'text/html')) {
|
|
return $response;
|
|
}
|
|
|
|
$content = $response->getContent();
|
|
if (! is_string($content)
|
|
|| stripos($content, '<body') === false
|
|
|| str_contains($content, 'id="ladill-boot"')) {
|
|
return $response;
|
|
}
|
|
|
|
$splash = View::make('partials.boot-splash')->render();
|
|
$content = preg_replace_callback('/<body\b[^>]*>/i', fn ($m) => $m[0].$splash, $content, 1);
|
|
|
|
if (is_string($content)) {
|
|
$response->setContent($content);
|
|
}
|
|
|
|
return $response;
|
|
}
|
|
}
|