diff --git a/ui/jquery.ui.dialog.js b/ui/jquery.ui.dialog.js index 496118761d0..f907e8b7f56 100644 --- a/ui/jquery.ui.dialog.js +++ b/ui/jquery.ui.dialog.js @@ -1,835 +1,53 @@ -/* - * jQuery UI Dialog @VERSION - * - * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about) - * Dual licensed under the MIT or GPL Version 2 licenses. - * http://jquery.org/license - * - * http://docs.jquery.com/UI/Dialog - * - * Depends: - * jquery.ui.core.js - * jquery.ui.widget.js - * jquery.ui.button.js - * jquery.ui.draggable.js - * jquery.ui.mouse.js - * jquery.ui.position.js - * jquery.ui.resizable.js - */ -(function( $, undefined ) { - -var uiDialogClasses = "ui-dialog ui-widget ui-widget-content ui-corner-all ", - sizeRelatedOptions = { - buttons: true, - height: true, - maxHeight: true, - maxWidth: true, - minHeight: true, - minWidth: true, - width: true - }, - resizableRelatedOptions = { - maxHeight: true, - maxWidth: true, - minHeight: true, - minWidth: true - }; - -$.widget("ui.dialog", { - options: { - autoOpen: true, - buttons: {}, - closeOnEscape: true, - closeText: "close", - dialogClass: "", - draggable: true, - hide: null, - height: "auto", - maxHeight: false, - maxWidth: false, - minHeight: 150, - minWidth: 150, - modal: false, - position: { - 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 ); - } - } - }, - resizable: true, - show: null, - stack: true, - title: "", - width: 300, - zIndex: 1000 - }, - - _create: function() { - this.originalTitle = this.element.attr( "title" ); - // #5742 - .attr() might return a DOMElement - if ( typeof this.originalTitle !== "string" ) { - this.originalTitle = ""; - } - - 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 = $( "
" ) ) - .addClass( uiDialogClasses + options.dialogClass ) - .css({ - display: "none", - outline: 0, // TODO: move to stylesheet - zIndex: options.zIndex - }) - // setting tabIndex makes the div focusable - .attr( "tabIndex", -1) - .keydown(function( event ) { - if ( options.closeOnEscape && !event.isDefaultPrevented() && event.keyCode && - event.keyCode === $.ui.keyCode.ESCAPE ) { - self.close( event ); - event.preventDefault(); - } - }) - .attr({ - role: "dialog", - "aria-labelledby": titleId - }) - .mousedown(function( event ) { - self.moveToTop( false, event ); - }), - - uiDialogContent = self.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" ) - .click(function( event ) { - event.preventDefault(); - self.close( event ); - }) - .appendTo( uiDialogTitlebar ), - - uiDialogTitlebarCloseText = ( self.uiDialogTitlebarCloseText = $( "" ) ) - .addClass( "ui-icon ui-icon-closethick" ) - .text( options.closeText ) - .appendTo( uiDialogTitlebarClose ), - - uiDialogTitle = $( "" ) - .addClass( "ui-dialog-title" ) - .attr( "id", titleId ) - .html( title ) - .prependTo( uiDialogTitlebar ); - - uiDialogTitlebar.find( "*" ).add( uiDialogTitlebar ).disableSelection(); - this._hoverable( uiDialogTitlebarClose ); - this._focusable( uiDialogTitlebarClose ); - - if ( options.draggable && $.fn.draggable ) { - self._makeDraggable(); - } - if ( options.resizable && $.fn.resizable ) { - self._makeResizable(); - } - - self._createButtons( options.buttons ); - self._isOpen = false; - - uiDialog.appendTo( document.body ); - - if ( $.fn.bgiframe ) { - uiDialog.bgiframe(); - } - }, - - _init: function() { - if ( this.options.autoOpen ) { - this.open(); - } - }, - - _destroy: function() { - var self = this; - - if ( self.overlay ) { - self.overlay.destroy(); - } - self.uiDialog.hide(); - self.element - .removeClass( "ui-dialog-content ui-widget-content" ) - .hide() - .appendTo( "body" ); - self.uiDialog.remove(); - - if ( self.originalTitle ) { - self.element.attr( "title", self.originalTitle ); - } - }, - - widget: function() { - return this.uiDialog; - }, - - close: function( event ) { - var self = this, - maxZ, thisZ; - - if ( false === self._trigger( "beforeClose", event ) ) { - return; - } - - if ( self.overlay ) { - self.overlay.destroy(); - } - self.uiDialog.unbind( "keypress.ui-dialog" ); - - self._isOpen = false; - - if ( self.options.hide ) { - self.uiDialog.hide( self.options.hide, function() { - self._trigger( "close", event ); - }); - } else { - self.uiDialog.hide(); - self._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 ) { - 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.maxZ = maxZ; - } - - return self; - }, - - isOpen: function() { - return this._isOpen; - }, - - // 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, - saveScroll; - - if ( ( options.modal && !force ) || - ( !options.stack && !options.modal ) ) { - return self._trigger( "focus", event ); - } - - if ( options.zIndex > $.ui.dialog.maxZ ) { - $.ui.dialog.maxZ = options.zIndex; - } - if ( self.overlay ) { - $.ui.dialog.maxZ += 1; - $.ui.dialog.overlay.maxZ = $.ui.dialog.maxZ; - self.overlay.$el.css( "z-index", $.ui.dialog.overlay.maxZ ); - } - - // Save and then restore scroll - // Opera 9.5+ resets when parent z-index is changed. - // http://bugs.jqueryui.com/ticket/3193 - saveScroll = { - scrollTop: self.element.attr( "scrollTop" ), - scrollLeft: self.element.attr( "scrollLeft" ) - }; - $.ui.dialog.maxZ += 1; - self.uiDialog.css( "z-index", $.ui.dialog.maxZ ); - self.element.attr( saveScroll ); - self._trigger( "focus", event ); - - return self; - }, - - open: function() { - if ( this._isOpen ) { - return; - } - - var self = this, - options = self.options, - uiDialog = self.uiDialog; - - self._size(); - self._position( options.position ); - uiDialog.show( options.show ); - self.overlay = options.modal ? new $.ui.dialog.overlay( self ) : null; - self.moveToTop( true ); - - // prevent tabbing out of modal dialogs - if ( options.modal ) { - uiDialog.bind( "keypress.ui-dialog", function( event ) { - if ( event.keyCode !== $.ui.keyCode.TAB ) { - return; - } - - 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; - } - }); - } - - // 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 - var hasFocus = self.element.find( ":tabbable" ); - if ( !hasFocus.length ) { - hasFocus = uiDialog.find( ".ui-dialog-buttonpane :tabbable" ); - if ( !hasFocus.length ) { - hasFocus = uiDialog; - } - } - hasFocus.eq( 0 ).focus(); - - self._isOpen = true; - self._trigger( "open" ); - - return self; - }, - - _createButtons: function( buttons ) { - var self = this, - hasButtons = false; - - // if we already have a button pane, remove it - self.uiDialog.find( ".ui-dialog-buttonpane" ).remove(); - - if ( typeof buttons === "object" && buttons !== null ) { - $.each( buttons, function() { - return !(hasButtons = true); - }); - } - if ( hasButtons ) { - var uiDialogButtonPane = $( "
" ) - .addClass( "ui-dialog-buttonpane ui-widget-content ui-helper-clearfix" ), - uiButtonSet = $( "
" ) - .addClass( "ui-dialog-buttonset" ) - .appendTo( uiDialogButtonPane ); - - $.each( buttons, function( name, props ) { - props = $.isFunction( props ) ? - { click: props, text: name } : - props; - var button = $( "