/**
* Component Disqus
* @module Disqus
* @param {jQuery} $ Instance of jQuery
* @param {Document} document Instance of Document
* @return {Object} List of Disqus methods
*/
XA.component.disqus = (function($, document) {
/**
* This object stores all public api methods
* @type {Object.<Methods>}
* @memberOf module:Archive
* */
var api = {};
/**
* initDisqus method create script element for discuss component
* @memberOf module:Disqus
* @method
* @param {Object} prop option of disqus component
* @alias module:Disqus.initDisqus
* @private
*/
function initDisqus(prop) {
var dsq = document.createElement("script");
dsq.type = "text/javascript";
dsq.async = true;
dsq.src = "//" + prop.disqus_shortname + ".disqus.com/embed.js";
(
document.getElementsByTagName("head")[0] ||
document.getElementsByTagName("body")[0]
).appendChild(dsq);
}
/**
* initInstance method sets up disqus_config and calls
* [".initDisqus"]{@link module:Disqus.initDisqus} method.
* @memberOf module:Disqus
* @method
* @param {jQuery} component Root DOM element of archive component wrapped by jQuery
* @param {Object} prop option of disqus component
* @alias module:Disqus.initInstance
*/
api.initInstance = function(component, prop) {
window.disqus_config = function() {
this.page.url = prop.disqus_url;
this.page.identifier = prop.disqus_identifier;
this.page.title = prop.disqus_title;
this.page.category_id = prop.disqus_category_id;
};
if (component.find("#disqus_thread").length > 0) {
initDisqus(prop);
}
};
/**
* init method calls in a loop for each
* disqus component on a page and runs Disqus's
* [".initInstance"]{@link module:Disqus.initInstance} method.
* @memberOf module:Disqus
* @alias module:Disqus.init
*/
api.init = function() {
var disqus = $(".disqus:not(.initialized)");
disqus.each(function() {
var properties = $(this).data("properties");
api.initInstance($(this), properties);
$(this).addClass("initialized");
});
};
return api;
})(jQuery, document);
XA.register("disqus", XA.component.disqus);