diff --git a/client/views/comments/comment_edit.js b/client/views/comments/comment_edit.js index c231f81ae..f5b906ea8 100644 --- a/client/views/comments/comment_edit.js +++ b/client/views/comments/comment_edit.js @@ -12,7 +12,7 @@ var editComment = function(instance) { } }); - trackEvent("edit comment", {'postId': comment.postId, 'commentId': comment._id}); + Events.track("edit comment", {'postId': comment.postId, 'commentId': comment._id}); Router.go('post_page_comment', {_id: comment.postId, commentId: comment._id}); }; diff --git a/client/views/comments/comment_form.js b/client/views/comments/comment_form.js index 963ac0014..34e992512 100644 --- a/client/views/comments/comment_form.js +++ b/client/views/comments/comment_form.js @@ -34,7 +34,7 @@ var submitComment = function(instance) { console.log(error); Messages.flash(error.reason, "error"); }else{ - trackEvent("newComment", newComment); + Events.track("newComment", newComment); $commentForm.val(''); } }); diff --git a/client/views/comments/comment_item.js b/client/views/comments/comment_item.js index 59cf42fde..a34adcabb 100644 --- a/client/views/comments/comment_item.js +++ b/client/views/comments/comment_item.js @@ -112,7 +112,7 @@ var handleVoteClick = function (meteorMethodName, eventName, e, instance) { Messages.flash(i18n.t('please_log_in_first'), 'info'); } else { Meteor.call(meteorMethodName, this, function(error, result){ - trackEvent(eventName, { + Events.track(eventName, { 'commentId': instance.data._id, 'postId': instance.data.post, 'authorId': instance.data.userId diff --git a/client/views/posts/modules/post_upvote.js b/client/views/posts/modules/post_upvote.js index 6c1674756..853461317 100644 --- a/client/views/posts/modules/post_upvote.js +++ b/client/views/posts/modules/post_upvote.js @@ -15,7 +15,7 @@ Template.postUpvote.events({ Messages.flash(i18n.t("please_log_in_first"), "info"); } Meteor.call('upvotePost', post, function(error, result){ - trackEvent("post upvoted", {'_id': post._id}); + Events.track("post upvoted", {'_id': post._id}); }); } }); diff --git a/client/views/posts/post_edit.js b/client/views/posts/post_edit.js index 7e9455973..83f150d0d 100644 --- a/client/views/posts/post_edit.js +++ b/client/views/posts/post_edit.js @@ -26,7 +26,7 @@ AutoForm.hooks({ }, onSuccess: function(operation, post) { - trackEvent("edit post", {'postId': post._id}); + Events.track("edit post", {'postId': post._id}); Router.go('post_page', {_id: post._id}); }, diff --git a/client/views/posts/post_submit.js b/client/views/posts/post_submit.js index e7bb277f8..1478f03b8 100644 --- a/client/views/posts/post_submit.js +++ b/client/views/posts/post_submit.js @@ -28,7 +28,7 @@ AutoForm.hooks({ onSuccess: function(operation, post) { this.template.$('button[type=submit]').removeClass('loading'); - trackEvent("new post", {'postId': post._id}); + Events.track("new post", {'postId': post._id}); Router.go('post_page', {_id: post._id}); if (post.status === Posts.config.STATUS_PENDING) { Messages.flash(i18n.t('thanks_your_post_is_awaiting_approval'), 'success'); diff --git a/client/views/users/user_email.js b/client/views/users/user_email.js index 2ec185917..a8d8399bd 100644 --- a/client/views/users/user_email.js +++ b/client/views/users/user_email.js @@ -31,7 +31,7 @@ Template.user_email.events({ } else { Messages.flash(i18n.t('thanks_for_signing_up'), "success"); // Meteor.call('addCurrentUserToMailChimpList'); - trackEvent("new sign-up", {'userId': user._id, 'auth':'twitter'}); + Events.track("new sign-up", {'userId': user._id, 'auth':'twitter'}); Router.go('/'); } }); diff --git a/lib/config/debug.js b/lib/config/debug.js deleted file mode 100644 index 231302c28..000000000 --- a/lib/config/debug.js +++ /dev/null @@ -1 +0,0 @@ -// SimpleSchema.debug = true; \ No newline at end of file diff --git a/lib/debug.js b/lib/debug.js deleted file mode 100644 index 016b14809..000000000 --- a/lib/debug.js +++ /dev/null @@ -1,4 +0,0 @@ -clog = function (s) { - if(Settings.get('debug', false)) - console.log(s); -}; diff --git a/lib/events.js b/lib/events.js deleted file mode 100644 index 9011d0a72..000000000 --- a/lib/events.js +++ /dev/null @@ -1,14 +0,0 @@ -trackEvent = function(event, properties){ - // console.log('trackevent: ', event, properties); - var properties= (typeof properties === 'undefined') ? {} : properties; - //TODO - // add event to an Events collection for logging and buffering purposes - if(Meteor.isClient){ - if(typeof mixpanel !== 'undefined' && typeof mixpanel.track !== 'undefined'){ - mixpanel.track(event, properties); - } - if(typeof GoSquared !== 'undefined' && typeof GoSquared.DefaultTracker !== 'undefined'){ - GoSquared.DefaultTracker.TrackEvent(event, JSON.stringify(properties)); - } - } -}; \ No newline at end of file diff --git a/lib/users.js b/lib/users.js index af3928f84..1537bf048 100644 --- a/lib/users.js +++ b/lib/users.js @@ -1,161 +1,161 @@ -isAdminById = function (userId) { - var user = Meteor.users.findOne(userId); - return !!(user && isAdmin(user)); -}; -isAdmin = function (user) { - user = (typeof user === 'undefined') ? Meteor.user() : user; - return !!user && !!user.isAdmin; -}; -updateAdmin = function (userId, admin) { - Meteor.users.update(userId, {$set: {isAdmin: admin}}); -}; -isInvited = function (user) { - if(!user || typeof user === 'undefined') - return false; - return isAdmin(user) || !!user.isInvited; -}; -adminUsers = function(){ - return Meteor.users.find({isAdmin : true}).fetch(); -}; +// isAdminById = function (userId) { +// var user = Meteor.users.findOne(userId); +// return !!(user && isAdmin(user)); +// }; +// isAdmin = function (user) { +// user = (typeof user === 'undefined') ? Meteor.user() : user; +// return !!user && !!user.isAdmin; +// }; +// updateAdmin = function (userId, admin) { +// Meteor.users.update(userId, {$set: {isAdmin: admin}}); +// }; +// isInvited = function (user) { +// if(!user || typeof user === 'undefined') +// return false; +// return isAdmin(user) || !!user.isInvited; +// }; +// adminUsers = function(){ +// return Meteor.users.find({isAdmin : true}).fetch(); +// }; -adminMongoQuery = {isAdmin: true}; -notAdminMongoQuery = {isAdmin: false}; +// adminMongoQuery = {isAdmin: true}; +// notAdminMongoQuery = {isAdmin: false}; -getUserName = function (user) { - try{ - if (user.username) - return user.username; - if (user && user.services && user.services.twitter && user.services.twitter.screenName) - return user.services.twitter.screenName - } - catch (error){ - console.log(error); - return null; - } -}; -getDisplayName = function (user) { - return (user.profile && user.profile.username) ? user.profile.username : getUserName(user); -}; -getDisplayNameById = function (userId) { - return getDisplayName(Meteor.users.findOne(userId)); -}; -getProfileUrl = function (user) { - return getProfileUrlBySlugOrId(user.slug); -}; -getProfileUrlBySlugOrId = function (slugOrId) { - return Telescope.utils.getRouteUrl('user_profile', {_idOrSlug: slugOrId}); -}; -hasPassword = function (user) { - return !!user.services.password; -}; -getTwitterName = function (user) { - // return twitter name provided by user, or else the one used for twitter login +// getUserName = function (user) { +// try{ +// if (user.username) +// return user.username; +// if (user && user.services && user.services.twitter && user.services.twitter.screenName) +// return user.services.twitter.screenName +// } +// catch (error){ +// console.log(error); +// return null; +// } +// }; +// getDisplayName = function (user) { +// return (user.profile && user.profile.username) ? user.profile.username : getUserName(user); +// }; +// getDisplayNameById = function (userId) { +// return getDisplayName(Meteor.users.findOne(userId)); +// }; +// getProfileUrl = function (user) { +// return getProfileUrlBySlugOrId(user.slug); +// }; +// getProfileUrlBySlugOrId = function (slugOrId) { +// return Telescope.utils.getRouteUrl('user_profile', {_idOrSlug: slugOrId}); +// }; +// hasPassword = function (user) { +// return !!user.services.password; +// }; +// getTwitterName = function (user) { +// // return twitter name provided by user, or else the one used for twitter login - if(checkNested(user, 'profile', 'twitter')){ - return user.profile.twitter; - }else if(checkNested(user, 'services', 'twitter', 'screenName')){ - return user.services.twitter.screenName; - } - return null; -}; -getGitHubName = function (user) { - // return twitter name provided by user, or else the one used for twitter login - if(checkNested(user, 'profile', 'github')){ - return user.profile.github; - }else if(checkNested(user, 'services', 'github', 'screenName')){ // TODO: double-check this with GitHub login - return user.services.github.screenName; - } - return null; -}; -getTwitterNameById = function (userId) { - var user = Meteor.users.findOne(userId); - if (user) - return getTwitterName(user); -}; -getEmail = function (user) { - if(user.profile && user.profile.email){ - return user.profile.email; - }else{ - return null; - } -}; -getEmailHash = function (user) { - // has to be this way to work with Gravatar - return Gravatar.hash(getEmail(user)); -}; -getAvatarUrl = function (user) { - console.warn('FUNCTION getAvatarUrl() IS DEPRECATED -- package bengott:avatar is used instead.') - return Avatar.getUrl(user); -}; -getCurrentUserEmail = function () { - return Meteor.user() ? getEmail(Meteor.user()) : ''; -}; -userProfileComplete = function (user) { - for (var i = 0; i < userProfileCompleteChecks.length; i++) { - if (!userProfileCompleteChecks[i](user)) { - return false; - } - } - return true; -}; +// if(checkNested(user, 'profile', 'twitter')){ +// return user.profile.twitter; +// }else if(checkNested(user, 'services', 'twitter', 'screenName')){ +// return user.services.twitter.screenName; +// } +// return null; +// }; +// getGitHubName = function (user) { +// // return twitter name provided by user, or else the one used for twitter login +// if(checkNested(user, 'profile', 'github')){ +// return user.profile.github; +// }else if(checkNested(user, 'services', 'github', 'screenName')){ // TODO: double-check this with GitHub login +// return user.services.github.screenName; +// } +// return null; +// }; +// getTwitterNameById = function (userId) { +// var user = Meteor.users.findOne(userId); +// if (user) +// return getTwitterName(user); +// }; +// getEmail = function (user) { +// if(user.profile && user.profile.email){ +// return user.profile.email; +// }else{ +// return null; +// } +// }; +// getEmailHash = function (user) { +// // has to be this way to work with Gravatar +// return Gravatar.hash(getEmail(user)); +// }; +// getAvatarUrl = function (user) { +// console.warn('FUNCTION getAvatarUrl() IS DEPRECATED -- package bengott:avatar is used instead.') +// return Avatar.getUrl(user); +// }; +// getCurrentUserEmail = function () { +// return Meteor.user() ? getEmail(Meteor.user()) : ''; +// }; +// userProfileComplete = function (user) { +// for (var i = 0; i < userProfileCompleteChecks.length; i++) { +// if (!userProfileCompleteChecks[i](user)) { +// return false; +// } +// } +// return true; +// }; -findLast = function(user, collection) { - return collection.findOne({userId: user._id}, {sort: {createdAt: -1}}); -}; -timeSinceLast = function(user, collection) { - var now = new Date().getTime(); - var last = findLast(user, collection); - if(!last) - return 999; // if this is the user's first post or comment ever, stop here - return Math.abs(Math.floor((now-last.createdAt)/1000)); -}; -numberOfItemsInPast24Hours = function (user, collection) { - var mNow = moment(); - var items = collection.find({ - userId: user._id, - createdAt: { - $gte: mNow.subtract(24, 'hours').toDate() - } - }); - return items.count(); -}; -getUserSetting = function(setting, defaultValue, user){ - var user = (typeof user == 'undefined') ? Meteor.user() : user; - var defaultValue = (typeof defaultValue == "undefined") ? null: defaultValue; - var settingValue = getProperty(user.profile, setting); - return (settingValue == null) ? defaultValue : settingValue; -}; -setUserSetting = function (setting, value, userArgument) { - // note: for some very weird reason, doesn't work when called from Accounts.onCreateUser +// findLast = function(user, collection) { +// return collection.findOne({userId: user._id}, {sort: {createdAt: -1}}); +// }; +// timeSinceLast = function(user, collection) { +// var now = new Date().getTime(); +// var last = findLast(user, collection); +// if(!last) +// return 999; // if this is the user's first post or comment ever, stop here +// return Math.abs(Math.floor((now-last.createdAt)/1000)); +// }; +// numberOfItemsInPast24Hours = function (user, collection) { +// var mNow = moment(); +// var items = collection.find({ +// userId: user._id, +// createdAt: { +// $gte: mNow.subtract(24, 'hours').toDate() +// } +// }); +// return items.count(); +// }; +// getUserSetting = function(setting, defaultValue, user){ +// var user = (typeof user == 'undefined') ? Meteor.user() : user; +// var defaultValue = (typeof defaultValue == "undefined") ? null: defaultValue; +// var settingValue = getProperty(user.profile, setting); +// return (settingValue == null) ? defaultValue : settingValue; +// }; +// setUserSetting = function (setting, value, userArgument) { +// // note: for some very weird reason, doesn't work when called from Accounts.onCreateUser - var user; +// var user; - if(Meteor.isClient){ - user = Meteor.user(); // on client, default to current user - }else if (Meteor.isServer){ - user = userArgument; // on server, use argument - } +// if(Meteor.isClient){ +// user = Meteor.user(); // on client, default to current user +// }else if (Meteor.isServer){ +// user = userArgument; // on server, use argument +// } - if(!user) - throw new Meteor.Error(500, 'User not defined'); +// if(!user) +// throw new Meteor.Error(500, 'User not defined'); - console.log('Setting user setting "'+setting+'" to "'+value+'" for '+getUserName(user)); - var find = {_id: user._id}; - var field = {}; - field['profile.'+setting] = value; - var options = {$set: field}; - var result = Meteor.users.update(find, options, {validate: false}); -}; +// console.log('Setting user setting "'+setting+'" to "'+value+'" for '+getUserName(user)); +// var find = {_id: user._id}; +// var field = {}; +// field['profile.'+setting] = value; +// var options = {$set: field}; +// var result = Meteor.users.update(find, options, {validate: false}); +// }; -getProperty = function(object, property){ - // recursive function to get nested properties - var array = property.split('.'); - if(array.length > 1){ - var parent = array.shift(); - // if our property is not at this level, call function again one level deeper if we can go deeper, else return null - return (typeof object[parent] == "undefined") ? null : getProperty(object[parent], array.join('.')); - }else{ - // else return property - return object[array[0]]; - } -}; +// getProperty = function(object, property){ +// // recursive function to get nested properties +// var array = property.split('.'); +// if(array.length > 1){ +// var parent = array.shift(); +// // if our property is not at this level, call function again one level deeper if we can go deeper, else return null +// return (typeof object[parent] == "undefined") ? null : getProperty(object[parent], array.join('.')); +// }else{ +// // else return property +// return object[array[0]]; +// } +// }; diff --git a/client/helpers/handlebars.js b/packages/telescope-core/lib/client/handlebars.js similarity index 100% rename from client/helpers/handlebars.js rename to packages/telescope-core/lib/client/handlebars.js diff --git a/lib/config/at_config.js b/packages/telescope-core/lib/config.js similarity index 100% rename from lib/config/at_config.js rename to packages/telescope-core/lib/config.js diff --git a/packages/telescope-core/lib/router/filters.js b/packages/telescope-core/lib/router/filters.js index 7eaa8047e..c4a7d2c6f 100644 --- a/packages/telescope-core/lib/router/filters.js +++ b/packages/telescope-core/lib/router/filters.js @@ -214,8 +214,8 @@ Meteor.startup( function (){ // After Hooks // Router.onAfterAction(filters.resetScroll, {except:['posts_top', 'posts_new', 'posts_best', 'posts_pending', 'posts_category', 'all-users']}); - Router.onAfterAction(analyticsInit); // will only run once thanks to _.once() - Router.onAfterAction(analyticsRequest); // log this request with mixpanel, etc + Router.onAfterAction(Events.analyticsInit); // will only run once thanks to _.once() + Router.onAfterAction(Events.analyticsRequest); // log this request with mixpanel, etc Router.onAfterAction(filters.setSEOProperties); Router.onAfterAction(filters.setCanonical, {only: ["post_page", "post_page_with_slug"]}); diff --git a/lib/vote.js b/packages/telescope-core/lib/vote.js similarity index 100% rename from lib/vote.js rename to packages/telescope-core/lib/vote.js diff --git a/packages/telescope-core/package.js b/packages/telescope-core/package.js index 73ba9be8a..2040462e9 100644 --- a/packages/telescope-core/package.js +++ b/packages/telescope-core/package.js @@ -24,18 +24,22 @@ Package.onUse(function(api) { 'meteorhacks:subs-manager@1.3.0', 'telescope:events@0.1.0', 'telescope:settings@0.1.0', - 'percolatestudio:synced-cron@1.1.0' + 'telescope:events@0.1.0', + 'percolatestudio:synced-cron@1.1.0', + 'useraccounts:unstyled@1.8.1' ]); api.addFiles([ 'lib/router/config.js', 'lib/router/filters.js', 'lib/router/admin.js', - 'lib/router/server.js' + 'lib/router/server.js', + 'lib/vote.js', + 'lib/config.js' ], ['client', 'server']); api.addFiles([ - // 'lib/client/templates/page.html', + 'lib/client/handlebars.js', ], 'client'); api.addFiles([ diff --git a/lib/analytics.js b/packages/telescope-events/lib/client/analytics.js similarity index 97% rename from lib/analytics.js rename to packages/telescope-events/lib/client/analytics.js index 3d4fe73b5..b03ff6e7b 100644 --- a/lib/analytics.js +++ b/packages/telescope-events/lib/client/analytics.js @@ -1,4 +1,4 @@ -analyticsInit = _.once(function() { +Events.analyticsInit = _.once(function() { // Mixpanel if (mixpanelId=Settings.get("mixpanelId")){ @@ -71,7 +71,7 @@ analyticsInit = _.once(function() { }); -analyticsRequest = function() { +Events.analyticsRequest = function() { // Google Analytics if (typeof window.ga !== 'undefined'){ diff --git a/packages/telescope-events/lib/events.js b/packages/telescope-events/lib/events.js index f9b5f3d26..7b97b8d72 100644 --- a/packages/telescope-events/lib/events.js +++ b/packages/telescope-events/lib/events.js @@ -41,4 +41,19 @@ if (Meteor.isServer) { Events.insert(event); } -} \ No newline at end of file +} + +Events.track = function(event, properties){ + // console.log('trackevent: ', event, properties); + var properties= (typeof properties === 'undefined') ? {} : properties; + //TODO + // add event to an Events collection for logging and buffering purposes + if(Meteor.isClient){ + if(typeof mixpanel !== 'undefined' && typeof mixpanel.track !== 'undefined'){ + mixpanel.track(event, properties); + } + if(typeof GoSquared !== 'undefined' && typeof GoSquared.DefaultTracker !== 'undefined'){ + GoSquared.DefaultTracker.TrackEvent(event, JSON.stringify(properties)); + } + } +}; \ No newline at end of file diff --git a/packages/telescope-events/package.js b/packages/telescope-events/package.js index cc95c5b65..3328aa530 100644 --- a/packages/telescope-events/package.js +++ b/packages/telescope-events/package.js @@ -19,6 +19,10 @@ Package.onUse(function(api) { 'lib/events.js' ], ['client', 'server']); + api.addFiles([ + 'lib/client/analytics.js' + ], ['client']); + api.export([ 'Events' ]); diff --git a/packages/telescope-lib/lib/utils.js b/packages/telescope-lib/lib/utils.js index 08c29ceab..45c6dd28f 100644 --- a/packages/telescope-lib/lib/utils.js +++ b/packages/telescope-lib/lib/utils.js @@ -213,3 +213,8 @@ Telescope.utils.checkNested = function(obj /*, level1, level2, ... levelN*/) { } return true; }; + +clog = function (s) { + if(Settings.get('debug', false)) + console.log(s); +}; \ No newline at end of file diff --git a/packages/telescope-notifications/lib/client/templates/unsubscribe.js b/packages/telescope-notifications/lib/client/templates/unsubscribe.js index 19b144967..9350ca52a 100644 --- a/packages/telescope-notifications/lib/client/templates/unsubscribe.js +++ b/packages/telescope-notifications/lib/client/templates/unsubscribe.js @@ -7,7 +7,7 @@ Template.unsubscribe.created = function(){ Session.set('unsubscribedMessage', __('user_not_found')); } }); - trackEvent('notificationsUnsubcribe', {hash: hash}); + Events.track('notificationsUnsubcribe', {hash: hash}); }; Template.unsubscribe.helpers({ diff --git a/packages/telescope-subscribe-to-posts/lib/client/templates/post_subscribe.js b/packages/telescope-subscribe-to-posts/lib/client/templates/post_subscribe.js index de4b1a0ee..ae894487b 100644 --- a/packages/telescope-subscribe-to-posts/lib/client/templates/post_subscribe.js +++ b/packages/telescope-subscribe-to-posts/lib/client/templates/post_subscribe.js @@ -26,7 +26,7 @@ Template.postSubscribe.events({ Meteor.call('subscribePost', post._id, function(error, result) { if (result) - trackEvent("post subscribed", {'_id': post._id}); + Events.track("post subscribed", {'_id': post._id}); }); }, @@ -41,7 +41,7 @@ Template.postSubscribe.events({ Meteor.call('unsubscribePost', post._id, function(error, result) { if (result) - trackEvent("post unsubscribed", {'_id': post._id}); + Events.track("post unsubscribed", {'_id': post._id}); }); } }); diff --git a/packages/telescope-users/lib/helpers.js b/packages/telescope-users/lib/helpers.js index 17bab8e47..a537e764e 100644 --- a/packages/telescope-users/lib/helpers.js +++ b/packages/telescope-users/lib/helpers.js @@ -41,7 +41,7 @@ Users.getUserName = function (user) { }; Users.getDisplayName = function (user) { - return (user.profile && user.profile.username) ? user.profile.username : getUserName(user); + return (user.profile && user.profile.username) ? user.profile.username : Users.getUserName(user); }; Users.getDisplayNameById = function (userId) { @@ -166,7 +166,7 @@ Users.setUserSetting = function (setting, value, userArgument) { if(!user) throw new Meteor.Error(500, 'User not defined'); - console.log('Setting user setting "'+setting+'" to "'+value+'" for '+getUserName(user)); + console.log('Setting user setting "' + setting + '" to "' + value + '" for ' + Users.getUserName(user)); var find = {_id: user._id}; var field = {}; field['profile.'+setting] = value; diff --git a/packages/telescope-users/lib/server/stuff.js b/packages/telescope-users/lib/server/stuff.js index c115c1568..f02793990 100644 --- a/packages/telescope-users/lib/server/stuff.js +++ b/packages/telescope-users/lib/server/stuff.js @@ -50,7 +50,7 @@ Accounts.onCreateUser(function(options, user){ // ------------------------------ Analytics ------------------------------ // - trackEvent('new user', {username: user.username, email: user.profile.email}); + Events.track('new user', {username: user.username, email: user.profile.email}); return user; });