/* * jQuery Notifications plugin 1.1 * * http://programmingmind.com * * Copyright (c) 2009 David Ang * * * Dual licensed under the MIT and GPL licenses: * http://www.opensource.org/licenses/mit-license.php * http://www.gnu.org/licenses/gpl.html * * Version Changes * * 1.1 8/17/2008 * - Allow users to choose between slide or fade effect * - Fixed fadeSpeed option settings * * 1.0 8/9/2008 * - Initial release */ (function($){ var template; var counter = 0; $.notifications = function(msg, options) { counter++; var settings = $.extend({}, $.notifications.defaults, options); if (!template) { template = $('
').appendTo(document.body); } var n = $( '
' + msg + '
').hide().appendTo("#jquery-notifications"); if( settings.effect == "fade" ) { n.fadeIn( settings.fadeSpeed ); } else { n.slideDown( settings.fadeSpeed ); } if (settings.stick) { var close = $('' + settings.close + '').click(function() { if (settings.effect == "fade") { $(this.parentNode).fadeOut( settings.fadeSpeed, function() { $(this).remove(); }); } else { $(this.parentNode).slideUp( settings.fadeSpeed, function() { $(this).remove(); }); } }); close.appendTo(n); } if (!settings.stick) { var notificationsDelayer = delayTimer(settings.timeout); notificationsDelayer(update, { counter: counter, effect: settings.effect, fadeSpeed : settings.fadeSpeed } ); } }; $.notifications.success = function( msg, options ){ return $.notifications( msg, $.extend( {}, options, { type : "success"}) ); }; $.notifications.error = function( msg, options ){ return $.notifications( msg, $.extend( { stick: true }, options, { type : "error" }) ); }; $.notifications.warning = function( msg, options ){ return $.notifications( msg, $.extend( {}, options, { type : "warning" }) ); }; function update(params) { if (params.effect == "fade") { $("#jquery-notifications-" + params.counter).fadeOut( params.fadeSpeed, function(){ $(this).remove(); }); } else { $("#jquery-notifications-" + params.counter).slideUp( params.fadeSpeed, function(){ $(this).remove(); }); } } function delayTimer(delay) { var timer; return function(fn, params) { timer = clearTimeout(timer); if (fn) timer = setTimeout(function() { fn(params); }, delay); return timer; }; } $.notifications.defaults = { type: "notice", timeout: 10000, stick: false, fadeSpeed : 800, close : "x", effect : "fade" }; $.n = $.notifications; })(jQuery);