aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorFrankie B <git@diskfloppy.me>2024-06-11 18:02:01 +0100
committerGitHub <noreply@github.com>2024-06-11 18:02:01 +0100
commit0f52d80ca67a49258b235f5831163dd72fbd54cf (patch)
tree9c5cd36b6e0a233e09ac88a4409fb68c63e4781a
parenta64bcc2c4639d5804b6dada23151bfcb8b198121 (diff)
Merge MVC rewrite into master (#21)
* Just commit it all * Require auth * crap * Update homepage * Block AI scrapers * Update cache update script * Add dummy file * Remove unnecessary lastfm config var * Use withQueryParameters for LastFM API * Fix embeds * Update example env * Smard
-rw-r--r--.env.example2
-rw-r--r--app/Http/Controllers/AdminBookmarksController.php15
-rw-r--r--app/Http/Controllers/AdminGuestbookController.php34
-rw-r--r--app/Http/Controllers/AdminImportController.php69
-rw-r--r--app/Http/Controllers/BookmarksController.php15
-rw-r--r--app/Http/Controllers/CalculatorsController.php13
-rw-r--r--app/Http/Controllers/ComputersController.php13
-rw-r--r--app/Http/Controllers/GuestbookController.php49
-rw-r--r--app/Http/Controllers/HomeController.php32
-rw-r--r--app/Http/Controllers/MusicController.php69
-rw-r--r--app/Http/Middleware/RateLimiter.php3
-rw-r--r--app/Models/BookmarkCategory.php36
-rw-r--r--app/Models/BookmarkSite.php35
-rw-r--r--app/Models/GuestbookEntry.php50
-rw-r--r--app/Models/User.php45
-rw-r--r--app/View/Components/CurrentTrack.php27
-rw-r--r--app/View/Components/Layout.php26
-rw-r--r--app/View/Components/Navbar.php27
-rw-r--r--app/View/Components/TopTracks.php27
-rw-r--r--app/View/Components/Track.php29
-rwxr-xr-xauth0bin0 -> 48638418 bytes
-rw-r--r--composer.json1
-rw-r--r--composer.lock757
-rw-r--r--config/auth0.php11
-rw-r--r--config/services.php1
-rw-r--r--database/factories/BookmarkCategoryFactory.php23
-rw-r--r--database/factories/BookmarkSiteFactory.php27
-rw-r--r--database/migrations/2024_01_31_204815_create_guestbook__bans_table.php29
-rw-r--r--database/migrations/2024_01_31_210227_populate_bookmark__categories_table.php34
-rw-r--r--database/migrations/2024_02_13_230402_create_bookmark__categories_table.php (renamed from database/migrations/2024_01_31_204730_create_bookmark__categories_table.php)4
-rw-r--r--database/migrations/2024_02_13_230457_create_bookmark__sites_table.php (renamed from database/migrations/2024_01_31_204742_create_bookmark__sites_table.php)18
-rw-r--r--database/migrations/2024_02_25_151527_create_guestbook__entries_table.php (renamed from database/migrations/2024_01_31_204820_create_guestbook__entries_table.php)13
-rw-r--r--database/seeders/BookmarkCategoriesTableSeeder.php30
-rw-r--r--database/seeders/DatabaseSeeder.php22
-rw-r--r--public/css/master.css179
-rw-r--r--public/images/icons/home2/user-desktop.pngbin0 -> 780 bytes
-rw-r--r--public/images/icons/nav/admin.pngbin0 -> 705 bytes
-rw-r--r--public/images/icons/nav/home2.pngbin0 -> 1159 bytes
-rw-r--r--public/js/neverSaid.js52
-rw-r--r--public/robots.txt16
-rw-r--r--resources/js/neverSaid.js35
-rw-r--r--resources/js/schemeSwap.js70
-rw-r--r--resources/views/admin/bookmarks.blade.php28
-rw-r--r--resources/views/admin/guestbook.blade.php32
-rw-r--r--resources/views/admin/import-success.blade.php12
-rw-r--r--resources/views/admin/import.blade.php18
-rw-r--r--resources/views/bookmarks.blade.php18
-rw-r--r--resources/views/calculators.blade.php (renamed from resources/views/pages/calculators.blade.php)0
-rw-r--r--resources/views/components/current-track.blade.php4
-rw-r--r--resources/views/components/layout.blade.php113
-rw-r--r--resources/views/components/minimal-error.blade.php28
-rw-r--r--resources/views/components/minimal.blade.php0
-rw-r--r--resources/views/components/navbar.blade.php18
-rw-r--r--resources/views/components/top-tracks.blade.php16
-rw-r--r--resources/views/components/track.blade.php6
-rw-r--r--resources/views/computers.blade.php187
-rw-r--r--resources/views/errors/401.blade.php9
-rw-r--r--resources/views/errors/402.blade.php9
-rw-r--r--resources/views/errors/403.blade.php9
-rw-r--r--resources/views/errors/404.blade.php31
-rw-r--r--resources/views/errors/418.blade.php9
-rw-r--r--resources/views/errors/419.blade.php9
-rw-r--r--resources/views/errors/429.blade.php9
-rw-r--r--resources/views/errors/500.blade.php9
-rw-r--r--resources/views/errors/503.blade.php9
-rw-r--r--resources/views/errors/generic-error.blade.php7
-rw-r--r--resources/views/errors/guestbook-ipban.blade.php7
-rw-r--r--resources/views/errors/guestbook-ratelimit.blade.php7
-rw-r--r--resources/views/errors/layout.blade.php53
-rw-r--r--resources/views/errors/minimal.blade.php24
-rw-r--r--resources/views/guestbook.blade.php (renamed from resources/views/pages/guestbook.blade.php)37
-rw-r--r--resources/views/home.blade.php45
-rw-r--r--resources/views/includes/admin/header.blade.php12
-rw-r--r--resources/views/includes/footer.blade.php2
-rw-r--r--resources/views/music.blade.php6
-rw-r--r--resources/views/pages/admin/guestbook-del-confirm.blade.php33
-rw-r--r--resources/views/pages/admin/guestbook.blade.php32
-rw-r--r--resources/views/pages/admin/index.blade.php9
-rw-r--r--resources/views/pages/bookmarks.blade.php52
-rw-r--r--resources/views/pages/bot.blade.php7
-rw-r--r--resources/views/pages/computers.blade.php442
-rw-r--r--resources/views/pages/home.blade.php88
-rw-r--r--resources/views/pages/music.blade.php66
-rw-r--r--resources/views/pages/projects.blade.php16
-rw-r--r--resources/views/pages/template.blade.php6
-rw-r--r--resources/views/pages/weather.blade.php61
-rw-r--r--routes/web.php111
-rwxr-xr-xscripts/updatecache.sh1
88 files changed, 1983 insertions, 1662 deletions
diff --git a/.env.example b/.env.example
index 17b3e4f..72dbf35 100644
--- a/.env.example
+++ b/.env.example
@@ -26,5 +26,3 @@ MEMCACHED_HOST=127.0.0.1
LASTFM_KEY=
LASTFM_USER=
-LASTFM_TOP_TRACKS=10
-API_ROOT=http://127.0.0.1:3000
diff --git a/app/Http/Controllers/AdminBookmarksController.php b/app/Http/Controllers/AdminBookmarksController.php
new file mode 100644
index 0000000..c7d8afd
--- /dev/null
+++ b/app/Http/Controllers/AdminBookmarksController.php
@@ -0,0 +1,15 @@
+<?php
+
+namespace App\Http\Controllers;
+
+use App\Models\BookmarkCategory;
+use Illuminate\Support\Facades\DB;
+use Illuminate\View\View;
+
+class AdminBookmarksController extends Controller
+{
+ public function show() : View {
+ $categories = BookmarkCategory::with('sites')->get();
+ return view('admin.bookmarks', compact('categories'));
+ }
+}
diff --git a/app/Http/Controllers/AdminGuestbookController.php b/app/Http/Controllers/AdminGuestbookController.php
new file mode 100644
index 0000000..5ebf451
--- /dev/null
+++ b/app/Http/Controllers/AdminGuestbookController.php
@@ -0,0 +1,34 @@
+<?php
+
+namespace App\Http\Controllers;
+
+use App\Models\GuestbookEntry;
+use Illuminate\Support\Facades\DB;
+use Illuminate\View\View;
+use UAParser\Parser;
+
+class AdminGuestbookController extends Controller
+{
+ function getGuestbookUniqueAddr(): int {
+ $uniqueIpsCount = DB::table('guestbook__entries')->distinct()->count('ip');
+ return $uniqueIpsCount;
+ }
+
+ function getGuestbookEntriesCount(): int {
+ $entryCount = DB::table('guestbook__entries')->count();
+ return $entryCount;
+ }
+ public function show() : View {
+ $guestbook_unique_addr = $this->getGuestbookUniqueAddr();
+ $guestbook_entry_count = $this->getGuestbookEntriesCount();
+ $entries = GuestbookEntry::selectEntries();
+ $parser = Parser::create();
+
+ return view('admin.guestbook', [
+ 'guestbook_unique_addr' => $guestbook_unique_addr,
+ 'guestbook_entry_count' => $guestbook_entry_count,
+ 'entries' => $entries,
+ 'parser' => $parser,
+ ]);
+ }
+}
diff --git a/app/Http/Controllers/AdminImportController.php b/app/Http/Controllers/AdminImportController.php
new file mode 100644
index 0000000..dc32cec
--- /dev/null
+++ b/app/Http/Controllers/AdminImportController.php
@@ -0,0 +1,69 @@
+<?php
+
+namespace App\Http\Controllers;
+
+use App\Models\BookmarkCategory;
+use App\Models\BookmarkSite;
+use App\Models\GuestbookEntry;
+use Exception;
+use Illuminate\Http\Request;
+use Illuminate\View\View;
+
+class AdminImportController extends Controller
+{
+ public function show() : View {
+ return view('admin.import');
+ }
+
+ public function submit(Request $request)
+ {
+ $request->validate([
+ 'data_file' => 'required|mimes:json',
+ ]);
+
+ $file = $request->file('data_file');
+ $jsonContent = file_get_contents($file->getRealPath());
+ $data = json_decode($jsonContent, true);
+ $tables = [];
+ foreach($data as $item) {
+ if ($item['type'] !== "table") continue;
+ $tables[$item['name']] = [
+ 'data' => $item['data'],
+ 'count' => count($item['data'])
+ ];
+
+ if ($item['name'] === "guestbook__entries") {
+ GuestbookEntry::importGuestbookEntry($item['data']);
+ }
+ $this->import($item['data'], $item['name']);
+ }
+ return view('admin.import-success', ['tables' => $tables]);
+ }
+
+ /**
+ * Imports the given data to the specified table
+ *
+ * @param array $data The data to import
+ * @param string $table_name The name of the table to import to
+ * @return void
+ * @throws Exception Invalid table specified, to be replaced with custom exception
+ */
+ public function import(array $data, string $table_name): void {
+ switch ($table_name) {
+ case 'guestbook__entries':
+ GuestbookEntry::importGuestbookEntry($data);
+ break;
+ case 'bookmark__categories' :
+ BookmarkCategory::importBookmarkCategory($data);
+ break;
+ case 'bookmark__sites':
+ BookmarkSite::importBookmark($data);
+ break;
+ case 'guestbook__bans':
+ break;
+ default:
+ // TODO: Replace with custom exception
+ throw new Exception("Invalid table specified ($table_name)");
+ }
+ }
+}
diff --git a/app/Http/Controllers/BookmarksController.php b/app/Http/Controllers/BookmarksController.php
new file mode 100644
index 0000000..56aacc7
--- /dev/null
+++ b/app/Http/Controllers/BookmarksController.php
@@ -0,0 +1,15 @@
+<?php
+
+namespace App\Http\Controllers;
+
+use App\Models\BookmarkSite;
+use App\Models\BookmarkCategory;
+use Illuminate\View\View;
+
+class BookmarksController extends Controller
+{
+ public function show() : View {
+ $categories = BookmarkCategory::with('sites')->get();
+ return view('bookmarks', compact('categories'));
+ }
+}
diff --git a/app/Http/Controllers/CalculatorsController.php b/app/Http/Controllers/CalculatorsController.php
new file mode 100644
index 0000000..38a7a41
--- /dev/null
+++ b/app/Http/Controllers/CalculatorsController.php
@@ -0,0 +1,13 @@
+<?php
+
+namespace App\Http\Controllers;
+
+use Illuminate\Http\Request;
+use Illuminate\View\View;
+
+class CalculatorsController extends Controller
+{
+ public function show() : View {
+ return view('calculators');
+ }
+}
diff --git a/app/Http/Controllers/ComputersController.php b/app/Http/Controllers/ComputersController.php
new file mode 100644
index 0000000..e16e70d
--- /dev/null
+++ b/app/Http/Controllers/ComputersController.php
@@ -0,0 +1,13 @@
+<?php
+
+namespace App\Http\Controllers;
+
+use Illuminate\Http\Request;
+use Illuminate\View\View;
+
+class ComputersController extends Controller
+{
+ public function show() : View {
+ return view('computers');
+ }
+}
diff --git a/app/Http/Controllers/GuestbookController.php b/app/Http/Controllers/GuestbookController.php
index 70707d7..df726ef 100644
--- a/app/Http/Controllers/GuestbookController.php
+++ b/app/Http/Controllers/GuestbookController.php
@@ -2,37 +2,46 @@
namespace App\Http\Controllers;
+use App\Models\GuestbookEntry;
use Illuminate\Http\Request;
-use DB;
+use Illuminate\Http\RedirectResponse;
+use Illuminate\Contracts\View\View;
+use Illuminate\Validation\ValidationException;
+use UAParser\Parser;
class GuestbookController extends Controller {
- public function guestbook() {
- return view('pages.guestbook');
+ public function show(): View {
+ $entries = GuestbookEntry::selectEntries();
+ $parser = Parser::create();
+
+ return view('guestbook')
+ ->with('entries', $entries)
+ ->with('parser', $parser);
}
- public function guestbookPost(Request $request) {
+ /**
+ * Creates a new guestbook entry
+ *
+ * @param Request $request
+ * @return RedirectResponse
+ * @throws ValidationException
+ */
+ public function addEntry(Request $request): RedirectResponse {
$this->validate($request, [
'name' => 'required',
'message' => 'required'
]);
- $matching_bans = DB::select('SELECT reason FROM guestbook__bans WHERE ip_address = ?', array($request->ip()));
-
- if (!empty($matching_bans)) {
- return view('errors.guestbook-ipban')->with('reason', $matching_bans[0]->reason);
- }
-
- DB::insert(
- 'INSERT INTO guestbook__entries (name, timestamp, ip_address, agent, message) values (?, ?, ?, ?, ?)',
- [
- htmlspecialchars($request->get('name')),
- time(),
- $request->ip(),
- $request->userAgent(),
- htmlspecialchars($request->get('message'))
- ]
- );
+ GuestbookEntry::insertGuestbookEntry($request);
return back()->with('success', 'Entry submitted successfully!');
}
+
+ public function banIP(string $addr) {
+ // TODO: Add banning system
+ // $matching_bans = DB::select('SELECT reason FROM guestbook__bans WHERE ip_address = ?', array($request->ip()));
+ // if (!empty($matching_bans)) {
+ // return view('errors.guestbook-ipban')->with('reason', $matching_bans[0]->reason);
+ // }
+ }
}
diff --git a/app/Http/Controllers/HomeController.php b/app/Http/Controllers/HomeController.php
new file mode 100644
index 0000000..3fad094
--- /dev/null
+++ b/app/Http/Controllers/HomeController.php
@@ -0,0 +1,32 @@
+<?php
+
+namespace App\Http\Controllers;
+
+use Illuminate\View\View;
+use DateTime;
+
+class HomeController extends Controller
+{
+ /**
+ * Returns age based on birthday date and current date (GMT)
+ * @return int
+ */
+ function returnAge(): int
+ {
+ date_default_timezone_set('Europe/London');
+ $birthday = new DateTime("2005-06-07");
+ $currentDate = DateTime::createFromFormat("Y-m-d", date("Y-m-d"));
+ $age = $birthday->diff($currentDate);
+ return $age->y;
+ }
+
+ /**
+ * Shows home page
+ * @return View
+ */
+ public function show() : View {
+ return view('home', [
+ 'age' => $this->returnAge()
+ ]);
+ }
+}
diff --git a/app/Http/Controllers/MusicController.php b/app/Http/Controllers/MusicController.php
new file mode 100644
index 0000000..5e31d86
--- /dev/null
+++ b/app/Http/Controllers/MusicController.php
@@ -0,0 +1,69 @@
+<?php
+
+namespace App\Http\Controllers;
+
+use Illuminate\Support\Facades\Cache;
+use Illuminate\Support\Facades\Config;
+use Illuminate\Support\Facades\Http;
+use Illuminate\View\View;
+
+class MusicController extends Controller
+{
+ public function getCurrentTrack() {
+ // If it's already cached just return that
+ if (Cache::has('current_track')) {
+ return Cache::get('current_track');
+ }
+
+ $response = Http::withQueryParameters([
+ 'method' => 'user.getrecenttracks',
+ 'user' => Config::get('services.lastfm.user'),
+ 'format' => 'json',
+ 'nowplaying' => 'true',
+ 'api_key' => Config::get('services.lastfm.key')
+ ])->get('https://ws.audioscrobbler.com/2.0/');
+ $data = $response->json();
+ error_log($response->body());
+ $track_data = $data["recenttracks"]["track"][0];
+ $current_track = [
+ 'title' => $track_data["name"],
+ 'artist' => $track_data["artist"]["#text"],
+ 'url' => $track_data["url"],
+ ];
+ Cache::put('current_track', $current_track, now()->addSeconds(15));
+ return $current_track;
+ }
+
+ public function getTopTracks() {
+ // If it's already cached just return that
+ if (Cache::has('top_tracks')) {
+ return Cache::get('top_tracks');
+ }
+
+ $response = Http::withQueryParameters([
+ 'method' => 'user.gettoptracks',
+ 'user' => Config::get('services.lastfm.user'),
+ 'format' => 'json',
+ 'period' => '1month',
+ 'limit' => 10,
+ 'api_key' => Config::get('services.lastfm.key')
+ ])->get('https://ws.audioscrobbler.com/2.0/');
+ $data = $response->json();
+ $topTracks = [];
+ foreach ($data["toptracks"]["track"] as $track) {
+ $topTracks[] = [
+ 'title' => $track["name"],
+ 'artist' => $track["artist"]["name"],
+ 'url' => $track["url"],
+ 'plays' => $track["playcount"],
+ ];
+ }
+ Cache::put('top_tracks', $topTracks, now()->addSeconds(15));
+ return $topTracks;
+ }
+ public function show() : View {
+ return view('music')
+ ->with('current_track', $this->getCurrentTrack())
+ ->with('top_tracks', $this->getTopTracks());
+ }
+}
diff --git a/app/Http/Middleware/RateLimiter.php b/app/Http/Middleware/RateLimiter.php
index 09eb0a9..821868f 100644
--- a/app/Http/Middleware/RateLimiter.php
+++ b/app/Http/Middleware/RateLimiter.php
@@ -16,6 +16,9 @@ class RateLimiter
*/
public function handle(Request $request, Closure $next): Response
{
+ if (auth()->check()) {
+ return $next($request);
+ }
$ipAddress = $request->ip();
$cacheKey = 'rate_limit_'.$ipAddress;
diff --git a/app/Models/BookmarkCategory.php b/app/Models/BookmarkCategory.php
new file mode 100644
index 0000000..a8bc8d2
--- /dev/null
+++ b/app/Models/BookmarkCategory.php
@@ -0,0 +1,36 @@
+<?php
+
+namespace App\Models;
+
+use Illuminate\Database\Eloquent\Factories\HasFactory;
+use Illuminate\Database\Eloquent\Model;
+
+class BookmarkCategory extends Model
+{
+ use HasFactory;
+ protected $table = "bookmark__categories";
+ protected $fillable = ['name'];
+
+ public function sites() {
+ return $this->hasMany(BookmarkSite::class, 'category');
+ }
+
+ public static function insertBookmarkCategory(string $name) {
+ $newBookmarkCategory = new BookmarkCategory;
+ $newBookmarkCategory->name = $name;
+ $newBookmarkCategory->save();
+ }
+ public static function selectBookmarks(int $id) {
+ $bookmarks = BookmarkSite::where('category', '=', $id)->firstOrFail();
+ return $bookmarks;
+ }
+
+ public static function importBookmarkCategory(array $data) {
+ foreach ($data as $category) {
+ $newBookmarkCategory = new BookmarkCategory;
+ $newBookmarkCategory->name = $category['name'];
+ $newBookmarkCategory->priority = intval($category['priority']);
+ $newBookmarkCategory->save();
+ }
+ }
+}
diff --git a/app/Models/BookmarkSite.php b/app/Models/BookmarkSite.php
new file mode 100644
index 0000000..3c9cc5d
--- /dev/null
+++ b/app/Models/BookmarkSite.php
@@ -0,0 +1,35 @@
+<?php
+
+namespace App\Models;
+
+use Illuminate\Database\Eloquent\Factories\HasFactory;
+use Illuminate\Database\Eloquent\Model;
+
+class BookmarkSite extends Model {
+ use HasFactory;
+ protected $table = "bookmark__sites";
+ protected $fillable = ['name', 'description', 'url', 'category'];
+
+ public function category() {
+ return $this->belongsTo(BookmarkCategory::class, 'category');
+ }
+ public static function insertBookmark(string $name, string $url, int $category) {
+ $category = BookmarkCategory::where('id', $category)->firstOrFail();
+ $newBookmark = new BookmarkSite;
+ $newBookmark->name = $name;
+ $newBookmark->url = $url;
+ $newBookmark->category = $category->id;
+ $newBookmark->save();
+ }
+
+ public static function importBookmark(array $data) {
+ foreach ($data as $site) {
+ $newBookmark = new BookmarkSite;
+ $newBookmark->name = $site['name'];
+ $newBookmark->description = $site['description'];
+ $newBookmark->url = $site['url'];
+ $newBookmark->category = $site['category_id'];
+ $newBookmark->save();
+ }
+ }
+}
diff --git a/app/Models/GuestbookEntry.php b/app/Models/GuestbookEntry.php
new file mode 100644
index 0000000..f5e2de2
--- /dev/null
+++ b/app/Models/GuestbookEntry.php
@@ -0,0 +1,50 @@
+<?php
+
+namespace App\Models;
+
+use Illuminate\Http\Request;
+use Illuminate\Database\Eloquent\Factories\HasFactory;
+use Illuminate\Database\Eloquent\Model;
+
+class GuestbookEntry extends Model
+{
+ use HasFactory;
+ protected $table = "guestbook__entries";
+ protected $fillable = ['name', 'message'];
+
+ /**
+ * Creates a new guestbook entry.
+ *
+ * @param Request $request The HTTP POST request
+ * @return void
+ */
+ public static function insertGuestbookEntry(Request $request) {
+ $newEntry = new GuestbookEntry;
+ $newEntry->name = htmlspecialchars($request->get('name'));
+ $newEntry->message = htmlspecialchars($request->get('message'));
+ $newEntry->ip = $request->ip();
+ $newEntry->agent = $request->userAgent();
+ $newEntry->admin = auth()->check();
+ $newEntry->save();
+ }
+
+ public static function selectEntries() {
+ $entries = GuestbookEntry::orderBy('created_at', 'desc')->get();
+ return $entries;
+ }
+
+ public static function importGuestbookEntry(array $data) {
+ foreach ($data as $entry) {
+ $dt = new \DateTime('@' . $entry['timestamp']);
+ $newEntry = new GuestbookEntry;
+ $newEntry->name = $entry['name'];
+ $newEntry->ip = $entry['ip_address'];
+ $newEntry->agent = $entry['agent'];
+ $newEntry->admin = $entry['site_owner'];
+ $newEntry->message = $entry['message'];
+ $newEntry->created_at = $dt;
+ $newEntry->updated_at = $dt;
+ $newEntry->save();
+ }
+ }
+}
diff --git a/app/Models/User.php b/app/Models/User.php
deleted file mode 100644
index 4d7f70f..0000000
--- a/app/Models/User.php
+++ /dev/null
@@ -1,45 +0,0 @@
-<?php
-
-namespace App\Models;
-
-// use Illuminate\Contracts\Auth\MustVerifyEmail;
-use Illuminate\Database\Eloquent\Factories\HasFactory;
-use Illuminate\Foundation\Auth\User as Authenticatable;
-use Illuminate\Notifications\Notifiable;
-use Laravel\Sanctum\HasApiTokens;
-
-class User extends Authenticatable
-{
- use HasApiTokens, HasFactory, Notifiable;
-
- /**
- * The attributes that are mass assignable.
- *
- * @var array<int, string>
- */
- protected $fillable = [
- 'name',
- 'email',
- 'password',
- ];
-
- /**
- * The attributes that should be hidden for serialization.
- *
- * @var array<int, string>
- */
- protected $hidden = [
- 'password',
- 'remember_token',
- ];
-
- /**
- * The attributes that should be cast.
- *
- * @var array<string, string>
- */
- protected $casts = [
- 'email_verified_at' => 'datetime',
- 'password' => 'hashed',
- ];
-}
diff --git a/app/View/Components/CurrentTrack.php b/app/View/Components/CurrentTrack.php
new file mode 100644
index 0000000..337809a
--- /dev/null
+++ b/app/View/Components/CurrentTrack.php
@@ -0,0 +1,27 @@
+<?php
+
+namespace App\View\Components;
+
+use Closure;
+use Illuminate\Contracts\View\View;
+use Illuminate\View\Component;
+
+class CurrentTrack extends Component
+{
+ public $track;
+ /**
+ * Create a new component instance.
+ */
+ public function __construct($track)
+ {
+ $this->track = $track;
+ }
+
+ /**
+ * Get the view / contents that represent the component.
+ */
+ public function render(): View|Closure|string
+ {
+ return view('components.current-track');
+ }
+}
diff --git a/app/View/Components/Layout.php b/app/View/Components/Layout.php
new file mode 100644
index 0000000..576d1a0
--- /dev/null
+++ b/app/View/Components/Layout.php
@@ -0,0 +1,26 @@
+<?php
+
+namespace App\View\Components;
+
+use Closure;
+use Illuminate\Contracts\View\View;
+use Illuminate\View\Component;
+
+class Layout extends Component
+{
+ /**
+ * Create a new component instance.
+ */
+ public function __construct()
+ {
+ //
+ }
+
+ /**
+ * Get the view / contents that represent the component.
+ */
+ public function render(): View|Closure|string
+ {
+ return view('components.layout');
+ }
+}
diff --git a/app/View/Components/Navbar.php b/app/View/Components/Navbar.php
new file mode 100644
index 0000000..a19db3b
--- /dev/null
+++ b/app/View/Components/Navbar.php
@@ -0,0 +1,27 @@
+<?php
+
+namespace App\View\Components;
+
+use Closure;
+use Illuminate\Contracts\View\View;
+use Illuminate\View\Component;
+
+class Navbar extends Component
+{
+ public $title;
+ /**
+ * Create a new component instance.
+ */
+ public function __construct($title)
+ {
+ $this->title = $title;
+ }
+
+ /**
+ * Get the view / contents that represent the component.
+ */
+ public function render(): View|Closure|string
+ {
+ return view('components.navbar');
+ }
+}
diff --git a/app/View/Components/TopTracks.php b/app/View/Components/TopTracks.php
new file mode 100644
index 0000000..768ce33
--- /dev/null
+++ b/app/View/Components/TopTracks.php
@@ -0,0 +1,27 @@
+<?php
+
+namespace App\View\Components;
+
+use Closure;
+use Illuminate\Contracts\View\View;
+use Illuminate\View\Component;
+
+class TopTracks extends Component
+{
+ public $tracks;
+ /**
+ * Create a new component instance.
+ */
+ public function __construct($tracks)
+ {
+ $this->tracks = $tracks;
+ }
+
+ /**
+ * Get the view / contents that represent the component.
+ */
+ public function render(): View|Closure|string
+ {
+ return view('components.top-tracks');
+ }
+}
diff --git a/app/View/Components/Track.php b/app/View/Components/Track.php
new file mode 100644
index 0000000..b9f628f
--- /dev/null
+++ b/app/View/Components/Track.php
@@ -0,0 +1,29 @@
+<?php
+
+namespace App\View\Components;
+
+use Closure;
+use Illuminate\Contracts\View\View;
+use Illuminate\View\Component;
+
+class Track extends Component
+{
+ public $track;
+ public $count;
+ /**
+ * Create a new component instance.
+ */
+ public function __construct($track, $count)
+ {
+ $this->track = $track;
+ $this->count = $count;
+ }
+
+ /**
+ * Get the view / contents that represent the component.
+ */
+ public function render(): View|Closure|string
+ {
+ return view('components.track');
+ }
+}
diff --git a/auth0 b/auth0
new file mode 100755
index 0000000..ff4d28b
--- /dev/null
+++ b/auth0
Binary files differ
diff --git a/composer.json b/composer.json
index b924604..315bb81 100644
--- a/composer.json
+++ b/composer.json
@@ -13,6 +13,7 @@
"scrivo/highlight.php": "v9.18.1.10",
"sentry/sentry-laravel": "^4.1",
"spatie/laravel-honeypot": "^4.3",
+ "spatie/laravel-html": "^3.4",
"ua-parser/uap-php": "^3.9.14"
},
"require-dev": {
diff --git a/composer.lock b/composer.lock
index 3fb9a92..50858f8 100644
--- a/composer.lock
+++ b/composer.lock
@@ -4,7 +4,7 @@
"Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies",
"This file is @generated automatically"
],
- "content-hash": "d9ef400d61fb79fa5da5ecf7868fced5",
+ "content-hash": "c228a32331b8e43e449ba12dc4439757",
"packages": [
{
"name": "auth0/auth0-php",
@@ -574,16 +574,16 @@
},
{
"name": "doctrine/inflector",
- "version": "2.0.9",
+ "version": "2.0.10",
"source": {
"type": "git",
"url": "https://github.com/doctrine/inflector.git",
- "reference": "2930cd5ef353871c821d5c43ed030d39ac8cfe65"
+ "reference": "5817d0659c5b50c9b950feb9af7b9668e2c436bc"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/doctrine/inflector/zipball/2930cd5ef353871c821d5c43ed030d39ac8cfe65",
- "reference": "2930cd5ef353871c821d5c43ed030d39ac8cfe65",
+ "url": "https://api.github.com/repos/doctrine/inflector/zipball/5817d0659c5b50c9b950feb9af7b9668e2c436bc",
+ "reference": "5817d0659c5b50c9b950feb9af7b9668e2c436bc",
"shasum": ""
},
"require": {
@@ -645,7 +645,7 @@
],
"support": {
"issues": "https://github.com/doctrine/inflector/issues",
- "source": "https://github.com/doctrine/inflector/tree/2.0.9"
+ "source": "https://github.com/doctrine/inflector/tree/2.0.10"
},
"funding": [
{
@@ -661,31 +661,31 @@
"type": "tidelift"
}
],
- "time": "2024-01-15T18:05:13+00:00"
+ "time": "2024-02-18T20:23:39+00:00"
},
{
"name": "doctrine/lexer",
- "version": "3.0.0",
+ "version": "3.0.1",
"source": {
"type": "git",
"url": "https://github.com/doctrine/lexer.git",
- "reference": "84a527db05647743d50373e0ec53a152f2cde568"
+ "reference": "31ad66abc0fc9e1a1f2d9bc6a42668d2fbbcd6dd"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/doctrine/lexer/zipball/84a527db05647743d50373e0ec53a152f2cde568",
- "reference": "84a527db05647743d50373e0ec53a152f2cde568",
+ "url": "https://api.github.com/repos/doctrine/lexer/zipball/31ad66abc0fc9e1a1f2d9bc6a42668d2fbbcd6dd",
+ "reference": "31ad66abc0fc9e1a1f2d9bc6a42668d2fbbcd6dd",
"shasum": ""
},
"require": {
"php": "^8.1"
},
"require-dev": {
- "doctrine/coding-standard": "^10",
- "phpstan/phpstan": "^1.9",
- "phpunit/phpunit": "^9.5",
+ "doctrine/coding-standard": "^12",
+ "phpstan/phpstan": "^1.10",
+ "phpunit/phpunit": "^10.5",
"psalm/plugin-phpunit": "^0.18.3",
- "vimeo/psalm": "^5.0"
+ "vimeo/psalm": "^5.21"
},
"type": "library",
"autoload": {
@@ -722,7 +722,7 @@
],
"support": {
"issues": "https://github.com/doctrine/lexer/issues",
- "source": "https://github.com/doctrine/lexer/tree/3.0.0"
+ "source": "https://github.com/doctrine/lexer/tree/3.0.1"
},
"funding": [
{
@@ -738,7 +738,7 @@
"type": "tidelift"
}
],
- "time": "2022-12-15T16:57:16+00:00"
+ "time": "2024-02-05T11:56:58+00:00"
},
{
"name": "dragonmantank/cron-expression",
@@ -1473,20 +1473,20 @@
},
{
"name": "laravel/framework",
- "version": "v10.42.0",
+ "version": "v10.48.3",
"source": {
"type": "git",
"url": "https://github.com/laravel/framework.git",
- "reference": "fef1aff874a6749c44f8e142e5764eab8cb96890"
+ "reference": "5791c052b41c6b593556adc687076bfbdd13c501"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/laravel/framework/zipball/fef1aff874a6749c44f8e142e5764eab8cb96890",
- "reference": "fef1aff874a6749c44f8e142e5764eab8cb96890",
+ "url": "https://api.github.com/repos/laravel/framework/zipball/5791c052b41c6b593556adc687076bfbdd13c501",
+ "reference": "5791c052b41c6b593556adc687076bfbdd13c501",
"shasum": ""
},
"require": {
- "brick/math": "^0.9.3|^0.10.2|^0.11",
+ "brick/math": "^0.9.3|^0.10.2|^0.11|^0.12",
"composer-runtime-api": "^2.2",
"doctrine/inflector": "^2.0.5",
"dragonmantank/cron-expression": "^3.3.2",
@@ -1530,6 +1530,8 @@
"conflict": {
"carbonphp/carbon-doctrine-types": ">=3.0",
"doctrine/dbal": ">=4.0",
+ "mockery/mockery": "1.6.8",
+ "phpunit/phpunit": ">=11.0.0",
"tightenco/collect": "<5.5.33"
},
"provide": {
@@ -1674,20 +1676,20 @@
"issues": "https://github.com/laravel/framework/issues",
"source": "https://github.com/laravel/framework"
},
- "time": "2024-01-23T15:07:56+00:00"
+ "time": "2024-03-15T10:17:07+00:00"
},
{
"name": "laravel/prompts",
- "version": "v0.1.15",
+ "version": "v0.1.16",
"source": {
"type": "git",
"url": "https://github.com/laravel/prompts.git",
- "reference": "d814a27514d99b03c85aa42b22cfd946568636c1"
+ "reference": "ca6872ab6aec3ab61db3a61f83a6caf764ec7781"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/laravel/prompts/zipball/d814a27514d99b03c85aa42b22cfd946568636c1",
- "reference": "d814a27514d99b03c85aa42b22cfd946568636c1",
+ "url": "https://api.github.com/repos/laravel/prompts/zipball/ca6872ab6aec3ab61db3a61f83a6caf764ec7781",
+ "reference": "ca6872ab6aec3ab61db3a61f83a6caf764ec7781",
"shasum": ""
},
"require": {
@@ -1729,9 +1731,9 @@
],
"support": {
"issues": "https://github.com/laravel/prompts/issues",
- "source": "https://github.com/laravel/prompts/tree/v0.1.15"
+ "source": "https://github.com/laravel/prompts/tree/v0.1.16"
},
- "time": "2023-12-29T22:37:42+00:00"
+ "time": "2024-02-21T19:25:27+00:00"
},
{
"name": "laravel/serializable-closure",
@@ -1861,16 +1863,16 @@
},
{
"name": "league/commonmark",
- "version": "2.4.1",
+ "version": "2.4.2",
"source": {
"type": "git",
"url": "https://github.com/thephpleague/commonmark.git",
- "reference": "3669d6d5f7a47a93c08ddff335e6d945481a1dd5"
+ "reference": "91c24291965bd6d7c46c46a12ba7492f83b1cadf"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/thephpleague/commonmark/zipball/3669d6d5f7a47a93c08ddff335e6d945481a1dd5",
- "reference": "3669d6d5f7a47a93c08ddff335e6d945481a1dd5",
+ "url": "https://api.github.com/repos/thephpleague/commonmark/zipball/91c24291965bd6d7c46c46a12ba7492f83b1cadf",
+ "reference": "91c24291965bd6d7c46c46a12ba7492f83b1cadf",
"shasum": ""
},
"require": {
@@ -1883,7 +1885,7 @@
},
"require-dev": {
"cebe/markdown": "^1.0",
- "commonmark/cmark": "0.30.0",
+ "commonmark/cmark": "0.30.3",
"commonmark/commonmark.js": "0.30.0",
"composer/package-versions-deprecated": "^1.8",
"embed/embed": "^4.4",
@@ -1893,10 +1895,10 @@
"michelf/php-markdown": "^1.4 || ^2.0",
"nyholm/psr7": "^1.5",
"phpstan/phpstan": "^1.8.2",
- "phpunit/phpunit": "^9.5.21",
+ "phpunit/phpunit": "^9.5.21 || ^10.5.9 || ^11.0.0",
"scrutinizer/ocular": "^1.8.1",
- "symfony/finder": "^5.3 | ^6.0",
- "symfony/yaml": "^2.3 | ^3.0 | ^4.0 | ^5.0 | ^6.0",
+ "symfony/finder": "^5.3 | ^6.0 || ^7.0",
+ "symfony/yaml": "^2.3 | ^3.0 | ^4.0 | ^5.0 | ^6.0 || ^7.0",
"unleashedtech/php-coding-standard": "^3.1.1",
"vimeo/psalm": "^4.24.0 || ^5.0.0"
},
@@ -1963,7 +1965,7 @@
"type": "tidelift"
}
],
- "time": "2023-08-30T16:55:00+00:00"
+ "time": "2024-02-02T11:59:32+00:00"
},
{
"name": "league/config",
@@ -2049,16 +2051,16 @@
},
{
"name": "league/flysystem",
- "version": "3.23.0",
+ "version": "3.25.1",
"source": {
"type": "git",
"url": "https://github.com/thephpleague/flysystem.git",
- "reference": "d4ad81e2b67396e33dc9d7e54ec74ccf73151dcc"
+ "reference": "abbd664eb4381102c559d358420989f835208f18"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/thephpleague/flysystem/zipball/d4ad81e2b67396e33dc9d7e54ec74ccf73151dcc",
- "reference": "d4ad81e2b67396e33dc9d7e54ec74ccf73151dcc",
+ "url": "https://api.github.com/repos/thephpleague/flysystem/zipball/abbd664eb4381102c559d358420989f835208f18",
+ "reference": "abbd664eb4381102c559d358420989f835208f18",
"shasum": ""
},
"require": {
@@ -2078,7 +2080,7 @@
"require-dev": {
"async-aws/s3": "^1.5 || ^2.0",
"async-aws/simple-s3": "^1.1 || ^2.0",
- "aws/aws-sdk-php": "^3.220.0",
+ "aws/aws-sdk-php": "^3.295.10",
"composer/semver": "^3.0",
"ext-fileinfo": "*",
"ext-ftp": "*",
@@ -2086,10 +2088,10 @@
"friendsofphp/php-cs-fixer": "^3.5",
"google/cloud-storage": "^1.23",
"microsoft/azure-storage-blob": "^1.1",
- "phpseclib/phpseclib": "^3.0.34",
+ "phpseclib/phpseclib": "^3.0.36",
"phpstan/phpstan": "^1.10",
"phpunit/phpunit": "^9.5.11|^10.0",
- "sabre/dav": "^4.3.1"
+ "sabre/dav": "^4.6.0"
},
"type": "library",
"autoload": {
@@ -2123,7 +2125,7 @@
],
"support": {
"issues": "https://github.com/thephpleague/flysystem/issues",
- "source": "https://github.com/thephpleague/flysystem/tree/3.23.0"
+ "source": "https://github.com/thephpleague/flysystem/tree/3.25.1"
},
"funding": [
{
@@ -2135,20 +2137,20 @@
"type": "github"
}
],
- "time": "2023-12-04T10:16:17+00:00"
+ "time": "2024-03-16T12:53:19+00:00"
},
{
"name": "league/flysystem-local",
- "version": "3.23.0",
+ "version": "3.25.1",
"source": {
"type": "git",
"url": "https://github.com/thephpleague/flysystem-local.git",
- "reference": "5cf046ba5f059460e86a997c504dd781a39a109b"
+ "reference": "61a6a90d6e999e4ddd9ce5adb356de0939060b92"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/thephpleague/flysystem-local/zipball/5cf046ba5f059460e86a997c504dd781a39a109b",
- "reference": "5cf046ba5f059460e86a997c504dd781a39a109b",
+ "url": "https://api.github.com/repos/thephpleague/flysystem-local/zipball/61a6a90d6e999e4ddd9ce5adb356de0939060b92",
+ "reference": "61a6a90d6e999e4ddd9ce5adb356de0939060b92",
"shasum": ""
},
"require": {
@@ -2182,8 +2184,7 @@
"local"
],
"support": {
- "issues": "https://github.com/thephpleague/flysystem-local/issues",
- "source": "https://github.com/thephpleague/flysystem-local/tree/3.23.0"
+ "source": "https://github.com/thephpleague/flysystem-local/tree/3.25.1"
},
"funding": [
{
@@ -2195,20 +2196,20 @@
"type": "github"
}
],
- "time": "2023-12-04T10:14:46+00:00"
+ "time": "2024-03-15T19:58:44+00:00"
},
{
"name": "league/mime-type-detection",
- "version": "1.14.0",
+ "version": "1.15.0",
"source": {
"type": "git",
"url": "https://github.com/thephpleague/mime-type-detection.git",
- "reference": "b6a5854368533df0295c5761a0253656a2e52d9e"
+ "reference": "ce0f4d1e8a6f4eb0ddff33f57c69c50fd09f4301"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/thephpleague/mime-type-detection/zipball/b6a5854368533df0295c5761a0253656a2e52d9e",
- "reference": "b6a5854368533df0295c5761a0253656a2e52d9e",
+ "url": "https://api.github.com/repos/thephpleague/mime-type-detection/zipball/ce0f4d1e8a6f4eb0ddff33f57c69c50fd09f4301",
+ "reference": "ce0f4d1e8a6f4eb0ddff33f57c69c50fd09f4301",
"shasum": ""
},
"require": {
@@ -2239,7 +2240,7 @@
"description": "Mime-type detection for Flysystem",
"support": {
"issues": "https://github.com/thephpleague/mime-type-detection/issues",
- "source": "https://github.com/thephpleague/mime-type-detection/tree/1.14.0"
+ "source": "https://github.com/thephpleague/mime-type-detection/tree/1.15.0"
},
"funding": [
{
@@ -2251,7 +2252,7 @@
"type": "tidelift"
}
],
- "time": "2023-10-17T14:13:20+00:00"
+ "time": "2024-01-28T23:22:08+00:00"
},
{
"name": "monolog/monolog",
@@ -2356,16 +2357,16 @@
},
{
"name": "nesbot/carbon",
- "version": "2.72.2",
+ "version": "2.72.3",
"source": {
"type": "git",
"url": "https://github.com/briannesbitt/Carbon.git",
- "reference": "3e7edc41b58d65509baeb0d4a14c8fa41d627130"
+ "reference": "0c6fd108360c562f6e4fd1dedb8233b423e91c83"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/briannesbitt/Carbon/zipball/3e7edc41b58d65509baeb0d4a14c8fa41d627130",
- "reference": "3e7edc41b58d65509baeb0d4a14c8fa41d627130",
+ "url": "https://api.github.com/repos/briannesbitt/Carbon/zipball/0c6fd108360c562f6e4fd1dedb8233b423e91c83",
+ "reference": "0c6fd108360c562f6e4fd1dedb8233b423e91c83",
"shasum": ""
},
"require": {
@@ -2459,7 +2460,7 @@
"type": "tidelift"
}
],
- "time": "2024-01-19T00:21:53+00:00"
+ "time": "2024-01-25T10:35:09+00:00"
},
{
"name": "nette/schema",
@@ -3042,20 +3043,20 @@
},
{
"name": "psr-discovery/all",
- "version": "1.0.0",
+ "version": "1.0.1",
"source": {
"type": "git",
"url": "https://github.com/psr-discovery/all.git",
- "reference": "73deceb26d3190f53a5cd3b95751c6a223804a8b"
+ "reference": "e353ca0cac46b2e954f4a3ee3a13f0de8be7b87b"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/psr-discovery/all/zipball/73deceb26d3190f53a5cd3b95751c6a223804a8b",
- "reference": "73deceb26d3190f53a5cd3b95751c6a223804a8b",
+ "url": "https://api.github.com/repos/psr-discovery/all/zipball/e353ca0cac46b2e954f4a3ee3a13f0de8be7b87b",
+ "reference": "e353ca0cac46b2e954f4a3ee3a13f0de8be7b87b",
"shasum": ""
},
"require": {
- "php": "^8.0",
+ "php": "^8.1",
"psr-discovery/cache-implementations": "^1.0",
"psr-discovery/container-implementations": "^1.0",
"psr-discovery/event-dispatcher-implementations": "^1.0",
@@ -3107,32 +3108,31 @@
"psr-6"
],
"support": {
- "source": "https://github.com/psr-discovery/all/tree/1.0.0"
+ "source": "https://github.com/psr-discovery/all/tree/1.0.1"
},
- "time": "2023-03-27T16:37:46+00:00"
+ "time": "2024-03-04T21:20:17+00:00"
},
{
"name": "psr-discovery/cache-implementations",
- "version": "1.0.0",
+ "version": "1.1.1",
"source": {
"type": "git",
"url": "https://github.com/psr-discovery/cache-implementations.git",
- "reference": "33b63d8e324f4aff296508b592bbd4d71b45da68"
+ "reference": "ebede0af34a7fd3c5564809e659ee69c0ab85ff6"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/psr-discovery/cache-implementations/zipball/33b63d8e324f4aff296508b592bbd4d71b45da68",
- "reference": "33b63d8e324f4aff296508b592bbd4d71b45da68",
+ "url": "https://api.github.com/repos/psr-discovery/cache-implementations/zipball/ebede0af34a7fd3c5564809e659ee69c0ab85ff6",
+ "reference": "ebede0af34a7fd3c5564809e659ee69c0ab85ff6",
"shasum": ""
},
"require": {
- "php": "^8.0",
+ "php": "^8.1",
"psr-discovery/discovery": "^1.0",
"psr/cache": "^1.0 | ^2.0 | ^3.0"
},
"require-dev": {
"friendsofphp/php-cs-fixer": "^3.14",
- "infection/infection": "^0.26",
"mockery/mockery": "^1.5",
"pestphp/pest": "^2.0",
"phpstan/phpstan": "^1.10",
@@ -3183,32 +3183,31 @@
],
"support": {
"issues": "https://github.com/psr-discovery/cache-implementations/issues",
- "source": "https://github.com/psr-discovery/cache-implementations/tree/1.0.0"
+ "source": "https://github.com/psr-discovery/cache-implementations/tree/1.1.1"
},
- "time": "2023-03-27T06:19:44+00:00"
+ "time": "2024-03-04T21:22:36+00:00"
},
{
"name": "psr-discovery/container-implementations",
- "version": "1.0.0",
+ "version": "1.1.1",
"source": {
"type": "git",
"url": "https://github.com/psr-discovery/container-implementations.git",
- "reference": "366612e9260f247d8b8ee279094a33dd4cbc6886"
+ "reference": "728a452b32b0bb60c4bac43b18db2e3105bb8d7e"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/psr-discovery/container-implementations/zipball/366612e9260f247d8b8ee279094a33dd4cbc6886",
- "reference": "366612e9260f247d8b8ee279094a33dd4cbc6886",
+ "url": "https://api.github.com/repos/psr-discovery/container-implementations/zipball/728a452b32b0bb60c4bac43b18db2e3105bb8d7e",
+ "reference": "728a452b32b0bb60c4bac43b18db2e3105bb8d7e",
"shasum": ""
},
"require": {
- "php": "^8.0",
+ "php": "^8.1",
"psr-discovery/discovery": "^1.0",
"psr/container": "^1.0 | ^2.0"
},
"require-dev": {
"friendsofphp/php-cs-fixer": "^3.14",
- "infection/infection": "^0.26",
"mockery/mockery": "^1.5",
"pestphp/pest": "^2.0",
"phpstan/phpstan": "^1.10",
@@ -3257,31 +3256,30 @@
],
"support": {
"issues": "https://github.com/psr-discovery/container-implementations/issues",
- "source": "https://github.com/psr-discovery/container-implementations/tree/1.0.0"
+ "source": "https://github.com/psr-discovery/container-implementations/tree/1.1.1"
},
- "time": "2023-03-27T06:18:27+00:00"
+ "time": "2024-03-04T21:24:05+00:00"
},
{
"name": "psr-discovery/discovery",
- "version": "1.0.2",
+ "version": "1.1.1",
"source": {
"type": "git",
"url": "https://github.com/psr-discovery/discovery.git",
- "reference": "83e746a138705d56f8e3dc102e28c79f32ae9b54"
+ "reference": "9fb31dca2030accd9d3de21fb8806478e9df5b2b"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/psr-discovery/discovery/zipball/83e746a138705d56f8e3dc102e28c79f32ae9b54",
- "reference": "83e746a138705d56f8e3dc102e28c79f32ae9b54",
+ "url": "https://api.github.com/repos/psr-discovery/discovery/zipball/9fb31dca2030accd9d3de21fb8806478e9df5b2b",
+ "reference": "9fb31dca2030accd9d3de21fb8806478e9df5b2b",
"shasum": ""
},
"require": {
"composer/semver": "^3.0",
- "php": "^8.0"
+ "php": "^8.1"
},
"require-dev": {
"friendsofphp/php-cs-fixer": "^3.14",
- "infection/infection": "^0.26",
"mockery/mockery": "^1.5",
"pestphp/pest": "^2.0",
"phpstan/phpstan": "^1.10",
@@ -3335,32 +3333,31 @@
],
"support": {
"issues": "https://github.com/psr-discovery/discovery/issues",
- "source": "https://github.com/psr-discovery/discovery/tree/1.0.2"
+ "source": "https://github.com/psr-discovery/discovery/tree/1.1.1"
},
- "time": "2023-03-27T19:49:39+00:00"
+ "time": "2024-03-04T21:26:05+00:00"
},
{
"name": "psr-discovery/event-dispatcher-implementations",
- "version": "1.0.0",
+ "version": "1.1.1",
"source": {
"type": "git",
"url": "https://github.com/psr-discovery/event-dispatcher-implementations.git",
- "reference": "903d05afe29bd1a17c18924004d282d28bda1759"
+ "reference": "9033bb984613703e4c4f795ef0657184dc1c70eb"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/psr-discovery/event-dispatcher-implementations/zipball/903d05afe29bd1a17c18924004d282d28bda1759",
- "reference": "903d05afe29bd1a17c18924004d282d28bda1759",
+ "url": "https://api.github.com/repos/psr-discovery/event-dispatcher-implementations/zipball/9033bb984613703e4c4f795ef0657184dc1c70eb",
+ "reference": "9033bb984613703e4c4f795ef0657184dc1c70eb",
"shasum": ""
},
"require": {
- "php": "^8.0",
+ "php": "^8.1",
"psr-discovery/discovery": "^1.0",
"psr/event-dispatcher": "^1.0"
},
"require-dev": {
"friendsofphp/php-cs-fixer": "^3.14",
- "infection/infection": "^0.26",
"mockery/mockery": "^1.5",
"pestphp/pest": "^2.0",
"phpstan/phpstan": "^1.10",
@@ -3409,32 +3406,31 @@
],
"support": {
"issues": "https://github.com/psr-discovery/event-dispatcher-implementations/issues",
- "source": "https://github.com/psr-discovery/event-dispatcher-implementations/tree/1.0.0"
+ "source": "https://github.com/psr-discovery/event-dispatcher-implementations/tree/1.1.1"
},
- "time": "2023-03-27T06:17:31+00:00"
+ "time": "2024-03-04T21:27:10+00:00"
},
{
"name": "psr-discovery/http-client-implementations",
- "version": "1.0.0",
+ "version": "1.2.0",
"source": {
"type": "git",
"url": "https://github.com/psr-discovery/http-client-implementations.git",
- "reference": "ca0cbc370789a3fd0f6aa3e7c4f4e5c123eadef3"
+ "reference": "a05c54087d13504d8e48c27395fbab638fb0a114"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/psr-discovery/http-client-implementations/zipball/ca0cbc370789a3fd0f6aa3e7c4f4e5c123eadef3",
- "reference": "ca0cbc370789a3fd0f6aa3e7c4f4e5c123eadef3",
+ "url": "https://api.github.com/repos/psr-discovery/http-client-implementations/zipball/a05c54087d13504d8e48c27395fbab638fb0a114",
+ "reference": "a05c54087d13504d8e48c27395fbab638fb0a114",
"shasum": ""
},
"require": {
- "php": "^8.0",
+ "php": "^8.1",
"psr-discovery/discovery": "^1.0",
"psr/http-client": "^1.0"
},
"require-dev": {
"friendsofphp/php-cs-fixer": "^3.14",
- "infection/infection": "^0.26",
"mockery/mockery": "^1.5",
"pestphp/pest": "^2.0",
"phpstan/phpstan": "^1.10",
@@ -3483,32 +3479,31 @@
],
"support": {
"issues": "https://github.com/psr-discovery/http-client-implementations/issues",
- "source": "https://github.com/psr-discovery/http-client-implementations/tree/1.0.0"
+ "source": "https://github.com/psr-discovery/http-client-implementations/tree/1.2.0"
},
- "time": "2023-03-27T06:16:24+00:00"
+ "time": "2024-03-16T05:29:47+00:00"
},
{
"name": "psr-discovery/http-factory-implementations",
- "version": "1.0.1",
+ "version": "1.1.1",
"source": {
"type": "git",
"url": "https://github.com/psr-discovery/http-factory-implementations.git",
- "reference": "064bb0ec6d2e49aeb6f15aa5a8793abe02daf56b"
+ "reference": "4ee07ae795b794e61578db32b5422a780b01b833"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/psr-discovery/http-factory-implementations/zipball/064bb0ec6d2e49aeb6f15aa5a8793abe02daf56b",
- "reference": "064bb0ec6d2e49aeb6f15aa5a8793abe02daf56b",
+ "url": "https://api.github.com/repos/psr-discovery/http-factory-implementations/zipball/4ee07ae795b794e61578db32b5422a780b01b833",
+ "reference": "4ee07ae795b794e61578db32b5422a780b01b833",
"shasum": ""
},
"require": {
- "php": "^8.0",
- "psr-discovery/discovery": "^1.0",
+ "php": "^8.1",
+ "psr-discovery/discovery": "^1.1",
"psr/http-factory": "^1.0"
},
"require-dev": {
"friendsofphp/php-cs-fixer": "^3.14",
- "infection/infection": "^0.26",
"mockery/mockery": "^1.5",
"pestphp/pest": "^2.0",
"phpstan/phpstan": "^1.10",
@@ -3557,32 +3552,31 @@
],
"support": {
"issues": "https://github.com/psr-discovery/http-factory-implementations/issues",
- "source": "https://github.com/psr-discovery/http-factory-implementations/tree/1.0.1"
+ "source": "https://github.com/psr-discovery/http-factory-implementations/tree/1.1.1"
},
- "time": "2023-04-26T06:22:45+00:00"
+ "time": "2024-03-04T21:31:16+00:00"
},
{
"name": "psr-discovery/log-implementations",
- "version": "1.0.0",
+ "version": "1.0.1",
"source": {
"type": "git",
"url": "https://github.com/psr-discovery/log-implementations.git",
- "reference": "7be7af9bb1bf41a4985356b16cc654e0227eed38"
+ "reference": "384894384663fa5e1b2186112fb8ffe3f81a0b22"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/psr-discovery/log-implementations/zipball/7be7af9bb1bf41a4985356b16cc654e0227eed38",
- "reference": "7be7af9bb1bf41a4985356b16cc654e0227eed38",
+ "url": "https://api.github.com/repos/psr-discovery/log-implementations/zipball/384894384663fa5e1b2186112fb8ffe3f81a0b22",
+ "reference": "384894384663fa5e1b2186112fb8ffe3f81a0b22",
"shasum": ""
},
"require": {
- "php": "^8.0",
+ "php": "^8.1",
"psr-discovery/discovery": "^1.0",
"psr/log": "^1.0 | ^2.0 | ^3.0"
},
"require-dev": {
"friendsofphp/php-cs-fixer": "^3.14",
- "infection/infection": "^0.26",
"mockery/mockery": "^1.5",
"pestphp/pest": "^2.0",
"phpstan/phpstan": "^1.10",
@@ -3633,9 +3627,9 @@
],
"support": {
"issues": "https://github.com/psr-discovery/log-implementations/issues",
- "source": "https://github.com/psr-discovery/log-implementations/tree/1.0.0"
+ "source": "https://github.com/psr-discovery/log-implementations/tree/1.0.1"
},
- "time": "2023-03-27T06:14:11+00:00"
+ "time": "2024-03-04T21:32:27+00:00"
},
{
"name": "psr/cache",
@@ -4482,16 +4476,16 @@
},
{
"name": "sentry/sentry",
- "version": "4.4.0",
+ "version": "4.6.0",
"source": {
"type": "git",
"url": "https://github.com/getsentry/sentry-php.git",
- "reference": "95a428a59ebddf786a27f09d19ec395a32f62082"
+ "reference": "30d98a460ab10f7b7032d76c62da5b1ce6c0765d"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/getsentry/sentry-php/zipball/95a428a59ebddf786a27f09d19ec395a32f62082",
- "reference": "95a428a59ebddf786a27f09d19ec395a32f62082",
+ "url": "https://api.github.com/repos/getsentry/sentry-php/zipball/30d98a460ab10f7b7032d76c62da5b1ce6c0765d",
+ "reference": "30d98a460ab10f7b7032d76c62da5b1ce6c0765d",
"shasum": ""
},
"require": {
@@ -4555,7 +4549,7 @@
],
"support": {
"issues": "https://github.com/getsentry/sentry-php/issues",
- "source": "https://github.com/getsentry/sentry-php/tree/4.4.0"
+ "source": "https://github.com/getsentry/sentry-php/tree/4.6.0"
},
"funding": [
{
@@ -4567,27 +4561,27 @@
"type": "custom"
}
],
- "time": "2024-01-23T09:49:55+00:00"
+ "time": "2024-02-13T11:32:56+00:00"
},
{
"name": "sentry/sentry-laravel",
- "version": "4.1.2",
+ "version": "4.2.0",
"source": {
"type": "git",
"url": "https://github.com/getsentry/sentry-laravel.git",
- "reference": "fa38767be2f14505fd93bfa5acadb9dfec1fdeee"
+ "reference": "054638ac05d7668e8b2c636e66fed5b5b468f11f"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/getsentry/sentry-laravel/zipball/fa38767be2f14505fd93bfa5acadb9dfec1fdeee",
- "reference": "fa38767be2f14505fd93bfa5acadb9dfec1fdeee",
+ "url": "https://api.github.com/repos/getsentry/sentry-laravel/zipball/054638ac05d7668e8b2c636e66fed5b5b468f11f",
+ "reference": "054638ac05d7668e8b2c636e66fed5b5b468f11f",
"shasum": ""
},
"require": {
"illuminate/support": "^6.0 | ^7.0 | ^8.0 | ^9.0 | ^10.0",
"nyholm/psr7": "^1.0",
"php": "^7.2 | ^8.0",
- "sentry/sentry": "^4.3",
+ "sentry/sentry": "^4.5",
"symfony/psr-http-message-bridge": "^1.0 | ^2.0 | ^6.0 | ^7.0"
},
"require-dev": {
@@ -4644,7 +4638,7 @@
],
"support": {
"issues": "https://github.com/getsentry/sentry-laravel/issues",
- "source": "https://github.com/getsentry/sentry-laravel/tree/4.1.2"
+ "source": "https://github.com/getsentry/sentry-laravel/tree/4.2.0"
},
"funding": [
{
@@ -4656,7 +4650,7 @@
"type": "custom"
}
],
- "time": "2024-01-16T12:46:27+00:00"
+ "time": "2024-01-29T17:08:18+00:00"
},
{
"name": "spatie/laravel-honeypot",
@@ -4735,6 +4729,84 @@
"time": "2023-12-01T10:30:39+00:00"
},
{
+ "name": "spatie/laravel-html",
+ "version": "3.4.0",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/spatie/laravel-html.git",
+ "reference": "20bd3185ae085b2eced952bc5191cb8eb922250e"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/spatie/laravel-html/zipball/20bd3185ae085b2eced952bc5191cb8eb922250e",
+ "reference": "20bd3185ae085b2eced952bc5191cb8eb922250e",
+ "shasum": ""
+ },
+ "require": {
+ "illuminate/http": "^9.0|^8.0|^10.0",
+ "illuminate/support": "^9.0|^8.0|^10.0",
+ "php": "^8.0"
+ },
+ "require-dev": {
+ "mockery/mockery": "^1.3",
+ "orchestra/testbench": "^7.0|^6.23|^8.0",
+ "pestphp/pest": "^1.22"
+ },
+ "type": "library",
+ "extra": {
+ "laravel": {
+ "providers": [
+ "Spatie\\Html\\HtmlServiceProvider"
+ ],
+ "aliases": {
+ "Html": "Spatie\\Html\\Facades\\Html"
+ }
+ }
+ },
+ "autoload": {
+ "files": [
+ "src/helpers.php"
+ ],
+ "psr-4": {
+ "Spatie\\Html\\": "src"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Sebastian De Deyne",
+ "email": "sebastian@spatie.be",
+ "homepage": "https://spatie.be",
+ "role": "Developer"
+ },
+ {
+ "name": "Freek Van der Herten",
+ "email": "freek@spatie.be",
+ "homepage": "https://spatie.be",
+ "role": "Developer"
+ }
+ ],
+ "description": "A fluent html builder",
+ "homepage": "https://github.com/spatie/laravel-html",
+ "keywords": [
+ "html",
+ "spatie"
+ ],
+ "support": {
+ "source": "https://github.com/spatie/laravel-html/tree/3.4.0"
+ },
+ "funding": [
+ {
+ "url": "https://spatie.be/open-source/support-us",
+ "type": "custom"
+ }
+ ],
+ "time": "2024-01-05T16:35:10+00:00"
+ },
+ {
"name": "spatie/laravel-package-tools",
"version": "1.16.2",
"source": {
@@ -4796,16 +4868,16 @@
},
{
"name": "symfony/console",
- "version": "v6.4.2",
+ "version": "v6.4.4",
"source": {
"type": "git",
"url": "https://github.com/symfony/console.git",
- "reference": "0254811a143e6bc6c8deea08b589a7e68a37f625"
+ "reference": "0d9e4eb5ad413075624378f474c4167ea202de78"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/console/zipball/0254811a143e6bc6c8deea08b589a7e68a37f625",
- "reference": "0254811a143e6bc6c8deea08b589a7e68a37f625",
+ "url": "https://api.github.com/repos/symfony/console/zipball/0d9e4eb5ad413075624378f474c4167ea202de78",
+ "reference": "0d9e4eb5ad413075624378f474c4167ea202de78",
"shasum": ""
},
"require": {
@@ -4870,7 +4942,7 @@
"terminal"
],
"support": {
- "source": "https://github.com/symfony/console/tree/v6.4.2"
+ "source": "https://github.com/symfony/console/tree/v6.4.4"
},
"funding": [
{
@@ -4886,20 +4958,20 @@
"type": "tidelift"
}
],
- "time": "2023-12-10T16:15:48+00:00"
+ "time": "2024-02-22T20:27:10+00:00"
},
{
"name": "symfony/css-selector",
- "version": "v7.0.0",
+ "version": "v7.0.3",
"source": {
"type": "git",
"url": "https://github.com/symfony/css-selector.git",
- "reference": "bb51d46e53ef8d50d523f0c5faedba056a27943e"
+ "reference": "ec60a4edf94e63b0556b6a0888548bb400a3a3be"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/css-selector/zipball/bb51d46e53ef8d50d523f0c5faedba056a27943e",
- "reference": "bb51d46e53ef8d50d523f0c5faedba056a27943e",
+ "url": "https://api.github.com/repos/symfony/css-selector/zipball/ec60a4edf94e63b0556b6a0888548bb400a3a3be",
+ "reference": "ec60a4edf94e63b0556b6a0888548bb400a3a3be",
"shasum": ""
},
"require": {
@@ -4935,7 +5007,7 @@
"description": "Converts CSS selectors to XPath expressions",
"homepage": "https://symfony.com",
"support": {
- "source": "https://github.com/symfony/css-selector/tree/v7.0.0"
+ "source": "https://github.com/symfony/css-selector/tree/v7.0.3"
},
"funding": [
{
@@ -4951,7 +5023,7 @@
"type": "tidelift"
}
],
- "time": "2023-10-31T17:59:56+00:00"
+ "time": "2024-01-23T15:02:46+00:00"
},
{
"name": "symfony/deprecation-contracts",
@@ -5022,16 +5094,16 @@
},
{
"name": "symfony/error-handler",
- "version": "v6.4.0",
+ "version": "v6.4.4",
"source": {
"type": "git",
"url": "https://github.com/symfony/error-handler.git",
- "reference": "c873490a1c97b3a0a4838afc36ff36c112d02788"
+ "reference": "c725219bdf2afc59423c32793d5019d2a904e13a"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/error-handler/zipball/c873490a1c97b3a0a4838afc36ff36c112d02788",
- "reference": "c873490a1c97b3a0a4838afc36ff36c112d02788",
+ "url": "https://api.github.com/repos/symfony/error-handler/zipball/c725219bdf2afc59423c32793d5019d2a904e13a",
+ "reference": "c725219bdf2afc59423c32793d5019d2a904e13a",
"shasum": ""
},
"require": {
@@ -5077,7 +5149,7 @@
"description": "Provides tools to manage errors and ease debugging PHP code",
"homepage": "https://symfony.com",
"support": {
- "source": "https://github.com/symfony/error-handler/tree/v6.4.0"
+ "source": "https://github.com/symfony/error-handler/tree/v6.4.4"
},
"funding": [
{
@@ -5093,20 +5165,20 @@
"type": "tidelift"
}
],
- "time": "2023-10-18T09:43:34+00:00"
+ "time": "2024-02-22T20:27:10+00:00"
},
{
"name": "symfony/event-dispatcher",
- "version": "v7.0.2",
+ "version": "v7.0.3",
"source": {
"type": "git",
"url": "https://github.com/symfony/event-dispatcher.git",
- "reference": "098b62ae81fdd6cbf941f355059f617db28f4f9a"
+ "reference": "834c28d533dd0636f910909d01b9ff45cc094b5e"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/event-dispatcher/zipball/098b62ae81fdd6cbf941f355059f617db28f4f9a",
- "reference": "098b62ae81fdd6cbf941f355059f617db28f4f9a",
+ "url": "https://api.github.com/repos/symfony/event-dispatcher/zipball/834c28d533dd0636f910909d01b9ff45cc094b5e",
+ "reference": "834c28d533dd0636f910909d01b9ff45cc094b5e",
"shasum": ""
},
"require": {
@@ -5157,7 +5229,7 @@
"description": "Provides tools that allow your application components to communicate with each other by dispatching events and listening to them",
"homepage": "https://symfony.com",
"support": {
- "source": "https://github.com/symfony/event-dispatcher/tree/v7.0.2"
+ "source": "https://github.com/symfony/event-dispatcher/tree/v7.0.3"
},
"funding": [
{
@@ -5173,7 +5245,7 @@
"type": "tidelift"
}
],
- "time": "2023-12-27T22:24:19+00:00"
+ "time": "2024-01-23T15:02:46+00:00"
},
{
"name": "symfony/event-dispatcher-contracts",
@@ -5317,16 +5389,16 @@
},
{
"name": "symfony/http-foundation",
- "version": "v6.4.2",
+ "version": "v6.4.4",
"source": {
"type": "git",
"url": "https://github.com/symfony/http-foundation.git",
- "reference": "172d807f9ef3fc3fbed8377cc57c20d389269271"
+ "reference": "ebc713bc6e6f4b53f46539fc158be85dfcd77304"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/http-foundation/zipball/172d807f9ef3fc3fbed8377cc57c20d389269271",
- "reference": "172d807f9ef3fc3fbed8377cc57c20d389269271",
+ "url": "https://api.github.com/repos/symfony/http-foundation/zipball/ebc713bc6e6f4b53f46539fc158be85dfcd77304",
+ "reference": "ebc713bc6e6f4b53f46539fc158be85dfcd77304",
"shasum": ""
},
"require": {
@@ -5374,7 +5446,7 @@
"description": "Defines an object-oriented layer for the HTTP specification",
"homepage": "https://symfony.com",
"support": {
- "source": "https://github.com/symfony/http-foundation/tree/v6.4.2"
+ "source": "https://github.com/symfony/http-foundation/tree/v6.4.4"
},
"funding": [
{
@@ -5390,20 +5462,20 @@
"type": "tidelift"
}
],
- "time": "2023-12-27T22:16:42+00:00"
+ "time": "2024-02-08T15:01:18+00:00"
},
{
"name": "symfony/http-kernel",
- "version": "v6.4.2",
+ "version": "v6.4.5",
"source": {
"type": "git",
"url": "https://github.com/symfony/http-kernel.git",
- "reference": "13e8387320b5942d0dc408440c888e2d526efef4"
+ "reference": "f6947cb939d8efee137797382cb4db1af653ef75"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/http-kernel/zipball/13e8387320b5942d0dc408440c888e2d526efef4",
- "reference": "13e8387320b5942d0dc408440c888e2d526efef4",
+ "url": "https://api.github.com/repos/symfony/http-kernel/zipball/f6947cb939d8efee137797382cb4db1af653ef75",
+ "reference": "f6947cb939d8efee137797382cb4db1af653ef75",
"shasum": ""
},
"require": {
@@ -5452,7 +5524,7 @@
"symfony/process": "^5.4|^6.0|^7.0",
"symfony/property-access": "^5.4.5|^6.0.5|^7.0",
"symfony/routing": "^5.4|^6.0|^7.0",
- "symfony/serializer": "^6.3|^7.0",
+ "symfony/serializer": "^6.4.4|^7.0.4",
"symfony/stopwatch": "^5.4|^6.0|^7.0",
"symfony/translation": "^5.4|^6.0|^7.0",
"symfony/translation-contracts": "^2.5|^3",
@@ -5487,7 +5559,7 @@
"description": "Provides a structured process for converting a Request into a Response",
"homepage": "https://symfony.com",
"support": {
- "source": "https://github.com/symfony/http-kernel/tree/v6.4.2"
+ "source": "https://github.com/symfony/http-kernel/tree/v6.4.5"
},
"funding": [
{
@@ -5503,20 +5575,20 @@
"type": "tidelift"
}
],
- "time": "2023-12-30T15:31:44+00:00"
+ "time": "2024-03-04T21:00:47+00:00"
},
{
"name": "symfony/mailer",
- "version": "v6.4.2",
+ "version": "v6.4.4",
"source": {
"type": "git",
"url": "https://github.com/symfony/mailer.git",
- "reference": "6da89e5c9202f129717a770a03183fb140720168"
+ "reference": "791c5d31a8204cf3db0c66faab70282307f4376b"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/mailer/zipball/6da89e5c9202f129717a770a03183fb140720168",
- "reference": "6da89e5c9202f129717a770a03183fb140720168",
+ "url": "https://api.github.com/repos/symfony/mailer/zipball/791c5d31a8204cf3db0c66faab70282307f4376b",
+ "reference": "791c5d31a8204cf3db0c66faab70282307f4376b",
"shasum": ""
},
"require": {
@@ -5567,7 +5639,7 @@
"description": "Helps sending emails",
"homepage": "https://symfony.com",
"support": {
- "source": "https://github.com/symfony/mailer/tree/v6.4.2"
+ "source": "https://github.com/symfony/mailer/tree/v6.4.4"
},
"funding": [
{
@@ -5583,20 +5655,20 @@
"type": "tidelift"
}
],
- "time": "2023-12-19T09:12:31+00:00"
+ "time": "2024-02-03T21:33:47+00:00"
},
{
"name": "symfony/mime",
- "version": "v6.4.0",
+ "version": "v6.4.3",
"source": {
"type": "git",
"url": "https://github.com/symfony/mime.git",
- "reference": "ca4f58b2ef4baa8f6cecbeca2573f88cd577d205"
+ "reference": "5017e0a9398c77090b7694be46f20eb796262a34"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/mime/zipball/ca4f58b2ef4baa8f6cecbeca2573f88cd577d205",
- "reference": "ca4f58b2ef4baa8f6cecbeca2573f88cd577d205",
+ "url": "https://api.github.com/repos/symfony/mime/zipball/5017e0a9398c77090b7694be46f20eb796262a34",
+ "reference": "5017e0a9398c77090b7694be46f20eb796262a34",
"shasum": ""
},
"require": {
@@ -5651,7 +5723,7 @@
"mime-type"
],
"support": {
- "source": "https://github.com/symfony/mime/tree/v6.4.0"
+ "source": "https://github.com/symfony/mime/tree/v6.4.3"
},
"funding": [
{
@@ -5667,7 +5739,7 @@
"type": "tidelift"
}
],
- "time": "2023-10-17T11:49:05+00:00"
+ "time": "2024-01-30T08:32:12+00:00"
},
{
"name": "symfony/options-resolver",
@@ -5738,16 +5810,16 @@
},
{
"name": "symfony/polyfill-ctype",
- "version": "v1.28.0",
+ "version": "v1.29.0",
"source": {
"type": "git",
"url": "https://github.com/symfony/polyfill-ctype.git",
- "reference": "ea208ce43cbb04af6867b4fdddb1bdbf84cc28cb"
+ "reference": "ef4d7e442ca910c4764bce785146269b30cb5fc4"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/polyfill-ctype/zipball/ea208ce43cbb04af6867b4fdddb1bdbf84cc28cb",
- "reference": "ea208ce43cbb04af6867b4fdddb1bdbf84cc28cb",
+ "url": "https://api.github.com/repos/symfony/polyfill-ctype/zipball/ef4d7e442ca910c4764bce785146269b30cb5fc4",
+ "reference": "ef4d7e442ca910c4764bce785146269b30cb5fc4",
"shasum": ""
},
"require": {
@@ -5761,9 +5833,6 @@
},
"type": "library",
"extra": {
- "branch-alias": {
- "dev-main": "1.28-dev"
- },
"thanks": {
"name": "symfony/polyfill",
"url": "https://github.com/symfony/polyfill"
@@ -5800,7 +5869,7 @@
"portable"
],
"support": {
- "source": "https://github.com/symfony/polyfill-ctype/tree/v1.28.0"
+ "source": "https://github.com/symfony/polyfill-ctype/tree/v1.29.0"
},
"funding": [
{
@@ -5816,20 +5885,20 @@
"type": "tidelift"
}
],
- "time": "2023-01-26T09:26:14+00:00"
+ "time": "2024-01-29T20:11:03+00:00"
},
{
"name": "symfony/polyfill-intl-grapheme",
- "version": "v1.28.0",
+ "version": "v1.29.0",
"source": {
"type": "git",
"url": "https://github.com/symfony/polyfill-intl-grapheme.git",
- "reference": "875e90aeea2777b6f135677f618529449334a612"
+ "reference": "32a9da87d7b3245e09ac426c83d334ae9f06f80f"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/polyfill-intl-grapheme/zipball/875e90aeea2777b6f135677f618529449334a612",
- "reference": "875e90aeea2777b6f135677f618529449334a612",
+ "url": "https://api.github.com/repos/symfony/polyfill-intl-grapheme/zipball/32a9da87d7b3245e09ac426c83d334ae9f06f80f",
+ "reference": "32a9da87d7b3245e09ac426c83d334ae9f06f80f",
"shasum": ""
},
"require": {
@@ -5840,9 +5909,6 @@
},
"type": "library",
"extra": {
- "branch-alias": {
- "dev-main": "1.28-dev"
- },
"thanks": {
"name": "symfony/polyfill",
"url": "https://github.com/symfony/polyfill"
@@ -5881,7 +5947,7 @@
"shim"
],
"support": {
- "source": "https://github.com/symfony/polyfill-intl-grapheme/tree/v1.28.0"
+ "source": "https://github.com/symfony/polyfill-intl-grapheme/tree/v1.29.0"
},
"funding": [
{
@@ -5897,20 +5963,20 @@
"type": "tidelift"
}
],
- "time": "2023-01-26T09:26:14+00:00"
+ "time": "2024-01-29T20:11:03+00:00"
},
{
"name": "symfony/polyfill-intl-idn",
- "version": "v1.28.0",
+ "version": "v1.29.0",
"source": {
"type": "git",
"url": "https://github.com/symfony/polyfill-intl-idn.git",
- "reference": "ecaafce9f77234a6a449d29e49267ba10499116d"
+ "reference": "a287ed7475f85bf6f61890146edbc932c0fff919"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/polyfill-intl-idn/zipball/ecaafce9f77234a6a449d29e49267ba10499116d",
- "reference": "ecaafce9f77234a6a449d29e49267ba10499116d",
+ "url": "https://api.github.com/repos/symfony/polyfill-intl-idn/zipball/a287ed7475f85bf6f61890146edbc932c0fff919",
+ "reference": "a287ed7475f85bf6f61890146edbc932c0fff919",
"shasum": ""
},
"require": {
@@ -5923,9 +5989,6 @@
},
"type": "library",
"extra": {
- "branch-alias": {
- "dev-main": "1.28-dev"
- },
"thanks": {
"name": "symfony/polyfill",
"url": "https://github.com/symfony/polyfill"
@@ -5968,7 +6031,7 @@
"shim"
],
"support": {
- "source": "https://github.com/symfony/polyfill-intl-idn/tree/v1.28.0"
+ "source": "https://github.com/symfony/polyfill-intl-idn/tree/v1.29.0"
},
"funding": [
{
@@ -5984,20 +6047,20 @@
"type": "tidelift"
}
],
- "time": "2023-01-26T09:30:37+00:00"
+ "time": "2024-01-29T20:11:03+00:00"
},
{
"name": "symfony/polyfill-intl-normalizer",
- "version": "v1.28.0",
+ "version": "v1.29.0",
"source": {
"type": "git",
"url": "https://github.com/symfony/polyfill-intl-normalizer.git",
- "reference": "8c4ad05dd0120b6a53c1ca374dca2ad0a1c4ed92"
+ "reference": "bc45c394692b948b4d383a08d7753968bed9a83d"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/polyfill-intl-normalizer/zipball/8c4ad05dd0120b6a53c1ca374dca2ad0a1c4ed92",
- "reference": "8c4ad05dd0120b6a53c1ca374dca2ad0a1c4ed92",
+ "url": "https://api.github.com/repos/symfony/polyfill-intl-normalizer/zipball/bc45c394692b948b4d383a08d7753968bed9a83d",
+ "reference": "bc45c394692b948b4d383a08d7753968bed9a83d",
"shasum": ""
},
"require": {
@@ -6008,9 +6071,6 @@
},
"type": "library",
"extra": {
- "branch-alias": {
- "dev-main": "1.28-dev"
- },
"thanks": {
"name": "symfony/polyfill",
"url": "https://github.com/symfony/polyfill"
@@ -6052,7 +6112,7 @@
"shim"
],
"support": {
- "source": "https://github.com/symfony/polyfill-intl-normalizer/tree/v1.28.0"
+ "source": "https://github.com/symfony/polyfill-intl-normalizer/tree/v1.29.0"
},
"funding": [
{
@@ -6068,20 +6128,20 @@
"type": "tidelift"
}
],
- "time": "2023-01-26T09:26:14+00:00"
+ "time": "2024-01-29T20:11:03+00:00"
},
{
"name": "symfony/polyfill-mbstring",
- "version": "v1.28.0",
+ "version": "v1.29.0",
"source": {
"type": "git",
"url": "https://github.com/symfony/polyfill-mbstring.git",
- "reference": "42292d99c55abe617799667f454222c54c60e229"
+ "reference": "9773676c8a1bb1f8d4340a62efe641cf76eda7ec"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/42292d99c55abe617799667f454222c54c60e229",
- "reference": "42292d99c55abe617799667f454222c54c60e229",
+ "url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/9773676c8a1bb1f8d4340a62efe641cf76eda7ec",
+ "reference": "9773676c8a1bb1f8d4340a62efe641cf76eda7ec",
"shasum": ""
},
"require": {
@@ -6095,9 +6155,6 @@
},
"type": "library",
"extra": {
- "branch-alias": {
- "dev-main": "1.28-dev"
- },
"thanks": {
"name": "symfony/polyfill",
"url": "https://github.com/symfony/polyfill"
@@ -6135,7 +6192,7 @@
"shim"
],
"support": {
- "source": "https://github.com/symfony/polyfill-mbstring/tree/v1.28.0"
+ "source": "https://github.com/symfony/polyfill-mbstring/tree/v1.29.0"
},
"funding": [
{
@@ -6151,20 +6208,20 @@
"type": "tidelift"
}
],
- "time": "2023-07-28T09:04:16+00:00"
+ "time": "2024-01-29T20:11:03+00:00"
},
{
"name": "symfony/polyfill-php72",
- "version": "v1.28.0",
+ "version": "v1.29.0",
"source": {
"type": "git",
"url": "https://github.com/symfony/polyfill-php72.git",
- "reference": "70f4aebd92afca2f865444d30a4d2151c13c3179"
+ "reference": "861391a8da9a04cbad2d232ddd9e4893220d6e25"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/polyfill-php72/zipball/70f4aebd92afca2f865444d30a4d2151c13c3179",
- "reference": "70f4aebd92afca2f865444d30a4d2151c13c3179",
+ "url": "https://api.github.com/repos/symfony/polyfill-php72/zipball/861391a8da9a04cbad2d232ddd9e4893220d6e25",
+ "reference": "861391a8da9a04cbad2d232ddd9e4893220d6e25",
"shasum": ""
},
"require": {
@@ -6172,9 +6229,6 @@
},
"type": "library",
"extra": {
- "branch-alias": {
- "dev-main": "1.28-dev"
- },
"thanks": {
"name": "symfony/polyfill",
"url": "https://github.com/symfony/polyfill"
@@ -6211,7 +6265,7 @@
"shim"
],
"support": {
- "source": "https://github.com/symfony/polyfill-php72/tree/v1.28.0"
+ "source": "https://github.com/symfony/polyfill-php72/tree/v1.29.0"
},
"funding": [
{
@@ -6227,20 +6281,20 @@
"type": "tidelift"
}
],
- "time": "2023-01-26T09:26:14+00:00"
+ "time": "2024-01-29T20:11:03+00:00"
},
{
"name": "symfony/polyfill-php80",
- "version": "v1.28.0",
+ "version": "v1.29.0",
"source": {
"type": "git",
"url": "https://github.com/symfony/polyfill-php80.git",
- "reference": "6caa57379c4aec19c0a12a38b59b26487dcfe4b5"
+ "reference": "87b68208d5c1188808dd7839ee1e6c8ec3b02f1b"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/polyfill-php80/zipball/6caa57379c4aec19c0a12a38b59b26487dcfe4b5",
- "reference": "6caa57379c4aec19c0a12a38b59b26487dcfe4b5",
+ "url": "https://api.github.com/repos/symfony/polyfill-php80/zipball/87b68208d5c1188808dd7839ee1e6c8ec3b02f1b",
+ "reference": "87b68208d5c1188808dd7839ee1e6c8ec3b02f1b",
"shasum": ""
},
"require": {
@@ -6248,9 +6302,6 @@
},
"type": "library",
"extra": {
- "branch-alias": {
- "dev-main": "1.28-dev"
- },
"thanks": {
"name": "symfony/polyfill",
"url": "https://github.com/symfony/polyfill"
@@ -6294,7 +6345,7 @@
"shim"
],
"support": {
- "source": "https://github.com/symfony/polyfill-php80/tree/v1.28.0"
+ "source": "https://github.com/symfony/polyfill-php80/tree/v1.29.0"
},
"funding": [
{
@@ -6310,20 +6361,20 @@
"type": "tidelift"
}
],
- "time": "2023-01-26T09:26:14+00:00"
+ "time": "2024-01-29T20:11:03+00:00"
},
{
"name": "symfony/polyfill-php83",
- "version": "v1.28.0",
+ "version": "v1.29.0",
"source": {
"type": "git",
"url": "https://github.com/symfony/polyfill-php83.git",
- "reference": "b0f46ebbeeeda3e9d2faebdfbf4b4eae9b59fa11"
+ "reference": "86fcae159633351e5fd145d1c47de6c528f8caff"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/polyfill-php83/zipball/b0f46ebbeeeda3e9d2faebdfbf4b4eae9b59fa11",
- "reference": "b0f46ebbeeeda3e9d2faebdfbf4b4eae9b59fa11",
+ "url": "https://api.github.com/repos/symfony/polyfill-php83/zipball/86fcae159633351e5fd145d1c47de6c528f8caff",
+ "reference": "86fcae159633351e5fd145d1c47de6c528f8caff",
"shasum": ""
},
"require": {
@@ -6332,9 +6383,6 @@
},
"type": "library",
"extra": {
- "branch-alias": {
- "dev-main": "1.28-dev"
- },
"thanks": {
"name": "symfony/polyfill",
"url": "https://github.com/symfony/polyfill"
@@ -6374,7 +6422,7 @@
"shim"
],
"support": {
- "source": "https://github.com/symfony/polyfill-php83/tree/v1.28.0"
+ "source": "https://github.com/symfony/polyfill-php83/tree/v1.29.0"
},
"funding": [
{
@@ -6390,20 +6438,20 @@
"type": "tidelift"
}
],
- "time": "2023-08-16T06:22:46+00:00"
+ "time": "2024-01-29T20:11:03+00:00"
},
{
"name": "symfony/polyfill-uuid",
- "version": "v1.28.0",
+ "version": "v1.29.0",
"source": {
"type": "git",
"url": "https://github.com/symfony/polyfill-uuid.git",
- "reference": "9c44518a5aff8da565c8a55dbe85d2769e6f630e"
+ "reference": "3abdd21b0ceaa3000ee950097bc3cf9efc137853"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/polyfill-uuid/zipball/9c44518a5aff8da565c8a55dbe85d2769e6f630e",
- "reference": "9c44518a5aff8da565c8a55dbe85d2769e6f630e",
+ "url": "https://api.github.com/repos/symfony/polyfill-uuid/zipball/3abdd21b0ceaa3000ee950097bc3cf9efc137853",
+ "reference": "3abdd21b0ceaa3000ee950097bc3cf9efc137853",
"shasum": ""
},
"require": {
@@ -6417,9 +6465,6 @@
},
"type": "library",
"extra": {
- "branch-alias": {
- "dev-main": "1.28-dev"
- },
"thanks": {
"name": "symfony/polyfill",
"url": "https://github.com/symfony/polyfill"
@@ -6456,7 +6501,7 @@
"uuid"
],
"support": {
- "source": "https://github.com/symfony/polyfill-uuid/tree/v1.28.0"
+ "source": "https://github.com/symfony/polyfill-uuid/tree/v1.29.0"
},
"funding": [
{
@@ -6472,20 +6517,20 @@
"type": "tidelift"
}
],
- "time": "2023-01-26T09:26:14+00:00"
+ "time": "2024-01-29T20:11:03+00:00"
},
{
"name": "symfony/process",
- "version": "v6.4.2",
+ "version": "v6.4.4",
"source": {
"type": "git",
"url": "https://github.com/symfony/process.git",
- "reference": "c4b1ef0bc80533d87a2e969806172f1c2a980241"
+ "reference": "710e27879e9be3395de2b98da3f52a946039f297"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/process/zipball/c4b1ef0bc80533d87a2e969806172f1c2a980241",
- "reference": "c4b1ef0bc80533d87a2e969806172f1c2a980241",
+ "url": "https://api.github.com/repos/symfony/process/zipball/710e27879e9be3395de2b98da3f52a946039f297",
+ "reference": "710e27879e9be3395de2b98da3f52a946039f297",
"shasum": ""
},
"require": {
@@ -6517,7 +6562,7 @@
"description": "Executes commands in sub-processes",
"homepage": "https://symfony.com",
"support": {
- "source": "https://github.com/symfony/process/tree/v6.4.2"
+ "source": "https://github.com/symfony/process/tree/v6.4.4"
},
"funding": [
{
@@ -6533,20 +6578,20 @@
"type": "tidelift"
}
],
- "time": "2023-12-22T16:42:54+00:00"
+ "time": "2024-02-20T12:31:00+00:00"
},
{
"name": "symfony/psr-http-message-bridge",
- "version": "v7.0.2",
+ "version": "v7.0.3",
"source": {
"type": "git",
"url": "https://github.com/symfony/psr-http-message-bridge.git",
- "reference": "c5e973032e9a32c6f1bfa87d7832853b84cbaf22"
+ "reference": "d9fadaf9541d7c01c307e48905d7ce1dbee6bf38"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/psr-http-message-bridge/zipball/c5e973032e9a32c6f1bfa87d7832853b84cbaf22",
- "reference": "c5e973032e9a32c6f1bfa87d7832853b84cbaf22",
+ "url": "https://api.github.com/repos/symfony/psr-http-message-bridge/zipball/d9fadaf9541d7c01c307e48905d7ce1dbee6bf38",
+ "reference": "d9fadaf9541d7c01c307e48905d7ce1dbee6bf38",
"shasum": ""
},
"require": {
@@ -6600,7 +6645,7 @@
"psr-7"
],
"support": {
- "source": "https://github.com/symfony/psr-http-message-bridge/tree/v7.0.2"
+ "source": "https://github.com/symfony/psr-http-message-bridge/tree/v7.0.3"
},
"funding": [
{
@@ -6616,20 +6661,20 @@
"type": "tidelift"
}
],
- "time": "2023-12-28T19:18:20+00:00"
+ "time": "2024-01-23T15:02:46+00:00"
},
{
"name": "symfony/routing",
- "version": "v6.4.2",
+ "version": "v6.4.5",
"source": {
"type": "git",
"url": "https://github.com/symfony/routing.git",
- "reference": "98eab13a07fddc85766f1756129c69f207ffbc21"
+ "reference": "7fe30068e207d9c31c0138501ab40358eb2d49a4"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/routing/zipball/98eab13a07fddc85766f1756129c69f207ffbc21",
- "reference": "98eab13a07fddc85766f1756129c69f207ffbc21",
+ "url": "https://api.github.com/repos/symfony/routing/zipball/7fe30068e207d9c31c0138501ab40358eb2d49a4",
+ "reference": "7fe30068e207d9c31c0138501ab40358eb2d49a4",
"shasum": ""
},
"require": {
@@ -6683,7 +6728,7 @@
"url"
],
"support": {
- "source": "https://github.com/symfony/routing/tree/v6.4.2"
+ "source": "https://github.com/symfony/routing/tree/v6.4.5"
},
"funding": [
{
@@ -6699,7 +6744,7 @@
"type": "tidelift"
}
],
- "time": "2023-12-29T15:34:34+00:00"
+ "time": "2024-02-27T12:33:30+00:00"
},
{
"name": "symfony/service-contracts",
@@ -6785,16 +6830,16 @@
},
{
"name": "symfony/string",
- "version": "v7.0.2",
+ "version": "v7.0.4",
"source": {
"type": "git",
"url": "https://github.com/symfony/string.git",
- "reference": "cc78f14f91f5e53b42044d0620961c48028ff9f5"
+ "reference": "f5832521b998b0bec40bee688ad5de98d4cf111b"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/string/zipball/cc78f14f91f5e53b42044d0620961c48028ff9f5",
- "reference": "cc78f14f91f5e53b42044d0620961c48028ff9f5",
+ "url": "https://api.github.com/repos/symfony/string/zipball/f5832521b998b0bec40bee688ad5de98d4cf111b",
+ "reference": "f5832521b998b0bec40bee688ad5de98d4cf111b",
"shasum": ""
},
"require": {
@@ -6851,7 +6896,7 @@
"utf8"
],
"support": {
- "source": "https://github.com/symfony/string/tree/v7.0.2"
+ "source": "https://github.com/symfony/string/tree/v7.0.4"
},
"funding": [
{
@@ -6867,20 +6912,20 @@
"type": "tidelift"
}
],
- "time": "2023-12-10T16:54:46+00:00"
+ "time": "2024-02-01T13:17:36+00:00"
},
{
"name": "symfony/translation",
- "version": "v6.4.2",
+ "version": "v6.4.4",
"source": {
"type": "git",
"url": "https://github.com/symfony/translation.git",
- "reference": "a2ab2ec1a462e53016de8e8d5e8912bfd62ea681"
+ "reference": "bce6a5a78e94566641b2594d17e48b0da3184a8e"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/translation/zipball/a2ab2ec1a462e53016de8e8d5e8912bfd62ea681",
- "reference": "a2ab2ec1a462e53016de8e8d5e8912bfd62ea681",
+ "url": "https://api.github.com/repos/symfony/translation/zipball/bce6a5a78e94566641b2594d17e48b0da3184a8e",
+ "reference": "bce6a5a78e94566641b2594d17e48b0da3184a8e",
"shasum": ""
},
"require": {
@@ -6903,7 +6948,7 @@
"symfony/translation-implementation": "2.3|3.0"
},
"require-dev": {
- "nikic/php-parser": "^4.13",
+ "nikic/php-parser": "^4.18|^5.0",
"psr/log": "^1|^2|^3",
"symfony/config": "^5.4|^6.0|^7.0",
"symfony/console": "^5.4|^6.0|^7.0",
@@ -6946,7 +6991,7 @@
"description": "Provides tools to internationalize your application",
"homepage": "https://symfony.com",
"support": {
- "source": "https://github.com/symfony/translation/tree/v6.4.2"
+ "source": "https://github.com/symfony/translation/tree/v6.4.4"
},
"funding": [
{
@@ -6962,7 +7007,7 @@
"type": "tidelift"
}
],
- "time": "2023-12-18T09:25:29+00:00"
+ "time": "2024-02-20T13:16:58+00:00"
},
{
"name": "symfony/translation-contracts",
@@ -7044,16 +7089,16 @@
},
{
"name": "symfony/uid",
- "version": "v6.4.0",
+ "version": "v6.4.3",
"source": {
"type": "git",
"url": "https://github.com/symfony/uid.git",
- "reference": "8092dd1b1a41372110d06374f99ee62f7f0b9a92"
+ "reference": "1d31267211cc3a2fff32bcfc7c1818dac41b6fc0"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/uid/zipball/8092dd1b1a41372110d06374f99ee62f7f0b9a92",
- "reference": "8092dd1b1a41372110d06374f99ee62f7f0b9a92",
+ "url": "https://api.github.com/repos/symfony/uid/zipball/1d31267211cc3a2fff32bcfc7c1818dac41b6fc0",
+ "reference": "1d31267211cc3a2fff32bcfc7c1818dac41b6fc0",
"shasum": ""
},
"require": {
@@ -7098,7 +7143,7 @@
"uuid"
],
"support": {
- "source": "https://github.com/symfony/uid/tree/v6.4.0"
+ "source": "https://github.com/symfony/uid/tree/v6.4.3"
},
"funding": [
{
@@ -7114,20 +7159,20 @@
"type": "tidelift"
}
],
- "time": "2023-10-31T08:18:17+00:00"
+ "time": "2024-01-23T14:51:35+00:00"
},
{
"name": "symfony/var-dumper",
- "version": "v6.4.2",
+ "version": "v6.4.4",
"source": {
"type": "git",
"url": "https://github.com/symfony/var-dumper.git",
- "reference": "68d6573ec98715ddcae5a0a85bee3c1c27a4c33f"
+ "reference": "b439823f04c98b84d4366c79507e9da6230944b1"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/var-dumper/zipball/68d6573ec98715ddcae5a0a85bee3c1c27a4c33f",
- "reference": "68d6573ec98715ddcae5a0a85bee3c1c27a4c33f",
+ "url": "https://api.github.com/repos/symfony/var-dumper/zipball/b439823f04c98b84d4366c79507e9da6230944b1",
+ "reference": "b439823f04c98b84d4366c79507e9da6230944b1",
"shasum": ""
},
"require": {
@@ -7183,7 +7228,7 @@
"dump"
],
"support": {
- "source": "https://github.com/symfony/var-dumper/tree/v6.4.2"
+ "source": "https://github.com/symfony/var-dumper/tree/v6.4.4"
},
"funding": [
{
@@ -7199,7 +7244,7 @@
"type": "tidelift"
}
],
- "time": "2023-12-28T19:16:56+00:00"
+ "time": "2024-02-15T11:23:52+00:00"
},
{
"name": "tijsverkoyen/css-to-inline-styles",
@@ -7722,16 +7767,16 @@
},
{
"name": "laravel/pint",
- "version": "v1.13.10",
+ "version": "v1.13.11",
"source": {
"type": "git",
"url": "https://github.com/laravel/pint.git",
- "reference": "e2b5060885694ca30ac008c05dc9d47f10ed1abf"
+ "reference": "60a163c3e7e3346a1dec96d3e6f02e6465452552"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/laravel/pint/zipball/e2b5060885694ca30ac008c05dc9d47f10ed1abf",
- "reference": "e2b5060885694ca30ac008c05dc9d47f10ed1abf",
+ "url": "https://api.github.com/repos/laravel/pint/zipball/60a163c3e7e3346a1dec96d3e6f02e6465452552",
+ "reference": "60a163c3e7e3346a1dec96d3e6f02e6465452552",
"shasum": ""
},
"require": {
@@ -7742,13 +7787,13 @@
"php": "^8.1.0"
},
"require-dev": {
- "friendsofphp/php-cs-fixer": "^3.47.1",
- "illuminate/view": "^10.41.0",
+ "friendsofphp/php-cs-fixer": "^3.49.0",
+ "illuminate/view": "^10.43.0",
"larastan/larastan": "^2.8.1",
"laravel-zero/framework": "^10.3.0",
"mockery/mockery": "^1.6.7",
"nunomaduro/termwind": "^1.15.1",
- "pestphp/pest": "^2.31.0"
+ "pestphp/pest": "^2.33.6"
},
"bin": [
"builds/pint"
@@ -7784,26 +7829,26 @@
"issues": "https://github.com/laravel/pint/issues",
"source": "https://github.com/laravel/pint"
},
- "time": "2024-01-22T09:04:15+00:00"
+ "time": "2024-02-13T17:20:13+00:00"
},
{
"name": "laravel/sail",
- "version": "v1.27.2",
+ "version": "v1.27.4",
"source": {
"type": "git",
"url": "https://github.com/laravel/sail.git",
- "reference": "2276a8d9d6cfdcaad98bf67a34331d100149d5b6"
+ "reference": "3047e1a157fad968cc5f6e620d5cbe5c0867fffd"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/laravel/sail/zipball/2276a8d9d6cfdcaad98bf67a34331d100149d5b6",
- "reference": "2276a8d9d6cfdcaad98bf67a34331d100149d5b6",
+ "url": "https://api.github.com/repos/laravel/sail/zipball/3047e1a157fad968cc5f6e620d5cbe5c0867fffd",
+ "reference": "3047e1a157fad968cc5f6e620d5cbe5c0867fffd",
"shasum": ""
},
"require": {
- "illuminate/console": "^9.0|^10.0|^11.0",
- "illuminate/contracts": "^9.0|^10.0|^11.0",
- "illuminate/support": "^9.0|^10.0|^11.0",
+ "illuminate/console": "^9.52.16|^10.0|^11.0",
+ "illuminate/contracts": "^9.52.16|^10.0|^11.0",
+ "illuminate/support": "^9.52.16|^10.0|^11.0",
"php": "^8.0",
"symfony/yaml": "^6.0|^7.0"
},
@@ -7816,9 +7861,6 @@
],
"type": "library",
"extra": {
- "branch-alias": {
- "dev-master": "1.x-dev"
- },
"laravel": {
"providers": [
"Laravel\\Sail\\SailServiceProvider"
@@ -7849,7 +7891,7 @@
"issues": "https://github.com/laravel/sail/issues",
"source": "https://github.com/laravel/sail"
},
- "time": "2024-01-21T17:13:42+00:00"
+ "time": "2024-02-08T15:24:21+00:00"
},
{
"name": "mockery/mockery",
@@ -8523,16 +8565,16 @@
},
{
"name": "phpunit/phpunit",
- "version": "10.5.9",
+ "version": "10.5.10",
"source": {
"type": "git",
"url": "https://github.com/sebastianbergmann/phpunit.git",
- "reference": "0bd663704f0165c9e76fe4f06ffa6a1ca727fdbe"
+ "reference": "50b8e314b6d0dd06521dc31d1abffa73f25f850c"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/0bd663704f0165c9e76fe4f06ffa6a1ca727fdbe",
- "reference": "0bd663704f0165c9e76fe4f06ffa6a1ca727fdbe",
+ "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/50b8e314b6d0dd06521dc31d1abffa73f25f850c",
+ "reference": "50b8e314b6d0dd06521dc31d1abffa73f25f850c",
"shasum": ""
},
"require": {
@@ -8604,7 +8646,7 @@
"support": {
"issues": "https://github.com/sebastianbergmann/phpunit/issues",
"security": "https://github.com/sebastianbergmann/phpunit/security/policy",
- "source": "https://github.com/sebastianbergmann/phpunit/tree/10.5.9"
+ "source": "https://github.com/sebastianbergmann/phpunit/tree/10.5.10"
},
"funding": [
{
@@ -8620,7 +8662,7 @@
"type": "tidelift"
}
],
- "time": "2024-01-22T14:35:40+00:00"
+ "time": "2024-02-04T09:07:51+00:00"
},
{
"name": "sebastian/cli-parser",
@@ -9601,21 +9643,20 @@
},
{
"name": "spatie/flare-client-php",
- "version": "1.4.3",
+ "version": "1.4.4",
"source": {
"type": "git",
"url": "https://github.com/spatie/flare-client-php.git",
- "reference": "5db2fdd743c3ede33f2a5367d89ec1a7c9c1d1ec"
+ "reference": "17082e780752d346c2db12ef5d6bee8e835e399c"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/spatie/flare-client-php/zipball/5db2fdd743c3ede33f2a5367d89ec1a7c9c1d1ec",
- "reference": "5db2fdd743c3ede33f2a5367d89ec1a7c9c1d1ec",
+ "url": "https://api.github.com/repos/spatie/flare-client-php/zipball/17082e780752d346c2db12ef5d6bee8e835e399c",
+ "reference": "17082e780752d346c2db12ef5d6bee8e835e399c",
"shasum": ""
},
"require": {
"illuminate/pipeline": "^8.0|^9.0|^10.0|^11.0",
- "nesbot/carbon": "^2.62.1",
"php": "^8.0",
"spatie/backtrace": "^1.5.2",
"symfony/http-foundation": "^5.2|^6.0|^7.0",
@@ -9659,7 +9700,7 @@
],
"support": {
"issues": "https://github.com/spatie/flare-client-php/issues",
- "source": "https://github.com/spatie/flare-client-php/tree/1.4.3"
+ "source": "https://github.com/spatie/flare-client-php/tree/1.4.4"
},
"funding": [
{
@@ -9667,7 +9708,7 @@
"type": "github"
}
],
- "time": "2023-10-17T15:54:07+00:00"
+ "time": "2024-01-31T14:18:45+00:00"
},
{
"name": "spatie/ignition",
@@ -9754,16 +9795,16 @@
},
{
"name": "spatie/laravel-ignition",
- "version": "2.4.1",
+ "version": "2.4.2",
"source": {
"type": "git",
"url": "https://github.com/spatie/laravel-ignition.git",
- "reference": "005e1e7b1232f3b22d7e7be3f602693efc7dba67"
+ "reference": "351504f4570e32908839fc5a2dc53bf77d02f85e"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/spatie/laravel-ignition/zipball/005e1e7b1232f3b22d7e7be3f602693efc7dba67",
- "reference": "005e1e7b1232f3b22d7e7be3f602693efc7dba67",
+ "url": "https://api.github.com/repos/spatie/laravel-ignition/zipball/351504f4570e32908839fc5a2dc53bf77d02f85e",
+ "reference": "351504f4570e32908839fc5a2dc53bf77d02f85e",
"shasum": ""
},
"require": {
@@ -9842,20 +9883,20 @@
"type": "github"
}
],
- "time": "2024-01-12T13:14:58+00:00"
+ "time": "2024-02-09T16:08:40+00:00"
},
{
"name": "symfony/yaml",
- "version": "v7.0.0",
+ "version": "v7.0.3",
"source": {
"type": "git",
"url": "https://github.com/symfony/yaml.git",
- "reference": "0055b230c408428b9b5cde7c55659555be5c0278"
+ "reference": "2d4fca631c00700597e9442a0b2451ce234513d3"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/yaml/zipball/0055b230c408428b9b5cde7c55659555be5c0278",
- "reference": "0055b230c408428b9b5cde7c55659555be5c0278",
+ "url": "https://api.github.com/repos/symfony/yaml/zipball/2d4fca631c00700597e9442a0b2451ce234513d3",
+ "reference": "2d4fca631c00700597e9442a0b2451ce234513d3",
"shasum": ""
},
"require": {
@@ -9897,7 +9938,7 @@
"description": "Loads and dumps YAML files",
"homepage": "https://symfony.com",
"support": {
- "source": "https://github.com/symfony/yaml/tree/v7.0.0"
+ "source": "https://github.com/symfony/yaml/tree/v7.0.3"
},
"funding": [
{
@@ -9913,7 +9954,7 @@
"type": "tidelift"
}
],
- "time": "2023-11-07T10:26:03+00:00"
+ "time": "2024-01-23T15:02:46+00:00"
},
{
"name": "theseer/tokenizer",
diff --git a/config/auth0.php b/config/auth0.php
index 7a5664f..3795939 100644
--- a/config/auth0.php
+++ b/config/auth0.php
@@ -37,6 +37,8 @@ return Configuration::VERSION_2 + [
Configuration::CONFIG_CLIENT_ASSERTION_SIGNING_KEY => Configuration::get(Configuration::CONFIG_CLIENT_ASSERTION_SIGNING_KEY),
Configuration::CONFIG_CLIENT_ASSERTION_SIGNING_ALGORITHM => Configuration::get(Configuration::CONFIG_CLIENT_ASSERTION_SIGNING_ALGORITHM),
Configuration::CONFIG_PUSHED_AUTHORIZATION_REQUEST => Configuration::get(Configuration::CONFIG_PUSHED_AUTHORIZATION_REQUEST),
+ Configuration::CONFIG_BACKCHANNEL_LOGOUT_CACHE => Configuration::get(Configuration::CONFIG_BACKCHANNEL_LOGOUT_CACHE),
+ Configuration::CONFIG_BACKCHANNEL_LOGOUT_EXPIRES => Configuration::get(Configuration::CONFIG_BACKCHANNEL_LOGOUT_EXPIRES),
],
'api' => [
@@ -53,4 +55,13 @@ return Configuration::VERSION_2 + [
Configuration::CONFIG_TRANSIENT_STORAGE_ID => Configuration::get(Configuration::CONFIG_TRANSIENT_STORAGE_ID),
],
],
+
+ 'routes' => [
+ Configuration::CONFIG_ROUTE_INDEX => Configuration::get(Configuration::CONFIG_ROUTE_INDEX, '/'),
+ Configuration::CONFIG_ROUTE_CALLBACK => Configuration::get(Configuration::CONFIG_ROUTE_CALLBACK, '/callback'),
+ Configuration::CONFIG_ROUTE_LOGIN => Configuration::get(Configuration::CONFIG_ROUTE_LOGIN, '/login'),
+ Configuration::CONFIG_ROUTE_AFTER_LOGIN => Configuration::get(Configuration::CONFIG_ROUTE_AFTER_LOGIN, '/'),
+ Configuration::CONFIG_ROUTE_LOGOUT => Configuration::get(Configuration::CONFIG_ROUTE_LOGOUT, '/logout'),
+ Configuration::CONFIG_ROUTE_AFTER_LOGOUT => Configuration::get(Configuration::CONFIG_ROUTE_AFTER_LOGOUT, '/'),
+ ],
];
diff --git a/config/services.php b/config/services.php
index 0acb16e..21e97c7 100644
--- a/config/services.php
+++ b/config/services.php
@@ -17,6 +17,5 @@ return [
'lastfm' => [
'key' => env('LASTFM_KEY'),
'user' => env('LASTFM_USER'),
- 'toptracks' => env('LASTFM_TOP_TRACKS')
]
];
diff --git a/database/factories/BookmarkCategoryFactory.php b/database/factories/BookmarkCategoryFactory.php
new file mode 100644
index 0000000..ca49ce5
--- /dev/null
+++ b/database/factories/BookmarkCategoryFactory.php
@@ -0,0 +1,23 @@
+<?php
+
+namespace Database\Factories;
+
+use Illuminate\Database\Eloquent\Factories\Factory;
+
+/**
+ * @extends \Illuminate\Database\Eloquent\Factories\Factory<\App\Models\BookmarkCategory>
+ */
+class BookmarkCategoryFactory extends Factory
+{
+ /**
+ * Define the model's default state.
+ *
+ * @return array<string, mixed>
+ */
+ public function definition(): array
+ {
+ return [
+ 'name' => $this->faker->word,
+ ];
+ }
+}
diff --git a/database/factories/BookmarkSiteFactory.php b/database/factories/BookmarkSiteFactory.php
new file mode 100644
index 0000000..c77c011
--- /dev/null
+++ b/database/factories/BookmarkSiteFactory.php
@@ -0,0 +1,27 @@
+<?php
+
+namespace Database\Factories;
+
+use Illuminate\Database\Eloquent\Factories\Factory;
+use App\Models\BookmarkCategory;
+
+/**
+ * @extends \Illuminate\Database\Eloquent\Factories\Factory<\App\Models\BookmarkSite>
+ */
+class BookmarkSiteFactory extends Factory
+{
+ /**
+ * Define the model's default state.
+ *
+ * @return array<string, mixed>
+ */
+ public function definition(): array
+ {
+ return [
+ 'name' => $this->faker->name,
+ 'description' => $this->faker->sentence,
+ 'url' => $this->faker->url,
+ 'category' => BookmarkCategory::factory(),
+ ];
+ }
+}
diff --git a/database/migrations/2024_01_31_204815_create_guestbook__bans_table.php b/database/migrations/2024_01_31_204815_create_guestbook__bans_table.php
deleted file mode 100644
index 6f0a959..0000000
--- a/database/migrations/2024_01_31_204815_create_guestbook__bans_table.php
+++ /dev/null
@@ -1,29 +0,0 @@
-<?php
-
-use Illuminate\Database\Migrations\Migration;
-use Illuminate\Database\Schema\Blueprint;
-use Illuminate\Support\Facades\Schema;
-
-return new class extends Migration
-{
- /**
- * Run the migrations.
- */
- public function up(): void
- {
- Schema::create('guestbook__bans', function (Blueprint $table) {
- $table->increments('id');
- $table->string('ip_address', 40);
- $table->string('reason', 50);
- $table->timestamps();
- });
- }
-
- /**
- * Reverse the migrations.
- */
- public function down(): void
- {
- Schema::dropIfExists('guestbook__bans');
- }
-};
diff --git a/database/migrations/2024_01_31_210227_populate_bookmark__categories_table.php b/database/migrations/2024_01_31_210227_populate_bookmark__categories_table.php
deleted file mode 100644
index fb81e1f..0000000
--- a/database/migrations/2024_01_31_210227_populate_bookmark__categories_table.php
+++ /dev/null
@@ -1,34 +0,0 @@
-<?php
-
-use Illuminate\Database\Migrations\Migration;
-use Illuminate\Database\Schema\Blueprint;
-use Illuminate\Support\Facades\DB;
-use Illuminate\Support\Facades\Schema;
-
-return new class extends Migration
-{
- /**
- * Run the migrations.
- */
- public function up(): void
- {
- // Check if table exists and is empty
- if (Schema::hasTable('bookmark__categories') && DB::table('bookmark__categories')->count() == 0) {
- // Insert placeholder categories
- DB::table('bookmark__categories')->insert([
- ['name' => 'Friends\' Websites', 'priority' => 1],
- ['name' => 'Cool Projects', 'priority' => 2],
- ['name' => 'Other Cool Sites', 'priority' => 3],
- ['name' => 'Miscellaneous Resources', 'priority' => 4]
- ]);
- }
- }
-
- /**
- * Reverse the migrations.
- */
- public function down(): void
- {
- //
- }
-};
diff --git a/database/migrations/2024_01_31_204730_create_bookmark__categories_table.php b/database/migrations/2024_02_13_230402_create_bookmark__categories_table.php
index 68bf949..bb1799b 100644
--- a/database/migrations/2024_01_31_204730_create_bookmark__categories_table.php
+++ b/database/migrations/2024_02_13_230402_create_bookmark__categories_table.php
@@ -12,9 +12,9 @@ return new class extends Migration
public function up(): void
{
Schema::create('bookmark__categories', function (Blueprint $table) {
- $table->increments('id');
+ $table->id();
$table->string('name');
- $table->float('priority');
+ $table->unsignedBigInteger('priority')->nullable();
$table->timestamps();
});
}
diff --git a/database/migrations/2024_01_31_204742_create_bookmark__sites_table.php b/database/migrations/2024_02_13_230457_create_bookmark__sites_table.php
index 775c6bb..f016f43 100644
--- a/database/migrations/2024_01_31_204742_create_bookmark__sites_table.php
+++ b/database/migrations/2024_02_13_230457_create_bookmark__sites_table.php
@@ -12,13 +12,15 @@ return new class extends Migration
public function up(): void
{
Schema::create('bookmark__sites', function (Blueprint $table) {
- $table->increments('id');
- $table->string('name', 50);
- $table->string('description', 150);
- $table->string('url', 100);
- $table->float('priority');
- $table->integer('category_id')->unsigned();
- $table->foreign('category_id')->references('id')->on('bookmark__categories');
+ $table->id();
+ $table->string('name');
+ $table->text('description')->nullable();
+ $table->string('url');
+ $table->unsignedBigInteger('category');
+ $table->foreign('category')
+ ->references('id')
+ ->on('bookmark__categories')
+ ->onDelete('cascade');
$table->timestamps();
});
}
@@ -28,6 +30,6 @@ return new class extends Migration
*/
public function down(): void
{
- Schema::dropIfExists('bookmark__sites');
+ Schema::dropIfExists('bookmarks');
}
};
diff --git a/database/migrations/2024_01_31_204820_create_guestbook__entries_table.php b/database/migrations/2024_02_25_151527_create_guestbook__entries_table.php
index baaf862..f1b2a11 100644
--- a/database/migrations/2024_01_31_204820_create_guestbook__entries_table.php
+++ b/database/migrations/2024_02_25_151527_create_guestbook__entries_table.php
@@ -12,13 +12,12 @@ return new class extends Migration
public function up(): void
{
Schema::create('guestbook__entries', function (Blueprint $table) {
- $table->increments('id');
- $table->string('name', 255);
- $table->bigInteger('timestamp');
- $table->string('ip_address', 40);
- $table->string('agent', 2048)->default('Agent unavailable');
- $table->boolean('site_owner')->default(0);
- $table->string('message', 512);
+ $table->id();
+ $table->string('name');
+ $table->string('ip');
+ $table->string('agent');
+ $table->longText('message');
+ $table->boolean('admin');
$table->timestamps();
});
}
diff --git a/database/seeders/BookmarkCategoriesTableSeeder.php b/database/seeders/BookmarkCategoriesTableSeeder.php
new file mode 100644
index 0000000..5c8ea2f
--- /dev/null
+++ b/database/seeders/BookmarkCategoriesTableSeeder.php
@@ -0,0 +1,30 @@
+<?php
+
+namespace Database\Seeders;
+
+use App\Models\BookmarkCategory;
+use App\Models\BookmarkSite;
+use Illuminate\Database\Seeder;
+
+class BookmarkCategoriesTableSeeder extends Seeder
+{
+ /**
+ * Run the database seeds.
+ */
+ public function run(): void {
+// BookmarkCategory::factory()->count(5)->create()->each(function ($category) {
+// $category->sites()->saveMany(BookmarkSite::factory()->count(3)->make());
+// });
+ $category = new BookmarkCategory([
+ 'name' => 'cool people',
+ ]);
+ $category->save();
+ $site = new BookmarkSite([
+ 'name' => 'campos',
+ 'description' => 'Cool brazilian dude, does programming and stuff',
+ 'url' => 'https://campos02.me/',
+ 'category' => 1,
+ ]);
+ $site->save();
+ }
+}
diff --git a/database/seeders/DatabaseSeeder.php b/database/seeders/DatabaseSeeder.php
deleted file mode 100644
index a9f4519..0000000
--- a/database/seeders/DatabaseSeeder.php
+++ /dev/null
@@ -1,22 +0,0 @@
-<?php
-
-namespace Database\Seeders;
-
-// use Illuminate\Database\Console\Seeds\WithoutModelEvents;
-use Illuminate\Database\Seeder;
-
-class DatabaseSeeder extends Seeder
-{
- /**
- * Seed the application's database.
- */
- public function run(): void
- {
- // \App\Models\User::factory(10)->create();
-
- // \App\Models\User::factory()->create([
- // 'name' => 'Test User',
- // 'email' => 'test@example.com',
- // ]);
- }
-}
diff --git a/public/css/master.css b/public/css/master.css
index 4b4fbc3..1b8683d 100644
--- a/public/css/master.css
+++ b/public/css/master.css
@@ -111,6 +111,10 @@ pre {
grid-row-gap: 0;
}
+.nav-wrapper div:nth-child(2) {
+ text-align: right;
+}
+
.theme-selector label {
font-weight: bold;
}
@@ -226,7 +230,7 @@ table.computers td ul {
padding-left: 20px;
}
-table.computers section-title {
+table.computers .section-title {
text-decoration: underline;
font-style: italic;
font-weight: bold;
@@ -272,34 +276,46 @@ a {
text-decoration: underline dotted;
}
-table.gb-entry-form tr td {
+table.form tr td {
border: none;
}
-table.gb-entry-form tr td label {
+table.form tr td label {
padding-right: 5px;
}
-table.gb-entry-form tr td span.text-danger {
+table.form tr td span.text-danger {
padding-left: 5px;
color: var(--warning);
}
-table.gb-entry-form tr td textarea,
-table.gb-entry-form tr td input,
-table.gb-entry-form tr td button{
- margin-bottom: 5px;
- margin-left: 10px;
+input.file {
+ border: 0 !important;
+}
+
+table.form tr td textarea,
+table.form tr td input,
+table.form tr td button,
+form.import input::file-selector-button,
+form.import button {
background-color: var(--background);
border: var(--foreground) solid 1px;
}
-table.gb-entry-form tr td button {
+table.form label {
+ margin: 5px 0;
+}
+
+form.import button,
+form.import input::file-selector-button,
+table.form tr td button {
color: var(--foreground);
background-color: var(--background-secondary);
}
-table.gb-entry-form tr td button:hover {
+form.import button:hover,
+form.import input::file-selector-button:hover,
+table.form tr td button:hover {
color: var(--background);
background-color: var(--foreground);
}
@@ -318,7 +334,7 @@ table.gb-entry-form-container tr td ul {
margin: 0;
}
-table.gb-entry-form tbody tr td textarea {
+table.form tbody tr td textarea {
width: 210px;
}
@@ -490,20 +506,151 @@ label[for="scheme-selector"] {
}
-.music-top10 td {
+.music-top10 td,
+.music-top10 th {
border: none;
border-left: 1px dotted var(--foreground);
padding: 2px 5px
}
-.music-top10 tr:nth-child(2) td {
+.music-top10 tr:nth-child(1) th {
border-bottom: 1px dotted var(--foreground);
}
-.music-top10 tr:nth-child(3) td {
+.music-top10 tr:nth-child(2) td {
padding-top: 5px;
}
-.music-top10 td:first-child {
+.music-top10 td:first-child,
+.music-top10 th:first-child {
border: none;
}
+
+.music-top10 tr th:first-child {
+ text-align: right;
+}
+
+.music-top10 td {
+ white-space: nowrap; text-overflow:ellipsis; overflow: hidden;
+}
+
+.music-top10 tr td:first-child {
+ text-align: right;
+}
+
+.music-top10 tr td:nth-child(2),
+.music-top10 tr td:nth-child(3) {
+ width: 50%;
+}
+
+.current-track {
+ width: 100%;
+}
+
+.current-track h2 {
+ margin: 0;
+}
+
+.info-section ul {
+ list-style-position: inside;
+ list-style-type: none;
+ padding-left: 0;
+ margin: 0;
+}
+
+.info-section ul li:before {
+ content: "◆ ";
+}
+
+.info-section h2 {
+ margin: 0;
+}
+
+.info-section p {
+ margin-top: 10px;
+}
+
+.contact-section {
+ display: grid;
+ grid-template-rows: 1fr 1fr;
+}
+
+.banner {
+ padding: 5px;
+ margin-top: 10px;
+ display: grid;
+ grid-template-columns: repeat(2, 1fr);
+ grid-template-rows: 1fr;
+ grid-column-gap: 0;
+ grid-row-gap: 0;
+}
+
+.banner div:nth-child(1) {
+ text-align: left;
+}
+
+.banner div:nth-child(2) {
+ text-align: right;
+}
+
+.red-banner {
+ border: 3px solid var(--foreground);
+ background-color: var(--background-secondary);
+}
+
+.info-admin td,
+.info-admin th {
+ border: 1px solid var(--foreground);
+ padding: 5px;
+}
+
+.info-admin th {
+ background-color: var(--background-secondary);
+}
+
+.info-admin th.blank {
+ border: none;
+ background-color: var(--background);
+}
+
+.info-admin button {
+ border: 1px solid var(--foreground);
+ background-color: var(--background);
+ color: var(--foreground);
+}
+
+.info-admin button:hover {
+ background-color: var(--foreground);
+ color: var(--background);
+}
+
+.info-admin button:active {
+ background-color: var(--background-secondary);
+ color: var(--foreground);
+}
+
+.info-admin-section h2 {
+ margin-bottom: 5px;
+}
+
+.fullwidth {
+ width: 100%;
+}
+
+.fullwidth td:last-child {
+ width: 0;
+}
+
+.guestbook-message {
+ text-wrap: wrap;
+ width: 100%;
+}
+
+td.diagonal-line {
+ background: linear-gradient(to right bottom, var(--background) 0%,var(--background) 49.9%,var(--foreground) 50%,var(--foreground) 51%,var(--background) 51.1%,var(--background) 100%);
+}
+
+form.import h2 {
+ margin: 10px 0 5px 0;
+}
+
diff --git a/public/images/icons/home2/user-desktop.png b/public/images/icons/home2/user-desktop.png
new file mode 100644
index 0000000..af9715f
--- /dev/null
+++ b/public/images/icons/home2/user-desktop.png
Binary files differ
diff --git a/public/images/icons/nav/admin.png b/public/images/icons/nav/admin.png
new file mode 100644
index 0000000..153a405
--- /dev/null
+++ b/public/images/icons/nav/admin.png
Binary files differ
diff --git a/public/images/icons/nav/home2.png b/public/images/icons/nav/home2.png
new file mode 100644
index 0000000..76f6da7
--- /dev/null
+++ b/public/images/icons/nav/home2.png
Binary files differ
diff --git a/public/js/neverSaid.js b/public/js/neverSaid.js
index 5b58d60..ac0e6ae 100644
--- a/public/js/neverSaid.js
+++ b/public/js/neverSaid.js
@@ -1,31 +1,31 @@
// Define an array of strings
const neverSaid = [
- "<td style=\"width: 105px\"><strong>ASM:</strong></td> <td>The Director liked all the props we got today.</td>",
- "<td style=\"width: 105px\"><strong>PM:</strong></td> <td>Ah ha, a revolve. Terrific.</td>",
- "<td style=\"width: 105px\"><strong>Chippie:</strong></td> <td>I don't know, let's look at the ground plan.</td>",
- "<td style=\"width: 105px\"><strong>Set Designer:</strong></td> <td>Well, let's just have whatever is cheaper.</td>",
- "<td style=\"width: 105px\"><strong>Sound:</strong></td> <td>Better turn that down a bit. We don't want to deafen them.</td>",
- "<td style=\"width: 105px\"><strong>Director:</strong></td> <td>Sorry, my mistake.</td>",
- "<td style=\"width: 105px\"><strong>Electrics:</strong></td> <td>This equipment is more complicated than we need.</td>",
- "<td style=\"width: 105px\"><strong>Performer:</strong></td> <td>I really think my big scene should be cut.</td>",
- "<td style=\"width: 105px\"><strong>SM:</strong></td> <td>Can we doo that scene change again please?",
- "<td style=\"width: 105px\"><strong>LX designer:</strong></td> <td>Bit more light from those big chaps at the side. Yes that's right, the ones on stalks whatever they are called.</td>",
- "<td style=\"width: 105px\"><strong>Electrics:</strong></td> <td>All the equipment works perfectly.</td>",
- "<td style=\"width: 105px\"><strong>Musicians:</strong></td> <td>So what if that's the end of a call. Let's just finish this bit off.</td>",
- "<td style=\"width: 105px\"><strong>Wardrobe:</strong></td> <td>Now, when exactly is the first dress rehearsal?",
- "<td style=\"width: 105px\"><strong>Workshop:</strong></td> <td>I don't want anyone to know, but if you insist then yes, I admit it, I have just done an all-nighter.</td>",
- "<td style=\"width: 105px\"><strong>Performer:</strong></td> <td>This costume is so comfortable.</td>",
- "<td style=\"width: 105px\"><strong>Admin:</strong></td> <td>The level of overtime payments here are simply unacceptable. Our backstage staff deserve better.</td>",
- "<td style=\"width: 105px\"><strong>Box Office:</strong></td> <td>Comps? No problem.</td>",
- "<td style=\"width: 105px\"><strong>Set Designer:</strong></td> <td>You're right, it looks dreadful.</td>",
- "<td style=\"width: 105px\"><strong>Flyman:</strong></td> <td>No, my lips are sealed. What I may or may not have seen remains a secret.</td>",
- "<td style=\"width: 105px\"><strong>Electrics:</strong></td> <td>That had nothing to do with the computer, it was my fault.</td>",
- "<td style=\"width: 105px\"><strong>Crew:</strong></td> <td>No, no, I'm sure that's our job.</td>",
- "<td style=\"width: 105px\"><strong>SMgt:</strong></td> <td>Thanks, but I don't drink",
- "<td style=\"width: 105px\"><strong>Performer:</strong></td> <td>Let me stand down here with my back to the audience.</td>",
- "<td style=\"width: 105px\"><strong>Chippie:</strong></td> <td>I can't really manage those big fast power tools myself.</td>",
- "<td style=\"width: 105px\"><strong>Chippie:</strong></td> <td>I prefer to use these little hand drills.</td>",
- "<td style=\"width: 105px\"><strong>All:</strong></td> <td>Let's go and ask the Production Manager. He'll know.</td>"
+ "<strong>ASM:</strong> The Director liked all the props we got today.",
+ "<strong>PM:</strong> Ah ha, a revolve. Terrific.",
+ "<strong>Chippie:</strong> I don't know, let's look at the ground plan.",
+ "<strong>Set Designer:</strong> Well, let's just have whatever is cheaper.",
+ "<strong>Sound:</strong> Better turn that down a bit. We don't want to deafen them.",
+ "<strong>Director:</strong> Sorry, my mistake.",
+ "<strong>Electrics:</strong> This equipment is more complicated than we need.",
+ "<strong>Performer:</strong> I really think my big scene should be cut.",
+ "<strong>SM:</strong> Can we do that scene change again please?",
+ "<strong>LX designer:</strong> Bit more light from those big chaps at the side. Yes that's right, the ones on stalks whatever they are called.",
+ "<strong>Electrics:</strong> All the equipment works perfectly.",
+ "<strong>Musicians:</strong> So what if that's the end of a call. Let's just finish this bit off.",
+ "<strong>Wardrobe:</strong> Now, when exactly is the first dress rehearsal?",
+ "<strong>Workshop:</strong> I don't want anyone to know, but if you insist then yes, I admit it, I have just done an all-nighter.",
+ "<strong>Performer:</strong> This costume is so comfortable.",
+ "<strong>Admin:</strong> The level of overtime payments here are simply unacceptable. Our backstage staff deserve better.",
+ "<strong>Box Office:</strong> Comps? No problem.",
+ "<strong>Set Designer:</strong> You're right, it looks dreadful.",
+ "<strong>Flyman:</strong> No, my lips are sealed. What I may or may not have seen remains a secret.",
+ "<strong>Electrics:</strong> That had nothing to do with the computer, it was my fault.",
+ "<strong>Crew:</strong> No, no, I'm sure that's our job.",
+ "<strong>SMgt:</strong> Thanks, but I don't drink",
+ "<strong>Performer:</strong> Let me stand down here with my back to the audience.",
+ "<strong>Chippie:</strong> I can't really manage those big fast power tools myself.",
+ "<strong>Chippie:</strong> I prefer to use these little hand drills.",
+ "<strong>All:</strong> Let's go and ask the Production Manager. He'll know."
]
// Generate a random index into the array
diff --git a/public/robots.txt b/public/robots.txt
index e65f07c..582552d 100644
--- a/public/robots.txt
+++ b/public/robots.txt
@@ -3,3 +3,19 @@ Disallow: /admin
Disallow: /login
Disallow: /js
Disallow: /css
+
+User-Agent: GPTBot
+Disallow: /
+
+User-Agent: ChatGPT-User
+Disallow: /
+
+User-Agent: Google-Extended
+Disallow: /
+
+User-Agent: CCBot
+Disallow: /
+
+User-Agent: PerplexityBot
+Disallow: /
+
diff --git a/resources/js/neverSaid.js b/resources/js/neverSaid.js
new file mode 100644
index 0000000..5b58d60
--- /dev/null
+++ b/resources/js/neverSaid.js
@@ -0,0 +1,35 @@
+// Define an array of strings
+const neverSaid = [
+ "<td style=\"width: 105px\"><strong>ASM:</strong></td> <td>The Director liked all the props we got today.</td>",
+ "<td style=\"width: 105px\"><strong>PM:</strong></td> <td>Ah ha, a revolve. Terrific.</td>",
+ "<td style=\"width: 105px\"><strong>Chippie:</strong></td> <td>I don't know, let's look at the ground plan.</td>",
+ "<td style=\"width: 105px\"><strong>Set Designer:</strong></td> <td>Well, let's just have whatever is cheaper.</td>",
+ "<td style=\"width: 105px\"><strong>Sound:</strong></td> <td>Better turn that down a bit. We don't want to deafen them.</td>",
+ "<td style=\"width: 105px\"><strong>Director:</strong></td> <td>Sorry, my mistake.</td>",
+ "<td style=\"width: 105px\"><strong>Electrics:</strong></td> <td>This equipment is more complicated than we need.</td>",
+ "<td style=\"width: 105px\"><strong>Performer:</strong></td> <td>I really think my big scene should be cut.</td>",
+ "<td style=\"width: 105px\"><strong>SM:</strong></td> <td>Can we doo that scene change again please?",
+ "<td style=\"width: 105px\"><strong>LX designer:</strong></td> <td>Bit more light from those big chaps at the side. Yes that's right, the ones on stalks whatever they are called.</td>",
+ "<td style=\"width: 105px\"><strong>Electrics:</strong></td> <td>All the equipment works perfectly.</td>",
+ "<td style=\"width: 105px\"><strong>Musicians:</strong></td> <td>So what if that's the end of a call. Let's just finish this bit off.</td>",
+ "<td style=\"width: 105px\"><strong>Wardrobe:</strong></td> <td>Now, when exactly is the first dress rehearsal?",
+ "<td style=\"width: 105px\"><strong>Workshop:</strong></td> <td>I don't want anyone to know, but if you insist then yes, I admit it, I have just done an all-nighter.</td>",
+ "<td style=\"width: 105px\"><strong>Performer:</strong></td> <td>This costume is so comfortable.</td>",
+ "<td style=\"width: 105px\"><strong>Admin:</strong></td> <td>The level of overtime payments here are simply unacceptable. Our backstage staff deserve better.</td>",
+ "<td style=\"width: 105px\"><strong>Box Office:</strong></td> <td>Comps? No problem.</td>",
+ "<td style=\"width: 105px\"><strong>Set Designer:</strong></td> <td>You're right, it looks dreadful.</td>",
+ "<td style=\"width: 105px\"><strong>Flyman:</strong></td> <td>No, my lips are sealed. What I may or may not have seen remains a secret.</td>",
+ "<td style=\"width: 105px\"><strong>Electrics:</strong></td> <td>That had nothing to do with the computer, it was my fault.</td>",
+ "<td style=\"width: 105px\"><strong>Crew:</strong></td> <td>No, no, I'm sure that's our job.</td>",
+ "<td style=\"width: 105px\"><strong>SMgt:</strong></td> <td>Thanks, but I don't drink",
+ "<td style=\"width: 105px\"><strong>Performer:</strong></td> <td>Let me stand down here with my back to the audience.</td>",
+ "<td style=\"width: 105px\"><strong>Chippie:</strong></td> <td>I can't really manage those big fast power tools myself.</td>",
+ "<td style=\"width: 105px\"><strong>Chippie:</strong></td> <td>I prefer to use these little hand drills.</td>",
+ "<td style=\"width: 105px\"><strong>All:</strong></td> <td>Let's go and ask the Production Manager. He'll know.</td>"
+]
+
+// Generate a random index into the array
+const randomIndex = Math.floor(Math.random() * neverSaid.length);
+
+// Use document.write to output the random string
+document.write(neverSaid[randomIndex]);
diff --git a/resources/js/schemeSwap.js b/resources/js/schemeSwap.js
new file mode 100644
index 0000000..3baa09b
--- /dev/null
+++ b/resources/js/schemeSwap.js
@@ -0,0 +1,70 @@
+/**
+ * Retrieves a cookies value
+ * @param {string} cname Cookie name
+ * @returns {string} Cookie value
+ */
+function getCookie(cname) {
+ let name = cname + "=";
+ let decodedCookie = decodeURIComponent(document.cookie);
+ let ca = decodedCookie.split(';');
+ for(let i = 0; i <ca.length; i++) {
+ let c = ca[i];
+ while (c.charAt(0) === ' ') {
+ c = c.substring(1);
+ }
+ if (c.indexOf(name) === 0) {
+ return c.substring(name.length, c.length);
+ }
+ }
+ return "";
+}
+
+/**
+ * Sets/creates a cookie
+ * @param {string} cname Cookie name
+ * @param {string} cvalue Cookie value
+ * @param {number} exdays Cookie lifespan (days)
+ */
+function setCookie(cname, cvalue, exdays) {
+ const d = new Date();
+ d.setTime(d.getTime() + (exdays*24*60*60*1000));
+ let expires = "expires="+ d.toUTCString();
+ document.cookie = cname + "=" + cvalue + ";" + expires + ";path=/;SameSite=Strict;Domain=.diskfloppy.me";
+}
+
+/**
+ * Checks if a cookie exists
+ * @param {string} cname Cookie name
+ * @returns {boolean} If cookie exists or not
+ */
+function cookieExists(cname) {
+ const cvalue = getCookie(cname);
+ return cvalue !== "";
+}
+
+/**
+ * Swaps the colorscheme
+ * @param {string} scheme Color scheme ID
+ */
+function swapScheme(scheme) {
+ setCookie("colorscheme", scheme, 90);
+ document.getElementById("css-colorscheme").href = `/css/colorschemes/${scheme}.css`;
+ console.log(`Set colorscheme to ${getCookie("colorscheme")}`)
+}
+
+function setSchemeSelector() {
+ if (!cookieExists("colorscheme")) {
+ setCookie("colorscheme", "catppuccin-macchiato", 90);
+ } else {
+ const scheme = getCookie("colorscheme");
+ const scheme_selector = document.getElementById("scheme-selector");
+ if (scheme && scheme_selector) {
+ for (let option of scheme_selector.options) {
+ if (option.value === scheme) {
+ option.selected = true;
+ break;
+ }
+ }
+ }
+ }
+}
diff --git a/resources/views/admin/bookmarks.blade.php b/resources/views/admin/bookmarks.blade.php
new file mode 100644
index 0000000..f06539c
--- /dev/null
+++ b/resources/views/admin/bookmarks.blade.php
@@ -0,0 +1,28 @@
+<x-layout>
+ <x-slot:title>Admin | Bookmarks</x-slot:title>
+ @foreach($categories as $category)
+ <div class="info-section info-admin-section">
+ <h2>{{ $category->name }}</h2>
+ <table class="info-admin">
+ <tr>
+ <th>ID</th>
+ <th>Name</th>
+ <th>Description</th>
+ <th>URL</th>
+ <th>Priority</th>
+ <th class="blank"></th>
+ </tr>
+ @foreach($category->sites as $site)
+ <tr>
+ <td>{{ $site->id }}</td>
+ <td>{{ $site->name }}</td>
+ <td>{{ $site->description }}</td>
+ <td>{{ $site->url }}</td>
+ <td>{{ $site->priority }}</td>
+ <td><a href="?action=delete&id={{ $site->id }}"><button>Delete</button></a></td>
+ </tr>
+ @endforeach
+ </table>
+ </div>
+ @endforeach
+</x-layout>
diff --git a/resources/views/admin/guestbook.blade.php b/resources/views/admin/guestbook.blade.php
new file mode 100644
index 0000000..1f5dab3
--- /dev/null
+++ b/resources/views/admin/guestbook.blade.php
@@ -0,0 +1,32 @@
+<x-layout>
+ <x-slot:title>Admin | Guestbook</x-slot:title>
+ <div class="info-section">
+ <h2>Statistics</h2>
+ <hr>
+ <strong>Unique IP addresses:</strong> {{ $guestbook_unique_addr }}<br>
+ <strong>Entries:</strong> {{ $guestbook_entry_count }}
+ </div>
+ <br>
+ <div class="info-section">
+ <h2>Entries</h2>
+ <hr>
+ <table class="info-admin fullwidth">
+ <tr>
+ <th>ID</th>
+ <th>Name</th>
+ <th>IP Address</th>
+ <th>Message</th>
+ <th class="blank"></th>
+ </tr>
+ @foreach ($entries as $entry)
+ <tr>
+ <td>{{ $entry->id }}</td>
+ <td>{{ $entry->name }}</td>
+ <td>{{ $entry->ip }}</td>
+ <td>{{ $entry->message }}</td>
+ <td><a href="?action=delete&id={{ $entry->id }}"><button>Delete</button></a></td>
+ </tr>
+ @endforeach
+ </table>
+ </div>
+</x-layout>
diff --git a/resources/views/admin/import-success.blade.php b/resources/views/admin/import-success.blade.php
new file mode 100644
index 0000000..f6d5eb3
--- /dev/null
+++ b/resources/views/admin/import-success.blade.php
@@ -0,0 +1,12 @@
+<x-layout>
+ <x-slot:title>Admin | Import</x-slot:title>
+ <div class="info-section">
+ <h2>Imported data</h2>
+ <hr>
+ <ul>
+ @foreach($tables as $name => $data)
+ <li><strong>{{ ucwords(str_replace('__', ' ', $name)) }}:</strong> {{ $data['count'] }} record(s)</li>
+ @endforeach
+ </ul>
+ </div>
+</x-layout>
diff --git a/resources/views/admin/import.blade.php b/resources/views/admin/import.blade.php
new file mode 100644
index 0000000..e663724
--- /dev/null
+++ b/resources/views/admin/import.blade.php
@@ -0,0 +1,18 @@
+<x-layout>
+ <x-slot:title>Admin | Import</x-slot:title>
+ <form class="import" action="{{ route('admin.import.submit') }}" method="post" enctype="multipart/form-data">
+ @csrf
+ <label for="data_file"><strong>File:</strong></label>
+ <input class="file" type="file" name="data_file" accept=".json"><br>
+ <h2>What to import:</h2>
+ <input type="checkbox" name="guestbook__entries" checked>
+ <label for="guestbook__entries">Guestbook Entries</label><br>
+ <input type="checkbox" name="guestbook__bans" checked>
+ <label for="guestbook__bans">Guestbook Bans</label><br>
+ <input type="checkbox" name="guestbook__entries" checked>
+ <label for="bookmark__categories">Bookmark Categories</label><br>
+ <input type="checkbox" name="guestbook__entries" checked>
+ <label for="bookmark_sites">Bookmark Sites</label><br>
+ <button type="submit">Import</button>
+ </form>
+</x-layout>
diff --git a/resources/views/bookmarks.blade.php b/resources/views/bookmarks.blade.php
new file mode 100644
index 0000000..9cf6d77
--- /dev/null
+++ b/resources/views/bookmarks.blade.php
@@ -0,0 +1,18 @@
+<x-layout>
+ <x-slot:title>Bookmarks</x-slot:title>
+ @foreach($categories as $category)
+ <table class="info-table" role="presentation">
+ <caption>
+ <h2>{{ $category->name }}</h2>
+ <hr>
+ </caption>
+ <tbody>
+ @foreach($category->sites as $site)
+ <tr>
+ <td><a href="{{ $site->url }}">{{ $site->name }}</a> - {{ $site->description }}</td>
+ </tr>
+ @endforeach
+ </tbody>
+ </table>
+ @endforeach
+</x-layout>
diff --git a/resources/views/pages/calculators.blade.php b/resources/views/calculators.blade.php
index 5d629ed..5d629ed 100644
--- a/resources/views/pages/calculators.blade.php
+++ b/resources/views/calculators.blade.php
diff --git a/resources/views/components/current-track.blade.php b/resources/views/components/current-track.blade.php
new file mode 100644
index 0000000..d42ad3b
--- /dev/null
+++ b/resources/views/components/current-track.blade.php
@@ -0,0 +1,4 @@
+<div class="info-table current-track">
+ <h2>Last/Current Track:</h2>
+ <a href="{{ $track["url"] }}">{{ $track["title"] }} • {{ $track["artist"] }}</a><br>
+</div>
diff --git a/resources/views/components/layout.blade.php b/resources/views/components/layout.blade.php
new file mode 100644
index 0000000..2f79318
--- /dev/null
+++ b/resources/views/components/layout.blade.php
@@ -0,0 +1,113 @@
+@php // Get colorscheme from cookie and apply immediately
+ $colorscheme = request()->cookie('colorscheme', 'catppuccin-macchiato');
+@endphp
+<!DOCTYPE html>
+<html lang="en">
+<head>
+ <!-- Global -->
+ <meta charset="utf-8">
+ <meta property="og:type" content="website">
+ <meta name="viewport" content="width=device-width, initial-scale=1.0">
+ <meta name="theme-color" content="#333333">
+ <link rel="stylesheet" href="{{ asset("/css/colorschemes/$colorscheme.css") }}" id="css-colorscheme"/>
+ <link rel="stylesheet" href="{{ asset('/css/master.css') }}"/>
+ <link rel="icon" type="image/png" href="{{ asset('/favicon-32x32.png') }}" sizes="32x32"/>
+ <link rel="icon" type="image/png" href="{{ asset('/favicon-16x16.png') }}" sizes="16x16"/>
+ <script src="{{ asset('/js/schemeSwap.js') }}"></script>
+ {!! (intval(date('n')) == 12) ? '<script src="/js/christmas/snow.js"></script>' : '' !!}
+
+ <!-- Page-specific -->
+ <title>{{ $title ?? 'Unknown' }} - diskfloppy.me</title>
+ <meta property="og:title" content="diskfloppy.me | {{ $title }}">
+ <meta property="og:image" content="/favicon-128x128.png">
+</head>
+<body onload="setSchemeSelector()">
+<div class="page">
+ <div id="header" class="header">
+ @if (auth()->check())
+ <div class="banner red-banner">
+ <div>
+ <a href="/admin/guestbook">Guestbook</a>&nbsp;|
+ <a href="/admin/bookmarks">Bookmarks</a> |
+ <a href="/admin/import">Import</a>
+ </div>
+ <div><strong>Logged in as:</strong> {{ auth()->user()->name }} (<a href="/logout">logout</a>)</div>
+ </div>
+ @endif
+ <x-navbar title="{{ $title }}"/>
+ <hr>
+ </div> <!-- header -->
+ <div id="content" class="content" role="main">
+ {{ $slot }}
+ </div> <!-- content -->
+ <div id="footer" class="footer">
+ <hr>
+ <div class="footer" role="contentinfo">
+ <a href="https://dimden.dev/" class="button">
+ <img src="https://dimden.dev/services/images/88x31.gif" width="88" height="31"
+ class="pixel" alt="dimden.dev">
+ </a>&nbsp;
+ <a href="https://www.linux.org/" class="button">
+ <img src="{{ URL::asset('images/buttons/linuxnow.gif') }}" width="88"
+ class="pixel" height="31" alt="Linux NOW!">
+ </a>&nbsp;
+ <a href="https://www.vim.org/" class="button">
+ <img src="{{ URL::asset('images/buttons/vim.gif') }}" width="88" height="31"
+ class="pixel" alt="vim">
+ </a>&nbsp;
+ <a href="https://wave.webaim.org/" class="button">
+ <img src="{{ URL::asset('images/buttons/evaluatedWAVE.png') }}" width="88" height="31"
+ class="pixel" alt="Evaluated to be accessible!">
+ </a>&nbsp;
+ <a href="https://jigsaw.w3.org/css-validator/check/referer" class="button">
+ <img src="{{ URL::asset('images/buttons/vcss-blue.gif') }}" width="88" height="31"
+ class="pixel" alt="Valid CSS!">
+ </a>&nbsp;
+ <a href="https://wiby.me/" class="button">
+ <img src="{{ URL::asset('images/buttons/wiby.gif') }}" width="88" height="31"
+ class="pixel" alt="Wiby - Search Engine for the Classic Web">
+ </a><br>
+ This site is best viewed at 1024x768 with 16-bit color or better<br>
+ &copy; floppydisk 2021-{{ date('Y') }}, v{{ config('app.version') }} <a
+ href="https://github.com/floppydisk05/diskfloppy.me">Source</a>,
+ Served by {{ gethostname() }}<br>
+ <label for="scheme-selector">Color Scheme:</label>
+ <select onchange="swapScheme(this.value)" id="scheme-selector">
+ <optgroup label="Misc">
+ <option value="c64">C64</option>
+ </optgroup>
+ <optgroup label="Light">
+ <option value="catppuccin-latte">Catppuccin Latte</option>
+ <option value="gruvbox">Gruvbox</option>
+ <option value="man-page">Man Page</option>
+ <option value="papercolor-light">Papercolor Light</option>
+ <option value="rose-pine-dawn">Rosé Pine Dawn</option>
+ <option value="solarized-light">Solarized Light</option>
+ <option value="terminal-basic">Terminal Basic</option>
+ </optgroup>
+ <optgroup label="Dark">
+ <option value="catppuccin-frappe">Catppuccin Frappé</option>
+ <option value="catppuccin-macchiato" selected="selected">Catppuccin Macchiato</option>
+ <option value="catppuccin-mocha">Catppuccin Mocha</option>
+ <option value="gruvbox-dark">Gruvbox Dark</option>
+ <option value="gruvbox-material">Gruvbox Material</option>
+ <option value="maia">Maia</option>
+ <option value="mono-amber">Mono Amber</option>
+ <option value="mono-cyan">Mono Cyan</option>
+ <option value="mono-green">Mono Green</option>
+ <option value="mono-red">Mono Red</option>
+ <option value="mono-white">Mono White</option>
+ <option value="mono-yellow">Mono Yellow</option>
+ <option value="papercolor-dark">Papercolor Dark</option>
+ <option value="rose-pine">Rosé Pine</option>
+ <option value="rose-pine-moon">Rose Pine Moon</option>
+ <option value="shel">Shel</option>
+ <option value="slate">Slate</option>
+ <option value="solarized-dark">Solarized Dark</option>
+ </optgroup>
+ </select><br>
+ </div>
+ </div> <!-- footer -->
+</div> <!-- page -->
+</body>
+</html>
diff --git a/resources/views/components/minimal-error.blade.php b/resources/views/components/minimal-error.blade.php
new file mode 100644
index 0000000..3be5511
--- /dev/null
+++ b/resources/views/components/minimal-error.blade.php
@@ -0,0 +1,28 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<html lang="en">
+<head>
+ <title>{{ $title ?? '' }}</title>
+ <link rel="stylesheet" href="{{ URL::asset ('css/minimal.css') }}"/>
+</head>
+
+<body>
+ <h1>Error {{ $code }} | <strong>{{ $message }}</strong></h1>
+ <hr align="left">
+ <p>Here, have a cat...</p>
+ <img src="https://http.cat/{{ $code }}" width="500"><br><br>
+ <p>If you believe this is a server error, contact the <a href="mailto:webmaster@diskfloppy.me">webmaster</a></p>
+ <br>
+ <h4>Diagnostic Info</h4>
+ <table><tr><td>
+ <code>
+ Server: &nbsp;{{ gethostname() }}<br>
+ Your IP: {{ Request::ip() }}<br>
+ Root: &nbsp;&nbsp;&nbsp;{!! url('') !!}<br>
+ Path: &nbsp;&nbsp;&nbsp;@if(Request::path() == "/")/@else/{{ Request::path() }}/@endif<br>
+ Epoch: &nbsp;&nbsp;{{ now()->timestamp }}<br>
+ Agent: &nbsp;&nbsp;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>&copy; floppydisk 2021-2024</p>
+</body>
+</html>
diff --git a/resources/views/components/minimal.blade.php b/resources/views/components/minimal.blade.php
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/resources/views/components/minimal.blade.php
diff --git a/resources/views/components/navbar.blade.php b/resources/views/components/navbar.blade.php
new file mode 100644
index 0000000..80cd2b0
--- /dev/null
+++ b/resources/views/components/navbar.blade.php
@@ -0,0 +1,18 @@
+<nav>
+ <h1>diskfloppy.me | <strong>{{ $title }}</strong></h1>
+ <div class="nav-wrapper">
+ <div>
+ <a href="/" title="Home"><img class="pixel" src="/images/icons/nav/home2.png" alt="Home" width="32" height="32"></a>
+ <a href="//git.diskfloppy.me/" title="cgit"><img class="pixel" src="/images/icons/nav/repo.png" alt="cgit" width="32" height="32"></a>
+ <a href="/pub/" title="Public Files"><img class="pixel" src="/images/icons/nav/pubfiles.png" alt="Public Files" width="32" height="32"></a>
+ <a href="/computers/" title="Computers"><img class="pixel" src="/images/icons/nav/computers.png" alt="Computers" width="32" height="32"></a>
+ <a href="/bookmarks/" title="Bookmarks"><img class="pixel" src="/images/icons/nav/bookmarks.png" alt="Bookmarks" width="32" height="32"></a>
+ <a href="/guestbook/" title="Guestbook"><img class="pixel" src="/images/icons/nav/guestbook.png" alt="Guestbook" width="32" height="32"></a>
+ <a href="//weather.diskfloppy.me/" title="Weather"><img class="pixel" src="/images/icons/nav/weather.png" alt="Weather" width="32" height="32"></a>
+ <a href="/music/" title="Music"><img class="pixel" src="/images/icons/nav/music.png" alt="Music" width="32" height="32"></a>&nbsp;&nbsp;
+ </div>
+ <div>
+ <a href="/login/" title="Admin Login"><img class="pixel" src="/images/icons/nav/admin.png" alt="Admin Login" width="32" height="32"></a>&nbsp;&nbsp;
+ </div>
+ </div>
+</nav>
diff --git a/resources/views/components/top-tracks.blade.php b/resources/views/components/top-tracks.blade.php
new file mode 100644
index 0000000..a8c94f2
--- /dev/null
+++ b/resources/views/components/top-tracks.blade.php
@@ -0,0 +1,16 @@
+<table class="music-top10">
+ <caption>
+ <h2 style="margin-bottom: 5px">Top 10 Tracks (Last 30 days):</h2>
+ </caption>
+ <tr>
+ <th><b>#</b></th>
+ <th><b>Track</b></th>
+ <th><b>Artist</b></th>
+ <th><b>Plays</b></th>
+ </tr>
+ @php($count = 0)
+ @foreach ($tracks as $track)
+ @php($count++)
+ <x-track :track="$track" :count="$count"/>
+ @endforeach
+</table>
diff --git a/resources/views/components/track.blade.php b/resources/views/components/track.blade.php
new file mode 100644
index 0000000..b176e95
--- /dev/null
+++ b/resources/views/components/track.blade.php
@@ -0,0 +1,6 @@
+<tr>
+ <td>{{ $count }}</td>
+ <td><a href="{{ $track["url"] }}">{{ $track["title"] }}</a></td>
+ <td>{{ $track["artist"] }}</td>
+ <td>{{ $track["plays"] }}</td>
+</tr>
diff --git a/resources/views/computers.blade.php b/resources/views/computers.blade.php
new file mode 100644
index 0000000..062eee9
--- /dev/null
+++ b/resources/views/computers.blade.php
@@ -0,0 +1,187 @@
+@extends('layouts.default')
+@section('title', 'Computers')
+@section('description', 'Computers I own or have owned.')
+@php
+// TODO: AMD whitebox, 745, D531, 1525, server, vaio, qosmio, packard bell
+@endphp
+@section('content')
+ <table class="computers">
+ <tr>
+ <th>PICTURES</th>
+ <th>SPECS &amp; DESCRIPTION</th>
+ </tr>
+ <tr>
+ <td>Random Whitebox</td>
+ <td>
+ <span class="section-title">Quick Specs</span>
+ <ul>
+ <li>486DX2 (50MHz)</li>
+ <li>16MB RAM</li>
+ <li>280MB HDD</li>
+ <li>Windows NT 3.51</li>
+ </ul>
+ <p class="description">
+ Had been monitoring the ventilation system in a school since the late 1990s,
+ only stopped because the power supply internally exploded. Replaced the PSU with
+ a standard ATX PSU and an ATX to AT adaptor and it sprung back to life.
+ Motherboard is a Gigabyte GA486IM with 4 PCI slots, 4 ISA slots and 2 VLB slots.
+ Has two identical ISA serial/parallel/game-port cards with one acting as the
+ HDD/FDD controller. Also has a Realtek NIC with both RJ45 and BNC. GPU is a
+ Cirrus Logic card and is astoundingly shit.
+ </p>
+ </td>
+ </tr>
+ <tr>
+ <td>2023 MacBook Pro 14"</td>
+ <td>
+ <span class="section-title">Quick Specs</span>
+ <ul>
+ <li>Apple M3 Pro</li>
+ <li>18GB RAM</li>
+ <li>500GB SSD</li>
+ <li>macOS Sonoma</li>
+ </ul>
+ </td>
+ </tr>
+ <tr>
+ <td>2018 MacBook Pro 13"</td>
+ <td>
+ <span class="section-title">Quick Specs</span>
+ <ul>
+ <li>Intel i5-8259U @ 2.3GHz</li>
+ <li>Intel Iris Plus Graphics 655</li>
+ <li>8GB RAM</li>
+ <li>250GB SSD</li>
+ <li>macOS Sonoma</li>
+ </ul>
+ <p class="description">
+ Old main computer. Really like the touch bar, absolutely hate the butterfly
+ keyboard.
+ </p>
+ </td>
+ </tr>
+ <tr>
+ <td>2012 Lenovo ThinkPad T430</td>
+ <td>
+ <span class="section-title">Quick Specs</span>
+ <ul>
+ <li>Intel Core i7</li>
+ <li>16GB RAM</li>
+ <li>Windows 7 Professional / NixOS</li>
+ </ul>
+ <p class="description">
+ One of my main computers. Has been modified to use a classic keyboard instead of
+ the stock Lenovo keyboard.
+ </p>
+ </td>
+ </tr>
+ <tr>
+ <td>2005 IBM ThinkPad X41T</td>
+ <td>
+ <span class="section-title">Quick Specs</span>
+ <ul>
+ <li>Intel Pentium M @ 1.6GHz</li>
+ <li>Mobile Intel Express Chipset Family (128MB)</li>
+ <li>1.5GB RAM</li>
+ <li>40GB HDD</li>
+ <li>Windows XP Tablet PC Edition</li>
+ </ul>
+ </td>
+ </tr>
+ <tr>
+ <td>1999 Dell OptiPlex GX1</td>
+ <td>
+ <span class="section-title">Quick Specs</span>
+ <ul>
+ <li>Intel Pentium II (Deschutes) @ 400MHz</li>
+ <li>ATI 3D Rage Pro (4MB)</li>
+ <li>639MB</li>
+ <li>40GB HDD</li>
+ <li>MS-DOS 6.22 &amp; WFW 3.10</li>
+ </ul>
+ <p class="description">
+ Cool computer that uses Slot 1 CPUs. After a lot of trial and error I managed to
+ max out the memory. Has a riser that sports 2 PCI and 2 ISA slots (one PCI and
+ ISA share the same slot).
+ </p>
+ </td>
+ </tr>
+ <tr>
+ <td>2003 IBM ThinkPad T40</td>
+ <td>
+ <span class="section-title">Quick Specs</span>
+ <ul>
+ <li>Intel Pentium M @ 1.3GHz</li>
+ <li>ATI Mobility Radeon 7500 (32MB)</li>
+ <li>1GB RAM</li>
+ <li>30GB HDD</li>
+ <li>Windows 2000 Professional</li>
+ </ul>
+ <p class="description">
+ Useful laptop thanks to its parallel port. Has the ubiquitous GPU solder issues
+ which I &quot;&quot;&quot;&quot;fixed&quot;&quot;&quot;&quot; by jamming a CF card
+ between the GPU chip and the keyboard.
+ </p>
+ </td>
+ </tr>
+ <tr>
+ <td>2010 HP Compaq Elite 8100</td>
+ <td>
+ <span class="section-title">Quick Specs</span>
+ <ul>
+ <li>Intel Core i7</li>
+ <li>16GB RAM</li>
+ <li>some SSD and an HDD</li>
+ <li>Windows Vista Ultimate (64-bit)</li>
+ </ul>
+ </td>
+ </tr>
+ <tr>
+ <td>2014 Mac mini</td>
+ <td>
+ <span class="section-title">Quick Specs</span>
+ <ul>
+ <li>Intel Core i5-4278U @ 2.6GHz</li>
+ <li>Intel Iris Graphics</li>
+ <li>8GB RAM</li>
+ <li>1TB HDD</li>
+ <li>VMware ESXi 6.7.0u3</li>
+ </ul>
+ <p class="description">
+ Was used as my VM host for a few years. Has now been superseded by an
+ actual 1U rack-mount server.
+ </p>
+ </td>
+ </tr>
+ <tr>
+ <td>1996 Fujitsu Milan</td>
+ <td>
+ <span class="section-title">Quick Specs</span>
+ <ul>
+ <li>Intel Pentium</li>
+ <li>32MB RAM</li>
+ <li>1215MB HDD</li>
+ <li>Windows 98 SE</li>
+ </ul>
+ <p class="description">
+ Was originally a family members' laptop. Unfortunately the HDD side of the
+ HDD/FDD cable ripped while I was removing the drive to clean the computer.
+ Still scouring eBay for a replacement cable (or more likely, an entire
+ parts machine).
+ </p>
+ </td>
+ </tr>
+ <tr>
+ <td>1999 Compaq Armada M300</td>
+ <td>
+ <span class="section-title">Quick Specs</span>
+ <ul>
+ <li>Intel Pentium III</li>
+ </ul>
+ <p class="description">
+ Nice little laptop. Mysteriously dead.
+ </p>
+ </td>
+ </tr>
+ </table>
+@stop
diff --git a/resources/views/errors/401.blade.php b/resources/views/errors/401.blade.php
index 5c586db..7c0d081 100644
--- a/resources/views/errors/401.blade.php
+++ b/resources/views/errors/401.blade.php
@@ -1,5 +1,4 @@
-@extends('errors::minimal')
-
-@section('title', __('Unauthorized'))
-@section('code', '401')
-@section('message', __('Unauthorized'))
+<x-minimal-error>
+ <x-slot:code>401</x-slot:code>
+ <x-slot:message>Unauthorized</x-slot:message>
+</x-minimal-error>
diff --git a/resources/views/errors/402.blade.php b/resources/views/errors/402.blade.php
index 3bc23ef..4048cba 100644
--- a/resources/views/errors/402.blade.php
+++ b/resources/views/errors/402.blade.php
@@ -1,5 +1,4 @@
-@extends('errors::minimal')
-
-@section('title', __('Payment Required'))
-@section('code', '402')
-@section('message', __('Payment Required'))
+<x-minimal-error>
+ <x-slot:code>402</x-slot:code>
+ <x-slot:message>Payment Required</x-slot:message>
+</x-minimal-error>
diff --git a/resources/views/errors/403.blade.php b/resources/views/errors/403.blade.php
index a5506f0..d661d00 100644
--- a/resources/views/errors/403.blade.php
+++ b/resources/views/errors/403.blade.php
@@ -1,5 +1,4 @@
-@extends('errors::minimal')
-
-@section('title', __('Forbidden'))
-@section('code', '403')
-@section('message', __($exception->getMessage() ?: 'Forbidden'))
+<x-minimal-error>
+ <x-slot:code>403</x-slot:code>
+ <x-slot:message>{{__($exception->getMessage() ?: 'Forbidden')}}</x-slot:message>
+</x-minimal-error>
diff --git a/resources/views/errors/404.blade.php b/resources/views/errors/404.blade.php
index ebd22b7..812ec99 100644
--- a/resources/views/errors/404.blade.php
+++ b/resources/views/errors/404.blade.php
@@ -1,27 +1,4 @@
-@extends('errors::minimal')
-@section('content')
-
-<h1>Error 404 | <strong>Page not found!</strong></h1>
-<hr align="left">
-<h2>The page <code class="addr">/{{ Request::path() }}/</code> doesn't exist! Did you mean...</h2>
-<ul>
- <li><a href="//www.diskfloppy.me/">diskfloppy.me</a></li>
- <li><a href="//git.diskfloppy.me/">git.diskfloppy.me</a></li>
- <li><a href="//weather.diskfloppy.me">weather.diskfloppy.me</a></li>
- <li><a href="//dl.diskfloppy.me/">dl.diskfloppy.me</a></li>
- <li><a href="https://status.diskfloppy.me">status.diskfloppy.me</a> (HTTPS Only)</li>
- <li><a href="gopher://diskfloppy.me">gopher://diskfloppy.me</a></li>
-</ul>
-<p>Still haven't found what you were looking for or believe this is a server error? Contact the <a href="mailto:webmaster@diskfloppy.me">webmaster</a>!</p>
-<br>
-<h4>Diagnostic Info</h4>
-<table><tr><td>
- <code>
- Server: &nbsp;{{ gethostname() }}<br>
- Your IP: {{ Request::ip() }}<br>
- Epoch: &nbsp;&nbsp;{{ now()->timestamp }}<br>
- Agent: &nbsp;&nbsp;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>&copy; floppydisk 2021-2024</p>
-@endsection
+<x-minimal-error>
+ <x-slot:code>404</x-slot:code>
+ <x-slot:message>Page not found!</x-slot:message>
+</x-minimal-error>
diff --git a/resources/views/errors/418.blade.php b/resources/views/errors/418.blade.php
index 412ea92..7ced586 100644
--- a/resources/views/errors/418.blade.php
+++ b/resources/views/errors/418.blade.php
@@ -1,5 +1,4 @@
-@extends('errors::minimal')
-
-@section('title', __('I\'m a teapot'))
-@section('code', '418')
-@section('message', __('I\'m a teapot'))
+<x-minimal-error>
+ <x-slot:code>418</x-slot:code>
+ <x-slot:message>I'm a teapot</x-slot:message>
+</x-minimal-error>
diff --git a/resources/views/errors/419.blade.php b/resources/views/errors/419.blade.php
index c09216e..7008bd8 100644
--- a/resources/views/errors/419.blade.php
+++ b/resources/views/errors/419.blade.php
@@ -1,5 +1,4 @@
-@extends('errors::minimal')
-
-@section('title', __('Page Expired'))
-@section('code', '419')
-@section('message', __('Page Expired'))
+<x-minimal-error>
+ <x-slot:code>419</x-slot:code>
+ <x-slot:message>Page Expired</x-slot:message>
+</x-minimal-error>
diff --git a/resources/views/errors/429.blade.php b/resources/views/errors/429.blade.php
index f01b07b..9ff195b 100644
--- a/resources/views/errors/429.blade.php
+++ b/resources/views/errors/429.blade.php
@@ -1,5 +1,4 @@
-@extends('errors::minimal')
-
-@section('title', __('Too Many Requests'))
-@section('code', '429')
-@section('message', __('Too Many Requests'))
+<x-minimal-error>
+ <x-slot:code>429</x-slot:code>
+ <x-slot:message>Too Many Requests</x-slot:message>
+</x-minimal-error>
diff --git a/resources/views/errors/500.blade.php b/resources/views/errors/500.blade.php
index d9e95d9..d2c28c5 100644
--- a/resources/views/errors/500.blade.php
+++ b/resources/views/errors/500.blade.php
@@ -1,5 +1,4 @@
-@extends('errors::minimal')
-
-@section('title', __('Server Error'))
-@section('code', '500')
-@section('message', __('Server Error'))
+<x-minimal-error>
+ <x-slot:code>500</x-slot:code>
+ <x-slot:message>Server Error</x-slot:message>
+</x-minimal-error>
diff --git a/resources/views/errors/503.blade.php b/resources/views/errors/503.blade.php
index c5a9dde..708c4d9 100644
--- a/resources/views/errors/503.blade.php
+++ b/resources/views/errors/503.blade.php
@@ -1,5 +1,4 @@
-@extends('errors::minimal')
-
-@section('title', __('Service Unavailable'))
-@section('code', '503')
-@section('message', __('Service Unavailable'))
+<x-minimal-error>
+ <x-slot:code>503</x-slot:code>
+ <x-slot:message>Service Unavailable</x-slot:message>
+</x-minimal-error>
diff --git a/resources/views/errors/generic-error.blade.php b/resources/views/errors/generic-error.blade.php
index 6f08ea5..0082093 100644
--- a/resources/views/errors/generic-error.blade.php
+++ b/resources/views/errors/generic-error.blade.php
@@ -1,9 +1,8 @@
-@extends('layouts.minimal')
-@section('title', 'Error 401: Unauthorized User!')
-@section('content')
+<x-minimal>
+ <x-slot:title>Error 401: Unauthorized User!</x-slot:title>
<h1>{{ $error }}</h1>
<hr>
@if(isset($description))
<p>{{ $description }}</p>
@endif
-@stop
+</x-minimal>
diff --git a/resources/views/errors/guestbook-ipban.blade.php b/resources/views/errors/guestbook-ipban.blade.php
index 386d22a..5072e35 100644
--- a/resources/views/errors/guestbook-ipban.blade.php
+++ b/resources/views/errors/guestbook-ipban.blade.php
@@ -1,6 +1,5 @@
-@extends('layouts.minimal')
-@section('title', 'Error 403: IP Blocked!')
-@section('content')
+<x-minimal>
+ <x-slot:title>Error 403: IP Blocked!</x-slot:title>
<h1>Error 403: IP Blocked!</h1>
<hr>
<p>Your IP has been banned from submitting to the guestbook.</p>
@@ -9,4 +8,4 @@
@endif
<br>
Click <a href="/guestbook">here</a> to go back to the guestbook.
-@stop
+</x-minimal>
diff --git a/resources/views/errors/guestbook-ratelimit.blade.php b/resources/views/errors/guestbook-ratelimit.blade.php
index 7fecd97..cb24d9e 100644
--- a/resources/views/errors/guestbook-ratelimit.blade.php
+++ b/resources/views/errors/guestbook-ratelimit.blade.php
@@ -1,10 +1,9 @@
-@extends('layouts.minimal')
-@section('title', 'Error 429: Overclocking Detected!')
-@section('content')
+<x-minimal>
+ <x-slot:title>Error 429: Overclocking Detected!</x-slot:title>
<h1>Error 429: Overclocking Detected!</h1>
<hr>
<p>Whoa there! Your submissions are going at warp speed.</p>
<p>Remember you can only submit an entry <u>once every hour</u>!</p>
<br>
Click <a href="/guestbook">here</a> to go back to the guestbook.
-@stop
+</x-minimal>
diff --git a/resources/views/errors/layout.blade.php b/resources/views/errors/layout.blade.php
deleted file mode 100644
index 019c2cd..0000000
--- a/resources/views/errors/layout.blade.php
+++ /dev/null
@@ -1,53 +0,0 @@
-<!DOCTYPE html>
-<html lang="en">
- <head>
- <meta charset="utf-8">
- <meta name="viewport" content="width=device-width, initial-scale=1">
-
- <title>@yield('title')</title>
-
- <!-- Styles -->
- <style>
- html, body {
- background-color: #fff;
- color: #636b6f;
- font-family: ui-sans-serif, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, "Noto Sans", sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji";
- font-weight: 100;
- height: 100vh;
- margin: 0;
- }
-
- .full-height {
- height: 100vh;
- }
-
- .flex-center {
- align-items: center;
- display: flex;
- justify-content: center;
- }
-
- .position-ref {
- position: relative;
- }
-
- .content {
- text-align: center;
- }
-
- .title {
- font-size: 36px;
- padding: 20px;
- }
- </style>
- </head>
- <body>
- <div class="flex-center position-ref full-height">
- <div class="content">
- <div class="title">
- @yield('message')
- </div>
- </div>
- </div>
- </body>
-</html>
diff --git a/resources/views/errors/minimal.blade.php b/resources/views/errors/minimal.blade.php
index e15c833..4ae6830 100644
--- a/resources/views/errors/minimal.blade.php
+++ b/resources/views/errors/minimal.blade.php
@@ -1,21 +1,3 @@
-@extends('layouts.minimal')
-@section('content')
- <h1>Error @yield('code') | <strong>@yield('message')</strong></h1>
- <hr align="left">
- <p>Here, have a cat...</p>
- <img src="https://http.cat/@yield('code')" width="500"><br><br>
- <p>If you believe this is a server error, contact the <a href="mailto:webmaster@diskfloppy.me">webmaster</a></p>
- <br>
- <h4>Diagnostic Info</h4>
- <table><tr><td>
- <code>
- Server: &nbsp;{{ gethostname() }}<br>
- Your IP: {{ Request::ip() }}<br>
- Root: &nbsp;&nbsp;&nbsp;{!! url('') !!}<br>
- Path: &nbsp;&nbsp;&nbsp;/{{ Request::path() }}/<br>
- Epoch: &nbsp;&nbsp;{{ now()->timestamp }}<br>
- Agent: &nbsp;&nbsp;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>&copy; floppydisk 2021-2024</p>
-@endsection
+<x-minimal>
+
+</x-minimal>
diff --git a/resources/views/pages/guestbook.blade.php b/resources/views/guestbook.blade.php
index a2c39fb..bed4211 100644
--- a/resources/views/pages/guestbook.blade.php
+++ b/resources/views/guestbook.blade.php
@@ -1,27 +1,12 @@
-@extends('layouts.default')
-@section('title', 'Guestbook')
-@section('content')
- @php
- use UAParser\Parser;
- $parser = Parser::create();
- $db_alive = true;
- try {
- DB::connection()->getPdo();
- } catch (Exception $e) {
- $db_alive = false;
- }
- @endphp
- @if (!$db_alive)
- @include('components.errors.db-error')
- @else
- <br>
+<x-layout>
+ <x-slot:title>Guestbook</x-slot:title>
<table class="gb-entry-form-container" role="presentation">
<tr>
<td>
<form method="POST" action="/guestbook">
@csrf
<x-honeypot/>
- <table class="gb-entry-form" role="presentation">
+ <table class="form" role="presentation">
<tr>
<td>
<label for="name"><strong>Name:</strong></label>
@@ -66,13 +51,6 @@
<hr>
- @php
- $entries = DB::select('
- SELECT name, timestamp, message, agent
- FROM guestbook__entries
- ORDER BY id DESC
- ');
- @endphp
<h2>Entries <small>({{ count($entries) }} total)</small></h2>
@foreach ($entries as $entry)
@php
@@ -82,10 +60,10 @@
<tr>
<td>
Submitted by <strong>{{ $entry->name }}</strong>
- on <strong>{{ gmdate('Y-m-d', $entry->timestamp) }}</strong>
- at <strong>{{ gmdate('h:i:s A (e)', $entry->timestamp) }}</strong>
+ on <strong>{{ $entry->created_at->format('Y-m-d') }}</strong>
+ at <strong>{{ $entry->created_at->format('h:i:s A (e)') }}</strong>
<hr>
- {{ $entry->message }}
+ <span class="guestbook-message">{{ $entry->message }}</span>
<hr>
@if($entry->agent === "Agent Unavailable")
<address>Agent unavailable</address>
@@ -98,5 +76,4 @@
</table>
<br>
@endforeach
- @endif
-@stop
+</x-layout>
diff --git a/resources/views/home.blade.php b/resources/views/home.blade.php
new file mode 100644
index 0000000..bd5b8d3
--- /dev/null
+++ b/resources/views/home.blade.php
@@ -0,0 +1,45 @@
+<x-layout>
+ <x-slot:title>Home</x-slot:title>
+ <p>Hi! This is my personal homepage on the <strong>W</strong>orld <strong>W</strong>ide <strong>W</strong>eb.</p>
+
+ <div class="info-section">
+ <h2>QuickFacts&trade;</h2>
+ <hr>
+ <ul>
+ <li>18 y/o, he/him, British</li>
+ <li>Theatre Technician, &quot;Web Developer&quot; and NixOS User</li>
+ <li>Loves ETC desks, prefers Generics to LEDs for some reason</li>
+ <li>Has a crippling Soundcraft addiction</li>
+ <li>Spends way too much time on his computer</li>
+ <li>Favorite games: <a href="https://steamcommunity.com/id/floppydisk05/recommended/420530/">OneShot</a>, Minecraft, Stardew Valley, N++ and Starbound</li>
+ <li><a href="http://wxqa.com/">CWOP</a> member</li>
+ </ul>
+ </div>
+ <div class="info-section">
+ <h2>Interests</h2>
+ <hr>
+ <ul>
+ <li><strong>Tech Theatre</strong> - Lighting, Stage Management, etc. (<a href="https://www.controlbooth.com/members/floppydisk.28673/">ControlBooth</a>)</li>
+ <li><strong>Programming</strong> - HTML, CSS, JavaScript, C#, Java, PHP, Ruby, Python (<a href="https://github.com/floppydisk05">GitHub</a>)</li>
+ <li><strong>Photography</strong> - <a href="https://www.flickr.com/photos/floppydisk/">Flickr</a></li>
+ <li><strong>Gaming</strong> - <a href="https://steamcommunity.com/id/floppydisk05/">Steam Profile</a></li>
+ </ul>
+ </div>
+ <div class="info-section">
+ <h2>Things they never said</h2>
+ <hr>
+ <p>
+ <script type="text/javascript" src="{{ asset("/js/neverSaid.js") }}"></script>
+ <noscript>Oops! You need JavaScript enabled to view this content.</noscript>
+ </p>
+ </div>
+ <div class="info-section">
+ <h2>Contact &amp; social</h2>
+ <hr>
+ <p>
+ <strong>E-mail:</strong> <a href="mailto:contact@diskfloppy.me">contact@diskfloppy.me</a><br>
+ <strong>Mastodon:</strong> <a rel="me" href="https://c.im/@floppydisk">@floppydisk@c.im</a><br>
+ <strong>Matrix:</strong> <a href="https://matrix.to/#/@floppydisk:arcticfoxes.net">@floppydisk:arcticfoxes.net</a>
+ </p>
+ </div>
+</x-layout>
diff --git a/resources/views/includes/admin/header.blade.php b/resources/views/includes/admin/header.blade.php
deleted file mode 100644
index edb2fd7..0000000
--- a/resources/views/includes/admin/header.blade.php
+++ /dev/null
@@ -1,12 +0,0 @@
- <nav>
- <div>
- <a href="/">public home</a> |
- <a href="/admin">admin home</a> |
- <a href="/admin/guestbook">guestbook</a>
- @if (auth()->check())
- | ({{ auth()->user()->name }}) <a href="/logout">logout</a>
- @else
- | <a href="/login">login</a>
- @endif
- </div>
- </nav>
diff --git a/resources/views/includes/footer.blade.php b/resources/views/includes/footer.blade.php
index b606564..3494f6e 100644
--- a/resources/views/includes/footer.blade.php
+++ b/resources/views/includes/footer.blade.php
@@ -25,7 +25,7 @@
class="pixel" alt="Wiby - Search Engine for the Classic Web">
</a><br>
This site is best viewed at 1024x768 with 16-bit color or better<br>
- &copy; floppydisk 2021-{{ date('Y') }}, v{{ config('app.version') }}, <a
+ &copy; floppydisk 2021-{{ date('Y') }}, v{{ config('app.version') }}@if(env('DEVEL'))-dev, @else, @endif<a
href="https://github.com/floppydisk05/diskfloppy.me">Source</a>,
Served by {{ gethostname() }}<br>
<label for="scheme-selector">Color Scheme:</label>
diff --git a/resources/views/music.blade.php b/resources/views/music.blade.php
new file mode 100644
index 0000000..0fd5d84
--- /dev/null
+++ b/resources/views/music.blade.php
@@ -0,0 +1,6 @@
+<x-layout>
+ <x-slot:title>Music</x-slot:title>
+ <x-current-track :track="$current_track"/>
+ <hr>
+ <x-top-tracks :tracks="$top_tracks"/>
+</x-layout>
diff --git a/resources/views/pages/admin/guestbook-del-confirm.blade.php b/resources/views/pages/admin/guestbook-del-confirm.blade.php
deleted file mode 100644
index de920e0..0000000
--- a/resources/views/pages/admin/guestbook-del-confirm.blade.php
+++ /dev/null
@@ -1,33 +0,0 @@
-@extends('layouts.minimal')
-@section('title', 'Delete confirm')
-@section('content')
- <h1>Delete Confirmation</h1>
- <hr>
- <p>Are you sure you want to delete this entry?</p>
-
- <h3>Entry Details:</h3>
- <table class="gb-entry-details">
- <tr>
- <td><b>ID:</b></td>
- <td>{{ $entry->id }}</td>
- </tr>
- <tr>
- <td><b>Name:</b></td>
- <td>{{ $entry->name }}</td>
- </tr>
- <tr>
- <td><b>Date:</b></td>
- <td>{{ gmdate("H:i:s - Y-m-d", $entry->timestamp) }}</td>
- </tr>
- <tr>
- <td><b>Message:</b></td>
- <td>{{ $entry->message }}</td>
- </tr>
- </table>
-
- <form action="/admin/guestbook/delete" method="POST">
- @csrf
- <input type="hidden" name="id" value="{{ $entry->id }}">
- <button type="submit">Confirm Delete</button>
- </form>
-@stop
diff --git a/resources/views/pages/admin/guestbook.blade.php b/resources/views/pages/admin/guestbook.blade.php
deleted file mode 100644
index 85460cc..0000000
--- a/resources/views/pages/admin/guestbook.blade.php
+++ /dev/null
@@ -1,32 +0,0 @@
-@extends('layouts.default-admin')
-@section('title', 'Guestbook')
-@section('content')
- @php
- $entries = DB::select('
- SELECT id, name, timestamp, message, ip_address
- FROM guestbook__entries
- ORDER BY id DESC
- ');
- @endphp
- <h1>Entries <small>({{ count($entries) }} total)</small></h1>
- @foreach ($entries as $entry)
- <table class="gb-admin">
- <tr>
- <td>
- Name:&nbsp;{{ $entry->name }}<br>
- IP:&nbsp;&nbsp;&nbsp;{{ $entry->ip_address }}<br>
- Date:&nbsp;{{ gmdate("H:i:s - Y-m-d", $entry->timestamp) }}
- </td>
- <td class="gb-del">
- <a href="/admin/guestbook/delete?id={{ $entry->id }}">del</a>
- </td>
- </tr>
- <tr>
- <td class="gb-message">
- <br>
- {{ htmlspecialchars($entry->message) }}
- </td>
- </tr></table>
- @endforeach
-@stop
-
diff --git a/resources/views/pages/admin/index.blade.php b/resources/views/pages/admin/index.blade.php
deleted file mode 100644
index fd34313..0000000
--- a/resources/views/pages/admin/index.blade.php
+++ /dev/null
@@ -1,9 +0,0 @@
-@extends('layouts.default-admin')
-@section('title', 'Page Title')
-@section('description', 'Page description goes here')
-@php
- $user = auth()->user();
-@endphp
-@section('content')
- <p>You are logged in as {{ $user->name }} ({{ $user->email }})</p>
-@stop
diff --git a/resources/views/pages/bookmarks.blade.php b/resources/views/pages/bookmarks.blade.php
deleted file mode 100644
index 55cc801..0000000
--- a/resources/views/pages/bookmarks.blade.php
+++ /dev/null
@@ -1,52 +0,0 @@
-@extends('layouts.default')
-@section('title', 'Bookmarks')
-@section('description', 'This is the personal homepage of floppydisk.')
-@section('content')
- @php
- $db_alive = true;
- try {
- DB::connection()->getPdo();
- } catch (Exception $e) {
- $db_alive = false;
- }
- @endphp
- @if (!$db_alive)
- @include('components.errors.db-error')
- @else
- @php
- $categories = DB::select('
- SELECT id, name
- FROM bookmark__categories
- ORDER BY priority ASC
- ');
- @endphp
-
- @foreach ($categories as $category)
- <table class="info-table" role="presentation">
-
- <caption>
- <h2>{{ $category->name }}</h2>
- <hr>
- </caption>
-
- @php
- $sites = DB::select(
- '
- SELECT name, url, description
- FROM bookmark__sites
- WHERE category_id = ? ORDER BY priority ASC
- ',
- [$category->id],
- );
- @endphp
- @foreach ($sites as $site)
- <tr>
- <td><a href="{{ $site->url }}">{{ $site->name }}</a>
- - {{ $site->description }}</td>
- </tr>
- @endforeach
- </table>
- <br>
- @endforeach
- @endif
-@stop
diff --git a/resources/views/pages/bot.blade.php b/resources/views/pages/bot.blade.php
deleted file mode 100644
index b9475fc..0000000
--- a/resources/views/pages/bot.blade.php
+++ /dev/null
@@ -1,7 +0,0 @@
-@extends('layouts.default')
-@section('title', 'Discord Bot')
-@section('description', '')
-@section('content')
- <p>The diskfloppy.me Discord bot blah blah blah blah blah</p>
- <p>Maybe I'll finish this page later idk</p>
-@stop
diff --git a/resources/views/pages/computers.blade.php b/resources/views/pages/computers.blade.php
deleted file mode 100644
index a7cec24..0000000
--- a/resources/views/pages/computers.blade.php
+++ /dev/null
@@ -1,442 +0,0 @@
-@extends('layouts.default')
-@section('title', 'Computers')
-@section('description', 'Computers I own or have owned.')
-@section('content')
- <table class="computers">
- <tr>
- <th>PICTURES</th>
- <th>SPECS &amp; DESCRIPTION</th>
- </tr>
- <tr>
- <td>2023 MacBook Pro 14"</td>
- <td>
- <section-title>Quick Specs</section-title>
- <ul>
- <li>Apple M3 Pro</li>
- <li>18GB RAM</li>
- <li>500GB SSD</li>
- <li>macOS Sonoma</li>
- </ul>
- <p class="description">WHAT</p>
- </td>
- </tr>
- <tr>
- <td>2018 MacBook Pro 13"</td>
- <td>
- <section-title>Quick Specs</section-title>
- <ul>
- <li>Intel i5-8259U @ 2.3GHz</li>
- <li>Intel Iris Plus Graphics 655</li>
- <li>8GB RAM</li>
- <li>250GB SSD</li>
- <li>macOS Sonoma</li>
- </ul>
- </td>
- </tr>
- <tr>
- <td>2012 Lenovo ThinkPad T430</td>
- <td>
- <section-title>Quick Specs</section-title>
- <ul>
- <li>Intel Core i7</li>
- <li>16GB RAM</li>
- <li>Windows 7 Professional</li>
- </ul>
- </td>
- </tr>
- <tr>
- <td>2005 IBM ThinkPad X41T</td>
- <td>
- <section-title>Quick Specs</section-title>
- <ul>
- <li>Intel Pentium M @ 1.6GHz</li>
- <li>Mobile Intel Express Chipset Family (128MB)</li>
- <li>1.5GB RAM</li>
- <li>40GB HDD</li>
- <li>Windows XP Tablet PC Edition</li>
- </ul>
- </td>
- </tr>
- <tr>
- <td>1999 Dell OptiPlex GX1</td>
- <td>
- <section-title>Quick Specs</section-title>
- <ul>
- <li>Intel Pentium II (Deschutes) @ 400MHz</li>
- <li>ATI 3D Rage Pro (4MB)</li>
- <li>639MB</li>
- <li>40GB HDD</li>
- <li>MS-DOS 6.22 &amp; WFW 3.10</li>
- </ul>
- </td>
- </tr>
- <tr>
- <td>2003 IBM ThinkPad T40</td>
- <td>
- <section-title>Quick Specs</section-title>
- <ul>
- <li>Intel Pentium M @ 1.3GHz</li>
- <li>ATI Mobility Radeon 7500 (32MB)</li>
- <li>1GB RAM</li>
- <li>30GB HDD</li>
- <li>Windows 2000 Professional</li>
- </ul>
- </td>
- </tr>
- <tr>
- <td>2010 HP Compaq Elite 8100</td>
- <td>
- <section-title>Quick Specs</section-title>
- <ul>
- <li>Intel Core i7</li>
- <li>16GB RAM</li>
- <li>some SSD and an HDD</li>
- <li>Windows Vista Ultimate (64-bit)</li>
- </ul>
- </td>
- </tr>
- <tr>
- <td>2014 Mac mini</td>
- <td>
- <section-title>Quick Specs</section-title>
- <ul>
- <li>Intel Core i5-4278U @ 2.6GHz</li>
- <li>Intel Iris Graphics</li>
- <li>8GB RAM</li>
- <li>1TB HDD</li>
- <li>VMware ESXi 6.7.0u3</li>
- </ul>
- </td>
- </tr>
- <tr>
- <td>1996 Fujitsu Milan</td>
- <td>
- <section-title>Quick Specs</section-title>
- <ul>
- <li>Intel Pentium</li>
- <li>32MB RAM</li>
- <li>1215MB HDD</li>
- <li>Windows 98 SE</li>
- </ul>
- </td>
- </tr>
- <tr>
- <td>1999 Compaq Armada M300</td>
- <td>
- <section-title>Quick Specs</section-title>
- <ul>
- <li>Intel Pentium III</li>
- </ul>
- </td>
- </tr>
- </table>
- <!--<table class="computer" role="presentation">
- <tr>
- <td colspan="2"><h2>Custom Build</h2><hr></td>
- </tr>
- <tr>
- <td>
- <table class="computer-specs">
- <tr>
- <td class="spec-title">OS:</td>
- <td class="spec">NixOS 22.11 / Windows 10 Pro</td>
- </tr>
- <tr>
- <td class="spec-title">CPU:</td>
- <td class="spec">Intel i7-6700K (8-core) @ 4.0GHz</td>
- </tr>
- <tr>
- <td class="spec-title">GPU:</td>
- <td class="spec">NVidia GTX 1060 (3GB)</td>
- </tr>
- <tr>
- <td class="spec-title">Memory:</td>
- <td class="spec">64GB</td>
- </tr>
- <tr>
- <td class="spec-title">DISK0:</td>
- <td class="spec">SanDisk SSD Plus (120GB, Win10)</td>
- </tr>
- <tr>
- <td class="spec-title">DISK1:</td>
- <td class="spec">Crucial CT500MX500SSD1 (500GB, NixOS)</td>
- </tr>
- <tr>
- <td class="spec-title">DISK2:</td>
- <td class="spec">WDC WD20EZEAZ-00GGJB0 (2TB, Data)</td>
- </tr>
- </table>
- </td>
- </tr>
- </table>
- <table class="computer" role="presentation">
- <tr>
- <td colspan="2"><h2>MacBook Pro (2018)</h2><hr></td>
- </tr>
- <tr>
- <td>
- <table class="computer-specs">
- <tr>
- <td class="spec-title">OS:</td>
- <td class="spec">macOS 12.5.1</td>
- </tr>
- <tr>
- <td class="spec-title">Display:</td>
- <td class="spec">2560x1600 (Retina)</td>
- </tr>
- <tr>
- <td class="spec-title">CPU:</td>
- <td class="spec">Intel i5-8259U (8-core) @ 2.3GHz</td>
- </tr>
- <tr>
- <td class="spec-title">GPU:</td>
- <td class="spec">Intel Iris Plus Graphics 655</td>
- </tr>
- <tr>
- <td class="spec-title">Memory:</td>
- <td class="spec">8GB</td>
- </tr>
- <tr>
- <td class="spec-title">DISK:</td>
- <td class="spec">Apple SSD AP0256M (250GB)</td>
- </tr>
- </table>
- </td>
- </tr>
- </table>
- <table class="computer" role="presentation">
- <tr>
- <td colspan="2"><h2>Lenovo ThinkPad T430 (2012)</h2><hr></td>
- </tr>
- <tr>
- <td>
- <table class="computer-specs">
- <tr>
- <td class="spec-title">OS:</td>
- <td class="spec">NixOS 22.11 / Windows 7 Ultimate</td>
- </tr>
- <tr>
- <td class="spec-title">CPU:</td>
- <td class="spec">Intel i7-3520M (4-core) @ 3.6GHz</td>
- </tr>
- <tr>
- <td class="spec-title">GPU:</td>
- <td class="spec">Intel 3rd Gen Core processor Graphics Controllertd>
- </tr>
- <tr>
- <td class="spec-title">Memory:</td>
- <td class="spec">16GB</td>
- </tr>
- <tr>
- <td class="spec-title">DISK0:</td>
- <td class="spec">Crucial CT500MX500SSD1 (500GB, NixOS)</td>
- </tr>
- <tr>
- <td class="spec-title">DISK1:</td>
- <td class="spec">Crucial CT250MX500SSD1 (250GB, Win7)</td>
- </tr>
- </table>
- </td>
- </tr>
- </table>
- <table class="computer" role="presentation">
- <tr>
- <td colspan="2"><h2>IBM ThinkPad X41 (2005)</h2><hr></td>
- </tr>
- <tr>
- <td>
- <table class="computer-specs">
- <tr>
- <td class="spec-title">OS:</td>
- <td class="spec">Windows XP Tablet PC Edition (2005, SP3)</td>
- </tr>
- <tr>
- <td class="spec-title">CPU:</td>
- <td class="spec">Intel Pentium M (single-core) @ 1.6GHz</td>
- </tr>
- <tr>
- <td class="spec-title">GPU:</td>
- <td class="spec">Mobile Intel 915GM/GMS 910GML Express Chipset Family (128MB)</td>
- </tr>
- <tr>
- <td class="spec-title">Memory:</td>
- <td class="spec">1.5GB</td>
- </tr>
- <tr>
- <td class="spec-title">DISK:</td>
- <td class="spec">Hitachi HTC426040G9AT00 (40GB)</td>
- </tr>
- </table>
- </td>
- </tr>
- </table>
- <table class="computer" role="presentation">
- <tr>
- <td colspan="2"><h2>Dell OptiPlex GX1 (400L+, 1999)</h2><hr></td>
- </tr>
- <tr>
- <td>
- <table class="computer-specs">
- <tr>
- <td class="spec-title">OS:</td>
- <td class="spec">Windows 3.10 for Workgroups (DOS 6.22)</td>
- </tr>
- <tr>
- <td class="spec-title">CPU:</td>
- <td class="spec">Intel Pentium II (Deschutes) @ 400MHz</td>
- </tr>
- <tr>
- <td class="spec-title">GPU:</td>
- <td class="spec">ATI 3D Rage Pro (4MB)</td>
- </tr>
- <tr>
- <td class="spec-title">Memory:</td>
- <td class="spec">639MB</td>
- </tr>
- <tr>
- <td class="spec-title">DISK:</td>
- <td class="spec">Unknown</td>
- </tr>
- </table>
- </td>
- </tr>
- </table>
- <table class="computer" role="presentation">
- <tr>
- <td colspan="2"><h2>IBM ThinkPad T40 (2003)</h2><hr></td>
- </tr>
- <tr>
- <td>
- <table class="computer-specs">
- <tr>
- <td class="spec-title">OS:</td>
- <td class="spec">Windows XP Pro</td>
- </tr>
- <tr>
- <td class="spec-title">CPU:</td>
- <td class="spec">Intel Pentium M (single-core) @ 1.3GHz</td>
- </tr>
- <tr>
- <td class="spec-title">GPU:</td>
- <td class="spec">ATI Mobility Radeon 7500 (32MB)</td>
- </tr>
- <tr>
- <td class="spec-title">Memory:</td>
- <td class="spec">1GB</td>
- </tr>
- <tr>
- <td class="spec-title">DISK:</td>
- <td class="spec">Fujitsu MHS2030AT (30GB)</td>
- </tr>
- </table>
- </td>
- </tr>
- </table>
- <table class="computer" role="presentation">
- <tr>
- <td colspan="2"><h2>HP Compaq Elite 8100 CMT</h2><hr></td>
- </tr>
- <tr>
- <td>
- <table class="computer-specs">
- <tr>
- <td class="spec-title">OS:</td>
- <td class="spec">Windows Vista 64-bit</td>
- </tr>
- <tr>
- <td class="spec-title">CPU:</td>
- <td class="spec">Intel Core i7</td>
- </tr>
- <tr>
- <td class="spec-title">GPU:</td>
- <td class="spec"></td>
- </tr>
- <tr>
- <td class="spec-title">Memory:</td>
- <td class="spec">16GB</td>
- </tr>
- <tr>
- <td class="spec-title">DISK0:</td>
- <td class="spec">SanDisk SSD Plus (120GB, Win10)</td>
- </tr>
- <tr>
- <td class="spec-title">DISK1:</td>
- <td class="spec">Crucial CT500MX500SSD1 (500GB, NixOS)</td>
- </tr>
- </table>
- </td>
- </tr>
- </table>
- <table class="computer" role="presentation">
- <tr>
- <td colspan="2"><h2>Mac mini (2014)</h2><hr></td>
- </tr>
- <tr>
- <td>
- <table class="computer-specs">
- <tr>
- <td class="spec-title">OS:</td>
- <td class="spec">VMware ESXi 6.7.0u3</td>
- </tr>
- <tr>
- <td class="spec-title">CPU:</td>
- <td class="spec">Intel i5-4278U (4-core) @ 2.6GHz</td>
- </tr>
- <tr>
- <td class="spec-title">GPU:</td>
- <td class="spec">Intel Iris Graphics</td>
- </tr>
- <tr>
- <td class="spec-title">Memory:</td>
- <td class="spec">8GB</td>
- </tr>
- <tr>
- <td class="spec-title">DISK:</td>
- <td class="spec">Apple HDD HTS541 (1TB)</td>
- </tr>
- </table>
- </td>
- </tr>
- </table>
- <table class="computer" role="presentation">
- <tr>
- <td colspan="2"><h2>Fujitsu Milan (1996)</h2><hr></td>
- </tr>
- <tr>
- <td>
- <table class="computer-specs">
- <tr>
- <td class="spec-title">OS:</td>
- <td class="spec">Windows 98 SE</td>
- </tr>
- <tr>
- <td class="spec-title">CPU:</td>
- <td class="spec">Intel Pentium</td>
- </tr>
- <tr>
- <td class="spec-title">Memory:</td>
- <td class="spec">32MB</td>
- </tr>
- <tr>
- <td class="spec-title">DISK:</td>
- <td class="spec">IBM DPRA-21215 (1215MB)</td>
- </tr>
- </table>
- </td>
- </tr>
- </table>-->
- <!--<table class="computer" role="presentation">
- <tr>
- <td colspan="2"><h2>Compaq Armada M300</h2><hr></td>
- </tr>
- <tr>
- <td>
- <table class="computer-specs">
- <tr>
- <td class="spec">TBD</td>
- </tr>
- </table>
- </td>
- </tr>
- </table>-->
-@stop
diff --git a/resources/views/pages/home.blade.php b/resources/views/pages/home.blade.php
deleted file mode 100644
index 01831d6..0000000
--- a/resources/views/pages/home.blade.php
+++ /dev/null
@@ -1,88 +0,0 @@
-@extends('layouts.default')
-@section('title', 'Home')
-@section('description', 'This is the personal homepage of floppydisk.')
-@section('content')
-
- <p>Hi! This is my personal homepage on the <strong>W</strong>orld <strong>W</strong>ide <strong>W</strong>eb.</p>
-
- <table class="info-table" role="presentation">
- <caption>
- <h2>QuickFacts&trade;</h2>
- <hr>
- </caption>
- <tr>
- <td>&#9670; 18 y/o, he/him, British</td>
- </tr>
- <tr>
- <td>&#9670; Theatre Technician, &quot;Web Developer&quot; and NixOS User</td>
- </tr>
- <tr>
- <td>&#9670; Loves ETC desks, prefers Generics to LEDs for some reason</td>
- </tr>
- <tr>
- <td>&#9670; Spends way too much time on his computer</td>
- </tr>
- <tr>
- <td>&#9670; Favorite games: <a href="https://steamcommunity.com/id/floppydisk05/recommended/420530/">OneShot</a>, Minecraft, Stardew Valley, N++ and Starbound</td>
- </tr>
- <tr>
- <td>&#9670; <a href="http://wxqa.com/">CWOP</a> member</td>
- </tr>
- </table>
- <br>
-
- <table class="info-table" role="presentation">
- <caption>
- <h2>Interests</h2>
- <hr>
- </caption>
- <tr>
- <td>&#9670; <b>Tech Theatre</b></td>
- <td>- Lighting, Stage Management, etc. (<a href="https://www.controlbooth.com/members/floppydisk.28673/">ControlBooth</a>)</td>
- </tr>
- <tr>
- <td>&#9670; <b>Programming</b></td>
- <td>- HTML, CSS, JavaScript, C#, Java, PHP, Ruby, Python (<a href="https://github.com/floppydisk05">GitHub</a>)</td>
- </tr>
- <tr>
- <td>&#9670; <b>Photography</b></td>
- <td>- <a href="https://www.flickr.com/photos/floppydisk/">Flickr</a></td>
- </tr>
- <tr>
- <td>&#9670; <b>Gaming</b></td>
- <td>- <a href="https://steamcommunity.com/id/floppydisk05/">Steam Profile</a></td>
- </tr>
- </table>
- <br>
-
- <table class="info-table never-said" role="presentation">
- <caption>
- <h2>Things they never said</h2>
- <hr>
- </caption>
- <tr>
- <script type="text/javascript" src="/js/neverSaid.js"></script>
- <noscript><td>Oops! You need JavaScript enabled to view this content.</td></noscript>
- </tr>
- </table>
- <br>
-
- <table class="info-table" role="presentation">
- <caption>
- <h2>Contact &amp; social</h2>
- <hr>
- </caption>
- <tr>
- <td><strong>E-mail:</strong></td>
- <td><a href="mailto:contact@diskfloppy.me">contact@diskfloppy.me</a></td>
- </tr>
- <tr>
- <td><strong>Mastodon:</strong></td>
- <td><a rel="me" href="https://c.im/@floppydisk">@floppydisk@c.im</a></td>
- </tr>
- <tr>
- <td><strong>Matrix:</strong></td>
- <td><a href="https://matrix.to/#/@floppydisk:arcticfoxes.net">@floppydisk:arcticfoxes.net</a></td>
- </tr>
- </table>
-@stop
diff --git a/resources/views/pages/music.blade.php b/resources/views/pages/music.blade.php
deleted file mode 100644
index dba0750..0000000
--- a/resources/views/pages/music.blade.php
+++ /dev/null
@@ -1,66 +0,0 @@
-@extends('layouts.default')
-@section('title', 'Music')
-@section('description', '')
-@section('content')
- @php
-
- $cfg = app('config')->get('services')['lastfm'];
- $api_root = app('config')->get('app')['api_root'];
-
- $api_alive = true;
-
- try {
- $data = file_get_contents($api_root.'/lastfm/current');
- } catch (Exception $e) {
- $api_alive = false;
- }
- @endphp
- @if (!$api_alive)
- @include('components.errors.api-error')
- @else
-
- @php
- $current_track = json_decode(file_get_contents($api_root . '/lastfm/current'));
- $top_tracks = json_decode(file_get_contents($api_root . '/lastfm/top'));
- $count = 0;
- @endphp
- <table class="info-table" role="presentation" width="100%">
- <tr>
- <td colspan="4">
- <h2>Last/Current Track:</h2>
- </td>
- </tr>
- <tr>
- <td colspan="4">
- <a href="{{ $current_track->url }}">{{ $current_track->title }} • {{ $current_track->artist }}</a><br>
- </td>
- </tr>
- </table>
- <hr>
- <table class="music-top10">
- <tr>
- <td colspan="4">
- <h2 style="margin-bottom: 5px">Top {{ $cfg['toptracks'] }} Tracks (Last 7 days)</h2>
- </td>
- </tr>
- <tr>
- <td style="text-align: right"><b>#</b></td>
- <td><b>Track</b></td>
- <td><b>Artist</b></td>
- <td><b>Plays</b></td>
- </tr>
- @foreach ($top_tracks as $track)
- @php $count++ @endphp
- @if ($count >= $cfg['toptracks']+1)
- @break
- @endif
- <tr>
- <td style="text-align: right">{{ $count }}</td>
- <td style="white-space: nowrap; text-overflow:ellipsis; overflow: hidden; max-width:1px;" width="50%"><a href="{{ $track->url }}">{{ $track->title }}</a></td>
- <td style="white-space: nowrap; text-overflow:ellipsis; overflow: hidden; max-width:1px;" width="50%">{{ $track->artist }}</td>
- <td>{{ $track->playcount }}</td>
- </tr>
- @endforeach
- </table>
- @endif
-@stop
diff --git a/resources/views/pages/projects.blade.php b/resources/views/pages/projects.blade.php
deleted file mode 100644
index aad454b..0000000
--- a/resources/views/pages/projects.blade.php
+++ /dev/null
@@ -1,16 +0,0 @@
-<?php $categories = app('config')->get('projects'); ?>
-@extends('layouts.default')
-@section('title', 'Projects')
-@section('description', 'My projects')
-@section('content')
- @foreach ($categories as $category)
- <h2>{{ $category['name']}}</h2>
- @foreach ($category['projects'] as $project)
- <div>
- <a href="{{ $project['url'] }}">{{ $project['name'] }}</a> - {{ $project['description'] }}<br>
- <b>Languages:</b> {{ implode(", ", $project['languages']) }}
- </div>
- <br>
- @endforeach
-@endforeach
-@stop
diff --git a/resources/views/pages/template.blade.php b/resources/views/pages/template.blade.php
deleted file mode 100644
index 18fe585..0000000
--- a/resources/views/pages/template.blade.php
+++ /dev/null
@@ -1,6 +0,0 @@
-@extends('layouts.default')
-@section('title', 'Page Title')
-@section('description', 'Page description goes here')
-@section('content')
-<p>page content</p>
-@stop
diff --git a/resources/views/pages/weather.blade.php b/resources/views/pages/weather.blade.php
deleted file mode 100644
index a759534..0000000
--- a/resources/views/pages/weather.blade.php
+++ /dev/null
@@ -1,61 +0,0 @@
-@extends('layouts.default')
-@section('title', 'Weather')
-@section('description', 'Data from my weather station')
-@section('content')
-@php
-$api_root = app('config')->get('app')['api_root'];
-
-function degreesToCompassDirection($degrees) {
- $cardinalDirections = [
- 'N', 'NNE', 'NE', 'ENE', 'E', 'ESE', 'SE', 'SSE',
- 'S', 'SSW', 'SW', 'WSW', 'W', 'WNW', 'NW', 'NNW', 'N'
- ];
- return $cardinalDirections[round($degrees*16/360)];
-}
-
-$api_alive = true;
-
-try {
- $data = file_get_contents($api_root.'/weather');
-} catch (Exception $e) {
- $api_alive = false;
-}
-@endphp
-@if (!$api_alive)
- @include('components.errors.api-error')
-@else
- @php
- $data = json_decode(file_get_contents($api_root.'/weather'));
- $updated = gmdate('H:i Y-m-d', $data->updated);
- $data = $data->current;
- @endphp
-<table class="info-table" role="presentation">
- <caption>
- <h2>Local Weather</h2>
- <hr>
- </caption>
- <tr>
- <td><b>Wind Speed:</b></td>
- <td>{{ $data->wind->speed }} mph</td>
- </tr>
- <tr>
- <td><b>Wind Direction:</b></td>
- <td>{{ $data->wind->direction->degrees }}°, {{ $data->wind->direction->cardinal }}</td>
- </tr>
- <tr>
- <td><b>Temperature:</b></td>
- <td>{{ $data->temperature }}°C</td>
- </tr>
- <tr>
- <td><b>Rain Rate:</b></td>
- <td>{{ $data->rain_rate }} mm/hr</td>
- </tr>
- <tr>
- <td><b>Humidity:</b></td>
- <td>{{ $data->humidity }}%</td>
- </tr>
-</table>
-<br>
-<small><i>(Last Update: {{ $updated }})</i></small>
-@endif
-@stop
diff --git a/routes/web.php b/routes/web.php
index d9b39c6..b87d32d 100644
--- a/routes/web.php
+++ b/routes/web.php
@@ -1,8 +1,15 @@
<?php
-use Illuminate\Support\Facades\DB;
+use App\Http\Controllers\AdminBookmarksController;
+use App\Http\Controllers\AdminGuestbookController;
+use App\Http\Controllers\AdminImportController;
+use App\Http\Controllers\BookmarksController;
+use App\Http\Controllers\CalculatorsController;
+use App\Http\Controllers\ComputersController;
+use App\Http\Controllers\GuestbookController;
+use App\Http\Controllers\HomeController;
+use App\Http\Controllers\MusicController;
use Illuminate\Support\Facades\Route;
-use Illuminate\Support\Facades\View;
/*
|--------------------------------------------------------------------------
@@ -15,87 +22,23 @@ use Illuminate\Support\Facades\View;
|
*/
-Route::get('/', function () {
- return View::make('pages.home');
-});
-
-Route::get('/bookmarks', function () {
- return View::make('pages.bookmarks');
-});
-
-Route::get('/projects', function () {
- return View::make('pages.projects');
-});
-
-Route::get('/calculators', function () {
- return View::make('pages.calculators');
-});
-
-Route::get('/computers', function () {
- return View::make('pages.computers');
-});
-
-Route::get('/guestbook', 'App\Http\Controllers\GuestbookController@guestbook')
- ->name('guestbook');
-
-Route::post('/guestbook', 'App\Http\Controllers\GuestbookController@guestbookpost')
- ->name('guestbookPost')
+Route::get('/', [HomeController::class, 'show']);
+Route::get('/bookmarks', [BookmarksController::class, 'show']);
+Route::get('/guestbook', [GuestbookController::class, 'show']);
+Route::post('/guestbook', [GuestbookController::class, 'addEntry'])
->middleware('rate_limit');
-
-Route::get('/weather', function () {
- return View::make('pages.weather');
-});
-
-Route::get('/music', function () {
- return View::make('pages.music');
-});
-
-Route::get('/bot', function () {
- return View::make('pages.bot');
-});
-
-/* ------------------------------ Admin Routes ------------------------------ */
-
-//Route::get('/admin', function () {
-// if (!auth()->check()) {
-// return View::make('errors.no-auth');
-// }
-// return View::make('pages.admin.index');
-//});
-//
-//Route::get('/admin/guestbook', function () {
-// if (!auth()->check()) {
-// return View::make('errors.no-auth');
-// }
-// return View::make('pages.admin.guestbook');
-//});
-//
-//Route::get('/admin/guestbook/delete', function () {
-// if (!auth()->check()) {
-// return View::make('errors.no-auth');
-// }
-//
-// $id = request()->input('id');
-// $entry = DB::table('guestbook__entries')->find($id);
-//
-// if ($entry) {
-// // Render a confirmation view
-// return View::make('pages.admin.guestbook-del-confirm', compact('entry'));
-// } else {
-// return View::make('errors.generic-error')
-// ->with('error', "Entry not found")
-// ->with('description', "The specified entry does not exist!");
-// }
-//});
-//
-//Route::post('/admin/guestbook/delete', function () {
-// if (!auth()->check()) {
-// return View::make('errors.no-auth');
-// }
-//
-// $id = request()->input('id');
-// DB::table('guestbook__entries')->where('id', $id)->delete();
-//
-// return back()->with('success', 'Entry deleted successfully!');
-//});
+Route::get('/calculators', [CalculatorsController::class, 'show']);
+Route::get('/computers', [ComputersController::class, 'show']);
+Route::get('/music', [MusicController::class, 'show']);
+
+// Admin pages
+Route::get('/admin/guestbook', [AdminGuestbookController::class, 'show'])
+ ->middleware('auth');
+Route::get('/admin/bookmarks', [AdminBookmarksController::class, 'show'])
+ ->middleware('auth');
+Route::get('/admin/import', [AdminImportController::class, 'show'])
+ ->middleware('auth');
+Route::post('/admin/import', [AdminImportController::class, 'submit'])
+ ->name('admin.import.submit')
+ ->middleware('auth');
diff --git a/scripts/updatecache.sh b/scripts/updatecache.sh
index 53dad65..b4acd8c 100755
--- a/scripts/updatecache.sh
+++ b/scripts/updatecache.sh
@@ -2,3 +2,4 @@ php artisan config:cache
php artisan route:cache
php artisan view:cache
php artisan event:cache
+php artisan cache:clear