Skip to content

ArdentHQ/nova-enhanced-markdown

Repository files navigation

Laravel Nova Enhanced Markdown Field

A custom Markdown Field for Nova with image upload support

Stable Version License PHP Version Require

Features

  • For Laravel Nova ^4.0
  • Image upload
  • Accepts Drag & Drop / Copy & Paste

Installation

composer require ardenthq/nova-enhanced-markdown

Use

  1. Add the EnhancedMarkdown field to your Nova Resource.
<?php
namespace App\Nova;

use Laravel\Nova\Http\Requests\NovaRequest;
use Laravel\Nova\Resource;
use Ardenthq\EnhancedMarkdown\EnhancedMarkdown;

final class ResourceName extends Resource
{
    // ....
    public function fields(NovaRequest $request)
    {
        return [
            // ....
            EnhancedMarkdown::make('body'),
            // ...
        ];
    }
    // ...
}
  1. By default, this package only validates the attachment as an actual file. If you require more rules (let's say that you only want to accept images), define the rules with the new attachmentRules method.
EnhancedMarkdown::make('Content', 'content')
    ->attachmentRules('dimensions:min_width=20,min_height:20', 'image'),
  1. In some cases, you may want to parse the file before storing it (for example, apply some optimizations). To do that, you can add a callback by using the parseFile method.
EnhancedMarkdown::make('Content', 'content')
    ->parseFile(function (EnhancedMarkdown $field, UploadedFile $file) {
        $image = \Spatie\Image\Image::load($file->getPathname());
        $image->fit(\Spatie\Image\Manipulations::FIT_MAX, 100, 100);
        $image->save();
    });

If needed, you can also return a new instance of the file, that instance is the one that is going to be stored.

Important: You need to return an instance of Illuminate\Http\UploadedFile, Illuminate\Http\File or a string.

EnhancedMarkdown::make('Content', 'content')
    ->parseFile(function (EnhancedMarkdown $field, UploadedFile $file) {
        return new File('some/path');
    });
  1. The files are stored by default with / as a path and using public storage disk. You can change the path and the storage disk with the disk and path methods:
EnhancedMarkdown::make('Content', 'content')
    ->disk('s3')
    ->path('articles')

Development

  1. Run yarn nova:install and yarn install to install all the necessary dependencies for compiling the view components.
  2. Run yarn run dev (or yarn run watch) while making changes to the components in your local environment.
  3. If you change the vue components, ensure to compile for production before making a PR.

Compile for production

  1. Run yarn nova:install and yarn install to install all the necessary dependencies for compiling the view components.
  2. Run yarn run production.

Analyze the code with phpstan

composer analyse

Refactor the code with php rector

composer refactor

Format the code with php-cs-fixer

composer format

Run tests

composer test

Security

If you discover a security vulnerability within this package, please send an e-mail to [email protected]. All security vulnerabilities will be promptly addressed.

Credits

This project exists thanks to all the people who contribute.

License

MIT © Ardent