jquery-ui-middleman 4.1.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (153) 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/Gemfile +3 -0
  6. data/History.md +115 -0
  7. data/License.txt +2 -0
  8. data/README.md +226 -0
  9. data/Rakefile +221 -0
  10. data/VERSIONS.md +27 -0
  11. data/app/assets/images/jquery-ui/animated-overlay.gif +0 -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-bg_flat_75_ffffff_40x100.png +0 -0
  14. data/app/assets/images/jquery-ui/ui-bg_glass_55_fbf9ee_1x400.png +0 -0
  15. data/app/assets/images/jquery-ui/ui-bg_glass_65_ffffff_1x400.png +0 -0
  16. data/app/assets/images/jquery-ui/ui-bg_glass_75_dadada_1x400.png +0 -0
  17. data/app/assets/images/jquery-ui/ui-bg_glass_75_e6e6e6_1x400.png +0 -0
  18. data/app/assets/images/jquery-ui/ui-bg_glass_95_fef1ec_1x400.png +0 -0
  19. data/app/assets/images/jquery-ui/ui-bg_highlight-soft_75_cccccc_1x100.png +0 -0
  20. data/app/assets/images/jquery-ui/ui-icons_222222_256x240.png +0 -0
  21. data/app/assets/images/jquery-ui/ui-icons_2e83ff_256x240.png +0 -0
  22. data/app/assets/images/jquery-ui/ui-icons_454545_256x240.png +0 -0
  23. data/app/assets/images/jquery-ui/ui-icons_888888_256x240.png +0 -0
  24. data/app/assets/images/jquery-ui/ui-icons_cd0a0a_256x240.png +0 -0
  25. data/app/assets/javascripts/jquery.ui.accordion.js +575 -0
  26. data/app/assets/javascripts/jquery.ui.all.js +34 -0
  27. data/app/assets/javascripts/jquery.ui.autocomplete.js +615 -0
  28. data/app/assets/javascripts/jquery.ui.button.js +422 -0
  29. data/app/assets/javascripts/jquery.ui.core.js +320 -0
  30. data/app/assets/javascripts/jquery.ui.datepicker-af.js +23 -0
  31. data/app/assets/javascripts/jquery.ui.datepicker-ar-DZ.js +23 -0
  32. data/app/assets/javascripts/jquery.ui.datepicker-ar.js +23 -0
  33. data/app/assets/javascripts/jquery.ui.datepicker-az.js +23 -0
  34. data/app/assets/javascripts/jquery.ui.datepicker-be.js +23 -0
  35. data/app/assets/javascripts/jquery.ui.datepicker-bg.js +24 -0
  36. data/app/assets/javascripts/jquery.ui.datepicker-bs.js +23 -0
  37. data/app/assets/javascripts/jquery.ui.datepicker-ca.js +23 -0
  38. data/app/assets/javascripts/jquery.ui.datepicker-cs.js +23 -0
  39. data/app/assets/javascripts/jquery.ui.datepicker-cy-GB.js +23 -0
  40. data/app/assets/javascripts/jquery.ui.datepicker-da.js +23 -0
  41. data/app/assets/javascripts/jquery.ui.datepicker-de.js +23 -0
  42. data/app/assets/javascripts/jquery.ui.datepicker-el.js +23 -0
  43. data/app/assets/javascripts/jquery.ui.datepicker-en-AU.js +23 -0
  44. data/app/assets/javascripts/jquery.ui.datepicker-en-GB.js +23 -0
  45. data/app/assets/javascripts/jquery.ui.datepicker-en-NZ.js +23 -0
  46. data/app/assets/javascripts/jquery.ui.datepicker-eo.js +23 -0
  47. data/app/assets/javascripts/jquery.ui.datepicker-es.js +23 -0
  48. data/app/assets/javascripts/jquery.ui.datepicker-et.js +23 -0
  49. data/app/assets/javascripts/jquery.ui.datepicker-eu.js +23 -0
  50. data/app/assets/javascripts/jquery.ui.datepicker-fa.js +59 -0
  51. data/app/assets/javascripts/jquery.ui.datepicker-fi.js +23 -0
  52. data/app/assets/javascripts/jquery.ui.datepicker-fo.js +23 -0
  53. data/app/assets/javascripts/jquery.ui.datepicker-fr-CA.js +23 -0
  54. data/app/assets/javascripts/jquery.ui.datepicker-fr-CH.js +23 -0
  55. data/app/assets/javascripts/jquery.ui.datepicker-fr.js +25 -0
  56. data/app/assets/javascripts/jquery.ui.datepicker-gl.js +23 -0
  57. data/app/assets/javascripts/jquery.ui.datepicker-he.js +23 -0
  58. data/app/assets/javascripts/jquery.ui.datepicker-hi.js +23 -0
  59. data/app/assets/javascripts/jquery.ui.datepicker-hr.js +23 -0
  60. data/app/assets/javascripts/jquery.ui.datepicker-hu.js +23 -0
  61. data/app/assets/javascripts/jquery.ui.datepicker-hy.js +23 -0
  62. data/app/assets/javascripts/jquery.ui.datepicker-id.js +23 -0
  63. data/app/assets/javascripts/jquery.ui.datepicker-is.js +23 -0
  64. data/app/assets/javascripts/jquery.ui.datepicker-it.js +23 -0
  65. data/app/assets/javascripts/jquery.ui.datepicker-ja.js +23 -0
  66. data/app/assets/javascripts/jquery.ui.datepicker-ka.js +21 -0
  67. data/app/assets/javascripts/jquery.ui.datepicker-kk.js +23 -0
  68. data/app/assets/javascripts/jquery.ui.datepicker-km.js +23 -0
  69. data/app/assets/javascripts/jquery.ui.datepicker-ko.js +23 -0
  70. data/app/assets/javascripts/jquery.ui.datepicker-ky.js +24 -0
  71. data/app/assets/javascripts/jquery.ui.datepicker-lb.js +23 -0
  72. data/app/assets/javascripts/jquery.ui.datepicker-lt.js +23 -0
  73. data/app/assets/javascripts/jquery.ui.datepicker-lv.js +23 -0
  74. data/app/assets/javascripts/jquery.ui.datepicker-mk.js +23 -0
  75. data/app/assets/javascripts/jquery.ui.datepicker-ml.js +23 -0
  76. data/app/assets/javascripts/jquery.ui.datepicker-ms.js +23 -0
  77. data/app/assets/javascripts/jquery.ui.datepicker-nb.js +22 -0
  78. data/app/assets/javascripts/jquery.ui.datepicker-nl-BE.js +23 -0
  79. data/app/assets/javascripts/jquery.ui.datepicker-nl.js +23 -0
  80. data/app/assets/javascripts/jquery.ui.datepicker-nn.js +22 -0
  81. data/app/assets/javascripts/jquery.ui.datepicker-no.js +23 -0
  82. data/app/assets/javascripts/jquery.ui.datepicker-pl.js +23 -0
  83. data/app/assets/javascripts/jquery.ui.datepicker-pt-BR.js +23 -0
  84. data/app/assets/javascripts/jquery.ui.datepicker-pt.js +22 -0
  85. data/app/assets/javascripts/jquery.ui.datepicker-rm.js +21 -0
  86. data/app/assets/javascripts/jquery.ui.datepicker-ro.js +26 -0
  87. data/app/assets/javascripts/jquery.ui.datepicker-ru.js +23 -0
  88. data/app/assets/javascripts/jquery.ui.datepicker-sk.js +23 -0
  89. data/app/assets/javascripts/jquery.ui.datepicker-sl.js +24 -0
  90. data/app/assets/javascripts/jquery.ui.datepicker-sq.js +23 -0
  91. data/app/assets/javascripts/jquery.ui.datepicker-sr-SR.js +23 -0
  92. data/app/assets/javascripts/jquery.ui.datepicker-sr.js +23 -0
  93. data/app/assets/javascripts/jquery.ui.datepicker-sv.js +23 -0
  94. data/app/assets/javascripts/jquery.ui.datepicker-ta.js +23 -0
  95. data/app/assets/javascripts/jquery.ui.datepicker-th.js +23 -0
  96. data/app/assets/javascripts/jquery.ui.datepicker-tj.js +23 -0
  97. data/app/assets/javascripts/jquery.ui.datepicker-tr.js +23 -0
  98. data/app/assets/javascripts/jquery.ui.datepicker-uk.js +24 -0
  99. data/app/assets/javascripts/jquery.ui.datepicker-vi.js +23 -0
  100. data/app/assets/javascripts/jquery.ui.datepicker-zh-CN.js +23 -0
  101. data/app/assets/javascripts/jquery.ui.datepicker-zh-HK.js +23 -0
  102. data/app/assets/javascripts/jquery.ui.datepicker-zh-TW.js +23 -0
  103. data/app/assets/javascripts/jquery.ui.datepicker.js +2040 -0
  104. data/app/assets/javascripts/jquery.ui.dialog.js +815 -0
  105. data/app/assets/javascripts/jquery.ui.draggable.js +962 -0
  106. data/app/assets/javascripts/jquery.ui.droppable.js +377 -0
  107. data/app/assets/javascripts/jquery.ui.effect-blind.js +84 -0
  108. data/app/assets/javascripts/jquery.ui.effect-bounce.js +115 -0
  109. data/app/assets/javascripts/jquery.ui.effect-clip.js +69 -0
  110. data/app/assets/javascripts/jquery.ui.effect-drop.js +67 -0
  111. data/app/assets/javascripts/jquery.ui.effect-explode.js +99 -0
  112. data/app/assets/javascripts/jquery.ui.effect-fade.js +32 -0
  113. data/app/assets/javascripts/jquery.ui.effect-fold.js +78 -0
  114. data/app/assets/javascripts/jquery.ui.effect-highlight.js +52 -0
  115. data/app/assets/javascripts/jquery.ui.effect-pulsate.js +65 -0
  116. data/app/assets/javascripts/jquery.ui.effect-scale.js +320 -0
  117. data/app/assets/javascripts/jquery.ui.effect-shake.js +76 -0
  118. data/app/assets/javascripts/jquery.ui.effect-slide.js +66 -0
  119. data/app/assets/javascripts/jquery.ui.effect-transfer.js +49 -0
  120. data/app/assets/javascripts/jquery.ui.effect.all.js +14 -0
  121. data/app/assets/javascripts/jquery.ui.effect.js +1289 -0
  122. data/app/assets/javascripts/jquery.ui.menu.js +625 -0
  123. data/app/assets/javascripts/jquery.ui.mouse.js +172 -0
  124. data/app/assets/javascripts/jquery.ui.position.js +497 -0
  125. data/app/assets/javascripts/jquery.ui.progressbar.js +148 -0
  126. data/app/assets/javascripts/jquery.ui.resizable.js +972 -0
  127. data/app/assets/javascripts/jquery.ui.selectable.js +281 -0
  128. data/app/assets/javascripts/jquery.ui.slider.js +676 -0
  129. data/app/assets/javascripts/jquery.ui.sortable.js +1289 -0
  130. data/app/assets/javascripts/jquery.ui.spinner.js +497 -0
  131. data/app/assets/javascripts/jquery.ui.tabs.js +849 -0
  132. data/app/assets/javascripts/jquery.ui.tooltip.js +406 -0
  133. data/app/assets/javascripts/jquery.ui.widget.js +521 -0
  134. data/app/assets/stylesheets/jquery.ui.accordion.css.erb +42 -0
  135. data/app/assets/stylesheets/jquery.ui.all.css.erb +14 -0
  136. data/app/assets/stylesheets/jquery.ui.autocomplete.css.erb +21 -0
  137. data/app/assets/stylesheets/jquery.ui.base.css.erb +27 -0
  138. data/app/assets/stylesheets/jquery.ui.button.css.erb +118 -0
  139. data/app/assets/stylesheets/jquery.ui.core.css.erb +93 -0
  140. data/app/assets/stylesheets/jquery.ui.datepicker.css.erb +182 -0
  141. data/app/assets/stylesheets/jquery.ui.dialog.css.erb +75 -0
  142. data/app/assets/stylesheets/jquery.ui.menu.css.erb +83 -0
  143. data/app/assets/stylesheets/jquery.ui.progressbar.css.erb +32 -0
  144. data/app/assets/stylesheets/jquery.ui.resizable.css.erb +82 -0
  145. data/app/assets/stylesheets/jquery.ui.selectable.css.erb +19 -0
  146. data/app/assets/stylesheets/jquery.ui.slider.css.erb +77 -0
  147. data/app/assets/stylesheets/jquery.ui.spinner.css.erb +70 -0
  148. data/app/assets/stylesheets/jquery.ui.tabs.css.erb +56 -0
  149. data/app/assets/stylesheets/jquery.ui.theme.css.erb +409 -0
  150. data/app/assets/stylesheets/jquery.ui.tooltip.css.erb +23 -0
  151. data/lib/jquery-ui-middleman.rb +1 -0
  152. data/lib/jquery/ui/version.rb +6 -0
  153. metadata +209 -0
@@ -0,0 +1,815 @@
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
+
8
+ /*!
9
+ * jQuery UI Dialog 1.10.3
10
+ * http://jqueryui.com
11
+ *
12
+ * Copyright 2013 jQuery Foundation and other contributors
13
+ * Released under the MIT license.
14
+ * http://jquery.org/license
15
+ *
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
+ */
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
+ };
44
+
45
+ $.widget( "ui.dialog", {
46
+ version: "1.10.3",
47
+ options: {
48
+ appendTo: "body",
49
+ autoOpen: true,
50
+ buttons: [],
51
+ closeOnEscape: true,
52
+ closeText: "close",
53
+ dialogClass: "",
54
+ draggable: true,
55
+ hide: null,
56
+ height: "auto",
57
+ maxHeight: null,
58
+ maxWidth: null,
59
+ minHeight: 150,
60
+ minWidth: 150,
61
+ modal: false,
62
+ position: {
63
+ my: "center",
64
+ at: "center",
65
+ of: window,
66
+ collision: "fit",
67
+ // Ensure the titlebar is always visible
68
+ using: function( pos ) {
69
+ var topOffset = $( this ).css( pos ).offset().top;
70
+ if ( topOffset < 0 ) {
71
+ $( this ).css( "top", pos.top - topOffset );
72
+ }
73
+ }
74
+ },
75
+ resizable: true,
76
+ show: null,
77
+ title: null,
78
+ width: 300,
79
+
80
+ // callbacks
81
+ beforeClose: null,
82
+ close: null,
83
+ drag: null,
84
+ dragStart: null,
85
+ dragStop: null,
86
+ focus: null,
87
+ open: null,
88
+ resize: null,
89
+ resizeStart: null,
90
+ resizeStop: null
91
+ },
92
+
93
+ _create: function() {
94
+ 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
100
+ };
101
+ this.originalPosition = {
102
+ parent: this.element.parent(),
103
+ index: this.element.parent().children().index( this.element )
104
+ };
105
+ this.originalTitle = this.element.attr("title");
106
+ this.options.title = this.options.title || this.originalTitle;
107
+
108
+ this._createWrapper();
109
+
110
+ this.element
111
+ .show()
112
+ .removeAttr("title")
113
+ .addClass("ui-dialog-content ui-widget-content")
114
+ .appendTo( this.uiDialog );
115
+
116
+ this._createTitlebar();
117
+ this._createButtonPane();
118
+
119
+ if ( this.options.draggable && $.fn.draggable ) {
120
+ this._makeDraggable();
121
+ }
122
+ if ( this.options.resizable && $.fn.resizable ) {
123
+ this._makeResizable();
124
+ }
125
+
126
+ this._isOpen = false;
127
+ },
128
+
129
+ _init: function() {
130
+ if ( this.options.autoOpen ) {
131
+ this.open();
132
+ }
133
+ },
134
+
135
+ _appendTo: function() {
136
+ var element = this.options.appendTo;
137
+ if ( element && (element.jquery || element.nodeType) ) {
138
+ return $( element );
139
+ }
140
+ return this.document.find( element || "body" ).eq( 0 );
141
+ },
142
+
143
+ _destroy: function() {
144
+ var next,
145
+ originalPosition = this.originalPosition;
146
+
147
+ this._destroyOverlay();
148
+
149
+ this.element
150
+ .removeUniqueId()
151
+ .removeClass("ui-dialog-content ui-widget-content")
152
+ .css( this.originalCss )
153
+ // Without detaching first, the following becomes really slow
154
+ .detach();
155
+
156
+ this.uiDialog.stop( true, true ).remove();
157
+
158
+ if ( this.originalTitle ) {
159
+ this.element.attr( "title", this.originalTitle );
160
+ }
161
+
162
+ next = originalPosition.parent.children().eq( originalPosition.index );
163
+ // Don't try to place the dialog next to itself (#8613)
164
+ if ( next.length && next[0] !== this.element[0] ) {
165
+ next.before( this.element );
166
+ } else {
167
+ originalPosition.parent.append( this.element );
168
+ }
169
+ },
170
+
171
+ widget: function() {
172
+ return this.uiDialog;
173
+ },
174
+
175
+ disable: $.noop,
176
+ enable: $.noop,
177
+
178
+ close: function( event ) {
179
+ var that = this;
180
+
181
+ if ( !this._isOpen || this._trigger( "beforeClose", event ) === false ) {
182
+ return;
183
+ }
184
+
185
+ this._isOpen = false;
186
+ this._destroyOverlay();
187
+
188
+ if ( !this.opener.filter(":focusable").focus().length ) {
189
+ // Hiding a focused element doesn't trigger blur in WebKit
190
+ // so in case we have nothing to focus on, explicitly blur the active element
191
+ // https://bugs.webkit.org/show_bug.cgi?id=47182
192
+ $( this.document[0].activeElement ).blur();
193
+ }
194
+
195
+ this._hide( this.uiDialog, this.options.hide, function() {
196
+ that._trigger( "close", event );
197
+ });
198
+ },
199
+
200
+ isOpen: function() {
201
+ return this._isOpen;
202
+ },
203
+
204
+ moveToTop: function() {
205
+ this._moveToTop();
206
+ },
207
+
208
+ _moveToTop: function( event, silent ) {
209
+ var moved = !!this.uiDialog.nextAll(":visible").insertBefore( this.uiDialog ).length;
210
+ if ( moved && !silent ) {
211
+ this._trigger( "focus", event );
212
+ }
213
+ return moved;
214
+ },
215
+
216
+ open: function() {
217
+ var that = this;
218
+ if ( this._isOpen ) {
219
+ if ( this._moveToTop() ) {
220
+ this._focusTabbable();
221
+ }
222
+ return;
223
+ }
224
+
225
+ this._isOpen = true;
226
+ this.opener = $( this.document[0].activeElement );
227
+
228
+ this._size();
229
+ this._position();
230
+ this._createOverlay();
231
+ this._moveToTop( null, true );
232
+ this._show( this.uiDialog, this.options.show, function() {
233
+ that._focusTabbable();
234
+ that._trigger("focus");
235
+ });
236
+
237
+ this._trigger("open");
238
+ },
239
+
240
+ _focusTabbable: function() {
241
+ // Set focus to the first match:
242
+ // 1. First element inside the dialog matching [autofocus]
243
+ // 2. Tabbable element inside the content element
244
+ // 3. Tabbable element inside the buttonpane
245
+ // 4. The close button
246
+ // 5. The dialog itself
247
+ var hasFocus = this.element.find("[autofocus]");
248
+ if ( !hasFocus.length ) {
249
+ hasFocus = this.element.find(":tabbable");
250
+ }
251
+ if ( !hasFocus.length ) {
252
+ hasFocus = this.uiDialogButtonPane.find(":tabbable");
253
+ }
254
+ if ( !hasFocus.length ) {
255
+ hasFocus = this.uiDialogTitlebarClose.filter(":tabbable");
256
+ }
257
+ if ( !hasFocus.length ) {
258
+ hasFocus = this.uiDialog;
259
+ }
260
+ hasFocus.eq( 0 ).focus();
261
+ },
262
+
263
+ _keepFocus: function( event ) {
264
+ function checkFocus() {
265
+ var activeElement = this.document[0].activeElement,
266
+ isActive = this.uiDialog[0] === activeElement ||
267
+ $.contains( this.uiDialog[0], activeElement );
268
+ if ( !isActive ) {
269
+ this._focusTabbable();
270
+ }
271
+ }
272
+ event.preventDefault();
273
+ checkFocus.call( this );
274
+ // support: IE
275
+ // IE <= 8 doesn't prevent moving focus even with event.preventDefault()
276
+ // so we check again later
277
+ this._delay( checkFocus );
278
+ },
279
+
280
+ _createWrapper: function() {
281
+ this.uiDialog = $("<div>")
282
+ .addClass( "ui-dialog ui-widget ui-widget-content ui-corner-all ui-front " +
283
+ this.options.dialogClass )
284
+ .hide()
285
+ .attr({
286
+ // Setting tabIndex makes the div focusable
287
+ tabIndex: -1,
288
+ role: "dialog"
289
+ })
290
+ .appendTo( this._appendTo() );
291
+
292
+ this._on( this.uiDialog, {
293
+ keydown: function( event ) {
294
+ if ( this.options.closeOnEscape && !event.isDefaultPrevented() && event.keyCode &&
295
+ event.keyCode === $.ui.keyCode.ESCAPE ) {
296
+ event.preventDefault();
297
+ this.close( event );
298
+ return;
299
+ }
300
+
301
+ // prevent tabbing out of dialogs
302
+ if ( event.keyCode !== $.ui.keyCode.TAB ) {
303
+ return;
304
+ }
305
+ var tabbables = this.uiDialog.find(":tabbable"),
306
+ first = tabbables.filter(":first"),
307
+ last = tabbables.filter(":last");
308
+
309
+ if ( ( event.target === last[0] || event.target === this.uiDialog[0] ) && !event.shiftKey ) {
310
+ first.focus( 1 );
311
+ event.preventDefault();
312
+ } else if ( ( event.target === first[0] || event.target === this.uiDialog[0] ) && event.shiftKey ) {
313
+ last.focus( 1 );
314
+ event.preventDefault();
315
+ }
316
+ },
317
+ mousedown: function( event ) {
318
+ if ( this._moveToTop( event ) ) {
319
+ this._focusTabbable();
320
+ }
321
+ }
322
+ });
323
+
324
+ // We assume that any existing aria-describedby attribute means
325
+ // that the dialog content is marked up properly
326
+ // otherwise we brute force the content as the description
327
+ if ( !this.element.find("[aria-describedby]").length ) {
328
+ this.uiDialog.attr({
329
+ "aria-describedby": this.element.uniqueId().attr("id")
330
+ });
331
+ }
332
+ },
333
+
334
+ _createTitlebar: function() {
335
+ var uiDialogTitle;
336
+
337
+ this.uiDialogTitlebar = $("<div>")
338
+ .addClass("ui-dialog-titlebar ui-widget-header ui-corner-all ui-helper-clearfix")
339
+ .prependTo( this.uiDialog );
340
+ this._on( this.uiDialogTitlebar, {
341
+ mousedown: function( event ) {
342
+ // Don't prevent click on close button (#8838)
343
+ // Focusing a dialog that is partially scrolled out of view
344
+ // causes the browser to scroll it into view, preventing the click event
345
+ if ( !$( event.target ).closest(".ui-dialog-titlebar-close") ) {
346
+ // Dialog isn't getting focus when dragging (#8063)
347
+ this.uiDialog.focus();
348
+ }
349
+ }
350
+ });
351
+
352
+ this.uiDialogTitlebarClose = $("<button></button>")
353
+ .button({
354
+ label: this.options.closeText,
355
+ icons: {
356
+ primary: "ui-icon-closethick"
357
+ },
358
+ text: false
359
+ })
360
+ .addClass("ui-dialog-titlebar-close")
361
+ .appendTo( this.uiDialogTitlebar );
362
+ this._on( this.uiDialogTitlebarClose, {
363
+ click: function( event ) {
364
+ event.preventDefault();
365
+ this.close( event );
366
+ }
367
+ });
368
+
369
+ uiDialogTitle = $("<span>")
370
+ .uniqueId()
371
+ .addClass("ui-dialog-title")
372
+ .prependTo( this.uiDialogTitlebar );
373
+ this._title( uiDialogTitle );
374
+
375
+ this.uiDialog.attr({
376
+ "aria-labelledby": uiDialogTitle.attr("id")
377
+ });
378
+ },
379
+
380
+ _title: function( title ) {
381
+ if ( !this.options.title ) {
382
+ title.html("&#160;");
383
+ }
384
+ title.text( this.options.title );
385
+ },
386
+
387
+ _createButtonPane: function() {
388
+ this.uiDialogButtonPane = $("<div>")
389
+ .addClass("ui-dialog-buttonpane ui-widget-content ui-helper-clearfix");
390
+
391
+ this.uiButtonSet = $("<div>")
392
+ .addClass("ui-dialog-buttonset")
393
+ .appendTo( this.uiDialogButtonPane );
394
+
395
+ this._createButtons();
396
+ },
397
+
398
+ _createButtons: function() {
399
+ var that = this,
400
+ buttons = this.options.buttons;
401
+
402
+ // if we already have a button pane, remove it
403
+ this.uiDialogButtonPane.remove();
404
+ this.uiButtonSet.empty();
405
+
406
+ if ( $.isEmptyObject( buttons ) || ($.isArray( buttons ) && !buttons.length) ) {
407
+ this.uiDialog.removeClass("ui-dialog-buttons");
408
+ return;
409
+ }
410
+
411
+ $.each( buttons, function( name, props ) {
412
+ var click, buttonOptions;
413
+ props = $.isFunction( props ) ?
414
+ { click: props, text: name } :
415
+ props;
416
+ // Default to a non-submitting button
417
+ props = $.extend( { type: "button" }, props );
418
+ // Change the context for the click callback to be the main element
419
+ click = props.click;
420
+ props.click = function() {
421
+ click.apply( that.element[0], arguments );
422
+ };
423
+ buttonOptions = {
424
+ icons: props.icons,
425
+ text: props.showText
426
+ };
427
+ delete props.icons;
428
+ delete props.showText;
429
+ $( "<button></button>", props )
430
+ .button( buttonOptions )
431
+ .appendTo( that.uiButtonSet );
432
+ });
433
+ this.uiDialog.addClass("ui-dialog-buttons");
434
+ this.uiDialogButtonPane.appendTo( this.uiDialog );
435
+ },
436
+
437
+ _makeDraggable: function() {
438
+ var that = this,
439
+ options = this.options;
440
+
441
+ function filteredUi( ui ) {
442
+ return {
443
+ position: ui.position,
444
+ offset: ui.offset
445
+ };
446
+ }
447
+
448
+ this.uiDialog.draggable({
449
+ cancel: ".ui-dialog-content, .ui-dialog-titlebar-close",
450
+ handle: ".ui-dialog-titlebar",
451
+ containment: "document",
452
+ start: function( event, ui ) {
453
+ $( this ).addClass("ui-dialog-dragging");
454
+ that._blockFrames();
455
+ that._trigger( "dragStart", event, filteredUi( ui ) );
456
+ },
457
+ drag: function( event, ui ) {
458
+ that._trigger( "drag", event, filteredUi( ui ) );
459
+ },
460
+ stop: function( event, ui ) {
461
+ options.position = [
462
+ ui.position.left - that.document.scrollLeft(),
463
+ ui.position.top - that.document.scrollTop()
464
+ ];
465
+ $( this ).removeClass("ui-dialog-dragging");
466
+ that._unblockFrames();
467
+ that._trigger( "dragStop", event, filteredUi( ui ) );
468
+ }
469
+ });
470
+ },
471
+
472
+ _makeResizable: function() {
473
+ var that = this,
474
+ options = this.options,
475
+ handles = options.resizable,
476
+ // .ui-resizable has position: relative defined in the stylesheet
477
+ // but dialogs have to use absolute or fixed positioning
478
+ position = this.uiDialog.css("position"),
479
+ resizeHandles = typeof handles === "string" ?
480
+ handles :
481
+ "n,e,s,w,se,sw,ne,nw";
482
+
483
+ function filteredUi( ui ) {
484
+ return {
485
+ originalPosition: ui.originalPosition,
486
+ originalSize: ui.originalSize,
487
+ position: ui.position,
488
+ size: ui.size
489
+ };
490
+ }
491
+
492
+ this.uiDialog.resizable({
493
+ cancel: ".ui-dialog-content",
494
+ containment: "document",
495
+ alsoResize: this.element,
496
+ maxWidth: options.maxWidth,
497
+ maxHeight: options.maxHeight,
498
+ minWidth: options.minWidth,
499
+ minHeight: this._minHeight(),
500
+ handles: resizeHandles,
501
+ start: function( event, ui ) {
502
+ $( this ).addClass("ui-dialog-resizing");
503
+ that._blockFrames();
504
+ that._trigger( "resizeStart", event, filteredUi( ui ) );
505
+ },
506
+ resize: function( event, ui ) {
507
+ that._trigger( "resize", event, filteredUi( ui ) );
508
+ },
509
+ stop: function( event, ui ) {
510
+ options.height = $( this ).height();
511
+ options.width = $( this ).width();
512
+ $( this ).removeClass("ui-dialog-resizing");
513
+ that._unblockFrames();
514
+ that._trigger( "resizeStop", event, filteredUi( ui ) );
515
+ }
516
+ })
517
+ .css( "position", position );
518
+ },
519
+
520
+ _minHeight: function() {
521
+ var options = this.options;
522
+
523
+ return options.height === "auto" ?
524
+ options.minHeight :
525
+ Math.min( options.minHeight, options.height );
526
+ },
527
+
528
+ _position: function() {
529
+ // Need to show the dialog to get the actual offset in the position plugin
530
+ var isVisible = this.uiDialog.is(":visible");
531
+ if ( !isVisible ) {
532
+ this.uiDialog.show();
533
+ }
534
+ this.uiDialog.position( this.options.position );
535
+ if ( !isVisible ) {
536
+ this.uiDialog.hide();
537
+ }
538
+ },
539
+
540
+ _setOptions: function( options ) {
541
+ var that = this,
542
+ resize = false,
543
+ resizableOptions = {};
544
+
545
+ $.each( options, function( key, value ) {
546
+ that._setOption( key, value );
547
+
548
+ if ( key in sizeRelatedOptions ) {
549
+ resize = true;
550
+ }
551
+ if ( key in resizableRelatedOptions ) {
552
+ resizableOptions[ key ] = value;
553
+ }
554
+ });
555
+
556
+ if ( resize ) {
557
+ this._size();
558
+ this._position();
559
+ }
560
+ if ( this.uiDialog.is(":data(ui-resizable)") ) {
561
+ this.uiDialog.resizable( "option", resizableOptions );
562
+ }
563
+ },
564
+
565
+ _setOption: function( key, value ) {
566
+ /*jshint maxcomplexity:15*/
567
+ var isDraggable, isResizable,
568
+ uiDialog = this.uiDialog;
569
+
570
+ if ( key === "dialogClass" ) {
571
+ uiDialog
572
+ .removeClass( this.options.dialogClass )
573
+ .addClass( value );
574
+ }
575
+
576
+ if ( key === "disabled" ) {
577
+ return;
578
+ }
579
+
580
+ this._super( key, value );
581
+
582
+ if ( key === "appendTo" ) {
583
+ this.uiDialog.appendTo( this._appendTo() );
584
+ }
585
+
586
+ if ( key === "buttons" ) {
587
+ this._createButtons();
588
+ }
589
+
590
+ if ( key === "closeText" ) {
591
+ this.uiDialogTitlebarClose.button({
592
+ // Ensure that we always pass a string
593
+ label: "" + value
594
+ });
595
+ }
596
+
597
+ if ( key === "draggable" ) {
598
+ isDraggable = uiDialog.is(":data(ui-draggable)");
599
+ if ( isDraggable && !value ) {
600
+ uiDialog.draggable("destroy");
601
+ }
602
+
603
+ if ( !isDraggable && value ) {
604
+ this._makeDraggable();
605
+ }
606
+ }
607
+
608
+ if ( key === "position" ) {
609
+ this._position();
610
+ }
611
+
612
+ if ( key === "resizable" ) {
613
+ // currently resizable, becoming non-resizable
614
+ isResizable = uiDialog.is(":data(ui-resizable)");
615
+ if ( isResizable && !value ) {
616
+ uiDialog.resizable("destroy");
617
+ }
618
+
619
+ // currently resizable, changing handles
620
+ if ( isResizable && typeof value === "string" ) {
621
+ uiDialog.resizable( "option", "handles", value );
622
+ }
623
+
624
+ // currently non-resizable, becoming resizable
625
+ if ( !isResizable && value !== false ) {
626
+ this._makeResizable();
627
+ }
628
+ }
629
+
630
+ if ( key === "title" ) {
631
+ this._title( this.uiDialogTitlebar.find(".ui-dialog-title") );
632
+ }
633
+ },
634
+
635
+ _size: function() {
636
+ // If the user has resized the dialog, the .ui-dialog and .ui-dialog-content
637
+ // divs will both have width and height set, so we need to reset them
638
+ var nonContentHeight, minContentHeight, maxContentHeight,
639
+ options = this.options;
640
+
641
+ // Reset content sizing
642
+ this.element.show().css({
643
+ width: "auto",
644
+ minHeight: 0,
645
+ maxHeight: "none",
646
+ height: 0
647
+ });
648
+
649
+ if ( options.minWidth > options.width ) {
650
+ options.width = options.minWidth;
651
+ }
652
+
653
+ // reset wrapper sizing
654
+ // determine the height of all the non-content elements
655
+ nonContentHeight = this.uiDialog.css({
656
+ height: "auto",
657
+ width: options.width
658
+ })
659
+ .outerHeight();
660
+ minContentHeight = Math.max( 0, options.minHeight - nonContentHeight );
661
+ maxContentHeight = typeof options.maxHeight === "number" ?
662
+ Math.max( 0, options.maxHeight - nonContentHeight ) :
663
+ "none";
664
+
665
+ if ( options.height === "auto" ) {
666
+ this.element.css({
667
+ minHeight: minContentHeight,
668
+ maxHeight: maxContentHeight,
669
+ height: "auto"
670
+ });
671
+ } else {
672
+ this.element.height( Math.max( 0, options.height - nonContentHeight ) );
673
+ }
674
+
675
+ if (this.uiDialog.is(":data(ui-resizable)") ) {
676
+ this.uiDialog.resizable( "option", "minHeight", this._minHeight() );
677
+ }
678
+ },
679
+
680
+ _blockFrames: function() {
681
+ this.iframeBlocks = this.document.find( "iframe" ).map(function() {
682
+ var iframe = $( this );
683
+
684
+ return $( "<div>" )
685
+ .css({
686
+ position: "absolute",
687
+ width: iframe.outerWidth(),
688
+ height: iframe.outerHeight()
689
+ })
690
+ .appendTo( iframe.parent() )
691
+ .offset( iframe.offset() )[0];
692
+ });
693
+ },
694
+
695
+ _unblockFrames: function() {
696
+ if ( this.iframeBlocks ) {
697
+ this.iframeBlocks.remove();
698
+ delete this.iframeBlocks;
699
+ }
700
+ },
701
+
702
+ _allowInteraction: function( event ) {
703
+ if ( $( event.target ).closest(".ui-dialog").length ) {
704
+ return true;
705
+ }
706
+
707
+ // TODO: Remove hack when datepicker implements
708
+ // the .ui-front logic (#8989)
709
+ return !!$( event.target ).closest(".ui-datepicker").length;
710
+ },
711
+
712
+ _createOverlay: function() {
713
+ if ( !this.options.modal ) {
714
+ return;
715
+ }
716
+
717
+ var that = this,
718
+ widgetFullName = this.widgetFullName;
719
+ if ( !$.ui.dialog.overlayInstances ) {
720
+ // Prevent use of anchors and inputs.
721
+ // We use a delay in case the overlay is created from an
722
+ // event that we're going to be cancelling. (#2804)
723
+ this._delay(function() {
724
+ // Handle .dialog().dialog("close") (#4065)
725
+ if ( $.ui.dialog.overlayInstances ) {
726
+ this.document.bind( "focusin.dialog", function( event ) {
727
+ if ( !that._allowInteraction( event ) ) {
728
+ event.preventDefault();
729
+ $(".ui-dialog:visible:last .ui-dialog-content")
730
+ .data( widgetFullName )._focusTabbable();
731
+ }
732
+ });
733
+ }
734
+ });
735
+ }
736
+
737
+ this.overlay = $("<div>")
738
+ .addClass("ui-widget-overlay ui-front")
739
+ .appendTo( this._appendTo() );
740
+ this._on( this.overlay, {
741
+ mousedown: "_keepFocus"
742
+ });
743
+ $.ui.dialog.overlayInstances++;
744
+ },
745
+
746
+ _destroyOverlay: function() {
747
+ if ( !this.options.modal ) {
748
+ return;
749
+ }
750
+
751
+ if ( this.overlay ) {
752
+ $.ui.dialog.overlayInstances--;
753
+
754
+ if ( !$.ui.dialog.overlayInstances ) {
755
+ this.document.unbind( "focusin.dialog" );
756
+ }
757
+ this.overlay.remove();
758
+ this.overlay = null;
759
+ }
760
+ }
761
+ });
762
+
763
+ $.ui.dialog.overlayInstances = 0;
764
+
765
+ // DEPRECATED
766
+ if ( $.uiBackCompat !== false ) {
767
+ // position option with array notation
768
+ // just override with old implementation
769
+ $.widget( "ui.dialog", $.ui.dialog, {
770
+ _position: function() {
771
+ var position = this.options.position,
772
+ myAt = [],
773
+ offset = [ 0, 0 ],
774
+ isVisible;
775
+
776
+ if ( position ) {
777
+ if ( typeof position === "string" || (typeof position === "object" && "0" in position ) ) {
778
+ myAt = position.split ? position.split(" ") : [ position[0], position[1] ];
779
+ if ( myAt.length === 1 ) {
780
+ myAt[1] = myAt[0];
781
+ }
782
+
783
+ $.each( [ "left", "top" ], function( i, offsetPosition ) {
784
+ if ( +myAt[ i ] === myAt[ i ] ) {
785
+ offset[ i ] = myAt[ i ];
786
+ myAt[ i ] = offsetPosition;
787
+ }
788
+ });
789
+
790
+ position = {
791
+ my: myAt[0] + (offset[0] < 0 ? offset[0] : "+" + offset[0]) + " " +
792
+ myAt[1] + (offset[1] < 0 ? offset[1] : "+" + offset[1]),
793
+ at: myAt.join(" ")
794
+ };
795
+ }
796
+
797
+ position = $.extend( {}, $.ui.dialog.prototype.options.position, position );
798
+ } else {
799
+ position = $.ui.dialog.prototype.options.position;
800
+ }
801
+
802
+ // need to show the dialog to get the actual offset in the position plugin
803
+ isVisible = this.uiDialog.is(":visible");
804
+ if ( !isVisible ) {
805
+ this.uiDialog.show();
806
+ }
807
+ this.uiDialog.position( position );
808
+ if ( !isVisible ) {
809
+ this.uiDialog.hide();
810
+ }
811
+ }
812
+ });
813
+ }
814
+
815
+ }( jQuery ) );