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

2 lines
11 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(a){if("complete"==a.readyState){var d=document.head||document.getElementsByTagName("head")[0];d.appendChild(a),b&&b()}else"loaded"==a.readyState&&(a.children,"loading"==a.readyState&&c&&c())}}function c(a,b){this.container=a,this.options=b,this.init()}function d(a,b){this.widget=a,this.options={};for(var c in b)this.options[c]=b[c];this.detectService(),this.service&&this.init()}function e(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 f(a,b){return g(a,b,encodeURIComponent)}function g(a,b,c){return a.replace(/\{([^\}]+)\}/g,function(a,d){return d in b?c?c(b[d]):b[d]:a})}function h(a,b){var c=l+a;return c+" "+c+"_"+b}function i(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,m,!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 j(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+=" "+m}var k="social-likes",l=k+"__",m=k+"_opened",n="https:"===location.protocol?"https:":"http:",o={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:n+"//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}",popupWidth:492,popupHeight:500},vkontakte:{counterUrl:"https://vk.com/share.php?act=count&url={url}&index={index}",counter:function(a,c){var d=o.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(f(a,{index:e}),null,function(){c.reject()})},popupUrl:"https://vk.com/share.php?url={url}&title={title}",popupWidth:655,popupHeight:450},odnoklassniki:{counterUrl:n+"//connect.ok.ru/dk?st.cmd=extLike&ref={url}&uid={index}",counter:function(a,c){var d=o.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(f(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:n+"//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:n+"//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}},p={promises:{},fetch:function(a,b,c){p.promises[a]||(p.promises[a]={});var d=p.promises[a];if(!c.forceUpdate&&d[b])return d[b];var e={};for(var g in o[a])e[g]=o[a][g];for(g in c)e[g]=c[g];var h={resolve:function(a){},reject:function(){}},i=e.counterUrl&&f(e.counterUrl,{url:b});return i&&"function"==typeof e.counter?e.counter(i,h):e.counterUrl?GET(i,function(a,b){if(a.responseText){var c=b||a.responseText;try{"function"==typeof e.convertNumber&&(c=e.convertNumber(c)),h.resolve(c)}catch(d){h.reject()}}else h.reject()}):h.reject(),d[b]=h,d[b]}};window.socialLikes=function(a,b){var d=a["__"+k];if(d)"object"==typeof b&&d.update(b);else{var f={},g=e(a);for(var h in window.socialLikes.defaults)f[h]=window.socialLikes.defaults[h];for(h in b)f[h]=b[h];for(h in g)f[h]=g[h];d=new c(a,f),a["__"+k]=d}},window.socialLikes.defaults={url:window.location.href.replace(window.location.hash,""),title:document.title,counters:!0,zeroes:!1,wait:500,timeout:1e4,popupCheckInterval:500,singleTitle:"Share"},c.prototype={init:function(){var b=this;a(this.container,k)||(this.container.className+=" "+k),this.single=a(this.container,k+"_single"),this.initUserButtons(),this.countersLeft=0,this.number=0,this.container["on_counter."+k]=function(a){return b.updateCounter(a)},this.makeSingleButton(),this.buttons=[];for(var c=0;c<this.container.children.length;c++){var e=new d(this.container.children[c],this.options);this.buttons.push(e),e.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){o[a]=o[a]||{};for(var b in window.socialLikesButtons[a])o[a][b]=window.socialLikesButtons[a][b]}this.userButtonInited=!0},makeSingleButton:function(){if(this.single){var b=this.container;b.className+=" "+k+"_vertical";var c=document.createElement("div");c.className=k+"_single-w",b.parentNode.insertBefore(c,b),c.appendChild(b);var d=document.createElement("div");for(d.className=k+"__single-container";b.firstChild;)d.appendChild(b.firstChild);b.appendChild(d);var e=document.createElement("div");e.className=h("widget","single"),e.innerHTML='<div class="'+h("button","single")+'"><span class="'+h("icon","single")+'"></span>'+this.options.singleTitle+"</div>",c.appendChild(e),addListener(e,"click",function(){var c=k+"__widget_active";return a(e,c,!0)?a(b,m,!0):(e.className+=" "+c,b.style.left=(e.offsetWidth-b.offsetWidth)/2+"px",b.style.top=-b.offsetHeight+"px",j(b),i(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("."+k+"__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+=" "+k+"_visible"},ready:function(a){if(this.timeout&&clearTimeout(this.timeout),this.container.className+=" "+k+"_ready",!a){var b=this.container["on_ready."+k];b&&b(this.number)}},getCounterElem:function(){var a=this.widget.querySelector("."+l+"counter_single");return a.length||(a=document.createElement("span"),a.className=h("counter","single"),this.widget.append(a)),a}},d.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("."+k+"__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(o[d]){a=d;break}}if(!a)return}this.service=a;for(var e in o[a])this.options[e]=o[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 g=f(b.clickUrl,{url:b.url,title:b.title}),h=document.createElement("a");h.href=g,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=p.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 h(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")+" "+k+"__counter_empty",this.widget.appendChild(b);var c=this.widget["on_counter."+k];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=f(b.popupUrl,{url:b.url,title:b.title});d=this.addAdditionalParamsToUrl(d),this.openPopup(d,{width:b.popupWidth,height:b.popupHeight})}return!1},addAdditionalParamsToUrl:function(a){var b=e(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."+k];f&&f([this.service,e]);var g=this,h=setInterval(function(){if(e.closed){clearInterval(h);var a=g.widget["on_popup_closed."+k];a&&a(g.service)}},this.options.popupCheckInterval)}else location.href=a}},onDomReady(function(){for(var a=document.querySelectorAll("."+k),b=0;b<a.length;b++)window.socialLikes(a[b])})}();