/**
* Github activity feed.
*
* Graeme Sutherland, July 2012.
*
* Uses .json activity from github to show public commits.
* Requires jQuery and underscore.js
*
*/
var GithubActivity = (function($, _) {
var
self = {},
gh = 'http://github.com/',
default_template = '
\
<% if (type == "PushEvent") { %> \
pushed \
to "> \
<% print(payload.ref.replace("refs/heads/", "")); %> \
at \
<%= repository.owner %>/<%= repository.name %> \
<% _.each(payload.shas, function(sha) { %> \
- \
\
<%= sha[0].substring(0,6) %>
\
- <%= (sha[2].split("\\n"))[0] %>
<% }); %>
\
<% } else if (type == "GistEvent") { %> \
<%= payload.action %>d gist: \
<%= payload.desc %> \
<% } else if (type == "CreateEvent") { %> \
created <%= payload.ref_type %> \
<%= payload.ref %> in \
<%= repository.name %> \
<% } else if (type == "PullRequestEvent") { %> \
<%= payload.action %> pull request \
\
#<%= payload.number %> for \
\
<%= repository.owner %>/<%= repository.name %>: \
<%= payload.pull_request.title %> \
<% } else if (type == "IssueCommentEvent") { %> \
commented on issue \
#<% print(url.replace(/.*\\/issues\\/(\\d+)#.*/, "$1")); %> \
in \
<%= repository.owner %>/<%= repository.name %> \
<% } else if (type == "IssuesEvent") { %> \
<%= payload.action %> issue \
#<% print(url.replace(/.*\\/issues\\/(\\d+)/, "$1")); %> \
in \
<%= repository.owner %>/<%= repository.name %> \
<% } else if (type == "ForkEvent") { %> \
forked \
<%= repository.owner %>/<%= repository.name %> \
to \
<%= actor %>/<%= repository.name %> \
<% } else if (type == "GollumEvent") { %> \
<%= payload.pages[0].action %> the \
"<%= payload.pages[0].page_name %>" \
wiki page \
in \
<%= repository.owner %>/<%= repository.name %> \
<% } else if (type == "FollowEvent") { %> \
started following \
<%= payload.target.login %> \
<% } else if (type == "WatchEvent") { %> \
<%= payload.action %> watching \
\
<%= repository.owner %>/<%= repository.name %> \
<% } else { %> \
Unknown event type <% type %> \
<% } %>\
';
/**
* Fill in activity into selector from public events for username,
* with optional template selector tmpl_selector.
*/
self.show_activity = function (username, selector, tmpl_selector) {
var
url = 'https://github.com/' + username + '.json?callback=?',
template = $(tmpl_selector).html() || default_template,
compiled = _.template(template),
current_date = '',
$current_list;
$.getJSON(url, {}, function (data) {
$.each(data.slice(0, 6), function(index, commit) {
var date = commit.created_at.substring(0, 10);
if (date != current_date) {
if (current_date) {
var $new_item = $('');
$new_item.append('' + current_date + '
');
var $div = $('');
$div.append($current_list);
$new_item.append($div);
$(selector).append($new_item);
}
$current_list = $('');
current_date = date;
}
var $action = $(compiled(commit));
if (index % 2) {
$action.addClass('odd')
}
$current_list.append($action);
});
var $new_item = $('');
$new_item.append('' + current_date + '
');
var $div = $('');
$div.append($current_list);
$new_item.append($div);
$(selector).append($new_item);
});
};
return self;
}(jQuery, _));