Wizard Base
This commit is contained in:
@@ -1,87 +1,225 @@
|
|||||||
var WizardBase = new Class({
|
Page.Wizard = new Class({
|
||||||
|
|
||||||
Implements: [Options, Events],
|
Extends: PageBase,
|
||||||
|
|
||||||
initialize: function(steps){
|
name: 'wizard',
|
||||||
|
has_tab: false,
|
||||||
|
|
||||||
|
options: {
|
||||||
|
'onOpened': function(){
|
||||||
|
App.fireEvent('unload');
|
||||||
|
App.getBlock('header').hide();
|
||||||
|
}
|
||||||
|
},
|
||||||
|
|
||||||
|
initialize: function(options){
|
||||||
var self = this;
|
var self = this;
|
||||||
|
self.parent(options);
|
||||||
|
|
||||||
self.steps = steps;
|
// Create steps
|
||||||
self.spotlight = new Spotlight([], {
|
self.steps = [
|
||||||
'fillColor': [0,0,0],
|
{'step':'index', 'title': 'Welcome'},
|
||||||
'soften': 0
|
{'step':'step1', 'title': 'Security'},
|
||||||
|
{'step':'step2', 'title': 'Downloaders'}
|
||||||
|
]
|
||||||
|
|
||||||
|
self.breadcrumbs = new Element('ul').inject(self.el);
|
||||||
|
Object.each(self.steps, function(step, nr){
|
||||||
|
step.el = new Element('li', {
|
||||||
|
'class': (nr == 0 ? 'active ' : '') + 'step_'+step.step,
|
||||||
|
'data-nr': nr,
|
||||||
|
'text': step.title
|
||||||
|
}).inject(self.breadcrumbs)
|
||||||
});
|
});
|
||||||
//window.addEvent('resize', self.spotlight.create.bind(self.spotlight))
|
|
||||||
|
p(self.steps);
|
||||||
|
|
||||||
},
|
},
|
||||||
|
|
||||||
start: function(){
|
nextStep: function(e){
|
||||||
var self = this;
|
var self = this;
|
||||||
|
(e).stop();
|
||||||
var els = $(document.body).getElements("[name='core[username]'], [name='core[password]'], [name='core[launch_browser]']").getParent('.ctrlHolder')
|
|
||||||
|
|
||||||
p(els, self.spotlight.setElements(els))
|
|
||||||
|
|
||||||
self.spotlight.create();
|
|
||||||
|
|
||||||
},
|
var next = (self.current_step || 0)+1;
|
||||||
|
var step = self.steps[next];
|
||||||
|
self.breadcrumbs.getElement('.active').removeClass('active');
|
||||||
|
step.el.addClass('active');
|
||||||
|
|
||||||
nextStep: function(){
|
self.openUrl('/'+self.name+'/'+step.step+'/');
|
||||||
|
|
||||||
|
p('nextStep');
|
||||||
},
|
},
|
||||||
|
|
||||||
previousStep: function(){
|
previousStep: function(){
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
});
|
|
||||||
|
|
||||||
WizardBase.Screen = new Class({
|
|
||||||
|
|
||||||
initialize: function(data){
|
|
||||||
var self = this;
|
var self = this;
|
||||||
|
|
||||||
self.data = data;
|
|
||||||
self.create()
|
|
||||||
|
|
||||||
},
|
|
||||||
|
|
||||||
create: function(){
|
|
||||||
var self = this;
|
|
||||||
|
|
||||||
self.el = new Element('div.')
|
|
||||||
|
|
||||||
|
|
||||||
},
|
|
||||||
|
|
||||||
destroy: function(){
|
|
||||||
this.el.destroy();
|
|
||||||
|
|
||||||
return this
|
|
||||||
}
|
|
||||||
|
|
||||||
})
|
|
||||||
|
|
||||||
window.addEvent('domready', function(){
|
p('previousStep');
|
||||||
window.Wizard = new WizardBase([
|
},
|
||||||
{
|
|
||||||
'title': 'Fill in your username and password',
|
stop: function(){
|
||||||
'Description': 'Outside blabla',
|
var self = this;
|
||||||
'tab': 'general',
|
(e).stop();
|
||||||
'fields': ['username', 'password']
|
|
||||||
},
|
p('close');
|
||||||
{
|
},
|
||||||
|
|
||||||
|
// Welcome
|
||||||
|
indexAction: function(){
|
||||||
|
var self = this;
|
||||||
|
|
||||||
|
var step = new Page.Wizard.Step('welcome', {
|
||||||
|
'title': 'Welcome to the CouchPotato wizard',
|
||||||
|
'description': 'Before you can start creating that butt-formed hole in you couch, you must complete the following wizard.',
|
||||||
|
'groups': [
|
||||||
|
{
|
||||||
|
'content': new Element('a.button.green', {
|
||||||
|
'text': 'Go to the first step',
|
||||||
|
'events': {
|
||||||
|
'click': self.nextStep.bind(self)
|
||||||
|
}
|
||||||
|
})
|
||||||
|
},
|
||||||
|
{
|
||||||
|
'title': 'Skip wizard',
|
||||||
|
'description': 'You can always activate the wizard from within the settings page',
|
||||||
|
'content': new Element('a.button.orange', {
|
||||||
|
'text': 'I already know how this works, I\'ll fill it in manually, thanks.',
|
||||||
|
'events': {
|
||||||
|
'click': self.stop.bind(self)
|
||||||
|
}
|
||||||
|
})
|
||||||
|
}
|
||||||
|
]
|
||||||
|
});
|
||||||
|
|
||||||
|
return [self.breadcrumbs, step]
|
||||||
|
|
||||||
|
},
|
||||||
|
|
||||||
|
// Username password browser
|
||||||
|
step1Action: function(){
|
||||||
|
var self = this;
|
||||||
|
|
||||||
|
var step = new Page.Wizard.Step('security', {
|
||||||
|
'title': 'Security',
|
||||||
|
'description': 'Before you can start creating that butt-formed hole in you couch, you must complete the following wizard.',
|
||||||
|
'groups': [
|
||||||
|
{
|
||||||
|
'title': 'Fill in your username and password',
|
||||||
|
'description': 'Keep blank if you don\'t want to secure CP.',
|
||||||
|
'fields': ['core.username', 'core.password']
|
||||||
|
},
|
||||||
|
{
|
||||||
|
'title': 'Launch the browser when CP starts',
|
||||||
|
'fields': ['core.launch_browser']
|
||||||
|
}
|
||||||
|
]
|
||||||
|
})
|
||||||
|
|
||||||
|
return [self.breadcrumbs, step]
|
||||||
|
},
|
||||||
|
|
||||||
|
// NZB Torrent, downloaders
|
||||||
|
step2Action: function(){
|
||||||
|
var options = {
|
||||||
'title': 'What do you use to download your movies',
|
'title': 'What do you use to download your movies',
|
||||||
'answers': [
|
'answers': [
|
||||||
{'name': 'nzb', 'label': 'Usenet'},
|
{'name': 'nzb', 'label': 'Usenet'},
|
||||||
{'name': 'torrent', 'label': 'Torrents'}
|
{'name': 'torrent', 'label': 'Torrents'}
|
||||||
]
|
]
|
||||||
},
|
|
||||||
{
|
|
||||||
'title': 'Do you have a login for any of the following sites',
|
|
||||||
'tab': 'providers',
|
|
||||||
'needs': function(){
|
|
||||||
return self.config_nzb || self.config_torrent
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
])
|
}
|
||||||
|
|
||||||
|
// NZB show affiliates
|
||||||
|
// NZB: retention
|
||||||
|
// Downloaders
|
||||||
|
// Providers
|
||||||
|
// Automated registration nzb.su via email api
|
||||||
|
// Renamer
|
||||||
|
// Userscript, depending on browser
|
||||||
|
// Extras:
|
||||||
|
// Notifications
|
||||||
|
// Metadata
|
||||||
|
|
||||||
|
});
|
||||||
|
|
||||||
|
Page.Wizard.Step = new Class({
|
||||||
|
|
||||||
|
Implements: [Options],
|
||||||
|
|
||||||
|
initialize: function(name, options){
|
||||||
|
var self = this;
|
||||||
|
self.setOptions(options);
|
||||||
|
|
||||||
|
self.name = name;
|
||||||
|
self.create();
|
||||||
|
|
||||||
|
},
|
||||||
|
|
||||||
|
create: function(){
|
||||||
|
var self = this;
|
||||||
|
|
||||||
|
// Main element
|
||||||
|
self.el = new Element('div.step').addClass(self.name || '');
|
||||||
|
|
||||||
|
self.createTitleDescription(self.options, self.el);
|
||||||
|
|
||||||
|
// Groups
|
||||||
|
if(self.options.groups){
|
||||||
|
self.groups = new Element('div.groups').inject(self.el);
|
||||||
|
self.options.groups.each(self.createGroup.bind(self));
|
||||||
|
}
|
||||||
|
|
||||||
|
},
|
||||||
|
|
||||||
|
createGroup: function(options){
|
||||||
|
var self = this;
|
||||||
|
|
||||||
|
var group = new Element('div.group').inject(self.groups);
|
||||||
|
|
||||||
|
self.createTitleDescription(options, group);
|
||||||
|
|
||||||
|
// Content
|
||||||
|
if(options.content)
|
||||||
|
options.content.inject(group);
|
||||||
|
|
||||||
|
// Fields
|
||||||
|
if(options.fields)
|
||||||
|
options.fields.each(self.createField.bind(self))
|
||||||
|
|
||||||
|
|
||||||
|
},
|
||||||
|
|
||||||
|
createField: function(field){
|
||||||
|
|
||||||
|
},
|
||||||
|
|
||||||
|
createTitleDescription: function(options, inject_in){
|
||||||
|
var self = this;
|
||||||
|
|
||||||
|
|
||||||
|
// Title
|
||||||
|
if(options.title)
|
||||||
|
self.title = new Element('div.title', {
|
||||||
|
'text': options.title
|
||||||
|
}).inject(inject_in);
|
||||||
|
|
||||||
|
// Descriptions
|
||||||
|
if(options.description)
|
||||||
|
self.title = new Element('div.description', {
|
||||||
|
'text': options.description
|
||||||
|
}).inject(inject_in);
|
||||||
|
|
||||||
|
},
|
||||||
|
|
||||||
|
toElement: function(){
|
||||||
|
return this.el;
|
||||||
|
}
|
||||||
|
|
||||||
|
})
|
||||||
|
|
||||||
|
window.addEvent('domready', function(){
|
||||||
|
|
||||||
|
// Check if wizard is enabled
|
||||||
|
|
||||||
});
|
});
|
||||||
|
|||||||
@@ -33,7 +33,10 @@ var PageBase = new Class({
|
|||||||
//p('Opening: ' +self.getName() + ', ' + action + ', ' + Object.toQueryString(params));
|
//p('Opening: ' +self.getName() + ', ' + action + ', ' + Object.toQueryString(params));
|
||||||
|
|
||||||
try {
|
try {
|
||||||
self[action+'Action'](params);
|
self.el.empty();
|
||||||
|
var elements = self[action+'Action'](params);
|
||||||
|
self.el.adopt(elements);
|
||||||
|
|
||||||
self.fireEvent('opened');
|
self.fireEvent('opened');
|
||||||
}
|
}
|
||||||
catch (e){
|
catch (e){
|
||||||
@@ -41,6 +44,11 @@ var PageBase = new Class({
|
|||||||
self.fireEvent('error');
|
self.fireEvent('error');
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
|
||||||
|
openUrl: function(url){
|
||||||
|
if(History.getPath() != url)
|
||||||
|
History.push(url);
|
||||||
|
},
|
||||||
|
|
||||||
errorAction: function(e){
|
errorAction: function(e){
|
||||||
p('Error, action not found', e);
|
p('Error, action not found', e);
|
||||||
|
|||||||
Reference in New Issue
Block a user