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

2 lines
8.2 KiB
JavaScript

/*! Social Likes v3.0.0-alpha by Artem Sapegin - http://sapegin.github.com/social-likes - Licensed MIT */
!function(a){"function"==typeof define&&define.amd?define(["jquery"],a):a(jQuery)}(function(a,b){"use strict";function c(a,b){this.container=a,this.init(b)}function d(b,c){this.widget=b,this.options=a.extend({},c),this.detectService(),this.service&&this.init()}function e(a,b){return f(a,b,encodeURIComponent)}function f(a,b,c){return a.replace(/\{([^\}]+)\}/g,function(a,d){return d in b?c?c(b[d]):b[d]:a})}function g(a,b){var c=k+a;return c+" "+c+"_"+b}function h(b){function c(f){"keydown"===f.type&&27!==f.which||a(f.target).closest(b).length||(b.removeClass(l),d.off(e,c))}var d=a(document),e="click touchstart keydown";d.on(e,c)}function i(a,b){if(document.documentElement.getBoundingClientRect){var c=parseInt(a.css("left"),10),d=parseInt(a.css("top"),10),e=a[0].getBoundingClientRect();e.left<b?a.css("left",b-e.left+c):e.right>window.innerWidth-b&&a.css("left",window.innerWidth-e.right-b+c),e.top<b?a.css("top",b-e.top+d):e.bottom>window.innerHeight-b&&a.css("top",window.innerHeight-e.bottom-b+d)}a.addClass(l)}var j="social-likes",k=j+"__",l=j+"_visible",m={facebook:{counterUrl:"http://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:"http://www.facebook.com/sharer/sharer.php?u={url}",popupWidth:600,popupHeight:500},twitter:{counterUrl:"http://urls.api.twitter.com/1/urls/count.json?url={url}&callback=?",convertNumber:function(a){return a.count},popupUrl:"http://twitter.com/intent/tweet?url={url}&text={title}",popupWidth:600,popupHeight:450,click:function(){return/[\.:\-–—]\s*$/.test(this.options.pageTitle)||(this.options.pageTitle+=":"),!0},searchUrl:"https://twitter.com/search?src=typd&q={url}"},mailru:{counterUrl:"http://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:"http://connect.mail.ru/share?share_url={url}&title={title}",popupWidth:550,popupHeight:360},vkontakte:{counterUrl:"http://vkontakte.ru/share.php?act=count&url={url}&index={index}",counter:function(b,c){var d=m.vkontakte;d._||(d._=[],window.VK||(window.VK={}),window.VK.Share={count:function(a,b){d._[a].resolve(b)}});var f=d._.length;d._.push(c),a.ajax({url:e(b,{index:f}),dataType:"jsonp"})},popupUrl:"http://vk.com/share.php?url={url}&title={title}",popupWidth:550,popupHeight:330,searchUrl:"http://vk.com/feed?section=search&q=url%3A{url}"},odnoklassniki:{counterUrl:"http://www.odnoklassniki.ru/dk?st.cmd=shareData&ref={url}&cb=?",convertNumber:function(a){return a.count},popupUrl:"http://www.odnoklassniki.ru/dk?st.cmd=addShare&st._surl={url}",popupWidth:550,popupHeight:360},plusone:{popupUrl:"https://plus.google.com/share?url={url}",popupWidth:700,popupHeight:500},pinterest:{counterUrl:"http://api.pinterest.com/v1/urls/count.json?url={url}&callback=?",convertNumber:function(a){return a.count},popupUrl:"http://pinterest.com/pin/create/button/?url={url}&description={title}",popupWidth:630,popupHeight:270}},n={promises:{},fetch:function(b,c,d){n.promises[b]||(n.promises[b]={});var f=n.promises[b];if(f[c])return f[c];var g=a.extend({},m[b],d),h=a.Deferred(),i=g.counterUrl&&e(g.counterUrl,{url:c});return a.isFunction(g.counter)?g.counter(i,h):g.counterUrl&&a.getJSON(i).done(function(b){try{var c=b;a.isFunction(g.convertNumber)&&(c=g.convertNumber(b)),h.resolve(c)}catch(d){h.reject(d)}}),f[c]=h.promise(),f[c]}};a.fn.socialLikes=function(b){return this.each(function(){new c(a(this),b)})},c.prototype={optionsMap:{pageUrl:{attr:"url",defaultValue:function(){return window.location.href.replace(window.location.hash,"")}},pageTitle:{attr:"title",defaultValue:function(){return document.title}},pageHtml:{attr:"html",defaultValue:function(){return'<a href="'+this.options.pageUrl+'">'+this.options.pageTitle+"</a>"}},showCounters:{attr:"counters",defaultValue:"yes",convert:function(a){return a===!0||"yes"===a}},showZeroes:{attr:"zeroes",defaultValue:"no",convert:function(a){return a===!0||"yes"===a}},singleTitle:{attr:"single-title",defaultValue:"Share"}},init:function(b){this.container.addClass(j),this.readOptions(b),this.single=this.container.hasClass(j+"_single"),this.initUserButtons(),this.makeSingleButton();var c=this.options;this.container.children().each(function(){new d(a(this),c)})},readOptions:function(c){c=c||{},this.options={};for(var d in this.optionsMap){var e=this.optionsMap[d],f=c[e.attr]!==b?c[e.attr]:this.container.data(e.attr);f===b&&(f=a.isFunction(e.defaultValue)?a.proxy(e.defaultValue,this)():e.defaultValue),a.isFunction(e.convert)&&(f=e.convert(f)),this.options[d]=f}},initUserButtons:function(){!this.userButtonInited&&window.socialLikesButtons&&a.extend(!0,m,socialLikesButtons),this.userButtonInited=!0},makeSingleButton:function(){if(this.single){var b=this.container;b.addClass(j+"_vertical"),b.wrap(a("<div>",{"class":j+"_single-w"}));var c=b.parent(),d=parseInt(b.css("left"),10),e=parseInt(b.css("top"),10),m=a("<div>",{"class":g("widget","single")}),n=a(f('<div class="{buttonCls}"><span class="{iconCls}"></span>'+this.options.singleTitle+"</div>",{buttonCls:g("button","single"),iconCls:g("icon","single")}));m.append(n),c.append(m),n.click(function(){return b.css({left:d,top:e}),i(b,20),h(b),!1});var o=a("<div>",{"class":k+"close",html:"&times;"});b.append(o),o.click(function(){b.removeClass(l)}),this.number=0,this.widget=m,this.container.on("counter."+j,a.proxy(this.updateCounter,this))}},updateCounter:function(a,b,c){c&&(this.number+=c,this.getCounterElem().text(this.number))},getCounterElem:function(){var b=this.widget.find("."+k+"counter_single");return b.length||(b=a("<span>",{"class":g("counter","single")}),this.widget.append(b)),b}},d.prototype={init:function(){if(this.detectParams(),this.initHtml(),this.options.showCounters)if(this.options.counterNumber)this.updateCounter(this.options.counterNumber);else{var b=this.options.counterUrl?{counterUrl:this.options.counterUrl}:{};n.fetch(this.service,this.options.pageUrl,b).done(a.proxy(this.updateCounter,this))}},detectService:function(){for(var b=this.widget[0].classList||this.widget[0].className.split(" "),c=0;c<b.length;c++){var d=b[c];if(m[d])return this.service=d,a.extend(this.options,m[d]),void 0}},detectParams:function(){var a=this.widget.data("counter");if(a){var b=parseInt(a,10);isNaN(b)?this.options.counterUrl=a:this.options.counterNumber=b}var c=this.widget.data("title");c&&(this.options.pageTitle=c);var d=this.widget.data("url");d&&(this.options.pageUrl=d)},initHtml:function(){var b=this.options,c=this.widget,d=!!b.clickUrl;c.removeClass(this.service),c.addClass(this.getElementClassNames("widget"));var f=c.find("a");f.length&&this.cloneDataAttrs(f,c);var g=a(d?"<a>":"<span>",{"class":this.getElementClassNames("button"),text:c.text()});if(d){var h=e(b.clickUrl,{url:b.pageUrl,title:b.pageTitle});g.attr("href",h)}else g.click(a.proxy(this.click,this));g.prepend(a("<span>",{"class":this.getElementClassNames("icon")})),c.empty().append(g),this.button=g},cloneDataAttrs:function(a,b){var c=a.data();for(var d in c)c.hasOwnProperty(d)&&b.data(d,c[d])},getElementClassNames:function(a){return g(a,this.service)},updateCounter:function(b){if(b=parseInt(b,10),b||this.options.showZeroes){var c,d={"class":this.getElementClassNames("counter"),text:b};this.options.searchUrl?(d.class+=" "+k+"counter_link",d.href=e(this.options.searchUrl,{url:this.options.pageUrl}),c=a("<a>",d)):c=a("<span>",d),this.widget.append(c),this.widget.trigger("counter."+j,[this.service,b])}},click:function(b){var c=this.options,d=!0;if(a.isFunction(c.click)&&(d=c.click.call(this,b)),d){var f=e(c.popupUrl,{url:c.pageUrl,title:c.pageTitle});f=this.addAdditionalParamsToUrl(f),this.openPopup(f,{width:c.popupWidth,height:c.popupHeight})}return!1},addAdditionalParamsToUrl:function(b){var c=a.param(this.widget.data());if(!c)return b;var d=-1===b.indexOf("?")?"?":"&";return b+d+c},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");e?e.focus():location.href=a}},a(function(){a("."+j).socialLikes()})});