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

2 lines
8.3 KiB
JavaScript

/*! Social Likes v2.0.8 by Artem Sapegin - http://sapegin.github.com/social-likes - Licensed MIT */
(function(t){"function"==typeof define&&define.amd?define(["jquery"],t):t(jQuery)})(function(t){"use strict";function e(t){this.container=t,this.init()}function i(e,i){this.widget=e,this.options=t.extend({},i),this.detectService(),this.service&&this.init()}function n(t,e){return o(t,e,encodeURIComponent)}function o(t,e,i){return t.replace(/\{([^\}]+)\}/g,function(t,n){return n in e?i?i(e[n]):e[n]:t})}function r(t,e){var i=u+t;return i+" "+i+"_"+e}function s(e){function i(r){"keydown"===r.type&&27!==r.which||t(r.target).closest(e).length||(e.fadeOut(l),n.off(o,i))}var n=t(document),o="click touchstart keydown";n.on(o,i)}function a(t,e){if(document.documentElement.getBoundingClientRect){var i=parseInt(t.css("left"),10),n=parseInt(t.css("top"),10);t.css("visibility","hidden").show();var o=t[0].getBoundingClientRect();e>o.left?t.css("left",e-o.left+i):o.right>window.innerWidth-e&&t.css("left",window.innerWidth-o.right-e+i),e>o.top?t.css("top",e-o.top+n):o.bottom>window.innerHeight-e&&t.css("top",window.innerHeight-o.bottom-e+n),t.hide().css("visibility","visible")}t.fadeIn(l)}var u="social-likes__",l="fast",c={facebook:{counterUrl:"http://graph.facebook.com/fql?q=SELECT+total_count+FROM+link_stat+WHERE+url%3D%22{url}%22&callback=?",convertNumber:function(t){return t.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(t){return t.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}},mailru:{counterUrl:"http://connect.mail.ru/share_count?url_list={url}&callback=1&func=?",convertNumber:function(t){for(var e in t)if(t.hasOwnProperty(e))return t[e].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(e,i){var o=c.vkontakte;o._||(o._=[],window.VK||(window.VK={}),window.VK.Share={count:function(t,e){o._[t].resolve(e)}});var r=o._.length;o._.push(i),t.ajax({url:n(e,{index:r}),dataType:"jsonp"})},popupUrl:"http://vk.com/share.php?url={url}&title={title}",popupWidth:550,popupHeight:330},odnoklassniki:{counterUrl:"http://www.odnoklassniki.ru/dk?st.cmd=shareData&ref={url}&cb=?",convertNumber:function(t){return t.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},livejournal:{click:function(){var e=this._livejournalForm;if(!e){var i=this.options.pageHtml.replace(/&/g,"&amp;").replace(/"/g,"&quot;");e=t(o('<form action="http://www.livejournal.com/update.bml" method="post" target="_blank" accept-charset="UTF-8"><input type="hidden" name="mode" value="full"><input type="hidden" name="subject" value="{title}"><input type="hidden" name="event" value="{html}"></form>',{title:this.options.pageTitle,html:i})),this.widget.append(e),this._livejournalForm=e}e.submit()}},pinterest:{counterUrl:"http://api.pinterest.com/v1/urls/count.json?url={url}&callback=?",convertNumber:function(t){return t.count},popupUrl:"http://pinterest.com/pin/create/button/?url={url}&description={title}",popupWidth:630,popupHeight:270}},p={promises:{},fetch:function(e,i,o){p.promises[e]||(p.promises[e]={});var r=p.promises[e];if(r[i])return r[i];var s=t.extend({},c[e],o),a=t.Deferred(),u=s.counterUrl&&n(s.counterUrl,{url:i});return t.isFunction(s.counter)?s.counter(u,a):s.counterUrl&&t.getJSON(u).done(function(e){try{var i=e;t.isFunction(s.convertNumber)&&(i=s.convertNumber(e)),a.resolve(i)}catch(n){a.reject(n)}}),r[i]=a.promise(),r[i]}};t.fn.socialLikes=function(){return this.each(function(){new e(t(this))})},e.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>"}},pageCounters:{attr:"counters",defaultValue:"yes",convert:function(t){return"yes"===t}}},init:function(){this.container.addClass("social-likes"),this.readOptions(),this.single=this.container.hasClass("social-likes_single"),this.initUserButtons(),this.single&&(this.makeSingleButton(),this.container.on("counter.social-likes",t.proxy(this.updateCounter,this)));var e=this.options;this.container.find("li").each(function(){new i(t(this),e)})},readOptions:function(){this.options={};for(var e in this.optionsMap){var i=this.optionsMap[e];this.options[e]=this.container.data(i.attr)||(t.isFunction(i.defaultValue)?t.proxy(i.defaultValue,this)():i.defaultValue),t.isFunction(i.convert)&&(this.options[e]=i.convert(this.options[e]))}},initUserButtons:function(){!this.userButtonInited&&window.socialLikesButtons&&t.extend(c,socialLikesButtons),this.userButtonInited=!0},makeSingleButton:function(){var e=this.container;e.addClass("social-likes_vertical"),e.wrap(t("<div>",{"class":"social-likes_single-w"}));var i=e.parent(),n=parseInt(e.css("left"),10),o=parseInt(e.css("top"),10);e.hide();var c=t("<div>",{"class":r("button","single"),text:e.data("single-title")||"Share"});c.prepend(t("<span>",{"class":r("icon","single")})),i.append(c);var p=t("<li>",{"class":u+"close",html:"&times;"});e.append(p),this.number=0,c.click(function(){return e.css({left:n,top:o}),a(e,20),s(e),!1}),p.click(function(){e.fadeOut(l)}),this.wrapper=i},updateCounter:function(t,e){e&&(this.number+=e,this.getCounterElem().text(this.number))},getCounterElem:function(){var e=this.wrapper.find("."+u+"counter_single");return e.length||(e=t("<span>",{"class":r("counter","single")}),this.wrapper.append(e)),e}},i.prototype={init:function(){if(this.detectParams(),this.initHtml(),this.options.pageCounters)if(this.options.counterNumber)this.updateCounter(this.options.counterNumber);else{var e=this.options.counterUrl?{counterUrl:this.options.counterUrl}:{};p.fetch(this.service,this.options.pageUrl,e).done(t.proxy(this.updateCounter,this))}},detectService:function(){for(var e=this.widget[0].classList||this.widget[0].className.split(" "),i=0;e.length>i;i++){var n=e[i];if(c[n])return this.service=n,t.extend(this.options,c[n]),void 0}},detectParams:function(){var t=this.widget.data("counter");if(t){var e=parseInt(t,10);isNaN(e)?this.options.counterUrl=t:this.options.counterNumber=e}var i=this.widget.data("title");i&&(this.options.pageTitle=i);var n=this.widget.data("url");n&&(this.options.pageUrl=n)},initHtml:function(){var e=this.options,i=this.widget,o=!!e.clickUrl;i.removeClass(this.service),i.addClass(this.getElementClassNames("widget"));var r=i.find("a");r.length&&this.cloneDataAttrs(r,i);var s=t(o?"<a>":"<span>",{"class":this.getElementClassNames("button"),text:i.text()});if(o){var a=n(e.clickUrl,{url:e.pageUrl,title:e.pageTitle});s.attr("href",a)}else s.click(t.proxy(this.click,this));s.prepend(t("<span>",{"class":this.getElementClassNames("icon")})),i.empty().append(s),this.button=s},cloneDataAttrs:function(t,e){var i=t.data();for(var n in i)i.hasOwnProperty(n)&&e.data(n,i[n])},getElementClassNames:function(t){return r(t,this.service)},updateCounter:function(e){if(e=parseInt(e,10)){var i=t("<span>",{"class":this.getElementClassNames("counter"),text:e});this.widget.append(i),this.widget.trigger("counter.social-likes",e)}},click:function(e){var i=this.options,o=!0;if(t.isFunction(i.click)&&(o=i.click.call(this,e)),o){var r=n(i.popupUrl,{url:i.pageUrl,title:i.pageTitle});r=this.addAdditionalParamsToUrl(r),this.openPopup(r,{width:i.popupWidth,height:i.popupHeight})}return!1},addAdditionalParamsToUrl:function(e){var i=t.param(this.widget.data());if(!i)return e;var n=-1===e.indexOf("?")?"?":"&";return e+n+i},openPopup:function(t,e){var i=Math.round(screen.width/2-e.width/2),n=0;screen.height>e.height&&(n=Math.round(screen.height/3-e.height/2));var o=window.open(t,"sl_"+this.service,"left="+i+",top="+n+","+"width="+e.width+",height="+e.height+",personalbar=0,toolbar=0,scrollbars=1,resizable=1");o?o.focus():location.href=t}},t(function(){t(".social-likes").socialLikes()})});