balmet.com

Unnamed repository; edit this file 'description' to name the repository.
Log | Files | Refs

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 );