jquery-ui-rails 4.0.0 → 5.0.4

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.

Potentially problematic release.


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

Files changed (239) hide show
  1. data/.travis.yml +0 -1
  2. data/Gemfile +1 -1
  3. data/History.md +62 -0
  4. data/README.md +86 -74
  5. data/Rakefile +69 -37
  6. data/VERSIONS.md +36 -0
  7. data/{vendor → app}/assets/images/jquery-ui/ui-bg_flat_0_aaaaaa_40x100.png +0 -0
  8. data/{vendor → app}/assets/images/jquery-ui/ui-bg_flat_75_ffffff_40x100.png +0 -0
  9. data/{vendor → app}/assets/images/jquery-ui/ui-bg_glass_55_fbf9ee_1x400.png +0 -0
  10. data/{vendor → app}/assets/images/jquery-ui/ui-bg_glass_65_ffffff_1x400.png +0 -0
  11. data/{vendor → app}/assets/images/jquery-ui/ui-bg_glass_75_dadada_1x400.png +0 -0
  12. data/{vendor → app}/assets/images/jquery-ui/ui-bg_glass_75_e6e6e6_1x400.png +0 -0
  13. data/{vendor → app}/assets/images/jquery-ui/ui-bg_glass_95_fef1ec_1x400.png +0 -0
  14. data/{vendor → app}/assets/images/jquery-ui/ui-bg_highlight-soft_75_cccccc_1x100.png +0 -0
  15. data/{vendor → app}/assets/images/jquery-ui/ui-icons_222222_256x240.png +0 -0
  16. data/{vendor → app}/assets/images/jquery-ui/ui-icons_2e83ff_256x240.png +0 -0
  17. data/{vendor → app}/assets/images/jquery-ui/ui-icons_454545_256x240.png +0 -0
  18. data/{vendor → app}/assets/images/jquery-ui/ui-icons_888888_256x240.png +0 -0
  19. data/{vendor → app}/assets/images/jquery-ui/ui-icons_cd0a0a_256x240.png +0 -0
  20. data/{vendor/assets/javascripts/jquery.ui.accordion.js → app/assets/javascripts/jquery-ui/accordion.js} +90 -74
  21. data/{vendor/assets/javascripts/jquery.ui.autocomplete.js → app/assets/javascripts/jquery-ui/autocomplete.js} +105 -91
  22. data/{vendor/assets/javascripts/jquery.ui.button.js → app/assets/javascripts/jquery-ui/button.js} +60 -68
  23. data/{vendor/assets/javascripts/jquery.ui.core.js → app/assets/javascripts/jquery-ui/core.js} +112 -132
  24. data/app/assets/javascripts/jquery-ui/datepicker-af.js +37 -0
  25. data/app/assets/javascripts/jquery-ui/datepicker-ar-DZ.js +37 -0
  26. data/app/assets/javascripts/jquery-ui/datepicker-ar.js +38 -0
  27. data/app/assets/javascripts/jquery-ui/datepicker-az.js +37 -0
  28. data/app/assets/javascripts/jquery-ui/datepicker-be.js +37 -0
  29. data/app/assets/javascripts/jquery-ui/datepicker-bg.js +38 -0
  30. data/app/assets/javascripts/jquery-ui/datepicker-bs.js +37 -0
  31. data/app/assets/javascripts/jquery-ui/datepicker-ca.js +37 -0
  32. data/app/assets/javascripts/jquery-ui/datepicker-cs.js +37 -0
  33. data/app/assets/javascripts/jquery-ui/datepicker-cy-GB.js +37 -0
  34. data/app/assets/javascripts/jquery-ui/datepicker-da.js +37 -0
  35. data/app/assets/javascripts/jquery-ui/datepicker-de.js +37 -0
  36. data/app/assets/javascripts/jquery-ui/datepicker-el.js +37 -0
  37. data/app/assets/javascripts/jquery-ui/datepicker-en-AU.js +37 -0
  38. data/app/assets/javascripts/jquery-ui/datepicker-en-GB.js +37 -0
  39. data/app/assets/javascripts/jquery-ui/datepicker-en-NZ.js +37 -0
  40. data/app/assets/javascripts/jquery-ui/datepicker-eo.js +37 -0
  41. data/app/assets/javascripts/jquery-ui/datepicker-es.js +37 -0
  42. data/app/assets/javascripts/jquery-ui/datepicker-et.js +37 -0
  43. data/app/assets/javascripts/jquery-ui/datepicker-eu.js +36 -0
  44. data/app/assets/javascripts/jquery-ui/datepicker-fa.js +73 -0
  45. data/app/assets/javascripts/jquery-ui/datepicker-fi.js +37 -0
  46. data/app/assets/javascripts/jquery-ui/datepicker-fo.js +37 -0
  47. data/app/assets/javascripts/jquery-ui/datepicker-fr-CA.js +37 -0
  48. data/app/assets/javascripts/jquery-ui/datepicker-fr-CH.js +37 -0
  49. data/app/assets/javascripts/jquery-ui/datepicker-fr.js +39 -0
  50. data/app/assets/javascripts/jquery-ui/datepicker-gl.js +37 -0
  51. data/app/assets/javascripts/jquery-ui/datepicker-he.js +37 -0
  52. data/app/assets/javascripts/jquery-ui/datepicker-hi.js +37 -0
  53. data/app/assets/javascripts/jquery-ui/datepicker-hr.js +37 -0
  54. data/app/assets/javascripts/jquery-ui/datepicker-hu.js +36 -0
  55. data/app/assets/javascripts/jquery-ui/datepicker-hy.js +37 -0
  56. data/app/assets/javascripts/jquery-ui/datepicker-id.js +37 -0
  57. data/app/assets/javascripts/jquery-ui/datepicker-is.js +37 -0
  58. data/app/assets/javascripts/jquery-ui/datepicker-it-CH.js +37 -0
  59. data/app/assets/javascripts/jquery-ui/datepicker-it.js +37 -0
  60. data/app/assets/javascripts/jquery-ui/datepicker-ja.js +37 -0
  61. data/app/assets/javascripts/jquery-ui/datepicker-ka.js +35 -0
  62. data/app/assets/javascripts/jquery-ui/datepicker-kk.js +37 -0
  63. data/app/assets/javascripts/jquery-ui/datepicker-km.js +37 -0
  64. data/app/assets/javascripts/jquery-ui/datepicker-ko.js +37 -0
  65. data/app/assets/javascripts/jquery-ui/datepicker-ky.js +38 -0
  66. data/app/assets/javascripts/jquery-ui/datepicker-lb.js +37 -0
  67. data/app/assets/javascripts/jquery-ui/datepicker-lt.js +37 -0
  68. data/app/assets/javascripts/jquery-ui/datepicker-lv.js +37 -0
  69. data/app/assets/javascripts/jquery-ui/datepicker-mk.js +37 -0
  70. data/app/assets/javascripts/jquery-ui/datepicker-ml.js +37 -0
  71. data/app/assets/javascripts/jquery-ui/datepicker-ms.js +37 -0
  72. data/app/assets/javascripts/jquery-ui/datepicker-nb.js +36 -0
  73. data/app/assets/javascripts/jquery-ui/datepicker-nl-BE.js +37 -0
  74. data/app/assets/javascripts/jquery-ui/datepicker-nl.js +37 -0
  75. data/app/assets/javascripts/jquery-ui/datepicker-nn.js +36 -0
  76. data/app/assets/javascripts/jquery-ui/datepicker-no.js +37 -0
  77. data/app/assets/javascripts/jquery-ui/datepicker-pl.js +37 -0
  78. data/app/assets/javascripts/jquery-ui/datepicker-pt-BR.js +37 -0
  79. data/app/assets/javascripts/jquery-ui/datepicker-pt.js +36 -0
  80. data/app/assets/javascripts/jquery-ui/datepicker-rm.js +35 -0
  81. data/app/assets/javascripts/jquery-ui/datepicker-ro.js +40 -0
  82. data/app/assets/javascripts/jquery-ui/datepicker-ru.js +37 -0
  83. data/app/assets/javascripts/jquery-ui/datepicker-sk.js +37 -0
  84. data/app/assets/javascripts/jquery-ui/datepicker-sl.js +38 -0
  85. data/app/assets/javascripts/jquery-ui/datepicker-sq.js +37 -0
  86. data/app/assets/javascripts/jquery-ui/datepicker-sr-SR.js +37 -0
  87. data/app/assets/javascripts/jquery-ui/datepicker-sr.js +37 -0
  88. data/app/assets/javascripts/jquery-ui/datepicker-sv.js +37 -0
  89. data/app/assets/javascripts/jquery-ui/datepicker-ta.js +37 -0
  90. data/app/assets/javascripts/jquery-ui/datepicker-th.js +37 -0
  91. data/app/assets/javascripts/jquery-ui/datepicker-tj.js +37 -0
  92. data/app/assets/javascripts/jquery-ui/datepicker-tr.js +37 -0
  93. data/app/assets/javascripts/jquery-ui/datepicker-uk.js +38 -0
  94. data/app/assets/javascripts/jquery-ui/datepicker-vi.js +37 -0
  95. data/app/assets/javascripts/jquery-ui/datepicker-zh-CN.js +37 -0
  96. data/app/assets/javascripts/jquery-ui/datepicker-zh-HK.js +37 -0
  97. data/app/assets/javascripts/jquery-ui/datepicker-zh-TW.js +37 -0
  98. data/{vendor/assets/javascripts/jquery.ui.datepicker.js → app/assets/javascripts/jquery-ui/datepicker.js} +120 -80
  99. data/{vendor/assets/javascripts/jquery.ui.dialog.js → app/assets/javascripts/jquery-ui/dialog.js} +298 -190
  100. data/app/assets/javascripts/jquery-ui/draggable.js +1132 -0
  101. data/app/assets/javascripts/jquery-ui/droppable.js +418 -0
  102. data/{vendor/assets/javascripts/jquery.ui.effect-blind.js → app/assets/javascripts/jquery-ui/effect-blind.js} +21 -13
  103. data/{vendor/assets/javascripts/jquery.ui.effect-bounce.js → app/assets/javascripts/jquery-ui/effect-bounce.js} +19 -9
  104. data/{vendor/assets/javascripts/jquery.ui.effect-clip.js → app/assets/javascripts/jquery-ui/effect-clip.js} +19 -9
  105. data/{vendor/assets/javascripts/jquery.ui.effect-drop.js → app/assets/javascripts/jquery-ui/effect-drop.js} +20 -10
  106. data/{vendor/assets/javascripts/jquery.ui.effect-explode.js → app/assets/javascripts/jquery-ui/effect-explode.js} +21 -11
  107. data/app/assets/javascripts/jquery-ui/effect-fade.js +42 -0
  108. data/{vendor/assets/javascripts/jquery.ui.effect-fold.js → app/assets/javascripts/jquery-ui/effect-fold.js} +19 -9
  109. data/{vendor/assets/javascripts/jquery.ui.effect-highlight.js → app/assets/javascripts/jquery-ui/effect-highlight.js} +19 -9
  110. data/app/assets/javascripts/jquery-ui/effect-puff.js +63 -0
  111. data/{vendor/assets/javascripts/jquery.ui.effect-pulsate.js → app/assets/javascripts/jquery-ui/effect-pulsate.js} +19 -9
  112. data/app/assets/javascripts/jquery-ui/effect-scale.js +92 -0
  113. data/{vendor/assets/javascripts/jquery.ui.effect-shake.js → app/assets/javascripts/jquery-ui/effect-shake.js} +20 -10
  114. data/{vendor/assets/javascripts/jquery.ui.effect-scale.js → app/assets/javascripts/jquery-ui/effect-size.js} +20 -105
  115. data/{vendor/assets/javascripts/jquery.ui.effect-slide.js → app/assets/javascripts/jquery-ui/effect-slide.js} +19 -9
  116. data/{vendor/assets/javascripts/jquery.ui.effect-transfer.js → app/assets/javascripts/jquery-ui/effect-transfer.js} +23 -13
  117. data/app/assets/javascripts/jquery-ui/effect.all.js +16 -0
  118. data/{vendor/assets/javascripts/jquery.ui.effect.js → app/assets/javascripts/jquery-ui/effect.js} +125 -92
  119. data/{vendor/assets/javascripts/jquery.ui.menu.js → app/assets/javascripts/jquery-ui/menu.js} +127 -102
  120. data/{vendor/assets/javascripts/jquery.ui.mouse.js → app/assets/javascripts/jquery-ui/mouse.js} +57 -27
  121. data/{vendor/assets/javascripts/jquery.ui.position.js → app/assets/javascripts/jquery-ui/position.js} +47 -27
  122. data/{vendor/assets/javascripts/jquery.ui.progressbar.js → app/assets/javascripts/jquery-ui/progressbar.js} +27 -13
  123. data/{vendor/assets/javascripts/jquery.ui.resizable.js → app/assets/javascripts/jquery-ui/resizable.js} +454 -243
  124. data/{vendor/assets/javascripts/jquery.ui.selectable.js → app/assets/javascripts/jquery-ui/selectable.js} +26 -16
  125. data/app/assets/javascripts/jquery-ui/selectmenu.js +620 -0
  126. data/{vendor/assets/javascripts/jquery.ui.slider.js → app/assets/javascripts/jquery-ui/slider.js} +159 -91
  127. data/{vendor/assets/javascripts/jquery.ui.sortable.js → app/assets/javascripts/jquery-ui/sortable.js} +168 -114
  128. data/{vendor/assets/javascripts/jquery.ui.spinner.js → app/assets/javascripts/jquery-ui/spinner.js} +54 -32
  129. data/{vendor/assets/javascripts/jquery.ui.tabs.js → app/assets/javascripts/jquery-ui/tabs.js} +108 -73
  130. data/{vendor/assets/javascripts/jquery.ui.tooltip.js → app/assets/javascripts/jquery-ui/tooltip.js} +134 -75
  131. data/{vendor/assets/javascripts/jquery.ui.widget.js → app/assets/javascripts/jquery-ui/widget.js} +81 -44
  132. data/app/assets/javascripts/jquery-ui.js +37 -0
  133. data/{vendor/assets/stylesheets/jquery.ui.accordion.css.erb → app/assets/stylesheets/jquery-ui/accordion.css} +7 -9
  134. data/app/assets/stylesheets/jquery-ui/all.css +14 -0
  135. data/app/assets/stylesheets/jquery-ui/autocomplete.css +21 -0
  136. data/app/assets/stylesheets/jquery-ui/base.css +30 -0
  137. data/{vendor/assets/stylesheets/jquery.ui.button.css.erb → app/assets/stylesheets/jquery-ui/button.css} +5 -5
  138. data/{vendor/assets/stylesheets/jquery.ui.core.css.erb → app/assets/stylesheets/jquery-ui/core.css} +8 -4
  139. data/{vendor/assets/stylesheets/jquery.ui.datepicker.css.erb → app/assets/stylesheets/jquery-ui/datepicker.css} +6 -9
  140. data/{vendor/assets/stylesheets/jquery.ui.dialog.css.erb → app/assets/stylesheets/jquery-ui/dialog.css} +10 -8
  141. data/app/assets/stylesheets/jquery-ui/draggable.css +16 -0
  142. data/app/assets/stylesheets/jquery-ui/menu.css +67 -0
  143. data/app/assets/stylesheets/jquery-ui/progressbar.css +32 -0
  144. data/{vendor/assets/stylesheets/jquery.ui.resizable.css.erb → app/assets/stylesheets/jquery-ui/resizable.css} +6 -6
  145. data/app/assets/stylesheets/jquery-ui/selectable.css +21 -0
  146. data/app/assets/stylesheets/jquery-ui/selectmenu.css +64 -0
  147. data/{vendor/assets/stylesheets/jquery.ui.slider.css.erb → app/assets/stylesheets/jquery-ui/slider.css} +8 -6
  148. data/app/assets/stylesheets/jquery-ui/sortable.css +16 -0
  149. data/{vendor/assets/stylesheets/jquery.ui.spinner.css.erb → app/assets/stylesheets/jquery-ui/spinner.css} +8 -8
  150. data/{vendor/assets/stylesheets/jquery.ui.tabs.css.erb → app/assets/stylesheets/jquery-ui/tabs.css} +11 -12
  151. data/{vendor/assets/stylesheets/jquery.ui.theme.css.erb → app/assets/stylesheets/jquery-ui/theme.css.erb} +29 -11
  152. data/{vendor/assets/stylesheets/jquery.ui.tooltip.css.erb → app/assets/stylesheets/jquery-ui/tooltip.css} +6 -4
  153. data/app/assets/stylesheets/jquery-ui.css +1 -0
  154. data/lib/jquery/ui/rails/version.rb +2 -1
  155. metadata +155 -161
  156. data/vendor/assets/javascripts/jquery.ui.all.js +0 -34
  157. data/vendor/assets/javascripts/jquery.ui.datepicker-af.js +0 -23
  158. data/vendor/assets/javascripts/jquery.ui.datepicker-ar-DZ.js +0 -23
  159. data/vendor/assets/javascripts/jquery.ui.datepicker-ar.js +0 -23
  160. data/vendor/assets/javascripts/jquery.ui.datepicker-az.js +0 -23
  161. data/vendor/assets/javascripts/jquery.ui.datepicker-be.js +0 -23
  162. data/vendor/assets/javascripts/jquery.ui.datepicker-bg.js +0 -24
  163. data/vendor/assets/javascripts/jquery.ui.datepicker-bs.js +0 -23
  164. data/vendor/assets/javascripts/jquery.ui.datepicker-ca.js +0 -23
  165. data/vendor/assets/javascripts/jquery.ui.datepicker-cs.js +0 -23
  166. data/vendor/assets/javascripts/jquery.ui.datepicker-cy-GB.js +0 -23
  167. data/vendor/assets/javascripts/jquery.ui.datepicker-da.js +0 -23
  168. data/vendor/assets/javascripts/jquery.ui.datepicker-de.js +0 -23
  169. data/vendor/assets/javascripts/jquery.ui.datepicker-el.js +0 -23
  170. data/vendor/assets/javascripts/jquery.ui.datepicker-en-AU.js +0 -23
  171. data/vendor/assets/javascripts/jquery.ui.datepicker-en-GB.js +0 -23
  172. data/vendor/assets/javascripts/jquery.ui.datepicker-en-NZ.js +0 -23
  173. data/vendor/assets/javascripts/jquery.ui.datepicker-eo.js +0 -23
  174. data/vendor/assets/javascripts/jquery.ui.datepicker-es.js +0 -23
  175. data/vendor/assets/javascripts/jquery.ui.datepicker-et.js +0 -23
  176. data/vendor/assets/javascripts/jquery.ui.datepicker-eu.js +0 -23
  177. data/vendor/assets/javascripts/jquery.ui.datepicker-fa.js +0 -59
  178. data/vendor/assets/javascripts/jquery.ui.datepicker-fi.js +0 -23
  179. data/vendor/assets/javascripts/jquery.ui.datepicker-fo.js +0 -23
  180. data/vendor/assets/javascripts/jquery.ui.datepicker-fr-CA.js +0 -23
  181. data/vendor/assets/javascripts/jquery.ui.datepicker-fr-CH.js +0 -23
  182. data/vendor/assets/javascripts/jquery.ui.datepicker-fr.js +0 -25
  183. data/vendor/assets/javascripts/jquery.ui.datepicker-gl.js +0 -23
  184. data/vendor/assets/javascripts/jquery.ui.datepicker-he.js +0 -23
  185. data/vendor/assets/javascripts/jquery.ui.datepicker-hi.js +0 -23
  186. data/vendor/assets/javascripts/jquery.ui.datepicker-hr.js +0 -23
  187. data/vendor/assets/javascripts/jquery.ui.datepicker-hu.js +0 -23
  188. data/vendor/assets/javascripts/jquery.ui.datepicker-hy.js +0 -23
  189. data/vendor/assets/javascripts/jquery.ui.datepicker-id.js +0 -23
  190. data/vendor/assets/javascripts/jquery.ui.datepicker-is.js +0 -23
  191. data/vendor/assets/javascripts/jquery.ui.datepicker-it.js +0 -23
  192. data/vendor/assets/javascripts/jquery.ui.datepicker-ja.js +0 -23
  193. data/vendor/assets/javascripts/jquery.ui.datepicker-ka.js +0 -21
  194. data/vendor/assets/javascripts/jquery.ui.datepicker-kk.js +0 -23
  195. data/vendor/assets/javascripts/jquery.ui.datepicker-km.js +0 -23
  196. data/vendor/assets/javascripts/jquery.ui.datepicker-ko.js +0 -23
  197. data/vendor/assets/javascripts/jquery.ui.datepicker-ky.js +0 -24
  198. data/vendor/assets/javascripts/jquery.ui.datepicker-lb.js +0 -23
  199. data/vendor/assets/javascripts/jquery.ui.datepicker-lt.js +0 -23
  200. data/vendor/assets/javascripts/jquery.ui.datepicker-lv.js +0 -23
  201. data/vendor/assets/javascripts/jquery.ui.datepicker-mk.js +0 -23
  202. data/vendor/assets/javascripts/jquery.ui.datepicker-ml.js +0 -23
  203. data/vendor/assets/javascripts/jquery.ui.datepicker-ms.js +0 -23
  204. data/vendor/assets/javascripts/jquery.ui.datepicker-nb.js +0 -22
  205. data/vendor/assets/javascripts/jquery.ui.datepicker-nl-BE.js +0 -23
  206. data/vendor/assets/javascripts/jquery.ui.datepicker-nl.js +0 -23
  207. data/vendor/assets/javascripts/jquery.ui.datepicker-nn.js +0 -22
  208. data/vendor/assets/javascripts/jquery.ui.datepicker-no.js +0 -23
  209. data/vendor/assets/javascripts/jquery.ui.datepicker-pl.js +0 -23
  210. data/vendor/assets/javascripts/jquery.ui.datepicker-pt-BR.js +0 -23
  211. data/vendor/assets/javascripts/jquery.ui.datepicker-pt.js +0 -22
  212. data/vendor/assets/javascripts/jquery.ui.datepicker-rm.js +0 -21
  213. data/vendor/assets/javascripts/jquery.ui.datepicker-ro.js +0 -26
  214. data/vendor/assets/javascripts/jquery.ui.datepicker-ru.js +0 -23
  215. data/vendor/assets/javascripts/jquery.ui.datepicker-sk.js +0 -23
  216. data/vendor/assets/javascripts/jquery.ui.datepicker-sl.js +0 -24
  217. data/vendor/assets/javascripts/jquery.ui.datepicker-sq.js +0 -23
  218. data/vendor/assets/javascripts/jquery.ui.datepicker-sr-SR.js +0 -23
  219. data/vendor/assets/javascripts/jquery.ui.datepicker-sr.js +0 -23
  220. data/vendor/assets/javascripts/jquery.ui.datepicker-sv.js +0 -23
  221. data/vendor/assets/javascripts/jquery.ui.datepicker-ta.js +0 -23
  222. data/vendor/assets/javascripts/jquery.ui.datepicker-th.js +0 -23
  223. data/vendor/assets/javascripts/jquery.ui.datepicker-tj.js +0 -23
  224. data/vendor/assets/javascripts/jquery.ui.datepicker-tr.js +0 -23
  225. data/vendor/assets/javascripts/jquery.ui.datepicker-uk.js +0 -24
  226. data/vendor/assets/javascripts/jquery.ui.datepicker-vi.js +0 -23
  227. data/vendor/assets/javascripts/jquery.ui.datepicker-zh-CN.js +0 -23
  228. data/vendor/assets/javascripts/jquery.ui.datepicker-zh-HK.js +0 -23
  229. data/vendor/assets/javascripts/jquery.ui.datepicker-zh-TW.js +0 -23
  230. data/vendor/assets/javascripts/jquery.ui.draggable.js +0 -950
  231. data/vendor/assets/javascripts/jquery.ui.droppable.js +0 -376
  232. data/vendor/assets/javascripts/jquery.ui.effect-fade.js +0 -32
  233. data/vendor/assets/javascripts/jquery.ui.effect.all.js +0 -14
  234. data/vendor/assets/stylesheets/jquery.ui.all.css.erb +0 -14
  235. data/vendor/assets/stylesheets/jquery.ui.autocomplete.css.erb +0 -21
  236. data/vendor/assets/stylesheets/jquery.ui.base.css.erb +0 -27
  237. data/vendor/assets/stylesheets/jquery.ui.menu.css.erb +0 -81
  238. data/vendor/assets/stylesheets/jquery.ui.progressbar.css.erb +0 -32
  239. data/vendor/assets/stylesheets/jquery.ui.selectable.css.erb +0 -19
@@ -0,0 +1,1132 @@
1
+ //= require jquery-ui/core
2
+ //= require jquery-ui/widget
3
+ //= require jquery-ui/mouse
4
+
5
+ /*!
6
+ * jQuery UI Draggable 1.11.3
7
+ * http://jqueryui.com
8
+ *
9
+ * Copyright jQuery Foundation and other contributors
10
+ * Released under the MIT license.
11
+ * http://jquery.org/license
12
+ *
13
+ * http://api.jqueryui.com/draggable/
14
+ */
15
+ (function( factory ) {
16
+ if ( typeof define === "function" && define.amd ) {
17
+
18
+ // AMD. Register as an anonymous module.
19
+ define([
20
+ "jquery",
21
+ "./core",
22
+ "./mouse",
23
+ "./widget"
24
+ ], factory );
25
+ } else {
26
+
27
+ // Browser globals
28
+ factory( jQuery );
29
+ }
30
+ }(function( $ ) {
31
+
32
+ $.widget("ui.draggable", $.ui.mouse, {
33
+ version: "1.11.3",
34
+ widgetEventPrefix: "drag",
35
+ options: {
36
+ addClasses: true,
37
+ appendTo: "parent",
38
+ axis: false,
39
+ connectToSortable: false,
40
+ containment: false,
41
+ cursor: "auto",
42
+ cursorAt: false,
43
+ grid: false,
44
+ handle: false,
45
+ helper: "original",
46
+ iframeFix: false,
47
+ opacity: false,
48
+ refreshPositions: false,
49
+ revert: false,
50
+ revertDuration: 500,
51
+ scope: "default",
52
+ scroll: true,
53
+ scrollSensitivity: 20,
54
+ scrollSpeed: 20,
55
+ snap: false,
56
+ snapMode: "both",
57
+ snapTolerance: 20,
58
+ stack: false,
59
+ zIndex: false,
60
+
61
+ // callbacks
62
+ drag: null,
63
+ start: null,
64
+ stop: null
65
+ },
66
+ _create: function() {
67
+
68
+ if ( this.options.helper === "original" ) {
69
+ this._setPositionRelative();
70
+ }
71
+ if (this.options.addClasses){
72
+ this.element.addClass("ui-draggable");
73
+ }
74
+ if (this.options.disabled){
75
+ this.element.addClass("ui-draggable-disabled");
76
+ }
77
+ this._setHandleClassName();
78
+
79
+ this._mouseInit();
80
+ },
81
+
82
+ _setOption: function( key, value ) {
83
+ this._super( key, value );
84
+ if ( key === "handle" ) {
85
+ this._removeHandleClassName();
86
+ this._setHandleClassName();
87
+ }
88
+ },
89
+
90
+ _destroy: function() {
91
+ if ( ( this.helper || this.element ).is( ".ui-draggable-dragging" ) ) {
92
+ this.destroyOnClear = true;
93
+ return;
94
+ }
95
+ this.element.removeClass( "ui-draggable ui-draggable-dragging ui-draggable-disabled" );
96
+ this._removeHandleClassName();
97
+ this._mouseDestroy();
98
+ },
99
+
100
+ _mouseCapture: function(event) {
101
+ var o = this.options;
102
+
103
+ this._blurActiveElement( event );
104
+
105
+ // among others, prevent a drag on a resizable-handle
106
+ if (this.helper || o.disabled || $(event.target).closest(".ui-resizable-handle").length > 0) {
107
+ return false;
108
+ }
109
+
110
+ //Quit if we're not on a valid handle
111
+ this.handle = this._getHandle(event);
112
+ if (!this.handle) {
113
+ return false;
114
+ }
115
+
116
+ this._blockFrames( o.iframeFix === true ? "iframe" : o.iframeFix );
117
+
118
+ return true;
119
+
120
+ },
121
+
122
+ _blockFrames: function( selector ) {
123
+ this.iframeBlocks = this.document.find( selector ).map(function() {
124
+ var iframe = $( this );
125
+
126
+ return $( "<div>" )
127
+ .css( "position", "absolute" )
128
+ .appendTo( iframe.parent() )
129
+ .outerWidth( iframe.outerWidth() )
130
+ .outerHeight( iframe.outerHeight() )
131
+ .offset( iframe.offset() )[ 0 ];
132
+ });
133
+ },
134
+
135
+ _unblockFrames: function() {
136
+ if ( this.iframeBlocks ) {
137
+ this.iframeBlocks.remove();
138
+ delete this.iframeBlocks;
139
+ }
140
+ },
141
+
142
+ _blurActiveElement: function( event ) {
143
+ var document = this.document[ 0 ];
144
+
145
+ // Only need to blur if the event occurred on the draggable itself, see #10527
146
+ if ( !this.handleElement.is( event.target ) ) {
147
+ return;
148
+ }
149
+
150
+ // support: IE9
151
+ // IE9 throws an "Unspecified error" accessing document.activeElement from an <iframe>
152
+ try {
153
+
154
+ // Support: IE9, IE10
155
+ // If the <body> is blurred, IE will switch windows, see #9520
156
+ if ( document.activeElement && document.activeElement.nodeName.toLowerCase() !== "body" ) {
157
+
158
+ // Blur any element that currently has focus, see #4261
159
+ $( document.activeElement ).blur();
160
+ }
161
+ } catch ( error ) {}
162
+ },
163
+
164
+ _mouseStart: function(event) {
165
+
166
+ var o = this.options;
167
+
168
+ //Create and append the visible helper
169
+ this.helper = this._createHelper(event);
170
+
171
+ this.helper.addClass("ui-draggable-dragging");
172
+
173
+ //Cache the helper size
174
+ this._cacheHelperProportions();
175
+
176
+ //If ddmanager is used for droppables, set the global draggable
177
+ if ($.ui.ddmanager) {
178
+ $.ui.ddmanager.current = this;
179
+ }
180
+
181
+ /*
182
+ * - Position generation -
183
+ * This block generates everything position related - it's the core of draggables.
184
+ */
185
+
186
+ //Cache the margins of the original element
187
+ this._cacheMargins();
188
+
189
+ //Store the helper's css position
190
+ this.cssPosition = this.helper.css( "position" );
191
+ this.scrollParent = this.helper.scrollParent( true );
192
+ this.offsetParent = this.helper.offsetParent();
193
+ this.hasFixedAncestor = this.helper.parents().filter(function() {
194
+ return $( this ).css( "position" ) === "fixed";
195
+ }).length > 0;
196
+
197
+ //The element's absolute position on the page minus margins
198
+ this.positionAbs = this.element.offset();
199
+ this._refreshOffsets( event );
200
+
201
+ //Generate the original position
202
+ this.originalPosition = this.position = this._generatePosition( event, false );
203
+ this.originalPageX = event.pageX;
204
+ this.originalPageY = event.pageY;
205
+
206
+ //Adjust the mouse offset relative to the helper if "cursorAt" is supplied
207
+ (o.cursorAt && this._adjustOffsetFromHelper(o.cursorAt));
208
+
209
+ //Set a containment if given in the options
210
+ this._setContainment();
211
+
212
+ //Trigger event + callbacks
213
+ if (this._trigger("start", event) === false) {
214
+ this._clear();
215
+ return false;
216
+ }
217
+
218
+ //Recache the helper size
219
+ this._cacheHelperProportions();
220
+
221
+ //Prepare the droppable offsets
222
+ if ($.ui.ddmanager && !o.dropBehaviour) {
223
+ $.ui.ddmanager.prepareOffsets(this, event);
224
+ }
225
+
226
+ // Reset helper's right/bottom css if they're set and set explicit width/height instead
227
+ // as this prevents resizing of elements with right/bottom set (see #7772)
228
+ this._normalizeRightBottom();
229
+
230
+ this._mouseDrag(event, true); //Execute the drag once - this causes the helper not to be visible before getting its correct position
231
+
232
+ //If the ddmanager is used for droppables, inform the manager that dragging has started (see #5003)
233
+ if ( $.ui.ddmanager ) {
234
+ $.ui.ddmanager.dragStart(this, event);
235
+ }
236
+
237
+ return true;
238
+ },
239
+
240
+ _refreshOffsets: function( event ) {
241
+ this.offset = {
242
+ top: this.positionAbs.top - this.margins.top,
243
+ left: this.positionAbs.left - this.margins.left,
244
+ scroll: false,
245
+ parent: this._getParentOffset(),
246
+ relative: this._getRelativeOffset()
247
+ };
248
+
249
+ this.offset.click = {
250
+ left: event.pageX - this.offset.left,
251
+ top: event.pageY - this.offset.top
252
+ };
253
+ },
254
+
255
+ _mouseDrag: function(event, noPropagation) {
256
+ // reset any necessary cached properties (see #5009)
257
+ if ( this.hasFixedAncestor ) {
258
+ this.offset.parent = this._getParentOffset();
259
+ }
260
+
261
+ //Compute the helpers position
262
+ this.position = this._generatePosition( event, true );
263
+ this.positionAbs = this._convertPositionTo("absolute");
264
+
265
+ //Call plugins and callbacks and use the resulting position if something is returned
266
+ if (!noPropagation) {
267
+ var ui = this._uiHash();
268
+ if (this._trigger("drag", event, ui) === false) {
269
+ this._mouseUp({});
270
+ return false;
271
+ }
272
+ this.position = ui.position;
273
+ }
274
+
275
+ this.helper[ 0 ].style.left = this.position.left + "px";
276
+ this.helper[ 0 ].style.top = this.position.top + "px";
277
+
278
+ if ($.ui.ddmanager) {
279
+ $.ui.ddmanager.drag(this, event);
280
+ }
281
+
282
+ return false;
283
+ },
284
+
285
+ _mouseStop: function(event) {
286
+
287
+ //If we are using droppables, inform the manager about the drop
288
+ var that = this,
289
+ dropped = false;
290
+ if ($.ui.ddmanager && !this.options.dropBehaviour) {
291
+ dropped = $.ui.ddmanager.drop(this, event);
292
+ }
293
+
294
+ //if a drop comes from outside (a sortable)
295
+ if (this.dropped) {
296
+ dropped = this.dropped;
297
+ this.dropped = false;
298
+ }
299
+
300
+ if ((this.options.revert === "invalid" && !dropped) || (this.options.revert === "valid" && dropped) || this.options.revert === true || ($.isFunction(this.options.revert) && this.options.revert.call(this.element, dropped))) {
301
+ $(this.helper).animate(this.originalPosition, parseInt(this.options.revertDuration, 10), function() {
302
+ if (that._trigger("stop", event) !== false) {
303
+ that._clear();
304
+ }
305
+ });
306
+ } else {
307
+ if (this._trigger("stop", event) !== false) {
308
+ this._clear();
309
+ }
310
+ }
311
+
312
+ return false;
313
+ },
314
+
315
+ _mouseUp: function( event ) {
316
+ this._unblockFrames();
317
+
318
+ //If the ddmanager is used for droppables, inform the manager that dragging has stopped (see #5003)
319
+ if ( $.ui.ddmanager ) {
320
+ $.ui.ddmanager.dragStop(this, event);
321
+ }
322
+
323
+ // Only need to focus if the event occurred on the draggable itself, see #10527
324
+ if ( this.handleElement.is( event.target ) ) {
325
+ // The interaction is over; whether or not the click resulted in a drag, focus the element
326
+ this.element.focus();
327
+ }
328
+
329
+ return $.ui.mouse.prototype._mouseUp.call(this, event);
330
+ },
331
+
332
+ cancel: function() {
333
+
334
+ if (this.helper.is(".ui-draggable-dragging")) {
335
+ this._mouseUp({});
336
+ } else {
337
+ this._clear();
338
+ }
339
+
340
+ return this;
341
+
342
+ },
343
+
344
+ _getHandle: function(event) {
345
+ return this.options.handle ?
346
+ !!$( event.target ).closest( this.element.find( this.options.handle ) ).length :
347
+ true;
348
+ },
349
+
350
+ _setHandleClassName: function() {
351
+ this.handleElement = this.options.handle ?
352
+ this.element.find( this.options.handle ) : this.element;
353
+ this.handleElement.addClass( "ui-draggable-handle" );
354
+ },
355
+
356
+ _removeHandleClassName: function() {
357
+ this.handleElement.removeClass( "ui-draggable-handle" );
358
+ },
359
+
360
+ _createHelper: function(event) {
361
+
362
+ var o = this.options,
363
+ helperIsFunction = $.isFunction( o.helper ),
364
+ helper = helperIsFunction ?
365
+ $( o.helper.apply( this.element[ 0 ], [ event ] ) ) :
366
+ ( o.helper === "clone" ?
367
+ this.element.clone().removeAttr( "id" ) :
368
+ this.element );
369
+
370
+ if (!helper.parents("body").length) {
371
+ helper.appendTo((o.appendTo === "parent" ? this.element[0].parentNode : o.appendTo));
372
+ }
373
+
374
+ // http://bugs.jqueryui.com/ticket/9446
375
+ // a helper function can return the original element
376
+ // which wouldn't have been set to relative in _create
377
+ if ( helperIsFunction && helper[ 0 ] === this.element[ 0 ] ) {
378
+ this._setPositionRelative();
379
+ }
380
+
381
+ if (helper[0] !== this.element[0] && !(/(fixed|absolute)/).test(helper.css("position"))) {
382
+ helper.css("position", "absolute");
383
+ }
384
+
385
+ return helper;
386
+
387
+ },
388
+
389
+ _setPositionRelative: function() {
390
+ if ( !( /^(?:r|a|f)/ ).test( this.element.css( "position" ) ) ) {
391
+ this.element[ 0 ].style.position = "relative";
392
+ }
393
+ },
394
+
395
+ _adjustOffsetFromHelper: function(obj) {
396
+ if (typeof obj === "string") {
397
+ obj = obj.split(" ");
398
+ }
399
+ if ($.isArray(obj)) {
400
+ obj = { left: +obj[0], top: +obj[1] || 0 };
401
+ }
402
+ if ("left" in obj) {
403
+ this.offset.click.left = obj.left + this.margins.left;
404
+ }
405
+ if ("right" in obj) {
406
+ this.offset.click.left = this.helperProportions.width - obj.right + this.margins.left;
407
+ }
408
+ if ("top" in obj) {
409
+ this.offset.click.top = obj.top + this.margins.top;
410
+ }
411
+ if ("bottom" in obj) {
412
+ this.offset.click.top = this.helperProportions.height - obj.bottom + this.margins.top;
413
+ }
414
+ },
415
+
416
+ _isRootNode: function( element ) {
417
+ return ( /(html|body)/i ).test( element.tagName ) || element === this.document[ 0 ];
418
+ },
419
+
420
+ _getParentOffset: function() {
421
+
422
+ //Get the offsetParent and cache its position
423
+ var po = this.offsetParent.offset(),
424
+ document = this.document[ 0 ];
425
+
426
+ // This is a special case where we need to modify a offset calculated on start, since the following happened:
427
+ // 1. The position of the helper is absolute, so it's position is calculated based on the next positioned parent
428
+ // 2. The actual offset parent is a child of the scroll parent, and the scroll parent isn't the document, which means that
429
+ // the scroll is included in the initial calculation of the offset of the parent, and never recalculated upon drag
430
+ if (this.cssPosition === "absolute" && this.scrollParent[0] !== document && $.contains(this.scrollParent[0], this.offsetParent[0])) {
431
+ po.left += this.scrollParent.scrollLeft();
432
+ po.top += this.scrollParent.scrollTop();
433
+ }
434
+
435
+ if ( this._isRootNode( this.offsetParent[ 0 ] ) ) {
436
+ po = { top: 0, left: 0 };
437
+ }
438
+
439
+ return {
440
+ top: po.top + (parseInt(this.offsetParent.css("borderTopWidth"), 10) || 0),
441
+ left: po.left + (parseInt(this.offsetParent.css("borderLeftWidth"), 10) || 0)
442
+ };
443
+
444
+ },
445
+
446
+ _getRelativeOffset: function() {
447
+ if ( this.cssPosition !== "relative" ) {
448
+ return { top: 0, left: 0 };
449
+ }
450
+
451
+ var p = this.element.position(),
452
+ scrollIsRootNode = this._isRootNode( this.scrollParent[ 0 ] );
453
+
454
+ return {
455
+ top: p.top - ( parseInt(this.helper.css( "top" ), 10) || 0 ) + ( !scrollIsRootNode ? this.scrollParent.scrollTop() : 0 ),
456
+ left: p.left - ( parseInt(this.helper.css( "left" ), 10) || 0 ) + ( !scrollIsRootNode ? this.scrollParent.scrollLeft() : 0 )
457
+ };
458
+
459
+ },
460
+
461
+ _cacheMargins: function() {
462
+ this.margins = {
463
+ left: (parseInt(this.element.css("marginLeft"), 10) || 0),
464
+ top: (parseInt(this.element.css("marginTop"), 10) || 0),
465
+ right: (parseInt(this.element.css("marginRight"), 10) || 0),
466
+ bottom: (parseInt(this.element.css("marginBottom"), 10) || 0)
467
+ };
468
+ },
469
+
470
+ _cacheHelperProportions: function() {
471
+ this.helperProportions = {
472
+ width: this.helper.outerWidth(),
473
+ height: this.helper.outerHeight()
474
+ };
475
+ },
476
+
477
+ _setContainment: function() {
478
+
479
+ var isUserScrollable, c, ce,
480
+ o = this.options,
481
+ document = this.document[ 0 ];
482
+
483
+ this.relativeContainer = null;
484
+
485
+ if ( !o.containment ) {
486
+ this.containment = null;
487
+ return;
488
+ }
489
+
490
+ if ( o.containment === "window" ) {
491
+ this.containment = [
492
+ $( window ).scrollLeft() - this.offset.relative.left - this.offset.parent.left,
493
+ $( window ).scrollTop() - this.offset.relative.top - this.offset.parent.top,
494
+ $( window ).scrollLeft() + $( window ).width() - this.helperProportions.width - this.margins.left,
495
+ $( window ).scrollTop() + ( $( window ).height() || document.body.parentNode.scrollHeight ) - this.helperProportions.height - this.margins.top
496
+ ];
497
+ return;
498
+ }
499
+
500
+ if ( o.containment === "document") {
501
+ this.containment = [
502
+ 0,
503
+ 0,
504
+ $( document ).width() - this.helperProportions.width - this.margins.left,
505
+ ( $( document ).height() || document.body.parentNode.scrollHeight ) - this.helperProportions.height - this.margins.top
506
+ ];
507
+ return;
508
+ }
509
+
510
+ if ( o.containment.constructor === Array ) {
511
+ this.containment = o.containment;
512
+ return;
513
+ }
514
+
515
+ if ( o.containment === "parent" ) {
516
+ o.containment = this.helper[ 0 ].parentNode;
517
+ }
518
+
519
+ c = $( o.containment );
520
+ ce = c[ 0 ];
521
+
522
+ if ( !ce ) {
523
+ return;
524
+ }
525
+
526
+ isUserScrollable = /(scroll|auto)/.test( c.css( "overflow" ) );
527
+
528
+ this.containment = [
529
+ ( parseInt( c.css( "borderLeftWidth" ), 10 ) || 0 ) + ( parseInt( c.css( "paddingLeft" ), 10 ) || 0 ),
530
+ ( parseInt( c.css( "borderTopWidth" ), 10 ) || 0 ) + ( parseInt( c.css( "paddingTop" ), 10 ) || 0 ),
531
+ ( isUserScrollable ? Math.max( ce.scrollWidth, ce.offsetWidth ) : ce.offsetWidth ) -
532
+ ( parseInt( c.css( "borderRightWidth" ), 10 ) || 0 ) -
533
+ ( parseInt( c.css( "paddingRight" ), 10 ) || 0 ) -
534
+ this.helperProportions.width -
535
+ this.margins.left -
536
+ this.margins.right,
537
+ ( isUserScrollable ? Math.max( ce.scrollHeight, ce.offsetHeight ) : ce.offsetHeight ) -
538
+ ( parseInt( c.css( "borderBottomWidth" ), 10 ) || 0 ) -
539
+ ( parseInt( c.css( "paddingBottom" ), 10 ) || 0 ) -
540
+ this.helperProportions.height -
541
+ this.margins.top -
542
+ this.margins.bottom
543
+ ];
544
+ this.relativeContainer = c;
545
+ },
546
+
547
+ _convertPositionTo: function(d, pos) {
548
+
549
+ if (!pos) {
550
+ pos = this.position;
551
+ }
552
+
553
+ var mod = d === "absolute" ? 1 : -1,
554
+ scrollIsRootNode = this._isRootNode( this.scrollParent[ 0 ] );
555
+
556
+ return {
557
+ top: (
558
+ pos.top + // The absolute mouse position
559
+ this.offset.relative.top * mod + // Only for relative positioned nodes: Relative offset from element to offset parent
560
+ this.offset.parent.top * mod - // The offsetParent's offset without borders (offset + border)
561
+ ( ( this.cssPosition === "fixed" ? -this.offset.scroll.top : ( scrollIsRootNode ? 0 : this.offset.scroll.top ) ) * mod)
562
+ ),
563
+ left: (
564
+ pos.left + // The absolute mouse position
565
+ this.offset.relative.left * mod + // Only for relative positioned nodes: Relative offset from element to offset parent
566
+ this.offset.parent.left * mod - // The offsetParent's offset without borders (offset + border)
567
+ ( ( this.cssPosition === "fixed" ? -this.offset.scroll.left : ( scrollIsRootNode ? 0 : this.offset.scroll.left ) ) * mod)
568
+ )
569
+ };
570
+
571
+ },
572
+
573
+ _generatePosition: function( event, constrainPosition ) {
574
+
575
+ var containment, co, top, left,
576
+ o = this.options,
577
+ scrollIsRootNode = this._isRootNode( this.scrollParent[ 0 ] ),
578
+ pageX = event.pageX,
579
+ pageY = event.pageY;
580
+
581
+ // Cache the scroll
582
+ if ( !scrollIsRootNode || !this.offset.scroll ) {
583
+ this.offset.scroll = {
584
+ top: this.scrollParent.scrollTop(),
585
+ left: this.scrollParent.scrollLeft()
586
+ };
587
+ }
588
+
589
+ /*
590
+ * - Position constraining -
591
+ * Constrain the position to a mix of grid, containment.
592
+ */
593
+
594
+ // If we are not dragging yet, we won't check for options
595
+ if ( constrainPosition ) {
596
+ if ( this.containment ) {
597
+ if ( this.relativeContainer ){
598
+ co = this.relativeContainer.offset();
599
+ containment = [
600
+ this.containment[ 0 ] + co.left,
601
+ this.containment[ 1 ] + co.top,
602
+ this.containment[ 2 ] + co.left,
603
+ this.containment[ 3 ] + co.top
604
+ ];
605
+ } else {
606
+ containment = this.containment;
607
+ }
608
+
609
+ if (event.pageX - this.offset.click.left < containment[0]) {
610
+ pageX = containment[0] + this.offset.click.left;
611
+ }
612
+ if (event.pageY - this.offset.click.top < containment[1]) {
613
+ pageY = containment[1] + this.offset.click.top;
614
+ }
615
+ if (event.pageX - this.offset.click.left > containment[2]) {
616
+ pageX = containment[2] + this.offset.click.left;
617
+ }
618
+ if (event.pageY - this.offset.click.top > containment[3]) {
619
+ pageY = containment[3] + this.offset.click.top;
620
+ }
621
+ }
622
+
623
+ if (o.grid) {
624
+ //Check for grid elements set to 0 to prevent divide by 0 error causing invalid argument errors in IE (see ticket #6950)
625
+ top = o.grid[1] ? this.originalPageY + Math.round((pageY - this.originalPageY) / o.grid[1]) * o.grid[1] : this.originalPageY;
626
+ pageY = containment ? ((top - this.offset.click.top >= containment[1] || top - this.offset.click.top > containment[3]) ? top : ((top - this.offset.click.top >= containment[1]) ? top - o.grid[1] : top + o.grid[1])) : top;
627
+
628
+ left = o.grid[0] ? this.originalPageX + Math.round((pageX - this.originalPageX) / o.grid[0]) * o.grid[0] : this.originalPageX;
629
+ pageX = containment ? ((left - this.offset.click.left >= containment[0] || left - this.offset.click.left > containment[2]) ? left : ((left - this.offset.click.left >= containment[0]) ? left - o.grid[0] : left + o.grid[0])) : left;
630
+ }
631
+
632
+ if ( o.axis === "y" ) {
633
+ pageX = this.originalPageX;
634
+ }
635
+
636
+ if ( o.axis === "x" ) {
637
+ pageY = this.originalPageY;
638
+ }
639
+ }
640
+
641
+ return {
642
+ top: (
643
+ pageY - // The absolute mouse position
644
+ this.offset.click.top - // Click offset (relative to the element)
645
+ this.offset.relative.top - // Only for relative positioned nodes: Relative offset from element to offset parent
646
+ this.offset.parent.top + // The offsetParent's offset without borders (offset + border)
647
+ ( this.cssPosition === "fixed" ? -this.offset.scroll.top : ( scrollIsRootNode ? 0 : this.offset.scroll.top ) )
648
+ ),
649
+ left: (
650
+ pageX - // The absolute mouse position
651
+ this.offset.click.left - // Click offset (relative to the element)
652
+ this.offset.relative.left - // Only for relative positioned nodes: Relative offset from element to offset parent
653
+ this.offset.parent.left + // The offsetParent's offset without borders (offset + border)
654
+ ( this.cssPosition === "fixed" ? -this.offset.scroll.left : ( scrollIsRootNode ? 0 : this.offset.scroll.left ) )
655
+ )
656
+ };
657
+
658
+ },
659
+
660
+ _clear: function() {
661
+ this.helper.removeClass("ui-draggable-dragging");
662
+ if (this.helper[0] !== this.element[0] && !this.cancelHelperRemoval) {
663
+ this.helper.remove();
664
+ }
665
+ this.helper = null;
666
+ this.cancelHelperRemoval = false;
667
+ if ( this.destroyOnClear ) {
668
+ this.destroy();
669
+ }
670
+ },
671
+
672
+ _normalizeRightBottom: function() {
673
+ if ( this.options.axis !== "y" && this.helper.css( "right" ) !== "auto" ) {
674
+ this.helper.width( this.helper.width() );
675
+ this.helper.css( "right", "auto" );
676
+ }
677
+ if ( this.options.axis !== "x" && this.helper.css( "bottom" ) !== "auto" ) {
678
+ this.helper.height( this.helper.height() );
679
+ this.helper.css( "bottom", "auto" );
680
+ }
681
+ },
682
+
683
+ // From now on bulk stuff - mainly helpers
684
+
685
+ _trigger: function( type, event, ui ) {
686
+ ui = ui || this._uiHash();
687
+ $.ui.plugin.call( this, type, [ event, ui, this ], true );
688
+
689
+ // Absolute position and offset (see #6884 ) have to be recalculated after plugins
690
+ if ( /^(drag|start|stop)/.test( type ) ) {
691
+ this.positionAbs = this._convertPositionTo( "absolute" );
692
+ ui.offset = this.positionAbs;
693
+ }
694
+ return $.Widget.prototype._trigger.call( this, type, event, ui );
695
+ },
696
+
697
+ plugins: {},
698
+
699
+ _uiHash: function() {
700
+ return {
701
+ helper: this.helper,
702
+ position: this.position,
703
+ originalPosition: this.originalPosition,
704
+ offset: this.positionAbs
705
+ };
706
+ }
707
+
708
+ });
709
+
710
+ $.ui.plugin.add( "draggable", "connectToSortable", {
711
+ start: function( event, ui, draggable ) {
712
+ var uiSortable = $.extend( {}, ui, {
713
+ item: draggable.element
714
+ });
715
+
716
+ draggable.sortables = [];
717
+ $( draggable.options.connectToSortable ).each(function() {
718
+ var sortable = $( this ).sortable( "instance" );
719
+
720
+ if ( sortable && !sortable.options.disabled ) {
721
+ draggable.sortables.push( sortable );
722
+
723
+ // refreshPositions is called at drag start to refresh the containerCache
724
+ // which is used in drag. This ensures it's initialized and synchronized
725
+ // with any changes that might have happened on the page since initialization.
726
+ sortable.refreshPositions();
727
+ sortable._trigger("activate", event, uiSortable);
728
+ }
729
+ });
730
+ },
731
+ stop: function( event, ui, draggable ) {
732
+ var uiSortable = $.extend( {}, ui, {
733
+ item: draggable.element
734
+ });
735
+
736
+ draggable.cancelHelperRemoval = false;
737
+
738
+ $.each( draggable.sortables, function() {
739
+ var sortable = this;
740
+
741
+ if ( sortable.isOver ) {
742
+ sortable.isOver = 0;
743
+
744
+ // Allow this sortable to handle removing the helper
745
+ draggable.cancelHelperRemoval = true;
746
+ sortable.cancelHelperRemoval = false;
747
+
748
+ // Use _storedCSS To restore properties in the sortable,
749
+ // as this also handles revert (#9675) since the draggable
750
+ // may have modified them in unexpected ways (#8809)
751
+ sortable._storedCSS = {
752
+ position: sortable.placeholder.css( "position" ),
753
+ top: sortable.placeholder.css( "top" ),
754
+ left: sortable.placeholder.css( "left" )
755
+ };
756
+
757
+ sortable._mouseStop(event);
758
+
759
+ // Once drag has ended, the sortable should return to using
760
+ // its original helper, not the shared helper from draggable
761
+ sortable.options.helper = sortable.options._helper;
762
+ } else {
763
+ // Prevent this Sortable from removing the helper.
764
+ // However, don't set the draggable to remove the helper
765
+ // either as another connected Sortable may yet handle the removal.
766
+ sortable.cancelHelperRemoval = true;
767
+
768
+ sortable._trigger( "deactivate", event, uiSortable );
769
+ }
770
+ });
771
+ },
772
+ drag: function( event, ui, draggable ) {
773
+ $.each( draggable.sortables, function() {
774
+ var innermostIntersecting = false,
775
+ sortable = this;
776
+
777
+ // Copy over variables that sortable's _intersectsWith uses
778
+ sortable.positionAbs = draggable.positionAbs;
779
+ sortable.helperProportions = draggable.helperProportions;
780
+ sortable.offset.click = draggable.offset.click;
781
+
782
+ if ( sortable._intersectsWith( sortable.containerCache ) ) {
783
+ innermostIntersecting = true;
784
+
785
+ $.each( draggable.sortables, function() {
786
+ // Copy over variables that sortable's _intersectsWith uses
787
+ this.positionAbs = draggable.positionAbs;
788
+ this.helperProportions = draggable.helperProportions;
789
+ this.offset.click = draggable.offset.click;
790
+
791
+ if ( this !== sortable &&
792
+ this._intersectsWith( this.containerCache ) &&
793
+ $.contains( sortable.element[ 0 ], this.element[ 0 ] ) ) {
794
+ innermostIntersecting = false;
795
+ }
796
+
797
+ return innermostIntersecting;
798
+ });
799
+ }
800
+
801
+ if ( innermostIntersecting ) {
802
+ // If it intersects, we use a little isOver variable and set it once,
803
+ // so that the move-in stuff gets fired only once.
804
+ if ( !sortable.isOver ) {
805
+ sortable.isOver = 1;
806
+
807
+ sortable.currentItem = ui.helper
808
+ .appendTo( sortable.element )
809
+ .data( "ui-sortable-item", true );
810
+
811
+ // Store helper option to later restore it
812
+ sortable.options._helper = sortable.options.helper;
813
+
814
+ sortable.options.helper = function() {
815
+ return ui.helper[ 0 ];
816
+ };
817
+
818
+ // Fire the start events of the sortable with our passed browser event,
819
+ // and our own helper (so it doesn't create a new one)
820
+ event.target = sortable.currentItem[ 0 ];
821
+ sortable._mouseCapture( event, true );
822
+ sortable._mouseStart( event, true, true );
823
+
824
+ // Because the browser event is way off the new appended portlet,
825
+ // modify necessary variables to reflect the changes
826
+ sortable.offset.click.top = draggable.offset.click.top;
827
+ sortable.offset.click.left = draggable.offset.click.left;
828
+ sortable.offset.parent.left -= draggable.offset.parent.left -
829
+ sortable.offset.parent.left;
830
+ sortable.offset.parent.top -= draggable.offset.parent.top -
831
+ sortable.offset.parent.top;
832
+
833
+ draggable._trigger( "toSortable", event );
834
+
835
+ // Inform draggable that the helper is in a valid drop zone,
836
+ // used solely in the revert option to handle "valid/invalid".
837
+ draggable.dropped = sortable.element;
838
+
839
+ // Need to refreshPositions of all sortables in the case that
840
+ // adding to one sortable changes the location of the other sortables (#9675)
841
+ $.each( draggable.sortables, function() {
842
+ this.refreshPositions();
843
+ });
844
+
845
+ // hack so receive/update callbacks work (mostly)
846
+ draggable.currentItem = draggable.element;
847
+ sortable.fromOutside = draggable;
848
+ }
849
+
850
+ if ( sortable.currentItem ) {
851
+ sortable._mouseDrag( event );
852
+ // Copy the sortable's position because the draggable's can potentially reflect
853
+ // a relative position, while sortable is always absolute, which the dragged
854
+ // element has now become. (#8809)
855
+ ui.position = sortable.position;
856
+ }
857
+ } else {
858
+ // If it doesn't intersect with the sortable, and it intersected before,
859
+ // we fake the drag stop of the sortable, but make sure it doesn't remove
860
+ // the helper by using cancelHelperRemoval.
861
+ if ( sortable.isOver ) {
862
+
863
+ sortable.isOver = 0;
864
+ sortable.cancelHelperRemoval = true;
865
+
866
+ // Calling sortable's mouseStop would trigger a revert,
867
+ // so revert must be temporarily false until after mouseStop is called.
868
+ sortable.options._revert = sortable.options.revert;
869
+ sortable.options.revert = false;
870
+
871
+ sortable._trigger( "out", event, sortable._uiHash( sortable ) );
872
+ sortable._mouseStop( event, true );
873
+
874
+ // restore sortable behaviors that were modfied
875
+ // when the draggable entered the sortable area (#9481)
876
+ sortable.options.revert = sortable.options._revert;
877
+ sortable.options.helper = sortable.options._helper;
878
+
879
+ if ( sortable.placeholder ) {
880
+ sortable.placeholder.remove();
881
+ }
882
+
883
+ // Recalculate the draggable's offset considering the sortable
884
+ // may have modified them in unexpected ways (#8809)
885
+ draggable._refreshOffsets( event );
886
+ ui.position = draggable._generatePosition( event, true );
887
+
888
+ draggable._trigger( "fromSortable", event );
889
+
890
+ // Inform draggable that the helper is no longer in a valid drop zone
891
+ draggable.dropped = false;
892
+
893
+ // Need to refreshPositions of all sortables just in case removing
894
+ // from one sortable changes the location of other sortables (#9675)
895
+ $.each( draggable.sortables, function() {
896
+ this.refreshPositions();
897
+ });
898
+ }
899
+ }
900
+ });
901
+ }
902
+ });
903
+
904
+ $.ui.plugin.add("draggable", "cursor", {
905
+ start: function( event, ui, instance ) {
906
+ var t = $( "body" ),
907
+ o = instance.options;
908
+
909
+ if (t.css("cursor")) {
910
+ o._cursor = t.css("cursor");
911
+ }
912
+ t.css("cursor", o.cursor);
913
+ },
914
+ stop: function( event, ui, instance ) {
915
+ var o = instance.options;
916
+ if (o._cursor) {
917
+ $("body").css("cursor", o._cursor);
918
+ }
919
+ }
920
+ });
921
+
922
+ $.ui.plugin.add("draggable", "opacity", {
923
+ start: function( event, ui, instance ) {
924
+ var t = $( ui.helper ),
925
+ o = instance.options;
926
+ if (t.css("opacity")) {
927
+ o._opacity = t.css("opacity");
928
+ }
929
+ t.css("opacity", o.opacity);
930
+ },
931
+ stop: function( event, ui, instance ) {
932
+ var o = instance.options;
933
+ if (o._opacity) {
934
+ $(ui.helper).css("opacity", o._opacity);
935
+ }
936
+ }
937
+ });
938
+
939
+ $.ui.plugin.add("draggable", "scroll", {
940
+ start: function( event, ui, i ) {
941
+ if ( !i.scrollParentNotHidden ) {
942
+ i.scrollParentNotHidden = i.helper.scrollParent( false );
943
+ }
944
+
945
+ if ( i.scrollParentNotHidden[ 0 ] !== i.document[ 0 ] && i.scrollParentNotHidden[ 0 ].tagName !== "HTML" ) {
946
+ i.overflowOffset = i.scrollParentNotHidden.offset();
947
+ }
948
+ },
949
+ drag: function( event, ui, i ) {
950
+
951
+ var o = i.options,
952
+ scrolled = false,
953
+ scrollParent = i.scrollParentNotHidden[ 0 ],
954
+ document = i.document[ 0 ];
955
+
956
+ if ( scrollParent !== document && scrollParent.tagName !== "HTML" ) {
957
+ if ( !o.axis || o.axis !== "x" ) {
958
+ if ( ( i.overflowOffset.top + scrollParent.offsetHeight ) - event.pageY < o.scrollSensitivity ) {
959
+ scrollParent.scrollTop = scrolled = scrollParent.scrollTop + o.scrollSpeed;
960
+ } else if ( event.pageY - i.overflowOffset.top < o.scrollSensitivity ) {
961
+ scrollParent.scrollTop = scrolled = scrollParent.scrollTop - o.scrollSpeed;
962
+ }
963
+ }
964
+
965
+ if ( !o.axis || o.axis !== "y" ) {
966
+ if ( ( i.overflowOffset.left + scrollParent.offsetWidth ) - event.pageX < o.scrollSensitivity ) {
967
+ scrollParent.scrollLeft = scrolled = scrollParent.scrollLeft + o.scrollSpeed;
968
+ } else if ( event.pageX - i.overflowOffset.left < o.scrollSensitivity ) {
969
+ scrollParent.scrollLeft = scrolled = scrollParent.scrollLeft - o.scrollSpeed;
970
+ }
971
+ }
972
+
973
+ } else {
974
+
975
+ if (!o.axis || o.axis !== "x") {
976
+ if (event.pageY - $(document).scrollTop() < o.scrollSensitivity) {
977
+ scrolled = $(document).scrollTop($(document).scrollTop() - o.scrollSpeed);
978
+ } else if ($(window).height() - (event.pageY - $(document).scrollTop()) < o.scrollSensitivity) {
979
+ scrolled = $(document).scrollTop($(document).scrollTop() + o.scrollSpeed);
980
+ }
981
+ }
982
+
983
+ if (!o.axis || o.axis !== "y") {
984
+ if (event.pageX - $(document).scrollLeft() < o.scrollSensitivity) {
985
+ scrolled = $(document).scrollLeft($(document).scrollLeft() - o.scrollSpeed);
986
+ } else if ($(window).width() - (event.pageX - $(document).scrollLeft()) < o.scrollSensitivity) {
987
+ scrolled = $(document).scrollLeft($(document).scrollLeft() + o.scrollSpeed);
988
+ }
989
+ }
990
+
991
+ }
992
+
993
+ if (scrolled !== false && $.ui.ddmanager && !o.dropBehaviour) {
994
+ $.ui.ddmanager.prepareOffsets(i, event);
995
+ }
996
+
997
+ }
998
+ });
999
+
1000
+ $.ui.plugin.add("draggable", "snap", {
1001
+ start: function( event, ui, i ) {
1002
+
1003
+ var o = i.options;
1004
+
1005
+ i.snapElements = [];
1006
+
1007
+ $(o.snap.constructor !== String ? ( o.snap.items || ":data(ui-draggable)" ) : o.snap).each(function() {
1008
+ var $t = $(this),
1009
+ $o = $t.offset();
1010
+ if (this !== i.element[0]) {
1011
+ i.snapElements.push({
1012
+ item: this,
1013
+ width: $t.outerWidth(), height: $t.outerHeight(),
1014
+ top: $o.top, left: $o.left
1015
+ });
1016
+ }
1017
+ });
1018
+
1019
+ },
1020
+ drag: function( event, ui, inst ) {
1021
+
1022
+ var ts, bs, ls, rs, l, r, t, b, i, first,
1023
+ o = inst.options,
1024
+ d = o.snapTolerance,
1025
+ x1 = ui.offset.left, x2 = x1 + inst.helperProportions.width,
1026
+ y1 = ui.offset.top, y2 = y1 + inst.helperProportions.height;
1027
+
1028
+ for (i = inst.snapElements.length - 1; i >= 0; i--){
1029
+
1030
+ l = inst.snapElements[i].left - inst.margins.left;
1031
+ r = l + inst.snapElements[i].width;
1032
+ t = inst.snapElements[i].top - inst.margins.top;
1033
+ b = t + inst.snapElements[i].height;
1034
+
1035
+ if ( x2 < l - d || x1 > r + d || y2 < t - d || y1 > b + d || !$.contains( inst.snapElements[ i ].item.ownerDocument, inst.snapElements[ i ].item ) ) {
1036
+ if (inst.snapElements[i].snapping) {
1037
+ (inst.options.snap.release && inst.options.snap.release.call(inst.element, event, $.extend(inst._uiHash(), { snapItem: inst.snapElements[i].item })));
1038
+ }
1039
+ inst.snapElements[i].snapping = false;
1040
+ continue;
1041
+ }
1042
+
1043
+ if (o.snapMode !== "inner") {
1044
+ ts = Math.abs(t - y2) <= d;
1045
+ bs = Math.abs(b - y1) <= d;
1046
+ ls = Math.abs(l - x2) <= d;
1047
+ rs = Math.abs(r - x1) <= d;
1048
+ if (ts) {
1049
+ ui.position.top = inst._convertPositionTo("relative", { top: t - inst.helperProportions.height, left: 0 }).top;
1050
+ }
1051
+ if (bs) {
1052
+ ui.position.top = inst._convertPositionTo("relative", { top: b, left: 0 }).top;
1053
+ }
1054
+ if (ls) {
1055
+ ui.position.left = inst._convertPositionTo("relative", { top: 0, left: l - inst.helperProportions.width }).left;
1056
+ }
1057
+ if (rs) {
1058
+ ui.position.left = inst._convertPositionTo("relative", { top: 0, left: r }).left;
1059
+ }
1060
+ }
1061
+
1062
+ first = (ts || bs || ls || rs);
1063
+
1064
+ if (o.snapMode !== "outer") {
1065
+ ts = Math.abs(t - y1) <= d;
1066
+ bs = Math.abs(b - y2) <= d;
1067
+ ls = Math.abs(l - x1) <= d;
1068
+ rs = Math.abs(r - x2) <= d;
1069
+ if (ts) {
1070
+ ui.position.top = inst._convertPositionTo("relative", { top: t, left: 0 }).top;
1071
+ }
1072
+ if (bs) {
1073
+ ui.position.top = inst._convertPositionTo("relative", { top: b - inst.helperProportions.height, left: 0 }).top;
1074
+ }
1075
+ if (ls) {
1076
+ ui.position.left = inst._convertPositionTo("relative", { top: 0, left: l }).left;
1077
+ }
1078
+ if (rs) {
1079
+ ui.position.left = inst._convertPositionTo("relative", { top: 0, left: r - inst.helperProportions.width }).left;
1080
+ }
1081
+ }
1082
+
1083
+ if (!inst.snapElements[i].snapping && (ts || bs || ls || rs || first)) {
1084
+ (inst.options.snap.snap && inst.options.snap.snap.call(inst.element, event, $.extend(inst._uiHash(), { snapItem: inst.snapElements[i].item })));
1085
+ }
1086
+ inst.snapElements[i].snapping = (ts || bs || ls || rs || first);
1087
+
1088
+ }
1089
+
1090
+ }
1091
+ });
1092
+
1093
+ $.ui.plugin.add("draggable", "stack", {
1094
+ start: function( event, ui, instance ) {
1095
+ var min,
1096
+ o = instance.options,
1097
+ group = $.makeArray($(o.stack)).sort(function(a, b) {
1098
+ return (parseInt($(a).css("zIndex"), 10) || 0) - (parseInt($(b).css("zIndex"), 10) || 0);
1099
+ });
1100
+
1101
+ if (!group.length) { return; }
1102
+
1103
+ min = parseInt($(group[0]).css("zIndex"), 10) || 0;
1104
+ $(group).each(function(i) {
1105
+ $(this).css("zIndex", min + i);
1106
+ });
1107
+ this.css("zIndex", (min + group.length));
1108
+ }
1109
+ });
1110
+
1111
+ $.ui.plugin.add("draggable", "zIndex", {
1112
+ start: function( event, ui, instance ) {
1113
+ var t = $( ui.helper ),
1114
+ o = instance.options;
1115
+
1116
+ if (t.css("zIndex")) {
1117
+ o._zIndex = t.css("zIndex");
1118
+ }
1119
+ t.css("zIndex", o.zIndex);
1120
+ },
1121
+ stop: function( event, ui, instance ) {
1122
+ var o = instance.options;
1123
+
1124
+ if (o._zIndex) {
1125
+ $(ui.helper).css("zIndex", o._zIndex);
1126
+ }
1127
+ }
1128
+ });
1129
+
1130
+ return $.ui.draggable;
1131
+
1132
+ }));