share-link.js (4256B)
1 /** 2 * By Elementor Team 3 */ 4 ( function( $ ) { 5 window.ShareLink = function( element, userSettings ) { 6 var $element, 7 settings = {}; 8 9 var getNetworkNameFromClass = function( className ) { 10 var classNamePrefix = className.substr( 0, settings.classPrefixLength ); 11 12 return classNamePrefix === settings.classPrefix ? className.substr( settings.classPrefixLength ) : null; 13 }; 14 15 var bindShareClick = function( networkName ) { 16 $element.on( 'click', function() { 17 openShareLink( networkName ); 18 } ); 19 }; 20 21 var openShareLink = function( networkName ) { 22 var shareWindowParams = ''; 23 24 if ( settings.width && settings.height ) { 25 var shareWindowLeft = ( screen.width / 2 ) - ( settings.width / 2 ), 26 shareWindowTop = ( screen.height / 2 ) - ( settings.height / 2 ); 27 28 shareWindowParams = 'toolbar=0,status=0,width=' + settings.width + ',height=' + settings.height + ',top=' + shareWindowTop + ',left=' + shareWindowLeft; 29 } 30 31 var link = ShareLink.getNetworkLink( networkName, settings ), 32 isPlainLink = /^https?:\/\//.test( link ), 33 windowName = isPlainLink ? '' : '_self'; 34 35 open( link, windowName, shareWindowParams ); 36 }; 37 38 var run = function() { 39 $.each( element.classList, function() { 40 var networkName = getNetworkNameFromClass( this ); 41 42 if ( networkName ) { 43 bindShareClick( networkName ); 44 45 return false; 46 } 47 } ); 48 }; 49 50 var initSettings = function() { 51 $.extend( settings, ShareLink.defaultSettings, userSettings ); 52 53 [ 'title', 'text' ].forEach( function( propertyName ) { 54 settings[ propertyName ] = settings[ propertyName ].replace( '#', '' ); 55 } ); 56 57 settings.classPrefixLength = settings.classPrefix.length; 58 }; 59 60 var initElements = function() { 61 $element = $( element ); 62 }; 63 64 var init = function() { 65 initSettings(); 66 67 initElements(); 68 69 run(); 70 }; 71 72 init(); 73 }; 74 75 ShareLink.networkTemplates = { 76 twitter: 'https://twitter.com/intent/tweet?text={text}\x20{url}', 77 pinterest: 'https://www.pinterest.com/pin/create/button/?url={url}&media={image}', 78 facebook: 'https://www.facebook.com/sharer.php?u={url}', 79 vk: 'https://vkontakte.ru/share.php?url={url}&title={title}&description={text}&image={image}', 80 linkedin: 'https://www.linkedin.com/shareArticle?mini=true&url={url}&title={title}&summary={text}&source={url}', 81 odnoklassniki: 'https://connect.ok.ru/offer?url={url}&title={title}&imageUrl={image}', 82 tumblr: 'https://tumblr.com/share/link?url={url}', 83 google: 'https://plus.google.com/share?url={url}', 84 digg: 'https://digg.com/submit?url={url}', 85 reddit: 'https://reddit.com/submit?url={url}&title={title}', 86 stumbleupon: 'https://www.stumbleupon.com/submit?url={url}', 87 pocket: 'https://getpocket.com/edit?url={url}', 88 whatsapp: 'https://api.whatsapp.com/send?text=*{title}*%0A{text}%0A{url}', 89 xing: 'https://www.xing.com/app/user?op=share&url={url}', 90 print: 'javascript:print()', 91 email: 'mailto:?subject={title}&body={text}\n{url}', 92 telegram: 'https://telegram.me/share/url?url={url}&text={text}', 93 skype: 'https://web.skype.com/share?url={url}', 94 }; 95 96 ShareLink.defaultSettings = { 97 title: '', 98 text: '', 99 image: '', 100 url: location.href, 101 classPrefix: 's_', 102 width: 640, 103 height: 480, 104 }; 105 106 ShareLink.getNetworkLink = function( networkName, settings ) { 107 var link = ShareLink.networkTemplates[ networkName ].replace( /{([^}]+)}/g, function( fullMatch, pureMatch ) { 108 return settings[ pureMatch ] || ''; 109 } ); 110 111 if ( 'email' === networkName ) { 112 if ( -1 < settings['title'].indexOf( '&' ) || -1 < settings['text'].indexOf( '&' ) ) { 113 var emailSafeSettings = { 114 text: settings['text'].replace( new RegExp('&', 'g'), '%26' ), 115 title: settings['title'].replace( new RegExp('&', 'g'), '%26' ), 116 url: settings['url'], 117 }; 118 119 link = ShareLink.networkTemplates[ networkName ].replace( /{([^}]+)}/g, function( fullMatch, pureMatch ) { 120 return emailSafeSettings[ pureMatch ]; 121 } ); 122 } 123 124 if ( link.indexOf( '?subject=&body') ) { 125 link = link.replace( 'subject=&', '' ); 126 } 127 128 return link; 129 } 130 131 return link; 132 }; 133 134 $.fn.shareLink = function( settings ) { 135 return this.each( function() { 136 $( this ).data( 'shareLink', new ShareLink( this, settings ) ); 137 } ); 138 }; 139 } )( jQuery );