173 lines
		
	
	
		
			5.7 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
			
		
		
	
	
			173 lines
		
	
	
		
			5.7 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
// By: Hans Fjällemark and John Papa
 | 
						|
// https://github.com/CodeSeven/toastr
 | 
						|
// 
 | 
						|
// Modified to support css styling instead of inline styling
 | 
						|
// Inspired by https://github.com/Srirangan/notifer.js/
 | 
						|
 | 
						|
;(function(window, $) {
 | 
						|
    window.toastr = (function() {
 | 
						|
        var 
 | 
						|
            defaults = {
 | 
						|
                tapToDismiss: true,
 | 
						|
                toastClass: 'toast',
 | 
						|
                containerId: 'toast-container',
 | 
						|
                debug: false,
 | 
						|
                fadeIn: 300,
 | 
						|
                fadeOut: 1000,
 | 
						|
                extendedTimeOut: 1000,
 | 
						|
                iconClasses: {
 | 
						|
                    error: 'toast-error',
 | 
						|
                    info: 'toast-info',
 | 
						|
                    success: 'toast-success',
 | 
						|
                    warning: 'toast-warning'
 | 
						|
                },
 | 
						|
                iconClass: 'toast-info',
 | 
						|
                positionClass: 'toast-top-right',
 | 
						|
                timeOut: 5000, // Set timeOut to 0 to make it sticky
 | 
						|
                titleClass: 'toast-title',
 | 
						|
                messageClass: 'toast-message'
 | 
						|
            },
 | 
						|
 | 
						|
 | 
						|
            error = function(message, title) {
 | 
						|
                return notify({
 | 
						|
                    iconClass: getOptions().iconClasses.error,
 | 
						|
                    message: message,
 | 
						|
                    title: title
 | 
						|
                })
 | 
						|
            },
 | 
						|
 | 
						|
            getContainer = function(options) {
 | 
						|
                var $container = $('#' + options.containerId)
 | 
						|
 | 
						|
                if ($container.length)
 | 
						|
                    return $container
 | 
						|
 | 
						|
                $container = $('<div/>')
 | 
						|
                    .attr('id', options.containerId)
 | 
						|
                    .addClass(options.positionClass)
 | 
						|
 | 
						|
                $container.appendTo($('body'))
 | 
						|
 | 
						|
                return $container
 | 
						|
            },
 | 
						|
 | 
						|
            getOptions = function() {
 | 
						|
                return $.extend({}, defaults, toastr.options)
 | 
						|
            },
 | 
						|
 | 
						|
            info = function(message, title) {
 | 
						|
                return notify({
 | 
						|
                    iconClass: getOptions().iconClasses.info,
 | 
						|
                    message: message,
 | 
						|
                    title: title
 | 
						|
                })
 | 
						|
            },
 | 
						|
 | 
						|
            notify = function(map) {
 | 
						|
                var 
 | 
						|
                    options = getOptions(),
 | 
						|
                    iconClass = map.iconClass || options.iconClass,
 | 
						|
                    intervalId = null,
 | 
						|
                    $container = getContainer(options),
 | 
						|
                    $toastElement = $('<div/>'),
 | 
						|
                    $titleElement = $('<div/>'),
 | 
						|
                    $messageElement = $('<div/>'),
 | 
						|
                    response = { options: options, map: map }
 | 
						|
 | 
						|
                if (map.iconClass) {
 | 
						|
                    $toastElement.addClass(options.toastClass).addClass(iconClass)
 | 
						|
                }
 | 
						|
 | 
						|
                if (map.title) {
 | 
						|
                    $titleElement.append(map.title).addClass(options.titleClass)
 | 
						|
                    $toastElement.append($titleElement)
 | 
						|
                }
 | 
						|
 | 
						|
                if (map.message) {
 | 
						|
                    $messageElement.append(map.message).addClass(options.messageClass)
 | 
						|
                    $toastElement.append($messageElement)
 | 
						|
                }
 | 
						|
 | 
						|
                var fadeAway = function() {
 | 
						|
                    if ($(':focus', $toastElement).length > 0)
 | 
						|
                		return
 | 
						|
                	
 | 
						|
                    var fade = function() {
 | 
						|
                        return $toastElement.fadeOut(options.fadeOut)
 | 
						|
                    }
 | 
						|
 | 
						|
                    $.when(fade()).done(function() {
 | 
						|
                        if ($toastElement.is(':visible')) {
 | 
						|
                            return
 | 
						|
                        }
 | 
						|
                        $toastElement.remove()
 | 
						|
                        if ($container.children().length === 0)
 | 
						|
                            $container.remove()
 | 
						|
                    })
 | 
						|
                }
 | 
						|
 | 
						|
                var delayedFadeAway = function() {
 | 
						|
                    if (options.timeOut > 0 || options.extendedTimeOut > 0) {
 | 
						|
                        intervalId = setTimeout(fadeAway, options.extendedTimeOut)
 | 
						|
                    }
 | 
						|
                }
 | 
						|
 | 
						|
                var stickAround = function() {
 | 
						|
                    clearTimeout(intervalId)
 | 
						|
                    $toastElement.stop(true, true)
 | 
						|
                        .fadeIn(options.fadeIn)
 | 
						|
                }
 | 
						|
 | 
						|
                $toastElement.hide()
 | 
						|
                $container.prepend($toastElement)
 | 
						|
                $toastElement.fadeIn(options.fadeIn)
 | 
						|
 | 
						|
                if (options.timeOut > 0) {
 | 
						|
                    intervalId = setTimeout(fadeAway, options.timeOut)
 | 
						|
                }
 | 
						|
 | 
						|
                $toastElement.hover(stickAround, delayedFadeAway)
 | 
						|
 | 
						|
                if (!options.onclick && options.tapToDismiss) {
 | 
						|
                    $toastElement.click(fadeAway)
 | 
						|
                }
 | 
						|
 | 
						|
                if (options.onclick) {
 | 
						|
                    $toastElement.click(function() {
 | 
						|
                        options.onclick() && fadeAway()
 | 
						|
                    })
 | 
						|
                }
 | 
						|
 | 
						|
                if (options.debug) {
 | 
						|
                    console.log(response)
 | 
						|
                }
 | 
						|
 | 
						|
                return $toastElement
 | 
						|
            },
 | 
						|
 | 
						|
            success = function(message, title) {
 | 
						|
                return notify({
 | 
						|
                    iconClass: getOptions().iconClasses.success,
 | 
						|
                    message: message,
 | 
						|
                    title: title
 | 
						|
                })
 | 
						|
            },
 | 
						|
 | 
						|
            warning = function(message, title) {
 | 
						|
                return notify({
 | 
						|
                    iconClass: getOptions().iconClasses.warning,
 | 
						|
                    message: message,
 | 
						|
                    title: title
 | 
						|
                })
 | 
						|
            }
 | 
						|
 | 
						|
        return {
 | 
						|
            error: error,
 | 
						|
            info: info,
 | 
						|
            options: {},
 | 
						|
            success: success,
 | 
						|
            warning: warning
 | 
						|
        }
 | 
						|
    })()
 | 
						|
} (window, jQuery)); |