diff --git a/README.md b/README.md
index 60fdb7f..f722306 100644
--- a/README.md
+++ b/README.md
@@ -15,7 +15,7 @@ Usage
twitter: true
},
url: 'http://sharrre.com'
- });
+ });
Example
===
diff --git a/index.html b/index.html
index ebe6eeb..bd94876 100644
--- a/index.html
+++ b/index.html
@@ -1,11 +1,11 @@
-
- Sharrre.com
+
+ Sharrre.com
-
+
');
- var loading = 0;
- if(typeof window.IN === 'undefined' && loading == 0){
- loading = 1;
- (function() {
- var li = document.createElement('script');li.type = 'text/javascript';li.async = true;
- li.src = '//platform.linkedin.com/in.js';
- var s = document.getElementsByTagName('script')[0];s.parentNode.insertBefore(li, s);
- })();
- }
- else{
- window.IN.init();
- }
- },
- pinterest : function(self){
- var sett = self.options.buttons.pinterest;
- $(self.element).find('.buttons').append('');
-
- (function() {
- var li = document.createElement('script');li.type = 'text/javascript';li.async = true;
- li.src = '//assets.pinterest.com/js/pinit.js';
- var s = document.getElementsByTagName('script')[0];s.parentNode.insertBefore(li, s);
- })();
- }
- },
- /* Tracking for Google Analytics
- ================================================== */
- tracking = {
- googlePlus: function(){},
- facebook: function(){
- //console.log('facebook');
- fb = window.setInterval(function(){
- if (typeof FB !== 'undefined') {
- FB.Event.subscribe('edge.create', function(targetUrl) {
- _gaq.push(['_trackSocial', 'facebook', 'like', targetUrl]);
- });
- FB.Event.subscribe('edge.remove', function(targetUrl) {
- _gaq.push(['_trackSocial', 'facebook', 'unlike', targetUrl]);
- });
- FB.Event.subscribe('message.send', function(targetUrl) {
- _gaq.push(['_trackSocial', 'facebook', 'send', targetUrl]);
- });
- //console.log('ok');
- clearInterval(fb);
- }
- },1000);
- },
- twitter: function(){
- //console.log('twitter');
- tw = window.setInterval(function(){
- if (typeof twttr !== 'undefined') {
- twttr.events.bind('tweet', function(event) {
- if (event) {
- _gaq.push(['_trackSocial', 'twitter', 'tweet']);
- }
- });
- //console.log('ok');
- clearInterval(tw);
- }
- },1000);
- },
- digg: function(){
- //if somenone find a solution, mail me !
- /*$(this.element).find('.digg').on('click', function(){
- _gaq.push(['_trackSocial', 'digg', 'add']);
- });*/
- },
- delicious: function(){},
- stumbleupon: function(){},
- linkedin: function(){
- function LinkedInShare() {
- _gaq.push(['_trackSocial', 'linkedin', 'share']);
- }
- },
- pinterest: function(){
- //if somenone find a solution, mail me !
- }
- },
- /* Popup for each social network
- ================================================== */
- popup = {
- googlePlus: function(opt){
- window.open("https://plus.google.com/share?hl="+opt.buttons.googlePlus.lang+"&url="+encodeURIComponent((opt.buttons.googlePlus.url !== '' ? opt.buttons.googlePlus.url : opt.url)), "", "toolbar=0, status=0, width=900, height=500");
- },
- facebook: function(opt){
- window.open("http://www.facebook.com/sharer/sharer.php?u="+encodeURIComponent((opt.buttons.facebook.url !== '' ? opt.buttons.facebook.url : opt.url))+"&t="+opt.text+"", "", "toolbar=0, status=0, width=900, height=500");
- },
- twitter: function(opt){
- window.open("https://twitter.com/intent/tweet?text="+encodeURIComponent(opt.text)+"&url="+encodeURIComponent((opt.buttons.twitter.url !== '' ? opt.buttons.twitter.url : opt.url))+(opt.buttons.twitter.via !== '' ? '&via='+opt.buttons.twitter.via : ''), "", "toolbar=0, status=0, width=650, height=360");
- },
- digg: function(opt){
- window.open("http://digg.com/tools/diggthis/submit?url="+encodeURIComponent((opt.buttons.digg.url !== '' ? opt.buttons.digg.url : opt.url))+"&title="+opt.text+"&related=true&style=true", "", "toolbar=0, status=0, width=650, height=360");
- },
- delicious: function(opt){
- window.open('http://www.delicious.com/save?v=5&noui&jump=close&url='+encodeURIComponent((opt.buttons.delicious.url !== '' ? opt.buttons.delicious.url : opt.url))+'&title='+opt.text, 'delicious', 'toolbar=no,width=550,height=550');
- },
- stumbleupon: function(opt){
- window.open('http://www.stumbleupon.com/badge/?url='+encodeURIComponent((opt.buttons.stumbleupon.url !== '' ? opt.buttons.stumbleupon.url : opt.url)), 'stumbleupon', 'toolbar=no,width=550,height=550');
- },
- linkedin: function(opt){
- window.open('https://www.linkedin.com/cws/share?url='+encodeURIComponent((opt.buttons.linkedin.url !== '' ? opt.buttons.linkedin.url : opt.url))+'&token=&isFramed=true', 'linkedin', 'toolbar=no,width=550,height=550');
- },
- pinterest: function(opt){
- window.open('http://pinterest.com/pin/create/button/?url='+encodeURIComponent((opt.buttons.pinterest.url !== '' ? opt.buttons.pinterest.url : opt.url))+'&media='+encodeURIComponent(opt.buttons.pinterest.media)+'&description='+opt.buttons.pinterest.description, 'pinterest', 'toolbar=no,width=700,height=300');
- }
- };
-
- /* Plugin constructor
- ================================================== */
- function Plugin( element, options ) {
- this.element = element;
-
- this.options = $.extend( true, {}, defaults, options);
- this.options.share = options.share; //simple solution to allow order of buttons
-
- this._defaults = defaults;
- this._name = pluginName;
-
- this.init();
- };
-
- /* Initialization method
- ================================================== */
- Plugin.prototype.init = function () {
- var self = this;
- if(this.options.urlCurl !== ''){
- urlJson.googlePlus = this.options.urlCurl + '?url={url}&type=googlePlus'; // PHP script for GooglePlus...
- urlJson.stumbleupon = this.options.urlCurl + '?url={url}&type=stumbleupon'; // PHP script for Stumbleupon...
- }
- $(this.element).addClass(this.options.className); //add class
-
- //HTML5 Custom data
- if(typeof $(this.element).data('title') !== 'undefined'){
- this.options.title = $(this.element).attr('data-title');
- }
- if(typeof $(this.element).data('url') !== 'undefined'){
- this.options.url = $(this.element).data('url');
- }
- if(typeof $(this.element).data('text') !== 'undefined'){
- this.options.text = $(this.element).data('text');
- }
-
- //how many social website have been selected
- $.each(this.options.share, function(name, val) {
- if(val === true){
- self.options.shareTotal ++;
- }
- });
-
- if(self.options.enableCounter === true){ //if for some reason you don't need counter
- //get count of social share that have been selected
- $.each(this.options.share, function(name, val) {
- if(val === true){
- //self.getSocialJson(name);
- try {
- self.getSocialJson(name);
- } catch(e){
- }
- }
- });
- }
- else if(self.options.template !== ''){ //for personalized button (with template)
- this.options.render(this, this.options);
- }
- else{ // if you want to use official button like example 3 or 5
- this.loadButtons();
- }
-
- //add hover event
- $(this.element).hover(function(){
- //load social button if enable and 1 time
- if($(this).find('.buttons').length === 0 && self.options.enableHover === true){
- self.loadButtons();
- }
- self.options.hover(self, self.options);
- }, function(){
- self.options.hide(self, self.options);
- });
-
- //click event
- $(this.element).click(function(){
- self.options.click(self, self.options);
- return false;
- });
- };
-
- /* loadButtons methode
- ================================================== */
- Plugin.prototype.loadButtons = function () {
- var self = this;
- $(this.element).append('');
- $.each(self.options.share, function(name, val) {
- if(val == true){
- loadButton[name](self);
- if(self.options.enableTracking === true){ //add tracking
- tracking[name]();
- }
- }
- });
- };
-
- /* getSocialJson methode
- ================================================== */
- Plugin.prototype.getSocialJson = function (name) {
- var self = this,
- count = 0,
- url = urlJson[name].replace('{url}', encodeURIComponent(this.options.url));
- if(this.options.buttons[name].urlCount === true && this.options.buttons[name].url !== ''){
- url = urlJson[name].replace('{url}', this.options.buttons[name].url);
- }
- //console.log('name : ' + name + ' - url : '+url); //debug
- if(url != '' && self.options.urlCurl !== ''){ //urlCurl = '' if you don't want to used PHP script but used social button
- $.getJSON(url, function(json){
- if(typeof json.count !== "undefined"){ //GooglePlus, Stumbleupon, Twitter, Pinterest and Digg
- var temp = json.count + '';
- temp = temp.replace('\u00c2\u00a0', ''); //remove google plus special chars
- count += parseInt(temp, 10);
- }
- //get the FB total count (shares, likes and more)
- else if(json.data && json.data.length > 0 && typeof json.data[0].total_count !== "undefined"){ //Facebook total count
- count += parseInt(json.data[0].total_count, 10);
- }
- else if(typeof json[0] !== "undefined"){ //Delicious
- count += parseInt(json[0].total_posts, 10);
- }
- else if(typeof json[0] !== "undefined"){ //Stumbleupon
- }
- self.options.count[name] = count;
- self.options.total += count;
- self.renderer();
- self.rendererPerso();
- //console.log(json); //debug
- })
- .error(function() {
- self.options.count[name] = 0;
- self.rendererPerso();
- });
- }
- else{
- self.renderer();
- self.options.count[name] = 0;
- self.rendererPerso();
- }
- };
-
- /* launch render methode
- ================================================== */
- Plugin.prototype.rendererPerso = function () {
- //check if this is the last social website to launch render
- var shareCount = 0;
- for (e in this.options.count) { shareCount++; }
- if(shareCount === this.options.shareTotal){
- this.options.render(this, this.options);
- }
- };
-
- /* render methode
- ================================================== */
- Plugin.prototype.renderer = function () {
- var total = this.options.total,
- template = this.options.template;
- if(this.options.shorterTotal === true){ //format number like 1.2k or 5M
- total = this.shorterTotal(total);
- }
-
- if(template !== ''){ //if there is a template
- template = template.replace('{total}', total);
- $(this.element).html(template);
- }
- else{ //template by defaults
- $(this.element).html(
- ''
- );
- }
- };
-
- /* format total numbers like 1.2k or 5M
- ================================================== */
- Plugin.prototype.shorterTotal = function (num) {
- if (num >= 1e6){
- num = (num / 1e6).toFixed(2) + "M"
- } else if (num >= 1e3){
- num = (num / 1e3).toFixed(1) + "k"
- }
- return num;
- };
-
- /* Methode for open popup
- ================================================== */
- Plugin.prototype.openPopup = function (site) {
- popup[site](this.options); //open
- if(this.options.enableTracking === true){ //tracking!
- var tracking = {
- googlePlus: {site: 'Google', action: '+1'},
- facebook: {site: 'facebook', action: 'like'},
- twitter: {site: 'twitter', action: 'tweet'},
- digg: {site: 'digg', action: 'add'},
- delicious: {site: 'delicious', action: 'add'},
- stumbleupon: {site: 'stumbleupon', action: 'add'},
- linkedin: {site: 'linkedin', action: 'share'},
- pinterest: {site: 'pinterest', action: 'pin'}
- };
- _gaq.push(['_trackSocial', tracking[site].site, tracking[site].action]);
- }
- };
-
- /* Methode for add +1 to a counter
- ================================================== */
- Plugin.prototype.simulateClick = function () {
- var html = $(this.element).html();
- $(this.element).html(html.replace(this.options.total, this.options.total+1));
- };
-
- /* Methode for add +1 to a counter
- ================================================== */
- Plugin.prototype.update = function (url, text) {
- if(url !== ''){
- this.options.url = url;
- }
- if(text !== ''){
- this.options.text = text;
- }
- };
-
- /* A really lightweight plugin wrapper around the constructor, preventing against multiple instantiations
- ================================================== */
- $.fn[pluginName] = function ( options ) {
- var args = arguments;
- if (options === undefined || typeof options === 'object') {
- return this.each(function () {
- if (!$.data(this, 'plugin_' + pluginName)) {
- $.data(this, 'plugin_' + pluginName, new Plugin( this, options ));
- }
- });
- } else if (typeof options === 'string' && options[0] !== '_' && options !== 'init') {
- return this.each(function () {
- var instance = $.data(this, 'plugin_' + pluginName);
- if (instance instanceof Plugin && typeof instance[options] === 'function') {
- instance[options].apply( instance, Array.prototype.slice.call( args, 1 ) );
- }
- });
- }
- };
-})(jQuery, window, document);
+/*!
+ * Sharrre.com - Make your sharing widget!
+ * Version: beta 1.3.5
+ * Author: Julien Hany
+ * License: MIT http://en.wikipedia.org/wiki/MIT_License or GPLv2 http://en.wikipedia.org/wiki/GNU_General_Public_License
+ */
+
+;(function ( $, window, document, undefined ) {
+
+ /* Defaults */
+var pluginName = 'sharrre',
+ defaults = {
+ className: 'sharrre',
+ share: {
+ googlePlus: false,
+ facebook: false,
+ twitter: false,
+ tumblr: false,
+ digg: false,
+ delicious: false,
+ stumbleupon: false,
+ linkedin: false,
+ pinterest: false
+ },
+ shareTotal: 0,
+ template: '',
+ title: '',
+ url: document.location.href,
+ text: document.title,
+ urlCurl: 'sharrre.php', //PHP script for google plus...
+ count: {}, //counter by social network
+ total: 0, //total of sharing
+ shorterTotal: true, //show total by k or M when number is to big
+ enableHover: true, //disable if you want to personalize hover event with callback
+ enableCounter: true, //disable if you just want use buttons
+ enableTracking: false, //tracking with google analitycs
+ hover: function(){}, //personalize hover event with this callback function
+ hide: function(){}, //personalize hide event with this callback function
+ click: function(){}, //personalize click event with this callback function
+ render: function(){}, //personalize render event with this callback function
+ buttons: { //settings for buttons
+ googlePlus : { //http://www.google.com/webmasters/+1/button/
+ url: '', //if you need to personnalize button url
+ urlCount: false, //if you want to use personnalize button url on global counter
+ size: 'medium',
+ lang: 'en-US',
+ annotation: ''
+ },
+ facebook: { //http://developers.facebook.com/docs/reference/plugins/like/
+ url: '', //if you need to personalize url button
+ urlCount: false, //if you want to use personnalize button url on global counter
+ action: 'like',
+ layout: 'button_count',
+ width: '',
+ send: 'false',
+ faces: 'false',
+ colorscheme: '',
+ share: '',
+ font: '',
+ lang: 'en_US'
+ },
+ twitter: { //http://twitter.com/about/resources/tweetbutton
+ url: '', //if you need to personalize url button
+ urlCount: false, //if you want to use personnalize button url on global counter
+ count: 'horizontal',
+ hashtags: '',
+ via: '',
+ related: '',
+ lang: 'en'
+ },
+ tumblr: {
+ url: '',
+ urlCount: false,
+ description: '',
+ name: ''
+ },
+ digg: { //http://about.digg.com/downloads/button/smart
+ url: '', //if you need to personalize url button
+ urlCount: false, //if you want to use personnalize button url on global counter
+ type: 'DiggCompact'
+ },
+ delicious: {
+ url: '', //if you need to personalize url button
+ urlCount: false, //if you want to use personnalize button url on global counter
+ size: 'medium' //medium or tall
+ },
+ stumbleupon: { //http://www.stumbleupon.com/badges/
+ url: '', //if you need to personalize url button
+ urlCount: false, //if you want to use personnalize button url on global counter
+ layout: '1'
+ },
+ linkedin: { //http://developer.linkedin.com/plugins/share-button
+ url: '', //if you need to personalize url button
+ urlCount: false, //if you want to use personnalize button url on global counter
+ counter: ''
+ },
+ pinterest: { //http://pinterest.com/about/goodies/
+ url: '', //if you need to personalize url button
+ media: '',
+ description: '',
+ layout: 'horizontal'
+ },
+ email: { // Send by email
+ url: ''
+ }
+ }
+ },
+ /* Json URL to get count number
+ ================================================== */
+ urlJson = {
+ googlePlus: "",
+
+ //new FQL method by Sire
+ facebook: "//graph.facebook.com/fql?q=SELECT%20url,%20normalized_url,%20share_count,%20like_count,%20comment_count,%20total_count,commentsbox_count,%20comments_fbid,%20click_count%20FROM%20link_stat%20WHERE%20url=%27{url}%27&callback=?",
+ //old method facebook: "//graph.facebook.com/?id={url}&callback=?",
+ //facebook : "//api.ak.facebook.com/restserver.php?v=1.0&method=links.getStats&urls={url}&format=json"
+
+ twitter: "//cdn.api.twitter.com/1/urls/count.json?url={url}&callback=?",
+ digg: "//services.digg.com/2.0/story.getInfo?links={url}&type=javascript&callback=?",
+ delicious: '//feeds.delicious.com/v2/json/urlinfo/data?url={url}&callback=?',
+ tumblr: "",
+ //stumbleupon: "//www.stumbleupon.com/services/1.01/badge.getinfo?url={url}&format=jsonp&callback=?",
+ stumbleupon: "",
+ linkedin: "//www.linkedin.com/countserv/count/share?format=jsonp&url={url}&callback=?",
+ pinterest: "//api.pinterest.com/v1/urls/count.json?url={url}&callback=?"
+ },
+ /* Load share buttons asynchronously
+ ================================================== */
+ loadButton = {
+ googlePlus : function(self){
+ var sett = self.options.buttons.googlePlus;
+ //$(self.element).find('.buttons').append('
');
+ $(self.element).find('.buttons').append('');
+ window.___gcfg = {
+ lang: self.options.buttons.googlePlus.lang
+ };
+ var loading = 0;
+ if((typeof gapi === 'undefined' || typeof gapi.plusone === 'undefined') && loading == 0){
+ loading = 1;
+ (function() {
+ var po = document.createElement('script'); po.type = 'text/javascript'; po.async = true;
+ po.src = '//apis.google.com/js/plusone.js';
+ var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(po, s);
+ })();
+ }
+ else{
+ gapi.plusone.go();
+ }
+ },
+ facebook : function(self){
+ var sett = self.options.buttons.facebook;
+ $(self.element).find('.buttons').append('');
+ var loading = 0;
+ if(typeof FB === 'undefined' && loading == 0){
+ loading = 1;
+ (function(d, s, id) {
+ var js, fjs = d.getElementsByTagName(s)[0];
+ if (d.getElementById(id)) {return;}
+ js = d.createElement(s); js.id = id;
+ js.src = '//connect.facebook.net/'+sett.lang+'/all.js#xfbml=1';
+ if (sett.appId) {
+ js.src += '&appId='+sett.appId;
+ }
+ fjs.parentNode.insertBefore(js, fjs);
+ }(document, 'script', 'facebook-jssdk'));
+ }
+ else{
+ FB.XFBML.parse();
+ }
+ },
+ twitter : function(self){
+ var sett = self.options.buttons.twitter;
+ $(self.element).find('.buttons').append('');
+ var loading = 0;
+ if(typeof twttr === 'undefined' && loading == 0){
+ loading = 1;
+ (function() {
+ var twitterScriptTag = document.createElement('script');
+ twitterScriptTag.type = 'text/javascript';
+ twitterScriptTag.async = true;
+ twitterScriptTag.src = '//platform.twitter.com/widgets.js';
+ var s = document.getElementsByTagName('script')[0];
+ s.parentNode.insertBefore(twitterScriptTag, s);
+ })();
+ }
+ else{
+ $.ajax({ url: '//platform.twitter.com/widgets.js', dataType: 'script', cache:true}); //http://stackoverflow.com/q/6536108
+ }
+ },
+ tumblr: function(self) {
+ var sett = self.options.buttons.tumblr;
+ $(self.element).find('.buttons').append('Share on Tumblr
')
+ var loading = 0;
+ if(typeof Tumblr === 'undefined' && loading == 0) {
+ loading = 1;
+ (function() {
+ var tumblrScriptTag = document.createElement('script');
+ var s = document.getElementsByTagName('script')[0];
+ tumblrScriptTag.type = 'text/javascript';
+ tumblrScriptTag.async = true;
+ tumblrScriptTag.src = '//platform.tumblr.com/v1/share.js';
+ s.parentNode.insertBefore(tumblrScriptTag, s);
+ })();
+ }
+ else {
+ Tumblr.activate_share_on_tumblr_buttons();
+ }
+ },
+ digg : function(self){
+ var sett = self.options.buttons.digg;
+ $(self.element).find('.buttons').append('');
+ var loading = 0;
+ if(typeof __DBW === 'undefined' && loading == 0){
+ loading = 1;
+ (function() {
+ var s = document.createElement('SCRIPT'), s1 = document.getElementsByTagName('SCRIPT')[0];
+ s.type = 'text/javascript';
+ s.async = true;
+ s.src = '//widgets.digg.com/buttons.js';
+ s1.parentNode.insertBefore(s, s1);
+ })();
+ }
+ },
+ delicious : function(self){
+ if(self.options.buttons.delicious.size == 'tall'){//tall
+ var css = 'width:50px;',
+ cssCount = 'height:35px;width:50px;font-size:15px;line-height:35px;',
+ cssShare = 'height:18px;line-height:18px;margin-top:3px;';
+ }
+ else{//medium
+ var css = 'width:93px;',
+ cssCount = 'float:right;padding:0 3px;height:20px;width:26px;line-height:20px;',
+ cssShare = 'float:left;height:20px;line-height:20px;';
+ }
+ var count = self.shorterTotal(self.options.count.delicious);
+ if(typeof count === "undefined"){
+ count = 0;
+ }
+ $(self.element).find('.buttons').append(
+ '');
+
+ $(self.element).find('.delicious').on('click', function(){
+ self.openPopup('delicious');
+ });
+ },
+ stumbleupon : function(self){
+ var sett = self.options.buttons.stumbleupon;
+ $(self.element).find('.buttons').append('
');
+ var loading = 0;
+ if(typeof STMBLPN === 'undefined' && loading == 0){
+ loading = 1;
+ (function() {
+ var li = document.createElement('script');li.type = 'text/javascript';li.async = true;
+ li.src = '//platform.stumbleupon.com/1/widgets.js';
+ var s = document.getElementsByTagName('script')[0];s.parentNode.insertBefore(li, s);
+ })();
+ s = window.setTimeout(function(){
+ if(typeof STMBLPN !== 'undefined'){
+ STMBLPN.processWidgets();
+ clearInterval(s);
+ }
+ },500);
+ }
+ else{
+ STMBLPN.processWidgets();
+ }
+ },
+ linkedin : function(self){
+ var sett = self.options.buttons.linkedin;
+ $(self.element).find('.buttons').append('');
+ var loading = 0;
+ if(typeof window.IN === 'undefined' && loading == 0){
+ loading = 1;
+ (function() {
+ var li = document.createElement('script');li.type = 'text/javascript';li.async = true;
+ li.src = '//platform.linkedin.com/in.js';
+ var s = document.getElementsByTagName('script')[0];s.parentNode.insertBefore(li, s);
+ })();
+ }
+ else{
+ window.IN.init();
+ }
+ },
+ pinterest : function(self){
+ var sett = self.options.buttons.pinterest;
+ $(self.element).find('.buttons').append('');
+
+ (function() {
+ var li = document.createElement('script');li.type = 'text/javascript';li.async = true;
+ li.src = '//assets.pinterest.com/js/pinit.js';
+ var s = document.getElementsByTagName('script')[0];s.parentNode.insertBefore(li, s);
+ })();
+ }
+ },
+ /* Tracking for Google Analytics
+ ================================================== */
+ tracking = {
+ googlePlus: function(){},
+ facebook: function(){
+ //console.log('facebook');
+ fb = window.setInterval(function(){
+ if (typeof FB !== 'undefined') {
+ FB.Event.subscribe('edge.create', function(targetUrl) {
+ //_gaq.push(['_trackSocial', 'facebook', 'like', targetUrl]);
+ ga('send', 'social', 'facebook', 'like', targetUrl);
+ });
+ FB.Event.subscribe('edge.remove', function(targetUrl) {
+ //_gaq.push(['_trackSocial', 'facebook', 'unlike', targetUrl]);
+ ga('send', 'social', 'facebook', 'unlike', targetUrl);
+ });
+ FB.Event.subscribe('message.send', function(targetUrl) {
+ //_gaq.push(['_trackSocial', 'facebook', 'send', targetUrl]);
+ ga('send', 'social', 'facebook', 'send', targetUrl);
+ });
+ clearInterval(fb);
+ }
+ },1000);
+ },
+ twitter: function(){
+ //console.log('twitter');
+ tw = window.setInterval(function(){
+ if (typeof twttr !== 'undefined') {
+ twttr.events.bind('tweet', function(event) {
+ if (event) {
+ //_gaq.push(['_trackSocial', 'twitter', 'tweet']);
+ ga('send', 'social', 'twitter', 'tweet');
+ }
+ });
+ clearInterval(tw);
+ }
+ },1000);
+ },
+ tumblr: function(){},
+ digg: function(){
+ //if somenone find a solution, mail me !
+ /*$(this.element).find('.digg').on('click', function(){
+ _gaq.push(['_trackSocial', 'digg', 'add']);
+ });*/
+ },
+ delicious: function(){},
+ stumbleupon: function(){},
+ linkedin: function(){
+ function LinkedInShare() {
+ //_gaq.push(['_trackSocial', 'linkedin', 'share']);
+ ga('send', 'social', 'linkedin', 'share');
+ }
+ },
+ pinterest: function(){
+ //if somenone find a solution, mail me !
+ }
+ },
+ /* Popup for each social network
+ ================================================== */
+ popup = {
+ googlePlus: function(opt){
+ window.open("https://plus.google.com/share?hl="+opt.buttons.googlePlus.lang+"&url="+encodeURIComponent((opt.buttons.googlePlus.url !== '' ? opt.buttons.googlePlus.url : opt.url)), "", "toolbar=0, status=0, width=900, height=500");
+ },
+ facebook: function(opt){
+ window.open("http://www.facebook.com/sharer/sharer.php?u="+encodeURIComponent((opt.buttons.facebook.url !== '' ? opt.buttons.facebook.url : opt.url))+"&t="+opt.text+"", "", "toolbar=0, status=0, width=900, height=500");
+ },
+ twitter: function(opt){
+ window.open("https://twitter.com/intent/tweet?text="+encodeURIComponent(opt.text)+"&url="+encodeURIComponent((opt.buttons.twitter.url !== '' ? opt.buttons.twitter.url : opt.url))+(opt.buttons.twitter.via !== '' ? '&via='+opt.buttons.twitter.via : ''), "", "toolbar=0, status=0, width=650, height=360");
+ },
+ tumblr: function(opt){
+ window.open("http://www.tumblr.com/share/link?url="+encodeURIComponent(opt.buttons.tumblr.url) + "&name=" + encodeURIComponent(opt.buttons.tumblr.name) + "&description=" + encodeURIComponent(opt.buttons.tumblr.description), "", "toolbar=0, status=0, width=900, height=500");
+ },
+ digg: function(opt){
+ window.open("http://digg.com/tools/diggthis/submit?url="+encodeURIComponent((opt.buttons.digg.url !== '' ? opt.buttons.digg.url : opt.url))+"&title="+opt.text+"&related=true&style=true", "", "toolbar=0, status=0, width=650, height=360");
+ },
+ delicious: function(opt){
+ window.open('http://www.delicious.com/save?v=5&noui&jump=close&url='+encodeURIComponent((opt.buttons.delicious.url !== '' ? opt.buttons.delicious.url : opt.url))+'&title='+opt.text, 'delicious', 'toolbar=no,width=550,height=550');
+ },
+ stumbleupon: function(opt){
+ window.open('http://www.stumbleupon.com/badge/?url='+encodeURIComponent((opt.buttons.stumbleupon.url !== '' ? opt.buttons.stumbleupon.url : opt.url)), 'stumbleupon', 'toolbar=no,width=550,height=550');
+ },
+ linkedin: function(opt){
+ window.open('https://www.linkedin.com/cws/share?url='+encodeURIComponent((opt.buttons.linkedin.url !== '' ? opt.buttons.linkedin.url : opt.url))+'&token=&isFramed=true', 'linkedin', 'toolbar=no,width=550,height=550');
+ },
+ pinterest: function(opt){
+ window.open('http://pinterest.com/pin/create/button/?url='+encodeURIComponent((opt.buttons.pinterest.url !== '' ? opt.buttons.pinterest.url : opt.url))+'&media='+encodeURIComponent(opt.buttons.pinterest.media)+'&description='+opt.buttons.pinterest.description, 'pinterest', 'toolbar=no,width=700,height=300');
+ },
+
+ email: function (opt) {
+ window.open('mailto:?body=' + (opt.buttons.email.url !== '' ? opt.buttons.email.url : opt.url) + '&subject=' + opt.text, 'email', 'toolbar=no,width=550,height=550');
+ }
+ };
+
+ /* Plugin constructor
+ ================================================== */
+ function Plugin( element, options ) {
+ this.element = element;
+
+ this.options = $.extend( true, {}, defaults, options);
+ this.options.share = options.share; //simple solution to allow order of buttons
+
+ this._defaults = defaults;
+ this._name = pluginName;
+
+ this.init();
+ };
+
+ /* Initialization method
+ ================================================== */
+ Plugin.prototype.init = function () {
+ var self = this;
+ if(this.options.urlCurl !== ''){
+ urlJson.googlePlus = this.options.urlCurl + '?url={url}&type=googlePlus'; // PHP script for GooglePlus...
+ urlJson.stumbleupon = this.options.urlCurl + '?url={url}&type=stumbleupon'; // PHP script for Stumbleupon...
+ }
+ $(this.element).addClass(this.options.className); //add class
+
+ //HTML5 Custom data
+ if(typeof $(this.element).data('title') !== 'undefined'){
+ this.options.title = $(this.element).attr('data-title');
+ }
+ if(typeof $(this.element).data('url') !== 'undefined'){
+ this.options.url = $(this.element).data('url');
+ }
+ if(typeof $(this.element).data('text') !== 'undefined'){
+ this.options.text = $(this.element).data('text');
+ }
+
+ //how many social website have been selected
+ $.each(this.options.share, function(name, val) {
+ if(val === true){
+ self.options.shareTotal ++;
+ }
+ });
+
+ if(self.options.enableCounter === true){ //if for some reason you don't need counter
+ //get count of social share that have been selected
+ $.each(this.options.share, function(name, val) {
+ if(val === true){
+ //self.getSocialJson(name);
+ try {
+ self.getSocialJson(name);
+ } catch(e){
+ }
+ }
+ });
+ }
+ else if(self.options.template !== ''){ //for personalized button (with template)
+ this.options.render(this, this.options);
+ }
+ else{ // if you want to use official button like example 3 or 5
+ this.loadButtons();
+ }
+
+ //add hover event
+ $(this.element).hover(function(){
+ //load social button if enable and 1 time
+ if($(this).find('.buttons').length === 0 && self.options.enableHover === true){
+ self.loadButtons();
+ }
+ self.options.hover(self, self.options);
+ }, function(){
+ self.options.hide(self, self.options);
+ });
+
+
+ //click event
+ $(this.element).click(function(){
+ self.options.click(self, self.options);
+ return false;
+ });
+ };
+
+
+ /* loadButtons methode
+ ================================================== */
+ Plugin.prototype.loadButtons = function () {
+ var self = this;
+ $(this.element).append('');
+ $.each(self.options.share, function(name, val) {
+ if(val == true){
+ loadButton[name](self);
+ if(self.options.enableTracking === true){ //add tracking
+ tracking[name]();
+ }
+ }
+ });
+ };
+
+ /* getSocialJson method
+ ================================================== */
+ Plugin.prototype.getSocialJson = function (name) {
+ var self = this,
+ count = 0,
+ url = 'http://' + self.cleanURL(self.options.url,name);
+
+ if (self.options.urlCurl !== '') { //urlCurl = '' if you don't want to used PHP script but used social button
+
+ $.getJSON(self.buildSocialURL(url, name), function(json){
+ if(typeof json.count !== "undefined"){ //GooglePlus, Stumbleupon, Twitter, Pinterest and Digg
+ var temp = json.count + '';
+ temp = temp.replace('\u00c2\u00a0', ''); //remove google plus special chars
+ count += parseInt(temp, 10);
+ }
+
+ //get the FB total count (shares, likes and more)
+ else if(json.data && json.data.length > 0 && typeof json.data[0].total_count !== "undefined"){ //Facebook total count
+ count += parseInt(json.data[0].total_count, 10);
+ }
+ else if(typeof json[0] !== "undefined"){ //Delicious
+ count += parseInt(json[0].total_posts, 10);
+ }
+ else if(typeof json[0] !== "undefined"){ //Stumbleupon
+ }
+
+ self.options.count[name] += count;
+ self.options.total += count;
+ self.renderer();
+ self.rendererPerso();
+ })
+ .error(function() {
+ self.options.count[name] = 0;
+ self.rendererPerso();
+ });
+ }
+ else{
+ self.renderer();
+ self.options.count[name] = 0;
+ self.rendererPerso();
+ }
+ };
+
+ /* clean url
+ ================================================== */
+ Plugin.prototype.cleanURL = function (url, name) {
+ // Strip paramaters
+ url = url.replace(window.location.search, "");
+ // Strip protocol
+ url = url.replace(/.*?:\/\//g, "");
+ return url;
+ };
+
+ /* convert url to social link
+ ================================================== */
+ Plugin.prototype.buildSocialURL = function(url, name) {
+ newurl = (this.options.buttons[name].urlCount === true && this.options.buttons[name].url !== '') ? this.options.buttons[name].url : encodeURIComponent(url);
+ return urlJson[name].replace('{url}', newurl);
+ };
+
+ /* launch render methode
+ ================================================== */
+ Plugin.prototype.rendererPerso = function () {
+ //check if this is the last social website to launch render
+ var shareCount = 0;
+ for (e in this.options.count) { shareCount++; }
+ if(shareCount === this.options.shareTotal){
+ this.options.render(this, this.options);
+ }
+ };
+
+ /* render methode
+ ================================================== */
+ Plugin.prototype.renderer = function () {
+ var total = this.options.total,
+ template = this.options.template;
+ if(this.options.shorterTotal === true){ //format number like 1.2k or 5M
+ total = this.shorterTotal(total);
+ }
+
+ if(template !== ''){ //if there is a template
+ template = template.replace('{total}', total);
+ $(this.element).html(template);
+ }
+ else{ //template by defaults
+ $(this.element).html(
+ ''
+ );
+ }
+ };
+
+ /* format total numbers like 1.2k or 5M
+ ================================================== */
+ Plugin.prototype.shorterTotal = function (num) {
+ if (num >= 1e6){
+ num = (num / 1e6).toFixed(2) + "M"
+ } else if (num >= 1e3){
+ num = (num / 1e3).toFixed(1) + "k"
+ }
+ return num;
+ };
+
+ /* Methode for open popup
+ ================================================== */
+ Plugin.prototype.openPopup = function (site) {
+ popup[site](this.options); //open
+ if(this.options.enableTracking === true){ //tracking!
+ var tracking = {
+ googlePlus: {site: 'Google', action: '+1'},
+ facebook: {site: 'facebook', action: 'share'},
+ twitter: {site: 'twitter', action: 'tweet'},
+ digg: {site: 'digg', action: 'add'},
+ delicious: {site: 'delicious', action: 'add'},
+ stumbleupon: {site: 'stumbleupon', action: 'add'},
+ linkedin: {site: 'linkedin', action: 'share'},
+ pinterest: {site: 'pinterest', action: 'pin'},
+ tumblr: {site: 'tumblr', action: 'share'},
+ mail: {site: 'mail', action: 'share'}
+ };
+ //_gaq.push(['_trackSocial', tracking[site].site, tracking[site].action]);
+ //ga('send', 'social', tracking[site].site, tracking[site].action);
+ ga('send', 'social', {
+ 'socialNetwork': tracking[site].site,
+ 'socialAction': tracking[site].action,
+ 'socialTarget': this.options.url
+ });
+ }
+ };
+
+ /* Methode for add +1 to a counter
+ ================================================== */
+ Plugin.prototype.simulateClick = function (className) {
+ var html = $(this.element).html();
+ if (className === undefined) {
+ $(this.element).html(html.replace(this.options.total, this.options.total+1));
+ } else {
+ $('.'+className).html(html.replace(this.options.total, this.options.total+1));
+ }
+ };
+
+ /* Methode for add +1 to a counter
+ ================================================== */
+ Plugin.prototype.update = function (url, text) {
+ if(url !== ''){
+ this.options.url = url;
+ }
+ if(text !== ''){
+ this.options.text = text;
+ }
+ };
+
+ /* A really lightweight plugin wrapper around the constructor, preventing against multiple instantiations
+ ================================================== */
+ $.fn[pluginName] = function ( options ) {
+ var args = arguments;
+ if (options === undefined || typeof options === 'object') {
+ return this.each(function () {
+ if (!$.data(this, 'plugin_' + pluginName)) {
+ $.data(this, 'plugin_' + pluginName, new Plugin( this, options ));
+ }
+ });
+ } else if (typeof options === 'string' && options[0] !== '_' && options !== 'init') {
+ return this.each(function () {
+ var instance = $.data(this, 'plugin_' + pluginName);
+ if (instance instanceof Plugin && typeof instance[options] === 'function') {
+ instance[options].apply( instance, Array.prototype.slice.call( args, 1 ) );
+ }
+ });
+ }
+ };
+})(jQuery, window, document);
diff --git a/jquery.sharrre.min.js b/jquery.sharrre.min.js
index 377659a..65740ae 100644
--- a/jquery.sharrre.min.js
+++ b/jquery.sharrre.min.js
@@ -4,4 +4,4 @@
* Author: Julien Hany
* License: MIT http://en.wikipedia.org/wiki/MIT_License or GPLv2 http://en.wikipedia.org/wiki/GNU_General_Public_License
*/
-;(function(g,i,j,b){var h="sharrre",f={className:"sharrre",share:{googlePlus:false,facebook:false,twitter:false,digg:false,delicious:false,stumbleupon:false,linkedin:false,pinterest:false},shareTotal:0,template:"",title:"",url:j.location.href,text:j.title,urlCurl:"sharrre.php",count:{},total:0,shorterTotal:true,enableHover:true,enableCounter:true,enableTracking:false,hover:function(){},hide:function(){},click:function(){},render:function(){},buttons:{googlePlus:{url:"",urlCount:false,size:"medium",lang:"en-US",annotation:""},facebook:{url:"",urlCount:false,action:"like",layout:"button_count",width:"",send:"false",faces:"false",colorscheme:"",font:"",lang:"en_US"},twitter:{url:"",urlCount:false,count:"horizontal",hashtags:"",via:"",related:"",lang:"en"},digg:{url:"",urlCount:false,type:"DiggCompact"},delicious:{url:"",urlCount:false,size:"medium"},stumbleupon:{url:"",urlCount:false,layout:"1"},linkedin:{url:"",urlCount:false,counter:""},pinterest:{url:"",media:"",description:"",layout:"horizontal"}}},c={googlePlus:"",facebook:"https://graph.facebook.com/fql?q=SELECT%20url,%20normalized_url,%20share_count,%20like_count,%20comment_count,%20total_count,commentsbox_count,%20comments_fbid,%20click_count%20FROM%20link_stat%20WHERE%20url=%27{url}%27&callback=?",twitter:"http://cdn.api.twitter.com/1/urls/count.json?url={url}&callback=?",digg:"http://services.digg.com/2.0/story.getInfo?links={url}&type=javascript&callback=?",delicious:"http://feeds.delicious.com/v2/json/urlinfo/data?url={url}&callback=?",stumbleupon:"",linkedin:"http://www.linkedin.com/countserv/count/share?format=jsonp&url={url}&callback=?",pinterest:"http://api.pinterest.com/v1/urls/count.json?url={url}&callback=?"},l={googlePlus:function(m){var n=m.options.buttons.googlePlus;g(m.element).find(".buttons").append('');i.___gcfg={lang:m.options.buttons.googlePlus.lang};var o=0;if(typeof gapi==="undefined"&&o==0){o=1;(function(){var p=j.createElement("script");p.type="text/javascript";p.async=true;p.src="//apis.google.com/js/plusone.js";var q=j.getElementsByTagName("script")[0];q.parentNode.insertBefore(p,q)})()}else{gapi.plusone.go()}},facebook:function(m){var n=m.options.buttons.facebook;g(m.element).find(".buttons").append('');var o=0;if(typeof FB==="undefined"&&o==0){o=1;(function(t,p,u){var r,q=t.getElementsByTagName(p)[0];if(t.getElementById(u)){return}r=t.createElement(p);r.id=u;r.src="//connect.facebook.net/"+n.lang+"/all.js#xfbml=1";q.parentNode.insertBefore(r,q)}(j,"script","facebook-jssdk"))}else{FB.XFBML.parse()}},twitter:function(m){var n=m.options.buttons.twitter;g(m.element).find(".buttons").append('');var o=0;if(typeof twttr==="undefined"&&o==0){o=1;(function(){var q=j.createElement("script");q.type="text/javascript";q.async=true;q.src="//platform.twitter.com/widgets.js";var p=j.getElementsByTagName("script")[0];p.parentNode.insertBefore(q,p)})()}else{g.ajax({url:"//platform.twitter.com/widgets.js",dataType:"script",cache:true})}},digg:function(m){var n=m.options.buttons.digg;g(m.element).find(".buttons").append('');var o=0;if(typeof __DBW==="undefined"&&o==0){o=1;(function(){var q=j.createElement("SCRIPT"),p=j.getElementsByTagName("SCRIPT")[0];q.type="text/javascript";q.async=true;q.src="//widgets.digg.com/buttons.js";p.parentNode.insertBefore(q,p)})()}},delicious:function(o){if(o.options.buttons.delicious.size=="tall"){var p="width:50px;",n="height:35px;width:50px;font-size:15px;line-height:35px;",m="height:18px;line-height:18px;margin-top:3px;"}else{var p="width:93px;",n="float:right;padding:0 3px;height:20px;width:26px;line-height:20px;",m="float:left;height:20px;line-height:20px;"}var q=o.shorterTotal(o.options.count.delicious);if(typeof q==="undefined"){q=0}g(o.element).find(".buttons").append('');g(o.element).find(".delicious").on("click",function(){o.openPopup("delicious")})},stumbleupon:function(m){var n=m.options.buttons.stumbleupon;g(m.element).find(".buttons").append('
');var o=0;if(typeof STMBLPN==="undefined"&&o==0){o=1;(function(){var p=j.createElement("script");p.type="text/javascript";p.async=true;p.src="//platform.stumbleupon.com/1/widgets.js";var q=j.getElementsByTagName("script")[0];q.parentNode.insertBefore(p,q)})();s=i.setTimeout(function(){if(typeof STMBLPN!=="undefined"){STMBLPN.processWidgets();clearInterval(s)}},500)}else{STMBLPN.processWidgets()}},linkedin:function(m){var n=m.options.buttons.linkedin;g(m.element).find(".buttons").append('');var m=0;if(typeof g.IN==="undefined"&&m==0){m=1;(function(){var p=d.createElement("script");p.type="text/javascript";p.async=true;p.src="//platform.linkedin.com/in.js";var q=d.getElementsByTagName("script")[0];q.parentNode.insertBefore(p,q)})()}else{g.IN.init()}},pinterest:function(m){var n=m.options.buttons.pinterest;f(m.element).find(".buttons").append('');(function(){var o=d.createElement("script");o.type="text/javascript";o.async=true;o.src="//assets.pinterest.com/js/pinit.js";var p=d.getElementsByTagName("script")[0];p.parentNode.insertBefore(o,p)})()}},j={googlePlus:function(){},facebook:function(){fb=g.setInterval(function(){if(typeof FB!=="undefined"){FB.Event.subscribe("edge.create",function(m){ga("send","social","facebook","like",m)});FB.Event.subscribe("edge.remove",function(m){ga("send","social","facebook","unlike",m)});FB.Event.subscribe("message.send",function(m){ga("send","social","facebook","like",m)});clearInterval(fb)}},1000)},twitter:function(){tw=g.setInterval(function(){if(typeof twttr!=="undefined"){twttr.events.bind("tweet",function(m){if(m){ga("send","social","twitter","tweet")}});clearInterval(tw)}},1000)},digg:function(){},delicious:function(){},stumbleupon:function(){},linkedin:function(){function m(){ga("send","social","linkedin","share")}},pinterest:function(){}},b={googlePlus:function(m){g.open("https://plus.google.com/share?hl="+m.buttons.googlePlus.lang+"&url="+encodeURIComponent((m.buttons.googlePlus.url!==""?m.buttons.googlePlus.url:m.url)),"","toolbar=0, status=0, width=900, height=500")},facebook:function(m){g.open("http://www.facebook.com/sharer/sharer.php?u="+encodeURIComponent((m.buttons.facebook.url!==""?m.buttons.facebook.url:m.url))+"&t="+m.text+"","","toolbar=0, status=0, width=900, height=500")},twitter:function(m){g.open("https://twitter.com/intent/tweet?text="+encodeURIComponent(m.text)+"&url="+encodeURIComponent((m.buttons.twitter.url!==""?m.buttons.twitter.url:m.url))+(m.buttons.twitter.via!==""?"&via="+m.buttons.twitter.via:"")+(m.buttons.twitter.hashtags!==""?"&hashtags="+encodeURIComponent(m.buttons.twitter.hashtags):""),"","toolbar=0, status=0, width=650, height=360")},digg:function(m){g.open("http://digg.com/tools/diggthis/submit?url="+encodeURIComponent((m.buttons.digg.url!==""?m.buttons.digg.url:m.url))+"&title="+m.text+"&related=true&style=true","","toolbar=0, status=0, width=650, height=360")},delicious:function(m){g.open("http://www.delicious.com/save?v=5&noui&jump=close&url="+encodeURIComponent((m.buttons.delicious.url!==""?m.buttons.delicious.url:m.url))+"&title="+m.text,"delicious","toolbar=no,width=550,height=550")},stumbleupon:function(m){g.open("http://www.stumbleupon.com/badge/?url="+encodeURIComponent((m.buttons.delicious.url!==""?m.buttons.delicious.url:m.url)),"stumbleupon","toolbar=no,width=550,height=550")},linkedin:function(m){g.open("https://www.linkedin.com/cws/share?url="+encodeURIComponent((m.buttons.delicious.url!==""?m.buttons.delicious.url:m.url))+"&token=&isFramed=true","linkedin","toolbar=no,width=550,height=550")},pinterest:function(m){g.open("http://pinterest.com/pin/create/button/?url="+encodeURIComponent((m.buttons.pinterest.url!==""?m.buttons.pinterest.url:m.url))+"&media="+encodeURIComponent(m.buttons.pinterest.media)+"&description="+m.buttons.pinterest.description,"pinterest","toolbar=no,width=700,height=300")}};function i(m,n){this.element=m;this.options=f.extend(true,{},l,n);this.options.share=n.share;this._defaults=l;this._name=c;this.init()}i.prototype.init=function(){var m=this;if(this.options.urlCurl!==""){h.googlePlus=this.options.urlCurl+"?url={url}&type=googlePlus";h.stumbleupon=this.options.urlCurl+"?url={url}&type=stumbleupon"}f(this.element).addClass(this.options.className);if(typeof f(this.element).data("title")!=="undefined"){this.options.title=f(this.element).attr("data-title")}if(typeof f(this.element).data("url")!=="undefined"){this.options.url=f(this.element).data("url")}if(typeof f(this.element).data("text")!=="undefined"){this.options.text=f(this.element).data("text")}f.each(this.options.share,function(o,n){if(n===true){m.options.shareTotal++}});if(m.options.enableCounter===true){f.each(this.options.share,function(p,o){if(o===true){try{m.getSocialJson(p)}catch(n){}}})}else{if(m.options.template!==""){this.options.render(this,this.options)}else{this.loadButtons()}}f(this.element).hover(function(){if(f(this).find(".buttons").length===0&&m.options.enableHover===true){m.loadButtons()}m.options.hover(m,m.options)},function(){m.options.hide(m,m.options)});f(this.element).click(function(){m.options.click(m,m.options);return false})};i.prototype.loadButtons=function(){var m=this;f(this.element).append('');f.each(m.options.share,function(o,n){if(n==true){k[o](m);if(m.options.enableTracking===true){j[o]()}}})};i.prototype.getSocialJson=function(p){var o=this,n=0,m=h[p].replace("{url}",encodeURIComponent(this.options.url));if(this.options.buttons[p].urlCount===true&&this.options.buttons[p].url!==""){m=h[p].replace("{url}",this.options.buttons[p].url)}if(m!=""&&o.options.urlCurl!==""){f.getJSON(m,function(q){if(typeof q.count!=="undefined"){var r=q.count+"";r=r.replace("\u00c2\u00a0","");n+=parseInt(r,10)}else{if(q.data&&q.data.length>0&&typeof q.data[0].total_count!=="undefined"){n+=parseInt(q.data[0].total_count,10)}else{if(typeof q[0]!=="undefined"){n+=parseInt(q[0].total_posts,10)}else{if(typeof q[0]!=="undefined"){}}}}o.options.count[p]=n;o.options.total+=n;o.renderer();o.rendererPerso()}).error(function(){o.options.count[p]=0;o.rendererPerso()})}else{o.renderer();o.options.count[p]=0;o.rendererPerso()}};i.prototype.rendererPerso=function(){var m=0;for(e in this.options.count){m++}if(m===this.options.shareTotal){this.options.render(this,this.options)}};i.prototype.renderer=function(){var n=this.options.total,m=this.options.template;if(this.options.shorterTotal===true){n=this.shorterTotal(n)}if(m!==""){m=m.replace("{total}",n);f(this.element).html(m)}else{f(this.element).html('")}};i.prototype.shorterTotal=function(m){if(m>=1000000){m=(m/1000000).toFixed(2)+"M"}else{if(m>=1000){m=(m/1000).toFixed(1)+"k"}}return m};i.prototype.openPopup=function(m){b[m](this.options);if(this.options.enableTracking===true){var n={googlePlus:{site:"Google",action:"+1"},facebook:{site:"facebook",action:"like"},twitter:{site:"twitter",action:"tweet"},digg:{site:"digg",action:"add"},delicious:{site:"delicious",action:"add"},stumbleupon:{site:"stumbleupon",action:"add"},linkedin:{site:"linkedin",action:"share"},pinterest:{site:"pinterest",action:"pin"},tumblr:{site:'tumblr',action:'share'},mail:{site:'mail',action:'share'}};ga("send","social",n[m].site,n[m].action)}};i.prototype.simulateClick=function(){var m=f(this.element).html();f(this.element).html(m.replace(this.options.total,this.options.total+1))};i.prototype.update=function(n,m){if(n!==""){this.options.url=n}if(m!==""){this.options.text=m}};f.fn[c]=function(m){var n=arguments;if(m===a||typeof m==="object"){return this.each(function(){if(!f.data(this,"plugin_"+c)){f.data(this,"plugin_"+c,new i(this,m))}})}else{if(typeof m==="string"&&m[0]!=="_"&&m!=="init"){return this.each(function(){var o=f.data(this,"plugin_"+c);if(o instanceof i&&typeof o[m]==="function"){o[m].apply(o,Array.prototype.slice.call(n,1))}})}}}})(jQuery,window,document);
diff --git a/sharrre.php b/sharrre.php
index 867024e..f2f5943 100644
--- a/sharrre.php
+++ b/sharrre.php
@@ -1,62 +1,49 @@
'','count'=>0);
- $json['url'] = $_GET['url'];
- $url = urlencode($_GET['url']);
- $type = urlencode($_GET['type']);
-
- if(filter_var($_GET['url'], FILTER_VALIDATE_URL)){
- if($type == 'googlePlus'){ //source http://www.helmutgranda.com/2011/11/01/get-a-url-google-count-via-php/
- $contents = parse('https://plusone.google.com/u/0/_/+1/fastbutton?url=' . $url . '&count=true');
-
- preg_match( '/window\.__SSR = {c: ([\d]+)/', $contents, $matches );
-
- if(isset($matches[0])){
- $json['count'] = (int)str_replace('window.__SSR = {c: ', '', $matches[0]);
- }
- }
- else if($type == 'stumbleupon'){
- $content = parse("http://www.stumbleupon.com/services/1.01/badge.getinfo?url=$url");
-
- $result = json_decode($content);
- if (isset($result->result->views))
- {
- $json['count'] = $result->result->views;
- }
+/* Based on original Sharrre by Julien Hany
+ * by Brando Meniconi (b.meniconi@fuoricentrostudio.com)
+ */
- }
- }
- echo str_replace('\\/','/',json_encode($json));
-
- function parse($encUrl){
- $options = array(
- CURLOPT_RETURNTRANSFER => true, // return web page
- CURLOPT_HEADER => false, // don't return headers
- CURLOPT_FOLLOWLOCATION => true, // follow redirects
- CURLOPT_ENCODING => "", // handle all encodings
- CURLOPT_USERAGENT => 'sharrre', // who am i
- CURLOPT_AUTOREFERER => true, // set referer on redirect
- CURLOPT_CONNECTTIMEOUT => 5, // timeout on connect
- CURLOPT_TIMEOUT => 10, // timeout on response
- CURLOPT_MAXREDIRS => 3, // stop after 10 redirects
- CURLOPT_SSL_VERIFYHOST => 0,
- CURLOPT_SSL_VERIFYPEER => false,
+header('content-type: application/json');
+
+$json = array(
+ 'url'=>filter_input(INPUT_GET, 'url', FILTER_VALIDATE_URL),
+ 'count'=>0
);
- $ch = curl_init();
-
- $options[CURLOPT_URL] = $encUrl;
- curl_setopt_array($ch, $options);
-
- $content = curl_exec($ch);
- $err = curl_errno($ch);
- $errmsg = curl_error($ch);
-
- curl_close($ch);
-
- if ($errmsg != '' || $err != '') {
- /*print_r($errmsg);
- print_r($errmsg);*/
+
+if(empty($json['url'])){
+ return json_encode($json);
+}
+
+$context = stream_context_create(array(
+ 'http'=>array(
+ //'proxy' => 'tcp://proxy.example.com:5100', //
+ 'max_redirects' => 5,
+ 'user_agent' => 'Sharrre',
+ 'timeout' => 5,
+ 'verify_peer' => false,
+ )
+));
+
+
+switch(filter_input(INPUT_GET, 'type')){
+ case 'googlePlus':
+ $response = file_get_contents('https://plusone.google.com/u/0/_/+1/fastbutton?url=' . urlencode($json['url']) . '&count=true', false, $context);
+
+ $matches = array();
+ if(!empty($response) && preg_match( '/window\.__SSR = {c: ([\d]+)/', $response, $matches )){
+ $json['count'] = $matches[1];
+ }
+ break;
+
+ case 'stumbleupon':
+ $response = file_get_contents("http://www.stumbleupon.com/services/1.01/badge.getinfo?url=".urlencode($json['url']), false, $context);
+
+ if (!empty($response) && ($result = json_decode($response)) && isset($result->result->views))
+ {
+ $json['count'] = (int)$result->result->views;
}
- return $content;
- }
+
+ break;
+ }
+
+ echo json_encode($json);
\ No newline at end of file