social-likes-nojq/dist/social-likes.min.js

2 lines
12 KiB
JavaScript

/*! Social Likes v3.1.0 by Artem Sapegin / Vitaliy Filippov no-jquery - http://github.com/vitalif/social-likes - Licensed MIT */
!function(){"use strict";function a(a,b,c){for(var d=-1,e=!1;-1!=(d=a.className.indexOf(b,d+1));)d&&!/\s/.exec(a.className.charAt(d-1))||d!=a.className.length-b.length&&!/\s/.exec(a.className.charAt(d+b.length))||(e=!0,c&&(a.className=a.className.substr(0,d-1)+a.className.substr(d+b.length)));return e}function b(a,b,c){var d=document.createElement("script");d.type="text/javascript",d.src=a,d.onreadystatechange=function(){"complete"==d.readyState?b&&b():"loaded"==d.readyState&&(d.children,"loading"==d.readyState&&c&&c()),d.parentNode&&d.parentNode.removeChild(d),d=null},d.onload=function(){b&&b(),d.parentNode&&d.parentNode.removeChild(d),d=null},d.onerror=function(){c&&c(),d.parentNode&&d.parentNode.removeChild(d),d=null};var e=document.head||document.getElementsByTagName("head")[0];e.appendChild(d)}function c(){for(var a={},b=document.getElementsByTagName("meta"),c=0;c<b.length;c++){var d=b[c].getAttribute("property");d&&"og:"==d.substr(0,3)&&(a[d.substr(3)]=b[c].getAttribute("content"))}return a}function d(a,b){this.container=a,this.options=b,this.init()}function e(a,b){this.widget=a,this.options={};for(var c in b)this.options[c]=b[c];this.detectService(),this.service&&this.init()}function f(a,b){function c(a,b){return b.toUpper()}for(var d={},e=0;e<a.attributes.length;e++){var f=a.attributes[e].name;if("data-"==f.substr(0,5)){f=f.substr(5);var g=a.attributes[e].value;"yes"===g?g=!0:"no"===g&&(g=!1),d[b?f:f.replace(/-(\w)/g,c)]=g}}return d}function g(a,b){return h(a,b,encodeURIComponent)}function h(a,b,c){return a.replace(/\{([^\}]+)\}/g,function(a,d){return d in b?c?c(b[d]):b[d]:a})}function i(a,b){var c=m+a;return c+" "+c+"_"+b}function j(b,c){function d(e){if("keydown"!==e.type||27===e.which){for(var f=e;f&&f!=b;f=f.parentNode);f!=b&&(a(b,n,!0),removeListener(document,"click",d),removeListener(document,"touchstart",d),removeListener(document,"keydown",d),c())}}addListener(document,"click",d),addListener(document,"touchstart",d),addListener(document,"keydown",d)}function k(a){var b=10;if(document.documentElement.getBoundingClientRect){var c=parseInt(a.style.left,10),d=parseInt(a.style.top,10),e=a[0].getBoundingClientRect();e.left<b?a.stype.left=b-e.left+c+"px":e.right>window.innerWidth-b&&(a.style.left=window.innerWidth-e.right-b+c+"px"),e.top<b?a.style.top=b-e.top+d+"px":e.bottom>window.innerHeight-b&&(a.style.top=window.innerHeight-e.bottom-b+d+"px")}a.className+=" "+n}var l="social-likes",m=l+"__",n=l+"_opened",o="https:"===location.protocol?"https:":"http:",p={facebook:{counterUrl:"https://graph.facebook.com/fql?q=SELECT+total_count+FROM+link_stat+WHERE+url%3D%22{url}%22&callback=?",convertNumber:function(a){return a.data[0].total_count},popupUrl:"https://www.facebook.com/sharer/sharer.php?u={url}",popupWidth:600,popupHeight:359},twitter:{popupUrl:"https://twitter.com/intent/tweet?url={url}&text={title}",popupWidth:600,popupHeight:250,click:function(){return/[\.\?:\-–—]\s*$/.test(this.options.title)||(this.options.title+=":"),!0}},mailru:{counterUrl:o+"//connect.mail.ru/share_count?url_list={url}&callback=1&func=?",convertNumber:function(a){for(var b in a)if(a.hasOwnProperty(b))return a[b].shares},popupUrl:"https://connect.mail.ru/share?share_url={url}&title={title}&image_url={image}",popupWidth:492,popupHeight:500},vkontakte:{counterUrl:"https://vk.com/share.php?act=count&url={url}&index={index}",counter:function(a,c){var d=p.vkontakte;d._||(d._=[],window.VK||(window.VK={}),window.VK.Share={count:function(a,b){d._[a].resolve(b)}});var e=d._.length;d._.push(c),b(g(a,{index:e}),null,function(){c.reject()})},popupUrl:"https://vk.com/share.php?url={url}&title={title}&image={image}",popupWidth:655,popupHeight:450},odnoklassniki:{counterUrl:o+"//connect.ok.ru/dk?st.cmd=extLike&ref={url}&uid={index}",counter:function(a,c){var d=p.odnoklassniki;d._||(d._=[],window.ODKL||(window.ODKL={}),window.ODKL.updateCount=function(a,b){d._[a].resolve(b)});var e=d._.length;d._.push(c),b(g(a,{index:e}),null,function(){c.reject()})},popupUrl:"https://connect.ok.ru/dk?st.cmd=WidgetSharePreview&service=odnoklassniki&st.shareUrl={url}",popupWidth:580,popupHeight:336},plusone:{counterUrl:o+"//share.yandex.ru/gpp.xml?url={url}&callback=?",convertNumber:function(a){return parseInt(a.replace(/\D/g,""),10)},popupUrl:"https://plus.google.com/share?url={url}",popupWidth:500,popupHeight:550},pinterest:{counterUrl:o+"//api.pinterest.com/v1/urls/count.json?url={url}&callback=?",convertNumber:function(a){return a.count},popupUrl:"https://pinterest.com/pin/create/button/?url={url}&description={title}",popupWidth:740,popupHeight:550}},q={promises:{},fetch:function(a,c,d){q.promises[a]||(q.promises[a]={});var e=q.promises[a];if(!d.forceUpdate&&e[c])return e[c];var f={};for(var h in p[a])f[h]=p[a][h];for(h in d)f[h]=d[h];var i={resolve:function(a){},reject:function(){}},j=f.counterUrl&&g(f.counterUrl,{url:c});if(j&&"function"==typeof f.counter)f.counter(j,i);else if(f.counterUrl){var k=function(a){try{"function"==typeof f.convertNumber&&(a=f.convertNumber(a)),i.resolve(a)}catch(b){i.reject()}};if(j.indexOf("=?")>0){for(var l=0;window["__jsonp"+l];)l++;window["__jsonp"+l]=function(a){delete window["__jsonp"+l],k(a)},j=j.replace("=?","=__jsonp"+l),b(j,null,function(){i.reject()})}else GET(j,function(a,b){a.responseText?k(b||a.responseText):i.reject()})}else i.reject();return e[c]=i,e[c]}};window.socialLikes=function(a,b){var c=a["__"+l];if(c)"object"==typeof b&&c.update(b);else{var e={},g=f(a);for(var h in window.socialLikes.defaults)e[h]=window.socialLikes.defaults[h];for(h in b)e[h]=b[h];for(h in g)e[h]=g[h];c=new d(a,e),a["__"+l]=c}};var r=c();window.socialLikes.defaults={url:window.location.href.replace(window.location.hash,""),title:r.title||document.title,image:r.image,counters:!0,zeroes:!1,wait:500,timeout:1e4,popupCheckInterval:500,singleTitle:"Share"},d.prototype={init:function(){var b=this;a(this.container,l)||(this.container.className+=" "+l),this.single=a(this.container,l+"_single"),this.initUserButtons(),this.countersLeft=0,this.number=0,this.container["on_counter."+l]=function(a){return b.updateCounter(a)},this.makeSingleButton(),this.buttons=[];for(var c=0;c<this.container.children.length;c++){var d=new e(this.container.children[c],this.options);this.buttons.push(d),d.options.counterUrl&&this.countersLeft++}this.options.counters?(this.timer=setTimeout(function(){b.appear()},this.options.wait),this.timeout=setTimeout(function(){b.ready()},this.options.timeout)):this.appear()},initUserButtons:function(){if(!this.userButtonInited&&window.socialLikesButtons)for(var a in window.socialLikesButtons){p[a]=p[a]||{};for(var b in window.socialLikesButtons[a])p[a][b]=window.socialLikesButtons[a][b]}this.userButtonInited=!0},makeSingleButton:function(){if(this.single){var b=this.container;b.className+=" "+l+"_vertical";var c=document.createElement("div");c.className=l+"_single-w",b.parentNode.insertBefore(c,b),c.appendChild(b);var d=document.createElement("div");for(d.className=l+"__single-container";b.firstChild;)d.appendChild(b.firstChild);b.appendChild(d);var e=document.createElement("div");e.className=i("widget","single"),e.innerHTML='<div class="'+i("button","single")+'"><span class="'+i("icon","single")+'"></span>'+this.options.singleTitle+"</div>",c.appendChild(e),addListener(e,"click",function(){var c=l+"__widget_active";return a(e,c,!0)?a(b,n,!0):(e.className+=" "+c,b.style.left=(e.offsetWidth-b.offsetWidth)/2+"px",b.style.top=-b.offsetHeight+"px",k(b),j(b,function(){a(e,c,!0)})),!1}),this.widget=e}},update:function(a){if(a.forceUpdate||a.url!==this.options.url){if(this.number=0,this.countersLeft=this.buttons.length,this.widget){var b=this.widget.querySelector("."+l+"__counter");b&&b.parentNode.removeChild(b)}for(var c in a)this.options[c]=a[c];for(var d=0;d<this.buttons.length;d++)this.buttons[d].update(a)}},updateCounter:function(a,b,c){c=c||0,(c||this.options.zeroes)&&(this.number+=c,this.single&&this.getCounterElem().text(this.number)),0===this.countersLeft&&(this.appear(),this.ready()),this.countersLeft--},appear:function(){this.container.className+=" "+l+"_visible"},ready:function(a){if(this.timeout&&clearTimeout(this.timeout),this.container.className+=" "+l+"_ready",!a){var b=this.container["on_ready."+l];b&&b(this.number)}},getCounterElem:function(){var a=this.widget.querySelector("."+m+"counter_single");return a.length||(a=document.createElement("span"),a.className=i("counter","single"),this.widget.append(a)),a}},e.prototype={init:function(){this.detectParams(),this.initHtml();var a=this;setTimeout(function(){a.initCounter()},0)},update:function(a){this.options.forceUpdate=!1;for(var b in a)this.options[b]=a[b];var c=this.widget.querySelector("."+l+"__counter");c&&c.parentNode.removeChild(c),this.initCounter()},detectService:function(){var a=this.widget.getAttribute("data-service");if(!a){for(var b=this.widget.classList||this.widget.className.split(" "),c=0;c<b.length;c++){var d=b[c];if(p[d]){a=d;break}}if(!a)return}this.service=a;for(var e in p[a])this.options[e]=p[a][e]},detectParams:function(){var a=this.widget.getAttribute("data-counter");if(a){var b=parseInt(a,10);isNaN(b)?this.options.counterUrl=a:this.options.counterNumber=b}a=this.widget.getAttribute("data-title"),a&&(this.options.title=a),a=this.widget.getAttribute("data-url"),a&&(this.options.url=a)},initHtml:function(){var a=this,b=this.options,c=this.widget,d=c.querySelector("a");d&&this.cloneDataAttrs(d,c);var e=document.createElement("span");if(e.className=this.getElementClassNames("button"),e.innerHTML=c.innerHTML,b.clickUrl){var f=g(b.clickUrl,{url:b.url,title:b.title,image:b.image||""}),h=document.createElement("a");h.href=f,this.cloneDataAttrs(c,h),c.parentNode.insertBefore(h,c),c.parentNode.removeChild(c),this.widget=c=h}else addListener(c,"click",function(){a.click()});c.className=c.className.replace(" "+this.service,"")+" "+this.getElementClassNames("widget");var i=document.createElement("span");i.className=this.getElementClassNames("icon"),e.children.length?e.insertBefore(i,e.firstChild):e.appendChild(i),c.innerHTML="",c.appendChild(e),this.button=e},initCounter:function(){if(this.options.counters)if(this.options.counterNumber)this.updateCounter(this.options.counterNumber);else{var a={counterUrl:this.options.counterUrl,forceUpdate:this.options.forceUpdate},b=this,c=q.fetch(this.service,this.options.url,a);c.reject=c.resolve=function(a){b.updateCounter(a)}}},cloneDataAttrs:function(a,b){for(var c=0;c<a.attributes.length;c++)"data-"==a.attributes[c].name.substr(0,5)&&b.setAttribute(a.attributes[c].name,a.attributes[c].value)},getElementClassNames:function(a){return i(a,this.service)},updateCounter:function(a){a=parseInt(a,10)||0;var b=document.createElement("span");a||this.options.zeroes?(b.innerHTML=a,b.className=this.getElementClassNames("counter")):b.className=this.getElementClassNames("counter")+" "+l+"__counter_empty",this.widget.appendChild(b);var c=this.widget["on_counter."+l];c&&c([this.service,a])},click:function(a){var b=this.options,c=!0;if("function"==typeof b.click&&(c=b.click.call(this,a)),c){var d=g(b.popupUrl,{url:b.url,title:b.title,image:b.image||""});d=this.addAdditionalParamsToUrl(d),this.openPopup(d,{width:b.popupWidth,height:b.popupHeight})}return!1},addAdditionalParamsToUrl:function(a){var b=f(this.widget);for(var c in this.options.data)b[c]=this.options.data[c];var d="";for(c in b)d+="&"+encodeURIComponent(c)+"="+encodeURIComponent(b[c]);return d?(a.indexOf("?")||(d="?"+d.substr(1)),a+d):a},openPopup:function(a,b){var c=Math.round(screen.width/2-b.width/2),d=0;screen.height>b.height&&(d=Math.round(screen.height/3-b.height/2));var e=window.open(a,"sl_"+this.service,"left="+c+",top="+d+",width="+b.width+",height="+b.height+",personalbar=0,toolbar=0,scrollbars=1,resizable=1");if(e){e.focus();var f=this.widget["on_popup_opened."+l];f&&f([this.service,e]);var g=this,h=setInterval(function(){if(e.closed){clearInterval(h);var a=g.widget["on_popup_closed."+l];a&&a(g.service)}},this.options.popupCheckInterval)}else location.href=a}},onDomReady(function(){for(var a=document.querySelectorAll("."+l),b=0;b<a.length;b++)window.socialLikes(a[b])})}();