/* * jQuery SimpleModal plugin 1.0 * http://www.ericmmartin.com/projects/simplemodal/ * http://code.google.com/p/simplemodal/ * * Copyright (c) 2007 Eric Martin - http://ericmmartin.com * * Licensed under the MIT license: * http://www.opensource.org/licenses/mit-license.php * * Revision: $Id: jquery.simplemodal.js 32 2007-10-24 02:57:08Z emartin24 $ * */ /** * SimpleModal is a lightweight jQuery plugin that provides a simple * interface to create a modal dialog. * * The goal of SimpleModal is to provide developers with a * cross-browser overlay and container that will be populated with * content provided to SimpleModal. * * @example $('
my content
').modal(); // must be a jQuery object * @example $.modal('
my content
'); // can be a string(HTML), DOM element or jQuery Object * * As a jQuery chained function, SimpleModal acts on a jQuery object * and takes an option settings object as a parameter. * * @example $('
my content
').modal({close:false}); * * As a stand-alone function, SimpleModal takes a jQuery object a DOM * element or a string, which can contain plain text or HTML and an * option settings object as parameters. * * @example $.modal('
my content
', {close:false}); * * A SimpleModal call can contain multiple elements, but only one modal * dialog can be created at a time. That means that all of the matched * elements will be displayed within the modal container. * * The styling for SimpleModal is done mostly through external stylesheets, * providing maximum control over the look and feel. * * SimpleModal has been tested in the following browsers: * - IE 6, 7 * - Firefox 2 * - Safari 3 * * @name SimpleModal * @type jQuery * @requires jQuery v1.2 * @cat Plugins/SimpleModal * @author Eric Martin (eric@ericmmartin.com || http://ericmmartin.com) * @version 1.0.1 */ (function ($) { /** * Stand-alone function to create a modal dialog. * * @param {String, Object} [content] A string, jQuery object or a DOM object * @param {Object} settings An optional object containing settings overrides */ $.modal = function (content, settings) { return $.modal.impl.init(content, settings); }; /** * Stand-alone remove function to remove all of the modal * dialog elements from the DOM. * * @param {Object} dialog An object containing the modal dialog elements */ $.modal.remove = function (dialog) { $.modal.impl.remove(dialog); }; /** * Chained function to create a modal dialog. * * @param {Object} settings An optional object containing settings overrides */ $.fn.modal = function (settings) { return $.modal.impl.init(this, settings); }; /** * SimpleModal default settings * * overlay: (Number:50) The opacity value, from 0 - 100 * overlaydId: (String:'modalOverlay') The DOM element id for the overlay div * containerId: (String:'modalContainer') The DOM element id for the container div * iframeId: (String:'modalIframe') The DOM element id for the iframe (IE 6) * close: (Boolean:true) Show the default window close icon? Uses CSS class modalCloseImg * closeTitle: (String:'Close') The title value of the default close link. Depends on close * closeClass: (String:'modalClose') The CSS class used to bind to the close event * cloneContent: (Boolean:true) If true, SimpleModal will clone the content element * onOpen: (Function:null) The callback function used in place of SimpleModal's open * onShow: (Function:null) The callback function used after the modal dialog has opened * onClose: (Function:null) The callback function used in place of SimpleModal's close */ $.modal.defaults = { overlay: 50, overlayId: 'modalOverlay', containerId: 'modalContainer', iframeId: 'modalIframe', close: true, closeTitle: 'Kapat', closeClass: 'modalClose', cloneContent: true, onOpen: null, onShow: null, onClose: null }; $.modal.impl = { /** * Place holder for the modal dialog elements */ opts: null, /** * Object passed to the callback functions * - Should contain the overlay, container and * iframe (for IE 6) objects */ dialog: {}, /** * Initialize the modal dialog * - Merge the default options with user defined options * - Call the functions to create and open the modal dialog * - Handle the onShow callback */ init: function (content, settings) { this.opts = $.extend({}, $.modal.defaults, settings ); // prevents unexpected calls if (this.dialog.overlay) { return false; } // convert to jQuery object if it isn't already content = content.jquery ? content : $(content); // if we don't clone the element, it will be removed // from the DOM when the modal dialog is closed this.dialog.content = this.opts.cloneContent ? content.clone() : content; content = null; this.create(); this.open(); // Useful for adding custom events to the modal dialog if ($.isFunction(this.opts.onShow)) { this.opts.onShow.apply(this, [this.dialog]); } return this; }, /** * Create and add the modal overlay to the page * For IE 6, call fixIE() * Create and add the modal container to the page * - Add the close icon if close == true * Set the top value for the modal container * Add the content to the modal container, based on type * - Clone the content, if clone == true */ create: function () { this.dialog.overlay = $('
') .attr('id', this.opts.overlayId) .css({opacity: this.opts.overlay / 100}) .hide() .appendTo('body'); if ($.browser.msie && ($.browser.version < 7)) { this.fixIE(); } this.dialog.container = $('
') .attr('id', this.opts.containerId) .append(this.opts.close ? '' : '') .hide() .appendTo('body'); // add the content this.dialog.content.appendTo(this.dialog.container); }, /** * Bind events * - Bind the close event onClick to any elements with the * closeClass class */ bindEvents: function () { var modal = this; $('.' + this.opts.closeClass).click(function (e) { e.preventDefault(); modal.close(); }); }, /** * Unbind events * - Remove any events bound to the closeClass click event */ unbindEvents: function () { $('.' + this.opts.closeClass).unbind('click'); }, /** * Fix issues in IE 6 * - Simulate position:fixed and make sure the overlay height and iframe * height values are set to 100% * - Add an iframe to prevent select options from bleeding through */ fixIE: function () { this.dialog.overlay.css({position: 'absolute', height: $(document).height() + 'px'}); this.dialog.iframe = $('') .attr('id', this.opts.iframeId) .css({opacity: 0, position: 'absolute', height: $(document).height() + 'px'}) .hide() .appendTo('body'); }, /** * Open the modal dialog * - Shows the iframe (if necessary), overlay and container * - Calls the onOpen callback, if provided * - Binds any SimpleModal defined events * - Note: If you use the onOpen callback, you must show the * overlay and container elements manually * (the iframe will be handled by SimpleModal) */ open: function () { if (this.dialog.iframe) { this.dialog.iframe.show(); } if ($.isFunction(this.opts.onOpen)) { this.opts.onOpen.apply(this, [this.dialog]); } else { this.dialog.overlay.show(); this.dialog.container.show(); this.dialog.content.show(); } this.bindEvents(); }, /** * Close the modal dialog * - Removes the iframe (if necessary), overlay and container * - Removes or hides the content, based on the value of cloneContent * - Calls the onOpen callback, if provided * - Clears the dialog element * - Unbinds any SimpleModal defined events * - Note: If you use an onClose callback, you must remove the * overlay, container and iframe elements manually */ close: function () { if ($.isFunction(this.opts.onClose)) { this.opts.onClose.apply(this, [this.dialog]); } else { this.opts.cloneContent ? this.dialog.content.remove() : this.dialog.content.hide(); this.dialog.container.remove(); this.dialog.overlay.remove(); if (this.dialog.iframe) { this.dialog.iframe.remove(); } } this.dialog = {}; this.unbindEvents(); }, /** * Remove the modal dialog elements * - Removes the iframe (if necessary), overlay container and content */ remove: function (dialog) { dialog.content.remove(); dialog.container.remove(); dialog.overlay.remove(); if (dialog.iframe) { dialog.iframe.remove(); } } }; })(jQuery);