Browse Source

Merge branch 'develop'

pull/5327/head
Ruud 10 years ago
parent
commit
48601a134d
  1. 46
      couchpotato/core/media/_base/providers/torrent/thepiratebay.py
  2. 14
      couchpotato/core/media/movie/_base/static/details.js
  3. 4
      couchpotato/core/media/movie/_base/static/list.js
  4. 19
      couchpotato/core/media/movie/_base/static/movie.actions.js
  5. 51
      couchpotato/core/media/movie/_base/static/movie.js
  6. 142
      couchpotato/core/media/movie/_base/static/movie.scss
  7. 9
      couchpotato/core/media/movie/charts/__init__.py
  8. 34
      couchpotato/core/media/movie/charts/static/charts.js
  9. 2
      couchpotato/core/media/movie/providers/automation/bluray.py
  10. 3
      couchpotato/core/media/movie/providers/automation/crowdai.py
  11. 2
      couchpotato/core/media/movie/providers/automation/imdb.py
  12. 2
      couchpotato/core/media/movie/providers/automation/popularmovies.py
  13. 6
      couchpotato/core/media/movie/providers/userscript/trakt.py
  14. 24
      couchpotato/core/media/movie/suggestion.py
  15. 25
      couchpotato/core/notifications/pushbullet.py
  16. 2
      couchpotato/core/plugins/base.py
  17. 2
      couchpotato/core/plugins/category/static/category.js
  18. 68
      couchpotato/core/plugins/category/static/category.scss
  19. 2
      couchpotato/core/plugins/profile/static/profile.js
  20. 15
      couchpotato/core/plugins/profile/static/profile.scss
  21. 2
      couchpotato/core/plugins/release/main.py
  22. 52
      couchpotato/core/plugins/userscript/static/userscript.js
  23. 1
      couchpotato/core/plugins/userscript/static/userscript.scss
  24. 12
      couchpotato/static/scripts/combined.base.min.js
  25. 93
      couchpotato/static/scripts/combined.plugins.min.js
  26. 52
      couchpotato/static/scripts/couchpotato.js
  27. 8
      couchpotato/static/scripts/page/settings.js
  28. 152
      couchpotato/static/style/combined.min.css
  29. 7
      couchpotato/static/style/main.scss
  30. 85
      couchpotato/static/style/settings.scss

46
couchpotato/core/media/_base/providers/torrent/thepiratebay.py

@ -2,6 +2,7 @@ import re
import traceback import traceback
from bs4 import BeautifulSoup from bs4 import BeautifulSoup
from couchpotato.core.event import addEvent
from couchpotato.core.helpers.encoding import toUnicode from couchpotato.core.helpers.encoding import toUnicode
from couchpotato.core.helpers.variable import tryInt from couchpotato.core.helpers.variable import tryInt
from couchpotato.core.logger import CPLog from couchpotato.core.logger import CPLog
@ -26,19 +27,40 @@ class Base(TorrentMagnetProvider):
proxy_list = [ proxy_list = [
'https://thepiratebay.mn', 'https://thepiratebay.mn',
'https://thepiratebay.gd', 'https://thepiratebay.gd',
'https://thepiratebay.bg',
'https://thepiratebay.la', 'https://thepiratebay.la',
'https://thepiratebay.am',
'https://thepiratebay.gs',
'http://proxybay.fr',
'http://pirateproxy.in',
'http://proxybay.pw',
'https://pirateproxy.sx', 'https://pirateproxy.sx',
'https://piratebay.host',
'https://thepiratebay.expert',
'https://pirateproxy.wf',
'https://pirateproxy.tf',
'https://urbanproxy.eu',
'https://pirate.guru',
'https://piratebays.co',
'https://pirateproxy.yt',
'https://thepiratebay.uk.net',
'https://tpb.ninja',
'https://thehiddenbay.me',
'https://ukunlocked.com',
'https://thebay.tv',
'https://tpb.freed0m4all.net',
'https://piratebays.eu',
'https://thepirateproxy.co',
'https://thepiratebayz.com',
'https://zaatoka.eu',
'https://piratemirror.net',
'https://theproxypirate.pw',
'https://torrentdr.com',
'https://tpbproxy.co', 'https://tpbproxy.co',
'https://arrr.xyz', 'https://arrr.xyz',
'https://www.cleantpbproxy.com',
'http://tpb.dashitz.com', 'http://tpb.dashitz.com',
] ]
def __init__(self):
super(Base, self).__init__()
addEvent('app.test', self.doTest)
def _search(self, media, quality, results): def _search(self, media, quality, results):
page = 0 page = 0
@ -122,6 +144,18 @@ class Base(TorrentMagnetProvider):
item['description'] = description item['description'] = description
return item return item
def doTest(self):
for url in self.proxy_list:
try:
data = self.urlopen(url + '/search/test+search')
if 'value="test+search"' in data:
log.info('Success %s', url)
continue
except:
log.error('%s', traceback.format_exc(0))
config = [{ config = [{
'name': 'thepiratebay', 'name': 'thepiratebay',

14
couchpotato/core/media/movie/_base/static/details.js

@ -37,9 +37,17 @@ var MovieDetails = new Class({
) )
); );
self.addSection('description', new Element('div', { var eta_date = parent.getETA('%b %Y') ;
'text': parent.get('plot') self.addSection('description', new Element('div').adopt(
})); new Element('div', {
'text': parent.get('plot')
}),
new Element('div.meta', {
'html':
(eta_date ? ('<span>ETA:' + eta_date + '</span>') : '') +
'<span>' + (parent.get('genres') || []).join(', ') + '</span>'
})
));
// Title dropdown // Title dropdown

4
couchpotato/core/media/movie/_base/static/list.js

@ -13,6 +13,7 @@ var MovieList = new Class({
force_view: false force_view: false
}, },
available_views: ['thumb', 'list'],
movies: [], movies: [],
movies_added: {}, movies_added: {},
total_movies: 0, total_movies: 0,
@ -530,6 +531,9 @@ var MovieList = new Class({
changeView: function(new_view){ changeView: function(new_view){
var self = this; var self = this;
if(self.available_views.indexOf(new_view) == -1)
new_view = 'thumb';
self.el self.el
.removeClass(self.current_view+'_list') .removeClass(self.current_view+'_list')
.addClass(new_view+'_list'); .addClass(new_view+'_list');

19
couchpotato/core/media/movie/_base/static/movie.actions.js

@ -400,12 +400,17 @@ MA.Trailer = new Class({
new Request.JSONP({ new Request.JSONP({
'url': url, 'url': url,
'onComplete': function(json){ 'onComplete': function(json){
self.video_id = json.items[0].id.videoId; if(json.items.length > 0){
self.container.grab(new Element('div.background', { self.video_id = json.items[0].id.videoId;
'styles': { self.container.grab(new Element('div.background', {
'background-image': 'url('+json.items[0].snippet.thumbnails.high.url+')' 'styles': {
} 'background-image': 'url('+json.items[0].snippet.thumbnails.high.url+')'
})); }
}));
}
else {
self.container.getParent('.section').addClass('no_trailer');
}
} }
}).send(); }).send();
} }
@ -416,13 +421,13 @@ MA.Trailer = new Class({
watch: function(){ watch: function(){
var self = this; var self = this;
self.container.set('html', '<iframe src="https://www.youtube-nocookie.com/embed/'+self.video_id+'?rel=0&showinfo=0&autoplay=1&showsearch=0&iv_load_policy=3&vq=hd720" />'); self.container.set('html', '<iframe src="https://www.youtube-nocookie.com/embed/'+self.video_id+'?rel=0&showinfo=0&autoplay=1&showsearch=0&iv_load_policy=3&vq=hd720" />');
} }
}); });
MA.Category = new Class({ MA.Category = new Class({
Extends: MovieAction, Extends: MovieAction,

51
couchpotato/core/media/movie/_base/static/movie.js

@ -182,30 +182,11 @@ var Movie = new Class({
}, },
create: function(){ create: function(){
var self = this, var self = this;
d = new Date();
self.el.addClass('status_'+self.get('status')); self.el.addClass('status_'+self.get('status'));
var eta = null, var eta_date = self.getETA();
eta_date = null,
now = Math.round(+d/1000);
if(self.data.info.release_date)
[self.data.info.release_date.dvd, self.data.info.release_date.theater].each(function(timestamp){
if (timestamp > 0 && (eta === null || Math.abs(timestamp - now) < Math.abs(eta - now)))
eta = timestamp;
});
if(eta){
eta_date = new Date(eta * 1000);
if(+eta_date/1000 < now){
eta_date = null;
}
else {
eta_date = eta_date.format('%b') + (d.getFullYear() != eta_date.getFullYear() ? ' ' + eta_date.getFullYear() : '');
}
}
var rating, stars; var rating, stars;
if(['suggested','chart'].indexOf(self.data.status) > -1 && self.data.info && self.data.info.rating && self.data.info.rating.imdb){ if(['suggested','chart'].indexOf(self.data.status) > -1 && self.data.info && self.data.info.rating && self.data.info.rating.imdb){
@ -260,7 +241,7 @@ var Movie = new Class({
'text': self.data.info.year || 'n/a' 'text': self.data.info.year || 'n/a'
}) })
), ),
eta_date && (now+8035200 > eta) ? new Element('div.eta', { eta_date ? new Element('div.eta', {
'text': eta_date, 'text': eta_date,
'title': 'ETA' 'title': 'ETA'
}) : null, }) : null,
@ -429,6 +410,32 @@ var Movie = new Class({
return self.get('imdb'); return self.get('imdb');
}, },
getETA: function(format){
var self = this,
d = new Date(),
now = Math.round(+d/1000),
eta = null,
eta_date = '';
if(self.data.info.release_date)
[self.data.info.release_date.dvd, self.data.info.release_date.theater].each(function(timestamp){
if (timestamp > 0 && (eta === null || Math.abs(timestamp - now) < Math.abs(eta - now)))
eta = timestamp;
});
if(eta){
eta_date = new Date(eta * 1000);
if(+eta_date/1000 < now){
eta_date = null;
}
else {
eta_date = format ? eta_date.format(format) : (eta_date.format('%b') + (d.getFullYear() != eta_date.getFullYear() ? ' ' + eta_date.getFullYear() : ''));
}
}
return (now+8035200 > eta) ? eta_date : '';
},
get: function(attr){ get: function(attr){
return this.data[attr] || this.data.info[attr]; return this.data[attr] || this.data.info[attr];
}, },

142
couchpotato/core/media/movie/_base/static/movie.scss

@ -61,6 +61,10 @@ $mass_edit_height: 44px;
z-index: 2; z-index: 2;
cursor: pointer; cursor: pointer;
@include media-phablet {
display: none;
}
&:hover { &:hover {
opacity: 1 !important; opacity: 1 !important;
} }
@ -115,7 +119,7 @@ $mass_edit_height: 44px;
display: block; display: block;
padding: $padding; padding: $padding;
@include media-phablet { @include media-tablet {
padding: $padding/2; padding: $padding/2;
} }
@ -124,6 +128,15 @@ $mass_edit_height: 44px;
} }
} }
.message {
padding: $padding 0;
text-align: center;
a {
color: $primary_color;
}
}
> .description { > .description {
position: absolute; position: absolute;
top: 0; top: 0;
@ -157,7 +170,7 @@ $mass_edit_height: 44px;
} }
} }
.actions { .movie .actions {
transform: rotateY(360deg); transform: rotateY(360deg);
@include media-phablet { @include media-phablet {
@ -225,7 +238,7 @@ $mass_edit_height: 44px;
flex-flow: row nowrap; flex-flow: row nowrap;
align-items: center; align-items: center;
@include media-phablet { @include media-tablet {
display: block; display: block;
padding: $padding/2; padding: $padding/2;
} }
@ -233,7 +246,7 @@ $mass_edit_height: 44px;
.title { .title {
flex: 1 auto; flex: 1 auto;
@include media-phablet { @include media-tablet {
display: flex; display: flex;
flex-flow: row nowrap; flex-flow: row nowrap;
} }
@ -244,7 +257,7 @@ $mass_edit_height: 44px;
text-overflow: ellipsis; text-overflow: ellipsis;
white-space: nowrap; white-space: nowrap;
@include media-phablet { @include media-tablet {
width: 100%; width: 100%;
} }
@ -272,7 +285,7 @@ $mass_edit_height: 44px;
font-size: .7em; font-size: .7em;
margin: 2px 0 0 2px; margin: 2px 0 0 2px;
@include media-phablet { @include media-tablet {
margin: 2px 2px 0 0; margin: 2px 2px 0 0;
} }
} }
@ -323,7 +336,7 @@ $mass_edit_height: 44px;
&:hover .actions { &:hover .actions {
display: block; display: block;
@include media-phablet { @include media-tablet {
display: none; display: none;
} }
} }
@ -333,6 +346,10 @@ $mass_edit_height: 44px;
&:hover, &.checked { &:hover, &.checked {
.info .title span { .info .title span {
margin-left: $padding; margin-left: $padding;
@include media-tablet {
margin-left: 0;
}
} }
} }
} }
@ -340,6 +357,11 @@ $mass_edit_height: 44px;
.thumb_list { .thumb_list {
$max-split: 20;
$split-jump: 225px;
padding: 0 $padding/4;
> div:last-child { > div:last-child {
padding: 0 ($padding/2)+2px; padding: 0 ($padding/2)+2px;
@include media-phablet { @include media-phablet {
@ -347,47 +369,30 @@ $mass_edit_height: 44px;
} }
} }
@include media-tablet {
padding: 0 $padding/4;
}
@include media-phablet {
padding: 0 $padding/6;
}
> div {
display: flex;
flex-flow: row wrap;
align-items: stretch;
}
.movie { .movie {
display: inline-block;
vertical-align: top;
margin-bottom: $padding; margin-bottom: $padding;
position: relative; position: relative;
cursor: pointer; cursor: pointer;
flex: 1 auto;
width: 150px; width: 150px;
max-width: 16.666666667%;
border: 0 solid transparent; border: 0 solid transparent;
border-width: 0 $padding/2; border-width: 0 $padding/3;
@include media-desktop-plus { @while $max-split > 0 {
max-width: 20%; @media (min-width : $split-jump * ($max-split - 1)) and (max-width : $split-jump * $max-split) {
border-width: 0 $padding/2.5; width: 100% / $max-split;
} }
$max-split: $max-split - 1;
@include media-desktop {
max-width: 33.333%;
border-width: 0 $padding/3;
} }
@include media-tablet { @include media-tablet {
max-width: 50%; width: 33.333%;
border-width: 0 $padding/4; border-width: 0 $padding/4;
} }
@include media-phablet { @include media-phablet {
max-width: 50%; width: 50%;
border-width: 0 $padding/5; border-width: 0 $padding/5;
} }
@ -465,10 +470,9 @@ $mass_edit_height: 44px;
.action { .action {
position: relative; position: relative;
display: block;
margin-bottom: 1px;
width: auto;
margin-right: $padding/2; margin-right: $padding/2;
float: right;
clear: both;
&:first-child { &:first-child {
margin-top: $padding/2; margin-top: $padding/2;
@ -476,7 +480,7 @@ $mass_edit_height: 44px;
a { a {
transition: all 150ms $cubic; transition: all 150ms $cubic;
display: inline-block; display: block;
width: auto; width: auto;
padding: $padding / 3; padding: $padding / 3;
color: #FFF; color: #FFF;
@ -526,7 +530,6 @@ $mass_edit_height: 44px;
border-radius: $border_radius 0 0 $border_radius; border-radius: $border_radius 0 0 $border_radius;
opacity: 0; opacity: 0;
transform: rotateY(360deg); transform: rotateY(360deg);
backface-visibility: hidden;
transition: opacity 300ms ease 400ms; transition: opacity 300ms ease 400ms;
z-index: 1; z-index: 1;
@ -548,7 +551,6 @@ $mass_edit_height: 44px;
width: 100%; width: 100%;
height: 100%; height: 100%;
opacity: 0; opacity: 0;
backface-visibility: hidden;
transition: opacity 300ms ease 200ms; transition: opacity 300ms ease 200ms;
&:before { &:before {
@ -585,6 +587,7 @@ $mass_edit_height: 44px;
padding: 0 $padding; padding: 0 $padding;
position: relative; position: relative;
z-index: 2; z-index: 2;
transform: rotateY(360deg);
@include media-phablet { @include media-phablet {
padding: 0; padding: 0;
@ -746,6 +749,7 @@ $mass_edit_height: 44px;
.section { .section {
padding: $padding; padding: $padding;
border-top: 1px solid rgba(0,0,0,.1); border-top: 1px solid rgba(0,0,0,.1);
transform: rotateY(360deg);
@include media-phablet { @include media-phablet {
padding: $padding/2; padding: $padding/2;
@ -768,7 +772,24 @@ $mass_edit_height: 44px;
.scroll_content { .scroll_content {
transition-delay: 200ms; transition-delay: 200ms;
transform: translateX(0); transform: translateX(0) rotateY(360deg);
}
}
.section_description {
.meta {
text-align: right;
font-style: italic;
font-size: .90em;
span {
display: inline-block;
margin: $padding/2 $padding/2 0;
&:last-child {
margin-right: 0;
}
}
} }
} }
@ -979,6 +1000,10 @@ $mass_edit_height: 44px;
} }
.section_trailer.no_trailer {
display: none;
}
.trailer_container { .trailer_container {
$play-size: 110px; $play-size: 110px;
@ -1085,10 +1110,6 @@ $mass_edit_height: 44px;
.alph_nav { .alph_nav {
position: relative; position: relative;
@include media-phablet {
display: none;
}
.mass_edit_form { .mass_edit_form {
display: flex; display: flex;
background: $background_color; background: $background_color;
@ -1114,6 +1135,10 @@ $mass_edit_height: 44px;
.select { .select {
margin: 0 $padding/2 0 $padding; margin: 0 $padding/2 0 $padding;
@include media-phablet {
margin: 0 $padding/4 0 $padding/2;
}
input, .count { input, .count {
margin-right: $padding/4; margin-right: $padding/4;
} }
@ -1132,6 +1157,11 @@ $mass_edit_height: 44px;
.counter, .more_menu, .actions { .counter, .more_menu, .actions {
float: left; float: left;
.wrapper {
transform-origin: 92% 0;
right: -7px;
}
> a { > a {
display: inline-block; display: inline-block;
width: 30px; width: 30px;
@ -1147,16 +1177,19 @@ $mass_edit_height: 44px;
.counter { .counter {
line-height: $header_height; line-height: $header_height;
padding: 0 $padding/2; padding: 0 $padding/2;
@include media-tablet {
display: none;
}
} }
.actions { .actions {
a { a {
display: none; display: inline-block;
} }
.active { .active {
display: inline-block; display: none;
} }
} }
@ -1164,6 +1197,15 @@ $mass_edit_height: 44px;
.filter { .filter {
.wrapper { .wrapper {
width: 320px; width: 320px;
@include media-phablet {
right: -70px;
transform-origin: 75% 0;
&:before {
right: 83px !important;
}
}
} }
.button { .button {
@ -1188,6 +1230,10 @@ $mass_edit_height: 44px;
background: $background_color; background: $background_color;
border: none; border: none;
border-bottom: 1px solid $theme_off; border-bottom: 1px solid $theme_off;
@include media-phablet {
font-size: 1.2em;
}
} }
} }

9
couchpotato/core/media/movie/charts/__init__.py

@ -14,14 +14,7 @@ config = [{
'type': 'list', 'type': 'list',
'name': 'charts_providers', 'name': 'charts_providers',
'tab': 'display', 'tab': 'display',
'options': [ 'options': [],
{
'name': 'max_items',
'default': 5,
'type': 'int',
'description': 'Maximum number of items displayed from each chart.',
},
],
}, },
], ],
}] }]

34
couchpotato/core/media/movie/charts/static/charts.js

@ -14,28 +14,8 @@ var Charts = new Class({
create: function(){ create: function(){
var self = this; var self = this;
self.el = new Element('div.charts').adopt( self.el = new Element('div.charts').grab(
self.el_no_charts_enabled = new Element('p.no_charts_enabled', { self.el_refresh_container = new Element('div.refresh').grab(
'html': 'Hey, it looks like you have no charts enabled at the moment. If you\'d like some great movie suggestions you can go to <a href="' + App.createUrl('settings/display') + '">settings</a> and turn on some charts of your choice.'
}),
self.el_refresh_container = new Element('div.refresh').adopt(
self.el_refresh_link = new Element('a.refresh.icon2', {
'href': '#',
'events': {
'click': function(e) {
e.preventDefault();
self.el.getElements('.chart').destroy();
self.el_refreshing_text.show();
self.el_refresh_link.hide();
self.api_request = Api.request('charts.view', {
'data': { 'force_update': 1 },
'onComplete': self.fill.bind(self)
});
}
}
}),
self.el_refreshing_text = new Element('span.refreshing', { self.el_refreshing_text = new Element('span.refreshing', {
'text': 'Refreshing charts...' 'text': 'Refreshing charts...'
}) })
@ -52,16 +32,8 @@ var Charts = new Class({
var self = this; var self = this;
self.el_refreshing_text.hide(); self.el_refreshing_text.hide();
self.el_refresh_link.show();
if(!json || json.count === 0){
self.el_no_charts_enabled.show();
self.el_refresh_link.show();
self.el_refreshing_text.hide();
}
else {
self.el_no_charts_enabled.hide();
if(json && json.count > 0){
json.charts.sort(function(a, b) { json.charts.sort(function(a, b) {
return a.order - b.order; return a.order - b.order;
}); });

2
couchpotato/core/media/movie/providers/automation/bluray.py

@ -116,7 +116,7 @@ class Bluray(Automation, RSS):
if not movie_list['list']: if not movie_list['list']:
movie_ids = [] movie_ids = []
max_items = int(self.conf('max_items', section='charts', default=5)) max_items = 10
rss_movies = self.getRSSData(self.rss_url) rss_movies = self.getRSSData(self.rss_url)
for movie in rss_movies: for movie in rss_movies:

3
couchpotato/core/media/movie/providers/automation/crowdai.py

@ -58,7 +58,8 @@ config = [{
'list': 'automation_providers', 'list': 'automation_providers',
'name': 'crowdai_automation', 'name': 'crowdai_automation',
'label': 'CrowdAI', 'label': 'CrowdAI',
'description': 'Imports from any newznab powered NZB providers RSS feed depending on the number of grabs per movie. Go to your newznab site and find the RSS section. Then copy the copy paste the link under "Movies > x264 feed" here.', 'description': ('Imports from any newznab powered NZB providers RSS feed depending on the number of grabs per movie.',
'Go to your newznab site and find the RSS section. Then copy the copy paste the link under "Movies > x264 feed" here.'),
'options': [ 'options': [
{ {
'name': 'automation_enabled', 'name': 'automation_enabled',

2
couchpotato/core/media/movie/providers/automation/imdb.py

@ -181,7 +181,7 @@ class IMDBCharts(IMDBBase):
def getChartList(self): def getChartList(self):
# Nearly identical to 'getIMDBids', but we don't care about minimalMovie and return all movie data (not just id) # Nearly identical to 'getIMDBids', but we don't care about minimalMovie and return all movie data (not just id)
movie_lists = [] movie_lists = []
max_items = int(self.conf('max_items', section = 'charts', default=5)) max_items = 10
for name in self.charts: for name in self.charts:
chart = self.charts[name].copy() chart = self.charts[name].copy()

2
couchpotato/core/media/movie/providers/automation/popularmovies.py

@ -18,7 +18,7 @@ class PopularMovies(Automation):
retrieved_movies = self.getJsonData(self.url) retrieved_movies = self.getJsonData(self.url)
if retrieved_movies: if retrieved_movies:
for movie in retrieved_movies.get('movies'): for movie in retrieved_movies:
imdb_id = movie.get('imdb_id') imdb_id = movie.get('imdb_id')
info = fireEvent('movie.info', identifier = imdb_id, extended = False, merge = True) info = fireEvent('movie.info', identifier = imdb_id, extended = False, merge = True)
if self.isMinimalMovie(info): if self.isMinimalMovie(info):

6
couchpotato/core/media/movie/providers/userscript/trakt.py

@ -5,5 +5,7 @@ autoload = 'Trakt'
class Trakt(UserscriptBase): class Trakt(UserscriptBase):
includes = ['http://trakt.tv/movie/*', 'http://*.trakt.tv/movie/*'] version = 2
excludes = ['http://trakt.tv/movie/*/*', 'http://*.trakt.tv/movie/*/*']
includes = ['*://trakt.tv/movies/*', '*://*.trakt.tv/movies/*']
excludes = ['*://trakt.tv/movies/*/*', '*://*.trakt.tv/movies/*/*']

24
couchpotato/core/media/movie/suggestion.py

@ -23,6 +23,11 @@ class Suggestion(Plugin):
addEvent('app.load', test) addEvent('app.load', test)
def suggestView(self, limit = 6, **kwargs): def suggestView(self, limit = 6, **kwargs):
if self.isDisabled():
return {
'success': True,
'movies': []
}
movies = splitString(kwargs.get('movies', '')) movies = splitString(kwargs.get('movies', ''))
ignored = splitString(kwargs.get('ignored', '')) ignored = splitString(kwargs.get('ignored', ''))
@ -139,3 +144,22 @@ class Suggestion(Plugin):
self.setCache('suggestion_cached', new_suggestions, timeout = 3024000) self.setCache('suggestion_cached', new_suggestions, timeout = 3024000)
return new_suggestions return new_suggestions
config = [{
'name': 'suggestion',
'groups': [
{
'label': 'Suggestions',
'description': 'Displays suggestions on the home page',
'name': 'suggestions',
'tab': 'display',
'options': [
{
'name': 'enabled',
'default': True,
'type': 'enabler',
},
],
},
],
}]

25
couchpotato/core/notifications/pushbullet.py

@ -1,6 +1,3 @@
import base64
import json
from couchpotato.core.helpers.encoding import toUnicode from couchpotato.core.helpers.encoding import toUnicode
from couchpotato.core.helpers.variable import splitString from couchpotato.core.helpers.variable import splitString
from couchpotato.core.logger import CPLog from couchpotato.core.logger import CPLog
@ -20,12 +17,11 @@ class Pushbullet(Notification):
if not data: data = {} if not data: data = {}
# Get all the device IDs linked to this user # Get all the device IDs linked to this user
devices = self.getDevices() or [] devices = self.getDevices() or [None]
successful = 0 successful = 0
for device in devices: for device in devices:
response = self.request( response = self.request(
'pushes', 'pushes',
cache = False,
device_iden = device, device_iden = device,
type = 'note', type = 'note',
title = self.default_title, title = self.default_title,
@ -38,9 +34,8 @@ class Pushbullet(Notification):
log.error('Unable to push notification to Pushbullet device with ID %s' % device) log.error('Unable to push notification to Pushbullet device with ID %s' % device)
for channel in self.getChannels(): for channel in self.getChannels():
response = self.request( self.request(
'pushes', 'pushes',
cache = False,
channel_tag = channel, channel_tag = channel,
type = 'note', type = 'note',
title = self.default_title, title = self.default_title,
@ -55,19 +50,17 @@ class Pushbullet(Notification):
def getChannels(self): def getChannels(self):
return splitString(self.conf('channels')) return splitString(self.conf('channels'))
def request(self, method, cache = True, **kwargs): def request(self, method, **kwargs):
try: try:
base64string = base64.encodestring('%s:' % self.conf('api_key'))[:-1]
headers = { headers = {
'Authorization': 'Basic %s' % base64string 'Access-Token': self.conf('api_key')
} }
if cache: if kwargs.get('device_iden') is None:
return self.getJsonData(self.url % method, headers = headers, data = kwargs) try: del kwargs['device_iden']
else: except: pass
data = self.urlopen(self.url % method, headers = headers, data = kwargs)
return json.loads(data) return self.getJsonData(self.url % method, cache_timeout = -1, headers = headers, data = kwargs)
except Exception as ex: except Exception as ex:
log.error('Pushbullet request failed') log.error('Pushbullet request failed')

2
couchpotato/core/plugins/base.py

@ -33,7 +33,7 @@ class Plugin(object):
_locks = {} _locks = {}
user_agent = 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10.10; rv:34.0) Gecko/20100101 Firefox/34.0' user_agent = 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10.10; rv:40.0) Gecko/20100101 Firefox/40.0'
http_last_use = {} http_last_use = {}
http_last_use_queue = {} http_last_use_queue = {}
http_time_between_calls = 0 http_time_between_calls = 0

2
couchpotato/core/plugins/category/static/category.js

@ -185,7 +185,7 @@ var Category = new Class({
var data = self.data; var data = self.data;
self.el = new Element('div.category').adopt( self.el = new Element('div.category').adopt(
self.delete_button = new Element('span.delete.icon2', { self.delete_button = new Element('span.delete.icon-delete', {
'events': { 'events': {
'click': self.del.bind(self) 'click': self.del.bind(self)
} }

68
couchpotato/core/plugins/category/static/category.scss

@ -10,66 +10,68 @@
.category { .category {
margin-bottom: 20px; margin-bottom: 20px;
position: relative; position: relative;
}
.category > .delete { > .delete {
position: absolute; position: absolute;
padding: 16px; padding: $padding/3 $padding;
right: 0; right: 0;
cursor: pointer; cursor: pointer;
opacity: 0.6; opacity: 0.6;
color: #fd5353; color: #fd5353;
} font-size: 1.5em;
.category > .delete:hover { z-index: 2;
&:hover {
opacity: 1; opacity: 1;
} }
}
.category .ctrlHolder:hover { .ctrlHolder:hover {
background: none; background: none;
} }
.category .formHint { .formHint {
opacity: 0.1; opacity: 0.1;
} }
.category:hover .formHint {
&:hover .formHint {
opacity: 1; opacity: 1;
} }
}
#category_ordering { #category_ordering {
} ul {
#category_ordering ul {
float: left; float: left;
margin: 0; margin: 0;
width: 275px; width: 275px;
padding: 0; padding: 0;
} }
#category_ordering li { li {
cursor: grab; cursor: grab;
border-bottom: 1px solid $theme_off; border-bottom: 1px solid $theme_off;
padding: 5px; padding: 5px;
list-style: none; list-style: none;
}
#category_ordering li:last-child { border: 0; }
#category_ordering li .check { &:last-child { border: 0; }
margin: 2px 10px 0 0;
vertical-align: top;
}
#category_ordering li > span { .check {
display: inline-block; margin: 2px 10px 0 0;
height: 20px; vertical-align: top;
vertical-align: top; }
line-height: 20px;
}
#category_ordering li .handle { > span {
width: 20px; display: inline-block;
float: right; height: 20px;
} vertical-align: top;
line-height: 20px;
}
#category_ordering .formHint { .handle {
width: 20px;
float: right;
}
} }
}

2
couchpotato/core/plugins/profile/static/profile.js

@ -24,7 +24,7 @@ var Profile = new Class({
var data = self.data; var data = self.data;
self.el = new Element('div.profile').adopt( self.el = new Element('div.profile').adopt(
self.delete_button = new Element('span.delete.icon2', { self.delete_button = new Element('span.delete.icon-delete', {
'events': { 'events': {
'click': self.del.bind(self) 'click': self.del.bind(self)
} }

15
couchpotato/core/plugins/profile/static/profile.scss

@ -15,6 +15,21 @@
font-weight: bold; font-weight: bold;
} }
> .delete {
position: absolute;
padding: $padding/3 $padding;
right: 0;
cursor: pointer;
opacity: 0.6;
color: #fd5353;
font-size: 1.5em;
z-index: 2;
&:hover {
opacity: 1;
}
}
.ctrlHolder { .ctrlHolder {
.types { .types {

2
couchpotato/core/plugins/release/main.py

@ -342,7 +342,7 @@ class Release(Plugin):
db.update(rls) db.update(rls)
log_movie = '%s (%s) in %s' % (getTitle(media), media['info'].get('year'), rls['quality']) log_movie = '%s (%s) in %s' % (getTitle(media), media['info'].get('year'), rls['quality'])
snatch_message = 'Snatched "%s": %s' % (data.get('name'), log_movie) snatch_message = 'Snatched "%s": %s from %s' % (data.get('name'), log_movie, (data.get('provider', '') + data.get('provider_extra', '')))
log.info(snatch_message) log.info(snatch_message)
fireEvent('%s.snatched' % data['type'], message = snatch_message, data = media) fireEvent('%s.snatched' % data['type'], message = snatch_message, data = media)

52
couchpotato/core/plugins/userscript/static/userscript.js

@ -71,32 +71,34 @@ var UserscriptSettingTab = new Class({
'label': 'Install the browser extension or bookmarklet', 'label': 'Install the browser extension or bookmarklet',
'description': 'Easily add movies via imdb.com, appletrailers and more' 'description': 'Easily add movies via imdb.com, appletrailers and more'
}).inject(self.settings.tabs.automation.content, 'top').adopt( }).inject(self.settings.tabs.automation.content, 'top').adopt(
new Element('a.userscript.button', { new Element('div').adopt(
'text': 'Install extension', new Element('a.userscript.button', {
'href': 'https://couchpota.to/extension/', 'text': 'Install extension',
'target': '_blank' 'href': 'https://couchpota.to/extension/',
}), 'target': '_blank'
new Element('span.or[text=or]'),
new Element('span.bookmarklet').adopt(
new Element('a.button.green', {
'text': '+CouchPotato',
/* jshint ignore:start */
'href': "javascript:void((function(){var e=document.createElement('script');e.setAttribute('type','text/javascript');e.setAttribute('charset','UTF-8');e.setAttribute('src','" +
host_url + Api.createUrl('userscript.bookmark') +
"?host="+ encodeURI(host_url + Api.createUrl('userscript.get')+randomString()+'/') +
"&r='+Math.random()*99999999);document.body.appendChild(e)})());",
/* jshint ignore:end */
'target': '',
'events': {
'click': function(e){
(e).stop();
alert('Drag it to your bookmark ;)');
}
}
}), }),
new Element('span', { new Element('span.or[text=or]'),
'text': '⇽ Drag this to your bookmarks' new Element('span.bookmarklet').adopt(
}) new Element('a.button.green', {
'text': '+CouchPotato',
/* jshint ignore:start */
'href': "javascript:void((function(){var e=document.createElement('script');e.setAttribute('type','text/javascript');e.setAttribute('charset','UTF-8');e.setAttribute('src','" +
host_url + Api.createUrl('userscript.bookmark') +
"?host="+ encodeURI(host_url + Api.createUrl('userscript.get')+randomString()+'/') +
"&r='+Math.random()*99999999);document.body.appendChild(e)})());",
/* jshint ignore:end */
'target': '',
'events': {
'click': function(e){
(e).stop();
alert('Drag it to your bookmark ;)');
}
}
}),
new Element('span', {
'text': '⇽ Drag this to your bookmarks'
})
)
), ),
new Element('img', { new Element('img', {
'src': 'https://couchpota.to/media/images/userscript.gif' 'src': 'https://couchpota.to/media/images/userscript.gif'

1
couchpotato/core/plugins/userscript/static/userscript.scss

@ -109,6 +109,7 @@
} }
img { img {
clear: both;
margin: $padding; margin: $padding;
width: 100%; width: 100%;
max-width: 600px; max-width: 600px;

12
couchpotato/static/scripts/combined.base.min.js

@ -433,7 +433,7 @@ var CouchPotato = new Class({
}, },
createUserscriptButtons: function() { createUserscriptButtons: function() {
var host_url = window.location.protocol + "//" + window.location.host; var host_url = window.location.protocol + "//" + window.location.host;
return new Element("div.group_userscript").adopt(new Element("a.userscript.button", { return new Element("div.group_userscript").adopt(new Element("div").adopt(new Element("a.userscript.button", {
text: "Install extension", text: "Install extension",
href: "https://couchpota.to/extension/", href: "https://couchpota.to/extension/",
target: "_blank" target: "_blank"
@ -449,7 +449,7 @@ var CouchPotato = new Class({
} }
}), new Element("span", { }), new Element("span", {
text: "⇽ Drag this to your bookmarks" text: "⇽ Drag this to your bookmarks"
})), new Element("img", { }))), new Element("img", {
src: "https://couchpota.to/media/images/userscript.gif" src: "https://couchpota.to/media/images/userscript.gif"
})); }));
}, },
@ -1296,7 +1296,7 @@ Page.Settings = new Class({
hint = new Element("span.hint.more_hint", { hint = new Element("span.hint.more_hint", {
html: group.description[0] html: group.description[0]
}); });
createTooltip(group.description[1]).inject(hint, "top"); createTooltip(group.description[1]).inject(hint);
} else { } else {
hint = new Element("span.hint", { hint = new Element("span.hint", {
html: group.description || "" html: group.description || ""
@ -1362,7 +1362,7 @@ var OptionBase = new Class({
var hint = new Element("p.formHint.more_hint", { var hint = new Element("p.formHint.more_hint", {
html: self.options.description[0] html: self.options.description[0]
}).inject(self.el); }).inject(self.el);
createTooltip(self.options.description[1]).inject(hint, "top"); createTooltip(self.options.description[1]).inject(hint);
} else { } else {
new Element("p.formHint", { new Element("p.formHint", {
html: self.options.description || "" html: self.options.description || ""
@ -1771,7 +1771,7 @@ Option.Directories = new Class({
$(dir).getElement(".formHint").destroy(); $(dir).getElement(".formHint").destroy();
$(dir).addClass("multi_directory"); $(dir).addClass("multi_directory");
if (!value) $(dir).addClass("is_empty"); if (!value) $(dir).addClass("is_empty");
new Element("a.icon2.delete", { new Element("a.icon-delete.delete", {
events: { events: {
click: self.delItem.bind(self, dir) click: self.delItem.bind(self, dir)
} }
@ -1954,7 +1954,7 @@ var createTooltip = function(description) {
tip.removeClass("shown"); tip.removeClass("shown");
} }
} }
}).adopt(new Element("a.icon2.info"), new Element("div.tip", { }).adopt(new Element("a.icon-info.info"), new Element("div.tip", {
html: description html: description
})); }));
return tip; return tip;

93
couchpotato/static/scripts/combined.plugins.min.js

@ -338,9 +338,12 @@ var MovieDetails = new Class({
button_text: parent.getTitle() + (parent.get("year") ? " (" + parent.get("year") + ")" : ""), button_text: parent.getTitle() + (parent.get("year") ? " (" + parent.get("year") + ")" : ""),
button_class: "icon-dropdown" button_class: "icon-dropdown"
})), self.buttons = new Element("div.buttons")))); })), self.buttons = new Element("div.buttons"))));
self.addSection("description", new Element("div", { var eta_date = parent.getETA("%b %Y");
self.addSection("description", new Element("div").adopt(new Element("div", {
text: parent.get("plot") text: parent.get("plot")
})); }), new Element("div.meta", {
html: (eta_date ? "<span>ETA:" + eta_date + "</span>" : "") + "<span>" + (parent.get("genres") || []).join(", ") + "</span>"
})));
var titles = parent.get("info").titles; var titles = parent.get("info").titles;
$(self.title_dropdown).addEvents({ $(self.title_dropdown).addEvents({
"click:relay(li a)": function(e, el) { "click:relay(li a)": function(e, el) {
@ -437,6 +440,7 @@ var MovieList = new Class({
add_new: false, add_new: false,
force_view: false force_view: false
}, },
available_views: [ "thumb", "list" ],
movies: [], movies: [],
movies_added: {}, movies_added: {},
total_movies: 0, total_movies: 0,
@ -807,6 +811,7 @@ var MovieList = new Class({
}, },
changeView: function(new_view) { changeView: function(new_view) {
var self = this; var self = this;
if (self.available_views.indexOf(new_view) == -1) new_view = "thumb";
self.el.removeClass(self.current_view + "_list").addClass(new_view + "_list"); self.el.removeClass(self.current_view + "_list").addClass(new_view + "_list");
self.current_view = new_view; self.current_view = new_view;
Cookie.write(self.options.identifier + "_view", new_view, { Cookie.write(self.options.identifier + "_view", new_view, {
@ -1305,12 +1310,16 @@ MA.Trailer = new Class({
new Request.JSONP({ new Request.JSONP({
url: url, url: url,
onComplete: function(json) { onComplete: function(json) {
self.video_id = json.items[0].id.videoId; if (json.items.length > 0) {
self.container.grab(new Element("div.background", { self.video_id = json.items[0].id.videoId;
styles: { self.container.grab(new Element("div.background", {
"background-image": "url(" + json.items[0].snippet.thumbnails.high.url + ")" styles: {
} "background-image": "url(" + json.items[0].snippet.thumbnails.high.url + ")"
})); }
}));
} else {
self.container.getParent(".section").addClass("no_trailer");
}
} }
}).send(); }).send();
} }
@ -1878,20 +1887,9 @@ var Movie = new Class({
self.busy(false); self.busy(false);
}, },
create: function() { create: function() {
var self = this, d = new Date(); var self = this;
self.el.addClass("status_" + self.get("status")); self.el.addClass("status_" + self.get("status"));
var eta = null, eta_date = null, now = Math.round(+d / 1e3); var eta_date = self.getETA();
if (self.data.info.release_date) [ self.data.info.release_date.dvd, self.data.info.release_date.theater ].each(function(timestamp) {
if (timestamp > 0 && (eta === null || Math.abs(timestamp - now) < Math.abs(eta - now))) eta = timestamp;
});
if (eta) {
eta_date = new Date(eta * 1e3);
if (+eta_date / 1e3 < now) {
eta_date = null;
} else {
eta_date = eta_date.format("%b") + (d.getFullYear() != eta_date.getFullYear() ? " " + eta_date.getFullYear() : "");
}
}
var rating, stars; var rating, stars;
if ([ "suggested", "chart" ].indexOf(self.data.status) > -1 && self.data.info && self.data.info.rating && self.data.info.rating.imdb) { if ([ "suggested", "chart" ].indexOf(self.data.status) > -1 && self.data.info && self.data.info.rating && self.data.info.rating.imdb) {
rating = self.data.info.rating.imdb; rating = self.data.info.rating.imdb;
@ -1922,7 +1920,7 @@ var Movie = new Class({
text: self.getTitle() || "n/a" text: self.getTitle() || "n/a"
}), new Element("div.year", { }), new Element("div.year", {
text: self.data.info.year || "n/a" text: self.data.info.year || "n/a"
})), eta_date && now + 8035200 > eta ? new Element("div.eta", { })), eta_date ? new Element("div.eta", {
text: eta_date, text: eta_date,
title: "ETA" title: "ETA"
}) : null, self.quality = new Element("div.quality"), rating ? new Element("div.rating[title=" + rating[0] + "]").adopt(stars, new Element("span.votes[text=(" + rating.join(" / ") + ")][title=Votes]")) : null)); }) : null, self.quality = new Element("div.quality"), rating ? new Element("div.rating[title=" + rating[0] + "]").adopt(stars, new Element("span.votes[text=(" + rating.join(" / ") + ")][title=Votes]")) : null));
@ -2032,6 +2030,21 @@ var Movie = new Class({
} catch (e) {} } catch (e) {}
return self.get("imdb"); return self.get("imdb");
}, },
getETA: function(format) {
var self = this, d = new Date(), now = Math.round(+d / 1e3), eta = null, eta_date = "";
if (self.data.info.release_date) [ self.data.info.release_date.dvd, self.data.info.release_date.theater ].each(function(timestamp) {
if (timestamp > 0 && (eta === null || Math.abs(timestamp - now) < Math.abs(eta - now))) eta = timestamp;
});
if (eta) {
eta_date = new Date(eta * 1e3);
if (+eta_date / 1e3 < now) {
eta_date = null;
} else {
eta_date = format ? eta_date.format(format) : eta_date.format("%b") + (d.getFullYear() != eta_date.getFullYear() ? " " + eta_date.getFullYear() : "");
}
}
return now + 8035200 > eta ? eta_date : "";
},
get: function(attr) { get: function(attr) {
return this.data[attr] || this.data.info[attr]; return this.data[attr] || this.data.info[attr];
}, },
@ -2349,25 +2362,7 @@ var Charts = new Class({
}, },
create: function() { create: function() {
var self = this; var self = this;
self.el = new Element("div.charts").adopt(self.el_no_charts_enabled = new Element("p.no_charts_enabled", { self.el = new Element("div.charts").grab(self.el_refresh_container = new Element("div.refresh").grab(self.el_refreshing_text = new Element("span.refreshing", {
html: "Hey, it looks like you have no charts enabled at the moment. If you'd like some great movie suggestions you can go to <a href=\"" + App.createUrl("settings/display") + '">settings</a> and turn on some charts of your choice.'
}), self.el_refresh_container = new Element("div.refresh").adopt(self.el_refresh_link = new Element("a.refresh.icon2", {
href: "#",
events: {
click: function(e) {
e.preventDefault();
self.el.getElements(".chart").destroy();
self.el_refreshing_text.show();
self.el_refresh_link.hide();
self.api_request = Api.request("charts.view", {
data: {
force_update: 1
},
onComplete: self.fill.bind(self)
});
}
}
}), self.el_refreshing_text = new Element("span.refreshing", {
text: "Refreshing charts..." text: "Refreshing charts..."
}))); })));
self.show(); self.show();
@ -2376,13 +2371,7 @@ var Charts = new Class({
fill: function(json) { fill: function(json) {
var self = this; var self = this;
self.el_refreshing_text.hide(); self.el_refreshing_text.hide();
self.el_refresh_link.show(); if (json && json.count > 0) {
if (!json || json.count === 0) {
self.el_no_charts_enabled.show();
self.el_refresh_link.show();
self.el_refreshing_text.hide();
} else {
self.el_no_charts_enabled.hide();
json.charts.sort(function(a, b) { json.charts.sort(function(a, b) {
return a.order - b.order; return a.order - b.order;
}); });
@ -2833,7 +2822,7 @@ var Category = new Class({
create: function() { create: function() {
var self = this; var self = this;
var data = self.data; var data = self.data;
self.el = new Element("div.category").adopt(self.delete_button = new Element("span.delete.icon2", { self.el = new Element("div.category").adopt(self.delete_button = new Element("span.delete.icon-delete", {
events: { events: {
click: self.del.bind(self) click: self.del.bind(self)
} }
@ -3178,7 +3167,7 @@ var Profile = new Class({
create: function() { create: function() {
var self = this; var self = this;
var data = self.data; var data = self.data;
self.el = new Element("div.profile").adopt(self.delete_button = new Element("span.delete.icon2", { self.el = new Element("div.profile").adopt(self.delete_button = new Element("span.delete.icon-delete", {
events: { events: {
click: self.del.bind(self) click: self.del.bind(self)
} }
@ -3656,7 +3645,7 @@ var UserscriptSettingTab = new Class({
name: "userscript", name: "userscript",
label: "Install the browser extension or bookmarklet", label: "Install the browser extension or bookmarklet",
description: "Easily add movies via imdb.com, appletrailers and more" description: "Easily add movies via imdb.com, appletrailers and more"
}).inject(self.settings.tabs.automation.content, "top").adopt(new Element("a.userscript.button", { }).inject(self.settings.tabs.automation.content, "top").adopt(new Element("div").adopt(new Element("a.userscript.button", {
text: "Install extension", text: "Install extension",
href: "https://couchpota.to/extension/", href: "https://couchpota.to/extension/",
target: "_blank" target: "_blank"
@ -3672,7 +3661,7 @@ var UserscriptSettingTab = new Class({
} }
}), new Element("span", { }), new Element("span", {
text: "⇽ Drag this to your bookmarks" text: "⇽ Drag this to your bookmarks"
})), new Element("img", { }))), new Element("img", {
src: "https://couchpota.to/media/images/userscript.gif" src: "https://couchpota.to/media/images/userscript.gif"
})); }));
}); });

52
couchpotato/static/scripts/couchpotato.js

@ -395,32 +395,34 @@
var host_url = window.location.protocol + '//' + window.location.host; var host_url = window.location.protocol + '//' + window.location.host;
return new Element('div.group_userscript').adopt( return new Element('div.group_userscript').adopt(
new Element('a.userscript.button', { new Element('div').adopt(
'text': 'Install extension', new Element('a.userscript.button', {
'href': 'https://couchpota.to/extension/', 'text': 'Install extension',
'target': '_blank' 'href': 'https://couchpota.to/extension/',
}), 'target': '_blank'
new Element('span.or[text=or]'),
new Element('span.bookmarklet').adopt(
new Element('a.button', {
'text': '+CouchPotato',
/* jshint ignore:start */
'href': "javascript:void((function(){var e=document.createElement('script');e.setAttribute('type','text/javascript');e.setAttribute('charset','UTF-8');e.setAttribute('src','" +
host_url + Api.createUrl('userscript.bookmark') +
"?host="+ encodeURI(host_url + Api.createUrl('userscript.get')+randomString()+'/') +
"&r='+Math.random()*99999999);document.body.appendChild(e)})());",
/* jshint ignore:end */
'target': '',
'events': {
'click': function(e){
(e).stop();
alert('Drag it to your bookmark ;)');
}
}
}), }),
new Element('span', { new Element('span.or[text=or]'),
'text': '⇽ Drag this to your bookmarks' new Element('span.bookmarklet').adopt(
}) new Element('a.button', {
'text': '+CouchPotato',
/* jshint ignore:start */
'href': "javascript:void((function(){var e=document.createElement('script');e.setAttribute('type','text/javascript');e.setAttribute('charset','UTF-8');e.setAttribute('src','" +
host_url + Api.createUrl('userscript.bookmark') +
"?host="+ encodeURI(host_url + Api.createUrl('userscript.get')+randomString()+'/') +
"&r='+Math.random()*99999999);document.body.appendChild(e)})());",
/* jshint ignore:end */
'target': '',
'events': {
'click': function(e){
(e).stop();
alert('Drag it to your bookmark ;)');
}
}
}),
new Element('span', {
'text': '⇽ Drag this to your bookmarks'
})
)
), ),
new Element('img', { new Element('img', {
'src': 'https://couchpota.to/media/images/userscript.gif' 'src': 'https://couchpota.to/media/images/userscript.gif'

8
couchpotato/static/scripts/page/settings.js

@ -291,7 +291,7 @@ Page.Settings = new Class({
'html': group.description[0] 'html': group.description[0]
}); });
createTooltip(group.description[1]).inject(hint, 'top'); createTooltip(group.description[1]).inject(hint);
} }
else { else {
hint = new Element('span.hint', { hint = new Element('span.hint', {
@ -386,7 +386,7 @@ var OptionBase = new Class({
'html': self.options.description[0] 'html': self.options.description[0]
}).inject(self.el); }).inject(self.el);
createTooltip(self.options.description[1]).inject(hint, 'top'); createTooltip(self.options.description[1]).inject(hint);
} }
else { else {
new Element('p.formHint', { new Element('p.formHint', {
@ -992,7 +992,7 @@ Option.Directories = new Class({
$(dir).addClass('is_empty'); $(dir).addClass('is_empty');
// Add remove button // Add remove button
new Element('a.icon2.delete', { new Element('a.icon-delete.delete', {
'events': { 'events': {
'click': self.delItem.bind(self, dir) 'click': self.delItem.bind(self, dir)
} }
@ -1249,7 +1249,7 @@ var createTooltip = function(description){
} }
} }
}).adopt( }).adopt(
new Element('a.icon2.info'), new Element('a.icon-info.info'),
new Element('div.tip', { new Element('div.tip', {
'html': description 'html': description
}) })

152
couchpotato/static/style/combined.min.css

@ -102,6 +102,8 @@
.page.movies_manage .empty_manage .after_manage,.page.movies_wanted .empty_manage .after_manage{margin-top:20px} .page.movies_manage .empty_manage .after_manage,.page.movies_wanted .empty_manage .after_manage{margin-top:20px}
.movie .ripple,.movie input[type=checkbox]{display:none} .movie .ripple,.movie input[type=checkbox]{display:none}
.with_navigation .movie input[type=checkbox]{display:inline-block;position:absolute;transition:opacity 200ms;opacity:0;z-index:2;cursor:pointer} .with_navigation .movie input[type=checkbox]{display:inline-block;position:absolute;transition:opacity 200ms;opacity:0;z-index:2;cursor:pointer}
@media (max-width:480px){.with_navigation .movie input[type=checkbox]{display:none}
}
.with_navigation .movie input[type=checkbox]:hover{opacity:1!important} .with_navigation .movie input[type=checkbox]:hover{opacity:1!important}
.with_navigation .movie:hover input[type=checkbox]{opacity:.5} .with_navigation .movie:hover input[type=checkbox]{opacity:.5}
.with_navigation .movie.checked input[type=checkbox]{opacity:1} .with_navigation .movie.checked input[type=checkbox]{opacity:1}
@ -111,11 +113,14 @@
.movie .quality span.available{color:#009902;border-color:#009902;background:#FFF} .movie .quality span.available{color:#009902;border-color:#009902;background:#FFF}
.movie .quality span.snatched{background:#568f99;color:#FFF} .movie .quality span.snatched{background:#568f99;color:#FFF}
.movie .quality span.done,.movie .quality span.downloaded{background:#009902;color:#FFF} .movie .quality span.done,.movie .quality span.downloaded{background:#009902;color:#FFF}
.movies .message a,.movies .no_movies a{color:#ac0000}
.movie .rating .votes{opacity:.7;margin-left:4px} .movie .rating .votes{opacity:.7;margin-left:4px}
.movie.status_suggested .quality{display:none} .movie.status_suggested .quality{display:none}
.movies{position:relative} .movies{position:relative}
.movies .no_movies{display:block;padding:20px} .movies .no_movies{display:block;padding:20px}
.movies .no_movies a{color:#ac0000} @media (max-width:768px){.movies .no_movies{padding:10px}
}
.movies .message{padding:20px 0;text-align:center}
.movies>.description{position:absolute;top:0;right:20px;width:auto;line-height:80px} .movies>.description{position:absolute;top:0;right:20px;width:auto;line-height:80px}
@media (max-width:768px){.movies>.description{display:none} @media (max-width:768px){.movies>.description{display:none}
} }
@ -123,13 +128,8 @@
.movies>.loading{background:#FFF} .movies>.loading{background:#FFF}
.movies>.loading .message{color:#000} .movies>.loading .message{color:#000}
.movies>.loading .spinner{background-color:#000} .movies>.loading .spinner{background-color:#000}
.movies .actions{-webkit-transform:rotateY(360deg);transform:rotateY(360deg)} .movies .movie .actions{-webkit-transform:rotateY(360deg);transform:rotateY(360deg)}
@media (max-width:480px){.movies .no_movies{padding:10px}
.movies .actions{pointer-events:none}
}
.movies .progress div{width:50%;padding:5px 10px;display:-webkit-flex;display:-ms-flexbox;display:flex} .movies .progress div{width:50%;padding:5px 10px;display:-webkit-flex;display:-ms-flexbox;display:flex}
@media (max-width:768px){.movies .progress div{width:100%}
}
.movies .progress div .folder{-webkit-flex:1 auto;-ms-flex:1 auto;flex:1 auto;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;margin-right:10px} .movies .progress div .folder{-webkit-flex:1 auto;-ms-flex:1 auto;flex:1 auto;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;margin-right:10px}
.movies .progress div .percentage{font-weight:700} .movies .progress div .percentage{font-weight:700}
.list_list{font-weight:300} .list_list{font-weight:300}
@ -138,11 +138,11 @@
.list_list .movie:hover{background:rgba(0,0,0,.1)} .list_list .movie:hover{background:rgba(0,0,0,.1)}
.list_list .movie input[type=checkbox]{left:20px;top:50%;-webkit-transform:translateY(-50%);transform:translateY(-50%)} .list_list .movie input[type=checkbox]{left:20px;top:50%;-webkit-transform:translateY(-50%);transform:translateY(-50%)}
.list_list .movie .poster{display:none} .list_list .movie .poster{display:none}
.list_list .movie .info,.thumb_list>div{display:-webkit-flex;display:-ms-flexbox} .list_list .movie .info{padding:10px 20px;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-flex-flow:row nowrap;-ms-flex-flow:row nowrap;flex-flow:row nowrap;-webkit-align-items:center;-ms-flex-align:center;align-items:center}
.list_list .movie .info{padding:10px 20px;display:flex;-webkit-flex-flow:row nowrap;-ms-flex-flow:row nowrap;flex-flow:row nowrap;-webkit-align-items:center;-ms-flex-align:center;align-items:center}
.list_list .movie .info .title{-webkit-flex:1 auto;-ms-flex:1 auto;flex:1 auto} .list_list .movie .info .title{-webkit-flex:1 auto;-ms-flex:1 auto;flex:1 auto}
.list_list .movie .info .title span{transition:margin 200ms cubic-bezier(.9,0,.1,1);overflow:hidden;text-overflow:ellipsis;white-space:nowrap} .list_list .movie .info .title span{transition:margin 200ms cubic-bezier(.9,0,.1,1);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
@media (max-width:480px){.list_list .movie .info{display:block;padding:10px} @media (max-width:768px){.movies .progress div{width:100%}
.list_list .movie .info{display:block;padding:10px}
.list_list .movie .info .title{display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-flex-flow:row nowrap;-ms-flex-flow:row nowrap;flex-flow:row nowrap} .list_list .movie .info .title{display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-flex-flow:row nowrap;-ms-flex-flow:row nowrap;flex-flow:row nowrap}
.list_list .movie .info .title span{width:100%} .list_list .movie .info .title span{width:100%}
} }
@ -157,24 +157,59 @@
.list_list .movie .actions a .icon,.list_list .movie .actions a:before{display:none} .list_list .movie .actions a .icon,.list_list .movie .actions a:before{display:none}
.list_list .movie .actions a:hover{color:#ac0000} .list_list .movie .actions a:hover{color:#ac0000}
.list_list .movie:hover .actions{display:block} .list_list .movie:hover .actions{display:block}
@media (max-width:480px){.list_list .movie .info .quality span{margin:2px 2px 0 0} @media (max-width:768px){.list_list .movie .info .quality span{margin:2px 2px 0 0}
.list_list .movie:hover .actions{display:none} .list_list .movie:hover .actions{display:none}
} }
.list_list.with_navigation .movie.checked .info .title span,.list_list.with_navigation .movie:hover .info .title span{margin-left:20px} .list_list.with_navigation .movie.checked .info .title span,.list_list.with_navigation .movie:hover .info .title span{margin-left:20px}
.thumb_list{padding:0 5px}
.thumb_list>div:last-child{padding:0 12px} .thumb_list>div:last-child{padding:0 12px}
@media (max-width:480px){.thumb_list>div:last-child{padding:0 3.33px} .thumb_list .movie{display:inline-block;vertical-align:top;margin-bottom:20px;position:relative;cursor:pointer;width:150px;border:0 solid transparent;border-width:0 6.67px}
@media (min-width:4275px) and (max-width:4500px){.thumb_list .movie{width:5%}
}
@media (min-width:4050px) and (max-width:4275px){.thumb_list .movie{width:5.26316%}
}
@media (min-width:3825px) and (max-width:4050px){.thumb_list .movie{width:5.55556%}
}
@media (min-width:3600px) and (max-width:3825px){.thumb_list .movie{width:5.88235%}
}
@media (min-width:3375px) and (max-width:3600px){.thumb_list .movie{width:6.25%}
}
@media (min-width:3150px) and (max-width:3375px){.thumb_list .movie{width:6.66667%}
}
@media (min-width:2925px) and (max-width:3150px){.thumb_list .movie{width:7.14286%}
}
@media (min-width:2700px) and (max-width:2925px){.thumb_list .movie{width:7.69231%}
}
@media (min-width:2475px) and (max-width:2700px){.thumb_list .movie{width:8.33333%}
}
@media (min-width:2250px) and (max-width:2475px){.thumb_list .movie{width:9.09091%}
}
@media (min-width:2025px) and (max-width:2250px){.thumb_list .movie{width:10%}
}
@media (min-width:1800px) and (max-width:2025px){.thumb_list .movie{width:11.11111%}
} }
.thumb_list>div{display:flex;-webkit-flex-flow:row wrap;-ms-flex-flow:row wrap;flex-flow:row wrap;-webkit-align-items:stretch;-ms-flex-align:stretch;align-items:stretch} @media (min-width:1575px) and (max-width:1800px){.thumb_list .movie{width:12.5%}
.thumb_list .movie{margin-bottom:20px;position:relative;cursor:pointer;-webkit-flex:1 auto;-ms-flex:1 auto;flex:1 auto;width:150px;max-width:16.666666667%;border:0 solid transparent;border-width:0 10px}
@media (max-width:1382px){.thumb_list .movie{max-width:20%;border-width:0 8px}
} }
@media (max-width:1024px){.thumb_list .movie{max-width:33.333%;border-width:0 6.67px} @media (min-width:1350px) and (max-width:1575px){.thumb_list .movie{width:14.28571%}
} }
@media (max-width:768px){.thumb_list{padding:0 5px} @media (min-width:1125px) and (max-width:1350px){.thumb_list .movie{width:16.66667%}
.thumb_list .movie{max-width:50%;border-width:0 5px}
} }
@media (max-width:480px){.thumb_list{padding:0 3.33px} @media (min-width:900px) and (max-width:1125px){.thumb_list .movie{width:20%}
.thumb_list .movie{max-width:50%;border-width:0 4px} }
@media (min-width:675px) and (max-width:900px){.thumb_list .movie{width:25%}
}
@media (min-width:450px) and (max-width:675px){.thumb_list .movie{width:33.33333%}
}
@media (min-width:225px) and (max-width:450px){.thumb_list .movie{width:50%}
}
@media (min-width:0px) and (max-width:225px){.thumb_list .movie{width:100%}
}
@media (max-width:768px){.list_list.with_navigation .movie.checked .info .title span,.list_list.with_navigation .movie:hover .info .title span{margin-left:0}
.thumb_list .movie{width:33.333%;border-width:0 5px}
}
@media (max-width:480px){.movies .movie .actions{pointer-events:none}
.thumb_list>div:last-child{padding:0 3.33px}
.thumb_list .movie{width:50%;border-width:0 4px}
} }
.thumb_list .movie input[type=checkbox]{top:10px;left:10px} .thumb_list .movie input[type=checkbox]{top:10px;left:10px}
.thumb_list .movie .poster_container{border-radius:3px;position:relative;width:100%;padding-bottom:150%;overflow:hidden} .thumb_list .movie .poster_container{border-radius:3px;position:relative;width:100%;padding-bottom:150%;overflow:hidden}
@ -187,9 +222,9 @@
.thumb_list .movie .info .quality{white-space:nowrap;overflow:hidden} .thumb_list .movie .info .quality{white-space:nowrap;overflow:hidden}
.thumb_list .movie .info .quality span{font-size:.8em;margin-right:2px} .thumb_list .movie .info .quality span{font-size:.8em;margin-right:2px}
.thumb_list .movie .actions{background-image:linear-gradient(25deg,rgba(172,0,0,0) 0,#ac0000 80%);transition:opacity 400ms;opacity:0;position:absolute;top:0;right:0;bottom:0;left:0;text-align:right} .thumb_list .movie .actions{background-image:linear-gradient(25deg,rgba(172,0,0,0) 0,#ac0000 80%);transition:opacity 400ms;opacity:0;position:absolute;top:0;right:0;bottom:0;left:0;text-align:right}
.thumb_list .movie .actions .action{position:relative;display:block;margin-bottom:1px;width:auto;margin-right:10px} .thumb_list .movie .actions .action{position:relative;margin-right:10px;float:right;clear:both}
.thumb_list .movie .actions .action:first-child{margin-top:10px} .thumb_list .movie .actions .action:first-child{margin-top:10px}
.thumb_list .movie .actions .action a{transition:all 150ms cubic-bezier(.9,0,.1,1);display:inline-block;width:auto;padding:6.67px;color:#FFF;border-radius:2px} .thumb_list .movie .actions .action a{transition:all 150ms cubic-bezier(.9,0,.1,1);display:block;width:auto;padding:6.67px;color:#FFF;border-radius:2px}
.thumb_list .movie .actions .action a:hover{background:#FFF;color:#ac0000} .thumb_list .movie .actions .action a:hover{background:#FFF;color:#ac0000}
.thumb_list .movie:hover .actions{opacity:1} .thumb_list .movie:hover .actions{opacity:1}
.thumb_list .movie .mask{bottom:44px;border-radius:3px;transition:opacity 30ms} .thumb_list .movie .mask{bottom:44px;border-radius:3px;transition:opacity 30ms}
@ -197,15 +232,15 @@
@media (max-width:480px){.thumb_list .movie:hover .actions{display:none} @media (max-width:480px){.thumb_list .movie:hover .actions{display:none}
.page.movie_details{left:0} .page.movie_details{left:0}
} }
.page.movie_details .overlay{position:fixed;top:0;bottom:0;right:0;left:132px;background:rgba(0,0,0,.6);border-radius:3px 0 0 3px;opacity:0;-webkit-transform:rotateY(360deg);transform:rotateY(360deg);-webkit-backface-visibility:hidden;backface-visibility:hidden;transition:opacity 300ms ease 400ms;z-index:1} .page.movie_details .overlay{position:fixed;top:0;bottom:0;right:0;left:132px;background:rgba(0,0,0,.6);border-radius:3px 0 0 3px;opacity:0;-webkit-transform:rotateY(360deg);transform:rotateY(360deg);transition:opacity 300ms ease 400ms;z-index:1}
.page.movie_details .overlay .ripple{background:#FFF} .page.movie_details .overlay .ripple{background:#FFF}
.page.movie_details .overlay .close{display:inline-block;text-align:center;font-size:60px;line-height:80px;color:#FFF;width:100%;height:100%;opacity:0;-webkit-backface-visibility:hidden;backface-visibility:hidden;transition:opacity 300ms ease 200ms} .page.movie_details .overlay .close{display:inline-block;text-align:center;font-size:60px;line-height:80px;color:#FFF;width:100%;height:100%;opacity:0;transition:opacity 300ms ease 200ms}
.page.movie_details .overlay .close:before{display:block;width:44px} .page.movie_details .overlay .close:before{display:block;width:44px}
@media (max-width:480px){.page.movie_details .overlay{left:0;border-radius:0} @media (max-width:480px){.page.movie_details .overlay{left:0;border-radius:0}
.page.movie_details .overlay .close{width:44px} .page.movie_details .overlay .close{width:44px}
} }
.page.movie_details .scroll_content{position:fixed;z-index:2;top:0;bottom:0;right:0;left:176px;background:#FFF;border-radius:3px 0 0 3px;overflow-y:auto;-webkit-transform:translateX(100%) rotateY(360deg);transform:translateX(100%) rotateY(360deg);transition:-webkit-transform 350ms cubic-bezier(.9,0,.1,1);transition:transform 350ms cubic-bezier(.9,0,.1,1)} .page.movie_details .scroll_content{position:fixed;z-index:2;top:0;bottom:0;right:0;left:176px;background:#FFF;border-radius:3px 0 0 3px;overflow-y:auto;-webkit-transform:translateX(100%) rotateY(360deg);transform:translateX(100%) rotateY(360deg);transition:-webkit-transform 350ms cubic-bezier(.9,0,.1,1);transition:transform 350ms cubic-bezier(.9,0,.1,1)}
.page.movie_details .scroll_content>.head{display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-flex-flow:row wrap;-ms-flex-flow:row wrap;flex-flow:row wrap;padding:0 20px;position:relative;z-index:2} .page.movie_details .scroll_content>.head{display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-flex-flow:row wrap;-ms-flex-flow:row wrap;flex-flow:row wrap;padding:0 20px;position:relative;z-index:2;-webkit-transform:rotateY(360deg);transform:rotateY(360deg)}
.page.movie_details .scroll_content>.head h1{-webkit-flex:1 auto;-ms-flex:1 auto;flex:1 auto;margin:0;font-size:24px;color:rgba(0,0,0,.5);font-weight:300;max-width:100%} .page.movie_details .scroll_content>.head h1{-webkit-flex:1 auto;-ms-flex:1 auto;flex:1 auto;margin:0;font-size:24px;color:rgba(0,0,0,.5);font-weight:300;max-width:100%}
@media (max-width:480px){.page.movie_details .scroll_content{left:44px} @media (max-width:480px){.page.movie_details .scroll_content{left:44px}
.page.movie_details .scroll_content>.head{padding:0;line-height:1em} .page.movie_details .scroll_content>.head{padding:0;line-height:1em}
@ -235,7 +270,7 @@
.page.movie_details .scroll_content>.head .buttons{display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-flex-wrap:wrap;-ms-flex-wrap:wrap;flex-wrap:wrap} .page.movie_details .scroll_content>.head .buttons{display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-flex-wrap:wrap;-ms-flex-wrap:wrap;flex-wrap:wrap}
.page.movie_details .scroll_content>.head .buttons>a{display:inline-block;padding:0 10px;color:#ac0000;line-height:80px} .page.movie_details .scroll_content>.head .buttons>a{display:inline-block;padding:0 10px;color:#ac0000;line-height:80px}
.page.movie_details .scroll_content>.head .buttons>a:hover{color:#000} .page.movie_details .scroll_content>.head .buttons>a:hover{color:#000}
.page.movie_details .scroll_content .section{padding:20px;border-top:1px solid rgba(0,0,0,.1)} .page.movie_details .scroll_content .section{padding:20px;border-top:1px solid rgba(0,0,0,.1);-webkit-transform:rotateY(360deg);transform:rotateY(360deg)}
@media (max-width:480px){.page.movie_details .scroll_content>.head .more_menu.title .wrapper{top:30px;max-width:240px} @media (max-width:480px){.page.movie_details .scroll_content>.head .more_menu.title .wrapper{top:30px;max-width:240px}
.page.movie_details .scroll_content>.head .buttons{margin:0} .page.movie_details .scroll_content>.head .buttons{margin:0}
.page.movie_details .scroll_content>.head .buttons>a{line-height:22px} .page.movie_details .scroll_content>.head .buttons>a{line-height:22px}
@ -245,7 +280,10 @@
.page.movie_details.show{pointer-events:auto} .page.movie_details.show{pointer-events:auto}
.page.movie_details.show .overlay{opacity:1;transition-delay:0s} .page.movie_details.show .overlay{opacity:1;transition-delay:0s}
.page.movie_details.show .overlay .close{opacity:1;transition-delay:300ms} .page.movie_details.show .overlay .close{opacity:1;transition-delay:300ms}
.page.movie_details.show .scroll_content{transition-delay:200ms;-webkit-transform:translateX(0);transform:translateX(0)} .page.movie_details.show .scroll_content{transition-delay:200ms;-webkit-transform:translateX(0) rotateY(360deg);transform:translateX(0) rotateY(360deg)}
.page.movie_details .section_description .meta{text-align:right;font-style:italic;font-size:.9em}
.page.movie_details .section_description .meta span{display:inline-block;margin:10px 10px 0}
.page.movie_details .section_description .meta span:last-child{margin-right:0}
.page.movie_details .section_add{background:#eaeaea} .page.movie_details .section_add{background:#eaeaea}
.page.movie_details .section_add .options>div{display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-align-items:center;-ms-flex-align:center;align-items:center} .page.movie_details .section_add .options>div{display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-align-items:center;-ms-flex-align:center;align-items:center}
.page.movie_details .section_add .options>div select{display:block;width:100%} .page.movie_details .section_add .options>div select{display:block;width:100%}
@ -298,6 +336,7 @@
.page.movie_details .releases .provider{min-width:110px;max-width:110px} .page.movie_details .releases .provider{min-width:110px;max-width:110px}
.page.movie_details .releases .provider:before{content:"Provider:"} .page.movie_details .releases .provider:before{content:"Provider:"}
.page.movie_details .releases .actions{min-width:80px;max-width:80px} .page.movie_details .releases .actions{min-width:80px;max-width:80px}
.page.movie_details .section_trailer.no_trailer{display:none}
.page.movie_details .trailer_container{background:#000;position:relative;padding-bottom:56.25%;height:0;overflow:hidden;max-width:100%;cursor:pointer} .page.movie_details .trailer_container{background:#000;position:relative;padding-bottom:56.25%;height:0;overflow:hidden;max-width:100%;cursor:pointer}
.alph_nav .menus .button,.alph_nav .menus .counter{line-height:80px;padding:0 10px} .alph_nav .menus .button,.alph_nav .menus .counter{line-height:80px;padding:0 10px}
.page.movie_details .trailer_container .background{opacity:.3;transition:all 300ms;-webkit-transform:scale(1.05) rotateY(360deg);transform:scale(1.05) rotateY(360deg);background:center no-repeat;background-size:cover;position:absolute;top:0;right:0;bottom:0;left:0;z-index:1} .page.movie_details .trailer_container .background{opacity:.3;transition:all 300ms;-webkit-transform:scale(1.05) rotateY(360deg);transform:scale(1.05) rotateY(360deg);background:center no-repeat;background-size:cover;position:absolute;top:0;right:0;bottom:0;left:0;z-index:1}
@ -314,30 +353,38 @@
.page.movie_details .trailer_container .icon-play span:first-child{margin-left:-55px;-webkit-transform:translate(-100%,-54%);transform:translate(-100%,-54%)} .page.movie_details .trailer_container .icon-play span:first-child{margin-left:-55px;-webkit-transform:translate(-100%,-54%);transform:translate(-100%,-54%)}
@media (max-width:1024px){.page.movie_details .trailer_container .icon-play span:first-child{margin-left:-27.5px} @media (max-width:1024px){.page.movie_details .trailer_container .icon-play span:first-child{margin-left:-27.5px}
} }
@media (max-width:480px){.page.movie_details .trailer_container .icon-play span:first-child{margin-left:-15.71px}
}
.page.movie_details .trailer_container:hover{color:#ac0000} .page.movie_details .trailer_container:hover{color:#ac0000}
.page.movie_details .trailer_container:hover .icon-play,.page.movie_details .trailer_container:hover .icon-play span{opacity:1} .page.movie_details .trailer_container:hover .icon-play,.page.movie_details .trailer_container:hover .icon-play span{opacity:1}
.page.movie_details .trailer_container iframe{position:absolute;top:0;left:0;width:100%;height:100%;border:0} .page.movie_details .trailer_container iframe{position:absolute;top:0;left:0;width:100%;height:100%;border:0}
.alph_nav{position:relative} .alph_nav{position:relative}
@media (max-width:480px){.page.movie_details .trailer_container .icon-play span:first-child{margin-left:-15.71px}
.alph_nav{display:none}
}
.alph_nav .mass_edit_form{display:-webkit-flex;display:-ms-flexbox;display:flex;background:#FFF;position:fixed;top:80px;right:0;left:132px;-webkit-flex-flow:row nowrap;-ms-flex-flow:row nowrap;flex-flow:row nowrap;-webkit-align-items:center;-ms-flex-align:center;align-items:center;transition:max-height 300ms cubic-bezier(.9,0,.1,1);max-height:0;overflow:hidden} .alph_nav .mass_edit_form{display:-webkit-flex;display:-ms-flexbox;display:flex;background:#FFF;position:fixed;top:80px;right:0;left:132px;-webkit-flex-flow:row nowrap;-ms-flex-flow:row nowrap;flex-flow:row nowrap;-webkit-align-items:center;-ms-flex-align:center;align-items:center;transition:max-height 300ms cubic-bezier(.9,0,.1,1);max-height:0;overflow:hidden}
.mass_editing .alph_nav .mass_edit_form{max-height:44px} .mass_editing .alph_nav .mass_edit_form{max-height:44px}
.alph_nav .mass_edit_form>*{display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-align-items:center;-ms-flex-align:center;align-items:center} .alph_nav .mass_edit_form>*{display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-align-items:center;-ms-flex-align:center;align-items:center}
.alph_nav .mass_edit_form .select{margin:0 10px 0 20px} .alph_nav .mass_edit_form .select{margin:0 10px 0 20px}
@media (max-width:480px){.alph_nav .mass_edit_form .select{margin:0 5px 0 10px}
}
.alph_nav .mass_edit_form .select .count,.alph_nav .mass_edit_form .select input{margin-right:5px} .alph_nav .mass_edit_form .select .count,.alph_nav .mass_edit_form .select input{margin-right:5px}
.alph_nav .menus .button{color:rgba(0,0,0,.5)} .alph_nav .menus .button{color:rgba(0,0,0,.5)}
.alph_nav .menus .actions,.alph_nav .menus .counter,.alph_nav .menus .more_menu{float:left} .alph_nav .menus .actions,.alph_nav .menus .counter,.alph_nav .menus .more_menu{float:left}
.alph_nav .menus .actions .wrapper,.alph_nav .menus .counter .wrapper,.alph_nav .menus .more_menu .wrapper{-webkit-transform-origin:92% 0;transform-origin:92% 0;right:-7px}
.alph_nav .menus .actions>a,.alph_nav .menus .counter>a,.alph_nav .menus .more_menu>a{display:inline-block;width:30px;line-height:80px;text-align:center} .alph_nav .menus .actions>a,.alph_nav .menus .counter>a,.alph_nav .menus .more_menu>a{display:inline-block;width:30px;line-height:80px;text-align:center}
.alph_nav .menus .actions>a:hover,.alph_nav .menus .counter>a:hover,.alph_nav .menus .more_menu>a:hover{color:#ac0000} .alph_nav .menus .actions>a:hover,.alph_nav .menus .counter>a:hover,.alph_nav .menus .more_menu>a:hover{color:#ac0000}
.alph_nav .menus .actions a{display:none} @media (max-width:768px){.alph_nav .menus .counter{display:none}
.alph_nav .menus .actions .active,.charts .chart{display:inline-block} }
.alph_nav .menus .actions a{display:inline-block}
.alph_nav .menus .actions .active{display:none}
.alph_nav .menus .filter .wrapper{width:320px} .alph_nav .menus .filter .wrapper{width:320px}
.alph_nav .menus .filter .button{margin-top:-2px} .alph_nav .menus .filter .button{margin-top:-2px}
.alph_nav .menus .filter .search{position:relative} .alph_nav .menus .filter .search{position:relative}
.alph_nav .menus .filter .search:before{position:absolute;height:100%;line-height:38px;padding-left:10px;font-size:16px;opacity:.5} .alph_nav .menus .filter .search:before{position:absolute;height:100%;line-height:38px;padding-left:10px;font-size:16px;opacity:.5}
.alph_nav .menus .filter .search input{width:100%;padding:10px 10px 10px 30px;background:#FFF;border:none;border-bottom:1px solid #eaeaea} .alph_nav .menus .filter .search input{width:100%;padding:10px 10px 10px 30px;background:#FFF;border:none;border-bottom:1px solid #eaeaea}
.alph_nav .menus .filter .numbers li.active,.alph_nav .menus .filter .numbers li.available:hover{background:#eaeaea} .alph_nav .menus .filter .numbers li.active,.alph_nav .menus .filter .numbers li.available:hover{background:#eaeaea}
@media (max-width:480px){.alph_nav .menus .filter .wrapper{right:-70px;-webkit-transform-origin:75% 0;transform-origin:75% 0}
.alph_nav .menus .filter .wrapper:before{right:83px!important}
.alph_nav .menus .filter .search input{font-size:1.2em}
}
.alph_nav .menus .filter .numbers{padding:10px} .alph_nav .menus .filter .numbers{padding:10px}
.alph_nav .menus .filter .numbers li{float:left;width:10%;height:30px;line-height:30px;text-align:center;color:rgba(0,0,0,.2);cursor:default;border:0} .alph_nav .menus .filter .numbers li{float:left;width:10%;height:30px;line-height:30px;text-align:center;color:rgba(0,0,0,.2);cursor:default;border:0}
.alph_nav .menus .filter .numbers li.available{color:#000;cursor:pointer} .alph_nav .menus .filter .numbers li.available{color:#000;cursor:pointer}
@ -347,7 +394,7 @@
.alph_nav .menus .more_menu .wrapper ul{border-radius:3px 3px 0 0} .alph_nav .menus .more_menu .wrapper ul{border-radius:3px 3px 0 0}
.charts{clear:both;margin-bottom:30px} .charts{clear:both;margin-bottom:30px}
.charts>h2{height:40px} .charts>h2{height:40px}
.charts .chart{width:50%;vertical-align:top;max-height:510px;scrollbar-base-color:#4e5969} .charts .chart{display:inline-block;width:50%;vertical-align:top;max-height:510px;scrollbar-base-color:#4e5969}
.charts .chart .media_result.hidden{display:none} .charts .chart .media_result.hidden{display:none}
.charts .refresh{clear:both;position:relative} .charts .refresh{clear:both;position:relative}
.charts .refresh .refreshing{display:block;padding:20px;font-size:20px;text-align:center} .charts .refresh .refreshing{display:block;padding:20px;font-size:20px;text-align:center}
@ -394,7 +441,7 @@
} }
.add_new_category{padding:20px;display:block;text-align:center;font-size:20px} .add_new_category{padding:20px;display:block;text-align:center;font-size:20px}
.category{margin-bottom:20px;position:relative} .category{margin-bottom:20px;position:relative}
.category>.delete{position:absolute;padding:16px;right:0;cursor:pointer;opacity:.6;color:#fd5353} .category>.delete{position:absolute;padding:6.67px 20px;right:0;cursor:pointer;opacity:.6;color:#fd5353;font-size:1.5em;z-index:2}
.category>.delete:hover{opacity:1} .category>.delete:hover{opacity:1}
.category .ctrlHolder:hover{background:0 0} .category .ctrlHolder:hover{background:0 0}
.page.log .nav li.active,.page.log .nav li:hover:not(.active):not(.filter){background:rgba(255,255,255,.1)} .page.log .nav li.active,.page.log .nav li:hover:not(.active):not(.filter){background:rgba(255,255,255,.1)}
@ -434,6 +481,8 @@
.add_new_profile{padding:20px;display:block;text-align:center;font-size:20px;border-bottom:1px solid #eaeaea} .add_new_profile{padding:20px;display:block;text-align:center;font-size:20px;border-bottom:1px solid #eaeaea}
.profile{margin-bottom:20px} .profile{margin-bottom:20px}
.profile .quality_label input{font-weight:700} .profile .quality_label input{font-weight:700}
.profile>.delete{position:absolute;padding:6.67px 20px;right:0;cursor:pointer;opacity:.6;color:#fd5353;font-size:1.5em;z-index:2}
.profile>.delete:hover{opacity:1}
.profile .ctrlHolder .types{-webkit-flex:1 1 auto;-ms-flex:1 1 auto;flex:1 1 auto;min-width:360px} .profile .ctrlHolder .types{-webkit-flex:1 1 auto;-ms-flex:1 1 auto;flex:1 1 auto;min-width:360px}
.profile .ctrlHolder .types .type{display:-webkit-flex;display:-ms-flexbox;display:flex;flex-row:row nowrap;-webkit-align-items:center;-ms-flex-align:center;align-items:center;padding:2px 0} .profile .ctrlHolder .types .type{display:-webkit-flex;display:-ms-flexbox;display:flex;flex-row:row nowrap;-webkit-align-items:center;-ms-flex-align:center;align-items:center;padding:2px 0}
.profile .ctrlHolder .types .type label{min-width:0;margin-left:10px} .profile .ctrlHolder .types .type label{min-width:0;margin-left:10px}
@ -480,7 +529,7 @@
} }
.wgroup_automation .group_userscript.group_userscript .userscript{margin-left:0} .wgroup_automation .group_userscript.group_userscript .userscript{margin-left:0}
.group_userscript.group_userscript .bookmarklet span{margin-left:10px;display:inline-block} .group_userscript.group_userscript .bookmarklet span{margin-left:10px;display:inline-block}
.group_userscript.group_userscript img{margin:20px;width:100%;max-width:600px} .group_userscript.group_userscript img{clear:both;margin:20px;width:100%;max-width:600px}
@media (max-width:768px){.group_userscript.group_userscript img{margin:10px} @media (max-width:768px){.group_userscript.group_userscript img{margin:10px}
} }
.wgroup_automation .group_userscript.group_userscript img{margin-left:0} .wgroup_automation .group_userscript.group_userscript img{margin-left:0}
@ -647,14 +696,15 @@ input,select,textarea{font-size:1em;font-weight:300;padding:6.67px;background:#F
.more_menu .button,.more_menu a,.page .navigation ul li{display:inline-block} .more_menu .button,.more_menu a,.page .navigation ul li{display:inline-block}
.more_menu,.more_menu .button:before{position:relative} .more_menu,.more_menu .button:before{position:relative}
@media (max-width:480px){.page h2{font-size:18px;padding:10px} @media (max-width:480px){.page h2{font-size:18px;padding:10px}
.page .navigation{height:44px;left:64px} .page .navigation{height:44px;left:54px;right:10px}
} }
.page .navigation ul{-webkit-flex:1 auto;-ms-flex:1 auto;flex:1 auto;list-style:none} .page .navigation ul{-webkit-flex:1 auto;-ms-flex:1 auto;flex:1 auto;list-style:none}
.page .navigation ul li a{display:inline-block;font-size:24px;line-height:80px;padding:0 20px;color:rgba(0,0,0,.5)} .page .navigation ul li a{display:inline-block;font-size:24px;line-height:80px;padding:0 20px;color:rgba(0,0,0,.5)}
@media (max-width:480px){.page .navigation ul li a{font-size:18px;line-height:44px;padding:10px}
}
.page .navigation ul .active a{color:#000} .page .navigation ul .active a{color:#000}
.page .navigation>ul>li:first-child{margin-left:-20px} .page .navigation>ul>li:first-child{margin-left:-20px}
@media (max-width:480px){.page .navigation ul li a{font-size:18px;line-height:44px;padding:10px}
.page .navigation>ul>li:first-child{margin-left:-10px}
}
.page .navigation h2{padding:20px 20px 20px 0} .page .navigation h2{padding:20px 20px 20px 0}
.level_1{z-index:10} .level_1{z-index:10}
.level_2{z-index:20} .level_2{z-index:20}
@ -725,17 +775,23 @@ input,select,textarea{font-size:1em;font-weight:300;padding:6.67px;background:#F
.page.settings .tabs li a{color:rgba(0,0,0,.5)} .page.settings .tabs li a{color:rgba(0,0,0,.5)}
.page.settings .tabs li.active a{color:#000} .page.settings .tabs li.active a{color:#000}
.page.settings form.containers{margin:0 20px 0 0;-webkit-flex:1 1 auto;-ms-flex:1 1 auto;flex:1 1 auto} .page.settings form.containers{margin:0 20px 0 0;-webkit-flex:1 1 auto;-ms-flex:1 1 auto;flex:1 1 auto}
.page.settings fieldset{border:0;margin-bottom:20px;position:relative} .page.settings fieldset h2 .group_label,.page.settings fieldset h2 .icon{margin-right:10px}
.page.settings fieldset h2{display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-align-items:baseline;-ms-flex-align:baseline;align-items:baseline;padding:0 0 0 20px} .page.settings fieldset{border:0;padding:10px 0;position:relative}
.page.settings fieldset h2 .icon{margin-right:10px} .page.settings fieldset h2{display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-flex-flow:row wrap;-ms-flex-flow:row wrap;flex-flow:row wrap;-webkit-align-items:baseline;-ms-flex-align:baseline;align-items:baseline;padding:0 0 0 20px}
.page.settings fieldset h2 .icon img{vertical-align:middle;position:relative;top:-1px} .page.settings fieldset h2 .icon img{vertical-align:middle;position:relative;top:-1px}
.page.settings fieldset h2 .hint{-webkit-flex:1;-ms-flex:1;flex:1;margin-left:10px;font-size:1rem} .page.settings fieldset h2 .hint{-webkit-flex:1;-ms-flex:1;flex:1;font-size:1rem}
@media (max-width:480px){.page.settings fieldset h2{display:block} @media (max-width:480px){.page.settings fieldset h2{display:block}
.page.settings fieldset h2 .hint{margin:0;display:block} .page.settings fieldset h2 .hint{margin:0;display:block}
} }
.page.settings fieldset h2 .hint a{font-weight:400;color:#ac0000;text-decoration:underline;display:inline} .page.settings fieldset h2 .hint a{font-weight:400;color:#ac0000;text-decoration:underline;display:inline}
.page.settings fieldset .more_hint{position:relative}
.page.settings fieldset .more_hint .tooltip{display:inline;padding:10px}
.page.settings fieldset .more_hint .tooltip .icon-info{vertical-align:middle;display:inline-block;text-align:center;border:1px solid #ac0000;border-radius:50%;width:18px;height:18px;line-height:16px;font-size:.8em;text-decoration:none}
.page.settings fieldset .more_hint .tooltip .tip{bottom:100%;left:0;right:0;position:absolute;background:#eaeaea;z-index:20;display:none;padding:10px;margin-left:-10px}
.page.settings fieldset .more_hint .tooltip:hover .tip{display:block}
.page.settings fieldset .ctrlHolder{padding:6.67px 20px;border-bottom:1px solid #eaeaea;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-flex-flow:row nowrap;-ms-flex-flow:row nowrap;flex-flow:row nowrap;-webkit-align-items:center;-ms-flex-align:center;align-items:center} .page.settings fieldset .ctrlHolder{padding:6.67px 20px;border-bottom:1px solid #eaeaea;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-flex-flow:row nowrap;-ms-flex-flow:row nowrap;flex-flow:row nowrap;-webkit-align-items:center;-ms-flex-align:center;align-items:center}
.page.settings fieldset .ctrlHolder:last-child{border-bottom:0} .page.settings fieldset .ctrlHolder:last-child{border-bottom:0}
.page.settings fieldset .ctrlHolder:nth-child(2){margin-top:10px}
.page.settings fieldset .ctrlHolder label{display:inline-block;min-width:150px} .page.settings fieldset .ctrlHolder label{display:inline-block;min-width:150px}
.page.settings fieldset .ctrlHolder input,.page.settings fieldset .ctrlHolder select,.page.settings fieldset .ctrlHolder textarea{min-width:200px} .page.settings fieldset .ctrlHolder input,.page.settings fieldset .ctrlHolder select,.page.settings fieldset .ctrlHolder textarea{min-width:200px}
.page.settings fieldset .ctrlHolder input[type=checkbox]{width:auto;min-width:0} .page.settings fieldset .ctrlHolder input[type=checkbox]{width:auto;min-width:0}
@ -757,11 +813,13 @@ input,select,textarea{font-size:1em;font-weight:300;padding:6.67px;background:#F
.page.settings fieldset.disabled .ctrlHolder{display:none} .page.settings fieldset.disabled .ctrlHolder{display:none}
.page.settings fieldset.disabled>.ctrlHolder:first-child{display:-webkit-flex;display:-ms-flexbox;display:flex} .page.settings fieldset.disabled>.ctrlHolder:first-child{display:-webkit-flex;display:-ms-flexbox;display:flex}
.page.settings fieldset.enabler{display:block} .page.settings fieldset.enabler{display:block}
.page.settings fieldset.enabler.disabled:hover{background:rgba(234,234,234,.2)}
.page.settings fieldset.enabler>:first-child{position:absolute;right:0;border:0;padding:0} .page.settings fieldset.enabler>:first-child{position:absolute;right:0;border:0;padding:0}
.page.settings fieldset.enabler>:first-child~h2{margin-right:86px} .page.settings fieldset.enabler>:first-child~h2{margin-right:86px}
@media (max-width:480px){.page.settings fieldset.enabler>:first-child~h2{margin-right:0} @media (max-width:480px){.page.settings fieldset.enabler>:first-child~h2{margin-right:0}
} }
.page.settings fieldset.enabler>:nth-child(3){margin-top:20px} .page.settings fieldset.enabler>:nth-child(2){margin-top:0}
.page.settings fieldset.enabler>:nth-child(3){margin-top:10px}
.page.settings fieldset .ctrlHolder.advanced,.page.settings fieldset.advanced{display:none;color:#ac0000} .page.settings fieldset .ctrlHolder.advanced,.page.settings fieldset.advanced{display:none;color:#ac0000}
.page.settings.show_advanced fieldset.advanced{display:block} .page.settings.show_advanced fieldset.advanced{display:block}
.page.settings.show_advanced fieldset:not(.disabled)>.ctrlHolder.advanced{display:-webkit-flex;display:-ms-flexbox;display:flex} .page.settings.show_advanced fieldset:not(.disabled)>.ctrlHolder.advanced{display:-webkit-flex;display:-ms-flexbox;display:flex}
@ -771,11 +829,11 @@ input,select,textarea{font-size:1em;font-weight:300;padding:6.67px;background:#F
.page.settings fieldset.enabler.disabled .switch,.page.settings:not(.show_advanced) .advanced_toggle .switch{background:#eaeaea;border-color:#eaeaea} .page.settings fieldset.enabler.disabled .switch,.page.settings:not(.show_advanced) .advanced_toggle .switch{background:#eaeaea;border-color:#eaeaea}
.page.settings fieldset.enabler.disabled .switch .toggle,.page.settings:not(.show_advanced) .advanced_toggle .switch .toggle{-webkit-transform:translateX(0);transform:translateX(0)} .page.settings fieldset.enabler.disabled .switch .toggle,.page.settings:not(.show_advanced) .advanced_toggle .switch .toggle{-webkit-transform:translateX(0);transform:translateX(0)}
.page.settings fieldset.enabler.disabled .switch:hover,.page.settings:not(.show_advanced) .advanced_toggle .switch:hover{background:#b7b7b7;border-color:#b7b7b7} .page.settings fieldset.enabler.disabled .switch:hover,.page.settings:not(.show_advanced) .advanced_toggle .switch:hover{background:#b7b7b7;border-color:#b7b7b7}
.page.settings .option_list{background:#FFF} .page.settings .option_list{background:#FFF;margin-top:10px}
.page.settings .option_list fieldset{position:relative} .page.settings .option_list fieldset{position:relative}
.page.settings .option_list fieldset h2 .group_label{min-width:100px} .page.settings .option_list fieldset h2 .group_label{min-width:100px}
.page.settings .option_list fieldset.disabled h2{padding:0 20px} .page.settings .option_list fieldset.disabled h2{padding:0 20px}
.page.settings .option_list fieldset:after{position:absolute;content:'';display:block;width:100%;border-bottom:1px solid #eaeaea;bottom:-10px} .page.settings .option_list fieldset:after{position:absolute;content:'';display:block;width:100%;border-bottom:1px solid #eaeaea;bottom:0}
.page.settings .option_list fieldset:after:last-child{border-bottom:0} .page.settings .option_list fieldset:after:last-child{border-bottom:0}
.page.settings .option_list h2{font-size:1em;font-weight:400} .page.settings .option_list h2{font-size:1em;font-weight:400}
.page.settings .option_list h2 .hint{font-weight:300} .page.settings .option_list h2 .hint{font-weight:300}
@ -791,8 +849,8 @@ input,select,textarea{font-size:1em;font-weight:300;padding:6.67px;background:#F
.page.settings .combined_table .ctrlHolder{margin:0 0 0 20px;padding-left:0} .page.settings .combined_table .ctrlHolder{margin:0 0 0 20px;padding-left:0}
.page.settings .combined_table .ctrlHolder .delete{display:none;font-size:20px;width:22px;height:22px;line-height:20px;text-align:center;vertical-align:middle} .page.settings .combined_table .ctrlHolder .delete{display:none;font-size:20px;width:22px;height:22px;line-height:20px;text-align:center;vertical-align:middle}
.page.settings .combined_table .ctrlHolder:hover .delete{display:inline-block} .page.settings .combined_table .ctrlHolder:hover .delete{display:inline-block}
.page.settings .disabled .combined_table,.page.settings .multi_directory.is_empty .delete{display:none}
.page.settings .combined_table .ctrlHolder.is_empty .delete,.page.settings .combined_table .ctrlHolder.is_empty input[type=checkbox]{visibility:hidden} .page.settings .combined_table .ctrlHolder.is_empty .delete,.page.settings .combined_table .ctrlHolder.is_empty input[type=checkbox]{visibility:hidden}
.page.settings .disabled .combined_table{display:none}
.page.settings .tab_about .usenet{padding:20px 20px 0;font-size:1.5em;line-height:1.3em} .page.settings .tab_about .usenet{padding:20px 20px 0;font-size:1.5em;line-height:1.3em}
.page.settings .tab_about .usenet a{color:#ac0000;padding:0 5px} .page.settings .tab_about .usenet a{color:#ac0000;padding:0 5px}
.page.settings .tab_about .usenet ul{list-style:none;float:left;width:50%;margin:10px 0;padding:0} .page.settings .tab_about .usenet ul{list-style:none;float:left;width:50%;margin:10px 0;padding:0}
@ -809,6 +867,8 @@ input,select,textarea{font-size:1em;font-weight:300;padding:6.67px;background:#F
@media (max-width:480px){.page.settings .directory{width:100%} @media (max-width:480px){.page.settings .directory{width:100%}
} }
.page.settings .directory input{width:100%} .page.settings .directory input{width:100%}
.page.settings .multi_directory .delete{color:#ac0000;padding:0 10px;opacity:.6;font-size:1.5em}
.page.settings .multi_directory .delete:hover{opacity:1}
.page.settings .choice .select_wrapper{margin-left:20px;width:120px;min-width:120px} .page.settings .choice .select_wrapper{margin-left:20px;width:120px;min-width:120px}
@media (max-width:480px){.page.settings .choice .select_wrapper{margin:10px 0 0} @media (max-width:480px){.page.settings .choice .select_wrapper{margin:10px 0 0}
} }

7
couchpotato/static/style/main.scss

@ -458,7 +458,8 @@ input, textarea, select {
@include media-phablet { @include media-phablet {
height: $header_width_mobile; height: $header_width_mobile;
left: $header_width_mobile + $padding; left: $header_width_mobile + $padding/2;
right: $padding/2;
} }
ul { ul {
@ -490,6 +491,10 @@ input, textarea, select {
> ul > li:first-child { > ul > li:first-child {
margin-left: -$padding; margin-left: -$padding;
@include media-phablet {
margin-left: -$padding/2;
}
} }
h2 { h2 {

85
couchpotato/static/style/settings.scss

@ -68,11 +68,12 @@
fieldset { fieldset {
border: 0; border: 0;
margin-bottom: $padding; padding: $padding/2 0;
position: relative; position: relative;
h2 { h2 {
display: flex; display: flex;
flex-flow: row wrap;
align-items: baseline; align-items: baseline;
padding: 0 0 0 $padding; padding: 0 0 0 $padding;
@ -90,9 +91,12 @@
} }
} }
.group_label {
margin-right: $padding/2;
}
.hint { .hint {
flex: 1; flex: 1;
margin-left: $padding/2;
font-size: 1rem; font-size: 1rem;
@include media-phablet { @include media-phablet {
@ -106,6 +110,48 @@
text-decoration: underline; text-decoration: underline;
display: inline; display: inline;
} }
}
}
.more_hint {
position: relative;
.tooltip {
display: inline;
padding: $padding/2;
.icon-info {
vertical-align: middle;
display: inline-block;
text-align: center;
border: 1px solid $primary_color;
border-radius: 50%;
width: 18px;
height: 18px;
line-height: 16px;
font-size: .8em;
text-decoration: none;
}
.tip {
bottom: 100%;
left: 0;
right: 0;
position: absolute;
background: $theme_off;
z-index: 20;
display: none;
padding: $padding/2;
margin-left: -$padding/2;
}
&:hover {
.tip {
display: block;
}
}
} }
} }
@ -125,6 +171,10 @@
border-bottom: 0; border-bottom: 0;
} }
&:nth-child(2) {
margin-top: $padding/2;
}
label { label {
display: inline-block; display: inline-block;
min-width: 150px; min-width: 150px;
@ -226,6 +276,10 @@
&.enabler { &.enabler {
display: block; display: block;
&.disabled:hover {
background: rgba($theme_off, .2);
}
> :first-child { > :first-child {
position: absolute; position: absolute;
right: 0; right: 0;
@ -241,8 +295,12 @@
} }
} }
> :nth-child(2){
margin-top: 0;
}
> :nth-child(3){ > :nth-child(3){
margin-top: $padding; margin-top: $padding/2;
} }
} }
@ -310,6 +368,7 @@
/** Options list **/ /** Options list **/
.option_list { .option_list {
background: #FFF; background: #FFF;
margin-top: $padding/2;
fieldset { fieldset {
position: relative; position: relative;
@ -333,7 +392,7 @@
display: block; display: block;
width: 100%; width: 100%;
border-bottom: 1px solid $theme_off; border-bottom: 1px solid $theme_off;
bottom: -$padding/2; bottom: 0;
&:last-child { &:last-child {
border-bottom: 0; border-bottom: 0;
@ -504,6 +563,24 @@
} }
} }
.multi_directory {
.delete {
color: $primary_color;
padding: 0 $padding/2;
opacity: .6;
font-size: 1.5em;
&:hover {
opacity: 1;
}
}
&.is_empty .delete {
display: none;
}
}
.choice { .choice {
.select_wrapper { .select_wrapper {
margin-left: $padding; margin-left: $padding;

Loading…
Cancel
Save