dist/ext/facebook.js
File
(function(global, undefined) { var kafe = global.kafe, $ = kafe.dependencies.jQuery; kafe.bonify({name:'ext.facebook', version:'1.4.0', obj:(function(){
var
// dictionary
_locale = {
fr: 'fr_FR',
en: 'en_US'
},
// default params
_params = {
app_id: '',
status: true,
cookie: true,
xfbml: true,
statusConnected: null,
statusNotConnected: null,
permissions: ''
},
_userSession = null,
_userDetails = null,
_userLikes = null,
_getUserDetails = function (callback) {
$.ajax({
url: 'https://graph.facebook.com/' + _userSession.userID,
dataType: 'json',
data: 'accessToken=' + _userSession.accessToken + '&callback=?',
success: function(data, textStatus, jqXHR) {
_userDetails = data;
if (callback) {
callback(data);
}
},
error: function(jqXHR, textStatus, errorThrown) {
throw kafe.error(new Error(errorThrown));
//Return public details instead?...
}
});
},
_handleResponse = function (response) {
if (response.status == 'connected' && !!_params.init.statusConnected) {
_userSession = response.authResponse;
_getUserDetails(function(user) {
_params.init.statusConnected(user);
});
} else if (!!_params.init.statusNotConnected) {
_userSession = null;
_params.init.statusNotConnected();
}
}
;
// init Fb SDK
$(function(){
if (!$('#fb-root').length) {
$('body').append('<div id="fb-root"></div>');
(function(d, s, id) {
var js, fjs = d.getElementsByTagName(s)[0];
if (d.getElementById(id)) return;
js = d.createElement(s); js.id = id;
js.async = true;
js.src = '//connect.facebook.net/' + _locale[kafe.env.lang] + '/all.js#xfbml=1';
fjs.parentNode.insertBefore(js, fjs);
}(document, 'script', 'facebook-jssdk'));
}
});
/**
* ### Version 1.4.0
* Extra methods for the Facebook API.
*
* @module kafe.ext
* @class kafe.ext.facebook
*/
var facebook = {};
/**
* Set default facebook params.
*
* @method setParams
* @param {Object} options Options
* @param {String} [options.app_id] Application ID
* @param {Boolean} [options.status=true] Fetch fresh status
* @param {Boolean} [options.cookie=true] Enable cookie support
* @param {Boolean} [options.xfbml=true] Parse XFBML tags
* @param {String} [options.permissions] Comma separated list of Extended permissions
* @param {Function} [options.statusConnected] Callback if user connected
* @param {Function} [options.statusNotConnected] Callback if user is not connected
*/
facebook.setParams = function() {
$.extend(_params, arguments[0]);
};
/**
* Get the default params with optional extra params.
*
* @method getParams
* @param {Object} [options] Options
* @return {Object} The default facebook params.
*/
facebook.getParams = function() {
return $.extend({}, _params, arguments[0]);
};
/**
* Initialize the Facebook API.
*
* @method init
* @param {Object} [options] Options
*/
facebook.init = function() {
var p = facebook.getParams(arguments[0]);
if (p.app_id) {
global.fbAsyncInit = function() {
// Starts a relation with the Facebook app.
FB.init({
appId: p.app_id,
status: p.status, // check login status
cookie: p.cookie, // enable cookies to allow the server to access the session
xfbml: p.xfbml // parse XFBML
});
// Listen to status changes to apply layout changes accordingly.
FB.Event.subscribe('auth.statusChange', _handleResponse);
// Apply immediate layout changes depending of user login status.
FB.getLoginStatus(_handleResponse);
};
} else {
throw kafe.error(new Error('Facebook requires an app_id to be initiated.'));
}
};
/**
* Open the login dialog.
*
* @method login
* @param {Object} [options] Options
* @param {Function} [callback] Callback on success
*/
facebook.login = function(options,callback) {
var p = facebook.getParams(options);
FB.login(function(response) {
if (response.authResponse) {
if (callback) {
callback(response);
}
}
}, {scope: p.permissions});
};
/**
* Logs the user out.
*
* @method logout
* @param {Function} [callback] Callback
*/
facebook.logout = function(callback) {
FB.logout(callback);
};
/**
* Get the session.
*
* @method getSession
* @return {Object} Session object or null if not logged
*/
facebook.getSession = function() {
return _userSession;
};
/**
* Get the user details.
*
* @method getUser
* @return {Object} User details or null if not logged
*/
facebook.getUser = function() {
return _userDetails;
};
/**
* Get if user likes an item.
*
* @method checkUserLike
* @param {String} id A likable facebook item id (page, application, etc.)
* @return {Boolean} If user likes the item
*/
facebook.checkUserLike = function(id) {
$.ajax({
url: 'https://graph.facebook.com/' + _userSession.userID + '/likes',
dataType: 'json',
data: 'accessToken=' + _userSession.accessToken + '&callback=?',
success: function(data, textStatus, jqXHR) {
var _found = false;
$.each(data.data, function(i, val) {
if (val.id == id) {
_found = true;
return false;
}
});
return _found;
},
error: function(jqXHR, textStatus, errorThrown) {
throw kafe.error(new Error(errorThrown));
//Return public details instead?...
}
});
};
return facebook;
})()}); })(typeof window !== 'undefined' ? window : this);