PageSourceSearch

https://minnesotagrown.com/wp-content/plugins/sam-pro-free/js/jque…?ver=cc9fb8afb2dda5189bf87a1696702bbe

js minnesotagrown.com collected 2026-09-25 18:59:40 UTC 5,635 bytes, 165 lines download raw bytes

vendor: 4,915 bytes, lines 1-139
1/**
2 * jQuery iframe click tracking plugin
3 *
4 * @author Vincent Paré (www.finalclap.com)
5 * @copyright © 2013-2015 Vincent Paré
6 * @license http://opensource.org/licenses/Apache-2.0
7 * @version 1.1.0
8 */
9(function($){
10	// Tracking handler manager
11	$.fn.iframeTracker = function(handler){
12		var target = this.get();
13		if (handler === null || handler === false) {
14			$.iframeTracker.untrack(target);
15		} else if (typeof handler == "object") {
16			$.iframeTracker.track(target, handler);
17		} else {
18			throw new Error("Wrong handler type (must be an object, or null|false to untrack)");
19		}
20	};
21	
22	// Iframe tracker common object
23	$.iframeTracker = {
24		// State
25		focusRetriever: null,  // Element used for restoring focus on window (element)
26		focusRetrieved: false, // Says if the focus was retrived on the current page (bool)
27		handlersList: [],      // Store a list of every trakers (created by calling $(selector).iframeTracker...)
28		isIE8AndOlder: false,  // true for Internet Explorer 8 and older
29		
30		// Init (called once on document ready)
31		init: function(){
32			// Determine browser version (IE8-) ($.browser.msie is deprecated since jQuery 1.9)
33			try {
34				if ($.browser.msie == true && $.browser.version < 9) {
35					this.isIE8AndOlder = true;
36				}
37			} catch(ex) {
38				try {
39					var matches = navigator.userAgent.match(/(msie) ([\w.]+)/i);
40					if (matches[2] < 9) {
41						this.isIE8AndOlder = true;
42					}
43				} catch(ex2) {}
44			}
45			
46			// Listening window blur
47			$(window).focus();
48			$(window).blur(function(e){
49				$.iframeTracker.windowLoseFocus(e);
50			});
51			
52			// Focus retriever (get the focus back to the page, on mouse move)
53			$('body').append('<div style="position:fixed; top:0; left:0; overflow:hidden;"><input style="position:absolute; left:-300px;" type="text" value="" id="focus_retriever" readonly="true" /></div>');
54			this.focusRetriever = $('#focus_retriever');
55			this.focusRetrieved = false;
56			$(document).mousemove(function(e){
57				if (document.activeElement && document.activeElement.tagName == 'IFRAME') {
58					$.iframeTracker.focusRetriever.focus();
59					$.iframeTracker.focusRetrieved = true;
60				}
61			});
62			
63			// Special processing to make it work with my old friend IE8 (and older) ;)
64			if (this.isIE8AndOlder) {
65				// Blur doesn't works correctly on IE8-, so we need to trigger it manually
66				this.focusRetriever.blur(function(e){
67					e.stopPropagation();
68					e.preventDefault();
69					$.iframeTracker.windowLoseFocus(e);
70				});
71				
72				// Keep focus on window (fix bug IE8-, focusable elements)
73				$('body').click(function(e){ $(window).focus(); });
74				$('form').click(function(e){ e.stopPropagation(); });
75				
76				// Same thing for "post-DOMready" created forms (issue #6)
77				try {
78					$('body').on('click', 'form', function(e){ e.stopPropagation(); });
79				} catch(ex) {
80					console.log("[iframeTracker] Please update jQuery to 1.7 or newer. (exception: " + ex.message + ")");
81				}
82			}
83		},
84		
85		
86		// Add tracker to target using handler (bind boundary listener + register handler)
87		// target: Array of target elements (native DOM elements)
88		// handler: User handler object
89		track: function(target, handler){
90			// Adding target elements references into handler
91			handler.target = target;
92			
93			// Storing the new handler into handler list
94			$.iframeTracker.handlersList.push(handler);
95			
96			// Binding boundary listener
97			$(target)
98				.bind('mouseover', {handler: handler}, $.iframeTracker.mouseoverListener)
99				.bind('mouseout',  {handler: handler}, $.iframeTracker.mouseoutListener);
100		},
101		
102		// Remove tracking on target elements
103		// target: Array of target elements (native DOM elements)
104		untrack: function(target){
105			if (typeof Array.prototype.filter != "function") {
106				console.log("Your browser doesn't support Array filter, untrack disabled");
107				return;
108			}
109			
110			// Unbinding boundary listener
111			$(target).each(function(index){
112				$(this)
113					.unbind('mouseover', $.iframeTracker.mouseoverListener)
114					.unbind('mouseout', $.iframeTracker.mouseoutListener);
115			});
116			
117			// Handler garbage collector
118			var nullFilter = function(value){
119				return value === null ? false : true;
120			};
121			for (var i in this.handlersList) {
122				// Prune target
123				for (var j in this.handlersList[i].target) {
124					if ($.inArray(this.handlersList[i].target[j], target) !== -1) {
125						this.handlersList[i].target[j] = null;
126					}
127				}
128				this.handlersList[i].target = this.handlersList[i].target.filter(nullFilter);
129				
130				// Delete handler if unused
131				if (this.handlersList[i].target.length == 0) {
132					this.handlersList[i] = null;
133				}
134			}
135			this.handlersList = this.handlersList.filter(nullFilter);
136		},
137		
138		// Target mouseover event listener
139		mouseoverListener: function(e){
140			e.data.handler.over = true;
141			try {e.data.handler.overCallback(this);} catch(ex) {}
142		},
143		
144		// Target mouseout event listener
145		mouseoutListener: function(e){
146			e.data.handler.over = false;
147			$.iframeTracker.focusRetriever.focus();
148			try {e.data.handler.outCallback(this);} catch(ex) {}
149		},
150		
151		// Calls blurCallback for every handler with over=true on window blur
152		windowLoseFocus: function(event){
153			for (var i in this.handlersList) {
154				if (this.handlersList[i].over == true) {
155					try {this.handlersList[i].blurCallback();} catch(ex) {}
156				}
157			}
158		}
159	};
160	
161	// Init the iframeTracker on document ready
162	$(document).ready(function(){
163		$.iframeTracker.init();
164	});
165})(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.