jam-cloud/web/app/assets/javascripts/facebook_helper.js

84 lines
2.9 KiB
JavaScript

(function(context,$) {
"use strict";
context.JK = context.JK || {};
context.JK.FacebookHelper = function(app) {
var logger = context.JK.logger;
var loginStatusDeferred = null;
var $self = $(this);
var connected = false;
function deferredLoginStatus() {
return loginStatusDeferred;
}
// wrap calls in FB JS API calls in this
// if the user is not logged in, they will be prompted to log in to facebook
// if they are already logged in, the deferred object is immediately returned
// returns a deferred object that never calls .fail(). Just call .done(function(response)),
// and check: if(response && response.status == "connected") to know if you should carry on wih the FB JS API call
function promptLogin() {
if(connected) {
// instantly return previous login info
return loginStatusDeferred;
}
loginStatusDeferred = $.Deferred();
FB.login(function(response) {
handle_fblogin_response(response);
}, {scope:'publish_stream'});
return loginStatusDeferred;
}
function handle_fblogin_response(response) {
logger.debug("facebook login response: status=" + response.status)
if(response.status == "connected") {
connected = true;
}
$self.triggerHandler('fb.login_response', {response: response});
loginStatusDeferred.resolve(response);
}
function initialize(fbAppID) {
loginStatusDeferred = $.Deferred();
var fbAppID_ = fbAppID;
window.fbAsyncInit = function() {
FB.init({
appId : fbAppID_,
// channelUrl : '//WWW.YOUR_DOMAIN.COM/channel.html',
status : true, // check the login status upon init?
cookie : true, // set sessions cookies to allow server to access the session?
xfbml : false, // parse XFBML tags on this page?
oauth : true // enable OAuth 2.0
});
// listen to see if the user is known/logged in
FB.getLoginStatus(function(response) {
handle_fblogin_response(response);
});
};
// Load the SDK Asynchronously
(function(d){
var js, id = 'facebook-jssdk'; if (d.getElementById(id)) {return;}
js = d.createElement('script'); js.id = id; js.async = true;
js.src = "//connect.facebook.net/en_US/all.js";
d.getElementsByTagName('head')[0].appendChild(js);
}(document));
}
this.initialize = initialize;
this.promptLogin = promptLogin;
this.deferredLoginStatus = deferredLoginStatus;
};
})(window, jQuery);