Universal code:
function enableDisqus(config, sso_config) {
console.log("is disqus already loaded: " + enableDisqus.loaded);
if (enableDisqus.loaded) {
DISQUS.reset({
reload: true,
config: function () {
this.page.identifier = config.identifier;
this.page.url = config.url;
this.page.title = config.title;
}
});
console.log('disqus reset', config.identifier, config.url);
} else {
console.log('disqus not loaded');
var body = "var disqus_shortname = \"" + config.shortname + "\";\n" +
"var disqus_title = \"" + config.title + "\";\n" +
"var disqus_identifier = \"" + config.identifier + "\";\n" +
"var disqus_url = \"" + config.url + "\";\n";
if (config.developer) {
body += "var disqus_developer = 1;\n"
}
appendScriptTagWithBody(body);
(function() {
var dsq = document.createElement('script'); dsq.type = 'text/javascript'; dsq.async = true;
dsq.src = 'http://' + disqus_shortname + '.disqus.com/embed.js';
(document.getElementsByTagName('head')[0] || document.getElementsByTagName('body')[0]).appendChild(dsq);
})();
if (sso_config) {
var remote_auth_s3 = sso_config.message + " " + sso_config.sig + " " + sso_config.timestamp;
var body = "var disqus_config = function() {\n" +
" this.page.remote_auth_s3 = \"" + remote_auth_s3 + "\";\n" +
" this.page.api_key = \"" + sso_config.api_key + "\";\n" +
" this.sso = {\n" +
" name: 'SampleNews',\n" +
" button: 'http://example.com/images/logo.png',\n" +
" icon: 'http://example.com/images/favicon-96x96.png',\n" +
" url: 'http://example.com/signin',\n" +
" logout: 'http://example.com/logout',\n" +
" width: '800',\n" +
" height: '400'\n" +
" };\n" +
"};\n"
appendScriptTagWithBody(body)
}
enableDisqus.loaded = true;
}
}
function appendScriptTagWithBody(body) {
var dso = document.createElement("script");
dso.type = "text/javascript";
dso.async = true;
dso.text = body;
console.log(body);
document.getElementsByTagName('body')[0].appendChild(dso);
}
When your page content changes and you need to load new comments:
//load the comments
if (isLoggedIn()) {
//prepare SSO
var disqusData = {
id: Parse.User.current().getSessionToken(),
username: Parse.User.current().getUsername(),
email: Parse.User.current().getEmail()
};
var disqusStr = JSON.stringify(disqusData);
var disqussso_timestamp = Math.round(+new Date() / 1000);
var disqussso_message = Base64.encode(disqusStr);
var disqussso_result = CryptoJS.HmacSHA1(disqussso_message + " " + disqussso_timestamp, "your disqus api");
var disqussso_hexsig = CryptoJS.enc.Hex.stringify(disqussso_result);
}
enableDisqus(
{
shortname: "your_shortname",
title: "your product name",
identifier: 'your-' + productId,
url: "product page url"
},
{
api_key: "your_disqus_api_key",
message: disqussso_message,
sig: disqussso_hexsig,
timestamp: disqussso_timestamp
}
);
Dependancies:
- http://code.google.com/p/crypto-js
- http://stackoverflow.com/questions/246801/how-can-you-encode-a-string-to-base64-in-javascript
Did you find this post useful?
Tip me some bitcoin: