You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 

175 lines
3.3 KiB

var PageBase = new Class({
Implements: [Options, Events],
options: {
},
order: 1,
has_tab: true,
name: '',
icon: null,
parent_page: null,
sub_pages: null,
initialize: function(parent_page, options) {
var self = this;
self.parent_page = parent_page;
self.setOptions(options);
// Create main page container
self.el = new Element('div', {
'class': 'page ' + self.getPageClass() + (' level_' + (options.level || 0))
});
// Stop hover events while scrolling
App.addEvent('load', function(){
setTimeout(function(){
if(!App.mobile_screen){
self.el.addEvent('scroll', self.preventHover.bind(self));
}
}, 100);
});
},
load: function(){
var self = this;
// Create tab for page
if(self.has_tab){
var nav;
if(self.parent_page && self.parent_page.navigation){
nav = self.parent_page.navigation;
}
else {
nav = App.getBlock('navigation');
}
self.tab = nav.addTab(self.name, {
'href': App.createUrl(self.getPageUrl()),
'title': self.title,
'text': self.name.capitalize(),
'class': self.icon ? 'icon-' + self.icon : null
});
}
if(self.sub_pages){
self.loadSubPages();
}
},
loadSubPages: function(){
var self = this;
var sub_pages = self.sub_pages;
self.sub_pages = [];
sub_pages.each(function(class_name){
var pg = new window[self.name.capitalize()+class_name](self, {
'level': 2
});
self.sub_pages[class_name] = pg;
self.sub_pages.include({
'order': pg.order,
'name': class_name,
'class': pg
});
});
self.sub_pages.stableSort(self.sortPageByOrder).each(function(page){
page['class'].load();
self.fireEvent('load'+page.name);
$(page['class']).inject(App.getPageContainer());
});
},
open: function(action, params){
var self = this;
//p('Opening: ' +self.getName() + ', ' + action + ', ' + Object.toQueryString(params));
try {
var elements;
if(!self[action+'Action']){
elements = self.defaultAction(action, params);
}
else {
elements = self[action+'Action'](params);
}
if(elements !== undefined){
self.el.empty();
self.el.adopt(elements);
}
App.getBlock('navigation').activate(self.name);
self.fireEvent('opened');
}
catch (e){
self.errorAction(e);
self.fireEvent('error');
}
},
openUrl: function(url){
if(History.getPath() != url)
History.push(url);
},
getPageUrl: function(){
var self = this;
return (self.parent_page && self.parent_page.getPageUrl ? self.parent_page.getPageUrl() + '/' : '') + self.name;
},
getPageClass: function(){
var self = this;
return (self.parent_page && self.parent_page.getPageClass ? self.parent_page.getPageClass() + '_' : '') + self.name;
},
errorAction: function(e){
p('Error, action not found', e);
},
getName: function(){
return this.name;
},
show: function(){
this.el.addClass('active');
},
hide: function(){
var self = this;
self.el.removeClass('active');
if(self.sub_pages){
self.sub_pages.each(function(sub_page){
sub_page['class'].hide();
});
}
},
preventHover: function(){
var self = this;
if(self.hover_timer) clearTimeout(self.hover_timer);
self.el.addClass('disable_hover');
self.hover_timer = setTimeout(function(){
self.el.removeClass('disable_hover');
}, 200);
},
toElement: function(){
return this.el;
}
});
var Page = {};