diff --git a/app/Providers/AppServiceProvider.php b/app/Providers/AppServiceProvider.php index ee8ca5b..246f05c 100644 --- a/app/Providers/AppServiceProvider.php +++ b/app/Providers/AppServiceProvider.php @@ -13,7 +13,7 @@ class AppServiceProvider extends ServiceProvider */ public function register() { - // + $this->app->singleton(Parsedown::class); } /** diff --git a/composer.json b/composer.json index 5f5bf7f..4d25611 100644 --- a/composer.json +++ b/composer.json @@ -9,7 +9,9 @@ "license": "MIT", "require": { "php": "^7.2", + "davidbadura/faker-markdown-generator": "^1.0", "fideloper/proxy": "^4.0", + "graham-campbell/markdown": "^12.0", "laravel/framework": "^7.0", "laravel/tinker": "^2.0" }, diff --git a/composer.lock b/composer.lock index e3d39d2..cc3fc03 100644 --- a/composer.lock +++ b/composer.lock @@ -4,8 +4,96 @@ "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies", "This file is @generated automatically" ], - "content-hash": "fc98d6ceedf442855112995ab62ccccd", + "content-hash": "d61ae394179317854afc58130475daaf", "packages": [ + { + "name": "davidbadura/faker-markdown-generator", + "version": "1.0.0", + "source": { + "type": "git", + "url": "https://github.com/DavidBadura/FakerMarkdownGenerator.git", + "reference": "acfeeedb3d3f2bd9092823818c65733360d71b5d" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/DavidBadura/FakerMarkdownGenerator/zipball/acfeeedb3d3f2bd9092823818c65733360d71b5d", + "reference": "acfeeedb3d3f2bd9092823818c65733360d71b5d", + "shasum": "" + }, + "require": { + "davidbadura/markdown-builder": "^1.0", + "fzaninotto/faker": "^1.6", + "php": ">=5.4.0" + }, + "type": "library", + "autoload": { + "psr-4": { + "DavidBadura\\FakerMarkdownGenerator\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "DavidBadura", + "email": "d.badura@gmx.de" + } + ], + "description": "Faker Markdown Generator", + "keywords": [ + "faker", + "generator", + "markdown" + ], + "time": "2016-06-28T18:33:06+00:00" + }, + { + "name": "davidbadura/markdown-builder", + "version": "1.0.4", + "source": { + "type": "git", + "url": "https://github.com/DavidBadura/markdown-builder.git", + "reference": "7e5a9106522d513dcd138afad714da1188556a0d" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/DavidBadura/markdown-builder/zipball/7e5a9106522d513dcd138afad714da1188556a0d", + "reference": "7e5a9106522d513dcd138afad714da1188556a0d", + "shasum": "" + }, + "require": { + "php": ">=5.4.0" + }, + "require-dev": { + "phpunit/phpunit": "~4.4" + }, + "type": "library", + "autoload": { + "psr-4": { + "DavidBadura\\MarkdownBuilder\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "DavidBadura", + "email": "d.badura@gmx.de" + } + ], + "description": "Markdown Builder", + "keywords": [ + "builder", + "markdown", + "render", + "writer" + ], + "time": "2018-05-21T09:17:46+00:00" + }, { "name": "dnoegel/php-xdg-base-dir", "version": "v0.1.1", @@ -334,6 +422,123 @@ ], "time": "2020-02-22T01:51:47+00:00" }, + { + "name": "fzaninotto/faker", + "version": "v1.9.1", + "source": { + "type": "git", + "url": "https://github.com/fzaninotto/Faker.git", + "reference": "fc10d778e4b84d5bd315dad194661e091d307c6f" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/fzaninotto/Faker/zipball/fc10d778e4b84d5bd315dad194661e091d307c6f", + "reference": "fc10d778e4b84d5bd315dad194661e091d307c6f", + "shasum": "" + }, + "require": { + "php": "^5.3.3 || ^7.0" + }, + "require-dev": { + "ext-intl": "*", + "phpunit/phpunit": "^4.8.35 || ^5.7", + "squizlabs/php_codesniffer": "^2.9.2" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.9-dev" + } + }, + "autoload": { + "psr-4": { + "Faker\\": "src/Faker/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "François Zaninotto" + } + ], + "description": "Faker is a PHP library that generates fake data for you.", + "keywords": [ + "data", + "faker", + "fixtures" + ], + "time": "2019-12-12T13:22:17+00:00" + }, + { + "name": "graham-campbell/markdown", + "version": "v12.0.0", + "source": { + "type": "git", + "url": "https://github.com/GrahamCampbell/Laravel-Markdown.git", + "reference": "1566129f213adf7f508e0bebc2399102c4c78cd6" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/GrahamCampbell/Laravel-Markdown/zipball/1566129f213adf7f508e0bebc2399102c4c78cd6", + "reference": "1566129f213adf7f508e0bebc2399102c4c78cd6", + "shasum": "" + }, + "require": { + "illuminate/contracts": "^6.0|^7.0", + "illuminate/support": "^6.0|^7.0", + "illuminate/view": "^6.0|^7.0", + "league/commonmark": "^1.3", + "php": "^7.2.5" + }, + "require-dev": { + "graham-campbell/analyzer": "^3.0", + "graham-campbell/testbench": "^5.4", + "mockery/mockery": "^1.3.1", + "phpunit/phpunit": "^8.5|^9.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "12.0-dev" + }, + "laravel": { + "providers": [ + "GrahamCampbell\\Markdown\\MarkdownServiceProvider" + ] + } + }, + "autoload": { + "psr-4": { + "GrahamCampbell\\Markdown\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Graham Campbell", + "email": "graham@alt-three.com" + } + ], + "description": "Markdown Is A CommonMark Wrapper For Laravel", + "keywords": [ + "Graham Campbell", + "GrahamCampbell", + "Laravel Markdown", + "Laravel-Markdown", + "common mark", + "commonmark", + "framework", + "laravel", + "markdown" + ], + "time": "2020-03-01T11:40:45+00:00" + }, { "name": "jakub-onderka/php-console-color", "version": "v0.2", @@ -3334,56 +3539,6 @@ ], "time": "2020-01-15T10:00:00+00:00" }, - { - "name": "fzaninotto/faker", - "version": "v1.9.1", - "source": { - "type": "git", - "url": "https://github.com/fzaninotto/Faker.git", - "reference": "fc10d778e4b84d5bd315dad194661e091d307c6f" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/fzaninotto/Faker/zipball/fc10d778e4b84d5bd315dad194661e091d307c6f", - "reference": "fc10d778e4b84d5bd315dad194661e091d307c6f", - "shasum": "" - }, - "require": { - "php": "^5.3.3 || ^7.0" - }, - "require-dev": { - "ext-intl": "*", - "phpunit/phpunit": "^4.8.35 || ^5.7", - "squizlabs/php_codesniffer": "^2.9.2" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.9-dev" - } - }, - "autoload": { - "psr-4": { - "Faker\\": "src/Faker/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "François Zaninotto" - } - ], - "description": "Faker is a PHP library that generates fake data for you.", - "keywords": [ - "data", - "faker", - "fixtures" - ], - "time": "2019-12-12T13:22:17+00:00" - }, { "name": "hamcrest/hamcrest-php", "version": "v2.0.0", diff --git a/config/app.php b/config/app.php index a14f256..37e5914 100644 --- a/config/app.php +++ b/config/app.php @@ -226,6 +226,11 @@ return [ 'Validator' => Illuminate\Support\Facades\Validator::class, 'View' => Illuminate\Support\Facades\View::class, + // Custom facades + /** + * Laravel Markdown: https://github.com/GrahamCampbell/Laravel-Markdown + */ + 'Markdown' => GrahamCampbell\Markdown\Facades\Markdown::class, ], ]; diff --git a/config/markdown.php b/config/markdown.php new file mode 100644 index 0000000..48257c8 --- /dev/null +++ b/config/markdown.php @@ -0,0 +1,158 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +return [ + + /* + |-------------------------------------------------------------------------- + | Enable View Integration + |-------------------------------------------------------------------------- + | + | This option specifies if the view integration is enabled so you can write + | markdown views and have them rendered as html. The following extensions + | are currently supported: ".md", ".md.php", and ".md.blade.php". You may + | disable this integration if it is conflicting with another package. + | + | Default: true + | + */ + + 'views' => true, + + /* + |-------------------------------------------------------------------------- + | CommonMark Extensions + |-------------------------------------------------------------------------- + | + | This option specifies what extensions will be automatically enabled. + | Simply provide your extension class names here. + | + | Default: [] + | + */ + + 'extensions' => [], + + /* + |-------------------------------------------------------------------------- + | Renderer Configuration + |-------------------------------------------------------------------------- + | + | This option specifies an array of options for rendering HTML. + | + | Default: [ + | 'block_separator' => "\n", + | 'inner_separator' => "\n", + | 'soft_break' => "\n", + | ] + | + */ + + 'renderer' => [ + 'block_separator' => "\n", + 'inner_separator' => "\n", + 'soft_break' => "\n", + ], + + /* + |-------------------------------------------------------------------------- + | Enable Em Tag Parsing + |-------------------------------------------------------------------------- + | + | This option specifies if `` parsing is enabled. + | + | Default: true + | + */ + + 'enable_em' => true, + + /* + |-------------------------------------------------------------------------- + | Enable Strong Tag Parsing + |-------------------------------------------------------------------------- + | + | This option specifies if `` parsing is enabled. + | + | Default: true + | + */ + + 'enable_strong' => true, + + /* + |-------------------------------------------------------------------------- + | Enable Asterisk Parsing + |-------------------------------------------------------------------------- + | + | This option specifies if `*` should be parsed for emphasis. + | + | Default: true + | + */ + + 'use_asterisk' => true, + + /* + |-------------------------------------------------------------------------- + | Enable Underscore Parsing + |-------------------------------------------------------------------------- + | + | This option specifies if `_` should be parsed for emphasis. + | + | Default: true + | + */ + + 'use_underscore' => true, + + /* + |-------------------------------------------------------------------------- + | HTML Input + |-------------------------------------------------------------------------- + | + | This option specifies how to handle untrusted HTML input. + | + | Default: 'strip' + | + */ + + 'html_input' => 'strip', + + /* + |-------------------------------------------------------------------------- + | Allow Unsafe Links + |-------------------------------------------------------------------------- + | + | This option specifies whether to allow risky image URLs and links. + | + | Default: true + | + */ + + 'allow_unsafe_links' => true, + + /* + |-------------------------------------------------------------------------- + | Maximum Nesting Level + |-------------------------------------------------------------------------- + | + | This option specifies the maximum permitted block nesting level. + | + | Default: INF + | + */ + + 'max_nesting_level' => INF, + +]; diff --git a/database/factories/BlogPostFactory.php b/database/factories/BlogPostFactory.php index 6a2c7d4..f90ce6d 100644 --- a/database/factories/BlogPostFactory.php +++ b/database/factories/BlogPostFactory.php @@ -4,10 +4,14 @@ use App\BlogPost; use Faker\Generator as Faker; +use DavidBadura\FakerMarkdownGenerator\FakerProvider as FakerMarkdownProvider; $factory->define(BlogPost::class, function (Faker $faker) { + $mdProvider = new FakerMarkdownProvider($faker); + $faker->addProvider($mdProvider); + return [ - 'title' => $faker->sentence(5), - 'body' => $faker->paragraph(4), + 'title' => $faker->realText(80), + 'body' => $faker->markdown(), ]; }); diff --git a/resources/views/posts/index.blade.php b/resources/views/posts/index.blade.php index b00a96b..2da54cb 100644 --- a/resources/views/posts/index.blade.php +++ b/resources/views/posts/index.blade.php @@ -9,10 +9,10 @@ @else @foreach ($user->posts as $post)
-

{{ $post->title }}

-

- {{ nl2br($post->body) }} -

+

{{ $post->title }}

+
+ @markdown($post->body) +

Created: {{ $post->created_at }} @if ($post->created_at->diffInSeconds($post->updated_at) > 1)