Skip to content

HTTPS clone URL

Subversion checkout URL

You can clone with HTTPS or Subversion.

Download ZIP
Reddit Analytics built in Backbone 1.0.0, Express 3.2.6, Node 0.10.12, MongoDB 2.4.4, Mongoose 3.6.14, Handlebars 1.0.0
branch: master

This branch is 239 commits behind gdi2290:master

Fetching latest commit…

Cannot retrieve the latest commit at this time

Failed to load latest commit information.
config
controllers
db
public
tests
util
.gitignore
.travis.yml
Gruntfile.js
Procfile
Project Feedback.rtf
README.md
package.json
server.js

README.md

Reddit Insight - Reddit Analytics Build Status

An analytics suite for Reddit.com using their public API, combined with real-time data analysis and graphic visualizations of historical data. A five person team, with varying areas of expertise working together to build an analytics platform on top of the Firehose that is Reddit. Technologies used include JavaScript, Backbone.js, Node.js, Handlebars, d3, Express, MongoDB, Mongoose, and Python scripts.

Team:
Patrick Stapleton - app architecture, front-end
Alex Gaputin - pulled all the data, back-end
Kevin Smith - front-end architecture, realtime data capture, lauyout and styling
Elle Beal - d3, front-end and project management
Bill Shelton - data munging, data visualization and machine learning with Python, D3 and R
Chris Sita - d3 Interaction scatter plot

Logo - Alex Trimpe http://alextrimpe.com/

Debug Helpers

Global Debug

  Debug.[Controller/Router].[action].[view].[model/collection].[method]

Handlebars epoch

Handlebars.registerHelper("epoch", function(epoch) {
    var d = new Date(0); // The 0 there is the key, which sets the date to the epoch
    d.setUTCSeconds(epoch);
    return d;
});

Handlebars debugger

Handlebars.registerHelper("debug", function(optionalValue) {
  console.log("=====-Current-Context-=====");
  console.log(this);

  if (optionalValue) {
    console.log("==========-Value-==========");
    console.log(optionalValue);
    console.log("===========================");
  } else {
    console.log("===========================");
  }
});

You could then use that helper in any template like:

{{debug}}

or

{{debug someValue}}

You’ll see output in the JavaScript console letting you know what’s going on:


=====-Current-Context-=====
email: "alan@test.com"
first_name: "Alan"
last_name: "Johnson"
member_since: "Mar 25, 2011"
phone: "1234567890"
stripeClass: "even"
__proto__: Object
==========-Value-==========
Alan
===========================

Handlebars Compare

{{#compare}}
Handlebars.registerHelper('compare', function (lvalue, operator, rvalue, options) {

    var operators, result;

    if (arguments.length < 3) {
        throw new Error("Handlerbars Helper 'compare' needs 2 parameters");
    }

    if (options === undefined) {
        options = rvalue;
        rvalue = operator;
        operator = "===";
    }

    operators = {
        '==': function (l, r) { return l == r; },
        '===': function (l, r) { return l === r; },
        '!=': function (l, r) { return l != r; },
        '!==': function (l, r) { return l !== r; },
        '<': function (l, r) { return l < r; },
        '>': function (l, r) { return l > r; },
        '<=': function (l, r) { return l <= r; },
        '>=': function (l, r) { return l >= r; },
        'typeof': function (l, r) { return typeof l == r; }
    };

    if (!operators[operator]) {
        throw new Error("Handlerbars Helper 'compare' doesn't know the operator " + operator);
    }

    result = operators[operator](lvalue, rvalue);

    if (result) {
        return options.fn(this);
    } else {
        return options.inverse(this);
    }

});

jQuery Handlebars overwrite

$('#content').handlebars($('#template'), { name: "Alan" });
(function($) {
var compiled = {};
$.fn.handlebars = function(template, data) {
    if (template instanceof jQuery) {
    template = $(template).html();
    }

    compiled[template] = Handlebars.compile(template);
    this.html(compiled[template](data));
};
})(jQuery);
Something went wrong with that request. Please try again.