11 lines
2.1 KiB
JavaScript
11 lines
2.1 KiB
JavaScript
;(function(window){'use strict';var docElem=window.document.documentElement,support={animations:Modernizr.cssanimations},animEndEventNames={'WebkitAnimation':'webkitAnimationEnd','OAnimation':'oAnimationEnd','msAnimation':'MSAnimationEnd','animation':'animationend'},animEndEventName=animEndEventNames[Modernizr.prefixed('animation')];function extend(a,b){for(var key in b){if(b.hasOwnProperty(key)){a[key]=b[key];}}
|
|
return a;}
|
|
function NotificationFx(options){this.options=extend({},this.options);extend(this.options,options);this._init();}
|
|
NotificationFx.prototype.options={wrapper:document.body,message:'yo!',layout:'growl',effect:'slide',type:'error',ttl:6000,onClose:function(){return false;},onOpen:function(){return false;}}
|
|
NotificationFx.prototype._init=function(){this.ntf=document.createElement('div');this.ntf.className='ns-box ns-'+ this.options.layout+' ns-effect-'+ this.options.effect+' ns-type-'+ this.options.type;var strinner='<div class="ns-box-inner">';strinner+=this.options.message;strinner+='</div>';strinner+='<span class="ns-close"></span></div>';this.ntf.innerHTML=strinner;this.options.wrapper.insertBefore(this.ntf,this.options.wrapper.firstChild);var self=this;this.dismissttl=setTimeout(function(){if(self.active){self.dismiss();}},this.options.ttl);this._initEvents();}
|
|
NotificationFx.prototype._initEvents=function(){var self=this;this.ntf.querySelector('.ns-close').addEventListener('click',function(){self.dismiss();});}
|
|
NotificationFx.prototype.show=function(){this.active=true;classie.remove(this.ntf,'ns-hide');classie.add(this.ntf,'ns-show');this.options.onOpen();}
|
|
NotificationFx.prototype.dismiss=function(){var self=this;this.active=false;clearTimeout(this.dismissttl);classie.remove(this.ntf,'ns-show');setTimeout(function(){classie.add(self.ntf,'ns-hide');self.options.onClose();},25);var onEndAnimationFn=function(ev){if(support.animations){if(ev.target!==self.ntf)return false;this.removeEventListener(animEndEventName,onEndAnimationFn);}
|
|
self.options.wrapper.removeChild(this);};if(support.animations){this.ntf.addEventListener(animEndEventName,onEndAnimationFn);}
|
|
else{onEndAnimationFn();}}
|
|
window.NotificationFx=NotificationFx;})(window); |