diff options
author | Richard Worth <rdworth@gmail.com> | 2008-06-07 17:37:43 +0000 |
---|---|---|
committer | Richard Worth <rdworth@gmail.com> | 2008-06-07 17:37:43 +0000 |
commit | a635d0a7c9441d2ed5256e0c841be99afbc7cb94 (patch) | |
tree | 442f36440ad69185f597aa1804b7106ed688cab9 /source/ui.dialog.js | |
parent | a25ba5018cb9645b7b21bc889eb0f36468c6c0fc (diff) | |
download | jquery-ui-a635d0a7c9441d2ed5256e0c841be99afbc7cb94.tar.gz jquery-ui-a635d0a7c9441d2ed5256e0c841be99afbc7cb94.zip |
renamed source -> ui
Diffstat (limited to 'source/ui.dialog.js')
-rw-r--r-- | source/ui.dialog.js | 445 |
1 files changed, 0 insertions, 445 deletions
diff --git a/source/ui.dialog.js b/source/ui.dialog.js deleted file mode 100644 index a1496dbdc..000000000 --- a/source/ui.dialog.js +++ /dev/null @@ -1,445 +0,0 @@ -/* - * jQuery UI Dialog - * - * Copyright (c) 2008 Richard D. Worth (rdworth.org) - * Dual licensed under the MIT (MIT-LICENSE.txt) - * and GPL (GPL-LICENSE.txt) licenses. - * - * http://docs.jquery.com/UI/Dialog - * - * Depends: - * ui.core.js - * ui.draggable.js - * ui.resizable.js - * - * Revision: $Id: ui.dialog.js 5608 2008-05-15 14:41:12Z scott.gonzalez $ - */ -(function($) { - -var setDataSwitch = { - dragStart: "start.draggable", - drag: "drag.draggable", - dragStop: "stop.draggable", - maxHeight: "maxHeight.resizable", - minHeight: "minHeight.resizable", - maxWidth: "maxWidth.resizable", - minWidth: "minWidth.resizable", - resizeStart: "start.resizable", - resize: "drag.resizable", - resizeStop: "stop.resizable" -}; - -$.widget("ui.dialog", { - init: function() { - var self = this, - options = this.options, - resizeHandles = typeof options.resizable == 'string' - ? options.resizable - : 'n,e,s,w,se,sw,ne,nw', - - uiDialogContent = this.element - .addClass('ui-dialog-content') - .wrap('<div/>') - .wrap('<div/>'), - - uiDialogContainer = uiDialogContent.parent() - .addClass('ui-dialog-container') - .css({position: 'relative'}), - - title = options.title || uiDialogContent.attr('title') || '', - uiDialogTitlebar = (this.uiDialogTitlebar = - $('<div class="ui-dialog-titlebar"/>')) - .append('<span class="ui-dialog-title">' + title + '</span>') - .append('<a href="#" class="ui-dialog-titlebar-close"><span>X</span></a>') - .prependTo(uiDialogContainer), - - uiDialog = (this.uiDialog = uiDialogContainer.parent()) - .hide() - .appendTo(document.body) - .addClass('ui-dialog') - .addClass(options.dialogClass) - // add content classes to dialog - // to inherit theme at top level of element - .addClass(uiDialogContent.attr('className')) - .removeClass('ui-dialog-content') - .css({ - position: 'absolute', - width: options.width, - height: options.height, - overflow: 'hidden', - 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(ev) { - if (options.closeOnEscape) { - var ESC = 27; - (ev.keyCode && ev.keyCode == ESC && self.close()); - } - }) - .mousedown(function() { - self.moveToTop(); - }); - - this.uiDialogTitlebarClose = $('.ui-dialog-titlebar-close', uiDialogTitlebar) - .hover( - function() { - $(this).addClass('ui-dialog-titlebar-close-hover'); - }, - function() { - $(this).removeClass('ui-dialog-titlebar-close-hover'); - } - ) - .mousedown(function(ev) { - ev.stopPropagation(); - }) - .click(function() { - self.close(); - return false; - }); - - var hasButtons = false; - $.each(options.buttons, function() { return !(hasButtons = true); }); - if (hasButtons) { - var uiDialogButtonPane = $('<div class="ui-dialog-buttonpane"/>') - .appendTo(uiDialog); - $.each(options.buttons, function(name, fn) { - $('<button/>') - .text(name) - .click(function() { fn.apply(self.element, arguments); }) - .appendTo(uiDialogButtonPane); - }); - } - - if ($.fn.draggable) { - uiDialog.draggable({ - handle: '.ui-dialog-titlebar', - start: function(e, ui) { - self.moveToTop(); - (options.dragStart && options.dragStart.apply(this, arguments)); - }, - drag: options.drag, - stop: function(e, ui) { - (options.dragStop && options.dragStop.apply(this, arguments)); - $.ui.dialog.overlay.resize(); - } - }); - (options.draggable || uiDialog.draggable('disable')); - } - - if ($.fn.resizable) { - uiDialog.resizable({ - maxWidth: options.maxWidth, - maxHeight: options.maxHeight, - minWidth: options.minWidth, - minHeight: options.minHeight, - start: options.resizeStart, - resize: options.resize, - handles: resizeHandles, - stop: function(e, ui) { - (options.resizeStop && options.resizeStop.apply(this, arguments)); - $.ui.dialog.overlay.resize(); - } - }); - (options.resizable || uiDialog.resizable('disable')); - } - - (options.bgiframe && $.fn.bgiframe && uiDialog.bgiframe()); - (options.autoOpen && this.open()); - }, - - setData: function(key, value){ - (setDataSwitch[key] && this.uiDialog.data(setDataSwitch[key], value)); - switch (key) { - case "draggable": - this.uiDialog.draggable(value ? 'enable' : 'disable'); - break; - case "height": - this.uiDialog.height(value); - break; - case "position": - this.position(value); - break; - case "resizable": - (typeof value == 'string' && this.uiDialog.data('handles.resizable', value)); - this.uiDialog.resizable(value ? 'enable' : 'disable'); - break; - case "title": - $(".ui-dialog-title", this.uiDialogTitlebar).text(value); - break; - case "width": - this.uiDialog.width(value); - break; - } - - $.widget.prototype.setData.apply(this, arguments); - }, - - position: function(pos) { - var wnd = $(window), doc = $(document), - pTop = doc.scrollTop(), pLeft = doc.scrollLeft(), - minTop = pTop; - - if ($.inArray(pos, ['center','top','right','bottom','left']) >= 0) { - pos = [ - pos == 'right' || pos == 'left' ? pos : 'center', - pos == 'top' || pos == 'bottom' ? pos : 'middle' - ]; - } - if (pos.constructor != Array) { - pos = ['center', 'middle']; - } - if (pos[0].constructor == Number) { - pLeft += pos[0]; - } else { - switch (pos[0]) { - case 'left': - pLeft += 0; - break; - case 'right': - pLeft += wnd.width() - this.uiDialog.width(); - break; - default: - case 'center': - pLeft += (wnd.width() - this.uiDialog.width()) / 2; - } - } - if (pos[1].constructor == Number) { - pTop += pos[1]; - } else { - switch (pos[1]) { - case 'top': - pTop += 0; - break; - case 'bottom': - pTop += wnd.height() - this.uiDialog.height(); - break; - default: - case 'middle': - pTop += (wnd.height() - this.uiDialog.height()) / 2; - } - } - - // prevent the dialog from being too high (make sure the titlebar - // is accessible) - pTop = Math.max(pTop, minTop); - this.uiDialog.css({top: pTop, left: pLeft}); - }, - - open: function() { - this.overlay = this.options.modal ? new $.ui.dialog.overlay(this) : null; - this.uiDialog.appendTo('body'); - this.position(this.options.position); - this.uiDialog.show(); - this.moveToTop(true); - - // CALLBACK: open - var openEV = null; - var openUI = { - options: this.options - }; - this.uiDialogTitlebarClose.focus(); - this.element.triggerHandler("dialogopen", [openEV, openUI], this.options.open); - }, - - // 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) { return; } - - 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); - }, - - close: function() { - (this.overlay && this.overlay.destroy()); - this.uiDialog.hide(); - - // CALLBACK: close - var closeEV = null; - var closeUI = { - options: this.options - }; - this.element.triggerHandler("dialogclose", [closeEV, closeUI], this.options.close); - $.ui.dialog.overlay.resize(); - }, - - 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(); - } -}); - -$.extend($.ui.dialog, { - defaults: { - autoOpen: true, - bgiframe: false, - buttons: {}, - closeOnEscape: true, - draggable: true, - height: 200, - minHeight: 100, - minWidth: 150, - modal: false, - overlay: {}, - position: 'center', - resizable: true, - stack: true, - width: 300, - zIndex: 1000 - }, - - overlay: function(dialog) { - this.$el = $.ui.dialog.overlay.create(dialog); - } -}); - -$.extend($.ui.dialog.overlay, { - instances: [], - events: $.map('focus,mousedown,mouseup,keydown,keypress,click'.split(','), - function(e) { return e + '.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() { - $('a, :input').bind($.ui.dialog.overlay.events, function() { - // allow use of the element if inside a dialog and - // - there are no modal dialogs - // - there are modal dialogs, but we are in front of the topmost modal - var allow = false; - var $dialog = $(this).parents('.ui-dialog'); - if ($dialog.length) { - var $overlays = $('.ui-dialog-overlay'); - if ($overlays.length) { - var maxZ = parseInt($overlays.css('z-index'), 10); - $overlays.each(function() { - maxZ = Math.max(maxZ, parseInt($(this).css('z-index'), 10)); - }); - allow = parseInt($dialog.css('z-index'), 10) > maxZ; - } else { - allow = true; - } - } - return allow; - }); - }, 1); - - // allow closing by pressing the escape key - $(document).bind('keydown.dialog-overlay', function(e) { - var ESC = 27; - (e.keyCode && e.keyCode == ESC && dialog.close()); - }); - - // handle window resize - $(window).bind('resize.dialog-overlay', $.ui.dialog.overlay.resize); - } - - var $el = $('<div/>').appendTo(document.body) - .addClass('ui-dialog-overlay').css($.extend({ - borderWidth: 0, margin: 0, padding: 0, - position: 'absolute', top: 0, left: 0, - width: this.width(), - height: this.height() - }, dialog.options.overlay)); - - (dialog.options.bgiframe && $.fn.bgiframe && $el.bgiframe()); - - this.instances.push($el); - return $el; - }, - - destroy: function($el) { - this.instances.splice($.inArray(this.instances, $el), 1); - - if (this.instances.length === 0) { - $('a, :input').add([document, window]).unbind('.dialog-overlay'); - } - - $el.remove(); - }, - - height: function() { - if ($.browser.msie && $.browser.version < 7) { - var scrollHeight = Math.max( - document.documentElement.scrollHeight, - document.body.scrollHeight - ); - var offsetHeight = Math.max( - document.documentElement.offsetHeight, - document.body.offsetHeight - ); - - if (scrollHeight < offsetHeight) { - return $(window).height() + 'px'; - } else { - return scrollHeight + 'px'; - } - } else { - return $(document).height() + 'px'; - } - }, - - width: function() { - if ($.browser.msie && $.browser.version < 7) { - var scrollWidth = Math.max( - document.documentElement.scrollWidth, - document.body.scrollWidth - ); - var offsetWidth = Math.max( - document.documentElement.offsetWidth, - document.body.offsetWidth - ); - - if (scrollWidth < offsetWidth) { - return $(window).width() + 'px'; - } else { - return scrollWidth + 'px'; - } - } else { - return $(document).width() + 'px'; - } - }, - - resize: function() { - /* If the dialog is draggable and the user drags it past the - * right edge of the window, the document becomes wider so we - * need to stretch the overlay. If the user then drags the - * dialog back to the left, the document will become narrower, - * so we need to shrink the overlay to the appropriate size. - * 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); - }); - - $overlays.css({ - width: 0, - height: 0 - }).css({ - width: $.ui.dialog.overlay.width(), - height: $.ui.dialog.overlay.height() - }); - } -}); - -$.extend($.ui.dialog.overlay.prototype, { - destroy: function() { - $.ui.dialog.overlay.destroy(this.$el); - } -}); - -})(jQuery); |