Skip to content
Permalink
Browse files

Dialog: Reordered functions.

  • Loading branch information...
scottgonzalez committed Sep 14, 2008
1 parent 608cab6 commit ee30dbbd216065aeee60cddf3ab04e9fa3eee564
Showing with 164 additions and 164 deletions.
  1. +164 −164 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) {
$('<button type="button"></button>')
.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 || '&nbsp;');
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 || '&nbsp;');
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) {
$('<button type="button"></button>')
.text(name)
.click(function() { fn.apply(self.element[0], arguments); })
.appendTo(uiDialogButtonPane);
});
}
},

isOpen: function() {
return this._isOpen;
}
});

0 comments on commit ee30dbb

Please sign in to comment.
You can’t perform that action at this time.