Compare commits
42 Commits
c352d4d273
...
v3.0.1
| Author | SHA1 | Date | |
|---|---|---|---|
| b8d1a164f1 | |||
| 37d496bbca | |||
| eb931bbb6a | |||
| bc66edb3ce | |||
| e10736d51e | |||
| 9101bab010 | |||
| 1d56e833a8 | |||
| ac28e86e68 | |||
| 97fa5a6f9f | |||
| bf30235e1d | |||
| c46664492d | |||
| 06e5101199 | |||
| 9630f331a2 | |||
| 173986da5e | |||
| ca34ab4b37 | |||
| a156a44130 | |||
| 87198b46a5 | |||
| 40024b69ae | |||
| aa79de5688 | |||
| f7a27e7f62 | |||
| 7772be7dc5 | |||
| d5c7e9e4f5 | |||
| 89450f0b79 | |||
| 23e551374a | |||
| 3e3e76773c | |||
| a6dc77feff | |||
| 3b45563ce5 | |||
| ae697fbaae | |||
| ebdc50a697 | |||
| 3d3029ceb6 | |||
| a2ecb62a05 | |||
| a4bd889d23 | |||
| 4ba362b4fd | |||
| c55bec5b28 | |||
| efba3dff84 | |||
| 81525acb82 | |||
| f39ce73978 | |||
| ebd803282c | |||
| a37789ff8a | |||
| 2e3b848ff5 | |||
| 26c4b2c959 | |||
| c4398c641e |
3
.gitignore
vendored
3
.gitignore
vendored
@@ -33,3 +33,6 @@ 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
|
||||||
|
|||||||
@@ -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 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.
|
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.
|
||||||
|
|
||||||
### License
|
### License
|
||||||
|
|
||||||
|
|||||||
@@ -8,18 +8,19 @@ services:
|
|||||||
dockerfile: Dockerfile
|
dockerfile: Dockerfile
|
||||||
container_name: ${CONTAINER_NAME:-pcag-laravel}
|
container_name: ${CONTAINER_NAME:-pcag-laravel}
|
||||||
volumes:
|
volumes:
|
||||||
- ./site:/var/www/html
|
- ${PATH_TO_SITE}:/var/www/html
|
||||||
- ./static:/static
|
- ${PATH_TO_STATIC}:/static
|
||||||
#- ./legacypublic:/legacypublic
|
- ./nginx/default.conf:/etc/nginx/sites-available/default
|
||||||
|
- ./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: ${DB_DATABASE}
|
DB_DATABASE: ${LIVE_DB_DATABASE}
|
||||||
DB_USERNAME: ${DB_USERNAME}
|
DB_USERNAME: ${LIVE_DB_USERNAME}
|
||||||
DB_PASSWORD: ${DB_PASSWORD}
|
DB_PASSWORD: ${LIVE_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
|
||||||
@@ -45,10 +46,10 @@ services:
|
|||||||
env_file: .env
|
env_file: .env
|
||||||
environment:
|
environment:
|
||||||
TZ: UTC
|
TZ: UTC
|
||||||
MARIADB_ROOT_PASSWORD: ${DB_ROOT_PASSWORD}
|
MARIADB_ROOT_PASSWORD: ${LIVE_DB_ROOT_PASSWORD}
|
||||||
MARIADB_USER: ${DB_USERNAME}
|
MARIADB_USER: ${LIVE_DB_USERNAME}
|
||||||
MARIADB_DATABASE: ${DB_DATABASE}
|
MARIADB_DATABASE: ${LIVE_DB_DATABASE}
|
||||||
MARIADB_PASSWORD: ${DB_PASSWORD}
|
MARIADB_PASSWORD: ${LIVE_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"
|
||||||
|
|||||||
42
nginx/default.conf
Normal file
42
nginx/default.conf
Normal file
@@ -0,0 +1,42 @@
|
|||||||
|
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;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
11
nginx/legacy_mappings.conf
Normal file
11
nginx/legacy_mappings.conf
Normal file
@@ -0,0 +1,11 @@
|
|||||||
|
#snippets/legacy_mappings.conf
|
||||||
|
|
||||||
|
map $uri $legacy_mapping {
|
||||||
|
~^/assets/(?<filename>.+)$ $filename;
|
||||||
|
default $uri;
|
||||||
|
}
|
||||||
|
|
||||||
|
map $filename $modified_filename {
|
||||||
|
~/(.*) $1---;
|
||||||
|
default $filename;
|
||||||
|
}
|
||||||
145
nginx/nginx.conf
Normal file
145
nginx/nginx.conf
Normal file
@@ -0,0 +1,145 @@
|
|||||||
|
# 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/*;
|
||||||
|
}
|
||||||
1977
nginx/phpfpm8_2.ini
Normal file
1977
nginx/phpfpm8_2.ini
Normal file
File diff suppressed because it is too large
Load Diff
346
site/app/Console/Commands/AddMissingV3ArtworksCommand.php
Normal file
346
site/app/Console/Commands/AddMissingV3ArtworksCommand.php
Normal file
@@ -0,0 +1,346 @@
|
|||||||
|
<?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));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
111
site/app/Console/Commands/ImportMissingLegacyArtworkCommand.php
Normal file
111
site/app/Console/Commands/ImportMissingLegacyArtworkCommand.php
Normal file
@@ -0,0 +1,111 @@
|
|||||||
|
<?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);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
46
site/app/Console/Commands/LegacyNginxMappingCommand.php
Normal file
46
site/app/Console/Commands/LegacyNginxMappingCommand.php
Normal file
@@ -0,0 +1,46 @@
|
|||||||
|
<?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('');
|
||||||
|
}
|
||||||
|
}
|
||||||
38
site/app/Console/Commands/RefreshLeaderBoardCacheCommand.php
Normal file
38
site/app/Console/Commands/RefreshLeaderBoardCacheCommand.php
Normal file
@@ -0,0 +1,38 @@
|
|||||||
|
<?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');
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -3,7 +3,13 @@
|
|||||||
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
|
||||||
{
|
{
|
||||||
@@ -14,7 +20,18 @@ 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,
|
||||||
|
]);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -44,9 +61,23 @@ 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(Artist $artist)
|
public function show(Request $request, $slug)
|
||||||
{
|
{
|
||||||
//
|
$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,
|
||||||
|
]);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -69,7 +100,30 @@ 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');
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|||||||
@@ -12,8 +12,10 @@ 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
|
||||||
@@ -27,11 +29,15 @@ 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')
|
||||||
->orderBy('episode_id', 'desc')
|
->with('podcast')
|
||||||
->orderBy('created_at', 'desc')
|
->with('episode')
|
||||||
->paginate($perPage = 100, $columns = ['*'], $pageName = 'artworks');
|
->orderBy('episode_number', 'desc')
|
||||||
$podcasts = Podcast::where('published', true)->with('episodes')->get();
|
->orderBy('artworks.created_at', 'desc')
|
||||||
|
->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',
|
||||||
@@ -48,7 +54,7 @@ class ArtworkController extends Controller
|
|||||||
public function create()
|
public function create()
|
||||||
{
|
{
|
||||||
$user = auth()->user();
|
$user = auth()->user();
|
||||||
$podcasts = Podcast::where('published', true)->with('episodes')->get();
|
$podcasts = $this->publishedPodcasts();
|
||||||
return view('artworks.submit', [
|
return view('artworks.submit', [
|
||||||
'user' => $user,
|
'user' => $user,
|
||||||
'pageTitle' => 'Submit New Artwork',
|
'pageTitle' => 'Submit New Artwork',
|
||||||
@@ -56,6 +62,41 @@ 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.
|
||||||
*
|
*
|
||||||
@@ -99,7 +140,10 @@ 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();
|
||||||
@@ -131,6 +175,12 @@ 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,
|
||||||
@@ -170,4 +220,40 @@ 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;
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -4,10 +4,12 @@ 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;
|
||||||
@@ -31,17 +33,24 @@ class RegisteredUserController extends Controller
|
|||||||
public function store(Request $request): RedirectResponse
|
public function store(Request $request): RedirectResponse
|
||||||
{
|
{
|
||||||
$request->validate([
|
$request->validate([
|
||||||
'name' => ['required', 'string', 'max:255'],
|
'name' => ['unique:artists,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' => $request->name,
|
'name' => trim($request->name),
|
||||||
'email' => $request->email,
|
'email' => trim(strtolower($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);
|
||||||
|
|||||||
@@ -2,8 +2,12 @@
|
|||||||
|
|
||||||
namespace App\Http\Controllers;
|
namespace App\Http\Controllers;
|
||||||
|
|
||||||
use App\Models\Episode;
|
|
||||||
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 EpisodeController extends Controller
|
class EpisodeController extends Controller
|
||||||
{
|
{
|
||||||
@@ -44,9 +48,27 @@ 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(Episode $episode)
|
public function show(Request $request, $podcast_slug, $slug)
|
||||||
{
|
{
|
||||||
//
|
$user = auth()->user();
|
||||||
|
$episode = Episode::where('slug', $slug)
|
||||||
|
->with('approvedArtworks')
|
||||||
|
->with('artwork')
|
||||||
|
->with('podcast')
|
||||||
|
->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,
|
||||||
|
'artworks' => $episode->approvedArtworks,
|
||||||
|
'podcasts' => $podcasts,
|
||||||
|
]);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|||||||
@@ -18,8 +18,7 @@ class PageController extends Controller
|
|||||||
$headerCounters = $this->getHeaderCounters();
|
$headerCounters = $this->getHeaderCounters();
|
||||||
$recentEpisodes = $this->mostRecentEpisodes();
|
$recentEpisodes = $this->mostRecentEpisodes();
|
||||||
$recentSubmissions = $this->mostRecentSubmissions();
|
$recentSubmissions = $this->mostRecentSubmissions();
|
||||||
$leaderboard = $this->leaderboardTwelveMonths();
|
$leaderboard = $this->leaderboardTwelveMonthsLanding();
|
||||||
|
|
||||||
return view('home.page', [
|
return view('home.page', [
|
||||||
'user' => $user,
|
'user' => $user,
|
||||||
'pageTitle' => 'Home',
|
'pageTitle' => 'Home',
|
||||||
@@ -31,6 +30,40 @@ 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')
|
||||||
@@ -38,7 +71,7 @@ class PageController extends Controller
|
|||||||
->with('episode')
|
->with('episode')
|
||||||
->with('podcast')
|
->with('podcast')
|
||||||
->orderBy('created_at', 'desc')
|
->orderBy('created_at', 'desc')
|
||||||
->limit(50)
|
->limit(10)
|
||||||
->get();
|
->get();
|
||||||
});
|
});
|
||||||
return $artworks;
|
return $artworks;
|
||||||
@@ -52,8 +85,8 @@ class PageController extends Controller
|
|||||||
->with('podcast')
|
->with('podcast')
|
||||||
->with('artwork')
|
->with('artwork')
|
||||||
->with('artwork.artist')
|
->with('artwork.artist')
|
||||||
->orderBy('episode_date', 'desc')
|
->orderBy('episode_number', 'desc')
|
||||||
->limit(10)
|
->limit(5)
|
||||||
->get();
|
->get();
|
||||||
});
|
});
|
||||||
return $episodes;
|
return $episodes;
|
||||||
@@ -62,13 +95,13 @@ class PageController extends Controller
|
|||||||
private function getHeaderCounters()
|
private function getHeaderCounters()
|
||||||
{
|
{
|
||||||
$headerCounters = [];
|
$headerCounters = [];
|
||||||
$artworkCountNumber = Cache::remember('artworkCountNumber', 10, function() {
|
$artworkCountNumber = Cache::remember('artworkCountNumber', 30, function() {
|
||||||
return Artwork::all()->count();
|
return Artwork::whereNotNull('approved_by')->count();
|
||||||
});
|
});
|
||||||
$artistCountNumber = Cache::remember('artistCountNumber', 10, function() {
|
$artistCountNumber = Cache::remember('artistCountNumber', 30, function() {
|
||||||
return Artist::all()->count();
|
return Artist::all()->count();
|
||||||
});
|
});
|
||||||
$episodeCountNumber = Cache::remember('episodeCountNumber', 10, function() {
|
$episodeCountNumber = Cache::remember('episodeCountNumber', 30, function() {
|
||||||
return Episode::all()->count();
|
return Episode::all()->count();
|
||||||
});
|
});
|
||||||
$headerCounters['Artworks'] = $this->shortNumberCount($artworkCountNumber);
|
$headerCounters['Artworks'] = $this->shortNumberCount($artworkCountNumber);
|
||||||
@@ -99,7 +132,56 @@ 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')
|
||||||
@@ -117,6 +199,75 @@ 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) {
|
||||||
|
|||||||
@@ -3,8 +3,34 @@
|
|||||||
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,
|
||||||
|
]);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -18,6 +18,8 @@ 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,
|
||||||
]);
|
]);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -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.
|
||||||
|
|||||||
@@ -2,12 +2,14 @@
|
|||||||
|
|
||||||
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
|
||||||
{
|
{
|
||||||
@@ -27,7 +29,7 @@ class LoginRequest extends FormRequest
|
|||||||
public function rules(): array
|
public function rules(): array
|
||||||
{
|
{
|
||||||
return [
|
return [
|
||||||
'email' => ['required', 'string', 'email'],
|
'login' => ['required', 'string'],
|
||||||
'password' => ['required', 'string'],
|
'password' => ['required', 'string'],
|
||||||
];
|
];
|
||||||
}
|
}
|
||||||
@@ -41,6 +43,8 @@ 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());
|
||||||
|
|
||||||
@@ -48,7 +52,20 @@ 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());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
48
site/app/Livewire/Artist/Avatar.php
Normal file
48
site/app/Livewire/Artist/Avatar.php
Normal file
@@ -0,0 +1,48 @@
|
|||||||
|
<?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'));
|
||||||
|
}
|
||||||
|
}
|
||||||
48
site/app/Livewire/Artist/Header.php
Normal file
48
site/app/Livewire/Artist/Header.php
Normal file
@@ -0,0 +1,48 @@
|
|||||||
|
<?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'));
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -9,12 +9,12 @@ class Themeswitch extends Component
|
|||||||
|
|
||||||
public function light()
|
public function light()
|
||||||
{
|
{
|
||||||
session(['preferred_theme' => 'light']);
|
session()->put('preferred_theme', 'light');
|
||||||
}
|
}
|
||||||
|
|
||||||
public function dark()
|
public function dark()
|
||||||
{
|
{
|
||||||
session(['preferred_theme' => 'dark']);
|
session()->put('preferred_theme', 'dark');
|
||||||
}
|
}
|
||||||
|
|
||||||
public function render()
|
public function render()
|
||||||
|
|||||||
@@ -22,9 +22,25 @@ 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->belongs_to(User::class);
|
return $this->belongsTo(User::class);
|
||||||
}
|
}
|
||||||
|
|
||||||
public function artworks()
|
public function artworks()
|
||||||
@@ -47,4 +63,20 @@ 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;
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -31,6 +31,16 @@ class Episode extends Model
|
|||||||
return $this->hasOne(Artwork::class, 'id', 'artwork_id');
|
return $this->hasOne(Artwork::class, 'id', 'artwork_id');
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public function approvedArtworks()
|
||||||
|
{
|
||||||
|
return $this->hasMany(Artwork::class)->whereNotNull('artworks.approved_by');
|
||||||
|
}
|
||||||
|
|
||||||
|
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);
|
||||||
|
|||||||
@@ -65,9 +65,9 @@ class User extends Authenticatable
|
|||||||
return $this->hasManyThrough(Artwork::class, Artist::class);
|
return $this->hasManyThrough(Artwork::class, Artist::class);
|
||||||
}
|
}
|
||||||
|
|
||||||
public function episodes()
|
public function selectedForEpisodes()
|
||||||
{
|
{
|
||||||
return $this->hasManyThrough(Episode::class, Artwork::class);
|
return $this->artists()->first()->episodes;
|
||||||
}
|
}
|
||||||
|
|
||||||
public function wallets()
|
public function wallets()
|
||||||
|
|||||||
34
site/app/Policies/ArtworkPolicy.php
Normal file
34
site/app/Policies/ArtworkPolicy.php
Normal file
@@ -0,0 +1,34 @@
|
|||||||
|
<?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;
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -4,6 +4,8 @@ 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
|
||||||
{
|
{
|
||||||
@@ -13,7 +15,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
Executable file → Normal file
0
site/artisan
Executable file → Normal file
3
site/build.sh
Executable file
3
site/build.sh
Executable file
@@ -0,0 +1,3 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
yarn build
|
||||||
|
mv ./public/build/.vite/manifest.json ./public/build/manifest.json
|
||||||
@@ -19,6 +19,8 @@
|
|||||||
"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": {
|
||||||
|
|||||||
842
site/composer.lock
generated
842
site/composer.lock
generated
File diff suppressed because it is too large
Load Diff
159
site/config/livewire.php
Normal file
159
site/config/livewire.php
Normal file
@@ -0,0 +1,159 @@
|
|||||||
|
<?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',
|
||||||
|
];
|
||||||
@@ -5,6 +5,7 @@ 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
|
||||||
{
|
{
|
||||||
@@ -22,12 +23,17 @@ 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' => fake()->name(),
|
'name' => $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),
|
||||||
];
|
];
|
||||||
|
|||||||
@@ -0,0 +1,28 @@
|
|||||||
|
<?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');
|
||||||
|
});
|
||||||
|
}
|
||||||
|
};
|
||||||
@@ -0,0 +1,34 @@
|
|||||||
|
<?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');
|
||||||
|
});
|
||||||
|
}
|
||||||
|
};
|
||||||
@@ -0,0 +1,28 @@
|
|||||||
|
<?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');
|
||||||
|
});
|
||||||
|
}
|
||||||
|
};
|
||||||
@@ -0,0 +1,28 @@
|
|||||||
|
<?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');
|
||||||
|
});
|
||||||
|
}
|
||||||
|
};
|
||||||
@@ -0,0 +1,34 @@
|
|||||||
|
<?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');
|
||||||
|
});
|
||||||
|
}
|
||||||
|
};
|
||||||
@@ -0,0 +1,28 @@
|
|||||||
|
<?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');
|
||||||
|
});
|
||||||
|
}
|
||||||
|
};
|
||||||
@@ -0,0 +1,30 @@
|
|||||||
|
<?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');
|
||||||
|
});
|
||||||
|
}
|
||||||
|
};
|
||||||
@@ -14,12 +14,14 @@
|
|||||||
"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": "^4.0.0",
|
"vite": "^5.0.9",
|
||||||
"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
3
site/public/pinfo.php
Normal file
3
site/public/pinfo.php
Normal file
@@ -0,0 +1,3 @@
|
|||||||
|
<?php
|
||||||
|
die('nope');
|
||||||
|
phpinfo();
|
||||||
@@ -1,2 +1,2 @@
|
|||||||
User-agent: *
|
User-agent: *
|
||||||
Disallow: /
|
Disallow: /profile
|
||||||
|
|||||||
BIN
site/resources/img/artist-banner-default.png
Normal file
BIN
site/resources/img/artist-banner-default.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 15 KiB |
BIN
site/resources/img/artist-dark-banner-default.png
Normal file
BIN
site/resources/img/artist-dark-banner-default.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 12 KiB |
@@ -70,7 +70,9 @@ 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";
|
||||||
|
|
||||||
|
|||||||
32
site/resources/scss/components/_auth.scss
Normal file
32
site/resources/scss/components/_auth.scss
Normal file
@@ -0,0 +1,32 @@
|
|||||||
|
.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;
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -143,3 +143,11 @@
|
|||||||
padding-left: 0;
|
padding-left: 0;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
div.alert {
|
||||||
|
&.alert-warning {
|
||||||
|
strong {
|
||||||
|
color: #664d03;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|||||||
@@ -121,6 +121,16 @@
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.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;
|
||||||
|
|||||||
@@ -256,12 +256,22 @@ body {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
.explore-style-one {
|
.explore-style-one {
|
||||||
border: 1px solid $border-color-light;
|
border: 1px solid $border-color;
|
||||||
&.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,
|
||||||
|
|||||||
@@ -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: #eae156;
|
$selected-border: $color-primary;
|
||||||
$bg-color-selected: linear-gradient(97.3deg, #7f830b 0%, #be8500 100%);
|
$bg-color-selected: linear-gradient(135deg, $bg-color-1 0%, #854286 100%);
|
||||||
$bg-color-selected-light: linear-gradient(97.3deg, #f8fc9c 0%, #fbe4a1 100%);
|
$bg-color-selected-light: linear-gradient(135deg, #fee0fe 0%, #e1bee1 100%);
|
||||||
|
|
||||||
// font family
|
// font family
|
||||||
$font-1: "Poppins", sans-serif;
|
$font-1: "Poppins", sans-serif;
|
||||||
|
|||||||
93
site/resources/views/artworks/approvals.blade.php
Normal file
93
site/resources/views/artworks/approvals.blade.php
Normal file
@@ -0,0 +1,93 @@
|
|||||||
|
@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">“{{ $thisArtwork->title }}”</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
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
@@ -1,10 +1,17 @@
|
|||||||
@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 }} {{ number_format($artwork->episode->episode_number + 0) }}</h1>
|
<h1 class="title">Artwork for {{ $artwork->podcast->name }}
|
||||||
|
{{ 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>
|
||||||
@@ -19,11 +26,24 @@
|
|||||||
@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="http://{{ config('app.static_asset_url') }}/artworks/{{ $artwork->filename }}"
|
<div class="thumb"><a href="{{ config('app.static_asset_url') }}/artworks/{{ $artwork->filename }}"
|
||||||
><img id="largeImage"src="http://{{ config('app.static_asset_url') }}/artworks/{{ $artwork->filename }}"
|
><img id="largeImage"src="{{ 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>
|
||||||
@@ -34,39 +54,57 @@
|
|||||||
<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) }}, {{ $artwork->episode->episode_date->format('l, F j') }}<sup>{{ $artwork->episode->episode_date->format('S') }}</sup>, {{ $artwork->episode->episode_date->format('Y') }}
|
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') }}
|
||||||
</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
|
||||||
<a href="http://{{ config('app.static_asset_url') }}/artworks/{{ $artwork->filename }}"
|
<div class="container">
|
||||||
class="btn btn-medium btn-gradient w-100 justify-content-center mt-5"><span><i
|
<div class="row">
|
||||||
class="ri-download-cloud-2-line"></i>
|
<div class="col">
|
||||||
Download Full Scale Image
|
<a class="btn btn-medium btn-gradient w-100 justify-content-center mt-5"
|
||||||
</span></a>
|
href="{{ config('app.static_asset_url') }}/artworks/{{ $artwork->filename }}">
|
||||||
<a href="http://{{ config('app.static_asset_url') }}/thumbnail/{{ $artwork->filename }}"
|
<span>Download 3k px Image</span></a>
|
||||||
class="btn btn-medium btn-gradient w-100 justify-content-center mt-5"><span><i
|
</div>
|
||||||
class="ri-download-fill"></i>
|
<div class="col">
|
||||||
Download 512px Square Thumbnail
|
<a class="btn btn-medium btn-gradient w-100 justify-content-center mt-5"
|
||||||
</span></a>
|
href="{{ config('app.static_asset_url') }}/thumbnails/{{ $artwork->filename }}">
|
||||||
<a href="/artists/{{ $artwork->artist->id }}"
|
<span>Download 512 px Image</span></a>
|
||||||
class="btn btn-medium btn-gradient w-100 justify-content-center mt-5"><span><i
|
</div>
|
||||||
class="ri-user-fill"></i>
|
</div>
|
||||||
View Artist Profile
|
<div class="row">
|
||||||
</span></a>
|
<div class="col">
|
||||||
<a href="/episodes/{{ $artwork->episode->slug }}"
|
@if ($artwork->episode->artwork)
|
||||||
|
<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 This Episode
|
View 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>
|
||||||
View {{ $artwork->podcast->name }} Podcast
|
{{ $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>
|
||||||
|
|||||||
72
site/resources/views/artworks/card.blade.php
Normal file
72
site/resources/views/artworks/card.blade.php
Normal file
@@ -0,0 +1,72 @@
|
|||||||
|
<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>
|
||||||
@@ -2,23 +2,19 @@
|
|||||||
<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">
|
||||||
<div class="flex items-center justify-end mt-4">
|
<x-primary-button class="btn btn-gradient btn-medium">
|
||||||
<x-primary-button>
|
<span>{{ __('Email Password Reset Link') }}</span>
|
||||||
{{ __('Email Password Reset Link') }}
|
|
||||||
</x-primary-button>
|
</x-primary-button>
|
||||||
</div>
|
</div>
|
||||||
</form>
|
</form>
|
||||||
|
|||||||
@@ -1,47 +1,54 @@
|
|||||||
<x-guest-layout>
|
<x-guest-layout>
|
||||||
<!-- Session Status -->
|
<div class="row mt-4 gutter-0">
|
||||||
|
<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="email" :value="__('Email')" />
|
<x-input-label for="login" :value="__('Email or Username')" />
|
||||||
<x-text-input id="email" class="block mt-1 w-full" type="email" name="email" :value="old('email')" required autofocus autocomplete="username" />
|
<x-text-input id="login" class="block mt-1 w-full" type="text" name="login" :value="old('login')" required autofocus autocomplete="username" />
|
||||||
<x-input-error :messages="$errors->get('email')" class="mt-2" />
|
<x-input-error :messages="$errors->get('login')" 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 --}}
|
||||||
<!-- Remember Me -->
|
<div class="block mt-4 form-check">
|
||||||
<div class="block mt-4">
|
<input id="remember_me" type="checkbox" class="form-check-input" name="remember">
|
||||||
<label for="remember_me" class="inline-flex items-center">
|
<label for="remember_me" class="form-check-label">
|
||||||
<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">
|
{{ __('Remember me') }}
|
||||||
<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="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') }}">
|
<a class="" 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;">
|
||||||
<x-primary-button class="ml-3">
|
<span>{{ __('Log in') }}</span>
|
||||||
{{ __('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>
|
||||||
|
|||||||
@@ -4,7 +4,7 @@
|
|||||||
|
|
||||||
<!-- Name -->
|
<!-- Name -->
|
||||||
<div>
|
<div>
|
||||||
<x-input-label for="name" :value="__('Name')" />
|
<x-input-label for="name" :value="__('Display 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">
|
<x-primary-button class="ml-4 btn btn-gradient" style="background:#ff512f;">
|
||||||
{{ __('Register') }}
|
<span>{{ __('Register') }}</span>
|
||||||
</x-primary-button>
|
</x-primary-button>
|
||||||
</div>
|
</div>
|
||||||
</form>
|
</form>
|
||||||
|
|||||||
@@ -1,3 +1,3 @@
|
|||||||
<svg viewBox="0 0 316 316" xmlns="http://www.w3.org/2000/svg" {{ $attributes }}>
|
<svg viewBox="0 0 311.87 279.03" xmlns="http://www.w3.org/2000/svg" {{ $attributes }}>
|
||||||
<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"/>
|
<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"/>
|
||||||
</svg>
|
</svg>
|
||||||
|
|||||||
|
Before Width: | Height: | Size: 3.0 KiB After Width: | Height: | Size: 2.3 KiB |
@@ -1,3 +1,3 @@
|
|||||||
<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']) }}>
|
<button {{ $attributes->merge(['type' => 'submit']) }}>
|
||||||
{{ $slot }}
|
{{ $slot }}
|
||||||
</button>
|
</button>
|
||||||
|
|||||||
118
site/resources/views/episodes/episode.blade.php
Normal file
118
site/resources/views/episodes/episode.blade.php
Normal file
@@ -0,0 +1,118 @@
|
|||||||
|
@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> “{{ $episode->title }}”</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($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($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 ($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
|
||||||
@@ -1,5 +1,9 @@
|
|||||||
@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">
|
||||||
@@ -35,39 +39,13 @@
|
|||||||
<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 }}">
|
||||||
<div class="explore-style-one {{ $artwork->episode->artwork_id == $artwork->id ? 'selected' : '' }}">
|
@include('artworks.card')
|
||||||
<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>
|
||||||
|
|||||||
@@ -1,11 +1,18 @@
|
|||||||
{{-- 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>
|
||||||
{{-- End .section-title --}}
|
<div class="text-large">
|
||||||
|
<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>
|
||||||
@@ -34,6 +41,7 @@
|
|||||||
</p>
|
</p>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
</div>
|
||||||
{{-- End .row --}}
|
{{-- End .row --}}
|
||||||
</div>
|
</div>
|
||||||
{{-- End .container --}}
|
{{-- End .container --}}
|
||||||
|
|||||||
@@ -1,44 +0,0 @@
|
|||||||
<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>
|
|
||||||
@@ -1,7 +1,12 @@
|
|||||||
<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)
|
||||||
@include('home.hero.slider.slide')
|
@php
|
||||||
|
$thisArtwork = $recentEpisode->artwork;
|
||||||
|
$thisEpisode = $recentEpisode;
|
||||||
|
$thisPodcast = $recentEpisode->podcast;
|
||||||
|
@endphp
|
||||||
|
@include('artworks.card')
|
||||||
@endif
|
@endif
|
||||||
@endforeach
|
@endforeach
|
||||||
</div>
|
</div>
|
||||||
@@ -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="author-profile.html" class="thumb">
|
<a href="/artist/{{ $leaderboardArtist->artist->slug }}" class="thumb">
|
||||||
<img src="{{ Vite::asset($leaderboardArtist->artist->avatar ?? 'resources/img/default_avatars/default_avatar_male.svg') }}" alt="{{ $leaderboardArtist->artist->name }}"
|
<img src="{{ $leaderboardArtist->artist->avatar() }}" 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="author-profile.html">{{ $leaderboardArtist->artist->name }}</a></h4>
|
<h4 class="title pb-1"><a href="/artist/{{ $leaderboardArtist->artist->slug }}">{{ $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="author-profile.html" class="items-number d-flex-center flex-column">
|
<a href="/artist/{{ $leaderboardArtist->artist->slug }}" 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>
|
||||||
|
|||||||
@@ -8,7 +8,7 @@
|
|||||||
</div>
|
</div>
|
||||||
{{-- End .section-title --}}
|
{{-- End .section-title --}}
|
||||||
<div class="text-large">
|
<div class="text-large">
|
||||||
<a href="#">View Leaderboards</a>
|
<a href="/leaderboards">View Leaderboards</a>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
{{-- End .d-flex-between --}}
|
{{-- End .d-flex-between --}}
|
||||||
@@ -16,6 +16,25 @@
|
|||||||
@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> </span>
|
||||||
|
</a>
|
||||||
|
</div>
|
||||||
|
{{-- End .top-seller-style-two --}}
|
||||||
|
</div>
|
||||||
|
{{-- End .col --}}
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
{{-- End container --}}
|
{{-- End container --}}
|
||||||
|
|||||||
@@ -1,35 +0,0 @@
|
|||||||
<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 --}}
|
|
||||||
@@ -8,7 +8,12 @@
|
|||||||
{{-- 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)
|
||||||
@include('home.recents.card')
|
@php
|
||||||
|
$thisArtwork = $recent;
|
||||||
|
$thisPodcast = $recent->podcast;
|
||||||
|
$thisEpisode = $recent->episode;
|
||||||
|
@endphp
|
||||||
|
@include('artworks.card')
|
||||||
@endforeach
|
@endforeach
|
||||||
{{-- End .slick-activation-01 --}}
|
{{-- End .slick-activation-01 --}}
|
||||||
</div>
|
</div>
|
||||||
|
|||||||
138
site/resources/views/home/support/page.blade.php
Normal file
138
site/resources/views/home/support/page.blade.php
Normal file
@@ -0,0 +1,138 @@
|
|||||||
|
@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
|
||||||
@@ -1,26 +1,30 @@
|
|||||||
<!DOCTYPE html>
|
@extends('layouts.master')
|
||||||
<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() }}">
|
|
||||||
|
|
||||||
<title>{{ config('app.name', 'Laravel') }}</title>
|
@section('page-title', 'Manage Account')
|
||||||
|
|
||||||
<!-- Fonts -->
|
@section('page-top')
|
||||||
<link rel="preconnect" href="https://fonts.bunny.net">
|
<section class="inner-page-banner bg-2 bg-image">
|
||||||
<link href="https://fonts.bunny.net/css?family=figtree:400,500,600&display=swap" rel="stylesheet" />
|
<div class="container">
|
||||||
|
<div class="inner text-center">
|
||||||
<!-- Scripts -->
|
<h1 class="title">Manage Account</h1>
|
||||||
@vite(['resources/css/app.css', 'resources/js/app.js'])
|
<nav class="mt-4">
|
||||||
</head>
|
<ol class="breadcrumb justify-content-center">
|
||||||
<body class="font-sans antialiased">
|
<li class="breadcrumb-item"><a href="/">Home</a></li>
|
||||||
<div class="min-h-screen bg-gray-100 dark:bg-gray-900">
|
<li class="breadcrumb-item active">Manage Account</li>
|
||||||
@include('layouts.navigation')
|
</ol>
|
||||||
|
</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="bg-white dark:bg-gray-800 shadow">
|
<header class="">
|
||||||
<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>
|
||||||
@@ -32,5 +36,6 @@
|
|||||||
{{ $slot }}
|
{{ $slot }}
|
||||||
</main>
|
</main>
|
||||||
</div>
|
</div>
|
||||||
</body>
|
</div>
|
||||||
</html>
|
</section>
|
||||||
|
@endsection
|
||||||
|
|||||||
@@ -1,30 +1,33 @@
|
|||||||
<!DOCTYPE html>
|
@extends('layouts.master')
|
||||||
<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() }}">
|
|
||||||
|
|
||||||
<title>{{ config('app.name', 'Laravel') }}</title>
|
@section('page-title', 'Account')
|
||||||
|
|
||||||
<!-- Fonts -->
|
@section('page-top')
|
||||||
<link rel="preconnect" href="https://fonts.bunny.net">
|
<section class="inner-page-banner bg-2 bg-image">
|
||||||
<link href="https://fonts.bunny.net/css?family=figtree:400,500,600&display=swap" rel="stylesheet" />
|
<div class="container">
|
||||||
|
<div class="inner text-center">
|
||||||
<!-- Scripts -->
|
<h1 class="title">Account</h1>
|
||||||
@vite(['resources/css/app.css', 'resources/js/app.js'])
|
<nav class="mt-4">
|
||||||
</head>
|
<ol class="breadcrumb justify-content-center">
|
||||||
<body class="font-sans text-gray-900 antialiased">
|
<li class="breadcrumb-item"><a href="/">Home</a></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">
|
<li class="breadcrumb-item active">Account</li>
|
||||||
<div>
|
</ol>
|
||||||
<a href="/">
|
</nav>
|
||||||
<x-application-logo class="w-20 h-20 fill-current text-gray-500" />
|
|
||||||
</a>
|
|
||||||
</div>
|
</div>
|
||||||
|
</div>
|
||||||
|
</section>
|
||||||
|
@endsection
|
||||||
|
|
||||||
<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('page-content')
|
||||||
|
<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>
|
||||||
</body>
|
</div>
|
||||||
</html>
|
</div>
|
||||||
|
</section>
|
||||||
|
@endsection
|
||||||
|
|||||||
@@ -5,13 +5,19 @@
|
|||||||
<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() }}">
|
||||||
<title>.: {{ $pageTitle ?? 'Site' }} - No Agenda Art Generator :.</title>
|
@if(View::hasSection('page-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"' : '' !!}>
|
<body{!! Session::get('preferred_theme') === 'light' ? ' class="theme-light"' : '' !!} data-preferred_theme="{!! Session::get('preferred_theme') !!}">
|
||||||
@include('partials/preloader')
|
@include('partials/preloader')
|
||||||
@include('partials/nav/head')
|
@include('partials/nav/head')
|
||||||
|
|
||||||
@@ -19,20 +25,21 @@
|
|||||||
@yield('page-content')
|
@yield('page-content')
|
||||||
|
|
||||||
@include('partials.footer.section')
|
@include('partials.footer.section')
|
||||||
<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.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/jquery.nice-select.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/modernizer.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/slick.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/bootstrap.min.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/waypoint.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/js.cookie.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/count-down.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/counter-up.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/isotop.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/imageloaded.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/aos.js"></script>
|
||||||
<script src="//{{ config('app.static_asset_url') }}/dist/vendor/js/jquery.custom-file-input.js"></script>
|
<script src="{{ config('app.static_asset_url') }}/v3/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>
|
||||||
|
|||||||
89
site/resources/views/leaderboards/leaderboards.blade.php
Normal file
89
site/resources/views/leaderboards/leaderboards.blade.php
Normal file
@@ -0,0 +1,89 @@
|
|||||||
|
@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
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
42
site/resources/views/livewire/artist/avatar.blade.php
Normal file
42
site/resources/views/livewire/artist/avatar.blade.php
Normal file
@@ -0,0 +1,42 @@
|
|||||||
|
<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>
|
||||||
42
site/resources/views/livewire/artist/header.blade.php
Normal file
42
site/resources/views/livewire/artist/header.blade.php
Normal file
@@ -0,0 +1,42 @@
|
|||||||
|
<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>
|
||||||
@@ -1,20 +1,20 @@
|
|||||||
<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="57x57" href="{{ config('app.static_asset_url') }}/v3/dist/ico/apple-touch-icon-57x57.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="114x114" href="{{ config('app.static_asset_url') }}/v3/dist/ico/apple-touch-icon-114x114.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="72x72" href="{{ config('app.static_asset_url') }}/v3/dist/ico/apple-touch-icon-72x72.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="144x144" href="{{ config('app.static_asset_url') }}/v3/dist/ico/apple-touch-icon-144x144.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="60x60" href="{{ config('app.static_asset_url') }}/v3/dist/ico/apple-touch-icon-60x60.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="120x120" href="{{ config('app.static_asset_url') }}/v3/dist/ico/apple-touch-icon-120x120.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="76x76" href="{{ config('app.static_asset_url') }}/v3/dist/ico/apple-touch-icon-76x76.png" />
|
||||||
<link rel="apple-touch-icon-precomposed" sizes="152x152" href="//{{ config('app.static_asset_url') }}/dist/ico/apple-touch-icon-152x152.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="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-196x196.png" sizes="196x196" />
|
||||||
<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-96x96.png" sizes="96x96" />
|
||||||
<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-32x32.png" sizes="32x32" />
|
||||||
<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-16x16.png" sizes="16x16" />
|
||||||
<link rel="icon" type="image/png" href="//{{ config('app.static_asset_url') }}/dist/ico/favicon-128.png" sizes="128x128" />
|
<link rel="icon" type="image/png" href="{{ config('app.static_asset_url') }}/v3/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') }}/dist/ico/mstile-144x144.png" />
|
<meta name="msapplication-TileImage" content="{{ config('app.static_asset_url') }}/v3/dist/ico/mstile-144x144.png" />
|
||||||
<meta name="msapplication-square70x70logo" content="//{{ config('app.static_asset_url') }}/dist/ico/mstile-70x70.png" />
|
<meta name="msapplication-square70x70logo" content="{{ config('app.static_asset_url') }}/v3/dist/ico/mstile-70x70.png" />
|
||||||
<meta name="msapplication-square150x150logo" content="//{{ config('app.static_asset_url') }}/dist/ico/mstile-150x150.png" />
|
<meta name="msapplication-square150x150logo" content="{{ config('app.static_asset_url') }}/v3/dist/ico/mstile-150x150.png" />
|
||||||
<meta name="msapplication-wide310x150logo" content="//{{ config('app.static_asset_url') }}/dist/ico/mstile-310x150.png" />
|
<meta name="msapplication-wide310x150logo" content="{{ config('app.static_asset_url') }}/v3/dist/ico/mstile-310x150.png" />
|
||||||
<meta name="msapplication-square310x310logo" content="//{{ config('app.static_asset_url') }}/dist/ico/mstile-310x310.png" />
|
<meta name="msapplication-square310x310logo" content="{{ config('app.static_asset_url') }}/v3/dist/ico/mstile-310x310.png" />
|
||||||
|
|||||||
@@ -39,11 +39,7 @@
|
|||||||
<div class="footer-widget">
|
<div class="footer-widget">
|
||||||
<h4>Navigation</h4>
|
<h4>Navigation</h4>
|
||||||
<ul class="footer-list-widget">
|
<ul class="footer-list-widget">
|
||||||
<li><a href="blog.html">Blog</a></li>
|
@include('partials.nav.main')
|
||||||
<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>
|
||||||
|
|||||||
17
site/resources/views/partials/metabranding.blade.php
Normal file
17
site/resources/views/partials/metabranding.blade.php
Normal file
@@ -0,0 +1,17 @@
|
|||||||
|
{{-- 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')">
|
||||||
@@ -14,7 +14,19 @@
|
|||||||
</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>
|
||||||
@@ -39,27 +51,41 @@
|
|||||||
--}}
|
--}}
|
||||||
@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-wallet-3-line"></i>Join In</span></a>
|
<span><i class="ri-user-add-line"></i>Join In</span></a>
|
||||||
</li>
|
</li>
|
||||||
@else
|
@else
|
||||||
<li class="avatar-info"> <a href="#"><img
|
<li class="avatar-info"> <a href="#"><img class="avatar_img"
|
||||||
@if (Auth::user() && Auth::user()->artists->first())
|
@if (Auth::user() && Auth::user()->artists->first() && Auth::user()->artists->first()->avatar)
|
||||||
src="{{ Vite::asset(Auth::user()->artists->first()->avatar ?? 'resources/img/default_avatars/default_avatar_male.svg') }}"
|
src="{{ Auth::user()->artists->first()->avatar() }}"
|
||||||
@else
|
@else
|
||||||
src="{{ Vite::asset('resources/img/default_avatars/default_avatar_male.svg') }}"
|
src="{{ config('app.static_asset_url') . '/' . ('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="/user-account"><i class="ri-user-line"></i> Profile</a></li>
|
<li><a href="/create-artwork"><i class="ri-image-add-line"></i> Create Artwork</a></li>
|
||||||
<li><a href="/logout"><i class="ri-logout-box-r-line"></i>Sign Out</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="/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
|
||||||
<livewire:themeswitch />
|
<li>
|
||||||
|
<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>
|
||||||
@@ -91,7 +117,19 @@
|
|||||||
</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>
|
||||||
|
|||||||
@@ -1,24 +1,25 @@
|
|||||||
<ul class="mainmenu">
|
<li>
|
||||||
<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/*']) ? 'class="active"' : '' !!} href="/artists">Artists</a>
|
<a {!! request()->is(['artists', 'artists/*', 'artist', 'artist/*', 'profile']) ? 'class="active"' : '' !!} href="/artists">Artists</a>
|
||||||
</li>
|
</li>
|
||||||
<li>
|
@if (auth()->user())
|
||||||
<a {!! request()->is(['leaderboards', 'leaderboards/*']) ? 'class="active"' : '' !!} href="/contact.html">Leaderboards</a>
|
<li>
|
||||||
</li>
|
<a {!! request()->is(['create-artwork', 'create-artwork/*']) ? 'class="active"' : '' !!} href="/create-artwork">Create</a>
|
||||||
<li class="has-dropdown has-menu-child-item">
|
</li>
|
||||||
<a {!! request()->is(['podcasts', 'podcasts/*']) ? 'class="active"' : '' !!}>Podcasts</a>
|
@can('approve', App\Models\Artwork::class)
|
||||||
<ul class="submenu">
|
<li>
|
||||||
@foreach ($navPodcasts as $cast)
|
<a {!! request()->is(['approve-artworks']) ? 'class="active"' : '' !!} href="/approve-artworks">Approve</a>
|
||||||
<li>
|
</li>
|
||||||
<a href="/podcasts/{{ $cast->slug }}">{{ $cast->name }}</a>
|
@endcan
|
||||||
</li>
|
@endif
|
||||||
@endforeach
|
<li>
|
||||||
</ul>
|
<a rel="me" {!! request()->is(['support*']) ? 'class="active"' : '' !!} href="/support-development">History & Support</a>
|
||||||
</li>
|
<li>
|
||||||
</ul>
|
<a {!! request()->is(['leaderboards', 'leaderboards/*']) ? 'class="active"' : '' !!} href="/leaderboards">Leaderboards</a>
|
||||||
|
</li>
|
||||||
|
|
||||||
|
|||||||
88
site/resources/views/podcasts/podcast.blade.php
Normal file
88
site/resources/views/podcasts/podcast.blade.php
Normal file
@@ -0,0 +1,88 @@
|
|||||||
|
@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
|
||||||
63
site/resources/views/profile/artist.blade.php
Normal file
63
site/resources/views/profile/artist.blade.php
Normal file
@@ -0,0 +1,63 @@
|
|||||||
|
@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
|
||||||
43
site/resources/views/profile/artists.blade.php
Normal file
43
site/resources/views/profile/artists.blade.php
Normal file
@@ -0,0 +1,43 @@
|
|||||||
|
@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
|
||||||
@@ -1,29 +1,40 @@
|
|||||||
|
@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="font-semibold text-xl text-gray-800 dark:text-gray-200 leading-tight">
|
<h2 class="">
|
||||||
{{ __('Profile') }}
|
{{ __('Manage Account Details') }}
|
||||||
</h2>
|
</h2>
|
||||||
</x-slot>
|
</x-slot>
|
||||||
|
|
||||||
<div class="py-12">
|
<section class="ptb-4">
|
||||||
<div class="max-w-7xl mx-auto sm:px-6 lg:px-8 space-y-6">
|
<div class="container">
|
||||||
<div class="p-4 sm:p-8 bg-white dark:bg-gray-800 shadow sm:rounded-lg">
|
<div class="row">
|
||||||
<div class="max-w-xl">
|
<div class="col-xl-4 col-lg-12 mb-4">
|
||||||
@include('profile.partials.update-profile-information-form')
|
@include('profile.partials.update-profile-information-form')
|
||||||
</div>
|
</div>
|
||||||
</div>
|
<div class="col-xl-4 col-lg-12 mb-4">
|
||||||
|
|
||||||
<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">
|
||||||
{{--<div class="p-4 sm:p-8 bg-white dark:bg-gray-800 shadow sm:rounded-lg">
|
@include('profile.partials.update-header-form')
|
||||||
<div class="max-w-xl">
|
|
||||||
@include('profile.partials.delete-user-form')
|
|
||||||
</div>
|
</div>
|
||||||
</div>--}}
|
<div class="col-xl-4 col-lg-12 mb-4">
|
||||||
|
@include('profile.partials.update-location-form')
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
</div>
|
||||||
|
</section>
|
||||||
</x-app-layout>
|
</x-app-layout>
|
||||||
|
@endsection
|
||||||
|
|||||||
@@ -0,0 +1,27 @@
|
|||||||
|
<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>
|
||||||
@@ -0,0 +1,18 @@
|
|||||||
|
<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>
|
||||||
@@ -0,0 +1,18 @@
|
|||||||
|
<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>
|
||||||
@@ -0,0 +1,47 @@
|
|||||||
|
<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>
|
||||||
@@ -1,14 +1,16 @@
|
|||||||
<section>
|
<div class="authbox" style="min-height: 100%;">
|
||||||
<header>
|
<div class="row mt-4 gutter-2">
|
||||||
<h2 class="text-lg font-medium text-gray-900 dark:text-gray-100">
|
<div class="col">
|
||||||
{{ __('Update Password') }}
|
<div class="signin-content">
|
||||||
</h2>
|
<div class="mb-6">
|
||||||
|
<h3 class="mb-2">{{ __('Update Password') }}</h3>
|
||||||
<p class="mt-1 text-sm text-gray-600 dark:text-gray-400">
|
<p class="normal">{{ __('Ensure your account is using a long, random password to stay secure.') }}</p>
|
||||||
{{ __('Ensure your account is using a long, random password to stay secure.') }}
|
</div>
|
||||||
</p>
|
</div>
|
||||||
</header>
|
</div>
|
||||||
|
</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')
|
||||||
@@ -31,8 +33,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="flex items-center gap-4">
|
<div class="d-flex justify-content-end text-end mt-4 mb-4">
|
||||||
<x-primary-button>{{ __('Save') }}</x-primary-button>
|
<x-primary-button class="ml-3 btn btn-gradient"><span>{{ __('Save') }}</span></x-primary-button>
|
||||||
|
|
||||||
@if (session('status') === 'password-updated')
|
@if (session('status') === 'password-updated')
|
||||||
<p
|
<p
|
||||||
@@ -45,4 +47,6 @@
|
|||||||
@endif
|
@endif
|
||||||
</div>
|
</div>
|
||||||
</form>
|
</form>
|
||||||
</section>
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|||||||
@@ -1,19 +1,21 @@
|
|||||||
<section>
|
<div class="authbox" style="min-height: 100%;">
|
||||||
<header>
|
<div class="row mt-4 gutter-2">
|
||||||
<h2 class="text-lg font-medium text-gray-900 dark:text-gray-100">
|
<div class="col">
|
||||||
{{ __('Profile Information') }}
|
<div class="signin-content">
|
||||||
</h2>
|
<div class="mb-6">
|
||||||
|
<h3 class="mb-2">{{ __('Update Login') }}</h3>
|
||||||
<p class="mt-1 text-sm text-gray-600 dark:text-gray-400">
|
<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>
|
||||||
{{ __("Update your account's profile information and email address.") }}
|
</div>
|
||||||
</p>
|
</div>
|
||||||
</header>
|
</div>
|
||||||
|
</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') }}" class="mt-6 space-y-6">
|
<form method="post" action="{{ route('profile.update') }}">
|
||||||
@csrf
|
@csrf
|
||||||
@method('patch')
|
@method('patch')
|
||||||
|
|
||||||
@@ -33,8 +35,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="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">
|
<button form="send-verification" class="btn btn-small btn-gradient">
|
||||||
{{ __('Click here to re-send the verification email.') }}
|
<span>{{ __('Click here to re-send the verification email.') }}</span>
|
||||||
</button>
|
</button>
|
||||||
</p>
|
</p>
|
||||||
|
|
||||||
@@ -47,9 +49,8 @@
|
|||||||
@endif
|
@endif
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div class="flex items-center gap-4">
|
<div class="d-flex justify-content-end mt-4 mb-4 text-end">
|
||||||
<x-primary-button>{{ __('Save') }}</x-primary-button>
|
<x-primary-button class="ml-3 btn btn-gradient"><span>{{ __('Update Login Information') }}</span></x-primary-button>
|
||||||
|
|
||||||
@if (session('status') === 'profile-updated')
|
@if (session('status') === 'profile-updated')
|
||||||
<p
|
<p
|
||||||
x-data="{ show: true }"
|
x-data="{ show: true }"
|
||||||
@@ -61,4 +62,6 @@
|
|||||||
@endif
|
@endif
|
||||||
</div>
|
</div>
|
||||||
</form>
|
</form>
|
||||||
</section>
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|||||||
@@ -3,6 +3,9 @@
|
|||||||
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;
|
||||||
|
|
||||||
@@ -20,17 +23,28 @@ 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);
|
||||||
|
|||||||
2
site/storage/debugbar/.gitignore
vendored
Normal file
2
site/storage/debugbar/.gitignore
vendored
Normal file
@@ -0,0 +1,2 @@
|
|||||||
|
*
|
||||||
|
!.gitignore
|
||||||
607
site/yarn.lock
607
site/yarn.lock
@@ -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.17.19":
|
"@esbuild/android-arm64@0.19.9":
|
||||||
version "0.17.19"
|
version "0.19.9"
|
||||||
resolved "https://registry.yarnpkg.com/@esbuild/android-arm64/-/android-arm64-0.17.19.tgz#bafb75234a5d3d1b690e7c2956a599345e84a2fd"
|
resolved "https://registry.yarnpkg.com/@esbuild/android-arm64/-/android-arm64-0.19.9.tgz#683794bdc3d27222d3eced7b74cad15979548031"
|
||||||
integrity sha512-KBMWvEZooR7+kzY0BtbTQn0OAYY7CsiydT63pVEaPtVYF0hXbUaOyZog37DKxK7NF3XacBJOpYT4adIJh+avxA==
|
integrity sha512-q4cR+6ZD0938R19MyEW3jEsMzbb/1rulLXiNAJQADD/XYp7pT+rOS5JGxvpRW8dFDEfjW4wLgC/3FXIw4zYglQ==
|
||||||
|
|
||||||
"@esbuild/android-arm@0.17.19":
|
"@esbuild/android-arm@0.19.9":
|
||||||
version "0.17.19"
|
version "0.19.9"
|
||||||
resolved "https://registry.yarnpkg.com/@esbuild/android-arm/-/android-arm-0.17.19.tgz#5898f7832c2298bc7d0ab53701c57beb74d78b4d"
|
resolved "https://registry.yarnpkg.com/@esbuild/android-arm/-/android-arm-0.19.9.tgz#21a4de41f07b2af47401c601d64dfdefd056c595"
|
||||||
integrity sha512-rIKddzqhmav7MSmoFCmDIb6e2W57geRsM94gV2l38fzhXMwq7hZoClug9USI2pFRGL06f4IOPHHpFNOkWieR8A==
|
integrity sha512-jkYjjq7SdsWuNI6b5quymW0oC83NN5FdRPuCbs9HZ02mfVdAP8B8eeqLSYU3gb6OJEaY5CQabtTFbqBf26H3GA==
|
||||||
|
|
||||||
"@esbuild/android-x64@0.17.19":
|
"@esbuild/android-x64@0.19.9":
|
||||||
version "0.17.19"
|
version "0.19.9"
|
||||||
resolved "https://registry.yarnpkg.com/@esbuild/android-x64/-/android-x64-0.17.19.tgz#658368ef92067866d95fb268719f98f363d13ae1"
|
resolved "https://registry.yarnpkg.com/@esbuild/android-x64/-/android-x64-0.19.9.tgz#e2d7674bc025ddc8699f0cc76cb97823bb63c252"
|
||||||
integrity sha512-uUTTc4xGNDT7YSArp/zbtmbhO0uEEK9/ETW29Wk1thYUJBz3IVnvgEiEwEa9IeLyvnpKrWK64Utw2bgUmDveww==
|
integrity sha512-KOqoPntWAH6ZxDwx1D6mRntIgZh9KodzgNOy5Ebt9ghzffOk9X2c1sPwtM9P+0eXbefnDhqYfkh5PLP5ULtWFA==
|
||||||
|
|
||||||
"@esbuild/darwin-arm64@0.17.19":
|
"@esbuild/darwin-arm64@0.19.9":
|
||||||
version "0.17.19"
|
version "0.19.9"
|
||||||
resolved "https://registry.yarnpkg.com/@esbuild/darwin-arm64/-/darwin-arm64-0.17.19.tgz#584c34c5991b95d4d48d333300b1a4e2ff7be276"
|
resolved "https://registry.yarnpkg.com/@esbuild/darwin-arm64/-/darwin-arm64-0.19.9.tgz#ae7a582289cc5c0bac15d4b9020a90cb7288f1e9"
|
||||||
integrity sha512-80wEoCfF/hFKM6WE1FyBHc9SfUblloAWx6FJkFWTWiCoht9Mc0ARGEM47e67W9rI09YoUxJL68WHfDRYEAvOhg==
|
integrity sha512-KBJ9S0AFyLVx2E5D8W0vExqRW01WqRtczUZ8NRu+Pi+87opZn5tL4Y0xT0mA4FtHctd0ZgwNoN639fUUGlNIWw==
|
||||||
|
|
||||||
"@esbuild/darwin-x64@0.17.19":
|
"@esbuild/darwin-x64@0.19.9":
|
||||||
version "0.17.19"
|
version "0.19.9"
|
||||||
resolved "https://registry.yarnpkg.com/@esbuild/darwin-x64/-/darwin-x64-0.17.19.tgz#7751d236dfe6ce136cce343dce69f52d76b7f6cb"
|
resolved "https://registry.yarnpkg.com/@esbuild/darwin-x64/-/darwin-x64-0.19.9.tgz#8a216c66dcf51addeeb843d8cfaeff712821d12b"
|
||||||
integrity sha512-IJM4JJsLhRYr9xdtLytPLSH9k/oxR3boaUIYiHkAawtwNOXKE8KoU8tMvryogdcT8AU+Bflmh81Xn6Q0vTZbQw==
|
integrity sha512-vE0VotmNTQaTdX0Q9dOHmMTao6ObjyPm58CHZr1UK7qpNleQyxlFlNCaHsHx6Uqv86VgPmR4o2wdNq3dP1qyDQ==
|
||||||
|
|
||||||
"@esbuild/freebsd-arm64@0.17.19":
|
"@esbuild/freebsd-arm64@0.19.9":
|
||||||
version "0.17.19"
|
version "0.19.9"
|
||||||
resolved "https://registry.yarnpkg.com/@esbuild/freebsd-arm64/-/freebsd-arm64-0.17.19.tgz#cacd171665dd1d500f45c167d50c6b7e539d5fd2"
|
resolved "https://registry.yarnpkg.com/@esbuild/freebsd-arm64/-/freebsd-arm64-0.19.9.tgz#63d4f603e421252c3cd836b18d01545be7c6c440"
|
||||||
integrity sha512-pBwbc7DufluUeGdjSU5Si+P3SoMF5DQ/F/UmTSb8HXO80ZEAJmrykPyzo1IfNbAoaqw48YRpv8shwd1NoI0jcQ==
|
integrity sha512-uFQyd/o1IjiEk3rUHSwUKkqZwqdvuD8GevWF065eqgYfexcVkxh+IJgwTaGZVu59XczZGcN/YMh9uF1fWD8j1g==
|
||||||
|
|
||||||
"@esbuild/freebsd-x64@0.17.19":
|
"@esbuild/freebsd-x64@0.19.9":
|
||||||
version "0.17.19"
|
version "0.19.9"
|
||||||
resolved "https://registry.yarnpkg.com/@esbuild/freebsd-x64/-/freebsd-x64-0.17.19.tgz#0769456eee2a08b8d925d7c00b79e861cb3162e4"
|
resolved "https://registry.yarnpkg.com/@esbuild/freebsd-x64/-/freebsd-x64-0.19.9.tgz#a3db52595be65360eae4de1d1fa3c1afd942e1e4"
|
||||||
integrity sha512-4lu+n8Wk0XlajEhbEffdy2xy53dpR06SlzvhGByyg36qJw6Kpfk7cp45DR/62aPH9mtJRmIyrXAS5UWBrJT6TQ==
|
integrity sha512-WMLgWAtkdTbTu1AWacY7uoj/YtHthgqrqhf1OaEWnZb7PQgpt8eaA/F3LkV0E6K/Lc0cUr/uaVP/49iE4M4asA==
|
||||||
|
|
||||||
"@esbuild/linux-arm64@0.17.19":
|
"@esbuild/linux-arm64@0.19.9":
|
||||||
version "0.17.19"
|
version "0.19.9"
|
||||||
resolved "https://registry.yarnpkg.com/@esbuild/linux-arm64/-/linux-arm64-0.17.19.tgz#38e162ecb723862c6be1c27d6389f48960b68edb"
|
resolved "https://registry.yarnpkg.com/@esbuild/linux-arm64/-/linux-arm64-0.19.9.tgz#4ae5811ce9f8d7df5eb9edd9765ea9401a534f13"
|
||||||
integrity sha512-ct1Tg3WGwd3P+oZYqic+YZF4snNl2bsnMKRkb3ozHmnM0dGWuxcPTTntAF6bOP0Sp4x0PjSF+4uHQ1xvxfRKqg==
|
integrity sha512-PiPblfe1BjK7WDAKR1Cr9O7VVPqVNpwFcPWgfn4xu0eMemzRp442hXyzF/fSwgrufI66FpHOEJk0yYdPInsmyQ==
|
||||||
|
|
||||||
"@esbuild/linux-arm@0.17.19":
|
"@esbuild/linux-arm@0.19.9":
|
||||||
version "0.17.19"
|
version "0.19.9"
|
||||||
resolved "https://registry.yarnpkg.com/@esbuild/linux-arm/-/linux-arm-0.17.19.tgz#1a2cd399c50040184a805174a6d89097d9d1559a"
|
resolved "https://registry.yarnpkg.com/@esbuild/linux-arm/-/linux-arm-0.19.9.tgz#9807e92cfd335f46326394805ad488e646e506f2"
|
||||||
integrity sha512-cdmT3KxjlOQ/gZ2cjfrQOtmhG4HJs6hhvm3mWSRDPtZ/lP5oe8FWceS10JaSJC13GBd4eH/haHnqf7hhGNLerA==
|
integrity sha512-C/ChPohUYoyUaqn1h17m/6yt6OB14hbXvT8EgM1ZWaiiTYz7nWZR0SYmMnB5BzQA4GXl3BgBO1l8MYqL/He3qw==
|
||||||
|
|
||||||
"@esbuild/linux-ia32@0.17.19":
|
"@esbuild/linux-ia32@0.19.9":
|
||||||
version "0.17.19"
|
version "0.19.9"
|
||||||
resolved "https://registry.yarnpkg.com/@esbuild/linux-ia32/-/linux-ia32-0.17.19.tgz#e28c25266b036ce1cabca3c30155222841dc035a"
|
resolved "https://registry.yarnpkg.com/@esbuild/linux-ia32/-/linux-ia32-0.19.9.tgz#18892c10f3106652b16f9da88a0362dc95ed46c7"
|
||||||
integrity sha512-w4IRhSy1VbsNxHRQpeGCHEmibqdTUx61Vc38APcsRbuVgK0OPEnQ0YD39Brymn96mOx48Y2laBQGqgZ0j9w6SQ==
|
integrity sha512-f37i/0zE0MjDxijkPSQw1CO/7C27Eojqb+r3BbHVxMLkj8GCa78TrBZzvPyA/FNLUMzP3eyHCVkAopkKVja+6Q==
|
||||||
|
|
||||||
"@esbuild/linux-loong64@0.17.19":
|
"@esbuild/linux-loong64@0.19.9":
|
||||||
version "0.17.19"
|
version "0.19.9"
|
||||||
resolved "https://registry.yarnpkg.com/@esbuild/linux-loong64/-/linux-loong64-0.17.19.tgz#0f887b8bb3f90658d1a0117283e55dbd4c9dcf72"
|
resolved "https://registry.yarnpkg.com/@esbuild/linux-loong64/-/linux-loong64-0.19.9.tgz#dc2ebf9a125db0a1bba18c2bbfd4fbdcbcaf61c2"
|
||||||
integrity sha512-2iAngUbBPMq439a+z//gE+9WBldoMp1s5GWsUSgqHLzLJ9WoZLZhpwWuym0u0u/4XmZ3gpHmzV84PonE+9IIdQ==
|
integrity sha512-t6mN147pUIf3t6wUt3FeumoOTPfmv9Cc6DQlsVBpB7eCpLOqQDyWBP1ymXn1lDw4fNUSb/gBcKAmvTP49oIkaA==
|
||||||
|
|
||||||
"@esbuild/linux-mips64el@0.17.19":
|
"@esbuild/linux-mips64el@0.19.9":
|
||||||
version "0.17.19"
|
version "0.19.9"
|
||||||
resolved "https://registry.yarnpkg.com/@esbuild/linux-mips64el/-/linux-mips64el-0.17.19.tgz#f5d2a0b8047ea9a5d9f592a178ea054053a70289"
|
resolved "https://registry.yarnpkg.com/@esbuild/linux-mips64el/-/linux-mips64el-0.19.9.tgz#4c2f7c5d901015e3faf1563c4a89a50776cb07fd"
|
||||||
integrity sha512-LKJltc4LVdMKHsrFe4MGNPp0hqDFA1Wpt3jE1gEyM3nKUvOiO//9PheZZHfYRfYl6AwdTH4aTcXSqBerX0ml4A==
|
integrity sha512-jg9fujJTNTQBuDXdmAg1eeJUL4Jds7BklOTkkH80ZgQIoCTdQrDaHYgbFZyeTq8zbY+axgptncko3v9p5hLZtw==
|
||||||
|
|
||||||
"@esbuild/linux-ppc64@0.17.19":
|
"@esbuild/linux-ppc64@0.19.9":
|
||||||
version "0.17.19"
|
version "0.19.9"
|
||||||
resolved "https://registry.yarnpkg.com/@esbuild/linux-ppc64/-/linux-ppc64-0.17.19.tgz#876590e3acbd9fa7f57a2c7d86f83717dbbac8c7"
|
resolved "https://registry.yarnpkg.com/@esbuild/linux-ppc64/-/linux-ppc64-0.19.9.tgz#8385332713b4e7812869622163784a5633f76fc4"
|
||||||
integrity sha512-/c/DGybs95WXNS8y3Ti/ytqETiW7EU44MEKuCAcpPto3YjQbyK3IQVKfF6nbghD7EcLUGl0NbiL5Rt5DMhn5tg==
|
integrity sha512-tkV0xUX0pUUgY4ha7z5BbDS85uI7ABw3V1d0RNTii7E9lbmV8Z37Pup2tsLV46SQWzjOeyDi1Q7Wx2+QM8WaCQ==
|
||||||
|
|
||||||
"@esbuild/linux-riscv64@0.17.19":
|
"@esbuild/linux-riscv64@0.19.9":
|
||||||
version "0.17.19"
|
version "0.19.9"
|
||||||
resolved "https://registry.yarnpkg.com/@esbuild/linux-riscv64/-/linux-riscv64-0.17.19.tgz#7f49373df463cd9f41dc34f9b2262d771688bf09"
|
resolved "https://registry.yarnpkg.com/@esbuild/linux-riscv64/-/linux-riscv64-0.19.9.tgz#23f1db24fa761be311874f32036c06249aa20cba"
|
||||||
integrity sha512-FC3nUAWhvFoutlhAkgHf8f5HwFWUL6bYdvLc/TTuxKlvLi3+pPzdZiFKSWz/PF30TB1K19SuCxDTI5KcqASJqA==
|
integrity sha512-DfLp8dj91cufgPZDXr9p3FoR++m3ZJ6uIXsXrIvJdOjXVREtXuQCjfMfvmc3LScAVmLjcfloyVtpn43D56JFHg==
|
||||||
|
|
||||||
"@esbuild/linux-s390x@0.17.19":
|
"@esbuild/linux-s390x@0.19.9":
|
||||||
version "0.17.19"
|
version "0.19.9"
|
||||||
resolved "https://registry.yarnpkg.com/@esbuild/linux-s390x/-/linux-s390x-0.17.19.tgz#e2afd1afcaf63afe2c7d9ceacd28ec57c77f8829"
|
resolved "https://registry.yarnpkg.com/@esbuild/linux-s390x/-/linux-s390x-0.19.9.tgz#2dffe497726b897c9f0109e774006e25b33b4fd0"
|
||||||
integrity sha512-IbFsFbxMWLuKEbH+7sTkKzL6NJmG2vRyy6K7JJo55w+8xDk7RElYn6xvXtDW8HCfoKBFK69f3pgBJSUSQPr+4Q==
|
integrity sha512-zHbglfEdC88KMgCWpOl/zc6dDYJvWGLiUtmPRsr1OgCViu3z5GncvNVdf+6/56O2Ca8jUU+t1BW261V6kp8qdw==
|
||||||
|
|
||||||
"@esbuild/linux-x64@0.17.19":
|
"@esbuild/linux-x64@0.19.9":
|
||||||
version "0.17.19"
|
version "0.19.9"
|
||||||
resolved "https://registry.yarnpkg.com/@esbuild/linux-x64/-/linux-x64-0.17.19.tgz#8a0e9738b1635f0c53389e515ae83826dec22aa4"
|
resolved "https://registry.yarnpkg.com/@esbuild/linux-x64/-/linux-x64-0.19.9.tgz#ceb1d62cd830724ff5b218e5d3172a8bad59420e"
|
||||||
integrity sha512-68ngA9lg2H6zkZcyp22tsVt38mlhWde8l3eJLWkyLrp4HwMUr3c1s/M2t7+kHIhvMjglIBrFpncX1SzMckomGw==
|
integrity sha512-JUjpystGFFmNrEHQnIVG8hKwvA2DN5o7RqiO1CVX8EN/F/gkCjkUMgVn6hzScpwnJtl2mPR6I9XV1oW8k9O+0A==
|
||||||
|
|
||||||
"@esbuild/netbsd-x64@0.17.19":
|
"@esbuild/netbsd-x64@0.19.9":
|
||||||
version "0.17.19"
|
version "0.19.9"
|
||||||
resolved "https://registry.yarnpkg.com/@esbuild/netbsd-x64/-/netbsd-x64-0.17.19.tgz#c29fb2453c6b7ddef9a35e2c18b37bda1ae5c462"
|
resolved "https://registry.yarnpkg.com/@esbuild/netbsd-x64/-/netbsd-x64-0.19.9.tgz#0cbca65e9ef4d3fc41502d3e055e6f49479a8f18"
|
||||||
integrity sha512-CwFq42rXCR8TYIjIfpXCbRX0rp1jo6cPIUPSaWwzbVI4aOfX96OXY8M6KNmtPcg7QjYeDmN+DD0Wp3LaBOLf4Q==
|
integrity sha512-GThgZPAwOBOsheA2RUlW5UeroRfESwMq/guy8uEe3wJlAOjpOXuSevLRd70NZ37ZrpO6RHGHgEHvPg1h3S1Jug==
|
||||||
|
|
||||||
"@esbuild/openbsd-x64@0.17.19":
|
"@esbuild/openbsd-x64@0.19.9":
|
||||||
version "0.17.19"
|
version "0.19.9"
|
||||||
resolved "https://registry.yarnpkg.com/@esbuild/openbsd-x64/-/openbsd-x64-0.17.19.tgz#95e75a391403cb10297280d524d66ce04c920691"
|
resolved "https://registry.yarnpkg.com/@esbuild/openbsd-x64/-/openbsd-x64-0.19.9.tgz#1f57adfbee09c743292c6758a3642e875bcad1cf"
|
||||||
integrity sha512-cnq5brJYrSZ2CF6c35eCmviIN3k3RczmHz8eYaVlNasVqsNY+JKohZU5MKmaOI+KkllCdzOKKdPs762VCPC20g==
|
integrity sha512-Ki6PlzppaFVbLnD8PtlVQfsYw4S9n3eQl87cqgeIw+O3sRr9IghpfSKY62mggdt1yCSZ8QWvTZ9jo9fjDSg9uw==
|
||||||
|
|
||||||
"@esbuild/sunos-x64@0.17.19":
|
"@esbuild/sunos-x64@0.19.9":
|
||||||
version "0.17.19"
|
version "0.19.9"
|
||||||
resolved "https://registry.yarnpkg.com/@esbuild/sunos-x64/-/sunos-x64-0.17.19.tgz#722eaf057b83c2575937d3ffe5aeb16540da7273"
|
resolved "https://registry.yarnpkg.com/@esbuild/sunos-x64/-/sunos-x64-0.19.9.tgz#116be6adbd2c7479edeeb5f6ea0441002ab4cb9c"
|
||||||
integrity sha512-vCRT7yP3zX+bKWFeP/zdS6SqdWB8OIpaRq/mbXQxTGHnIxspRtigpkUcDMlSCOejlHowLqII7K2JKevwyRP2rg==
|
integrity sha512-MLHj7k9hWh4y1ddkBpvRj2b9NCBhfgBt3VpWbHQnXRedVun/hC7sIyTGDGTfsGuXo4ebik2+3ShjcPbhtFwWDw==
|
||||||
|
|
||||||
"@esbuild/win32-arm64@0.17.19":
|
"@esbuild/win32-arm64@0.19.9":
|
||||||
version "0.17.19"
|
version "0.19.9"
|
||||||
resolved "https://registry.yarnpkg.com/@esbuild/win32-arm64/-/win32-arm64-0.17.19.tgz#9aa9dc074399288bdcdd283443e9aeb6b9552b6f"
|
resolved "https://registry.yarnpkg.com/@esbuild/win32-arm64/-/win32-arm64-0.19.9.tgz#2be22131ab18af4693fd737b161d1ef34de8ca9d"
|
||||||
integrity sha512-yYx+8jwowUstVdorcMdNlzklLYhPxjniHWFKgRqH7IFlUEa0Umu3KuYplf1HUZZ422e3NU9F4LGb+4O0Kdcaag==
|
integrity sha512-GQoa6OrQ8G08guMFgeXPH7yE/8Dt0IfOGWJSfSH4uafwdC7rWwrfE6P9N8AtPGIjUzdo2+7bN8Xo3qC578olhg==
|
||||||
|
|
||||||
"@esbuild/win32-ia32@0.17.19":
|
"@esbuild/win32-ia32@0.19.9":
|
||||||
version "0.17.19"
|
version "0.19.9"
|
||||||
resolved "https://registry.yarnpkg.com/@esbuild/win32-ia32/-/win32-ia32-0.17.19.tgz#95ad43c62ad62485e210f6299c7b2571e48d2b03"
|
resolved "https://registry.yarnpkg.com/@esbuild/win32-ia32/-/win32-ia32-0.19.9.tgz#e10ead5a55789b167b4225d2469324538768af7c"
|
||||||
integrity sha512-eggDKanJszUtCdlVs0RB+h35wNlb5v4TWEkq4vZcmVt5u/HiDZrTXe2bWFQUez3RgNHwx/x4sk5++4NSSicKkw==
|
integrity sha512-UOozV7Ntykvr5tSOlGCrqU3NBr3d8JqPes0QWN2WOXfvkWVGRajC+Ym0/Wj88fUgecUCLDdJPDF0Nna2UK3Qtg==
|
||||||
|
|
||||||
"@esbuild/win32-x64@0.17.19":
|
"@esbuild/win32-x64@0.19.9":
|
||||||
version "0.17.19"
|
version "0.19.9"
|
||||||
resolved "https://registry.yarnpkg.com/@esbuild/win32-x64/-/win32-x64-0.17.19.tgz#8cfaf2ff603e9aabb910e9c0558c26cf32744061"
|
resolved "https://registry.yarnpkg.com/@esbuild/win32-x64/-/win32-x64-0.19.9.tgz#b2da6219b603e3fa371a78f53f5361260d0c5585"
|
||||||
integrity sha512-lAhycmKnVOuRYNtRtatQR1LPQf2oYCkRGkSFnseDAKPl8lu5SOsK/e1sXe5a0Pc5kHIHe6P2I/ilntNv2xf3cA==
|
integrity sha512-oxoQgglOP7RH6iasDrhY+R/3cHrfwIDvRlT4CGChflq6twk8iENeVvMJjmvBb94Ik1Z+93iGO27err7w6l54GQ==
|
||||||
|
|
||||||
"@jridgewell/gen-mapping@^0.3.2":
|
"@jridgewell/gen-mapping@^0.3.2":
|
||||||
version "0.3.3"
|
version "0.3.3"
|
||||||
@@ -126,33 +126,28 @@
|
|||||||
"@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.0"
|
version "3.1.1"
|
||||||
resolved "https://registry.yarnpkg.com/@jridgewell/resolve-uri/-/resolve-uri-3.1.0.tgz#2203b118c157721addfe69d47b70465463066d78"
|
resolved "https://registry.yarnpkg.com/@jridgewell/resolve-uri/-/resolve-uri-3.1.1.tgz#c08679063f279615a3326583ba3a90d1d82cc721"
|
||||||
integrity sha512-F2msla3tad+Mfht5cJq7LSXcdudKTWCVYUgw6pLFOOHSTtZlj6SWNYAp+AhuqLmWdBO2X5hPrLcu8cVP8fy28w==
|
integrity sha512-dSYZh7HhCDtCKm4QakX0xFpsRDqjjtZf/kjI/v3T3Nwt5r8/qz/M19F9ySyOqU94SXBmeG9ttTul+YnR4LOxFA==
|
||||||
|
|
||||||
"@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.14":
|
"@jridgewell/sourcemap-codec@^1.4.10", "@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.18"
|
version "0.3.20"
|
||||||
resolved "https://registry.yarnpkg.com/@jridgewell/trace-mapping/-/trace-mapping-0.3.18.tgz#25783b2086daf6ff1dcb53c9249ae480e4dd4cd6"
|
resolved "https://registry.yarnpkg.com/@jridgewell/trace-mapping/-/trace-mapping-0.3.20.tgz#72e45707cf240fa6b081d0366f8265b0cd10197f"
|
||||||
integrity sha512-w+niJYzMHdd7USdiH2U6869nqhD2nbfZXND5Yp93qIbEmnDNk7PD48o+YchRVpzMU7M6jVCbenTR7PA1FLQ9pA==
|
integrity sha512-R8LcPeWZol2zR8mmH3JeKQ6QRCFb7XgUhV9ZlGhHLGyg4wpPiPZNQOOWhFZhxKw8u//yTbNGI42Bx/3paXEQ+Q==
|
||||||
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"
|
||||||
@@ -175,10 +170,75 @@
|
|||||||
"@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.3"
|
version "0.5.7"
|
||||||
resolved "https://registry.yarnpkg.com/@tailwindcss/forms/-/forms-0.5.3.tgz#e4d7989686cbcaf416c53f1523df5225332a86e7"
|
resolved "https://registry.yarnpkg.com/@tailwindcss/forms/-/forms-0.5.7.tgz#db5421f062a757b5f828bc9286ba626c6685e821"
|
||||||
integrity sha512-y5mb86JUoiUgBjY/o6FJSFZSEttfb3Q5gllE4xoKjAAD+vBrnIhE4dViwUuow3va8mpH4s9jyUbUbrRGoRdc2Q==
|
integrity sha512-QE7X69iQI+ZXwldE+rzasvbJiyV/ju1FGHH0Qn2W3FKbuYtqp8LKcy6iSw79fVUT5/Vvf+0XgLCeYVG+UV6hOw==
|
||||||
dependencies:
|
dependencies:
|
||||||
mini-svg-data-uri "^1.2.3"
|
mini-svg-data-uri "^1.2.3"
|
||||||
|
|
||||||
@@ -195,9 +255,9 @@
|
|||||||
integrity sha512-oJ4F3TnvpXaQwZJNF3ZK+kLPHKarDmJjJ6jyzVNDKH9md1dptjC7lWR//jrGuLdek/U6iltWxqAnYOu8gCiOvA==
|
integrity sha512-oJ4F3TnvpXaQwZJNF3ZK+kLPHKarDmJjJ6jyzVNDKH9md1dptjC7lWR//jrGuLdek/U6iltWxqAnYOu8gCiOvA==
|
||||||
|
|
||||||
alpinejs@^3.4.2:
|
alpinejs@^3.4.2:
|
||||||
version "3.12.2"
|
version "3.13.3"
|
||||||
resolved "https://registry.yarnpkg.com/alpinejs/-/alpinejs-3.12.2.tgz#e76ffd00a4858623acf84112c27a4eecbee9ac74"
|
resolved "https://registry.yarnpkg.com/alpinejs/-/alpinejs-3.13.3.tgz#92eb7e869b99ff548e7a55044e45660597cf530b"
|
||||||
integrity sha512-wrUZULm9w6DYwWcUtB/anFLgRaF4riSuPgIJ3gcPUS8st9luAJnAxoIgro/Al97d2McSSz/JypWg/NlmKFIJJA==
|
integrity sha512-WZ6WQjkAOl+WdW/jukzNHq9zHFDNKmkk/x6WF7WdyNDD6woinrfXCVsZXm0galjbco+pEpYmJLtwlZwcOfIVdg==
|
||||||
dependencies:
|
dependencies:
|
||||||
"@vue/reactivity" "~3.1.1"
|
"@vue/reactivity" "~3.1.1"
|
||||||
|
|
||||||
@@ -234,21 +294,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.14"
|
version "10.4.16"
|
||||||
resolved "https://registry.yarnpkg.com/autoprefixer/-/autoprefixer-10.4.14.tgz#e28d49902f8e759dd25b153264e862df2705f79d"
|
resolved "https://registry.yarnpkg.com/autoprefixer/-/autoprefixer-10.4.16.tgz#fad1411024d8670880bdece3970aa72e3572feb8"
|
||||||
integrity sha512-FQzyfOsTlwVzjHxKEqRIAdJx9niO6VCBCoEwax/VLSoQF29ggECcPuBqUMZ+u8jCZOPSy8b8/8KnuFbp0SaFZQ==
|
integrity sha512-7vd3UC6xKp0HLfua5IjZlcXvGAGy7cBAXTg2lyQ/8WpNhd6SiZ8Be+xm3FyBSYJx5GKcpRCzBh7RH4/0dnY+uQ==
|
||||||
dependencies:
|
dependencies:
|
||||||
browserslist "^4.21.5"
|
browserslist "^4.21.10"
|
||||||
caniuse-lite "^1.0.30001464"
|
caniuse-lite "^1.0.30001538"
|
||||||
fraction.js "^4.2.0"
|
fraction.js "^4.3.6"
|
||||||
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.4.0"
|
version "1.6.2"
|
||||||
resolved "https://registry.yarnpkg.com/axios/-/axios-1.4.0.tgz#38a7bf1224cd308de271146038b551d725f0be1f"
|
resolved "https://registry.yarnpkg.com/axios/-/axios-1.6.2.tgz#de67d42c755b571d3e698df1b6504cde9b0ee9f2"
|
||||||
integrity sha512-S4XCWMEmzvo64T9GfvQDOXgYRDJ/wsSZc7Jvdgx5u1sd0JwsuPLqb3SYmusag+edF6ziyMensPVqLTSc1PiSEA==
|
integrity sha512-7i24Ri4pmDRfJTR7LDBhsOTtcm+9kjX5WiY1X3wIisx6G9So3pfMkEiU7emUBe46oceVImccTEM3k6C5dbVW8A==
|
||||||
dependencies:
|
dependencies:
|
||||||
follow-redirects "^1.15.0"
|
follow-redirects "^1.15.0"
|
||||||
form-data "^4.0.0"
|
form-data "^4.0.0"
|
||||||
@@ -279,25 +339,25 @@ braces@^3.0.2, braces@~3.0.2:
|
|||||||
dependencies:
|
dependencies:
|
||||||
fill-range "^7.0.1"
|
fill-range "^7.0.1"
|
||||||
|
|
||||||
browserslist@^4.21.5:
|
browserslist@^4.21.10:
|
||||||
version "4.21.9"
|
version "4.22.2"
|
||||||
resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.21.9.tgz#e11bdd3c313d7e2a9e87e8b4b0c7872b13897635"
|
resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.22.2.tgz#704c4943072bd81ea18997f3bd2180e89c77874b"
|
||||||
integrity sha512-M0MFoZzbUrRU4KNfCrDLnvyE7gub+peetoTid3TBIqtunaDJyXlwhakT+/VkvSXcfIzFfK/nkCs4nmyTmxdNSg==
|
integrity sha512-0UgcrvQmBDvZHFGdYUehrCNIazki7/lUP3kkoi/r3YB2amZbFM9J43ZRkJTXBUZK4gmx56+Sqk9+Vs9mwZx9+A==
|
||||||
dependencies:
|
dependencies:
|
||||||
caniuse-lite "^1.0.30001503"
|
caniuse-lite "^1.0.30001565"
|
||||||
electron-to-chromium "^1.4.431"
|
electron-to-chromium "^1.4.601"
|
||||||
node-releases "^2.0.12"
|
node-releases "^2.0.14"
|
||||||
update-browserslist-db "^1.0.11"
|
update-browserslist-db "^1.0.13"
|
||||||
|
|
||||||
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.30001464, caniuse-lite@^1.0.30001503:
|
caniuse-lite@^1.0.30001538, caniuse-lite@^1.0.30001565:
|
||||||
version "1.0.30001506"
|
version "1.0.30001570"
|
||||||
resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001506.tgz#35bd814b310a487970c585430e9e80ee23faf14b"
|
resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001570.tgz#b4e5c1fa786f733ab78fc70f592df6b3f23244ca"
|
||||||
integrity sha512-6XNEcpygZMCKaufIcgpQNZNf00GEqc7VQON+9Rd0K1bMYo8xhMZRAo5zpbnbMNizi4YNgIDAFrdykWsvY3H4Hw==
|
integrity sha512-+3e0ASu4sw1SWaoCtvPeyXp+5PsjigkSt8OXZbF9StH5pQWbxEjLAZE3n8Aup5udop1uRiKA7a4utUk/uoSpUw==
|
||||||
|
|
||||||
"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"
|
||||||
@@ -336,6 +396,11 @@ 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"
|
||||||
@@ -361,38 +426,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.431:
|
electron-to-chromium@^1.4.601:
|
||||||
version "1.4.435"
|
version "1.4.613"
|
||||||
resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.4.435.tgz#761c34300603b9f1234f0b6155870d3002435db6"
|
resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.4.613.tgz#529e4fc65576ecfd055d7d4619fade4fac446af2"
|
||||||
integrity sha512-B0CBWVFhvoQCW/XtjRzgrmqcgVWg6RXOEM/dK59+wFV93BFGR6AeNKc4OyhM+T3IhJaOOG8o/V+33Y2mwJWtzw==
|
integrity sha512-r4x5+FowKG6q+/Wj0W9nidx7QO31BJwmR2uEo+Qh3YLGQ8SbBAFuDFpTxzly/I2gsbrFwBuIjrMp423L3O5U3w==
|
||||||
|
|
||||||
esbuild@^0.17.5:
|
esbuild@^0.19.3:
|
||||||
version "0.17.19"
|
version "0.19.9"
|
||||||
resolved "https://registry.yarnpkg.com/esbuild/-/esbuild-0.17.19.tgz#087a727e98299f0462a3d0bcdd9cd7ff100bd955"
|
resolved "https://registry.yarnpkg.com/esbuild/-/esbuild-0.19.9.tgz#423a8f35153beb22c0b695da1cd1e6c0c8cdd490"
|
||||||
integrity sha512-XQ0jAPFkK/u3LcVRcvVHQcTIqD6E2H1fvZMA5dQPSOWb3suUbWbfbRf94pjc0bNzRYLfIrDRQXr7X+LHIm5oHw==
|
integrity sha512-U9CHtKSy+EpPsEBa+/A2gMs/h3ylBC0H0KSqIg7tpztHerLi6nrrcoUJAkNCEPumx8yJ+Byic4BVwHgRbN0TBg==
|
||||||
optionalDependencies:
|
optionalDependencies:
|
||||||
"@esbuild/android-arm" "0.17.19"
|
"@esbuild/android-arm" "0.19.9"
|
||||||
"@esbuild/android-arm64" "0.17.19"
|
"@esbuild/android-arm64" "0.19.9"
|
||||||
"@esbuild/android-x64" "0.17.19"
|
"@esbuild/android-x64" "0.19.9"
|
||||||
"@esbuild/darwin-arm64" "0.17.19"
|
"@esbuild/darwin-arm64" "0.19.9"
|
||||||
"@esbuild/darwin-x64" "0.17.19"
|
"@esbuild/darwin-x64" "0.19.9"
|
||||||
"@esbuild/freebsd-arm64" "0.17.19"
|
"@esbuild/freebsd-arm64" "0.19.9"
|
||||||
"@esbuild/freebsd-x64" "0.17.19"
|
"@esbuild/freebsd-x64" "0.19.9"
|
||||||
"@esbuild/linux-arm" "0.17.19"
|
"@esbuild/linux-arm" "0.19.9"
|
||||||
"@esbuild/linux-arm64" "0.17.19"
|
"@esbuild/linux-arm64" "0.19.9"
|
||||||
"@esbuild/linux-ia32" "0.17.19"
|
"@esbuild/linux-ia32" "0.19.9"
|
||||||
"@esbuild/linux-loong64" "0.17.19"
|
"@esbuild/linux-loong64" "0.19.9"
|
||||||
"@esbuild/linux-mips64el" "0.17.19"
|
"@esbuild/linux-mips64el" "0.19.9"
|
||||||
"@esbuild/linux-ppc64" "0.17.19"
|
"@esbuild/linux-ppc64" "0.19.9"
|
||||||
"@esbuild/linux-riscv64" "0.17.19"
|
"@esbuild/linux-riscv64" "0.19.9"
|
||||||
"@esbuild/linux-s390x" "0.17.19"
|
"@esbuild/linux-s390x" "0.19.9"
|
||||||
"@esbuild/linux-x64" "0.17.19"
|
"@esbuild/linux-x64" "0.19.9"
|
||||||
"@esbuild/netbsd-x64" "0.17.19"
|
"@esbuild/netbsd-x64" "0.19.9"
|
||||||
"@esbuild/openbsd-x64" "0.17.19"
|
"@esbuild/openbsd-x64" "0.19.9"
|
||||||
"@esbuild/sunos-x64" "0.17.19"
|
"@esbuild/sunos-x64" "0.19.9"
|
||||||
"@esbuild/win32-arm64" "0.17.19"
|
"@esbuild/win32-arm64" "0.19.9"
|
||||||
"@esbuild/win32-ia32" "0.17.19"
|
"@esbuild/win32-ia32" "0.19.9"
|
||||||
"@esbuild/win32-x64" "0.17.19"
|
"@esbuild/win32-x64" "0.19.9"
|
||||||
|
|
||||||
escalade@^3.1.1:
|
escalade@^3.1.1:
|
||||||
version "3.1.1"
|
version "3.1.1"
|
||||||
@@ -404,10 +469,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.2.12:
|
fast-glob@^3.3.0:
|
||||||
version "3.2.12"
|
version "3.3.2"
|
||||||
resolved "https://registry.yarnpkg.com/fast-glob/-/fast-glob-3.2.12.tgz#7f39ec99c2e6ab030337142da9e0c18f37afae80"
|
resolved "https://registry.yarnpkg.com/fast-glob/-/fast-glob-3.3.2.tgz#a904501e57cfdd2ffcded45e99a54fef55e46129"
|
||||||
integrity sha512-DVj4CQIYYow0BlaelwK1pHl5n5cRSJfM60UA0zK891sVInoPri2Ekj7+e1CT3/3qxXenpI+nBBmQAcJPJgaj4w==
|
integrity sha512-oX2ruAFQwf/Orj8m737Y5adxDQO0LAB7/S5MnxCdTNDd4p6BsyIVsv9JQsATbTSq8KHRpLwIHbVlUNatxd+1Ow==
|
||||||
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"
|
||||||
@@ -437,9 +502,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.2"
|
version "1.15.3"
|
||||||
resolved "https://registry.yarnpkg.com/follow-redirects/-/follow-redirects-1.15.2.tgz#b460864144ba63f2681096f274c4e57026da2c13"
|
resolved "https://registry.yarnpkg.com/follow-redirects/-/follow-redirects-1.15.3.tgz#fe2f3ef2690afce7e82ed0b44db08165b207123a"
|
||||||
integrity sha512-VQLG33o04KaQ8uYi2tVNbdrWp1QWxNNea+nmIB4EVM28v0hmP17z7aG1+wAkNzVq4KeXTq3221ye5qTJP91JwA==
|
integrity sha512-1VzOtuEM8pC9SFU1E+8KfTjZyMztRsgEfwQl44z8A25uy13jSzTj6dyK2Df52iV0vgHCfBwLhDWevLn95w5v6Q==
|
||||||
|
|
||||||
form-data@^4.0.0:
|
form-data@^4.0.0:
|
||||||
version "4.0.0"
|
version "4.0.0"
|
||||||
@@ -450,25 +515,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.2.0:
|
fraction.js@^4.3.6:
|
||||||
version "4.2.0"
|
version "4.3.7"
|
||||||
resolved "https://registry.yarnpkg.com/fraction.js/-/fraction.js-4.2.0.tgz#448e5109a313a3527f5a3ab2119ec4cf0e0e2950"
|
resolved "https://registry.yarnpkg.com/fraction.js/-/fraction.js-4.3.7.tgz#06ca0085157e42fda7f9e726e79fefc4068840f7"
|
||||||
integrity sha512-MhLuK+2gUcnZe8ZHlaaINnQLl0xRIGRfcGk2yl8xoQAfHrSsL3rYu6FCmBdkdbhc9EPlwyGHewaRsvwRMJtAlA==
|
integrity sha512-ZsDfxO51wGAXREY55a7la9LScWpwv9RxIrYABrlvOFBlH/ShPnrtsXeuUIfXKKOVicNxQ+o8JTbJvjS4M89yew==
|
||||||
|
|
||||||
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.2, fsevents@~2.3.3:
|
||||||
version "2.3.2"
|
version "2.3.3"
|
||||||
resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-2.3.2.tgz#8a526f78b8fdf4623b709e0b975c52c24c02fd1a"
|
resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-2.3.3.tgz#cac6407785d03675a2a5e1a5305c697b347d90d6"
|
||||||
integrity sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==
|
integrity sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==
|
||||||
|
|
||||||
function-bind@^1.1.1:
|
function-bind@^1.1.2:
|
||||||
version "1.1.1"
|
version "1.1.2"
|
||||||
resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.1.tgz#a56899d3ea3c9bab874bb9773b7c5ede92f4895d"
|
resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.2.tgz#2c02d864d97f3ea6c8830c464cbd11ab6eab7a1c"
|
||||||
integrity sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==
|
integrity sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==
|
||||||
|
|
||||||
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"
|
||||||
@@ -501,17 +566,24 @@ glob@7.1.6:
|
|||||||
once "^1.3.0"
|
once "^1.3.0"
|
||||||
path-is-absolute "^1.0.0"
|
path-is-absolute "^1.0.0"
|
||||||
|
|
||||||
has@^1.0.3:
|
guillotine@^1.3.1:
|
||||||
version "1.0.3"
|
version "1.3.1"
|
||||||
resolved "https://registry.yarnpkg.com/has/-/has-1.0.3.tgz#722d7cbfc1f6aa8241f16dd814e011e1f41e8796"
|
resolved "https://registry.yarnpkg.com/guillotine/-/guillotine-1.3.1.tgz#03bffb09659026eda81491551ea282e57b2cda95"
|
||||||
integrity sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==
|
integrity sha512-nJx8bglgxYgcAgahBddDsrGEhGXDuyYT4vIc7Aghs9HBF+50Maix5AbAwEfhkV59EQ/GvSOVIfftNvRz7DqyaA==
|
||||||
dependencies:
|
dependencies:
|
||||||
function-bind "^1.1.1"
|
jquery ">= 1.8.0"
|
||||||
|
|
||||||
|
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.0"
|
version "4.3.4"
|
||||||
resolved "https://registry.yarnpkg.com/immutable/-/immutable-4.3.0.tgz#eb1738f14ffb39fd068b1dbe1296117484dd34be"
|
resolved "https://registry.yarnpkg.com/immutable/-/immutable-4.3.4.tgz#2e07b33837b4bb7662f288c244d1ced1ef65a78f"
|
||||||
integrity sha512-0AOCmOip+xgJwEVTQj1EfiDDOkPmuyllDuTuEX+DDXUgapLAsBIfkg3sxCYyCEA8mQqZrrxPUGjcOQ2JS3WLkg==
|
integrity sha512-fsXeu4J4i6WNWSikpI88v/PcVflZz+6kMhUfIwc5SY+poQRPnaf5V7qds6SUyUN3cVxEzuCab7QIoLOQ+DQ1wA==
|
||||||
|
|
||||||
inflight@^1.0.4:
|
inflight@^1.0.4:
|
||||||
version "1.0.6"
|
version "1.0.6"
|
||||||
@@ -533,12 +605,12 @@ is-binary-path@~2.1.0:
|
|||||||
dependencies:
|
dependencies:
|
||||||
binary-extensions "^2.0.0"
|
binary-extensions "^2.0.0"
|
||||||
|
|
||||||
is-core-module@^2.11.0:
|
is-core-module@^2.13.0:
|
||||||
version "2.12.1"
|
version "2.13.1"
|
||||||
resolved "https://registry.yarnpkg.com/is-core-module/-/is-core-module-2.12.1.tgz#0c0b6885b6f80011c71541ce15c8d66cf5a4f9fd"
|
resolved "https://registry.yarnpkg.com/is-core-module/-/is-core-module-2.13.1.tgz#ad0d7532c6fea9da1ebdc82742d74525c6273384"
|
||||||
integrity sha512-Q4ZuBAe2FUsKtyQJoQHlvP8OvBERxO3jEmy1I7hcRXcJBGGHFh/aJBswbXuS9sgrDH2QUO8ilkwNPHvHMd8clg==
|
integrity sha512-hHrIjvZsftOsvKSn2TRYl63zvxsgE0K+0mYMoH6gD4omR5IWB2KynivBQczo3+wF1cCkjzvptnI9Q0sPU66ilw==
|
||||||
dependencies:
|
dependencies:
|
||||||
has "^1.0.3"
|
hasown "^2.0.0"
|
||||||
|
|
||||||
is-extglob@^2.1.1:
|
is-extglob@^2.1.1:
|
||||||
version "2.1.1"
|
version "2.1.1"
|
||||||
@@ -568,10 +640,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.18.2:
|
jiti@^1.19.1:
|
||||||
version "1.18.2"
|
version "1.21.0"
|
||||||
resolved "https://registry.yarnpkg.com/jiti/-/jiti-1.18.2.tgz#80c3ef3d486ebf2450d9335122b32d121f2a83cd"
|
resolved "https://registry.yarnpkg.com/jiti/-/jiti-1.21.0.tgz#7c97f8fe045724e136a397f7340475244156105d"
|
||||||
integrity sha512-QAdOptna2NYiSSpv0O/BwoHBSmz4YhpzJHyi+fnMRTXFjp7B8i/YG5Z8IfusxB1ufjcD2Sre1F3R+nX3fvy7gg==
|
integrity sha512-gFqAIbuKyyso/3G2qhiO2OM6shY6EPP/R0+mkDbyspxKazh8BXDC5FiFsUjlczgdNz/vfra0da2y+aHrusLG/Q==
|
||||||
|
|
||||||
jquery-nice-select@^1.1.0:
|
jquery-nice-select@^1.1.0:
|
||||||
version "1.1.0"
|
version "1.1.0"
|
||||||
@@ -580,16 +652,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"
|
||||||
@@ -603,11 +675,16 @@ 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.0.5, lilconfig@^2.1.0:
|
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"
|
||||||
@@ -677,15 +754,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.6:
|
nanoid@^3.3.7:
|
||||||
version "3.3.6"
|
version "3.3.7"
|
||||||
resolved "https://registry.yarnpkg.com/nanoid/-/nanoid-3.3.6.tgz#443380c856d6e9f9824267d960b4236ad583ea4c"
|
resolved "https://registry.yarnpkg.com/nanoid/-/nanoid-3.3.7.tgz#d0c301a691bc8d54efa0a2226ccf3fe2fd656bd8"
|
||||||
integrity sha512-BGcqMMJuToF7i1rt+2PWSNVnWIkGCU78jBG3RxO/bZlnZPK2Cmi2QaffxGO/2RvWi9sL+FAiRiXMgsyxQ1DIDA==
|
integrity sha512-eSRppjcPIatRIMC1U6UngP8XFcz8MQWGQdt1MTBQ7NaAmvXDfvNxbvWV3x2y6CdEUciCSsDHDQZbhYaB8QEo2g==
|
||||||
|
|
||||||
node-releases@^2.0.12:
|
node-releases@^2.0.14:
|
||||||
version "2.0.12"
|
version "2.0.14"
|
||||||
resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-2.0.12.tgz#35627cc224a23bfb06fb3380f2b3afaaa7eb1039"
|
resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-2.0.14.tgz#2ffb053bceb8b2be8495ece1ab6ce600c4461b0b"
|
||||||
integrity sha512-QzsYKWhXTWx8h1kIvqfnC++o0pEmpRQA/aenALsL2F4pqNVr7YzcdMlDij5WBnwftRbJCNJL/O7zdKaxKPHqgQ==
|
integrity sha512-y10wOWt8yZpqXmOgRo77WaHEmhYQYGNA6y421PKsKYWEK8aW+cqAphborZDhqfyKrbZEN92CN1X2KbafY2s7Yw==
|
||||||
|
|
||||||
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"
|
||||||
@@ -770,12 +847,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.1"
|
version "4.0.2"
|
||||||
resolved "https://registry.yarnpkg.com/postcss-load-config/-/postcss-load-config-4.0.1.tgz#152383f481c2758274404e4962743191d73875bd"
|
resolved "https://registry.yarnpkg.com/postcss-load-config/-/postcss-load-config-4.0.2.tgz#7159dcf626118d33e299f485d6afe4aff7c4a3e3"
|
||||||
integrity sha512-vEJIc8RdiBRu3oRAI0ymerOn+7rPuMvRXslTvZUKZonDHFIczxztIyJ1urxM1x9JXEikvpWWTUUqal5j/8QgvA==
|
integrity sha512-bSVhyJGL00wMVoPUzAVAnbEoWyqRxkjv64tUl427SKnPrENtq6hJwUojroMz2VB+Q1edmi4IfrAPpami5VVgMQ==
|
||||||
dependencies:
|
dependencies:
|
||||||
lilconfig "^2.0.5"
|
lilconfig "^3.0.0"
|
||||||
yaml "^2.1.1"
|
yaml "^2.3.4"
|
||||||
|
|
||||||
postcss-nested@^6.0.1:
|
postcss-nested@^6.0.1:
|
||||||
version "6.0.1"
|
version "6.0.1"
|
||||||
@@ -797,12 +874,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.6:
|
postcss@^8.4.23, postcss@^8.4.32, postcss@^8.4.6:
|
||||||
version "8.4.24"
|
version "8.4.32"
|
||||||
resolved "https://registry.yarnpkg.com/postcss/-/postcss-8.4.24.tgz#f714dba9b2284be3cc07dbd2fc57ee4dc972d2df"
|
resolved "https://registry.yarnpkg.com/postcss/-/postcss-8.4.32.tgz#1dac6ac51ab19adb21b8b34fd2d93a86440ef6c9"
|
||||||
integrity sha512-M0RzbcI0sO/XJNucsGjvWU9ERWxb/ytp1w6dKtxTKgixdtQDq4rmx/g8W1hnaheq9jgwL/oyEdH5Bc4WwJKMqg==
|
integrity sha512-D/kj5JNu6oo2EIy+XL/26JEDTlIbB8hw85G8StOE6L74RQAVVP5rej6wxCNqyMbR4RkPfqvezVbPw81Ngd6Kcw==
|
||||||
dependencies:
|
dependencies:
|
||||||
nanoid "^3.3.6"
|
nanoid "^3.3.7"
|
||||||
picocolors "^1.0.0"
|
picocolors "^1.0.0"
|
||||||
source-map-js "^1.0.2"
|
source-map-js "^1.0.2"
|
||||||
|
|
||||||
@@ -831,11 +908,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.2"
|
version "1.22.8"
|
||||||
resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.22.2.tgz#0ed0943d4e301867955766c9f3e1ae6d01c6845f"
|
resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.22.8.tgz#b6c87a9f2aa06dfab52e3d70ac8cde321fa5a48d"
|
||||||
integrity sha512-Sb+mjNHOULsBv818T40qSPeRiuWLyaGMa5ewydRLFimneixmVy2zdivRl+AF6jaYPC8ERxGDmFSiqui6SfPd+g==
|
integrity sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw==
|
||||||
dependencies:
|
dependencies:
|
||||||
is-core-module "^2.11.0"
|
is-core-module "^2.13.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"
|
||||||
|
|
||||||
@@ -844,11 +921,24 @@ 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@^3.21.0:
|
rollup@^4.2.0:
|
||||||
version "3.25.1"
|
version "4.9.0"
|
||||||
resolved "https://registry.yarnpkg.com/rollup/-/rollup-3.25.1.tgz#9fff79d22ff1a904b2b595a2fb9bc3793cb987d8"
|
resolved "https://registry.yarnpkg.com/rollup/-/rollup-4.9.0.tgz#94dff4070f106c1be6b2e88401a49b023c87fa88"
|
||||||
integrity sha512-tywOR+rwIt5m2ZAWSe5AIJcTat8vGlnPFAv15ycCrw33t6iFsXZ6mzHVFh2psSjxQPmI+xgzMZZizUAukBI4aQ==
|
integrity sha512-bUHW/9N21z64gw8s6tP4c88P382Bq/L5uZDowHlHx6s/QWpjJXivIAbEw6LZthgSvlEizZBfLC4OAvWe7aoF7A==
|
||||||
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:
|
||||||
@@ -859,9 +949,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.63.6"
|
version "1.69.5"
|
||||||
resolved "https://registry.yarnpkg.com/sass/-/sass-1.63.6.tgz#481610e612902e0c31c46b46cf2dad66943283ea"
|
resolved "https://registry.yarnpkg.com/sass/-/sass-1.69.5.tgz#23e18d1c757a35f2e52cc81871060b9ad653dfde"
|
||||||
integrity sha512-MJuxGMHzaOW7ipp+1KdELtqKbfAWbH7OLIdoSMnVe3EXPMTmxTmlaZDCTsgIpPCs3w99lLo9/zDKkOrJuT5byw==
|
integrity sha512-qg2+UCJibLr2LCVOt3OlPhr/dqVHWOa9XtZf2OjbLs/T4VPSJ00udtgJxH3neXZm+QqX8B+3cU7RaLqp1iVfcQ==
|
||||||
dependencies:
|
dependencies:
|
||||||
chokidar ">=3.0.0 <4.0.0"
|
chokidar ">=3.0.0 <4.0.0"
|
||||||
immutable "^4.0.0"
|
immutable "^4.0.0"
|
||||||
@@ -878,9 +968,9 @@ slick-carousel@^1.8.1:
|
|||||||
integrity sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==
|
integrity sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==
|
||||||
|
|
||||||
sucrase@^3.32.0:
|
sucrase@^3.32.0:
|
||||||
version "3.32.0"
|
version "3.34.0"
|
||||||
resolved "https://registry.yarnpkg.com/sucrase/-/sucrase-3.32.0.tgz#c4a95e0f1e18b6847127258a75cf360bc568d4a7"
|
resolved "https://registry.yarnpkg.com/sucrase/-/sucrase-3.34.0.tgz#1e0e2d8fcf07f8b9c3569067d92fbd8690fb576f"
|
||||||
integrity sha512-ydQOU34rpSyj2TGyz4D2p8rbktIOZ8QY9s+DGLvFU1i5pWJE8vkpruCjGCMHsdXwnD7JDcS+noSwM/a7zyNFDQ==
|
integrity sha512-70/LQEZ07TEcxiU2dz51FKaE6hCTWC6vr7FOk3Gr0U60C3shtAN+H+BFr9XlYe5xqf3RA8nrc+VIwzCfnxuXJw==
|
||||||
dependencies:
|
dependencies:
|
||||||
"@jridgewell/gen-mapping" "^0.3.2"
|
"@jridgewell/gen-mapping" "^0.3.2"
|
||||||
commander "^4.0.0"
|
commander "^4.0.0"
|
||||||
@@ -896,19 +986,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.2"
|
version "3.3.6"
|
||||||
resolved "https://registry.yarnpkg.com/tailwindcss/-/tailwindcss-3.3.2.tgz#2f9e35d715fdf0bbf674d90147a0684d7054a2d3"
|
resolved "https://registry.yarnpkg.com/tailwindcss/-/tailwindcss-3.3.6.tgz#4dd7986bf4902ad385d90d45fd4b2fa5fab26d5f"
|
||||||
integrity sha512-9jPkMiIBXvPc2KywkraqsUfbfj+dHDb+JPWtSJa9MLFdrPyazI7q6WX2sUrm7R9eVR7qqv3Pas7EvQFzxKnI6w==
|
integrity sha512-AKjF7qbbLvLaPieoKeTjG1+FyNZT6KaJMJPFeQyLfIp7l82ggH1fbHJSsYIvnbTFQOlkh+gBYpyby5GT1LIdLw==
|
||||||
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.2.12"
|
fast-glob "^3.3.0"
|
||||||
glob-parent "^6.0.2"
|
glob-parent "^6.0.2"
|
||||||
is-glob "^4.0.3"
|
is-glob "^4.0.3"
|
||||||
jiti "^1.18.2"
|
jiti "^1.19.1"
|
||||||
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"
|
||||||
@@ -920,7 +1010,6 @@ 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"
|
||||||
|
|
||||||
@@ -950,10 +1039,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.11:
|
update-browserslist-db@^1.0.13:
|
||||||
version "1.0.11"
|
version "1.0.13"
|
||||||
resolved "https://registry.yarnpkg.com/update-browserslist-db/-/update-browserslist-db-1.0.11.tgz#9a2a641ad2907ae7b3616506f4b977851db5b940"
|
resolved "https://registry.yarnpkg.com/update-browserslist-db/-/update-browserslist-db-1.0.13.tgz#3c5e4f5c083661bd38ef64b6328c26ed6c8248c4"
|
||||||
integrity sha512-dCwEFf0/oT85M1fHBg4F0jtLwJrutGoHSQXCh7u4o2t1drG+c0a9Flnqww6XUKSfQMPpJBRjU8d4RXB09qtvaA==
|
integrity sha512-xebP81SNcPuNpPP3uzeW1NYXxI3rxyJzF3pD6sH4jE7o/IX+WtSpwnVU+qIsDPyk0d3hmFQ7mjqc6AtV604hbg==
|
||||||
dependencies:
|
dependencies:
|
||||||
escalade "^3.1.1"
|
escalade "^3.1.1"
|
||||||
picocolors "^1.0.0"
|
picocolors "^1.0.0"
|
||||||
@@ -964,23 +1053,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.0.5"
|
version "1.1.0"
|
||||||
resolved "https://registry.yarnpkg.com/vite-plugin-full-reload/-/vite-plugin-full-reload-1.0.5.tgz#6cddfa94e51909843bc7156ab728dbac972b8560"
|
resolved "https://registry.yarnpkg.com/vite-plugin-full-reload/-/vite-plugin-full-reload-1.1.0.tgz#ca6fa32631024a459ea9e5613dd4c0ff0f3b7995"
|
||||||
integrity sha512-kVZFDFWr0DxiHn6MuDVTQf7gnWIdETGlZh0hvTiMXzRN80vgF4PKbONSq8U1d0WtHsKaFODTQgJeakLacoPZEQ==
|
integrity sha512-3cObNDzX6DdfhD9E7kf6w2mNunFpD7drxyNgHLw+XwIYAgb+Xt16SEXo0Up4VH+TMf3n+DSVJZtW2POBGcBYAA==
|
||||||
dependencies:
|
dependencies:
|
||||||
picocolors "^1.0.0"
|
picocolors "^1.0.0"
|
||||||
picomatch "^2.3.1"
|
picomatch "^2.3.1"
|
||||||
|
|
||||||
vite@^4.0.0:
|
vite@^5.0.9:
|
||||||
version "4.3.9"
|
version "5.0.9"
|
||||||
resolved "https://registry.yarnpkg.com/vite/-/vite-4.3.9.tgz#db896200c0b1aa13b37cdc35c9e99ee2fdd5f96d"
|
resolved "https://registry.yarnpkg.com/vite/-/vite-5.0.9.tgz#2ac49a37b5accba29d945fcee9a0b7b862423cd4"
|
||||||
integrity sha512-qsTNZjO9NoJNW7KnOrgYwczm0WctJ8m/yqYAMAK9Lxt4SoySUfS5S8ia9K7JHpa3KEeMfyF8LoJ3c5NeBJy6pg==
|
integrity sha512-wVqMd5kp28QWGgfYPDfrj771VyHTJ4UDlCteLH7bJDGDEamaz5hV8IX6h1brSGgnnyf9lI2RnzXq/JmD0c2wwg==
|
||||||
dependencies:
|
dependencies:
|
||||||
esbuild "^0.17.5"
|
esbuild "^0.19.3"
|
||||||
postcss "^8.4.23"
|
postcss "^8.4.32"
|
||||||
rollup "^3.21.0"
|
rollup "^4.2.0"
|
||||||
optionalDependencies:
|
optionalDependencies:
|
||||||
fsevents "~2.3.2"
|
fsevents "~2.3.3"
|
||||||
|
|
||||||
waypoints@^4.0.1:
|
waypoints@^4.0.1:
|
||||||
version "4.0.1"
|
version "4.0.1"
|
||||||
@@ -997,7 +1086,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.1.1:
|
yaml@^2.3.4:
|
||||||
version "2.3.1"
|
version "2.3.4"
|
||||||
resolved "https://registry.yarnpkg.com/yaml/-/yaml-2.3.1.tgz#02fe0975d23cd441242aa7204e09fc28ac2ac33b"
|
resolved "https://registry.yarnpkg.com/yaml/-/yaml-2.3.4.tgz#53fc1d514be80aabf386dc6001eb29bf3b7523b2"
|
||||||
integrity sha512-2eHWfjaoXgTBC2jNM1LRef62VQa0umtvRiDSk6HSzW7RvS5YtkabJrwYLLEKWBc8a5U2PTSCs+dJjUTJdlHsWQ==
|
integrity sha512-8aAvwVUSHpfEqTQ4w/KMlf3HcRdt50E5ODIQJBw1fQ5RL34xabzxtUlzTXVqc4rkZsPbvrXKWnABCD7kWSmocA==
|
||||||
|
|||||||
@@ -2,4 +2,3 @@
|
|||||||
# yarn lockfile v1
|
# yarn lockfile v1
|
||||||
|
|
||||||
|
|
||||||
yarn-path ".yarn/releases/yarn-1.22.19.cjs"
|
|
||||||
Reference in New Issue
Block a user