mirror of
https://github.com/vale981/Vulcan
synced 2025-03-06 18:11:40 -05:00
186 lines
No EOL
5.2 KiB
JavaScript
186 lines
No EOL
5.2 KiB
JavaScript
// ** Client-side helpers **
|
|
|
|
sessionSetObject=function(name, value){
|
|
Session.set(name, JSON.stringify(value));
|
|
}
|
|
sessionGetObject=function(name){
|
|
var data = Session.get(name);
|
|
return data && JSON.parse(data);
|
|
}
|
|
$.fn.exists = function () {
|
|
return this.length !== 0;
|
|
}
|
|
|
|
|
|
// ** Errors **
|
|
// Local (client-only) collection
|
|
|
|
Errors = new Meteor.Collection(null);
|
|
|
|
|
|
// ** Settings **
|
|
|
|
Settings = new Meteor.Collection('settings');
|
|
Meteor.subscribe('settings', function(){
|
|
|
|
// runs once on site load
|
|
|
|
window.settingsLoaded=true;
|
|
|
|
if((proxinoKey=getSetting('proxinoKey'))){
|
|
Proxino.key = proxinoKey;
|
|
Proxino.track_errors();
|
|
}
|
|
|
|
// window.Router = new SimpleRouter();
|
|
window.Backbone.history.start({pushState: true});
|
|
|
|
});
|
|
|
|
// ** Notifications **
|
|
// Only load if user is logged in
|
|
|
|
var Notifications = new Meteor.Collection('notifications');
|
|
if(Meteor.user()){
|
|
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
|
|
|
|
Posts = new Meteor.Collection('posts');
|
|
|
|
// TOP page
|
|
TOP_PAGE_PER_PAGE = 10;
|
|
TOP_PAGE_SORT = {score: -1};
|
|
Session.set('topPageLimit', TOP_PAGE_PER_PAGE);
|
|
Meteor.autosubscribe(function() {
|
|
Session.get('topPostsReady', false);
|
|
Meteor.subscribe('posts', {}, {
|
|
sort: TOP_PAGE_SORT,
|
|
limit: Session.get('topPageLimit')
|
|
}, function() {
|
|
Session.set('topPostsReady', true);
|
|
});
|
|
});
|
|
var topPosts = function() {
|
|
var orderedPosts = Posts.find({}, {sort: TOP_PAGE_SORT});
|
|
return limitDocuments(orderedPosts, Session.get('topPageLimit'));
|
|
}
|
|
|
|
// NEW page
|
|
NEW_PAGE_PER_PAGE = 10;
|
|
NEW_PAGE_SORT = {submitted: -1};
|
|
Session.set('newPageLimit', NEW_PAGE_PER_PAGE);
|
|
Meteor.autosubscribe(function() {
|
|
Session.get('newPostsReady', false);
|
|
Meteor.subscribe('posts', {}, {
|
|
sort: NEW_PAGE_SORT,
|
|
limit: Session.get('newPageLimit')
|
|
}, function() {
|
|
Session.set('newPostsReady', true);
|
|
});
|
|
});
|
|
var newPosts = function() {
|
|
var orderedPosts = Posts.find({}, {sort: NEW_PAGE_SORT});
|
|
return limitDocuments(orderedPosts, Session.get('newPageLimit'));
|
|
}
|
|
|
|
// DIGEST page
|
|
DIGEST_PAGE_PER_PAGE = 5;
|
|
DIGEST_PAGE_SORT = {score: -1};
|
|
var digestPageFind = function() {
|
|
var mDate = moment(sessionGetObject('currentDate'));
|
|
return {submitted: {
|
|
$gte: mDate.startOf('day').valueOf(),
|
|
$lt: mDate.endOf('day').valueOf()
|
|
}};
|
|
}
|
|
|
|
Session.set('digestPageLimit', DIGEST_PAGE_PER_PAGE);
|
|
Meteor.autosubscribe(function() {
|
|
Session.get('digestPostsReady', false);
|
|
Meteor.subscribe('posts', digestPageFind(), {
|
|
sort: DIGEST_PAGE_SORT,
|
|
limit: Session.get('digestPageLimit')
|
|
}, function() {
|
|
Session.set('digestPostsReady', true);
|
|
});
|
|
});
|
|
var digestPosts = function() {
|
|
var orderedPosts = Posts.find(digestPageFind(), {sort: DIGEST_PAGE_SORT});
|
|
return limitDocuments(orderedPosts, Session.get('digestPageLimit'));
|
|
}
|
|
|
|
// SINGLE post, e.g. post_page
|
|
Meteor.autosubscribe(function() {
|
|
Session.set('postReady', false);
|
|
Meteor.subscribe('post', Session.get('selectedPostId'), function() {
|
|
Session.set('postReady', true);
|
|
})
|
|
});
|
|
|
|
|
|
// ** Categories **
|
|
|
|
Categories = new Meteor.Collection('categories');
|
|
Meteor.subscribe('categories');
|
|
|
|
|
|
// ** Comments **
|
|
// Collection depends on selectedPostId and selectedCommentId session variable
|
|
|
|
Session.set('selectedPostId', null);
|
|
Comments = new Meteor.Collection('comments');
|
|
Meteor.autosubscribe(function() {
|
|
var query = { $or : [ { post : Session.get('selectedPostId') } , { _id : Session.get('selectedCommentId') } ] };
|
|
Meteor.subscribe('comments', query, function() {
|
|
//
|
|
});
|
|
});
|
|
|
|
|
|
// ** Handlebars helpers **
|
|
|
|
Handlebars.registerHelper('canView', function(action) {
|
|
var action=(typeof action !== 'string') ? null : action;
|
|
return canView(Meteor.user(), action);
|
|
});
|
|
Handlebars.registerHelper('canPost', function(action) {
|
|
var action=(typeof action !== 'string') ? null : action;
|
|
return canPost(Meteor.user(), action);
|
|
});
|
|
Handlebars.registerHelper('canComment', function(action) {
|
|
var action=(typeof action !== 'string') ? null : action;
|
|
return canComment(Meteor.user(), action);
|
|
});
|
|
Handlebars.registerHelper('canUpvote', function(collection, action) {
|
|
var action=(typeof action !== 'string') ? null : action;
|
|
return canUpvote(Meteor.user()), collection, action;
|
|
});
|
|
Handlebars.registerHelper('canDownvote', function(collection, action) {
|
|
var action=(typeof action !== 'string') ? null : action;
|
|
return canDownvote(Meteor.user(), collection, action);
|
|
});
|
|
Handlebars.registerHelper('isAdmin', function(showError) {
|
|
if(isAdmin(Meteor.user())){
|
|
return true;
|
|
}else{
|
|
if((typeof showError === "string") && (showError === "true"))
|
|
throwError('Sorry, you do not have access to this page');
|
|
return false;
|
|
}
|
|
});
|
|
Handlebars.registerHelper('canEdit', function(collectionName, action) {
|
|
var action = (typeof action !== 'string') ? null : action;
|
|
var collection = (typeof collectionName !== 'string') ? Posts : eval(collectionName);
|
|
var itemId = (collectionName==="Posts") ? Session.get('selectedPostId') : Session.get('selectedCommentId');
|
|
var item=collection.findOne(itemId);
|
|
return item && canEdit(Meteor.user(), item, action);
|
|
}); |