jquery-ui-rails-dox-fork 7.0.2

Sign up to get free protection for your applications and to get access to all the features.
Files changed (180) hide show
  1. checksums.yaml +7 -0
  2. data/.gitignore +2 -0
  3. data/.gitmodules +3 -0
  4. data/.travis.yml +2 -0
  5. data/CONTRIBUTING.txt +30 -0
  6. data/Gemfile +3 -0
  7. data/History.md +172 -0
  8. data/License.txt +2 -0
  9. data/README.md +311 -0
  10. data/Rakefile +263 -0
  11. data/VERSIONS.md +41 -0
  12. data/app/assets/images/jquery-ui/ui-bg_flat_0_aaaaaa_40x100.png +0 -0
  13. data/app/assets/images/jquery-ui/ui-icons_444444_256x240.png +0 -0
  14. data/app/assets/images/jquery-ui/ui-icons_555555_256x240.png +0 -0
  15. data/app/assets/images/jquery-ui/ui-icons_777620_256x240.png +0 -0
  16. data/app/assets/images/jquery-ui/ui-icons_777777_256x240.png +0 -0
  17. data/app/assets/images/jquery-ui/ui-icons_cc0000_256x240.png +0 -0
  18. data/app/assets/images/jquery-ui/ui-icons_ffffff_256x240.png +0 -0
  19. data/app/assets/javascripts/jquery-ui/core.js +15 -0
  20. data/app/assets/javascripts/jquery-ui/data.js +45 -0
  21. data/app/assets/javascripts/jquery-ui/disable-selection.js +51 -0
  22. data/app/assets/javascripts/jquery-ui/effect.all.js +15 -0
  23. data/app/assets/javascripts/jquery-ui/effect.js +975 -0
  24. data/app/assets/javascripts/jquery-ui/effects/effect-blind.js +76 -0
  25. data/app/assets/javascripts/jquery-ui/effects/effect-bounce.js +116 -0
  26. data/app/assets/javascripts/jquery-ui/effects/effect-clip.js +71 -0
  27. data/app/assets/javascripts/jquery-ui/effects/effect-drop.js +75 -0
  28. data/app/assets/javascripts/jquery-ui/effects/effect-explode.js +117 -0
  29. data/app/assets/javascripts/jquery-ui/effects/effect-fade.js +53 -0
  30. data/app/assets/javascripts/jquery-ui/effects/effect-fold.js +95 -0
  31. data/app/assets/javascripts/jquery-ui/effects/effect-highlight.js +63 -0
  32. data/app/assets/javascripts/jquery-ui/effects/effect-puff.js +49 -0
  33. data/app/assets/javascripts/jquery-ui/effects/effect-pulsate.js +70 -0
  34. data/app/assets/javascripts/jquery-ui/effects/effect-scale.js +63 -0
  35. data/app/assets/javascripts/jquery-ui/effects/effect-shake.js +80 -0
  36. data/app/assets/javascripts/jquery-ui/effects/effect-size.js +199 -0
  37. data/app/assets/javascripts/jquery-ui/effects/effect-slide.js +82 -0
  38. data/app/assets/javascripts/jquery-ui/effects/effect-transfer.js +46 -0
  39. data/app/assets/javascripts/jquery-ui/focusable.js +89 -0
  40. data/app/assets/javascripts/jquery-ui/form-reset-mixin.js +83 -0
  41. data/app/assets/javascripts/jquery-ui/form.js +25 -0
  42. data/app/assets/javascripts/jquery-ui/i18n/datepicker-af.js +40 -0
  43. data/app/assets/javascripts/jquery-ui/i18n/datepicker-ar-DZ.js +42 -0
  44. data/app/assets/javascripts/jquery-ui/i18n/datepicker-ar.js +42 -0
  45. data/app/assets/javascripts/jquery-ui/i18n/datepicker-az.js +40 -0
  46. data/app/assets/javascripts/jquery-ui/i18n/datepicker-be.js +40 -0
  47. data/app/assets/javascripts/jquery-ui/i18n/datepicker-bg.js +41 -0
  48. data/app/assets/javascripts/jquery-ui/i18n/datepicker-bs.js +40 -0
  49. data/app/assets/javascripts/jquery-ui/i18n/datepicker-ca.js +40 -0
  50. data/app/assets/javascripts/jquery-ui/i18n/datepicker-cs.js +40 -0
  51. data/app/assets/javascripts/jquery-ui/i18n/datepicker-cy-GB.js +48 -0
  52. data/app/assets/javascripts/jquery-ui/i18n/datepicker-da.js +40 -0
  53. data/app/assets/javascripts/jquery-ui/i18n/datepicker-de-AT.js +41 -0
  54. data/app/assets/javascripts/jquery-ui/i18n/datepicker-de.js +40 -0
  55. data/app/assets/javascripts/jquery-ui/i18n/datepicker-el.js +40 -0
  56. data/app/assets/javascripts/jquery-ui/i18n/datepicker-en-AU.js +40 -0
  57. data/app/assets/javascripts/jquery-ui/i18n/datepicker-en-GB.js +40 -0
  58. data/app/assets/javascripts/jquery-ui/i18n/datepicker-en-NZ.js +40 -0
  59. data/app/assets/javascripts/jquery-ui/i18n/datepicker-eo.js +40 -0
  60. data/app/assets/javascripts/jquery-ui/i18n/datepicker-es.js +40 -0
  61. data/app/assets/javascripts/jquery-ui/i18n/datepicker-et.js +48 -0
  62. data/app/assets/javascripts/jquery-ui/i18n/datepicker-eu.js +39 -0
  63. data/app/assets/javascripts/jquery-ui/i18n/datepicker-fa.js +76 -0
  64. data/app/assets/javascripts/jquery-ui/i18n/datepicker-fi.js +40 -0
  65. data/app/assets/javascripts/jquery-ui/i18n/datepicker-fo.js +48 -0
  66. data/app/assets/javascripts/jquery-ui/i18n/datepicker-fr-CA.js +40 -0
  67. data/app/assets/javascripts/jquery-ui/i18n/datepicker-fr-CH.js +40 -0
  68. data/app/assets/javascripts/jquery-ui/i18n/datepicker-fr.js +42 -0
  69. data/app/assets/javascripts/jquery-ui/i18n/datepicker-gl.js +40 -0
  70. data/app/assets/javascripts/jquery-ui/i18n/datepicker-he.js +40 -0
  71. data/app/assets/javascripts/jquery-ui/i18n/datepicker-hi.js +40 -0
  72. data/app/assets/javascripts/jquery-ui/i18n/datepicker-hr.js +40 -0
  73. data/app/assets/javascripts/jquery-ui/i18n/datepicker-hu.js +39 -0
  74. data/app/assets/javascripts/jquery-ui/i18n/datepicker-hy.js +40 -0
  75. data/app/assets/javascripts/jquery-ui/i18n/datepicker-id.js +41 -0
  76. data/app/assets/javascripts/jquery-ui/i18n/datepicker-is.js +48 -0
  77. data/app/assets/javascripts/jquery-ui/i18n/datepicker-it-CH.js +40 -0
  78. data/app/assets/javascripts/jquery-ui/i18n/datepicker-it.js +40 -0
  79. data/app/assets/javascripts/jquery-ui/i18n/datepicker-ja.js +40 -0
  80. data/app/assets/javascripts/jquery-ui/i18n/datepicker-ka.js +51 -0
  81. data/app/assets/javascripts/jquery-ui/i18n/datepicker-kk.js +40 -0
  82. data/app/assets/javascripts/jquery-ui/i18n/datepicker-km.js +40 -0
  83. data/app/assets/javascripts/jquery-ui/i18n/datepicker-ko.js +40 -0
  84. data/app/assets/javascripts/jquery-ui/i18n/datepicker-ky.js +41 -0
  85. data/app/assets/javascripts/jquery-ui/i18n/datepicker-lb.js +48 -0
  86. data/app/assets/javascripts/jquery-ui/i18n/datepicker-lt.js +48 -0
  87. data/app/assets/javascripts/jquery-ui/i18n/datepicker-lv.js +48 -0
  88. data/app/assets/javascripts/jquery-ui/i18n/datepicker-mk.js +40 -0
  89. data/app/assets/javascripts/jquery-ui/i18n/datepicker-ml.js +40 -0
  90. data/app/assets/javascripts/jquery-ui/i18n/datepicker-ms.js +40 -0
  91. data/app/assets/javascripts/jquery-ui/i18n/datepicker-nb.js +52 -0
  92. data/app/assets/javascripts/jquery-ui/i18n/datepicker-nl-BE.js +40 -0
  93. data/app/assets/javascripts/jquery-ui/i18n/datepicker-nl.js +40 -0
  94. data/app/assets/javascripts/jquery-ui/i18n/datepicker-nn.js +52 -0
  95. data/app/assets/javascripts/jquery-ui/i18n/datepicker-no.js +53 -0
  96. data/app/assets/javascripts/jquery-ui/i18n/datepicker-pl.js +40 -0
  97. data/app/assets/javascripts/jquery-ui/i18n/datepicker-pt-BR.js +48 -0
  98. data/app/assets/javascripts/jquery-ui/i18n/datepicker-pt.js +47 -0
  99. data/app/assets/javascripts/jquery-ui/i18n/datepicker-rm.js +64 -0
  100. data/app/assets/javascripts/jquery-ui/i18n/datepicker-ro.js +43 -0
  101. data/app/assets/javascripts/jquery-ui/i18n/datepicker-ru.js +40 -0
  102. data/app/assets/javascripts/jquery-ui/i18n/datepicker-sk.js +40 -0
  103. data/app/assets/javascripts/jquery-ui/i18n/datepicker-sl.js +41 -0
  104. data/app/assets/javascripts/jquery-ui/i18n/datepicker-sq.js +40 -0
  105. data/app/assets/javascripts/jquery-ui/i18n/datepicker-sr-SR.js +40 -0
  106. data/app/assets/javascripts/jquery-ui/i18n/datepicker-sr.js +40 -0
  107. data/app/assets/javascripts/jquery-ui/i18n/datepicker-sv.js +40 -0
  108. data/app/assets/javascripts/jquery-ui/i18n/datepicker-ta.js +56 -0
  109. data/app/assets/javascripts/jquery-ui/i18n/datepicker-th.js +40 -0
  110. data/app/assets/javascripts/jquery-ui/i18n/datepicker-tj.js +40 -0
  111. data/app/assets/javascripts/jquery-ui/i18n/datepicker-tr.js +40 -0
  112. data/app/assets/javascripts/jquery-ui/i18n/datepicker-uk.js +41 -0
  113. data/app/assets/javascripts/jquery-ui/i18n/datepicker-vi.js +40 -0
  114. data/app/assets/javascripts/jquery-ui/i18n/datepicker-zh-CN.js +40 -0
  115. data/app/assets/javascripts/jquery-ui/i18n/datepicker-zh-HK.js +40 -0
  116. data/app/assets/javascripts/jquery-ui/i18n/datepicker-zh-TW.js +40 -0
  117. data/app/assets/javascripts/jquery-ui/ie.js +20 -0
  118. data/app/assets/javascripts/jquery-ui/jquery-patch.js +91 -0
  119. data/app/assets/javascripts/jquery-ui/jquery-var-for-color.js +24 -0
  120. data/app/assets/javascripts/jquery-ui/keycode.js +51 -0
  121. data/app/assets/javascripts/jquery-ui/labels.js +71 -0
  122. data/app/assets/javascripts/jquery-ui/plugin.js +49 -0
  123. data/app/assets/javascripts/jquery-ui/position.js +513 -0
  124. data/app/assets/javascripts/jquery-ui/safe-active-element.js +46 -0
  125. data/app/assets/javascripts/jquery-ui/safe-blur.js +27 -0
  126. data/app/assets/javascripts/jquery-ui/scroll-parent.js +50 -0
  127. data/app/assets/javascripts/jquery-ui/tabbable.js +41 -0
  128. data/app/assets/javascripts/jquery-ui/unique-id.js +54 -0
  129. data/app/assets/javascripts/jquery-ui/vendor/jquery-color/jquery.color.js +722 -0
  130. data/app/assets/javascripts/jquery-ui/version.js +20 -0
  131. data/app/assets/javascripts/jquery-ui/widget.js +758 -0
  132. data/app/assets/javascripts/jquery-ui/widgets/accordion.js +627 -0
  133. data/app/assets/javascripts/jquery-ui/widgets/autocomplete.js +685 -0
  134. data/app/assets/javascripts/jquery-ui/widgets/button.js +454 -0
  135. data/app/assets/javascripts/jquery-ui/widgets/checkboxradio.js +294 -0
  136. data/app/assets/javascripts/jquery-ui/widgets/controlgroup.js +304 -0
  137. data/app/assets/javascripts/jquery-ui/widgets/datepicker.js +2243 -0
  138. data/app/assets/javascripts/jquery-ui/widgets/dialog.js +968 -0
  139. data/app/assets/javascripts/jquery-ui/widgets/draggable.js +1268 -0
  140. data/app/assets/javascripts/jquery-ui/widgets/droppable.js +508 -0
  141. data/app/assets/javascripts/jquery-ui/widgets/menu.js +720 -0
  142. data/app/assets/javascripts/jquery-ui/widgets/mouse.js +241 -0
  143. data/app/assets/javascripts/jquery-ui/widgets/progressbar.js +184 -0
  144. data/app/assets/javascripts/jquery-ui/widgets/resizable.js +1225 -0
  145. data/app/assets/javascripts/jquery-ui/widgets/selectable.js +321 -0
  146. data/app/assets/javascripts/jquery-ui/widgets/selectmenu.js +702 -0
  147. data/app/assets/javascripts/jquery-ui/widgets/slider.js +760 -0
  148. data/app/assets/javascripts/jquery-ui/widgets/sortable.js +1622 -0
  149. data/app/assets/javascripts/jquery-ui/widgets/spinner.js +588 -0
  150. data/app/assets/javascripts/jquery-ui/widgets/tabs.js +931 -0
  151. data/app/assets/javascripts/jquery-ui/widgets/tooltip.js +533 -0
  152. data/app/assets/javascripts/jquery-ui.js +57 -0
  153. data/app/assets/stylesheets/jquery-ui/accordion.css +26 -0
  154. data/app/assets/stylesheets/jquery-ui/all.css +14 -0
  155. data/app/assets/stylesheets/jquery-ui/autocomplete.css +19 -0
  156. data/app/assets/stylesheets/jquery-ui/base.css +32 -0
  157. data/app/assets/stylesheets/jquery-ui/button.css +85 -0
  158. data/app/assets/stylesheets/jquery-ui/checkboxradio.css +37 -0
  159. data/app/assets/stylesheets/jquery-ui/controlgroup.css +68 -0
  160. data/app/assets/stylesheets/jquery-ui/core.css +100 -0
  161. data/app/assets/stylesheets/jquery-ui/datepicker.css +188 -0
  162. data/app/assets/stylesheets/jquery-ui/dialog.css +104 -0
  163. data/app/assets/stylesheets/jquery-ui/draggable.css +15 -0
  164. data/app/assets/stylesheets/jquery-ui/menu.css +67 -0
  165. data/app/assets/stylesheets/jquery-ui/progressbar.css +31 -0
  166. data/app/assets/stylesheets/jquery-ui/resizable.css +81 -0
  167. data/app/assets/stylesheets/jquery-ui/selectable.css +20 -0
  168. data/app/assets/stylesheets/jquery-ui/selectmenu.css +53 -0
  169. data/app/assets/stylesheets/jquery-ui/slider.css +78 -0
  170. data/app/assets/stylesheets/jquery-ui/sortable.css +15 -0
  171. data/app/assets/stylesheets/jquery-ui/spinner.css +55 -0
  172. data/app/assets/stylesheets/jquery-ui/tabs.css +54 -0
  173. data/app/assets/stylesheets/jquery-ui/theme.css.erb +456 -0
  174. data/app/assets/stylesheets/jquery-ui/tooltip.css +22 -0
  175. data/app/assets/stylesheets/jquery-ui.css +1 -0
  176. data/lib/jquery/ui/rails/engine.rb +8 -0
  177. data/lib/jquery/ui/rails/version.rb +8 -0
  178. data/lib/jquery/ui/rails.rb +2 -0
  179. data/lib/jquery-ui-rails.rb +1 -0
  180. metadata +250 -0
@@ -0,0 +1,968 @@
1
+ //= require jquery-ui/widgets/button
2
+ //= require jquery-ui/widgets/draggable
3
+ //= require jquery-ui/widgets/mouse
4
+ //= require jquery-ui/widgets/resizable
5
+ //= require jquery-ui/focusable
6
+ //= require jquery-ui/keycode
7
+ //= require jquery-ui/position
8
+ //= require jquery-ui/safe-active-element
9
+ //= require jquery-ui/safe-blur
10
+ //= require jquery-ui/tabbable
11
+ //= require jquery-ui/unique-id
12
+ //= require jquery-ui/version
13
+ //= require jquery-ui/widget
14
+
15
+ /*!
16
+ * jQuery UI Dialog 1.13.2
17
+ * http://jqueryui.com
18
+ *
19
+ * Copyright jQuery Foundation and other contributors
20
+ * Released under the MIT license.
21
+ * http://jquery.org/license
22
+ */
23
+
24
+ //>>label: Dialog
25
+ //>>group: Widgets
26
+ //>>description: Displays customizable dialog windows.
27
+ //>>docs: http://api.jqueryui.com/dialog/
28
+ //>>demos: http://jqueryui.com/dialog/
29
+ //>>css.structure: ../../themes/base/core.css
30
+ //>>css.structure: ../../themes/base/dialog.css
31
+ //>>css.theme: ../../themes/base/theme.css
32
+
33
+ ( function( factory ) {
34
+ "use strict";
35
+
36
+ if ( typeof define === "function" && define.amd ) {
37
+
38
+ // AMD. Register as an anonymous module.
39
+ define( [
40
+ "jquery",
41
+ "./button",
42
+ "./draggable",
43
+ "./mouse",
44
+ "./resizable",
45
+ "../focusable",
46
+ "../keycode",
47
+ "../position",
48
+ "../safe-active-element",
49
+ "../safe-blur",
50
+ "../tabbable",
51
+ "../unique-id",
52
+ "../version",
53
+ "../widget"
54
+ ], factory );
55
+ } else {
56
+
57
+ // Browser globals
58
+ factory( jQuery );
59
+ }
60
+ } )( function( $ ) {
61
+ "use strict";
62
+
63
+ $.widget( "ui.dialog", {
64
+ version: "1.13.2",
65
+ options: {
66
+ appendTo: "body",
67
+ autoOpen: true,
68
+ buttons: [],
69
+ classes: {
70
+ "ui-dialog": "ui-corner-all",
71
+ "ui-dialog-titlebar": "ui-corner-all"
72
+ },
73
+ closeOnEscape: true,
74
+ closeText: "Close",
75
+ draggable: true,
76
+ hide: null,
77
+ height: "auto",
78
+ maxHeight: null,
79
+ maxWidth: null,
80
+ minHeight: 150,
81
+ minWidth: 150,
82
+ modal: false,
83
+ position: {
84
+ my: "center",
85
+ at: "center",
86
+ of: window,
87
+ collision: "fit",
88
+
89
+ // Ensure the titlebar is always visible
90
+ using: function( pos ) {
91
+ var topOffset = $( this ).css( pos ).offset().top;
92
+ if ( topOffset < 0 ) {
93
+ $( this ).css( "top", pos.top - topOffset );
94
+ }
95
+ }
96
+ },
97
+ resizable: true,
98
+ show: null,
99
+ title: null,
100
+ width: 300,
101
+
102
+ // Callbacks
103
+ beforeClose: null,
104
+ close: null,
105
+ drag: null,
106
+ dragStart: null,
107
+ dragStop: null,
108
+ focus: null,
109
+ open: null,
110
+ resize: null,
111
+ resizeStart: null,
112
+ resizeStop: null
113
+ },
114
+
115
+ sizeRelatedOptions: {
116
+ buttons: true,
117
+ height: true,
118
+ maxHeight: true,
119
+ maxWidth: true,
120
+ minHeight: true,
121
+ minWidth: true,
122
+ width: true
123
+ },
124
+
125
+ resizableRelatedOptions: {
126
+ maxHeight: true,
127
+ maxWidth: true,
128
+ minHeight: true,
129
+ minWidth: true
130
+ },
131
+
132
+ _create: function() {
133
+ this.originalCss = {
134
+ display: this.element[ 0 ].style.display,
135
+ width: this.element[ 0 ].style.width,
136
+ minHeight: this.element[ 0 ].style.minHeight,
137
+ maxHeight: this.element[ 0 ].style.maxHeight,
138
+ height: this.element[ 0 ].style.height
139
+ };
140
+ this.originalPosition = {
141
+ parent: this.element.parent(),
142
+ index: this.element.parent().children().index( this.element )
143
+ };
144
+ this.originalTitle = this.element.attr( "title" );
145
+ if ( this.options.title == null && this.originalTitle != null ) {
146
+ this.options.title = this.originalTitle;
147
+ }
148
+
149
+ // Dialogs can't be disabled
150
+ if ( this.options.disabled ) {
151
+ this.options.disabled = false;
152
+ }
153
+
154
+ this._createWrapper();
155
+
156
+ this.element
157
+ .show()
158
+ .removeAttr( "title" )
159
+ .appendTo( this.uiDialog );
160
+
161
+ this._addClass( "ui-dialog-content", "ui-widget-content" );
162
+
163
+ this._createTitlebar();
164
+ this._createButtonPane();
165
+
166
+ if ( this.options.draggable && $.fn.draggable ) {
167
+ this._makeDraggable();
168
+ }
169
+ if ( this.options.resizable && $.fn.resizable ) {
170
+ this._makeResizable();
171
+ }
172
+
173
+ this._isOpen = false;
174
+
175
+ this._trackFocus();
176
+ },
177
+
178
+ _init: function() {
179
+ if ( this.options.autoOpen ) {
180
+ this.open();
181
+ }
182
+ },
183
+
184
+ _appendTo: function() {
185
+ var element = this.options.appendTo;
186
+ if ( element && ( element.jquery || element.nodeType ) ) {
187
+ return $( element );
188
+ }
189
+ return this.document.find( element || "body" ).eq( 0 );
190
+ },
191
+
192
+ _destroy: function() {
193
+ var next,
194
+ originalPosition = this.originalPosition;
195
+
196
+ this._untrackInstance();
197
+ this._destroyOverlay();
198
+
199
+ this.element
200
+ .removeUniqueId()
201
+ .css( this.originalCss )
202
+
203
+ // Without detaching first, the following becomes really slow
204
+ .detach();
205
+
206
+ this.uiDialog.remove();
207
+
208
+ if ( this.originalTitle ) {
209
+ this.element.attr( "title", this.originalTitle );
210
+ }
211
+
212
+ next = originalPosition.parent.children().eq( originalPosition.index );
213
+
214
+ // Don't try to place the dialog next to itself (#8613)
215
+ if ( next.length && next[ 0 ] !== this.element[ 0 ] ) {
216
+ next.before( this.element );
217
+ } else {
218
+ originalPosition.parent.append( this.element );
219
+ }
220
+ },
221
+
222
+ widget: function() {
223
+ return this.uiDialog;
224
+ },
225
+
226
+ disable: $.noop,
227
+ enable: $.noop,
228
+
229
+ close: function( event ) {
230
+ var that = this;
231
+
232
+ if ( !this._isOpen || this._trigger( "beforeClose", event ) === false ) {
233
+ return;
234
+ }
235
+
236
+ this._isOpen = false;
237
+ this._focusedElement = null;
238
+ this._destroyOverlay();
239
+ this._untrackInstance();
240
+
241
+ if ( !this.opener.filter( ":focusable" ).trigger( "focus" ).length ) {
242
+
243
+ // Hiding a focused element doesn't trigger blur in WebKit
244
+ // so in case we have nothing to focus on, explicitly blur the active element
245
+ // https://bugs.webkit.org/show_bug.cgi?id=47182
246
+ $.ui.safeBlur( $.ui.safeActiveElement( this.document[ 0 ] ) );
247
+ }
248
+
249
+ this._hide( this.uiDialog, this.options.hide, function() {
250
+ that._trigger( "close", event );
251
+ } );
252
+ },
253
+
254
+ isOpen: function() {
255
+ return this._isOpen;
256
+ },
257
+
258
+ moveToTop: function() {
259
+ this._moveToTop();
260
+ },
261
+
262
+ _moveToTop: function( event, silent ) {
263
+ var moved = false,
264
+ zIndices = this.uiDialog.siblings( ".ui-front:visible" ).map( function() {
265
+ return +$( this ).css( "z-index" );
266
+ } ).get(),
267
+ zIndexMax = Math.max.apply( null, zIndices );
268
+
269
+ if ( zIndexMax >= +this.uiDialog.css( "z-index" ) ) {
270
+ this.uiDialog.css( "z-index", zIndexMax + 1 );
271
+ moved = true;
272
+ }
273
+
274
+ if ( moved && !silent ) {
275
+ this._trigger( "focus", event );
276
+ }
277
+ return moved;
278
+ },
279
+
280
+ open: function() {
281
+ var that = this;
282
+ if ( this._isOpen ) {
283
+ if ( this._moveToTop() ) {
284
+ this._focusTabbable();
285
+ }
286
+ return;
287
+ }
288
+
289
+ this._isOpen = true;
290
+ this.opener = $( $.ui.safeActiveElement( this.document[ 0 ] ) );
291
+
292
+ this._size();
293
+ this._position();
294
+ this._createOverlay();
295
+ this._moveToTop( null, true );
296
+
297
+ // Ensure the overlay is moved to the top with the dialog, but only when
298
+ // opening. The overlay shouldn't move after the dialog is open so that
299
+ // modeless dialogs opened after the modal dialog stack properly.
300
+ if ( this.overlay ) {
301
+ this.overlay.css( "z-index", this.uiDialog.css( "z-index" ) - 1 );
302
+ }
303
+
304
+ this._show( this.uiDialog, this.options.show, function() {
305
+ that._focusTabbable();
306
+ that._trigger( "focus" );
307
+ } );
308
+
309
+ // Track the dialog immediately upon opening in case a focus event
310
+ // somehow occurs outside of the dialog before an element inside the
311
+ // dialog is focused (#10152)
312
+ this._makeFocusTarget();
313
+
314
+ this._trigger( "open" );
315
+ },
316
+
317
+ _focusTabbable: function() {
318
+
319
+ // Set focus to the first match:
320
+ // 1. An element that was focused previously
321
+ // 2. First element inside the dialog matching [autofocus]
322
+ // 3. Tabbable element inside the content element
323
+ // 4. Tabbable element inside the buttonpane
324
+ // 5. The close button
325
+ // 6. The dialog itself
326
+ var hasFocus = this._focusedElement;
327
+ if ( !hasFocus ) {
328
+ hasFocus = this.element.find( "[autofocus]" );
329
+ }
330
+ if ( !hasFocus.length ) {
331
+ hasFocus = this.element.find( ":tabbable" );
332
+ }
333
+ if ( !hasFocus.length ) {
334
+ hasFocus = this.uiDialogButtonPane.find( ":tabbable" );
335
+ }
336
+ if ( !hasFocus.length ) {
337
+ hasFocus = this.uiDialogTitlebarClose.filter( ":tabbable" );
338
+ }
339
+ if ( !hasFocus.length ) {
340
+ hasFocus = this.uiDialog;
341
+ }
342
+ hasFocus.eq( 0 ).trigger( "focus" );
343
+ },
344
+
345
+ _restoreTabbableFocus: function() {
346
+ var activeElement = $.ui.safeActiveElement( this.document[ 0 ] ),
347
+ isActive = this.uiDialog[ 0 ] === activeElement ||
348
+ $.contains( this.uiDialog[ 0 ], activeElement );
349
+ if ( !isActive ) {
350
+ this._focusTabbable();
351
+ }
352
+ },
353
+
354
+ _keepFocus: function( event ) {
355
+ event.preventDefault();
356
+ this._restoreTabbableFocus();
357
+
358
+ // support: IE
359
+ // IE <= 8 doesn't prevent moving focus even with event.preventDefault()
360
+ // so we check again later
361
+ this._delay( this._restoreTabbableFocus );
362
+ },
363
+
364
+ _createWrapper: function() {
365
+ this.uiDialog = $( "<div>" )
366
+ .hide()
367
+ .attr( {
368
+
369
+ // Setting tabIndex makes the div focusable
370
+ tabIndex: -1,
371
+ role: "dialog"
372
+ } )
373
+ .appendTo( this._appendTo() );
374
+
375
+ this._addClass( this.uiDialog, "ui-dialog", "ui-widget ui-widget-content ui-front" );
376
+ this._on( this.uiDialog, {
377
+ keydown: function( event ) {
378
+ if ( this.options.closeOnEscape && !event.isDefaultPrevented() && event.keyCode &&
379
+ event.keyCode === $.ui.keyCode.ESCAPE ) {
380
+ event.preventDefault();
381
+ this.close( event );
382
+ return;
383
+ }
384
+
385
+ // Prevent tabbing out of dialogs
386
+ if ( event.keyCode !== $.ui.keyCode.TAB || event.isDefaultPrevented() ) {
387
+ return;
388
+ }
389
+ var tabbables = this.uiDialog.find( ":tabbable" ),
390
+ first = tabbables.first(),
391
+ last = tabbables.last();
392
+
393
+ if ( ( event.target === last[ 0 ] || event.target === this.uiDialog[ 0 ] ) &&
394
+ !event.shiftKey ) {
395
+ this._delay( function() {
396
+ first.trigger( "focus" );
397
+ } );
398
+ event.preventDefault();
399
+ } else if ( ( event.target === first[ 0 ] ||
400
+ event.target === this.uiDialog[ 0 ] ) && event.shiftKey ) {
401
+ this._delay( function() {
402
+ last.trigger( "focus" );
403
+ } );
404
+ event.preventDefault();
405
+ }
406
+ },
407
+ mousedown: function( event ) {
408
+ if ( this._moveToTop( event ) ) {
409
+ this._focusTabbable();
410
+ }
411
+ }
412
+ } );
413
+
414
+ // We assume that any existing aria-describedby attribute means
415
+ // that the dialog content is marked up properly
416
+ // otherwise we brute force the content as the description
417
+ if ( !this.element.find( "[aria-describedby]" ).length ) {
418
+ this.uiDialog.attr( {
419
+ "aria-describedby": this.element.uniqueId().attr( "id" )
420
+ } );
421
+ }
422
+ },
423
+
424
+ _createTitlebar: function() {
425
+ var uiDialogTitle;
426
+
427
+ this.uiDialogTitlebar = $( "<div>" );
428
+ this._addClass( this.uiDialogTitlebar,
429
+ "ui-dialog-titlebar", "ui-widget-header ui-helper-clearfix" );
430
+ this._on( this.uiDialogTitlebar, {
431
+ mousedown: function( event ) {
432
+
433
+ // Don't prevent click on close button (#8838)
434
+ // Focusing a dialog that is partially scrolled out of view
435
+ // causes the browser to scroll it into view, preventing the click event
436
+ if ( !$( event.target ).closest( ".ui-dialog-titlebar-close" ) ) {
437
+
438
+ // Dialog isn't getting focus when dragging (#8063)
439
+ this.uiDialog.trigger( "focus" );
440
+ }
441
+ }
442
+ } );
443
+
444
+ // Support: IE
445
+ // Use type="button" to prevent enter keypresses in textboxes from closing the
446
+ // dialog in IE (#9312)
447
+ this.uiDialogTitlebarClose = $( "<button type='button'></button>" )
448
+ .button( {
449
+ label: $( "<a>" ).text( this.options.closeText ).html(),
450
+ icon: "ui-icon-closethick",
451
+ showLabel: false
452
+ } )
453
+ .appendTo( this.uiDialogTitlebar );
454
+
455
+ this._addClass( this.uiDialogTitlebarClose, "ui-dialog-titlebar-close" );
456
+ this._on( this.uiDialogTitlebarClose, {
457
+ click: function( event ) {
458
+ event.preventDefault();
459
+ this.close( event );
460
+ }
461
+ } );
462
+
463
+ uiDialogTitle = $( "<span>" ).uniqueId().prependTo( this.uiDialogTitlebar );
464
+ this._addClass( uiDialogTitle, "ui-dialog-title" );
465
+ this._title( uiDialogTitle );
466
+
467
+ this.uiDialogTitlebar.prependTo( this.uiDialog );
468
+
469
+ this.uiDialog.attr( {
470
+ "aria-labelledby": uiDialogTitle.attr( "id" )
471
+ } );
472
+ },
473
+
474
+ _title: function( title ) {
475
+ if ( this.options.title ) {
476
+ title.text( this.options.title );
477
+ } else {
478
+ title.html( "&#160;" );
479
+ }
480
+ },
481
+
482
+ _createButtonPane: function() {
483
+ this.uiDialogButtonPane = $( "<div>" );
484
+ this._addClass( this.uiDialogButtonPane, "ui-dialog-buttonpane",
485
+ "ui-widget-content ui-helper-clearfix" );
486
+
487
+ this.uiButtonSet = $( "<div>" )
488
+ .appendTo( this.uiDialogButtonPane );
489
+ this._addClass( this.uiButtonSet, "ui-dialog-buttonset" );
490
+
491
+ this._createButtons();
492
+ },
493
+
494
+ _createButtons: function() {
495
+ var that = this,
496
+ buttons = this.options.buttons;
497
+
498
+ // If we already have a button pane, remove it
499
+ this.uiDialogButtonPane.remove();
500
+ this.uiButtonSet.empty();
501
+
502
+ if ( $.isEmptyObject( buttons ) || ( Array.isArray( buttons ) && !buttons.length ) ) {
503
+ this._removeClass( this.uiDialog, "ui-dialog-buttons" );
504
+ return;
505
+ }
506
+
507
+ $.each( buttons, function( name, props ) {
508
+ var click, buttonOptions;
509
+ props = typeof props === "function" ?
510
+ { click: props, text: name } :
511
+ props;
512
+
513
+ // Default to a non-submitting button
514
+ props = $.extend( { type: "button" }, props );
515
+
516
+ // Change the context for the click callback to be the main element
517
+ click = props.click;
518
+ buttonOptions = {
519
+ icon: props.icon,
520
+ iconPosition: props.iconPosition,
521
+ showLabel: props.showLabel,
522
+
523
+ // Deprecated options
524
+ icons: props.icons,
525
+ text: props.text
526
+ };
527
+
528
+ delete props.click;
529
+ delete props.icon;
530
+ delete props.iconPosition;
531
+ delete props.showLabel;
532
+
533
+ // Deprecated options
534
+ delete props.icons;
535
+ if ( typeof props.text === "boolean" ) {
536
+ delete props.text;
537
+ }
538
+
539
+ $( "<button></button>", props )
540
+ .button( buttonOptions )
541
+ .appendTo( that.uiButtonSet )
542
+ .on( "click", function() {
543
+ click.apply( that.element[ 0 ], arguments );
544
+ } );
545
+ } );
546
+ this._addClass( this.uiDialog, "ui-dialog-buttons" );
547
+ this.uiDialogButtonPane.appendTo( this.uiDialog );
548
+ },
549
+
550
+ _makeDraggable: function() {
551
+ var that = this,
552
+ options = this.options;
553
+
554
+ function filteredUi( ui ) {
555
+ return {
556
+ position: ui.position,
557
+ offset: ui.offset
558
+ };
559
+ }
560
+
561
+ this.uiDialog.draggable( {
562
+ cancel: ".ui-dialog-content, .ui-dialog-titlebar-close",
563
+ handle: ".ui-dialog-titlebar",
564
+ containment: "document",
565
+ start: function( event, ui ) {
566
+ that._addClass( $( this ), "ui-dialog-dragging" );
567
+ that._blockFrames();
568
+ that._trigger( "dragStart", event, filteredUi( ui ) );
569
+ },
570
+ drag: function( event, ui ) {
571
+ that._trigger( "drag", event, filteredUi( ui ) );
572
+ },
573
+ stop: function( event, ui ) {
574
+ var left = ui.offset.left - that.document.scrollLeft(),
575
+ top = ui.offset.top - that.document.scrollTop();
576
+
577
+ options.position = {
578
+ my: "left top",
579
+ at: "left" + ( left >= 0 ? "+" : "" ) + left + " " +
580
+ "top" + ( top >= 0 ? "+" : "" ) + top,
581
+ of: that.window
582
+ };
583
+ that._removeClass( $( this ), "ui-dialog-dragging" );
584
+ that._unblockFrames();
585
+ that._trigger( "dragStop", event, filteredUi( ui ) );
586
+ }
587
+ } );
588
+ },
589
+
590
+ _makeResizable: function() {
591
+ var that = this,
592
+ options = this.options,
593
+ handles = options.resizable,
594
+
595
+ // .ui-resizable has position: relative defined in the stylesheet
596
+ // but dialogs have to use absolute or fixed positioning
597
+ position = this.uiDialog.css( "position" ),
598
+ resizeHandles = typeof handles === "string" ?
599
+ handles :
600
+ "n,e,s,w,se,sw,ne,nw";
601
+
602
+ function filteredUi( ui ) {
603
+ return {
604
+ originalPosition: ui.originalPosition,
605
+ originalSize: ui.originalSize,
606
+ position: ui.position,
607
+ size: ui.size
608
+ };
609
+ }
610
+
611
+ this.uiDialog.resizable( {
612
+ cancel: ".ui-dialog-content",
613
+ containment: "document",
614
+ alsoResize: this.element,
615
+ maxWidth: options.maxWidth,
616
+ maxHeight: options.maxHeight,
617
+ minWidth: options.minWidth,
618
+ minHeight: this._minHeight(),
619
+ handles: resizeHandles,
620
+ start: function( event, ui ) {
621
+ that._addClass( $( this ), "ui-dialog-resizing" );
622
+ that._blockFrames();
623
+ that._trigger( "resizeStart", event, filteredUi( ui ) );
624
+ },
625
+ resize: function( event, ui ) {
626
+ that._trigger( "resize", event, filteredUi( ui ) );
627
+ },
628
+ stop: function( event, ui ) {
629
+ var offset = that.uiDialog.offset(),
630
+ left = offset.left - that.document.scrollLeft(),
631
+ top = offset.top - that.document.scrollTop();
632
+
633
+ options.height = that.uiDialog.height();
634
+ options.width = that.uiDialog.width();
635
+ options.position = {
636
+ my: "left top",
637
+ at: "left" + ( left >= 0 ? "+" : "" ) + left + " " +
638
+ "top" + ( top >= 0 ? "+" : "" ) + top,
639
+ of: that.window
640
+ };
641
+ that._removeClass( $( this ), "ui-dialog-resizing" );
642
+ that._unblockFrames();
643
+ that._trigger( "resizeStop", event, filteredUi( ui ) );
644
+ }
645
+ } )
646
+ .css( "position", position );
647
+ },
648
+
649
+ _trackFocus: function() {
650
+ this._on( this.widget(), {
651
+ focusin: function( event ) {
652
+ this._makeFocusTarget();
653
+ this._focusedElement = $( event.target );
654
+ }
655
+ } );
656
+ },
657
+
658
+ _makeFocusTarget: function() {
659
+ this._untrackInstance();
660
+ this._trackingInstances().unshift( this );
661
+ },
662
+
663
+ _untrackInstance: function() {
664
+ var instances = this._trackingInstances(),
665
+ exists = $.inArray( this, instances );
666
+ if ( exists !== -1 ) {
667
+ instances.splice( exists, 1 );
668
+ }
669
+ },
670
+
671
+ _trackingInstances: function() {
672
+ var instances = this.document.data( "ui-dialog-instances" );
673
+ if ( !instances ) {
674
+ instances = [];
675
+ this.document.data( "ui-dialog-instances", instances );
676
+ }
677
+ return instances;
678
+ },
679
+
680
+ _minHeight: function() {
681
+ var options = this.options;
682
+
683
+ return options.height === "auto" ?
684
+ options.minHeight :
685
+ Math.min( options.minHeight, options.height );
686
+ },
687
+
688
+ _position: function() {
689
+
690
+ // Need to show the dialog to get the actual offset in the position plugin
691
+ var isVisible = this.uiDialog.is( ":visible" );
692
+ if ( !isVisible ) {
693
+ this.uiDialog.show();
694
+ }
695
+ this.uiDialog.position( this.options.position );
696
+ if ( !isVisible ) {
697
+ this.uiDialog.hide();
698
+ }
699
+ },
700
+
701
+ _setOptions: function( options ) {
702
+ var that = this,
703
+ resize = false,
704
+ resizableOptions = {};
705
+
706
+ $.each( options, function( key, value ) {
707
+ that._setOption( key, value );
708
+
709
+ if ( key in that.sizeRelatedOptions ) {
710
+ resize = true;
711
+ }
712
+ if ( key in that.resizableRelatedOptions ) {
713
+ resizableOptions[ key ] = value;
714
+ }
715
+ } );
716
+
717
+ if ( resize ) {
718
+ this._size();
719
+ this._position();
720
+ }
721
+ if ( this.uiDialog.is( ":data(ui-resizable)" ) ) {
722
+ this.uiDialog.resizable( "option", resizableOptions );
723
+ }
724
+ },
725
+
726
+ _setOption: function( key, value ) {
727
+ var isDraggable, isResizable,
728
+ uiDialog = this.uiDialog;
729
+
730
+ if ( key === "disabled" ) {
731
+ return;
732
+ }
733
+
734
+ this._super( key, value );
735
+
736
+ if ( key === "appendTo" ) {
737
+ this.uiDialog.appendTo( this._appendTo() );
738
+ }
739
+
740
+ if ( key === "buttons" ) {
741
+ this._createButtons();
742
+ }
743
+
744
+ if ( key === "closeText" ) {
745
+ this.uiDialogTitlebarClose.button( {
746
+
747
+ // Ensure that we always pass a string
748
+ label: $( "<a>" ).text( "" + this.options.closeText ).html()
749
+ } );
750
+ }
751
+
752
+ if ( key === "draggable" ) {
753
+ isDraggable = uiDialog.is( ":data(ui-draggable)" );
754
+ if ( isDraggable && !value ) {
755
+ uiDialog.draggable( "destroy" );
756
+ }
757
+
758
+ if ( !isDraggable && value ) {
759
+ this._makeDraggable();
760
+ }
761
+ }
762
+
763
+ if ( key === "position" ) {
764
+ this._position();
765
+ }
766
+
767
+ if ( key === "resizable" ) {
768
+
769
+ // currently resizable, becoming non-resizable
770
+ isResizable = uiDialog.is( ":data(ui-resizable)" );
771
+ if ( isResizable && !value ) {
772
+ uiDialog.resizable( "destroy" );
773
+ }
774
+
775
+ // Currently resizable, changing handles
776
+ if ( isResizable && typeof value === "string" ) {
777
+ uiDialog.resizable( "option", "handles", value );
778
+ }
779
+
780
+ // Currently non-resizable, becoming resizable
781
+ if ( !isResizable && value !== false ) {
782
+ this._makeResizable();
783
+ }
784
+ }
785
+
786
+ if ( key === "title" ) {
787
+ this._title( this.uiDialogTitlebar.find( ".ui-dialog-title" ) );
788
+ }
789
+ },
790
+
791
+ _size: function() {
792
+
793
+ // If the user has resized the dialog, the .ui-dialog and .ui-dialog-content
794
+ // divs will both have width and height set, so we need to reset them
795
+ var nonContentHeight, minContentHeight, maxContentHeight,
796
+ options = this.options;
797
+
798
+ // Reset content sizing
799
+ this.element.show().css( {
800
+ width: "auto",
801
+ minHeight: 0,
802
+ maxHeight: "none",
803
+ height: 0
804
+ } );
805
+
806
+ if ( options.minWidth > options.width ) {
807
+ options.width = options.minWidth;
808
+ }
809
+
810
+ // Reset wrapper sizing
811
+ // determine the height of all the non-content elements
812
+ nonContentHeight = this.uiDialog.css( {
813
+ height: "auto",
814
+ width: options.width
815
+ } )
816
+ .outerHeight();
817
+ minContentHeight = Math.max( 0, options.minHeight - nonContentHeight );
818
+ maxContentHeight = typeof options.maxHeight === "number" ?
819
+ Math.max( 0, options.maxHeight - nonContentHeight ) :
820
+ "none";
821
+
822
+ if ( options.height === "auto" ) {
823
+ this.element.css( {
824
+ minHeight: minContentHeight,
825
+ maxHeight: maxContentHeight,
826
+ height: "auto"
827
+ } );
828
+ } else {
829
+ this.element.height( Math.max( 0, options.height - nonContentHeight ) );
830
+ }
831
+
832
+ if ( this.uiDialog.is( ":data(ui-resizable)" ) ) {
833
+ this.uiDialog.resizable( "option", "minHeight", this._minHeight() );
834
+ }
835
+ },
836
+
837
+ _blockFrames: function() {
838
+ this.iframeBlocks = this.document.find( "iframe" ).map( function() {
839
+ var iframe = $( this );
840
+
841
+ return $( "<div>" )
842
+ .css( {
843
+ position: "absolute",
844
+ width: iframe.outerWidth(),
845
+ height: iframe.outerHeight()
846
+ } )
847
+ .appendTo( iframe.parent() )
848
+ .offset( iframe.offset() )[ 0 ];
849
+ } );
850
+ },
851
+
852
+ _unblockFrames: function() {
853
+ if ( this.iframeBlocks ) {
854
+ this.iframeBlocks.remove();
855
+ delete this.iframeBlocks;
856
+ }
857
+ },
858
+
859
+ _allowInteraction: function( event ) {
860
+ if ( $( event.target ).closest( ".ui-dialog" ).length ) {
861
+ return true;
862
+ }
863
+
864
+ // TODO: Remove hack when datepicker implements
865
+ // the .ui-front logic (#8989)
866
+ return !!$( event.target ).closest( ".ui-datepicker" ).length;
867
+ },
868
+
869
+ _createOverlay: function() {
870
+ if ( !this.options.modal ) {
871
+ return;
872
+ }
873
+
874
+ var jqMinor = $.fn.jquery.substring( 0, 4 );
875
+
876
+ // We use a delay in case the overlay is created from an
877
+ // event that we're going to be cancelling (#2804)
878
+ var isOpening = true;
879
+ this._delay( function() {
880
+ isOpening = false;
881
+ } );
882
+
883
+ if ( !this.document.data( "ui-dialog-overlays" ) ) {
884
+
885
+ // Prevent use of anchors and inputs
886
+ // This doesn't use `_on()` because it is a shared event handler
887
+ // across all open modal dialogs.
888
+ this.document.on( "focusin.ui-dialog", function( event ) {
889
+ if ( isOpening ) {
890
+ return;
891
+ }
892
+
893
+ var instance = this._trackingInstances()[ 0 ];
894
+ if ( !instance._allowInteraction( event ) ) {
895
+ event.preventDefault();
896
+ instance._focusTabbable();
897
+
898
+ // Support: jQuery >=3.4 <3.6 only
899
+ // Focus re-triggering in jQuery 3.4/3.5 makes the original element
900
+ // have its focus event propagated last, breaking the re-targeting.
901
+ // Trigger focus in a delay in addition if needed to avoid the issue
902
+ // See https://github.com/jquery/jquery/issues/4382
903
+ if ( jqMinor === "3.4." || jqMinor === "3.5." ) {
904
+ instance._delay( instance._restoreTabbableFocus );
905
+ }
906
+ }
907
+ }.bind( this ) );
908
+ }
909
+
910
+ this.overlay = $( "<div>" )
911
+ .appendTo( this._appendTo() );
912
+
913
+ this._addClass( this.overlay, null, "ui-widget-overlay ui-front" );
914
+ this._on( this.overlay, {
915
+ mousedown: "_keepFocus"
916
+ } );
917
+ this.document.data( "ui-dialog-overlays",
918
+ ( this.document.data( "ui-dialog-overlays" ) || 0 ) + 1 );
919
+ },
920
+
921
+ _destroyOverlay: function() {
922
+ if ( !this.options.modal ) {
923
+ return;
924
+ }
925
+
926
+ if ( this.overlay ) {
927
+ var overlays = this.document.data( "ui-dialog-overlays" ) - 1;
928
+
929
+ if ( !overlays ) {
930
+ this.document.off( "focusin.ui-dialog" );
931
+ this.document.removeData( "ui-dialog-overlays" );
932
+ } else {
933
+ this.document.data( "ui-dialog-overlays", overlays );
934
+ }
935
+
936
+ this.overlay.remove();
937
+ this.overlay = null;
938
+ }
939
+ }
940
+ } );
941
+
942
+ // DEPRECATED
943
+ // TODO: switch return back to widget declaration at top of file when this is removed
944
+ if ( $.uiBackCompat !== false ) {
945
+
946
+ // Backcompat for dialogClass option
947
+ $.widget( "ui.dialog", $.ui.dialog, {
948
+ options: {
949
+ dialogClass: ""
950
+ },
951
+ _createWrapper: function() {
952
+ this._super();
953
+ this.uiDialog.addClass( this.options.dialogClass );
954
+ },
955
+ _setOption: function( key, value ) {
956
+ if ( key === "dialogClass" ) {
957
+ this.uiDialog
958
+ .removeClass( this.options.dialogClass )
959
+ .addClass( value );
960
+ }
961
+ this._superApply( arguments );
962
+ }
963
+ } );
964
+ }
965
+
966
+ return $.ui.dialog;
967
+
968
+ } );