Wizard start
This commit is contained in:
@@ -22,13 +22,12 @@ var CouchPotato = new Class({
|
||||
self.createLayout();
|
||||
self.createPages();
|
||||
|
||||
History.addEvent('change', self.openPage.bind(self));
|
||||
|
||||
if(window.location.hash)
|
||||
History.handleInitialState();
|
||||
else
|
||||
self.openPage(window.location.pathname);
|
||||
|
||||
History.addEvent('change', self.openPage.bind(self));
|
||||
self.c.addEvent('click:relay(a[href]:not([target=_blank]):not([normalhref=true]))', self.pushState.bind(self));
|
||||
},
|
||||
|
||||
@@ -79,6 +78,10 @@ var CouchPotato = new Class({
|
||||
openPage: function(url) {
|
||||
var self = this;
|
||||
|
||||
var current_url = url.replace(/^\/+|\/+$/g, '');
|
||||
if(current_url == self.current_url)
|
||||
return;
|
||||
|
||||
self.route.parse(url);
|
||||
var page_name = self.route.getPage().capitalize();
|
||||
var action = self.route.getAction();
|
||||
@@ -89,14 +92,15 @@ var CouchPotato = new Class({
|
||||
|
||||
try {
|
||||
var page = self.pages[page_name] || self.pages.Wanted;
|
||||
page.open(action, params);
|
||||
page.show();
|
||||
page.open(action, params);
|
||||
page.show();
|
||||
}
|
||||
catch(e){
|
||||
p("Can't open page:" + url)
|
||||
console.error("Can't open page:" + url, e)
|
||||
}
|
||||
|
||||
self.current_page = page;
|
||||
self.current_url = current_url;
|
||||
|
||||
},
|
||||
|
||||
@@ -160,6 +164,10 @@ var CouchPotato = new Class({
|
||||
unBlockPage: function(){
|
||||
var self = this;
|
||||
self.mask.hide();
|
||||
},
|
||||
|
||||
createUrl: function(action, params){
|
||||
return this.options.base_url + (action ? action+'/' : '') + (params ? '?'+Object.toQueryString(params) : '')
|
||||
}
|
||||
|
||||
});
|
||||
@@ -314,4 +322,5 @@ function randomString(length, extra) {
|
||||
return this.sort(comparer);
|
||||
});
|
||||
|
||||
})();
|
||||
})();
|
||||
|
||||
|
||||
@@ -33,9 +33,11 @@ var PageBase = new Class({
|
||||
//p('Opening: ' +self.getName() + ', ' + action + ', ' + Object.toQueryString(params));
|
||||
|
||||
try {
|
||||
self.el.empty();
|
||||
var elements = self[action+'Action'](params);
|
||||
self.el.adopt(elements);
|
||||
if(elements !== undefined){
|
||||
self.el.empty();
|
||||
self.el.adopt(elements);
|
||||
}
|
||||
|
||||
self.fireEvent('opened');
|
||||
}
|
||||
|
||||
@@ -4,15 +4,9 @@ Page.Settings = new Class({
|
||||
|
||||
name: 'settings',
|
||||
title: 'Change settings.',
|
||||
wizard_only: false,
|
||||
|
||||
tabs: {
|
||||
'general': {},
|
||||
'searcher': {},
|
||||
'providers': {},
|
||||
'downloaders': {},
|
||||
'notifications': {},
|
||||
'renamer': {}
|
||||
},
|
||||
tabs: {},
|
||||
|
||||
open: function(action, params){
|
||||
var self = this;
|
||||
@@ -20,9 +14,10 @@ Page.Settings = new Class({
|
||||
self.params = params;
|
||||
|
||||
if(!self.data)
|
||||
self.getData(self.create.bind(self))
|
||||
else
|
||||
self.getData(self.create.bind(self));
|
||||
else {
|
||||
self.openTab(action);
|
||||
}
|
||||
},
|
||||
|
||||
openTab: function(action){
|
||||
@@ -88,7 +83,7 @@ Page.Settings = new Class({
|
||||
},
|
||||
|
||||
create: function(json){
|
||||
var self = this
|
||||
var self = this;
|
||||
|
||||
self.el.adopt(
|
||||
self.tabs_container = new Element('ul.tabs'),
|
||||
@@ -108,12 +103,7 @@ Page.Settings = new Class({
|
||||
);
|
||||
self.showAdvanced();
|
||||
|
||||
new Form.Check(self.advanced_toggle)
|
||||
|
||||
// Create tabs
|
||||
Object.each(self.tabs, function(tab, tab_name){
|
||||
self.createTab(tab_name, tab)
|
||||
});
|
||||
new Form.Check(self.advanced_toggle);
|
||||
|
||||
// Add content to tabs
|
||||
Object.each(json.options, function(section, section_name){
|
||||
@@ -121,6 +111,13 @@ Page.Settings = new Class({
|
||||
// Add groups to content
|
||||
section.groups.sortBy('order').each(function(group){
|
||||
|
||||
if(self.wizard_only && !group.wizard)
|
||||
return;
|
||||
|
||||
// Create tab
|
||||
if(!self.tabs[group.tab] || !self.tabs[group.tab].groups)
|
||||
self.createTab(group.tab, {});
|
||||
|
||||
// Create the group
|
||||
if(!self.tabs[group.tab].groups[group.name]){
|
||||
var group_el = self.createGroup(group)
|
||||
@@ -132,7 +129,7 @@ Page.Settings = new Class({
|
||||
// Add options to group
|
||||
group.options.sortBy('order').each(function(option){
|
||||
var class_name = (option.type || 'string').capitalize();
|
||||
var input = new Option[class_name](self, section_name, option.name, option);
|
||||
var input = new Option[class_name](section_name, option.name, self.getValue(section_name, option.name), option);
|
||||
input.inject(self.tabs[group.tab].groups[group.name]);
|
||||
input.fireEvent('injected');
|
||||
});
|
||||
@@ -152,7 +149,7 @@ Page.Settings = new Class({
|
||||
return self.tabs[tab_name].tab
|
||||
|
||||
var label = (tab.label || tab.name || tab_name).capitalize()
|
||||
var tab_el = new Element('li').adopt(
|
||||
var tab_el = new Element('li.t_'+tab_name).adopt(
|
||||
new Element('a', {
|
||||
'href': '/'+self.name+'/'+tab_name+'/',
|
||||
'text': label
|
||||
@@ -202,13 +199,13 @@ var OptionBase = new Class({
|
||||
focused_class : 'focused',
|
||||
save_on_change: true,
|
||||
|
||||
initialize: function(parent, section, name, options){
|
||||
initialize: function(section, name, value, options){
|
||||
var self = this
|
||||
self.setOptions(options)
|
||||
|
||||
self.page = parent;
|
||||
self.section = section;
|
||||
self.name = name;
|
||||
self.value = value;
|
||||
|
||||
self.createBase();
|
||||
self.create();
|
||||
@@ -316,8 +313,7 @@ var OptionBase = new Class({
|
||||
},
|
||||
|
||||
getSettingValue: function(){
|
||||
var self = this;
|
||||
return self.page.getValue(self.section, self.name);
|
||||
return this.value;
|
||||
},
|
||||
|
||||
inject: function(el, position){
|
||||
@@ -571,7 +567,7 @@ Option.Directory = new Class({
|
||||
}
|
||||
})
|
||||
)
|
||||
).inject(self.el)
|
||||
).inject(self.input, 'before');
|
||||
|
||||
new Form.Check(self.show_hidden);
|
||||
}
|
||||
|
||||
@@ -24,216 +24,219 @@ Page.Wanted = new Class({
|
||||
});
|
||||
|
||||
var MovieActions = {};
|
||||
window.addEvent('domready', function(){
|
||||
|
||||
MovieActions.Wanted = {
|
||||
'IMBD': IMDBAction
|
||||
,'releases': ReleaseAction
|
||||
|
||||
,'Edit': new Class({
|
||||
|
||||
Extends: MovieAction,
|
||||
|
||||
create: function(){
|
||||
var self = this;
|
||||
|
||||
self.el = new Element('a.edit', {
|
||||
'title': 'Refresh the movie info and do a forced search',
|
||||
'events': {
|
||||
'click': self.editMovie.bind(self)
|
||||
MovieActions.Wanted = {
|
||||
'IMBD': IMDBAction
|
||||
,'releases': ReleaseAction
|
||||
|
||||
,'Edit': new Class({
|
||||
|
||||
Extends: MovieAction,
|
||||
|
||||
create: function(){
|
||||
var self = this;
|
||||
|
||||
self.el = new Element('a.edit', {
|
||||
'title': 'Refresh the movie info and do a forced search',
|
||||
'events': {
|
||||
'click': self.editMovie.bind(self)
|
||||
}
|
||||
});
|
||||
|
||||
},
|
||||
|
||||
editMovie: function(e){
|
||||
var self = this;
|
||||
(e).stop();
|
||||
|
||||
if(!self.options_container){
|
||||
self.options_container = new Element('div.options').adopt(
|
||||
$(self.movie.thumbnail).clone(),
|
||||
new Element('div.form', {
|
||||
'styles': {
|
||||
'line-height': self.movie.getHeight()
|
||||
}
|
||||
}).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');
|
||||
|
||||
Array.each(self.movie.data.library.titles, function(alt){
|
||||
new Element('option', {
|
||||
'text': alt.title
|
||||
}).inject(self.title_select);
|
||||
});
|
||||
|
||||
Object.each(Quality.getActiveProfiles(), function(profile){
|
||||
new Element('option', {
|
||||
'value': profile.id ? profile.id : profile.data.id,
|
||||
'text': profile.label ? profile.label : profile.data.label
|
||||
}).inject(self.profile_select);
|
||||
self.profile_select.set('value', self.movie.profile.get('id'));
|
||||
});
|
||||
|
||||
}
|
||||
});
|
||||
|
||||
},
|
||||
|
||||
editMovie: function(e){
|
||||
var self = this;
|
||||
(e).stop();
|
||||
|
||||
if(!self.options_container){
|
||||
self.options_container = new Element('div.options').adopt(
|
||||
$(self.movie.thumbnail).clone(),
|
||||
new Element('div.form', {
|
||||
self.movie.slide('in');
|
||||
},
|
||||
|
||||
save: function(e){
|
||||
(e).stop();
|
||||
var self = this;
|
||||
|
||||
Api.request('movie.edit', {
|
||||
'data': {
|
||||
'id': self.movie.get('id'),
|
||||
'default_title': self.title_select.get('value'),
|
||||
'profile_id': self.profile_select.get('value')
|
||||
},
|
||||
'useSpinner': true,
|
||||
'spinnerTarget': $(self.movie),
|
||||
'onComplete': function(){
|
||||
self.movie.quality.set('text', self.profile_select.getSelected()[0].get('text'));
|
||||
self.movie.title.set('text', self.title_select.getSelected()[0].get('text'));
|
||||
}
|
||||
});
|
||||
|
||||
self.movie.slide('out');
|
||||
}
|
||||
|
||||
})
|
||||
|
||||
,'Refresh': new Class({
|
||||
|
||||
Extends: MovieAction,
|
||||
|
||||
create: function(){
|
||||
var self = this;
|
||||
|
||||
self.el = new Element('a.refresh', {
|
||||
'title': 'Refresh the movie info and do a forced search',
|
||||
'events': {
|
||||
'click': self.doSearch.bind(self)
|
||||
}
|
||||
});
|
||||
|
||||
},
|
||||
|
||||
doSearch: function(e){
|
||||
var self = this;
|
||||
(e).stop();
|
||||
|
||||
Api.request('movie.refresh', {
|
||||
'data': {
|
||||
'id': self.movie.get('id')
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
})
|
||||
|
||||
,'Delete': new Class({
|
||||
|
||||
Extends: MovieAction,
|
||||
|
||||
Implements: [Chain],
|
||||
|
||||
create: function(){
|
||||
var self = this;
|
||||
|
||||
self.el = new Element('a.delete', {
|
||||
'title': 'Remove the movie from your wanted list',
|
||||
'events': {
|
||||
'click': self.showConfirm.bind(self)
|
||||
}
|
||||
});
|
||||
|
||||
},
|
||||
|
||||
showConfirm: function(e){
|
||||
var self = this;
|
||||
(e).stop();
|
||||
|
||||
if(!self.delete_container){
|
||||
self.delete_container = new Element('div.delete_container', {
|
||||
'styles': {
|
||||
'line-height': self.movie.getHeight()
|
||||
}
|
||||
}).adopt(
|
||||
self.title_select = new Element('select', {
|
||||
'name': 'title'
|
||||
}),
|
||||
self.profile_select = new Element('select', {
|
||||
'name': 'profile'
|
||||
}),
|
||||
new Element('a.button.edit', {
|
||||
'text': 'Save',
|
||||
new Element('a.cancel', {
|
||||
'text': 'Cancel',
|
||||
'events': {
|
||||
'click': self.save.bind(self)
|
||||
'click': self.hideConfirm.bind(self)
|
||||
}
|
||||
}),
|
||||
new Element('span.or', {
|
||||
'text': 'or'
|
||||
}),
|
||||
new Element('a.button.delete', {
|
||||
'text': 'Delete ' + self.movie.title.get('text'),
|
||||
'events': {
|
||||
'click': self.del.bind(self)
|
||||
}
|
||||
})
|
||||
)
|
||||
).inject(self.movie, 'top');
|
||||
|
||||
Array.each(self.movie.data.library.titles, function(alt){
|
||||
new Element('option', {
|
||||
'text': alt.title
|
||||
}).inject(self.title_select);
|
||||
});
|
||||
|
||||
Object.each(Quality.getActiveProfiles(), function(profile){
|
||||
new Element('option', {
|
||||
'value': profile.id ? profile.id : profile.data.id,
|
||||
'text': profile.label ? profile.label : profile.data.label
|
||||
}).inject(self.profile_select);
|
||||
self.profile_select.set('value', self.movie.profile.get('id'));
|
||||
});
|
||||
|
||||
}
|
||||
self.movie.slide('in');
|
||||
},
|
||||
|
||||
save: function(e){
|
||||
(e).stop();
|
||||
var self = this;
|
||||
|
||||
Api.request('movie.edit', {
|
||||
'data': {
|
||||
'id': self.movie.get('id'),
|
||||
'default_title': self.title_select.get('value'),
|
||||
'profile_id': self.profile_select.get('value')
|
||||
},
|
||||
'useSpinner': true,
|
||||
'spinnerTarget': $(self.movie),
|
||||
'onComplete': function(){
|
||||
self.movie.quality.set('text', self.profile_select.getSelected()[0].get('text'));
|
||||
self.movie.title.set('text', self.title_select.getSelected()[0].get('text'));
|
||||
).inject(self.movie, 'top');
|
||||
}
|
||||
});
|
||||
|
||||
self.movie.slide('out');
|
||||
}
|
||||
|
||||
})
|
||||
|
||||
,'Refresh': new Class({
|
||||
|
||||
Extends: MovieAction,
|
||||
|
||||
create: function(){
|
||||
var self = this;
|
||||
|
||||
self.el = new Element('a.refresh', {
|
||||
'title': 'Refresh the movie info and do a forced search',
|
||||
'events': {
|
||||
'click': self.doSearch.bind(self)
|
||||
}
|
||||
});
|
||||
|
||||
},
|
||||
|
||||
doSearch: function(e){
|
||||
var self = this;
|
||||
(e).stop();
|
||||
|
||||
Api.request('movie.refresh', {
|
||||
'data': {
|
||||
'id': self.movie.get('id')
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
})
|
||||
|
||||
,'Delete': new Class({
|
||||
|
||||
Extends: MovieAction,
|
||||
|
||||
Implements: [Chain],
|
||||
|
||||
create: function(){
|
||||
var self = this;
|
||||
|
||||
self.el = new Element('a.delete', {
|
||||
'title': 'Remove the movie from your wanted list',
|
||||
'events': {
|
||||
'click': self.showConfirm.bind(self)
|
||||
}
|
||||
});
|
||||
|
||||
},
|
||||
|
||||
showConfirm: function(e){
|
||||
var self = this;
|
||||
(e).stop();
|
||||
|
||||
if(!self.delete_container){
|
||||
self.delete_container = new Element('div.delete_container', {
|
||||
'styles': {
|
||||
'line-height': self.movie.getHeight()
|
||||
|
||||
self.movie.slide('in');
|
||||
|
||||
},
|
||||
|
||||
hideConfirm: function(e){
|
||||
var self = this;
|
||||
(e).stop();
|
||||
|
||||
self.movie.slide('out');
|
||||
},
|
||||
|
||||
del: function(e){
|
||||
(e).stop();
|
||||
var self = this;
|
||||
|
||||
var movie = $(self.movie);
|
||||
|
||||
self.chain(
|
||||
function(){
|
||||
self.callChain();
|
||||
},
|
||||
function(){
|
||||
Api.request('movie.delete', {
|
||||
'data': {
|
||||
'id': self.movie.get('id')
|
||||
},
|
||||
'onComplete': function(){
|
||||
movie.set('tween', {
|
||||
'onComplete': function(){
|
||||
movie.destroy();
|
||||
}
|
||||
});
|
||||
movie.tween('height', 0);
|
||||
}
|
||||
});
|
||||
}
|
||||
}).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 ' + self.movie.title.get('text'),
|
||||
'events': {
|
||||
'click': self.del.bind(self)
|
||||
}
|
||||
})
|
||||
).inject(self.movie, 'top');
|
||||
);
|
||||
|
||||
self.callChain();
|
||||
|
||||
}
|
||||
|
||||
})
|
||||
};
|
||||
|
||||
MovieActions.Snatched = {
|
||||
'IMBD': IMDBAction
|
||||
,'Delete': MovieActions.Wanted.Delete
|
||||
};
|
||||
|
||||
self.movie.slide('in');
|
||||
|
||||
},
|
||||
|
||||
hideConfirm: function(e){
|
||||
var self = this;
|
||||
(e).stop();
|
||||
|
||||
self.movie.slide('out');
|
||||
},
|
||||
|
||||
del: function(e){
|
||||
(e).stop();
|
||||
var self = this;
|
||||
|
||||
var movie = $(self.movie);
|
||||
|
||||
self.chain(
|
||||
function(){
|
||||
self.callChain();
|
||||
},
|
||||
function(){
|
||||
Api.request('movie.delete', {
|
||||
'data': {
|
||||
'id': self.movie.get('id')
|
||||
},
|
||||
'onComplete': function(){
|
||||
movie.set('tween', {
|
||||
'onComplete': function(){
|
||||
movie.destroy();
|
||||
}
|
||||
});
|
||||
movie.tween('height', 0);
|
||||
}
|
||||
});
|
||||
}
|
||||
);
|
||||
|
||||
self.callChain();
|
||||
|
||||
}
|
||||
|
||||
})
|
||||
};
|
||||
|
||||
MovieActions.Snatched = {
|
||||
'IMBD': IMDBAction
|
||||
,'Delete': MovieActions.Wanted.Delete
|
||||
};
|
||||
})
|
||||
Reference in New Issue
Block a user