Vulcan/client/app.js

120 lines
3 KiB
JavaScript
Raw Normal View History

2012-12-11 10:47:11 +09:00
Session.set('initialLoad', true);
2013-04-06 15:17:09 +09:00
Session.set('currentDate', new Date());
Session.set('categorySlug', null);
2012-12-11 10:47:11 +09:00
l=function(s){
console.log(s);
}
// HELPERS
2012-10-24 11:04:42 +09:00
getSetting = function(setting){
var settings=Settings.find().fetch()[0];
if(settings){
return settings[setting];
}
return '';
}
2012-11-19 12:03:06 +09:00
clearSeenErrors = function(){
Errors.update({seen:true}, {$set: {show:false}}, {multi:true});
}
// SUBSCRIPTIONS
// ** Errors **
2012-10-09 12:02:37 +09:00
2012-10-08 10:44:13 +09:00
// ** Settings **
Meteor.subscribe('settings', function(){
// runs once on site load
2012-12-11 10:47:11 +09:00
analyticsInit();
2012-11-21 14:31:58 +09:00
Session.set('settingsLoaded',true);
});
// ** Categories **
Meteor.subscribe('categories');
2012-11-17 13:24:19 +09:00
// ** Users **
Meteor.subscribe('currentUser');
Meteor.subscribe('allUsers');
// ** Notifications **
// Only load if user is logged in
if(Meteor.userId() != null){
Meteor.subscribe('notifications');
}
// ** Posts **
// We have a few subscriptions here, for the various ways we load posts
//
// The advantage is that
// a) we can change pages a lot quicker
// XXX: and we can animate between them (todo)
// b) we know when an individual page is ready
2012-10-09 12:02:37 +09:00
2013-04-06 14:27:01 +09:00
Meteor.autorun(function() {
Meteor.subscribe('singlePost', Session.get('selectedPostId'));
});
2012-10-09 12:02:37 +09:00
2013-04-05 16:06:50 +09:00
Meteor.autorun(function() {
Meteor.subscribe('singlePost', Session.get('selectedPostId'));
});
2012-10-24 11:04:42 +09:00
STATUS_PENDING=1;
STATUS_APPROVED=2;
STATUS_REJECTED=3;
// put it all together with pagination
2013-04-06 15:17:09 +09:00
postListSubscription = function(find, options, per_page) {
2013-03-23 16:58:28 +11:00
var handle = Meteor.subscribeWithPagination('paginatedPosts', find, options, per_page);
handle.fetch = function() {
2013-04-14 13:00:23 +10:00
var ourFind = _.isFunction(find) ? find() : find;
return limitDocuments(Posts.find(ourFind, options), handle.loaded());
}
return handle;
2012-10-09 12:02:37 +09:00
}
2013-04-07 17:40:32 +09:00
// note: the "name" property is for internal debugging purposes only
selectTop = function() {
2013-04-06 18:39:01 +11:00
return selectPosts({name: 'top', status: STATUS_APPROVED, slug: Session.get('categorySlug')});
}
selectNew = function() {
2013-04-06 18:39:01 +11:00
return selectPosts({name: 'new', status: STATUS_APPROVED, slug: Session.get('categorySlug')});
}
selectBest = function() {
2013-04-06 18:39:01 +11:00
return selectPosts({name: 'best', status: STATUS_APPROVED, slug: Session.get('categorySlug')});
}
selectPending = function() {
2013-04-06 18:39:01 +11:00
return selectPosts({name: 'pending', status: STATUS_PENDING, slug: Session.get('categorySlug')});
}
2013-04-06 18:39:01 +11:00
topPostsHandle = postListSubscription(selectTop, sortPosts('score'), 10);
2013-04-06 18:39:01 +11:00
newPostsHandle = postListSubscription(selectNew, sortPosts('submitted'), 10);
2012-08-30 21:35:48 -04:00
2013-04-06 18:39:01 +11:00
bestPostsHandle = postListSubscription(selectBest, sortPosts('baseScore'), 10);
2013-04-06 15:17:09 +09:00
2013-04-06 18:39:01 +11:00
pendingPostsHandle = postListSubscription(selectPending, sortPosts('createdAt'), 10);
2012-10-01 12:23:35 +09:00
Meteor.autorun(function() {
digestHandle = Meteor.subscribe('postDigest', Session.get('currentDate'));
});
2012-10-01 12:23:35 +09:00
// ** Comments **
// Collection depends on selectedPostId and selectedCommentId session variable
2012-10-08 16:49:01 +09:00
Session.set('selectedPostId', null);
Meteor.autosubscribe(function() {
var query = { $or : [ { post : Session.get('selectedPostId') } , { _id : Session.get('selectedCommentId') } ] };
Meteor.subscribe('comments', query, function() {
Session.set('commentReady', true);
});
2012-12-17 08:16:09 +01:00
});