diff --git a/couchpotato/core/media/show/_base/static/episode.actions.js b/couchpotato/core/media/show/_base/static/episode.actions.js index fc2a0a2..cc46ce3 100755 --- a/couchpotato/core/media/show/_base/static/episode.actions.js +++ b/couchpotato/core/media/show/_base/static/episode.actions.js @@ -2,7 +2,7 @@ var EpisodeAction = new Class({ Implements: [Options], - class_name: 'action icon2', + class_name: 'item-action icon2', initialize: function(episode, options){ var self = this; diff --git a/couchpotato/core/media/show/_base/static/episode.js b/couchpotato/core/media/show/_base/static/episode.js index b7e73f3..92e49cc 100755 --- a/couchpotato/core/media/show/_base/static/episode.js +++ b/couchpotato/core/media/show/_base/static/episode.js @@ -14,7 +14,7 @@ var Episode = new Class({ self.profile = self.show.profile; - self.el = new Element('div.item').adopt( + self.el = new Element('div.item.episode').adopt( self.detail = new Element('div.item.data') ); @@ -34,14 +34,14 @@ var Episode = new Class({ self.quality = new Element('span.quality', { 'events': { 'click': function(e){ - var releases = self.detail.getElement('.episode-actions .releases'); + var releases = self.detail.getElement('.item-actions .releases'); if(releases.isVisible()) releases.fireEvent('click', [e]) } } }), - self.actions = new Element('div.episode-actions') + self.actions = new Element('div.item-actions') ); // Add profile diff --git a/couchpotato/core/media/show/_base/static/season.js b/couchpotato/core/media/show/_base/static/season.js new file mode 100755 index 0000000..0f1cf61 --- /dev/null +++ b/couchpotato/core/media/show/_base/static/season.js @@ -0,0 +1,127 @@ +var Season = new Class({ + + Extends: BlockBase, + + action: {}, + + initialize: function(show, options, data){ + var self = this; + self.setOptions(options); + + self.show = show; + self.options = options; + self.data = data; + + self.profile = self.show.profile; + + self.el = new Element('div.item.season').adopt( + self.detail = new Element('div.item.data') + ); + + self.create(); + }, + + create: function(){ + var self = this; + + self.detail.set('id', 'season_'+self.data._id); + + self.detail.adopt( + new Element('span.name', {'text': self.getTitle()}), + + self.quality = new Element('span.quality', { + 'events': { + 'click': function(e){ + var releases = self.detail.getElement('.item-actions .releases'); + + if(releases.isVisible()) + releases.fireEvent('click', [e]) + } + } + }), + self.actions = new Element('div.item-actions') + ); + + // Add profile + if(self.profile.data) { + self.profile.getTypes().each(function(type){ + var q = self.addQuality(type.get('quality'), type.get('3d')); + + if((type.finish == true || type.get('finish')) && !q.hasClass('finish')){ + q.addClass('finish'); + q.set('title', q.get('title') + ' Will finish searching for this movie if this quality is found.') + } + }); + } + + // Add releases + self.updateReleases(); + + Object.each(self.options.actions, function(action, key){ + self.action[key.toLowerCase()] = action = new self.options.actions[key](self); + if(action.el) + self.actions.adopt(action) + }); + }, + + updateReleases: function(){ + var self = this; + if(!self.data.releases || self.data.releases.length == 0) return; + + self.data.releases.each(function(release){ + + var q = self.quality.getElement('.q_'+ release.quality+(release.is_3d ? '.is_3d' : ':not(.is_3d)')), + status = release.status; + + if(!q && (status == 'snatched' || status == 'seeding' || status == 'done')) + q = self.addQuality(release.quality, release.is_3d || false); + + if (q && !q.hasClass(status)){ + q.addClass(status); + q.set('title', (q.get('title') ? q.get('title') : '') + ' status: '+ status) + } + + }); + }, + + addQuality: function(quality, is_3d){ + var self = this, + q = Quality.getQuality(quality); + + return new Element('span', { + 'text': q.label + (is_3d ? ' 3D' : ''), + 'class': 'q_'+q.identifier + (is_3d ? ' is_3d' : ''), + 'title': '' + }).inject(self.quality); + }, + + getTitle: function(){ + var self = this; + + var title = ''; + + if(self.data.info.number) { + title = 'Season ' + self.data.info.number; + } else { + // Season 0 / Specials + title = 'Specials'; + } + + return title; + }, + + getIdentifier: function(){ + var self = this; + + try { + return self.get('identifiers').imdb; + } + catch (e){ } + + return self.get('imdb'); + }, + + get: function(attr){ + return this.data[attr] || this.data.info[attr] + } +}); \ No newline at end of file diff --git a/couchpotato/core/media/show/_base/static/show.css b/couchpotato/core/media/show/_base/static/show.css index 0b223b7..6430bbe 100755 --- a/couchpotato/core/media/show/_base/static/show.css +++ b/couchpotato/core/media/show/_base/static/show.css @@ -734,6 +734,31 @@ bottom: auto; } + .shows .list .episodes .item.season .data { + padding-top: 4px; + padding-bottom: 4px; + height: auto; + + font-weight: bold; + font-size: 14px; + } + + .shows .list .episodes .item.season .data span.name { + width: 400px; + } + + .shows .list .episodes .item.season .data span.quality { + opacity: 0; + } + + .shows .list .episodes .item.season:hover .data span.quality { + opacity: 0.6; + } + + .shows .list .episodes .item.season .data span.quality:hover { + opacity: 1; + } + .shows .list .episodes .episode-options { display: block; @@ -765,16 +790,44 @@ width: 85px; } - .shows .list .episodes .episode-actions { + .shows .list .episodes .item-actions { position: absolute; width: auto; right: 0; - top: 0; + + display: none; + opacity: 0; border-left: none; } - .shows .list .show .episodes .episode-actions .refresh { + .shows .list .episodes .item:hover .item-actions { + display: inline-block; + opacity: 1; + } + + .shows .list .episodes .item:hover .item-action { + opacity: 0.6; + } + + .shows .list .episodes .item .item-action { + display: inline-block; + height: 22px; + min-width: 33px; + + line-height: 26px; + text-align: center; + font-size: 13px; + + margin-left: 1px; + padding: 0 5px; + } + + .shows .list .episodes .item .item-action:hover { + opacity: 1; + } + + .shows .list .show .episodes .refresh { color: #cbeecc; } diff --git a/couchpotato/core/media/show/_base/static/show.episodes.js b/couchpotato/core/media/show/_base/static/show.episodes.js index 5fa6645..c622e74 100755 --- a/couchpotato/core/media/show/_base/static/show.episodes.js +++ b/couchpotato/core/media/show/_base/static/show.episodes.js @@ -47,21 +47,9 @@ var Episodes = new Class({ createSeason: function(season) { var self = this, - title = ''; + s = new Season(self.show, self.options, season); - if(season.info.number) { - title = 'Season ' + season.info.number; - } else { - // Season 0 / Specials - title = 'Specials'; - } - - season['el'] = new Element('div', { - 'class': 'item head', - 'id': 'season_'+season._id - }).adopt( - new Element('span.name', {'text': title}) - ).inject(self.episodes_container); + $(s).inject(self.episodes_container); }, createEpisode: function(episode){