kanbanworkflowstimelinescrumrubyroadmapproject-planningproject-managementopenprojectangularissue-trackerifcgantt-chartganttbug-trackerboardsbcf
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.
101 lines
3.4 KiB
101 lines
3.4 KiB
//-- copyright
|
|
// OpenProject is a project management system.
|
|
// Copyright (C) 2012-2017 the OpenProject Foundation (OPF)
|
|
//
|
|
// This program is free software; you can redistribute it and/or
|
|
// modify it under the terms of the GNU General Public License version 3.
|
|
//
|
|
// OpenProject is a fork of ChiliProject, which is a fork of Redmine. The copyright follows:
|
|
// Copyright (C) 2006-2017 Jean-Philippe Lang
|
|
// Copyright (C) 2010-2013 the ChiliProject Team
|
|
//
|
|
// This program is free software; you can redistribute it and/or
|
|
// modify it under the terms of the GNU General Public License
|
|
// as published by the Free Software Foundation; either version 2
|
|
// of the License, or (at your option) any later version.
|
|
//
|
|
// This program is distributed in the hope that it will be useful,
|
|
// but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
// GNU General Public License for more details.
|
|
//
|
|
// You should have received a copy of the GNU General Public License
|
|
// along with this program; if not, write to the Free Software
|
|
// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
|
|
//
|
|
// See doc/COPYRIGHT.rdoc for more details.
|
|
//++
|
|
|
|
module.exports = function(DEFAULT_PAGINATION_OPTIONS, ConfigurationDm, $window) {
|
|
function getCachedPerPage() {
|
|
var perPage = parseInt($window.localStorage.getItem('pagination.perPage'), 10);
|
|
|
|
if (perPage > 0) {
|
|
return perPage.toString();
|
|
}
|
|
}
|
|
|
|
|
|
var paginationOptions = {
|
|
page: DEFAULT_PAGINATION_OPTIONS.page,
|
|
perPage: getCachedPerPage(),
|
|
perPageOptions: [],
|
|
maxVisiblePageOptions: DEFAULT_PAGINATION_OPTIONS.maxVisiblePageOptions,
|
|
optionsTruncationSize: DEFAULT_PAGINATION_OPTIONS.optionsTruncationSize
|
|
};
|
|
|
|
var PaginationService = {
|
|
getPaginationOptions: function() {
|
|
return paginationOptions;
|
|
},
|
|
getPage: function() {
|
|
return paginationOptions.page;
|
|
},
|
|
setPage: function(page) {
|
|
paginationOptions.page = page;
|
|
},
|
|
getPerPage: function() {
|
|
return paginationOptions.perPage;
|
|
},
|
|
getMaxVisiblePageOptions: function() {
|
|
return paginationOptions.maxVisiblePageOptions;
|
|
},
|
|
getOptionsTruncationSize: function() {
|
|
return paginationOptions.optionsTruncationSize;
|
|
},
|
|
setPerPage: function(perPage) {
|
|
if (parseInt(perPage, 10) > 0) {
|
|
$window.localStorage.setItem('pagination.perPage', perPage);
|
|
}
|
|
paginationOptions.perPage = perPage;
|
|
},
|
|
getPerPageOptions: function() {
|
|
return paginationOptions.perPageOptions;
|
|
},
|
|
setPerPageOptions: function(perPageOptions) {
|
|
paginationOptions.perPageOptions = perPageOptions;
|
|
},
|
|
getLowerPageBound: function() {
|
|
return paginationOptions.perPage * (paginationOptions.page - 1) + 1;
|
|
},
|
|
getUpperPageBound: function(limit) {
|
|
return Math.min(paginationOptions.perPage * paginationOptions.page, limit);
|
|
},
|
|
resetPage: function() {
|
|
paginationOptions.page = 1;
|
|
},
|
|
nextPage: function() {
|
|
paginationOptions.page = paginationOptions.page + 1;
|
|
},
|
|
previousPage: function() {
|
|
paginationOptions.page = paginationOptions.page - 1;
|
|
},
|
|
loadPerPageOptions: function() {
|
|
ConfigurationDm.load().then(function(configuration) {
|
|
PaginationService.setPerPageOptions(configuration.perPageOptions);
|
|
});
|
|
}
|
|
};
|
|
|
|
return PaginationService;
|
|
};
|
|
|