You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

126 lines
4.0 KiB

evoapp.directive('pagingToolbar', function ($filter) {
return {
restrict: 'AE',
template:
'<footer class="panel-footer">' +
'<div class="row">' +
'<div class="col-sm-6 text-left text-center-xs">' +
'<small ng-hide="store.items.length == 0" class="text-muted inline m-t-sm m-b-sm" ng-bind="showingInfo()"></small>' +
'<small ng-show="store.items.length == 0" class="text-muted inline m-t-sm m-b-sm">Sem dados para mostrar</small>' +
'</div>' +
'<div ng-show="showPager" class="col-sm-6 text-right text-center-xs">' +
'<div class="btn-group">' +
'<button ng-disabled="store.start == 0" ng-click="move(\'back\')" class="btn btn-white btn-sm">' +
'<i class="icon-chevron-left"></i>' +
'</button>' +
'<button type="button" class="btn btn-white btn-sm" ng-bind="pageInfo()"></button>' +
'<button ng-click="get()" type="button" class="btn btn-white btn-sm"><i class="icon-refresh"></i></button>' +
'<button ng-disabled="currentPage == numberOfPages()" ng-click="move(\'forward\')" class="btn btn-white btn-sm">' +
'<i class="icon-chevron-right"></i>' +
'</button>' +
'</div>' +
'</div>' +
'</div>' +
'</footer>',
scope: {
store: '='
},
link: function (scope, elem, attrs) {
scope.currentPage = 1;
scope.showPager = attrs.showPager ? attrs.showPager : true;
scope.numberOfPages = function(){
var numberOfPages = 0;
if(scope.store.total > 0)
{
numberOfPages = Math.ceil(scope.store.total/scope.store.limit);
}
else
{
numberOfPages = 0;
}
return numberOfPages;
};
scope.move = function(direction) {
if(direction == 'forward')
{
scope.store.start = scope.store.start + scope.store.limit;
scope.currentPage = scope.currentPage + 1;
}
else
{
scope.store.start = scope.store.start - scope.store.limit;
scope.currentPage = scope.currentPage - 1;
}
};
scope.$watch('store.start', function(newValue, oldValue){
if(newValue != oldValue && newValue != undefined)
{
scope.get();
}
});
scope.$watch('store.total', function(newValue, oldValue){
if(!isNaN(newValue))
{
var total = parseInt(newValue);
if(total == 0)
{
scope.currentPage = 0;
}
else
{
scope.currentPage = scope.currentPage == 0 ? 1 : scope.currentPage;
}
}
});
scope.get = function(){
scope.store.get(function(response, status, headers, config, items){
scope.currentPage = scope.store.start == 0 ? (items.length > 0 ? 1 : 0) : scope.currentPage;
});
};
scope.showingInfo = function(){
var from = (scope.store.items.length == 0 ? 0 : (scope.store.start + 1)),
to = (scope.store.start + scope.store.items.length);
return $filter('stringFormat')('A mostrar {0} - {1} de {2}', [from, to, scope.store.total]);
};
scope.pageInfo = function(){
var info = 'Página ' +
scope.currentPage + ' de ' +
scope.numberOfPages();
return info;
};
}
}
});