/** * jGrowl 1.4.5 * * Dual licensed under the MIT (http://www.opensource.org/licenses/mit-license.php) * and GPL (http://www.opensource.org/licenses/gpl-license.php) licenses. * * Written by Stan Lemon * Last updated: 2015.02.01 * * jGrowl is a jQuery plugin implementing unobtrusive userland notifications. These * notifications function similarly to the Growl Framework available for * Mac OS X (http://growl.info). * * To Do: * - Move library settings to containers and allow them to be changed per container * * Changes in 1.4.5 * - Fixed arguement list for click callback, thanks @timotheeg * * Changes in 1.4.4 * - Revert word-break changes, thanks @curtisgibby * * Changes in 1.4.3 * - Fixed opactiy in LESS for older version of IE * * Changes in 1.4.2 * - Added word-break to less/css * * Changes in 1.4.1 * - Added appendTo option * - jQuery compatibility updates * - Add check for closing a notification before it opens * * Changes in 1.4.0 * - Removed IE6 support * - Added LESS support * * Changes in 1.3.0 * - Added non-vendor border-radius to stylesheet * - Added grunt for generating minified js and css * - Added npm package info * - Added bower package info * - Updates for jshint * * Changes in 1.2.13 * - Fixed clearing interval when the container shuts down * * Changes in 1.2.12 * - Added compressed versions using UglifyJS and Sqwish * - Improved README with configuration options explanation * - Added a source map * * Changes in 1.2.11 * - Fix artifacts left behind by the shutdown method and text-cleanup * * Changes in 1.2.10 * - Fix beforeClose to be called in click event * * Changes in 1.2.9 * - Fixed BC break in jQuery 2.0 beta * * Changes in 1.2.8 * - Fixes for jQuery 1.9 and the MSIE6 check, note that with jQuery 2.0 support * jGrowl intends to drop support for IE6 altogether * * Changes in 1.2.6 * - Fixed js error when a notification is opening and closing at the same time * * Changes in 1.2.5 * - Changed wrapper jGrowl's options usage to "o" instead of $.jGrowl.defaults * - Added themeState option to control 'highlight' or 'error' for jQuery UI * - Ammended some CSS to provide default positioning for nested usage. * - Changed some CSS to be prefixed with jGrowl- to prevent namespacing issues * - Added two new options - openDuration and closeDuration to allow * better control of notification open and close speeds, respectively * Patch contributed by Jesse Vincet. * - Added afterOpen callback. Patch contributed by Russel Branca. * * Changes in 1.2.4 * - Fixed IE bug with the close-all button * - Fixed IE bug with the filter CSS attribute (special thanks to gotwic) * - Update IE opacity CSS * - Changed font sizes to use "em", and only set the base style * * Changes in 1.2.3 * - The callbacks no longer use the container as context, instead they use the actual notification * - The callbacks now receive the container as a parameter after the options parameter * - beforeOpen and beforeClose now check the return value, if it's false - the notification does * not continue. The open callback will also halt execution if it returns false. * - Fixed bug where containers would get confused * - Expanded the pause functionality to pause an entire container. * * Changes in 1.2.2 * - Notification can now be theme rolled for jQuery UI, special thanks to Jeff Chan! * * Changes in 1.2.1 * - Fixed instance where the interval would fire the close method multiple times. * - Added CSS to hide from print media * - Fixed issue with closer button when div { position: relative } is set * - Fixed leaking issue with multiple containers. Special thanks to Matthew Hanlon! * * Changes in 1.2.0 * - Added message pooling to limit the number of messages appearing at a given time. * - Closing a notification is now bound to the notification object and triggered by the close button. * * Changes in 1.1.2 * - Added iPhone styled example * - Fixed possible IE7 bug when determining if the ie6 class shoudl be applied. * - Added template for the close button, so that it's content could be customized. * * Changes in 1.1.1 * - Fixed CSS styling bug for ie6 caused by a mispelling * - Changes height restriction on default notifications to min-height * - Added skinned examples using a variety of images * - Added the ability to customize the content of the [close all] box * - Added jTweet, an example of using jGrowl + Twitter * * Changes in 1.1.0 * - Multiple container and instances. * - Standard $.jGrowl() now wraps $.fn.jGrowl() by first establishing a generic jGrowl container. * - Instance methods of a jGrowl container can be called by $.fn.jGrowl(methodName) * - Added glue preferenced, which allows notifications to be inserted before or after nodes in the container * - Added new log callback which is called before anything is done for the notification * - Corner's attribute are now applied on an individual notification basis. * * Changes in 1.0.4 * - Various CSS fixes so that jGrowl renders correctly in IE6. * * Changes in 1.0.3 * - Fixed bug with options persisting across notifications * - Fixed theme application bug * - Simplified some selectors and manipulations. * - Added beforeOpen and beforeClose callbacks * - Reorganized some lines of code to be more readable * - Removed unnecessary this.defaults context * - If corners plugin is present, it's now customizable. * - Customizable open animation. * - Customizable close animation. * - Customizable animation easing. * - Added customizable positioning (top-left, top-right, bottom-left, bottom-right, center) * * Changes in 1.0.2 * - All CSS styling is now external. * - Added a theme parameter which specifies a secondary class for styling, such * that notifications can be customized in appearance on a per message basis. * - Notification life span is now customizable on a per message basis. * - Added the ability to disable the global closer, enabled by default. * - Added callbacks for when a notification is opened or closed. * - Added callback for the global closer. * - Customizable animation speed. * - jGrowl now set itself up and tears itself down. * * Changes in 1.0.1: * - Removed dependency on metadata plugin in favor of .data() * - Namespaced all events */ (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').length === 0 ) $('
').addClass( (o && o.position) ? o.position : $.jGrowl.defaults.position ).appendTo( (o && o.appendTo) ? o.appendTo : $.jGrowl.defaults.appendTo ); // Create a notification on the container. $('#jGrowl').jGrowl(m,o); }; /** Raise jGrowl Notification on a jGrowl Container **/ $.fn.jGrowl = function( m , o ) { // Short hand for passing in just an object to this method if ( o === undefined && $.isPlainObject(m) ) { o = m; m = o.message; } if ( $.isFunction(this.each) ) { var args = arguments; return this.each(function() { /** Create a jGrowl Instance on the Container if it does not exist **/ if ( $(this).data('jGrowl.instance') === undefined ) { $(this).data('jGrowl.instance', $.extend( new $.fn.jGrowl(), { notifications: [], element: null, interval: null } )); $(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').create( m , o ); } }); } }; $.extend( $.fn.jGrowl.prototype , { /** Default JGrowl Settings **/ defaults: { pool: 0, header: '', group: '', sticky: false, position: 'top-right', appendTo: 'body', glue: 'after', theme: 'default', themeState: 'highlight', corners: '10px', check: 250, life: 3000, closeDuration: 'normal', openDuration: 'normal', easing: 'swing', closer: true, closeTemplate: '×', closerTemplate: '
[ close all ]
', log: function() {}, beforeOpen: function() {}, afterOpen: function() {}, open: function() {}, beforeClose: function() {}, close: function() {}, click: function() {}, animateOpen: { opacity: 'show' }, animateClose: { opacity: 'hide' } }, notifications: [], /** jGrowl Container Node **/ element: null, /** Interval Function **/ interval: null, /** Create a Notification **/ create: function( message , options ) { var o = $.extend({}, this.defaults, options); /* To keep backward compatibility with 1.24 and earlier, honor 'speed' if the user has set it */ if (typeof o.speed !== 'undefined') { o.openDuration = o.speed; o.closeDuration = o.speed; } this.notifications.push({ message: message , options: o }); o.log.apply( this.element , [this.element,message,o] ); }, render: function( n ) { var self = this; var message = n.message; var o = n.options; // Support for jQuery theme-states, if this is not used it displays a widget header o.themeState = (o.themeState === '') ? '' : 'ui-state-' + o.themeState; var notification = $('
') .addClass('jGrowl-notification alert ' + o.themeState + ' ui-corner-all' + ((o.group !== undefined && o.group !== '') ? ' ' + o.group : '')) .append($('