Blame | Letzte Änderung | Log anzeigen | RSS feed
/*** @author Will Steinmetz** jQuery notification plug-in inspired by the notification style of Windows 8** Copyright (c)2013, Will Steinmetz* Licensed under the BSD license.* http://opensource.org/licenses/BSD-3-Clause*/;(function($) {var settings = {life: 10000,theme: 'teal',sticky: false,verticalEdge: 'right',horizontalEdge: 'top',zindex: 1100};var methods = {init: function(message, options) {return this.each(function() {var $this = $(this),data = $this.data('notific8');$this.data('notific8', {target: $this,settings: {},message: ""});data = $this.data('notific8');data.message = message;// apply the options$.extend(data.settings, settings, options);// add the notification to the stackmethods._buildNotification($this);});},/*** Destroy the notification*/destroy: function($this) {var data = $this.data('notific8');$(window).unbind('.notific8');$this.removeData('notific8');},/*** Build the notification and add it to the screen's stack*/_buildNotification: function($this) {var data = $this.data('notific8'),notification = $('<div />'),num = Number($('body').attr('data-notific8s'));num++;notification.addClass('jquery-notific8-notification').addClass(data.settings.theme);notification.attr('id', 'jquery-notific8-notification-' + num);$('body').attr('data-notific8s', num);// check for a headingif (data.settings.hasOwnProperty('heading') && (typeof data.settings.heading == "string")) {notification.append($('<div />').addClass('jquery-notific8-heading').html(data.settings.heading));}// check if the notification is supposed to be stickyif (data.settings.sticky) {var close = $('<div />').addClass('jquery-notific8-close-sticky').append($('<span />').html('close x'));close.click(function(event) {notification.animate({width: 'hide'}, {duration: 'fast',complete: function() {notification.remove();}});});notification.append(close);notification.addClass('sticky');}// otherwise, put the normal close button up that is only display// when the notification is hovered overelse {var close = $('<div />').addClass('jquery-notific8-close').append($('<span />').html('X'));close.click(function(event) {notification.animate({width: 'hide'}, {duration: 'fast',complete: function() {notification.remove();}});});notification.append(close);}// add the messagenotification.append($('<div />').addClass('jquery-notific8-message').html(data.message));// add the notification to the stack$('.jquery-notific8-container.' + data.settings.verticalEdge + '.' + data.settings.horizontalEdge).append(notification);// slide the message onto the screennotification.animate({width: 'show'}, {duration: 'fast',complete: function() {if (!data.settings.sticky) {(function(n, l) {setTimeout(function() {n.animate({width: 'hide'}, {duration: 'fast',complete: function() {n.remove();}});}, l);})(notification, data.settings.life);}data.settings = {};}});},/*** Set up the configuration settings*/configure: function(options) {$.extend(settings, options);},/*** Set up the z-index*/zindex: function(zindex) {settings.zindex = zindex;}};// wrapper since this plug-in is called without selecting an item first$.notific8 = function(message, options) {switch (message) {case 'configure':case 'config':return methods.configure.apply(this, [options]);break;case 'zindex':return methods.zindex.apply(this, [options]);break;default:if (typeof options == 'undefined') {options = {};}// make sure that the stack containers existif ($('.jquery-notific8-container').size() === 0) {var $body = $('body');$body.attr('data-notific8s', 0);$body.append($('<div />').addClass('jquery-notific8-container').addClass('top').addClass('right'));$body.append($('<div />').addClass('jquery-notific8-container').addClass('top').addClass('left'));$body.append($('<div />').addClass('jquery-notific8-container').addClass('bottom').addClass('right'));$body.append($('<div />').addClass('jquery-notific8-container').addClass('bottom').addClass('left'));$('.jquery-notific8-container').css('z-index', settings.zindex);}// make sure the edge settings existif ((!options.hasOwnProperty('verticalEdge')) || ((options.verticalEdge.toLowerCase() != 'right') && (options.verticalEdge.toLowerCase() != 'left'))) {options.verticalEdge = settings.verticalEdge;}if ((!options.hasOwnProperty('horizontalEdge')) || ((options.horizontalEdge.toLowerCase() != 'top') && (options.horizontalEdge.toLowerCase() != 'bottom'))) {options.horizontalEdge = settings.horizontalEdge;}options.verticalEdge = options.verticalEdge.toLowerCase();options.horizontalEdge = options.horizontalEdge.toLowerCase();//display the notification in the right corner$('.jquery-notific8-container.' + options.verticalEdge + '.' + options.horizontalEdge).notific8(message, options);break;}};// plugin setup$.fn.notific8 = function(message, options) {if (typeof message == "string") {return methods.init.apply(this, arguments);} else {$.error('jQuery.notific8 takes a string message as the first parameter');}};})(jQuery);