190 lines
8.2 KiB
JavaScript
190 lines
8.2 KiB
JavaScript
|
/*!
|
|||
|
* 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 );
|
|||
|
}
|