3 * Copyright (c) 2008 Net Perspective (net-perspective.com)
4 * Licensed under the MIT License (http://www.opensource.org/licenses/mit-license.php)
7 * @projectDescription jQuery plugin for dynamically displaying unobtrusive messages in the browser. Mimics the behavior of the MacOS program "Growl."
10 * @requires jquery.js (tested with 1.2.6)
12 * @param fadeInSpeed int - Duration of fade in animation in miliseconds
14 * @param fadeOutSpeed int - Duration of fade out animationin miliseconds
16 * @param removeTimer int - Timeout, in miliseconds, before notice is removed once it is the top non-sticky notice in the list
18 * @param isSticky bool - Whether the notice should fade out on its own or wait to be manually closed
20 * @param usingTransparentPNG bool - Whether or not the notice is using transparent .png images in its styling
26 $.purr = function ( notice, options )
28 // Convert notice to a jQuery object
31 // Add a class to denote the notice as not sticky
32 if ( !options.isSticky )
34 notice.addClass( 'not-sticky' );
37 // Get the container element from the page
38 var cont = document.getElementById( 'purr-container' );
40 // If the container doesn't yet exist, we need to create it
43 cont = '<div id="purr-container"></div>';
46 // Convert cont to a jQuery object
49 // Add the container to the page
50 $( 'body' ).append( cont );
56 // Set up the close button
57 var close = document.createElement( 'a' );
74 // Add the notice to the page and keep it hidden initially
75 notice.appendTo( cont )
78 if ( jQuery.browser.msie && options.usingTransparentPNG )
80 // IE7 and earlier can't handle the combination of opacity and transparent pngs, so if we're using transparent pngs in our
81 // notice style, we'll just skip the fading in.
86 //Fade in the notice we just added
87 notice.fadeIn( options.fadeInSpeed );
90 // Set up the removal interval for the added notice if that notice is not a sticky
91 if ( !options.isSticky )
93 var topSpotInt = setInterval( function ()
95 // Check to see if our notice is the first non-sticky notice in the list
96 if ( notice.prevAll( '.not-sticky' ).length == 0 )
98 // Stop checking once the condition is met
99 clearInterval( topSpotInt );
101 // Call the close action after the timeout set in options
102 setTimeout( function ()
105 }, options.removeTimer
112 function removeNotice ()
114 // IE7 and earlier can't handle the combination of opacity and transparent pngs, so if we're using transparent pngs in our
115 // notice style, we'll just skip the fading out.
116 if ( jQuery.browser.msie && options.usingTransparentPNG )
118 notice.css( { opacity: 0 } )
124 duration: options.fadeOutSpeed,
125 complete: function ()
134 // Fade the object out before reducing its height to produce the sliding effect
140 duration: options.fadeOutSpeed,
141 complete: function ()
148 duration: options.fadeOutSpeed,
149 complete: function ()
162 $.fn.purr = function ( options )
164 options = options || {};
165 options.fadeInSpeed = options.fadeInSpeed || 500;
166 options.fadeOutSpeed = options.fadeOutSpeed || 500;
167 options.removeTimer = options.removeTimer || 4000;
168 options.isSticky = options.isSticky || false;
169 options.usingTransparentPNG = options.usingTransparentPNG || false;
171 this.each( function()
173 new $.purr( this, options );