2013-10-06 08:37:17 +09:00
|
|
|
Router.configure({
|
|
|
|
layout: 'layout',
|
2013-10-06 09:33:00 +09:00
|
|
|
loadingTemplate: 'loading',
|
|
|
|
notFoundTemplate: 'not_found'
|
2013-10-06 08:37:17 +09:00
|
|
|
});
|
|
|
|
|
|
|
|
Router.map(function() {
|
|
|
|
this.route('home', {
|
|
|
|
path: '/', template: 'posts_top'
|
|
|
|
});
|
|
|
|
|
|
|
|
this.route('posts_top', {path: '/top'});
|
|
|
|
this.route('posts_new', {path: '/new'});
|
2013-10-06 08:47:15 +09:00
|
|
|
this.route('posts_best', {path: '/best'});
|
2013-10-06 09:17:37 +09:00
|
|
|
this.route('posts_pending', {path: '/pending'});
|
2013-10-06 09:33:00 +09:00
|
|
|
|
2013-10-09 11:32:36 +09:00
|
|
|
// Digest
|
2013-10-09 11:21:23 +09:00
|
|
|
|
|
|
|
this.route('posts_digest', {
|
2013-10-06 09:33:00 +09:00
|
|
|
path: '/digest/:year/:month/:day',
|
2013-10-09 11:32:36 +09:00
|
|
|
onBeforeRun: function(){
|
|
|
|
currentDate = new Date(this.params.year, this.params.month-1, this.params.day);
|
|
|
|
Session.set('currentDate', currentDate);
|
|
|
|
},
|
2013-10-06 09:33:00 +09:00
|
|
|
waitOn: function() {
|
2013-10-09 11:32:36 +09:00
|
|
|
return Meteor.subscribe('postDigest', currentDate);
|
2013-10-06 09:33:00 +09:00
|
|
|
},
|
|
|
|
data: function() {
|
2013-10-09 11:21:23 +09:00
|
|
|
return {
|
2013-10-09 11:32:36 +09:00
|
|
|
posts: findDigestPosts(moment(currentDate))
|
2013-10-09 11:21:23 +09:00
|
|
|
}
|
2013-10-06 09:33:00 +09:00
|
|
|
}
|
|
|
|
});
|
2013-10-06 08:37:17 +09:00
|
|
|
|
2013-10-09 11:32:36 +09:00
|
|
|
// Post Page
|
|
|
|
|
2013-10-06 08:47:15 +09:00
|
|
|
this.route('post_page', {
|
|
|
|
path: '/posts/:_id',
|
|
|
|
waitOn: function() {
|
|
|
|
return Meteor.subscribe('singlePost', this.params._id);
|
|
|
|
},
|
|
|
|
data: function() {
|
2013-10-09 11:21:23 +09:00
|
|
|
return {
|
|
|
|
post: Posts.findOne(this.params._id)
|
|
|
|
}
|
2013-10-06 08:47:15 +09:00
|
|
|
}
|
|
|
|
});
|
2013-10-06 08:37:17 +09:00
|
|
|
|
2013-10-09 11:32:36 +09:00
|
|
|
// Post Edit
|
|
|
|
|
2013-10-06 09:17:37 +09:00
|
|
|
this.route('post_edit', {
|
|
|
|
path: '/posts/:_id/edit',
|
|
|
|
waitOn: function() {
|
|
|
|
return Meteor.subscribe('singlePost', this.params._id);
|
|
|
|
},
|
|
|
|
data: function() {
|
2013-10-09 11:21:23 +09:00
|
|
|
return {
|
|
|
|
post: Posts.findOne(this.params._id)
|
|
|
|
}
|
2013-10-06 09:17:37 +09:00
|
|
|
}
|
|
|
|
});
|
2013-10-09 11:32:36 +09:00
|
|
|
|
|
|
|
// Comment Page
|
|
|
|
|
2013-10-09 11:46:44 +09:00
|
|
|
this.route('comment_page', {
|
|
|
|
path: '/comment/:_id',
|
|
|
|
data: function() {
|
|
|
|
return {
|
|
|
|
comment: Comments.findOne(this.params._id)
|
|
|
|
}
|
|
|
|
}
|
|
|
|
});
|
2013-10-09 11:32:36 +09:00
|
|
|
|
|
|
|
// Comment Edit
|
|
|
|
|
2013-10-06 08:37:17 +09:00
|
|
|
});
|
|
|
|
|
2013-03-15 16:09:58 +09:00
|
|
|
|
2013-10-06 08:37:17 +09:00
|
|
|
// (function() {
|
|
|
|
// Meteor.Router.beforeRouting = function() {
|
|
|
|
// console.log('// Before Routing //')
|
|
|
|
// // reset all session variables that might be set by the previous route
|
|
|
|
// Session.set('categorySlug', null);
|
|
|
|
|
|
|
|
// // currentScroll stores the position of the user in the page
|
|
|
|
// Session.set('currentScroll', null);
|
2013-03-15 16:09:58 +09:00
|
|
|
|
2013-10-06 08:37:17 +09:00
|
|
|
// var tagline = getSetting("tagline") ? ": "+getSetting("tagline") : '';
|
|
|
|
// document.title = getSetting("title")+tagline;
|
2013-03-15 16:09:58 +09:00
|
|
|
|
2013-10-06 08:37:17 +09:00
|
|
|
// $('body').css('min-height','0');
|
2013-03-15 16:09:58 +09:00
|
|
|
|
2013-10-06 08:37:17 +09:00
|
|
|
// // set all errors who have already been seen to not show anymore
|
|
|
|
// clearSeenErrors();
|
2013-03-15 16:09:58 +09:00
|
|
|
|
2013-10-06 08:37:17 +09:00
|
|
|
// // log this request with mixpanel, etc
|
|
|
|
// analyticsRequest();
|
|
|
|
// }
|
2013-03-15 17:57:54 +11:00
|
|
|
|
2013-10-06 08:37:17 +09:00
|
|
|
// // specific router functions
|
|
|
|
// digest = function(year, month, day, view){
|
|
|
|
// var destination = (typeof view === 'undefined') ? 'posts_digest' : 'posts_digest_'+view
|
|
|
|
// if (typeof day === 'undefined') {
|
|
|
|
// // we can get into an infinite reactive loop with the subscription filter
|
|
|
|
// // if we keep setting the date even when it's barely changed
|
|
|
|
// // if (new Date() - new Date(Session.get('currentDate')) > 60 * 1000) {
|
|
|
|
// Session.set('currentDate', new Date());
|
|
|
|
// // }
|
|
|
|
// // Session.set('currentDate', new Date());
|
|
|
|
// } else {
|
|
|
|
// Session.set('currentDate', new Date(year, month-1, day));
|
|
|
|
// }
|
2012-11-26 15:04:58 +11:00
|
|
|
|
2013-10-06 08:37:17 +09:00
|
|
|
// // we need to make sure that the session changes above have been executed
|
|
|
|
// // before we can look at the digest handle. XXX: this might be a bad idea
|
|
|
|
// // Meteor.flush();
|
|
|
|
// // if (!digestHandle() || digestHandle().loading()) {
|
|
|
|
// // return 'loading';
|
|
|
|
// // } else {
|
|
|
|
// return destination;
|
|
|
|
// // }
|
|
|
|
// };
|
2012-11-19 11:26:21 +09:00
|
|
|
|
2013-10-06 08:37:17 +09:00
|
|
|
// post = function(id, commentId) {
|
|
|
|
// Session.set('selectedPostId', id);
|
|
|
|
// if(typeof commentId !== 'undefined')
|
|
|
|
// Session.set('scrollToCommentId', commentId);
|
2012-11-21 14:28:18 +11:00
|
|
|
|
2013-10-06 08:37:17 +09:00
|
|
|
// // on post page, we show the comment tree
|
|
|
|
// Session.set('showChildComments',true);
|
|
|
|
// return 'post_page';
|
|
|
|
// };
|
2012-11-19 11:26:21 +09:00
|
|
|
|
2013-10-06 08:37:17 +09:00
|
|
|
// post_edit = function(id) {
|
|
|
|
// Session.set('selectedPostId', id);
|
|
|
|
// return 'post_edit';
|
|
|
|
// };
|
2012-11-19 11:26:21 +09:00
|
|
|
|
2013-10-06 08:37:17 +09:00
|
|
|
// comment = function(id) {
|
|
|
|
// Session.set('selectedCommentId', id);
|
|
|
|
// return 'comment_page';
|
|
|
|
// };
|
2012-11-19 11:26:21 +09:00
|
|
|
|
2013-10-06 08:37:17 +09:00
|
|
|
// comment_reply = function(id) {
|
|
|
|
// Session.set('selectedCommentId', id);
|
|
|
|
// return 'comment_reply';
|
|
|
|
// };
|
2012-11-19 12:03:06 +09:00
|
|
|
|
2013-10-06 08:37:17 +09:00
|
|
|
// comment_edit = function(id) {
|
|
|
|
// Session.set('selectedCommentId', id);
|
|
|
|
// return 'comment_edit';
|
|
|
|
// };
|
2012-11-21 14:28:18 +11:00
|
|
|
|
2013-10-06 08:37:17 +09:00
|
|
|
// // XXX: do these two really not want to set it to undefined (or null)?
|
|
|
|
// user_profile = function(id) {
|
|
|
|
// if(typeof id !== undefined){
|
|
|
|
// Session.set('selectedUserId', id);
|
|
|
|
// }
|
|
|
|
// return 'user_profile';
|
|
|
|
// };
|
2012-11-21 14:28:18 +11:00
|
|
|
|
2013-10-06 08:37:17 +09:00
|
|
|
// user_edit = function(id) {
|
|
|
|
// if(typeof id !== undefined){
|
|
|
|
// Session.set('selectedUserId', id);
|
|
|
|
// }
|
|
|
|
// return 'user_edit';
|
|
|
|
// };
|
2012-11-26 17:11:21 +09:00
|
|
|
|
2013-10-06 08:37:17 +09:00
|
|
|
// unsubscribe = function(hash){
|
|
|
|
// Session.set('userEmailHash', hash);
|
|
|
|
// return 'unsubscribe';
|
|
|
|
// }
|
2013-01-19 21:37:46 +09:00
|
|
|
|
2013-10-06 08:37:17 +09:00
|
|
|
// category = function(categorySlug, view){
|
|
|
|
// var view = (typeof view === 'undefined') ? 'top' : view;
|
|
|
|
// console.log('setting category slug to: '+categorySlug)
|
|
|
|
// Session.set('categorySlug', categorySlug);
|
|
|
|
// Meteor.Router.categoryFilter = true;
|
|
|
|
// return 'posts_'+view;
|
|
|
|
// }
|
2013-02-18 12:13:27 +09:00
|
|
|
|
2013-10-06 08:37:17 +09:00
|
|
|
// // XXX: not sure if the '/' trailing routes are needed any more
|
|
|
|
// Meteor.Router.add({
|
|
|
|
// '/': 'posts_top',
|
|
|
|
// '/top':'posts_top',
|
|
|
|
// '/top/:page':'posts_top',
|
|
|
|
// '/new':'posts_new',
|
|
|
|
// '/new/:page':'posts_new',
|
|
|
|
// '/best':'posts_best',
|
|
|
|
// '/pending':'posts_pending',
|
|
|
|
// '/digest/:year/:month/:day': digest,
|
|
|
|
// '/digest': digest,
|
|
|
|
// '/c/:category_slug/:view': category,
|
|
|
|
// '/c/:category_slug': category,
|
|
|
|
// '/signin':'user_signin',
|
|
|
|
// '/signup':'user_signup',
|
|
|
|
// '/submit':'post_submit',
|
|
|
|
// '/invite':'no_invite',
|
|
|
|
// '/posts/deleted':'post_deleted',
|
|
|
|
// '/posts/:id/edit': post_edit,
|
|
|
|
// '/posts/:id/comment/:comment_id': post,
|
|
|
|
// '/posts/:id': post,
|
|
|
|
// '/comments/deleted':'comment_deleted',
|
|
|
|
// '/comments/:id': comment,
|
|
|
|
// '/comments/:id/reply': comment_reply,
|
|
|
|
// '/comments/:id/edit': comment_edit,
|
|
|
|
// '/settings':'settings',
|
|
|
|
// '/toolbox':'toolbox',
|
|
|
|
// '/categories':'categories',
|
|
|
|
// '/users':'users',
|
|
|
|
// '/account':'user_edit',
|
|
|
|
// '/forgot_password':'user_password',
|
|
|
|
// '/users/:id': user_profile,
|
|
|
|
// '/users/:id/edit': user_edit,
|
|
|
|
// '/:year/:month/:day': digest,
|
|
|
|
// '/unsubscribe/:hash': unsubscribe
|
|
|
|
// });
|
2012-11-21 14:28:18 +11:00
|
|
|
|
|
|
|
|
2013-10-06 08:37:17 +09:00
|
|
|
// Meteor.Router.filters({
|
2013-03-15 15:38:01 +09:00
|
|
|
|
2013-10-06 08:37:17 +09:00
|
|
|
// setRequestTimestamp: function(page){
|
|
|
|
// // openedComments is an Array that tracks which comments
|
|
|
|
// // have been expanded by the user, to make sure they stay expanded
|
|
|
|
// Session.set("openedComments", null);
|
|
|
|
// Session.set('requestTimestamp',new Date());
|
|
|
|
// // console.log('---------------setting request timestamp: '+Session.get('requestTimestamp'))
|
|
|
|
// return page;
|
|
|
|
// },
|
2013-04-26 17:28:09 +09:00
|
|
|
|
2013-10-06 08:37:17 +09:00
|
|
|
// requireLogin: function(page) {
|
|
|
|
// if (Meteor.loggingIn()) {
|
|
|
|
// return 'loading';
|
|
|
|
// } else if (Meteor.user()) {
|
|
|
|
// return page;
|
|
|
|
// } else {
|
|
|
|
// return 'user_signin';
|
|
|
|
// }
|
|
|
|
// },
|
2012-11-21 14:28:18 +11:00
|
|
|
|
2013-10-06 08:37:17 +09:00
|
|
|
// canView: function(page) {
|
|
|
|
// var error = canView(Meteor.user(), true);
|
|
|
|
// if (error === true)
|
|
|
|
// return page;
|
2012-11-21 14:28:18 +11:00
|
|
|
|
2013-10-06 08:37:17 +09:00
|
|
|
// // a problem.. make sure we are logged in
|
|
|
|
// if (Meteor.loggingIn())
|
|
|
|
// return 'loading';
|
2012-11-21 14:28:18 +11:00
|
|
|
|
2013-10-06 08:37:17 +09:00
|
|
|
// // otherwise the error tells us what to show.
|
|
|
|
// return error;
|
|
|
|
// },
|
2012-11-21 14:28:18 +11:00
|
|
|
|
2013-10-06 08:37:17 +09:00
|
|
|
// canPost: function(page) {
|
|
|
|
// var error = canPost(Meteor.user(), true);
|
|
|
|
// if (error === true)
|
|
|
|
// return page;
|
2012-11-21 14:28:18 +11:00
|
|
|
|
2013-10-06 08:37:17 +09:00
|
|
|
// // a problem.. make sure we are logged in
|
|
|
|
// if (Meteor.loggingIn())
|
|
|
|
// return 'loading';
|
2012-11-21 14:28:18 +11:00
|
|
|
|
2013-10-06 08:37:17 +09:00
|
|
|
// // otherwise the error tells us what to show.
|
|
|
|
// return error;
|
|
|
|
// },
|
2012-11-21 15:28:29 +11:00
|
|
|
|
2013-10-06 08:37:17 +09:00
|
|
|
// canEdit: function(page) {
|
|
|
|
// // make findOne() non reactive to avoid re-triggering the router every time the
|
|
|
|
// // current comment or post object changes
|
|
|
|
// // but make sure the comment/post is loaded before moving on
|
|
|
|
// if (page === 'comment_edit') {
|
|
|
|
// var item = Comments.findOne(Session.get('selectedCommentId'), {reactive: false});
|
|
|
|
// if(!Session.get('singleCommentReady'))
|
|
|
|
// return 'loading'
|
|
|
|
// } else {
|
|
|
|
// var item = Posts.findOne(Session.get('selectedPostId'), {reactive: false});
|
|
|
|
// if(!Session.get('singlePostReady'))
|
|
|
|
// return 'loading'
|
|
|
|
// }
|
2013-06-18 10:46:29 +09:00
|
|
|
|
2013-10-06 08:37:17 +09:00
|
|
|
// var error = canEdit(Meteor.user(), item, true);
|
|
|
|
// if (error === true){
|
|
|
|
// return page;
|
2013-06-18 10:46:29 +09:00
|
|
|
|
2013-10-06 08:37:17 +09:00
|
|
|
// }
|
2012-11-21 15:28:29 +11:00
|
|
|
|
2013-10-06 08:37:17 +09:00
|
|
|
// // a problem.. make sure the item has loaded and we have logged in
|
|
|
|
// if (! item || Meteor.loggingIn()){
|
|
|
|
// return 'loading';
|
|
|
|
// }
|
2013-06-18 10:46:29 +09:00
|
|
|
|
2013-10-06 08:37:17 +09:00
|
|
|
// // otherwise the error tells us what to show.
|
|
|
|
// return error;
|
|
|
|
// },
|
2012-10-01 12:11:08 +10:00
|
|
|
|
2013-10-06 08:37:17 +09:00
|
|
|
// isLoggedOut: function(page){
|
|
|
|
// return Meteor.user() ? "already_logged_in" : page;
|
|
|
|
// },
|
2012-11-26 17:11:21 +09:00
|
|
|
|
2013-10-06 08:37:17 +09:00
|
|
|
// isAdmin: function(page) {
|
|
|
|
// return isAdmin(Meteor.user()) ? page : "no_rights";
|
|
|
|
// },
|
2012-11-22 08:13:43 +09:00
|
|
|
|
2013-10-06 08:37:17 +09:00
|
|
|
// // if the user is logged in but their profile isn't filled out enough
|
|
|
|
// requireProfile: function(page) {
|
|
|
|
// var user = Meteor.user();
|
2012-11-21 13:34:08 +09:00
|
|
|
|
2013-10-06 08:37:17 +09:00
|
|
|
// if (user && ! Meteor.loggingIn() && ! userProfileComplete(user)){
|
|
|
|
// Session.set('selectedUserId', user._id);
|
|
|
|
// return 'user_email';
|
|
|
|
// } else {
|
|
|
|
// return page;
|
|
|
|
// }
|
|
|
|
// },
|
2012-11-21 14:28:18 +11:00
|
|
|
|
2013-10-06 08:37:17 +09:00
|
|
|
// // if we are on a page that requires a post, as set in selectedPostId
|
|
|
|
// requirePost: function(page) {
|
|
|
|
// // make findOne() non reactive to avoid re-triggering the router every time the
|
|
|
|
// // current comment or post object changes
|
|
|
|
// if (Posts.findOne(Session.get('selectedPostId'), {reactive: false})) {
|
|
|
|
// return page;
|
|
|
|
// } else if (! Session.get('singlePostReady')) {
|
|
|
|
// return 'loading';
|
|
|
|
// } else {
|
|
|
|
// return 'not_found';
|
|
|
|
// }
|
|
|
|
// }
|
|
|
|
// });
|
|
|
|
// //
|
|
|
|
// Meteor.Router.filter('requireProfile');
|
|
|
|
// Meteor.Router.filter('requireLogin', {only: ['comment_reply','post_submit']});
|
|
|
|
// Meteor.Router.filter('canView', {only: ['posts_top', 'posts_new', 'posts_digest', 'posts_best']});
|
|
|
|
// Meteor.Router.filter('isLoggedOut', {only: ['user_signin', 'user_signup']});
|
|
|
|
// Meteor.Router.filter('canPost', {only: ['posts_pending', 'comment_reply', 'post_submit']});
|
|
|
|
// Meteor.Router.filter('canEdit', {only: ['post_edit', 'comment_edit']});
|
|
|
|
// Meteor.Router.filter('requirePost', {only: ['post_page', 'post_edit']});
|
|
|
|
// Meteor.Router.filter('isAdmin', {only: ['posts_pending', 'users', 'settings', 'categories', 'admin']});
|
|
|
|
// Meteor.Router.filter('setRequestTimestamp', {only: ['post_page']});
|
2013-04-26 17:28:09 +09:00
|
|
|
|
2013-10-06 08:37:17 +09:00
|
|
|
// Meteor.startup(function() {
|
|
|
|
// Meteor.autorun(function() {
|
|
|
|
// // grab the current page from the router, so this re-runs every time it changes
|
|
|
|
// Meteor.Router.page();
|
|
|
|
// if(Meteor.Router.page() !== "loading"){
|
|
|
|
// console.log('------ '+Meteor.Router.page()+' ------');
|
2012-11-22 10:26:23 +11:00
|
|
|
|
2013-10-06 08:37:17 +09:00
|
|
|
// // note: posts_digest doesn't use paginated subscriptions so it cannot have a rank
|
|
|
|
// if(_.contains(['posts_top', 'posts_new', 'posts_pending', 'posts_best'], Meteor.Router.page())){
|
|
|
|
// Session.set('isPostsList', true);
|
|
|
|
// }else{
|
|
|
|
// Session.set('isPostsList', false);
|
|
|
|
// }
|
2012-12-16 18:58:57 +01:00
|
|
|
|
2013-10-06 08:37:17 +09:00
|
|
|
// }
|
|
|
|
// });
|
|
|
|
// });
|
|
|
|
// }());
|