6 Commits

98 changed files with 1062 additions and 6093 deletions

3
.gitignore vendored
View File

@@ -33,6 +33,3 @@ legacypublic
migrated_artworks_files.tar.gz migrated_artworks_files.tar.gz
migrated_thumbnail_files.tar.gz migrated_thumbnail_files.tar.gz
site/.yarn/releases/yarn-1.22.19.cjs site/.yarn/releases/yarn-1.22.19.cjs
site/public/assets
redis/*
staticassets

View File

@@ -4,7 +4,7 @@ Modernizing the No Agenda Art Generator.
Since 2010, the [No Agenda Art Generator](https://noagendaartgenerator.com) has been producing album art for the [No Agenda Podcast](https://noagendashow.net) live via community collaboration by the artists that make up the best podcast art creators in the universe. Since 2010, the [No Agenda Art Generator](https://noagendaartgenerator.com) has been producing album art for the [No Agenda Podcast](https://noagendashow.net) live via community collaboration by the artists that make up the best podcast art creators in the universe.
In October 2014, the 2.0 release of the Art Generator began based on Laravel 4.2. It has served the podcast and community well, but this project seeks to make it easier for collaborators to contribute, modify, and maintain the art generator while making the product available to more podcasts and artists. In October 2016, the 2.0 release of the Art Generator began based on Laravel 4.2. It has served the podcast and community well, but this project seeks to make it easier for collaborators to contribute, modify, and maintain the art generator while making the product available to more podcasts and artists.
### License ### License

View File

@@ -8,19 +8,18 @@ services:
dockerfile: Dockerfile dockerfile: Dockerfile
container_name: ${CONTAINER_NAME:-pcag-laravel} container_name: ${CONTAINER_NAME:-pcag-laravel}
volumes: volumes:
- ${PATH_TO_SITE}:/var/www/html - ./site:/var/www/html
- ${PATH_TO_STATIC}:/static - ./static:/static
- ./nginx/default.conf:/etc/nginx/sites-available/default #- ./legacypublic:/legacypublic
- ./nginx/nginx.conf:/etc/nginx/nginx.conf
environment: environment:
TZ: UTC TZ: UTC
PUID: ${UID:-1000} PUID: ${UID:-1000}
PGID: ${GID:-1000} PGID: ${GID:-1000}
REDIS_HOST: redis REDIS_HOST: redis
DB_HOST: db DB_HOST: db
DB_DATABASE: ${LIVE_DB_DATABASE} DB_DATABASE: ${DB_DATABASE}
DB_USERNAME: ${LIVE_DB_USERNAME} DB_USERNAME: ${DB_USERNAME}
DB_PASSWORD: ${LIVE_DB_PASSWORD} DB_PASSWORD: ${DB_PASSWORD}
LARAVEL_QUEUE_ENABLED: true LARAVEL_QUEUE_ENABLED: true
LARAVEL_QUEUE_OPTIONS: --timeout=60 --tries=3 redis LARAVEL_QUEUE_OPTIONS: --timeout=60 --tries=3 redis
LARAVEL_SCHEDULE_ENABLED: true LARAVEL_SCHEDULE_ENABLED: true
@@ -46,10 +45,10 @@ services:
env_file: .env env_file: .env
environment: environment:
TZ: UTC TZ: UTC
MARIADB_ROOT_PASSWORD: ${LIVE_DB_ROOT_PASSWORD} MARIADB_ROOT_PASSWORD: ${DB_ROOT_PASSWORD}
MARIADB_USER: ${LIVE_DB_USERNAME} MARIADB_USER: ${DB_USERNAME}
MARIADB_DATABASE: ${LIVE_DB_DATABASE} MARIADB_DATABASE: ${DB_DATABASE}
MARIADB_PASSWORD: ${LIVE_DB_PASSWORD} MARIADB_PASSWORD: ${DB_PASSWORD}
volumes: volumes:
- "./db/data:/var/lib/mysql" - "./db/data:/var/lib/mysql"
- "./db/dump:/docker-entrypoint-initdb.d" - "./db/dump:/docker-entrypoint-initdb.d"

View File

@@ -1,42 +0,0 @@
server {
listen 80 default_server;
listen [::]:80 default_server;
listen 443 ssl http2;
listen [::]:443 ssl http2;
server_name _;
root /var/www/html/public;
index index.html index.htm index.php;
# SSL
ssl_certificate /etc/ssl/web/server.crt;
ssl_certificate_key /etc/ssl/web/server.key;
# additional config
include extra.d/*.conf;
# health check
location /ping {
access_log off;
include snippets/fastcgi-php.conf;
fastcgi_read_timeout 5s;
fastcgi_pass unix:/var/run/php/php-fpm.sock;
}
location ^~ /livewire {
try_files $uri $uri/ /index.php?$query_string;
}
# handle .php
location ~ \.php$ {
fastcgi_pass unix:/var/run/php/php-fpm.sock;
fastcgi_param SCRIPT_FILENAME $realpath_root$fastcgi_script_name;
include snippets/fastcgi-php.conf;
}
# index.php fallback
location / {
try_files $uri $uri/ /index.php?$query_string;
}
}

View File

@@ -1,11 +0,0 @@
#snippets/legacy_mappings.conf
map $uri $legacy_mapping {
~^/assets/(?<filename>.+)$ $filename;
default $uri;
}
map $filename $modified_filename {
~/(.*) $1---;
default $filename;
}

View File

@@ -1,145 +0,0 @@
# Generated by nginxconfig.io
# https://www.serverion.com/nginx-config/#?0.domain=_&0.path=%2Fvar%2Fwww%2Fhtml&0.redirect=false&0.force_https=false&0.cert_type=custom&0.ssl_certificate=%2Fetc%2Fssl%2Fweb%2Fserver.crt&0.ssl_certificate_key=%2Fetc%2Fssl%2Fweb%2Fserver.key&0.wordpress&0.proxy_path=%2Fping&0.proxy_pass=unix:%2Fvar%2Frun%2Fphp%2Fphp-fpm.sock&0.index=index.html&content_security_policy=default-src%20'self'%20http:%20https:%20data:%20blob:%20'unsafe-inline';%20frame-ancestors%20'self';&php_server=%2Fvar%2Frun%2Fphp%2Fphp7.3-fpm.sock&expires_media=max&expires_svg=max&expires_fonts=max&user=www-data%20www-data&client_max_body_size=2048&symlink=false
pcre_jit on;
worker_processes auto;
worker_rlimit_nofile 100000;
user www-data www-data;
events {
worker_connections 65535;
use epoll;
multi_accept on;
}
http {
# define common MIME types
include mime.types;
# define the default MIME type
default_type application/octet-stream;
# disable emitting nginx version
server_tokens off;
# disable the directory listing output
autoindex off;
# disable automatic generation of the "ETag"
etag off;
# disable warnings about uninitialized variables are logged
uninitialized_variable_warn off;
# ======================================================================== #
# the bucket size for the maps hash table
map_hash_bucket_size 256;
map_hash_max_size 4096;
# the bucket size for the server names hash tables
server_names_hash_bucket_size 256;
server_names_hash_max_size 4096;
# the bucket size for variables hash tables
variables_hash_max_size 4096;
variables_hash_bucket_size 4096;
# ======================================================================== #
# cache informations about FDs, frequently accessed files
# can boost performance, but you need to test those values
open_file_cache max=200000 inactive=30s;
open_file_cache_valid 30s;
open_file_cache_min_uses 1;
open_file_cache_errors off;
open_log_file_cache max=10 inactive=30s min_uses=1 valid=5m;
# ======================================================================== #
# logging
access_log /var/log/nginx/access.log;
error_log /var/log/nginx/error.log error;
# to boost I/O on HDD we can disable access logs
log_not_found off;
log_subrequest off;
rewrite_log on;
# copies data between one FD and other from within the kernel
# faster than read() + write()
sendfile off;
sendfile_max_chunk 1m;
# send headers in one piece, it is better than sending them one by one
tcp_nopush on;
# don't buffer data sent, good for small data bursts in real time
tcp_nodelay on;
# large files can be read and sent using multi-threading
# without blocking a worker process
aio threads;
directio 1m;
# how to compare modification time
ssi on;
if_modified_since off;
# set default size of the slice
slice 1m;
# ======================================================================== #
# allow the server to close connection on non responding client,
# this will free up memory
reset_timedout_connection on;
# timeout for reading client request header -- default: 60
client_header_timeout 10s;
# request timed out -- default: 60
client_body_timeout 75s;
# if the request body size is more than the buffer size, then the entire (or partial)
# request body is written into a temporary file
client_body_buffer_size 128k;
# if client stop responding, free up memory -- default: 60
send_timeout 30s;
# server will close connection after this time -- default: 75
keepalive_timeout 30s;
# number of requests client can make over keep-alive
keepalive_requests 100000;
# maximum number and size of buffers
# for large headers to read from client request -- default: 4 8k;
large_client_header_buffers 4 16k;
# ======================================================================== #
# SSL
ssl_session_timeout 1d;
ssl_session_cache shared:SSL:10m;
ssl_session_tickets off;
# Diffie-Hellman parameter for DHE ciphersuites
ssl_dhparam /etc/ssl/dhparam.pem;
# Mozilla Intermediate configuration
ssl_protocols TLSv1.2 TLSv1.3;
ssl_ciphers ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384;
# OCSP Stapling
# ssl_stapling on;
# ssl_stapling_verify on;
resolver 1.1.1.1 1.0.0.1 8.8.8.8 8.8.4.4 208.67.222.222 208.67.220.220 valid=60s;
resolver_timeout 2s;
# ======================================================================== #
include /etc/nginx/conf.d/*.conf;
include /etc/nginx/sites-enabled/*;
}

File diff suppressed because it is too large Load Diff

View File

@@ -2,3 +2,4 @@
# yarn lockfile v1 # yarn lockfile v1
yarn-path ".yarn/releases/yarn-1.22.19.cjs"

View File

@@ -1,346 +0,0 @@
<?php
namespace App\Console\Commands;
use Illuminate\Console\Command;
use App\Models\Artwork;
use App\Models\Episode;
use App\Models\Artist;
use App\Models\Podcast;
use Illuminate\Support\Facades\DB;
use Illuminate\Support\Str;
use Illuminate\Support\Facades\Storage;
use Intervention\Image\Facades\Image;
use Carbon\Carbon;
use ImageOptimizer;
class AddMissingV3ArtworksCommand extends Command
{
/**
* The name and signature of the console command.
*
* @var string
*/
protected $signature = 'app:add-missing-v3-artworks-command';
/**
* The console command description.
*
* @var string
*/
protected $description = 'Command description';
/**
* Execute the console command.
*/
public function handle()
{
$missing_artworks = [
[
'url' => 'https://noagenda.dev/old/img/7e5e1ca05eb622e2.png',
'title' => 'Show Art 1613',
'artist' => 'dirty-jersey-whore',
'artist_id' => 1318,
'episode' => 1613,
],
[
'url' => 'https://noagenda.dev/old/img/6ac5a1220e954d10.jpg',
'title' => 'No Stinkin\' Title Provided',
'artist' => 'dirty-jersey-whore',
'artist_id' => 1318,
'episode' => 1613,
],
[
'url' => 'https://noagenda.dev/old/img/eb9c5a07a25db93b.jpg',
'title' => 'McMystery',
'artist' => 'Nessworks',
'artist_id' => 1159,
'episode' => 1614,
],
[
'url' => 'https://noagenda.dev/old/img/16dce3f9249b42e8.png',
'title' => 'Blinking Red Lights!',
'artist' => 'mountainjay',
'artist_id' => 891,
'episode' => 1614,
],
[
'url' => 'https://noagenda.dev/old/img/8a6153d61715434b.jpg',
'title' => 'Day One Dictator!',
'artist' => 'matthewdropco1972',
'artist_id' => 1173,
'episode' => 1614,
],
[
'url' => 'https://noagenda.dev/old/img/bf6322f359b0727f.png',
'title' => 'Vivek\'s Notebook',
'artist' => 'sir-paul-couture',
'artist_id' => 4,
'episode' => 1614,
],
[
'url' => 'https://noagenda.dev/old/img/81e71a8e2b24874b.jpg',
'title' => 'Plastic Shoes',
'artist' => 'Nessworks',
'artist_id' => 1159,
'episode' => 1614,
],
[
'url' => 'https://noagenda.dev/old/img/51f16e95c0e86cc9.jpg',
'title' => 'My Transhausen Blewupen',
'artist' => 'francisco-scaramanga',
'artist_id' => 1377,
'episode' => 1614,
],
[
'url' => 'https://noagenda.dev/old/img/b3b6c7988b5fd7f0.jpeg',
'title' => 'McPartner',
'artist' => 'dame-kenny-ben',
'artist_id' => 1121,
'episode' => 1614,
],
[
'url' => 'https://noagenda.dev/old/img/c9c52179e5eedc6f.png',
'title' => 'Red Flashing Lights',
'artist' => 'jack-evans',
'artist_id' => 1224,
'episode' => 1614,
],
[
'url' => 'https://noagenda.dev/old/img/2a29bb2974959b8a.jpg',
'title' => 'Threat Level Swift',
'artist' => 'darren-oneill',
'artist_id' => 756,
'episode' => 1614,
],
[
'url' => 'https://noagenda.dev/old/img/0ed3c698ba336ea9.jpg',
'title' => 'Blinking Lights',
'artist' => 'matthewdropco1972',
'artist_id' => 1173,
'episode' => 1614,
],
[
'url' => 'https://noagenda.dev/old/img/04658d1ccb786d26.png',
'title' => 'Deep State University, In The Morning',
'artist' => 'mountainjay',
'artist_id' => 891,
'episode' => 1614,
],
[
'url' => 'https://noagenda.dev/old/img/61273125525b7861.jpg',
'title' => 'Chad GPT',
'artist' => 'Nessworks',
'artist_id' => 1159,
'episode' => 1615,
],
[
'url' => 'https://noagenda.dev/old/img/479090be93d46fad.jpg',
'title' => 'Chet GPT',
'artist' => 'Nessworks',
'artist_id' => 1159,
'episode' => 1615,
],
[
'url' => 'https://noagenda.dev/old/img/a533697498ad7f75.png',
'title' => 'Word Salad, Roundy Variant',
'artist' => 'comic-strip-blogger',
'artist_id' => 680,
'episode' => 1615,
],
[
'url' => 'https://noagenda.dev/old/img/bcd81059b0440049.png',
'title' => 'word salad (that AI allegedly produces)',
'artist' => 'comic-strip-blogger',
'artist_id' => 680,
'episode' => 1615,
],
[
'url' => 'https://noagenda.dev/old/img/ddfbcc471e4f265f.png',
'title' => 'microphone hand (without show number)',
'artist' => 'comic-strip-blogger',
'artist_id' => 680,
'episode' => 1615,
],
[
'url' => 'https://noagenda.dev/old/img/c11e2b8a88774fca.png',
'title' => 'microphone hand',
'artist' => 'comic-strip-blogger',
'artist_id' => 680,
'episode' => 1615,
],
[
'url' => 'https://noagenda.dev/old/img/f0c08370c93980b8.jpg',
'title' => 'Bye Joe',
'artist' => 'darren-oneill',
'artist_id' => 756,
'episode' => 1615,
],
[
'url' => 'https://noagenda.dev/old/img/9fc5c17fc0ec547e.jpg',
'title' => 'Coof Train',
'artist' => 'darren-oneill',
'artist_id' => 756,
'episode' => 1615,
],
[
'url' => 'https://noagenda.dev/old/img/99e317f0dd6dd10c.jpg',
'title' => 'Comb Your Hair!',
'artist' => 'Nessworks',
'artist_id' => 1159,
'episode' => 1615,
],
[
'url' => 'https://noagenda.dev/old/img/c579a7ef6ab53869.jpg',
'title' => 'Milgram',
'artist' => 'clip-custodian',
'artist_id' => 1431,
'episode' => 1615,
],
[
'url' => 'https://noagenda.dev/old/img/ba791114371437bc.jpeg',
'title' => '67% are Killers',
'artist' => 'dame-kenny-ben',
'artist_id' => 1121,
'episode' => 1615,
],
[
'url' => 'https://noagenda.dev/old/img/05b40baf17249ea5.jpg',
'title' => 'Garage Sale Find',
'artist' => 'francisco-scaramanga',
'artist_id' => 1377,
'episode' => 1615,
],
[
'url' => 'https://noagenda.dev/old/img/fc626cd5542c71d8.jpg',
'title' => 'NA Show Art',
'artist' => 'monsieur-pierrey',
'artist_id' => 58,
'episode' => 1615,
],
[
'url' => 'https://noagenda.dev/old/img/2dc17c67400465ad.jpg',
'title' => 'Merry Christmas Ukraine',
'artist' => 'clip-custodian',
'artist_id' => 1431,
'episode' => 1616,
],
[
'url' => 'https://noagenda.dev/old/img/18724b09fd552fc0.jpg',
'title' => 'THE END IS HERE',
'artist' => 'francisco-scaramanga',
'artist_id' => 1377,
'episode' => 1616,
],
[
'url' => 'https://noagenda.dev/old/img/cefbe40e1afdf45c.jpg',
'title' => 'AI Winter is Coming',
'artist' => 'Nessworks',
'artist_id' => 1159,
'episode' => 1616,
],
[
'url' => 'https://noagenda.dev/old/img/045db414cd60cf2a.jpg',
'title' => 'Space Race Force',
'artist' => 'Nessworks',
'artist_id' => 1159,
'episode' => 1616,
],
[
'url' => 'https://noagenda.dev/old/img/f817a154c260076f.png',
'title' => 'No Agenda Verse',
'artist' => 'comic-strip-blogger',
'artist_id' => 680,
'episode' => 1616,
],
[
'url' => 'https://noagenda.dev/old/img/618ddba291dbe349.png',
'title' => 'NA Show Art',
'artist' => 'comic-strip-blogger',
'artist_id' => 680,
'episode' => 1616,
],
[
'url' => 'https://noagenda.dev/old/img/322eda9c9e44933c.jpg',
'title' => 'Chinese Satellite',
'artist' => 'darren-oneill',
'artist_id' => 756,
'episode' => 1616,
],
[
'url' => 'https://noagenda.dev/old/img/2c9ecc0646cc49dc.jpeg',
'title' => 'Naked No Agenda',
'artist' => 'KorrectDaRekard',
'artist_id' => 1021,
'episode' => 1616,
],
[
'url' => 'https://noagenda.dev/old/img/96ba274872584092.jpg',
'title' => 'NA Show Art',
'artist' => 'matthewdropco1972',
'artist_id' => 1173,
'episode' => 1616,
],
[
'url' => 'https://noagenda.dev/old/img/af8ab3953ba21524.jpg',
'title' => 'False Idols',
'artist' => 'matt-boisvert',
'artist_id' => 1368,
'episode' => 1616,
],
[
'url' => 'https://noagenda.dev/old/img/ec5e76093063d663.jpg',
'title' => 'Collect Them All!',
'artist' => 'matt-boisvert',
'artist_id' => 1368,
'episode' => 1616,
],
[
'url' => 'https://noagenda.dev/old/img/c28ec70cfd544c9b.jpg',
'title' => 'Santa\'s New List',
'artist' => 'matt-boisvert',
'artist_id' => 1368,
'episode' => 1616,
],
[
'url' => 'https://noagenda.dev/old/img/6d228246fb744cb7.jpg',
'title' => 'Christmas is Coming',
'artist' => 'matt-boisvert',
'artist_id' => 1368,
'episode' => 1616,
],
];
foreach ($missing_artworks as $art) {
$artist = Artist::find($art['artist_id']);
$episode = Episode::where('episode_number', $art['episode'])->first();
$this->line('Artist: ' . $artist->slug);
$this->line('Episode: ' . $episode->episode_date->format('Y-m-d'));
$artwork = new Artwork;
$artwork->title = $art['title'];
$artwork->artist_id = $artist->id;
$artwork->created_at = $episode->episode_date->format('Y-m-d ' . now()->format('H:i:s'));
$artwork->updated_at = $episode->episode_date->format('Y-m-d ' . now()->format('H:i:s'));
$artwork->episode_id = $episode->id;
$artwork->podcast_id = 1;
$artwork->approved_by = 4;
$basename = $episode->episode_date->format('Y/m/')
. Str::slug($artist->name)
. '_'
. Str::slug($art['title'])
. '_'
. Str::random(8)
. '.jpg';
$artwork->filename = $basename;
$artwork->save();
$filename = 'artworks/' . $basename;
$thumbnailName = 'thumbnails/' . $basename;
$this->line($basename);
$img = Image::make(file_get_contents($art['url']))->resize(3000, 3000)->encode('jpg', 100);
$thumbImg = Image::make(file_get_contents($art['url']))->resize(512, 512)->encode('jpg', 100);
$imgLocation = Storage::disk('static')->put($filename, $img);
$thumbLocation = Storage::disk('static')->put($thumbnailName, $thumbImg);
ImageOptimizer::optimize(Storage::disk('static')->path($filename));
ImageOptimizer::optimize(Storage::disk('static')->path($thumbnailName));
}
}
}

View File

@@ -1,111 +0,0 @@
<?php
namespace App\Console\Commands;
use Illuminate\Console\Command;
use Illuminate\Support\Facades\DB;
use Illuminate\Support\Facades\Storage;
use Illuminate\Support\Str;
use Carbon\Carbon;
use Intervention\Image\Facades\Image;
use ImageOptimizer;
use App\Models\User;
use App\Models\Artist;
use App\Models\Artwork;
use App\Models\Podcast;
use App\Models\Episode;
class ImportMissingLegacyArtworkCommand extends Command
{
/**
* The name and signature of the console command.
*
* @var string
*/
protected $signature = 'naart:import-legacy-artwork {legacy_artwork_id}';
/**
* The console command description.
*
* @var string
*/
protected $description = 'Used to import a single legacy artwork item that was missed in the migration.';
/**
* Execute the console command.
*/
public function handle()
{
$legacyArtwork = DB::connection('legacy')->table('artworks')->where('id', $this->argument('legacy_artwork_id'))->first();
$legacyEpisode = DB::connection('legacy')->table('episodes')->where('id', $legacyArtwork->episode_id)->first();
dump($legacyEpisode);
dump($legacyArtwork);
$user = User::where('legacy_id', $legacyArtwork->user_id)->with('artists')->first();
$artist = $user->artists->first();
dump($artist);
$podcast = Podcast::find(1);
$episode = Episode::where('episode_number', $legacyEpisode->episode_number)->first();
dump($episode);
$date = Carbon::parse($legacyArtwork->created_at);
$basename = $date->format('Y')
. '/'
. $date->format('m')
. '/'
. Str::slug($artist->name)
. '_'
. Str::slug($legacyArtwork->title)
. '_'
. Str::random(8)
. '.jpg';
$thumbnailName = 'thumbnails/' . $basename;
$artworkName = 'artworks/' . $basename;
$artworkExists = Artwork::where('artist_id', $artist->id)
->where('episode_id', $episode->id)
->where('title', $legacyArtwork->title)
->count();
$thumbnailExists = false;
$artExists = false;
dump($artworkExists);
dump([$thumbnailName, $artworkName]);
if (Storage::disk('static')->exists($thumbnailName)) {
$this->line('Thumbnail already exists.');
$thumbnailExists = true;
}
if (Storage::disk('static')->exists($artworkName)) {
$this->line('Artwork already exists.');
$artExists = true;
}
dump([$thumbnailExists, $artExists]);
if (!$artworkExists) {
$artwork = Artwork::factory()->state([
'title' => $legacyArtwork->title,
'artist_id' => $artist->id,
'description' => null,
'overlay_id' => null,
'podcast_id' => $podcast->id,
'episode_id' => $episode->id,
'approved_by' => 4,
'filename' => $basename,
'legacy_filename' => $legacyArtwork->path . '/' . $legacyArtwork->filename,
'legacy_id' => $legacyArtwork->id,
'created_at' => $legacyArtwork->created_at,
'updated_at' => $legacyArtwork->created_at,
])->create();
$img = Image::make('/var/www/html/naartgen/podcastartgenerator/static' . $artwork->legacy_filename)
->resize(3000, null, function($constraint) {
$constraint->aspectRatio();
})
->encode('jpg', 100)
->save(Storage::disk('static')->path('/artworks') . '/' . $artwork->filename);
$thumbImg = Image::make('/var/www/html/naartgen/podcastartgenerator/static' . $artwork->legacy_filename)
->resize(512, null, function($constraint) {
$constraint->aspectRatio();
})
->encode('jpg', 100)
->save(Storage::disk('static')->path('/thumbnails') . '/' . $artwork->filename);
ImageOptimizer::optimize(Storage::disk('static')->path('/artworks/' . $artwork->filename));
ImageOptimizer::optimize(Storage::disk('static')->path('/thumbnails/' . $artwork->filename));
dump($artwork);
}
}
}

View File

@@ -1,46 +0,0 @@
<?php
namespace App\Console\Commands;
use Illuminate\Console\Command;
use App\Models\Artwork;
class LegacyNginxMappingCommand extends Command
{
/**
* The name and signature of the console command.
*
* @var string
*/
protected $signature = 'naart:legacy-nginx-mapping';
/**
* The console command description.
*
* @var string
*/
protected $description = 'Command description';
/**
* Execute the console command.
*/
public function handle()
{
$oldLocations = [];
$newLocations = [];
$this->line('# legacy_mappings.conf');
$this->line('');
$this->line('map $uri $new_location {');
$artworks = Artwork::whereNotNull('legacy_filename')->get();
foreach ($artworks as $artwork) {
if (!in_array($artwork->legacy_filename, $oldLocations) && !in_array($artwork->legacy_filename, $newLocations)) {
$oldLocations[] = $artwork->legacy_filename;
$newLocations[] = $artwork->legacy_filename;
$this->line(' "' . $artwork->legacy_filename . '" "/legacy-asset/?legacy_filename=' . urlencode($artwork->legacy_filename) . '";');
}
}
$this->line(' default $uri;');
$this->line('}');
$this->line('');
}
}

View File

@@ -1,38 +0,0 @@
<?php
namespace App\Console\Commands;
use Illuminate\Console\Command;
use App\Models\Artwork;
use App\Models\Episode;
use Illuminate\Support\Facades\DB;
class RefreshLeaderBoardCacheCommand extends Command
{
/**
* The name and signature of the console command.
*
* @var string
*/
protected $signature = 'naart:leaderboard-cache';
/**
* The console command description.
*
* @var string
*/
protected $description = 'Clears all leaderboard caches.';
/**
* Execute the console command.
*/
public function handle()
{
$this->line('Clearing Leaderboard Caches...');
cache()->forget('leaderboardTwelveMonths');
cache()->forget('leaderboardTwelveMonthsLanding');
cache()->forget('leaderboardAllTime');
cache()->forget('leaderboardRollingSixMonth');
cache()->forget('leaderboardNinetyDays');
}
}

View File

@@ -3,13 +3,7 @@
namespace App\Http\Controllers; namespace App\Http\Controllers;
use App\Models\Artist; use App\Models\Artist;
use App\Models\Artwork;
use App\Models\Podcast;
use App\Models\Episode;
use Illuminate\Http\Request; use Illuminate\Http\Request;
use Illuminate\Http\RedirectResponse;
use Illuminate\Support\Facades\Validator;
use Illuminate\Validation\Rule;
class ArtistController extends Controller class ArtistController extends Controller
{ {
@@ -20,18 +14,7 @@ class ArtistController extends Controller
*/ */
public function index() public function index()
{ {
$user = auth()->user(); //
$artists = Artist::whereHas('artworks')
->withCount('artworks')
->orderBy('artworks_count', 'desc')
->paginate(100);
$podcasts = Podcast::where('published', true)->get();
return view('profile.artists', [
'user' => $user,
'pageTitle' => 'Artists',
'podcasts' => $podcasts,
'artists' => $artists,
]);
} }
/** /**
@@ -61,23 +44,9 @@ class ArtistController extends Controller
* @param \App\Models\Artist $artist * @param \App\Models\Artist $artist
* @return \Illuminate\Http\Response * @return \Illuminate\Http\Response
*/ */
public function show(Request $request, $slug) public function show(Artist $artist)
{ {
$user = auth()->user(); //
$artist = Artist::where('slug', $slug)
->firstOrFail();
$artworks = Artwork::where('artist_id', $artist->id)
->with('episode')
->with('podcast')
->orderBy('artworks.created_at', 'desc')
->paginate($perPage = 92, $columns = ['*'], $pageName = 'artworks');
$podcasts = Podcast::where('published', true)->with('episodes')->get();
return view('profile.artist', [
'user' => $user,
'artist' => $artist,
'artworks' => $artworks,
'podcasts' => $podcasts,
]);
} }
/** /**
@@ -100,30 +69,7 @@ class ArtistController extends Controller
*/ */
public function update(Request $request, Artist $artist) public function update(Request $request, Artist $artist)
{ {
$user = auth()->user(); //
$artist = $user->artists->first();
$rules = [
'location' => ['string', 'max:255'],
'alby' => ['email'],
'website' => ['url'],
'nasocial' => ['starts_with:@'],
'name' => ['string', 'unique:artists', 'max:255'],
];
$validator = Validator::make($request->all(), $rules);
if ($validator->fails()) {
return back()
->withErrors($validator)
->withInput();
}
$artist->location = $request->location;
$artist->alby = $request->alby;
$artist->website = $request->website;
$artist->nasocial = $request->nasocial;
$artist->name = $request->name;
if ($artist->isDirty()) {
$artist->save();
}
return redirect('/profile');
} }
/** /**

View File

@@ -12,10 +12,8 @@ use Illuminate\Validation\Rules\File;
use Illuminate\Validation\Rule; use Illuminate\Validation\Rule;
use Illuminate\Support\Facades\Storage; use Illuminate\Support\Facades\Storage;
use Illuminate\Support\Facades\Log; use Illuminate\Support\Facades\Log;
use Illuminate\Support\Facades\DB;
use Illuminate\Support\Str; use Illuminate\Support\Str;
use Intervention\Image\Facades\Image; use Intervention\Image\Facades\Image;
use Illuminate\Support\Facades\Cache;
use ImageOptimizer; use ImageOptimizer;
class ArtworkController extends Controller class ArtworkController extends Controller
@@ -29,15 +27,11 @@ class ArtworkController extends Controller
{ {
$user = auth()->user(); $user = auth()->user();
$artworks = Artwork::whereNotNull('approved_by') $artworks = Artwork::whereNotNull('approved_by')
->join('episodes', 'artworks.episode_id', '=', 'episodes.id')
->select('artworks.*', DB::raw('episodes.episode_number episode_number'))
->with('artist') ->with('artist')
->with('podcast') ->orderBy('episode_id', 'desc')
->with('episode') ->orderBy('created_at', 'desc')
->orderBy('episode_number', 'desc') ->paginate($perPage = 100, $columns = ['*'], $pageName = 'artworks');
->orderBy('artworks.created_at', 'desc') $podcasts = Podcast::where('published', true)->with('episodes')->get();
->paginate($perPage = 52, $columns = ['*'], $pageName = 'artworks');
$podcasts = $this->publishedPodcasts();
return view('explore.artworks', [ return view('explore.artworks', [
'user' => $user, 'user' => $user,
'pageTitle' => 'Explore', 'pageTitle' => 'Explore',
@@ -54,7 +48,7 @@ class ArtworkController extends Controller
public function create() public function create()
{ {
$user = auth()->user(); $user = auth()->user();
$podcasts = $this->publishedPodcasts(); $podcasts = Podcast::where('published', true)->with('episodes')->get();
return view('artworks.submit', [ return view('artworks.submit', [
'user' => $user, 'user' => $user,
'pageTitle' => 'Submit New Artwork', 'pageTitle' => 'Submit New Artwork',
@@ -62,41 +56,6 @@ class ArtworkController extends Controller
]); ]);
} }
public function pendingApproval(Request $request)
{
$user = auth()->user();
if ($request->user()->cannot('approve', Artwork::class)) {
abort(403);
}
$artworks = Artwork::whereNull('approved_by')
->orderBy('created_at', 'desc')
->paginate(50);
$podcasts = $this->publishedPodcasts();
return view('artworks.approvals', [
'user' => $user,
'pageTitle' => 'Approve Artworks',
'podcasts' => $podcasts,
'artworks' => $artworks,
]);
}
public function approve(Request $request)
{
$user = $request->user();
if ($request->user()->cannot('approve', Artwork::class)) {
abort(403);
}
$validated = $request->validate([
'artwork_id' => 'required|exists:artworks,id'
]);
$artwork = Artwork::find($request->artwork_id);
if (is_null($artwork->approved_by)) {
$artwork->approved_by = $user->artists->first()->id;
$artwork->save();
}
return redirect('/approve-artworks');
}
/** /**
* Store a newly created resource in storage. * Store a newly created resource in storage.
* *
@@ -140,10 +99,7 @@ class ArtworkController extends Controller
'overlay_id' => null, 'overlay_id' => null,
'podcast_id' => $podcast->id, 'podcast_id' => $podcast->id,
'episode_id' => $episode->id, 'episode_id' => $episode->id,
//'approved_by' => 4,
'filename' => $filename, 'filename' => $filename,
'created_at' => now(),
'updated_at' => now(),
])->create(); ])->create();
$img = Image::make($rawFile)->resize(3000, null, function($constraint){ $img = Image::make($rawFile)->resize(3000, null, function($constraint){
$constraint->aspectRatio(); $constraint->aspectRatio();
@@ -175,12 +131,6 @@ class ArtworkController extends Controller
->with('episode') ->with('episode')
->with('artist') ->with('artist')
->first(); ->first();
if (is_null($artwork->approved_by) && $user && $user->id != $artwork->id) {
return redirect('artworks');
}
if (is_null($artwork->approved_by) && !$user) {
return redirect('artworks');
}
return view('artworks.artwork', [ return view('artworks.artwork', [
'artwork' => $artwork, 'artwork' => $artwork,
'user' => $user, 'user' => $user,
@@ -220,40 +170,4 @@ class ArtworkController extends Controller
{ {
// //
} }
public function legacyArtLink(Request $request, $any = null)
{
phpinfo();
dd($request->path());
//$artwork = Artwork::where('legacy_filename', '/assets/artwork/')
}
public function downloadArchiveList(Request $request, $type = 'sd')
{
$artworks = Artwork::whereNotNull('approved_by')
->orderBy('created_at', 'desc')
->pluck('filename');
$output = '';
if ($type == 'sd') {
foreach($artworks as $artwork) {
$output .= '"https://static.noagendaartgenerator.com/thumbnails/' . $artwork . '"' . "\r\n";
}
} else {
foreach($artworks as $artwork) {
$output .= '"https://static.noagendaartgenerator.com/artworks/' . $artwork . '"' . "\r\n";
}
}
return response($output, 200)
->header('Content-type', 'text/plain')
->header('Content-Length', strlen($output))
->header('Content-Disposition', 'attachment; filename="naartgen-archivelist-' . $type . '.txt"');
}
private function publishedPodcasts() {
$podcasts = Cache::remember('publishedPodcasts', 30, function() {
return Podcast::where('published', true)->get();
});
return $podcasts;
}
} }

View File

@@ -4,12 +4,10 @@ namespace App\Http\Controllers\Auth;
use App\Http\Controllers\Controller; use App\Http\Controllers\Controller;
use App\Models\User; use App\Models\User;
use App\Models\Artist;
use App\Providers\RouteServiceProvider; use App\Providers\RouteServiceProvider;
use Illuminate\Auth\Events\Registered; use Illuminate\Auth\Events\Registered;
use Illuminate\Http\RedirectResponse; use Illuminate\Http\RedirectResponse;
use Illuminate\Http\Request; use Illuminate\Http\Request;
use Illuminate\Support\Str;
use Illuminate\Support\Facades\Auth; use Illuminate\Support\Facades\Auth;
use Illuminate\Support\Facades\Hash; use Illuminate\Support\Facades\Hash;
use Illuminate\Validation\Rules; use Illuminate\Validation\Rules;
@@ -33,24 +31,17 @@ class RegisteredUserController extends Controller
public function store(Request $request): RedirectResponse public function store(Request $request): RedirectResponse
{ {
$request->validate([ $request->validate([
'name' => ['unique:artists,name', 'required', 'string', 'max:255'], 'name' => ['required', 'string', 'max:255'],
'email' => ['required', 'string', 'email', 'max:255', 'unique:'.User::class], 'email' => ['required', 'string', 'email', 'max:255', 'unique:'.User::class],
'password' => ['required', 'confirmed', Rules\Password::defaults()], 'password' => ['required', 'confirmed', Rules\Password::defaults()],
]); ]);
$user = User::create([ $user = User::create([
'name' => trim($request->name), 'name' => $request->name,
'email' => trim(strtolower($request->email)), 'email' => $request->email,
'password' => Hash::make($request->password), 'password' => Hash::make($request->password),
]); ]);
$artist = Artist::create([
'user_id' => $user->id,
'name' => trim($request->name),
'slug' => Str::slug(trim($request->name)),
'location' => 'No Agenda Nation',
]);
event(new Registered($user)); event(new Registered($user));
Auth::login($user); Auth::login($user);

View File

@@ -2,12 +2,8 @@
namespace App\Http\Controllers; namespace App\Http\Controllers;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Cache;
use Illuminate\Support\Facades\DB;
use App\Models\Podcast;
use App\Models\Artworks;
use App\Models\Episode; use App\Models\Episode;
use Illuminate\Http\Request;
class EpisodeController extends Controller class EpisodeController extends Controller
{ {
@@ -48,27 +44,9 @@ class EpisodeController extends Controller
* @param \App\Models\Episode $episode * @param \App\Models\Episode $episode
* @return \Illuminate\Http\Response * @return \Illuminate\Http\Response
*/ */
public function show(Request $request, $podcast_slug, $slug) public function show(Episode $episode)
{ {
$user = auth()->user(); //
$episode = Episode::where('slug', $slug)
->with('artworks')
->with('artwork')
->with('podcast')
->whereNotNull('artworks.approved_by')
->firstOrFail();
$podcasts = Podcast::where('published', true)->with('episodes', function ($query) {
$query->orderBy('episode_number', 'desc');
$query->where('published', true);
$query->take(10);
})->get();
return view('episodes.episode', [
'user' => $user,
'pageTitle' => '"' . $episode->title . '" ' . $episode->podcast->name . ' Episode ' . number_format($episode->episode_number + 0),
'podcast' => $episode->podcast,
'episode' => $episode,
'podcasts' => $podcasts,
]);
} }
/** /**

View File

@@ -18,7 +18,8 @@ class PageController extends Controller
$headerCounters = $this->getHeaderCounters(); $headerCounters = $this->getHeaderCounters();
$recentEpisodes = $this->mostRecentEpisodes(); $recentEpisodes = $this->mostRecentEpisodes();
$recentSubmissions = $this->mostRecentSubmissions(); $recentSubmissions = $this->mostRecentSubmissions();
$leaderboard = $this->leaderboardTwelveMonthsLanding(); $leaderboard = $this->leaderboardTwelveMonths();
return view('home.page', [ return view('home.page', [
'user' => $user, 'user' => $user,
'pageTitle' => 'Home', 'pageTitle' => 'Home',
@@ -30,40 +31,6 @@ class PageController extends Controller
]); ]);
} }
public function leaderboards(Request $request)
{
$user = auth()->user();
$current_year = now()->format('Y');
$start_year = 2011;
$years = [];
while($start_year < $current_year) {
$years[] = $start_year;
$start_year++;
}
arsort($years);
return view('leaderboards.leaderboards', [
'user' => $user,
'leaderboardAllTime' => $this->leaderboardAllTime(),
'leaderboardPastTwelveMonths' => $this->leaderboardTwelveMonths(),
'leaderboardRollingSixMonths' => $this->leaderboardRollingSixMonths(),
'leaderboardRollingNinetyDays' => $this->leaderboardRollingNinetyDays(),
'leaderboardYears' => $years,
]);
}
public function support(Request $request)
{
return view('home.support.page', [
'user' => auth()->user(),
'pageTitle' => 'History and Support',
'headerCounters' => $this->getHeaderCounters(),
'recentEpisodes' => $this->mostRecentEpisodes(),
'recentSubmissions' => $this->mostRecentSubmissions(),
'leaderboard' => $this->leaderboardTwelveMonthsLanding(),
'preferredTheme' => $request->session()->get('preferred_theme') ?? 'dark',
]);
}
private function mostRecentSubmissions() { private function mostRecentSubmissions() {
$artworks = Cache::remember('latestSubmissions', 30, function() { $artworks = Cache::remember('latestSubmissions', 30, function() {
return Artwork::whereNotNull('approved_by') return Artwork::whereNotNull('approved_by')
@@ -71,7 +38,7 @@ class PageController extends Controller
->with('episode') ->with('episode')
->with('podcast') ->with('podcast')
->orderBy('created_at', 'desc') ->orderBy('created_at', 'desc')
->limit(10) ->limit(50)
->get(); ->get();
}); });
return $artworks; return $artworks;
@@ -85,8 +52,8 @@ class PageController extends Controller
->with('podcast') ->with('podcast')
->with('artwork') ->with('artwork')
->with('artwork.artist') ->with('artwork.artist')
->orderBy('episode_number', 'desc') ->orderBy('episode_date', 'desc')
->limit(5) ->limit(10)
->get(); ->get();
}); });
return $episodes; return $episodes;
@@ -95,13 +62,13 @@ class PageController extends Controller
private function getHeaderCounters() private function getHeaderCounters()
{ {
$headerCounters = []; $headerCounters = [];
$artworkCountNumber = Cache::remember('artworkCountNumber', 30, function() { $artworkCountNumber = Cache::remember('artworkCountNumber', 10, function() {
return Artwork::whereNotNull('approved_by')->count(); return Artwork::all()->count();
}); });
$artistCountNumber = Cache::remember('artistCountNumber', 30, function() { $artistCountNumber = Cache::remember('artistCountNumber', 10, function() {
return Artist::all()->count(); return Artist::all()->count();
}); });
$episodeCountNumber = Cache::remember('episodeCountNumber', 30, function() { $episodeCountNumber = Cache::remember('episodeCountNumber', 10, function() {
return Episode::all()->count(); return Episode::all()->count();
}); });
$headerCounters['Artworks'] = $this->shortNumberCount($artworkCountNumber); $headerCounters['Artworks'] = $this->shortNumberCount($artworkCountNumber);
@@ -132,56 +99,7 @@ class PageController extends Controller
return $response; return $response;
} }
private function leaderboardByYear($year) {
$leaderboard = cache()->remember('leaderboardForYear' . $year, 30, function() {
$startDate = Carbon::createFromFormat('Y-m-d', $year . '-01-01')->startOfDay()->format('Y-m-d');
$endDate = $startDate->copy()->endOfYear()->format('Y-m-d');
$leaderboard = DB::table('episodes')
->join('artworks', 'artworks.id', '=', 'episodes.artwork_id')
->join('artists', 'artists.id', '=', 'artworks.artist_id')
->select([
DB::raw('artists.id as artistId'),
DB::raw('artists.name as artistName'),
DB::raw('count(artworks.id) as artworkCount')
])
->where('episodes.published', 1)
->where('episodes.episode_date', '>=', $startDate)
->where('episodes.episode_date', '<=', $endDate)
->groupBy('artistId')
->orderByDesc('artworkCount')
->limit(50)
->get();
$leaderboard = $this->addArtistModelToLeaderboard($leaderboard);
return $leaderboard;
});
return $leaderboard;
}
private function leaderboardTwelveMonths() { private function leaderboardTwelveMonths() {
$leaderboard = cache()->remember('leaderboardTwelveMonths', 30, function() {
$endDate = now()->endOfDay()->subYear()->format('Y-m-d');
$leaderboard = DB::table('episodes')
->join('artworks', 'artworks.id', '=', 'episodes.artwork_id')
->join('artists', 'artists.id', '=', 'artworks.artist_id')
->select([
DB::raw('artists.id as artistId'),
DB::raw('artists.name as artistName'),
DB::raw('count(artworks.id) as artworkCount')
])
->where('episodes.published', 1)
->where('episodes.episode_date', '>=', $endDate)
->groupBy('artistId')
->orderByDesc('artworkCount')
->limit(50)
->get();
$leaderboard = $this->addArtistModelToLeaderboard($leaderboard);
return $leaderboard;
});
return $leaderboard;
}
private function leaderboardTwelveMonthsLanding() {
$leaderboard = cache()->remember('leaderboardTwelveMonthsLanding', 30, function() {
$endDate = now()->endOfDay()->subYear()->format('Y-m-d'); $endDate = now()->endOfDay()->subYear()->format('Y-m-d');
$leaderboard = DB::table('episodes') $leaderboard = DB::table('episodes')
->join('artworks', 'artworks.id', '=', 'episodes.artwork_id') ->join('artworks', 'artworks.id', '=', 'episodes.artwork_id')
@@ -199,75 +117,6 @@ class PageController extends Controller
->get(); ->get();
$leaderboard = $this->addArtistModelToLeaderboard($leaderboard); $leaderboard = $this->addArtistModelToLeaderboard($leaderboard);
return $leaderboard; return $leaderboard;
});
return $leaderboard;
}
private function leaderboardAllTime() {
$leaderboard = cache()->remember('leaderboardAllTime', 30, function() {
$leaderboard = DB::table('episodes')
->join('artworks', 'artworks.id', '=', 'episodes.artwork_id')
->join('artists', 'artists.id', '=', 'artworks.artist_id')
->select([
DB::raw('artists.id as artistId'),
DB::raw('artists.name as artistName'),
DB::raw('count(artworks.id) as artworkCount')
])
->where('episodes.published', 1)
->groupBy('artistId')
->orderByDesc('artworkCount')
->limit(100)
->get();
$leaderboard = $this->addArtistModelToLeaderboard($leaderboard);
return $leaderboard;
});
return $leaderboard;
}
private function leaderboardRollingSixMonths() {
$leaderboard = cache()->remember('leaderboardRollingSixMonth', 30, function() {
$endDate = now()->endOfDay()->subMonths(6)->format('Y-m-d');
$leaderboard = DB::table('episodes')
->join('artworks', 'artworks.id', '=', 'episodes.artwork_id')
->join('artists', 'artists.id', '=', 'artworks.artist_id')
->select([
DB::raw('artists.id as artistId'),
DB::raw('artists.name as artistName'),
DB::raw('count(artworks.id) as artworkCount')
])
->where('episodes.published', 1)
->where('episodes.episode_date', '>=', $endDate)
->groupBy('artistId')
->orderByDesc('artworkCount')
->limit(50)
->get();
$leaderboard = $this->addArtistModelToLeaderboard($leaderboard);
return $leaderboard;
});
return $leaderboard;
}
private function leaderboardRollingNinetyDays() {
$leaderboard = cache()->remember('leaderboardNinetyDays', 30, function() {
$endDate = now()->endOfDay()->subDays(90)->format('Y-m-d');
$leaderboard = DB::table('episodes')
->join('artworks', 'artworks.id', '=', 'episodes.artwork_id')
->join('artists', 'artists.id', '=', 'artworks.artist_id')
->select([
DB::raw('artists.id as artistId'),
DB::raw('artists.name as artistName'),
DB::raw('count(artworks.id) as artworkCount')
])
->where('episodes.published', 1)
->where('episodes.episode_date', '>=', $endDate)
->groupBy('artistId')
->orderByDesc('artworkCount')
->limit(50)
->get();
$leaderboard = $this->addArtistModelToLeaderboard($leaderboard);
return $leaderboard;
});
return $leaderboard;
} }
private function addArtistModelToLeaderboard($leaderboard) { private function addArtistModelToLeaderboard($leaderboard) {

View File

@@ -3,34 +3,8 @@
namespace App\Http\Controllers; namespace App\Http\Controllers;
use Illuminate\Http\Request; use Illuminate\Http\Request;
use Illuminate\Support\Facades\Cache;
use Illuminate\Support\Facades\DB;
use App\Models\Podcast;
use App\Models\Artworks;
use App\Models\Episode;
class PodcastController extends Controller class PodcastController extends Controller
{ {
public function show(Request $request, $slug) //
{
$user = auth()->user();
$podcast = Podcast::where('slug', $slug)
->where('published', true)
->firstOrFail();
$episodes = Episode::where('published', true)
->whereNotNull('artwork_id')
->with('artwork')
->with('artworks')
->where('podcast_id', $podcast->id)
->orderBy('episode_number', 'desc')->paginate(100);
$podcasts = Podcast::where('published', true)->with('episodes')->get();
return view('podcasts.podcast', [
'user' => $user,
'pageTitle' => $podcast->name,
'podcast' => $podcast,
'episodes' => $episodes,
'podcasts' => $podcasts,
]);
}
} }

View File

@@ -18,8 +18,6 @@ class ProfileController extends Controller
{ {
return view('profile.edit', [ return view('profile.edit', [
'user' => $request->user(), 'user' => $request->user(),
'artist' => $request->user()->artists->first(),
'avatar' => $request->user()->artists->first()->avatar,
]); ]);
} }

View File

@@ -12,7 +12,7 @@ class TrustProxies extends Middleware
* *
* @var array<int, string>|string|null * @var array<int, string>|string|null
*/ */
protected $proxies = '*'; protected $proxies;
/** /**
* The headers that should be used to detect proxies. * The headers that should be used to detect proxies.

View File

@@ -2,14 +2,12 @@
namespace App\Http\Requests\Auth; namespace App\Http\Requests\Auth;
use App\Models\User;
use Illuminate\Auth\Events\Lockout; use Illuminate\Auth\Events\Lockout;
use Illuminate\Foundation\Http\FormRequest; use Illuminate\Foundation\Http\FormRequest;
use Illuminate\Support\Facades\Auth; use Illuminate\Support\Facades\Auth;
use Illuminate\Support\Facades\RateLimiter; use Illuminate\Support\Facades\RateLimiter;
use Illuminate\Support\Str; use Illuminate\Support\Str;
use Illuminate\Validation\ValidationException; use Illuminate\Validation\ValidationException;
use Illuminate\Support\Facades\Hash;
class LoginRequest extends FormRequest class LoginRequest extends FormRequest
{ {
@@ -29,7 +27,7 @@ class LoginRequest extends FormRequest
public function rules(): array public function rules(): array
{ {
return [ return [
'login' => ['required', 'string'], 'email' => ['required', 'string', 'email'],
'password' => ['required', 'string'], 'password' => ['required', 'string'],
]; ];
} }
@@ -43,8 +41,6 @@ class LoginRequest extends FormRequest
{ {
$this->ensureIsNotRateLimited(); $this->ensureIsNotRateLimited();
/*
if (! Auth::attempt($this->only('email', 'password'), $this->boolean('remember'))) { if (! Auth::attempt($this->only('email', 'password'), $this->boolean('remember'))) {
RateLimiter::hit($this->throttleKey()); RateLimiter::hit($this->throttleKey());
@@ -52,20 +48,7 @@ class LoginRequest extends FormRequest
'email' => trans('auth.failed'), 'email' => trans('auth.failed'),
]); ]);
} }
*/
$user = User::where('email', $this->login)
->orWhere('name', $this->login)
->first();
if (!$user || !Hash::check($this->password, $user->password)) {
RateLimiter::hit($this->throttleKey());
throw ValidationException::withMessages([
'login' => __('auth.failed'),
]);
}
Auth::login($user, $this->boolean('remember'));
RateLimiter::clear($this->throttleKey()); RateLimiter::clear($this->throttleKey());
} }

View File

@@ -1,48 +0,0 @@
<?php
namespace App\Livewire\Artist;
use Livewire\Component;
use Livewire\WithFileUploads;
use Spatie\Image\Image;
use Intervention\Image\Facades\Image as InterventionImage;
use ImageOptimizer;
use Illuminate\Support\Facades\Storage;
use Illuminate\Validation\Rules\File;
use Illuminate\Http\RedirectResponse;
use Livewire\Attributes\Validate;
class Avatar extends Component
{
use WithFileUploads;
public $avatar;
public $x;
public $y;
public $width;
public $height;
public function render()
{
return view('livewire.artist.avatar');
}
public function save()
{
$disk = Storage::disk('static');
$avatar = $this->avatar->store('avatars', 'static');
Image::load($disk->path($avatar))
->manualCrop($this->width, $this->height, $this->x, $this->y)
->save();
Image::load($disk->path($avatar))
->width(350)
->height(350)
->save();
ImageOptimizer::optimize($disk->path($avatar));
auth()->user()->artists()->first()->update(compact('avatar'));
$this->avatar = null;
return redirect(request()->header('Referer'));
}
}

View File

@@ -1,48 +0,0 @@
<?php
namespace App\Livewire\Artist;
use Livewire\Component;
use Livewire\WithFileUploads;
use Spatie\Image\Image;
use Intervention\Image\Facades\Image as InterventionImage;
use ImageOptimizer;
use Illuminate\Support\Facades\Storage;
use Illuminate\Validation\Rules\File;
use Illuminate\Http\RedirectResponse;
use Livewire\Attributes\Validate;
class Header extends Component
{
use WithFileUploads;
public $header;
public $x;
public $y;
public $width;
public $height;
public function render()
{
return view('livewire.artist.header');
}
public function save()
{
$disk = Storage::disk('static');
$header = $this->header->store('artist_headers', 'static');
Image::load($disk->path($header))
->manualCrop($this->width, $this->height, $this->x, $this->y)
->save();
Image::load($disk->path($header))
->width(270)
->height(185)
->save();
ImageOptimizer::optimize($disk->path($header));
auth()->user()->artists()->first()->update(compact('header'));
$this->header = null;
return redirect(request()->header('Referer'));
}
}

View File

@@ -9,12 +9,12 @@ class Themeswitch extends Component
public function light() public function light()
{ {
session()->put('preferred_theme', 'light'); session(['preferred_theme' => 'light']);
} }
public function dark() public function dark()
{ {
session()->put('preferred_theme', 'dark'); session(['preferred_theme' => 'dark']);
} }
public function render() public function render()

View File

@@ -22,25 +22,9 @@ class Artist extends Model
'deleted_at' => 'datetime', 'deleted_at' => 'datetime',
]; ];
protected $fillable = [
'user_id',
'name',
'slug',
'avatar',
'header',
'location',
'alby',
'naasocial',
'website',
'bio',
'created_at',
'updated_at',
'deleted_at',
];
public function user() public function user()
{ {
return $this->belongsTo(User::class); return $this->belongs_to(User::class);
} }
public function artworks() public function artworks()
@@ -63,20 +47,4 @@ class Artist extends Model
return $this->hasMany(Wallet::class); return $this->hasMany(Wallet::class);
} }
public function avatar()
{
if (!$this->avatar) {
return config('app.static_asset_url') . '/avatars/default_avatar_male.svg';
}
return config('app.static_asset_url') . '/' . $this->avatar;
}
public function header()
{
if (!$this->header) {
return config('app.static_asset_url') . '/artist_headers/default_artist_banner.png';
}
return config('app.static_asset_url') . '/' . $this->header;
}
} }

View File

@@ -31,11 +31,6 @@ class Episode extends Model
return $this->hasOne(Artwork::class, 'id', 'artwork_id'); return $this->hasOne(Artwork::class, 'id', 'artwork_id');
} }
public function artworks()
{
return $this->hasMany(Artwork::class);
}
public function artist() public function artist()
{ {
return $this->hasOneThrough(Artist::class, Artwork::class); return $this->hasOneThrough(Artist::class, Artwork::class);

View File

@@ -65,9 +65,9 @@ class User extends Authenticatable
return $this->hasManyThrough(Artwork::class, Artist::class); return $this->hasManyThrough(Artwork::class, Artist::class);
} }
public function selectedForEpisodes() public function episodes()
{ {
return $this->artists()->first()->episodes; return $this->hasManyThrough(Episode::class, Artwork::class);
} }
public function wallets() public function wallets()

View File

@@ -1,34 +0,0 @@
<?php
namespace App\Policies;
use App\Models\User;
use App\Models\Artwork;
class ArtworkPolicy
{
/**
* Create a new policy instance.
*/
public function __construct()
{
//
}
public function viewAny(?User $user): bool
{
return true;
}
public function approve(User $user): bool
{
if ($user->id == 4) {
return true;
}
$selectedCount = $user->selectedForEpisodes()->count();
if ($selectedCount > 5) {
return true;
}
return false;
}
}

View File

@@ -4,8 +4,6 @@ namespace App\Providers;
// use Illuminate\Support\Facades\Gate; // use Illuminate\Support\Facades\Gate;
use Illuminate\Foundation\Support\Providers\AuthServiceProvider as ServiceProvider; use Illuminate\Foundation\Support\Providers\AuthServiceProvider as ServiceProvider;
use App\Policies\ArtworkPolicy;
use App\Models\Artwork;
class AuthServiceProvider extends ServiceProvider class AuthServiceProvider extends ServiceProvider
{ {
@@ -15,7 +13,7 @@ class AuthServiceProvider extends ServiceProvider
* @var array<class-string, class-string> * @var array<class-string, class-string>
*/ */
protected $policies = [ protected $policies = [
Artwork::class => ArtworkPolicy::class, //
]; ];
/** /**

0
site/artisan Normal file → Executable file
View File

View File

@@ -1,3 +0,0 @@
#!/bin/bash
yarn build
mv ./public/build/.vite/manifest.json ./public/build/manifest.json

View File

@@ -19,8 +19,6 @@
"laravel/tinker": "^2.8", "laravel/tinker": "^2.8",
"livewire/livewire": "^3.2", "livewire/livewire": "^3.2",
"mckenziearts/blade-untitledui-icons": "^1.2", "mckenziearts/blade-untitledui-icons": "^1.2",
"predis/predis": "^2.2",
"spatie/image": "^2.2",
"spatie/laravel-image-optimizer": "^1.7" "spatie/laravel-image-optimizer": "^1.7"
}, },
"require-dev": { "require-dev": {

838
site/composer.lock generated

File diff suppressed because it is too large Load Diff

View File

@@ -1,159 +0,0 @@
<?php
return [
/*
|---------------------------------------------------------------------------
| Class Namespace
|---------------------------------------------------------------------------
|
| This value sets the root class namespace for Livewire component classes in
| your application. This value will change where component auto-discovery
| finds components. It's also referenced by the file creation commands.
|
*/
'class_namespace' => 'App\\Livewire',
/*
|---------------------------------------------------------------------------
| View Path
|---------------------------------------------------------------------------
|
| This value is used to specify where Livewire component Blade templates are
| stored when running file creation commands like `artisan make:livewire`.
| It is also used if you choose to omit a component's render() method.
|
*/
'view_path' => resource_path('views/livewire'),
/*
|---------------------------------------------------------------------------
| Layout
|---------------------------------------------------------------------------
| The view that will be used as the layout when rendering a single component
| as an entire page via `Route::get('/post/create', CreatePost::class);`.
| In this case, the view returned by CreatePost will render into $slot.
|
*/
'layout' => 'components.layouts.app',
/*
|---------------------------------------------------------------------------
| Lazy Loading Placeholder
|---------------------------------------------------------------------------
| Livewire allows you to lazy load components that would otherwise slow down
| the initial page load. Every component can have a custom placeholder or
| you can define the default placeholder view for all components below.
|
*/
'lazy_placeholder' => null,
/*
|---------------------------------------------------------------------------
| Temporary File Uploads
|---------------------------------------------------------------------------
|
| Livewire handles file uploads by storing uploads in a temporary directory
| before the file is stored permanently. All file uploads are directed to
| a global endpoint for temporary storage. You may configure this below:
|
*/
'temporary_file_upload' => [
'disk' => 'local', // Example: 'local', 's3' | Default: 'default'
'rules' => null, // Example: ['file', 'mimes:png,jpg'] | Default: ['required', 'file', 'max:12288'] (12MB)
'directory' => 'tmp', // Example: 'tmp' | Default: 'livewire-tmp'
'middleware' => null, // Example: 'throttle:5,1' | Default: 'throttle:60,1'
'preview_mimes' => [ // Supported file types for temporary pre-signed file URLs...
'png', 'gif', 'bmp', 'svg', 'wav', 'mp4',
'mov', 'avi', 'wmv', 'mp3', 'm4a',
'jpg', 'jpeg', 'mpga', 'webp', 'wma',
],
'max_upload_time' => 5, // Max duration (in minutes) before an upload is invalidated...
],
/*
|---------------------------------------------------------------------------
| Render On Redirect
|---------------------------------------------------------------------------
|
| This value determines if Livewire will run a component's `render()` method
| after a redirect has been triggered using something like `redirect(...)`
| Setting this to true will render the view once more before redirecting
|
*/
'render_on_redirect' => false,
/*
|---------------------------------------------------------------------------
| Eloquent Model Binding
|---------------------------------------------------------------------------
|
| Previous versions of Livewire supported binding directly to eloquent model
| properties using wire:model by default. However, this behavior has been
| deemed too "magical" and has therefore been put under a feature flag.
|
*/
'legacy_model_binding' => false,
/*
|---------------------------------------------------------------------------
| Auto-inject Frontend Assets
|---------------------------------------------------------------------------
|
| By default, Livewire automatically injects its JavaScript and CSS into the
| <head> and <body> of pages containing Livewire components. By disabling
| this behavior, you need to use @livewireStyles and @livewireScripts.
|
*/
'inject_assets' => true,
/*
|---------------------------------------------------------------------------
| Navigate (SPA mode)
|---------------------------------------------------------------------------
|
| By adding `wire:navigate` to links in your Livewire application, Livewire
| will prevent the default link handling and instead request those pages
| via AJAX, creating an SPA-like effect. Configure this behavior here.
|
*/
'navigate' => [
'show_progress_bar' => true,
'progress_bar_color' => '#2299dd',
],
/*
|---------------------------------------------------------------------------
| HTML Morph Markers
|---------------------------------------------------------------------------
|
| Livewire intelligently "morphs" existing HTML into the newly rendered HTML
| after each update. To make this process more reliable, Livewire injects
| "markers" into the rendered Blade surrounding @if, @class & @foreach.
|
*/
'inject_morph_markers' => true,
/*
|---------------------------------------------------------------------------
| Pagination Theme
|---------------------------------------------------------------------------
|
| When enabling Livewire's pagination feature by using the `WithPagination`
| trait, Livewire will use Tailwind templates to render pagination views
| on the page. If you want Bootstrap CSS, you can specify: "bootstrap"
|
*/
'pagination_theme' => 'bootstrap',
];

View File

@@ -5,7 +5,6 @@ namespace Database\Factories;
use App\Models\Artist; use App\Models\Artist;
use App\Models\User; use App\Models\User;
use Illuminate\Database\Eloquent\Factories\Factory; use Illuminate\Database\Eloquent\Factories\Factory;
use Illuminate\Support\Facades\Str;
class ArtistFactory extends Factory class ArtistFactory extends Factory
{ {
@@ -23,17 +22,12 @@ class ArtistFactory extends Factory
*/ */
public function definition() public function definition()
{ {
$name = fake()->name();
$slug = Str::slug(strtolower(trim($name)));
return [ return [
'user_id' => User::factory(), 'user_id' => User::factory(),
'name' => $name, 'name' => fake()->name(),
'slug' => $slug,
'avatar' => fake()->imageUrl(512, 512), 'avatar' => fake()->imageUrl(512, 512),
'header' => fake()->imageUrl(270, 185), 'header' => fake()->imageUrl(270, 185),
'location' => fake()->city() . ', ' . fake()->state(), 'location' => fake()->city() . ', ' . fake()->state(),
'alby' => null,
'naasocial' => null,
'website' => rand(0, 1) ? fake()->url : null, 'website' => rand(0, 1) ? fake()->url : null,
'bio' => fake()->paragraphs(rand(1, 3), true), 'bio' => fake()->paragraphs(rand(1, 3), true),
]; ];

View File

@@ -1,28 +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::table('artists', function (Blueprint $table) {
$table->string('slug')->after('name');
});
}
/**
* Reverse the migrations.
*/
public function down(): void
{
Schema::table('artists', function (Blueprint $table) {
$table->dropColumn('slug');
});
}
};

View File

@@ -1,34 +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::table('artworks', function (Blueprint $table) {
$table->index('podcast_id');
$table->index('artist_id');
$table->index('episode_id');
$table->index('legacy_id');
});
}
/**
* Reverse the migrations.
*/
public function down(): void
{
Schema::table('artworks', function (Blueprint $table) {
$table->dropIndex('podcast_id');
$table->dropIndex('artist_id');
$table->dropIndex('episode_id');
$table->dropIndex('legacy_id');
});
}
};

View File

@@ -1,28 +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::table('artists', function (Blueprint $table) {
$table->index('user_id');
});
}
/**
* Reverse the migrations.
*/
public function down(): void
{
Schema::table('artists', function (Blueprint $table) {
$table->dropIndex('user_id');
});
}
};

View File

@@ -1,28 +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::table('podcasts', function (Blueprint $table) {
$table->index('published');
});
}
/**
* Reverse the migrations.
*/
public function down(): void
{
Schema::table('podcasts', function (Blueprint $table) {
$table->dropIndex('published');
});
}
};

View File

@@ -1,34 +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::table('episodes', function (Blueprint $table) {
$table->index('podcast_id');
$table->index('artwork_id');
$table->index('episode_date');
$table->index('published');
});
}
/**
* Reverse the migrations.
*/
public function down(): void
{
Schema::table('episodes', function (Blueprint $table) {
$table->dropIndex('podcast_id');
$table->dropIndex('artwork_id');
$table->dropIndex('episode_date');
$table->dropIndex('published');
});
}
};

View File

@@ -1,28 +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::table('users', function (Blueprint $table) {
$table->unique('name');
});
}
/**
* Reverse the migrations.
*/
public function down(): void
{
Schema::table('users', function (Blueprint $table) {
$table->dropUnique('name');
});
}
};

View File

@@ -1,30 +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::table('artists', function (Blueprint $table) {
$table->string('alby')->nullable()->after('location');
$table->string('nasocial')->nullable()->after('location');
});
}
/**
* Reverse the migrations.
*/
public function down(): void
{
Schema::table('artists', function (Blueprint $table) {
$table->dropColumn('alby');
$table->dropColumn('nasocial');
});
}
};

View File

@@ -14,14 +14,12 @@
"postcss": "^8.4.6", "postcss": "^8.4.6",
"sass": "^1.63.6", "sass": "^1.63.6",
"tailwindcss": "^3.1.0", "tailwindcss": "^3.1.0",
"vite": "^5.0.9", "vite": "^4.0.0",
"wolfy87-eventemitter": "4.2.0" "wolfy87-eventemitter": "4.2.0"
}, },
"version": "0.0.0", "version": "0.0.0",
"dependencies": { "dependencies": {
"aos": "^3.0.0-beta.6", "aos": "^3.0.0-beta.6",
"cropperjs": "^1.6.1",
"guillotine": "^1.3.1",
"isotope-layout": "^3.0.6", "isotope-layout": "^3.0.6",
"jquery": "^3.7.0", "jquery": "^3.7.0",
"jquery-nice-select": "^1.1.0", "jquery-nice-select": "^1.1.0",

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@@ -1,3 +0,0 @@
<?php
die('nope');
phpinfo();

View File

@@ -1,2 +1,2 @@
User-agent: * User-agent: *
Disallow: /profile Disallow: /

Binary file not shown.

Before

Width:  |  Height:  |  Size: 15 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 12 KiB

View File

@@ -70,9 +70,7 @@ Modified by : Paul Couture (bonked@noagendaartgenerator.com)
@import "components/signup"; @import "components/signup";
@import "components/not-found"; @import "components/not-found";
@import "components/footer"; @import "components/footer";
@import "components/auth";
@import "components/nft-gallery"; @import "components/nft-gallery";
@import "./../css/vendor/nice-select.css"; @import "./../css/vendor/nice-select.css";
@import "components/light-version"; @import "components/light-version";
@import "components/pagination"; @import "components/pagination";

View File

@@ -1,32 +0,0 @@
.authbox {
background: $bg-color-1;
padding: 15px;
border-radius: 10px;
transition: 0.3s;
border: 1px solid $bg-color-1;
&.button[type=submit] {
background: $color-primary;
}
}
.theme-light {
.authbox {
background: $body-bg-light;
border-color: darken($body-bg-light, 10%);
}
}
img.avatar_img {
max-width: 100%;
height: auto;
}
label[for=avatar] {
img {
&:hover {
cursor:pointer;
}
}
}
input[name=avatar] {
&.sr-only {
display: none;
}
}

View File

@@ -143,11 +143,3 @@
padding-left: 0; padding-left: 0;
} }
} }
div.alert {
&.alert-warning {
strong {
color: #664d03;
}
}
}

View File

@@ -121,16 +121,6 @@
} }
} }
.slider-activation-banner-4 {
.explore-style-one {
&.selected {
background: $bg-color-1;
border-color: $bg-color-1;
}
}
}
.reaction-btn { .reaction-btn {
border: none; border: none;
font-size: 14px; font-size: 14px;

View File

@@ -256,22 +256,12 @@ body {
} }
} }
.explore-style-one { .explore-style-one {
border: 1px solid $border-color; border: 1px solid $border-color-light;
&.selected { &.selected {
background: $bg-color-selected-light; background: $bg-color-selected-light;
border-color: $color-primary;
} }
&:hover { &:hover {
border: 1px solid $color-error; border: 1px solid $color-error;
border-color: $color-primary-2;
}
}
.slider-activation-banner-4 {
.explore-style-one {
&.selected {
border-color: $body-bg-light2;
background: $body-bg-light;
}
} }
} }
.explore-style-two, .explore-style-two,

View File

@@ -16,9 +16,9 @@ $body-bg-light2: #efefef;
$body-color-light: #65676b; $body-color-light: #65676b;
$light-color-primary: lighten($color-primary, 30%); $light-color-primary: lighten($color-primary, 30%);
$light-color-primary-2: lighten($color-primary-2, 30%); $light-color-primary-2: lighten($color-primary-2, 30%);
$selected-border: $color-primary; $selected-border: #eae156;
$bg-color-selected: linear-gradient(135deg, $bg-color-1 0%, #854286 100%); $bg-color-selected: linear-gradient(97.3deg, #7f830b 0%, #be8500 100%);
$bg-color-selected-light: linear-gradient(135deg, #fee0fe 0%, #e1bee1 100%); $bg-color-selected-light: linear-gradient(97.3deg, #f8fc9c 0%, #fbe4a1 100%);
// font family // font family
$font-1: "Poppins", sans-serif; $font-1: "Poppins", sans-serif;

View File

@@ -1,93 +0,0 @@
@extends('layouts.master')
@section('page-title', 'Approve Artwork')
@section('meta_description', 'Approve Artwork to have it published for non-priviledged eyeballs to view.')
@section('page-top')
<section class="inner-page-banner bg-2 bg-image">
<div class="container">
<div class="inner text-center">
<h1 class="title">Artwork Pending Approval</h1>
<nav class="mt-4">
<ol class="breadcrumb justify-content-center">
<li class="breadcrumb-item"><a href="/">Home</a></li>
<li class="breadcrumb-item active"><a href="/artworks">Explore Artwork</a></li>
</ol>
</nav>
</div>
</div>
</section>
@endsection
@section('page-content')
<section class="pt-120 pb-90 masonary-wrapper-activation">
<div class="container">
<div class="row">
{{ $artworks->links() }}
</div>
</div>
<div class="container">
<div class="d-flex-between flex-wrap">
<div
class="button-group default-tab-list isotop-filter flex-wrap filters-button-group d-flex justify-content-start justify-content-lg-start mb-6 ">
<button data-filter="*" class="is-checked"><span class="filter-text">View All</span></button>
@foreach ($podcasts as $podcast)
<button data-filter=".podcast--{{ $podcast->slug }}"><span class="filter-text">{{ $podcast->name }}</span></button>
@endforeach
</div>
</div>
<div class="grid-filter-wrapper masonry-list">
<div class="resizer"></div>
@foreach ($artworks as $artwork)
@php
$thisArtwork = $artwork;
$thisPodcast = $artwork->podcast;
$thisEpisode = $artwork->episode;
@endphp
<div class="grid-item podcast--{{ $artwork->podcast->slug }}">
<div class="explore-style-one">
<div class="thumb">
<img src="{{ config('app.static_asset_url') . '/thumbnails/' . $thisArtwork->filename ?? '#'}}"
alt="{{ $thisArtwork->title }} by {{ $thisArtwork->artist->name }}">
</div>
<div class="content">
<div class="header d-flex-between pt-4 pb-1">
<h3 class="title">&ldquo;{{ $thisArtwork->title }}&rdquo;</h3>
</div>
{{-- End .header --}}
<div class="product-owner py-1 d-flex-between">
<span class="bid-owner">Artwork By <br><strong><a
href="/artist/{{ $thisArtwork->artist->slug }}">{{ $thisArtwork->artist->name ?? 'Unknown' }}</a></strong></span>
<span class="profile-share d-flex-center"><a href="/artist/{{ $thisArtwork->artist->slug }}"
class="avatar" data-bs-toggle="tooltip"
data-bs-placement="top"
title="{{ $thisArtwork->artist->name }}">
<img class="avatar_img" src="{{ $thisArtwork->artist->avatar() }}"
alt="{{ $thisArtwork->artist->name }}"></a>
</span>
</div>
{{-- End .product-owner --}}
<div class="action-wrapper py-5 d-flex align-items-center justify-content-center">
<form action="/approve-artworks" method="POST" class="approve-artwork-form" name="approve-artwork-{{ $thisArtwork->id}}" enctype="multipart/form-data">
@csrf
<input name="artwork_id" type="hidden" value="{{ $thisArtwork->id }}">
<button type="submit" class="btn btn-gradient btn-medium justify-content-center"><span>Approve and Publish</span></button>
</form>
</div>
</div>
</div>
</div>
@endforeach
</div>
</div>
<div class="container">
<div class="row">
{{ $artworks->links() }}
</div>
</div>
</section>
@endsection

View File

@@ -1,17 +1,10 @@
@extends('layouts.master') @extends('layouts.master')
@section('meta_description', $artwork->description ?? 'Artwork by ' . $artwork->artist->name . ', "' . $artwork->title . '" for the podcast ' . $artwork->podcast->name . '.')
@section('meta_og_img', config('app.static_asset_url') . '/thumbnails/' . $artwork->filename)
@section('page-title', '"' . $artwork->title . '" by ' . $artwork->artist->name)
@section('page-top') @section('page-top')
<section class="inner-page-banner bg-2 bg-image"> <section class="inner-page-banner bg-2 bg-image">
<div class="container"> <div class="container">
<div class="inner text-center"> <div class="inner text-center">
<h1 class="title">Artwork for {{ $artwork->podcast->name }} <h1 class="title">Artwork for {{ $artwork->podcast->name }} {{ number_format($artwork->episode->episode_number + 0) }}</h1>
{{ number_format($artwork->episode->episode_number + 0) }}</h1>
<nav class="mt-4"> <nav class="mt-4">
<ol class="breadcrumb justify-content-center"> <ol class="breadcrumb justify-content-center">
<li class="breadcrumb-item"><a href="/">Home</a></li> <li class="breadcrumb-item"><a href="/">Home</a></li>
@@ -26,24 +19,11 @@
@section('page-content') @section('page-content')
<section class="product-details section-bg-separation-2 pt-120 pb-90"> <section class="product-details section-bg-separation-2 pt-120 pb-90">
<div class="container"> <div class="container">
@if (auth()->user() && $artwork->artist->id == auth()->user()->artists()->first()->id)
@if ($artwork->approved_by == null)
<div class="row">
<div class="col">
<div class="alert alert-warning">
<strong>Pending Approval</strong><br>
This artwork has been received by our server, but has not been approved and can only be viewed by you.
Another artist with approval authority will come along shortly and approve it, give them a few minutes.
</div>
</div>
</div>
@endif
@endif
<div class="row"> <div class="row">
<div class="col-xxl-6 mb-6"> <div class="col-xxl-6 mb-6">
<div class="explore-style-one"> <div class="explore-style-one">
<div class="thumb"><a href="{{ config('app.static_asset_url') }}/artworks/{{ $artwork->filename }}" <div class="thumb"><a href="http://{{ config('app.static_asset_url') }}/artworks/{{ $artwork->filename }}"
><img id="largeImage"src="{{ config('app.static_asset_url') }}/artworks/{{ $artwork->filename }}" ><img id="largeImage"src="http://{{ config('app.static_asset_url') }}/artworks/{{ $artwork->filename }}"
alt="{{ $artwork->title }} by {{ $artwork->artist->name }} for {{ $artwork->podcast->title }}"></a> alt="{{ $artwork->title }} by {{ $artwork->artist->name }} for {{ $artwork->podcast->title }}"></a>
</div> </div>
</div> </div>
@@ -54,57 +34,39 @@
<h4 class="mb-1">By {{ $artwork->artist->name }}</h4> <h4 class="mb-1">By {{ $artwork->artist->name }}</h4>
<p class="subtitle"> <p class="subtitle">
{{ $artwork->episode->artwork_id == $artwork->id ? 'Selected' : 'Submitted' }} for {{ $artwork->podcast->name }}<br> {{ $artwork->episode->artwork_id == $artwork->id ? 'Selected' : 'Submitted' }} for {{ $artwork->podcast->name }}<br>
Episode {{ number_format($artwork->episode->episode_number + 0) }} &middot; Episode {{ number_format($artwork->episode->episode_number + 0) }}, {{ $artwork->episode->episode_date->format('l, F j') }}<sup>{{ $artwork->episode->episode_date->format('S') }}</sup>, {{ $artwork->episode->episode_date->format('Y') }}
{{ $artwork->episode->episode_date->format('l, F j') }}<sup>{{ $artwork->episode->episode_date->format('S') }}</sup>,
{{ $artwork->episode->episode_date->format('Y') }}
</p> </p>
@if ($artwork->description) @if ($artwork->description)
<h4 class="mb-1">Description</h4> <h4 class="mb-1">Description</h4>
<p class="subtitle">{{ $artwork->description }}</p> <p class="subtitle">{{ $artwork->description }}</p>
@endif @endif
<div class="container"> <a href="http://{{ config('app.static_asset_url') }}/artworks/{{ $artwork->filename }}"
<div class="row"> class="btn btn-medium btn-gradient w-100 justify-content-center mt-5"><span><i
<div class="col"> class="ri-download-cloud-2-line"></i>
<a class="btn btn-medium btn-gradient w-100 justify-content-center mt-5" Download Full Scale Image
href="{{ config('app.static_asset_url') }}/artworks/{{ $artwork->filename }}"> </span></a>
<span>Download 3k px Image</span></a> <a href="http://{{ config('app.static_asset_url') }}/thumbnail/{{ $artwork->filename }}"
</div> class="btn btn-medium btn-gradient w-100 justify-content-center mt-5"><span><i
<div class="col"> class="ri-download-fill"></i>
<a class="btn btn-medium btn-gradient w-100 justify-content-center mt-5" Download 512px Square Thumbnail
href="{{ config('app.static_asset_url') }}/thumbnails/{{ $artwork->filename }}"> </span></a>
<span>Download 512 px Image</span></a> <a href="/artists/{{ $artwork->artist->id }}"
</div> class="btn btn-medium btn-gradient w-100 justify-content-center mt-5"><span><i
</div> class="ri-user-fill"></i>
<div class="row"> View Artist Profile
<div class="col"> </span></a>
@if ($artwork->episode->artwork) <a href="/episodes/{{ $artwork->episode->slug }}"
<a href="/podcast/{{ $artwork->episode->podcast->slug }}/episode/{{ $artwork->episode->slug }}"
class="btn btn-medium btn-gradient w-100 justify-content-center mt-5"><span><i class="btn btn-medium btn-gradient w-100 justify-content-center mt-5"><span><i
class="ri-headphone-fill"></i> class="ri-headphone-fill"></i>
View Episode View This Episode
</span></a> </span></a>
</div>
<div class="col">
@endif
<a href="/podcasts/{{ $artwork->podcast->slug }}" <a href="/podcasts/{{ $artwork->podcast->slug }}"
class="btn btn-medium btn-gradient w-100 justify-content-center mt-5"><span><i class="btn btn-medium btn-gradient w-100 justify-content-center mt-5"><span><i
class="ri-broadcast-line"></i> class="ri-broadcast-line"></i>
{{ $artwork->podcast->name }} Podcast View {{ $artwork->podcast->name }} Podcast
</span></a> </span></a>
</div> </div>
</div> </div>
<div class="row">
<div class="col">
<a href="/artist/{{ $artwork->artist->slug }}"
class="btn btn-medium btn-gradient w-100 justify-content-center mt-5"><span><i
class="ri-user-fill"></i>
View {{ $artwork->artist->name }}'s Artist Profile
</span></a>
</div>
</div>
</div>
</div>
</div>
</div> </div>
</div> </div>
</section> </section>

View File

@@ -1,72 +0,0 @@
<div class="explore-style-one {{ $thisEpisode->artwork_id == $thisArtwork->id ? 'selected' : '' }}">
<div class="thumb">
<a href="/artworks/{{ $thisArtwork->id }}"
data-bs-toggle="tooltip"
data-bs-placement="top"
title="View This Album Art">
<img src="{{ config('app.static_asset_url')
. '/thumbnails/'
. $thisArtwork->filename ?? '#'}}"
alt="{{ $thisArtwork->title }} by {{ $thisArtwork->artist->name }}">
</a>
</div>
{{-- End .thumb --}}
<div class="content">
<div class="header d-flex-between pt-4 pb-1">
<h3 class="title">
<a href="/artworks/{{ $thisArtwork->id }}">"{{ $thisArtwork->title }}"</a>
</h3>
<div class="more-dropdown "><i class="ri-more-fill" data-bs-toggle="dropdown"></i>
<ul class="dropdown-menu dropdown-menu-dark">
<li><a class="dropdown-item" href="/podcasts/{{ $thisPodcast->slug }}">View Podcast</a></li>
@if ($thisEpisode->published)
<li><a class="dropdown-item" href="/podcast/{{ $thisPodcast->slug }}/episode/{{ $thisEpisode->slug }}">View Episode</a></li>
@endif
<li>
<hr class="dropdown-divider">
</li>
<li><a class="dropdown-item" href="/artist/{{ $thisArtwork->artist->id }}">View Selected Artist</a></li>
</ul>
</div>
</div>
{{-- .header --}}
<div class="product-owner py-1 d-flex-between">
<span class="bid-owner">Artwork By <br><strong><a
href="/artist/{{ $thisArtwork->artist->slug }}">{{ $thisArtwork->artist->name ?? 'Unknown' }}</a></strong></span>
<span class="profile-share d-flex-center"><a href="/artist/{{ $thisArtwork->artist->slug }}"
class="avatar" data-bs-toggle="tooltip"
data-bs-placement="top"
title="{{ $thisArtwork->artist->name }}">
<img class="avatar_img" src="{{ $thisArtwork->artist->avatar() }}"
alt="{{ $thisArtwork->artist->name }}"></a>
</span>
</div>
{{-- End .product-owner --}}
<div class="action-wrapper py-1 d-flex-between">
<span class="bid-owner">
@if($thisArtwork->id == $thisEpisode->artwork_id)
Artwork Selected For
@else
Artwork Submitted For
@endif
<br>
@if ($thisPodcast->published)
<strong><a href="/podcasts/{{ $thisPodcast->slug }}">{{ $thisPodcast->name }}</a></strong>
@else
<strong>{{ $thisPodcast->name }}</strong>
@endif
<br>
@if ($thisEpisode->published)
<a href="/podcast/{{ $thisPodcast->slug }}/episode/{{ $thisEpisode->slug }}">Episode {{ number_format($thisEpisode->episode_number + 0) }}<br>
<em>{{ $thisEpisode->episode_date->format('D, M j') }}<sup>{{ $thisEpisode->episode_date->format('S') }}</sup>{{ $thisEpisode->episode_date->format(', Y') }}</em></a>
@else
Episode {{ number_format($thisEpisode->episode_number + 0) }}<br>
<em>{{ $thisEpisode->episode_date->format('D, M j') }}<sup>{{ $thisEpisode->episode_date->format('S') }}</sup>{{ $thisEpisode->episode_date->format(', Y') }}</em>
@endif
</span>
</div>
{{-- action-wrapper --}}
</div>
{{-- End .content --}}
</div>

View File

@@ -2,19 +2,23 @@
<div class="mb-4 text-sm text-gray-600 dark:text-gray-400"> <div class="mb-4 text-sm text-gray-600 dark:text-gray-400">
{{ __('Forgot your password? No problem. Just let us know your email address and we will email you a password reset link that will allow you to choose a new one.') }} {{ __('Forgot your password? No problem. Just let us know your email address and we will email you a password reset link that will allow you to choose a new one.') }}
</div> </div>
{{-- Session Status --}}
<!-- Session Status -->
<x-auth-session-status class="mb-4" :status="session('status')" /> <x-auth-session-status class="mb-4" :status="session('status')" />
<form method="POST" action="{{ route('password.email') }}"> <form method="POST" action="{{ route('password.email') }}">
@csrf @csrf
{{-- Email Address --}}
<!-- Email Address -->
<div> <div>
<x-input-label for="email" :value="__('Email')" /> <x-input-label for="email" :value="__('Email')" />
<x-text-input id="email" class="block mt-1 w-full" type="email" name="email" :value="old('email')" required autofocus /> <x-text-input id="email" class="block mt-1 w-full" type="email" name="email" :value="old('email')" required autofocus />
<x-input-error :messages="$errors->get('email')" class="mt-2" /> <x-input-error :messages="$errors->get('email')" class="mt-2" />
</div> </div>
<div class="flex items-center justify-end mt-4 mb-4">
<x-primary-button class="btn btn-gradient btn-medium"> <div class="flex items-center justify-end mt-4">
<span>{{ __('Email Password Reset Link') }}</span> <x-primary-button>
{{ __('Email Password Reset Link') }}
</x-primary-button> </x-primary-button>
</div> </div>
</form> </form>

View File

@@ -1,54 +1,47 @@
<x-guest-layout> <x-guest-layout>
<div class="row mt-4 gutter-0"> <!-- Session Status -->
<div class="col">
<div class="signin-content">
<div class="mb-6">
<h2 class="mb-2">Sign in with your existing account</h2>
<p class="normal">Welcome back! Please enter your credentials to sign in.</p>
<p class="normal">If you haven't logged in with your existing account since the upgrade, you need to reset your password using the forgot password link below.</p>
</div>
</div>
</div>
</div>
{{-- Session Status --}}
<x-auth-session-status class="mb-4" :status="session('status')" /> <x-auth-session-status class="mb-4" :status="session('status')" />
<form method="POST" action="{{ route('login') }}"> <form method="POST" action="{{ route('login') }}">
@csrf @csrf
{{-- Email Address --}}
<!-- Email Address -->
<div> <div>
<x-input-label for="login" :value="__('Email or Username')" /> <x-input-label for="email" :value="__('Email')" />
<x-text-input id="login" class="block mt-1 w-full" type="text" name="login" :value="old('login')" required autofocus autocomplete="username" /> <x-text-input id="email" class="block mt-1 w-full" type="email" name="email" :value="old('email')" required autofocus autocomplete="username" />
<x-input-error :messages="$errors->get('login')" class="mt-2" /> <x-input-error :messages="$errors->get('email')" class="mt-2" />
</div> </div>
{{-- Password --}}
<!-- Password -->
<div class="mt-4"> <div class="mt-4">
<x-input-label for="password" :value="__('Password')" /> <x-input-label for="password" :value="__('Password')" />
<x-text-input id="password" class="block mt-1 w-full" <x-text-input id="password" class="block mt-1 w-full"
type="password" type="password"
name="password" name="password"
required autocomplete="current-password" /> required autocomplete="current-password" />
<x-input-error :messages="$errors->get('password')" class="mt-2" /> <x-input-error :messages="$errors->get('password')" class="mt-2" />
</div> </div>
{{-- Remember Me --}}
<div class="block mt-4 form-check"> <!-- Remember Me -->
<input id="remember_me" type="checkbox" class="form-check-input" name="remember"> <div class="block mt-4">
<label for="remember_me" class="form-check-label"> <label for="remember_me" class="inline-flex items-center">
{{ __('Remember me') }} <input id="remember_me" type="checkbox" class="rounded dark:bg-gray-900 border-gray-300 dark:border-gray-700 text-indigo-600 shadow-sm focus:ring-indigo-500 dark:focus:ring-indigo-600 dark:focus:ring-offset-gray-800" name="remember">
<span class="ml-2 text-sm text-gray-600 dark:text-gray-400">{{ __('Remember me') }}</span>
</label> </label>
</div> </div>
<div class="d-flex justify-content-end mt-4 mb-4 text-end">
<div class="flex items-center justify-end mt-4">
@if (Route::has('password.request')) @if (Route::has('password.request'))
<a class="" href="{{ route('password.request') }}"> <a class="underline text-sm text-gray-600 dark:text-gray-400 hover:text-gray-900 dark:hover:text-gray-100 rounded-md focus:outline-none focus:ring-2 focus:ring-offset-2 focus:ring-indigo-500 dark:focus:ring-offset-gray-800" href="{{ route('password.request') }}">
{{ __('Forgot your password?') }} {{ __('Forgot your password?') }}
</a> </a>
@endif @endif
<x-primary-button class="ml-3 btn btn-gradient" style="background:#ff512f;">
<span>{{ __('Log in') }}</span> <x-primary-button class="ml-3">
{{ __('Log in') }}
</x-primary-button> </x-primary-button>
</div> </div>
</form> </form>
<hr class="mb-4">
<div class="">
Not registered yet? <a href="/register" class="">Register Now</a>
</div>
</x-guest-layout> </x-guest-layout>

View File

@@ -4,7 +4,7 @@
<!-- Name --> <!-- Name -->
<div> <div>
<x-input-label for="name" :value="__('Display Name')" /> <x-input-label for="name" :value="__('Name')" />
<x-text-input id="name" class="block mt-1 w-full" type="text" name="name" :value="old('name')" required autofocus autocomplete="name" /> <x-text-input id="name" class="block mt-1 w-full" type="text" name="name" :value="old('name')" required autofocus autocomplete="name" />
<x-input-error :messages="$errors->get('name')" class="mt-2" /> <x-input-error :messages="$errors->get('name')" class="mt-2" />
</div> </div>
@@ -44,8 +44,8 @@
{{ __('Already registered?') }} {{ __('Already registered?') }}
</a> </a>
<x-primary-button class="ml-4 btn btn-gradient" style="background:#ff512f;"> <x-primary-button class="ml-4">
<span>{{ __('Register') }}</span> {{ __('Register') }}
</x-primary-button> </x-primary-button>
</div> </div>
</form> </form>

View File

@@ -1,3 +1,3 @@
<svg viewBox="0 0 311.87 279.03" xmlns="http://www.w3.org/2000/svg" {{ $attributes }}> <svg viewBox="0 0 316 316" xmlns="http://www.w3.org/2000/svg" {{ $attributes }}>
<path d="m132.89,113.34c-3.83-5-6.11-11.23-6.15-17.98-.06-10.67,5.66-20.22,14.2-25.61,5.64-17.37,13.21-36.47,17.32-46.56,1.72-4.19,6.12-6.62,10.59-5.84.59.1,1.19.21,1.79.31,5.52.96,9.62,5.64,9.85,11.22.44,11.29,1,30.69.43,48,4.15,5.4,6.35,12.03,6.07,18.44.03,10.37-5.2,19.5-13.18,24.88-7.5,22.62-19.69,48.42-19.69,48.42l-19.04-3.4s-2.75-28.16-2.2-51.9Zm-93.56,76.84C-13.52,138.26-12.77,51.21,39.54.03c6.27,6.36,12.53,12.71,18.88,19.15-20.29,21.04-31.21,46.42-31.21,76.04,0,29.54,10.86,54.87,31.33,76.16-6.36,6.23-12.73,12.46-19.22,18.81ZM253.32,19.02c6.34-6.36,12.64-12.69,18.95-19.02,53.73,52.17,51.88,140.86,0,190.36-6.29-6.24-12.58-12.49-19.02-18.87,20.54-21.26,31.44-46.66,31.45-76.24,0-29.61-10.89-55.02-31.38-76.22Zm-162.96,120.8c-6.4,6.04-12.69,11.97-18.98,17.91-33.28-32.01-35.51-90.23.53-125.65.27.2.58.38.83.62,5.87,5.87,11.73,11.75,17.75,17.79-11.86,12.38-18.31,27.1-18.41,44.33-.11,17.26,6.15,32.07,18.28,45ZM221.64,50.62c6.21-6.21,12.31-12.32,18.41-18.42,34.65,33.53,35.13,91.68-.02,126.08-6.23-6.05-12.47-12.1-18.7-18.15,24.51-25.18,24.65-64.55.31-89.51Zm-12.58,11.55c15.08,16.75,16.66,46.4.82,65.1-3.47-3.37-6.98-6.71-10.35-10.19-.3-.31.06-1.58.44-2.19,3.76-5.96,5.68-12.48,5.74-19.48.06-7.31-1.92-14.13-6-20.24-1.02-1.52-.97-2.47.39-3.78,3.08-2.96,5.97-6.12,8.96-9.21Zm-107.03,65.2c-15.79-19.15-14.21-48.23.38-64.8,3.56,3.56,7.13,7.13,10.35,10.35-1.86,4.61-4.19,9.01-5.42,13.71-2.59,9.86-.9,19.29,4.48,27.97.89,1.44,1.03,2.34-.33,3.59-3.2,2.94-6.24,6.05-9.45,9.19Zm55.46,92.35c.49,5.5,1.16,11.32-1.96,16.6-15.21,25.68-10.64,28.7-4.53,42.7-18.76-9.71-37.77-44.41-34.49-65.39,1.95.87,3.95,1.68,5.99,2.4,1,.36,2.05.29,2.96-.11.51.85,1.34,1.51,2.35,1.8,2.61.74,5.28,1.35,8,1.83.4.07,1.84.27,2.18.32,2.03.33,2.8.43,4.81.62,1.4.13,2.72-.49,3.53-1.54.71,1.13,1.96,1.87,3.37,1.88,2.52.02,3.21-.08,5.69-.29.78-.07,1.51-.36,2.11-.82Zm-40.03-10.04c7.25-12.91,12.95-26.71,16.95-41.48l3.77.66-1.13,15.32,3.23-14.95,4.12.72-8.51,45.54c-2.59-.46-4.54-.91-7.02-1.61l.4-16.31-5.45,14.71c-2.18-.78-4.31-1.64-6.38-2.59Zm39.4,6.88c-2.36.2-4.74.29-7.14.27l-1.24-7.59-3.61-.63-1.71,7.9c-1.89-.17-1.73-.26-3.64-.58l7.43-45.6,6.27,1.14c-.66,15.36.62,30.38,3.64,45.09Zm-6.97-15.41c-.68-7.31-.69-13.66-.59-19.87l-3.09,19.23,3.68.64Z"/> <path d="M305.8 81.125C305.77 80.995 305.69 80.885 305.65 80.755C305.56 80.525 305.49 80.285 305.37 80.075C305.29 79.935 305.17 79.815 305.07 79.685C304.94 79.515 304.83 79.325 304.68 79.175C304.55 79.045 304.39 78.955 304.25 78.845C304.09 78.715 303.95 78.575 303.77 78.475L251.32 48.275C249.97 47.495 248.31 47.495 246.96 48.275L194.51 78.475C194.33 78.575 194.19 78.725 194.03 78.845C193.89 78.955 193.73 79.045 193.6 79.175C193.45 79.325 193.34 79.515 193.21 79.685C193.11 79.815 192.99 79.935 192.91 80.075C192.79 80.285 192.71 80.525 192.63 80.755C192.58 80.875 192.51 80.995 192.48 81.125C192.38 81.495 192.33 81.875 192.33 82.265V139.625L148.62 164.795V52.575C148.62 52.185 148.57 51.805 148.47 51.435C148.44 51.305 148.36 51.195 148.32 51.065C148.23 50.835 148.16 50.595 148.04 50.385C147.96 50.245 147.84 50.125 147.74 49.995C147.61 49.825 147.5 49.635 147.35 49.485C147.22 49.355 147.06 49.265 146.92 49.155C146.76 49.025 146.62 48.885 146.44 48.785L93.99 18.585C92.64 17.805 90.98 17.805 89.63 18.585L37.18 48.785C37 48.885 36.86 49.035 36.7 49.155C36.56 49.265 36.4 49.355 36.27 49.485C36.12 49.635 36.01 49.825 35.88 49.995C35.78 50.125 35.66 50.245 35.58 50.385C35.46 50.595 35.38 50.835 35.3 51.065C35.25 51.185 35.18 51.305 35.15 51.435C35.05 51.805 35 52.185 35 52.575V232.235C35 233.795 35.84 235.245 37.19 236.025L142.1 296.425C142.33 296.555 142.58 296.635 142.82 296.725C142.93 296.765 143.04 296.835 143.16 296.865C143.53 296.965 143.9 297.015 144.28 297.015C144.66 297.015 145.03 296.965 145.4 296.865C145.5 296.835 145.59 296.775 145.69 296.745C145.95 296.655 146.21 296.565 146.45 296.435L251.36 236.035C252.72 235.255 253.55 233.815 253.55 232.245V174.885L303.81 145.945C305.17 145.165 306 143.725 306 142.155V82.265C305.95 81.875 305.89 81.495 305.8 81.125ZM144.2 227.205L100.57 202.515L146.39 176.135L196.66 147.195L240.33 172.335L208.29 190.625L144.2 227.205ZM244.75 114.995V164.795L226.39 154.225L201.03 139.625V89.825L219.39 100.395L244.75 114.995ZM249.12 57.105L292.81 82.265L249.12 107.425L205.43 82.265L249.12 57.105ZM114.49 184.425L96.13 194.995V85.305L121.49 70.705L139.85 60.135V169.815L114.49 184.425ZM91.76 27.425L135.45 52.585L91.76 77.745L48.07 52.585L91.76 27.425ZM43.67 60.135L62.03 70.705L87.39 85.305V202.545V202.555V202.565C87.39 202.735 87.44 202.895 87.46 203.055C87.49 203.265 87.49 203.485 87.55 203.695V203.705C87.6 203.875 87.69 204.035 87.76 204.195C87.84 204.375 87.89 204.575 87.99 204.745C87.99 204.745 87.99 204.755 88 204.755C88.09 204.905 88.22 205.035 88.33 205.175C88.45 205.335 88.55 205.495 88.69 205.635L88.7 205.645C88.82 205.765 88.98 205.855 89.12 205.965C89.28 206.085 89.42 206.225 89.59 206.325C89.6 206.325 89.6 206.325 89.61 206.335C89.62 206.335 89.62 206.345 89.63 206.345L139.87 234.775V285.065L43.67 229.705V60.135ZM244.75 229.705L148.58 285.075V234.775L219.8 194.115L244.75 179.875V229.705ZM297.2 139.625L253.49 164.795V114.995L278.85 100.395L297.21 89.825V139.625H297.2Z"/>
</svg> </svg>

Before

Width:  |  Height:  |  Size: 2.3 KiB

After

Width:  |  Height:  |  Size: 3.0 KiB

View File

@@ -1,3 +1,3 @@
<button {{ $attributes->merge(['type' => 'submit']) }}> <button {{ $attributes->merge(['type' => 'submit', 'class' => 'inline-flex items-center px-4 py-2 bg-gray-800 dark:bg-gray-200 border border-transparent rounded-md font-semibold text-xs text-white dark:text-gray-800 uppercase tracking-widest hover:bg-gray-700 dark:hover:bg-white focus:bg-gray-700 dark:focus:bg-white active:bg-gray-900 dark:active:bg-gray-300 focus:outline-none focus:ring-2 focus:ring-indigo-500 focus:ring-offset-2 dark:focus:ring-offset-gray-800 transition ease-in-out duration-150']) }}>
{{ $slot }} {{ $slot }}
</button> </button>

View File

@@ -1,118 +0,0 @@
@extends('layouts.master')
@section('page-title', $pageTitle)
@section('meta_og_img', config('app.static_asset_url') . '/thumbnails/' . $episode->artwork->filename)
@section('meta_description', 'Artwork for the ' . $episode->podcast->name . ' podcast, episode ' . $episode->episode_number + 0 . ' by ' . $episode->artwork->artist->name)
@section('page-top')
<section class="inner-page-banner bg-2 bg-image">
<div class="container">
<div class="inner text-center">
<h1 class="title">"{{ $episode->title }}"</h1>
<nav class="mt-4">
<ol class="breadcrumb justify-content-center">
<li class="breadcrumb-item"><a href="/">Home</a></li>
<li class="breadcrumb-item"><a href="/podcasts">Podcasts</a></li>
<li class="breadcrumb-item"><a href="/podcasts/{{ $episode->podcast->slug }}">{{ $episode->podcast->name }}</a></li>
<li class="breadcrumb-item active">Ep. {{ number_format($episode->episode_number + 0) }}</li>
</ol>
</nav>
</div>
</div>
</section>
@endsection
@section('page-content')
<section class="product-details section-bg-separation-2 pt-120 pb-90">
<div class="container">
<div class="row">
<div class="col-xxl-6 mb-6">
<div class="explore-style-one">
<div class="thumb"><a href="{{ config('app.static_asset_url') }}/artworks/{{ $episode->artwork->filename }}"
><img id="largeImage"src="{{ config('app.static_asset_url') }}/artworks/{{ $episode->artwork->filename }}"
alt="{{ $episode->artwork->title }} by {{ $episode->artwork->artist->name }} for {{ $episode->artwork->podcast->title }}"></a>
</div>
</div>
</div>
<div class="col-xxl-6 mb-6 mb-6">
<div class="details-content">
<h2 class="main_title">{{ $episode->podcast->name }}<br> &ldquo;{{ $episode->title }}&rdquo;</h2>
<h4 class="mb-1">Episode {{ number_format($episode->episode_number + 0) }}</h4>
<h4 class="mb-4">{{ $episode->episode_date->format('l, F j') }}<sup>{{ $episode->episode_date->format('S') }}</sup>,
{{ $episode->episode_date->format('Y') }}</h4>
<h4 class="mb-4">Artwork By: <a href="/artist/{{ $episode->artwork->artist->slug }}">{{ $episode->artwork->artist->name }}</a></h4>
<p class="subtitle">
{{ number_format($episode->artworks->count()) }} Artworks Submitted.
</p>
<div class="container">
<div class="row">
<div class="col">
<a class="btn btn-medium btn-gradient w-100 justify-content-center mt-5"
href="{{ config('app.static_asset_url') }}/artworks/{{ $episode->artwork->filename }}">
<span>Download 3,000 px Image</span></a>
</div>
<div class="col">
<a class="btn btn-medium btn-gradient w-100 justify-content-center mt-5"
href="{{ config('app.static_asset_url') }}/thumbnails/{{ $episode->artwork->filename }}">
<span>Download 512px Image</span></a>
</div>
</div>
<div class="row">
<div class="col">
<a href="{{ $episode->mp3 }}"
class="btn btn-medium btn-gradient w-100 justify-content-center mt-5"><span><i
class="ri-headphone-fill"></i>
Direct Link to MP3
</span></a>
</div>
</div>
<div class="row">
<div class="col">
<a href="/podcasts/{{ $episode->podcast->slug }}"
class="btn btn-medium btn-gradient w-100 justify-content-center mt-5"><span><i
class="ri-broadcast-line"></i>
More From {{ $episode->podcast->name }}
</span></a>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</section>
{{-- Start Live Auction --}}
<section class="ptb-120 live-auction">
<div class="container">
<div class="section-title">
<span class="subtitle">Other Submitted Artworks</span>
<h3>{{ number_format($episode->artworks->count() - 1) }} other art pieces submitted</h3>
</div>
</div>
<div class="container">
{{-- End .section-title --}}
<div class="grid-filter-wrapper masonry-list">
<div class="resizer"></div>
@foreach ($episode->artworks as $recent)
@if ($recent->id != $episode->artwork_id)
@php
$thisArtwork = $recent;
$thisPodcast = $recent->podcast;
$thisEpisode = $recent->episode;
@endphp
<div class="grid-item">
@include('artworks.card')
</div>
@endif
@endforeach
{{-- End .slick-activation-01 --}}
</div>
{{-- End .container --}}
</div>
</section>
{{-- End Live Auction --}}
@endsection

View File

@@ -1,9 +1,5 @@
@extends('layouts.master') @extends('layouts.master')
@section('page-title', 'Submitted Artwork')
@section('meta_description', 'Explore the artwork submitted at the No Agenda Art Generator.')
@section('page-top') @section('page-top')
<section class="inner-page-banner bg-2 bg-image"> <section class="inner-page-banner bg-2 bg-image">
<div class="container"> <div class="container">
@@ -39,13 +35,39 @@
<div class="grid-filter-wrapper masonry-list"> <div class="grid-filter-wrapper masonry-list">
<div class="resizer"></div> <div class="resizer"></div>
@foreach ($artworks as $artwork) @foreach ($artworks as $artwork)
@php
$thisArtwork = $artwork;
$thisPodcast = $artwork->podcast;
$thisEpisode = $artwork->episode;
@endphp
<div class="grid-item podcast--{{ $artwork->podcast->slug }}"> <div class="grid-item podcast--{{ $artwork->podcast->slug }}">
@include('artworks.card') <div class="explore-style-one {{ $artwork->episode->artwork_id == $artwork->id ? 'selected' : '' }}">
<div class="thumb">
<a href="/artworks/{{ $artwork->id }}"><img src="http://{{ config('app.static_asset_url') }}/thumbnails/{{ $artwork->filename }}" alt="{{ $artwork->title }} by {{ $artwork->artist->name }} for {{ $artwork->podcast->title }}"></a>
</div>
<div class="content">
<div class="header d-flex-between pt-4 pb-3">
<h3 class="title"><a href="/artwork/{{ $artwork->id }}">"{{ $artwork->title }}"</a></h3>
<div class="more-dropdown "><i class="ri-more-fill" data-bs-toggle="dropdown"></i>
<ul class="dropdown-menu dropdown-menu-dark">
<li><a class="dropdown-item" href="#">Artist Profile</a></li>
<li>
<hr class="dropdown-divider">
</li>
<li><a class="dropdown-item" href="#">Episode Submissions</a></li>
<li><a class="dropdown-item" href="#">Episode Details</a></li>
<li><a class="dropdown-item" href="#">Report</a></li>
</ul>
</div>
</div>
{{-- .header --}}
<div class="product-owner py-4 d-flex-between">
<span class="bid-owner">Artwork By<br><strong><a href="/artist/{{ $artwork->artist->id }}">{{ $artwork->artist->name }}</a></strong></span>
<span class="profile-share d-flex-center"><a href="/artist/{{ $artwork->artist->id }}" class="avatar" data-bs-toggle="tooltip" data-bs-placement="top"
title="{{ $artwork->artist->name }}"><img src="{{ Vite::asset($recent->artist->avatar ?? 'resources/img/default_avatars/default_avatar_male.svg') }}" style="width:100%;height:auto;" alt="{{ $artwork->artist->name }}"></a></span>
</div>
{{-- End .product-owner --}}
<div class="action-wrapper d-flex-between pt-4">
<span class="bid-owner">{{ $artwork->id == $artwork->episode->artwork_id ? 'Selected' : 'Submitted' }} for <br><strong><a href="/artist/{{ $artwork->artist->id }}">{{ $artwork->podcast->name }}<br> Episode {{ number_format($artwork->episode->episode_number) }}</a></strong></span>
</div>
{{-- action-wrapper --}}
</div>
</div>
</div> </div>
@endforeach @endforeach
</div> </div>

View File

@@ -1,18 +1,11 @@
{{-- Start Setup Wallet --}} {{-- Start Setup Wallet --}}
<section class="wallet-setup ptb-120"> <section class="wallet-setup ptb-120">
<div class="container"> <div class="container">
<div class="d-flex-between">
<div class="section-title"> <div class="section-title">
<span class="subtitle">What this is</span> <span class="subtitle">WHAT THIS IS</span>
<h2>Artists + Podcasters = <i class="ri-heart-fill"></i></h2> <h2>Artists + Podcasters = <i class="ri-heart-fill"></i></h2>
</div> </div>
<div class="text-large"> {{-- End .section-title --}}
<a href="/support-development">Learn More About This</a>
</div>
</div>
</div>
<div class="container">
<div class="row">
<div class="slider wallet-activation slick-arrow-between slick-gutter-15 grid auto-rows-fr"> <div class="slider wallet-activation slick-arrow-between slick-gutter-15 grid auto-rows-fr">
<div class="card-block-style-one"> <div class="card-block-style-one">
<h3 class="title mb-3">Setup Your Account & Artist Profile</h3> <h3 class="title mb-3">Setup Your Account & Artist Profile</h3>
@@ -41,7 +34,6 @@
</p> </p>
</div> </div>
</div> </div>
</div>
{{-- End .row --}} {{-- End .row --}}
</div> </div>
{{-- End .container --}} {{-- End .container --}}

View File

@@ -0,0 +1,44 @@
<div class="explore-style-one">
<div class="thumb">
<a href="product-details.html"> <img src="{{ 'http://' . config('app.static_asset_url') . '/thumbnails/' . $recentEpisode->artwork->filename ?? '#'}}"
alt="nft live auction thumbnail"></a>
<!-- End .reaction-count -->
</div>
<!-- End .thumb -->
<div class="content">
<div class="header d-flex-between pt-4 pb-1">
<h3 class="title">
<a href="product-details.html">"{{ $recentEpisode->title }}"</a>
</h3>
<div class="more-dropdown "><i class="ri-more-fill" data-bs-toggle="dropdown"></i>
<ul class="dropdown-menu dropdown-menu-dark">
<li><a class="dropdown-item" href="#">View Episode</a></li>
<li><a class="dropdown-item" href="#">View Podcast</a></li>
<li><a class="dropdown-item" href="#">View Show Notes</a></li>
<li>
<hr class="dropdown-divider">
</li>
<li><a class="dropdown-item" href="#">View Selected Artist</a></li>
</ul>
</div>
</div>
<!-- .header -->
<div class="product-owner py-1 d-flex-between">
<span class="bid-owner">Artwork Selected For<br>
<strong><a href="#">{{ $recentEpisode->podcast->name }}</a></strong>
<br>
<a href="#">Episode {{ number_format($recentEpisode->episode_number + 0) }}<br>
{{ $recentEpisode->episode_date->format('D, M j') }}<sup>{{ $recentEpisode->episode_date->format('S') }}</sup>{{ $recentEpisode->episode_date->format(', Y') }}</a></span>
</div>
<div class="product-owner py-1 d-flex-between">
<span class="bid-owner">Artwork By<br><strong><a
href="author-profile.html">{{ $recentEpisode->artwork->artist->name ?? 'Unknown' }}</a></strong></span>
<span class="profile-share d-flex-center"><a href="author-profile.html" class="avatar" data-bs-toggle="tooltip" data-bs-placement="top"
title="{{ $recentEpisode->artwork->artist->name }}"><img src="{{ Vite::asset($recentEpisode->artwork->artist->avatar ?? 'resources/img/default_avatars/default_avatar_male.svg') }}"
alt="{{ $recentEpisode->artwork->artist->name }}"></a></span>
</div>
<!-- End .product-owner -->
</div>
<!-- End .content -->
</div>

View File

@@ -1,12 +1,7 @@
<div class="slider slider-activation-banner-4 slick-gutter-15 slick-pagination-50"> <div class="slider slider-activation-banner-4 slick-gutter-15 slick-pagination-50">
@foreach($recentEpisodes as $recentEpisode) @foreach($recentEpisodes as $recentEpisode)
@if ($recentEpisode->artwork) @if ($recentEpisode->artwork)
@php @include('home.hero.slider.slide')
$thisArtwork = $recentEpisode->artwork;
$thisEpisode = $recentEpisode;
$thisPodcast = $recentEpisode->podcast;
@endphp
@include('artworks.card')
@endif @endif
@endforeach @endforeach
</div> </div>

View File

@@ -2,21 +2,21 @@
<div class="top-seller-style-two d-flex-between"> <div class="top-seller-style-two d-flex-between">
<div class="d-flex-center"> <div class="d-flex-center">
<div class="thumb-wrapper"> <div class="thumb-wrapper">
<a href="/artist/{{ $leaderboardArtist->artist->slug }}" class="thumb"> <a href="author-profile.html" class="thumb">
<img src="{{ $leaderboardArtist->artist->avatar() }}" alt="{{ $leaderboardArtist->artist->name }}" <img src="{{ Vite::asset($leaderboardArtist->artist->avatar ?? 'resources/img/default_avatars/default_avatar_male.svg') }}" alt="{{ $leaderboardArtist->artist->name }}"
title="{{ $leaderboardArtist->artist->name }}"> title="{{ $leaderboardArtist->artist->name }}">
</a> </a>
</div> </div>
{{-- End .thumb-wrapper --}} {{-- End .thumb-wrapper --}}
{{-- End .thumb --}} {{-- End .thumb --}}
<div class="content"> <div class="content">
<h4 class="title pb-1"><a href="/artist/{{ $leaderboardArtist->artist->slug }}">{{ $leaderboardArtist->artist->name }}</a></h4> <h4 class="title pb-1"><a href="author-profile.html">{{ $leaderboardArtist->artist->name }}</a></h4>
<span class="price">Chosen {{ $leaderboardArtist->artworkCount }} {{ Str::plural('Time', $leaderboardArtist->artworkCount) }}</span> <span class="price">Chosen {{ $leaderboardArtist->artworkCount }} {{ Str::plural('Time', $leaderboardArtist->artworkCount) }}</span>
</div> </div>
{{-- End .content --}} {{-- End .content --}}
</div> </div>
{{-- End .d-flex-center --}} {{-- End .d-flex-center --}}
<a href="/artist/{{ $leaderboardArtist->artist->slug }}" class="items-number d-flex-center flex-column"> <a href="author-profile.html" class="items-number d-flex-center flex-column">
<strong class="pb-1">{{ $leaderboardArtist->position }}<sup>{{ numberSuffix($leaderboardArtist->position) }}</sup></strong> <strong class="pb-1">{{ $leaderboardArtist->position }}<sup>{{ numberSuffix($leaderboardArtist->position) }}</sup></strong>
<span>Place</span> <span>Place</span>
</a> </a>

View File

@@ -8,7 +8,7 @@
</div> </div>
{{-- End .section-title --}} {{-- End .section-title --}}
<div class="text-large"> <div class="text-large">
<a href="/leaderboards">View Leaderboards</a> <a href="#">View Leaderboards</a>
</div> </div>
</div> </div>
{{-- End .d-flex-between --}} {{-- End .d-flex-between --}}
@@ -16,25 +16,6 @@
@foreach($leaderboard as $leaderboardArtist) @foreach($leaderboard as $leaderboardArtist)
@include('home.leaderboard.card') @include('home.leaderboard.card')
@endforeach @endforeach
<div class="col-xxl-4 col-lg-6 col-md-6 mb-6">
<div class="top-seller-style-two d-flex-between d-flex-stretch">
<div class="d-flex-center">
{{-- End .thumb --}}
<div class="content">
<h4 class="title pb-1"><a href="/leaderboards">See More Leaderboards</a></h4>
<span class="price">Updated Every Episode</span>
</div>
{{-- End .content --}}
</div>
{{-- End .d-flex-center --}}
<a href="/leaderboards" class="items-number d-flex-center flex-column">
<strong class="pb-1"><i class="ri-arrow-right-double-line"></i></strong>
<span> &nbsp; </span>
</a>
</div>
{{-- End .top-seller-style-two --}}
</div>
{{-- End .col --}}
</div> </div>
</div> </div>
{{-- End container --}} {{-- End container --}}

View File

@@ -0,0 +1,35 @@
<div class="explore-style-one podcast--{{ $recent->podcast->slug }} {{ $recent->episode->artwork_id == $recent->id ? 'selected' : '' }}">
<div class="thumb">
<a href="product-details.html"><img src="http://{{ config('app.static_asset_url') }}/thumbnails/{{ $recent->filename }}" alt="{{ $recent->title }} by {{ $recent->artist->name }} for {{ $recent->podcast->title }}"></a>
</div>
{{-- End .thumb --}}
<div class="content">
<div class="header d-flex-between pt-4 pb-3">
<h3 class="title"><a href="product-details.html">"{{ $recent->title }}"</a></h3>
<div class="more-dropdown "><i class="ri-more-fill" data-bs-toggle="dropdown"></i>
<ul class="dropdown-menu dropdown-menu-dark">
<li><a class="dropdown-item" href="#">Artist Profile</a></li>
<li>
<hr class="dropdown-divider">
</li>
<li><a class="dropdown-item" href="#">Episode Submissions</a></li>
<li><a class="dropdown-item" href="#">Episode Details</a></li>
<li><a class="dropdown-item" href="#">Report</a></li>
</ul>
</div>
</div>
{{-- .header --}}
<div class="product-owner py-4 d-flex-between">
<span class="bid-owner">Artwork By<br><strong><a href="/artist/{{ $recent->artist->id }}">{{ $recent->artist->name }}</a></strong></span>
<span class="profile-share d-flex-center"><a href="/artist/{{ $recent->artist->id }}" class="avatar" data-bs-toggle="tooltip" data-bs-placement="top"
title="{{ $recent->artist->name }}"><img src="{{ Vite::asset($recent->artist->avatar ?? 'resources/img/default_avatars/default_avatar_male.svg') }}" style="width:100%;height:auto;" alt="{{ $recent->artist->name }}"></a></span>
</div>
{{-- End .product-owner --}}
<div class="action-wrapper d-flex-between pt-4">
<span class="bid-owner">{{ $recent->id == $recent->episode->artwork_id ? 'Selected' : 'Submitted' }} for<br><strong><a href="/artist/{{ $recent->artist->id }}">{{ $recent->podcast->name }}<br>Episode {{ number_format($recent->episode->episode_number) }}</a></strong></span>
</div>
{{-- action-wrapper --}}
</div>
{{-- End .content --}}
</div>
{{-- End .explore-style-one --}}

View File

@@ -8,12 +8,7 @@
{{-- End .section-title --}} {{-- End .section-title --}}
<div class="slider slick-activation-001 slick-gutter-15 slick-pagination-50"> <div class="slider slick-activation-001 slick-gutter-15 slick-pagination-50">
@foreach ($recentSubmissions as $recent) @foreach ($recentSubmissions as $recent)
@php @include('home.recents.card')
$thisArtwork = $recent;
$thisPodcast = $recent->podcast;
$thisEpisode = $recent->episode;
@endphp
@include('artworks.card')
@endforeach @endforeach
{{-- End .slick-activation-01 --}} {{-- End .slick-activation-01 --}}
</div> </div>

View File

@@ -1,138 +0,0 @@
@extends('layouts.master')
@section('page-title', 'Support and The History of the Art Generator')
@section('meta_description', 'Learn the history of the No Agenda Art Generator and how to support the generator.')
@section('page-top')
<section class="inner-page-banner bg-2 bg-image">
<div class="container">
<div class="inner text-center">
<h1 class="title">Support & History</h1>
<nav class="mt-4">
<ol class="breadcrumb justify-content-center">
<li class="breadcrumb-item"><a href="/">Home</a></li>
<li class="breadcrumb-item active">Explore</li>
</ol>
</nav>
</div>
</div>
</section>
@endsection
@section('page-content')
<section class="pt-120 pb-90 blog-details-wrapper">
<div class="container">
<div class="row">
<div class="col-xl-8 mb-6">
<div class="blog-content">
<h2 class="mb-2">History of the No Agenda Art Generator</h2>
<ul class="meta">
<li>19 Dec 2024</li>
<li>Development</li>
<li class="date"><i class="ri-time-line"></i>{{ Carbon\Carbon::create(2023, 12, 19, 22, 1, 9)->diffForHumans() }}</li>
</ul>
<p>In June of 2010, there was no formal process to submit artwork to
the No Agenda Podcast for use as album artwork for each episode. At the same time,
I was in the process of learning the then "new to me" Drupal 6 Content Management
System. I realized that I could kill two birds with one stone by improving the process
of uploading artwork, add some community and competition to the process and learn more
about Drupal module development by building a simple tool that would allow anyone to
submit artwork live as we trolled-along in the IRC "trollroom" as the show was recorded
by our venerable hosts, Adam and John C.</p>
<p>The first variation of the Art Generator was built over the course of a weekend, and
as part of that development, I did my best to re-create the work of Sir Randy Asher and Sir Paul T.
who had, up until that point, submitted the bulk of the user submitted artwork in the archive.
</p>
<p>For the next almost four years and roughly 4,500 art submissions, the generator continued
in it's first interation with an abandonded upgrade to Drupal 7 somewhere in the duration as the Drupal
community was more focused on writing "codes-of-conduct" than writing actual code.</p>
<p>Around that time, many in the PHP community and myself
became aware of an upcoming framework that seemed to offer a ton of promise - Laravel, and I chose to
use the generator to become familiar with that new framework. In October 2014, the Art Generator was
re-written from the ground up using the Laravel 4 platform which greatly simplified the maintenance and
customization of the platform.
</p>
<p>In 2022, I started to run into minor issues due to the age of the codebase, support for older versions
of the database and PHP were becoming deprecated, and tackling them would require a basic rewrite of
the entire platform (seriously, the upgrade path from Laravel 4 to 5 suggests re-writing the application.)
Laravel had matured, and became the most popular PHP framework on the Internet, upgrades between versions
had become relatively painless and took a few minutes to a few hours. However, I procrastinated doing the re-write
as I was already spending my days writing Laravel code and I put a lot of focus learning other technologies
that would make the upgrade worthwhile.
</p>
<p>I began the re-write for the current interation of the Art Generator, in early 2023, working on small pieces
on weekends as free-time allowed, the core functionality of the system is now powered by Laravel 10 and I used
much of the development time to learn some of the new third-party add-ons that would improve developer's experience
moving forward such as Laravel Live-Wire, Docker, Docker Compose, Traefik, Caddy and other technology. Development
in earnest began in early summer of 2023 - a new design was developed using a new logo graciously provided by
<a href="/artist/nykko-syme">Nykko Syme</a> and addressing some community requests for both dark and light mode support,
easier to access download links for the artwork, and a much more streamlined codebase allowing for future development
with less pain points. A bonus is the ability for me to run the entire stack in Docker making migrating to other hosting
and development environments smoother.
</p>
<p>Toward the end of September, the host that had powered the Art Generator since 2010 emailed its customers and
notified us they would be shutting down without warning. I took the time to migrate the database away from that host,
and moved as much of the site off of them as possible while working as quickly as possible to finish the upgrade. Communicating
with them, I was told to expect to continue to have hosting until my paid-in-advance hosting ran out, which would have
been through May of 2024 - but on the morning of November 30, 2023, they disappeared without a trace, stopped answering
the phone, and emails bounced. This lit a fire under my rear to complete the newest build as I was very close to complete.
</p>
<p>
The latest version of the generator launched on Sunday, December 17<sup>th</sup>, 2024 to a rocky launch with "good-enough"
functionality, it took a few days to stabilize the cacheing and hardware, but you are now viewing the "new hotness" or whatever
the kids these days call it, powered by Laravel 10 in a docker powered container that can be migrated in minutes to other locations.
It facilitates point-in-time backups, and as you will see below, makes it fairly simple for anyone to grab and entire archive of the
artwork submitted to the site in an sane, organized manner. Here's some of the new features that really made the upgrade worth it:
</p>
<ul>
<li>All artwork is optimized, sized, and scaled to the absolute smallest filesize while having the resolutions required by Apple (3,000px x 3,000px) and by the sane people in the world (512px x 512px) with none of the extraneous temporary files and unnecessary thumbnails of the old system.</li>
<li>The artwork is organized by year, month, and date, with the artist's name and artwork title in the filename so offline use is easier.</li>
<li>Even with the larger resolutions available for download, the size of the artwork archive was cut nearly in half from 30Gb+ to approx 15Gb.</li>
<li>Artists get a lot more credit on the new version, it's easier to find their additional work, and get high quality downloads of that work.</li>
<li>While not yet implemented in the production site, the new version was built from the ground up with support for more than one podcast. In the coming weeks, I hope to expand and turn that feature on for additional podcasts in the No Agenda Community.</li>
</ul>
<p>Want to download your own copy of the archive? Know wget and/or curl? There are lists in the sidebar you can download that are updated each time a piece
of artwork is approved. I plan to make this easier for non-dudes/dudettes named Ben soon. In the meantime, enjoy your stay, note the v4v section, and be
decent to one another.
</p>
<p class="text-right">--<br>"Sir" Paul Couture<br>Keeper of the Artwork</p>
</div>
</div>
<div class="col-xl-4 mb-6">
<aside class="sidebar">
<div class="single-widget recent-post mt-0">
<h3 class="title">Support | Value4Value</h3>
<div class="inner">
<ul>
<li><a class="d-block" href="http://dvorak.org/NA">Support the Show</a><span class="cate small">First and Foremost, support our boys.</span></li>
<li><a class="d-block" href="https://paypal.me/caincouture">PayPal Me</a><span class="cate small">@CainCouture and buy me a coffee - or twelve.</span></li>
<li><a class="d-block" href="https://getalby.com/p/pcouture">V4V: ⚡pcouture@getalby.com</a><span class="cate small">Use the lightning network.</span></li>
<li><a class="d-block" href="https://static.noagendaartgenerator.com/assets/img/btc-naart-qr.png">Crypto: <i class="ri-btc-line"></i> Old School BTC</a><span class="cate small">bc1qvkm9fpycc8q99kudqwukd8cf8xgxdrhp6a5zl8</span></li>
</ul>
</div>
</div>
<div class="single-widget recent-post mt-8">
<h3 class="title">Download The Archive</h3>
<div class="inner">
<p>Choose one or both of the text lists below for a wget or curl formatted text list to download your own personal copy of the archive.</p>
<ul>
<li><a class="d-block" href="/download-archive/hd">High-Resolution Archive List</a></li>
<li><a class="d-block" href="/download-archive/sd">Standard Resolution Archive List</a></li>
</ul>
<p class="mb-0 mt-4">I recommend the following:<br>
<span class="cate small">Replace "{filename-of-list.txt}" with the filename you downloaded.</span></p>
<hr>
<pre><code> wget \
--content-disposition \
--trust-server-names \
-i {filename-of-list.txt}</code></pre>
<hr>
</div>
</div>
</aside>
</div>
</div>
</div>
</section>
@endsection

View File

@@ -1,30 +1,26 @@
@extends('layouts.master') <!DOCTYPE html>
<html lang="{{ str_replace('_', '-', app()->getLocale()) }}">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<meta name="csrf-token" content="{{ csrf_token() }}">
@section('page-title', 'Manage Account') <title>{{ config('app.name', 'Laravel') }}</title>
@section('page-top') <!-- Fonts -->
<section class="inner-page-banner bg-2 bg-image"> <link rel="preconnect" href="https://fonts.bunny.net">
<div class="container"> <link href="https://fonts.bunny.net/css?family=figtree:400,500,600&display=swap" rel="stylesheet" />
<div class="inner text-center">
<h1 class="title">Manage Account</h1> <!-- Scripts -->
<nav class="mt-4"> @vite(['resources/css/app.css', 'resources/js/app.js'])
<ol class="breadcrumb justify-content-center"> </head>
<li class="breadcrumb-item"><a href="/">Home</a></li> <body class="font-sans antialiased">
<li class="breadcrumb-item active">Manage Account</li> <div class="min-h-screen bg-gray-100 dark:bg-gray-900">
</ol> @include('layouts.navigation')
</nav>
</div>
</div>
</section>
@endsection
@section('page-content')
<section class="ptb-120">
<div class="container">
<div class="row">
<!-- Page Heading --> <!-- Page Heading -->
@if (isset($header)) @if (isset($header))
<header class=""> <header class="bg-white dark:bg-gray-800 shadow">
<div class="max-w-7xl mx-auto py-6 px-4 sm:px-6 lg:px-8"> <div class="max-w-7xl mx-auto py-6 px-4 sm:px-6 lg:px-8">
{{ $header }} {{ $header }}
</div> </div>
@@ -36,6 +32,5 @@
{{ $slot }} {{ $slot }}
</main> </main>
</div> </div>
</div> </body>
</section> </html>
@endsection

View File

@@ -1,33 +1,30 @@
@extends('layouts.master') <!DOCTYPE html>
<html lang="{{ str_replace('_', '-', app()->getLocale()) }}">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<meta name="csrf-token" content="{{ csrf_token() }}">
@section('page-title', 'Account') <title>{{ config('app.name', 'Laravel') }}</title>
@section('page-top') <!-- Fonts -->
<section class="inner-page-banner bg-2 bg-image"> <link rel="preconnect" href="https://fonts.bunny.net">
<div class="container"> <link href="https://fonts.bunny.net/css?family=figtree:400,500,600&display=swap" rel="stylesheet" />
<div class="inner text-center">
<h1 class="title">Account</h1> <!-- Scripts -->
<nav class="mt-4"> @vite(['resources/css/app.css', 'resources/js/app.js'])
<ol class="breadcrumb justify-content-center"> </head>
<li class="breadcrumb-item"><a href="/">Home</a></li> <body class="font-sans text-gray-900 antialiased">
<li class="breadcrumb-item active">Account</li> <div class="min-h-screen flex flex-col sm:justify-center items-center pt-6 sm:pt-0 bg-gray-100 dark:bg-gray-900">
</ol> <div>
</nav> <a href="/">
<x-application-logo class="w-20 h-20 fill-current text-gray-500" />
</a>
</div> </div>
</div>
</section>
@endsection
@section('page-content') <div class="w-full sm:max-w-md mt-6 px-6 py-4 bg-white dark:bg-gray-800 shadow-md overflow-hidden sm:rounded-lg">
<section class="signup-wrapper signin-wrapper ptb-120">
<div class="container">
<div class="row">
<div class="col-xl-6 offset-xl-3 col-lg-12">
<div class="authbox">
{{ $slot }} {{ $slot }}
</div> </div>
</div> </div>
</div> </body>
</div> </html>
</section>
@endsection

View File

@@ -5,19 +5,13 @@
<meta http-equiv="x-ua-compatible" content="ie=edge" /> <meta http-equiv="x-ua-compatible" content="ie=edge" />
<meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no" /> <meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no" />
<meta name="csrf-token" content="{{ csrf_token() }}"> <meta name="csrf-token" content="{{ csrf_token() }}">
@if(View::hasSection('page-title')) <title>.: {{ $pageTitle ?? 'Site' }} - No Agenda Art Generator :.</title>
<title>.: @yield('page-title') - No Agenda Art Generator :.</title>
@else
<title>.: No Agenda Art Generator :.</title>
@endif
@include('partials.metabranding')
@include('partials/favicon') @include('partials/favicon')
@vite(['resources/scss/app.scss']) @vite(['resources/scss/app.scss'])
@livewireStyles @livewireStyles
<noscript><style> #preloader { display:none; } </style></noscript>
@yield('additional_headers') @yield('additional_headers')
</head> </head>
<body{!! Session::get('preferred_theme') === 'light' ? ' class="theme-light"' : '' !!} data-preferred_theme="{!! Session::get('preferred_theme') !!}"> <body{!! Session::get('preferred_theme') == 'light' ? ' class="theme-light"' : '' !!}>
@include('partials/preloader') @include('partials/preloader')
@include('partials/nav/head') @include('partials/nav/head')
@@ -25,21 +19,20 @@
@yield('page-content') @yield('page-content')
@include('partials.footer.section') @include('partials.footer.section')
<script src="{{ config('app.static_asset_url') }}/v3/dist/vendor/js/jquery.js"></script> <script src="//{{ config('app.static_asset_url') }}/dist/vendor/js/jquery.js"></script>
<script src="{{ config('app.static_asset_url') }}/v3/dist/vendor/js/jquery.nice-select.min.js"></script> <script src="//{{ config('app.static_asset_url') }}/dist/vendor/js/jquery.nice-select.min.js"></script>
<script src="{{ config('app.static_asset_url') }}/v3/dist/vendor/js/modernizer.min.js"></script> <script src="//{{ config('app.static_asset_url') }}/dist/vendor/js/modernizer.min.js"></script>
<script src="{{ config('app.static_asset_url') }}/v3/dist/vendor/js/slick.min.js"></script> <script src="//{{ config('app.static_asset_url') }}/dist/vendor/js/slick.min.js"></script>
<script src="{{ config('app.static_asset_url') }}/v3/dist/vendor/js/bootstrap.min.js"></script> <script src="//{{ config('app.static_asset_url') }}/dist/vendor/js/bootstrap.min.js"></script>
<script src="{{ config('app.static_asset_url') }}/v3/dist/vendor/js/waypoint.js"></script> <script src="//{{ config('app.static_asset_url') }}/dist/vendor/js/waypoint.js"></script>
<script src="{{ config('app.static_asset_url') }}/v3/dist/vendor/js/js.cookie.js"></script> <script src="//{{ config('app.static_asset_url') }}/dist/vendor/js/js.cookie.js"></script>
<script src="{{ config('app.static_asset_url') }}/v3/dist/vendor/js/count-down.js"></script> <script src="//{{ config('app.static_asset_url') }}/dist/vendor/js/count-down.js"></script>
<script src="{{ config('app.static_asset_url') }}/v3/dist/vendor/js/counter-up.js"></script> <script src="//{{ config('app.static_asset_url') }}/dist/vendor/js/counter-up.js"></script>
<script src="{{ config('app.static_asset_url') }}/v3/dist/vendor/js/isotop.js"></script> <script src="//{{ config('app.static_asset_url') }}/dist/vendor/js/isotop.js"></script>
<script src="{{ config('app.static_asset_url') }}/v3/dist/vendor/js/imageloaded.js"></script> <script src="//{{ config('app.static_asset_url') }}/dist/vendor/js/imageloaded.js"></script>
<script src="{{ config('app.static_asset_url') }}/v3/dist/vendor/js/aos.js"></script> <script src="//{{ config('app.static_asset_url') }}/dist/vendor/js/aos.js"></script>
<script src="{{ config('app.static_asset_url') }}/v3/dist/vendor/js/jquery.custom-file-input.js"></script> <script src="//{{ config('app.static_asset_url') }}/dist/vendor/js/jquery.custom-file-input.js"></script>
@livewireScriptConfig @livewireScriptConfig
@vite(['resources/js/app.js']) @vite(['resources/js/app.js'])
@yield('additional_footers')
</body> </body>
</html> </html>

View File

@@ -1,89 +0,0 @@
@extends('layouts.master')
@section('page-title', 'Leaderboards')
@section('meta_description', 'Check the standings of the competition at the No Agenda Art Generator.')
@section('page-top')
<section class="inner-page-banner bg-2 bg-image">
<div class="container">
<div class="inner text-center">
<h1 class="title">Leaderboards</h1>
<nav class="mt-4">
<ol class="breadcrumb justify-content-center">
<li class="breadcrumb-item"><a href="/">Home</a></li>
<li class="breadcrumb-item active">Leaderboards</li>
</ol>
</nav>
</div>
</div>
</section>
@endsection
@section('page-content')
<section class="pt-120 pb-90">
<div class="container">
<div class="row">
<ul class="nav custom-tabs mb-4">
<li><a class="active" data-bs-toggle="tab" href="#all-time">All Time</a></li>
<li><a data-bs-toggle="tab" href="#rolling-annual">Rolling Annual</a></li>
<li><a data-bs-toggle="tab" href="#rolling-six-months">Rolling Six Months</a></li>
<li><a data-bs-toggle="tab" href="#rolling-ninety-days">Rolling 90 Days</a></li>
{{--<li><a data-bs-toggle="tab" href="#by-year">By Year</a></li>--}}
</ul>
</div>
</div>
<div class="container tab-content">
<div class="tab-pane fade show active" id="all-time">
<div class="row">
@foreach($leaderboardAllTime as $leaderboardArtist)
@include('home.leaderboard.card')
@endforeach
</div>
</div>
<div class="tab-pane fade" id="rolling-annual">
<div class="row">
@foreach($leaderboardPastTwelveMonths as $leaderboardArtist)
@include('home.leaderboard.card')
@endforeach
</div>
</div>
<div class="tab-pane fade" id="rolling-six-months">
<div class="row">
@foreach($leaderboardRollingSixMonths as $leaderboardArtist)
@include('home.leaderboard.card')
@endforeach
</div>
</div>
<div class="tab-pane fade" id="rolling-ninety-days">
<div class="row">
@foreach($leaderboardRollingNinetyDays as $leaderboardArtist)
@include('home.leaderboard.card')
@endforeach
</div>
</div>
{{--<div class="tab-pane fade" id="by-year">
<div class="row">
<ul class="nav nav-pills custom-pills mb-4" role="tablist">
@foreach ($leaderboardYears as $year)
<li class="nav-item" role="presentation">
<a class="nav-link" data-bs-toggle="tab" href="#leaderboard-year-{{ $year }}">{{ $year }}</a>
</li>
@endforeach
</ul>
</div>
<div class="container tab-content">
@foreach ($leaderboardYears as $year)
<div class="tab-pane fade" id="leaderboard-year-{{ $year }}">
<div class="row">
<h4>{{ $year }} Leaderboard</h4>
</div>
</div>
@endforeach
</div>
</div>--}}
</div>
</section>
@endsection

View File

@@ -1,42 +0,0 @@
<form wire:submit.prevent="save">
@if($avatar)
<div
class="d-flex flex-column justify-content-center"
wire:ignore
x-data="{
setUp() {
const cropper = new Cropper(document.getElementById('avatar'), {
aspectRatio: 1/1,
autoCropArea: 1,
viewMode: 1,
crop (event) {
@this.set('x', event.detail.x)
@this.set('y', event.detail.y)
@this.set('width', event.detail.width)
@this.set('height', event.detail.height)
}
})
}
}"
x-init="setUp"
>
<div class="d-flex justify-content-center text-center mt-4 mb-4">
<img id="avatar" src="{{ $avatar->temporaryUrl() }}" style="width: 100%; max-width: 350px; margin:5px auto;">
</div>
<div class="d-flex justify-content-end text-end mt-4 mb-4">
<button type="submit" class="btn btn-gradient btn-small">
<span>Save Avatar</span>
</button>
</div>
</div>
@else
<div class="mb-2 mx-2">
<label for="avatar" style="width: 100%;">
<img src="{{ auth()->user()->artists()->first()->avatar() }}" style="width: 100%; max-width: 350px;">
</label>
</div>
<div class="mb-2 mx-2">
<input type="file" name="avatar" id="avatar" class="sr-only" wire:model="avatar">
</div>
@endif
</form>

View File

@@ -1,42 +0,0 @@
<form wire:submit.prevent="save">
@if($header)
<div
class="d-flex flex-column justify-content-center"
wire:ignore
x-data="{
setUp() {
const cropper = new Cropper(document.getElementById('header'), {
aspectRatio: 1.46,
autoCropArea: 1,
viewMode: 1,
crop (event) {
@this.set('x', event.detail.x)
@this.set('y', event.detail.y)
@this.set('width', event.detail.width)
@this.set('height', event.detail.height)
}
})
}
}"
x-init="setUp"
>
<div class="d-flex justify-content-center text-center mt-4 mb-4">
<img id="header" src="{{ $header->temporaryUrl() }}" style="width: 100%; max-width: 270px; margin:5px auto;">
</div>
<div class="d-flex justify-content-end text-end mt-4 mb-4">
<button type="submit" class="btn btn-gradient btn-small">
<span>Save Profile Header</span>
</button>
</div>
</div>
@else
<div class="mb-2 mx-2">
<label for="header" style="width: 100%;">
<img src="{{ auth()->user()->artists()->first()->header() }}" style="width: 100%; max-width: 270px; margin:5px auto;">
</label>
</div>
<div class="mb-2 mx-2">
<input type="file" name="header" id="header" class="sr-only" wire:model="header">
</div>
@endif
</form>

View File

@@ -1,20 +1,20 @@
<link rel="apple-touch-icon-precomposed" sizes="57x57" href="{{ config('app.static_asset_url') }}/v3/dist/ico/apple-touch-icon-57x57.png" /> <link rel="apple-touch-icon-precomposed" sizes="57x57" href="//{{ config('app.static_asset_url') }}/dist/ico/apple-touch-icon-57x57.png" />
<link rel="apple-touch-icon-precomposed" sizes="114x114" href="{{ config('app.static_asset_url') }}/v3/dist/ico/apple-touch-icon-114x114.png" /> <link rel="apple-touch-icon-precomposed" sizes="114x114" href="//{{ config('app.static_asset_url') }}/dist/ico/apple-touch-icon-114x114.png" />
<link rel="apple-touch-icon-precomposed" sizes="72x72" href="{{ config('app.static_asset_url') }}/v3/dist/ico/apple-touch-icon-72x72.png" /> <link rel="apple-touch-icon-precomposed" sizes="72x72" href="//{{ config('app.static_asset_url') }}/dist/ico/apple-touch-icon-72x72.png" />
<link rel="apple-touch-icon-precomposed" sizes="144x144" href="{{ config('app.static_asset_url') }}/v3/dist/ico/apple-touch-icon-144x144.png" /> <link rel="apple-touch-icon-precomposed" sizes="144x144" href="//{{ config('app.static_asset_url') }}/dist/ico/apple-touch-icon-144x144.png" />
<link rel="apple-touch-icon-precomposed" sizes="60x60" href="{{ config('app.static_asset_url') }}/v3/dist/ico/apple-touch-icon-60x60.png" /> <link rel="apple-touch-icon-precomposed" sizes="60x60" href="//{{ config('app.static_asset_url') }}/dist/ico/apple-touch-icon-60x60.png" />
<link rel="apple-touch-icon-precomposed" sizes="120x120" href="{{ config('app.static_asset_url') }}/v3/dist/ico/apple-touch-icon-120x120.png" /> <link rel="apple-touch-icon-precomposed" sizes="120x120" href="//{{ config('app.static_asset_url') }}/dist/ico/apple-touch-icon-120x120.png" />
<link rel="apple-touch-icon-precomposed" sizes="76x76" href="{{ config('app.static_asset_url') }}/v3/dist/ico/apple-touch-icon-76x76.png" /> <link rel="apple-touch-icon-precomposed" sizes="76x76" href="//{{ config('app.static_asset_url') }}/dist/ico/apple-touch-icon-76x76.png" />
<link rel="apple-touch-icon-precomposed" sizes="152x152" href="{{ config('app.static_asset_url') }}/v3/dist/ico/apple-touch-icon-152x152.png" /> <link rel="apple-touch-icon-precomposed" sizes="152x152" href="//{{ config('app.static_asset_url') }}/dist/ico/apple-touch-icon-152x152.png" />
<link rel="icon" type="image/png" href="{{ config('app.static_asset_url') }}/v3/dist/ico/favicon-196x196.png" sizes="196x196" /> <link rel="icon" type="image/png" href="//{{ config('app.static_asset_url') }}/dist/ico/favicon-196x196.png" sizes="196x196" />
<link rel="icon" type="image/png" href="{{ config('app.static_asset_url') }}/v3/dist/ico/favicon-96x96.png" sizes="96x96" /> <link rel="icon" type="image/png" href="//{{ config('app.static_asset_url') }}/dist/ico/favicon-96x96.png" sizes="96x96" />
<link rel="icon" type="image/png" href="{{ config('app.static_asset_url') }}/v3/dist/ico/favicon-32x32.png" sizes="32x32" /> <link rel="icon" type="image/png" href="//{{ config('app.static_asset_url') }}/dist/ico/favicon-32x32.png" sizes="32x32" />
<link rel="icon" type="image/png" href="{{ config('app.static_asset_url') }}/v3/dist/ico/favicon-16x16.png" sizes="16x16" /> <link rel="icon" type="image/png" href="//{{ config('app.static_asset_url') }}/dist/ico/favicon-16x16.png" sizes="16x16" />
<link rel="icon" type="image/png" href="{{ config('app.static_asset_url') }}/v3/dist/ico/favicon-128.png" sizes="128x128" /> <link rel="icon" type="image/png" href="//{{ config('app.static_asset_url') }}/dist/ico/favicon-128.png" sizes="128x128" />
<meta name="application-name" content="{{ config('app.name') }}"/> <meta name="application-name" content="{{ config('app.name') }}"/>
<meta name="msapplication-TileColor" content="#101010" /> <meta name="msapplication-TileColor" content="#101010" />
<meta name="msapplication-TileImage" content="{{ config('app.static_asset_url') }}/v3/dist/ico/mstile-144x144.png" /> <meta name="msapplication-TileImage" content="//{{ config('app.static_asset_url') }}/dist/ico/mstile-144x144.png" />
<meta name="msapplication-square70x70logo" content="{{ config('app.static_asset_url') }}/v3/dist/ico/mstile-70x70.png" /> <meta name="msapplication-square70x70logo" content="//{{ config('app.static_asset_url') }}/dist/ico/mstile-70x70.png" />
<meta name="msapplication-square150x150logo" content="{{ config('app.static_asset_url') }}/v3/dist/ico/mstile-150x150.png" /> <meta name="msapplication-square150x150logo" content="//{{ config('app.static_asset_url') }}/dist/ico/mstile-150x150.png" />
<meta name="msapplication-wide310x150logo" content="{{ config('app.static_asset_url') }}/v3/dist/ico/mstile-310x150.png" /> <meta name="msapplication-wide310x150logo" content="//{{ config('app.static_asset_url') }}/dist/ico/mstile-310x150.png" />
<meta name="msapplication-square310x310logo" content="{{ config('app.static_asset_url') }}/v3/dist/ico/mstile-310x310.png" /> <meta name="msapplication-square310x310logo" content="//{{ config('app.static_asset_url') }}/dist/ico/mstile-310x310.png" />

View File

@@ -39,7 +39,11 @@
<div class="footer-widget"> <div class="footer-widget">
<h4>Navigation</h4> <h4>Navigation</h4>
<ul class="footer-list-widget"> <ul class="footer-list-widget">
@include('partials.nav.main') <li><a href="blog.html">Blog</a></li>
<li><a href="activity.html">Activity</a></li>
<li><a href="popular-collections-2.html">Collections</a></li>
<li><a href="signin.html">Signin</a></li>
<li><a href="signup.html">SignUp</a></li>
</ul> </ul>
</div> </div>
</div> </div>

View File

@@ -1,17 +0,0 @@
{{-- HTML Meta Tags --}}
<meta name="description" content="@yield('meta_description', 'Generating high quality album art for the No Agenda Podcast since 2010.')">
{{-- Facebook Meta Tags --}}
<meta property="og:url" content="{{ url()->current() }}">
<meta property="og:type" content="website">
<meta property="og:title" content="@yield('page-title', 'No Agenda Art Generator')">
<meta property="og:description" content="@yield('meta_description', 'Generating high quality album art for the No Agenda Podcast since 2010.')">
<meta property="og:image" content="@yield('meta_og_img', config('app.static_asset_url') . '/v3/dist/naartgen-fb-og-header.png')">
{{-- Twitter Meta Tags --}}
<meta name="twitter:card" content="summary_large_image">
<meta property="twitter:domain" content="noagendaartgenerator.com">
<meta property="twitter:url" content="{{ url()->current() }}">
<meta name="twitter:title" content="No Agenda Art Generator">
<meta name="twitter:description" content="@yield('meta_description', 'Generating high quality album art for the No Agenda Podcast since 2010.')">
<meta name="twitter:image" content="@yield('meta_og_img', config('app.static_asset_url') . '/v3/dist/naartgen-x-og-header.png')">

View File

@@ -14,19 +14,7 @@
</div> </div>
<div class="mainmenu-wrapper"> <div class="mainmenu-wrapper">
<nav id="sideNav" class="mainmenu-nav d-none d-xl-block"> <nav id="sideNav" class="mainmenu-nav d-none d-xl-block">
<ul class="mainmenu">
@include('partials/nav/main') @include('partials/nav/main')
<li class="has-dropdown has-menu-child-item">
<a {!! request()->is(['podcasts', 'podcasts/*']) ? 'class="active"' : '' !!}>Podcasts</a>
<ul class="submenu">
@foreach ($navPodcasts as $cast)
<li>
<a href="/podcasts/{{ $cast->slug }}">{{ $cast->name }}</a>
</li>
@endforeach
</ul>
</li>
</ul>
</nav> </nav>
</div> </div>
</div> </div>
@@ -51,41 +39,27 @@
--}} --}}
@if (!Auth::user()) @if (!Auth::user())
<li class="wallet-button"> <a href="/login" class="btn btn-gradient btn-small"> <li class="wallet-button"> <a href="/login" class="btn btn-gradient btn-small">
<span><i class="ri-user-add-line"></i>Join In</span></a> <span><i class="ri-wallet-3-line"></i>Join In</span></a>
</li> </li>
@else @else
<li class="avatar-info"> <a href="#"><img class="avatar_img" <li class="avatar-info"> <a href="#"><img
@if (Auth::user() && Auth::user()->artists->first() && Auth::user()->artists->first()->avatar) @if (Auth::user() && Auth::user()->artists->first())
src="{{ Auth::user()->artists->first()->avatar() }}" src="{{ Vite::asset(Auth::user()->artists->first()->avatar ?? 'resources/img/default_avatars/default_avatar_male.svg') }}"
@else @else
src="{{ config('app.static_asset_url') . '/' . ('avatars/default_avatar_male.svg') }}" src="{{ Vite::asset('resources/img/default_avatars/default_avatar_male.svg') }}"
@endif @endif
alt="user avatar"></a> alt="user avatar"></a>
<ul class="submenu"> <ul class="submenu">
@if (Auth::user()) @if (Auth::user())
<li><a href="/create-artwork"><i class="ri-image-add-line"></i> Create Artwork</a></li> <li><a href="/user-account"><i class="ri-user-line"></i> Profile</a></li>
<li><a href="/artist/{{ Auth::user()->artists->first()->slug }}"><i class="ri-profile-line"></i> View Artist Profile</a></li> <li><a href="/logout"><i class="ri-logout-box-r-line"></i>Sign Out</a></li>
<li><a href="/profile"><i class="ri-user-line"></i> Manage Account</a></li>
<form method="post" action="/logout" name="logout" id="logoutForm">
@csrf
<li><a href="#" onclick="event.preventDefault(); document.getElementById('logoutForm').submit();"><i class="ri-logout-box-r-line"></i>Sign Out</a></li>
</form>
@else @else
<li><a href="/login"><i class="ri-logout-box-r-line"></i>Sign in</a></li> <li><a href="/login"><i class="ri-logout-box-r-line"></i>Sign in</a></li>
@endif @endif
</ul> </ul>
</li> </li>
@endif @endif
<li> <livewire:themeswitch />
<label class="theme-switcher-label d-flex" for="theme-switcher">
<input type="checkbox" class="theme-switcher" id="theme-switcher">
<div class="switch-handle">
<i class="ri-sun-line light-text"></i>
<i class="ri-moon-line dark-text"></i>
</div>
</label>
</li>
<li class="setting-option mobile-menu-bar d-block d-xl-none"> <li class="setting-option mobile-menu-bar d-block d-xl-none">
<button class="hamburger-button"> <button class="hamburger-button">
<i class="ri-menu-2-fill"></i> <i class="ri-menu-2-fill"></i>
@@ -117,19 +91,7 @@
</div> </div>
</div> </div>
<nav> <nav>
<ul class="mainmenu">
@include('partials/nav/main') @include('partials/nav/main')
<li class="has-dropdown has-menu-child-item">
<a {!! request()->is(['podcasts', 'podcasts/*']) ? 'class="active"' : '' !!}>Podcasts</a>
<ul class="submenu">
@foreach ($navPodcasts as $cast)
<li>
<a href="/podcasts/{{ $cast->slug }}">{{ $cast->name }}</a>
</li>
@endforeach
</ul>
</li>
</ul>
</nav> </nav>
</div> </div>
</div> </div>

View File

@@ -1,25 +1,24 @@
<li> <ul class="mainmenu">
<li>
<a {!! request()->routeIs('home') ? 'class="active"' : '' !!} href="/">Home</a> <a {!! request()->routeIs('home') ? 'class="active"' : '' !!} href="/">Home</a>
</li> </li>
<li> <li>
<a {!! request()->is(['artworks', 'artworks/*']) ? 'class="active"' : '' !!} href="/artworks">Submitted</a> <a {!! request()->is(['artworks', 'artworks/*']) ? 'class="active"' : '' !!} href="/artworks">Submitted</a>
</li> </li>
<li> <li>
<a {!! request()->is(['artists', 'artists/*', 'artist', 'artist/*', 'profile']) ? 'class="active"' : '' !!} href="/artists">Artists</a> <a {!! request()->is(['artists', 'artists/*']) ? 'class="active"' : '' !!} href="/artists">Artists</a>
</li> </li>
@if (auth()->user()) <li>
<li> <a {!! request()->is(['leaderboards', 'leaderboards/*']) ? 'class="active"' : '' !!} href="/contact.html">Leaderboards</a>
<a {!! request()->is(['create-artwork', 'create-artwork/*']) ? 'class="active"' : '' !!} href="/create-artwork">Create</a> </li>
</li> <li class="has-dropdown has-menu-child-item">
@can('approve', App\Models\Artwork::class) <a {!! request()->is(['podcasts', 'podcasts/*']) ? 'class="active"' : '' !!}>Podcasts</a>
<li> <ul class="submenu">
<a {!! request()->is(['approve-artworks']) ? 'class="active"' : '' !!} href="/approve-artworks">Approve</a> @foreach ($navPodcasts as $cast)
</li> <li>
@endcan <a href="/podcasts/{{ $cast->slug }}">{{ $cast->name }}</a>
@endif </li>
<li> @endforeach
<a rel="me" {!! request()->is(['support*']) ? 'class="active"' : '' !!} href="/support-development">History & Support</a> </ul>
<li> </li>
<a {!! request()->is(['leaderboards', 'leaderboards/*']) ? 'class="active"' : '' !!} href="/leaderboards">Leaderboards</a> </ul>
</li>

View File

@@ -1,88 +0,0 @@
@extends('layouts.master')
@section('page-title', $podcast->name)
@section('meta_description', 'Selected artwork for the ' . $podcast->name . ' podcast on the No Agenda Art Generator')
@section('page-top')
<section class="inner-page-banner bg-2 bg-image">
<div class="container">
<div class="inner text-center">
<h1 class="title">{{ $podcast->name }}</h1>
<nav class="mt-4">
<ol class="breadcrumb justify-content-center">
<li class="breadcrumb-item"><a href="/">Home</a></li>
<li class="breadcrumb-item"><a href="/podcasts">Podcasts</a></li>
<li class="breadcrumb-item active">Podcast</li>
</ol>
</nav>
</div>
</div>
</section>
@endsection
@section('page-content')
<section class="pt-120 pb-90 masonary-wrapper-activation">
<div class="container">
<div class="row">
{{ $episodes->links() }}
</div>
</div>
<div class="container">
<div class="grid-filter-wrapper masonry-list">
<div class="resizer"></div>
@foreach ($episodes as $episode)
<div class="grid-item podcast--{{ $episode->podcast->slug }}">
<div class="explore-style-one flex-stretch">
<div class="thumb">
<a href="/podcast/{{ $episode->podcast->slug }}/episode/{{ $episode->slug }}"
data-bs-toggle="tooltip"
data-bs-placement="top"
title="View This Episode">
<img src="{{ config('app.static_asset_url')
. '/thumbnails/'
. $episode->artwork->filename ?? '#'}}"
alt="{{ $episode->title }}, {{ $episode->podcast->name }} Episode {{ number_format($episode->episode_number + 0) }}">
</a>
</div>
<div class="content">
<div class="header d-flex-between pt-4 pb-1">
<h3 class="title"><a href="/podcast/{{ $episode->podcast->slug }}/episode/{{ $episode->slug }}">"{{ $episode->title }}"</a></h3>
</div>
<div class="product-owner py-0 pb-2 d-flex-between">
<h4>{{ $episode->podcast->name }}</h4>
</div>
<div class="product-owner py-0 d-flex-between">
<span class="bid-owner">Episode {{ number_format($episode->episode_number + 0) }}</span>
</div>
<div class="product-owner py-0 pb-4 d-flex-between">
<span class="bid-owner"><em>{{ $episode->episode_date->format('D, M j') }}<sup>{{ $episode->episode_date->format('S') }}</sup>{{ $episode->episode_date->format(', Y') }}</em></span>
</div>
<div class="action-wrapper py-1 mt-4 d-flex-between">
<span class="bid-owner">Artwork By<br><strong><a
href="/artist/{{ $episode->artwork->artist->slug }}">{{ $episode->artwork->artist->name ?? 'Unknown' }}</a></strong></span>
<span class="profile-share d-flex-center"><a href="/artist/{{ $episode->artwork->artist->slug }}"
class="avatar" data-bs-toggle="tooltip"
data-bs-placement="top"
title="{{ $episode->artwork->artist->name }}">
<img class="avatar_img" src="{{ $episode->artwork->artist->avatar() }}"
alt="{{ $episode->artwork->artist->name }}"></a>
</span>
</div>
<div class="action-wrapper py-1 mb-1 d-flex-between">
<span class="bid-owner">{{ number_format($episode->artworks->count()) }} Artworks Submitted</span>
</span>
</div>
</div>
</div>
</div>
@endforeach
</div>
</div>
<div class="container">
<div class="row">
{{ $episodes->links() }}
</div>
</div>
</section>
@endsection

View File

@@ -1,63 +0,0 @@
@extends('layouts.master')
@section('page-title', $artist->name)
@section('meta_description', 'Artist profile page on the No Agenda Art Generator for ' . $artist->name)
@section('meta_og_img', $artworks->first() ? config('app.static_asset_url') . '/thumbnails/' . $artworks->first()->filename : config('app.static_asset_url') . '/v3/dist/naartgen-x-og-header.png')
@section('page-top')
<section class="inner-page-banner bg-2 bg-image">
<div class="container">
<div class="inner text-center">
<h1 class="title">{{ $artist->name }}</h1>
<nav class="mt-4">
<ol class="breadcrumb justify-content-center">
<li class="breadcrumb-item"><a href="/">Home</a></li>
<li class="breadcrumb-item"><a href="/artists">Artists</a></li>
<li class="breadcrumb-item active">Artist</li>
</ol>
</nav>
</div>
</div>
</section>
@endsection
@section('page-content')
<section class="pt-120 pb-90">
<div class="container">
<div class="row">
{{ $artworks->links() }}
</div>
</div>
<div class="container">
<div class="row">
<div class="col-xxl-3 col-xl-4 col-lg-4 mb-6">
@include('profile.partials.single-artist-card')
</div>
{{-- end bio sidebar --}}
<div class="col-xxl-9 col-xl-8 col-lg-8">
<div class="container">
<div class="row content-justify-center">
@foreach ($artworks as $artwork)
@php
$thisArtwork = $artwork;
$thisPodcast = $artwork->podcast;
$thisEpisode = $artwork->episode;
@endphp
<div class="col-xxl-4 col-xl-6 col-lg-6 col-md-6 col-sm-12 col-xs-12 mb-5">
@include('artworks.card')
</div>
@endforeach
</div>
</div>
</div>
{{-- end artist content --}}
</div>
</div>
<div class="container">
<div class="row">
{{ $artworks->links() }}
</div>
</div>
</section>
@endsection

View File

@@ -1,43 +0,0 @@
@extends('layouts.master')
@section('page-title', 'Artists')
@section('page-top')
<section class="inner-page-banner bg-2 bg-image">
<div class="container">
<div class="inner text-center">
<h1 class="title">Artists</h1>
<nav class="mt-4">
<ol class="breadcrumb justify-content-center">
<li class="breadcrumb-item"><a href="/">Home</a></li>
<li class="breadcrumb-item active"><a href="/artists">Artists</a></li>
</ol>
</nav>
</div>
</div>
</section>
@endsection
@section('page-content')
<section class="pt-120 pb-90 masonary-wrapper-activation">
<div class="container">
<div class="row">
{{ $artists->links() }}
</div>
</div>
<div class="container">
<div class="grid-filter-wrapper masonry-list">
<div class="resizer"></div>
@foreach ($artists as $artist)
<div class="grid-item">
@include('profile.partials.single-artist-card')
</div>
@endforeach
</div>
</div>
<div class="container">
<div class="row">
{{ $artists->links() }}
</div>
</div>
</section>
@endsection

View File

@@ -1,40 +1,29 @@
@extends('layouts.master')
@section('additional_headers')
@parent
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/cropperjs/1.6.1/cropper.min.css" integrity="sha512-hvNR0F/e2J7zPPfLC9auFe3/SE0yG4aJCOd/qxew74NN7eyiSKjr7xJJMu1Jy2wf7FXITpWS1E/RY8yzuXN7VA==" crossorigin="anonymous" referrerpolicy="no-referrer" />
@endsection
@section('additional_footers')
@parent
<script src="https://cdnjs.cloudflare.com/ajax/libs/cropperjs/1.6.1/cropper.min.js" integrity="sha512-9KkIqdfN7ipEW6B6k+Aq20PV31bjODg4AA52W+tYtAE0jE0kMx49bjJ3FgvS56wzmyfMUHbQ4Km2b7l9+Y/+Eg==" crossorigin="anonymous" referrerpolicy="no-referrer"></script>
@endsection
@section('page-content')
<x-app-layout> <x-app-layout>
<x-slot name="header"> <x-slot name="header">
<h2 class=""> <h2 class="font-semibold text-xl text-gray-800 dark:text-gray-200 leading-tight">
{{ __('Manage Account Details') }} {{ __('Profile') }}
</h2> </h2>
</x-slot> </x-slot>
<section class="ptb-4"> <div class="py-12">
<div class="container"> <div class="max-w-7xl mx-auto sm:px-6 lg:px-8 space-y-6">
<div class="row"> <div class="p-4 sm:p-8 bg-white dark:bg-gray-800 shadow sm:rounded-lg">
<div class="col-xl-4 col-lg-12 mb-4"> <div class="max-w-xl">
@include('profile.partials.update-profile-information-form') @include('profile.partials.update-profile-information-form')
</div> </div>
<div class="col-xl-4 col-lg-12 mb-4"> </div>
<div class="p-4 sm:p-8 bg-white dark:bg-gray-800 shadow sm:rounded-lg">
<div class="max-w-xl">
@include('profile.partials.update-password-form') @include('profile.partials.update-password-form')
</div> </div>
<div class="col-xl-4 col-lg-12 mb-4">
@include('profile.partials.update-avatar-form')
</div> </div>
<div class="col-xl-4 col-lg-12 mb-4">
@include('profile.partials.update-header-form') {{--<div class="p-4 sm:p-8 bg-white dark:bg-gray-800 shadow sm:rounded-lg">
<div class="max-w-xl">
@include('profile.partials.delete-user-form')
</div> </div>
<div class="col-xl-4 col-lg-12 mb-4"> </div>--}}
@include('profile.partials.update-location-form')
</div> </div>
</div> </div>
</div>
</section>
</x-app-layout> </x-app-layout>
@endsection

View File

@@ -1,27 +0,0 @@
<div class="single-author profile flex-stretch">
<div class="thumb">
<a href="/artist/{{ $artist->slug }}"><img src="{{ $artist->header() }}" alt="{{ $artist->name }}'s Cover Photo" /></a>
</div>
<div class="content">
<a href="/artist/{{ $artist->slug }}"><img class="author-thumb avatar_img" src="{{ $artist->avatar() }}"
alt="{{ $artist->name }}" /></a>
<h4 class="title"><a href="/artist/{{ $artist->slug }}">{{ $artist->name }}</a></h4>
<p class="title">{{ $artist->location ?? 'No Agenda Nation' }}</p>
<p class="title">Artist For {{ $artist->artworks->sortBy('created_at')->first()->created_at->diffForHumans(now(), Carbon\CarbonInterface::DIFF_ABSOLUTE) }}</p>
@if ($artist->bio)
<h4>Bio:</h4>
<p>{{ nl2br($artist->bio) }}</p>
@endif
@if ($artist->alby)
<p>Value4Value:<br>{{ strtolower($artist->alby) }}</p>
@endif
<div class="social size-small justify-content-center mb-4">
@if ($artist->website)
<a href="{{ $artist->website }}" title="website"><i class="ri-pages-line"></i></a>
@endif
</div>
<div class="size-small justify-content-center mb-4">
{{ number_format($artist->artworks->count()) }} Submitted Artworks
</div>
</div>
</div>

View File

@@ -1,18 +0,0 @@
<div class="authbox" style="min-height: 100%;">
<div class="row mt-4 gutter-2">
<div class="col">
<div class="signin-content">
<div class="mb-6">
<h3 class="mb-2">{{ __('Update Artist Avatar') }}</h3>
<p class="normal">{{ __('This avatar will be used on the artist gallery and artist profile page.') }}</p>
<p class="small">Be patient, it takes a moment to process.</p>
</div>
</div>
</div>
</div>
<div class="row mt-0 gutter-2">
<div class="col">
<livewire:artist.avatar />
</div>
</div>
</div>

View File

@@ -1,18 +0,0 @@
<div class="authbox" style="min-height: 100%;">
<div class="row mt-4 gutter-2">
<div class="col">
<div class="signin-content">
<div class="mb-6">
<h3 class="mb-2">{{ __('Update Profile Header') }}</h3>
<p class="normal">{{ __('This header is used in the artist listing and artist profile page.') }}</p>
<p class="small">Be patient, it takes a moment to process.</p>
</div>
</div>
</div>
</div>
<div class="row mt-0 gutter-2">
<div class="col">
<livewire:artist.header />
</div>
</div>
</div>

View File

@@ -1,47 +0,0 @@
<div class="authbox" style="min-height: 100%;">
<div class="row mt-4 gutter-2">
<div class="col">
<div class="signin-content">
<div class="mb-6">
<h3 class="mb-2">{{ __('Update Profile Details') }}</h3>
<p class="normal">{{ __("Update the Details shown on your profile.") }}</p>
</div>
</div>
</div>
</div>
<div class="row mt-0 gutter-2">
<div class="col">
<form method="post" action="/update-profile">
@csrf
<div>
<x-input-label for="name" :value="__('Display Name')" />
<x-text-input id="name" name="name" type="text" class="mt-1 block w-full" :value="old('name', $user->artists->first()->name)" required autocomplete="name" />
<x-input-error class="mt-2" :messages="$errors->get('name')" />
</div>
<div>
<x-input-label for="location" :value="__('Location')" />
<x-text-input id="location" name="location" type="text" class="mt-1 block w-full" :value="old('location', $user->artists->first()->location)" required autocomplete="location" />
<x-input-error class="mt-2" :messages="$errors->get('location')" />
</div>
<div class="mt-1">
<x-input-label for="alby" :value="__('Value for Value Alby Address⚡')" />
<x-text-input id="alby" name="alby" type="text" class="mt-1 block w-full" :value="old('alby', $user->artists->first()->alby)" required autocomplete="alby" />
<x-input-error class="mt-2" :messages="$errors->get('alby')" />
</div>
<div class="mt-1">
<x-input-label for="nasocial" :value="__('No Agenda Social Account')" />
<x-text-input id="nasocial" name="nasocial" type="text" class="mt-1 block w-full" :value="old('nasocial', $user->artists->first()->nasocial)" required autocomplete="naasocial" />
<x-input-error class="mt-2" :messages="$errors->get('nasocial')" />
</div>
<div class="mt-1">
<x-input-label for="website" :value="__('Website')" />
<x-text-input id="website" name="website" type="text" class="mt-1 block w-full" :value="old('website', $user->artists->first()->website)" required autocomplete="naasocial" />
<x-input-error class="mt-2" :messages="$errors->get('website')" />
</div>
<div class="d-flex justify-content-end mt-4 mb-4 text-end">
<x-primary-button class="ml-3 btn btn-gradient"><span>Update Details</span></x-primary-button>
</div>
</form>
</div>
</div>
</div>

View File

@@ -1,16 +1,14 @@
<div class="authbox" style="min-height: 100%;"> <section>
<div class="row mt-4 gutter-2"> <header>
<div class="col"> <h2 class="text-lg font-medium text-gray-900 dark:text-gray-100">
<div class="signin-content"> {{ __('Update Password') }}
<div class="mb-6"> </h2>
<h3 class="mb-2">{{ __('Update Password') }}</h3>
<p class="normal">{{ __('Ensure your account is using a long, random password to stay secure.') }}</p> <p class="mt-1 text-sm text-gray-600 dark:text-gray-400">
</div> {{ __('Ensure your account is using a long, random password to stay secure.') }}
</div> </p>
</div> </header>
</div>
<div class="row mt-0 gutter-2">
<div class="col">
<form method="post" action="{{ route('password.update') }}" class="mt-6 space-y-6"> <form method="post" action="{{ route('password.update') }}" class="mt-6 space-y-6">
@csrf @csrf
@method('put') @method('put')
@@ -33,8 +31,8 @@
<x-input-error :messages="$errors->updatePassword->get('password_confirmation')" class="mt-2" /> <x-input-error :messages="$errors->updatePassword->get('password_confirmation')" class="mt-2" />
</div> </div>
<div class="d-flex justify-content-end text-end mt-4 mb-4"> <div class="flex items-center gap-4">
<x-primary-button class="ml-3 btn btn-gradient"><span>{{ __('Save') }}</span></x-primary-button> <x-primary-button>{{ __('Save') }}</x-primary-button>
@if (session('status') === 'password-updated') @if (session('status') === 'password-updated')
<p <p
@@ -47,6 +45,4 @@
@endif @endif
</div> </div>
</form> </form>
</div> </section>
</div>
</div>

View File

@@ -1,21 +1,19 @@
<div class="authbox" style="min-height: 100%;"> <section>
<div class="row mt-4 gutter-2"> <header>
<div class="col"> <h2 class="text-lg font-medium text-gray-900 dark:text-gray-100">
<div class="signin-content"> {{ __('Profile Information') }}
<div class="mb-6"> </h2>
<h3 class="mb-2">{{ __('Update Login') }}</h3>
<p class="normal">{{ __("Update your account's username and email address. Note, your username may not be the same as your public artist profile.") }}</p> <p class="mt-1 text-sm text-gray-600 dark:text-gray-400">
</div> {{ __("Update your account's profile information and email address.") }}
</div> </p>
</div> </header>
</div>
<div class="row mt-0 gutter-2">
<div class="col">
<form id="send-verification" method="post" action="{{ route('verification.send') }}"> <form id="send-verification" method="post" action="{{ route('verification.send') }}">
@csrf @csrf
</form> </form>
<form method="post" action="{{ route('profile.update') }}"> <form method="post" action="{{ route('profile.update') }}" class="mt-6 space-y-6">
@csrf @csrf
@method('patch') @method('patch')
@@ -35,8 +33,8 @@
<p class="text-sm mt-2 text-gray-800 dark:text-gray-200"> <p class="text-sm mt-2 text-gray-800 dark:text-gray-200">
{{ __('Your email address is unverified.') }} {{ __('Your email address is unverified.') }}
<button form="send-verification" class="btn btn-small btn-gradient"> <button form="send-verification" class="underline text-sm text-gray-600 dark:text-gray-400 hover:text-gray-900 dark:hover:text-gray-100 rounded-md focus:outline-none focus:ring-2 focus:ring-offset-2 focus:ring-indigo-500 dark:focus:ring-offset-gray-800">
<span>{{ __('Click here to re-send the verification email.') }}</span> {{ __('Click here to re-send the verification email.') }}
</button> </button>
</p> </p>
@@ -49,8 +47,9 @@
@endif @endif
</div> </div>
<div class="d-flex justify-content-end mt-4 mb-4 text-end"> <div class="flex items-center gap-4">
<x-primary-button class="ml-3 btn btn-gradient"><span>{{ __('Update Login Information') }}</span></x-primary-button> <x-primary-button>{{ __('Save') }}</x-primary-button>
@if (session('status') === 'profile-updated') @if (session('status') === 'profile-updated')
<p <p
x-data="{ show: true }" x-data="{ show: true }"
@@ -62,6 +61,4 @@
@endif @endif
</div> </div>
</form> </form>
</div> </section>
</div>
</div>

View File

@@ -3,9 +3,6 @@
use App\Http\Controllers\ProfileController; use App\Http\Controllers\ProfileController;
use App\Http\Controllers\PageController; use App\Http\Controllers\PageController;
use App\Http\Controllers\ArtworkController; use App\Http\Controllers\ArtworkController;
use App\Http\Controllers\ArtistController;
use App\Http\Controllers\PodcastController;
use App\Http\Controllers\EpisodeController;
use Illuminate\Support\Facades\Route; use Illuminate\Support\Facades\Route;
use App\Livewire\Counter; use App\Livewire\Counter;
@@ -23,28 +20,17 @@ use App\Livewire\Counter;
Route::get('/', [PageController::class, 'landing'])->name('home'); Route::get('/', [PageController::class, 'landing'])->name('home');
Route::get('/artworks', [ArtworkController::class, 'index']); Route::get('/artworks', [ArtworkController::class, 'index']);
Route::get('/artworks/{id}', [ArtworkController::class, 'show']); Route::get('/artworks/{id}', [ArtworkController::class, 'show']);
Route::get('/artist/{slug}', [ArtistController::class, 'show']);
Route::get('/artists', [ArtistController::class, 'index']);
Route::get('/podcasts/{slug}', [PodcastController::class, 'show']);
Route::get('/podcast/{any}/episode/{slug}', [EpisodeController::class, 'show']);
Route::get('/leaderboards', [PageController::class, 'leaderboards'])->name('leaderboards');
Route::get('/support-development', [PageController::class, 'support'])->name('support');
Route::get('/download-archive/{type}', [ArtworkController::class, 'downloadArchiveList']);
Route::get('/dashboard', function () { Route::get('/dashboard', function () {
return view('dashboard'); return view('dashboard');
})->middleware(['auth', 'verified'])->name('dashboard'); })->middleware(['auth', 'verified'])->name('dashboard');
Route::middleware(['auth', 'verified'])->group(function () { Route::middleware(['auth', 'verified'])->group(function () {
Route::get('/profile', [ProfileController::class, 'edit'])->name('profile.edit'); Route::get('/profile', [ProfileController::class, 'edit'])->name('profile.edit');
Route::patch('/profile', [ProfileController::class, 'update'])->name('profile.update'); Route::patch('/profile', [ProfileController::class, 'update'])->name('profile.update');
Route::delete('/profile', [ProfileController::class, 'destroy'])->name('profile.destroy'); Route::delete('/profile', [ProfileController::class, 'destroy'])->name('profile.destroy');
Route::get('/create-artwork', [ArtworkController::class, 'create']); Route::get('/create-artwork', [ArtworkController::class, 'create']);
Route::post('/create-artwork', [ArtworkController::class, 'store']); Route::post('/create-artwork', [ArtworkController::class, 'store']);
Route::get('/update-avatar', [ArtistController::class, 'avatar'])->name('avatar.edit');
Route::post('/update-profile', [ArtistController::class, 'update'])->name('profile-details.edit');
Route::get('/approve-artworks', [ArtworkController::class, 'pendingApproval'])->name('show-approve-artwork');
Route::post('/approve-artworks', [ArtworkController::class, 'approve'])->name('approve-artwork');
}); });
Route::get('/counter', Counter::class); Route::get('/counter', Counter::class);

View File

@@ -1,2 +0,0 @@
*
!.gitignore

View File

@@ -7,115 +7,115 @@
resolved "https://registry.yarnpkg.com/@alloc/quick-lru/-/quick-lru-5.2.0.tgz#7bf68b20c0a350f936915fcae06f58e32007ce30" resolved "https://registry.yarnpkg.com/@alloc/quick-lru/-/quick-lru-5.2.0.tgz#7bf68b20c0a350f936915fcae06f58e32007ce30"
integrity sha512-UrcABB+4bUrFABwbluTIBErXwvbsU/V7TZWfmbgJfbkwiBuziS9gxdODUyuiecfdGQ85jglMW6juS3+z5TsKLw== integrity sha512-UrcABB+4bUrFABwbluTIBErXwvbsU/V7TZWfmbgJfbkwiBuziS9gxdODUyuiecfdGQ85jglMW6juS3+z5TsKLw==
"@esbuild/android-arm64@0.19.9": "@esbuild/android-arm64@0.17.19":
version "0.19.9" version "0.17.19"
resolved "https://registry.yarnpkg.com/@esbuild/android-arm64/-/android-arm64-0.19.9.tgz#683794bdc3d27222d3eced7b74cad15979548031" resolved "https://registry.yarnpkg.com/@esbuild/android-arm64/-/android-arm64-0.17.19.tgz#bafb75234a5d3d1b690e7c2956a599345e84a2fd"
integrity sha512-q4cR+6ZD0938R19MyEW3jEsMzbb/1rulLXiNAJQADD/XYp7pT+rOS5JGxvpRW8dFDEfjW4wLgC/3FXIw4zYglQ== integrity sha512-KBMWvEZooR7+kzY0BtbTQn0OAYY7CsiydT63pVEaPtVYF0hXbUaOyZog37DKxK7NF3XacBJOpYT4adIJh+avxA==
"@esbuild/android-arm@0.19.9": "@esbuild/android-arm@0.17.19":
version "0.19.9" version "0.17.19"
resolved "https://registry.yarnpkg.com/@esbuild/android-arm/-/android-arm-0.19.9.tgz#21a4de41f07b2af47401c601d64dfdefd056c595" resolved "https://registry.yarnpkg.com/@esbuild/android-arm/-/android-arm-0.17.19.tgz#5898f7832c2298bc7d0ab53701c57beb74d78b4d"
integrity sha512-jkYjjq7SdsWuNI6b5quymW0oC83NN5FdRPuCbs9HZ02mfVdAP8B8eeqLSYU3gb6OJEaY5CQabtTFbqBf26H3GA== integrity sha512-rIKddzqhmav7MSmoFCmDIb6e2W57geRsM94gV2l38fzhXMwq7hZoClug9USI2pFRGL06f4IOPHHpFNOkWieR8A==
"@esbuild/android-x64@0.19.9": "@esbuild/android-x64@0.17.19":
version "0.19.9" version "0.17.19"
resolved "https://registry.yarnpkg.com/@esbuild/android-x64/-/android-x64-0.19.9.tgz#e2d7674bc025ddc8699f0cc76cb97823bb63c252" resolved "https://registry.yarnpkg.com/@esbuild/android-x64/-/android-x64-0.17.19.tgz#658368ef92067866d95fb268719f98f363d13ae1"
integrity sha512-KOqoPntWAH6ZxDwx1D6mRntIgZh9KodzgNOy5Ebt9ghzffOk9X2c1sPwtM9P+0eXbefnDhqYfkh5PLP5ULtWFA== integrity sha512-uUTTc4xGNDT7YSArp/zbtmbhO0uEEK9/ETW29Wk1thYUJBz3IVnvgEiEwEa9IeLyvnpKrWK64Utw2bgUmDveww==
"@esbuild/darwin-arm64@0.19.9": "@esbuild/darwin-arm64@0.17.19":
version "0.19.9" version "0.17.19"
resolved "https://registry.yarnpkg.com/@esbuild/darwin-arm64/-/darwin-arm64-0.19.9.tgz#ae7a582289cc5c0bac15d4b9020a90cb7288f1e9" resolved "https://registry.yarnpkg.com/@esbuild/darwin-arm64/-/darwin-arm64-0.17.19.tgz#584c34c5991b95d4d48d333300b1a4e2ff7be276"
integrity sha512-KBJ9S0AFyLVx2E5D8W0vExqRW01WqRtczUZ8NRu+Pi+87opZn5tL4Y0xT0mA4FtHctd0ZgwNoN639fUUGlNIWw== integrity sha512-80wEoCfF/hFKM6WE1FyBHc9SfUblloAWx6FJkFWTWiCoht9Mc0ARGEM47e67W9rI09YoUxJL68WHfDRYEAvOhg==
"@esbuild/darwin-x64@0.19.9": "@esbuild/darwin-x64@0.17.19":
version "0.19.9" version "0.17.19"
resolved "https://registry.yarnpkg.com/@esbuild/darwin-x64/-/darwin-x64-0.19.9.tgz#8a216c66dcf51addeeb843d8cfaeff712821d12b" resolved "https://registry.yarnpkg.com/@esbuild/darwin-x64/-/darwin-x64-0.17.19.tgz#7751d236dfe6ce136cce343dce69f52d76b7f6cb"
integrity sha512-vE0VotmNTQaTdX0Q9dOHmMTao6ObjyPm58CHZr1UK7qpNleQyxlFlNCaHsHx6Uqv86VgPmR4o2wdNq3dP1qyDQ== integrity sha512-IJM4JJsLhRYr9xdtLytPLSH9k/oxR3boaUIYiHkAawtwNOXKE8KoU8tMvryogdcT8AU+Bflmh81Xn6Q0vTZbQw==
"@esbuild/freebsd-arm64@0.19.9": "@esbuild/freebsd-arm64@0.17.19":
version "0.19.9" version "0.17.19"
resolved "https://registry.yarnpkg.com/@esbuild/freebsd-arm64/-/freebsd-arm64-0.19.9.tgz#63d4f603e421252c3cd836b18d01545be7c6c440" resolved "https://registry.yarnpkg.com/@esbuild/freebsd-arm64/-/freebsd-arm64-0.17.19.tgz#cacd171665dd1d500f45c167d50c6b7e539d5fd2"
integrity sha512-uFQyd/o1IjiEk3rUHSwUKkqZwqdvuD8GevWF065eqgYfexcVkxh+IJgwTaGZVu59XczZGcN/YMh9uF1fWD8j1g== integrity sha512-pBwbc7DufluUeGdjSU5Si+P3SoMF5DQ/F/UmTSb8HXO80ZEAJmrykPyzo1IfNbAoaqw48YRpv8shwd1NoI0jcQ==
"@esbuild/freebsd-x64@0.19.9": "@esbuild/freebsd-x64@0.17.19":
version "0.19.9" version "0.17.19"
resolved "https://registry.yarnpkg.com/@esbuild/freebsd-x64/-/freebsd-x64-0.19.9.tgz#a3db52595be65360eae4de1d1fa3c1afd942e1e4" resolved "https://registry.yarnpkg.com/@esbuild/freebsd-x64/-/freebsd-x64-0.17.19.tgz#0769456eee2a08b8d925d7c00b79e861cb3162e4"
integrity sha512-WMLgWAtkdTbTu1AWacY7uoj/YtHthgqrqhf1OaEWnZb7PQgpt8eaA/F3LkV0E6K/Lc0cUr/uaVP/49iE4M4asA== integrity sha512-4lu+n8Wk0XlajEhbEffdy2xy53dpR06SlzvhGByyg36qJw6Kpfk7cp45DR/62aPH9mtJRmIyrXAS5UWBrJT6TQ==
"@esbuild/linux-arm64@0.19.9": "@esbuild/linux-arm64@0.17.19":
version "0.19.9" version "0.17.19"
resolved "https://registry.yarnpkg.com/@esbuild/linux-arm64/-/linux-arm64-0.19.9.tgz#4ae5811ce9f8d7df5eb9edd9765ea9401a534f13" resolved "https://registry.yarnpkg.com/@esbuild/linux-arm64/-/linux-arm64-0.17.19.tgz#38e162ecb723862c6be1c27d6389f48960b68edb"
integrity sha512-PiPblfe1BjK7WDAKR1Cr9O7VVPqVNpwFcPWgfn4xu0eMemzRp442hXyzF/fSwgrufI66FpHOEJk0yYdPInsmyQ== integrity sha512-ct1Tg3WGwd3P+oZYqic+YZF4snNl2bsnMKRkb3ozHmnM0dGWuxcPTTntAF6bOP0Sp4x0PjSF+4uHQ1xvxfRKqg==
"@esbuild/linux-arm@0.19.9": "@esbuild/linux-arm@0.17.19":
version "0.19.9" version "0.17.19"
resolved "https://registry.yarnpkg.com/@esbuild/linux-arm/-/linux-arm-0.19.9.tgz#9807e92cfd335f46326394805ad488e646e506f2" resolved "https://registry.yarnpkg.com/@esbuild/linux-arm/-/linux-arm-0.17.19.tgz#1a2cd399c50040184a805174a6d89097d9d1559a"
integrity sha512-C/ChPohUYoyUaqn1h17m/6yt6OB14hbXvT8EgM1ZWaiiTYz7nWZR0SYmMnB5BzQA4GXl3BgBO1l8MYqL/He3qw== integrity sha512-cdmT3KxjlOQ/gZ2cjfrQOtmhG4HJs6hhvm3mWSRDPtZ/lP5oe8FWceS10JaSJC13GBd4eH/haHnqf7hhGNLerA==
"@esbuild/linux-ia32@0.19.9": "@esbuild/linux-ia32@0.17.19":
version "0.19.9" version "0.17.19"
resolved "https://registry.yarnpkg.com/@esbuild/linux-ia32/-/linux-ia32-0.19.9.tgz#18892c10f3106652b16f9da88a0362dc95ed46c7" resolved "https://registry.yarnpkg.com/@esbuild/linux-ia32/-/linux-ia32-0.17.19.tgz#e28c25266b036ce1cabca3c30155222841dc035a"
integrity sha512-f37i/0zE0MjDxijkPSQw1CO/7C27Eojqb+r3BbHVxMLkj8GCa78TrBZzvPyA/FNLUMzP3eyHCVkAopkKVja+6Q== integrity sha512-w4IRhSy1VbsNxHRQpeGCHEmibqdTUx61Vc38APcsRbuVgK0OPEnQ0YD39Brymn96mOx48Y2laBQGqgZ0j9w6SQ==
"@esbuild/linux-loong64@0.19.9": "@esbuild/linux-loong64@0.17.19":
version "0.19.9" version "0.17.19"
resolved "https://registry.yarnpkg.com/@esbuild/linux-loong64/-/linux-loong64-0.19.9.tgz#dc2ebf9a125db0a1bba18c2bbfd4fbdcbcaf61c2" resolved "https://registry.yarnpkg.com/@esbuild/linux-loong64/-/linux-loong64-0.17.19.tgz#0f887b8bb3f90658d1a0117283e55dbd4c9dcf72"
integrity sha512-t6mN147pUIf3t6wUt3FeumoOTPfmv9Cc6DQlsVBpB7eCpLOqQDyWBP1ymXn1lDw4fNUSb/gBcKAmvTP49oIkaA== integrity sha512-2iAngUbBPMq439a+z//gE+9WBldoMp1s5GWsUSgqHLzLJ9WoZLZhpwWuym0u0u/4XmZ3gpHmzV84PonE+9IIdQ==
"@esbuild/linux-mips64el@0.19.9": "@esbuild/linux-mips64el@0.17.19":
version "0.19.9" version "0.17.19"
resolved "https://registry.yarnpkg.com/@esbuild/linux-mips64el/-/linux-mips64el-0.19.9.tgz#4c2f7c5d901015e3faf1563c4a89a50776cb07fd" resolved "https://registry.yarnpkg.com/@esbuild/linux-mips64el/-/linux-mips64el-0.17.19.tgz#f5d2a0b8047ea9a5d9f592a178ea054053a70289"
integrity sha512-jg9fujJTNTQBuDXdmAg1eeJUL4Jds7BklOTkkH80ZgQIoCTdQrDaHYgbFZyeTq8zbY+axgptncko3v9p5hLZtw== integrity sha512-LKJltc4LVdMKHsrFe4MGNPp0hqDFA1Wpt3jE1gEyM3nKUvOiO//9PheZZHfYRfYl6AwdTH4aTcXSqBerX0ml4A==
"@esbuild/linux-ppc64@0.19.9": "@esbuild/linux-ppc64@0.17.19":
version "0.19.9" version "0.17.19"
resolved "https://registry.yarnpkg.com/@esbuild/linux-ppc64/-/linux-ppc64-0.19.9.tgz#8385332713b4e7812869622163784a5633f76fc4" resolved "https://registry.yarnpkg.com/@esbuild/linux-ppc64/-/linux-ppc64-0.17.19.tgz#876590e3acbd9fa7f57a2c7d86f83717dbbac8c7"
integrity sha512-tkV0xUX0pUUgY4ha7z5BbDS85uI7ABw3V1d0RNTii7E9lbmV8Z37Pup2tsLV46SQWzjOeyDi1Q7Wx2+QM8WaCQ== integrity sha512-/c/DGybs95WXNS8y3Ti/ytqETiW7EU44MEKuCAcpPto3YjQbyK3IQVKfF6nbghD7EcLUGl0NbiL5Rt5DMhn5tg==
"@esbuild/linux-riscv64@0.19.9": "@esbuild/linux-riscv64@0.17.19":
version "0.19.9" version "0.17.19"
resolved "https://registry.yarnpkg.com/@esbuild/linux-riscv64/-/linux-riscv64-0.19.9.tgz#23f1db24fa761be311874f32036c06249aa20cba" resolved "https://registry.yarnpkg.com/@esbuild/linux-riscv64/-/linux-riscv64-0.17.19.tgz#7f49373df463cd9f41dc34f9b2262d771688bf09"
integrity sha512-DfLp8dj91cufgPZDXr9p3FoR++m3ZJ6uIXsXrIvJdOjXVREtXuQCjfMfvmc3LScAVmLjcfloyVtpn43D56JFHg== integrity sha512-FC3nUAWhvFoutlhAkgHf8f5HwFWUL6bYdvLc/TTuxKlvLi3+pPzdZiFKSWz/PF30TB1K19SuCxDTI5KcqASJqA==
"@esbuild/linux-s390x@0.19.9": "@esbuild/linux-s390x@0.17.19":
version "0.19.9" version "0.17.19"
resolved "https://registry.yarnpkg.com/@esbuild/linux-s390x/-/linux-s390x-0.19.9.tgz#2dffe497726b897c9f0109e774006e25b33b4fd0" resolved "https://registry.yarnpkg.com/@esbuild/linux-s390x/-/linux-s390x-0.17.19.tgz#e2afd1afcaf63afe2c7d9ceacd28ec57c77f8829"
integrity sha512-zHbglfEdC88KMgCWpOl/zc6dDYJvWGLiUtmPRsr1OgCViu3z5GncvNVdf+6/56O2Ca8jUU+t1BW261V6kp8qdw== integrity sha512-IbFsFbxMWLuKEbH+7sTkKzL6NJmG2vRyy6K7JJo55w+8xDk7RElYn6xvXtDW8HCfoKBFK69f3pgBJSUSQPr+4Q==
"@esbuild/linux-x64@0.19.9": "@esbuild/linux-x64@0.17.19":
version "0.19.9" version "0.17.19"
resolved "https://registry.yarnpkg.com/@esbuild/linux-x64/-/linux-x64-0.19.9.tgz#ceb1d62cd830724ff5b218e5d3172a8bad59420e" resolved "https://registry.yarnpkg.com/@esbuild/linux-x64/-/linux-x64-0.17.19.tgz#8a0e9738b1635f0c53389e515ae83826dec22aa4"
integrity sha512-JUjpystGFFmNrEHQnIVG8hKwvA2DN5o7RqiO1CVX8EN/F/gkCjkUMgVn6hzScpwnJtl2mPR6I9XV1oW8k9O+0A== integrity sha512-68ngA9lg2H6zkZcyp22tsVt38mlhWde8l3eJLWkyLrp4HwMUr3c1s/M2t7+kHIhvMjglIBrFpncX1SzMckomGw==
"@esbuild/netbsd-x64@0.19.9": "@esbuild/netbsd-x64@0.17.19":
version "0.19.9" version "0.17.19"
resolved "https://registry.yarnpkg.com/@esbuild/netbsd-x64/-/netbsd-x64-0.19.9.tgz#0cbca65e9ef4d3fc41502d3e055e6f49479a8f18" resolved "https://registry.yarnpkg.com/@esbuild/netbsd-x64/-/netbsd-x64-0.17.19.tgz#c29fb2453c6b7ddef9a35e2c18b37bda1ae5c462"
integrity sha512-GThgZPAwOBOsheA2RUlW5UeroRfESwMq/guy8uEe3wJlAOjpOXuSevLRd70NZ37ZrpO6RHGHgEHvPg1h3S1Jug== integrity sha512-CwFq42rXCR8TYIjIfpXCbRX0rp1jo6cPIUPSaWwzbVI4aOfX96OXY8M6KNmtPcg7QjYeDmN+DD0Wp3LaBOLf4Q==
"@esbuild/openbsd-x64@0.19.9": "@esbuild/openbsd-x64@0.17.19":
version "0.19.9" version "0.17.19"
resolved "https://registry.yarnpkg.com/@esbuild/openbsd-x64/-/openbsd-x64-0.19.9.tgz#1f57adfbee09c743292c6758a3642e875bcad1cf" resolved "https://registry.yarnpkg.com/@esbuild/openbsd-x64/-/openbsd-x64-0.17.19.tgz#95e75a391403cb10297280d524d66ce04c920691"
integrity sha512-Ki6PlzppaFVbLnD8PtlVQfsYw4S9n3eQl87cqgeIw+O3sRr9IghpfSKY62mggdt1yCSZ8QWvTZ9jo9fjDSg9uw== integrity sha512-cnq5brJYrSZ2CF6c35eCmviIN3k3RczmHz8eYaVlNasVqsNY+JKohZU5MKmaOI+KkllCdzOKKdPs762VCPC20g==
"@esbuild/sunos-x64@0.19.9": "@esbuild/sunos-x64@0.17.19":
version "0.19.9" version "0.17.19"
resolved "https://registry.yarnpkg.com/@esbuild/sunos-x64/-/sunos-x64-0.19.9.tgz#116be6adbd2c7479edeeb5f6ea0441002ab4cb9c" resolved "https://registry.yarnpkg.com/@esbuild/sunos-x64/-/sunos-x64-0.17.19.tgz#722eaf057b83c2575937d3ffe5aeb16540da7273"
integrity sha512-MLHj7k9hWh4y1ddkBpvRj2b9NCBhfgBt3VpWbHQnXRedVun/hC7sIyTGDGTfsGuXo4ebik2+3ShjcPbhtFwWDw== integrity sha512-vCRT7yP3zX+bKWFeP/zdS6SqdWB8OIpaRq/mbXQxTGHnIxspRtigpkUcDMlSCOejlHowLqII7K2JKevwyRP2rg==
"@esbuild/win32-arm64@0.19.9": "@esbuild/win32-arm64@0.17.19":
version "0.19.9" version "0.17.19"
resolved "https://registry.yarnpkg.com/@esbuild/win32-arm64/-/win32-arm64-0.19.9.tgz#2be22131ab18af4693fd737b161d1ef34de8ca9d" resolved "https://registry.yarnpkg.com/@esbuild/win32-arm64/-/win32-arm64-0.17.19.tgz#9aa9dc074399288bdcdd283443e9aeb6b9552b6f"
integrity sha512-GQoa6OrQ8G08guMFgeXPH7yE/8Dt0IfOGWJSfSH4uafwdC7rWwrfE6P9N8AtPGIjUzdo2+7bN8Xo3qC578olhg== integrity sha512-yYx+8jwowUstVdorcMdNlzklLYhPxjniHWFKgRqH7IFlUEa0Umu3KuYplf1HUZZ422e3NU9F4LGb+4O0Kdcaag==
"@esbuild/win32-ia32@0.19.9": "@esbuild/win32-ia32@0.17.19":
version "0.19.9" version "0.17.19"
resolved "https://registry.yarnpkg.com/@esbuild/win32-ia32/-/win32-ia32-0.19.9.tgz#e10ead5a55789b167b4225d2469324538768af7c" resolved "https://registry.yarnpkg.com/@esbuild/win32-ia32/-/win32-ia32-0.17.19.tgz#95ad43c62ad62485e210f6299c7b2571e48d2b03"
integrity sha512-UOozV7Ntykvr5tSOlGCrqU3NBr3d8JqPes0QWN2WOXfvkWVGRajC+Ym0/Wj88fUgecUCLDdJPDF0Nna2UK3Qtg== integrity sha512-eggDKanJszUtCdlVs0RB+h35wNlb5v4TWEkq4vZcmVt5u/HiDZrTXe2bWFQUez3RgNHwx/x4sk5++4NSSicKkw==
"@esbuild/win32-x64@0.19.9": "@esbuild/win32-x64@0.17.19":
version "0.19.9" version "0.17.19"
resolved "https://registry.yarnpkg.com/@esbuild/win32-x64/-/win32-x64-0.19.9.tgz#b2da6219b603e3fa371a78f53f5361260d0c5585" resolved "https://registry.yarnpkg.com/@esbuild/win32-x64/-/win32-x64-0.17.19.tgz#8cfaf2ff603e9aabb910e9c0558c26cf32744061"
integrity sha512-oxoQgglOP7RH6iasDrhY+R/3cHrfwIDvRlT4CGChflq6twk8iENeVvMJjmvBb94Ik1Z+93iGO27err7w6l54GQ== integrity sha512-lAhycmKnVOuRYNtRtatQR1LPQf2oYCkRGkSFnseDAKPl8lu5SOsK/e1sXe5a0Pc5kHIHe6P2I/ilntNv2xf3cA==
"@jridgewell/gen-mapping@^0.3.2": "@jridgewell/gen-mapping@^0.3.2":
version "0.3.3" version "0.3.3"
@@ -126,28 +126,33 @@
"@jridgewell/sourcemap-codec" "^1.4.10" "@jridgewell/sourcemap-codec" "^1.4.10"
"@jridgewell/trace-mapping" "^0.3.9" "@jridgewell/trace-mapping" "^0.3.9"
"@jridgewell/resolve-uri@^3.1.0": "@jridgewell/resolve-uri@3.1.0":
version "3.1.1" version "3.1.0"
resolved "https://registry.yarnpkg.com/@jridgewell/resolve-uri/-/resolve-uri-3.1.1.tgz#c08679063f279615a3326583ba3a90d1d82cc721" resolved "https://registry.yarnpkg.com/@jridgewell/resolve-uri/-/resolve-uri-3.1.0.tgz#2203b118c157721addfe69d47b70465463066d78"
integrity sha512-dSYZh7HhCDtCKm4QakX0xFpsRDqjjtZf/kjI/v3T3Nwt5r8/qz/M19F9ySyOqU94SXBmeG9ttTul+YnR4LOxFA== integrity sha512-F2msla3tad+Mfht5cJq7LSXcdudKTWCVYUgw6pLFOOHSTtZlj6SWNYAp+AhuqLmWdBO2X5hPrLcu8cVP8fy28w==
"@jridgewell/set-array@^1.0.1": "@jridgewell/set-array@^1.0.1":
version "1.1.2" version "1.1.2"
resolved "https://registry.yarnpkg.com/@jridgewell/set-array/-/set-array-1.1.2.tgz#7c6cf998d6d20b914c0a55a91ae928ff25965e72" resolved "https://registry.yarnpkg.com/@jridgewell/set-array/-/set-array-1.1.2.tgz#7c6cf998d6d20b914c0a55a91ae928ff25965e72"
integrity sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw== integrity sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw==
"@jridgewell/sourcemap-codec@^1.4.10", "@jridgewell/sourcemap-codec@^1.4.14": "@jridgewell/sourcemap-codec@1.4.14":
version "1.4.14"
resolved "https://registry.yarnpkg.com/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.14.tgz#add4c98d341472a289190b424efbdb096991bb24"
integrity sha512-XPSJHWmi394fuUuzDnGz1wiKqWfo1yXecHQMRf2l6hztTO+nPru658AyDngaBe7isIxEkRsPR3FZh+s7iVa4Uw==
"@jridgewell/sourcemap-codec@^1.4.10":
version "1.4.15" version "1.4.15"
resolved "https://registry.yarnpkg.com/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz#d7c6e6755c78567a951e04ab52ef0fd26de59f32" resolved "https://registry.yarnpkg.com/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz#d7c6e6755c78567a951e04ab52ef0fd26de59f32"
integrity sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg== integrity sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==
"@jridgewell/trace-mapping@^0.3.9": "@jridgewell/trace-mapping@^0.3.9":
version "0.3.20" version "0.3.18"
resolved "https://registry.yarnpkg.com/@jridgewell/trace-mapping/-/trace-mapping-0.3.20.tgz#72e45707cf240fa6b081d0366f8265b0cd10197f" resolved "https://registry.yarnpkg.com/@jridgewell/trace-mapping/-/trace-mapping-0.3.18.tgz#25783b2086daf6ff1dcb53c9249ae480e4dd4cd6"
integrity sha512-R8LcPeWZol2zR8mmH3JeKQ6QRCFb7XgUhV9ZlGhHLGyg4wpPiPZNQOOWhFZhxKw8u//yTbNGI42Bx/3paXEQ+Q== integrity sha512-w+niJYzMHdd7USdiH2U6869nqhD2nbfZXND5Yp93qIbEmnDNk7PD48o+YchRVpzMU7M6jVCbenTR7PA1FLQ9pA==
dependencies: dependencies:
"@jridgewell/resolve-uri" "^3.1.0" "@jridgewell/resolve-uri" "3.1.0"
"@jridgewell/sourcemap-codec" "^1.4.14" "@jridgewell/sourcemap-codec" "1.4.14"
"@nodelib/fs.scandir@2.1.5": "@nodelib/fs.scandir@2.1.5":
version "2.1.5" version "2.1.5"
@@ -170,75 +175,10 @@
"@nodelib/fs.scandir" "2.1.5" "@nodelib/fs.scandir" "2.1.5"
fastq "^1.6.0" fastq "^1.6.0"
"@rollup/rollup-android-arm-eabi@4.9.0":
version "4.9.0"
resolved "https://registry.yarnpkg.com/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.9.0.tgz#0437b27edd7095d0b6d5db99d13af8157d7c58b0"
integrity sha512-+1ge/xmaJpm1KVBuIH38Z94zj9fBD+hp+/5WLaHgyY8XLq1ibxk/zj6dTXaqM2cAbYKq8jYlhHd6k05If1W5xA==
"@rollup/rollup-android-arm64@4.9.0":
version "4.9.0"
resolved "https://registry.yarnpkg.com/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.9.0.tgz#d4c14ef9e45d5c46b8d1f611ab8124a611d5be5b"
integrity sha512-im6hUEyQ7ZfoZdNvtwgEJvBWZYauC9KVKq1w58LG2Zfz6zMd8gRrbN+xCVoqA2hv/v6fm9lp5LFGJ3za8EQH3A==
"@rollup/rollup-darwin-arm64@4.9.0":
version "4.9.0"
resolved "https://registry.yarnpkg.com/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.9.0.tgz#6f3fdf5712db6b5e3d8f62a86a09cd659dd871f9"
integrity sha512-u7aTMskN6Dmg1lCT0QJ+tINRt+ntUrvVkhbPfFz4bCwRZvjItx2nJtwJnJRlKMMaQCHRjrNqHRDYvE4mBm3DlQ==
"@rollup/rollup-darwin-x64@4.9.0":
version "4.9.0"
resolved "https://registry.yarnpkg.com/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.9.0.tgz#626d7786fe7c10b2e8533ad981b4a791fd72b9d0"
integrity sha512-8FvEl3w2ExmpcOmX5RJD0yqXcVSOqAJJUJ29Lca29Ik+3zPS1yFimr2fr5JSZ4Z5gt8/d7WqycpgkX9nocijSw==
"@rollup/rollup-linux-arm-gnueabihf@4.9.0":
version "4.9.0"
resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.9.0.tgz#57ece7bb1b7659a3ea2ace580a63b8f92b3161f1"
integrity sha512-lHoKYaRwd4gge+IpqJHCY+8Vc3hhdJfU6ukFnnrJasEBUvVlydP8PuwndbWfGkdgSvZhHfSEw6urrlBj0TSSfg==
"@rollup/rollup-linux-arm64-gnu@4.9.0":
version "4.9.0"
resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.9.0.tgz#345b276b814a5377344adc5780c4dfb7cd0e8ba9"
integrity sha512-JbEPfhndYeWHfOSeh4DOFvNXrj7ls9S/2omijVsao+LBPTPayT1uKcK3dHW3MwDJ7KO11t9m2cVTqXnTKpeaiw==
"@rollup/rollup-linux-arm64-musl@4.9.0":
version "4.9.0"
resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.9.0.tgz#61cc6516e6e92e2205ea1d0ac30326379b0563c8"
integrity sha512-ahqcSXLlcV2XUBM3/f/C6cRoh7NxYA/W7Yzuv4bDU1YscTFw7ay4LmD7l6OS8EMhTNvcrWGkEettL1Bhjf+B+w==
"@rollup/rollup-linux-riscv64-gnu@4.9.0":
version "4.9.0"
resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.9.0.tgz#e9add70ddca7bd6f685ec447ae83eb3be552f211"
integrity sha512-uwvOYNtLw8gVtrExKhdFsYHA/kotURUmZYlinH2VcQxNCQJeJXnkmWgw2hI9Xgzhgu7J9QvWiq9TtTVwWMDa+w==
"@rollup/rollup-linux-x64-gnu@4.9.0":
version "4.9.0"
resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.9.0.tgz#ece153613f0cf2c864dbfc2076c579da8abd51a9"
integrity sha512-m6pkSwcZZD2LCFHZX/zW2aLIISyzWLU3hrLLzQKMI12+OLEzgruTovAxY5sCZJkipklaZqPy/2bEEBNjp+Y7xg==
"@rollup/rollup-linux-x64-musl@4.9.0":
version "4.9.0"
resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.9.0.tgz#2d2dbdf5fbf2c19d1f3d31b8a7850b57f5799037"
integrity sha512-VFAC1RDRSbU3iOF98X42KaVicAfKf0m0OvIu8dbnqhTe26Kh6Ym9JrDulz7Hbk7/9zGc41JkV02g+p3BivOdAg==
"@rollup/rollup-win32-arm64-msvc@4.9.0":
version "4.9.0"
resolved "https://registry.yarnpkg.com/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.9.0.tgz#bf2dbad350376e46cb77fab408bb398ad5f3648d"
integrity sha512-9jPgMvTKXARz4inw6jezMLA2ihDBvgIU9Ml01hjdVpOcMKyxFBJrn83KVQINnbeqDv0+HdO1c09hgZ8N0s820Q==
"@rollup/rollup-win32-ia32-msvc@4.9.0":
version "4.9.0"
resolved "https://registry.yarnpkg.com/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.9.0.tgz#5c26b07f74f4054f3ecf202550100496ed2e73f3"
integrity sha512-WE4pT2kTXQN2bAv40Uog0AsV7/s9nT9HBWXAou8+++MBCnY51QS02KYtm6dQxxosKi1VIz/wZIrTQO5UP2EW+Q==
"@rollup/rollup-win32-x64-msvc@4.9.0":
version "4.9.0"
resolved "https://registry.yarnpkg.com/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.9.0.tgz#4ea610e0c40a07a8afa2977cbf80507f41c2271c"
integrity sha512-aPP5Q5AqNGuT0tnuEkK/g4mnt3ZhheiXrDIiSVIHN9mcN21OyXDVbEMqmXPE7e2OplNLDkcvV+ZoGJa2ZImFgw==
"@tailwindcss/forms@^0.5.2": "@tailwindcss/forms@^0.5.2":
version "0.5.7" version "0.5.3"
resolved "https://registry.yarnpkg.com/@tailwindcss/forms/-/forms-0.5.7.tgz#db5421f062a757b5f828bc9286ba626c6685e821" resolved "https://registry.yarnpkg.com/@tailwindcss/forms/-/forms-0.5.3.tgz#e4d7989686cbcaf416c53f1523df5225332a86e7"
integrity sha512-QE7X69iQI+ZXwldE+rzasvbJiyV/ju1FGHH0Qn2W3FKbuYtqp8LKcy6iSw79fVUT5/Vvf+0XgLCeYVG+UV6hOw== integrity sha512-y5mb86JUoiUgBjY/o6FJSFZSEttfb3Q5gllE4xoKjAAD+vBrnIhE4dViwUuow3va8mpH4s9jyUbUbrRGoRdc2Q==
dependencies: dependencies:
mini-svg-data-uri "^1.2.3" mini-svg-data-uri "^1.2.3"
@@ -255,9 +195,9 @@
integrity sha512-oJ4F3TnvpXaQwZJNF3ZK+kLPHKarDmJjJ6jyzVNDKH9md1dptjC7lWR//jrGuLdek/U6iltWxqAnYOu8gCiOvA== integrity sha512-oJ4F3TnvpXaQwZJNF3ZK+kLPHKarDmJjJ6jyzVNDKH9md1dptjC7lWR//jrGuLdek/U6iltWxqAnYOu8gCiOvA==
alpinejs@^3.4.2: alpinejs@^3.4.2:
version "3.13.3" version "3.12.2"
resolved "https://registry.yarnpkg.com/alpinejs/-/alpinejs-3.13.3.tgz#92eb7e869b99ff548e7a55044e45660597cf530b" resolved "https://registry.yarnpkg.com/alpinejs/-/alpinejs-3.12.2.tgz#e76ffd00a4858623acf84112c27a4eecbee9ac74"
integrity sha512-WZ6WQjkAOl+WdW/jukzNHq9zHFDNKmkk/x6WF7WdyNDD6woinrfXCVsZXm0galjbco+pEpYmJLtwlZwcOfIVdg== integrity sha512-wrUZULm9w6DYwWcUtB/anFLgRaF4riSuPgIJ3gcPUS8st9luAJnAxoIgro/Al97d2McSSz/JypWg/NlmKFIJJA==
dependencies: dependencies:
"@vue/reactivity" "~3.1.1" "@vue/reactivity" "~3.1.1"
@@ -294,21 +234,21 @@ asynckit@^0.4.0:
integrity sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q== integrity sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==
autoprefixer@^10.4.2: autoprefixer@^10.4.2:
version "10.4.16" version "10.4.14"
resolved "https://registry.yarnpkg.com/autoprefixer/-/autoprefixer-10.4.16.tgz#fad1411024d8670880bdece3970aa72e3572feb8" resolved "https://registry.yarnpkg.com/autoprefixer/-/autoprefixer-10.4.14.tgz#e28d49902f8e759dd25b153264e862df2705f79d"
integrity sha512-7vd3UC6xKp0HLfua5IjZlcXvGAGy7cBAXTg2lyQ/8WpNhd6SiZ8Be+xm3FyBSYJx5GKcpRCzBh7RH4/0dnY+uQ== integrity sha512-FQzyfOsTlwVzjHxKEqRIAdJx9niO6VCBCoEwax/VLSoQF29ggECcPuBqUMZ+u8jCZOPSy8b8/8KnuFbp0SaFZQ==
dependencies: dependencies:
browserslist "^4.21.10" browserslist "^4.21.5"
caniuse-lite "^1.0.30001538" caniuse-lite "^1.0.30001464"
fraction.js "^4.3.6" fraction.js "^4.2.0"
normalize-range "^0.1.2" normalize-range "^0.1.2"
picocolors "^1.0.0" picocolors "^1.0.0"
postcss-value-parser "^4.2.0" postcss-value-parser "^4.2.0"
axios@^1.1.2: axios@^1.1.2:
version "1.6.2" version "1.4.0"
resolved "https://registry.yarnpkg.com/axios/-/axios-1.6.2.tgz#de67d42c755b571d3e698df1b6504cde9b0ee9f2" resolved "https://registry.yarnpkg.com/axios/-/axios-1.4.0.tgz#38a7bf1224cd308de271146038b551d725f0be1f"
integrity sha512-7i24Ri4pmDRfJTR7LDBhsOTtcm+9kjX5WiY1X3wIisx6G9So3pfMkEiU7emUBe46oceVImccTEM3k6C5dbVW8A== integrity sha512-S4XCWMEmzvo64T9GfvQDOXgYRDJ/wsSZc7Jvdgx5u1sd0JwsuPLqb3SYmusag+edF6ziyMensPVqLTSc1PiSEA==
dependencies: dependencies:
follow-redirects "^1.15.0" follow-redirects "^1.15.0"
form-data "^4.0.0" form-data "^4.0.0"
@@ -339,25 +279,25 @@ braces@^3.0.2, braces@~3.0.2:
dependencies: dependencies:
fill-range "^7.0.1" fill-range "^7.0.1"
browserslist@^4.21.10: browserslist@^4.21.5:
version "4.22.2" version "4.21.9"
resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.22.2.tgz#704c4943072bd81ea18997f3bd2180e89c77874b" resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.21.9.tgz#e11bdd3c313d7e2a9e87e8b4b0c7872b13897635"
integrity sha512-0UgcrvQmBDvZHFGdYUehrCNIazki7/lUP3kkoi/r3YB2amZbFM9J43ZRkJTXBUZK4gmx56+Sqk9+Vs9mwZx9+A== integrity sha512-M0MFoZzbUrRU4KNfCrDLnvyE7gub+peetoTid3TBIqtunaDJyXlwhakT+/VkvSXcfIzFfK/nkCs4nmyTmxdNSg==
dependencies: dependencies:
caniuse-lite "^1.0.30001565" caniuse-lite "^1.0.30001503"
electron-to-chromium "^1.4.601" electron-to-chromium "^1.4.431"
node-releases "^2.0.14" node-releases "^2.0.12"
update-browserslist-db "^1.0.13" update-browserslist-db "^1.0.11"
camelcase-css@^2.0.1: camelcase-css@^2.0.1:
version "2.0.1" version "2.0.1"
resolved "https://registry.yarnpkg.com/camelcase-css/-/camelcase-css-2.0.1.tgz#ee978f6947914cc30c6b44741b6ed1df7f043fd5" resolved "https://registry.yarnpkg.com/camelcase-css/-/camelcase-css-2.0.1.tgz#ee978f6947914cc30c6b44741b6ed1df7f043fd5"
integrity sha512-QOSvevhslijgYwRx6Rv7zKdMF8lbRmx+uQGx2+vDc+KI/eBnsy9kit5aj23AgGu3pa4t9AgwbnXWqS+iOY+2aA== integrity sha512-QOSvevhslijgYwRx6Rv7zKdMF8lbRmx+uQGx2+vDc+KI/eBnsy9kit5aj23AgGu3pa4t9AgwbnXWqS+iOY+2aA==
caniuse-lite@^1.0.30001538, caniuse-lite@^1.0.30001565: caniuse-lite@^1.0.30001464, caniuse-lite@^1.0.30001503:
version "1.0.30001570" version "1.0.30001506"
resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001570.tgz#b4e5c1fa786f733ab78fc70f592df6b3f23244ca" resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001506.tgz#35bd814b310a487970c585430e9e80ee23faf14b"
integrity sha512-+3e0ASu4sw1SWaoCtvPeyXp+5PsjigkSt8OXZbF9StH5pQWbxEjLAZE3n8Aup5udop1uRiKA7a4utUk/uoSpUw== integrity sha512-6XNEcpygZMCKaufIcgpQNZNf00GEqc7VQON+9Rd0K1bMYo8xhMZRAo5zpbnbMNizi4YNgIDAFrdykWsvY3H4Hw==
"chokidar@>=3.0.0 <4.0.0", chokidar@^3.5.3: "chokidar@>=3.0.0 <4.0.0", chokidar@^3.5.3:
version "3.5.3" version "3.5.3"
@@ -396,11 +336,6 @@ concat-map@0.0.1:
resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b" resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b"
integrity sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg== integrity sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==
cropperjs@^1.6.1:
version "1.6.1"
resolved "https://registry.yarnpkg.com/cropperjs/-/cropperjs-1.6.1.tgz#fd132021d93b824b1b0f2c2c3b763419fb792d89"
integrity sha512-F4wsi+XkDHCOMrHMYjrTEE4QBOrsHHN5/2VsVAaRq8P7E5z7xQpT75S+f/9WikmBEailas3+yo+6zPIomW+NOA==
cssesc@^3.0.0: cssesc@^3.0.0:
version "3.0.0" version "3.0.0"
resolved "https://registry.yarnpkg.com/cssesc/-/cssesc-3.0.0.tgz#37741919903b868565e1c09ea747445cd18983ee" resolved "https://registry.yarnpkg.com/cssesc/-/cssesc-3.0.0.tgz#37741919903b868565e1c09ea747445cd18983ee"
@@ -426,38 +361,38 @@ dlv@^1.1.3:
resolved "https://registry.yarnpkg.com/dlv/-/dlv-1.1.3.tgz#5c198a8a11453596e751494d49874bc7732f2e79" resolved "https://registry.yarnpkg.com/dlv/-/dlv-1.1.3.tgz#5c198a8a11453596e751494d49874bc7732f2e79"
integrity sha512-+HlytyjlPKnIG8XuRG8WvmBP8xs8P71y+SKKS6ZXWoEgLuePxtDoUEiH7WkdePWrQ5JBpE6aoVqfZfJUQkjXwA== integrity sha512-+HlytyjlPKnIG8XuRG8WvmBP8xs8P71y+SKKS6ZXWoEgLuePxtDoUEiH7WkdePWrQ5JBpE6aoVqfZfJUQkjXwA==
electron-to-chromium@^1.4.601: electron-to-chromium@^1.4.431:
version "1.4.613" version "1.4.435"
resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.4.613.tgz#529e4fc65576ecfd055d7d4619fade4fac446af2" resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.4.435.tgz#761c34300603b9f1234f0b6155870d3002435db6"
integrity sha512-r4x5+FowKG6q+/Wj0W9nidx7QO31BJwmR2uEo+Qh3YLGQ8SbBAFuDFpTxzly/I2gsbrFwBuIjrMp423L3O5U3w== integrity sha512-B0CBWVFhvoQCW/XtjRzgrmqcgVWg6RXOEM/dK59+wFV93BFGR6AeNKc4OyhM+T3IhJaOOG8o/V+33Y2mwJWtzw==
esbuild@^0.19.3: esbuild@^0.17.5:
version "0.19.9" version "0.17.19"
resolved "https://registry.yarnpkg.com/esbuild/-/esbuild-0.19.9.tgz#423a8f35153beb22c0b695da1cd1e6c0c8cdd490" resolved "https://registry.yarnpkg.com/esbuild/-/esbuild-0.17.19.tgz#087a727e98299f0462a3d0bcdd9cd7ff100bd955"
integrity sha512-U9CHtKSy+EpPsEBa+/A2gMs/h3ylBC0H0KSqIg7tpztHerLi6nrrcoUJAkNCEPumx8yJ+Byic4BVwHgRbN0TBg== integrity sha512-XQ0jAPFkK/u3LcVRcvVHQcTIqD6E2H1fvZMA5dQPSOWb3suUbWbfbRf94pjc0bNzRYLfIrDRQXr7X+LHIm5oHw==
optionalDependencies: optionalDependencies:
"@esbuild/android-arm" "0.19.9" "@esbuild/android-arm" "0.17.19"
"@esbuild/android-arm64" "0.19.9" "@esbuild/android-arm64" "0.17.19"
"@esbuild/android-x64" "0.19.9" "@esbuild/android-x64" "0.17.19"
"@esbuild/darwin-arm64" "0.19.9" "@esbuild/darwin-arm64" "0.17.19"
"@esbuild/darwin-x64" "0.19.9" "@esbuild/darwin-x64" "0.17.19"
"@esbuild/freebsd-arm64" "0.19.9" "@esbuild/freebsd-arm64" "0.17.19"
"@esbuild/freebsd-x64" "0.19.9" "@esbuild/freebsd-x64" "0.17.19"
"@esbuild/linux-arm" "0.19.9" "@esbuild/linux-arm" "0.17.19"
"@esbuild/linux-arm64" "0.19.9" "@esbuild/linux-arm64" "0.17.19"
"@esbuild/linux-ia32" "0.19.9" "@esbuild/linux-ia32" "0.17.19"
"@esbuild/linux-loong64" "0.19.9" "@esbuild/linux-loong64" "0.17.19"
"@esbuild/linux-mips64el" "0.19.9" "@esbuild/linux-mips64el" "0.17.19"
"@esbuild/linux-ppc64" "0.19.9" "@esbuild/linux-ppc64" "0.17.19"
"@esbuild/linux-riscv64" "0.19.9" "@esbuild/linux-riscv64" "0.17.19"
"@esbuild/linux-s390x" "0.19.9" "@esbuild/linux-s390x" "0.17.19"
"@esbuild/linux-x64" "0.19.9" "@esbuild/linux-x64" "0.17.19"
"@esbuild/netbsd-x64" "0.19.9" "@esbuild/netbsd-x64" "0.17.19"
"@esbuild/openbsd-x64" "0.19.9" "@esbuild/openbsd-x64" "0.17.19"
"@esbuild/sunos-x64" "0.19.9" "@esbuild/sunos-x64" "0.17.19"
"@esbuild/win32-arm64" "0.19.9" "@esbuild/win32-arm64" "0.17.19"
"@esbuild/win32-ia32" "0.19.9" "@esbuild/win32-ia32" "0.17.19"
"@esbuild/win32-x64" "0.19.9" "@esbuild/win32-x64" "0.17.19"
escalade@^3.1.1: escalade@^3.1.1:
version "3.1.1" version "3.1.1"
@@ -469,10 +404,10 @@ ev-emitter@^1.0.0:
resolved "https://registry.yarnpkg.com/ev-emitter/-/ev-emitter-1.1.1.tgz#8f18b0ce5c76a5d18017f71c0a795c65b9138f2a" resolved "https://registry.yarnpkg.com/ev-emitter/-/ev-emitter-1.1.1.tgz#8f18b0ce5c76a5d18017f71c0a795c65b9138f2a"
integrity sha512-ipiDYhdQSCZ4hSbX4rMW+XzNKMD1prg/sTvoVmSLkuQ1MVlwjJQQA+sW8tMYR3BLUr9KjodFV4pvzunvRhd33Q== integrity sha512-ipiDYhdQSCZ4hSbX4rMW+XzNKMD1prg/sTvoVmSLkuQ1MVlwjJQQA+sW8tMYR3BLUr9KjodFV4pvzunvRhd33Q==
fast-glob@^3.3.0: fast-glob@^3.2.12:
version "3.3.2" version "3.2.12"
resolved "https://registry.yarnpkg.com/fast-glob/-/fast-glob-3.3.2.tgz#a904501e57cfdd2ffcded45e99a54fef55e46129" resolved "https://registry.yarnpkg.com/fast-glob/-/fast-glob-3.2.12.tgz#7f39ec99c2e6ab030337142da9e0c18f37afae80"
integrity sha512-oX2ruAFQwf/Orj8m737Y5adxDQO0LAB7/S5MnxCdTNDd4p6BsyIVsv9JQsATbTSq8KHRpLwIHbVlUNatxd+1Ow== integrity sha512-DVj4CQIYYow0BlaelwK1pHl5n5cRSJfM60UA0zK891sVInoPri2Ekj7+e1CT3/3qxXenpI+nBBmQAcJPJgaj4w==
dependencies: dependencies:
"@nodelib/fs.stat" "^2.0.2" "@nodelib/fs.stat" "^2.0.2"
"@nodelib/fs.walk" "^1.2.3" "@nodelib/fs.walk" "^1.2.3"
@@ -502,9 +437,9 @@ fizzy-ui-utils@^2.0.0, fizzy-ui-utils@^2.0.4:
desandro-matches-selector "^2.0.0" desandro-matches-selector "^2.0.0"
follow-redirects@^1.15.0: follow-redirects@^1.15.0:
version "1.15.3" version "1.15.2"
resolved "https://registry.yarnpkg.com/follow-redirects/-/follow-redirects-1.15.3.tgz#fe2f3ef2690afce7e82ed0b44db08165b207123a" resolved "https://registry.yarnpkg.com/follow-redirects/-/follow-redirects-1.15.2.tgz#b460864144ba63f2681096f274c4e57026da2c13"
integrity sha512-1VzOtuEM8pC9SFU1E+8KfTjZyMztRsgEfwQl44z8A25uy13jSzTj6dyK2Df52iV0vgHCfBwLhDWevLn95w5v6Q== integrity sha512-VQLG33o04KaQ8uYi2tVNbdrWp1QWxNNea+nmIB4EVM28v0hmP17z7aG1+wAkNzVq4KeXTq3221ye5qTJP91JwA==
form-data@^4.0.0: form-data@^4.0.0:
version "4.0.0" version "4.0.0"
@@ -515,25 +450,25 @@ form-data@^4.0.0:
combined-stream "^1.0.8" combined-stream "^1.0.8"
mime-types "^2.1.12" mime-types "^2.1.12"
fraction.js@^4.3.6: fraction.js@^4.2.0:
version "4.3.7" version "4.2.0"
resolved "https://registry.yarnpkg.com/fraction.js/-/fraction.js-4.3.7.tgz#06ca0085157e42fda7f9e726e79fefc4068840f7" resolved "https://registry.yarnpkg.com/fraction.js/-/fraction.js-4.2.0.tgz#448e5109a313a3527f5a3ab2119ec4cf0e0e2950"
integrity sha512-ZsDfxO51wGAXREY55a7la9LScWpwv9RxIrYABrlvOFBlH/ShPnrtsXeuUIfXKKOVicNxQ+o8JTbJvjS4M89yew== integrity sha512-MhLuK+2gUcnZe8ZHlaaINnQLl0xRIGRfcGk2yl8xoQAfHrSsL3rYu6FCmBdkdbhc9EPlwyGHewaRsvwRMJtAlA==
fs.realpath@^1.0.0: fs.realpath@^1.0.0:
version "1.0.0" version "1.0.0"
resolved "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f" resolved "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f"
integrity sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw== integrity sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==
fsevents@~2.3.2, fsevents@~2.3.3: fsevents@~2.3.2:
version "2.3.3" version "2.3.2"
resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-2.3.3.tgz#cac6407785d03675a2a5e1a5305c697b347d90d6" resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-2.3.2.tgz#8a526f78b8fdf4623b709e0b975c52c24c02fd1a"
integrity sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw== integrity sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==
function-bind@^1.1.2: function-bind@^1.1.1:
version "1.1.2" version "1.1.1"
resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.2.tgz#2c02d864d97f3ea6c8830c464cbd11ab6eab7a1c" resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.1.tgz#a56899d3ea3c9bab874bb9773b7c5ede92f4895d"
integrity sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA== integrity sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==
get-size@^2.0.0, get-size@^2.0.2: get-size@^2.0.0, get-size@^2.0.2:
version "2.0.3" version "2.0.3"
@@ -566,24 +501,17 @@ glob@7.1.6:
once "^1.3.0" once "^1.3.0"
path-is-absolute "^1.0.0" path-is-absolute "^1.0.0"
guillotine@^1.3.1: has@^1.0.3:
version "1.3.1" version "1.0.3"
resolved "https://registry.yarnpkg.com/guillotine/-/guillotine-1.3.1.tgz#03bffb09659026eda81491551ea282e57b2cda95" resolved "https://registry.yarnpkg.com/has/-/has-1.0.3.tgz#722d7cbfc1f6aa8241f16dd814e011e1f41e8796"
integrity sha512-nJx8bglgxYgcAgahBddDsrGEhGXDuyYT4vIc7Aghs9HBF+50Maix5AbAwEfhkV59EQ/GvSOVIfftNvRz7DqyaA== integrity sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==
dependencies: dependencies:
jquery ">= 1.8.0" function-bind "^1.1.1"
hasown@^2.0.0:
version "2.0.0"
resolved "https://registry.yarnpkg.com/hasown/-/hasown-2.0.0.tgz#f4c513d454a57b7c7e1650778de226b11700546c"
integrity sha512-vUptKVTpIJhcczKBbgnS+RtcuYMB8+oNzPK2/Hp3hanz8JmpATdmmgLgSaadVREkDm+e2giHwY3ZRkyjSIDDFA==
dependencies:
function-bind "^1.1.2"
immutable@^4.0.0: immutable@^4.0.0:
version "4.3.4" version "4.3.0"
resolved "https://registry.yarnpkg.com/immutable/-/immutable-4.3.4.tgz#2e07b33837b4bb7662f288c244d1ced1ef65a78f" resolved "https://registry.yarnpkg.com/immutable/-/immutable-4.3.0.tgz#eb1738f14ffb39fd068b1dbe1296117484dd34be"
integrity sha512-fsXeu4J4i6WNWSikpI88v/PcVflZz+6kMhUfIwc5SY+poQRPnaf5V7qds6SUyUN3cVxEzuCab7QIoLOQ+DQ1wA== integrity sha512-0AOCmOip+xgJwEVTQj1EfiDDOkPmuyllDuTuEX+DDXUgapLAsBIfkg3sxCYyCEA8mQqZrrxPUGjcOQ2JS3WLkg==
inflight@^1.0.4: inflight@^1.0.4:
version "1.0.6" version "1.0.6"
@@ -605,12 +533,12 @@ is-binary-path@~2.1.0:
dependencies: dependencies:
binary-extensions "^2.0.0" binary-extensions "^2.0.0"
is-core-module@^2.13.0: is-core-module@^2.11.0:
version "2.13.1" version "2.12.1"
resolved "https://registry.yarnpkg.com/is-core-module/-/is-core-module-2.13.1.tgz#ad0d7532c6fea9da1ebdc82742d74525c6273384" resolved "https://registry.yarnpkg.com/is-core-module/-/is-core-module-2.12.1.tgz#0c0b6885b6f80011c71541ce15c8d66cf5a4f9fd"
integrity sha512-hHrIjvZsftOsvKSn2TRYl63zvxsgE0K+0mYMoH6gD4omR5IWB2KynivBQczo3+wF1cCkjzvptnI9Q0sPU66ilw== integrity sha512-Q4ZuBAe2FUsKtyQJoQHlvP8OvBERxO3jEmy1I7hcRXcJBGGHFh/aJBswbXuS9sgrDH2QUO8ilkwNPHvHMd8clg==
dependencies: dependencies:
hasown "^2.0.0" has "^1.0.3"
is-extglob@^2.1.1: is-extglob@^2.1.1:
version "2.1.1" version "2.1.1"
@@ -640,10 +568,10 @@ isotope-layout@^3.0.6:
masonry-layout "^4.1.0" masonry-layout "^4.1.0"
outlayer "^2.1.0" outlayer "^2.1.0"
jiti@^1.19.1: jiti@^1.18.2:
version "1.21.0" version "1.18.2"
resolved "https://registry.yarnpkg.com/jiti/-/jiti-1.21.0.tgz#7c97f8fe045724e136a397f7340475244156105d" resolved "https://registry.yarnpkg.com/jiti/-/jiti-1.18.2.tgz#80c3ef3d486ebf2450d9335122b32d121f2a83cd"
integrity sha512-gFqAIbuKyyso/3G2qhiO2OM6shY6EPP/R0+mkDbyspxKazh8BXDC5FiFsUjlczgdNz/vfra0da2y+aHrusLG/Q== integrity sha512-QAdOptna2NYiSSpv0O/BwoHBSmz4YhpzJHyi+fnMRTXFjp7B8i/YG5Z8IfusxB1ufjcD2Sre1F3R+nX3fvy7gg==
jquery-nice-select@^1.1.0: jquery-nice-select@^1.1.0:
version "1.1.0" version "1.1.0"
@@ -652,16 +580,16 @@ jquery-nice-select@^1.1.0:
dependencies: dependencies:
jquery "^2.2.3" jquery "^2.2.3"
"jquery@>= 1.8.0", jquery@^3.7.0:
version "3.7.1"
resolved "https://registry.yarnpkg.com/jquery/-/jquery-3.7.1.tgz#083ef98927c9a6a74d05a6af02806566d16274de"
integrity sha512-m4avr8yL8kmFN8psrbFFFmB/If14iN5o9nw/NgnnM+kybDJpRsAynV2BsfpTYrTRysYUdADVD7CkUUizgkpLfg==
jquery@^2.2.3: jquery@^2.2.3:
version "2.2.4" version "2.2.4"
resolved "https://registry.yarnpkg.com/jquery/-/jquery-2.2.4.tgz#2c89d6889b5eac522a7eea32c14521559c6cbf02" resolved "https://registry.yarnpkg.com/jquery/-/jquery-2.2.4.tgz#2c89d6889b5eac522a7eea32c14521559c6cbf02"
integrity sha512-lBHj60ezci2u1v2FqnZIraShGgEXq35qCzMv4lITyHGppTnA13rwR0MgwyNJh9TnDs3aXUvd1xjAotfraMHX/Q== integrity sha512-lBHj60ezci2u1v2FqnZIraShGgEXq35qCzMv4lITyHGppTnA13rwR0MgwyNJh9TnDs3aXUvd1xjAotfraMHX/Q==
jquery@^3.7.0:
version "3.7.0"
resolved "https://registry.yarnpkg.com/jquery/-/jquery-3.7.0.tgz#fe2c01a05da500709006d8790fe21c8a39d75612"
integrity sha512-umpJ0/k8X0MvD1ds0P9SfowREz2LenHsQaxSohMZ5OMNEU2r0tf8pdeEFTHMFxWVxKNyU9rTtK3CWzUCTKJUeQ==
js.cookie@^0.0.4: js.cookie@^0.0.4:
version "0.0.4" version "0.0.4"
resolved "https://registry.yarnpkg.com/js.cookie/-/js.cookie-0.0.4.tgz#c581270d0403b1c5125f91d5a48295e290e2869a" resolved "https://registry.yarnpkg.com/js.cookie/-/js.cookie-0.0.4.tgz#c581270d0403b1c5125f91d5a48295e290e2869a"
@@ -675,16 +603,11 @@ laravel-vite-plugin@^0.7.5:
picocolors "^1.0.0" picocolors "^1.0.0"
vite-plugin-full-reload "^1.0.5" vite-plugin-full-reload "^1.0.5"
lilconfig@^2.1.0: lilconfig@^2.0.5, lilconfig@^2.1.0:
version "2.1.0" version "2.1.0"
resolved "https://registry.yarnpkg.com/lilconfig/-/lilconfig-2.1.0.tgz#78e23ac89ebb7e1bfbf25b18043de756548e7f52" resolved "https://registry.yarnpkg.com/lilconfig/-/lilconfig-2.1.0.tgz#78e23ac89ebb7e1bfbf25b18043de756548e7f52"
integrity sha512-utWOt/GHzuUxnLKxB6dk81RoOeoNeHgbrXiuGk4yyF5qlRz+iIVWu56E2fqGHFrXz0QNUhLB/8nKqvRH66JKGQ== integrity sha512-utWOt/GHzuUxnLKxB6dk81RoOeoNeHgbrXiuGk4yyF5qlRz+iIVWu56E2fqGHFrXz0QNUhLB/8nKqvRH66JKGQ==
lilconfig@^3.0.0:
version "3.0.0"
resolved "https://registry.yarnpkg.com/lilconfig/-/lilconfig-3.0.0.tgz#f8067feb033b5b74dab4602a5f5029420be749bc"
integrity sha512-K2U4W2Ff5ibV7j7ydLr+zLAkIg5JJ4lPn1Ltsdt+Tz/IjQ8buJ55pZAxoP34lqIiwtF9iAvtLv3JGv7CAyAg+g==
lines-and-columns@^1.1.6: lines-and-columns@^1.1.6:
version "1.2.4" version "1.2.4"
resolved "https://registry.yarnpkg.com/lines-and-columns/-/lines-and-columns-1.2.4.tgz#eca284f75d2965079309dc0ad9255abb2ebc1632" resolved "https://registry.yarnpkg.com/lines-and-columns/-/lines-and-columns-1.2.4.tgz#eca284f75d2965079309dc0ad9255abb2ebc1632"
@@ -754,15 +677,15 @@ mz@^2.7.0:
object-assign "^4.0.1" object-assign "^4.0.1"
thenify-all "^1.0.0" thenify-all "^1.0.0"
nanoid@^3.3.7: nanoid@^3.3.6:
version "3.3.7" version "3.3.6"
resolved "https://registry.yarnpkg.com/nanoid/-/nanoid-3.3.7.tgz#d0c301a691bc8d54efa0a2226ccf3fe2fd656bd8" resolved "https://registry.yarnpkg.com/nanoid/-/nanoid-3.3.6.tgz#443380c856d6e9f9824267d960b4236ad583ea4c"
integrity sha512-eSRppjcPIatRIMC1U6UngP8XFcz8MQWGQdt1MTBQ7NaAmvXDfvNxbvWV3x2y6CdEUciCSsDHDQZbhYaB8QEo2g== integrity sha512-BGcqMMJuToF7i1rt+2PWSNVnWIkGCU78jBG3RxO/bZlnZPK2Cmi2QaffxGO/2RvWi9sL+FAiRiXMgsyxQ1DIDA==
node-releases@^2.0.14: node-releases@^2.0.12:
version "2.0.14" version "2.0.12"
resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-2.0.14.tgz#2ffb053bceb8b2be8495ece1ab6ce600c4461b0b" resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-2.0.12.tgz#35627cc224a23bfb06fb3380f2b3afaaa7eb1039"
integrity sha512-y10wOWt8yZpqXmOgRo77WaHEmhYQYGNA6y421PKsKYWEK8aW+cqAphborZDhqfyKrbZEN92CN1X2KbafY2s7Yw== integrity sha512-QzsYKWhXTWx8h1kIvqfnC++o0pEmpRQA/aenALsL2F4pqNVr7YzcdMlDij5WBnwftRbJCNJL/O7zdKaxKPHqgQ==
normalize-path@^3.0.0, normalize-path@~3.0.0: normalize-path@^3.0.0, normalize-path@~3.0.0:
version "3.0.0" version "3.0.0"
@@ -847,12 +770,12 @@ postcss-js@^4.0.1:
camelcase-css "^2.0.1" camelcase-css "^2.0.1"
postcss-load-config@^4.0.1: postcss-load-config@^4.0.1:
version "4.0.2" version "4.0.1"
resolved "https://registry.yarnpkg.com/postcss-load-config/-/postcss-load-config-4.0.2.tgz#7159dcf626118d33e299f485d6afe4aff7c4a3e3" resolved "https://registry.yarnpkg.com/postcss-load-config/-/postcss-load-config-4.0.1.tgz#152383f481c2758274404e4962743191d73875bd"
integrity sha512-bSVhyJGL00wMVoPUzAVAnbEoWyqRxkjv64tUl427SKnPrENtq6hJwUojroMz2VB+Q1edmi4IfrAPpami5VVgMQ== integrity sha512-vEJIc8RdiBRu3oRAI0ymerOn+7rPuMvRXslTvZUKZonDHFIczxztIyJ1urxM1x9JXEikvpWWTUUqal5j/8QgvA==
dependencies: dependencies:
lilconfig "^3.0.0" lilconfig "^2.0.5"
yaml "^2.3.4" yaml "^2.1.1"
postcss-nested@^6.0.1: postcss-nested@^6.0.1:
version "6.0.1" version "6.0.1"
@@ -874,12 +797,12 @@ postcss-value-parser@^4.0.0, postcss-value-parser@^4.2.0:
resolved "https://registry.yarnpkg.com/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz#723c09920836ba6d3e5af019f92bc0971c02e514" resolved "https://registry.yarnpkg.com/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz#723c09920836ba6d3e5af019f92bc0971c02e514"
integrity sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ== integrity sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==
postcss@^8.4.23, postcss@^8.4.32, postcss@^8.4.6: postcss@^8.4.23, postcss@^8.4.6:
version "8.4.32" version "8.4.24"
resolved "https://registry.yarnpkg.com/postcss/-/postcss-8.4.32.tgz#1dac6ac51ab19adb21b8b34fd2d93a86440ef6c9" resolved "https://registry.yarnpkg.com/postcss/-/postcss-8.4.24.tgz#f714dba9b2284be3cc07dbd2fc57ee4dc972d2df"
integrity sha512-D/kj5JNu6oo2EIy+XL/26JEDTlIbB8hw85G8StOE6L74RQAVVP5rej6wxCNqyMbR4RkPfqvezVbPw81Ngd6Kcw== integrity sha512-M0RzbcI0sO/XJNucsGjvWU9ERWxb/ytp1w6dKtxTKgixdtQDq4rmx/g8W1hnaheq9jgwL/oyEdH5Bc4WwJKMqg==
dependencies: dependencies:
nanoid "^3.3.7" nanoid "^3.3.6"
picocolors "^1.0.0" picocolors "^1.0.0"
source-map-js "^1.0.2" source-map-js "^1.0.2"
@@ -908,11 +831,11 @@ readdirp@~3.6.0:
picomatch "^2.2.1" picomatch "^2.2.1"
resolve@^1.1.7, resolve@^1.22.2: resolve@^1.1.7, resolve@^1.22.2:
version "1.22.8" version "1.22.2"
resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.22.8.tgz#b6c87a9f2aa06dfab52e3d70ac8cde321fa5a48d" resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.22.2.tgz#0ed0943d4e301867955766c9f3e1ae6d01c6845f"
integrity sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw== integrity sha512-Sb+mjNHOULsBv818T40qSPeRiuWLyaGMa5ewydRLFimneixmVy2zdivRl+AF6jaYPC8ERxGDmFSiqui6SfPd+g==
dependencies: dependencies:
is-core-module "^2.13.0" is-core-module "^2.11.0"
path-parse "^1.0.7" path-parse "^1.0.7"
supports-preserve-symlinks-flag "^1.0.0" supports-preserve-symlinks-flag "^1.0.0"
@@ -921,24 +844,11 @@ reusify@^1.0.4:
resolved "https://registry.yarnpkg.com/reusify/-/reusify-1.0.4.tgz#90da382b1e126efc02146e90845a88db12925d76" resolved "https://registry.yarnpkg.com/reusify/-/reusify-1.0.4.tgz#90da382b1e126efc02146e90845a88db12925d76"
integrity sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw== integrity sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==
rollup@^4.2.0: rollup@^3.21.0:
version "4.9.0" version "3.25.1"
resolved "https://registry.yarnpkg.com/rollup/-/rollup-4.9.0.tgz#94dff4070f106c1be6b2e88401a49b023c87fa88" resolved "https://registry.yarnpkg.com/rollup/-/rollup-3.25.1.tgz#9fff79d22ff1a904b2b595a2fb9bc3793cb987d8"
integrity sha512-bUHW/9N21z64gw8s6tP4c88P382Bq/L5uZDowHlHx6s/QWpjJXivIAbEw6LZthgSvlEizZBfLC4OAvWe7aoF7A== integrity sha512-tywOR+rwIt5m2ZAWSe5AIJcTat8vGlnPFAv15ycCrw33t6iFsXZ6mzHVFh2psSjxQPmI+xgzMZZizUAukBI4aQ==
optionalDependencies: optionalDependencies:
"@rollup/rollup-android-arm-eabi" "4.9.0"
"@rollup/rollup-android-arm64" "4.9.0"
"@rollup/rollup-darwin-arm64" "4.9.0"
"@rollup/rollup-darwin-x64" "4.9.0"
"@rollup/rollup-linux-arm-gnueabihf" "4.9.0"
"@rollup/rollup-linux-arm64-gnu" "4.9.0"
"@rollup/rollup-linux-arm64-musl" "4.9.0"
"@rollup/rollup-linux-riscv64-gnu" "4.9.0"
"@rollup/rollup-linux-x64-gnu" "4.9.0"
"@rollup/rollup-linux-x64-musl" "4.9.0"
"@rollup/rollup-win32-arm64-msvc" "4.9.0"
"@rollup/rollup-win32-ia32-msvc" "4.9.0"
"@rollup/rollup-win32-x64-msvc" "4.9.0"
fsevents "~2.3.2" fsevents "~2.3.2"
run-parallel@^1.1.9: run-parallel@^1.1.9:
@@ -949,9 +859,9 @@ run-parallel@^1.1.9:
queue-microtask "^1.2.2" queue-microtask "^1.2.2"
sass@^1.63.6: sass@^1.63.6:
version "1.69.5" version "1.63.6"
resolved "https://registry.yarnpkg.com/sass/-/sass-1.69.5.tgz#23e18d1c757a35f2e52cc81871060b9ad653dfde" resolved "https://registry.yarnpkg.com/sass/-/sass-1.63.6.tgz#481610e612902e0c31c46b46cf2dad66943283ea"
integrity sha512-qg2+UCJibLr2LCVOt3OlPhr/dqVHWOa9XtZf2OjbLs/T4VPSJ00udtgJxH3neXZm+QqX8B+3cU7RaLqp1iVfcQ== integrity sha512-MJuxGMHzaOW7ipp+1KdELtqKbfAWbH7OLIdoSMnVe3EXPMTmxTmlaZDCTsgIpPCs3w99lLo9/zDKkOrJuT5byw==
dependencies: dependencies:
chokidar ">=3.0.0 <4.0.0" chokidar ">=3.0.0 <4.0.0"
immutable "^4.0.0" immutable "^4.0.0"
@@ -968,9 +878,9 @@ slick-carousel@^1.8.1:
integrity sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw== integrity sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==
sucrase@^3.32.0: sucrase@^3.32.0:
version "3.34.0" version "3.32.0"
resolved "https://registry.yarnpkg.com/sucrase/-/sucrase-3.34.0.tgz#1e0e2d8fcf07f8b9c3569067d92fbd8690fb576f" resolved "https://registry.yarnpkg.com/sucrase/-/sucrase-3.32.0.tgz#c4a95e0f1e18b6847127258a75cf360bc568d4a7"
integrity sha512-70/LQEZ07TEcxiU2dz51FKaE6hCTWC6vr7FOk3Gr0U60C3shtAN+H+BFr9XlYe5xqf3RA8nrc+VIwzCfnxuXJw== integrity sha512-ydQOU34rpSyj2TGyz4D2p8rbktIOZ8QY9s+DGLvFU1i5pWJE8vkpruCjGCMHsdXwnD7JDcS+noSwM/a7zyNFDQ==
dependencies: dependencies:
"@jridgewell/gen-mapping" "^0.3.2" "@jridgewell/gen-mapping" "^0.3.2"
commander "^4.0.0" commander "^4.0.0"
@@ -986,19 +896,19 @@ supports-preserve-symlinks-flag@^1.0.0:
integrity sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w== integrity sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==
tailwindcss@^3.1.0: tailwindcss@^3.1.0:
version "3.3.6" version "3.3.2"
resolved "https://registry.yarnpkg.com/tailwindcss/-/tailwindcss-3.3.6.tgz#4dd7986bf4902ad385d90d45fd4b2fa5fab26d5f" resolved "https://registry.yarnpkg.com/tailwindcss/-/tailwindcss-3.3.2.tgz#2f9e35d715fdf0bbf674d90147a0684d7054a2d3"
integrity sha512-AKjF7qbbLvLaPieoKeTjG1+FyNZT6KaJMJPFeQyLfIp7l82ggH1fbHJSsYIvnbTFQOlkh+gBYpyby5GT1LIdLw== integrity sha512-9jPkMiIBXvPc2KywkraqsUfbfj+dHDb+JPWtSJa9MLFdrPyazI7q6WX2sUrm7R9eVR7qqv3Pas7EvQFzxKnI6w==
dependencies: dependencies:
"@alloc/quick-lru" "^5.2.0" "@alloc/quick-lru" "^5.2.0"
arg "^5.0.2" arg "^5.0.2"
chokidar "^3.5.3" chokidar "^3.5.3"
didyoumean "^1.2.2" didyoumean "^1.2.2"
dlv "^1.1.3" dlv "^1.1.3"
fast-glob "^3.3.0" fast-glob "^3.2.12"
glob-parent "^6.0.2" glob-parent "^6.0.2"
is-glob "^4.0.3" is-glob "^4.0.3"
jiti "^1.19.1" jiti "^1.18.2"
lilconfig "^2.1.0" lilconfig "^2.1.0"
micromatch "^4.0.5" micromatch "^4.0.5"
normalize-path "^3.0.0" normalize-path "^3.0.0"
@@ -1010,6 +920,7 @@ tailwindcss@^3.1.0:
postcss-load-config "^4.0.1" postcss-load-config "^4.0.1"
postcss-nested "^6.0.1" postcss-nested "^6.0.1"
postcss-selector-parser "^6.0.11" postcss-selector-parser "^6.0.11"
postcss-value-parser "^4.2.0"
resolve "^1.22.2" resolve "^1.22.2"
sucrase "^3.32.0" sucrase "^3.32.0"
@@ -1039,10 +950,10 @@ ts-interface-checker@^0.1.9:
resolved "https://registry.yarnpkg.com/ts-interface-checker/-/ts-interface-checker-0.1.13.tgz#784fd3d679722bc103b1b4b8030bcddb5db2a699" resolved "https://registry.yarnpkg.com/ts-interface-checker/-/ts-interface-checker-0.1.13.tgz#784fd3d679722bc103b1b4b8030bcddb5db2a699"
integrity sha512-Y/arvbn+rrz3JCKl9C4kVNfTfSm2/mEp5FSz5EsZSANGPSlQrpRI5M4PKF+mJnE52jOO90PnPSc3Ur3bTQw0gA== integrity sha512-Y/arvbn+rrz3JCKl9C4kVNfTfSm2/mEp5FSz5EsZSANGPSlQrpRI5M4PKF+mJnE52jOO90PnPSc3Ur3bTQw0gA==
update-browserslist-db@^1.0.13: update-browserslist-db@^1.0.11:
version "1.0.13" version "1.0.11"
resolved "https://registry.yarnpkg.com/update-browserslist-db/-/update-browserslist-db-1.0.13.tgz#3c5e4f5c083661bd38ef64b6328c26ed6c8248c4" resolved "https://registry.yarnpkg.com/update-browserslist-db/-/update-browserslist-db-1.0.11.tgz#9a2a641ad2907ae7b3616506f4b977851db5b940"
integrity sha512-xebP81SNcPuNpPP3uzeW1NYXxI3rxyJzF3pD6sH4jE7o/IX+WtSpwnVU+qIsDPyk0d3hmFQ7mjqc6AtV604hbg== integrity sha512-dCwEFf0/oT85M1fHBg4F0jtLwJrutGoHSQXCh7u4o2t1drG+c0a9Flnqww6XUKSfQMPpJBRjU8d4RXB09qtvaA==
dependencies: dependencies:
escalade "^3.1.1" escalade "^3.1.1"
picocolors "^1.0.0" picocolors "^1.0.0"
@@ -1053,23 +964,23 @@ util-deprecate@^1.0.2:
integrity sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw== integrity sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==
vite-plugin-full-reload@^1.0.5: vite-plugin-full-reload@^1.0.5:
version "1.1.0" version "1.0.5"
resolved "https://registry.yarnpkg.com/vite-plugin-full-reload/-/vite-plugin-full-reload-1.1.0.tgz#ca6fa32631024a459ea9e5613dd4c0ff0f3b7995" resolved "https://registry.yarnpkg.com/vite-plugin-full-reload/-/vite-plugin-full-reload-1.0.5.tgz#6cddfa94e51909843bc7156ab728dbac972b8560"
integrity sha512-3cObNDzX6DdfhD9E7kf6w2mNunFpD7drxyNgHLw+XwIYAgb+Xt16SEXo0Up4VH+TMf3n+DSVJZtW2POBGcBYAA== integrity sha512-kVZFDFWr0DxiHn6MuDVTQf7gnWIdETGlZh0hvTiMXzRN80vgF4PKbONSq8U1d0WtHsKaFODTQgJeakLacoPZEQ==
dependencies: dependencies:
picocolors "^1.0.0" picocolors "^1.0.0"
picomatch "^2.3.1" picomatch "^2.3.1"
vite@^5.0.9: vite@^4.0.0:
version "5.0.9" version "4.3.9"
resolved "https://registry.yarnpkg.com/vite/-/vite-5.0.9.tgz#2ac49a37b5accba29d945fcee9a0b7b862423cd4" resolved "https://registry.yarnpkg.com/vite/-/vite-4.3.9.tgz#db896200c0b1aa13b37cdc35c9e99ee2fdd5f96d"
integrity sha512-wVqMd5kp28QWGgfYPDfrj771VyHTJ4UDlCteLH7bJDGDEamaz5hV8IX6h1brSGgnnyf9lI2RnzXq/JmD0c2wwg== integrity sha512-qsTNZjO9NoJNW7KnOrgYwczm0WctJ8m/yqYAMAK9Lxt4SoySUfS5S8ia9K7JHpa3KEeMfyF8LoJ3c5NeBJy6pg==
dependencies: dependencies:
esbuild "^0.19.3" esbuild "^0.17.5"
postcss "^8.4.32" postcss "^8.4.23"
rollup "^4.2.0" rollup "^3.21.0"
optionalDependencies: optionalDependencies:
fsevents "~2.3.3" fsevents "~2.3.2"
waypoints@^4.0.1: waypoints@^4.0.1:
version "4.0.1" version "4.0.1"
@@ -1086,7 +997,7 @@ wrappy@1:
resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f" resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f"
integrity sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ== integrity sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==
yaml@^2.3.4: yaml@^2.1.1:
version "2.3.4" version "2.3.1"
resolved "https://registry.yarnpkg.com/yaml/-/yaml-2.3.4.tgz#53fc1d514be80aabf386dc6001eb29bf3b7523b2" resolved "https://registry.yarnpkg.com/yaml/-/yaml-2.3.1.tgz#02fe0975d23cd441242aa7204e09fc28ac2ac33b"
integrity sha512-8aAvwVUSHpfEqTQ4w/KMlf3HcRdt50E5ODIQJBw1fQ5RL34xabzxtUlzTXVqc4rkZsPbvrXKWnABCD7kWSmocA== integrity sha512-2eHWfjaoXgTBC2jNM1LRef62VQa0umtvRiDSk6HSzW7RvS5YtkabJrwYLLEKWBc8a5U2PTSCs+dJjUTJdlHsWQ==