mirror of https://github.com/Sonarr/Sonarr
Merge branch 'series-grid' into vnext
Conflicts: UI/Config.js
This commit is contained in:
parent
d81e0885c3
commit
35e2e83595
|
@ -32,9 +32,9 @@ namespace NzbDrone.Api.Series
|
||||||
public String Network { get; set; }
|
public String Network { get; set; }
|
||||||
public String AirTime { get; set; }
|
public String AirTime { get; set; }
|
||||||
public String Language { get; set; }
|
public String Language { get; set; }
|
||||||
|
|
||||||
public Int32 SeasonCount { get; set; }
|
public Int32 SeasonCount { get; set; }
|
||||||
public Int32 UtcOffset { get; set; }
|
public Int32 UtcOffset { get; set; }
|
||||||
|
public List<Core.MediaCover.MediaCover> Images { get; set; }
|
||||||
|
|
||||||
//View & Edit
|
//View & Edit
|
||||||
public String Path { get; set; }
|
public String Path { get; set; }
|
||||||
|
|
|
@ -2,7 +2,6 @@
|
||||||
<FileVersion>1</FileVersion>
|
<FileVersion>1</FileVersion>
|
||||||
<AutoEnableOnStartup>False</AutoEnableOnStartup>
|
<AutoEnableOnStartup>False</AutoEnableOnStartup>
|
||||||
<AllowParallelTestExecution>true</AllowParallelTestExecution>
|
<AllowParallelTestExecution>true</AllowParallelTestExecution>
|
||||||
<AllowTestsToRunInParallelWithThemselves>true</AllowTestsToRunInParallelWithThemselves>
|
|
||||||
<FrameworkUtilisationTypeForNUnit>UseDynamicAnalysis</FrameworkUtilisationTypeForNUnit>
|
<FrameworkUtilisationTypeForNUnit>UseDynamicAnalysis</FrameworkUtilisationTypeForNUnit>
|
||||||
<FrameworkUtilisationTypeForGallio>Disabled</FrameworkUtilisationTypeForGallio>
|
<FrameworkUtilisationTypeForGallio>Disabled</FrameworkUtilisationTypeForGallio>
|
||||||
<FrameworkUtilisationTypeForMSpec>Disabled</FrameworkUtilisationTypeForMSpec>
|
<FrameworkUtilisationTypeForMSpec>Disabled</FrameworkUtilisationTypeForMSpec>
|
||||||
|
|
|
@ -69,4 +69,6 @@
|
||||||
.img-polaroid {
|
.img-polaroid {
|
||||||
min-width: 138px;
|
min-width: 138px;
|
||||||
min-height: 203px;
|
min-height: 203px;
|
||||||
|
max-width: 138px;
|
||||||
|
max-height: 203px;
|
||||||
}
|
}
|
27
UI/Config.js
27
UI/Config.js
|
@ -3,21 +3,28 @@ define(['app'], function () {
|
||||||
|
|
||||||
$.cookie.json = true;
|
$.cookie.json = true;
|
||||||
|
|
||||||
NzbDrone.Config.SeriesView = function (value) {
|
NzbDrone.Config.SeriesViewStyle = function (value) {
|
||||||
if (value) {
|
var key = 'seriesViewStyle';
|
||||||
NzbDrone.Config.SetValue('seriesView', value);
|
|
||||||
|
if (value !== undefined) {
|
||||||
|
NzbDrone.Config.SetValue(key, value);
|
||||||
}
|
}
|
||||||
|
|
||||||
else{
|
else{
|
||||||
return NzbDrone.Config.GetValue('seriesView', 0);
|
return NzbDrone.Config.GetValue(key, 1);
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
NzbDrone.Config.GetValue = function (key, defaultValue) {
|
NzbDrone.Config.GetValue = function (key, defaultValue) {
|
||||||
var cookie = NzbDrone.Config.GetCookie();
|
var cookie = NzbDrone.Config.GetCookie();
|
||||||
var value = cookie[key];
|
|
||||||
|
|
||||||
if (!value) {
|
if (!cookie) {
|
||||||
|
return defaultValue;
|
||||||
|
}
|
||||||
|
|
||||||
|
var value = cookie[key];
|
||||||
|
|
||||||
|
if (value === undefined) {
|
||||||
return defaultValue;
|
return defaultValue;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -28,7 +35,13 @@ define(['app'], function () {
|
||||||
|
|
||||||
NzbDrone.Config.SetValue = function (key, value) {
|
NzbDrone.Config.SetValue = function (key, value) {
|
||||||
var cookie = NzbDrone.Config.GetCookie();
|
var cookie = NzbDrone.Config.GetCookie();
|
||||||
|
|
||||||
|
if (!cookie) {
|
||||||
|
cookie = {};
|
||||||
|
}
|
||||||
|
|
||||||
cookie[key] = value;
|
cookie[key] = value;
|
||||||
|
NzbDrone.Config.SetCookie(cookie);
|
||||||
};
|
};
|
||||||
|
|
||||||
NzbDrone.Config.GetCookie = function () {
|
NzbDrone.Config.GetCookie = function () {
|
||||||
|
@ -36,6 +49,6 @@ define(['app'], function () {
|
||||||
};
|
};
|
||||||
|
|
||||||
NzbDrone.Config.SetCookie = function (cookie) {
|
NzbDrone.Config.SetCookie = function (cookie) {
|
||||||
$.cookie('NzbDroneConfig', cookie, { expires: 7, path: '/' });
|
$.cookie('NzbDroneConfig', cookie, { expires: 365, path: '/' });
|
||||||
};
|
};
|
||||||
});
|
});
|
||||||
|
|
|
@ -22,6 +22,7 @@
|
||||||
<link href="/content/menu.css" rel='stylesheet' type='text/css'/>
|
<link href="/content/menu.css" rel='stylesheet' type='text/css'/>
|
||||||
<link href="/content/form.css" rel='stylesheet' type='text/css'/>
|
<link href="/content/form.css" rel='stylesheet' type='text/css'/>
|
||||||
<link href="/content/settings.quality.css" rel='stylesheet' type='text/css'/>
|
<link href="/content/settings.quality.css" rel='stylesheet' type='text/css'/>
|
||||||
|
<link href="/series/series.css" rel='stylesheet' type='text/css'/>
|
||||||
</head>
|
</head>
|
||||||
<body>
|
<body>
|
||||||
<div id="in-nav">
|
<div id="in-nav">
|
||||||
|
|
|
@ -0,0 +1,41 @@
|
||||||
|
<div class="series-item">
|
||||||
|
<div class="row">
|
||||||
|
<div class="span2">
|
||||||
|
<a href="/series/details/{{id}}" target="_blank">
|
||||||
|
<img class="series-poster img-polaroid" src="{{poster}}">
|
||||||
|
</a>
|
||||||
|
</div>
|
||||||
|
<div class="span10">
|
||||||
|
<div class="row">
|
||||||
|
<div class="span9">
|
||||||
|
<h2>{{title}}</h2>
|
||||||
|
</div>
|
||||||
|
<div class="span1">
|
||||||
|
<div class="pull-right">
|
||||||
|
<i class="icon-cog x-edit" title="Edit Series"></i>
|
||||||
|
<i class="icon-remove x-remove" title="Delete Series"></i>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="row">
|
||||||
|
<div class="span10">
|
||||||
|
{{overview}}
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="row"> </div>
|
||||||
|
<div class="row">
|
||||||
|
<div class="span10">
|
||||||
|
{{#if isContinuing}}
|
||||||
|
{{#if bestDateString}}
|
||||||
|
<span class="label">{{bestDateString}}</span>
|
||||||
|
{{else}}
|
||||||
|
<span class="label label-inverse">{{status}}</span>
|
||||||
|
{{/if}}
|
||||||
|
{{else}}
|
||||||
|
<span class="label label-important">{{status}}</span>
|
||||||
|
{{/if}}
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
|
@ -1,25 +1,40 @@
|
||||||
'use strict';
|
'use strict';
|
||||||
|
|
||||||
define(['app', 'Quality/QualityProfileCollection', 'Series/Index/SeriesItemView'], function (app, qualityProfileCollection) {
|
define(['app', 'Quality/QualityProfileCollection', 'Series/Index/SeriesItemView', 'Config'], function (app, qualityProfileCollection) {
|
||||||
NzbDrone.Series.Index.SeriesIndexCollectionView = Backbone.Marionette.CompositeView.extend({
|
NzbDrone.Series.Index.SeriesIndexCollectionView = Backbone.Marionette.CompositeView.extend({
|
||||||
itemView : NzbDrone.Series.Index.SeriesItemView,
|
itemView : NzbDrone.Series.Index.SeriesItemView,
|
||||||
itemViewContainer : 'tbody',
|
itemViewContainer : '#x-series',
|
||||||
template : 'Series/Index/SeriesIndexTemplate',
|
template : 'Series/Index/SeriesIndexTemplate',
|
||||||
qualityProfileCollection: qualityProfileCollection,
|
qualityProfileCollection: qualityProfileCollection,
|
||||||
//emptyView: NzbDrone.Series.EmptySeriesCollectionView,
|
//emptyView: NzbDrone.Series.EmptySeriesCollectionView,
|
||||||
|
|
||||||
|
getTemplate: function(){
|
||||||
|
if (this.viewStyle === 1){
|
||||||
|
return 'Series/Index/SeriesIndexGridTemplate';
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
return 'Series/Index/SeriesIndexTemplate';
|
||||||
|
}
|
||||||
|
},
|
||||||
|
|
||||||
|
ui: {
|
||||||
|
table: '.x-series-table'
|
||||||
|
},
|
||||||
|
|
||||||
|
events: {
|
||||||
|
'click .x-series-change-view': 'changeViewTemplate'
|
||||||
|
},
|
||||||
|
|
||||||
initialize: function () {
|
initialize: function () {
|
||||||
|
this.viewStyle = NzbDrone.Config.SeriesViewStyle();
|
||||||
|
|
||||||
this.collection = new NzbDrone.Series.SeriesCollection();
|
this.collection = new NzbDrone.Series.SeriesCollection();
|
||||||
//Todo: This caused the onRendered event to be trigger twice, which displays two empty collection messages
|
//Todo: This caused the onRendered event to be trigger twice, which displays two empty collection messages
|
||||||
//http://stackoverflow.com/questions/13065176/backbone-marionette-composit-view-onrender-executing-twice
|
//http://stackoverflow.com/questions/13065176/backbone-marionette-composit-view-onrender-executing-twice
|
||||||
this.collection.fetch();
|
this.collection.fetch();
|
||||||
this.qualityProfileCollection.fetch();
|
this.qualityProfileCollection.fetch();
|
||||||
|
|
||||||
this.itemViewOptions = { qualityProfiles: this.qualityProfileCollection };
|
this.itemViewOptions = { qualityProfiles: this.qualityProfileCollection, viewStyle: this.viewStyle };
|
||||||
},
|
|
||||||
|
|
||||||
ui: {
|
|
||||||
table: '.x-series-table'
|
|
||||||
},
|
},
|
||||||
|
|
||||||
onItemRemoved: function () {
|
onItemRemoved: function () {
|
||||||
|
@ -85,6 +100,21 @@ define(['app', 'Quality/QualityProfileCollection', 'Series/Index/SeriesItemView'
|
||||||
$(this).children('.tablesorter-header-inner').append('<i class="icon-sort pull-right">');
|
$(this).children('.tablesorter-header-inner').append('<i class="icon-sort pull-right">');
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
},
|
||||||
|
|
||||||
|
changeViewTemplate: function(event) {
|
||||||
|
event.preventDefault();
|
||||||
|
if ($(event.currentTarget).hasClass('x-series-show-grid')) {
|
||||||
|
NzbDrone.Config.SeriesViewStyle(1);
|
||||||
|
}
|
||||||
|
|
||||||
|
else {
|
||||||
|
NzbDrone.Config.SeriesViewStyle(0);
|
||||||
|
}
|
||||||
|
|
||||||
|
this.viewStyle = NzbDrone.Config.SeriesViewStyle();
|
||||||
|
this.itemViewOptions.viewStyle = this.viewStyle;
|
||||||
|
this.render();
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
|
@ -0,0 +1,18 @@
|
||||||
|
<div class="row">
|
||||||
|
<div class="span10"></div>
|
||||||
|
<div class="span2">
|
||||||
|
<div class="pull-right">
|
||||||
|
<div class="btn-toolbar">
|
||||||
|
<div class="btn-group">
|
||||||
|
<a class="btn x-series-change-view x-series-show-table" href="#" title="table"><i class="icon-table"></i></a>
|
||||||
|
<a class="btn x-series-change-view x-series-show-grid active" href="#" title="grid"><i class="icon-list"></i></a>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="row">
|
||||||
|
<div class="span12">
|
||||||
|
<div id="x-series"></div>
|
||||||
|
</div>
|
||||||
|
</div>
|
|
@ -1,4 +1,17 @@
|
||||||
<table class="table table-hover x-series-table">
|
<div class="row">
|
||||||
|
<div class="span10"></div>
|
||||||
|
<div class="span2">
|
||||||
|
<div class="pull-right">
|
||||||
|
<div class="btn-toolbar">
|
||||||
|
<div class="btn-group">
|
||||||
|
<a class="btn x-series-change-view x-series-show-table active" href="#" title="table"><i class="icon-table"></i></a>
|
||||||
|
<a class="btn x-series-change-view x-series-show-grid" href="#" title="grid"><i class="icon-list"></i></a>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<table class="table table-hover x-series-table">
|
||||||
<thead>
|
<thead>
|
||||||
<tr>
|
<tr>
|
||||||
<th title="Status"></th>
|
<th title="Status"></th>
|
||||||
|
@ -11,5 +24,5 @@
|
||||||
<th></th>
|
<th></th>
|
||||||
</tr>
|
</tr>
|
||||||
</thead>
|
</thead>
|
||||||
<tbody></tbody>
|
<tbody id="x-series"></tbody>
|
||||||
</table>
|
</table>
|
||||||
|
|
|
@ -10,8 +10,18 @@ define([
|
||||||
], function () {
|
], function () {
|
||||||
|
|
||||||
NzbDrone.Series.Index.SeriesItemView = Backbone.Marionette.ItemView.extend({
|
NzbDrone.Series.Index.SeriesItemView = Backbone.Marionette.ItemView.extend({
|
||||||
template: 'Series/Index/SeriesItemTemplate',
|
|
||||||
tagName : 'tr',
|
tagName : 'tr',
|
||||||
|
template: 'Series/Index/SeriesItemTemplate',
|
||||||
|
|
||||||
|
getTemplate: function(){
|
||||||
|
if (this.viewStyle === 1){
|
||||||
|
this.tagName = 'div';
|
||||||
|
return 'Series/Index/SeriesGridItemTemplate';
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
return 'Series/Index/SeriesItemTemplate';
|
||||||
|
}
|
||||||
|
},
|
||||||
|
|
||||||
ui: {
|
ui: {
|
||||||
'progressbar': '.progress .bar'
|
'progressbar': '.progress .bar'
|
||||||
|
@ -24,6 +34,7 @@ define([
|
||||||
|
|
||||||
initialize: function (options) {
|
initialize: function (options) {
|
||||||
this.qualityProfileCollection = options.qualityProfiles;
|
this.qualityProfileCollection = options.qualityProfiles;
|
||||||
|
this.viewStyle = options.viewStyle;
|
||||||
},
|
},
|
||||||
|
|
||||||
onRender: function () {
|
onRender: function () {
|
||||||
|
|
|
@ -33,6 +33,13 @@
|
||||||
},
|
},
|
||||||
traktUrl : function () {
|
traktUrl : function () {
|
||||||
return "http://trakt.tv/show/" + this.get('titleSlug');
|
return "http://trakt.tv/show/" + this.get('titleSlug');
|
||||||
|
},
|
||||||
|
isContinuing : function () {
|
||||||
|
if (this.get('status') === 'Continuing'){
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
return false;
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
|
||||||
|
|
|
@ -0,0 +1,3 @@
|
||||||
|
.series-item {
|
||||||
|
padding-bottom: 20px;
|
||||||
|
}
|
Loading…
Reference in New Issue