Skip to content

Instantly share code, notes, and snippets.

@bitomule
Last active August 29, 2015 14:04
Show Gist options
  • Save bitomule/f836ea9731a43fdaaf17 to your computer and use it in GitHub Desktop.
Save bitomule/f836ea9731a43fdaaf17 to your computer and use it in GitHub Desktop.
var subs = new SubsManager({
// will be cached only 20 recently used subscriptions
cacheLimit: 20,
// any subscription will be expired after 5 minutes of inactivity
expireIn: 20
});
Router.configure({
layoutTemplate: 'layout',
loadingTemplate: 'loading'
});
Deps.autorun(function () {
subs.subscribe('userData',this.userId);
});
Deps.autorun(function () {
subs.subscribe('images');
subs.subscribe('projects');
subs.subscribe('tasks');
});
Router.onBeforeAction('loading');
Router.map(function(){
this.route('publichome',{
path: '/',
onAfterAction: function(){
document.title = "My app";
}
});
this.route('register',{
path: '/register',
onAfterAction: function(){
document.title = "Register";
}
});
this.route('login',{
path: '/:_domain/login',
data: function(){
if(this.ready())
{
Session.set('_domain', Domains.findOne().fullName);
Session.set('urlname', Domains.findOne().name);
return {name:Domains.findOne().fullName};
}
},
waitOn: function(){
var subscription = subs.subscribe('userDomain',this.params._domain,function(){
if(Domains.find().count() <= 0)
{
Router.go('register');
}
});
return [subscription];
},
onAfterAction: function(){
document.title = "Login";
}
});
this.route('home',{
path: '/:_domain',
data: function(){
return {'name':this.params._domain};
},
waitOn: function(){
return [subs.subscribe('userDomain',this.params._domain)];
},
onAfterAction: function(){
document.title = "Home";
if(Domains.find().count() <= 0)
{
Router.go('register');
}
}
});
this.route('project',{
path: '/:_domain/projects/:_project',
data: function(){
return {'name':this.params._domain};
},
waitOn: function(){
return [subs.subscribe('userDomain',this.params._domain)];
},
onAfterAction: function(){
document.title = "Project";
if(Domains.find().count() === 0) {
Router.go('register');
}
}
});
this.route('task',{
path: '/:_domain/tasks/:_task',
data: function(){
return {'name':this.params._domain};
},
waitOn: function(){
var subscription = subs.subscribe('userDomain',this.params._domain,function(){
if(Domains.find().count() <= 0)
{
Router.go('register');
}
});
return [subscription];
},
onAfterAction: function(){
document.title = "Task";
}
});
});
var requireLogin = function(pause){
var routeName = this.route.name;
if(!Meteor.userId()){
this.redirect('/' + this.params._domain + '/login');
pause();
}
};
var serverRequireLogin = function(pause){
var routeName = this.route.name;
if(!this.userId){
pause();
}
};
var usePrivateLayout = function(pause){
this.router.layout("privateLayout");
};
var usePublicLayout = function(pause){
this.router.layout("layout");
};
Router.onBeforeAction(requireLogin, {except: ['login','register','publichome','projectImageUpload']});
Router.onBeforeAction(serverRequireLogin, {only: ['projectImageUpload']});
Router.onBeforeAction(usePrivateLayout, {except: ['login','register','publichome']});
Router.onBeforeAction(usePublicLayout, {only: ['login','register','publichome']});
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment