PageSourceSearch

https://esquilamisional.org/wp-content/plugins/go_pricing/assets/js/go_pricing_scripts.js?ver=3.3.17

js esquilamisional.org collected 2026-09-25 01:48:31 UTC 21,714 bytes, 703 lines download raw bytes

1/**
2 * Go Pricing - WordPress Responsive Pricing Tables
3 * 
4 * Description: The New Generation Pricing Tables. If you like traditional Pricing Tables, but you would like get much more out of it, then this rodded product is a useful tool for you.
5 * Version:     3.3.17
6 * Author:      Granth
7 * License:		https://codecanyon.net/licenses/
8 * 
9 * (C) 2020 Granth (https://granthweb.com)
10 */
11
12var gwGS = gwGS || {};
13; (function ($, TimelineLite, TweenLite, undefined) {
14	"use strict";
15
16	/**
17	 * Initialize
18	 */
19
20	$.GoPricing = {
21
22		/* Init function */
23		Init: function () {
24			this.$wrap = $('.gw-go');
25			this.fixWidth();
26			this.equalize = this.$wrap.data('equalize');
27			this.InitMediaElementPlayer();
28			this.InitGoogleMap();
29			this.isIE = document.documentMode != undefined && document.documentMode > 5 ? document.documentMode : false;
30			if (this.isIE) {
31				this.$wrap.addClass('gw-go-ie');
32				if (this.isIE < 9) this.$wrap.addClass('gw-go-oldie');
33			};
34			if ($.GoPricing != undefined && $.GoPricing.equalize) {
35				this.EqualizeRows();
36			};
37			this.InitAnim();
38			this.eventType = this.detectEvent();
39			this.timeout = [];
40
41		},
42
43		InitAnim: function () {
44			this.$wrap.each(function (i, obj) {
45
46				$(obj).css('opacity', 1);
47				if (!TimelineLite || !TweenLite) return;
48
49				var $cols = $(".gw-go-col-wrap[data-col-anim]", this);
50				if ($cols.length) {
51					var tl = new TimelineLite({
52						paused: true,
53						onStart: function () {
54							var tw = this.getChildren(), i = tw.length;
55							while (i--) if (tw[i].vars.onUpdate) tw[i].vars.onUpdate();
56						}
57					});
58					$cols.each(function (i, col) {
59						var anim = $(col).data('col-anim') || {};
60						if (anim.trans) {
61							anim.css.opacity /= 100, anim.css.scaleX /= 100, anim.css.scaleY /= 100;
62							tl.add(TweenLite.from(col, anim.trans.duration / 1000, { css: anim.css, ease: anim.trans.ease }), anim.trans.delay / 1000);
63						}
64						if (anim.count) {
65							var $price = $('[data-id=price]', col),
66								counter = { value: (anim.count.from || 0) },
67								$amount = $price.find('[data-id=amount]'),
68								price = $price.data('price') || 0,
69								currency = $price.data('currency') || {},
70								decimals = (price || '').toString().split('.')[1] || '',
71								decCnt = decimals.length;
72
73							if ($price.data('trailing-zero')) decCnt = $price.data('decimal-no');
74
75							tl.add(TweenLite.to(counter, anim.count.duration / 1000, {
76								value: price,
77								ease: anim.count.ease,
78								onUpdate: function () {
79									var c = counter.value
80									$amount.html(function () {
81										var parts = parseFloat(c).toFixed(decCnt).split('.');
82										parts[0] = parts[0].replace(/(\d)(?=(\d{3})+(?!\d))/g, "$1" + (currency['thousand-sep'] || ' '));
83										parts[1] = parts[1] ? ((currency['decimal-sep'] || '.') + parts[1]) : '';
84										return parts[0] + parts[1];
85									});
86
87								},
88							}), anim.count.delay / 1000);
89						}
90					});
91					var $this = $(this).data('tl', tl);
92					$this.tablespy({ offset: $this.data('scroll-offset') });
93					TweenLite.set(this, { perspective: '1000px' });
94				}
95			});
96		},
97
98		/* Show Tooltip */
99		showTooltip: function ($elem, content, top) {
100
101			if ($elem === undefined) return;
102
103			var $rowTooltip = $elem.find('.gw-go-tooltip-content'),
104				rowTooltipContent = $rowTooltip.length ? $rowTooltip.prop('outerHTML') : '',
105				$colWrap = $elem.closest('.gw-go-col-wrap'),
106				$col = $colWrap.find('.gw-go-col'),
107				$tooltip = $col.find('.gw-go-tooltip'),
108				colIndex = $colWrap.data('col-index'),
109				rIndex = $elem.data('row-index');
110
111			if (!$tooltip.length) $tooltip = $('<div class="gw-go-tooltip"></div>').appendTo($col);
112
113			if ($tooltip.data('index') != rIndex) {
114				$tooltip.removeClass('gw-go-tooltip-visible');
115			} else {
116				clearTimeout($.GoPricing.timeout[colIndex]);
117			}
118
119			if (rowTooltipContent != '') {
120				// Set max width for the tooltip
121				$tooltip.css('max-width', $elem.closest('.gw-go-col').width() - 10);
122				$tooltip.html(rowTooltipContent).data('index', rIndex)
123				var corr = $col.position().top;
124				setTimeout(function () { $tooltip.addClass('gw-go-tooltip-visible').css('top', $elem.find('.gw-go-body-cell').offset().top - $col.closest('.gw-go-col-wrap').offset().top - $tooltip.outerHeight() - 16 - corr) }, 10);
125			}
126
127		},
128
129		/* Hide Tooltip */
130		hideTooltip: function ($elem) {
131
132			if ($elem === undefined) return;
133
134			if ($elem.hasClass('gw-go-tooltip')) {
135				$elem.removeClass('gw-go-tooltip-visible');
136			} else {
137
138				var $colWrap = $elem.closest('.gw-go-col-wrap'),
139					$col = $colWrap.find('.gw-go-col'),
140					$tooltip = $col.find('.gw-go-tooltip'),
141					colIndex = $colWrap.data('col-index');
142
143				$.GoPricing.timeout[colIndex] = setTimeout(function () { $tooltip.removeClass('gw-go-tooltip-visible'); }, 10);
144
145			}
146
147		},
148
149		/* Mediaelement Player init */
150		InitMediaElementPlayer: function () {
151
152			if (jQuery().mediaelementplayer && $.GoPricing.$wrap.find('audio, video').length) {
153				$.GoPricing.$wrap.find('audio, video').mediaelementplayer({
154					audioWidth: '100%',
155					videoWidth: '100%'
156				});
157			};
158
159		},
160
161		/* Google map init */
162		InitGoogleMap: function () {
163
164			if (jQuery().goMap && $.GoPricing.$wrap.find('.gw-go-gmap').length) {
165				$.GoPricing.$wrap.find('.gw-go-gmap').each(function (index) {
166					var $this = $(this);
167					$this.goMap($this.data('map'));
168				});
169			};
170
171		},
172
173		loadImages: function ($pricingTable) {
174
175			if (!$pricingTable.data('images') || $pricingTable.data('imagesLoaded')) return;
176
177			var images = $pricingTable.data('images'),
178				loadedCount = $pricingTable.data('imagesLoadedCnt') ? parseInt($pricingTable.data('imagesLoadedCnt')) : 0;
179
180			for (var x = 0; x < images.length; x++) {
181				var image = images[x];
182				if ($(image.el).data('loading')) continue;
183				$(image.el).data('loading', true);
184				var img = new Image();
185				img.onerror = function () {
186					$pricingTable.data('imagesLoadedCnt', ++loadedCount);
187				};
188				img.onload = function (e) {
189					$pricingTable.data('imagesLoadedCnt', ++loadedCount);
190				};
191				img.src = image.el.src;
192			}
193
194			if (loadedCount == images.length) {
195				$pricingTable.data('imagesLoaded', true);
196				this.EqualizeRows();
197				return;
198			}
199
200			setTimeout($.proxy(function () {
201				this.loadImages($pricingTable);
202			}, this), 100);
203
204		},
205
206		/* Fix width in webkit browsers */
207		fixWidth: function () {
208
209			if ('WebkitAppearance' in document.documentElement.style === false || window.StyleMedia) return;
210
211			for (var x = 0; x < $.GoPricing.$wrap.length; x++) {
212
213				var $pricingTable = $.GoPricing.$wrap.eq(x),
214					$cols = $pricingTable.find('.gw-go-col-wrap');
215
216				if ($pricingTable.is(':hidden') || $pricingTable.offset().top > parseInt($(document).scrollTop() + window.innerHeight + 500) || $pricingTable.data('fix-width') === true || $cols.length < 2) continue;
217
218				for (var i = 0; i < $cols.length; i++) {
219
220					var $col = $cols.eq(i),
221						fixedMaxWidth = parseInt($pricingTable.data('mw')),
222						maxWidth = Math.floor(parseFloat(window.getComputedStyle($col[0]).width));
223
224					if (!fixedMaxWidth || maxWidth < fixedMaxWidth) {
225						$cols.css('max-width', 'none');
226						$cols.css('max-width', Math.floor(parseFloat(window.getComputedStyle($col[0]).width)));
227					}
228
229				}
230
231				$pricingTable.data('fix-width', true);
232
233			}
234
235		},
236
237		/* Equalize rows */
238		EqualizeRows: function () {
239
240			for (var x = 0; x < $.GoPricing.$wrap.length; x++) {
241
242				if ($.GoPricing.$wrap.eq(x).is(':hidden') || $.GoPricing.$wrap.eq(x).offset().top > parseInt($(document).scrollTop() + window.innerHeight + 500) || $.GoPricing.$wrap.eq(x).data('eq-ready') === true) continue;
243
244				var $pricingTable = $.GoPricing.$wrap.eq(x),
245					$colWrap = $pricingTable.find('.gw-go-col-wrap:visible'),
246					colCnt = $colWrap.length,
247					equalizeCnt = colCnt,
248					views = $pricingTable.data('views') !== undefined ? $pricingTable.data('views') : {};
249
250				/* Load images */
251				if (!$pricingTable.data('images') && !$pricingTable.data('imagesLoaded')) {
252					var images = [];
253					if ($pricingTable.data('equalize').body != undefined) { $pricingTable.find('.gw-go-body li .gw-go-body-cell:visible img').each(function (index, el) { images.push({ 'ready': false, 'el': el }) }); }
254					if ($pricingTable.data('equalize').footer != undefined) { $pricingTable.find('.gw-go-footer .gw-go-footer-row-inner:visible img').each(function (index, el) { images.push({ 'ready': false, 'el': el }) }); }
255					if ($pricingTable.data('equalize').column != undefined) { $pricingTable.find('.gw-go-header img').each(function (index, el) { images.push({ 'ready': false, 'el': el }) }); }
256
257					if (images.length) $pricingTable.data('images', images);
258
259				}
260
261				if ($pricingTable.data('images') && !$pricingTable.data('imagesLoaded')) {
262					this.loadImages($pricingTable);
263					continue;
264				}
265
266				for (var key in views) {
267
268					var mqSizes = [], mq = '';
269					if (views[key].min !== undefined && views[key].min !== '') mqSizes.push('(min-width:' + views[key].min + 'px)');
270					if (views[key].max !== undefined && views[key].max !== '') mqSizes.push('(max-width:' + views[key].max + 'px)');
271					mq = mqSizes.join(' and ');
272
273					if (mq != '') if (window.matchMedia && window.matchMedia(mq).matches) {
274						equalizeCnt = views[key].cols !== undefined && views[key].cols !== '' && views[key].cols <= colCnt ? views[key].cols : colCnt;
275					}
276
277				}
278
279				if (equalizeCnt == 1) {
280					$pricingTable.find('.gw-go-body li .gw-go-body-cell').css('height', 'auto');
281					$pricingTable.find('.gw-go-col-wrap').css('height', 'auto');
282					$pricingTable.find('.gw-go-footer').css('height', 'auto');
283					continue;
284				}
285
286				for (var z = 0; z < colCnt / equalizeCnt; z++) {
287
288					if (!$pricingTable.is(':hidden')) $pricingTable.data('eq-ready', true);
289
290					var rowHeights = [], footerHeights = [], colHeights = [];
291
292					/* Body */
293					if ($pricingTable.data('equalize').body != undefined) {
294
295						for (var i = 0; i < colCnt; i++) {
296							if (i >
296= (z * equalizeCnt) && i <= (z * equalizeCnt) + equalizeCnt - 1) {
297								var $currentCol = $colWrap.eq(i),
298									$row = $currentCol.find('.gw-go-body li .gw-go-body-cell:visible');
299
300								for (var rIndex = 0; rIndex < $row.length; rIndex++) {
301
302									var $currentRow = $row.eq(rIndex);
303									$currentRow.css('height', 'auto');
304
305									if (typeof rowHeights[rIndex] !== 'undefined') {
306										if ($currentRow.height() > rowHeights[rIndex]) {
307											rowHeights[rIndex] = $currentRow.height();
308										}
309									} else {
310										rowHeights[rIndex] = $currentRow.height();
311									}
312
313								}
314
315							}
316
317						}
318
319						for (var i = 0; i < colCnt; i++) {
320							var $currentCol = $colWrap.eq(i),
321								$row = $currentCol.find('.gw-go-body li .gw-go-body-cell:visible');
322
323							if (i >= (z * equalizeCnt) && i <= (z * equalizeCnt) + equalizeCnt - 1) {
324								for (var rIndex = 0; rIndex < $row.length; rIndex++) {
325									var $currentRow = $row.eq(rIndex);
326									$currentRow.css('height', rowHeights[rIndex]);
327								}
328
329							}
330
331
332
333						}
334
335					}
336
337					/* Footer */
338					if ($pricingTable.data('equalize').footer != undefined) {
339
340						for (var i = 0; i < colCnt; i++) {
341							if (i >= (z * equalizeCnt) && i <= (z * equalizeCnt) + equalizeCnt - 1) {
342								var $currentCol = $colWrap.eq(i),
343									$row = $currentCol.find('.gw-go-footer .gw-go-footer-row-inner:visible');
344
345								for (var rIndex = 0; rIndex < $row.length; rIndex++) {
346
347									var $currentRow = $row.eq(rIndex);
348									$currentRow.css('height', 'auto');
349
350									if (typeof footerHeights[rIndex] !== 'undefined') {
351										if ($currentRow.height() > footerHeights[rIndex]) {
352											footerHeights[rIndex] = $currentRow.height();
353										}
354									} else {
355										footerHeights[rIndex] = $currentRow.height();
356									}
357
358								}
359
360							}
361
362						}
363
364						for (var i = 0; i < colCnt; i++) {
365							var $currentCol = $colWrap.eq(i),
366								$row = $currentCol.find('.gw-go-footer .gw-go-footer-row-inner:visible');
367
368							if (i >= (z * equalizeCnt) && i <= (z * equalizeCnt) + equalizeCnt - 1) {
369								for (var rIndex = 0; rIndex < $row.length; rIndex++) {
370									var $currentRow = $row.eq(rIndex);
371									$currentRow.css('height', footerHeights[rIndex]);
372								}
373
374							}
375
376
377
378						}
379
380					}
381
382					/* Column */
383					if ($pricingTable.data('equalize').column != undefined) {
384
385						for (var i = 0; i < colCnt; i++) {
386							var $currentCol = $colWrap.eq(i);
387
388							if (i >= (z * equalizeCnt) && i <= (z * equalizeCnt) + equalizeCnt - 1) {
389								$currentCol.css('height', 'auto');
390								if (typeof colHeights[z] !== 'undefined') {
391									if ($currentCol.outerHeight(true) > colHeights[z]) {
392										colHeights[z] = $currentCol.outerHeight(false);
393									}
394								} else {
395									colHeights[z] = $currentCol.outerHeight(false);
396								}
397							}
398
399						}
400
401						for (var i = 0; i < colCnt; i++) {
402							var $currentCol = $colWrap.eq(i);
403
404							if (i >= (z * equalizeCnt) && i <= (z * equalizeCnt) + equalizeCnt - 1) {
405								$currentCol.css('height', colHeights[z]);
406							}
407
408						}
409
410					}
411
412
413				}
414
415			}
416
417		},
418
419		/* Detect event type */
420		detectEvent: function () {
421			var eventType = 'mouseenter mouseleave';
422			if ('ontouchstart' in window) {
423				eventType = 'touchstart';
424			} else if (window.navigator.pointerEnabled && navigator.msMaxTouchPoints) {
425				eventType = "pointerdown";
426			} else if (window.navigator.msPointerEnabled && navigator.msMaxTouchPoints) {
427				eventType = "MSPointerDown";
428			}
429			return eventType;
430		}
431
432	};
433
434	$(function () {
435
436		/* Init */
437		$.GoPricing.Init();
438
439		$(window).on('scroll', function () {
440
441			$.GoPricing.fixWidth();
442			$.GoPricing.EqualizeRows();
443
444		});
445
446		/* Submit button event if form found */
447		$.GoPricing.$wrap.delegate('span.gw-go-btn', 'click', function () {
448			var $this = $(this);
449			if ($this.find('form').length) { $this.find('form').submit(); };
450		});
451
452
453		/* Show & hide tooltip - Event on tooltip */
454		$.GoPricing.$wrap.on('mouseenter mouseleave', '.gw-go-tooltip', function (e) {
455
456			var $this = $(this),
457				$colWrap = $this.closest('.gw-go-col-wrap'),
458				colIndex = $colWrap.data('col-index');
459
460			if (e.type == 'mouseenter') {
461				clearTimeout($.GoPricing.timeout[colIndex]);
462			} else {
463				$.GoPricing.timeout[colIndex] = setTimeout(function () { $.GoPricing.hideTooltip($this); }, 10);
464			}
465
466		});
467
468
469		/* Show & hide tooltip - Event on row */
470		$.GoPricing.$wrap.on('mouseenter mouseleave', 'ul.gw-go-body > li', function (e) {
471
472			var $this = $(this);
473
474			if (e.type == 'mouseenter') {
475				$.GoPricing.showTooltip($this);
476			} else {
477				$.GoPricing.hideTooltip($this);
478			}
479
480		});
481
482
483		/* Column hover / touch - supports mouse, touch and pointers */
484
485		// Pointer enter event
486		function enterEvent($elem) {
487			$elem.addClass('gw-go-curr');
488			$elem.siblings().data('leave-event', null).data('enter-event', null);
489			$elem.data('leave-event', null);
490			if ($elem.hasClass('gw-go-disable-hover')) {
491				$elem.siblings(':not(.gw-go-disable-hover)').removeClass('gw-go-hover');
492			} else {
493				$elem.addClass('gw-go-hover').siblings(':not(.gw-go-disable-hover)').removeClass('gw-go-hover');
494				$elem.closest('.gw-go').addClass('gw-go-hover');
495			}
496		};
497
498		// Pointer leave event
499		function leaveEvent($elem) {
500			$elem.siblings().data('leave-event', null).data('enter-event', null);
501			$elem.data('enter-event', null);
502			$elem.removeClass('gw-go-curr');
503			if ($elem.hasClass('gw-go-disable-hover')) {
504				$elem.closest('.gw-go').find('[data-current="1"]:not(.gw-go-disable-hover)').addClass('gw-go-hover');
505			} else {
506				$elem.removeClass('gw-go-hover');
507				$elem.closest('.gw-go').find('[data-current="1"]:not(.gw-go-disable-hover)').addClass('gw-go-hover');
508				$elem.closest('.gw-go').removeClass('gw-go-hover');
509			}
510		};
511
512		// Enter event handling			
513		$(document).on('pointerenter mouseenter pointerdown touchstart', '.gw-go-col-wrap', function (e) {
514			e.stopPropagation();
515			var $this = $(this);
516			$this.closest('.gw-go').find('.gw-go-col-wrap').removeClass('gw-go-curr');
517			if ($this.hasClass('gw-go-disable-hover')) {
518				$this.addClass('gw-go-curr');
519				return;
520			}
521			$this.data('leave-event', null);
522
523			if ($this.data('enter-event')) return;
524			var event = {
525				pointer: e.originalEvent.pointerType == 'touch' || e.type == 'touchstart' ? 'touch' : 'mouse',
526				pageX: e.originalEvent.changedTouches ? e.originalEvent.changedTouches[0].pageX : e.originalEvent.pageX,
527				pageY: e.originalEvent.changedTouches ? e.originalEvent.changedTouches[0].pageY : e.originalEvent.pageY,
528			};
529			if (event.pointer == 'mouse') {
530				enterEvent($this);
531			};
532			$this.data('enter-event', event);
533		});
534
535		// Leave event handling			
536		$(document).on('pointerleave mouseleave pointerup touchend', '.gw-go-col-wrap', function (e) {
537			e.stopPropagation();
538			var $this = $(this);
539
540			if ($this.hasClass('gw-go-disable-hover')) return;
541
542			if (!$this.data('enter-event') || $this.data('leave-event')) return;
543			var event = {
544				pointer: e.originalEvent.pointerType == 'touch' || e.type == 'touchend' ? 'touch' : 'mouse',
545				pageX: e.originalEvent.changedTouches ? e.originalEvent.changedTouches[0].pageX : e.originalEvent.pageX,
546				pageY: e.originalEvent.changedTouches ? e.originalEvent.changedTouches[0].pageY : e.originalEvent.pageY,
547			};
548			if (event.pointer == 'mouse') {
549				$this.data('leave-event', event);
550				leaveEvent($this);
551			} else {
552				if (!$this.data('leave-event')) {
553					if (Math.abs($this.data('enter-event').pageX - event.pageX) > 20 || Math.abs($this.data('enter-event').pageY - event.pageY) > 20) {
554						$this.data('enter-event', null);
555						return;
556					}
557					enterEvent($this);
558					$this.data('leave-event', event);
559					$(document).on('touchstart.goprEvent pointermove.goprEvent mousemove.goprEvent', function (e) {
560						if ($(e.target).closest('.go-pricing').length) return;
561						leaveEvent($this);
562						$this.data('leave-event', null);
563						$this.data('enter-event', null);
564						$(document).off('.goprEvent');
565					});
566				}
567			}
568
569		});
570
571		/**
572	 	 * Google map
573		 */
574		if (typeof jQuery.goMap !== 'undefined' && $.GoPricing.$wrap.find('.gw-go-gmap').length) {
575			var GoPricing_MapResize = false;
576			$(window).on('resize', function (e) {
577				if (GoPricing_MapResize) { clearTimeout(GoPricing_MapResize); }
578				GoPricing_MapResize = setTimeout(function () {
579					$.GoPricing.$wrap.find('.gw-go-gmap').each(function (index, element) {
580						//$(this).goMap();
581						//console.log($.goMap.getMarkers('markers')[0].position);
582					});
583				}, 400);
584			});
585		};
586
587
588		/* Equalize heights on resize */
589		$(window).on('resize load', function (e) {
590
591			for (var x = 0; x < $.GoPricing.$wrap.length; x++) {
592				$.GoPricing.$wrap.eq(x).data('eq-ready', false);
593				$.GoPricing.$wrap.eq(x).data('fix-width', false);
594			}
595			$.GoPricing.fixWidth();
596			$.GoPricing.EqualizeRows();
597
598		});
599
600		/* handle animations */
601		$(window).on("scrollEnter scrollLeave", function (e, spy) {
602			var $target = $(e.target);
603
604			if ($target.data('anim') == 'off' || typeof spy === 'undefined') return;
605			var repeat = $target.data("anim-repeat") || Infinity;
606			if (e.type == "scrollEnter") {
607				if (spy.enters <= repeat) $target.data("tl").play();
608			} else {
609				if (spy.enters < repeat) $target.data("tl").stop().seek(0);
610			}
611		});
612
613	});
614
615
616})(jQuery, gwGS.TimelineLite, gwGS.TweenLite);
617
618; (function ($, window, undefined) {
619
620	var $elems = $();
621	var $cont = $(window)
622		.on("resize.tablespy", onResize)
623		.on("load.tablespy", onResize)
624		.on("scroll.tablespy load.tablespy", onScroll);
625
626	if (window.frameElement) {
627		window.parent.onload = function () { onScroll(); }
628	}
629
630
631	function onScroll() {
632		if (!$elems.length) return;
633		var height = $cont.height();
634		var y = $cont.scrollTop();
635		$elems.each(function () {
636			var $elem = $(this);
637			var o = $elem.data('tablespy');
638			if (typeof o === "undefined") return;
639			var offset = o.rowHeight * o.offset / 100;
640
641			if (Math.floor((o.rowHeight + height) / 2) < offset) offset = Math.floor((o.rowHeight + height) / 2) - 20;
642
643			if (height + y - offset >= o.min && y + offset <= o.max) {
644				if (!o.inside) {
645					o.inside = true;
646					o.enters++;
647					$elem.trigger("scrollEnter", { scrollTop: y, enters: o.enters, leaves: o.leaves });
648				}
649				$elem.trigger("scrollTick", { scrollTop: y, enters: o.enters, leaves: o.leaves });
650			}
651			if (o.inside && !(height + y >= o.min && y <= o.max)) {
652				o.inside = false;
653				o.leaves++;
654				$elem.trigger("scrollLeave", { scrollTop: y, enters: o.enters, leaves: o.leaves });
655			}
656		});
657	}
658
659	function onResize() {
660		$elems.each(function () {
661			var $elem = $(this);
662			var o = $elem.data("tablespy");
663			if (typeof o === "undefined") return;
664			o.min = $elem.offset().top;
665			o.max = $elem.outerHeight() + o.min;
666			o.rowHeight = $elem.children(":visible:first").outerHeight();
667		});
668	}
669
670	$.fn.tablespy = function (options) {
671		var defaults = {
672			offset: 0,
673			enters: 0,
674			leaves: 0,
675			inside: false
676		};
677		return this.each(function () {
678			var $elem = $(this);
679			var top = $elem.offset().top;
680			$elem.data("tablespy", $.extend({
681				min: top,
682				max: top + $elem.outerHeight(),
683				rowHeight: $elem.children(":visible:first").outerHeight()
684			}, defaults, options));
685			$elems.push(this);
686		});
687	};
688
689	/* Disable animation */
690	$.GoPricing.disableAnim = function () {
691		this.$wrap.each(function (index, element) {
692			$(element).addClass('test');
693			$(element).data('anim', 'off');
694			$(element).css('opacity', 1);
695			if (typeof $(element).data("tl") === 'undefined') {
696				return;
697			}
698			if ($(element).data("tl").progress() == 1) return;
699			$(element).data("tl").progress(1);
700		});
701	};
702
703})(jQuery, window);

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.