157 lines
4.7 KiB
JavaScript
157 lines
4.7 KiB
JavaScript
|
"use strict";
|
||
|
|
||
|
Backgrid.Column.prototype.defaults = {
|
||
|
name : undefined,
|
||
|
label : undefined,
|
||
|
sortable : true,
|
||
|
editable : false,
|
||
|
renderable: true,
|
||
|
formatter : undefined,
|
||
|
cell : undefined,
|
||
|
headerCell: 'nzbDrone'
|
||
|
};
|
||
|
|
||
|
|
||
|
define([
|
||
|
'app',
|
||
|
'JsLibraries/backbone.backgrid.paginator'
|
||
|
], function () {
|
||
|
|
||
|
NzbDrone.Shared.Grid.Pager = Backgrid.Extension.Paginator.extend({
|
||
|
|
||
|
template: 'Shared/Grid/PagerTemplate',
|
||
|
|
||
|
events: {
|
||
|
"click .pager-btn": "changePage"
|
||
|
},
|
||
|
|
||
|
windowSize: 1,
|
||
|
|
||
|
fastForwardHandleLabels: {
|
||
|
first: 'icon-fast-backward',
|
||
|
prev : 'icon-backward',
|
||
|
next : 'icon-forward',
|
||
|
last : 'icon-fast-forward'
|
||
|
},
|
||
|
|
||
|
changePage: function (e) {
|
||
|
e.preventDefault();
|
||
|
|
||
|
var target = $(e.target);
|
||
|
|
||
|
if (target.closest('li').hasClass('disabled')) {
|
||
|
return;
|
||
|
}
|
||
|
|
||
|
var label = target.attr('data-action');
|
||
|
var ffLabels = this.fastForwardHandleLabels;
|
||
|
|
||
|
var collection = this.collection;
|
||
|
|
||
|
if (ffLabels) {
|
||
|
switch (label) {
|
||
|
case 'first':
|
||
|
collection.getFirstPage();
|
||
|
return;
|
||
|
case 'prev':
|
||
|
if (collection.hasPrevious()) {
|
||
|
collection.getPreviousPage();
|
||
|
}
|
||
|
return;
|
||
|
case 'next':
|
||
|
if (collection.hasNext()) {
|
||
|
collection.getNextPage();
|
||
|
}
|
||
|
return;
|
||
|
case 'last':
|
||
|
collection.getLastPage();
|
||
|
return;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
var state = collection.state;
|
||
|
var pageIndex = $(e.target).text() * 1;
|
||
|
collection.getPage(state.firstPage === 0 ? pageIndex - 1 :pageIndex);
|
||
|
},
|
||
|
|
||
|
makeHandles: function () {
|
||
|
|
||
|
var handles = [];
|
||
|
var collection = this.collection;
|
||
|
var state = collection.state;
|
||
|
|
||
|
// convert all indices to 0-based here
|
||
|
var firstPage = state.firstPage;
|
||
|
var lastPage = +state.lastPage;
|
||
|
lastPage = Math.max(0, firstPage ? lastPage - 1 :lastPage);
|
||
|
var currentPage = Math.max(state.currentPage, state.firstPage);
|
||
|
currentPage = firstPage ? currentPage - 1 :currentPage;
|
||
|
var windowStart = Math.floor(currentPage / this.windowSize) * this.windowSize;
|
||
|
var windowEnd = Math.min(lastPage + 1, windowStart + this.windowSize);
|
||
|
|
||
|
if (collection.mode !== "infinite") {
|
||
|
for (var i = windowStart; i < windowEnd; i++) {
|
||
|
handles.push({
|
||
|
label : i + 1,
|
||
|
title : "No. " + (i + 1),
|
||
|
className : currentPage === i ? "active" :undefined,
|
||
|
pageNumber: i + 1
|
||
|
});
|
||
|
}
|
||
|
}
|
||
|
|
||
|
var ffLabels = this.fastForwardHandleLabels;
|
||
|
if (ffLabels) {
|
||
|
|
||
|
if (ffLabels.prev) {
|
||
|
handles.unshift({
|
||
|
label : ffLabels.prev,
|
||
|
className: collection.hasPrevious() ? void 0 :"disabled",
|
||
|
action : 'prev'
|
||
|
});
|
||
|
}
|
||
|
|
||
|
if (ffLabels.first) {
|
||
|
handles.unshift({
|
||
|
label : ffLabels.first,
|
||
|
className: collection.hasPrevious() ? void 0 :"disabled",
|
||
|
action : 'first'
|
||
|
});
|
||
|
}
|
||
|
|
||
|
if (ffLabels.next) {
|
||
|
handles.push({
|
||
|
label : ffLabels.next,
|
||
|
className: collection.hasNext() ? void 0 :"disabled",
|
||
|
action : 'next'
|
||
|
});
|
||
|
}
|
||
|
|
||
|
if (ffLabels.last) {
|
||
|
handles.push({
|
||
|
label : ffLabels.last,
|
||
|
className: collection.hasNext() ? void 0 :"disabled",
|
||
|
action : 'last'
|
||
|
});
|
||
|
}
|
||
|
}
|
||
|
|
||
|
return handles;
|
||
|
},
|
||
|
|
||
|
render: function () {
|
||
|
this.$el.empty();
|
||
|
|
||
|
var templateFunction = Marionette.TemplateCache.get(this.template);
|
||
|
|
||
|
this.$el.html(templateFunction({
|
||
|
handles: this.makeHandles()
|
||
|
}));
|
||
|
|
||
|
this.delegateEvents();
|
||
|
|
||
|
return this;
|
||
|
}
|
||
|
});
|
||
|
});
|