diff --git a/UI/Content/base.less b/UI/Content/base.less
index 36d9a26d6..17a209006 100644
--- a/UI/Content/base.less
+++ b/UI/Content/base.less
@@ -115,8 +115,13 @@ th {
display : block;
}
-a {
+a, .btn {
i {
cursor: pointer;
}
+}
+
+.label-white {
+ color: black;
+ background-color: white;
}
\ No newline at end of file
diff --git a/UI/Series/Details/SeasonLayout.js b/UI/Series/Details/SeasonLayout.js
index 5b2485217..8a9892098 100644
--- a/UI/Series/Details/SeasonLayout.js
+++ b/UI/Series/Details/SeasonLayout.js
@@ -78,6 +78,10 @@ define(
episode.set({ hideSeriesLink: true, series: options.series });
});
+ this.model.on('sync', function () {
+ this._afterSeasonMonitored();
+ }, this);
+
this.episodeCollection.on('sync', function () {
this.render();
}, this);
diff --git a/UI/Series/Details/SeasonLayoutTemplate.html b/UI/Series/Details/SeasonLayoutTemplate.html
index d6aebcd32..eb02bf938 100644
--- a/UI/Series/Details/SeasonLayoutTemplate.html
+++ b/UI/Series/Details/SeasonLayoutTemplate.html
@@ -1,4 +1,4 @@
-
+
{{#if seasonNumber}}
diff --git a/UI/Series/Details/SeasonMenu/CollectionView.js b/UI/Series/Details/SeasonMenu/CollectionView.js
new file mode 100644
index 000000000..f7dd0544a
--- /dev/null
+++ b/UI/Series/Details/SeasonMenu/CollectionView.js
@@ -0,0 +1,31 @@
+'use strict';
+define(
+ [
+ 'marionette',
+ 'Series/Details/SeasonMenu/ItemView'
+ ], function (Marionette, ItemView) {
+ return Marionette.CollectionView.extend({
+
+ itemView: ItemView,
+
+ initialize: function (options) {
+
+ if (!options.episodeCollection) {
+ throw 'episodeCollection is needed';
+ }
+
+ this.episodeCollection = options.episodeCollection;
+ },
+
+ itemViewOptions: function () {
+ return {
+ episodeCollection: this.episodeCollection,
+ };
+ },
+
+ appendHtml: function(collectionView, itemView, index){
+ var childrenContainer = $(collectionView.childrenContainer || collectionView.el);
+ childrenContainer.prepend(itemView.el);
+ }
+ });
+ });
diff --git a/UI/Series/Details/SeasonMenu/ItemView.js b/UI/Series/Details/SeasonMenu/ItemView.js
new file mode 100644
index 000000000..403600c61
--- /dev/null
+++ b/UI/Series/Details/SeasonMenu/ItemView.js
@@ -0,0 +1,88 @@
+'use strict';
+define(
+ [
+ 'marionette',
+ 'Shared/Actioneer'
+ ], function (Marionette, Actioneer) {
+ return Marionette.ItemView.extend({
+ template: 'Series/Details/SeasonMenu/ItemViewTemplate',
+ tagName : 'span',
+
+ ui: {
+ seasonMonitored: '.x-season-monitored'
+ },
+
+ events: {
+ 'click .x-season-monitored': '_seasonMonitored',
+ 'click .x-text': '_gotoSeason'
+ },
+
+ initialize: function (options) {
+
+ if (!options.episodeCollection) {
+ throw 'episodeCollection is needed';
+ }
+
+ this.episodeCollection = options.episodeCollection.bySeason(this.model.get('seasonNumber'));
+
+ var allDownloaded = _.all(this.episodeCollection.models, function (model) {
+ var hasFile = model.get('hasFile');
+ return hasFile;
+ });
+
+ this.model.set({
+ allFilesDownloaded: allDownloaded
+ });
+
+ this.model.on('sync', function () {
+ this.render();
+ }, this);
+ },
+
+ onRender: function () {
+ this._setSeasonMonitoredState();
+ },
+
+ _seasonSearch: function () {
+ Actioneer.ExecuteCommand({
+ command : 'seasonSearch',
+ properties : {
+ seriesId : this.model.get('seriesId'),
+ seasonNumber: this.model.get('seasonNumber')
+ },
+ element : this.ui.seasonSearch,
+ failMessage : 'Search for season {0} failed'.format(this.model.get('seasonNumber')),
+ startMessage: 'Search for season {0} started'.format(this.model.get('seasonNumber'))
+ });
+ },
+
+ _seasonMonitored: function (e) {
+ e.preventDefault();
+
+ var name = 'monitored';
+ this.model.set(name, !this.model.get(name));
+
+ Actioneer.SaveModel({
+ context : this,
+ element : this.ui.seasonMonitored
+ });
+ },
+
+ _setSeasonMonitoredState: function () {
+ this.ui.seasonMonitored.removeClass('icon-spinner icon-spin');
+
+ if (this.model.get('monitored')) {
+ this.ui.seasonMonitored.addClass('icon-bookmark');
+ this.ui.seasonMonitored.removeClass('icon-bookmark-empty');
+ }
+ else {
+ this.ui.seasonMonitored.addClass('icon-bookmark-empty');
+ this.ui.seasonMonitored.removeClass('icon-bookmark');
+ }
+ },
+
+ _gotoSeason: function () {
+ window.location.hash = '#season-' + this.model.get('seasonNumber');
+ }
+ });
+ });
diff --git a/UI/Series/Details/SeasonMenu/ItemViewTemplate.html b/UI/Series/Details/SeasonMenu/ItemViewTemplate.html
new file mode 100644
index 000000000..8b0283ff6
--- /dev/null
+++ b/UI/Series/Details/SeasonMenu/ItemViewTemplate.html
@@ -0,0 +1,14 @@
+{{#if allFilesDownloaded}}
+
+
+
+
-