angular.module('EssayApp.services') .factory('paginateArrayService', [() -> class Paginate DEFAULT: page: 1 perpage: 10 all_items: [] items: [] prev_page_available: false next_page_available: false constructor: (data, params = {})-> return null unless data?.length > 0 @params = $.extend({}, @DEFAULT, params) @all_items = data @pages_count = Math.ceil(@all_items.length / @params.perpage) page: (pagenum = undefined)-> if angular.isUndefined(pagenum) pagenum = @params?.page || 1 else pagenum = parseInt(pagenum, 10) unless angular.isNumber(pagenum) if (pagenum >= 1) and (pagenum <= @pages_count) and ((pagenum != @params.page) or (@items.length is 0 and @all_items.length > 0)) @params.page = pagenum @prev_page_available = @params.page > 1 @next_page_available = @params.page < @pages_count _start = (@params.page - 1) * @params.perpage _end = _start + @params.perpage @items = @all_items[_start..._end] @items prev_page: -> @page(@params.page - 1) next_page: -> @page(@params.page + 1) api = { paginate: (data, params = {})-> new Paginate(data, params) } return api ])