0.1.3 • Published 7 years ago

generic-paginate v0.1.3

Weekly downloads
2
License
BSD
Repository
github
Last release
7 years ago

generic-paginate

A simple Javascript function for calculating pagination data which can be easily integrated into any view-layer

Usage

npm i generic-paginate -S

this module exports a single function called paginate

paginate(total, skip, limit, opts) ⇒ paginationData

Calculate pagination data using given params

Arguments
ParamTypeDefaultDescription
totalNumberTotal number of records
skipNumberNumber of records to be skiped. AKA offset
limitNumber10Number of items per page
optsObject{}additional options
opts.buttonCountNumber5length of pagination button list. Eg: < 2, 3, 4, > -> Means buttonCount=3 < 2, 3, 4, 5, 6 > -> Means buttonCount=5 < 2, 3, 4, 5, 6, 7, 9 > -> Means buttonCount=7
opts.activeClassstring"'active'"HTML class attribute to be applied for current page button
opts.inactiveClassstring"''"HTML class attribute to be applied for button other than current page b
Properties of output paginationData
NameTypeDescription
nextNumber | undefinednext page number. undefined if there is no next page
prevNumber | undefinedprevious page number. undefined if there is no previous page
currentPageNumbercurrent page number
totalPagesNumbertotal number of pages
totalItemsNumbertotal number of items
limitNumberitems per page. copied from argument
skipNumberno of skipped records. copied from argument
buttonsArray.<Object>array of buttons in the pagination list
buttons[].pageNumberpage number of button
buttons[].classstringhtml class of button. current page will have opts.inactiveClass and all others will have opts.activeClass

Example ( Nodejs )

var Paginate = require('generic-paginate');

// 37 total items,
// 10 items/page,
// skipping first 20 => current page is 3

var paginationData = Paginate( 37, 20, 10 );
console.log( paginationData );

/*
Output will be
{ next: 4,
  prev: 2,
  currentPage: 3,
  buttons:
   [ { page: 1, class: 'inactive' },
     { page: 2, class: 'inactive' },
     { page: 3, class: 'active' },
     { page: 4, class: 'inactive' } ],
  totalPages: 4,
  totalItems: 37,
  limit: 10,
  skip: 20 }
*/

Example ( Browser )

<script src="https://unpkg.com/generic-paginate" type="text/javascript" charset="utf-8"></script>
<script type="text/javascript">
  var pagintionData = GenericPaginate( 37, 20, 10 );
  console.log( pagintionData );
  /*
  Output will be
  { next: 4,
    prev: 2,
    currentPage: 3,
    buttons:
     [ { page: 1, class: 'inactive' },
       { page: 2, class: 'inactive' },
       { page: 3, class: 'active' },
       { page: 4, class: 'inactive' } ],
    totalPages: 4,
    totalItems: 37,
    limit: 10,
    skip: 20 }
  */
</script>
A sample AngularJs tempalte will be like this
<ul class="pagination">
    <li ng-enable="pagination.prev" >
      <a href="/mangoes?page={{ pagination.prev }}">&laquo;</a>
    </li>
    <li ng-repeat="button in pagination.buttons" ng-class="{{ button.class }}">
      <a href="/mangoes?page={{ button.page }}">{{ button.page }}</a>
    </li>
    <li ng-enable="pagination.next">
      <a href="/mangoes?page={{ pagination.next }}">&raquo;</a>
    </li>
</ul>
<span>Showing page: {{ pagination.currentPage}}/{{pagination.totalPages}} </span>
<span>Total items: {{ pagination.totalItems}}</span>
0.1.3

7 years ago

0.1.2

7 years ago

0.1.1

7 years ago

0.1.0

7 years ago

0.0.4

8 years ago

0.0.3

8 years ago

0.0.2

8 years ago

0.0.1

10 years ago