PageSourceSearch

https://dailytarheel.com/wp-content/themes/snoflex/includes/superfish/js/hoverintent.js?ver=11.1.83

js dailytarheel.com collected 2026-09-24 08:40:19 UTC 4,938 bytes, 114 lines download raw bytes

vendor: 4,938 bytes, lines 1-114
1/**
2 * hoverIntent is similar to jQuery's built-in "hover" method except that
3 * instead of firing the handlerIn function immediately, hoverIntent checks
4 * to see if the user's mouse has slowed down (beneath the sensitivity
5 * threshold) before firing the event. The handlerOut function is only
6 * called after a matching handlerIn.
7 *
8 * hoverIntent r7 // 2013.03.11 // jQuery 1.9.1+
9 * http://cherne.net/brian/resources/jquery.hoverIntent.html
10 *
11 * You may use hoverIntent under the terms of the MIT license. Basically that
12 * means you are free to use hoverIntent as long as this header is left intact.
13 * Copyright 2007, 2013 Brian Cherne
14 *
15 * // basic usage ... just like .hover()
16 * .hoverIntent( handlerIn, handlerOut )
17 * .hoverIntent( handlerInOut )
18 *
19 * // basic usage ... with event delegation!
20 * .hoverIntent( handlerIn, handlerOut, selector )
21 * .hoverIntent( handlerInOut, selector )
22 *
23 * // using a basic configuration object
24 * .hoverIntent( config )
25 *
26 * @param  handlerIn   function OR configuration object
27 * @param  handlerOut  function OR selector for delegation OR undefined
28 * @param  selector    selector OR undefined
29 * @author Brian Cherne <brian(at)cherne(dot)net>
30 **/
31(function($) {
32    $.fn.hoverIntent = function(handlerIn,handlerOut,selector) {
33
34        // default configuration values
35        var cfg = {
36            interval: 100,
37            sensitivity: 7,
38            timeout: 0
39        };
40
41        if ( typeof handlerIn === "object" ) {
42            cfg = $.extend(cfg, handlerIn );
43        } else if ($.isFunction(handlerOut)) {
44            cfg = $.extend(cfg, { over: handlerIn, out: handlerOut, selector: selector } );
45        } else {
46            cfg = $.extend(cfg, { over: handlerIn, out: handlerIn, selector: handlerOut } );
47        }
48
49        // instantiate variables
50        // cX, cY = current X and Y position of mouse, updated by mousemove event
51        // pX, pY = previous X and Y position of mouse, set by mouseover and polling interval
52        var cX, cY, pX, pY;
53
54        // A private function for getting mouse position
55        var track = function(ev) {
56            cX = ev.pageX;
57            cY = ev.pageY;
58        };
59
60        // A private function for comparing current and previous mouse position
61        var compare = function(ev,ob) {
62            ob.hoverIntent_t = clearTimeout(ob.hoverIntent_t);
63            // compare mouse positions to see if they've crossed the threshold
64            if ( ( Math.abs(pX-cX) + Math.abs(pY-cY) ) < cfg.sensitivity ) {
65                $(ob).off("mousemove.hoverIntent",track);
66                // set hoverIntent state to true (so mouseOut can be called)
67                ob.hoverIntent_s = 1;
68                return cfg.over.apply(ob,[ev]);
69            } else {
70                // set previous coordinates for next time
71                pX = cX; pY = cY;
72                // use self-calling timeout, guarantees intervals are spaced out properly (avoids JavaScript timer bugs)
73                ob.hoverIntent_t = setTimeout( function(){compare(ev, ob);} , cfg.interval );
74            }
75        };
76
77        // A private function for delaying the mouseOut function
78        var delay = function(ev,ob) {
79            ob.hoverIntent_t = clearTimeout(ob.hoverIntent_t);
80            ob.hoverIntent_s = 0;
81            return cfg.out.apply(ob,[ev]);
82        };
83
84        // A private function for handling mouse 'hovering'
85        var handleHover = function(e) {
86            // copy objects to be passed into t (required for event object to be passed in IE)
87            var ev = jQuery.extend({},e);
88            var ob = this;
89
90            // cancel hoverIntent timer if it exists
91            if (ob.hoverIntent_t) { ob.hoverIntent_t = clearTimeout(ob.hoverIntent_t); }
92
93            // if e.type == "mouseenter"
94            if (e.type == "mouseenter") {
95                // set "previous" X and Y position based on initial entry point
96                pX = ev.pageX; pY = ev.pageY;
97                // update "current" X and Y position based on mousemove
98                $(ob).on("mousemove.hoverIntent",track);
99                // start polling interval (self-calling timeout) to compare mouse coordinates over time
100                if (ob.hoverIntent_s != 1) { ob.hoverIntent_t = setTimeout( function(){compare(ev,ob);} , cfg.interval );}
101
102                // else e.type == "mouseleave"
103            } else {
104                // unbind expensive mousemove event
105                $(ob).off("mousemove.hoverIntent",track);
106                // if hoverIntent state is true, then call the mouseOut function after the specified delay
107                if (ob.hoverIntent_s == 1) { ob.hoverIntent_t = setTimeout( function(){delay(ev,ob);} , cfg.timeout );}
108            }
109        };
110
111        // listen for mouseenter and mouseleave
112        return this.on({'mouseenter.hoverIntent':handleHover,'mouseleave.hoverIntent':handleHover}, cfg.selector);
113    };
114})(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.