mirror of
https://github.com/lidarr/lidarr.git
synced 2025-07-16 10:03:51 -07:00
Sorting on all series views is now working
New: Sorting is now persisted on a per page and browser basis New: Series lists now support sorting on all views
This commit is contained in:
parent
4d6d477947
commit
6ba17782aa
13 changed files with 414 additions and 123 deletions
|
@ -41,66 +41,65 @@ define(
|
|||
template: 'Series/Index/SeriesIndexLayoutTemplate',
|
||||
|
||||
regions: {
|
||||
seriesRegion: '#x-series',
|
||||
toolbar : '#x-toolbar',
|
||||
footer : '#x-series-footer'
|
||||
seriesRegion : '#x-series',
|
||||
toolbar : '#x-toolbar',
|
||||
footer : '#x-series-footer'
|
||||
},
|
||||
|
||||
columns:
|
||||
[
|
||||
{
|
||||
name : 'statusWeight',
|
||||
label : '',
|
||||
cell : SeriesStatusCell
|
||||
},
|
||||
{
|
||||
name : 'title',
|
||||
label : 'Title',
|
||||
cell : SeriesTitleCell,
|
||||
cellValue: 'this'
|
||||
},
|
||||
{
|
||||
name : 'seasonCount',
|
||||
label: 'Seasons',
|
||||
cell : 'integer'
|
||||
},
|
||||
{
|
||||
name : 'qualityProfileId',
|
||||
label: 'Quality',
|
||||
cell : QualityProfileCell
|
||||
},
|
||||
{
|
||||
name : 'network',
|
||||
label: 'Network',
|
||||
cell : 'string'
|
||||
},
|
||||
{
|
||||
name : 'nextAiring',
|
||||
label : 'Next Airing',
|
||||
cell : RelativeDateCell,
|
||||
sortValue : function (model) {
|
||||
var nextAiring = model.get('nextAiring');
|
||||
columns: [
|
||||
{
|
||||
name : 'statusWeight',
|
||||
label : '',
|
||||
cell : SeriesStatusCell
|
||||
},
|
||||
{
|
||||
name : 'title',
|
||||
label : 'Title',
|
||||
cell : SeriesTitleCell,
|
||||
cellValue: 'this'
|
||||
},
|
||||
{
|
||||
name : 'seasonCount',
|
||||
label: 'Seasons',
|
||||
cell : 'integer'
|
||||
},
|
||||
{
|
||||
name : 'qualityProfileId',
|
||||
label: 'Quality',
|
||||
cell : QualityProfileCell
|
||||
},
|
||||
{
|
||||
name : 'network',
|
||||
label: 'Network',
|
||||
cell : 'string'
|
||||
},
|
||||
{
|
||||
name : 'nextAiring',
|
||||
label : 'Next Airing',
|
||||
cell : RelativeDateCell,
|
||||
sortValue : function (model) {
|
||||
var nextAiring = model.get('nextAiring');
|
||||
|
||||
if (!nextAiring) {
|
||||
return Number.MAX_VALUE;
|
||||
}
|
||||
|
||||
return Moment(nextAiring).unix();
|
||||
if (!nextAiring) {
|
||||
return Number.MAX_VALUE;
|
||||
}
|
||||
},
|
||||
{
|
||||
name : 'percentOfEpisodes',
|
||||
label : 'Episodes',
|
||||
cell : EpisodeProgressCell,
|
||||
className: 'episode-progress-cell'
|
||||
},
|
||||
{
|
||||
name : 'this',
|
||||
label : '',
|
||||
sortable: false,
|
||||
cell : SeriesActionsCell
|
||||
|
||||
return Moment(nextAiring).unix();
|
||||
}
|
||||
],
|
||||
},
|
||||
{
|
||||
name : 'percentOfEpisodes',
|
||||
label : 'Episodes',
|
||||
cell : EpisodeProgressCell,
|
||||
className: 'episode-progress-cell'
|
||||
},
|
||||
{
|
||||
name : 'this',
|
||||
label : '',
|
||||
sortable: false,
|
||||
cell : SeriesActionsCell
|
||||
}
|
||||
],
|
||||
|
||||
leftSideButtons: {
|
||||
type : 'default',
|
||||
|
@ -138,25 +137,46 @@ define(
|
|||
]
|
||||
},
|
||||
|
||||
_showTable: function () {
|
||||
this.currentView = new Backgrid.Grid({
|
||||
collection: SeriesCollection,
|
||||
columns : this.columns,
|
||||
className : 'table table-hover'
|
||||
});
|
||||
sortingOptions: {
|
||||
type : 'sorting',
|
||||
storeState : false,
|
||||
viewCollection: SeriesCollection,
|
||||
items :
|
||||
[
|
||||
{
|
||||
title: 'Title',
|
||||
name : 'title'
|
||||
},
|
||||
{
|
||||
title: 'Seasons',
|
||||
name : 'seasonCount'
|
||||
},
|
||||
{
|
||||
title: 'Quality',
|
||||
name : 'qualityProfileId'
|
||||
},
|
||||
{
|
||||
title: 'Network',
|
||||
name : 'network'
|
||||
},
|
||||
{
|
||||
title : 'Next Airing',
|
||||
name : 'nextAiring',
|
||||
sortValue : function (model) {
|
||||
var nextAiring = model.get('nextAiring');
|
||||
|
||||
this._renderView();
|
||||
this._fetchCollection();
|
||||
},
|
||||
if (!nextAiring) {
|
||||
return Number.MAX_VALUE;
|
||||
}
|
||||
|
||||
_showList: function () {
|
||||
this.currentView = new ListCollectionView();
|
||||
this._fetchCollection();
|
||||
},
|
||||
|
||||
_showPosters: function () {
|
||||
this.currentView = new PosterCollectionView();
|
||||
this._fetchCollection();
|
||||
return Moment(nextAiring).unix();
|
||||
}
|
||||
},
|
||||
{
|
||||
title: 'Episodes',
|
||||
name : 'percentOfEpisodes'
|
||||
}
|
||||
]
|
||||
},
|
||||
|
||||
initialize: function () {
|
||||
|
@ -164,39 +184,8 @@ define(
|
|||
|
||||
this.listenTo(SeriesCollection, 'sync', this._renderView);
|
||||
this.listenTo(SeriesCollection, 'remove', this._renderView);
|
||||
},
|
||||
|
||||
_renderView: function () {
|
||||
|
||||
if (SeriesCollection.length === 0) {
|
||||
this.seriesRegion.show(new EmptyView());
|
||||
this.toolbar.close();
|
||||
}
|
||||
else {
|
||||
this.currentView.collection = SeriesCollection;
|
||||
this.seriesRegion.show(this.currentView);
|
||||
|
||||
this._showToolbar();
|
||||
this._showFooter();
|
||||
}
|
||||
},
|
||||
|
||||
onShow: function () {
|
||||
this._showToolbar();
|
||||
this._renderView();
|
||||
},
|
||||
|
||||
_fetchCollection: function () {
|
||||
SeriesCollection.fetch();
|
||||
},
|
||||
|
||||
_showToolbar: function () {
|
||||
|
||||
if (this.toolbar.currentView) {
|
||||
return;
|
||||
}
|
||||
|
||||
var viewButtons = {
|
||||
this.viewButtons = {
|
||||
type : 'radio',
|
||||
storeState : true,
|
||||
menuKey : 'seriesViewMode',
|
||||
|
@ -226,12 +215,71 @@ define(
|
|||
}
|
||||
]
|
||||
};
|
||||
},
|
||||
|
||||
_showTable: function () {
|
||||
this.currentView = new Backgrid.Grid({
|
||||
collection: SeriesCollection,
|
||||
columns : this.columns,
|
||||
className : 'table table-hover'
|
||||
});
|
||||
|
||||
this._fetchCollection();
|
||||
},
|
||||
|
||||
_showList: function () {
|
||||
this.currentView = new ListCollectionView({ collection: SeriesCollection });
|
||||
|
||||
this._fetchCollection();
|
||||
},
|
||||
|
||||
_showPosters: function () {
|
||||
this.currentView = new PosterCollectionView({ collection: SeriesCollection });
|
||||
|
||||
this._fetchCollection();
|
||||
},
|
||||
|
||||
_renderView: function () {
|
||||
|
||||
if (SeriesCollection.length === 0) {
|
||||
this.seriesRegion.show(new EmptyView());
|
||||
this.toolbar.close();
|
||||
}
|
||||
else {
|
||||
this.seriesRegion.show(this.currentView);
|
||||
|
||||
this._showToolbar();
|
||||
this._showFooter();
|
||||
}
|
||||
},
|
||||
|
||||
onShow: function () {
|
||||
this._showToolbar();
|
||||
this._renderView();
|
||||
},
|
||||
|
||||
_fetchCollection: function () {
|
||||
SeriesCollection.fetch();
|
||||
},
|
||||
|
||||
_showToolbar: function () {
|
||||
|
||||
if (this.toolbar.currentView) {
|
||||
return;
|
||||
}
|
||||
|
||||
var rightButtons = [
|
||||
this.viewButtons
|
||||
];
|
||||
|
||||
if (this.showSortingButton) {
|
||||
rightButtons.splice(0, 0, this.sortingOptions);
|
||||
}
|
||||
|
||||
rightButtons.splice(0, 0, this.sortingOptions);
|
||||
|
||||
this.toolbar.show(new ToolbarLayout({
|
||||
right :
|
||||
[
|
||||
viewButtons
|
||||
],
|
||||
right : rightButtons,
|
||||
left :
|
||||
[
|
||||
this.leftSideButtons
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue