/** * notificationFx.js v1.0.0 * http://www.codrops.com * * Licensed under the MIT license. * http://www.opensource.org/licenses/mit-license.php * * Copyright 2014, Codrops * http://www.codrops.com */; (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 = '
'; strinner += this.options.message; strinner += '
'; strinner += ''; this.ntf.innerHTML = strinner; this.options.wrapper.insertBefore(this.ntf, this.options.wrapper.firstChild); var self = this; if (this.options.ttl) { 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);