unpoly-rails 0.32.0 → 0.33.0

Sign up to get free protection for your applications and to get access to all the features.

Potentially problematic release.


This version of unpoly-rails might be problematic. Click here for more details.

Files changed (232) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +106 -76
  3. data/README.md +8 -5
  4. data/README_RAILS.md +1 -1
  5. data/design/test_rejected_promise.txt +5 -0
  6. data/dist/unpoly-bootstrap3.js +1 -1
  7. data/dist/unpoly-bootstrap3.min.js +1 -1
  8. data/dist/unpoly.js +814 -417
  9. data/dist/unpoly.min.js +3 -3
  10. data/lib/assets/javascripts/unpoly/{browser.js.coffee → browser.coffee} +15 -6
  11. data/lib/assets/javascripts/unpoly/{bus.js.coffee → bus.coffee} +13 -13
  12. data/lib/assets/javascripts/unpoly/dom/extract_cascade.coffee +73 -0
  13. data/lib/assets/javascripts/unpoly/dom/extract_plan.coffee +65 -0
  14. data/lib/assets/javascripts/unpoly/{flow.js.coffee → dom.coffee} +109 -114
  15. data/lib/assets/javascripts/unpoly/{navigation.js.coffee → feedback.coffee} +11 -11
  16. data/lib/assets/javascripts/unpoly/{form.js.coffee → form.coffee} +35 -24
  17. data/lib/assets/javascripts/unpoly/{history.js.coffee → history.coffee} +9 -10
  18. data/lib/assets/javascripts/unpoly/{layout.js.coffee → layout.coffee} +53 -21
  19. data/lib/assets/javascripts/unpoly/{link.js.coffee → link.coffee} +46 -40
  20. data/lib/assets/javascripts/unpoly/{log.js.coffee → log.coffee} +2 -2
  21. data/lib/assets/javascripts/unpoly/{modal.js.coffee → modal.coffee} +17 -14
  22. data/lib/assets/javascripts/unpoly/{motion.js.coffee → motion.coffee} +28 -31
  23. data/lib/assets/javascripts/unpoly/namespace.coffee.erb +10 -0
  24. data/lib/assets/javascripts/unpoly/{popup.js.coffee → popup.coffee} +22 -10
  25. data/lib/assets/javascripts/unpoly/{proxy.js.coffee → proxy.coffee} +34 -12
  26. data/lib/assets/javascripts/unpoly/{rails.js.coffee → rails.coffee} +0 -0
  27. data/lib/assets/javascripts/unpoly/{syntax.js.coffee → syntax.coffee} +32 -21
  28. data/lib/assets/javascripts/unpoly/{toast.js.coffee → toast.coffee} +0 -0
  29. data/lib/assets/javascripts/unpoly/{tooltip.js.coffee → tooltip.coffee} +2 -2
  30. data/lib/assets/javascripts/unpoly/{util.js.coffee → util.coffee} +122 -35
  31. data/lib/assets/javascripts/unpoly-bootstrap3/{form-ext.js.coffee → form-ext.coffee} +0 -0
  32. data/lib/assets/javascripts/unpoly-bootstrap3/{layout-ext.js.coffee → layout-ext.coffee} +0 -0
  33. data/lib/assets/javascripts/unpoly-bootstrap3/{modal-ext.js.coffee → modal-ext.coffee} +0 -0
  34. data/lib/assets/javascripts/unpoly-bootstrap3/{navigation-ext.js.coffee → navigation-ext.coffee} +1 -1
  35. data/lib/assets/javascripts/{unpoly-bootstrap3.js.coffee → unpoly-bootstrap3.coffee} +0 -0
  36. data/lib/assets/javascripts/unpoly.coffee +22 -0
  37. data/lib/assets/stylesheets/unpoly/{close.css.sass → close.sass} +0 -0
  38. data/lib/assets/stylesheets/unpoly/{flow.css.sass → flow.sass} +0 -0
  39. data/lib/assets/stylesheets/unpoly/{link.css.sass → link.sass} +0 -0
  40. data/lib/assets/stylesheets/unpoly/{modal.css.sass → modal.sass} +0 -0
  41. data/lib/assets/stylesheets/unpoly/{popup.css.sass → popup.sass} +0 -0
  42. data/lib/assets/stylesheets/unpoly/{toast.css.sass → toast.sass} +0 -0
  43. data/lib/assets/stylesheets/unpoly/{tooltip.css.sass → tooltip.sass} +0 -0
  44. data/lib/assets/stylesheets/unpoly-bootstrap3/{modal-ext.css.sass → modal-ext.sass} +0 -0
  45. data/lib/assets/stylesheets/{unpoly-bootstrap3.css.sass → unpoly-bootstrap3.sass} +0 -0
  46. data/lib/assets/stylesheets/{unpoly.css.sass → unpoly.sass} +0 -0
  47. data/lib/unpoly/rails/version.rb +1 -1
  48. data/package.json +1 -1
  49. data/spec_app/Gemfile.lock +11 -13
  50. data/spec_app/app/assets/javascripts/jasmine_specs.coffee +1 -1
  51. data/spec_app/app/assets/stylesheets/_helpers.sass +1 -1
  52. data/spec_app/config/initializers/assets.rb +1 -5
  53. data/spec_app/spec/javascripts/up/{flow_spec.js.coffee → dom_spec.js.coffee} +294 -44
  54. data/spec_app/spec/javascripts/up/{navigation_spec.js.coffee → feedback_spec.js.coffee} +2 -2
  55. data/spec_app/spec/javascripts/up/form_spec.js.coffee +1 -0
  56. data/spec_app/spec/javascripts/up/layout_spec.js.coffee +10 -0
  57. data/spec_app/spec/javascripts/up/link_spec.js.coffee +28 -0
  58. data/spec_app/spec/javascripts/up/modal_spec.js.coffee +46 -9
  59. data/spec_app/spec/javascripts/up/motion_spec.js.coffee +32 -2
  60. data/spec_app/spec/javascripts/up/popup_spec.js.coffee +5 -4
  61. data/spec_app/spec/javascripts/up/util_spec.js.coffee +75 -0
  62. data/spec_app/vendor/{assets/bower_components/jasmine-ajax → asset-libs/jasmine-ajax-3.3.1}/.bower.json +0 -0
  63. data/spec_app/vendor/asset-libs/jasmine-ajax-3.3.1/.gitignore +6 -0
  64. data/spec_app/vendor/asset-libs/jasmine-ajax-3.3.1/.npmignore +10 -0
  65. data/spec_app/vendor/asset-libs/jasmine-ajax-3.3.1/.pairs +6 -0
  66. data/spec_app/vendor/asset-libs/jasmine-ajax-3.3.1/.travis.yml +56 -0
  67. data/spec_app/vendor/{assets/bower_components/jasmine-ajax/lib/mock-ajax.js → asset-libs/jasmine-ajax-3.3.1/jasmine-ajax.js} +83 -26
  68. data/spec_app/vendor/{assets/bower_components/jasmine-fixture/dist → asset-libs/jasmine-fixture-1.3.4}/jasmine-fixture.js +13 -13
  69. data/spec_app/vendor/{assets/bower_components/jasmine-jquery → asset-libs/jasmine-jquery-2.1.1}/.bower.json +0 -0
  70. data/spec_app/vendor/{assets/bower_components/jasmine-jquery/lib → asset-libs/jasmine-jquery-2.1.1}/jasmine-jquery.js +0 -0
  71. data/spec_app/vendor/assets/{javascripts/.keep → .keep} +0 -0
  72. metadata +52 -203
  73. data/lib/assets/javascripts/unpoly/module.js.coffee.erb +0 -8
  74. data/lib/assets/javascripts/unpoly.js.coffee +0 -21
  75. data/spec_app/Bowerfile +0 -3
  76. data/spec_app/vendor/assets/.bowerrc +0 -3
  77. data/spec_app/vendor/assets/bower.json +0 -8
  78. data/spec_app/vendor/assets/bower_components/jasmine/.bower.json +0 -50
  79. data/spec_app/vendor/assets/bower_components/jasmine/CONTRIBUTING.md +0 -130
  80. data/spec_app/vendor/assets/bower_components/jasmine/GOALS_2.0.md +0 -64
  81. data/spec_app/vendor/assets/bower_components/jasmine/MANIFEST.in +0 -5
  82. data/spec_app/vendor/assets/bower_components/jasmine/MIT.LICENSE +0 -20
  83. data/spec_app/vendor/assets/bower_components/jasmine/README.md +0 -73
  84. data/spec_app/vendor/assets/bower_components/jasmine/RELEASE.md +0 -73
  85. data/spec_app/vendor/assets/bower_components/jasmine/bower.json +0 -41
  86. data/spec_app/vendor/assets/bower_components/jasmine/images/jasmine-horizontal.png +0 -0
  87. data/spec_app/vendor/assets/bower_components/jasmine/images/jasmine-horizontal.svg +0 -102
  88. data/spec_app/vendor/assets/bower_components/jasmine/images/jasmine_favicon.png +0 -0
  89. data/spec_app/vendor/assets/bower_components/jasmine/lib/console/console.js +0 -190
  90. data/spec_app/vendor/assets/bower_components/jasmine/lib/jasmine-core/boot.js +0 -143
  91. data/spec_app/vendor/assets/bower_components/jasmine/lib/jasmine-core/example/node_example/lib/jasmine_examples/Player.js +0 -24
  92. data/spec_app/vendor/assets/bower_components/jasmine/lib/jasmine-core/example/node_example/lib/jasmine_examples/Song.js +0 -9
  93. data/spec_app/vendor/assets/bower_components/jasmine/lib/jasmine-core/jasmine-html.js +0 -446
  94. data/spec_app/vendor/assets/bower_components/jasmine/lib/jasmine-core/jasmine.css +0 -58
  95. data/spec_app/vendor/assets/bower_components/jasmine/lib/jasmine-core/jasmine.js +0 -3298
  96. data/spec_app/vendor/assets/bower_components/jasmine/lib/jasmine-core/json2.js +0 -489
  97. data/spec_app/vendor/assets/bower_components/jasmine/lib/jasmine-core/node_boot.js +0 -41
  98. data/spec_app/vendor/assets/bower_components/jasmine/lib/jasmine-core.js +0 -37
  99. data/spec_app/vendor/assets/bower_components/jasmine/package.json +0 -34
  100. data/spec_app/vendor/assets/bower_components/jasmine/requirements.txt +0 -1
  101. data/spec_app/vendor/assets/bower_components/jasmine-ajax/MIT.LICENSE +0 -20
  102. data/spec_app/vendor/assets/bower_components/jasmine-ajax/README.markdown +0 -289
  103. data/spec_app/vendor/assets/bower_components/jasmine-ajax/bower.json +0 -35
  104. data/spec_app/vendor/assets/bower_components/jasmine-ajax/package.json +0 -26
  105. data/spec_app/vendor/assets/bower_components/jasmine-ajax/release_notes/2.0.2.md +0 -50
  106. data/spec_app/vendor/assets/bower_components/jasmine-ajax/release_notes/2.99.md +0 -14
  107. data/spec_app/vendor/assets/bower_components/jasmine-ajax/release_notes/3.0.md +0 -28
  108. data/spec_app/vendor/assets/bower_components/jasmine-ajax/release_notes/3.1.0.md +0 -24
  109. data/spec_app/vendor/assets/bower_components/jasmine-ajax/release_notes/3.1.1.md +0 -23
  110. data/spec_app/vendor/assets/bower_components/jasmine-ajax/release_notes/3.2.0.md +0 -20
  111. data/spec_app/vendor/assets/bower_components/jasmine-fixture/.bower.json +0 -27
  112. data/spec_app/vendor/assets/bower_components/jasmine-fixture/.gitignore +0 -8
  113. data/spec_app/vendor/assets/bower_components/jasmine-fixture/.npmignore +0 -8
  114. data/spec_app/vendor/assets/bower_components/jasmine-fixture/LICENSE.txt +0 -24
  115. data/spec_app/vendor/assets/bower_components/jasmine-fixture/README.md +0 -118
  116. data/spec_app/vendor/assets/bower_components/jasmine-fixture/bower.json +0 -17
  117. data/spec_app/vendor/assets/bower_components/jasmine-fixture/dist/jasmine-fixture.min.js +0 -5
  118. data/spec_app/vendor/assets/bower_components/jasmine-fixture/spec-e2e/basic-usage-spec.coffee +0 -14
  119. data/spec_app/vendor/assets/bower_components/jasmine-fixture/spec-e2e/helpers/invariants.coffee +0 -17
  120. data/spec_app/vendor/assets/bower_components/jasmine-fixture/spec-e2e/helpers/spec-within-a-spec.coffee +0 -24
  121. data/spec_app/vendor/assets/bower_components/jasmine-fixture/spec-e2e/helpers/tmp-files.coffee +0 -8
  122. data/spec_app/vendor/assets/bower_components/jasmine-fixture/spec-e2e/support/jasmine1-testem-config.json +0 -11
  123. data/spec_app/vendor/assets/bower_components/jasmine-fixture/spec-e2e/support/jasmine2-testem-config.json +0 -11
  124. data/spec_app/vendor/assets/bower_components/jasmine-fixture/vendor/js/jquery-1.11.0.js +0 -10337
  125. data/spec_app/vendor/assets/bower_components/jasmine-fixture/vendor/js/jquery-1.8.3.js +0 -9472
  126. data/spec_app/vendor/assets/bower_components/jasmine-fixture/vendor/js/jquery-2.1.0.js +0 -9111
  127. data/spec_app/vendor/assets/bower_components/jasmine-jquery/CONTRIBUTING.md +0 -28
  128. data/spec_app/vendor/assets/bower_components/jasmine-jquery/Gruntfile.js +0 -49
  129. data/spec_app/vendor/assets/bower_components/jasmine-jquery/LICENSE +0 -20
  130. data/spec_app/vendor/assets/bower_components/jasmine-jquery/README.md +0 -367
  131. data/spec_app/vendor/assets/bower_components/jasmine-jquery/bower.json +0 -15
  132. data/spec_app/vendor/assets/bower_components/jasmine-jquery/package.json +0 -35
  133. data/spec_app/vendor/assets/bower_components/jasmine-jquery/spec/fixtures/fixture_with_checkbox_with_checked.html +0 -6
  134. data/spec_app/vendor/assets/bower_components/jasmine-jquery/spec/fixtures/fixture_with_javascript.html +0 -1
  135. data/spec_app/vendor/assets/bower_components/jasmine-jquery/spec/fixtures/fixture_with_javascript_block.html +0 -1
  136. data/spec_app/vendor/assets/bower_components/jasmine-jquery/spec/fixtures/javascripts/jasmine_javascript_click.js +0 -1
  137. data/spec_app/vendor/assets/bower_components/jasmine-jquery/spec/fixtures/javascripts/jasmine_javascript_hover.js +0 -1
  138. data/spec_app/vendor/assets/bower_components/jasmine-jquery/spec/fixtures/json/jasmine_json_test.json +0 -1
  139. data/spec_app/vendor/assets/bower_components/jasmine-jquery/spec/fixtures/real_non_mocked_fixture.html +0 -1
  140. data/spec_app/vendor/assets/bower_components/jasmine-jquery/spec/fixtures/real_non_mocked_fixture_style.css +0 -1
  141. data/spec_app/vendor/assets/bower_components/jasmine-jquery/spec/suites/jasmine-jquery-spec.js +0 -1842
  142. data/spec_app/vendor/assets/bower_components/jquery/.bower.json +0 -38
  143. data/spec_app/vendor/assets/bower_components/jquery/MIT-LICENSE.txt +0 -21
  144. data/spec_app/vendor/assets/bower_components/jquery/bower.json +0 -28
  145. data/spec_app/vendor/assets/bower_components/jquery/dist/jquery.js +0 -9210
  146. data/spec_app/vendor/assets/bower_components/jquery/dist/jquery.min.js +0 -5
  147. data/spec_app/vendor/assets/bower_components/jquery/dist/jquery.min.map +0 -1
  148. data/spec_app/vendor/assets/bower_components/jquery/src/ajax/jsonp.js +0 -89
  149. data/spec_app/vendor/assets/bower_components/jquery/src/ajax/load.js +0 -75
  150. data/spec_app/vendor/assets/bower_components/jquery/src/ajax/parseJSON.js +0 -13
  151. data/spec_app/vendor/assets/bower_components/jquery/src/ajax/parseXML.js +0 -28
  152. data/spec_app/vendor/assets/bower_components/jquery/src/ajax/script.js +0 -64
  153. data/spec_app/vendor/assets/bower_components/jquery/src/ajax/var/nonce.js +0 -5
  154. data/spec_app/vendor/assets/bower_components/jquery/src/ajax/var/rquery.js +0 -3
  155. data/spec_app/vendor/assets/bower_components/jquery/src/ajax/xhr.js +0 -136
  156. data/spec_app/vendor/assets/bower_components/jquery/src/ajax.js +0 -786
  157. data/spec_app/vendor/assets/bower_components/jquery/src/attributes/attr.js +0 -141
  158. data/spec_app/vendor/assets/bower_components/jquery/src/attributes/classes.js +0 -158
  159. data/spec_app/vendor/assets/bower_components/jquery/src/attributes/prop.js +0 -94
  160. data/spec_app/vendor/assets/bower_components/jquery/src/attributes/support.js +0 -35
  161. data/spec_app/vendor/assets/bower_components/jquery/src/attributes/val.js +0 -161
  162. data/spec_app/vendor/assets/bower_components/jquery/src/attributes.js +0 -11
  163. data/spec_app/vendor/assets/bower_components/jquery/src/callbacks.js +0 -205
  164. data/spec_app/vendor/assets/bower_components/jquery/src/core/access.js +0 -60
  165. data/spec_app/vendor/assets/bower_components/jquery/src/core/init.js +0 -123
  166. data/spec_app/vendor/assets/bower_components/jquery/src/core/parseHTML.js +0 -39
  167. data/spec_app/vendor/assets/bower_components/jquery/src/core/ready.js +0 -97
  168. data/spec_app/vendor/assets/bower_components/jquery/src/core/var/rsingleTag.js +0 -4
  169. data/spec_app/vendor/assets/bower_components/jquery/src/core.js +0 -502
  170. data/spec_app/vendor/assets/bower_components/jquery/src/css/addGetHookIf.js +0 -22
  171. data/spec_app/vendor/assets/bower_components/jquery/src/css/curCSS.js +0 -57
  172. data/spec_app/vendor/assets/bower_components/jquery/src/css/defaultDisplay.js +0 -70
  173. data/spec_app/vendor/assets/bower_components/jquery/src/css/hiddenVisibleSelectors.js +0 -15
  174. data/spec_app/vendor/assets/bower_components/jquery/src/css/support.js +0 -96
  175. data/spec_app/vendor/assets/bower_components/jquery/src/css/swap.js +0 -28
  176. data/spec_app/vendor/assets/bower_components/jquery/src/css/var/cssExpand.js +0 -3
  177. data/spec_app/vendor/assets/bower_components/jquery/src/css/var/getStyles.js +0 -12
  178. data/spec_app/vendor/assets/bower_components/jquery/src/css/var/isHidden.js +0 -13
  179. data/spec_app/vendor/assets/bower_components/jquery/src/css/var/rmargin.js +0 -3
  180. data/spec_app/vendor/assets/bower_components/jquery/src/css/var/rnumnonpx.js +0 -5
  181. data/spec_app/vendor/assets/bower_components/jquery/src/css.js +0 -450
  182. data/spec_app/vendor/assets/bower_components/jquery/src/data/Data.js +0 -181
  183. data/spec_app/vendor/assets/bower_components/jquery/src/data/accepts.js +0 -20
  184. data/spec_app/vendor/assets/bower_components/jquery/src/data/var/data_priv.js +0 -5
  185. data/spec_app/vendor/assets/bower_components/jquery/src/data/var/data_user.js +0 -5
  186. data/spec_app/vendor/assets/bower_components/jquery/src/data.js +0 -178
  187. data/spec_app/vendor/assets/bower_components/jquery/src/deferred.js +0 -149
  188. data/spec_app/vendor/assets/bower_components/jquery/src/deprecated.js +0 -13
  189. data/spec_app/vendor/assets/bower_components/jquery/src/dimensions.js +0 -50
  190. data/spec_app/vendor/assets/bower_components/jquery/src/effects/Tween.js +0 -114
  191. data/spec_app/vendor/assets/bower_components/jquery/src/effects/animatedSelector.js +0 -13
  192. data/spec_app/vendor/assets/bower_components/jquery/src/effects.js +0 -648
  193. data/spec_app/vendor/assets/bower_components/jquery/src/event/ajax.js +0 -13
  194. data/spec_app/vendor/assets/bower_components/jquery/src/event/alias.js +0 -39
  195. data/spec_app/vendor/assets/bower_components/jquery/src/event/support.js +0 -9
  196. data/spec_app/vendor/assets/bower_components/jquery/src/event.js +0 -868
  197. data/spec_app/vendor/assets/bower_components/jquery/src/exports/amd.js +0 -24
  198. data/spec_app/vendor/assets/bower_components/jquery/src/exports/global.js +0 -32
  199. data/spec_app/vendor/assets/bower_components/jquery/src/intro.js +0 -44
  200. data/spec_app/vendor/assets/bower_components/jquery/src/jquery.js +0 -37
  201. data/spec_app/vendor/assets/bower_components/jquery/src/manipulation/_evalUrl.js +0 -18
  202. data/spec_app/vendor/assets/bower_components/jquery/src/manipulation/support.js +0 -32
  203. data/spec_app/vendor/assets/bower_components/jquery/src/manipulation/var/rcheckableType.js +0 -3
  204. data/spec_app/vendor/assets/bower_components/jquery/src/manipulation.js +0 -580
  205. data/spec_app/vendor/assets/bower_components/jquery/src/offset.js +0 -207
  206. data/spec_app/vendor/assets/bower_components/jquery/src/outro.js +0 -1
  207. data/spec_app/vendor/assets/bower_components/jquery/src/queue/delay.js +0 -22
  208. data/spec_app/vendor/assets/bower_components/jquery/src/queue.js +0 -142
  209. data/spec_app/vendor/assets/bower_components/jquery/src/selector-native.js +0 -172
  210. data/spec_app/vendor/assets/bower_components/jquery/src/selector-sizzle.js +0 -14
  211. data/spec_app/vendor/assets/bower_components/jquery/src/selector.js +0 -1
  212. data/spec_app/vendor/assets/bower_components/jquery/src/serialize.js +0 -111
  213. data/spec_app/vendor/assets/bower_components/jquery/src/sizzle/dist/sizzle.js +0 -2067
  214. data/spec_app/vendor/assets/bower_components/jquery/src/sizzle/dist/sizzle.min.js +0 -3
  215. data/spec_app/vendor/assets/bower_components/jquery/src/sizzle/dist/sizzle.min.map +0 -1
  216. data/spec_app/vendor/assets/bower_components/jquery/src/traversing/findFilter.js +0 -100
  217. data/spec_app/vendor/assets/bower_components/jquery/src/traversing/var/rneedsContext.js +0 -6
  218. data/spec_app/vendor/assets/bower_components/jquery/src/traversing.js +0 -199
  219. data/spec_app/vendor/assets/bower_components/jquery/src/var/arr.js +0 -3
  220. data/spec_app/vendor/assets/bower_components/jquery/src/var/class2type.js +0 -4
  221. data/spec_app/vendor/assets/bower_components/jquery/src/var/concat.js +0 -5
  222. data/spec_app/vendor/assets/bower_components/jquery/src/var/hasOwn.js +0 -5
  223. data/spec_app/vendor/assets/bower_components/jquery/src/var/indexOf.js +0 -5
  224. data/spec_app/vendor/assets/bower_components/jquery/src/var/pnum.js +0 -3
  225. data/spec_app/vendor/assets/bower_components/jquery/src/var/push.js +0 -5
  226. data/spec_app/vendor/assets/bower_components/jquery/src/var/rnotwhite.js +0 -3
  227. data/spec_app/vendor/assets/bower_components/jquery/src/var/slice.js +0 -5
  228. data/spec_app/vendor/assets/bower_components/jquery/src/var/strundefined.js +0 -3
  229. data/spec_app/vendor/assets/bower_components/jquery/src/var/support.js +0 -4
  230. data/spec_app/vendor/assets/bower_components/jquery/src/var/toString.js +0 -5
  231. data/spec_app/vendor/assets/bower_components/jquery/src/wrap.js +0 -79
  232. data/spec_app/vendor/assets/stylesheets/.keep +0 -0
@@ -1,868 +0,0 @@
1
- define([
2
- "./core",
3
- "./var/strundefined",
4
- "./var/rnotwhite",
5
- "./var/hasOwn",
6
- "./var/slice",
7
- "./event/support",
8
- "./data/var/data_priv",
9
-
10
- "./core/init",
11
- "./data/accepts",
12
- "./selector"
13
- ], function( jQuery, strundefined, rnotwhite, hasOwn, slice, support, data_priv ) {
14
-
15
- var
16
- rkeyEvent = /^key/,
17
- rmouseEvent = /^(?:mouse|pointer|contextmenu)|click/,
18
- rfocusMorph = /^(?:focusinfocus|focusoutblur)$/,
19
- rtypenamespace = /^([^.]*)(?:\.(.+)|)$/;
20
-
21
- function returnTrue() {
22
- return true;
23
- }
24
-
25
- function returnFalse() {
26
- return false;
27
- }
28
-
29
- function safeActiveElement() {
30
- try {
31
- return document.activeElement;
32
- } catch ( err ) { }
33
- }
34
-
35
- /*
36
- * Helper functions for managing events -- not part of the public interface.
37
- * Props to Dean Edwards' addEvent library for many of the ideas.
38
- */
39
- jQuery.event = {
40
-
41
- global: {},
42
-
43
- add: function( elem, types, handler, data, selector ) {
44
-
45
- var handleObjIn, eventHandle, tmp,
46
- events, t, handleObj,
47
- special, handlers, type, namespaces, origType,
48
- elemData = data_priv.get( elem );
49
-
50
- // Don't attach events to noData or text/comment nodes (but allow plain objects)
51
- if ( !elemData ) {
52
- return;
53
- }
54
-
55
- // Caller can pass in an object of custom data in lieu of the handler
56
- if ( handler.handler ) {
57
- handleObjIn = handler;
58
- handler = handleObjIn.handler;
59
- selector = handleObjIn.selector;
60
- }
61
-
62
- // Make sure that the handler has a unique ID, used to find/remove it later
63
- if ( !handler.guid ) {
64
- handler.guid = jQuery.guid++;
65
- }
66
-
67
- // Init the element's event structure and main handler, if this is the first
68
- if ( !(events = elemData.events) ) {
69
- events = elemData.events = {};
70
- }
71
- if ( !(eventHandle = elemData.handle) ) {
72
- eventHandle = elemData.handle = function( e ) {
73
- // Discard the second event of a jQuery.event.trigger() and
74
- // when an event is called after a page has unloaded
75
- return typeof jQuery !== strundefined && jQuery.event.triggered !== e.type ?
76
- jQuery.event.dispatch.apply( elem, arguments ) : undefined;
77
- };
78
- }
79
-
80
- // Handle multiple events separated by a space
81
- types = ( types || "" ).match( rnotwhite ) || [ "" ];
82
- t = types.length;
83
- while ( t-- ) {
84
- tmp = rtypenamespace.exec( types[t] ) || [];
85
- type = origType = tmp[1];
86
- namespaces = ( tmp[2] || "" ).split( "." ).sort();
87
-
88
- // There *must* be a type, no attaching namespace-only handlers
89
- if ( !type ) {
90
- continue;
91
- }
92
-
93
- // If event changes its type, use the special event handlers for the changed type
94
- special = jQuery.event.special[ type ] || {};
95
-
96
- // If selector defined, determine special event api type, otherwise given type
97
- type = ( selector ? special.delegateType : special.bindType ) || type;
98
-
99
- // Update special based on newly reset type
100
- special = jQuery.event.special[ type ] || {};
101
-
102
- // handleObj is passed to all event handlers
103
- handleObj = jQuery.extend({
104
- type: type,
105
- origType: origType,
106
- data: data,
107
- handler: handler,
108
- guid: handler.guid,
109
- selector: selector,
110
- needsContext: selector && jQuery.expr.match.needsContext.test( selector ),
111
- namespace: namespaces.join(".")
112
- }, handleObjIn );
113
-
114
- // Init the event handler queue if we're the first
115
- if ( !(handlers = events[ type ]) ) {
116
- handlers = events[ type ] = [];
117
- handlers.delegateCount = 0;
118
-
119
- // Only use addEventListener if the special events handler returns false
120
- if ( !special.setup || special.setup.call( elem, data, namespaces, eventHandle ) === false ) {
121
- if ( elem.addEventListener ) {
122
- elem.addEventListener( type, eventHandle, false );
123
- }
124
- }
125
- }
126
-
127
- if ( special.add ) {
128
- special.add.call( elem, handleObj );
129
-
130
- if ( !handleObj.handler.guid ) {
131
- handleObj.handler.guid = handler.guid;
132
- }
133
- }
134
-
135
- // Add to the element's handler list, delegates in front
136
- if ( selector ) {
137
- handlers.splice( handlers.delegateCount++, 0, handleObj );
138
- } else {
139
- handlers.push( handleObj );
140
- }
141
-
142
- // Keep track of which events have ever been used, for event optimization
143
- jQuery.event.global[ type ] = true;
144
- }
145
-
146
- },
147
-
148
- // Detach an event or set of events from an element
149
- remove: function( elem, types, handler, selector, mappedTypes ) {
150
-
151
- var j, origCount, tmp,
152
- events, t, handleObj,
153
- special, handlers, type, namespaces, origType,
154
- elemData = data_priv.hasData( elem ) && data_priv.get( elem );
155
-
156
- if ( !elemData || !(events = elemData.events) ) {
157
- return;
158
- }
159
-
160
- // Once for each type.namespace in types; type may be omitted
161
- types = ( types || "" ).match( rnotwhite ) || [ "" ];
162
- t = types.length;
163
- while ( t-- ) {
164
- tmp = rtypenamespace.exec( types[t] ) || [];
165
- type = origType = tmp[1];
166
- namespaces = ( tmp[2] || "" ).split( "." ).sort();
167
-
168
- // Unbind all events (on this namespace, if provided) for the element
169
- if ( !type ) {
170
- for ( type in events ) {
171
- jQuery.event.remove( elem, type + types[ t ], handler, selector, true );
172
- }
173
- continue;
174
- }
175
-
176
- special = jQuery.event.special[ type ] || {};
177
- type = ( selector ? special.delegateType : special.bindType ) || type;
178
- handlers = events[ type ] || [];
179
- tmp = tmp[2] && new RegExp( "(^|\\.)" + namespaces.join("\\.(?:.*\\.|)") + "(\\.|$)" );
180
-
181
- // Remove matching events
182
- origCount = j = handlers.length;
183
- while ( j-- ) {
184
- handleObj = handlers[ j ];
185
-
186
- if ( ( mappedTypes || origType === handleObj.origType ) &&
187
- ( !handler || handler.guid === handleObj.guid ) &&
188
- ( !tmp || tmp.test( handleObj.namespace ) ) &&
189
- ( !selector || selector === handleObj.selector || selector === "**" && handleObj.selector ) ) {
190
- handlers.splice( j, 1 );
191
-
192
- if ( handleObj.selector ) {
193
- handlers.delegateCount--;
194
- }
195
- if ( special.remove ) {
196
- special.remove.call( elem, handleObj );
197
- }
198
- }
199
- }
200
-
201
- // Remove generic event handler if we removed something and no more handlers exist
202
- // (avoids potential for endless recursion during removal of special event handlers)
203
- if ( origCount && !handlers.length ) {
204
- if ( !special.teardown || special.teardown.call( elem, namespaces, elemData.handle ) === false ) {
205
- jQuery.removeEvent( elem, type, elemData.handle );
206
- }
207
-
208
- delete events[ type ];
209
- }
210
- }
211
-
212
- // Remove the expando if it's no longer used
213
- if ( jQuery.isEmptyObject( events ) ) {
214
- delete elemData.handle;
215
- data_priv.remove( elem, "events" );
216
- }
217
- },
218
-
219
- trigger: function( event, data, elem, onlyHandlers ) {
220
-
221
- var i, cur, tmp, bubbleType, ontype, handle, special,
222
- eventPath = [ elem || document ],
223
- type = hasOwn.call( event, "type" ) ? event.type : event,
224
- namespaces = hasOwn.call( event, "namespace" ) ? event.namespace.split(".") : [];
225
-
226
- cur = tmp = elem = elem || document;
227
-
228
- // Don't do events on text and comment nodes
229
- if ( elem.nodeType === 3 || elem.nodeType === 8 ) {
230
- return;
231
- }
232
-
233
- // focus/blur morphs to focusin/out; ensure we're not firing them right now
234
- if ( rfocusMorph.test( type + jQuery.event.triggered ) ) {
235
- return;
236
- }
237
-
238
- if ( type.indexOf(".") >= 0 ) {
239
- // Namespaced trigger; create a regexp to match event type in handle()
240
- namespaces = type.split(".");
241
- type = namespaces.shift();
242
- namespaces.sort();
243
- }
244
- ontype = type.indexOf(":") < 0 && "on" + type;
245
-
246
- // Caller can pass in a jQuery.Event object, Object, or just an event type string
247
- event = event[ jQuery.expando ] ?
248
- event :
249
- new jQuery.Event( type, typeof event === "object" && event );
250
-
251
- // Trigger bitmask: & 1 for native handlers; & 2 for jQuery (always true)
252
- event.isTrigger = onlyHandlers ? 2 : 3;
253
- event.namespace = namespaces.join(".");
254
- event.namespace_re = event.namespace ?
255
- new RegExp( "(^|\\.)" + namespaces.join("\\.(?:.*\\.|)") + "(\\.|$)" ) :
256
- null;
257
-
258
- // Clean up the event in case it is being reused
259
- event.result = undefined;
260
- if ( !event.target ) {
261
- event.target = elem;
262
- }
263
-
264
- // Clone any incoming data and prepend the event, creating the handler arg list
265
- data = data == null ?
266
- [ event ] :
267
- jQuery.makeArray( data, [ event ] );
268
-
269
- // Allow special events to draw outside the lines
270
- special = jQuery.event.special[ type ] || {};
271
- if ( !onlyHandlers && special.trigger && special.trigger.apply( elem, data ) === false ) {
272
- return;
273
- }
274
-
275
- // Determine event propagation path in advance, per W3C events spec (#9951)
276
- // Bubble up to document, then to window; watch for a global ownerDocument var (#9724)
277
- if ( !onlyHandlers && !special.noBubble && !jQuery.isWindow( elem ) ) {
278
-
279
- bubbleType = special.delegateType || type;
280
- if ( !rfocusMorph.test( bubbleType + type ) ) {
281
- cur = cur.parentNode;
282
- }
283
- for ( ; cur; cur = cur.parentNode ) {
284
- eventPath.push( cur );
285
- tmp = cur;
286
- }
287
-
288
- // Only add window if we got to document (e.g., not plain obj or detached DOM)
289
- if ( tmp === (elem.ownerDocument || document) ) {
290
- eventPath.push( tmp.defaultView || tmp.parentWindow || window );
291
- }
292
- }
293
-
294
- // Fire handlers on the event path
295
- i = 0;
296
- while ( (cur = eventPath[i++]) && !event.isPropagationStopped() ) {
297
-
298
- event.type = i > 1 ?
299
- bubbleType :
300
- special.bindType || type;
301
-
302
- // jQuery handler
303
- handle = ( data_priv.get( cur, "events" ) || {} )[ event.type ] && data_priv.get( cur, "handle" );
304
- if ( handle ) {
305
- handle.apply( cur, data );
306
- }
307
-
308
- // Native handler
309
- handle = ontype && cur[ ontype ];
310
- if ( handle && handle.apply && jQuery.acceptData( cur ) ) {
311
- event.result = handle.apply( cur, data );
312
- if ( event.result === false ) {
313
- event.preventDefault();
314
- }
315
- }
316
- }
317
- event.type = type;
318
-
319
- // If nobody prevented the default action, do it now
320
- if ( !onlyHandlers && !event.isDefaultPrevented() ) {
321
-
322
- if ( (!special._default || special._default.apply( eventPath.pop(), data ) === false) &&
323
- jQuery.acceptData( elem ) ) {
324
-
325
- // Call a native DOM method on the target with the same name name as the event.
326
- // Don't do default actions on window, that's where global variables be (#6170)
327
- if ( ontype && jQuery.isFunction( elem[ type ] ) && !jQuery.isWindow( elem ) ) {
328
-
329
- // Don't re-trigger an onFOO event when we call its FOO() method
330
- tmp = elem[ ontype ];
331
-
332
- if ( tmp ) {
333
- elem[ ontype ] = null;
334
- }
335
-
336
- // Prevent re-triggering of the same event, since we already bubbled it above
337
- jQuery.event.triggered = type;
338
- elem[ type ]();
339
- jQuery.event.triggered = undefined;
340
-
341
- if ( tmp ) {
342
- elem[ ontype ] = tmp;
343
- }
344
- }
345
- }
346
- }
347
-
348
- return event.result;
349
- },
350
-
351
- dispatch: function( event ) {
352
-
353
- // Make a writable jQuery.Event from the native event object
354
- event = jQuery.event.fix( event );
355
-
356
- var i, j, ret, matched, handleObj,
357
- handlerQueue = [],
358
- args = slice.call( arguments ),
359
- handlers = ( data_priv.get( this, "events" ) || {} )[ event.type ] || [],
360
- special = jQuery.event.special[ event.type ] || {};
361
-
362
- // Use the fix-ed jQuery.Event rather than the (read-only) native event
363
- args[0] = event;
364
- event.delegateTarget = this;
365
-
366
- // Call the preDispatch hook for the mapped type, and let it bail if desired
367
- if ( special.preDispatch && special.preDispatch.call( this, event ) === false ) {
368
- return;
369
- }
370
-
371
- // Determine handlers
372
- handlerQueue = jQuery.event.handlers.call( this, event, handlers );
373
-
374
- // Run delegates first; they may want to stop propagation beneath us
375
- i = 0;
376
- while ( (matched = handlerQueue[ i++ ]) && !event.isPropagationStopped() ) {
377
- event.currentTarget = matched.elem;
378
-
379
- j = 0;
380
- while ( (handleObj = matched.handlers[ j++ ]) && !event.isImmediatePropagationStopped() ) {
381
-
382
- // Triggered event must either 1) have no namespace, or 2) have namespace(s)
383
- // a subset or equal to those in the bound event (both can have no namespace).
384
- if ( !event.namespace_re || event.namespace_re.test( handleObj.namespace ) ) {
385
-
386
- event.handleObj = handleObj;
387
- event.data = handleObj.data;
388
-
389
- ret = ( (jQuery.event.special[ handleObj.origType ] || {}).handle || handleObj.handler )
390
- .apply( matched.elem, args );
391
-
392
- if ( ret !== undefined ) {
393
- if ( (event.result = ret) === false ) {
394
- event.preventDefault();
395
- event.stopPropagation();
396
- }
397
- }
398
- }
399
- }
400
- }
401
-
402
- // Call the postDispatch hook for the mapped type
403
- if ( special.postDispatch ) {
404
- special.postDispatch.call( this, event );
405
- }
406
-
407
- return event.result;
408
- },
409
-
410
- handlers: function( event, handlers ) {
411
- var i, matches, sel, handleObj,
412
- handlerQueue = [],
413
- delegateCount = handlers.delegateCount,
414
- cur = event.target;
415
-
416
- // Find delegate handlers
417
- // Black-hole SVG <use> instance trees (#13180)
418
- // Avoid non-left-click bubbling in Firefox (#3861)
419
- if ( delegateCount && cur.nodeType && (!event.button || event.type !== "click") ) {
420
-
421
- for ( ; cur !== this; cur = cur.parentNode || this ) {
422
-
423
- // Don't process clicks on disabled elements (#6911, #8165, #11382, #11764)
424
- if ( cur.disabled !== true || event.type !== "click" ) {
425
- matches = [];
426
- for ( i = 0; i < delegateCount; i++ ) {
427
- handleObj = handlers[ i ];
428
-
429
- // Don't conflict with Object.prototype properties (#13203)
430
- sel = handleObj.selector + " ";
431
-
432
- if ( matches[ sel ] === undefined ) {
433
- matches[ sel ] = handleObj.needsContext ?
434
- jQuery( sel, this ).index( cur ) >= 0 :
435
- jQuery.find( sel, this, null, [ cur ] ).length;
436
- }
437
- if ( matches[ sel ] ) {
438
- matches.push( handleObj );
439
- }
440
- }
441
- if ( matches.length ) {
442
- handlerQueue.push({ elem: cur, handlers: matches });
443
- }
444
- }
445
- }
446
- }
447
-
448
- // Add the remaining (directly-bound) handlers
449
- if ( delegateCount < handlers.length ) {
450
- handlerQueue.push({ elem: this, handlers: handlers.slice( delegateCount ) });
451
- }
452
-
453
- return handlerQueue;
454
- },
455
-
456
- // Includes some event props shared by KeyEvent and MouseEvent
457
- props: "altKey bubbles cancelable ctrlKey currentTarget eventPhase metaKey relatedTarget shiftKey target timeStamp view which".split(" "),
458
-
459
- fixHooks: {},
460
-
461
- keyHooks: {
462
- props: "char charCode key keyCode".split(" "),
463
- filter: function( event, original ) {
464
-
465
- // Add which for key events
466
- if ( event.which == null ) {
467
- event.which = original.charCode != null ? original.charCode : original.keyCode;
468
- }
469
-
470
- return event;
471
- }
472
- },
473
-
474
- mouseHooks: {
475
- props: "button buttons clientX clientY offsetX offsetY pageX pageY screenX screenY toElement".split(" "),
476
- filter: function( event, original ) {
477
- var eventDoc, doc, body,
478
- button = original.button;
479
-
480
- // Calculate pageX/Y if missing and clientX/Y available
481
- if ( event.pageX == null && original.clientX != null ) {
482
- eventDoc = event.target.ownerDocument || document;
483
- doc = eventDoc.documentElement;
484
- body = eventDoc.body;
485
-
486
- event.pageX = original.clientX + ( doc && doc.scrollLeft || body && body.scrollLeft || 0 ) - ( doc && doc.clientLeft || body && body.clientLeft || 0 );
487
- event.pageY = original.clientY + ( doc && doc.scrollTop || body && body.scrollTop || 0 ) - ( doc && doc.clientTop || body && body.clientTop || 0 );
488
- }
489
-
490
- // Add which for click: 1 === left; 2 === middle; 3 === right
491
- // Note: button is not normalized, so don't use it
492
- if ( !event.which && button !== undefined ) {
493
- event.which = ( button & 1 ? 1 : ( button & 2 ? 3 : ( button & 4 ? 2 : 0 ) ) );
494
- }
495
-
496
- return event;
497
- }
498
- },
499
-
500
- fix: function( event ) {
501
- if ( event[ jQuery.expando ] ) {
502
- return event;
503
- }
504
-
505
- // Create a writable copy of the event object and normalize some properties
506
- var i, prop, copy,
507
- type = event.type,
508
- originalEvent = event,
509
- fixHook = this.fixHooks[ type ];
510
-
511
- if ( !fixHook ) {
512
- this.fixHooks[ type ] = fixHook =
513
- rmouseEvent.test( type ) ? this.mouseHooks :
514
- rkeyEvent.test( type ) ? this.keyHooks :
515
- {};
516
- }
517
- copy = fixHook.props ? this.props.concat( fixHook.props ) : this.props;
518
-
519
- event = new jQuery.Event( originalEvent );
520
-
521
- i = copy.length;
522
- while ( i-- ) {
523
- prop = copy[ i ];
524
- event[ prop ] = originalEvent[ prop ];
525
- }
526
-
527
- // Support: Cordova 2.5 (WebKit) (#13255)
528
- // All events should have a target; Cordova deviceready doesn't
529
- if ( !event.target ) {
530
- event.target = document;
531
- }
532
-
533
- // Support: Safari 6.0+, Chrome<28
534
- // Target should not be a text node (#504, #13143)
535
- if ( event.target.nodeType === 3 ) {
536
- event.target = event.target.parentNode;
537
- }
538
-
539
- return fixHook.filter ? fixHook.filter( event, originalEvent ) : event;
540
- },
541
-
542
- special: {
543
- load: {
544
- // Prevent triggered image.load events from bubbling to window.load
545
- noBubble: true
546
- },
547
- focus: {
548
- // Fire native event if possible so blur/focus sequence is correct
549
- trigger: function() {
550
- if ( this !== safeActiveElement() && this.focus ) {
551
- this.focus();
552
- return false;
553
- }
554
- },
555
- delegateType: "focusin"
556
- },
557
- blur: {
558
- trigger: function() {
559
- if ( this === safeActiveElement() && this.blur ) {
560
- this.blur();
561
- return false;
562
- }
563
- },
564
- delegateType: "focusout"
565
- },
566
- click: {
567
- // For checkbox, fire native event so checked state will be right
568
- trigger: function() {
569
- if ( this.type === "checkbox" && this.click && jQuery.nodeName( this, "input" ) ) {
570
- this.click();
571
- return false;
572
- }
573
- },
574
-
575
- // For cross-browser consistency, don't fire native .click() on links
576
- _default: function( event ) {
577
- return jQuery.nodeName( event.target, "a" );
578
- }
579
- },
580
-
581
- beforeunload: {
582
- postDispatch: function( event ) {
583
-
584
- // Support: Firefox 20+
585
- // Firefox doesn't alert if the returnValue field is not set.
586
- if ( event.result !== undefined && event.originalEvent ) {
587
- event.originalEvent.returnValue = event.result;
588
- }
589
- }
590
- }
591
- },
592
-
593
- simulate: function( type, elem, event, bubble ) {
594
- // Piggyback on a donor event to simulate a different one.
595
- // Fake originalEvent to avoid donor's stopPropagation, but if the
596
- // simulated event prevents default then we do the same on the donor.
597
- var e = jQuery.extend(
598
- new jQuery.Event(),
599
- event,
600
- {
601
- type: type,
602
- isSimulated: true,
603
- originalEvent: {}
604
- }
605
- );
606
- if ( bubble ) {
607
- jQuery.event.trigger( e, null, elem );
608
- } else {
609
- jQuery.event.dispatch.call( elem, e );
610
- }
611
- if ( e.isDefaultPrevented() ) {
612
- event.preventDefault();
613
- }
614
- }
615
- };
616
-
617
- jQuery.removeEvent = function( elem, type, handle ) {
618
- if ( elem.removeEventListener ) {
619
- elem.removeEventListener( type, handle, false );
620
- }
621
- };
622
-
623
- jQuery.Event = function( src, props ) {
624
- // Allow instantiation without the 'new' keyword
625
- if ( !(this instanceof jQuery.Event) ) {
626
- return new jQuery.Event( src, props );
627
- }
628
-
629
- // Event object
630
- if ( src && src.type ) {
631
- this.originalEvent = src;
632
- this.type = src.type;
633
-
634
- // Events bubbling up the document may have been marked as prevented
635
- // by a handler lower down the tree; reflect the correct value.
636
- this.isDefaultPrevented = src.defaultPrevented ||
637
- src.defaultPrevented === undefined &&
638
- // Support: Android<4.0
639
- src.returnValue === false ?
640
- returnTrue :
641
- returnFalse;
642
-
643
- // Event type
644
- } else {
645
- this.type = src;
646
- }
647
-
648
- // Put explicitly provided properties onto the event object
649
- if ( props ) {
650
- jQuery.extend( this, props );
651
- }
652
-
653
- // Create a timestamp if incoming event doesn't have one
654
- this.timeStamp = src && src.timeStamp || jQuery.now();
655
-
656
- // Mark it as fixed
657
- this[ jQuery.expando ] = true;
658
- };
659
-
660
- // jQuery.Event is based on DOM3 Events as specified by the ECMAScript Language Binding
661
- // http://www.w3.org/TR/2003/WD-DOM-Level-3-Events-20030331/ecma-script-binding.html
662
- jQuery.Event.prototype = {
663
- isDefaultPrevented: returnFalse,
664
- isPropagationStopped: returnFalse,
665
- isImmediatePropagationStopped: returnFalse,
666
-
667
- preventDefault: function() {
668
- var e = this.originalEvent;
669
-
670
- this.isDefaultPrevented = returnTrue;
671
-
672
- if ( e && e.preventDefault ) {
673
- e.preventDefault();
674
- }
675
- },
676
- stopPropagation: function() {
677
- var e = this.originalEvent;
678
-
679
- this.isPropagationStopped = returnTrue;
680
-
681
- if ( e && e.stopPropagation ) {
682
- e.stopPropagation();
683
- }
684
- },
685
- stopImmediatePropagation: function() {
686
- var e = this.originalEvent;
687
-
688
- this.isImmediatePropagationStopped = returnTrue;
689
-
690
- if ( e && e.stopImmediatePropagation ) {
691
- e.stopImmediatePropagation();
692
- }
693
-
694
- this.stopPropagation();
695
- }
696
- };
697
-
698
- // Create mouseenter/leave events using mouseover/out and event-time checks
699
- // Support: Chrome 15+
700
- jQuery.each({
701
- mouseenter: "mouseover",
702
- mouseleave: "mouseout",
703
- pointerenter: "pointerover",
704
- pointerleave: "pointerout"
705
- }, function( orig, fix ) {
706
- jQuery.event.special[ orig ] = {
707
- delegateType: fix,
708
- bindType: fix,
709
-
710
- handle: function( event ) {
711
- var ret,
712
- target = this,
713
- related = event.relatedTarget,
714
- handleObj = event.handleObj;
715
-
716
- // For mousenter/leave call the handler if related is outside the target.
717
- // NB: No relatedTarget if the mouse left/entered the browser window
718
- if ( !related || (related !== target && !jQuery.contains( target, related )) ) {
719
- event.type = handleObj.origType;
720
- ret = handleObj.handler.apply( this, arguments );
721
- event.type = fix;
722
- }
723
- return ret;
724
- }
725
- };
726
- });
727
-
728
- // Support: Firefox, Chrome, Safari
729
- // Create "bubbling" focus and blur events
730
- if ( !support.focusinBubbles ) {
731
- jQuery.each({ focus: "focusin", blur: "focusout" }, function( orig, fix ) {
732
-
733
- // Attach a single capturing handler on the document while someone wants focusin/focusout
734
- var handler = function( event ) {
735
- jQuery.event.simulate( fix, event.target, jQuery.event.fix( event ), true );
736
- };
737
-
738
- jQuery.event.special[ fix ] = {
739
- setup: function() {
740
- var doc = this.ownerDocument || this,
741
- attaches = data_priv.access( doc, fix );
742
-
743
- if ( !attaches ) {
744
- doc.addEventListener( orig, handler, true );
745
- }
746
- data_priv.access( doc, fix, ( attaches || 0 ) + 1 );
747
- },
748
- teardown: function() {
749
- var doc = this.ownerDocument || this,
750
- attaches = data_priv.access( doc, fix ) - 1;
751
-
752
- if ( !attaches ) {
753
- doc.removeEventListener( orig, handler, true );
754
- data_priv.remove( doc, fix );
755
-
756
- } else {
757
- data_priv.access( doc, fix, attaches );
758
- }
759
- }
760
- };
761
- });
762
- }
763
-
764
- jQuery.fn.extend({
765
-
766
- on: function( types, selector, data, fn, /*INTERNAL*/ one ) {
767
- var origFn, type;
768
-
769
- // Types can be a map of types/handlers
770
- if ( typeof types === "object" ) {
771
- // ( types-Object, selector, data )
772
- if ( typeof selector !== "string" ) {
773
- // ( types-Object, data )
774
- data = data || selector;
775
- selector = undefined;
776
- }
777
- for ( type in types ) {
778
- this.on( type, selector, data, types[ type ], one );
779
- }
780
- return this;
781
- }
782
-
783
- if ( data == null && fn == null ) {
784
- // ( types, fn )
785
- fn = selector;
786
- data = selector = undefined;
787
- } else if ( fn == null ) {
788
- if ( typeof selector === "string" ) {
789
- // ( types, selector, fn )
790
- fn = data;
791
- data = undefined;
792
- } else {
793
- // ( types, data, fn )
794
- fn = data;
795
- data = selector;
796
- selector = undefined;
797
- }
798
- }
799
- if ( fn === false ) {
800
- fn = returnFalse;
801
- } else if ( !fn ) {
802
- return this;
803
- }
804
-
805
- if ( one === 1 ) {
806
- origFn = fn;
807
- fn = function( event ) {
808
- // Can use an empty set, since event contains the info
809
- jQuery().off( event );
810
- return origFn.apply( this, arguments );
811
- };
812
- // Use same guid so caller can remove using origFn
813
- fn.guid = origFn.guid || ( origFn.guid = jQuery.guid++ );
814
- }
815
- return this.each( function() {
816
- jQuery.event.add( this, types, fn, data, selector );
817
- });
818
- },
819
- one: function( types, selector, data, fn ) {
820
- return this.on( types, selector, data, fn, 1 );
821
- },
822
- off: function( types, selector, fn ) {
823
- var handleObj, type;
824
- if ( types && types.preventDefault && types.handleObj ) {
825
- // ( event ) dispatched jQuery.Event
826
- handleObj = types.handleObj;
827
- jQuery( types.delegateTarget ).off(
828
- handleObj.namespace ? handleObj.origType + "." + handleObj.namespace : handleObj.origType,
829
- handleObj.selector,
830
- handleObj.handler
831
- );
832
- return this;
833
- }
834
- if ( typeof types === "object" ) {
835
- // ( types-object [, selector] )
836
- for ( type in types ) {
837
- this.off( type, selector, types[ type ] );
838
- }
839
- return this;
840
- }
841
- if ( selector === false || typeof selector === "function" ) {
842
- // ( types [, fn] )
843
- fn = selector;
844
- selector = undefined;
845
- }
846
- if ( fn === false ) {
847
- fn = returnFalse;
848
- }
849
- return this.each(function() {
850
- jQuery.event.remove( this, types, fn, selector );
851
- });
852
- },
853
-
854
- trigger: function( type, data ) {
855
- return this.each(function() {
856
- jQuery.event.trigger( type, data, this );
857
- });
858
- },
859
- triggerHandler: function( type, data ) {
860
- var elem = this[0];
861
- if ( elem ) {
862
- return jQuery.event.trigger( type, data, elem, true );
863
- }
864
- }
865
- });
866
-
867
- return jQuery;
868
- });