jetfuel-blackbox
Version:
Currently, BlackBox is a boilerplate client-side application framework, built on top of the JetFuel build system and Grunt, Backbone, RequireJS, JetRunner unit test server (Mocha BDD/TDD test framework + PhantomJS + SauceLabs cloud integration), Dust (and Plate Django port) for templating (both client and server-side), Sass, Express dynamic web server, etc. BlackBox is the template used for JetFuel's basic `init` command.
158 lines (138 loc) • 7.49 kB
JavaScript
define('util/FacebookApi', ['_', 'Backbone', 'util/GoogleAnalytics'], function(_, Backbone, GoogleAnalytics) {
'use strict';
var /**
* @name context
* @fieldOf blackbox.web.util.FacebookApi
* @type enum
* @private
* @static
* @constant
* @description
* <strong>{String} <code>DEFAULT</code>:</strong> <code>'Facebook'</code>,<br/>
* <strong>{String} <code>AUTH_PROMPT</code>:</strong> <code>'Facebook Auth Prompt'</code>,<br/>
* <strong>{String} <code>AUTH_RESPONSE_CHANGE</code>:</strong> <code>'Facebook Auth Response Change'</code>,<br/>
* <strong>{String} <code>AUTH_STATUS_CHANGE</code>:</strong> <code>'Facebook Auth Status Change'</code>,<br/>
* <strong>{String} <code>LOGIN</code>:</strong> <code>'Facebook Login'</code>,<br/>
* <strong>{String} <code>LOGOUT</code>:</strong> <code>'Facebook Logout'</code>
*/
EventCategoriesEnum = {
DEFAULT: 'Facebook',
AUTH_PROMPT: 'Facebook Auth Prompt',
AUTH_RESPONSE_CHANGE: 'Facebook Auth Response Change',
AUTH_STATUS_CHANGE: 'Facebook Auth Status Change',
LOGIN: 'Facebook Login',
LOGOUT: 'Facebook Logout'
};
var /**
* @fieldOf blackbox.web.util.FacebookApi
* @type Window
* @private
* @static
*/
context;
/**
* @name blackbox.web.util.FacebookApi
* @version 2.0
* @constructor
*/
function FacebookApi() {}
return _.extend({
/**
* @name load
* @methodOf blackbox.web.util.FacebookApi
* @static
* @returns {blackbox.web.util.FacebookApi}
*/
load: function () {
var self = this;
if(context && context.FB) {
//return this.trigger('load', context.FB);
return this;
}
require(['model/Application'], function(Application) {
var app = Application.getInstance(),
settings = app.config('settings'),
config = settings.services.facebook;
context = app.config('context');
// FB configuration
context.fbAsyncInit = function() {
var FB = context.FB,
subscribe = _.bind(FB.Event.subscribe, FB.Event),
trackEvent = _.bind(GoogleAnalytics.trackEvent, GoogleAnalytics);
// init the FB JS SDK
context.FB.init({
appId : config.appId, // App ID from the App Dashboard
channelUrl : config.channelUrl, // Channel File for x-domain communication
status : config.status, // check the login status upon init?
cookie : config.cookie, // set sessions cookies to allow your server to access the session?
xfbml : config.xfbml // parse XFBML tags on this page?
});
/** Fires when a like button is clicked response is an URL*/
subscribe('edge.create',
function(response) {
trackEvent(EventCategoriesEnum.DEFAULT, 'Like', response);
}
);
/** Fires on unlike, response is an URL*/
subscribe('edge.remove',
function(response) {
trackEvent(EventCategoriesEnum.DEFAULT, 'Unlike', response);
}
);
/** Fires on logout, response an an object */
subscribe('auth.prompt',
function(response) {
trackEvent(EventCategoriesEnum.AUTH_PROMPT, 'Status', response);
}
);
/** Fires on logout, response an an object */
subscribe('auth.logout',
function(response) {
trackEvent(EventCategoriesEnum.LOGOUT, 'Status', response.status);
}
);
/** TODO: Consolidate auto events To One Function that takes two params */
/** Fires on login, response an an object */
subscribe('auth.login',
function(response) {
trackEvent(EventCategoriesEnum.LOGIN, 'Status', response.status);
trackEvent(EventCategoriesEnum.LOGIN, 'User Id', response.authResponse.userID);
trackEvent(EventCategoriesEnum.LOGIN, 'Signed Request', response.authResponse.signedRequest);
trackEvent(EventCategoriesEnum.LOGIN, 'Expires In', response.authResponse.expiresIn);
trackEvent(EventCategoriesEnum.LOGIN, 'Access Token', response.authResponse.accessToken);
}
);
/** Fires on authResponseChange, response an an object */
subscribe('auth.authResponseChange',
function(response) {
trackEvent(EventCategoriesEnum.AUTH_RESPONSE_CHANGE, 'Status', response.status);
trackEvent(EventCategoriesEnum.AUTH_RESPONSE_CHANGE, 'User Id', response.authResponse.userID);
trackEvent(EventCategoriesEnum.AUTH_RESPONSE_CHANGE, 'Signed Request', response.authResponse.signedRequest);
trackEvent(EventCategoriesEnum.AUTH_RESPONSE_CHANGE, 'Expires In', response.authResponse.expiresIn);
trackEvent(EventCategoriesEnum.AUTH_RESPONSE_CHANGE, 'Access Token', response.authResponse.accessToken);
}
);
/** Fires on authStatusChange, response an an object */
subscribe('auth.statusChange',
function(response) {
trackEvent(EventCategoriesEnum.AUTH_STATUS_CHANGE, 'User Id', response.authResponse.userID);
trackEvent(EventCategoriesEnum.AUTH_STATUS_CHANGE, 'Signed Request', response.authResponse.signedRequest);
trackEvent(EventCategoriesEnum.AUTH_STATUS_CHANGE, 'Expires In', response.authResponse.expiresIn);
trackEvent(EventCategoriesEnum.AUTH_STATUS_CHANGE, 'Access Token', response.authResponse.accessToken);
}
);
self.trigger('load', FB);
};
// Facebook Api
(function(d, debug){
var js, id = 'facebook-jssdk', ref = d.getElementsByTagName('script')[0];
if (d.getElementById(id)) {return;}
js = d.createElement('script'); js.id = id; js.async = true;
js.src = '//connect.facebook.net/en_US/all' + (debug ? '/debug' : '') + '.js';
ref.parentNode.insertBefore(js, ref);
}(context.document, settings.debug));
});
return this;
}
}, Backbone.Events);
});