From: Scott González Date: Sun, 14 Sep 2008 14:49:28 +0000 (+0000) Subject: Dialog: Reordered functions. X-Git-Tag: 1.6rc2~26 X-Git-Url: https://source.dussan.org/?a=commitdiff_plain;h=ee30dbbd216065aeee60cddf3ab04e9fa3eee564;p=jquery-ui.git Dialog: Reordered functions. --- diff --git a/ui/ui.dialog.js b/ui/ui.dialog.js index ec38a983d..57bad1193 100644 --- a/ui/ui.dialog.js +++ b/ui/ui.dialog.js @@ -121,6 +121,113 @@ $.widget("ui.dialog", { (options.autoOpen && this.open()); }, + destroy: function() { + (this.overlay && this.overlay.destroy()); + this.uiDialog.hide(); + this.element + .unbind('.dialog') + .removeData('dialog') + .removeClass('ui-dialog-content') + .hide().appendTo('body'); + this.uiDialog.remove(); + + (this.originalTitle && this.element.attr('title', this.originalTitle)); + }, + + close: function() { + (this.overlay && this.overlay.destroy()); + this.uiDialog + .hide(this.options.hide) + .unbind('keypress.ui-dialog'); + + this._trigger('close', null, { options: this.options }); + $.ui.dialog.overlay.resize(); + + this._isOpen = false; + }, + + isOpen: function() { + return this._isOpen; + }, + + open: function() { + if (this._isOpen) { return; } + + this.overlay = this.options.modal ? new $.ui.dialog.overlay(this) : null; + (this.uiDialog.next().length && this.uiDialog.appendTo('body')); + this._position(this.options.position); + this.uiDialog.show(this.options.show); + (this.options.autoResize && this._size()); + this._moveToTop(true); + + // prevent tabbing out of modal dialogs + (this.options.modal && this.uiDialog.bind('keypress.ui-dialog', function(e) { + if (e.keyCode != $.keyCode.TAB) { + return; + } + + var tabbables = $(':tabbable', this), + first = tabbables.filter(':first')[0], + last = tabbables.filter(':last')[0]; + + if (e.target == last && !e.shiftKey) { + setTimeout(function() { + first.focus(); + }, 1); + } else if (e.target == first && e.shiftKey) { + setTimeout(function() { + last.focus(); + }, 1); + } + })); + + this.uiDialog.find(':tabbable:first').focus(); + this._trigger('open', null, { options: this.options }); + this._isOpen = true; + }, + + _createButtons: function(buttons) { + var self = this, + hasButtons = false, + uiDialogButtonPane = this.uiDialogButtonPane; + + // remove any existing buttons + uiDialogButtonPane.empty().hide(); + + $.each(buttons, function() { return !(hasButtons = true); }); + if (hasButtons) { + uiDialogButtonPane.show(); + $.each(buttons, function(name, fn) { + $('') + .text(name) + .click(function() { fn.apply(self.element[0], arguments); }) + .appendTo(uiDialogButtonPane); + }); + } + }, + + _makeDraggable: function() { + var self = this, + options = this.options; + + this.uiDialog.draggable({ + cancel: '.ui-dialog-content', + helper: options.dragHelper, + handle: '.ui-dialog-titlebar', + start: function() { + self._moveToTop(); + (options.dragStart && options.dragStart.apply(self.element[0], arguments)); + }, + drag: function() { + (options.drag && options.drag.apply(self.element[0], arguments)); + }, + stop: function() { + (options.dragStop && options.dragStop.apply(self.element[0], arguments)); + $.ui.dialog.overlay.resize(); + } + }); + }, + _makeResizable: function(handles) { handles = (handles === undefined ? this.options.resizable : handles); var self = this, @@ -152,69 +259,23 @@ $.widget("ui.dialog", { }); }, - _makeDraggable: function() { - var self = this, - options = this.options; + // the force parameter allows us to move modal dialogs to their correct + // position on open + _moveToTop: function(force) { - this.uiDialog.draggable({ - cancel: '.ui-dialog-content', - helper: options.dragHelper, - handle: '.ui-dialog-titlebar', - start: function() { - self._moveToTop(); - (options.dragStart && options.dragStart.apply(self.element[0], arguments)); - }, - drag: function() { - (options.drag && options.drag.apply(self.element[0], arguments)); - }, - stop: function() { - (options.dragStop && options.dragStop.apply(self.element[0], arguments)); - $.ui.dialog.overlay.resize(); - } - }); - }, - - _setData: function(key, value){ - (setDataSwitch[key] && this.uiDialog.data(setDataSwitch[key], value)); - switch (key) { - case "buttons": - this._createButtons(value); - break; - case "draggable": - (value - ? this._makeDraggable() - : this.uiDialog.draggable('destroy')); - break; - case "height": - this.uiDialog.height(value); - break; - case "position": - this._position(value); - break; - case "resizable": - var uiDialog = this.uiDialog, - isResizable = this.uiDialog.is(':data(resizable)'); - - // currently resizable, becoming non-resizable - (isResizable && !value && uiDialog.resizable('destroy')); - - // currently resizable, changing handles - (isResizable && typeof value == 'string' && - uiDialog.resizable('option', 'handles', value)); - - // currently non-resizable, becoming resizable - (isResizable || this._makeResizable(value)); - - break; - case "title": - $(".ui-dialog-title", this.uiDialogTitlebar).html(value || ' '); - break; - case "width": - this.uiDialog.width(value); - break; + if ((this.options.modal && !force) + || (!this.options.stack && !this.options.modal)) { + return this._trigger('focus', null, { options: this.options }); } - $.widget.prototype._setData.apply(this, arguments); + var maxZ = this.options.zIndex, options = this.options; + $('.ui-dialog:visible').each(function() { + maxZ = Math.max(maxZ, parseInt($(this).css('z-index'), 10) || options.zIndex); + }); + (this.overlay && this.overlay.$el.css('z-index', ++maxZ)); + this.uiDialog.css('z-index', ++maxZ); + + this._trigger('focus', null, { options: this.options }); }, _position: function(pos) { @@ -268,6 +329,49 @@ $.widget("ui.dialog", { this.uiDialog.css({top: pTop, left: pLeft}); }, + _setData: function(key, value){ + (setDataSwitch[key] && this.uiDialog.data(setDataSwitch[key], value)); + switch (key) { + case "buttons": + this._createButtons(value); + break; + case "draggable": + (value + ? this._makeDraggable() + : this.uiDialog.draggable('destroy')); + break; + case "height": + this.uiDialog.height(value); + break; + case "position": + this._position(value); + break; + case "resizable": + var uiDialog = this.uiDialog, + isResizable = this.uiDialog.is(':data(resizable)'); + + // currently resizable, becoming non-resizable + (isResizable && !value && uiDialog.resizable('destroy')); + + // currently resizable, changing handles + (isResizable && typeof value == 'string' && + uiDialog.resizable('option', 'handles', value)); + + // currently non-resizable, becoming resizable + (isResizable || this._makeResizable(value)); + + break; + case "title": + $(".ui-dialog-title", this.uiDialogTitlebar).html(value || ' '); + break; + case "width": + this.uiDialog.width(value); + break; + } + + $.widget.prototype._setData.apply(this, arguments); + }, + _size: function() { var container = this.uiDialogContainer, titlebar = this.uiDialogTitlebar, @@ -278,110 +382,6 @@ $.widget("ui.dialog", { + (parseInt(content.css('margin-right'), 10) || 0); content.height(container.height() - titlebar.outerHeight() - tbMargin); content.width(container.width() - lrMargin); - }, - - open: function() { - if (this._isOpen) { return; } - - this.overlay = this.options.modal ? new $.ui.dialog.overlay(this) : null; - (this.uiDialog.next().length && this.uiDialog.appendTo('body')); - this._position(this.options.position); - this.uiDialog.show(this.options.show); - (this.options.autoResize && this._size()); - this._moveToTop(true); - - // prevent tabbing out of modal dialogs - (this.options.modal && this.uiDialog.bind('keypress.ui-dialog', function(e) { - if (e.keyCode != $.keyCode.TAB) { - return; - } - - var tabbables = $(':tabbable', this), - first = tabbables.filter(':first')[0], - last = tabbables.filter(':last')[0]; - - if (e.target == last && !e.shiftKey) { - setTimeout(function() { - first.focus(); - }, 1); - } else if (e.target == first && e.shiftKey) { - setTimeout(function() { - last.focus(); - }, 1); - } - })); - - this.uiDialog.find(':tabbable:first').focus(); - this._trigger('open', null, { options: this.options }); - this._isOpen = true; - }, - - // the force parameter allows us to move modal dialogs to their correct - // position on open - _moveToTop: function(force) { - - if ((this.options.modal && !force) - || (!this.options.stack && !this.options.modal)) { - return this._trigger('focus', null, { options: this.options }); - } - - var maxZ = this.options.zIndex, options = this.options; - $('.ui-dialog:visible').each(function() { - maxZ = Math.max(maxZ, parseInt($(this).css('z-index'), 10) || options.zIndex); - }); - (this.overlay && this.overlay.$el.css('z-index', ++maxZ)); - this.uiDialog.css('z-index', ++maxZ); - - this._trigger('focus', null, { options: this.options }); - }, - - close: function() { - (this.overlay && this.overlay.destroy()); - this.uiDialog - .hide(this.options.hide) - .unbind('keypress.ui-dialog'); - - this._trigger('close', null, { options: this.options }); - $.ui.dialog.overlay.resize(); - - this._isOpen = false; - }, - - destroy: function() { - (this.overlay && this.overlay.destroy()); - this.uiDialog.hide(); - this.element - .unbind('.dialog') - .removeData('dialog') - .removeClass('ui-dialog-content') - .hide().appendTo('body'); - this.uiDialog.remove(); - - (this.originalTitle && this.element.attr('title', this.originalTitle)); - }, - - _createButtons: function(buttons) { - var self = this, - hasButtons = false, - uiDialogButtonPane = this.uiDialogButtonPane; - - // remove any existing buttons - uiDialogButtonPane.empty().hide(); - - $.each(buttons, function() { return !(hasButtons = true); }); - if (hasButtons) { - uiDialogButtonPane.show(); - $.each(buttons, function(name, fn) { - $('') - .text(name) - .click(function() { fn.apply(self.element[0], arguments); }) - .appendTo(uiDialogButtonPane); - }); - } - }, - - isOpen: function() { - return this._isOpen; } });