PageSourceSearch

https://ihcus.com/wp-content/plugins/easy-social-share-buttons3/assets/modules/pinterest-pro.js?ver=9.9

js ihcus.com collected 2026-10-06 19:07:43 UTC 16,823 bytes, 411 lines download raw bytes

1/**
2 * Pinterest Pro
3 * @package EasySocialShareButtons
4 * @author appscreo
5 * @since 8.0
6 */
7( function( $ ) {
8	"use strict";
9	
10	if (!debounce) {
11		var debounce = function( func, wait ) {
12			var timeout, args, context, timestamp;
13			return function() {
14				context = this;
15				args = [].slice.call( arguments, 0 );
16				timestamp = new Date();
17				var later = function() {
18					var last = ( new Date() ) - timestamp;
19					if ( last < wait ) {
20						timeout = setTimeout( later, wait - last );
21					} else {
22						timeout = null;
23						func.apply( context, args );
24					}
25				};
26				if ( ! timeout ) {
27					timeout = setTimeout( later, wait );
28				}
29			};
30		};
31	}
32
33	$(document).ready(function(){
34		/**
35		 * Applying additional Pinterest optimizations for images
36		 */
37		// mobile disable
38		if (essbPinImages.disable_mobile && $(window).width() < 1024) {
39			return;
40		}
41		
42		
43		var essbCurrentPinImageCount = window.essbCurrentPinImageCount = 0;		
44				
45		if (essb_settings.pin_pinid_active && essb_settings.pin_pinid) {
46			$('img').each(function() {
47				var hasPinID = $(this).data('pin-id') || '';
48				if (!hasPinID || hasPinID == '') $(this).attr('data-pin-id', essb_settings.pin_pinid);
49			});
50		}
51		
52		if (essb_settings.pin_force_active && essb_settings.pin_force_image) {
53			$('img').each(function() {
54				$(this).attr('data-pin-media', essb_settings.pin_force_image);
55				
56				/**
57				 * Forcing all custom parameters too
58				 */
59				if (!$(this).data('pin-description')) {
60					var pinDescription  = '';
61					if ($(this).attr('title')) pinDescription = $(this).attr('title');
62					else if ($(this).attr('alt')) pinDescription = $(this).attr('alt');
63
64					// give always priority of the custom description if set
65					if (essbPinImages.force_custompin && !essbPinImages.custompin) essbPinImages.custompin = document.title;
66					if (essbPinImages.custompin) pinDescription = essbPinImages.custompin;
67
68					// if title is not genenrated it will use the Document Title
69					if (pinDescription == '') pinDescription = document.title;
70					
71					$(this).attr('data-pin-description', pinDescription);
72				}
73				
74				if (!$(this).data('pin-url')) $(this).attr('data-pin-url', encodeURI(document.URL));
75			});
76		}
77		
78		/**
79		 * Pinterest Pro Gutenberg images integration
80		 */
81		
82		$('.essb-block-image').each(function() {
83			var pinID = $(this).data('essb-pin-id') || '',
84				pinDesc = $(this).data('essb-pin-description') || '',
85				pinAvoid = $(this).data('essb-pin-nopin') || '';						
86			
87			if (pinAvoid.toString() == 'true') {
88				$(this).find('img').attr('data-pin-nopin', 'true');
89				$(this).find('img').addClass('no_pin');
90				return;
91			}
92			
93			if (pinID != '') $(this).find('img').attr('data-pin-id', pinID);
94			if (pinDesc != '') $(this).find('img').attr('data-pin-description', pinDesc);
95		});
96
97		/**
98		 * Pinterest responsive thumbnail correction
99		 */
100		if (essb_settings.force_pin_thumbs) {
101			// setting up a map of parsing images on site
102			var essbReposiveImagesMap = window.essbReposiveImagesMap = {};
103
104			// getting actual size of a single image
105			var essbDetectAndLocateImageSize = window.essbDetectAndLocateImageSize = function(url, element, isResponsive) {
106			  if (isResponsive) {
107			    essbReposiveImagesMap[element].responsive[url] = {};
108			  }
109			  $("<img/>", {
110			    load: function() {
111			      if (essbReposiveImagesMap[element]) {
112			        if (!isResponsive) {
113			          essbReposiveImagesMap[element].originalSize = { 'w': this.width, 'h': this.height, 'done': true };
114			          essbCompileTheDataPinImage(element);
115			        } else {
116			          essbReposiveImagesMap[element].responsive[url] = { 'w': this.width, 'h': this.height, 'done': true };
117			          essbCompileTheDataPinImage(element);
118			        }
119			      }
120
121			    },
122			    src: url
123			  });
124			};
125
126			var essbCompileTheDataPinImage = window.essbCompileTheDataPinImage = function(element) {
127			  var totalImages = 0,
128			    processImages = 0,
129			    currentMaxW = 0,
130			    imageURL = '';
131
132			  for (var rImageURL in essbReposiveImagesMap[element].responsive) {
133			    var dataObj = essbReposiveImagesMap[element].responsive[rImageURL] || {};
134			    totalImages++;
135
136			    if (!dataObj.done) continue;
137			    processImages++;
138			    if (currentMaxW == 0 || currentMaxW < dataObj.w) {
139			      currentMaxW = dataObj.w;
140			      imageURL = rImageURL;
141			    }
142
143			  }
144
145			  if (totalImages == processImages && essbReposiveImagesMap[element].original != imageURL) {
146			    if (essbReposiveImagesMap[element].originalSize.done) {
147			      if (currentMaxW > essbReposiveImagesMap[element].originalSize.w) {
148			        $('[data-pinpro-key="' + element + '"]').attr('data-pin-media', imageURL);
149			        $('[data-pinpro-key="' + element + '"]').attr('data-media', imageURL);
150			        $('[data-pinpro-key="' + element + '"]').attr('data-pin-url', window.location.href);
151					$('[data-pinpro-key="' + element + '"]').removeClass('pin-process');
152					$('[data-pinpro-key="' + element + '"]').each(essbPinImagesGenerateButtons);
153			      }
154			    }
155			  }
156			}
157
158			$('img').each(function() {
159			  var responsiveImages = $(this).attr('srcset') || '',
160			    uniqueID = Math.random().toString(36).substr(2, 9),
161			    element = uniqueID;
162
163			  if (!responsiveImages || responsiveImages == '') return;
164
165			  $(this).attr('data-pinpro-key', uniqueID);
166				$(this).addClass('pin-process');
167			  var responsiveSet = responsiveImages.split(', '),
168			    originalImage = $(this).attr('src') || '',
169			    foundReponsiveImage = '',
170			    foundReponsiveSize = 0;
171
172			  essbReposiveImagesMap[element] = {
173			    source: element,
174			    original: originalImage,
175			    originalSize: {},
176			    responsive: {}
177			  };
178			  essbDetectAndLocateImageSize(originalImage, element);
179			  for (var i = 0; i < responsiveSet.length; i++) {
180			    if (!responsiveSet[i]) continue;
181			    var imageData = responsiveSet[i].split(' '),
182			      imageURL = imageData[0] || '',
183			      imageSize = (imageData[1] || '').replace('w', '');
184
185			    if (!imageURL || !Number(imageSize)) continue;
186
187			    essbDetectAndLocateImageSize(imageURL, element, true);
188
189			  }
190
191			});
192		} // end forcing generation of responsive images
193
194		/**
195		 * Pinterest Images
196		 */
197
198		var essbPinImagesGenerateButtons = function() {
199			var image = $(this);
200			// the option to avoid button over images with links
201			if (essbPinImages.nolinks && $(image).parents().filter("a").length) return;
202
203			// avoid buttons on images that has lower size that setup
204			if (image.outerWidth() < Number(essbPinImages.min_width || 0) || image.outerHeight() < Number(essbPinImages.min_height || 0
204)) return;
205			// ignore the non Pinable images
206			if (image.hasClass('no_pin') || image.hasClass('no-pin') || image.data('pin-nopin') || image.hasClass('pin-generated') || image.hasClass('pin-process') || image.hasClass('zoomImg') || image.hasClass('lazy-hidden')) return;
207
208			var pinSrc = $(image).prop('src') || '',
209				pinDescription = '', shareBtnCode = [],
210				buttonStyleClasses = '', buttonSizeClasses = '',
211				pinID = $(image).data('pin-id') || '';
212			
213			// additional check for the autoptimize svg placeholder preventing images from load
214			// Pinterest also does not accept SVG images
215			if (pinSrc.indexOf('data:image/svg+xml') > -1 || pinSrc.indexOf('data:image/gif') > -1 || pinSrc.indexOf('data:image/png') > -1 || pinSrc == '') return;
216
217			if (image.data('media')) pinSrc = image.data('media');
218			if (image.data('lazy-src')) pinSrc = image.data('lazy-src');
219			if (image.data('pin-media')) pinSrc = image.data('pin-media');
220
221			if (image.data("pin-description")) pinDescription = image.data("pin-description");
222			else if (image.attr('title')) pinDescription = image.attr('title');
223			else if (image.attr('alt')) pinDescription = image.attr('alt');
224
225			// give always priority of the custom description if set
226			if (essbPinImages.force_custompin && !essbPinImages.custompin) essbPinImages.custompin = document.title;
227			if (essbPinImages.custompin) pinDescription = essbPinImages.custompin;
228
229			// if title is not genenrated it will use the Document Title
230			if (pinDescription == '') pinDescription = document.title;
231			
232			var shareCmd = 'https://pinterest.com/pin/create/button/?url=' + encodeURI(document.URL) + '&is_video=false' + '&media=' + encodeURI(pinSrc) + '&description=' + encodeURIComponent(pinDescription);
233			
234			if (essbPinImages.legacy_share_cmd)
235				shareCmd = 'https://pinterest.com/pin/create/bookmarklet/?url=' + encodeURI(document.URL) + '&media=' + encodeURI(pinSrc) + '&title=' + encodeURIComponent(pinDescription)+'&description=' + encodeURIComponent(pinDescription) + '&media=' + encodeURI(pinSrc);
236			
237			// encode the ' symbol separately
238			if (shareCmd.indexOf("'") > -1) shareCmd = shareCmd.replace(/'/g, '%27');
239			
240			if (pinID != '') shareCmd = 'https://www.pinterest.com/pin/'+pinID+'/repin/x/';
241
242			var imgClasses = image.attr('class'),
243			    imgStyles = image.attr('style');
244
245			if (essbPinImages ['button_style'] == 'icon_hover') {
246				buttonStyleClasses = ' essb_hide_name';
247			}
248			if (essbPinImages ['button_style'] == 'icon') {
249				buttonStyleClasses = ' essb_force_hide_name essb_force_hide';
250			}
251			if (essbPinImages ['button_style'] == 'button_name') {
252				buttonStyleClasses = ' essb_hide_icon';
253			}
254			if (essbPinImages ['button_style'] == 'vertical') {
255				buttonStyleClasses = ' essb_vertical_name';
256			}
257
258			if (essbPinImages['button_size']) buttonSizeClasses = ' essb_size_' + essbPinImages['button_size'];
259			if (essbPinImages['animation']) buttonSizeClasses += ' ' + essbPinImages['animation'];
260			if (essbPinImages['position']) buttonSizeClasses += ' essb_pos_' + essbPinImages['position'];
261			
262			if (essbPinImages['mobile_position']) buttonSizeClasses += ' essb_mobilepos_' + essbPinImages['mobile_position'];
263			if (essbPinImages['visibility'] && essbPinImages['visibility'] == 'always') buttonSizeClasses += ' essb_always_visible';
264
265			image.removeClass().attr('style', '').wrap('<div class="essb-pin" />');
266			if (imgClasses != '') image.parent('.essb-pin').addClass(imgClasses);
267			if (imgStyles != '') image.parent('.essb-pin').attr('style', imgStyles);
268			
269			// images count
270			window.essbCurrentPinImageCount++;
271			image.parent('.essb-pin').addClass('essb-pinid-' + window.essbCurrentPinImageCount.toString());
272
273			if (essbPinImages.reposition) {
274				var imgWidth = $(image).width();
275				if (Number(imgWidth) && !isNaN(imgWidth) && Number(imgWidth) > 0) {
276					image.parent('.essb-pin').css({'max-width': imgWidth+'px'});
277				}
278			}
279			
280			var uid = (new Date().getTime()).toString(36);		
281			
282			var iconMainClass = essbPinImages.svgIcon ? 'essb_icon_svg_pinterest' : 'essb_icon_pinterest';
283
284			shareBtnCode.push('<div class="essb_links essb_displayed_pinimage essb_template_'+essbPinImages.template+buttonSizeClasses+' essb_'+uid+'" data-e
284ssb-position="pinit" data-essb-postid="'+(essb_settings.post_id || '')+'" data-essb-instance="'+uid+'">');
285			shareBtnCode.push('<ul class="essb_links_list'+(buttonStyleClasses != '' ? ' ' + buttonStyleClasses : '')+'">');
286			shareBtnCode.push('<li class="essb_item essb_link_pinterest nolightbox'+(essbPinImages['svgIcon'] ? ' essb_link_svg_icon' : '')+'">');
287			shareBtnCode.push('<a class="nolightbox'+(essbPinImages['template_a_class'] ? ' ' + essbPinImages['template_a_class'] : '')+'" rel="noreferrer noopener nofollow" href="'+shareCmd+'" onclick="essb.window(&#39;'+shareCmd+'&#39;,&#39;pinpro&#39;,&#39;'+uid+'&#39;); return false;" target="_blank"><span class="essb_icon '+iconMainClass+(essbPinImages['template_icon_class'] ? ' ' + essbPinImages['template_icon_class'] : '')+'">'+(essbPinImages.svgIcon || '')+'</span><span class="essb_network_name">'+(essbPinImages['text'] ? essbPinImages['text'] : 'Pin')+'</span></a>');
288			shareBtnCode.push('</li>');
289			shareBtnCode.push('</ul>');
290			shareBtnCode.push('</div>');
291
292			image.after(shareBtnCode.join(''));
293			image.addClass('pin-generated'); // adding class to avoid generating again the same information
294			//essb.share_window
295			//removing the lazyloading class if posted
296			if (image.parent('.essb-pin').hasClass('lazyloading')) image.parent('.essb-pin').removeClass('lazyloading');
297			
298			if (essbPinImages['recenter'] && (essbPinImages['position'] || '') == 'middle-middle') {
299				let essbContainer = image.parent('.essb-pin').find('.essb_links');
300				if (essbContainer && essbContainer[0]) {
301					essbContainer[0].style.setProperty('margin-left', '-' + Math.round(essbContainer.width() / 2) + 'px', 'important');
302					essbContainer[0].style.setProperty('margin-top', '-' + Math.round(essbContainer.height() / 2) + 'px', 'important');
303				}
304			}
305
306		}
307
308		if (typeof(essbPinImages) != 'undefined' && $('body').hasClass('tcb-edit-mode')) essbPinImages.active = false;
309
310		if (typeof(essbPinImages) != 'undefined' && essbPinImages.active) {
311			// Begin detection of potential images and assign the pinterest generation
312			if (!essbPinImages.min_width || !Number(essbPinImages.min_width)) essbPinImages.min_width = 300;
313			if (!essbPinImages.min_height || !Number(essbPinImages.min_height)) essbPinImages.min_height = 300;
314			
315			// Integration with the mobile minimal width and height (if set)
316			if ($(window).width() < 720) {
317				if (Number(essbPinImages.min_width_mobile)) essbPinImages.min_width = Number(essbPinImages.min_width_mobile);
318				if (Number(essbPinImages.min_height_mobile)) essbPinImages.min_height = Number(essbPinImages.min_height_mobile);
319			}
320
321			if ($('.essb-pin.tve_image').length) {
322				$('.essb-pin.tve_image .essb_links').remove();
323				$('.essb-pin img').removeClass('pin-generated');
324			}
325
326			// WP Rocket Lazy Videos set no-pin class to those images to prevent holding down
327			$('.rll-youtube-player img').each(function() {
328				$(this).addClass('no-pin');
329			});
330			
331			// Hide on images option
332			if (essbPinImages.hideon) {
333				$(essbPinImages.hideon).each(function() {
334					$(this).addClass('no-pin');
335				});
336			}
337
338			window.addEventListener('LazyLoad::Initialized', function (e) {
339				$('.rll-youtube-player img').each(function() {
340					$(this).addClass('no-pin');
341				});
342			});
343
344			var essbPinImagesDetect = function() {
345				
346				// WP Rocket Lazy Videos set no-pin class to those images to prevent holding down
347				$('.rll-youtube-player img').each(function() {
348					$(this).addClass('no-pin');
349				});				
350				
351				// Hide on images option
352				if (essbPinImages.hideon) {
353					$(essbPinImages.hideon).each(function() {
354						$(this).addClass('no-pin');
355					});
356				}
357
358				if (essbPinImages.selector) {
359					$(essbPinImages.selector).each(essbPinImagesGenerateButtons);
360				}
361				else {
362					if (!$('.essb-pinterest-images').length) return;
363					$('.essb-pinterest-images').parent().find('img').each(essbPinImagesGenerateButtons);
364				}
365			}
366
367			if (essbPinImages.lazyload) $(window).on('scroll', debounce(essbPinImagesDetect, 10));
368
369			if (!essbPinImages.optimize_load) setTimeout(essbPinImagesDetect, 1);
370			else {
371				const essbPinUserInteractions =["keydown","mousedown","mousemove","wheel","touchmove","touchstart","touchend"];
372				essbPinUserInteractions.forEach(function(event) {
373				    window.addEventListener(event, essbPinTriggerDOMListener, {passive:true});
374				});
375				
376				document.addEventListener("visibilitychange", essbPinTriggerDOMListener);
377				
378				function essbPinTriggerDOMListener() {
379				    //remove existing user interaction event listeners
380					essbPinUserInteractions.forEach(function(event) {
381				        window.removeEventListener(event, essbPinTriggerDOMListener, {passive:true});
382				    });
383
384				    //remove visibility change listener
385				    document.removeEventListener("visibilitychange", essbPinTriggerDOMListener);
386
387				    //add dom listner if page is still loading
388				    if(document.readyState === 'loading') {
389				        document.addEventListener("DOMContentLoaded", essbPinTriggerDetector);
390				    }
391				    else {
392				        //trigger delayed script process
393				    	essbPinTriggerDetector();
394				    }
395				}
396				
397				function essbPinTriggerDetector() {
398					setTimeout(essbPinImagesDetect, 1);
399				}
400			}
401		}
402
403		if ((typeof(essbPinImages) != 'undefined' && !essbPinImages.active) || typeof(essbPinImages) == 'undefined') {
404			if ($('.essb-pin.tve_image').length) {
405				$('.essb-pin.tve_image .essb_links').remove();
406				$('.essb-pin img').removeClass('pin-generated');
407			}
408		}
409		
410	});
411} )( jQuery );

Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.