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