From ed3e7e246cfff19c373a6c324dc6a9ea4f4a56c7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Nono=20Mart=C3=ADnez=20Alonso?= Date: Sat, 7 May 2022 15:54:57 +0200 Subject: [PATCH 01/38] Update PHP and Markdown. --- composer.json | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/composer.json b/composer.json index a506e50..768c1de 100644 --- a/composer.json +++ b/composer.json @@ -21,10 +21,10 @@ }, "minimum-stability": "dev", "require": { - "php": "^8.0.1|^7.3.0", + "php": "^8.0.2", "illuminate/support": "^8.0", "aws/aws-sdk-php": "~3.0", - "graham-campbell/markdown": "^13.0.0", + "graham-campbell/markdown": "^13.1.2", "jenssegers/date": "^4.0.0", "laravelcollective/html": "^6.0", "laravelium/feed": "^8.0.0", From ed8b2924cf20bdc2b32a105e9ed7fac573f633f4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Nono=20Mart=C3=ADnez=20Alonso?= Date: Sat, 7 May 2022 15:57:00 +0200 Subject: [PATCH 02/38] Update spatie/laravel-searchable. --- composer.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/composer.json b/composer.json index 768c1de..cee4c61 100644 --- a/composer.json +++ b/composer.json @@ -39,7 +39,7 @@ "spatie/laravel-sitemap": "^5.7", "spatie/flysystem-dropbox": "^1.2", "spatie/laravel-backup": "^6.8", - "spatie/laravel-searchable": "dev-main", + "spatie/laravel-searchable": "^1.11.0", "spatie/laravel-newsletter": "^4.8", "rap2hpoutre/laravel-log-viewer": "^1.4", "rtconner/laravel-tagging": "~4.0", From f269ea62ae054b0bd54b6422dd692c5b10b654e6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Nono=20Mart=C3=ADnez=20Alonso?= Date: Sat, 7 May 2022 16:08:05 +0200 Subject: [PATCH 03/38] Update graham-campbell/markdown to 14.0-dev. --- composer.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/composer.json b/composer.json index cee4c61..2b701c9 100644 --- a/composer.json +++ b/composer.json @@ -24,7 +24,7 @@ "php": "^8.0.2", "illuminate/support": "^8.0", "aws/aws-sdk-php": "~3.0", - "graham-campbell/markdown": "^13.1.2", + "graham-campbell/markdown": "^14.0-dev", "jenssegers/date": "^4.0.0", "laravelcollective/html": "^6.0", "laravelium/feed": "^8.0.0", From 34560f97ac268c072f3bcb022be0224dd3a5ae4e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Nono=20Mart=C3=ADnez=20Alonso?= Date: Sat, 7 May 2022 16:47:42 +0200 Subject: [PATCH 04/38] Update packages. --- composer.json | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/composer.json b/composer.json index 2b701c9..77af152 100644 --- a/composer.json +++ b/composer.json @@ -22,17 +22,16 @@ "minimum-stability": "dev", "require": { "php": "^8.0.2", - "illuminate/support": "^8.0", + "illuminate/support": "^9.11.0", "aws/aws-sdk-php": "~3.0", "graham-campbell/markdown": "^14.0-dev", "jenssegers/date": "^4.0.0", "laravelcollective/html": "^6.0", - "laravelium/feed": "^8.0.0", "league/flysystem-aws-s3-v3": "^1.0@dev", "michelf/php-markdown": "^1.9", "mtownsend/read-time": "^2.0.0", - "spatie/eloquent-sortable": "^3.8", - "spatie/laravel-translatable": "^4.3", + "spatie/eloquent-sortable": "^4.0.1", + "spatie/laravel-translatable": "^6.0.0", "spatie/regex": "^1.4", "spatie/laravel-feed": "^4.0", "spatie/dropbox-api": "^1.12", From 4e1fe30f9c6bca17b5c7a999cae4c6ad3bd0647e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Nono=20Mart=C3=ADnez=20Alonso?= Date: Sat, 7 May 2022 16:53:46 +0200 Subject: [PATCH 05/38] Update packages. --- composer.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/composer.json b/composer.json index 77af152..c045596 100644 --- a/composer.json +++ b/composer.json @@ -44,7 +44,7 @@ "rtconner/laravel-tagging": "~4.0", "symfony/intl": "^5.0", "hashids/hashids": "^4.0.0", - "nasyrov/laravel-imgix": "8.x-dev", + "nasyrov/laravel-imgix": "9.x-dev", "mpociot/versionable": "^4.0.0", "laravel/ui": "^3.0", "spatie/laravel-honeypot": "^4.0", From 235cc9a16927eff8ee8aa2c32217428d1cbb8c9f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Nono=20Mart=C3=ADnez=20Alonso?= Date: Sat, 7 May 2022 16:59:13 +0200 Subject: [PATCH 06/38] Update packages. --- composer.json | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/composer.json b/composer.json index c045596..279c1bf 100644 --- a/composer.json +++ b/composer.json @@ -12,8 +12,12 @@ { "type": "vcs", "url": "https://github.com/nonoesp/laravel-imgix" + }, + { + "type": "vcs", + "url": "https://github.com/nonoesp/laravel-spam-protector" } - ], + ], "autoload": { "psr-4": { "Nonoesp\\Folio\\": "src" @@ -48,7 +52,7 @@ "mpociot/versionable": "^4.0.0", "laravel/ui": "^3.0", "spatie/laravel-honeypot": "^4.0", - "johannebert/laravel-spam-protector": "^6.1" + "johannebert/laravel-spam-protector": "9.x-dev" }, "require-dev": { "phpunit/phpunit": "^9.0" From 14d359aca77975f78745f71aaede8968896dc973 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Nono=20Mart=C3=ADnez=20Alonso?= Date: Sat, 7 May 2022 17:04:32 +0200 Subject: [PATCH 07/38] Update packages. --- composer.json | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/composer.json b/composer.json index 279c1bf..1662e4b 100644 --- a/composer.json +++ b/composer.json @@ -39,12 +39,12 @@ "spatie/regex": "^1.4", "spatie/laravel-feed": "^4.0", "spatie/dropbox-api": "^1.12", - "spatie/laravel-sitemap": "^5.7", - "spatie/flysystem-dropbox": "^1.2", - "spatie/laravel-backup": "^6.8", + "spatie/laravel-sitemap": "^6.1", + "spatie/flysystem-dropbox": "^2.0.6", + "spatie/laravel-backup": "^8.1.2", "spatie/laravel-searchable": "^1.11.0", "spatie/laravel-newsletter": "^4.8", - "rap2hpoutre/laravel-log-viewer": "^1.4", + "rap2hpoutre/laravel-log-viewer": "^2.2", "rtconner/laravel-tagging": "~4.0", "symfony/intl": "^5.0", "hashids/hashids": "^4.0.0", From 3685a2aa3fab49a0105637cfcca1f65720a3fe2b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Nono=20Mart=C3=ADnez=20Alonso?= Date: Sat, 7 May 2022 17:08:01 +0200 Subject: [PATCH 08/38] Update packages. --- composer.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/composer.json b/composer.json index 1662e4b..36a6dfa 100644 --- a/composer.json +++ b/composer.json @@ -31,7 +31,7 @@ "graham-campbell/markdown": "^14.0-dev", "jenssegers/date": "^4.0.0", "laravelcollective/html": "^6.0", - "league/flysystem-aws-s3-v3": "^1.0@dev", + "league/flysystem-aws-s3-v3": "^3.x-dev", "michelf/php-markdown": "^1.9", "mtownsend/read-time": "^2.0.0", "spatie/eloquent-sortable": "^4.0.1", From 96cfe78588508b8df8e1f1b71a727c65c0d8cd24 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Nono=20Mart=C3=ADnez=20Alonso?= Date: Sun, 8 May 2022 00:00:00 +0200 Subject: [PATCH 09/38] Update CommonMark 2.x syntax. --- src/Models/Item.php | 14 ++++++++------ 1 file changed, 8 insertions(+), 6 deletions(-) diff --git a/src/Models/Item.php b/src/Models/Item.php index c6f60c9..9c37e58 100644 --- a/src/Models/Item.php +++ b/src/Models/Item.php @@ -747,21 +747,23 @@ public static function convertToHtml($text, $options = []) { $parser == 'vtalbot' ) { - // CommonMark - + // CommonMark + // https://commonmark.thephpleague.com/2.3/extensions/commonmark/#manual-usage // Obtain a pre-configured Environment with all the CommonMark parsers/renderers ready-to-go - $environment = \League\CommonMark\Environment::createCommonMarkEnvironment(); + $config = ['html_input' => 'allow']; + $environment = new \League\CommonMark\Environment\Environment($config); + // Core CommonMark extension + $environment->addExtension(new \League\CommonMark\Extension\CommonMark\CommonMarkCoreExtension); // Optional: Add your own parsers, renderers, extensions, etc. (if desired) $environment->addExtension(new \League\CommonMark\Extension\Attributes\AttributesExtension); $environment->addExtension(new \League\CommonMark\Extension\Footnote\FootnoteExtension); // For example: $environment->addInlineParser(new TwitterHandleParser()); // Define your configuration (reference at https://commonmark.thephpleague.com/configuration/): - $config = ['html_input' => 'allow']; // Create the converter - $converter = new \League\CommonMark\CommonMarkConverter($config, $environment); + $converter = new \League\CommonMark\MarkdownConverter($environment); // read and parse markdown - $html = $converter->convertToHtml($text); + $html = $converter->convert($text); $html = str_replace( ["

"], From 2a3484c442d57fd0fee12404fe564ddadfe91a15 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Nono=20Mart=C3=ADnez=20Alonso?= Date: Sun, 8 May 2022 00:00:29 +0200 Subject: [PATCH 10/38] Upgrade Dropbox/Spaces service providers. --- src/Providers/DropboxServiceProvider.php | 27 ++++++++++++++---- src/Providers/SpacesServiceProvider.php | 35 ++++++++++++++++++++---- 2 files changed, 50 insertions(+), 12 deletions(-) diff --git a/src/Providers/DropboxServiceProvider.php b/src/Providers/DropboxServiceProvider.php index 23bbdc3..b70dc3e 100644 --- a/src/Providers/DropboxServiceProvider.php +++ b/src/Providers/DropboxServiceProvider.php @@ -2,11 +2,12 @@ namespace Nonoesp\Folio\Providers; -use Illuminate\Support\ServiceProvider; +use Illuminate\Support\ServiceProvider as ServiceProvider; +use Illuminate\Filesystem\FilesystemAdapter; +use Illuminate\Support\Facades\Storage; use League\Flysystem\Filesystem; use Spatie\Dropbox\Client as DropboxClient; use Spatie\FlysystemDropbox\DropboxAdapter; -use Storage; class DropboxServiceProvider extends ServiceProvider { @@ -27,12 +28,26 @@ public function register() */ public function boot() { + // 8.x + // Storage::extend('dropbox', function ($app, $config) { + // $client = new DropboxClient( + // $config['authorization_token'] + // ); + + // return new Filesystem(new DropboxAdapter($client)); + // }); + + // 9x Storage::extend('dropbox', function ($app, $config) { - $client = new DropboxClient( - $config['authorization_token'] + $adapter = new DropboxAdapter( + new DropboxClient($config['authorization_token']) + ); + + return new FilesystemAdapter( + new Filesystem($adapter, $config), + $adapter, + $config ); - - return new Filesystem(new DropboxAdapter($client)); }); } } \ No newline at end of file diff --git a/src/Providers/SpacesServiceProvider.php b/src/Providers/SpacesServiceProvider.php index e15aa2a..ceb56c9 100644 --- a/src/Providers/SpacesServiceProvider.php +++ b/src/Providers/SpacesServiceProvider.php @@ -2,11 +2,12 @@ namespace Nonoesp\Folio\Providers; -use Illuminate\Support\ServiceProvider; +use Illuminate\Support\ServiceProvider as ServiceProvider; +use Illuminate\Filesystem\FilesystemAdapter; +use Illuminate\Support\Facades\Storage; use League\Flysystem\Filesystem; use Aws\S3\S3Client; -use League\Flysystem\AwsS3v3\AwsS3Adapter; -use Storage; +use League\Flysystem\AwsS3V3\AwsS3V3Adapter; /** * Digital Ocean Spaces @@ -30,6 +31,24 @@ public function register() */ public function boot() { + // 8.x + // Storage::extend('spaces', function ($app, $config) { + // $client = new S3Client([ + // 'credentials' => [ + // 'key' => $config['key'], + // 'secret' => $config['secret'], + // ], + // 'region' => $config['region'], + // 'version' => 'latest', + // 'endpoint' => $config['endpoint'], + // ]); + + // $adapter = new AwsS3Adapter($client, $config['bucket']); + + // return new Filesystem($adapter); + // }); + + // 9.x Storage::extend('spaces', function ($app, $config) { $client = new S3Client([ 'credentials' => [ @@ -41,9 +60,13 @@ public function boot() 'endpoint' => $config['endpoint'], ]); - $adapter = new AwsS3Adapter($client, $config['bucket']); - - return new Filesystem($adapter); + $adapter = new AwsS3V3Adapter($client, $config['bucket']); + + return new FilesystemAdapter( + new Filesystem($adapter, $config), + $adapter, + $config + ); }); } } \ No newline at end of file From 727bdf4b10f0bd243baf912b5996c2ae8de4cd9b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Nono=20Mart=C3=ADnez=20Alonso?= Date: Sun, 8 May 2022 00:01:55 +0200 Subject: [PATCH 11/38] Upgrade Dropbox/Spaces service providers. --- src/Providers/DropboxServiceProvider.php | 10 ---------- src/Providers/SpacesServiceProvider.php | 18 ------------------ 2 files changed, 28 deletions(-) diff --git a/src/Providers/DropboxServiceProvider.php b/src/Providers/DropboxServiceProvider.php index b70dc3e..b4a96a3 100644 --- a/src/Providers/DropboxServiceProvider.php +++ b/src/Providers/DropboxServiceProvider.php @@ -28,16 +28,6 @@ public function register() */ public function boot() { - // 8.x - // Storage::extend('dropbox', function ($app, $config) { - // $client = new DropboxClient( - // $config['authorization_token'] - // ); - - // return new Filesystem(new DropboxAdapter($client)); - // }); - - // 9x Storage::extend('dropbox', function ($app, $config) { $adapter = new DropboxAdapter( new DropboxClient($config['authorization_token']) diff --git a/src/Providers/SpacesServiceProvider.php b/src/Providers/SpacesServiceProvider.php index ceb56c9..d8d9ec9 100644 --- a/src/Providers/SpacesServiceProvider.php +++ b/src/Providers/SpacesServiceProvider.php @@ -31,24 +31,6 @@ public function register() */ public function boot() { - // 8.x - // Storage::extend('spaces', function ($app, $config) { - // $client = new S3Client([ - // 'credentials' => [ - // 'key' => $config['key'], - // 'secret' => $config['secret'], - // ], - // 'region' => $config['region'], - // 'version' => 'latest', - // 'endpoint' => $config['endpoint'], - // ]); - - // $adapter = new AwsS3Adapter($client, $config['bucket']); - - // return new Filesystem($adapter); - // }); - - // 9.x Storage::extend('spaces', function ($app, $config) { $client = new S3Client([ 'credentials' => [ From e3fb3d37d083133420772e3a63b6ca443eef88e4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Nono=20Mart=C3=ADnez=20Alonso?= Date: Tue, 14 Jun 2022 10:50:34 +0200 Subject: [PATCH 12/38] Cleanup email notifications. --- src/Controllers/SubscriptionController.php | 8 ++++---- src/Notifications/SpamNotification.php | 23 +++++++++++----------- 2 files changed, 15 insertions(+), 16 deletions(-) diff --git a/src/Controllers/SubscriptionController.php b/src/Controllers/SubscriptionController.php index 9f0df04..6d0a9f2 100644 --- a/src/Controllers/SubscriptionController.php +++ b/src/Controllers/SubscriptionController.php @@ -101,10 +101,10 @@ public function create(Request $request) 'data' => $data, 'text' => $text ?? null, ], - function ($m) use ($email, $email_subject) { - $m->from(config('folio.subscribers.from.email'), config('folio.subscribers.from.name')); - $m->to(config('folio.subscribers.to.email'), config('folio.subscribers.to.name'))-> - subject($email_subject); + function ($email) use ($email_subject) { + $email->to(config('folio.subscribers.to.email'), config('folio.subscribers.to.name')) + ->from(config('folio.subscribers.from.email'), config('folio.subscribers.from.name')) + ->subject($email_subject); }); } diff --git a/src/Notifications/SpamNotification.php b/src/Notifications/SpamNotification.php index 9d04a0c..b7d72f4 100644 --- a/src/Notifications/SpamNotification.php +++ b/src/Notifications/SpamNotification.php @@ -33,18 +33,17 @@ public function handle(SpamDetected $event) 'path' => $path, 'data' => $data, ], - function ($m) { - - $m->from( - config('folio.subscribers.from.email'), - config('folio.subscribers.from.name') - ); - - $m->to( - config('folio.subscribers.to.email'), - config('folio.subscribers.to.name') - ) - ->subject('[SPAM] Subscriber to '.config('folio.title-short')); + function ($email) { + + $email->to( + config('folio.subscribers.to.email'), + config('folio.subscribers.to.name') + ) + ->from( + config('folio.subscribers.from.email'), + config('folio.subscribers.from.name') + ) + ->subject('[SPAM] Subscriber to '.config('folio.title-short')); } ); From 0e9f649f92fa8d9d1f7002ed0b980ec33fb1b546 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Nono=20Mart=C3=ADnez=20Alonso?= Date: Mon, 11 Jul 2022 19:54:59 +0200 Subject: [PATCH 13/38] Update README.md. Add color scheme logos. --- README.md | 28 +++++++++++--------- assets/folio-dark@2x.gif | Bin 0 -> 9633 bytes assets/{folio@2x.gif => folio-light@2x.gif} | Bin 3 files changed, 16 insertions(+), 12 deletions(-) create mode 100644 assets/folio-dark@2x.gif rename assets/{folio@2x.gif => folio-light@2x.gif} (100%) diff --git a/README.md b/README.md index c9424b9..a218bd4 100644 --- a/README.md +++ b/README.md @@ -1,21 +1,24 @@ -Folio for Laravel logo. +Folio for Laravel logo. +Folio for Laravel logo. -A customizable Laravel content-management system. (Currently in beta.) +A customizable Laravel content-management system. -## Live Examples +You can see it working at [Nono.MA](https://nono.ma), [Getting Simple](https://gettingsimple.com), [Burns.art](https://burns.art), [RCA Media Studies](https://ms.rca-architecture.com), or [Luis Ruiz Padrón](https://luisruiz.es). -[Nono.MA](https://nono.ma) | [Getting Simple](https://gettingsimple.com) | [Lourdes.AC](https://lourdes.ac) | [AR-MA](https://ar-ma.net) | [Getting Architecture Done](http://gettingarchitecturedone.com/writing) | [Nacho.MA](https://nacho.ma) | [Burns.art](https://burns.art) | [RCA Media Studies](https://ms.rca-architecture.com) | [Luis Ruiz Padrón](https://luisruiz.es) +## Installation · Laravel 9.x -## Installation · Laravel 8.x - -- Add alternate VCS repos for packages without Laravel 8 support to `composer.json`. +- Add alternate VCS repos for packages without Laravel 9.x support to `composer.json`. ```json "repositories": [ { "type": "vcs", "url": "https://github.com/nonoesp/laravel-imgix" - } + }, + { + "type": "vcs", + "url": "https://github.com/nonoesp/laravel-spam-protector" + } ], ``` @@ -71,7 +74,7 @@ php artisan vendor:publish --provider="Nonoesp\Folio\FolioServiceProvider" --tag ## Other - Subscriber email notifications can be configured in `folio.subscribers` and setting up Amazon SES in `services.ses`. -- Backups can be configured by adding disks to `backup.destination.disks` (having those disks configured in `filesystems`, say [Dropbox](https://www.dropbox.com/developers/apps), Digital Ocean, or S3). +- Backups can be configured by adding disks to `backup.destination.disks` (having those disks configured in `filesystems`, say [Dropbox](https://www.dropbox.com/developers/apps), DigitalOcean, or AWS S3). ## License @@ -79,11 +82,11 @@ Folio is licensed under the [MIT license](http://opensource.org/licenses/MIT). ## Me -Hi. I'm [Nono Martínez Alonso](https://nono.ma/about) (Nono.MA), a computational designer with a penchant for simplicity. +Hi. I'm [Nono Martínez Alonso](https://nono.ma/about) (Nono.MA), a creative technologist with a penchant for simplicity. -I host [Getting Simple](https://gettingsimple.com)—a podcast about how you can live a meaningful, creative, simple life—[sketch](https://sketch.nono.ma) things that call my attention, [write](https://gettingsimple.com/writing) about enjoying a slower life, and recently started [live streaming and recording videos](https://youtube.com/NonoMartinezAlonso) on machine learning, life hacking, and more. +I host [Getting Simple](https://gettingsimple.com) — a podcast about simple living, lifestyle design, technology, and culture — [sketch](https://sketch.nono.ma) things that call my attention, [write](https://gettingsimple.com/writing) about enjoying a slower life, and record creative coding and machine intelligence [live streams](https://youtube.com/NonoMartinezAlonso) on YouTube. -[Join the Discord community](https://nono.ma/discord). +[Join us on Discord](https://nono.ma/discord). 🗣 If you find Folio useful in any way, reach out on Twitter at [@nonoesp](https://twitter.com/nonoesp). Cheers! @@ -97,3 +100,4 @@ If you find Folio useful in any way, reach out on Twitter at [@nonoesp](https:// ✍🏻 [Blog](https://nono.ma) 🐦 [Twitter](https://twitter.com/nonoesp) 📸 [Instagram](https://instagram.com/nonoesp) +📸 [YouTube](https://youtube.com/NonoMartinezAlonso) diff --git a/assets/folio-dark@2x.gif b/assets/folio-dark@2x.gif new file mode 100644 index 0000000000000000000000000000000000000000..53be8cffae70bbe1716b5069f2fffb5d08f98d51 GIT binary patch literal 9633 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 Date: Mon, 11 Jul 2022 20:03:58 +0200 Subject: [PATCH 14/38] Update README.md. --- README.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index a218bd4..e6ad87e 100644 --- a/README.md +++ b/README.md @@ -1,5 +1,5 @@ -Folio for Laravel logo. -Folio for Laravel logo. +![Folio for Laravel.](assets/folio-dark@2x.gif#gh-dark-mode-only) +![Folio for Laravel.](assets/folio-light@2x.gif#gh-light-mode-only) A customizable Laravel content-management system. From b37a3baf71db6ca6235612ddb51d7f2984dd9ae4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Nono=20Mart=C3=ADnez=20Alonso?= Date: Mon, 11 Jul 2022 20:06:52 +0200 Subject: [PATCH 15/38] Downsize Folio GIFs. --- assets/folio-dark@2x.gif | Bin 9633 -> 5168 bytes assets/folio-light@2x.gif | Bin 16143 -> 7902 bytes 2 files changed, 0 insertions(+), 0 deletions(-) diff --git a/assets/folio-dark@2x.gif b/assets/folio-dark@2x.gif index 53be8cffae70bbe1716b5069f2fffb5d08f98d51..34bd357f24be0309084a83e328c8c54eaccf32d1 100644 GIT binary patch literal 5168 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 Si%+O$D}|BX;bkBQIQ|FUq2@~f literal 9633 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 Date: Mon, 11 Jul 2022 20:12:19 +0200 Subject: [PATCH 16/38] Update README.md and GIFs. --- README.md | 5 +++++ assets/folio-dark@2x.gif | Bin 5168 -> 9083 bytes assets/folio-light@2x.gif | Bin 7902 -> 11330 bytes 3 files changed, 5 insertions(+) diff --git a/README.md b/README.md index e6ad87e..e6c9000 100644 --- a/README.md +++ b/README.md @@ -1,6 +1,11 @@ ![Folio for Laravel.](assets/folio-dark@2x.gif#gh-dark-mode-only) ![Folio for Laravel.](assets/folio-light@2x.gif#gh-light-mode-only) +

+Folio for Laravel logo. +Folio for Laravel logo. +

+ A customizable Laravel content-management system. You can see it working at [Nono.MA](https://nono.ma), [Getting Simple](https://gettingsimple.com), [Burns.art](https://burns.art), [RCA Media Studies](https://ms.rca-architecture.com), or [Luis Ruiz Padrón](https://luisruiz.es). diff --git a/assets/folio-dark@2x.gif b/assets/folio-dark@2x.gif index 34bd357f24be0309084a83e328c8c54eaccf32d1..c00b268e2674ad1d702144d4b739e6559927d40f 100644 GIT binary patch literal 9083 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 Si%+O$D}|BX;bkBQIQ|FUq2@~f diff --git a/assets/folio-light@2x.gif b/assets/folio-light@2x.gif index 1fb0ea603957cd704ec4c70298f07fa3bda2b50a..5a470982e4db5d9a339831b478054f61fcdca47c 100644 GIT binary patch delta 6933 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 delta 3418 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 Date: Mon, 11 Jul 2022 20:13:23 +0200 Subject: [PATCH 17/38] Update README.md. --- README.md | 7 ++----- 1 file changed, 2 insertions(+), 5 deletions(-) diff --git a/README.md b/README.md index e6c9000..30c9539 100644 --- a/README.md +++ b/README.md @@ -1,9 +1,6 @@ -![Folio for Laravel.](assets/folio-dark@2x.gif#gh-dark-mode-only) -![Folio for Laravel.](assets/folio-light@2x.gif#gh-light-mode-only) -

-Folio for Laravel logo. -Folio for Laravel logo. +Folio for Laravel logo. +Folio for Laravel logo.

A customizable Laravel content-management system. From de6932293d1a52b9d812bd013d1b1416fe2889f7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Nono=20Mart=C3=ADnez=20Alonso?= Date: Tue, 12 Jul 2022 10:09:38 +0200 Subject: [PATCH 18/38] Display name of default template. --- src/Folio.php | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/src/Folio.php b/src/Folio.php index 6ace54f..311aa1d 100644 --- a/src/Folio.php +++ b/src/Folio.php @@ -207,8 +207,11 @@ public static function itemPropertiesWithPrefix($item, $prefix) { */ public static function templates() { + $defaultTemplate = config('folio.view.item'); + $defaultTemplateViewName = ucwords(strtolower(last(explode('.', $defaultTemplate)))); + $templates = []; - $templates["null"] = ucwords(strtolower('default template')); + $templates["null"] = ucwords(strtolower('default template'))."($defaultTemplateViewName)"; $template_paths = []; @@ -217,8 +220,7 @@ public static function templates() { // Get template full paths // if($config_paths = config('folio.custom-template-views-foldername')) { if($config_paths = $custom_template_views_folder) { - foreach($config_paths as $name=>$folder) { - //$name.' · resources/views/'.$dir + foreach($config_paths as $name => $folder) { $template_paths[$name] = [ 'folder' => $folder, 'path' => resource_path().'/views/'.$folder, From f6236927e67292c62163286e11497f78309afd9d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Nono=20Mart=C3=ADnez=20Alonso?= Date: Tue, 12 Jul 2022 11:06:02 +0200 Subject: [PATCH 19/38] Format default template label. --- src/Folio.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Folio.php b/src/Folio.php index 311aa1d..60e759e 100644 --- a/src/Folio.php +++ b/src/Folio.php @@ -211,7 +211,7 @@ public static function templates() { $defaultTemplateViewName = ucwords(strtolower(last(explode('.', $defaultTemplate)))); $templates = []; - $templates["null"] = ucwords(strtolower('default template'))."($defaultTemplateViewName)"; + $templates["null"] = ucwords(strtolower('default template'))." › $defaultTemplateViewName"; $template_paths = []; From b7633ed9a1031b609d2a89f6f9da5bbc0217fdec Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Nono=20Mart=C3=ADnez=20Alonso?= Date: Tue, 12 Jul 2022 11:06:20 +0200 Subject: [PATCH 20/38] Use original source of laravel-spam-detector. --- composer.json | 6 +----- 1 file changed, 1 insertion(+), 5 deletions(-) diff --git a/composer.json b/composer.json index 36a6dfa..c108149 100644 --- a/composer.json +++ b/composer.json @@ -12,10 +12,6 @@ { "type": "vcs", "url": "https://github.com/nonoesp/laravel-imgix" - }, - { - "type": "vcs", - "url": "https://github.com/nonoesp/laravel-spam-protector" } ], "autoload": { @@ -52,7 +48,7 @@ "mpociot/versionable": "^4.0.0", "laravel/ui": "^3.0", "spatie/laravel-honeypot": "^4.0", - "johannebert/laravel-spam-protector": "9.x-dev" + "johannebert/laravel-spam-protector": "dev-master" }, "require-dev": { "phpunit/phpunit": "^9.0" From 64b44cd5720c229332486ce700d387286e15f302 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Nono=20Mart=C3=ADnez=20Alonso?= Date: Tue, 12 Jul 2022 11:06:43 +0200 Subject: [PATCH 21/38] Remove laravel-spam-detector exception from README.md. --- README.md | 6 +----- 1 file changed, 1 insertion(+), 5 deletions(-) diff --git a/README.md b/README.md index 30c9539..8c03cac 100644 --- a/README.md +++ b/README.md @@ -16,11 +16,7 @@ You can see it working at [Nono.MA](https://nono.ma), [Getting Simple](https://g { "type": "vcs", "url": "https://github.com/nonoesp/laravel-imgix" - }, - { - "type": "vcs", - "url": "https://github.com/nonoesp/laravel-spam-protector" - } + } ], ``` From 32654d31dab5183ad13bce4342409189153a8c20 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Nono=20Mart=C3=ADnez=20Alonso?= Date: Wed, 13 Jul 2022 18:42:39 +0200 Subject: [PATCH 22/38] Allow explicit og-url in base-v2 template. --- resources/views/legacy/template/_base-v2.blade.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/resources/views/legacy/template/_base-v2.blade.php b/resources/views/legacy/template/_base-v2.blade.php index 05e671b..a449087 100644 --- a/resources/views/legacy/template/_base-v2.blade.php +++ b/resources/views/legacy/template/_base-v2.blade.php @@ -89,7 +89,7 @@ $og_description = $item->stringProperty('meta-description', $og_description); } $og_type = 'article'; - $og_url = $item->permalink(); + $og_url = $og_url ?? $item->permalink(); $apple_touch_icon = $item->stringProperty('apple-touch-icon'); ?> From 7358ace71e2cd69f0307eb858d79c6bb2a2c88c5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Nono=20Mart=C3=ADnez=20Alonso?= Date: Thu, 14 Jul 2022 09:50:37 +0200 Subject: [PATCH 23/38] Restore laravelium/feed package. --- composer.json | 1 + 1 file changed, 1 insertion(+) diff --git a/composer.json b/composer.json index c108149..3aaaf5f 100644 --- a/composer.json +++ b/composer.json @@ -24,6 +24,7 @@ "php": "^8.0.2", "illuminate/support": "^9.11.0", "aws/aws-sdk-php": "~3.0", + "laravelium/feed": "^8.0.0", "graham-campbell/markdown": "^14.0-dev", "jenssegers/date": "^4.0.0", "laravelcollective/html": "^6.0", From d7dd25c98b5814b349f951a2110611c0e4a7c05f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Nono=20Mart=C3=ADnez=20Alonso?= Date: Thu, 14 Jul 2022 09:53:56 +0200 Subject: [PATCH 24/38] Switch to macpaw/feed. --- composer.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/composer.json b/composer.json index 3aaaf5f..1c46587 100644 --- a/composer.json +++ b/composer.json @@ -24,7 +24,7 @@ "php": "^8.0.2", "illuminate/support": "^9.11.0", "aws/aws-sdk-php": "~3.0", - "laravelium/feed": "^8.0.0", + "macpaw/feed": "^9.0.0", "graham-campbell/markdown": "^14.0-dev", "jenssegers/date": "^4.0.0", "laravelcollective/html": "^6.0", From 85ece813cbd01235c9387e389cb74a8e02c2d507 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Nono=20Mart=C3=ADnez=20Alonso?= Date: Thu, 14 Jul 2022 09:59:26 +0200 Subject: [PATCH 25/38] Switch to macpaw/feed. --- composer.json | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/composer.json b/composer.json index 1c46587..4e4212a 100644 --- a/composer.json +++ b/composer.json @@ -12,7 +12,11 @@ { "type": "vcs", "url": "https://github.com/nonoesp/laravel-imgix" - } + }, + { + "type": "vcs", + "url": "https://github.com/macpaw/laravel-feed" + } ], "autoload": { "psr-4": { From 048c9e3404eb793f6bcc237164e0ef8b85be8ade Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Nono=20Mart=C3=ADnez=20Alonso?= Date: Fri, 15 Jul 2022 14:49:29 +0200 Subject: [PATCH 26/38] Add macpac/feed to README.md. --- README.md | 6 +++++- composer.json | 2 +- 2 files changed, 6 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index 8c03cac..f909d1f 100644 --- a/README.md +++ b/README.md @@ -16,7 +16,11 @@ You can see it working at [Nono.MA](https://nono.ma), [Getting Simple](https://g { "type": "vcs", "url": "https://github.com/nonoesp/laravel-imgix" - } + }, + { + "type": "vcs", + "url": "https://github.com/macpaw/laravel-feed" + } ], ``` diff --git a/composer.json b/composer.json index 4e4212a..5f544e3 100644 --- a/composer.json +++ b/composer.json @@ -16,7 +16,7 @@ { "type": "vcs", "url": "https://github.com/macpaw/laravel-feed" - } + } ], "autoload": { "psr-4": { From 6c5a550aef2d0337ce6c820d8ae5cc3b5de6b5f1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Nono=20Mart=C3=ADnez=20Alonso?= Date: Tue, 19 Jul 2022 18:37:30 +0200 Subject: [PATCH 27/38] Remove SpacesServiceProvider. --- composer.json | 3 +- src/Folio.php | 12 ++++-- src/Providers/SpacesServiceProvider.php | 54 ------------------------- 3 files changed, 9 insertions(+), 60 deletions(-) delete mode 100644 src/Providers/SpacesServiceProvider.php diff --git a/composer.json b/composer.json index 5f544e3..aa56273 100644 --- a/composer.json +++ b/composer.json @@ -62,8 +62,7 @@ "laravel": { "providers": [ "Nonoesp\\Folio\\FolioServiceProvider", - "Nonoesp\\Folio\\Providers\\DropboxServiceProvider", - "Nonoesp\\Folio\\Providers\\SpacesServiceProvider" + "Nonoesp\\Folio\\Providers\\DropboxServiceProvider" ], "aliases": { "Folio": "Nonoesp\\Folio\\Facades\\Folio", diff --git a/src/Folio.php b/src/Folio.php index 60e759e..70b7860 100644 --- a/src/Folio.php +++ b/src/Folio.php @@ -331,11 +331,15 @@ public static function mediaUrl($path = '') { return imgix($path); } - // Spaces - $uploadsDiskDriver = config('filesystems.disks.'.config('folio.uploader.disk').'.driver'); - if ($uploadsDiskDriver == 'spaces') { + // Spaces/S3 + $uploaderDisk = config('folio.uploader.disk'); + $uploadsDisk = config('filesystems.disks.'.$uploaderDisk); + + if ($uploadsDisk['driver'] == 's3') { $path = Str::of($path)->start('/'); - return 'https://'.env('DIGITAL_OCEAN_BUCKET').'.'.env('DIGITAL_OCEAN_REGION').'.digitaloceanspaces.com'.$path; + $protocol = 'https://'; + $url = Str::of($uploadsDisk['endpoint'])->explode('://')->last(); + return $protocol.$uploadsDisk['bucket'].'.'.$url.$path; } return Folio::url($path); diff --git a/src/Providers/SpacesServiceProvider.php b/src/Providers/SpacesServiceProvider.php deleted file mode 100644 index d8d9ec9..0000000 --- a/src/Providers/SpacesServiceProvider.php +++ /dev/null @@ -1,54 +0,0 @@ - [ - 'key' => $config['key'], - 'secret' => $config['secret'], - ], - 'region' => $config['region'], - 'version' => 'latest', - 'endpoint' => $config['endpoint'], - ]); - - $adapter = new AwsS3V3Adapter($client, $config['bucket']); - - return new FilesystemAdapter( - new Filesystem($adapter, $config), - $adapter, - $config - ); - }); - } -} \ No newline at end of file From 6bcc18e6193735793fe84f0c7514f5af4808e17f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Nono=20Mart=C3=ADnez=20Alonso?= Date: Tue, 19 Jul 2022 19:00:40 +0200 Subject: [PATCH 28/38] Cleanup. --- src/Folio.php | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/Folio.php b/src/Folio.php index 70b7860..331cd1b 100644 --- a/src/Folio.php +++ b/src/Folio.php @@ -338,8 +338,8 @@ public static function mediaUrl($path = '') { if ($uploadsDisk['driver'] == 's3') { $path = Str::of($path)->start('/'); $protocol = 'https://'; - $url = Str::of($uploadsDisk['endpoint'])->explode('://')->last(); - return $protocol.$uploadsDisk['bucket'].'.'.$url.$path; + $endpoint = Str::of($uploadsDisk['endpoint'])->explode('://')->last(); + return $protocol.$uploadsDisk['bucket'].'.'.$endpoint.$path; } return Folio::url($path); From bfa1b04bdb5864afbce926ae9f7c1f7a883a8d67 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Nono=20Mart=C3=ADnez=20Alonso?= Date: Tue, 19 Jul 2022 19:09:31 +0200 Subject: [PATCH 29/38] List non-image uploaded files separately. --- resources/views/admin/upload/list.blade.php | 58 +++++++++++++++++---- 1 file changed, 48 insertions(+), 10 deletions(-) diff --git a/resources/views/admin/upload/list.blade.php b/resources/views/admin/upload/list.blade.php index f0ce349..7d18d28 100644 --- a/resources/views/admin/upload/list.blade.php +++ b/resources/views/admin/upload/list.blade.php @@ -29,6 +29,7 @@ $images = []; $videos = []; $animations = []; + $otherFiles = []; @endphp @foreach($filenames as $filename) @@ -44,19 +45,22 @@ $isVideo = in_array($extension, ['mp4', 'mov', 'webm']); $isAnimation = in_array($extension, ['gif']); + $isImage = in_array($extension, ['jpeg', 'jpg', 'svg', 'png', 'tiff', 'bmp', 'webp']); if ($isVideo) { // Videos array_push($videos, $filename); - continue; } else if ($isAnimation) { // Animations array_push($animations, $filename); - continue; + } else if ($isImage) { + // Images + array_push($images, $filename); + } else { + // Other files + array_push($otherFiles, $filename); } - // Images - array_push($images, $filename); @endphp @endforeach @@ -98,7 +102,7 @@
{{ $basename }} · - +

@endforeach @@ -156,7 +160,7 @@ @endif - + {{-- Videos --}} @if(count($videos)) @@ -176,15 +180,13 @@ // Construct file path // $filePath = Folio::upload($basename); - $image = Folio::uploadUrl($basename); + $video = Folio::uploadUrl($basename); // $image = config('folio.imgix') ? imgix($filePath) : Folio::mediaUrl($filePath); @endphp + + @endif + @if(!count($images) && !count($videos)) From bdebcc78cfc9e116ec34c560db6698081af5e77e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Nono=20Mart=C3=ADnez=20Alonso?= Date: Tue, 19 Jul 2022 19:16:19 +0200 Subject: [PATCH 30/38] Default item's open graph image to site's og image. --- src/Models/Item.php | 1 + 1 file changed, 1 insertion(+) diff --git a/src/Models/Item.php b/src/Models/Item.php index a193443..f45efa4 100644 --- a/src/Models/Item.php +++ b/src/Models/Item.php @@ -542,6 +542,7 @@ public function ogImage($imgixOptions = [], $params = []) { $this->image, 'VIDEO_IMAGE', config('folio.og.image'), + config('folio.image-src'), // TODO: Deprecate ]); $params = array_merge($params, [ From bb5254f6814707dd2e71d09adf3199dd9997bd48 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Nono=20Mart=C3=ADnez=20Alonso?= Date: Tue, 8 Nov 2022 07:47:50 +0100 Subject: [PATCH 31/38] Support item domains in Sitemap. --- src/Commands/GenerateSitemap.php | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/src/Commands/GenerateSitemap.php b/src/Commands/GenerateSitemap.php index 6d6e08f..7b88f87 100644 --- a/src/Commands/GenerateSitemap.php +++ b/src/Commands/GenerateSitemap.php @@ -81,6 +81,14 @@ public function handle() // Find Folio item paths if (Folio::isFolioURI($url->path())) { + + if($item = \Item::bySlug($url->path())) { + // Override domain when specified as property + if ($domain = $item->stringProperty('domain')) { + $url = new \Spatie\Sitemap\Tags\Url('https://'.$domain.$url->path()); + } + } + $urlType = 'ITEM'; $url->setPriority(1); } From 49463d5199cb909bdd72c4c5d4eaf4c073ddfdde Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Nono=20Mart=C3=ADnez=20Alonso?= Date: Tue, 8 Nov 2022 10:23:34 +0100 Subject: [PATCH 32/38] Add support for dark mode favicon. --- resources/views/layout-v2.blade.php | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/resources/views/layout-v2.blade.php b/resources/views/layout-v2.blade.php index 46607bb..81b3848 100644 --- a/resources/views/layout-v2.blade.php +++ b/resources/views/layout-v2.blade.php @@ -52,7 +52,8 @@ {{ $title }} - + + From f15094e31a03dbfb00377a0912d2cb77eb337ce1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Nono=20Mart=C3=ADnez=20Alonso?= Date: Tue, 8 Nov 2022 10:31:21 +0100 Subject: [PATCH 33/38] Fix legacy footer credits view error. --- resources/views/legacy/partial/c-footer__credits.blade.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/resources/views/legacy/partial/c-footer__credits.blade.php b/resources/views/legacy/partial/c-footer__credits.blade.php index 722be87..50e827c 100644 --- a/resources/views/legacy/partial/c-footer__credits.blade.php +++ b/resources/views/legacy/partial/c-footer__credits.blade.php @@ -2,7 +2,7 @@ if(!isset($text)) { $footer = config('folio.footer'); $text = null; - if($footer['credits_text']) { + if ($footer && array_key_exists('credits_text', $footer)) { $text = $footer['credits_text']; } } From ad1d99953dc1dbd754fb81946b3cf4bf307e7912 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Nono=20Mart=C3=ADnez=20Alonso?= Date: Tue, 13 Dec 2022 21:06:16 +0100 Subject: [PATCH 34/38] Purge images from imgix when replacing. --- src/Controllers/UploadController.php | 13 +++++++++++ src/Folio.php | 35 ++++++++++++++++++++++++++++ 2 files changed, 48 insertions(+) diff --git a/src/Controllers/UploadController.php b/src/Controllers/UploadController.php index 5655653..a79e130 100644 --- a/src/Controllers/UploadController.php +++ b/src/Controllers/UploadController.php @@ -80,6 +80,19 @@ public function getUploadForm(Request $request) // Confirm we're overwriting if ($imgExists) { array_push($messages, 'The file has been replaced.'); + + // Purge from imgix if possible + $imgix_api_key = env('IMGIX_API_KEY'); + $imgix_purge_on_replace = env('IMGIX_PURGE_ON_REPLACE'); + if ($imgix_api_key && $imgix_purge_on_replace) { + $imgix_url = imgix($uploaderUploadsFolder.'/'.$filename); + $purge_response = \Folio::purgeImgix($imgix_url); + if ($purge_response) { + array_push($messages, 'The file has been purged from imgix.'); + } else { + array_push($messages, 'Failed to purge the file from imgix.'); + } + } } // Store file diff --git a/src/Folio.php b/src/Folio.php index 331cd1b..19567ba 100644 --- a/src/Folio.php +++ b/src/Folio.php @@ -438,4 +438,39 @@ public static function hashids($salt = null, $padding = null, $alphabet = null) return new \Hashids\Hashids($salt, $padding, $alphabet); } + /** + * Purges an imgix asset by Url. + */ + public static function purgeImgix($url) { + if (!$url) { + return false; + } + $imgix_api_key = env('IMGIX_API_KEY'); + if ($imgix_api_key) { + # https://gist.github.com/jacktasia/17cefd2c41a5b44d8460 + $client = new \GuzzleHttp\Client(); + try { + $response = $client->post('https://api.imgix.com/api/v1/purge', [ + 'headers' => [ + 'Content-Type' => 'application/vnd.api+json', + 'Authorization' => 'Bearer '.$imgix_api_key + ], + \GuzzleHttp\RequestOptions::JSON => [ + 'data' => [ + 'attributes' => [ + 'url' => $url + ], + 'type' => 'purges' + ] + ] + ]); + return true; + } + catch (\Guzzle\Http\Exception\ClientErrorResponseException $exception) { + $responseBody = $exception->getResponse()->getBody(true); + return false; + } + } + } + } From 4bf3da7360c056c93f9d6cfdd9a159b51585d56a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Nono=20Mart=C3=ADnez=20Alonso?= Date: Mon, 16 Jan 2023 11:34:59 +0100 Subject: [PATCH 35/38] Adjust c-footer-v2 vertical padding and margin. --- resources/views/partial/c-footer-v2.blade.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/resources/views/partial/c-footer-v2.blade.php b/resources/views/partial/c-footer-v2.blade.php index f42f314..f70fd65 100644 --- a/resources/views/partial/c-footer-v2.blade.php +++ b/resources/views/partial/c-footer-v2.blade.php @@ -12,7 +12,7 @@ $subscribe_hidden = $subscribe_hidden ?? config('folio.subscribe.hidden'); @endphp -