X-Git-Url: http://git.cyclocoop.org/?a=blobdiff_plain;f=resources%2Flib%2Fjquery.ui%2Fjquery.ui.dialog.js;h=75a9e8f902ece8d3d0b5ae0e83b3bee20828204d;hb=434ff86050115d4e1e3d61a23754815ebd7aeac6;hp=06b85f23a1ab7377292f53d629dd9776a9e17045;hpb=0ff2c62197fdaf79f82d8657afd70621725c9762;p=lhc%2Fweb%2Fwiklou.git diff --git a/resources/lib/jquery.ui/jquery.ui.dialog.js b/resources/lib/jquery.ui/jquery.ui.dialog.js index 06b85f23a1..75a9e8f902 100644 --- a/resources/lib/jquery.ui/jquery.ui.dialog.js +++ b/resources/lib/jquery.ui/jquery.ui.dialog.js @@ -1,11 +1,12 @@ /*! - * jQuery UI Dialog 1.8.24 + * jQuery UI Dialog 1.9.2 + * http://jqueryui.com * - * Copyright 2012, AUTHORS.txt (http://jqueryui.com/about) - * Dual licensed under the MIT or GPL Version 2 licenses. + * Copyright 2012 jQuery Foundation and other contributors + * Released under the MIT license. * http://jquery.org/license * - * http://docs.jquery.com/UI/Dialog + * http://api.jqueryui.com/dialog/ * * Depends: * jquery.ui.core.js @@ -18,11 +19,7 @@ */ (function( $, undefined ) { -var uiDialogClasses = - 'ui-dialog ' + - 'ui-widget ' + - 'ui-widget-content ' + - 'ui-corner-all ', +var uiDialogClasses = "ui-dialog ui-widget ui-widget-content ui-corner-all ", sizeRelatedOptions = { buttons: true, height: true, @@ -40,158 +37,167 @@ var uiDialogClasses = }; $.widget("ui.dialog", { + version: "1.9.2", options: { autoOpen: true, buttons: {}, closeOnEscape: true, - closeText: 'close', - dialogClass: '', + closeText: "close", + dialogClass: "", draggable: true, hide: null, - height: 'auto', + height: "auto", maxHeight: false, maxWidth: false, minHeight: 150, minWidth: 150, modal: false, position: { - my: 'center', - at: 'center', - collision: 'fit', + my: "center", + at: "center", + of: window, + collision: "fit", // ensure that the titlebar is never outside the document - using: function(pos) { - var topOffset = $(this).css(pos).offset().top; - if (topOffset < 0) { - $(this).css('top', pos.top - topOffset); + using: function( pos ) { + var topOffset = $( this ).css( pos ).offset().top; + if ( topOffset < 0 ) { + $( this ).css( "top", pos.top - topOffset ); } } }, resizable: true, show: null, stack: true, - title: '', + title: "", width: 300, zIndex: 1000 }, _create: function() { - this.originalTitle = this.element.attr('title'); + this.originalTitle = this.element.attr( "title" ); // #5742 - .attr() might return a DOMElement if ( typeof this.originalTitle !== "string" ) { this.originalTitle = ""; } - + this.oldPosition = { + parent: this.element.parent(), + index: this.element.parent().children().index( this.element ) + }; this.options.title = this.options.title || this.originalTitle; - var self = this, - options = self.options, - - title = options.title || ' ', - titleId = $.ui.dialog.getTitleId(self.element), - - uiDialog = (self.uiDialog = $('
')) - .appendTo(document.body) - .hide() - .addClass(uiDialogClasses + options.dialogClass) + var that = this, + options = this.options, + + title = options.title || " ", + uiDialog, + uiDialogTitlebar, + uiDialogTitlebarClose, + uiDialogTitle, + uiDialogButtonPane; + + uiDialog = ( this.uiDialog = $( "
" ) ) + .addClass( uiDialogClasses + options.dialogClass ) .css({ + display: "none", + outline: 0, // TODO: move to stylesheet zIndex: options.zIndex }) // setting tabIndex makes the div focusable - // setting outline to 0 prevents a border on focus in Mozilla - .attr('tabIndex', -1).css('outline', 0).keydown(function(event) { - if (options.closeOnEscape && !event.isDefaultPrevented() && event.keyCode && - event.keyCode === $.ui.keyCode.ESCAPE) { - - self.close(event); + .attr( "tabIndex", -1) + .keydown(function( event ) { + if ( options.closeOnEscape && !event.isDefaultPrevented() && event.keyCode && + event.keyCode === $.ui.keyCode.ESCAPE ) { + that.close( event ); event.preventDefault(); } }) - .attr({ - role: 'dialog', - 'aria-labelledby': titleId + .mousedown(function( event ) { + that.moveToTop( false, event ); }) - .mousedown(function(event) { - self.moveToTop(false, event); - }), + .appendTo( "body" ); - uiDialogContent = self.element + this.element .show() - .removeAttr('title') - .addClass( - 'ui-dialog-content ' + - 'ui-widget-content') - .appendTo(uiDialog), - - uiDialogTitlebar = (self.uiDialogTitlebar = $('
')) - .addClass( - 'ui-dialog-titlebar ' + - 'ui-widget-header ' + - 'ui-corner-all ' + - 'ui-helper-clearfix' - ) - .prependTo(uiDialog), - - uiDialogTitlebarClose = $('') - .addClass( - 'ui-dialog-titlebar-close ' + - 'ui-corner-all' - ) - .attr('role', 'button') - .hover( - function() { - uiDialogTitlebarClose.addClass('ui-state-hover'); - }, - function() { - uiDialogTitlebarClose.removeClass('ui-state-hover'); - } - ) - .focus(function() { - uiDialogTitlebarClose.addClass('ui-state-focus'); - }) - .blur(function() { - uiDialogTitlebarClose.removeClass('ui-state-focus'); + .removeAttr( "title" ) + .addClass( "ui-dialog-content ui-widget-content" ) + .appendTo( uiDialog ); + + uiDialogTitlebar = ( this.uiDialogTitlebar = $( "
" ) ) + .addClass( "ui-dialog-titlebar ui-widget-header " + + "ui-corner-all ui-helper-clearfix" ) + .bind( "mousedown", function() { + // Dialog isn't getting focus when dragging (#8063) + uiDialog.focus(); }) - .click(function(event) { - self.close(event); - return false; + .prependTo( uiDialog ); + + uiDialogTitlebarClose = $( "" ) + .addClass( "ui-dialog-titlebar-close ui-corner-all" ) + .attr( "role", "button" ) + .click(function( event ) { + event.preventDefault(); + that.close( event ); }) - .appendTo(uiDialogTitlebar), + .appendTo( uiDialogTitlebar ); - uiDialogTitlebarCloseText = (self.uiDialogTitlebarCloseText = $('')) - .addClass( - 'ui-icon ' + - 'ui-icon-closethick' - ) - .text(options.closeText) - .appendTo(uiDialogTitlebarClose), + ( this.uiDialogTitlebarCloseText = $( "" ) ) + .addClass( "ui-icon ui-icon-closethick" ) + .text( options.closeText ) + .appendTo( uiDialogTitlebarClose ); - uiDialogTitle = $('') - .addClass('ui-dialog-title') - .attr('id', titleId) - .html(title) - .prependTo(uiDialogTitlebar); + uiDialogTitle = $( "" ) + .uniqueId() + .addClass( "ui-dialog-title" ) + .html( title ) + .prependTo( uiDialogTitlebar ); - //handling of deprecated beforeclose (vs beforeClose) option - //Ticket #4669 http://dev.jqueryui.com/ticket/4669 - //TODO: remove in 1.9pre - if ($.isFunction(options.beforeclose) && !$.isFunction(options.beforeClose)) { - options.beforeClose = options.beforeclose; - } + uiDialogButtonPane = ( this.uiDialogButtonPane = $( "
" ) ) + .addClass( "ui-dialog-buttonpane ui-widget-content ui-helper-clearfix" ); + + ( this.uiButtonSet = $( "
" ) ) + .addClass( "ui-dialog-buttonset" ) + .appendTo( uiDialogButtonPane ); - uiDialogTitlebar.find("*").add(uiDialogTitlebar).disableSelection(); + uiDialog.attr({ + role: "dialog", + "aria-labelledby": uiDialogTitle.attr( "id" ) + }); - if (options.draggable && $.fn.draggable) { - self._makeDraggable(); + uiDialogTitlebar.find( "*" ).add( uiDialogTitlebar ).disableSelection(); + this._hoverable( uiDialogTitlebarClose ); + this._focusable( uiDialogTitlebarClose ); + + if ( options.draggable && $.fn.draggable ) { + this._makeDraggable(); } - if (options.resizable && $.fn.resizable) { - self._makeResizable(); + if ( options.resizable && $.fn.resizable ) { + this._makeResizable(); } - self._createButtons(options.buttons); - self._isOpen = false; + this._createButtons( options.buttons ); + this._isOpen = false; - if ($.fn.bgiframe) { + if ( $.fn.bgiframe ) { uiDialog.bgiframe(); } + + // prevent tabbing out of modal dialogs + this._on( uiDialog, { keydown: function( event ) { + if ( !options.modal || event.keyCode !== $.ui.keyCode.TAB ) { + return; + } + + var tabbables = $( ":tabbable", uiDialog ), + first = tabbables.filter( ":first" ), + last = tabbables.filter( ":last" ); + + if ( event.target === last[0] && !event.shiftKey ) { + first.focus( 1 ); + return false; + } else if ( event.target === first[0] && event.shiftKey ) { + last.focus( 1 ); + return false; + } + }}); }, _init: function() { @@ -200,72 +206,81 @@ $.widget("ui.dialog", { } }, - destroy: function() { - var self = this; - - if (self.overlay) { - self.overlay.destroy(); + _destroy: function() { + var next, + oldPosition = this.oldPosition; + + if ( this.overlay ) { + this.overlay.destroy(); } - self.uiDialog.hide(); - self.element - .unbind('.dialog') - .removeData('dialog') - .removeClass('ui-dialog-content ui-widget-content') - .hide().appendTo('body'); - self.uiDialog.remove(); + this.uiDialog.hide(); + this.element + .removeClass( "ui-dialog-content ui-widget-content" ) + .hide() + .appendTo( "body" ); + this.uiDialog.remove(); - if (self.originalTitle) { - self.element.attr('title', self.originalTitle); + if ( this.originalTitle ) { + this.element.attr( "title", this.originalTitle ); } - return self; + next = oldPosition.parent.children().eq( oldPosition.index ); + // Don't try to place the dialog next to itself (#8613) + if ( next.length && next[ 0 ] !== this.element[ 0 ] ) { + next.before( this.element ); + } else { + oldPosition.parent.append( this.element ); + } }, widget: function() { return this.uiDialog; }, - close: function(event) { - var self = this, + close: function( event ) { + var that = this, maxZ, thisZ; - - if (false === self._trigger('beforeClose', event)) { + + if ( !this._isOpen ) { return; } - if (self.overlay) { - self.overlay.destroy(); + if ( false === this._trigger( "beforeClose", event ) ) { + return; } - self.uiDialog.unbind('keypress.ui-dialog'); - self._isOpen = false; + this._isOpen = false; + + if ( this.overlay ) { + this.overlay.destroy(); + } - if (self.options.hide) { - self.uiDialog.hide(self.options.hide, function() { - self._trigger('close', event); + if ( this.options.hide ) { + this._hide( this.uiDialog, this.options.hide, function() { + that._trigger( "close", event ); }); } else { - self.uiDialog.hide(); - self._trigger('close', event); + this.uiDialog.hide(); + this._trigger( "close", event ); } $.ui.dialog.overlay.resize(); // adjust the maxZ to allow other modal dialogs to continue to work (see #4309) - if (self.options.modal) { + if ( this.options.modal ) { maxZ = 0; - $('.ui-dialog').each(function() { - if (this !== self.uiDialog[0]) { - thisZ = $(this).css('z-index'); - if(!isNaN(thisZ)) { - maxZ = Math.max(maxZ, thisZ); + $( ".ui-dialog" ).each(function() { + if ( this !== that.uiDialog[0] ) { + thisZ = $( this ).css( "z-index" ); + if ( !isNaN( thisZ ) ) { + maxZ = Math.max( maxZ, thisZ ); } } }); $.ui.dialog.maxZ = maxZ; } - return self; + return this; }, isOpen: function() { @@ -274,179 +289,158 @@ $.widget("ui.dialog", { // the force parameter allows us to move modal dialogs to their correct // position on open - moveToTop: function(force, event) { - var self = this, - options = self.options, + moveToTop: function( force, event ) { + var options = this.options, saveScroll; - if ((options.modal && !force) || - (!options.stack && !options.modal)) { - return self._trigger('focus', event); + if ( ( options.modal && !force ) || + ( !options.stack && !options.modal ) ) { + return this._trigger( "focus", event ); } - if (options.zIndex > $.ui.dialog.maxZ) { + if ( options.zIndex > $.ui.dialog.maxZ ) { $.ui.dialog.maxZ = options.zIndex; } - if (self.overlay) { + if ( this.overlay ) { $.ui.dialog.maxZ += 1; - self.overlay.$el.css('z-index', $.ui.dialog.overlay.maxZ = $.ui.dialog.maxZ); + $.ui.dialog.overlay.maxZ = $.ui.dialog.maxZ; + this.overlay.$el.css( "z-index", $.ui.dialog.overlay.maxZ ); } - //Save and then restore scroll since Opera 9.5+ resets when parent z-Index is changed. - // http://ui.jquery.com/bugs/ticket/3193 - saveScroll = { scrollTop: self.element.scrollTop(), scrollLeft: self.element.scrollLeft() }; + // Save and then restore scroll + // Opera 9.5+ resets when parent z-index is changed. + // http://bugs.jqueryui.com/ticket/3193 + saveScroll = { + scrollTop: this.element.scrollTop(), + scrollLeft: this.element.scrollLeft() + }; $.ui.dialog.maxZ += 1; - self.uiDialog.css('z-index', $.ui.dialog.maxZ); - self.element.attr(saveScroll); - self._trigger('focus', event); + this.uiDialog.css( "z-index", $.ui.dialog.maxZ ); + this.element.attr( saveScroll ); + this._trigger( "focus", event ); - return self; + return this; }, open: function() { - if (this._isOpen) { return; } - - var self = this, - options = self.options, - uiDialog = self.uiDialog; - - self.overlay = options.modal ? new $.ui.dialog.overlay(self) : null; - self._size(); - self._position(options.position); - uiDialog.show(options.show); - self.moveToTop(true); + if ( this._isOpen ) { + return; + } - // prevent tabbing out of modal dialogs - if ( options.modal ) { - uiDialog.bind( "keydown.ui-dialog", function( event ) { - if ( event.keyCode !== $.ui.keyCode.TAB ) { - return; - } + var hasFocus, + options = this.options, + uiDialog = this.uiDialog; - var tabbables = $(':tabbable', this), - first = tabbables.filter(':first'), - last = tabbables.filter(':last'); - - if (event.target === last[0] && !event.shiftKey) { - first.focus(1); - return false; - } else if (event.target === first[0] && event.shiftKey) { - last.focus(1); - return false; - } - }); - } + this._size(); + this._position( options.position ); + uiDialog.show( options.show ); + this.overlay = options.modal ? new $.ui.dialog.overlay( this ) : null; + this.moveToTop( true ); // set focus to the first tabbable element in the content area or the first button // if there are no tabbable elements, set focus on the dialog itself - $(self.element.find(':tabbable').get().concat( - uiDialog.find('.ui-dialog-buttonpane :tabbable').get().concat( - uiDialog.get()))).eq(0).focus(); + hasFocus = this.element.find( ":tabbable" ); + if ( !hasFocus.length ) { + hasFocus = this.uiDialogButtonPane.find( ":tabbable" ); + if ( !hasFocus.length ) { + hasFocus = uiDialog; + } + } + hasFocus.eq( 0 ).focus(); - self._isOpen = true; - self._trigger('open'); + this._isOpen = true; + this._trigger( "open" ); - return self; + return this; }, - _createButtons: function(buttons) { - var self = this, - hasButtons = false, - uiDialogButtonPane = $('
') - .addClass( - 'ui-dialog-buttonpane ' + - 'ui-widget-content ' + - 'ui-helper-clearfix' - ), - uiButtonSet = $( "
" ) - .addClass( "ui-dialog-buttonset" ) - .appendTo( uiDialogButtonPane ); + _createButtons: function( buttons ) { + var that = this, + hasButtons = false; // if we already have a button pane, remove it - self.uiDialog.find('.ui-dialog-buttonpane').remove(); + this.uiDialogButtonPane.remove(); + this.uiButtonSet.empty(); - if (typeof buttons === 'object' && buttons !== null) { - $.each(buttons, function() { + if ( typeof buttons === "object" && buttons !== null ) { + $.each( buttons, function() { return !(hasButtons = true); }); } - if (hasButtons) { - $.each(buttons, function(name, props) { + if ( hasButtons ) { + $.each( buttons, function( name, props ) { + var button, click; props = $.isFunction( props ) ? { click: props, text: name } : props; - var button = $('') - .click(function() { - props.click.apply(self.element[0], arguments); - }) - .appendTo(uiButtonSet); - // can't use .attr( props, true ) with jQuery 1.3.2. - $.each( props, function( key, value ) { - if ( key === "click" ) { - return; - } - if ( key in button ) { - button[ key ]( value ); - } else { - button.attr( key, value ); - } - }); - if ($.fn.button) { + // Default to a non-submitting button + props = $.extend( { type: "button" }, props ); + // Change the context for the click callback to be the main element + click = props.click; + props.click = function() { + click.apply( that.element[0], arguments ); + }; + button = $( "", props ) + .appendTo( that.uiButtonSet ); + if ( $.fn.button ) { button.button(); } }); - uiDialogButtonPane.appendTo(self.uiDialog); + this.uiDialog.addClass( "ui-dialog-buttons" ); + this.uiDialogButtonPane.appendTo( this.uiDialog ); + } else { + this.uiDialog.removeClass( "ui-dialog-buttons" ); } }, _makeDraggable: function() { - var self = this, - options = self.options, - doc = $(document), - heightBeforeDrag; + var that = this, + options = this.options; - function filteredUi(ui) { + function filteredUi( ui ) { return { position: ui.position, offset: ui.offset }; } - self.uiDialog.draggable({ - cancel: '.ui-dialog-content, .ui-dialog-titlebar-close', - handle: '.ui-dialog-titlebar', - containment: 'document', - start: function(event, ui) { - heightBeforeDrag = options.height === "auto" ? "auto" : $(this).height(); - $(this).height($(this).height()).addClass("ui-dialog-dragging"); - self._trigger('dragStart', event, filteredUi(ui)); + this.uiDialog.draggable({ + cancel: ".ui-dialog-content, .ui-dialog-titlebar-close", + handle: ".ui-dialog-titlebar", + containment: "document", + start: function( event, ui ) { + $( this ) + .addClass( "ui-dialog-dragging" ); + that._trigger( "dragStart", event, filteredUi( ui ) ); }, - drag: function(event, ui) { - self._trigger('drag', event, filteredUi(ui)); + drag: function( event, ui ) { + that._trigger( "drag", event, filteredUi( ui ) ); }, - stop: function(event, ui) { - options.position = [ui.position.left - doc.scrollLeft(), - ui.position.top - doc.scrollTop()]; - $(this).removeClass("ui-dialog-dragging").height(heightBeforeDrag); - self._trigger('dragStop', event, filteredUi(ui)); + stop: function( event, ui ) { + options.position = [ + ui.position.left - that.document.scrollLeft(), + ui.position.top - that.document.scrollTop() + ]; + $( this ) + .removeClass( "ui-dialog-dragging" ); + that._trigger( "dragStop", event, filteredUi( ui ) ); $.ui.dialog.overlay.resize(); } }); }, - _makeResizable: function(handles) { + _makeResizable: function( handles ) { handles = (handles === undefined ? this.options.resizable : handles); - var self = this, - options = self.options, + var that = this, + options = this.options, // .ui-resizable has position: relative defined in the stylesheet // but dialogs have to use absolute or fixed positioning - position = self.uiDialog.css('position'), - resizeHandles = (typeof handles === 'string' ? + position = this.uiDialog.css( "position" ), + resizeHandles = typeof handles === 'string' ? handles : - 'n,e,s,w,se,sw,ne,nw' - ); + "n,e,s,w,se,sw,ne,nw"; - function filteredUi(ui) { + function filteredUi( ui ) { return { originalPosition: ui.originalPosition, originalSize: ui.originalSize, @@ -455,101 +449,99 @@ $.widget("ui.dialog", { }; } - self.uiDialog.resizable({ - cancel: '.ui-dialog-content', - containment: 'document', - alsoResize: self.element, + this.uiDialog.resizable({ + cancel: ".ui-dialog-content", + containment: "document", + alsoResize: this.element, maxWidth: options.maxWidth, maxHeight: options.maxHeight, minWidth: options.minWidth, - minHeight: self._minHeight(), + minHeight: this._minHeight(), handles: resizeHandles, - start: function(event, ui) { - $(this).addClass("ui-dialog-resizing"); - self._trigger('resizeStart', event, filteredUi(ui)); + start: function( event, ui ) { + $( this ).addClass( "ui-dialog-resizing" ); + that._trigger( "resizeStart", event, filteredUi( ui ) ); }, - resize: function(event, ui) { - self._trigger('resize', event, filteredUi(ui)); + resize: function( event, ui ) { + that._trigger( "resize", event, filteredUi( ui ) ); }, - stop: function(event, ui) { - $(this).removeClass("ui-dialog-resizing"); - options.height = $(this).height(); - options.width = $(this).width(); - self._trigger('resizeStop', event, filteredUi(ui)); + stop: function( event, ui ) { + $( this ).removeClass( "ui-dialog-resizing" ); + options.height = $( this ).height(); + options.width = $( this ).width(); + that._trigger( "resizeStop", event, filteredUi( ui ) ); $.ui.dialog.overlay.resize(); } }) - .css('position', position) - .find('.ui-resizable-se').addClass('ui-icon ui-icon-grip-diagonal-se'); + .css( "position", position ) + .find( ".ui-resizable-se" ) + .addClass( "ui-icon ui-icon-grip-diagonal-se" ); }, _minHeight: function() { var options = this.options; - if (options.height === 'auto') { + if ( options.height === "auto" ) { return options.minHeight; } else { - return Math.min(options.minHeight, options.height); + return Math.min( options.minHeight, options.height ); } }, - _position: function(position) { + _position: function( position ) { var myAt = [], - offset = [0, 0], + offset = [ 0, 0 ], isVisible; - if (position) { + if ( position ) { // deep extending converts arrays to objects in jQuery <= 1.3.2 :-( // if (typeof position == 'string' || $.isArray(position)) { // myAt = $.isArray(position) ? position : position.split(' '); - if (typeof position === 'string' || (typeof position === 'object' && '0' in position)) { - myAt = position.split ? position.split(' ') : [position[0], position[1]]; - if (myAt.length === 1) { - myAt[1] = myAt[0]; + if ( typeof position === "string" || (typeof position === "object" && "0" in position ) ) { + myAt = position.split ? position.split( " " ) : [ position[ 0 ], position[ 1 ] ]; + if ( myAt.length === 1 ) { + myAt[ 1 ] = myAt[ 0 ]; } - $.each(['left', 'top'], function(i, offsetPosition) { - if (+myAt[i] === myAt[i]) { - offset[i] = myAt[i]; - myAt[i] = offsetPosition; + $.each( [ "left", "top" ], function( i, offsetPosition ) { + if ( +myAt[ i ] === myAt[ i ] ) { + offset[ i ] = myAt[ i ]; + myAt[ i ] = offsetPosition; } }); position = { - my: myAt.join(" "), - at: myAt.join(" "), - offset: offset.join(" ") + my: myAt[0] + (offset[0] < 0 ? offset[0] : "+" + offset[0]) + " " + + myAt[1] + (offset[1] < 0 ? offset[1] : "+" + offset[1]), + at: myAt.join( " " ) }; - } + } - position = $.extend({}, $.ui.dialog.prototype.options.position, position); + position = $.extend( {}, $.ui.dialog.prototype.options.position, position ); } else { position = $.ui.dialog.prototype.options.position; } // need to show the dialog to get the actual offset in the position plugin - isVisible = this.uiDialog.is(':visible'); - if (!isVisible) { + isVisible = this.uiDialog.is( ":visible" ); + if ( !isVisible ) { this.uiDialog.show(); } - this.uiDialog - // workaround for jQuery bug #5781 http://dev.jquery.com/ticket/5781 - .css({ top: 0, left: 0 }) - .position($.extend({ of: window }, position)); - if (!isVisible) { + this.uiDialog.position( position ); + if ( !isVisible ) { this.uiDialog.hide(); } }, _setOptions: function( options ) { - var self = this, + var that = this, resizableOptions = {}, resize = false; $.each( options, function( key, value ) { - self._setOption( key, value ); - + that._setOption( key, value ); + if ( key in sizeRelatedOptions ) { resize = true; } @@ -566,104 +558,98 @@ $.widget("ui.dialog", { } }, - _setOption: function(key, value){ - var self = this, - uiDialog = self.uiDialog; + _setOption: function( key, value ) { + var isDraggable, isResizable, + uiDialog = this.uiDialog; - switch (key) { - //handling of deprecated beforeclose (vs beforeClose) option - //Ticket #4669 http://dev.jqueryui.com/ticket/4669 - //TODO: remove in 1.9pre - case "beforeclose": - key = "beforeClose"; - break; + switch ( key ) { case "buttons": - self._createButtons(value); + this._createButtons( value ); break; case "closeText": // ensure that we always pass a string - self.uiDialogTitlebarCloseText.text("" + value); + this.uiDialogTitlebarCloseText.text( "" + value ); break; case "dialogClass": uiDialog - .removeClass(self.options.dialogClass) - .addClass(uiDialogClasses + value); + .removeClass( this.options.dialogClass ) + .addClass( uiDialogClasses + value ); break; case "disabled": - if (value) { - uiDialog.addClass('ui-dialog-disabled'); + if ( value ) { + uiDialog.addClass( "ui-dialog-disabled" ); } else { - uiDialog.removeClass('ui-dialog-disabled'); + uiDialog.removeClass( "ui-dialog-disabled" ); } break; case "draggable": - var isDraggable = uiDialog.is( ":data(draggable)" ); + isDraggable = uiDialog.is( ":data(draggable)" ); if ( isDraggable && !value ) { uiDialog.draggable( "destroy" ); } - + if ( !isDraggable && value ) { - self._makeDraggable(); + this._makeDraggable(); } break; case "position": - self._position(value); + this._position( value ); break; case "resizable": // currently resizable, becoming non-resizable - var isResizable = uiDialog.is( ":data(resizable)" ); - if (isResizable && !value) { - uiDialog.resizable('destroy'); + isResizable = uiDialog.is( ":data(resizable)" ); + if ( isResizable && !value ) { + uiDialog.resizable( "destroy" ); } // currently resizable, changing handles - if (isResizable && typeof value === 'string') { - uiDialog.resizable('option', 'handles', value); + if ( isResizable && typeof value === "string" ) { + uiDialog.resizable( "option", "handles", value ); } // currently non-resizable, becoming resizable - if (!isResizable && value !== false) { - self._makeResizable(value); + if ( !isResizable && value !== false ) { + this._makeResizable( value ); } break; case "title": // convert whatever was passed in o a string, for html() to not throw up - $(".ui-dialog-title", self.uiDialogTitlebar).html("" + (value || ' ')); + $( ".ui-dialog-title", this.uiDialogTitlebar ) + .html( "" + ( value || " " ) ); break; } - $.Widget.prototype._setOption.apply(self, arguments); + this._super( key, value ); }, _size: function() { /* If the user has resized the dialog, the .ui-dialog and .ui-dialog-content * divs will both have width and height set, so we need to reset them */ - var options = this.options, - nonContentHeight, - minContentHeight, + var nonContentHeight, minContentHeight, autoHeight, + options = this.options, isVisible = this.uiDialog.is( ":visible" ); // reset content sizing this.element.show().css({ - width: 'auto', + width: "auto", minHeight: 0, height: 0 }); - if (options.minWidth > options.width) { + if ( options.minWidth > options.width ) { options.width = options.minWidth; } // reset wrapper sizing // determine the height of all the non-content elements nonContentHeight = this.uiDialog.css({ - height: 'auto', + height: "auto", width: options.width }) - .height(); + .outerHeight(); minContentHeight = Math.max( 0, options.minHeight - nonContentHeight ); - + if ( options.height === "auto" ) { // only needed for IE6 support if ( $.support.minHeight ) { @@ -673,7 +659,7 @@ $.widget("ui.dialog", { }); } else { this.uiDialog.show(); - var autoHeight = this.element.css( "height", "auto" ).height(); + autoHeight = this.element.css( "height", "auto" ).height(); if ( !isVisible ) { this.uiDialog.hide(); } @@ -683,102 +669,108 @@ $.widget("ui.dialog", { this.element.height( Math.max( options.height - nonContentHeight, 0 ) ); } - if (this.uiDialog.is(':data(resizable)')) { - this.uiDialog.resizable('option', 'minHeight', this._minHeight()); + if (this.uiDialog.is( ":data(resizable)" ) ) { + this.uiDialog.resizable( "option", "minHeight", this._minHeight() ); } } }); $.extend($.ui.dialog, { - version: "1.8.24", - uuid: 0, maxZ: 0, getTitleId: function($el) { - var id = $el.attr('id'); - if (!id) { + var id = $el.attr( "id" ); + if ( !id ) { this.uuid += 1; id = this.uuid; } - return 'ui-dialog-title-' + id; + return "ui-dialog-title-" + id; }, - overlay: function(dialog) { - this.$el = $.ui.dialog.overlay.create(dialog); + overlay: function( dialog ) { + this.$el = $.ui.dialog.overlay.create( dialog ); } }); -$.extend($.ui.dialog.overlay, { +$.extend( $.ui.dialog.overlay, { instances: [], // reuse old instances due to IE memory leak with alpha transparency (see #5185) oldInstances: [], maxZ: 0, - events: $.map('focus,mousedown,mouseup,keydown,keypress,click'.split(','), - function(event) { return event + '.dialog-overlay'; }).join(' '), - create: function(dialog) { - if (this.instances.length === 0) { + events: $.map( + "focus,mousedown,mouseup,keydown,keypress,click".split( "," ), + function( event ) { + return event + ".dialog-overlay"; + } + ).join( " " ), + create: function( dialog ) { + if ( this.instances.length === 0 ) { // prevent use of anchors and inputs // we use a setTimeout in case the overlay is created from an // event that we're going to be cancelling (see #2804) setTimeout(function() { // handle $(el).dialog().dialog('close') (see #4065) - if ($.ui.dialog.overlay.instances.length) { - $(document).bind($.ui.dialog.overlay.events, function(event) { + if ( $.ui.dialog.overlay.instances.length ) { + $( document ).bind( $.ui.dialog.overlay.events, function( event ) { // stop events if the z-index of the target is < the z-index of the overlay // we cannot return true when we don't want to cancel the event (#3523) - if ($(event.target).zIndex() < $.ui.dialog.overlay.maxZ) { + if ( $( event.target ).zIndex() < $.ui.dialog.overlay.maxZ ) { return false; } }); } - }, 1); - - // allow closing by pressing the escape key - $(document).bind('keydown.dialog-overlay', function(event) { - if (dialog.options.closeOnEscape && !event.isDefaultPrevented() && event.keyCode && - event.keyCode === $.ui.keyCode.ESCAPE) { - - dialog.close(event); - event.preventDefault(); - } - }); + }, 1 ); // handle window resize - $(window).bind('resize.dialog-overlay', $.ui.dialog.overlay.resize); + $( window ).bind( "resize.dialog-overlay", $.ui.dialog.overlay.resize ); } - var $el = (this.oldInstances.pop() || $('
').addClass('ui-widget-overlay')) - .appendTo(document.body) - .css({ - width: this.width(), - height: this.height() - }); + var $el = ( this.oldInstances.pop() || $( "
" ).addClass( "ui-widget-overlay" ) ); - if ($.fn.bgiframe) { + // allow closing by pressing the escape key + $( document ).bind( "keydown.dialog-overlay", function( event ) { + var instances = $.ui.dialog.overlay.instances; + // only react to the event if we're the top overlay + if ( instances.length !== 0 && instances[ instances.length - 1 ] === $el && + dialog.options.closeOnEscape && !event.isDefaultPrevented() && event.keyCode && + event.keyCode === $.ui.keyCode.ESCAPE ) { + + dialog.close( event ); + event.preventDefault(); + } + }); + + $el.appendTo( document.body ).css({ + width: this.width(), + height: this.height() + }); + + if ( $.fn.bgiframe ) { $el.bgiframe(); } - this.instances.push($el); + this.instances.push( $el ); return $el; }, - destroy: function($el) { - var indexOf = $.inArray($el, this.instances); - if (indexOf != -1){ - this.oldInstances.push(this.instances.splice(indexOf, 1)[0]); + destroy: function( $el ) { + var indexOf = $.inArray( $el, this.instances ), + maxZ = 0; + + if ( indexOf !== -1 ) { + this.oldInstances.push( this.instances.splice( indexOf, 1 )[ 0 ] ); } - if (this.instances.length === 0) { - $([document, window]).unbind('.dialog-overlay'); + if ( this.instances.length === 0 ) { + $( [ document, window ] ).unbind( ".dialog-overlay" ); } - $el.remove(); - + $el.height( 0 ).width( 0 ).remove(); + // adjust the maxZ to allow other modal dialogs to continue to work (see #4309) - var maxZ = 0; - $.each(this.instances, function() { - maxZ = Math.max(maxZ, this.css('z-index')); + $.each( this.instances, function() { + maxZ = Math.max( maxZ, this.css( "z-index" ) ); }); this.maxZ = maxZ; }, @@ -786,8 +778,8 @@ $.extend($.ui.dialog.overlay, { height: function() { var scrollHeight, offsetHeight; - // handle IE 6 - if ($.browser.msie && $.browser.version < 7) { + // handle IE + if ( $.ui.ie ) { scrollHeight = Math.max( document.documentElement.scrollHeight, document.body.scrollHeight @@ -797,14 +789,14 @@ $.extend($.ui.dialog.overlay, { document.body.offsetHeight ); - if (scrollHeight < offsetHeight) { - return $(window).height() + 'px'; + if ( scrollHeight < offsetHeight ) { + return $( window ).height() + "px"; } else { - return scrollHeight + 'px'; + return scrollHeight + "px"; } // handle "good" browsers } else { - return $(document).height() + 'px'; + return $( document ).height() + "px"; } }, @@ -812,7 +804,7 @@ $.extend($.ui.dialog.overlay, { var scrollWidth, offsetWidth; // handle IE - if ( $.browser.msie ) { + if ( $.ui.ie ) { scrollWidth = Math.max( document.documentElement.scrollWidth, document.body.scrollWidth @@ -822,14 +814,14 @@ $.extend($.ui.dialog.overlay, { document.body.offsetWidth ); - if (scrollWidth < offsetWidth) { - return $(window).width() + 'px'; + if ( scrollWidth < offsetWidth ) { + return $( window ).width() + "px"; } else { - return scrollWidth + 'px'; + return scrollWidth + "px"; } // handle "good" browsers } else { - return $(document).width() + 'px'; + return $( document ).width() + "px"; } }, @@ -842,9 +834,9 @@ $.extend($.ui.dialog.overlay, { * This is handled by shrinking the overlay before setting it * to the full document size. */ - var $overlays = $([]); - $.each($.ui.dialog.overlay.instances, function() { - $overlays = $overlays.add(this); + var $overlays = $( [] ); + $.each( $.ui.dialog.overlay.instances, function() { + $overlays = $overlays.add( this ); }); $overlays.css({ @@ -857,10 +849,10 @@ $.extend($.ui.dialog.overlay, { } }); -$.extend($.ui.dialog.overlay.prototype, { +$.extend( $.ui.dialog.overlay.prototype, { destroy: function() { - $.ui.dialog.overlay.destroy(this.$el); + $.ui.dialog.overlay.destroy( this.$el ); } }); -}(jQuery)); +}( jQuery ) );