From 8e42994483e73352fb02c1e0660f1c24d40b98df Mon Sep 17 00:00:00 2001 From: Bandersnatch Date: Sat, 7 Mar 2015 21:54:32 -0700 Subject: [PATCH 1/3] Added hooks for canceling up voting and down voting. --- lib/vote.js | 26 ++++++++++++++++++++++++++ packages/telescope-base/lib/base.js | 2 ++ packages/telescope-base/package.js | 2 ++ 3 files changed, 30 insertions(+) diff --git a/lib/vote.js b/lib/vote.js index 52550704b..b33a9d280 100644 --- a/lib/vote.js +++ b/lib/vote.js @@ -178,6 +178,19 @@ cancelUpvote = function (collection, item, user) { // if the item is being upvoted by its own author, don't give karma if (item.userId != user._id) modifyKarma(item.userId, votePower); + + + + // --------------------- Server-Side Async Callbacks --------------------- // + + if (Meteor.isServer) { + Meteor.defer(function () { // use defer to avoid holding up client + // run all post submit server callbacks on post object successively + result = cancelUpvoteCallbacks.reduce(function(result, currentFunction) { + return currentFunction(collection, result, user); + }, result); + }); + } } // console.log(collection.findOne(item._id)); return true; @@ -210,6 +223,19 @@ cancelDownvote = function (collection, item, user) { // if the item is being upvoted by its own author, don't give karma if (item.userId != user._id) modifyKarma(item.userId, votePower); + + + + // --------------------- Server-Side Async Callbacks --------------------- // + + if (Meteor.isServer) { + Meteor.defer(function () { // use defer to avoid holding up client + // run all post submit server callbacks on post object successively + result = cancelDownvoteCallbacks.reduce(function(result, currentFunction) { + return currentFunction(collection, result, user); + }, result); + }); + } } // console.log(collection.findOne(item._id)); return true; diff --git a/packages/telescope-base/lib/base.js b/packages/telescope-base/lib/base.js index fc7c483d9..4bf4e4b97 100644 --- a/packages/telescope-base/lib/base.js +++ b/packages/telescope-base/lib/base.js @@ -278,6 +278,8 @@ userProfileCompleteChecks = []; upvoteCallbacks = []; downvoteCallbacks = []; +cancelUpvoteCallbacks = []; +cancelDownvoteCallbacks = []; // ------------------------------------- User Profiles -------------------------------- // diff --git a/packages/telescope-base/package.js b/packages/telescope-base/package.js index 442efc860..87b9314fd 100644 --- a/packages/telescope-base/package.js +++ b/packages/telescope-base/package.js @@ -62,6 +62,8 @@ Package.onUse(function (api) { 'upvoteCallbacks', 'downvoteCallbacks', + 'cancelUpvoteCallbacks', + 'cancelDownvoteCallbacks', 'userEditRenderedCallbacks', 'userEditClientCallbacks', From 69f10079ce7f01583a98568319eeb45a434d3c9d Mon Sep 17 00:00:00 2001 From: Bandersnatch Date: Sat, 7 Mar 2015 22:19:00 -0700 Subject: [PATCH 2/3] Added Synchronous Method callbacks for each vote callback. --- lib/vote.js | 31 +++++++++++++++++++++++++++++ packages/telescope-base/lib/base.js | 4 ++++ packages/telescope-base/package.js | 4 ++++ 3 files changed, 39 insertions(+) diff --git a/lib/vote.js b/lib/vote.js index b33a9d280..e838c8d80 100644 --- a/lib/vote.js +++ b/lib/vote.js @@ -82,6 +82,13 @@ upvoteItem = function (collection, item, user) { } } + // ------------------------------ Callbacks ------------------------------ // + + // run all post submit server callbacks on post object successively + result = upvoteMethodCallbacks.reduce(function(result, currentFunction) { + return currentFunction(collection, result, user); + }, item); + // --------------------- Server-Side Async Callbacks --------------------- // if (Meteor.isServer) { @@ -135,6 +142,14 @@ downvoteItem = function (collection, item, user) { modifyKarma(item.userId, votePower); + // ------------------------------ Callbacks ------------------------------ // + + // run all post submit server callbacks on post object successively + result = downvoteMethodCallbacks.reduce(function(result, currentFunction) { + return currentFunction(collection, result, user); + }, item); + + // --------------------- Server-Side Async Callbacks --------------------- // if (Meteor.isServer) { @@ -181,6 +196,14 @@ cancelUpvote = function (collection, item, user) { + // ------------------------------ Callbacks ------------------------------ // + + // run all post submit server callbacks on post object successively + result = cancelUpvoteMethodCallbacks.reduce(function(result, currentFunction) { + return currentFunction(collection, result, user); + }, item); + + // --------------------- Server-Side Async Callbacks --------------------- // if (Meteor.isServer) { @@ -226,6 +249,14 @@ cancelDownvote = function (collection, item, user) { + // ------------------------------ Callbacks ------------------------------ // + + // run all post submit server callbacks on post object successively + result = cancelDownvoteMethodCallbacks.reduce(function(result, currentFunction) { + return currentFunction(collection, result, user); + }, item); + + // --------------------- Server-Side Async Callbacks --------------------- // if (Meteor.isServer) { diff --git a/packages/telescope-base/lib/base.js b/packages/telescope-base/lib/base.js index 4bf4e4b97..7ea9e7835 100644 --- a/packages/telescope-base/lib/base.js +++ b/packages/telescope-base/lib/base.js @@ -280,6 +280,10 @@ upvoteCallbacks = []; downvoteCallbacks = []; cancelUpvoteCallbacks = []; cancelDownvoteCallbacks = []; +upvoteMethodCallbacks = []; +downvoteMethodCallbacks = []; +cancelUpvoteMethodCallbacks = []; +cancelDownvoteMethodCallbacks = []; // ------------------------------------- User Profiles -------------------------------- // diff --git a/packages/telescope-base/package.js b/packages/telescope-base/package.js index 87b9314fd..94042e743 100644 --- a/packages/telescope-base/package.js +++ b/packages/telescope-base/package.js @@ -64,6 +64,10 @@ Package.onUse(function (api) { 'downvoteCallbacks', 'cancelUpvoteCallbacks', 'cancelDownvoteCallbacks', + 'upvoteMethodCallbacks', + 'downvoteMethodCallbacks', + 'cancelUpvoteMethodCallbacks', + 'cancelDownvoteMethodCallbacks', 'userEditRenderedCallbacks', 'userEditClientCallbacks', From 8e5af099d5b6d026f21aa8aec9f49a8a2eb5fdf4 Mon Sep 17 00:00:00 2001 From: Bandersnatch Date: Sat, 7 Mar 2015 23:30:20 -0700 Subject: [PATCH 3/3] Added the ability to modify vote power from packages. Set votePowerEq to a function in a package and that function will be how vote power is determined. Makes sure to re-export votePowerEq from you function! --- lib/vote.js | 6 ++++-- packages/telescope-base/lib/base.js | 7 ++++++- packages/telescope-base/package.js | 4 +++- 3 files changed, 13 insertions(+), 4 deletions(-) diff --git a/lib/vote.js b/lib/vote.js index e838c8d80..63415c520 100644 --- a/lib/vote.js +++ b/lib/vote.js @@ -1,8 +1,10 @@ // returns how much "power" a user's votes have var getVotePower = function (user) { - // return isAdmin(user) ? 5 : 1; - return 1; // for now, leave everybody at 1 including admins; 5 is too unbalanced + power = 1; + if(typeof votePowerEq == 'function') + power = votePowerEq(user); + return power; }; var modifyKarma = function (userId, karma) { diff --git a/packages/telescope-base/lib/base.js b/packages/telescope-base/lib/base.js index 7ea9e7835..f1a401d5c 100644 --- a/packages/telescope-base/lib/base.js +++ b/packages/telescope-base/lib/base.js @@ -342,4 +342,9 @@ themeSettings = { // ------------------------------ Subscriptions ------------------------------ // // array containing subscriptions to be preloaded -preloadSubscriptions = []; \ No newline at end of file +preloadSubscriptions = []; + +// ------------------------------- Vote Power -------------------------------- // + +// The equation to determine Vote Power +votePowerEq = null; diff --git a/packages/telescope-base/package.js b/packages/telescope-base/package.js index 94042e743..b49b9ccb3 100644 --- a/packages/telescope-base/package.js +++ b/packages/telescope-base/package.js @@ -79,6 +79,8 @@ Package.onUse(function (api) { 'getTemplate', 'templates', - 'themeSettings' + 'themeSettings', + + 'votePowerEq' ]); });