jquery-hoverIntent-rails 0.0.11 → 1.8.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +7 -0
- data/README.md +7 -0
- data/lib/jquery-hoverIntent-rails.rb +1 -1
- data/lib/jquery-hoverIntent-rails/version.rb +1 -1
- data/vendor/assets/javascripts/jquery.hoverIntent.js +100 -62
- metadata +8 -11
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA1:
|
3
|
+
metadata.gz: 805785760419548d1f40e4c7b38d1c0f1652aa42
|
4
|
+
data.tar.gz: 8302fc7fcd1f6ef186ee68c7aeb0927aafb11b99
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: 5ccaf1efb90f9629e8d91b8b6048064353ba19de8437549b81cf162ffd88a4d055cdf203f33a476cec1daaba9ed4be48d55aa1e2e3c8d005815582ed7ea392e8
|
7
|
+
data.tar.gz: a0f371198c4d07184cd1f8573faba66095943fa74dee0dd3c1c8566891c4d4784a79e425808a0639bc2c6cff4b0c1a205aedf410635bba1cb82463fbc3601bd7
|
data/README.md
CHANGED
@@ -20,6 +20,13 @@ Or install it yourself as:
|
|
20
20
|
|
21
21
|
$ gem install jquery-hoverIntent-rails
|
22
22
|
|
23
|
+
Next, add the following line to your `application.js` file (after jQuery is included):
|
24
|
+
|
25
|
+
//= require jquery.hoverIntent
|
26
|
+
|
27
|
+
Restart your server, and you're good to go.
|
28
|
+
|
29
|
+
|
23
30
|
## What's included?
|
24
31
|
* jquery.hoverIntent.js
|
25
32
|
|
@@ -1,12 +1,12 @@
|
|
1
|
-
|
2
|
-
* hoverIntent
|
1
|
+
/*!
|
2
|
+
* hoverIntent v1.8.1 // 2014.08.11 // jQuery v1.9.1+
|
3
3
|
* http://cherne.net/brian/resources/jquery.hoverIntent.html
|
4
4
|
*
|
5
5
|
* You may use hoverIntent under the terms of the MIT license. Basically that
|
6
6
|
* means you are free to use hoverIntent as long as this header is left intact.
|
7
|
-
* Copyright 2007,
|
7
|
+
* Copyright 2007, 2014 Brian Cherne
|
8
8
|
*/
|
9
|
-
|
9
|
+
|
10
10
|
/* hoverIntent is similar to jQuery's built-in "hover" method except that
|
11
11
|
* instead of firing the handlerIn function immediately, hoverIntent checks
|
12
12
|
* to see if the user's mouse has slowed down (beneath the sensitivity
|
@@ -29,17 +29,68 @@
|
|
29
29
|
* @param selector selector OR undefined
|
30
30
|
* @author Brian Cherne <brian(at)cherne(dot)net>
|
31
31
|
*/
|
32
|
-
(function($) {
|
33
|
-
$.fn.hoverIntent = function(handlerIn,handlerOut,selector) {
|
34
32
|
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
33
|
+
(function(factory) {
|
34
|
+
'use strict';
|
35
|
+
if (typeof define === 'function' && define.amd) {
|
36
|
+
define(['jquery'], factory);
|
37
|
+
} else if (jQuery && !jQuery.fn.hoverIntent) {
|
38
|
+
factory(jQuery);
|
39
|
+
}
|
40
|
+
})(function($) {
|
41
|
+
'use strict';
|
42
|
+
|
43
|
+
// default configuration values
|
44
|
+
var _cfg = {
|
45
|
+
interval: 100,
|
46
|
+
sensitivity: 6,
|
47
|
+
timeout: 60
|
48
|
+
};
|
49
|
+
|
50
|
+
// counter used to generate an ID for each instance
|
51
|
+
var INSTANCE_COUNT = 0;
|
52
|
+
|
53
|
+
// current X and Y position of mouse, updated during mousemove tracking (shared across instances)
|
54
|
+
var cX, cY;
|
41
55
|
|
42
|
-
|
56
|
+
// saves the current pointer position coordinated based on the given mouse event
|
57
|
+
var track = function(ev) {
|
58
|
+
cX = ev.pageX;
|
59
|
+
cY = ev.pageY;
|
60
|
+
};
|
61
|
+
|
62
|
+
// compares current and previous mouse positions
|
63
|
+
var compare = function(ev,$el,s,cfg) {
|
64
|
+
// compare mouse positions to see if pointer has slowed enough to trigger `over` function
|
65
|
+
if ( Math.sqrt( (s.pX-cX)*(s.pX-cX) + (s.pY-cY)*(s.pY-cY) ) < cfg.sensitivity ) {
|
66
|
+
$el.off('mousemove.hoverIntent'+s.namespace,track);
|
67
|
+
delete s.timeoutId;
|
68
|
+
// set hoverIntent state as active for this element (so `out` handler can eventually be called)
|
69
|
+
s.isActive = true;
|
70
|
+
// clear coordinate data
|
71
|
+
delete s.pX; delete s.pY;
|
72
|
+
return cfg.over.apply($el[0],[ev]);
|
73
|
+
} else {
|
74
|
+
// set previous coordinates for next comparison
|
75
|
+
s.pX = cX; s.pY = cY;
|
76
|
+
// use self-calling timeout, guarantees intervals are spaced out properly (avoids JavaScript timer bugs)
|
77
|
+
s.timeoutId = setTimeout( function(){compare(ev, $el, s, cfg);} , cfg.interval );
|
78
|
+
}
|
79
|
+
};
|
80
|
+
|
81
|
+
// triggers given `out` function at configured `timeout` after a mouseleave and clears state
|
82
|
+
var delay = function(ev,$el,s,out) {
|
83
|
+
delete $el.data('hoverIntent')[s.id];
|
84
|
+
return out.apply($el[0],[ev]);
|
85
|
+
};
|
86
|
+
|
87
|
+
$.fn.hoverIntent = function(handlerIn,handlerOut,selector) {
|
88
|
+
// instance ID, used as a key to store and retrieve state information on an element
|
89
|
+
var instanceId = INSTANCE_COUNT++;
|
90
|
+
|
91
|
+
// extend the default configuration and parse parameters
|
92
|
+
var cfg = $.extend({}, _cfg);
|
93
|
+
if ( $.isPlainObject(handlerIn) ) {
|
43
94
|
cfg = $.extend(cfg, handlerIn );
|
44
95
|
} else if ($.isFunction(handlerOut)) {
|
45
96
|
cfg = $.extend(cfg, { over: handlerIn, out: handlerOut, selector: selector } );
|
@@ -47,69 +98,56 @@
|
|
47
98
|
cfg = $.extend(cfg, { over: handlerIn, out: handlerIn, selector: handlerOut } );
|
48
99
|
}
|
49
100
|
|
50
|
-
//
|
51
|
-
|
52
|
-
|
53
|
-
|
101
|
+
// A private function for handling mouse 'hovering'
|
102
|
+
var handleHover = function(e) {
|
103
|
+
// cloned event to pass to handlers (copy required for event object to be passed in IE)
|
104
|
+
var ev = $.extend({},e);
|
54
105
|
|
55
|
-
|
56
|
-
|
57
|
-
cX = ev.pageX;
|
58
|
-
cY = ev.pageY;
|
59
|
-
};
|
106
|
+
// the current target of the mouse event, wrapped in a jQuery object
|
107
|
+
var $el = $(this);
|
60
108
|
|
61
|
-
|
62
|
-
|
63
|
-
|
64
|
-
// compare mouse positions to see if they've crossed the threshold
|
65
|
-
if ( ( Math.abs(pX-cX) + Math.abs(pY-cY) ) < cfg.sensitivity ) {
|
66
|
-
$(ob).off("mousemove.hoverIntent",track);
|
67
|
-
// set hoverIntent state to true (so mouseOut can be called)
|
68
|
-
ob.hoverIntent_s = 1;
|
69
|
-
return cfg.over.apply(ob,[ev]);
|
70
|
-
} else {
|
71
|
-
// set previous coordinates for next time
|
72
|
-
pX = cX; pY = cY;
|
73
|
-
// use self-calling timeout, guarantees intervals are spaced out properly (avoids JavaScript timer bugs)
|
74
|
-
ob.hoverIntent_t = setTimeout( function(){compare(ev, ob);} , cfg.interval );
|
75
|
-
}
|
76
|
-
};
|
109
|
+
// read hoverIntent data from element (or initialize if not present)
|
110
|
+
var hoverIntentData = $el.data('hoverIntent');
|
111
|
+
if (!hoverIntentData) { $el.data('hoverIntent', (hoverIntentData = {})); }
|
77
112
|
|
78
|
-
|
79
|
-
|
80
|
-
|
81
|
-
ob.hoverIntent_s = 0;
|
82
|
-
return cfg.out.apply(ob,[ev]);
|
83
|
-
};
|
113
|
+
// read per-instance state from element (or initialize if not present)
|
114
|
+
var state = hoverIntentData[instanceId];
|
115
|
+
if (!state) { hoverIntentData[instanceId] = state = { id: instanceId }; }
|
84
116
|
|
85
|
-
|
86
|
-
|
87
|
-
//
|
88
|
-
|
89
|
-
|
117
|
+
// state properties:
|
118
|
+
// id = instance ID, used to clean up data
|
119
|
+
// timeoutId = timeout ID, reused for tracking mouse position and delaying "out" handler
|
120
|
+
// isActive = plugin state, true after `over` is called just until `out` is called
|
121
|
+
// pX, pY = previously-measured pointer coordinates, updated at each polling interval
|
122
|
+
// namespace = string used as namespace for per-instance event management
|
123
|
+
|
124
|
+
// clear any existing timeout
|
125
|
+
if (state.timeoutId) { state.timeoutId = clearTimeout(state.timeoutId); }
|
90
126
|
|
91
|
-
//
|
92
|
-
|
127
|
+
// event namespace, used to register and unregister mousemove tracking
|
128
|
+
var namespace = state.namespace = '.hoverIntent'+instanceId;
|
93
129
|
|
94
|
-
//
|
95
|
-
if (e.type
|
130
|
+
// handle the event, based on its type
|
131
|
+
if (e.type === 'mouseenter') {
|
132
|
+
// do nothing if already active
|
133
|
+
if (state.isActive) { return; }
|
96
134
|
// set "previous" X and Y position based on initial entry point
|
97
|
-
pX = ev.pageX; pY = ev.pageY;
|
135
|
+
state.pX = ev.pageX; state.pY = ev.pageY;
|
98
136
|
// update "current" X and Y position based on mousemove
|
99
|
-
$
|
137
|
+
$el.on('mousemove.hoverIntent'+namespace,track);
|
100
138
|
// start polling interval (self-calling timeout) to compare mouse coordinates over time
|
101
|
-
|
102
|
-
|
103
|
-
//
|
104
|
-
|
139
|
+
state.timeoutId = setTimeout( function(){compare(ev,$el,state,cfg);} , cfg.interval );
|
140
|
+
} else { // "mouseleave"
|
141
|
+
// do nothing if not already active
|
142
|
+
if (!state.isActive) { return; }
|
105
143
|
// unbind expensive mousemove event
|
106
|
-
$
|
144
|
+
$el.off('mousemove.hoverIntent'+namespace,track);
|
107
145
|
// if hoverIntent state is true, then call the mouseOut function after the specified delay
|
108
|
-
|
146
|
+
state.timeoutId = setTimeout( function(){delay(ev,$el,state,cfg.out);} , cfg.timeout );
|
109
147
|
}
|
110
148
|
};
|
111
149
|
|
112
150
|
// listen for mouseenter and mouseleave
|
113
151
|
return this.on({'mouseenter.hoverIntent':handleHover,'mouseleave.hoverIntent':handleHover}, cfg.selector);
|
114
152
|
};
|
115
|
-
})
|
153
|
+
});
|
metadata
CHANGED
@@ -1,15 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: jquery-hoverIntent-rails
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version:
|
5
|
-
prerelease:
|
4
|
+
version: 1.8.1
|
6
5
|
platform: ruby
|
7
6
|
authors:
|
8
7
|
- Alrick Deillon
|
9
8
|
autorequire:
|
10
9
|
bindir: bin
|
11
10
|
cert_chain: []
|
12
|
-
date:
|
11
|
+
date: 2015-11-02 00:00:00.000000000 Z
|
13
12
|
dependencies: []
|
14
13
|
description: A wrapper for jquery hoverIntent plugin
|
15
14
|
email:
|
@@ -18,7 +17,7 @@ executables: []
|
|
18
17
|
extensions: []
|
19
18
|
extra_rdoc_files: []
|
20
19
|
files:
|
21
|
-
- .gitignore
|
20
|
+
- ".gitignore"
|
22
21
|
- Gemfile
|
23
22
|
- LICENSE
|
24
23
|
- README.md
|
@@ -30,27 +29,25 @@ files:
|
|
30
29
|
homepage: https://github.com/alrick/jquery-hoverIntent-rails
|
31
30
|
licenses:
|
32
31
|
- MIT
|
32
|
+
metadata: {}
|
33
33
|
post_install_message:
|
34
34
|
rdoc_options: []
|
35
35
|
require_paths:
|
36
36
|
- lib
|
37
37
|
required_ruby_version: !ruby/object:Gem::Requirement
|
38
|
-
none: false
|
39
38
|
requirements:
|
40
|
-
- -
|
39
|
+
- - ">="
|
41
40
|
- !ruby/object:Gem::Version
|
42
41
|
version: '0'
|
43
42
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
44
|
-
none: false
|
45
43
|
requirements:
|
46
|
-
- -
|
44
|
+
- - ">="
|
47
45
|
- !ruby/object:Gem::Version
|
48
46
|
version: '0'
|
49
47
|
requirements: []
|
50
48
|
rubyforge_project:
|
51
|
-
rubygems_version:
|
49
|
+
rubygems_version: 2.4.5
|
52
50
|
signing_key:
|
53
|
-
specification_version:
|
51
|
+
specification_version: 4
|
54
52
|
summary: Jquery Hover improved
|
55
53
|
test_files: []
|
56
|
-
has_rdoc:
|