1/* 2 * jquery.socialshareprivacy.js 3 * 4 * Copyright (c) 2012 Mathias Panzenböck 5 * 6 * is released under the MIT License http://www.opensource.org/licenses/mit-license.php 7 * 8 */ 9(function ($, undefined) { 10 "use strict"; 11 12 var DISQUSWIDGETS = { 13 displayCount: function (data) { 14 var options = requestQueue.shift(); 15 $('.social_share_privacy_area .disqus .disqus-widget:not(.init)').each(function () { 16 var $widget = $(this); 17 if ($widget.attr("data-shortname") === options.shortname && $widget.attr("data-uri") === options.uri) { 18 var key = $widget.attr("data-count"); 19 var count = data.counts[0][key]; 20 var text = data.text[key]; 21 var scount = $.fn.socialSharePrivacy.formatNumber(count); 22 $widget.attr('title', count === 0 ? text.zero : count === 1 ? text.one : text.multiple.replace('{num}', scount)); 23 $widget.find('.count a').text(scount); 24 $widget.addClass('init'); 25 } 26 }); 27 } 28 }; 29 30 var requestId = 0; 31 var requestActive = false; 32 var requestQueue = []; 33 34 function enqueue (options) { 35 options.requestId = String(requestId ++); 36 requestQueue.push(options); 37 if (!requestActive) { 38 request(options); 39 } 40 } 41 42 function request (options) { 43 // this breaks every other usage of the disqus count API: 44 window.DISQUSWIDGETS = DISQUSWIDGETS; 45 46 requestActive = true; 47 var script = document.createElement('script'); 48 script.type = "text/javascript"; 49 script.src = 'http://'+options.shortname+'.disqus.com/count.js?q=1&0=2,'+encodeURIComponent(options.uri); 50 script.async = true; 51 script.setAttribute('data-request-id', options.requestId); 52 script.onload = script.onreadystatechange = script.onerror = requestLoad; 53 (document.head||document.body).appendChild(script); 54 } 55 56 function requestLoad (event) { 57 if (!event) event = window.event; 58 if (!this.readyState || this.readyState === 'loaded' || this.readyState === 'complete' || event.type === 'error') { 59 this.onload = this.onreadystatechange = this.onerror = requestLoad; 60 var $script = $(this); 61 var requestId = $script.attr('data-request-id'); 62 63 if (requestQueue.length > 0 && requestQueue[0].requestId === requestId) { 64 requestQueue.shift(); 65 } 66 67 if (requestQueue.length > 0) { 68 request(requestQueue[0]); 69 } 70 else { 71 requestActive = false; 72 } 73 } 74 } 75 76 $.fn.socialSharePrivacy.settings.services.disqus = { 77 'status' : true, 78 'dummy_line_img' : 'images/dummy_disqus.png', 79 'dummy_box_img' : 'images/dummy_box_disqus.png', 80 'dummy_alt' : '"Disqus"-Dummy', 81 'txt_info' : 'Two clicks for more privacy: The Disqus button will be enabled once you click here. Activating the button already sends data to Disqus – see <em>i</em>.', 82 'txt_off' : 'not connected to Disqus', 83 'txt_on' : 'connected to Disqus', 84 'perma_option' : true, 85 'display_name' : 'Disqus', 86 'referrer_track' : '', 87 'shortname' : '', 88 'count' : 'comments', 89 'onclick' : null, 90 'button' : function (options, uri, settings) { 91 var shortname = options.shortname || window.disqus_shortname || ''; 92 var $code; 93 if (settings.layout === 'line') { 94 $code = $('<div class="disqus-widget">'+ 95 '<a href="#disqus_thread" class="name">Disq<span class="us">us</span></a>'+ 96 '<span class="count"><i></i><u></u><a href="#disqus_thread"> </a></span></div>'); 97 } 98 else { 99 $code = $('<div class="disqus-widget">'+ 100 '<div class="count"><i></i><u></u><a href="#disqus_thread"> </a></div>'+ 101 '<a href="#disqus_thread" class="name">Disq<span class="us">us</span></a></div>'); 102 } 103 104 $code.attr({ 105 'data-count' : options.count, 106 'data-shortname' : shortname, 107 'data-uri' : uri + options.referrer_track 108 }); 109 110 if (options.onclick) { 111 $code.find('a').click(typeof options.onclick === "function" ? 112 options.onclick : new Function("event", options.onclick)); 113 } 114 115 enqueue({ 116 shortname : shortname, 117 uri : uri + options.referrer_track 118 }); 119 120 return $code; 121 } 122 }; 123})(jQuery); 124