Select category for search, suggest & edit
This commit is contained in:
1 parent
e8993932c1
commit
f12d878c0b
9 files changed
+150
-29
No files matched your search
@@ -29,9 +29,7 @@
|
|||||||
|
|
||||||
.category .formHint {
|
.category .formHint {
|
||||||
width: 250px !important;
|
width: 250px !important;
|
||||||
vertical-align: top !important;
|
|
||||||
margin: 0 !important;
|
margin: 0 !important;
|
||||||
padding-left: 3px !important;
|
|
||||||
opacity: 0.1;
|
opacity: 0.1;
|
||||||
}
|
}
|
||||||
.category:hover .formHint {
|
.category:hover .formHint {
|
||||||
|
|||||||
@@ -42,7 +42,7 @@ var CategoryListBase = new Class({
|
|||||||
|
|
||||||
self.settings.createGroup({
|
self.settings.createGroup({
|
||||||
'label': 'Categories',
|
'label': 'Categories',
|
||||||
'description': 'Create your own categories.'
|
'description': 'Create categories, each one extending global filters. (Needs refresh \'' +(App.isMac() ? 'CMD+R' : 'F5')+ '\' after editing)'
|
||||||
}).inject(self.content).adopt(
|
}).inject(self.content).adopt(
|
||||||
self.category_container = new Element('div.container'),
|
self.category_container = new Element('div.container'),
|
||||||
new Element('a.add_new_category', {
|
new Element('a.add_new_category', {
|
||||||
@@ -63,6 +63,16 @@ var CategoryListBase = new Class({
|
|||||||
|
|
||||||
},
|
},
|
||||||
|
|
||||||
|
getCategory: function(id){
|
||||||
|
return this.categories.filter(function(category){
|
||||||
|
return category.data.id == id
|
||||||
|
}).pick()
|
||||||
|
},
|
||||||
|
|
||||||
|
getAll: function(){
|
||||||
|
return this.categories;
|
||||||
|
},
|
||||||
|
|
||||||
createCategory: function(data){
|
createCategory: function(data){
|
||||||
var self = this;
|
var self = this;
|
||||||
|
|
||||||
@@ -78,7 +88,7 @@ var CategoryListBase = new Class({
|
|||||||
|
|
||||||
var category_list;
|
var category_list;
|
||||||
var group = self.settings.createGroup({
|
var group = self.settings.createGroup({
|
||||||
'label': 'Category order'
|
'label': 'Category ordering'
|
||||||
}).adopt(
|
}).adopt(
|
||||||
new Element('.ctrlHolder#category_ordering').adopt(
|
new Element('.ctrlHolder#category_ordering').adopt(
|
||||||
new Element('label[text=Order]'),
|
new Element('label[text=Order]'),
|
||||||
@@ -138,7 +148,6 @@ var Category = new Class({
|
|||||||
var self = this;
|
var self = this;
|
||||||
|
|
||||||
self.data = data;
|
self.data = data;
|
||||||
self.types = [];
|
|
||||||
|
|
||||||
self.create();
|
self.create();
|
||||||
|
|
||||||
@@ -165,15 +174,16 @@ var Category = new Class({
|
|||||||
new Element('input.inlay', {
|
new Element('input.inlay', {
|
||||||
'type':'text',
|
'type':'text',
|
||||||
'value': data.label,
|
'value': data.label,
|
||||||
'placeholder': 'Label'
|
'placeholder': 'Example: Kids, Horror or His'
|
||||||
})
|
}),
|
||||||
|
new Element('p.formHint', {'text': 'See global filters for explanation.'})
|
||||||
),
|
),
|
||||||
new Element('.category_preferred.ctrlHolder').adopt(
|
new Element('.category_preferred.ctrlHolder').adopt(
|
||||||
new Element('label', {'text':'Preferred'}),
|
new Element('label', {'text':'Preferred'}),
|
||||||
new Element('input.inlay', {
|
new Element('input.inlay', {
|
||||||
'type':'text',
|
'type':'text',
|
||||||
'value': data.preferred,
|
'value': data.preferred,
|
||||||
'placeholder': 'Ignored'
|
'placeholder': 'Blu-ray, DTS'
|
||||||
})
|
})
|
||||||
),
|
),
|
||||||
new Element('.category_required.ctrlHolder').adopt(
|
new Element('.category_required.ctrlHolder').adopt(
|
||||||
@@ -181,7 +191,7 @@ var Category = new Class({
|
|||||||
new Element('input.inlay', {
|
new Element('input.inlay', {
|
||||||
'type':'text',
|
'type':'text',
|
||||||
'value': data.required,
|
'value': data.required,
|
||||||
'placeholder': 'Required'
|
'placeholder': 'Example: DTS, AC3 & English'
|
||||||
})
|
})
|
||||||
),
|
),
|
||||||
new Element('.category_ignored.ctrlHolder').adopt(
|
new Element('.category_ignored.ctrlHolder').adopt(
|
||||||
@@ -189,7 +199,7 @@ var Category = new Class({
|
|||||||
new Element('input.inlay', {
|
new Element('input.inlay', {
|
||||||
'type':'text',
|
'type':'text',
|
||||||
'value': data.ignored,
|
'value': data.ignored,
|
||||||
'placeholder': 'Ignored'
|
'placeholder': 'Example: dubbed, swesub, french'
|
||||||
})
|
})
|
||||||
)
|
)
|
||||||
);
|
);
|
||||||
|
|||||||
@@ -2,7 +2,7 @@ from couchpotato import get_session
|
|||||||
from couchpotato.api import addApiView
|
from couchpotato.api import addApiView
|
||||||
from couchpotato.core.event import fireEvent, fireEventAsync, addEvent
|
from couchpotato.core.event import fireEvent, fireEventAsync, addEvent
|
||||||
from couchpotato.core.helpers.encoding import toUnicode, simplifyString
|
from couchpotato.core.helpers.encoding import toUnicode, simplifyString
|
||||||
from couchpotato.core.helpers.variable import getImdb, splitString
|
from couchpotato.core.helpers.variable import getImdb, splitString, tryInt
|
||||||
from couchpotato.core.logger import CPLog
|
from couchpotato.core.logger import CPLog
|
||||||
from couchpotato.core.plugins.base import Plugin
|
from couchpotato.core.plugins.base import Plugin
|
||||||
from couchpotato.core.settings.model import Library, LibraryTitle, Movie, \
|
from couchpotato.core.settings.model import Library, LibraryTitle, Movie, \
|
||||||
@@ -452,6 +452,10 @@ class MoviePlugin(Plugin):
|
|||||||
|
|
||||||
m.profile_id = kwargs.get('profile_id')
|
m.profile_id = kwargs.get('profile_id')
|
||||||
|
|
||||||
|
cat_id = kwargs.get('category_id', None)
|
||||||
|
if cat_id is not None:
|
||||||
|
m.category_id = tryInt(cat_id) if tryInt(cat_id) > 0 else None
|
||||||
|
|
||||||
# Remove releases
|
# Remove releases
|
||||||
for rel in m.releases:
|
for rel in m.releases:
|
||||||
if rel.status_id is available_status.get('id'):
|
if rel.status_id is available_status.get('id'):
|
||||||
|
|||||||
@@ -521,6 +521,11 @@ MA.Edit = new Class({
|
|||||||
self.profile_select = new Element('select', {
|
self.profile_select = new Element('select', {
|
||||||
'name': 'profile'
|
'name': 'profile'
|
||||||
}),
|
}),
|
||||||
|
self.category_select = new Element('select', {
|
||||||
|
'name': 'category'
|
||||||
|
}).grab(
|
||||||
|
new Element('option', {'value': -1, 'text': 'None'})
|
||||||
|
),
|
||||||
new Element('a.button.edit', {
|
new Element('a.button.edit', {
|
||||||
'text': 'Save & Search',
|
'text': 'Save & Search',
|
||||||
'events': {
|
'events': {
|
||||||
@@ -540,7 +545,34 @@ MA.Edit = new Class({
|
|||||||
});
|
});
|
||||||
|
|
||||||
|
|
||||||
Quality.getActiveProfiles().each(function(profile){
|
// Fill categories
|
||||||
|
var categories = CategoryList.getAll();
|
||||||
|
|
||||||
|
if(categories.length == 0)
|
||||||
|
self.category_select.hide();
|
||||||
|
else {
|
||||||
|
self.category_select.show();
|
||||||
|
categories.each(function(category){
|
||||||
|
|
||||||
|
var category_id = category.data.id;
|
||||||
|
|
||||||
|
new Element('option', {
|
||||||
|
'value': category_id,
|
||||||
|
'text': category.data.label
|
||||||
|
}).inject(self.category_select);
|
||||||
|
|
||||||
|
if(self.movie.category && self.movie.category.data && self.movie.category.data.id == category_id)
|
||||||
|
self.category_select.set('value', category_id);
|
||||||
|
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
// Fill profiles
|
||||||
|
var profiles = Quality.getActiveProfiles();
|
||||||
|
if(profiles.length == 1)
|
||||||
|
self.profile_select.hide();
|
||||||
|
|
||||||
|
profiles.each(function(profile){
|
||||||
|
|
||||||
var profile_id = profile.id ? profile.id : profile.data.id;
|
var profile_id = profile.id ? profile.id : profile.data.id;
|
||||||
|
|
||||||
@@ -551,6 +583,7 @@ MA.Edit = new Class({
|
|||||||
|
|
||||||
if(self.movie.profile && self.movie.profile.data && self.movie.profile.data.id == profile_id)
|
if(self.movie.profile && self.movie.profile.data && self.movie.profile.data.id == profile_id)
|
||||||
self.profile_select.set('value', profile_id);
|
self.profile_select.set('value', profile_id);
|
||||||
|
|
||||||
});
|
});
|
||||||
|
|
||||||
}
|
}
|
||||||
@@ -566,7 +599,8 @@ MA.Edit = new Class({
|
|||||||
'data': {
|
'data': {
|
||||||
'id': self.movie.get('id'),
|
'id': self.movie.get('id'),
|
||||||
'default_title': self.title_select.get('value'),
|
'default_title': self.title_select.get('value'),
|
||||||
'profile_id': self.profile_select.get('value')
|
'profile_id': self.profile_select.get('value'),
|
||||||
|
'category_id': self.category_select.get('value')
|
||||||
},
|
},
|
||||||
'useSpinner': true,
|
'useSpinner': true,
|
||||||
'spinnerTarget': $(self.movie),
|
'spinnerTarget': $(self.movie),
|
||||||
|
|||||||
@@ -14,6 +14,7 @@ var Movie = new Class({
|
|||||||
self.el = new Element('div.movie');
|
self.el = new Element('div.movie');
|
||||||
|
|
||||||
self.profile = Quality.getProfile(data.profile_id) || {};
|
self.profile = Quality.getProfile(data.profile_id) || {};
|
||||||
|
self.category = CategoryList.getCategory(data.category_id) || {};
|
||||||
self.parent(self, options);
|
self.parent(self, options);
|
||||||
|
|
||||||
self.addEvents();
|
self.addEvents();
|
||||||
@@ -111,6 +112,7 @@ var Movie = new Class({
|
|||||||
self.removeView();
|
self.removeView();
|
||||||
|
|
||||||
self.profile = Quality.getProfile(self.data.profile_id) || {};
|
self.profile = Quality.getProfile(self.data.profile_id) || {};
|
||||||
|
self.category = CategoryList.getCategory(self.data.category_id) || {};
|
||||||
self.create();
|
self.create();
|
||||||
|
|
||||||
self.busy(false);
|
self.busy(false);
|
||||||
|
|||||||
@@ -165,7 +165,8 @@
|
|||||||
@media all and (max-width: 480px) {
|
@media all and (max-width: 480px) {
|
||||||
|
|
||||||
.movie_result .options select[name=title] { width: 90px; }
|
.movie_result .options select[name=title] { width: 90px; }
|
||||||
.movie_result .options select[name=profile] { width: 60px; }
|
.movie_result .options select[name=profile] { width: 50px; }
|
||||||
|
.movie_result .options select[name=category] { width: 50px; }
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -217,26 +218,51 @@
|
|||||||
position: absolute;
|
position: absolute;
|
||||||
top: 20%;
|
top: 20%;
|
||||||
left: 15px;
|
left: 15px;
|
||||||
right: 60px;
|
right: 7px;
|
||||||
vertical-align: middle;
|
vertical-align: middle;
|
||||||
}
|
}
|
||||||
|
|
||||||
.movie_result .info h2 {
|
.movie_result .info h2 {
|
||||||
|
margin: 0;
|
||||||
font-weight: normal;
|
font-weight: normal;
|
||||||
font-size: 20px;
|
font-size: 20px;
|
||||||
|
padding: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
.search_form .info h2 {
|
||||||
|
position: absolute;
|
||||||
|
width: 100%;
|
||||||
|
}
|
||||||
|
|
||||||
|
.movie_result .info h2 .title {
|
||||||
display: block;
|
display: block;
|
||||||
margin: 0;
|
margin: 0;
|
||||||
text-overflow: ellipsis;
|
text-overflow: ellipsis;
|
||||||
overflow: hidden;
|
overflow: hidden;
|
||||||
white-space: nowrap;
|
white-space: nowrap;
|
||||||
width: 100%;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
.movie_result .info h2 span {
|
.search_form .info h2 .title {
|
||||||
padding: 0 5px;
|
position: absolute;
|
||||||
position: absolute;
|
width: 88%;
|
||||||
right: -60px;
|
}
|
||||||
}
|
|
||||||
|
.movie_result .info h2 .year {
|
||||||
|
padding: 0 5px;
|
||||||
|
text-align: center;
|
||||||
|
position: absolute;
|
||||||
|
width: 12%;
|
||||||
|
right: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
@media all and (max-width: 480px) {
|
||||||
|
|
||||||
|
.search_form .info h2 .year {
|
||||||
|
font-size: 12px;
|
||||||
|
margin-top: 7px;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
.search_form .mask,
|
.search_form .mask,
|
||||||
.movie_result .mask {
|
.movie_result .mask {
|
||||||
|
|||||||
@@ -216,9 +216,10 @@ Block.Search.Item = new Class({
|
|||||||
}
|
}
|
||||||
}).adopt(
|
}).adopt(
|
||||||
self.info_container = new Element('div.info').adopt(
|
self.info_container = new Element('div.info').adopt(
|
||||||
self.title = new Element('h2', {
|
new Element('h2').adopt(
|
||||||
'text': info.titles && info.titles.length > 0 ? info.titles[0] : 'Unknown'
|
self.title = new Element('span.title', {
|
||||||
}).adopt(
|
'text': info.titles && info.titles.length > 0 ? info.titles[0] : 'Unknown'
|
||||||
|
}),
|
||||||
self.year = info.year ? new Element('span.year', {
|
self.year = info.year ? new Element('span.year', {
|
||||||
'text': info.year
|
'text': info.year
|
||||||
}) : null
|
}) : null
|
||||||
@@ -274,7 +275,9 @@ Block.Search.Item = new Class({
|
|||||||
|
|
||||||
add: function(e){
|
add: function(e){
|
||||||
var self = this;
|
var self = this;
|
||||||
(e).preventDefault();
|
|
||||||
|
if(e)
|
||||||
|
(e).preventDefault();
|
||||||
|
|
||||||
self.loadingMask();
|
self.loadingMask();
|
||||||
|
|
||||||
@@ -282,7 +285,8 @@ Block.Search.Item = new Class({
|
|||||||
'data': {
|
'data': {
|
||||||
'identifier': self.info.imdb,
|
'identifier': self.info.imdb,
|
||||||
'title': self.title_select.get('value'),
|
'title': self.title_select.get('value'),
|
||||||
'profile_id': self.profile_select.get('value')
|
'profile_id': self.profile_select.get('value'),
|
||||||
|
'category_id': self.category_select.get('value')
|
||||||
},
|
},
|
||||||
'onComplete': function(json){
|
'onComplete': function(json){
|
||||||
self.options_el.empty();
|
self.options_el.empty();
|
||||||
@@ -335,7 +339,12 @@ Block.Search.Item = new Class({
|
|||||||
self.profile_select = new Element('select', {
|
self.profile_select = new Element('select', {
|
||||||
'name': 'profile'
|
'name': 'profile'
|
||||||
}),
|
}),
|
||||||
new Element('a.button', {
|
self.category_select = new Element('select', {
|
||||||
|
'name': 'category'
|
||||||
|
}).grab(
|
||||||
|
new Element('option', {'value': -1, 'text': 'None'})
|
||||||
|
),
|
||||||
|
self.add_button = new Element('a.button', {
|
||||||
'text': 'Add',
|
'text': 'Add',
|
||||||
'events': {
|
'events': {
|
||||||
'click': self.add.bind(self)
|
'click': self.add.bind(self)
|
||||||
@@ -350,7 +359,28 @@ Block.Search.Item = new Class({
|
|||||||
}).inject(self.title_select)
|
}).inject(self.title_select)
|
||||||
})
|
})
|
||||||
|
|
||||||
Quality.getActiveProfiles().each(function(profile){
|
|
||||||
|
// Fill categories
|
||||||
|
var categories = CategoryList.getAll();
|
||||||
|
|
||||||
|
if(categories.length == 0)
|
||||||
|
self.category_select.hide();
|
||||||
|
else {
|
||||||
|
self.category_select.show();
|
||||||
|
categories.each(function(category){
|
||||||
|
new Element('option', {
|
||||||
|
'value': category.data.id,
|
||||||
|
'text': category.data.label
|
||||||
|
}).inject(self.category_select);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
// Fill profiles
|
||||||
|
var profiles = Quality.getActiveProfiles();
|
||||||
|
if(profiles.length == 1)
|
||||||
|
self.profile_select.hide();
|
||||||
|
|
||||||
|
profiles.each(function(profile){
|
||||||
new Element('option', {
|
new Element('option', {
|
||||||
'value': profile.id ? profile.id : profile.data.id,
|
'value': profile.id ? profile.id : profile.data.id,
|
||||||
'text': profile.label ? profile.label : profile.data.label
|
'text': profile.label ? profile.label : profile.data.label
|
||||||
@@ -358,6 +388,10 @@ Block.Search.Item = new Class({
|
|||||||
});
|
});
|
||||||
|
|
||||||
self.options_el.addClass('set');
|
self.options_el.addClass('set');
|
||||||
|
|
||||||
|
if(categories.length == 0 && self.title_select.getElements('option').length == 1 && profiles.length == 1)
|
||||||
|
self.add();
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
},
|
},
|
||||||
|
|||||||
@@ -103,7 +103,8 @@ var QualityBase = new Class({
|
|||||||
|
|
||||||
var profile_list;
|
var profile_list;
|
||||||
var group = self.settings.createGroup({
|
var group = self.settings.createGroup({
|
||||||
'label': 'Profile Defaults'
|
'label': 'Profile Defaults',
|
||||||
|
'description': '(Needs refresh \'' +(App.isMac() ? 'CMD+R' : 'F5')+ '\' after editing)'
|
||||||
}).adopt(
|
}).adopt(
|
||||||
new Element('.ctrlHolder#profile_ordering').adopt(
|
new Element('.ctrlHolder#profile_ordering').adopt(
|
||||||
new Element('label[text=Order]'),
|
new Element('label[text=Order]'),
|
||||||
|
|||||||
@@ -34,6 +34,7 @@
|
|||||||
left: 15px;
|
left: 15px;
|
||||||
right: 15px;
|
right: 15px;
|
||||||
bottom: 15px;
|
bottom: 15px;
|
||||||
|
overflow: hidden;
|
||||||
}
|
}
|
||||||
|
|
||||||
.suggestions .movie_result .data .info h2 {
|
.suggestions .movie_result .data .info h2 {
|
||||||
@@ -83,6 +84,17 @@
|
|||||||
.suggestions .movie_result .options {
|
.suggestions .movie_result .options {
|
||||||
left: 100px;
|
left: 100px;
|
||||||
}
|
}
|
||||||
|
.suggestions .movie_result .options select[name=title] { width: 100%; }
|
||||||
|
.suggestions .movie_result .options select[name=profile] { width: 100%; }
|
||||||
|
.suggestions .movie_result .options select[name=category] { width: 100%; }
|
||||||
|
|
||||||
|
.suggestions .movie_result .button {
|
||||||
|
position: absolute;
|
||||||
|
margin: 2px 0 0 0;
|
||||||
|
right: 15px;
|
||||||
|
bottom: 15px;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
.suggestions .movie_result .thumbnail {
|
.suggestions .movie_result .thumbnail {
|
||||||
width: 100px;
|
width: 100px;
|
||||||
|
|||||||
Reference in new issue
Block a user