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
);