Nova Read More Field
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/readmoreUsage
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 prodThe 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 / Larastancomposer 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.