Toggle monitored status from season pass as well as all seasons (skip specials)

pull/4/head
Mark McDowall 11 years ago
parent 154a6b39be
commit f32cbbb224

@ -2,6 +2,7 @@
define( define(
[ [
'app', 'app',
'underscore',
'marionette', 'marionette',
'Quality/QualityProfileCollection', 'Quality/QualityProfileCollection',
'AddSeries/RootFolders/Collection', 'AddSeries/RootFolders/Collection',
@ -11,7 +12,7 @@ define(
'Shared/Messenger', 'Shared/Messenger',
'Mixins/AsValidatedView', 'Mixins/AsValidatedView',
'jquery.dotdotdot' 'jquery.dotdotdot'
], function (App, Marionette, QualityProfiles, RootFolders, RootFolderLayout, SeriesCollection, Config, Messenger, AsValidatedView) { ], function (App, _, Marionette, QualityProfiles, RootFolders, RootFolderLayout, SeriesCollection, Config, Messenger, AsValidatedView) {
var view = Marionette.ItemView.extend({ var view = Marionette.ItemView.extend({

@ -15,7 +15,7 @@ define(
'Logs/Files/Layout', 'Logs/Files/Layout',
'Release/Layout', 'Release/Layout',
'System/Layout', 'System/Layout',
'SeasonPass/Layout', 'SeasonPass/SeasonPassLayout',
'Shared/NotFoundView', 'Shared/NotFoundView',
'Shared/Modal/Region' 'Shared/Modal/Region'
], function (App, Marionette, HistoryLayout, SettingsLayout, AddSeriesLayout, SeriesIndexLayout, SeriesDetailsLayout, SeriesCollection, MissingLayout, CalendarLayout, ], function (App, Marionette, HistoryLayout, SettingsLayout, AddSeriesLayout, SeriesIndexLayout, SeriesDetailsLayout, SeriesCollection, MissingLayout, CalendarLayout,

@ -13,7 +13,7 @@
var filename = a.pathname.split('/').pop(); var filename = a.pathname.split('/').pop();
//Suppress Firefox debug errors when console window is closed //Suppress Firefox debug errors when console window is closed
if (filename.toLowerCase() === 'markupview.jsm') { if (filename.toLowerCase() === 'markupview.jsm' || filename.toLowerCase() === 'markup-view.js') {
return false; return false;
} }

@ -12,7 +12,7 @@ define(
SeriesCollectionView, SeriesCollectionView,
LoadingView) { LoadingView) {
return Marionette.Layout.extend({ return Marionette.Layout.extend({
template: 'SeasonPass/LayoutTemplate', template: 'SeasonPass/SeasonPassLayoutTemplate',
regions: { regions: {
series: '#x-series' series: '#x-series'

@ -1,24 +1,28 @@
'use strict'; 'use strict';
define( define(
[ [
'underscore',
'marionette', 'marionette',
'backgrid', 'backgrid',
'Series/SeasonCollection' 'Series/SeasonCollection'
], function (Marionette, Backgrid, SeasonCollection) { ], function (_, Marionette, Backgrid, SeasonCollection) {
return Marionette.Layout.extend({ return Marionette.Layout.extend({
template: 'SeasonPass/SeriesLayoutTemplate', template: 'SeasonPass/SeriesLayoutTemplate',
ui: { ui: {
seasonSelect: '.x-season-select', seasonSelect : '.x-season-select',
expander : '.x-expander', expander : '.x-expander',
seasonGrid : '.x-season-grid' seasonGrid : '.x-season-grid',
seriesMonitored: '.x-series-monitored'
}, },
events: { events: {
'change .x-season-select': '_seasonSelected', 'change .x-season-select' : '_seasonSelected',
'click .x-expander' : '_expand', 'click .x-expander' : '_expand',
'click .x-latest' : '_latest', 'click .x-latest' : '_latest',
'click .x-monitored' : '_toggleSeasonMonitored' 'click .x-all' : '_all',
'click .x-monitored' : '_toggleSeasonMonitored',
'click .x-series-monitored': '_toggleSeriesMonitored'
}, },
regions: { regions: {
@ -26,6 +30,7 @@ define(
}, },
initialize: function () { initialize: function () {
this.listenTo(this.model, 'sync', this._setSeriesMonitoredState);
this.seasonCollection = new SeasonCollection(this.model.get('seasons')); this.seasonCollection = new SeasonCollection(this.model.get('seasons'));
this.expanded = false; this.expanded = false;
}, },
@ -36,16 +41,17 @@ define(
} }
this._setExpanderIcon(); this._setExpanderIcon();
this._setSeriesMonitoredState();
}, },
_seasonSelected: function () { _seasonSelected: function () {
var seasonNumber = parseInt(this.ui.seasonSelect.val()); var seasonNumber = parseInt(this.ui.seasonSelect.val());
if (seasonNumber == -1 || isNaN(seasonNumber)) { if (seasonNumber === -1 || isNaN(seasonNumber)) {
return; return;
} }
this._setMonitored(seasonNumber) this._setSeasonMonitored(seasonNumber);
}, },
_expand: function () { _expand: function () {
@ -79,10 +85,16 @@ define(
return s.seasonNumber; return s.seasonNumber;
}); });
this._setMonitored(season.seasonNumber); this._setSeasonMonitored(season.seasonNumber);
}, },
_setMonitored: function (seasonNumber) { _all: function () {
var minSeasonNotZero = _.min(_.reject(this.model.get('seasons'), { seasonNumber: 0 }), 'seasonNumber');
this._setSeasonMonitored(minSeasonNotZero.seasonNumber);
},
_setSeasonMonitored: function (seasonNumber) {
var self = this; var self = this;
this.model.setSeasonPass(seasonNumber); this.model.setSeasonPass(seasonNumber);
@ -118,6 +130,29 @@ define(
_afterToggleSeasonMonitored: function () { _afterToggleSeasonMonitored: function () {
this.render(); this.render();
},
_setSeriesMonitoredState: function () {
var monitored = this.model.get('monitored');
this.ui.seriesMonitored.removeAttr('data-idle-icon');
if (monitored) {
this.ui.seriesMonitored.addClass('icon-nd-monitored');
this.ui.seriesMonitored.removeClass('icon-nd-unmonitored');
}
else {
this.ui.seriesMonitored.addClass('icon-nd-unmonitored');
this.ui.seriesMonitored.removeClass('icon-nd-monitored');
}
},
_toggleSeriesMonitored: function (e) {
var savePromise = this.model.save('monitored', !this.model.get('monitored'), {
wait: true
});
this.ui.seriesMonitored.spinForPromise(savePromise);
} }
}); });
}); });

@ -1,8 +1,8 @@
<div class="seasonpass-series"> <div class="seasonpass-series">
<div class="row"> <div class="row">
<div class="span11"> <div class="span12">
<i class="icon-chevron-right x-expander expander pull-left"/> <i class="icon-chevron-right x-expander expander pull-left"/>
<i class="x-series-monitored series-monitor-toggle pull-left" title="Toggle monitored state for entire series"/>
<span class="title span5"> <span class="title span5">
<a href="{{route}}"> <a href="{{route}}">
{{title}} {{title}}
@ -26,10 +26,20 @@
</span> </span>
</span> </span>
<button class="btn x-latest">Latest</button> <span class="season-pass-button">
<button class="btn x-latest">Latest</button>
<span class="help-inline"> <span class="help-inline">
<i class="icon-question-sign" title="Will quickly select the latest season as first monitored"/> <i class="icon-question-sign" title="Will quickly select the latest season as first monitored"/>
</span>
</span>
<span class="season-pass-button">
<button class="btn x-all">All</button>
<span class="help-inline">
<i class="icon-question-sign" title="Will quickly select all seasons except for specials to be monitored"/>
</span>
</span> </span>
</div> </div>
</div> </div>

@ -2,7 +2,7 @@
<div class="span11"> <div class="span11">
<div class="row"> <div class="row">
<h1> <h1>
<i class="x-monitored clickable series-monitor-toggle" title="Toggle monitored state for entire series"/> <i class="x-monitored" title="Toggle monitored state for entire series"/>
{{title}} {{title}}
<div class="series-actions pull-right"> <div class="series-actions pull-right">
<div class="x-refresh"> <div class="x-refresh">

@ -274,3 +274,16 @@
font-size : 16px; font-size : 16px;
vertical-align : middle !important; vertical-align : middle !important;
} }
.seasonpass-series {
.season-pass-button {
display: inline-block;
width: 120px;
}
.series-monitor-toggle {
font-size: 24px;
margin-top: 3px;
}
}
Loading…
Cancel
Save