component-facebook.js

/**
 * Component facebook
 * @module Facebook
 * @param  {jQuery} $ Instance of jQuery
 * @param  {Document} document Instance of Document
 * @return {Object} List of Facebook methods
 */
XA.component.facebook = (function($, document) {
    /**
     * This object stores all public api methods
     * @type {Object.<Methods>}
     * @memberOf module:Facebook
     */
    var api = {};
    /**
     * initInstance method sets up facebook properties and
     * adds facebook script
     * @memberOf module:Facebook
     * @method
     * @alias module:Facebook.initInstance
     */
    api.initInstance = function() {
        (function(d, s, id) {
            var js,
                script = d.getElementsByTagName(s)[0];
            if (d.getElementById(id)) {
                return;
            }
            js = d.createElement(s);
            js.id = id;
            js.src = "//connect.facebook.net/en_US/sdk.js#xfbml=1&version=v2.7";
            script.insertBefore(js, script.firstChild);
        })(document, "script", "facebook-jssdk");
    };
    /**
     * init method calls in a loop for each
     * facebook component on a page and runs Facebook's
     * [".initInstance"]{@link module:Facebook.initInstance}  method.
     * @memberOf module:Facebook
     * @alias module:Facebook.init
     */
    api.init = function() {
        var facebook = $(".fb-comments:not(.initialized)");

        facebook.each(function() {
            api.initInstance();
            $(this).addClass("initialized");
        });
    };

    return api;
})(jQuery, document);

XA.register("facebook", XA.component.facebook);