annotate src/main/webapp/imageServer/resources/js/jquery-ui-1.10.4/ui/jquery.ui.dialog.js @ 205:f719d73383db

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