diff --git a/couchpotato/core/settings/__init__.py b/couchpotato/core/settings/__init__.py
index 5bb01ef..2c44702 100644
--- a/couchpotato/core/settings/__init__.py
+++ b/couchpotato/core/settings/__init__.py
@@ -75,7 +75,7 @@ class Settings():
values[section] = {}
for option in self.p.items(section):
(option_name, option_value) = option
- values[section][option_name] = option_value
+ values[section][option_name] = self.cleanValue(option_value)
return values
def save(self):
diff --git a/couchpotato/static/images/edit.png b/couchpotato/static/images/edit.png
new file mode 100644
index 0000000..5319252
Binary files /dev/null and b/couchpotato/static/images/edit.png differ
diff --git a/couchpotato/static/images/gear.png b/couchpotato/static/images/gear.png
new file mode 100644
index 0000000..75d0a68
Binary files /dev/null and b/couchpotato/static/images/gear.png differ
diff --git a/couchpotato/static/images/imdb.png b/couchpotato/static/images/imdb.png
new file mode 100644
index 0000000..72fa340
Binary files /dev/null and b/couchpotato/static/images/imdb.png differ
diff --git a/couchpotato/static/images/rating.png b/couchpotato/static/images/rating.png
new file mode 100644
index 0000000..174a467
Binary files /dev/null and b/couchpotato/static/images/rating.png differ
diff --git a/couchpotato/static/images/reload.png b/couchpotato/static/images/reload.png
new file mode 100644
index 0000000..031f2fd
Binary files /dev/null and b/couchpotato/static/images/reload.png differ
diff --git a/couchpotato/static/scripts/block/search.js b/couchpotato/static/scripts/block/search.js
index d06a662..ce3a29f 100644
--- a/couchpotato/static/scripts/block/search.js
+++ b/couchpotato/static/scripts/block/search.js
@@ -127,16 +127,9 @@ Block.Search = new Class({
Object.each(json.movies, function(movie){
- // if(!movie.imdb || (movie.imdb && !self.results.getElement('#'+movie.imdb))){
- var m = new Block.Search.Item(movie);
- $(m).inject(self.results)
- self.movies[movie.imdb || 'r-'+Math.floor(Math.random()*10000)] = m
- // }
- // else {
- // self.movies[movie.imdb].alternativeTitle({
- // 'title': movie.title
- // })
- // }
+ var m = new Block.Search.Item(movie);
+ $(m).inject(self.results)
+ self.movies[movie.imdb || 'r-'+Math.floor(Math.random()*10000)] = m
});
@@ -213,7 +206,6 @@ Block.Search.Item = new Class({
})
}
-
info.titles.each(function(title){
self.alternativeTitle({
'title': title
@@ -235,10 +227,17 @@ Block.Search.Item = new Class({
if(!self.width)
self.width = self.data_container.getCoordinates().width
- self.data_container.tween('margin-left', 0, self.width);
+ self.data_container.tween('left', 0, self.width);
+
+ self.el.addEvent('outerClick', self.closeOptions.bind(self))
+
+ },
- self.el.addEvents('outerClick', self.closeOptions.bind(self))
+ closeOptions: function(){
+ var self = this;
+ self.data_container.tween('left', self.width, 0);
+ self.el.removeEvents('outerClick')
},
add: function(e){
@@ -303,7 +302,7 @@ Block.Search.Item = new Class({
}).inject(self.title_select)
})
- Array.each(Quality.profiles, function(profile){
+ Object.each(Quality.profiles, function(profile){
new Element('option', {
'value': profile.id ? profile.id : profile.data.id,
'text': profile.label ? profile.label : profile.data.label
@@ -315,13 +314,6 @@ Block.Search.Item = new Class({
},
- closeOptions: function(){
- var self = this;
-
- self.data_container.tween('margin-left', self.width, 0);
- self.el.removeEvents('outerClick', self.closeOptions.bind(self))
- },
-
toElement: function(){
return this.el
}
diff --git a/couchpotato/static/scripts/file.js b/couchpotato/static/scripts/file.js
index b960a2b..76ef62e 100644
--- a/couchpotato/static/scripts/file.js
+++ b/couchpotato/static/scripts/file.js
@@ -13,7 +13,9 @@ var File = new Class({
createImage: function(){
var self = this;
- self.el = new Element('div.type_image').adopt(
+ self.el = new Element('div', {
+ 'class': 'type_image ' + self.type.identifier
+ }).adopt(
new Element('img', {
'src': Api.createUrl('file.cache') + self.data.path.substring(1) + '/'
})
diff --git a/couchpotato/static/scripts/page/settings.js b/couchpotato/static/scripts/page/settings.js
index 509cedc..b5c619f 100644
--- a/couchpotato/static/scripts/page/settings.js
+++ b/couchpotato/static/scripts/page/settings.js
@@ -436,7 +436,7 @@ Option.Enabler = new Class({
checkState: function(){
var self = this;
- self.parentFieldset[ self.getValue() ? 'addClass' : 'removeClass']('enabled');
+ self.parentFieldset[ self.getValue() ? 'removeClass' : 'addClass']('disabled');
},
afterInject: function(){
diff --git a/couchpotato/static/scripts/page/wanted.js b/couchpotato/static/scripts/page/wanted.js
index b10eb37..ea177b1 100644
--- a/couchpotato/static/scripts/page/wanted.js
+++ b/couchpotato/static/scripts/page/wanted.js
@@ -23,6 +23,7 @@ Page.Wanted = new Class({
Object.each(self.movies, function(info){
var m = new Movie(self, {}, info);
$(m).inject(self.movie_container);
+ m.fireEvent('injected');
});
self.movie_container.addEvents({
@@ -69,29 +70,37 @@ var Movie = new Class({
self.profile = Quality.getProfile(data.profile_id);
self.parent(self, options);
+ self.addEvent('injected', self.afterInject.bind(self))
},
create: function(){
var self = this;
self.el = new Element('div.movie').adopt(
- self.data_container = new Element('div').adopt(
+ self.data_container = new Element('div.data', {
+ 'tween': {
+ duration: 400,
+ transition: 'quint:in:out'
+ }
+ }).adopt(
self.thumbnail = File.Select.single('poster', self.data.library.files),
- self.title = new Element('div.title', {
- 'text': self.getTitle()
- }),
- self.description = new Element('div.description', {
- 'text': self.data.library.plot
- }),
- self.rating = new Element('div.rating', {
- 'text': self.data.library.rating || 10
- }),
- self.year = new Element('div.year', {
- 'text': self.data.library.year || 'Unknown'
- }),
- self.quality = new Element('div.quality', {
- 'text': self.profile.get('label')
- }),
+ self.info_container = new Element('div.info').adopt(
+ self.title = new Element('div.title', {
+ 'text': self.getTitle()
+ }),
+ self.year = new Element('div.year', {
+ 'text': self.data.library.year || 'Unknown'
+ }),
+ self.rating = new Element('div.rating', {
+ 'text': self.data.library.rating
+ }),
+ self.description = new Element('div.description', {
+ 'text': self.data.library.plot
+ }),
+ self.quality = new Element('div.quality', {
+ 'text': self.profile.get('label')
+ })
+ ),
self.actions = new Element('div.actions').adopt(
self.action_imdb = new Movie.Action.IMDB(self),
self.action_edit = new Movie.Action.Edit(self),
@@ -101,6 +110,16 @@ var Movie = new Class({
)
);
+ if(!self.data.library.rating)
+ self.rating.hide();
+
+ },
+
+ afterInject: function(){
+ var self = this;
+
+ var height = self.getHeight();
+ self.el.setStyle('height', height);
},
getTitle: function(){
@@ -120,6 +139,37 @@ var Movie = new Class({
return 'Unknown movie'
},
+ slide: function(direction){
+ var self = this;
+
+ if(direction == 'in'){
+ self.el.addEvent('outerClick', self.slide.bind(self, 'out'))
+ self.data_container.tween('left', 0, self.getWidth());
+ }
+ else {
+ self.el.removeEvents('outerClick')
+ self.data_container.tween('left', self.getWidth(), 0);
+ }
+ },
+
+ getHeight: function(){
+ var self = this;
+
+ if(!self.height)
+ self.height = self.data_container.getCoordinates().height;
+
+ return self.height;
+ },
+
+ getWidth: function(){
+ var self = this;
+
+ if(!self.width)
+ self.width = self.data_container.getCoordinates().width;
+
+ return self.width;
+ },
+
get: function(attr){
return this.data[attr] || this.data.library[attr]
}
@@ -164,7 +214,6 @@ Movie.Action.Edit = new Class({
var self = this;
self.el = new Element('a.edit', {
- 'text': 'edit',
'title': 'Refresh the movie info and do a forced search',
'events': {
'click': self.editMovie.bind(self)
@@ -177,21 +226,27 @@ Movie.Action.Edit = new Class({
var self = this;
(e).stop();
- self.optionContainer = new Element('div.options').adopt(
- $(self.movie.thumbnail).clone(),
- self.title_select = new Element('select', {
- 'name': 'title'
- }),
- self.profile_select = new Element('select', {
- 'name': 'profile'
- }),
- new Element('a.button.edit', {
- 'text': 'Save',
- 'events': {
- 'click': self.save.bind(self)
- }
- })
- ).inject(self.movie, 'top');
+ if(!self.options_container){
+ self.options_container = new Element('div.options').adopt(
+ $(self.movie.thumbnail).clone(),
+ new Element('div.form').adopt(
+ self.title_select = new Element('select', {
+ 'name': 'title'
+ }),
+ self.profile_select = new Element('select', {
+ 'name': 'profile'
+ }),
+ new Element('a.button.edit', {
+ 'text': 'Save',
+ 'events': {
+ 'click': self.save.bind(self)
+ }
+ })
+ )
+ ).inject(self.movie, 'top');
+ }
+
+ self.movie.slide('in');
},
save: function(){
@@ -220,7 +275,6 @@ Movie.Action.IMDB = new Class({
self.id = self.movie.get('identifier');
self.el = new Element('a.imdb', {
- 'text': 'imdb',
'title': 'Go to the IMDB page of ' + self.movie.getTitle(),
'events': {
'click': self.gotoIMDB.bind(self)
@@ -247,7 +301,6 @@ Movie.Action.Refresh = new Class({
var self = this;
self.el = new Element('a.refresh', {
- 'text': 'refresh',
'title': 'Refresh the movie info and do a forced search',
'events': {
'click': self.doSearch.bind(self)
@@ -279,7 +332,6 @@ Movie.Action.Delete = new Class({
var self = this;
self.el = new Element('a.delete', {
- 'text': 'delete',
'title': 'Remove the movie from your wanted list',
'events': {
'click': self.showConfirm.bind(self)
@@ -292,27 +344,39 @@ Movie.Action.Delete = new Class({
var self = this;
(e).stop();
- self.mask = $(self.movie).mask({
- 'destroyOnHide': true
- });
-
- $(self.mask).adopt(
- new Element('a.button.cancel', {
- 'text': 'Cancel',
- 'events': {
- 'click': self.mask.hide.bind(self.mask)
- }
- }),
- new Element('span', {
- 'text': 'or'
- }),
- new Element('a.button.delete', {
- 'text': 'Delete movie',
- 'events': {
- 'click': self.del.bind(self)
+ if(!self.delete_container){
+ self.delete_container = new Element('div.delete_container', {
+ 'styles': {
+ 'line-height': self.movie.getHeight()
}
- })
- );
+ }).adopt(
+ new Element('a.cancel', {
+ 'text': 'Cancel',
+ 'events': {
+ 'click': self.hideConfirm.bind(self)
+ }
+ }),
+ new Element('span.or', {
+ 'text': 'or'
+ }),
+ new Element('a.button.delete', {
+ 'text': 'Delete movie',
+ 'events': {
+ 'click': self.del.bind(self)
+ }
+ })
+ ).inject(self.movie, 'top')
+ }
+
+ self.movie.slide('in');
+
+ },
+
+ hideConfirm: function(e){
+ var self = this;
+ (e).stop();
+
+ self.movie.slide('out');
},
del: function(e){
@@ -323,7 +387,7 @@ Movie.Action.Delete = new Class({
self.chain(
function(){
- $(self.mask).empty().addClass('loading');
+ $(movie).mask().addClass('loading')
self.callChain();
},
function(){
@@ -332,8 +396,12 @@ Movie.Action.Delete = new Class({
'id': self.movie.get('id')
},
'onComplete': function(){
- p(movie, $(self.movie))
- movie.slide('in');
+ movie.set('tween', {
+ 'onComplete': function(){
+ movie.destroy();
+ }
+ })
+ movie.tween('height', 0)
}
})
}
diff --git a/couchpotato/static/style/main.css b/couchpotato/static/style/main.css
index 724e150..092eef1 100644
--- a/couchpotato/static/style/main.css
+++ b/couchpotato/static/style/main.css
@@ -42,6 +42,7 @@ a {
text-decoration:none;
color: #6ea1d7;
outline: 0;
+ cursor: pointer;
}
a:hover { color: #4d66c4; }
diff --git a/couchpotato/static/style/page/settings.css b/couchpotato/static/style/page/settings.css
index e59a8c8..1ffea42 100644
--- a/couchpotato/static/style/page/settings.css
+++ b/couchpotato/static/style/page/settings.css
@@ -55,7 +55,7 @@
.page.settings fieldset h2 {
font-weight: normal;
font-size: 25px;
- padding: 0 9px 10px;
+ padding: 0 9px 10px 30px;
margin: 0;
border-bottom: 1px solid #f3f3f3;
}
@@ -64,10 +64,23 @@
font-size: 12px;
margin-left: 10px;
}
+
+ .page.settings fieldset.disabled .ctrlHolder {
+ display: none;
+ }
+ .page.settings fieldset .ctrlHolder:first-child {
+ display: block;
+ padding: 0;
+ width: auto;
+ margin: 0;
+ position: relative;
+ margin-bottom: -25px;
+ border: none;
+ }
.page.settings .ctrlHolder {
line-height: 25px;
- padding: 10px;
+ padding: 10px 10px 10px 30px;
border-bottom: 1px solid #f3f3f3;
font-size: 14px;
}
@@ -97,7 +110,7 @@
padding: 6px 0 0;
}
- .page.settings input[type=text] {
+ .page.settings input[type=text], .page.settings input[type=password] {
border: 1px solid #aaa;
padding: 3px;
margin: 0;
diff --git a/couchpotato/static/style/page/wanted.css b/couchpotato/static/style/page/wanted.css
new file mode 100644
index 0000000..10f8df7
--- /dev/null
+++ b/couchpotato/static/style/page/wanted.css
@@ -0,0 +1,134 @@
+/* @override http://localhost:5000/static/style/page/wanted.css */
+
+.page.wanted .movies {
+ padding: 20px 0;
+}
+
+ .page.wanted .movie {
+ overflow: hidden;
+ position: relative;
+ background: #999;
+
+ border-radius: 4px;
+ -moz-border-radius: 4px;
+ -webkit-border-radius: 4px;
+ margin: 10px 0;
+ border: 1px solid #fff;
+ border-color: #eee #fff #fff #eee;
+ background: #ddd;
+ }
+ .page.wanted .movie:hover {
+ border-color: #ddd #fff #fff #ddd;
+ }
+ .page.wanted .movie:hover .data {
+ background: #f5f5f5;
+ }
+ .page.wanted .data {
+ padding: 2%;
+ position: absolute;
+ width: 96.1%;
+ top: 0;
+ left: 0;
+ background: #f9f9f9;
+ }
+ .page.wanted .data:after {
+ content: "";
+ display: block;
+ height: 0;
+ clear: both;
+ visibility: hidden;
+ }
+ .page.wanted .data .poster, .page.wanted .options .poster {
+ overflow: hidden;
+ float: left;
+ max-width: 10%;
+ margin: 0 2% 0 0;
+ border-radius:3px;
+ -moz-border-radius: 3px;
+ -webkit-border-radius: 3px;
+ -moz-box-shadow: 0 0 10px rgba(0,0,0,0.35);
+ -webkit-box-shadow: 0 0 10px rgba(0,0,0,0.35);
+ line-height: 0;
+ }
+
+ .page.wanted .info {
+ float: right;
+ width: 88%;
+ }
+
+ .page.wanted .info .title {
+ font-size: 30px;
+ font-weight: bold;
+ margin-bottom: 10px;
+ float: left;
+ width: 80%;
+ }
+
+ .page.wanted .info .year {
+ font-size: 30px;
+ margin-bottom: 10px;
+ float: right;
+ color: #bbb;
+ width: 10%;
+ text-align: right;
+ }
+
+ .page.wanted .info .rating {
+ font-size: 30px;
+ margin-bottom: 10px;
+ color: #444;
+ float: left;
+ width: 5%;
+ padding: 0 0 0 3%;
+ background: url('../../images/rating.png') no-repeat left center;
+ }
+
+ .page.wanted .info .description {
+ clear: both;
+ width: 95%;
+ }
+ .page.wanted .data .actions {
+ position: absolute;
+ right: 15px;
+ bottom: 15px;
+ line-height: 0;
+ }
+ .page.wanted .data:hover .action { opacity: 0.6; }
+ .page.wanted .data:hover .action:hover { opacity: 1; }
+
+ .page.wanted .data .action {
+ background: no-repeat center;
+ display: inline-block;
+ width: 20px;
+ height: 20px;
+ padding: 3px;
+ opacity: 0;
+ }
+ .page.wanted .data .action.refresh { background-image: url('../../images/reload.png'); }
+ .page.wanted .data .action.delete { background-image: url('../../images/delete.png'); }
+ .page.wanted .data .action.edit { background-image: url('../../images/edit.png'); }
+ .page.wanted .data .action.imdb { background-image: url('../../images/imdb.png'); }
+
+ .page.wanted .delete_container {
+ clear: both;
+ text-align: center;
+ font-size: 20px;
+ position: relative;
+ }
+ .page.wanted .delete_container .cancel {
+ }
+ .page.wanted .delete_container .or {
+ padding: 10px;
+ }
+ .page.wanted .delete_container .delete {
+ background-color: #ff321c;
+ font-weight: normal;
+ }
+ .page.wanted .delete_container .delete:hover {
+ color: #fff;
+ background-color: #d32917;
+ }
+
+ .page.wanted .options {
+ padding: 2%;
+ }
\ No newline at end of file
diff --git a/couchpotato/static/style/plugin/movie_add.css b/couchpotato/static/style/plugin/movie_add.css
index bf5f9fa..0d9551e 100644
--- a/couchpotato/static/style/plugin/movie_add.css
+++ b/couchpotato/static/style/plugin/movie_add.css
@@ -1,4 +1,4 @@
-/* @override http://localhost:5000/static/style/movie_add.css */
+/* @override http://localhost:5000/static/style/plugin/movie_add.css */
.search_form {
display: inline-block;
@@ -71,7 +71,7 @@
}
.search_form .results .movie .options > div {
- margin: 0 10px;
+ padding: 0 15px;
}
.search_form .results .movie .options .thumbnail {
@@ -90,6 +90,14 @@
vertical-align: middle;
display: inline-block;
}
+
+ .search_form .results .movie .options .message {
+ height: 100%;
+ line-height: 140px;
+ font-size: 20px;
+ text-align: center;
+ color: #fff;
+ }
.search_form .results .movie .data {
padding: 0 15px;
diff --git a/couchpotato/templates/_desktop.html b/couchpotato/templates/_desktop.html
index 0898c76..c9ee8b3 100644
--- a/couchpotato/templates/_desktop.html
+++ b/couchpotato/templates/_desktop.html
@@ -6,6 +6,7 @@
+