(function($) { /** jGrowl Wrapper - Establish a base jGrowl Container for compatibility with older releases. **/ $.jGrowl = function(m, o) { // To maintain compatibility with older version that only supported one instance we'll create the base container. if ($('#jGrowl').size() == 0) $('
').addClass($.jGrowl.defaults.position).appendTo('body'); // Create a notification on the container. $('#jGrowl').jGrowl(m, o); }; /** Raise jGrowl Notification on a jGrowl Container **/ $.fn.jGrowl = function(m, o) { if ($.isFunction(this.each)) { var args = arguments; return this.each(function() { var self = this; /** Create a jGrowl Instance on the Container if it does not exist **/ if ($(this).data('jGrowl.instance') == undefined) { $(this).data('jGrowl.instance', new $.fn.jGrowl()); $(this).data('jGrowl.instance').startup(this); } /** Optionally call jGrowl instance methods, or just raise a normal notification **/ if ($.isFunction($(this).data('jGrowl.instance')[m])) { $(this).data('jGrowl.instance')[m].apply($(this).data('jGrowl.instance'), $.makeArray(args).slice(1)); } else { $(this).data('jGrowl.instance').notification(m, o); } }); }; }; $.extend($.fn.jGrowl.prototype, { /** Default JGrowl Settings **/ defaults: { sticky: false, position: 'bottom-left', // Is this still needed? glue: 'after', theme: 'default', corners: '10px', check: 500, life: 3000, speed: 'normal', easing: 'swing', log: function(e, m, o) { }, beforeOpen: function(e, m, o) { }, open: function(e, m, o) { }, beforeClose: function(e, m, o) { }, close: function(e, m, o) { }, type: 'info', animateOpen: { opacity: 'show' }, animateClose: { opacity: 'hide' } }, /** jGrowl Container Node **/ element: null, /** Interval Function **/ interval: null, /** Create a Notification **/ notification: function(message, o) { var self = this; var o = $.extend({}, this.defaults, o); o.log.apply(this.element, [this.element, message, o]); var notification = $('
×
' + message + '
') .data("jGrowl", o).addClass(o.theme).children('div.close').bind("click.jGrowl", function() { $(this).unbind('click.jGrowl').parent().trigger('jGrowl.beforeClose').animate(o.animateClose, o.speed, o.easing, function() { $(this).trigger('jGrowl.close').remove(); }); }).parent(); /* if (o.type == 'info') { notification.attr('title', "Information: " + message); } else if (o.type == 'warning') { notification.attr('title', "Warning: " + message); } else if (o.type == 'help') { notification.attr('title', "Help: " + message); } else if (o.type == 'ok') { notification.attr('title', "Ok: " + message); } */ if (o.sticky) { notification.css("background", "#797979").attr('title', notification.attr('title') + ' - Click the x to close'); } (o.glue == 'after') ? $('div.jGrowl-notification:last', this.element).after(notification) : $('div.jGrowl-notification:first', this.element).before(notification); /** Notification Actions **/ $(notification).bind("mouseover.jGrowl", function() { $(this).data("jGrowl").pause = true; }).bind("mouseout.jGrowl", function() { $(this).data("jGrowl").pause = false; }).bind('jGrowl.beforeOpen', function() { o.beforeOpen.apply(self.element, [self.element, message, o]); }).bind('jGrowl.open', function() { o.open.apply(self.element, [self.element, message, o]); }).bind('jGrowl.beforeClose', function() { o.beforeClose.apply(self.element, [self.element, message, o]); }).bind('jGrowl.close', function() { o.close.apply(self.element, [self.element, message, o]); }).trigger('jGrowl.beforeOpen').animate(o.animateOpen, o.speed, o.easing, function() { $(this).data("jGrowl").created = new Date(); }).trigger('jGrowl.open'); }, /** Update the jGrowl Container, removing old jGrowl notifications **/ update: function() { $(this.element).find('div.jGrowl-notification:parent').each(function() { if ($(this).data("jGrowl") != undefined && $(this).data("jGrowl").created != undefined && ($(this).data("jGrowl").created.getTime() + $(this).data("jGrowl").life) < (new Date()).getTime() && $(this).data("jGrowl").sticky != true && ($(this).data("jGrowl").pause == undefined || $(this).data("jGrowl").pause != true)) { $(this).children('div.close').trigger('click.jGrowl'); } }); }, /** Setup the jGrowl Notification Container **/ startup: function(e) { this.element = $(e).addClass('jGrowl').append('
'); this.interval = setInterval(function() { jQuery(e).data('jGrowl.instance').update(); }, this.defaults.check); if ($.browser.msie && parseInt($.browser.version) < 7) $(this.element).addClass('ie6'); }, /** Shutdown jGrowl, removing it and clearing the interval **/ shutdown: function() { $(this.element).removeClass('jGrowl').find('div.jGrowl-notification').remove(); clearInterval(this.interval); } }); /** Reference the Defaults Object for compatibility with older versions of jGrowl **/ $.jGrowl.defaults = $.fn.jGrowl.prototype.defaults; })(jQuery);