mattsplat / readmore
A Laravel Nova field that hides long text and reveals it on click.
Requires
- php: ^8.0
- laravel/nova: ^4.0 || ^5.0
Requires (Dev)
- larastan/larastan: ^2.9
- laravel/pint: ^1.13
- orchestra/testbench: ^8.30 || ^9.8
- phpunit/phpunit: ^10.5
Suggests
- laravel/nova-devtool: Required to recompile the front-end assets (Nova 5).
Provides
None
Conflicts
None
Replaces
None
README
A Laravel Nova field that shortens long text and reveals the rest on click. It truncates on the index and detail views (on a word boundary), and renders a normal textarea on create / update forms.
Nova compatibility
Package version Nova PHP ^2.24.x&5.x^8.0^2.04.x^8.0^1.01.x>=7.1On PHP 8.0 you get Nova 4; PHP 8.1+ resolves Nova 4 or 5. v2 is a rewrite for Nova 4+ and removes the
Text::readMore()/Textarea::showOnIndex()macros in favour of a dedicated field. See UPGRADE.md.
Install
composer require mattsplat/readmore
Usage
use Mattsplat\Readmore\ReadMore; ReadMore::make('Notes'),
By default the field shows on the index (unlike Nova's Textarea). Chain the
usual Nova methods to change that:
ReadMore::make('Notes')->hideFromIndex(),
Options
ReadMore::make('Notes') ->characters(60) // characters shown before truncating (default 20) ->mask('read more') // the "reveal" indicator (default '...') ->lessLabel('collapse') // the "collapse" control label (default 'Show less') ->rows(8), // textarea rows on forms (default 5)
mask() accepts HTML, so you can use an icon instead of text:
$icon = '<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" width="16" height="16"><path d="M6 2h9a1 1 0 0 1 .7.3l4 4a1 1 0 0 1 .3.7v13a2 2 0 0 1-2 2H6a2 2 0 0 1-2-2V4c0-1.1.9-2 2-2z"/></svg>'; ReadMore::make('Notes')->characters(0)->mask($icon),
The reveal / collapse control is a real <button>: it is keyboard focusable,
toggles with Enter / Space, and exposes aria-expanded.
Development
The dist/ bundle is committed so the package works without a build step. To
recompile it from resources/js, run the build inside a Nova application
checkout (Nova's mix tooling is not on the public npm registry):
npm run nova:install npm run prod
The bundle externalises Vue and LaravelNova, so it is a small (~4 KB) file
that relies on Nova's own runtime.
Quality checks
composer install # needs Nova credentials (see below) composer test # PHPUnit composer lint # Pint (code style) composer analyse # PHPStan / Larastan
composer install pulls laravel/nova, so you need Nova credentials
configured:
composer config --auth http-basic.nova.laravel.com "you@example.com" "your-license-key"
composer lint (Pint) needs no license and runs in CI on every push. The
test / analyse suite needs Nova, so it runs locally or on demand via the
tests workflow (Actions tab) once NOVA_USERNAME / NOVA_LICENSE_KEY secrets
are set.
See CONTRIBUTING.md for more.
Credits
Inspired by Index TextArea by Brian Dillingham.