JacobHsu
3/8/2016 - 1:17 AM

PaginationHelper class #js

PaginationHelper class #js

// Create your own tests here. These are some of the methods available:
var helper = new PaginationHelper(['a','b','c','d','e','f'], 4);
Test.assertEquals(helper.pageCount(), 2);
Test.assertEquals(helper.itemCount(), 6);
Test.assertEquals(helper.pageItemCount(0), 4);
Test.assertEquals(helper.pageItemCount(1), 2);
Test.assertEquals(helper.pageItemCount(2), -1);
Test.assertEquals(helper.pageIndex(5), 1);
Test.assertEquals(helper.pageIndex(2), 0);
Test.assertEquals(helper.pageIndex(20), -1);
/*
var helper = new PaginationHelper(['a','b','c','d','e','f'], 4);
helper.pageCount(); //should == 2
helper.itemCount(); //should == 6
helper.pageItemCount(0); //should == 4
helper.pageItemCount(1); // last page - should == 2
helper.pageItemCount(2); // should == -1 since the page is invalid

// pageIndex takes an item index and returns the page that it belongs on
helper.pageIndex(5); //should == 1 (zero based index)
helper.pageIndex(2); //should == 0
helper.pageIndex(20); //should == -1
helper.pageIndex(-10); //should == -1
*/
// TODO: complete this object/class
// http://www.codewars.com/kata/515bb423de843ea99400000a/train/javascript

// The constructor takes in an array of items and a integer indicating how many
// items fit within a single page
function PaginationHelper(collection, itemsPerPage){
  this.items = collection;
  this.itemsPerPage = itemsPerPage;
}

// returns the number of items within the entire collection
PaginationHelper.prototype.itemCount = function() {
  return this.items.length;
}

// returns the number of pages
PaginationHelper.prototype.pageCount = function() {
    return Math.ceil(this.itemCount() / this.itemsPerPage);
}

// returns the number of items on the current page. page_index is zero based.
// this method should return -1 for pageIndex values that are out of range
PaginationHelper.prototype.pageItemCount = function(pageIndex) {
 var itemsPerPage = this.itemsPerPage,
     itemCount = this.itemCount(),
     pageCount = this.pageCount();
    if (pageIndex >= pageCount || pageIndex < 0) return -1;
    return this.items.slice(pageIndex * itemsPerPage, itemCount).splice(0, itemsPerPage).length;
}

// determines what page an item is on. Zero based indexes
// this method should return -1 for itemIndex values that are out of range
PaginationHelper.prototype.pageIndex = function(itemIndex) {
  if (this.itemCount() === 0 
      || itemIndex < 0 
      || itemIndex > this.itemCount())        return -1;
  if (itemIndex === 0 
      || itemIndex / this.itemsPerPage === 1) return 0;
  
  return Math.floor((itemIndex / this.itemsPerPage)); 
  
}