pages/js/jquery.socialflair.js

189 lines
8.2 KiB
JavaScript
Raw Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

/*!
* jQuery socialFlair - Stackoverflow like User Flairs to showcase your
* Social Profiles
* ---------------------------------------------------------------------
*
* This is a simple jQuery plugin which lets you embed social flairs
* into your personal website or blog.
*
* Licensed under Mozilla Public License
*
* @version 1.0.0
* @since 2012.05.01
* @author Amit Gharat a.k.a. codef0rmer
* @blog http://goo.gl/frl5a
* @twitter twitter.com/codef0rmer
*
* Usage:
* ---------------------------------------------------------------------
* Twitter Flair:
* $(ele).socialFlair('twitter', 'twitterUsername', {});
*
* Github Flair:
* $(ele).socialFlair('github', 'githubUsername', {});
*
* Facebook Flair:
* Create an App and get the details here: https://developers.facebook.com/apps
* $(ele).socialFlair('facebook', 'facebookUsername', {clientId : clientId, clientSecret : clientSecrete});
*
*/
(function($) {
$.fn.extend({
socialFlair : function(service, handler, options) {
var defaults = {
};
options = $.extend({}, defaults, options);
return this.each(function() {
var $ele = $(this),
followers = 0,
following = 0,
access_token = null,
public_repos = 0;
// Twitter API
if (service === 'twitter' && handler !== undefined) {
$(document).queue("ajaxRequests", function() {
$.ajax({
url : 'http://api.twitter.com/1/followers/ids.json?screen_name=' + handler + '&cursor=-1',
method : 'get',
dataType : 'jsonp',
success : function (data) {
followers = data.ids.length;
}
});
});
$(document).queue("ajaxRequests", function() {
$.ajax({
url : 'https://api.twitter.com/1/friends/ids.json?cursor=-1&screen_name=' + handler,
method : 'get',
dataType : 'jsonp',
success : function (data) {
following = data.ids.length;
$ele.html(
"<a class='sfLink' href='http://twitter.com/#!/" + handler +"'><div class='sfTable sfTwitter'><div class='sfRow'>" +
" <div class='sfCell1'>" +
" <img class='sfProfilePic' src='https://api.twitter.com/1/users/profile_image?screen_name=" + handler + "&size=normal' width='48px' height='48px' />" +
" </div>"+
" <div class='sfCell2'>" +
" <div class='sfHandle'>" + truncateName(handler) + "</div>" +
" <div class='sfFans'>"+
" <span class='following' alt='Following' title='Following'>" + following + "</span>" +
" <span class='followers' alt='Followers' title='Followers'>" + followers + "</span>" +
" </div>" +
"</div>" +
"</div></div></a>"
);
}
});
});
$(document).dequeue("ajaxRequests");
$(document).dequeue("ajaxRequests");
} else if (service === 'github' && handler !== undefined) {
// Github API
$.ajax({
url : 'https://api.github.com/users/' + handler,
method : 'get',
dataType : 'jsonp',
success : function (data) {
followers = data.data.followers;
public_repos = data.data.public_repos;
$ele.html(
"<a class='sfLink' href='" + data.data.html_url +"'><div class='sfTable sfGithub'><div class='sfRow'>" +
" <div class='sfCell1'>" +
" <img class='sfProfilePic' src='" + data.data.avatar_url + "' width='48px' height='48px' />" +
" </div>" +
" <div class='sfCell2'>" +
" <div class='sfHandle'>" + truncateName(data.data.name || data.data.login) + "</div>" +
" <div class='sfFans'>" +
" <span class='public_repos' alt='Public Repositories' title='Public Repositories'>" + public_repos + "</span>" +
" <span class='followers' alt='Followers' title='Followers'>" + followers + "</span>" +
( data.data.hireable === true ? "<span class='hireable'>Hire Me!</span>" : '' ) +
" </div>" +
"</div>" +
"</div></div></a>"
);
}
});
} else if (service === 'bitbucket' && handler !== undefined) {
// BitBucket API
$.ajax({
url : 'https://api.bitbucket.org/1.0/users/' + handler + '/followers',
method : 'get',
dataType : 'jsonp',
success : function (data) {
var followers = data.count;
$.ajax({
url : 'https://api.bitbucket.org/1.0/users/' + handler,
method : 'get',
dataType : 'jsonp',
success : function (data) {
var public_repos = data.repositories.length;
$ele.html(
"<a class='sfLink' href='https://bitbucket.org/" + data.user.username +"'><div class='sfTable sfBitbucket'><div class='sfRow'>" +
" <div class='sfCell1'>" +
" <img class='sfProfilePic' src='" + data.user.avatar + "' width='48px' height='48px' />" +
" </div>" +
" <div class='sfCell2'>" +
" <div class='sfHandle'>" + truncateName(data.user.username) + "</div>" +
" <div class='sfFans'>" +
" <span class='public_repos' alt='Public Repositories' title='Public Repositories'>" + public_repos + "</span>" +
" <span class='followers' alt='Followers' title='Followers'>" + followers + "</span>" +
" </div>" +
"</div>" +
"</div></div></a>"
);
}
});
}
});
} else if (service === 'facebook' && handler !== undefined) {
// Facebook API
$.ajax({
url : 'https://graph.facebook.com/oauth/access_token?client_id=' + options.clientId + '&client_secret=' + options.clientSecret + '&grant_type=client_credentials',
method : 'get',
dataType : 'text',
success : function (data) {
access_token = data;
$.ajax({
url : 'https://api.facebook.com/method/friends.get?uid=' + handler + '&' + access_token + '&format=json',
method : 'get',
dataType : 'json',
success : function (data) {
following = data.length;
$.ajax({
url : 'https://graph.facebook.com/' + handler,
method : 'get',
dataType : 'json',
success : function (data) {
$ele.html(
"<a class='sfLink' href='" + data.link + "'><div class='sfTable sfFacebook'><div class='sfRow'>" +
" <div class='sfCell1'>" +
" <img class='sfProfilePic' src='http://graph.facebook.com/" + handler + "/picture' width='48px' height='48px' />" +
" </div>" +
" <div class='sfCell2'>" +
" <div class='sfHandle'>" + truncateName(data.name) + "</div>" +
" <div class='sfFans'>" +
" <span class='following' alt='Friends' title='Friends'>" + following + "</span>" +
" </div>" +
"</div>" +
"</div></div></a>"
);
}
});
}
});
}
});
}
});
}
});
})(jQuery);
function truncateName(handler) {
return ( handler.length > 28 ? handler.substring(0, 28) + '...' : handler );
}