Spaces:
Runtime error
Runtime error
/** | |
* noty - jQuery Notification Plugin v1.2.1 | |
* Contributors: https://github.com/needim/noty/graphs/contributors | |
* | |
* Examples and Documentation - http://needim.github.com/noty/ | |
* | |
* Licensed under the MIT licenses: | |
* http://www.opensource.org/licenses/mit-license.php | |
* | |
**/ | |
(function($) { | |
$.noty = function(options, customContainer) { | |
var base = {}; | |
var $noty = null; | |
var isCustom = false; | |
base.init = function(options) { | |
base.options = $.extend({}, $.noty.defaultOptions, options); | |
base.options.type = base.options.cssPrefix+base.options.type; | |
base.options.id = base.options.type+'_'+new Date().getTime(); | |
base.options.layout = base.options.cssPrefix+'layout_'+base.options.layout; | |
if (base.options.custom.container) customContainer = base.options.custom.container; | |
isCustom = ($.type(customContainer) === 'object') ? true : false; | |
return base.addQueue(); | |
}; | |
// Push notification to queue | |
base.addQueue = function() { | |
var isGrowl = ($.inArray(base.options.layout, $.noty.growls) == -1) ? false : true; | |
if (!isGrowl) (base.options.force) ? $.noty.queue.unshift({options: base.options}) : $.noty.queue.push({options: base.options}); | |
return base.render(isGrowl); | |
}; | |
// Render the noty | |
base.render = function(isGrowl) { | |
// Layout spesific container settings | |
var container = (isCustom) ? customContainer.addClass(base.options.theme+' '+base.options.layout+' noty_custom_container') : $('body'); | |
if (isGrowl) { | |
if ($('ul.noty_cont.' + base.options.layout).length == 0) | |
container.prepend($('<ul/>').addClass('noty_cont ' + base.options.layout)); | |
container = $('ul.noty_cont.' + base.options.layout); | |
} else { | |
if ($.noty.available) { | |
var fromQueue = $.noty.queue.shift(); // Get noty from queue | |
if ($.type(fromQueue) === 'object') { | |
$.noty.available = false; | |
base.options = fromQueue.options; | |
} else { | |
$.noty.available = true; // Queue is over | |
return base.options.id; | |
} | |
} else { | |
return base.options.id; | |
} | |
} | |
base.container = container; | |
// Generating noty bar | |
base.bar = $('<div class="noty_bar"/>').attr('id', base.options.id).addClass(base.options.theme+' '+base.options.layout+' '+base.options.type); | |
$noty = base.bar; | |
$noty.append(base.options.template).find('.noty_text').html(base.options.text); | |
$noty.data('noty_options', base.options); | |
// Close button display | |
(base.options.closeButton) ? $noty.addClass('noty_closable').find('.noty_close').show() : $noty.find('.noty_close').remove(); | |
// Bind close event to button | |
$noty.find('.noty_close').bind('click', function() { $noty.trigger('noty.close'); }); | |
// If we have a button we must disable closeOnSelfClick and closeOnSelfOver option | |
if (base.options.buttons) base.options.closeOnSelfClick = base.options.closeOnSelfOver = false; | |
// Close on self click | |
if (base.options.closeOnSelfClick) $noty.bind('click', function() { $noty.trigger('noty.close'); }).css('cursor', 'pointer'); | |
// Close on self mouseover | |
if (base.options.closeOnSelfOver) $noty.bind('mouseover', function() { $noty.trigger('noty.close'); }).css('cursor', 'pointer'); | |
// Set buttons if available | |
if (base.options.buttons) { | |
$buttons = $('<div/>').addClass('noty_buttons'); | |
$noty.find('.noty_message').append($buttons); | |
$.each(base.options.buttons, function(i, button) { | |
bclass = (button.type) ? button.type : 'gray'; | |
$button = $('<button/>').addClass(bclass).html(button.text).appendTo($noty.find('.noty_buttons')) | |
.bind('click', function() { | |
if ($.isFunction(button.click)) { | |
button.click.call($button, $noty); | |
} | |
}); | |
}); | |
} | |
return base.show(isGrowl); | |
}; | |
base.show = function(isGrowl) { | |
// is Modal? | |
if (base.options.modal) $('<div/>').addClass('noty_modal').addClass(base.options.theme).prependTo($('body')).fadeIn('fast'); | |
$noty.close = function() { return this.trigger('noty.close'); }; | |
// Prepend noty to container | |
(isGrowl) ? base.container.prepend($('<li/>').append($noty)) : base.container.prepend($noty); | |
// topCenter and center specific options | |
if (base.options.layout == 'noty_layout_topCenter' || base.options.layout == 'noty_layout_center') { | |
$.noty.reCenter($noty); | |
} | |
$noty.bind('noty.setText', function(event, text) { | |
$noty.find('.noty_text').html(text); | |
if (base.options.layout == 'noty_layout_topCenter' || base.options.layout == 'noty_layout_center') { | |
$.noty.reCenter($noty); | |
} | |
}); | |
$noty.bind('noty.setType', function(event, type) { | |
$noty.removeClass($noty.data('noty_options').type); | |
type = $noty.data('noty_options').cssPrefix+type; | |
$noty.data('noty_options').type = type; | |
$noty.addClass(type); | |
if (base.options.layout == 'noty_layout_topCenter' || base.options.layout == 'noty_layout_center') { | |
$.noty.reCenter($noty); | |
} | |
}); | |
$noty.bind('noty.getId', function(event) { | |
return $noty.data('noty_options').id; | |
}); | |
// Bind close event | |
$noty.one('noty.close', function(event) { | |
var options = $noty.data('noty_options'); | |
if(options.onClose){options.onClose();} | |
// Modal Cleaning | |
if (options.modal) $('.noty_modal').fadeOut('fast', function() { $(this).remove(); }); | |
$noty.clearQueue().stop().animate( | |
$noty.data('noty_options').animateClose, | |
$noty.data('noty_options').speed, | |
$noty.data('noty_options').easing, | |
$noty.data('noty_options').onClosed) | |
.promise().done(function() { | |
// Layout spesific cleaning | |
if ($.inArray($noty.data('noty_options').layout, $.noty.growls) > -1) { | |
$noty.parent().remove(); | |
} else { | |
$noty.remove(); | |
// queue render | |
$.noty.available = true; | |
base.render(false); | |
} | |
}); | |
}); | |
// Start the show | |
if(base.options.onShow){base.options.onShow();} | |
$noty.animate(base.options.animateOpen, base.options.speed, base.options.easing, base.options.onShown); | |
// If noty is have a timeout option | |
if (base.options.timeout) $noty.delay(base.options.timeout).promise().done(function() { $noty.trigger('noty.close'); }); | |
return base.options.id; | |
}; | |
// Run initializer | |
return base.init(options); | |
}; | |
// API | |
$.noty.get = function(id) { return $('#'+id); }; | |
$.noty.close = function(id) { | |
//remove from queue if not already visible | |
for(var i=0;i<$.noty.queue.length;) { | |
if($.noty.queue[i].options.id==id) | |
$.noty.queue.splice(id,1); | |
else | |
i++; | |
} | |
//close if already visible | |
$.noty.get(id).trigger('noty.close'); | |
}; | |
$.noty.setText = function(id, text) { | |
$.noty.get(id).trigger('noty.setText', text); | |
}; | |
$.noty.setType = function(id, type) { | |
$.noty.get(id).trigger('noty.setType', type); | |
}; | |
$.noty.closeAll = function() { | |
$.noty.clearQueue(); | |
$('.noty_bar').trigger('noty.close'); | |
}; | |
$.noty.reCenter = function(noty) { | |
noty.css({'left': ($(window).width() - noty.outerWidth()) / 2 + 'px'}); | |
}; | |
$.noty.clearQueue = function() { | |
$.noty.queue = []; | |
}; | |
var windowAlert = window.alert; | |
$.noty.consumeAlert = function(options){ | |
window.alert = function(text){ | |
if(options){options.text = text;} | |
else{options = {text:text};} | |
$.noty(options); | |
}; | |
} | |
$.noty.stopConsumeAlert = function(){ | |
window.alert = windowAlert; | |
} | |
$.noty.queue = []; | |
$.noty.growls = ['noty_layout_topLeft', 'noty_layout_topRight', 'noty_layout_bottomLeft', 'noty_layout_bottomRight']; | |
$.noty.available = true; | |
$.noty.defaultOptions = { | |
layout: 'top', | |
theme: 'noty_theme_default', | |
animateOpen: {height: 'toggle'}, | |
animateClose: {height: 'toggle'}, | |
easing: 'swing', | |
text: '', | |
type: 'alert', | |
speed: 500, | |
timeout: 5000, | |
closeButton: false, | |
closeOnSelfClick: true, | |
closeOnSelfOver: false, | |
force: false, | |
onShow: false, | |
onShown: false, | |
onClose: false, | |
onClosed: false, | |
buttons: false, | |
modal: false, | |
template: '<div class="noty_message"><span class="noty_text"></span><div class="noty_close"></div></div>', | |
cssPrefix: 'noty_', | |
custom: { | |
container: null | |
} | |
}; | |
$.fn.noty = function(options) { | |
return this.each(function() { | |
(new $.noty(options, $(this))); | |
}); | |
}; | |
})(jQuery); | |
//Helper | |
function noty(options) { | |
return jQuery.noty(options); // returns an id | |
} | |