/* * angular-socialshare * 2.3.11 * * A social media url and content share module for angularjs. * http://720kb.github.io/angular-socialshare * * MIT license * Fri Jun 23 2017 */ /*global angular*/ /*eslint no-loop-func:0, func-names:0*/ (function withAngular(angular) { 'use strict'; var directiveName = 'socialshare' , serviceName = 'Socialshare' , socialshareProviderNames = ['facebook', 'facebook-messenger','sms', 'twitter', 'linkedin', 'google', 'pinterest', 'tumblr', 'reddit', 'stumbleupon', 'buffer', 'digg', 'delicious', 'vk', 'pocket', 'wordpress', 'flipboard', 'xing', 'hackernews', 'evernote', 'whatsapp', 'telegram', 'viber', 'skype', 'email', 'ok', 'weibo'] , socialshareConfigurationProvider = /*@ngInject*/ function socialshareConfigurationProvider() { var socialshareConfigurationDefault = [{ 'provider': 'email', 'conf': { 'subject': '', 'body': '', 'to': '', 'cc': '', 'bcc': '', 'trigger': 'click' } }, { 'provider': 'facebook', 'conf': { 'url':'', 'title':'', 'href':'', 'quote':'', 'hashtags':'', 'text': '', 'media': '', 'mobile_iframe': '', 'type': '', 'via': '', 'to': '', 'from': '', 'ref': '', 'display': '', 'source': '', 'caption': '', 'redirectUri': '', 'trigger': 'click', 'popupHeight': 600, 'popupWidth': 500 } }, { 'provider': 'facebook-messenger', 'conf': { 'url': '' } }, { 'provider': 'twitter', 'conf': { 'url': '', 'text': '', 'via': '', 'hashtags': '', 'trigger': 'click', 'popupHeight': 600, 'popupWidth': 500 } }, { 'provider': 'linkedin', 'conf': { 'url': '', 'text': '', 'description': '', 'source': '', 'trigger': 'click', 'popupHeight': 600, 'popupWidth': 500 } }, { 'provider': 'reddit', 'conf': { 'url': '', 'text': '', 'subreddit': '', 'trigger': 'click', 'popupHeight': 600, 'popupWidth': 500 } }, { 'provider': 'vk', 'conf': { 'url': '', 'text': '', 'media': '', 'trigger': 'click', 'popupHeight': 600, 'popupWidth': 500 } }, { 'provider': 'ok', 'conf': { 'url': '', 'text': '', 'trigger': 'click', 'popupHeight': 600, 'popupWidth': 500 } }, { 'provider': 'digg', 'conf': { 'url': '', 'text': '', 'media': '', 'trigger': 'click', 'popupHeight': 600, 'popupWidth': 500 } }, { 'provider': 'delicious', 'conf': { 'url': '', 'text': '', 'media': '', 'trigger': 'click', 'popupHeight': 600, 'popupWidth': 500 } }, { 'provider': 'stumbleupon', 'conf': { 'url': '', 'text': '', 'media': '', 'trigger': 'click', 'popupHeight': 600, 'popupWidth': 500 } }, { 'provider': 'pinterest', 'conf': { 'url': '', 'text': '', 'media': '', 'trigger': 'click', 'popupHeight': 600, 'popupWidth': 500 } }, { 'provider': 'google', 'conf': { 'url': '', 'text': '', 'media': '', 'trigger': 'click', 'popupHeight': 600, 'popupWidth': 500 } }, { 'provider': 'tumblr', 'conf': { 'url': '', 'text': '', 'media': '', 'trigger': 'click', 'popupHeight': 600, 'popupWidth': 500 } }, { 'provider': 'buffer', 'conf': { 'url': '', 'text': '', 'via': '', 'media': '', 'trigger': 'click', 'popupHeight': 600, 'popupWidth': 500 } }, { 'provider': 'pocket', 'conf': { 'url': '', 'text': '', 'trigger': 'click', 'popupHeight': 600, 'popupWidth': 500 } }, { 'provider': 'flipboard', 'conf': { 'url': '', 'text': '', 'trigger': 'click', 'popupHeight': 600, 'popupWidth': 500 } }, { 'provider': 'hackernews', 'conf': { 'url': '', 'text': '', 'trigger': 'click', 'popupHeight': 600, 'popupWidth': 500 } }, { 'provider': 'wordpress', 'conf': { 'url': '', 'text': '', 'media': '', 'trigger': 'click', 'popupHeight': 600, 'popupWidth': 500 } }, { 'provider': 'xing', 'conf': { 'url': '', 'text': '', 'media': '', 'follow' : '', 'trigger': 'click', 'popupHeight': 600, 'popupWidth': 500 } }, { 'provider': 'evernote', 'conf': { 'url': '', 'text': '', 'trigger': 'click', 'popupHeight': 600, 'popupWidth': 500 } }, { 'provider': 'whatsapp', 'conf': { 'url': '', 'text': '' } }, { 'provider': 'sms', 'conf': { 'url': '', 'text': '', 'to': '', 'trigger': 'click' } }, { 'provider': 'telegram', 'conf': { 'url': '', 'text': '', 'trigger': 'click', 'popupHeight': 600, 'popupWidth': 500 } }, { 'provider': 'viber', 'conf': { 'url': '', 'text': '' } }, { 'provider': 'skype', 'conf': { 'url': '', 'text': '', 'trigger': 'click', 'popupHeight': 600, 'popupWidth': 500 } }, { 'provider': 'weibo', 'conf': { 'url': '', 'text': '', 'trigger': 'click', 'popupHeight': 600, 'popupWidth': 500 } }]; return { 'configure': function configure(configuration) { var configIndex = 0 , configurationKeys , configurationIndex , aConfigurationKey , configElement , internIndex = 0 //this is necessary becuase provider run before any service //so i have to take the log from another injector , $log = angular.injector(['ng']).get('$log'); if (configuration && configuration.length > 0) { for (; configIndex < configuration.length; configIndex += 1) { if (configuration[configIndex].provider && socialshareProviderNames.indexOf(configuration[configIndex].provider) > -1) { for (; internIndex < socialshareConfigurationDefault.length; internIndex += 1) { configElement = socialshareConfigurationDefault[internIndex]; if (configElement && configElement.provider && configuration[configIndex].provider === configElement.provider) { configurationKeys = Object.keys(configElement.conf); configurationIndex = 0; for (; configurationIndex < configurationKeys.length; configurationIndex += 1) { aConfigurationKey = configurationKeys[configurationIndex]; if (aConfigurationKey && configuration[configIndex].conf[aConfigurationKey]) { configElement.conf[aConfigurationKey] = configuration[configIndex].conf[aConfigurationKey]; } } // once the provider has been found and configuration applied // we should reset the internIndex for the next provider match to work correctly // and break, to skip loops on unwanted next providers internIndex = 0; break; } } } else { $log.warn('Invalid provider at element ' + configIndex + ' with name:' + configuration[configIndex].provider); } } } } , '$get': /*@ngInject*/ function instantiateProvider() { return socialshareConfigurationDefault; } }; } , manageFacebookShare = function manageFacebookShare($window, attrs) { var urlString; if (attrs.socialshareType && attrs.socialshareType === 'feed') { // if user specifies that they want to use the Facebook feed dialog //(https://developers.facebook.com/docs/sharing/reference/feed-dialog/v2.4) urlString = 'https://www.facebook.com/dialog/feed?'; if (attrs.socialshareVia) { urlString += '&app_id=' + encodeURIComponent(attrs.socialshareVia); } if (attrs.socialshareRedirectUri) { urlString += '&redirect_uri=' + encodeURIComponent(attrs.socialshareRedirectUri); } if (attrs.socialshareUrl) { urlString += '&link=' + encodeURIComponent(attrs.socialshareUrl); } if (attrs.socialshareTo) { urlString += '&to=' + encodeURIComponent(attrs.socialshareTo); } if (attrs.socialshareDisplay) { urlString += '&display=' + encodeURIComponent(attrs.socialshareDisplay); } if (attrs.socialshareRef) { urlString += '&ref=' + encodeURIComponent(attrs.socialshareRef); } if (attrs.socialshareFrom) { urlString += '&from=' + encodeURIComponent(attrs.socialshareFrom); } if (attrs.socialshareSource) { urlString += '&source=' + encodeURIComponent(attrs.socialshareSource); } $window.open( urlString, 'Facebook', 'toolbar=0,status=0,resizable=yes,width=' + attrs.socialsharePopupWidth + ',height=' + attrs.socialsharePopupHeight + ',top=' + ($window.innerHeight - attrs.socialsharePopupHeight) / 2 + ',left=' + ($window.innerWidth - attrs.socialsharePopupWidth) / 2); } else if (attrs.socialshareType && attrs.socialshareType === 'share') { // if user specifies that they want to use the Facebook share dialog //(https://developers.facebook.com/docs/sharing/reference/share-dialog) urlString = 'https://www.facebook.com/dialog/share?'; if (attrs.socialshareVia) { urlString += '&app_id=' + encodeURIComponent(attrs.socialshareVia); } if (attrs.socialshareRedirectUri) { urlString += '&redirect_uri=' + encodeURIComponent(attrs.socialshareRedirectUri); } if (attrs.socialshareUrl) { urlString += '&href=' + encodeURIComponent(attrs.socialshareUrl); } if (attrs.socialshareQuote) { urlString += '"e=' + encodeURIComponent(attrs.socialshareQuote); } if (attrs.socialshareDisplay) { urlString += '&display=' + encodeURIComponent(attrs.socialshareDisplay); } if (attrs.socialshareMobileiframe) { urlString += '&mobile_iframe=' + encodeURIComponent(attrs.socialshareMobileiframe); } if (attrs.socialshareHashtags) { urlString += '&hashtag=' + encodeURIComponent(attrs.socialshareHashtags); } $window.open( urlString, 'Facebook', 'toolbar=0,status=0,resizable=yes,width=' + attrs.socialsharePopupWidth + ',height=' + attrs.socialsharePopupHeight + ',top=' + ($window.innerHeight - attrs.socialsharePopupHeight) / 2 + ',left=' + ($window.innerWidth - attrs.socialsharePopupWidth) / 2); } else if (attrs.socialshareType && attrs.socialshareType === 'send') { // if user specifies that they want to use the Facebook send dialog //(https://developers.facebook.com/docs/sharing/reference/send-dialog) urlString = 'https://www.facebook.com/dialog/send?'; if (attrs.socialshareVia) { urlString += '&app_id=' + encodeURIComponent(attrs.socialshareVia); } if (attrs.socialshareRedirectUri) { urlString += '&redirect_uri=' + encodeURIComponent(attrs.socialshareRedirectUri); } if (attrs.socialshareUrl) { urlString += '&link=' + encodeURIComponent(attrs.socialshareUrl); } if (attrs.socialshareTo) { urlString += '&to=' + encodeURIComponent(attrs.socialshareTo); } if (attrs.socialshareDisplay) { urlString += '&display=' + encodeURIComponent(attrs.socialshareDisplay); } $window.open( urlString, 'Facebook', 'toolbar=0,status=0,resizable=yes,width=' + attrs.socialsharePopupWidth + ',height=' + attrs.socialsharePopupHeight + ',top=' + ($window.innerHeight - attrs.socialsharePopupHeight) / 2 + ',left=' + ($window.innerWidth - attrs.socialsharePopupWidth) / 2); } else { //otherwise default to using sharer.php $window.open( 'https://www.facebook.com/sharer/sharer.php?u=' + encodeURIComponent(attrs.socialshareUrl || $window.location.href) , 'Facebook', 'toolbar=0,status=0,resizable=yes,width=' + attrs.socialsharePopupWidth + ',height=' + attrs.socialsharePopupHeight + ',top=' + ($window.innerHeight - attrs.socialsharePopupHeight) / 2 + ',left=' + ($window.innerWidth - attrs.socialsharePopupWidth) / 2); } } , manageEmailShare = function manageEmailShare($window, attrs) { var urlString = 'mailto:'; if (attrs.socialshareTo) { urlString += encodeURIComponent(attrs.socialshareTo); } urlString += '?'; if (attrs.socialshareBody) { urlString += 'body=' + encodeURIComponent(attrs.socialshareBody); } if (attrs.socialshareSubject) { urlString += '&subject=' + encodeURIComponent(attrs.socialshareSubject); } if (attrs.socialshareCc) { urlString += '&cc=' + encodeURIComponent(attrs.socialshareCc); } if (attrs.socialshareBcc) { urlString += '&bcc=' + encodeURIComponent(attrs.socialshareBcc); } if ($window.self !== $window.top) { $window.open(urlString, '_blank'); } else { $window.open(urlString, '_self'); } } , facebookMessengerShare = function facebookMessengerShare($window, attrs, element) { var href = 'fb-messenger://share?link=' + encodeURIComponent(attrs.socialshareUrl || $window.location.href); element.attr('href', href); element.attr('target', '_top'); } , manageTwitterShare = function manageTwitterShare($window, attrs) { var urlString = 'https://www.twitter.com/intent/tweet?'; if (attrs.socialshareText) { urlString += 'text=' + encodeURIComponent(attrs.socialshareText); } if (attrs.socialshareVia) { urlString += '&via=' + encodeURIComponent(attrs.socialshareVia); } if (attrs.socialshareHashtags) { urlString += '&hashtags=' + encodeURIComponent(attrs.socialshareHashtags); } //default to the current page if a URL isn't specified urlString += '&url=' + encodeURIComponent(attrs.socialshareUrl || $window.location.href); $window.open( urlString, 'Twitter', 'toolbar=0,status=0,resizable=yes,width=' + attrs.socialsharePopupWidth + ',height=' + attrs.socialsharePopupHeight + ',top=' + ($window.innerHeight - attrs.socialsharePopupHeight) / 2 + ',left=' + ($window.innerWidth - attrs.socialsharePopupWidth) / 2); } , manageGooglePlusShare = function manageGooglePlusShare($window, attrs) { $window.open( 'https://plus.google.com/share?url=' + encodeURIComponent(attrs.socialshareUrl || $window.location.href) , 'Google+', 'toolbar=0,status=0,resizable=yes,width=' + attrs.socialsharePopupWidth + ',height=' + attrs.socialsharePopupHeight + ',top=' + ($window.innerHeight - attrs.socialsharePopupHeight) / 2 + ',left=' + ($window.innerWidth - attrs.socialsharePopupWidth) / 2); } , manageRedditShare = function manageRedditShare($window, attrs) { var urlString = 'https://www.reddit.com/'; if (attrs.socialshareSubreddit) { urlString += 'r/' + attrs.socialshareSubreddit + '/submit?url='; } else { urlString += 'submit?url='; } /*- * Reddit isn't responsive and at default width for our popups (500 x 500), everything is messed up. * So, overriding the width if it is less than 900 (played around to settle on this) and height if * it is less than 650px. */ if (attrs.socialsharePopupWidth < 900) { attrs.socialsharePopupWidth = 900; } if (attrs.socialsharePopupHeight < 650) { attrs.socialsharePopupHeight = 650; } $window.open( urlString + encodeURIComponent(attrs.socialshareUrl || $window.location.href) + '&title=' + encodeURIComponent(attrs.socialshareText) , 'Reddit', 'toolbar=0,status=0,resizable=yes,width=' + attrs.socialsharePopupWidth + ',height=' + attrs.socialsharePopupHeight + ',top=' + ($window.innerHeight - attrs.socialsharePopupHeight) / 2 + ',left=' + ($window.innerWidth - attrs.socialsharePopupWidth) / 2); } , manageStumbleuponShare = function manageStumbleuponShare($window, attrs) { $window.open( 'https://www.stumbleupon.com/submit?url=' + encodeURIComponent(attrs.socialshareUrl || $window.location.href) + '&title=' + encodeURIComponent(attrs.socialshareText) , 'StumbleUpon', 'toolbar=0,status=0,resizable=yes,width=' + attrs.socialsharePopupWidth + ',height=' + attrs.socialsharePopupHeight + ',top=' + ($window.innerHeight - attrs.socialsharePopupHeight) / 2 + ',left=' + ($window.innerWidth - attrs.socialsharePopupWidth) / 2); } , manageLinkedinShare = function manageLinkedinShare($window, attrs) { /* * Refer: https://developer.linkedin.com/docs/share-on-linkedin * Tab: Customized URL */ var urlString = 'https://www.linkedin.com/shareArticle?mini=true'; urlString += '&url=' + encodeURIComponent(attrs.socialshareUrl || $window.location.href); if (attrs.socialshareText) { urlString += '&title=' + encodeURIComponent(attrs.socialshareText); } if (attrs.socialshareDescription) { urlString += '&summary=' + encodeURIComponent(attrs.socialshareDescription); } if (attrs.socialshareSource) { urlString += '&source=' + encodeURIComponent(attrs.socialshareSource); } $window.open( urlString, 'Linkedin', 'toolbar=0,status=0,resizable=yes,width=' + attrs.socialsharePopupWidth + ',height=' + attrs.socialsharePopupHeight + ',top=' + ($window.innerHeight - attrs.socialsharePopupHeight) / 2 + ',left=' + ($window.innerWidth - attrs.socialsharePopupWidth) / 2); } , managePinterestShare = function managePinterestShare($window, attrs) { $window.open( 'https://www.pinterest.com/pin/create/button/?url=' + encodeURIComponent(attrs.socialshareUrl || $window.location.href) + '&media=' + encodeURIComponent(attrs.socialshareMedia) + '&description=' + encodeURIComponent(attrs.socialshareText) , 'Pinterest', 'toolbar=0,status=0,resizable=yes,width=' + attrs.socialsharePopupWidth + ',height=' + attrs.socialsharePopupHeight + ',top=' + ($window.innerHeight - attrs.socialsharePopupHeight) / 2 + ',left=' + ($window.innerWidth - attrs.socialsharePopupWidth) / 2); } , manageDiggShare = function manageDiggShare($window, attrs) { $window.open( 'https://www.digg.com/submit?url=' + encodeURIComponent(attrs.socialshareUrl || $window.location.href) + '&title=' + encodeURIComponent(attrs.socialshareText) , 'Digg', 'toolbar=0,status=0,resizable=yes,width=' + attrs.socialsharePopupWidth + ',height=' + attrs.socialsharePopupHeight + ',top=' + ($window.innerHeight - attrs.socialsharePopupHeight) / 2 + ',left=' + ($window.innerWidth - attrs.socialsharePopupWidth) / 2); } , manageTumblrShare = function manageTumblrShare($window, attrs) { if (attrs.socialshareMedia) { var urlString = 'https://www.tumblr.com/share/photo?source=' + encodeURIComponent(attrs.socialshareMedia); if (attrs.socialshareText) { urlString += '&caption=' + encodeURIComponent(attrs.socialshareText); } $window.open( urlString, 'Tumblr', 'toolbar=0,status=0,resizable=yes,width=' + attrs.socialsharePopupWidth + ',height=' + attrs.socialsharePopupHeight + ',top=' + ($window.innerHeight - attrs.socialsharePopupHeight) / 2 + ',left=' + ($window.innerWidth - attrs.socialsharePopupWidth) / 2); } else { $window.open( 'https://www.tumblr.com/share/link?url=' + encodeURIComponent(attrs.socialshareUrl || $window.location.href) + '&description=' + encodeURIComponent(attrs.socialshareText) , 'Tumblr', 'toolbar=0,status=0,resizable=yes,width=' + attrs.socialsharePopupWidth + ',height=' + attrs.socialsharePopupHeight + ',top=' + ($window.innerHeight - attrs.socialsharePopupHeight) / 2 + ',left=' + ($window.innerWidth - attrs.socialsharePopupWidth) / 2); } } , manageVkShare = function manageVkShare($window, attrs) { var urlString = 'https://www.vk.com/share.php?url=' + encodeURIComponent(attrs.socialshareUrl || $window.location.href); if (attrs.socialshareText) { urlString += '&title=' + encodeURIComponent(attrs.socialshareText); } if (attrs.socialshareMedia) { urlString += '&image=' + encodeURIComponent(attrs.socialshareMedia); } if (attrs.socialshareDescription) { urlString += '&description=' + encodeURIComponent(attrs.socialshareDescription); } $window.open( urlString , 'Vk', 'toolbar=0,status=0,resizable=yes,width=' + attrs.socialsharePopupWidth + ',height=' + attrs.socialsharePopupHeight + ',top=' + ($window.innerHeight - attrs.socialsharePopupHeight) / 2 + ',left=' + ($window.innerWidth - attrs.socialsharePopupWidth) / 2); } , manageOkShare = function manageOkShare($window, attrs) { $window.open( 'http://www.odnoklassniki.ru/dk?st.cmd=addShare&st.s=1&st._surl=' + encodeURIComponent(attrs.socialshareUrl || $window.location.href) + '&st.comments=' + encodeURIComponent(attrs.socialshareText) , 'Ok', 'toolbar=0,status=0,resizable=yes,width=' + attrs.socialsharePopupWidth + ',height=' + attrs.socialsharePopupHeight + ',top=' + ($window.innerHeight - attrs.socialsharePopupHeight) / 2 + ',left=' + ($window.innerWidth - attrs.socialsharePopupWidth) / 2); } , manageDeliciousShare = function manageDeliciousShare($window, attrs) { $window.open( 'https://www.delicious.com/save?v=5&noui&jump=close&url=' + encodeURIComponent(attrs.socialshareUrl || $window.location.href) + '&title=' + encodeURIComponent(attrs.socialshareText) , 'Delicious', 'toolbar=0,status=0,resizable=yes,width=' + attrs.socialsharePopupWidth + ',height=' + attrs.socialsharePopupHeight + ',top=' + ($window.innerHeight - attrs.socialsharePopupHeight) / 2 + ',left=' + ($window.innerWidth - attrs.socialsharePopupWidth) / 2); } , manageBufferShare = function manageBufferShare($window, attrs) { var urlString = 'https://bufferapp.com/add?'; if (attrs.socialshareText) { urlString += 'text=' + encodeURIComponent(attrs.socialshareText); } if (attrs.socialshareVia) { urlString += '&via=' + encodeURIComponent(attrs.socialshareVia); } if (attrs.socialshareMedia) { urlString += '&picture=' + encodeURIComponent(attrs.socialshareMedia); } //default to the current page if a URL isn't specified urlString += '&url=' + encodeURIComponent(attrs.socialshareUrl || $window.location.href); $window.open( urlString, 'Buffer', 'toolbar=0,status=0,resizable=yes,width=' + attrs.socialsharePopupWidth + ',height=' + attrs.socialsharePopupHeight + ',top=' + ($window.innerHeight - attrs.socialsharePopupHeight) / 2 + ',left=' + ($window.innerWidth - attrs.socialsharePopupWidth) / 2); } , manageHackernewsShare = function manageHackernewsShare($window, attrs) { var urlString = 'https://news.ycombinator.com/submitlink?'; if (attrs.socialshareText) { urlString += 't=' + encodeURIComponent(attrs.socialshareText) + '&'; } //default to the current page if a URL isn't specified urlString += 'u=' + encodeURIComponent(attrs.socialshareUrl || $window.location.href); $window.open( urlString, 'Hackernews', 'toolbar=0,status=0,resizable=yes,width=' + attrs.socialsharePopupWidth + ',height=' + attrs.socialsharePopupHeight + ',top=' + ($window.innerHeight - attrs.socialsharePopupHeight) / 2 + ',left=' + ($window.innerWidth - attrs.socialsharePopupWidth) / 2); } , manageFlipboardShare = function manageFlipboardShare($window, attrs) { var urlString = 'https://share.flipboard.com/bookmarklet/popout?v=2&'; if (attrs.socialshareText) { urlString += 'title=' + encodeURIComponent(attrs.socialshareText) + '&'; } //default to the current page if a URL isn't specified urlString += 'url=' + encodeURIComponent(attrs.socialshareUrl || $window.location.href); $window.open( urlString, 'Flipboard', 'toolbar=0,status=0,resizable=yes,width=' + attrs.socialsharePopupWidth + ',height=' + attrs.socialsharePopupHeight + ',top=' + ($window.innerHeight - attrs.socialsharePopupHeight) / 2 + ',left=' + ($window.innerWidth - attrs.socialsharePopupWidth) / 2); } , managePocketShare = function managePocketShare($window, attrs) { var urlString = 'https://getpocket.com/save?'; if (attrs.socialshareText) { urlString += 'text=' + encodeURIComponent(attrs.socialshareText) + '&'; } //default to the current page if a URL isn't specified urlString += 'url=' + encodeURIComponent(attrs.socialshareUrl || $window.location.href); $window.open( urlString, 'Pocket', 'toolbar=0,status=0,resizable=yes,width=' + attrs.socialsharePopupWidth + ',height=' + attrs.socialsharePopupHeight + ',top=' + ($window.innerHeight - attrs.socialsharePopupHeight) / 2 + ',left=' + ($window.innerWidth - attrs.socialsharePopupWidth) / 2); } , manageWordpressShare = function manageWordpressShare($window, attrs) { var urlString = 'http://wordpress.com/press-this.php?'; if (attrs.socialshareText) { urlString += 't=' + encodeURIComponent(attrs.socialshareText) + '&'; } if (attrs.socialshareMedia) { urlString += 'i=' + encodeURIComponent(attrs.socialshareMedia) + '&'; } //default to the current page if a URL isn't specified urlString += 'u=' + encodeURIComponent(attrs.socialshareUrl || $window.location.href); $window.open( urlString, 'Wordpress', 'toolbar=0,status=0,resizable=yes,width=' + attrs.socialsharePopupWidth + ',height=' + attrs.socialsharePopupHeight + ',top=' + ($window.innerHeight - attrs.socialsharePopupHeight) / 2 + ',left=' + ($window.innerWidth - attrs.socialsharePopupWidth) / 2); } , manageXingShare = function manageXingShare($window, attrs) { var followUrl = ''; if (attrs.socialshareFollow) { followUrl = '&follow_url=' + encodeURIComponent(attrs.socialshareFollow); } $window.open( 'https://www.xing.com/spi/shares/new?url=' + encodeURIComponent(attrs.socialshareUrl || $window.location.href) + followUrl , 'Xing', 'toolbar=0,status=0,resizable=yes,width=' + attrs.socialsharePopupWidth + ',height=' + attrs.socialsharePopupHeight + ',top=' + ($window.innerHeight - attrs.socialsharePopupHeight) / 2 + ',left=' + ($window.innerWidth - attrs.socialsharePopupWidth) / 2); } , manageEvernoteShare = function manageEvernoteShare($window, attrs) { var urlString = 'http://www.evernote.com/clip.action?url=' + encodeURIComponent(attrs.socialshareUrl || $window.location.href); if (attrs.socialshareText) { urlString += '&title=' + encodeURIComponent(attrs.socialshareText); } $window.open( urlString , 'Evernote', 'toolbar=0,status=0,resizable=yes,width=' + attrs.socialsharePopupWidth + ',height=' + attrs.socialsharePopupHeight + ',top=' + ($window.innerHeight - attrs.socialsharePopupHeight) / 2 + ',left=' + ($window.innerWidth - attrs.socialsharePopupWidth) / 2); } , manageWhatsappShare = function manageWhatsappShare($window, attrs, element) { var href = 'whatsapp://send?text=' + encodeURIComponent(attrs.socialshareText) + '%0A' + encodeURIComponent(attrs.socialshareUrl || $window.location.href); element.attr('href', href); element.attr('target', '_top'); } , manageSmsShare = function smsShare($window, attrs, element) { if (attrs.socialshareText.indexOf('%') >= 0) { $log.warn('sending sms text with "%" sign is not supported'); } var body = encodeURIComponent(attrs.socialshareText.replace('%','')) , toPhoneNumber = attrs.socialshareTo || '' , urlString; if (attrs.socialshareUrl) { body += encodeURIComponent(attrs.socialshareUrl); } urlString = 'sms:' + toPhoneNumber + '?&body=' + body; element.attr('href', urlString); element.attr('target', '_blank'); } , manageViberShare = function manageViberShare($window, attrs, element) { var href = 'viber://forward?text=' + encodeURIComponent(attrs.socialshareText) + encodeURIComponent(attrs.socialshareUrl || $window.location.href); element.attr('href', href); element.attr('target', '_top'); } , manageTelegramShare = function manageTelegramShare($window, attrs) { var urlString = 'https://telegram.me/share/url?url=' + encodeURIComponent(attrs.socialshareUrl || $window.location.href); if (attrs.socialshareText) { urlString += '&text=' + encodeURIComponent(attrs.socialshareText); } $window.open( urlString , 'Telegram', 'toolbar=0,status=0,resizable=yes,width=' + attrs.socialsharePopupWidth + ',height=' + attrs.socialsharePopupHeight + ',top=' + ($window.innerHeight - attrs.socialsharePopupHeight) / 2 + ',left=' + ($window.innerWidth - attrs.socialsharePopupWidth) / 2); } , skypeShare = function skypeShare($window, attrs) { var urlString = 'https://web.skype.com/share?source=button&url=' + encodeURIComponent(attrs.socialshareUrl || $window.location.href); if (attrs.socialshareText) { urlString += '&text=' + encodeURIComponent(attrs.socialshareText); } $window.open( urlString , 'Skype', 'toolbar=0,status=0,resizable=yes,width=' + attrs.socialsharePopupWidth + ',height=' + attrs.socialsharePopupHeight + ',top=' + ($window.innerHeight - attrs.socialsharePopupHeight) / 2 + ',left=' + ($window.innerWidth - attrs.socialsharePopupWidth) / 2); } , weiboShare = function weiboShare($window, attrs) { var urlString = 'http://service.weibo.com/share/share.php?url=' + encodeURIComponent(attrs.socialshareUrl || $window.location.href); if (attrs.socialshareText) { urlString += '&title=' + encodeURIComponent(attrs.socialshareText); } $window.open( urlString , 'Weibo', 'toolbar=0,status=0,resizable=yes,width=' + attrs.socialsharePopupWidth + ',height=' + attrs.socialsharePopupHeight + ',top=' + ($window.innerHeight - attrs.socialsharePopupHeight) / 2 + ',left=' + ($window.innerWidth - attrs.socialsharePopupWidth) / 2); } , socialshareService = /*@ngInject*/ ['$window', '$log', function socialshareService($window, $log) { this.emailShare = manageEmailShare; this.facebookShare = manageFacebookShare; this.twitterShare = manageTwitterShare; //**** Fb Messenger can't open without an element clicked (href) //this.facebookMessengerShare = facebookMessengerShare; this.stumbleuponShare = manageStumbleuponShare; this.pinterestShare = managePinterestShare; this.googleShare = manageGooglePlusShare; this.bufferShare = manageBufferShare; this.hackernewsShare = manageHackernewsShare; this.okShare = manageOkShare; this.deliciousShare = manageDeliciousShare; this.pocketShare = managePocketShare; this.vkShare = manageVkShare; this.flipboardShare = manageFlipboardShare; this.xingShare = manageXingShare; this.diggShare = manageDiggShare; this.linkedinShare = manageLinkedinShare; this.wordpressShare = manageWordpressShare; this.telegramShare = manageTelegramShare; this.redditShare = manageRedditShare; this.evernoteShare = manageEvernoteShare; this.tumblrShare = manageTumblrShare; //**** viber can't share without an element clicked (href) //this.viberShare = manageViberShare; //**** whatsapp can't share without an element clicked (href) //this.whatsappShare = manageWhatsappShare; this.skypeShare = skypeShare; this.smsShare = manageSmsShare; this.weiboShare = weiboShare; this.share = function shareTrigger(serviceShareConf) { switch (serviceShareConf.provider) { case 'email': { this.emailShare($window, serviceShareConf.attrs); break; } case 'sms': { this.smsShare($window, $log, serviceShareConf.attrs); break; } case 'facebook': { this.facebookShare($window, serviceShareConf.attrs); break; } case 'twitter': { this.twitterShare($window, serviceShareConf.attrs); break; } case 'pinterest': { this.pinterestShare($window, serviceShareConf.attrs); break; } case 'ok': { this.okShare($window, serviceShareConf.attrs); break; } case 'vk': { this.vkShare($window, serviceShareConf.attrs); break; } case 'delicious': { this.deliciousShare($window, serviceShareConf.attrs); break; } case 'digg': { this.diggShare($window, serviceShareConf.attrs); break; } case 'google': { this.googleShare($window, serviceShareConf.attrs); break; } case 'reddit': { this.redditShare($window, serviceShareConf.attrs); break; } case 'hackernews': { this.hackernewsShare($window, serviceShareConf.attrs); break; } case 'skype': { this.skypeShare($window, serviceShareConf.attrs); break; } case 'evernote': { this.evernoteShare($window, serviceShareConf.attrs); break; } case 'pocket': { this.pocketShare($window, serviceShareConf.attrs); break; } case 'tumblr': { this.tumblrShare($window, serviceShareConf.attrs); break; } case 'telegram': { this.telegramShare($window, serviceShareConf.attrs); break; } case 'xing': { this.xingShare($window, serviceShareConf.attrs); break; } case 'buffer': { this.bufferShare($window, serviceShareConf.attrs); break; } case 'stumbleupon': { this.stumbleuponShare($window, serviceShareConf.attrs); break; } case 'linkedin': { this.linkedinShare($window, serviceShareConf.attrs); break; } case 'wordpress': { this.wordpressShare($window, serviceShareConf.attrs); break; } case 'flipboard': { this.flipboardShare($window, serviceShareConf.attrs); break; } case 'weibo': { this.weiboShare($window, serviceShareConf.attrs); break; } default: { return; } } }; }] , socialshareDirective = /*@ngInject*/ ['$window', 'socialshareConf', 'Socialshare', '$log', function socialshareDirective($window, socialshareConf, $log) { var linkingFunction = function linkingFunction($scope, element, attrs) { // observe the values in each of the properties so that if they're updated elsewhere, // they are updated in this directive. var configurationElement , index = 0 , onEventTriggered = function onEventTriggered() { /*eslint-disable no-use-before-define*/ if (attrs.socialshareProvider in sharingFunctions) { sharingFunctions[attrs.socialshareProvider]($window, attrs, element); } else { return true; } }; /*eslint-enable no-use-before-define*/ //looking into configuration if there is a config for the current provider for (; index < socialshareConf.length; index += 1) { if (socialshareConf[index].provider === attrs.socialshareProvider) { configurationElement = socialshareConf[index]; break; } } if (socialshareProviderNames.indexOf(configurationElement.provider) === -1) { $log.warn('Invalid Provider Name : ' + attrs.socialshareProvider); } //if some attribute is not define provide a default one attrs.socialshareMobileiframe = attrs.socialshareMobileiframe || configurationElement.conf.mobile_iframe; attrs.socialshareQuote = attrs.socialshareQuote || configurationElement.conf.quote; attrs.socialshareTitle = attrs.socialshareTitle || configurationElement.conf.title; attrs.socialshareUrl = attrs.socialshareUrl || configurationElement.conf.url || configurationElement.conf.href; attrs.socialshareText = attrs.socialshareText || configurationElement.conf.text; attrs.socialshareMedia = attrs.socialshareMedia || configurationElement.conf.media; attrs.socialshareType = attrs.socialshareType || configurationElement.conf.type; attrs.socialshareVia = attrs.socialshareVia || configurationElement.conf.via; attrs.socialshareTo = attrs.socialshareTo || configurationElement.conf.to; attrs.socialshareFrom = attrs.socialshareFrom || configurationElement.conf.from; attrs.socialshareRef = attrs.socialshareRef || configurationElement.conf.ref; attrs.socialshareDislay = attrs.socialshareDislay || configurationElement.conf.display; attrs.socialshareSource = attrs.socialshareSource || configurationElement.conf.source; attrs.socialshareCaption = attrs.socialshareCaption || configurationElement.conf.caption; attrs.socialshareRedirectUri = attrs.socialshareRedirectUri || configurationElement.conf.redirectUri; attrs.socialshareTrigger = attrs.socialshareTrigger || configurationElement.conf.trigger; attrs.socialsharePopupHeight = attrs.socialsharePopupHeight || configurationElement.conf.popupHeight; attrs.socialsharePopupWidth = attrs.socialsharePopupWidth || configurationElement.conf.popupWidth; attrs.socialshareSubreddit = attrs.socialshareSubreddit || configurationElement.conf.subreddit; attrs.socialshareDescription = attrs.socialshareDescription || configurationElement.conf.description; attrs.socialshareFollow = attrs.socialshareFollow || configurationElement.conf.follow; attrs.socialshareHashtags = attrs.socialshareHashtags || configurationElement.conf.hashtags; attrs.socialshareBody = attrs.socialshareBody || configurationElement.conf.body; attrs.socialshareSubject = attrs.socialshareSubject || configurationElement.conf.subject; attrs.socialshareCc = attrs.socialshareCc || configurationElement.conf.cc; attrs.socialshareBcc = attrs.socialshareBcc || configurationElement.conf.bcc; if (attrs.socialshareTrigger) { element.bind(attrs.socialshareTrigger, onEventTriggered); } else { onEventTriggered(); } }; return { 'restrict': 'A', 'link': linkingFunction }; }] , sharingFunctions = { 'email': manageEmailShare , 'facebook': manageFacebookShare , 'facebook-messenger': facebookMessengerShare , 'twitter': manageTwitterShare , 'google': manageGooglePlusShare , 'reddit': manageRedditShare , 'stumbleupon': manageStumbleuponShare , 'linkedin': manageLinkedinShare , 'pinterest': managePinterestShare , 'digg': manageDiggShare , 'tumblr': manageTumblrShare , 'vk': manageVkShare , 'ok': manageOkShare , 'delicious': manageDeliciousShare , 'buffer': manageBufferShare , 'hackernews': manageHackernewsShare , 'flipboard': manageFlipboardShare , 'pocket': managePocketShare , 'wordpress': manageWordpressShare , 'xing': manageXingShare , 'evernote': manageEvernoteShare , 'whatsapp': manageWhatsappShare , 'sms': manageSmsShare , 'telegram': manageTelegramShare , 'viber': manageViberShare , 'skype': skypeShare , 'weibo': weiboShare }; angular.module('720kb.socialshare', []) .provider(directiveName + 'Conf', socialshareConfigurationProvider) .service(serviceName, socialshareService) .directive(directiveName, socialshareDirective); }(angular));