Combined setting list

This commit is contained in:
Ruud
2012-01-26 23:15:04 +01:00
parent 2a78e9f966
commit 79857b0ebd
8 changed files with 203 additions and 181 deletions
@@ -10,24 +10,24 @@ config = [{
'tab': 'automation',
'name': 'automation',
'label': 'Automation',
'description': 'Enable automatic movie adding',
'description': 'Minimal movie requirements',
'options': [
{
'name': 'year',
'default': 2011,
'Label': 'Minimal year',
'Label': 'Year',
'type': 'int',
},
{
'name': 'votes',
'default': 1000,
'Label': 'Minimal votes',
'Label': 'Votes',
'type': 'int',
},
{
'name': 'rating',
'default': 6.0,
'Label': 'Minimal rating',
'Label': 'Rating',
'type': 'float',
},
],
@@ -10,15 +10,22 @@ config = [{
'tab': 'automation',
'name': 'imdb_automation',
'label': 'IMDB',
'description': 'Enable automatic movie adding of IMDB watchlists',
'description': 'From any public IMDB watchlists',
'options': [
{
'name': 'automation_enabled',
'default': False,
'type': 'enabler',
},
{
'name': 'automation_urls_use',
'label': 'Use',
},
{
'name': 'automation_urls',
'label': 'url',
'type': 'combined',
'combine': ['automation_urls_use', 'automation_urls'],
},
],
},
@@ -10,13 +10,21 @@ config = [{
'tab': 'automation',
'name': 'kinepolis_automation',
'label': 'Kinepolis',
'description': 'Enable automatic movie adding from Kinepolis',
'description': 'from <a href="http://kinepolis.be">Kinepolis</a>',
'options': [
{
'name': 'automation_enabled',
'default': False,
'type': 'enabler',
},
{
'name': 'automation_use_requirements',
'label': 'Use requirements',
'description': 'Use the minimal requirements set above',
'default': True,
'advanced': True,
'type': 'bool',
},
],
},
],
@@ -35,7 +35,7 @@ class Kinepolis(Automation, RSS):
result = self.search(title)
if result:
if self.isMinimal(result):
if not self.conf('automation_use_requirements') or self.isMinimal(result):
movies.append(result)
return movies
@@ -23,13 +23,15 @@ config = [{
{
'name': 'host',
'default': 'nzb.su',
'description': 'The hostname of your newznab provider'
'description': 'The hostname of your newznab provider',
},
{
'name': 'api_key',
'default': '',
'label': 'Api Key',
'description': 'Can be found on your profile page',
'type': 'combined',
'combine': ['use', 'host', 'api_key'],
},
],
},
@@ -1,163 +0,0 @@
var MultipleNewznab = new Class({
input_types: ['use', 'host', 'api_key'],
initialize: function(page){
var self = this;
self.items = [];
self.values = [];
self.inputs = {};
self.page = page;
App.addEvent('load', self.addSettings.bind(self))
},
addSettings: function(){
var self = this;
self.settings = App.getPage(self.page || 'Settings')
self.settings.addEvent('create', function(){
self.fieldset = self.settings.tabs.providers.content.getElement('.section_newznab');
self.input_types.each(function(name){
self.inputs[name] = self.fieldset.getElement('input[name=newznab['+name+']]');
var values = self.inputs[name].get('value').split(',');
values.each(function(value, nr){
if (!self.values[nr]) self.values[nr] = {};
self.values[nr][name] = value.trim();
});
self.inputs[name].getParent().addClass('hide')
self.inputs[name].addEvent('change', self.addEmpty.bind(self))
});
self.values.each(function(item, nr){
self.createItem(item.use, item.host, item.api_key);
});
new Element('div.head').adopt(
new Element('abbr.host', {
'text': 'Host',
'title': self.inputs['host'].getNext().get('text')
}),
new Element('abbr.api_key', {
'text': 'Api Key',
'title': self.inputs['api_key'].getNext().get('text')
})
).inject(self.fieldset.getElement('h2'), 'after');
self.addEmpty();
})
},
add_empty_timeout: 0,
addEmpty: function(){
var self = this;
if(self.add_empty_timeout) clearTimeout(self.add_empty_timeout);
var has_empty = false;
self.items.each(function(ctrl_holder){
if(ctrl_holder.getElement('.host').get('value') == '' && ctrl_holder.getElement('.api_key').get('value') == ''){
has_empty = true;
}
ctrl_holder[has_empty ? 'addClass' : 'removeClass']('is_empty');
});
if(has_empty) return;
self.add_empty_timeout = setTimeout(function(){
self.createItem(false, null, null);
}, 10);
},
createItem: function(use, host, api){
var self = this;
var checkbox = new Element('input[type=checkbox].use.inlay', {
'checked': +use,
'events': {
'click': self.save.bind(self),
'change': self.save.bind(self)
}
})
var item = new Element('div.ctrlHolder').adopt(
checkbox,
new Element('input[type=text].host.inlay', {
'value': host,
'placeholder': 'Host',
'events': {
'keyup': self.save.bind(self),
'change': self.save.bind(self)
}
}),
new Element('input[type=text].api_key.inlay', {
'value': api,
'placeholder': 'Api hash key',
'events': {
'keyup': self.save.bind(self),
'change': self.save.bind(self)
}
}),
new Element('a.icon.delete', {
'events': {
'click': self.deleteItem.bind(self)
}
})
).inject(self.fieldset);
item[!host ? 'addClass' : 'removeClass']('is_empty');
new Form.Check(checkbox, {
'onChange': checkbox.fireEvent.bind(checkbox, 'change')
});
self.items.include(item)
},
save: function(){
var self = this;
var temp = {}
self.items.each(function(item, nr){
self.input_types.each(function(type){
var input = item.getElement('input.'+type);
if(input.getParent('.ctrlHolder').hasClass('is_empty')) return;
if(!temp[type]) temp[type] = [];
temp[type][nr] = input.get('type') == 'checkbox' ? +input.get('checked') : input.get('value').trim();
})
});
self.input_types.each(function(name){
self.inputs[name].set('value', temp[name].join(','));
self.inputs[name].fireEvent('change');
});
},
deleteItem: function(e){
var self = this;
(e).stop();
var item = e.target.getParent();
self.items.erase(item);
item.destroy();
self.save();
}
});
window.MNewznab = new MultipleNewznab();