Files
sentcms/public/js/notificationFx.js
2016-06-21 17:12:08 +08:00

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