I did not find an easy Stimulus solution to this, so here is mine. Works. Easy. quite Light. Example:
HOWTO:
read_more_controller.js
import { Controller } from "stimulus" export default class extends Controller { static targets = ["shortText", "longText", "moreButton", "lessButton"] connect() { this.showLess() } showMore() { this.shortTextTarget.hidden = true this.moreButtonTarget.hidden = true this.longTextTarget.hidden = false this.lessButtonTarget.hidden = false console.log('show more') } showLess() { this.shortTextTarget.hidden = false this.moreButtonTarget.hidden = false this.longTextTarget.hidden = true this.lessButtonTarget.hidden = true console.log('show less') } }
any view (html):
<div data-controller="read-more"> <div data-read-more-target="shortText"> ABC </div> <div data-read-more-target="longText"> ABCDEFG </div> <button data-read-more-target="moreButton" data-action="read-more#showMore"> Show more </button> <button data-read-more-target="lessButton" data-action="read-more#showLess"> Show less </button> </div>
or any view (sexy haml):
%div{ data: { controller: 'read-more'} } %div{ data: { target: 'read-more.shortText' } } ABC %div{ data: { target: 'read-more.longText' } } ABCDEFG %a{ data: { action: 'read-more#showMore', target: 'read-more.moreButton' } } Show more... %a{ data: { action: 'read-more#showLess', target: 'read-more.lessButton' } } Show less...
Top comments (0)