beta This component version is ready to be used but is still in active development.

Show more utility

Allow a user to show more or less of a card or list with a button (client side).

github location npm version

Usage

  • data-vf-js-show-more The containing element, does not have to be a direct parent
  • data-vf-js-show-more-pager-size=3 The number of items to show on first page load
  • class="vf-show-more__item" Items to be shown hidden (display done with CSS)
  • data-vf-js-show-more-button The button to show more
  • data-vf-js-show-more-button--less The button to show less, optional

An overview of the HTML strcuture

A condensed example.

<section data-vf-js-show-more data-vf-js-show-more-pager-size="3" class="vf-show-more">
  <a href="#" class="vf-box | vf-show-more__item">
    <p class="vf-box__text">I'm item number 1</p>
  </a>

  <button class="vf-button | vf-show-more__button" data-vf-js-show-more-button>Show more</button>
  <button class="vf-button | vf-show-more__button--less" data-vf-js-show-more-button--less>Show less</button>
</section>

Future development

  • Pager support
  • Currently designed to work with pre-loaded HTML. It should be possible to use it with lazy-loaded HTML with a few considerations.

Variants

Show more demo

foo

I'm item number 1

foo

I'm item number 2

foo

I'm item number 3

foo

I'm item number 4

foo

I'm item number 5

foo

I'm item number 6

foo

I'm item number 7

foo

I'm item number 8

foo

I'm item number 9

Show more demo part 2

  • a list item
  • another list item
  • and another list item
  • yet another list item
HTML
<section data-vf-js-show-more data-vf-js-show-more-pager-size="3" class="vf-show-more">
  <div class="vf-section-header">
    <h2 class="vf-section-header__heading"> Show more demo</h2>
  </div>
  <div class="vf-grid vf-grid__col-3">

    <div class="vf-box vf-box--easy | vf-show-more__item">

      <h3 class="vf-box__heading">foo</h3>
      <p class="vf-box__text">I'm item number 1</p>
    </div>

    <div class="vf-box vf-box--easy | vf-show-more__item">

      <h3 class="vf-box__heading">foo</h3>
      <p class="vf-box__text">I'm item number 2</p>
    </div>

    <div class="vf-box vf-box--easy | vf-show-more__item">

      <h3 class="vf-box__heading">foo</h3>
      <p class="vf-box__text">I'm item number 3</p>
    </div>

    <div class="vf-box vf-box--easy | vf-show-more__item">

      <h3 class="vf-box__heading">foo</h3>
      <p class="vf-box__text">I'm item number 4</p>
    </div>

    <div class="vf-box vf-box--easy | vf-show-more__item">

      <h3 class="vf-box__heading">foo</h3>
      <p class="vf-box__text">I'm item number 5</p>
    </div>

    <div class="vf-box vf-box--easy | vf-show-more__item">

      <h3 class="vf-box__heading">foo</h3>
      <p class="vf-box__text">I'm item number 6</p>
    </div>

    <div class="vf-box vf-box--easy | vf-show-more__item">

      <h3 class="vf-box__heading">foo</h3>
      <p class="vf-box__text">I'm item number 7</p>
    </div>

    <div class="vf-box vf-box--easy | vf-show-more__item">

      <h3 class="vf-box__heading">foo</h3>
      <p class="vf-box__text">I'm item number 8</p>
    </div>

    <div class="vf-box vf-box--easy | vf-show-more__item">

      <h3 class="vf-box__heading">foo</h3>
      <p class="vf-box__text">I'm item number 9</p>
    </div>
  </div>

  <button class="vf-button vf-button--primary vf-button--sm | vf-show-more__button" data-vf-js-show-more-button>Show more</button>
  <button class="vf-button vf-button--primary vf-button--sm | vf-show-more__button--less" data-vf-js-show-more-button--less>Show less</button>
</section>




<section data-vf-js-show-more data-vf-js-show-more-pager-size="2" class="vf-show-more">
  <div class="vf-section-header">
    <h2 class="vf-section-header__heading"> Show more demo part 2</h2>
  </div>
  <ul class="vf-list vf-list--ordered">
    <li class="vf-list__item | vf-show-more__item">a list item</li>
    <li class="vf-list__item | vf-show-more__item">another list item</li>
    <li class="vf-list__item | vf-show-more__item">and another list item</li>
    <li class="vf-list__item | vf-show-more__item">yet another list item</li>
  </ul>

  <button class="vf-button vf-button--primary vf-button--sm | vf-show-more__button" data-vf-js-show-more-button>Show more list items</button>
  <button class="vf-button vf-button--primary vf-button--sm | vf-show-more__button--less" data-vf-js-show-more-button--less>Show less</button>
</section>
              

Examples

Installation info

This repository is distributed with [npm][https://www.npmjs.com/]. After [installing npm][https://www.npmjs.com/get-npm] and yarn, you can install vf-show-more with this command.

$ yarn add --dev @visual-framework/vf-show-more

JS

You should import this component in ./components/vf-component-rollup/scripts.js or your other JS process:

import { vfcomponentName } from 'vf-show-more/vf-show-more';
// Or import directly
// import { vfcomponentName } from '../components/raw/vf-show-more/vf-show-more.js';
vfcomponentName(); // if needed, invoke it

Sass/CSS

If your component uses Sass:

The style files included are written in Sass. If you're using a VF-core project, you can import it like this:

@import "@visual-framework/vf-show-more/index.scss";

Make sure you import Sass requirements along with the modules. You can use a project boilerplate or the vf-sass-starter

Changelog

Changelog

1.1.1

  • changes any set- style functions to cleaner version

1.1.0

  • drops dynamic css stylesheet in favour of a specific .vf-show-more__item-overflow class
  • support more than one vf-show-more on a page
  • https://github.com/visual-framework/vf-core/issues/1243

1.0.1

  • Bug: Warning message for "pagerSize" was showing in all scenarios

1.0.0

  • JS linting

1.0.0-alpha.1

  • initial release

Assets



File system location: components/vf-show-more

Find an issue on this page? Propose a change or discuss it.