Skip to content

Instantly share code, notes, and snippets.

@wallacemaxters
Created July 13, 2018 13:42
Show Gist options
  • Save wallacemaxters/34c30c5e100b07aa047217cb64c3f378 to your computer and use it in GitHub Desktop.
Save wallacemaxters/34c30c5e100b07aa047217cb64c3f378 to your computer and use it in GitHub Desktop.
Paginação com angular
angular.module('wm.paginator', [])
.directive('wmPaginator', function () {
function createLinksRange(current, totalPages, limit) {
var items = [];
var middle = Math.min(totalPages, Math.floor(limit / 2));
var min = Math.max(1, current - middle);
var max = (min === 1) ? Math.min(limit, totalPages) : Math.min(middle + current, totalPages);
if (max === totalPages) {
min = Math.max(1, max - limit);
}
for (var i = min; i <= max; i++) items.push(i);
return items;
};
return {
restrict: 'E',
template: '<ul class="wm-paginator">\
<li>\
<a ng-click="select(1)">\
<i class="fa fa-chevron-left"></i>\
</a>\
</li>\
<li ng-if="pages.indexOf(1) == -1">...</li>\
<li ng-repeat="page in pages">\
<a ng-class="{disabled: page === currentPage}" ng-click="select(page)" ng-bind="::page"></a>\
</li>\
<li ng-if="pages.indexOf(lastPage) == -1">...</li>\
<li>\
<a ng-click="select(lastPage)">\
<i class="fa fa-chevron-right"></i>\
</a>\
</li>\
</ul>',
scope: {
lastPage: '=',
startPage: '=',
limit: '@',
onSelect: '&'
},
link: function (scope) {
var lastPage = scope.lastPage,
limit = scope.limit || 10;
scope.select = function (page) {
if (page === self.currentPage) return;
scope.onSelect({$page: page});
scope.currentPage = page;
scope.pages = createLinksRange(page, lastPage, limit);
};
scope.currentPage = scope.startPage || 1;
scope.select(scope.currentPage);
}
}
})
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment