jquery-ui-rails 4.2.1 → 5.0.0

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 (217) hide show
  1. data/History.md +6 -0
  2. data/README.md +69 -73
  3. data/Rakefile +28 -24
  4. data/VERSIONS.md +1 -0
  5. data/app/assets/javascripts/jquery-ui.js +37 -0
  6. data/app/assets/javascripts/{jquery.ui.accordion.js → jquery-ui/accordion.js} +62 -57
  7. data/app/assets/javascripts/{jquery.ui.autocomplete.js → jquery-ui/autocomplete.js} +70 -50
  8. data/app/assets/javascripts/{jquery.ui.button.js → jquery-ui/button.js} +41 -25
  9. data/app/assets/javascripts/{jquery.ui.core.js → jquery-ui/core.js} +106 -123
  10. data/app/assets/javascripts/jquery-ui/datepicker-af.js +37 -0
  11. data/app/assets/javascripts/jquery-ui/datepicker-ar-DZ.js +37 -0
  12. data/app/assets/javascripts/jquery-ui/datepicker-ar.js +37 -0
  13. data/app/assets/javascripts/jquery-ui/datepicker-az.js +37 -0
  14. data/app/assets/javascripts/jquery-ui/datepicker-be.js +37 -0
  15. data/app/assets/javascripts/jquery-ui/datepicker-bg.js +38 -0
  16. data/app/assets/javascripts/jquery-ui/datepicker-bs.js +37 -0
  17. data/app/assets/javascripts/jquery-ui/datepicker-ca.js +37 -0
  18. data/app/assets/javascripts/jquery-ui/datepicker-cs.js +37 -0
  19. data/app/assets/javascripts/jquery-ui/datepicker-cy-GB.js +37 -0
  20. data/app/assets/javascripts/jquery-ui/datepicker-da.js +37 -0
  21. data/app/assets/javascripts/jquery-ui/datepicker-de.js +37 -0
  22. data/app/assets/javascripts/jquery-ui/datepicker-el.js +37 -0
  23. data/app/assets/javascripts/jquery-ui/datepicker-en-AU.js +37 -0
  24. data/app/assets/javascripts/jquery-ui/datepicker-en-GB.js +37 -0
  25. data/app/assets/javascripts/jquery-ui/datepicker-en-NZ.js +37 -0
  26. data/app/assets/javascripts/jquery-ui/datepicker-eo.js +37 -0
  27. data/app/assets/javascripts/jquery-ui/datepicker-es.js +37 -0
  28. data/app/assets/javascripts/jquery-ui/datepicker-et.js +37 -0
  29. data/app/assets/javascripts/jquery-ui/datepicker-eu.js +36 -0
  30. data/app/assets/javascripts/jquery-ui/datepicker-fa.js +73 -0
  31. data/app/assets/javascripts/jquery-ui/datepicker-fi.js +37 -0
  32. data/app/assets/javascripts/jquery-ui/datepicker-fo.js +37 -0
  33. data/app/assets/javascripts/jquery-ui/datepicker-fr-CA.js +37 -0
  34. data/app/assets/javascripts/jquery-ui/datepicker-fr-CH.js +37 -0
  35. data/app/assets/javascripts/jquery-ui/datepicker-fr.js +39 -0
  36. data/app/assets/javascripts/jquery-ui/datepicker-gl.js +37 -0
  37. data/app/assets/javascripts/jquery-ui/datepicker-he.js +37 -0
  38. data/app/assets/javascripts/jquery-ui/datepicker-hi.js +37 -0
  39. data/app/assets/javascripts/jquery-ui/datepicker-hr.js +37 -0
  40. data/app/assets/javascripts/jquery-ui/datepicker-hu.js +36 -0
  41. data/app/assets/javascripts/jquery-ui/datepicker-hy.js +37 -0
  42. data/app/assets/javascripts/jquery-ui/datepicker-id.js +37 -0
  43. data/app/assets/javascripts/jquery-ui/datepicker-is.js +37 -0
  44. data/app/assets/javascripts/jquery-ui/datepicker-it-CH.js +37 -0
  45. data/app/assets/javascripts/jquery-ui/datepicker-it.js +37 -0
  46. data/app/assets/javascripts/jquery-ui/datepicker-ja.js +37 -0
  47. data/app/assets/javascripts/jquery-ui/datepicker-ka.js +35 -0
  48. data/app/assets/javascripts/jquery-ui/datepicker-kk.js +37 -0
  49. data/app/assets/javascripts/jquery-ui/datepicker-km.js +37 -0
  50. data/app/assets/javascripts/jquery-ui/datepicker-ko.js +37 -0
  51. data/app/assets/javascripts/jquery-ui/datepicker-ky.js +38 -0
  52. data/app/assets/javascripts/jquery-ui/datepicker-lb.js +37 -0
  53. data/app/assets/javascripts/jquery-ui/datepicker-lt.js +37 -0
  54. data/app/assets/javascripts/jquery-ui/datepicker-lv.js +37 -0
  55. data/app/assets/javascripts/jquery-ui/datepicker-mk.js +37 -0
  56. data/app/assets/javascripts/jquery-ui/datepicker-ml.js +37 -0
  57. data/app/assets/javascripts/jquery-ui/datepicker-ms.js +37 -0
  58. data/app/assets/javascripts/jquery-ui/datepicker-nb.js +36 -0
  59. data/app/assets/javascripts/jquery-ui/datepicker-nl-BE.js +37 -0
  60. data/app/assets/javascripts/jquery-ui/datepicker-nl.js +37 -0
  61. data/app/assets/javascripts/jquery-ui/datepicker-nn.js +36 -0
  62. data/app/assets/javascripts/jquery-ui/datepicker-no.js +37 -0
  63. data/app/assets/javascripts/jquery-ui/datepicker-pl.js +37 -0
  64. data/app/assets/javascripts/jquery-ui/datepicker-pt-BR.js +37 -0
  65. data/app/assets/javascripts/jquery-ui/datepicker-pt.js +36 -0
  66. data/app/assets/javascripts/jquery-ui/datepicker-rm.js +35 -0
  67. data/app/assets/javascripts/jquery-ui/datepicker-ro.js +40 -0
  68. data/app/assets/javascripts/jquery-ui/datepicker-ru.js +37 -0
  69. data/app/assets/javascripts/jquery-ui/datepicker-sk.js +37 -0
  70. data/app/assets/javascripts/jquery-ui/datepicker-sl.js +38 -0
  71. data/app/assets/javascripts/jquery-ui/datepicker-sq.js +37 -0
  72. data/app/assets/javascripts/jquery-ui/datepicker-sr-SR.js +37 -0
  73. data/app/assets/javascripts/jquery-ui/datepicker-sr.js +37 -0
  74. data/app/assets/javascripts/jquery-ui/datepicker-sv.js +37 -0
  75. data/app/assets/javascripts/jquery-ui/datepicker-ta.js +37 -0
  76. data/app/assets/javascripts/jquery-ui/datepicker-th.js +37 -0
  77. data/app/assets/javascripts/jquery-ui/datepicker-tj.js +37 -0
  78. data/app/assets/javascripts/jquery-ui/datepicker-tr.js +37 -0
  79. data/app/assets/javascripts/jquery-ui/datepicker-uk.js +38 -0
  80. data/app/assets/javascripts/jquery-ui/datepicker-vi.js +37 -0
  81. data/app/assets/javascripts/jquery-ui/datepicker-zh-CN.js +37 -0
  82. data/app/assets/javascripts/jquery-ui/datepicker-zh-HK.js +37 -0
  83. data/app/assets/javascripts/jquery-ui/datepicker-zh-TW.js +37 -0
  84. data/app/assets/javascripts/{jquery.ui.datepicker.js → jquery-ui/datepicker.js} +72 -37
  85. data/app/assets/javascripts/{jquery.ui.dialog.js → jquery-ui/dialog.js} +215 -180
  86. data/app/assets/javascripts/{jquery.ui.draggable.js → jquery-ui/draggable.js} +219 -161
  87. data/app/assets/javascripts/jquery-ui/droppable.js +421 -0
  88. data/app/assets/javascripts/{jquery.ui.effect-blind.js → jquery-ui/effect-blind.js} +20 -12
  89. data/app/assets/javascripts/{jquery.ui.effect-bounce.js → jquery-ui/effect-bounce.js} +18 -8
  90. data/app/assets/javascripts/{jquery.ui.effect-clip.js → jquery-ui/effect-clip.js} +18 -8
  91. data/app/assets/javascripts/{jquery.ui.effect-drop.js → jquery-ui/effect-drop.js} +18 -8
  92. data/app/assets/javascripts/{jquery.ui.effect-explode.js → jquery-ui/effect-explode.js} +20 -10
  93. data/app/assets/javascripts/{jquery.ui.effect-fade.js → jquery-ui/effect-fade.js} +18 -8
  94. data/app/assets/javascripts/{jquery.ui.effect-fold.js → jquery-ui/effect-fold.js} +18 -8
  95. data/app/assets/javascripts/{jquery.ui.effect-highlight.js → jquery-ui/effect-highlight.js} +18 -8
  96. data/app/assets/javascripts/jquery-ui/effect-puff.js +63 -0
  97. data/app/assets/javascripts/{jquery.ui.effect-pulsate.js → jquery-ui/effect-pulsate.js} +18 -8
  98. data/app/assets/javascripts/jquery-ui/effect-scale.js +92 -0
  99. data/app/assets/javascripts/{jquery.ui.effect-shake.js → jquery-ui/effect-shake.js} +19 -9
  100. data/app/assets/javascripts/{jquery.ui.effect-scale.js → jquery-ui/effect-size.js} +19 -104
  101. data/app/assets/javascripts/{jquery.ui.effect-slide.js → jquery-ui/effect-slide.js} +18 -8
  102. data/app/assets/javascripts/{jquery.ui.effect-transfer.js → jquery-ui/effect-transfer.js} +22 -12
  103. data/app/assets/javascripts/jquery-ui/effect.all.js +16 -0
  104. data/app/assets/javascripts/{jquery.ui.effect.js → jquery-ui/effect.js} +28 -20
  105. data/app/assets/javascripts/{jquery.ui.menu.js → jquery-ui/menu.js} +93 -80
  106. data/app/assets/javascripts/{jquery.ui.mouse.js → jquery-ui/mouse.js} +41 -23
  107. data/app/assets/javascripts/{jquery.ui.position.js → jquery-ui/position.js} +25 -12
  108. data/app/assets/javascripts/{jquery.ui.progressbar.js → jquery-ui/progressbar.js} +26 -12
  109. data/app/assets/javascripts/{jquery.ui.resizable.js → jquery-ui/resizable.js} +196 -146
  110. data/app/assets/javascripts/{jquery.ui.selectable.js → jquery-ui/selectable.js} +25 -15
  111. data/app/assets/javascripts/jquery-ui/selectmenu.js +560 -0
  112. data/app/assets/javascripts/{jquery.ui.slider.js → jquery-ui/slider.js} +43 -31
  113. data/app/assets/javascripts/{jquery.ui.sortable.js → jquery-ui/sortable.js} +71 -50
  114. data/app/assets/javascripts/{jquery.ui.spinner.js → jquery-ui/spinner.js} +46 -29
  115. data/app/assets/javascripts/{jquery.ui.tabs.js → jquery-ui/tabs.js} +69 -52
  116. data/app/assets/javascripts/{jquery.ui.tooltip.js → jquery-ui/tooltip.js} +97 -55
  117. data/app/assets/javascripts/{jquery.ui.widget.js → jquery-ui/widget.js} +52 -30
  118. data/app/assets/stylesheets/jquery-ui.css +1 -0
  119. data/app/assets/stylesheets/{jquery.ui.accordion.css.erb → jquery-ui/accordion.css.erb} +5 -7
  120. data/app/assets/stylesheets/{jquery.ui.all.css.erb → jquery-ui/all.css.erb} +3 -3
  121. data/app/assets/stylesheets/{jquery.ui.autocomplete.css.erb → jquery-ui/autocomplete.css.erb} +4 -4
  122. data/app/assets/stylesheets/jquery-ui/base.css.erb +30 -0
  123. data/app/assets/stylesheets/{jquery.ui.button.css.erb → jquery-ui/button.css.erb} +3 -3
  124. data/app/assets/stylesheets/{jquery.ui.core.css.erb → jquery-ui/core.css.erb} +4 -1
  125. data/app/assets/stylesheets/{jquery.ui.datepicker.css.erb → jquery-ui/datepicker.css.erb} +3 -3
  126. data/app/assets/stylesheets/{jquery.ui.dialog.css.erb → jquery-ui/dialog.css.erb} +6 -5
  127. data/app/assets/stylesheets/jquery-ui/draggable.css.erb +16 -0
  128. data/app/assets/stylesheets/{jquery.ui.menu.css.erb → jquery-ui/menu.css.erb} +18 -34
  129. data/app/assets/stylesheets/{jquery.ui.progressbar.css.erb → jquery-ui/progressbar.css.erb} +3 -3
  130. data/app/assets/stylesheets/{jquery.ui.resizable.css.erb → jquery-ui/resizable.css.erb} +5 -3
  131. data/app/assets/stylesheets/{jquery.ui.selectable.css.erb → jquery-ui/selectable.css.erb} +7 -3
  132. data/app/assets/stylesheets/jquery-ui/selectmenu.css.erb +64 -0
  133. data/app/assets/stylesheets/{jquery.ui.slider.css.erb → jquery-ui/slider.css.erb} +5 -3
  134. data/app/assets/stylesheets/jquery-ui/sortable.css.erb +16 -0
  135. data/app/assets/stylesheets/{jquery.ui.spinner.css.erb → jquery-ui/spinner.css.erb} +4 -4
  136. data/app/assets/stylesheets/{jquery.ui.tabs.css.erb → jquery-ui/tabs.css.erb} +3 -3
  137. data/app/assets/stylesheets/{jquery.ui.theme.css.erb → jquery-ui/theme.css.erb} +1 -4
  138. data/app/assets/stylesheets/{jquery.ui.tooltip.css.erb → jquery-ui/tooltip.css.erb} +3 -3
  139. data/lib/jquery/ui/rails/version.rb +2 -2
  140. metadata +137 -129
  141. data/app/assets/javascripts/jquery.ui.all.js +0 -34
  142. data/app/assets/javascripts/jquery.ui.datepicker-af.js +0 -23
  143. data/app/assets/javascripts/jquery.ui.datepicker-ar-DZ.js +0 -23
  144. data/app/assets/javascripts/jquery.ui.datepicker-ar.js +0 -23
  145. data/app/assets/javascripts/jquery.ui.datepicker-az.js +0 -23
  146. data/app/assets/javascripts/jquery.ui.datepicker-be.js +0 -23
  147. data/app/assets/javascripts/jquery.ui.datepicker-bg.js +0 -24
  148. data/app/assets/javascripts/jquery.ui.datepicker-bs.js +0 -23
  149. data/app/assets/javascripts/jquery.ui.datepicker-ca.js +0 -23
  150. data/app/assets/javascripts/jquery.ui.datepicker-cs.js +0 -23
  151. data/app/assets/javascripts/jquery.ui.datepicker-cy-GB.js +0 -23
  152. data/app/assets/javascripts/jquery.ui.datepicker-da.js +0 -23
  153. data/app/assets/javascripts/jquery.ui.datepicker-de.js +0 -23
  154. data/app/assets/javascripts/jquery.ui.datepicker-el.js +0 -23
  155. data/app/assets/javascripts/jquery.ui.datepicker-en-AU.js +0 -23
  156. data/app/assets/javascripts/jquery.ui.datepicker-en-GB.js +0 -23
  157. data/app/assets/javascripts/jquery.ui.datepicker-en-NZ.js +0 -23
  158. data/app/assets/javascripts/jquery.ui.datepicker-eo.js +0 -23
  159. data/app/assets/javascripts/jquery.ui.datepicker-es.js +0 -23
  160. data/app/assets/javascripts/jquery.ui.datepicker-et.js +0 -23
  161. data/app/assets/javascripts/jquery.ui.datepicker-eu.js +0 -23
  162. data/app/assets/javascripts/jquery.ui.datepicker-fa.js +0 -59
  163. data/app/assets/javascripts/jquery.ui.datepicker-fi.js +0 -23
  164. data/app/assets/javascripts/jquery.ui.datepicker-fo.js +0 -23
  165. data/app/assets/javascripts/jquery.ui.datepicker-fr-CA.js +0 -23
  166. data/app/assets/javascripts/jquery.ui.datepicker-fr-CH.js +0 -23
  167. data/app/assets/javascripts/jquery.ui.datepicker-fr.js +0 -25
  168. data/app/assets/javascripts/jquery.ui.datepicker-gl.js +0 -23
  169. data/app/assets/javascripts/jquery.ui.datepicker-he.js +0 -23
  170. data/app/assets/javascripts/jquery.ui.datepicker-hi.js +0 -23
  171. data/app/assets/javascripts/jquery.ui.datepicker-hr.js +0 -23
  172. data/app/assets/javascripts/jquery.ui.datepicker-hu.js +0 -23
  173. data/app/assets/javascripts/jquery.ui.datepicker-hy.js +0 -23
  174. data/app/assets/javascripts/jquery.ui.datepicker-id.js +0 -23
  175. data/app/assets/javascripts/jquery.ui.datepicker-is.js +0 -23
  176. data/app/assets/javascripts/jquery.ui.datepicker-it.js +0 -23
  177. data/app/assets/javascripts/jquery.ui.datepicker-ja.js +0 -23
  178. data/app/assets/javascripts/jquery.ui.datepicker-ka.js +0 -21
  179. data/app/assets/javascripts/jquery.ui.datepicker-kk.js +0 -23
  180. data/app/assets/javascripts/jquery.ui.datepicker-km.js +0 -23
  181. data/app/assets/javascripts/jquery.ui.datepicker-ko.js +0 -23
  182. data/app/assets/javascripts/jquery.ui.datepicker-ky.js +0 -24
  183. data/app/assets/javascripts/jquery.ui.datepicker-lb.js +0 -23
  184. data/app/assets/javascripts/jquery.ui.datepicker-lt.js +0 -23
  185. data/app/assets/javascripts/jquery.ui.datepicker-lv.js +0 -23
  186. data/app/assets/javascripts/jquery.ui.datepicker-mk.js +0 -23
  187. data/app/assets/javascripts/jquery.ui.datepicker-ml.js +0 -23
  188. data/app/assets/javascripts/jquery.ui.datepicker-ms.js +0 -23
  189. data/app/assets/javascripts/jquery.ui.datepicker-nb.js +0 -22
  190. data/app/assets/javascripts/jquery.ui.datepicker-nl-BE.js +0 -23
  191. data/app/assets/javascripts/jquery.ui.datepicker-nl.js +0 -23
  192. data/app/assets/javascripts/jquery.ui.datepicker-nn.js +0 -22
  193. data/app/assets/javascripts/jquery.ui.datepicker-no.js +0 -23
  194. data/app/assets/javascripts/jquery.ui.datepicker-pl.js +0 -23
  195. data/app/assets/javascripts/jquery.ui.datepicker-pt-BR.js +0 -23
  196. data/app/assets/javascripts/jquery.ui.datepicker-pt.js +0 -22
  197. data/app/assets/javascripts/jquery.ui.datepicker-rm.js +0 -21
  198. data/app/assets/javascripts/jquery.ui.datepicker-ro.js +0 -26
  199. data/app/assets/javascripts/jquery.ui.datepicker-ru.js +0 -23
  200. data/app/assets/javascripts/jquery.ui.datepicker-sk.js +0 -23
  201. data/app/assets/javascripts/jquery.ui.datepicker-sl.js +0 -24
  202. data/app/assets/javascripts/jquery.ui.datepicker-sq.js +0 -23
  203. data/app/assets/javascripts/jquery.ui.datepicker-sr-SR.js +0 -23
  204. data/app/assets/javascripts/jquery.ui.datepicker-sr.js +0 -23
  205. data/app/assets/javascripts/jquery.ui.datepicker-sv.js +0 -23
  206. data/app/assets/javascripts/jquery.ui.datepicker-ta.js +0 -23
  207. data/app/assets/javascripts/jquery.ui.datepicker-th.js +0 -23
  208. data/app/assets/javascripts/jquery.ui.datepicker-tj.js +0 -23
  209. data/app/assets/javascripts/jquery.ui.datepicker-tr.js +0 -23
  210. data/app/assets/javascripts/jquery.ui.datepicker-uk.js +0 -24
  211. data/app/assets/javascripts/jquery.ui.datepicker-vi.js +0 -23
  212. data/app/assets/javascripts/jquery.ui.datepicker-zh-CN.js +0 -23
  213. data/app/assets/javascripts/jquery.ui.datepicker-zh-HK.js +0 -23
  214. data/app/assets/javascripts/jquery.ui.datepicker-zh-TW.js +0 -23
  215. data/app/assets/javascripts/jquery.ui.droppable.js +0 -394
  216. data/app/assets/javascripts/jquery.ui.effect.all.js +0 -14
  217. data/app/assets/stylesheets/jquery.ui.base.css.erb +0 -27
@@ -0,0 +1,37 @@
1
+ /* Chinese initialisation for the jQuery UI date picker plugin. */
2
+ /* Written by Cloudream (cloudream@gmail.com). */
3
+ (function( factory ) {
4
+ if ( typeof define === "function" && define.amd ) {
5
+
6
+ // AMD. Register as an anonymous module.
7
+ define([ "../datepicker" ], factory );
8
+ } else {
9
+
10
+ // Browser globals
11
+ factory( jQuery.datepicker );
12
+ }
13
+ }(function( datepicker ) {
14
+
15
+ datepicker.regional['zh-CN'] = {
16
+ closeText: '关闭',
17
+ prevText: '<上月',
18
+ nextText: '下月>',
19
+ currentText: '今天',
20
+ monthNames: ['一月','二月','三月','四月','五月','六月',
21
+ '七月','八月','九月','十月','十一月','十二月'],
22
+ monthNamesShort: ['一月','二月','三月','四月','五月','六月',
23
+ '七月','八月','九月','十月','十一月','十二月'],
24
+ dayNames: ['星期日','星期一','星期二','星期三','星期四','星期五','星期六'],
25
+ dayNamesShort: ['周日','周一','周二','周三','周四','周五','周六'],
26
+ dayNamesMin: ['日','一','二','三','四','五','六'],
27
+ weekHeader: '周',
28
+ dateFormat: 'yy-mm-dd',
29
+ firstDay: 1,
30
+ isRTL: false,
31
+ showMonthAfterYear: true,
32
+ yearSuffix: '年'};
33
+ datepicker.setDefaults(datepicker.regional['zh-CN']);
34
+
35
+ return datepicker.regional['zh-CN'];
36
+
37
+ }));
@@ -0,0 +1,37 @@
1
+ /* Chinese initialisation for the jQuery UI date picker plugin. */
2
+ /* Written by SCCY (samuelcychan@gmail.com). */
3
+ (function( factory ) {
4
+ if ( typeof define === "function" && define.amd ) {
5
+
6
+ // AMD. Register as an anonymous module.
7
+ define([ "../datepicker" ], factory );
8
+ } else {
9
+
10
+ // Browser globals
11
+ factory( jQuery.datepicker );
12
+ }
13
+ }(function( datepicker ) {
14
+
15
+ datepicker.regional['zh-HK'] = {
16
+ closeText: '關閉',
17
+ prevText: '<上月',
18
+ nextText: '下月>',
19
+ currentText: '今天',
20
+ monthNames: ['一月','二月','三月','四月','五月','六月',
21
+ '七月','八月','九月','十月','十一月','十二月'],
22
+ monthNamesShort: ['一月','二月','三月','四月','五月','六月',
23
+ '七月','八月','九月','十月','十一月','十二月'],
24
+ dayNames: ['星期日','星期一','星期二','星期三','星期四','星期五','星期六'],
25
+ dayNamesShort: ['周日','周一','周二','周三','周四','周五','周六'],
26
+ dayNamesMin: ['日','一','二','三','四','五','六'],
27
+ weekHeader: '周',
28
+ dateFormat: 'dd-mm-yy',
29
+ firstDay: 0,
30
+ isRTL: false,
31
+ showMonthAfterYear: true,
32
+ yearSuffix: '年'};
33
+ datepicker.setDefaults(datepicker.regional['zh-HK']);
34
+
35
+ return datepicker.regional['zh-HK'];
36
+
37
+ }));
@@ -0,0 +1,37 @@
1
+ /* Chinese initialisation for the jQuery UI date picker plugin. */
2
+ /* Written by Ressol (ressol@gmail.com). */
3
+ (function( factory ) {
4
+ if ( typeof define === "function" && define.amd ) {
5
+
6
+ // AMD. Register as an anonymous module.
7
+ define([ "../datepicker" ], factory );
8
+ } else {
9
+
10
+ // Browser globals
11
+ factory( jQuery.datepicker );
12
+ }
13
+ }(function( datepicker ) {
14
+
15
+ datepicker.regional['zh-TW'] = {
16
+ closeText: '關閉',
17
+ prevText: '<上月',
18
+ nextText: '下月>',
19
+ currentText: '今天',
20
+ monthNames: ['一月','二月','三月','四月','五月','六月',
21
+ '七月','八月','九月','十月','十一月','十二月'],
22
+ monthNamesShort: ['一月','二月','三月','四月','五月','六月',
23
+ '七月','八月','九月','十月','十一月','十二月'],
24
+ dayNames: ['星期日','星期一','星期二','星期三','星期四','星期五','星期六'],
25
+ dayNamesShort: ['周日','周一','周二','周三','周四','周五','周六'],
26
+ dayNamesMin: ['日','一','二','三','四','五','六'],
27
+ weekHeader: '周',
28
+ dateFormat: 'yy/mm/dd',
29
+ firstDay: 1,
30
+ isRTL: false,
31
+ showMonthAfterYear: true,
32
+ yearSuffix: '年'};
33
+ datepicker.setDefaults(datepicker.regional['zh-TW']);
34
+
35
+ return datepicker.regional['zh-TW'];
36
+
37
+ }));
@@ -1,7 +1,7 @@
1
- //= require jquery.ui.core
1
+ //= require jquery-ui/core
2
2
 
3
3
  /*!
4
- * jQuery UI Datepicker 1.10.4
4
+ * jQuery UI Datepicker 1.11.0
5
5
  * http://jqueryui.com
6
6
  *
7
7
  * Copyright 2014 jQuery Foundation and other contributors
@@ -9,17 +9,48 @@
9
9
  * http://jquery.org/license
10
10
  *
11
11
  * http://api.jqueryui.com/datepicker/
12
- *
13
- * Depends:
14
- * jquery.ui.core.js
15
12
  */
16
- (function( $, undefined ) {
17
-
18
- $.extend($.ui, { datepicker: { version: "1.10.4" } });
19
-
20
- var PROP_NAME = "datepicker",
21
- instActive;
13
+ (function( factory ) {
14
+ if ( typeof define === "function" && define.amd ) {
15
+
16
+ // AMD. Register as an anonymous module.
17
+ define([
18
+ "jquery",
19
+ "./core"
20
+ ], factory );
21
+ } else {
22
+
23
+ // Browser globals
24
+ factory( jQuery );
25
+ }
26
+ }(function( $ ) {
27
+
28
+ $.extend($.ui, { datepicker: { version: "1.11.0" } });
29
+
30
+ var datepicker_instActive;
31
+
32
+ function datepicker_getZindex( elem ) {
33
+ var position, value;
34
+ while ( elem.length && elem[ 0 ] !== document ) {
35
+ // Ignore z-index if position is set to a value where z-index is ignored by the browser
36
+ // This makes behavior of this function consistent across browsers
37
+ // WebKit always returns auto if the element is positioned
38
+ position = elem.css( "position" );
39
+ if ( position === "absolute" || position === "relative" || position === "fixed" ) {
40
+ // IE returns 0 when zIndex is not specified
41
+ // other browsers return a string
42
+ // we ignore the case of nested elements with an explicit value of 0
43
+ // <div style="z-index: -10;"><div style="z-index: 0;"></div></div>
44
+ value = parseInt( elem.css( "zIndex" ), 10 );
45
+ if ( !isNaN( value ) && value !== 0 ) {
46
+ return value;
47
+ }
48
+ }
49
+ elem = elem.parent();
50
+ }
22
51
 
52
+ return 0;
53
+ }
23
54
  /* Date picker manager.
24
55
  Use the singleton instance of this class, $.datepicker, to interact with the date picker.
25
56
  Settings for (groups of) date pickers are maintained in an instance object,
@@ -110,7 +141,9 @@ function Datepicker() {
110
141
  disabled: false // The initial disabled state
111
142
  };
112
143
  $.extend(this._defaults, this.regional[""]);
113
- this.dpDiv = bindHover($("<div id='" + this._mainDivId + "' class='ui-datepicker ui-widget ui-widget-content ui-helper-clearfix ui-corner-all'></div>"));
144
+ this.regional.en = $.extend( true, {}, this.regional[ "" ]);
145
+ this.regional[ "en-US" ] = $.extend( true, {}, this.regional.en );
146
+ this.dpDiv = datepicker_bindHover($("<div id='" + this._mainDivId + "' class='ui-datepicker ui-widget ui-widget-content ui-helper-clearfix ui-corner-all'></div>"));
114
147
  }
115
148
 
116
149
  $.extend(Datepicker.prototype, {
@@ -130,7 +163,7 @@ $.extend(Datepicker.prototype, {
130
163
  * @return the manager object
131
164
  */
132
165
  setDefaults: function(settings) {
133
- extendRemove(this._defaults, settings || {});
166
+ datepicker_extendRemove(this._defaults, settings || {});
134
167
  return this;
135
168
  },
136
169
 
@@ -163,7 +196,7 @@ $.extend(Datepicker.prototype, {
163
196
  drawMonth: 0, drawYear: 0, // month being drawn
164
197
  inline: inline, // is datepicker inline or not
165
198
  dpDiv: (!inline ? this.dpDiv : // presentation div
166
- bindHover($("<div class='" + this._inlineClass + " ui-datepicker ui-widget ui-widget-content ui-helper-clearfix ui-corner-all'></div>")))};
199
+ datepicker_bindHover($("<div class='" + this._inlineClass + " ui-datepicker ui-widget ui-widget-content ui-helper-clearfix ui-corner-all'></div>")))};
167
200
  },
168
201
 
169
202
  /* Attach the date picker to an input field. */
@@ -178,7 +211,7 @@ $.extend(Datepicker.prototype, {
178
211
  input.addClass(this.markerClassName).keydown(this._doKeyDown).
179
212
  keypress(this._doKeyPress).keyup(this._doKeyUp);
180
213
  this._autoSize(inst);
181
- $.data(target, PROP_NAME, inst);
214
+ $.data(target, "datepicker", inst);
182
215
  //If disabled option is true, disable the datepicker once it has been attached to the input (see ticket #5665)
183
216
  if( inst.settings.disabled ) {
184
217
  this._disableDatepicker( target );
@@ -268,7 +301,7 @@ $.extend(Datepicker.prototype, {
268
301
  return;
269
302
  }
270
303
  divSpan.addClass(this.markerClassName).append(inst.dpDiv);
271
- $.data(target, PROP_NAME, inst);
304
+ $.data(target, "datepicker", inst);
272
305
  this._setDate(inst, this._getDefaultDate(inst), true);
273
306
  this._updateDatepicker(inst);
274
307
  this._updateAlternate(inst);
@@ -304,9 +337,9 @@ $.extend(Datepicker.prototype, {
304
337
  $("body").append(this._dialogInput);
305
338
  inst = this._dialogInst = this._newInst(this._dialogInput, false);
306
339
  inst.settings = {};
307
- $.data(this._dialogInput[0], PROP_NAME, inst);
340
+ $.data(this._dialogInput[0], "datepicker", inst);
308
341
  }
309
- extendRemove(inst.settings, settings || {});
342
+ datepicker_extendRemove(inst.settings, settings || {});
310
343
  date = (date && date.constructor === Date ? this._formatDate(inst, date) : date);
311
344
  this._dialogInput.val(date);
312
345
 
@@ -329,7 +362,7 @@ $.extend(Datepicker.prototype, {
329
362
  if ($.blockUI) {
330
363
  $.blockUI(this.dpDiv);
331
364
  }
332
- $.data(this._dialogInput[0], PROP_NAME, inst);
365
+ $.data(this._dialogInput[0], "datepicker", inst);
333
366
  return this;
334
367
  },
335
368
 
@@ -339,14 +372,14 @@ $.extend(Datepicker.prototype, {
339
372
  _destroyDatepicker: function(target) {
340
373
  var nodeName,
341
374
  $target = $(target),
342
- inst = $.data(target, PROP_NAME);
375
+ inst = $.data(target, "datepicker");
343
376
 
344
377
  if (!$target.hasClass(this.markerClassName)) {
345
378
  return;
346
379
  }
347
380
 
348
381
  nodeName = target.nodeName.toLowerCase();
349
- $.removeData(target, PROP_NAME);
382
+ $.removeData(target, "datepicker");
350
383
  if (nodeName === "input") {
351
384
  inst.append.remove();
352
385
  inst.trigger.remove();
@@ -366,7 +399,7 @@ $.extend(Datepicker.prototype, {
366
399
  _enableDatepicker: function(target) {
367
400
  var nodeName, inline,
368
401
  $target = $(target),
369
- inst = $.data(target, PROP_NAME);
402
+ inst = $.data(target, "datepicker");
370
403
 
371
404
  if (!$target.hasClass(this.markerClassName)) {
372
405
  return;
@@ -394,7 +427,7 @@ $.extend(Datepicker.prototype, {
394
427
  _disableDatepicker: function(target) {
395
428
  var nodeName, inline,
396
429
  $target = $(target),
397
- inst = $.data(target, PROP_NAME);
430
+ inst = $.data(target, "datepicker");
398
431
 
399
432
  if (!$target.hasClass(this.markerClassName)) {
400
433
  return;
@@ -440,7 +473,7 @@ $.extend(Datepicker.prototype, {
440
473
  */
441
474
  _getInst: function(target) {
442
475
  try {
443
- return $.data(target, PROP_NAME);
476
+ return $.data(target, "datepicker");
444
477
  }
445
478
  catch (err) {
446
479
  throw "Missing instance data for this datepicker";
@@ -480,7 +513,7 @@ $.extend(Datepicker.prototype, {
480
513
  date = this._getDateDatepicker(target, true);
481
514
  minDate = this._getMinMaxDate(inst, "min");
482
515
  maxDate = this._getMinMaxDate(inst, "max");
483
- extendRemove(inst.settings, settings);
516
+ datepicker_extendRemove(inst.settings, settings);
484
517
  // reformat the old minDate/maxDate values if dateFormat changes and a new minDate/maxDate isn't provided
485
518
  if (minDate !== null && settings.dateFormat !== undefined && settings.minDate === undefined) {
486
519
  inst.settings.minDate = this._formatDate(inst, minDate);
@@ -708,7 +741,7 @@ $.extend(Datepicker.prototype, {
708
741
  if(beforeShowSettings === false){
709
742
  return;
710
743
  }
711
- extendRemove(inst.settings, beforeShowSettings);
744
+ datepicker_extendRemove(inst.settings, beforeShowSettings);
712
745
 
713
746
  inst.lastVal = null;
714
747
  $.datepicker._lastInput = input;
@@ -745,7 +778,7 @@ $.extend(Datepicker.prototype, {
745
778
  if (!inst.inline) {
746
779
  showAnim = $.datepicker._get(inst, "showAnim");
747
780
  duration = $.datepicker._get(inst, "duration");
748
- inst.dpDiv.zIndex($(input).zIndex()+1);
781
+ inst.dpDiv.css( "z-index", datepicker_getZindex( $( input ) ) + 1 );
749
782
  $.datepicker._datepickerShowing = true;
750
783
 
751
784
  if ( $.effects && $.effects.effect[ showAnim ] ) {
@@ -765,10 +798,10 @@ $.extend(Datepicker.prototype, {
765
798
  /* Generate the date picker content. */
766
799
  _updateDatepicker: function(inst) {
767
800
  this.maxRows = 4; //Reset the max number of rows being displayed (see #7043)
768
- instActive = inst; // for delegate hover events
801
+ datepicker_instActive = inst; // for delegate hover events
769
802
  inst.dpDiv.empty().append(this._generateHTML(inst));
770
803
  this._attachHandlers(inst);
771
- inst.dpDiv.find("." + this._dayOverClass + " a").mouseover();
804
+ inst.dpDiv.find("." + this._dayOverClass + " a");
772
805
 
773
806
  var origyearshtml,
774
807
  numMonths = this._getNumberOfMonths(inst),
@@ -851,7 +884,7 @@ $.extend(Datepicker.prototype, {
851
884
  var showAnim, duration, postProcess, onClose,
852
885
  inst = this._curInst;
853
886
 
854
- if (!inst || (input && inst !== $.data(input, PROP_NAME))) {
887
+ if (!inst || (input && inst !== $.data(input, "datepicker"))) {
855
888
  return;
856
889
  }
857
890
 
@@ -1701,7 +1734,7 @@ $.extend(Datepicker.prototype, {
1701
1734
  thead = (showWeek ? "<th class='ui-datepicker-week-col'>" + this._get(inst, "weekHeader") + "</th>" : "");
1702
1735
  for (dow = 0; dow < 7; dow++) { // days of the week
1703
1736
  day = (dow + firstDay) % 7;
1704
- thead += "<th" + ((dow + firstDay + 6) % 7 >= 5 ? " class='ui-datepicker-week-end'" : "") + ">" +
1737
+ thead += "<th scope='col'" + ((dow + firstDay + 6) % 7 >= 5 ? " class='ui-datepicker-week-end'" : "") + ">" +
1705
1738
  "<span title='" + dayNames[day] + "'>" + dayNamesMin[day] + "</span></th>";
1706
1739
  }
1707
1740
  calender += thead + "</tr></thead><tbody>";
@@ -1955,9 +1988,9 @@ $.extend(Datepicker.prototype, {
1955
1988
  /*
1956
1989
  * Bind hover events for datepicker elements.
1957
1990
  * Done via delegate so the binding only occurs once in the lifetime of the parent div.
1958
- * Global instActive, set by _updateDatepicker allows the handlers to find their way back to the active picker.
1991
+ * Global datepicker_instActive, set by _updateDatepicker allows the handlers to find their way back to the active picker.
1959
1992
  */
1960
- function bindHover(dpDiv) {
1993
+ function datepicker_bindHover(dpDiv) {
1961
1994
  var selector = "button, .ui-datepicker-prev, .ui-datepicker-next, .ui-datepicker-calendar td a";
1962
1995
  return dpDiv.delegate(selector, "mouseout", function() {
1963
1996
  $(this).removeClass("ui-state-hover");
@@ -1969,7 +2002,7 @@ function bindHover(dpDiv) {
1969
2002
  }
1970
2003
  })
1971
2004
  .delegate(selector, "mouseover", function(){
1972
- if (!$.datepicker._isDisabledDatepicker( instActive.inline ? dpDiv.parent()[0] : instActive.input[0])) {
2005
+ if (!$.datepicker._isDisabledDatepicker( datepicker_instActive.inline ? dpDiv.parent()[0] : datepicker_instActive.input[0])) {
1973
2006
  $(this).parents(".ui-datepicker-calendar").find("a").removeClass("ui-state-hover");
1974
2007
  $(this).addClass("ui-state-hover");
1975
2008
  if (this.className.indexOf("ui-datepicker-prev") !== -1) {
@@ -1983,7 +2016,7 @@ function bindHover(dpDiv) {
1983
2016
  }
1984
2017
 
1985
2018
  /* jQuery extend now ignores nulls! */
1986
- function extendRemove(target, props) {
2019
+ function datepicker_extendRemove(target, props) {
1987
2020
  $.extend(target, props);
1988
2021
  for (var name in props) {
1989
2022
  if (props[name] == null) {
@@ -2035,6 +2068,8 @@ $.fn.datepicker = function(options){
2035
2068
  $.datepicker = new Datepicker(); // singleton instance
2036
2069
  $.datepicker.initialized = false;
2037
2070
  $.datepicker.uuid = new Date().getTime();
2038
- $.datepicker.version = "1.10.4";
2071
+ $.datepicker.version = "1.11.0";
2072
+
2073
+ return $.datepicker;
2039
2074
 
2040
- })(jQuery);
2075
+ }));
@@ -1,12 +1,12 @@
1
- //= require jquery.ui.core
2
- //= require jquery.ui.widget
3
- //= require jquery.ui.button
4
- //= require jquery.ui.draggable
5
- //= require jquery.ui.position
6
- //= require jquery.ui.resizable
1
+ //= require jquery-ui/core
2
+ //= require jquery-ui/widget
3
+ //= require jquery-ui/button
4
+ //= require jquery-ui/draggable
5
+ //= require jquery-ui/position
6
+ //= require jquery-ui/resizable
7
7
 
8
8
  /*!
9
- * jQuery UI Dialog 1.10.4
9
+ * jQuery UI Dialog 1.11.0
10
10
  * http://jqueryui.com
11
11
  *
12
12
  * Copyright 2014 jQuery Foundation and other contributors
@@ -14,42 +14,36 @@
14
14
  * http://jquery.org/license
15
15
  *
16
16
  * http://api.jqueryui.com/dialog/
17
- *
18
- * Depends:
19
- * jquery.ui.core.js
20
- * jquery.ui.widget.js
21
- * jquery.ui.button.js
22
- * jquery.ui.draggable.js
23
- * jquery.ui.mouse.js
24
- * jquery.ui.position.js
25
- * jquery.ui.resizable.js
26
17
  */
27
- (function( $, undefined ) {
28
-
29
- var sizeRelatedOptions = {
30
- buttons: true,
31
- height: true,
32
- maxHeight: true,
33
- maxWidth: true,
34
- minHeight: true,
35
- minWidth: true,
36
- width: true
37
- },
38
- resizableRelatedOptions = {
39
- maxHeight: true,
40
- maxWidth: true,
41
- minHeight: true,
42
- minWidth: true
43
- };
18
+ (function( factory ) {
19
+ if ( typeof define === "function" && define.amd ) {
20
+
21
+ // AMD. Register as an anonymous module.
22
+ define([
23
+ "jquery",
24
+ "./core",
25
+ "./widget",
26
+ "./button",
27
+ "./draggable",
28
+ "./mouse",
29
+ "./position",
30
+ "./resizable"
31
+ ], factory );
32
+ } else {
33
+
34
+ // Browser globals
35
+ factory( jQuery );
36
+ }
37
+ }(function( $ ) {
44
38
 
45
- $.widget( "ui.dialog", {
46
- version: "1.10.4",
39
+ return $.widget( "ui.dialog", {
40
+ version: "1.11.0",
47
41
  options: {
48
42
  appendTo: "body",
49
43
  autoOpen: true,
50
44
  buttons: [],
51
45
  closeOnEscape: true,
52
- closeText: "close",
46
+ closeText: "Close",
53
47
  dialogClass: "",
54
48
  draggable: true,
55
49
  hide: null,
@@ -90,27 +84,44 @@ $.widget( "ui.dialog", {
90
84
  resizeStop: null
91
85
  },
92
86
 
87
+ sizeRelatedOptions: {
88
+ buttons: true,
89
+ height: true,
90
+ maxHeight: true,
91
+ maxWidth: true,
92
+ minHeight: true,
93
+ minWidth: true,
94
+ width: true
95
+ },
96
+
97
+ resizableRelatedOptions: {
98
+ maxHeight: true,
99
+ maxWidth: true,
100
+ minHeight: true,
101
+ minWidth: true
102
+ },
103
+
93
104
  _create: function() {
94
105
  this.originalCss = {
95
- display: this.element[0].style.display,
96
- width: this.element[0].style.width,
97
- minHeight: this.element[0].style.minHeight,
98
- maxHeight: this.element[0].style.maxHeight,
99
- height: this.element[0].style.height
106
+ display: this.element[ 0 ].style.display,
107
+ width: this.element[ 0 ].style.width,
108
+ minHeight: this.element[ 0 ].style.minHeight,
109
+ maxHeight: this.element[ 0 ].style.maxHeight,
110
+ height: this.element[ 0 ].style.height
100
111
  };
101
112
  this.originalPosition = {
102
113
  parent: this.element.parent(),
103
114
  index: this.element.parent().children().index( this.element )
104
115
  };
105
- this.originalTitle = this.element.attr("title");
116
+ this.originalTitle = this.element.attr( "title" );
106
117
  this.options.title = this.options.title || this.originalTitle;
107
118
 
108
119
  this._createWrapper();
109
120
 
110
121
  this.element
111
122
  .show()
112
- .removeAttr("title")
113
- .addClass("ui-dialog-content ui-widget-content")
123
+ .removeAttr( "title" )
124
+ .addClass( "ui-dialog-content ui-widget-content" )
114
125
  .appendTo( this.uiDialog );
115
126
 
116
127
  this._createTitlebar();
@@ -124,6 +135,8 @@ $.widget( "ui.dialog", {
124
135
  }
125
136
 
126
137
  this._isOpen = false;
138
+
139
+ this._trackFocus();
127
140
  },
128
141
 
129
142
  _init: function() {
@@ -148,7 +161,7 @@ $.widget( "ui.dialog", {
148
161
 
149
162
  this.element
150
163
  .removeUniqueId()
151
- .removeClass("ui-dialog-content ui-widget-content")
164
+ .removeClass( "ui-dialog-content ui-widget-content" )
152
165
  .css( this.originalCss )
153
166
  // Without detaching first, the following becomes really slow
154
167
  .detach();
@@ -161,7 +174,7 @@ $.widget( "ui.dialog", {
161
174
 
162
175
  next = originalPosition.parent.children().eq( originalPosition.index );
163
176
  // Don't try to place the dialog next to itself (#8613)
164
- if ( next.length && next[0] !== this.element[0] ) {
177
+ if ( next.length && next[ 0 ] !== this.element[ 0 ] ) {
165
178
  next.before( this.element );
166
179
  } else {
167
180
  originalPosition.parent.append( this.element );
@@ -184,9 +197,11 @@ $.widget( "ui.dialog", {
184
197
  }
185
198
 
186
199
  this._isOpen = false;
200
+ this._focusedElement = null;
187
201
  this._destroyOverlay();
202
+ this._untrackInstance();
188
203
 
189
- if ( !this.opener.filter(":focusable").focus().length ) {
204
+ if ( !this.opener.filter( ":focusable" ).focus().length ) {
190
205
 
191
206
  // support: IE9
192
207
  // IE9 throws an "Unspecified error" accessing document.activeElement from an <iframe>
@@ -219,7 +234,17 @@ $.widget( "ui.dialog", {
219
234
  },
220
235
 
221
236
  _moveToTop: function( event, silent ) {
222
- var moved = !!this.uiDialog.nextAll(":visible").insertBefore( this.uiDialog ).length;
237
+ var moved = false,
238
+ zIndicies = this.uiDialog.siblings( ".ui-front:visible" ).map(function() {
239
+ return +$( this ).css( "z-index" );
240
+ }).get(),
241
+ zIndexMax = Math.max.apply( null, zIndicies );
242
+
243
+ if ( zIndexMax >= +this.uiDialog.css( "z-index" ) ) {
244
+ this.uiDialog.css( "z-index", zIndexMax + 1 );
245
+ moved = true;
246
+ }
247
+
223
248
  if ( moved && !silent ) {
224
249
  this._trigger( "focus", event );
225
250
  }
@@ -236,7 +261,7 @@ $.widget( "ui.dialog", {
236
261
  }
237
262
 
238
263
  this._isOpen = true;
239
- this.opener = $( this.document[0].activeElement );
264
+ this.opener = $( this.document[ 0 ].activeElement );
240
265
 
241
266
  this._size();
242
267
  this._position();
@@ -244,28 +269,32 @@ $.widget( "ui.dialog", {
244
269
  this._moveToTop( null, true );
245
270
  this._show( this.uiDialog, this.options.show, function() {
246
271
  that._focusTabbable();
247
- that._trigger("focus");
272
+ that._trigger( "focus" );
248
273
  });
249
274
 
250
- this._trigger("open");
275
+ this._trigger( "open" );
251
276
  },
252
277
 
253
278
  _focusTabbable: function() {
254
279
  // Set focus to the first match:
255
- // 1. First element inside the dialog matching [autofocus]
256
- // 2. Tabbable element inside the content element
257
- // 3. Tabbable element inside the buttonpane
258
- // 4. The close button
259
- // 5. The dialog itself
260
- var hasFocus = this.element.find("[autofocus]");
280
+ // 1. An element that was focused previously
281
+ // 2. First element inside the dialog matching [autofocus]
282
+ // 3. Tabbable element inside the content element
283
+ // 4. Tabbable element inside the buttonpane
284
+ // 5. The close button
285
+ // 6. The dialog itself
286
+ var hasFocus = this._focusedElement;
287
+ if ( !hasFocus ) {
288
+ hasFocus = this.element.find( "[autofocus]" );
289
+ }
261
290
  if ( !hasFocus.length ) {
262
- hasFocus = this.element.find(":tabbable");
291
+ hasFocus = this.element.find( ":tabbable" );
263
292
  }
264
293
  if ( !hasFocus.length ) {
265
- hasFocus = this.uiDialogButtonPane.find(":tabbable");
294
+ hasFocus = this.uiDialogButtonPane.find( ":tabbable" );
266
295
  }
267
296
  if ( !hasFocus.length ) {
268
- hasFocus = this.uiDialogTitlebarClose.filter(":tabbable");
297
+ hasFocus = this.uiDialogTitlebarClose.filter( ":tabbable" );
269
298
  }
270
299
  if ( !hasFocus.length ) {
271
300
  hasFocus = this.uiDialog;
@@ -312,18 +341,22 @@ $.widget( "ui.dialog", {
312
341
  }
313
342
 
314
343
  // prevent tabbing out of dialogs
315
- if ( event.keyCode !== $.ui.keyCode.TAB ) {
344
+ if ( event.keyCode !== $.ui.keyCode.TAB || event.isDefaultPrevented() ) {
316
345
  return;
317
346
  }
318
- var tabbables = this.uiDialog.find(":tabbable"),
319
- first = tabbables.filter(":first"),
320
- last = tabbables.filter(":last");
347
+ var tabbables = this.uiDialog.find( ":tabbable" ),
348
+ first = tabbables.filter( ":first" ),
349
+ last = tabbables.filter( ":last" );
321
350
 
322
351
  if ( ( event.target === last[0] || event.target === this.uiDialog[0] ) && !event.shiftKey ) {
323
- first.focus( 1 );
352
+ this._delay(function() {
353
+ first.focus();
354
+ });
324
355
  event.preventDefault();
325
356
  } else if ( ( event.target === first[0] || event.target === this.uiDialog[0] ) && event.shiftKey ) {
326
- last.focus( 1 );
357
+ this._delay(function() {
358
+ last.focus();
359
+ });
327
360
  event.preventDefault();
328
361
  }
329
362
  },
@@ -337,9 +370,9 @@ $.widget( "ui.dialog", {
337
370
  // We assume that any existing aria-describedby attribute means
338
371
  // that the dialog content is marked up properly
339
372
  // otherwise we brute force the content as the description
340
- if ( !this.element.find("[aria-describedby]").length ) {
373
+ if ( !this.element.find( "[aria-describedby]" ).length ) {
341
374
  this.uiDialog.attr({
342
- "aria-describedby": this.element.uniqueId().attr("id")
375
+ "aria-describedby": this.element.uniqueId().attr( "id" )
343
376
  });
344
377
  }
345
378
  },
@@ -347,15 +380,15 @@ $.widget( "ui.dialog", {
347
380
  _createTitlebar: function() {
348
381
  var uiDialogTitle;
349
382
 
350
- this.uiDialogTitlebar = $("<div>")
351
- .addClass("ui-dialog-titlebar ui-widget-header ui-corner-all ui-helper-clearfix")
383
+ this.uiDialogTitlebar = $( "<div>" )
384
+ .addClass( "ui-dialog-titlebar ui-widget-header ui-corner-all ui-helper-clearfix" )
352
385
  .prependTo( this.uiDialog );
353
386
  this._on( this.uiDialogTitlebar, {
354
387
  mousedown: function( event ) {
355
388
  // Don't prevent click on close button (#8838)
356
389
  // Focusing a dialog that is partially scrolled out of view
357
390
  // causes the browser to scroll it into view, preventing the click event
358
- if ( !$( event.target ).closest(".ui-dialog-titlebar-close") ) {
391
+ if ( !$( event.target ).closest( ".ui-dialog-titlebar-close" ) ) {
359
392
  // Dialog isn't getting focus when dragging (#8063)
360
393
  this.uiDialog.focus();
361
394
  }
@@ -373,7 +406,7 @@ $.widget( "ui.dialog", {
373
406
  },
374
407
  text: false
375
408
  })
376
- .addClass("ui-dialog-titlebar-close")
409
+ .addClass( "ui-dialog-titlebar-close" )
377
410
  .appendTo( this.uiDialogTitlebar );
378
411
  this._on( this.uiDialogTitlebarClose, {
379
412
  click: function( event ) {
@@ -382,30 +415,30 @@ $.widget( "ui.dialog", {
382
415
  }
383
416
  });
384
417
 
385
- uiDialogTitle = $("<span>")
418
+ uiDialogTitle = $( "<span>" )
386
419
  .uniqueId()
387
- .addClass("ui-dialog-title")
420
+ .addClass( "ui-dialog-title" )
388
421
  .prependTo( this.uiDialogTitlebar );
389
422
  this._title( uiDialogTitle );
390
423
 
391
424
  this.uiDialog.attr({
392
- "aria-labelledby": uiDialogTitle.attr("id")
425
+ "aria-labelledby": uiDialogTitle.attr( "id" )
393
426
  });
394
427
  },
395
428
 
396
429
  _title: function( title ) {
397
430
  if ( !this.options.title ) {
398
- title.html("&#160;");
431
+ title.html( "&#160;" );
399
432
  }
400
433
  title.text( this.options.title );
401
434
  },
402
435
 
403
436
  _createButtonPane: function() {
404
- this.uiDialogButtonPane = $("<div>")
405
- .addClass("ui-dialog-buttonpane ui-widget-content ui-helper-clearfix");
437
+ this.uiDialogButtonPane = $( "<div>" )
438
+ .addClass( "ui-dialog-buttonpane ui-widget-content ui-helper-clearfix" );
406
439
 
407
- this.uiButtonSet = $("<div>")
408
- .addClass("ui-dialog-buttonset")
440
+ this.uiButtonSet = $( "<div>" )
441
+ .addClass( "ui-dialog-buttonset" )
409
442
  .appendTo( this.uiDialogButtonPane );
410
443
 
411
444
  this._createButtons();
@@ -420,7 +453,7 @@ $.widget( "ui.dialog", {
420
453
  this.uiButtonSet.empty();
421
454
 
422
455
  if ( $.isEmptyObject( buttons ) || ($.isArray( buttons ) && !buttons.length) ) {
423
- this.uiDialog.removeClass("ui-dialog-buttons");
456
+ this.uiDialog.removeClass( "ui-dialog-buttons" );
424
457
  return;
425
458
  }
426
459
 
@@ -434,7 +467,7 @@ $.widget( "ui.dialog", {
434
467
  // Change the context for the click callback to be the main element
435
468
  click = props.click;
436
469
  props.click = function() {
437
- click.apply( that.element[0], arguments );
470
+ click.apply( that.element[ 0 ], arguments );
438
471
  };
439
472
  buttonOptions = {
440
473
  icons: props.icons,
@@ -446,7 +479,7 @@ $.widget( "ui.dialog", {
446
479
  .button( buttonOptions )
447
480
  .appendTo( that.uiButtonSet );
448
481
  });
449
- this.uiDialog.addClass("ui-dialog-buttons");
482
+ this.uiDialog.addClass( "ui-dialog-buttons" );
450
483
  this.uiDialogButtonPane.appendTo( this.uiDialog );
451
484
  },
452
485
 
@@ -466,7 +499,7 @@ $.widget( "ui.dialog", {
466
499
  handle: ".ui-dialog-titlebar",
467
500
  containment: "document",
468
501
  start: function( event, ui ) {
469
- $( this ).addClass("ui-dialog-dragging");
502
+ $( this ).addClass( "ui-dialog-dragging" );
470
503
  that._blockFrames();
471
504
  that._trigger( "dragStart", event, filteredUi( ui ) );
472
505
  },
@@ -474,11 +507,16 @@ $.widget( "ui.dialog", {
474
507
  that._trigger( "drag", event, filteredUi( ui ) );
475
508
  },
476
509
  stop: function( event, ui ) {
477
- options.position = [
478
- ui.position.left - that.document.scrollLeft(),
479
- ui.position.top - that.document.scrollTop()
480
- ];
481
- $( this ).removeClass("ui-dialog-dragging");
510
+ var left = ui.offset.left - that.document.scrollLeft(),
511
+ top = ui.offset.top - that.document.scrollTop();
512
+
513
+ options.position = {
514
+ my: "left top",
515
+ at: "left" + (left >= 0 ? "+" : "") + left + " " +
516
+ "top" + (top >= 0 ? "+" : "") + top,
517
+ of: that.window
518
+ };
519
+ $( this ).removeClass( "ui-dialog-dragging" );
482
520
  that._unblockFrames();
483
521
  that._trigger( "dragStop", event, filteredUi( ui ) );
484
522
  }
@@ -515,7 +553,7 @@ $.widget( "ui.dialog", {
515
553
  minHeight: this._minHeight(),
516
554
  handles: resizeHandles,
517
555
  start: function( event, ui ) {
518
- $( this ).addClass("ui-dialog-resizing");
556
+ $( this ).addClass( "ui-dialog-resizing" );
519
557
  that._blockFrames();
520
558
  that._trigger( "resizeStart", event, filteredUi( ui ) );
521
559
  },
@@ -523,9 +561,19 @@ $.widget( "ui.dialog", {
523
561
  that._trigger( "resize", event, filteredUi( ui ) );
524
562
  },
525
563
  stop: function( event, ui ) {
526
- options.height = $( this ).height();
527
- options.width = $( this ).width();
528
- $( this ).removeClass("ui-dialog-resizing");
564
+ var offset = that.uiDialog.offset(),
565
+ left = offset.left - that.document.scrollLeft(),
566
+ top = offset.top - that.document.scrollTop();
567
+
568
+ options.height = that.uiDialog.height();
569
+ options.width = that.uiDialog.width();
570
+ options.position = {
571
+ my: "left top",
572
+ at: "left" + (left >= 0 ? "+" : "") + left + " " +
573
+ "top" + (top >= 0 ? "+" : "") + top,
574
+ of: that.window
575
+ };
576
+ $( this ).removeClass( "ui-dialog-resizing" );
529
577
  that._unblockFrames();
530
578
  that._trigger( "resizeStop", event, filteredUi( ui ) );
531
579
  }
@@ -533,6 +581,33 @@ $.widget( "ui.dialog", {
533
581
  .css( "position", position );
534
582
  },
535
583
 
584
+ _trackFocus: function() {
585
+ this._on( this.widget(), {
586
+ "focusin": function( event ) {
587
+ this._untrackInstance();
588
+ this._trackingInstances().unshift( this );
589
+ this._focusedElement = $( event.target );
590
+ }
591
+ });
592
+ },
593
+
594
+ _untrackInstance: function() {
595
+ var instances = this._trackingInstances(),
596
+ exists = $.inArray( this, instances );
597
+ if ( exists !== -1 ) {
598
+ instances.splice( exists, 1 );
599
+ }
600
+ },
601
+
602
+ _trackingInstances: function() {
603
+ var instances = this.document.data( "ui-dialog-instances" );
604
+ if ( !instances ) {
605
+ instances = [];
606
+ this.document.data( "ui-dialog-instances", instances );
607
+ }
608
+ return instances;
609
+ },
610
+
536
611
  _minHeight: function() {
537
612
  var options = this.options;
538
613
 
@@ -543,7 +618,7 @@ $.widget( "ui.dialog", {
543
618
 
544
619
  _position: function() {
545
620
  // Need to show the dialog to get the actual offset in the position plugin
546
- var isVisible = this.uiDialog.is(":visible");
621
+ var isVisible = this.uiDialog.is( ":visible" );
547
622
  if ( !isVisible ) {
548
623
  this.uiDialog.show();
549
624
  }
@@ -561,10 +636,10 @@ $.widget( "ui.dialog", {
561
636
  $.each( options, function( key, value ) {
562
637
  that._setOption( key, value );
563
638
 
564
- if ( key in sizeRelatedOptions ) {
639
+ if ( key in that.sizeRelatedOptions ) {
565
640
  resize = true;
566
641
  }
567
- if ( key in resizableRelatedOptions ) {
642
+ if ( key in that.resizableRelatedOptions ) {
568
643
  resizableOptions[ key ] = value;
569
644
  }
570
645
  });
@@ -573,7 +648,7 @@ $.widget( "ui.dialog", {
573
648
  this._size();
574
649
  this._position();
575
650
  }
576
- if ( this.uiDialog.is(":data(ui-resizable)") ) {
651
+ if ( this.uiDialog.is( ":data(ui-resizable)" ) ) {
577
652
  this.uiDialog.resizable( "option", resizableOptions );
578
653
  }
579
654
  },
@@ -610,9 +685,9 @@ $.widget( "ui.dialog", {
610
685
  }
611
686
 
612
687
  if ( key === "draggable" ) {
613
- isDraggable = uiDialog.is(":data(ui-draggable)");
688
+ isDraggable = uiDialog.is( ":data(ui-draggable)" );
614
689
  if ( isDraggable && !value ) {
615
- uiDialog.draggable("destroy");
690
+ uiDialog.draggable( "destroy" );
616
691
  }
617
692
 
618
693
  if ( !isDraggable && value ) {
@@ -626,9 +701,9 @@ $.widget( "ui.dialog", {
626
701
 
627
702
  if ( key === "resizable" ) {
628
703
  // currently resizable, becoming non-resizable
629
- isResizable = uiDialog.is(":data(ui-resizable)");
704
+ isResizable = uiDialog.is( ":data(ui-resizable)" );
630
705
  if ( isResizable && !value ) {
631
- uiDialog.resizable("destroy");
706
+ uiDialog.resizable( "destroy" );
632
707
  }
633
708
 
634
709
  // currently resizable, changing handles
@@ -643,7 +718,7 @@ $.widget( "ui.dialog", {
643
718
  }
644
719
 
645
720
  if ( key === "title" ) {
646
- this._title( this.uiDialogTitlebar.find(".ui-dialog-title") );
721
+ this._title( this.uiDialogTitlebar.find( ".ui-dialog-title" ) );
647
722
  }
648
723
  },
649
724
 
@@ -687,7 +762,7 @@ $.widget( "ui.dialog", {
687
762
  this.element.height( Math.max( 0, options.height - nonContentHeight ) );
688
763
  }
689
764
 
690
- if (this.uiDialog.is(":data(ui-resizable)") ) {
765
+ if ( this.uiDialog.is( ":data(ui-resizable)" ) ) {
691
766
  this.uiDialog.resizable( "option", "minHeight", this._minHeight() );
692
767
  }
693
768
  },
@@ -715,13 +790,13 @@ $.widget( "ui.dialog", {
715
790
  },
716
791
 
717
792
  _allowInteraction: function( event ) {
718
- if ( $( event.target ).closest(".ui-dialog").length ) {
793
+ if ( $( event.target ).closest( ".ui-dialog" ).length ) {
719
794
  return true;
720
795
  }
721
796
 
722
797
  // TODO: Remove hack when datepicker implements
723
798
  // the .ui-front logic (#8989)
724
- return !!$( event.target ).closest(".ui-datepicker").length;
799
+ return !!$( event.target ).closest( ".ui-datepicker" ).length;
725
800
  },
726
801
 
727
802
  _createOverlay: function() {
@@ -729,33 +804,40 @@ $.widget( "ui.dialog", {
729
804
  return;
730
805
  }
731
806
 
732
- var that = this,
733
- widgetFullName = this.widgetFullName;
734
- if ( !$.ui.dialog.overlayInstances ) {
735
- // Prevent use of anchors and inputs.
736
- // We use a delay in case the overlay is created from an
737
- // event that we're going to be cancelling. (#2804)
738
- this._delay(function() {
739
- // Handle .dialog().dialog("close") (#4065)
740
- if ( $.ui.dialog.overlayInstances ) {
741
- this.document.bind( "focusin.dialog", function( event ) {
742
- if ( !that._allowInteraction( event ) ) {
743
- event.preventDefault();
744
- $(".ui-dialog:visible:last .ui-dialog-content")
745
- .data( widgetFullName )._focusTabbable();
746
- }
747
- });
807
+ // We use a delay in case the overlay is created from an
808
+ // event that we're going to be cancelling (#2804)
809
+ var isOpening = true;
810
+ this._delay(function() {
811
+ isOpening = false;
812
+ });
813
+
814
+ if ( !this.document.data( "ui-dialog-overlays" ) ) {
815
+
816
+ // Prevent use of anchors and inputs
817
+ // Using _on() for an event handler shared across many instances is
818
+ // safe because the dialogs stack and must be closed in reverse order
819
+ this._on( this.document, {
820
+ focusin: function( event ) {
821
+ if ( isOpening ) {
822
+ return;
823
+ }
824
+
825
+ if ( !this._allowInteraction( event ) ) {
826
+ event.preventDefault();
827
+ this._trackingInstances()[ 0 ]._focusTabbable();
828
+ }
748
829
  }
749
830
  });
750
831
  }
751
832
 
752
- this.overlay = $("<div>")
753
- .addClass("ui-widget-overlay ui-front")
833
+ this.overlay = $( "<div>" )
834
+ .addClass( "ui-widget-overlay ui-front" )
754
835
  .appendTo( this._appendTo() );
755
836
  this._on( this.overlay, {
756
837
  mousedown: "_keepFocus"
757
838
  });
758
- $.ui.dialog.overlayInstances++;
839
+ this.document.data( "ui-dialog-overlays",
840
+ (this.document.data( "ui-dialog-overlays" ) || 0) + 1 );
759
841
  },
760
842
 
761
843
  _destroyOverlay: function() {
@@ -764,67 +846,20 @@ $.widget( "ui.dialog", {
764
846
  }
765
847
 
766
848
  if ( this.overlay ) {
767
- $.ui.dialog.overlayInstances--;
849
+ var overlays = this.document.data( "ui-dialog-overlays" ) - 1;
768
850
 
769
- if ( !$.ui.dialog.overlayInstances ) {
770
- this.document.unbind( "focusin.dialog" );
851
+ if ( !overlays ) {
852
+ this.document
853
+ .unbind( "focusin" )
854
+ .removeData( "ui-dialog-overlays" );
855
+ } else {
856
+ this.document.data( "ui-dialog-overlays", overlays );
771
857
  }
858
+
772
859
  this.overlay.remove();
773
860
  this.overlay = null;
774
861
  }
775
862
  }
776
863
  });
777
864
 
778
- $.ui.dialog.overlayInstances = 0;
779
-
780
- // DEPRECATED
781
- if ( $.uiBackCompat !== false ) {
782
- // position option with array notation
783
- // just override with old implementation
784
- $.widget( "ui.dialog", $.ui.dialog, {
785
- _position: function() {
786
- var position = this.options.position,
787
- myAt = [],
788
- offset = [ 0, 0 ],
789
- isVisible;
790
-
791
- if ( position ) {
792
- if ( typeof position === "string" || (typeof position === "object" && "0" in position ) ) {
793
- myAt = position.split ? position.split(" ") : [ position[0], position[1] ];
794
- if ( myAt.length === 1 ) {
795
- myAt[1] = myAt[0];
796
- }
797
-
798
- $.each( [ "left", "top" ], function( i, offsetPosition ) {
799
- if ( +myAt[ i ] === myAt[ i ] ) {
800
- offset[ i ] = myAt[ i ];
801
- myAt[ i ] = offsetPosition;
802
- }
803
- });
804
-
805
- position = {
806
- my: myAt[0] + (offset[0] < 0 ? offset[0] : "+" + offset[0]) + " " +
807
- myAt[1] + (offset[1] < 0 ? offset[1] : "+" + offset[1]),
808
- at: myAt.join(" ")
809
- };
810
- }
811
-
812
- position = $.extend( {}, $.ui.dialog.prototype.options.position, position );
813
- } else {
814
- position = $.ui.dialog.prototype.options.position;
815
- }
816
-
817
- // need to show the dialog to get the actual offset in the position plugin
818
- isVisible = this.uiDialog.is(":visible");
819
- if ( !isVisible ) {
820
- this.uiDialog.show();
821
- }
822
- this.uiDialog.position( position );
823
- if ( !isVisible ) {
824
- this.uiDialog.hide();
825
- }
826
- }
827
- });
828
- }
829
-
830
- }( jQuery ) );
865
+ }));