angular paginator


 

 

<div ng-if="ctrl.items.length == 0">Нет данных. <span ng-if="search.inUse">Измените параметры поиска.</span></div>
<div class="row" ng-if="pagination.lastPage > 1">
    <div class="col-md-5">
        <div>Страница <span ng-bind="pagination.page"></span> из <span ng-bind="pagination.lastPage"></span></div>
    </div>
    <div class="col-md-7">
        <div class="btn-group pull-right">
            <button type="button" class="btn btn-default" ng-class="{disabled : pagination.page == 1}" ng-click="pagination.getItems(1)">&laquo;</button>
            <button type="button" class="btn btn-default" ng-class="{disabled : pagination.page == 1}" ng-click="pagination.getItems(pagination.page - 1)">&lsaquo;</button>
            <button type="button" class="btn btn-default" ng-repeat="page in pagination.range" ng-bind="::page" ng-class="{active : pagination.page == page}" ng-click="pagination.getItems(page)"></button>
            <button type="button" class="btn btn-default" ng-class="{disabled : pagination.page == pagination.lastPage}" ng-click="pagination.getItems(pagination.page + 1)">&rsaquo;</button>
            <button type="button" class="btn btn-default" ng-class="{disabled : pagination.page == pagination.lastPage}" ng-click="pagination.getItems(pagination.lastPage)">&raquo;</button>
        </div>
    </div>
</div>
module.factory('Pagination', function () {
    var Pagination = {
        page: 1,
        pageToOpen: 1,
        lastPage: 1,
        range: [1],
        maxRange: 5,
        callback: function () {}
    };

    Pagination.reset = function (data) {
        Pagination.page = data.current_page;
        Pagination.lastPage = data.last_page;

        var pages = [],
            rangeStart = Pagination.page - 2,
            rangeFinish = rangeStart + Pagination.maxRange - 1;

        if (rangeStart < 1) {
            rangeFinish += 1 - rangeStart;
            rangeStart = 1;
        } else if (rangeFinish > Pagination.lastPage) {
            rangeStart -= rangeFinish - Pagination.lastPage;
            rangeFinish = Pagination.lastPage;
        }

        if (rangeStart < 1) {
            rangeStart = 1;
        }

        if (rangeFinish > Pagination.lastPage) {
            rangeFinish = Pagination.lastPage;
        }

        for (var i = rangeStart; i <= rangeFinish; i++) {
            pages.push(i);
        }

        Pagination.range = pages;

        return data.data;
    };

    Pagination.getItems = function (page) {
        if (page < 1 || page > Pagination.lastPage || page == Pagination.page) {
            return false;
        }

        Pagination.pageToOpen = page;
        Pagination.callback();

        Pagination.pageToOpen = 1;

        resizeBar.resizebar('down');
    };

    return Pagination;
});

	// Получение массива записей
	$scope.getItems = function () {
		AccrualResource.get({
			page: Pagination.pageToOpen,
			search: Search.params,
			order_column: Ordering.column,
			order_desc: Ordering.desc,
            select: Select.enabled,
            select_id: !Select.shown ? Select.selectId : null
		}, function(response) {
            vm.currentItem = angular.copy(emptyItem);
			vm.items = Pagination.reset(response);

            if (!Select.shown) {
                Select.shown = true;
                for (var i in vm.items) {
                    var currentValue = vm.items[i][Ordering.column.split('.').pop()];
                    if (currentValue !== undefined && currentValue == Select.selectId)
                        vm.edit(vm.items[i])
                }
            }
		}, function() {
			notify.error('Неизвестная ошибка, перезагрузите страницу.');
		});
	};

	// Инициализация колбэков
	Pagination.callback = $scope.getItems;