PluginProbe
Elementor Website Builder – more than just a page builder / 3.28.3
Elementor Website Builder – more than just a page builder v3.28.3
4.3.0-beta3 4.3.0-beta2 4.3.0-beta1 4.2.4 4.2.3 4.2.2 4.2.1 4.2.0 4.1.5 4.2.0-beta2 4.2.0-dev2 4.2.0-beta1 4.1.4 4.1.3 4.1.2 4.1.1 4.1.0 4.1.0-beta3 4.1.0-dev3 4.0.9 4.1.0-beta2 4.1.0-dev2 4.0.8 4.1.0-beta1 4.1.0-dev1 All 452 releases
elementor / assets / lib / share-link / share-link.js

share-link.js in Elementor Website Builder – more than just a page builder 3.28.3, at assets/lib/share-link/share-link.js

153 lines 4.6 KB
No matching file
Up and down to move Enter to open Esc to close
Raw Download Zip
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 // Add "Enter" and "Space" event only if the element has role=button attribute.
21 if ( 'button' === $element.attr( 'role' ) ) {
22 $element.on( 'keyup', ( event ) => {
23 if ( 13 === event.keyCode || 32 === event.keyCode ) {
24 event.preventDefault();
25
26 openShareLink( networkName );
27 }
28 } );
29 }
30 };
31
32 var openShareLink = function( networkName ) {
33 var shareWindowParams = '';
34
35 if ( settings.width && settings.height ) {
36 var shareWindowLeft = ( screen.width / 2 ) - ( settings.width / 2 ),
37 shareWindowTop = ( screen.height / 2 ) - ( settings.height / 2 );
38
39 shareWindowParams = 'toolbar=0,status=0,width=' + settings.width + ',height=' + settings.height + ',top=' + shareWindowTop + ',left=' + shareWindowLeft;
40 }
41
42 var link = ShareLink.getNetworkLink( networkName, settings ),
43 isPlainLink = /^https?:\/\//.test( link ),
44 windowName = isPlainLink ? '' : '_self';
45
46 open( link, windowName, shareWindowParams );
47 };
48
49 var run = function() {
50 $.each( element.classList, function() {
51 var networkName = getNetworkNameFromClass( this );
52
53 if ( networkName ) {
54 bindShareClick( networkName );
55
56 return false;
57 }
58 } );
59 };
60
61 var initSettings = function() {
62 $.extend( settings, ShareLink.defaultSettings, userSettings );
63
64 [ 'title', 'text' ].forEach( function( propertyName ) {
65 settings[ propertyName ] = settings[ propertyName ].replace( '#', '' );
66 } );
67
68 settings.classPrefixLength = settings.classPrefix.length;
69 };
70
71 var initElements = function() {
72 $element = $( element );
73 };
74
75 var init = function() {
76 initSettings();
77
78 initElements();
79
80 run();
81 };
82
83 init();
84 };
85
86 ShareLink.networkTemplates = {
87 twitter: 'https://twitter.com/intent/tweet?text={text}\x20{url}',
88 'x-twitter': 'https://x.com/intent/tweet?text={text}\x20{url}',
89 pinterest: 'https://www.pinterest.com/pin/create/button/?url={url}&media={image}',
90 facebook: 'https://www.facebook.com/sharer.php?u={url}',
91 threads: 'https://threads.net/intent/post?text={text}\x20{url}',
92 vk: 'https://vkontakte.ru/share.php?url={url}&title={title}&description={text}&image={image}',
93 linkedin: 'https://www.linkedin.com/shareArticle?mini=true&url={url}&title={title}&summary={text}&source={url}',
94 odnoklassniki: 'https://connect.ok.ru/offer?url={url}&title={title}&imageUrl={image}',
95 tumblr: 'https://tumblr.com/share/link?url={url}',
96 google: 'https://plus.google.com/share?url={url}',
97 digg: 'https://digg.com/submit?url={url}',
98 reddit: 'https://reddit.com/submit?url={url}&title={title}',
99 stumbleupon: 'https://www.stumbleupon.com/submit?url={url}',
100 pocket: 'https://getpocket.com/edit?url={url}',
101 whatsapp: 'https://api.whatsapp.com/send?text=*{title}*%0A{text}%0A{url}',
102 xing: 'https://www.xing.com/spi/shares/new?url={url}',
103 print: 'javascript:print()',
104 email: 'mailto:?subject={title}&body={text}%0A{url}',
105 telegram: 'https://telegram.me/share/url?url={url}&text={text}',
106 skype: 'https://web.skype.com/share?url={url}',
107 };
108
109 ShareLink.defaultSettings = {
110 title: '',
111 text: '',
112 image: '',
113 url: location.href,
114 classPrefix: 's_',
115 width: 640,
116 height: 480,
117 };
118
119 ShareLink.getNetworkLink = function( networkName, settings ) {
120 var link = ShareLink.networkTemplates[ networkName ].replace( /{([^}]+)}/g, function( fullMatch, pureMatch ) {
121 return settings[ pureMatch ] || '';
122 } );
123
124 if ( 'email' === networkName ) {
125 if ( -1 < settings['title'].indexOf( '&' ) || -1 < settings['text'].indexOf( '&' ) ) {
126 var emailSafeSettings = {
127 text: settings['text'].replace( new RegExp('&', 'g'), '%26' ),
128 title: settings['title'].replace( new RegExp('&', 'g'), '%26' ),
129 url: settings['url'],
130 };
131
132 link = ShareLink.networkTemplates[ networkName ].replace( /{([^}]+)}/g, function( fullMatch, pureMatch ) {
133 return emailSafeSettings[ pureMatch ];
134 } );
135 }
136
137 if ( link.indexOf( '?subject=&body') ) {
138 link = link.replace( 'subject=&', '' );
139 }
140
141 return link;
142 }
143
144 return link;
145 };
146
147 $.fn.shareLink = function( settings ) {
148 return this.each( function() {
149 $( this ).data( 'shareLink', new ShareLink( this, settings ) );
150 } );
151 };
152 } )( jQuery );
153