diff --git a/src/js/messager.js b/src/js/messager.js index 0f506158666434ba26959c2169502702698bdd6a..068923d843739710a269707b498c7d58a811bb95 100644 --- a/src/js/messager.js +++ b/src/js/messager.js @@ -11,88 +11,132 @@ 'use strict'; var id = 0; - var template = ''; - - function Messager() + var template = ''; + var defaultOptions = + { + type: 'default', + placement: 'top', + time: 4000, + parent: 'body', + // clear: false, + icon: null, + close: true, + fade: true, + scale: true + }; + var lastMessager; + + var Messager = function(message, options) { - this.show = function(message, type, placement, time, parent) + var that = this; + that.id = id++; + options = that.options = $.extend({}, defaultOptions, options); + that.message = (options.icon ? ' ' : '') + message; + + that.$ = $(template.format(options)).toggleClass('fade', options.fade).toggleClass('scale', options.scale).attr('id', 'messager-' + that.id); + if(!options.close) { - $('.messager').hide(); - - id++; - type = type || 'default'; - time = time || 2000; - parent = parent || 'body'; - placement = placement || 'top'; - var msg = $(template.format( - { - message: message, - type: type, - placement: placement, - id: id - })).appendTo(parent); - msg.find('.close-messager').click(function() + that.$.find('.close').remove(); + } + else + { + that.$.on('click', '.close', function() { - $(this).closest('.messager').fadeOut(); + that.hide(); }); + } - if (placement == 'top' || placement == 'bottom') - { - msg.css('left', ($(parent).width() - msg.width() - 50) / 2); - } + that.$.find('.messager-content').html(that.message); - msg.fadeIn(); - setTimeout(function() - { - $('#messager' + id).fadeOut(function() - { - $(this).remove(); - }); - }, time); + that.$.data('zui.messager', that); + }; - return msg; - }; + Messager.prototype.show = function() + { + var that = this, options = this.options; - this.primary = function(message, placement, time, parent) - { - return this.show(message, 'primary', placement, time, parent); - }; + if(lastMessager && lastMessager.isShow) lastMessager.hide(); - this.success = function(message, placement, time, parent) - { - return this.show(' ' + message, 'success', placement, time, parent); - }; + that.$.appendTo(options.parent).show(); - this.info = function(message, placement, time, parent) + if (options.placement === 'top' || options.placement === 'bottom') { - return this.show(' ' + message, 'info', placement, time, parent); - }; + that.$.css('left', ($(options.parent).width() - that.$.width() - 50) / 2); + } - this.warning = function(message, placement, time, parent) - { - return this.show('' + message, 'warning', placement, time, parent); - }; + that.$.addClass('in'); - this.danger = function(message, placement, time, parent) + if(options.time) { - return this.show('' + message, 'danger', placement, time, parent); - }; + setTimeout(function(){that.hide();}, options.time); + } - this.important = function(message, placement, time, parent) - { - return this.show(message, 'important', placement, time, parent); - }; + that.isShow = true; + lastMessager = that; + }; - this.special = function(message, placement, time, parent) + Messager.prototype.hide = function() + { + var that = this; + if(that.$.hasClass('in')) { - return this.show(message, 'special', placement, time, parent); - }; - } + that.$.removeClass('in'); + setTimeout(function(){that.$.remove();}, 200); + } - var messager = new Messager(); + that.isShow = false; + }; - window.messager = messager; + $.Messager = Messager; + if(!window.Messager) window.Messager = Messager; + $.showMessage = function(message, options) + { + if(typeof options === 'string') + { + options = {type: options}; + } + var msg = new Messager(message, options); + msg.show(); + }; + + var getOptions = function(options) + { + return (typeof options === 'string') ? {placement: options} : options; + }; + + $.messager = + { + primary: function(message, options) + { + $.showMessage(message, $.extend({type: 'primary'}, getOptions(options))); + }, + success: function(message, options) + { + $.showMessage(message, $.extend({type: 'success', icon: 'ok-sign'}, getOptions(options))); + }, + info: function(message, options) + { + $.showMessage(message, $.extend({type: 'info', icon: 'info-sign'}, getOptions(options))); + }, + warning: function(message, options) + { + $.showMessage(message, $.extend({type: 'warning', icon: 'warning-sign'}, getOptions(options))); + }, + danger: function(message, options) + { + $.showMessage(message, $.extend({type: 'danger', icon: 'exclamation-sign'}, getOptions(options))); + }, + important: function(message, options) + { + $.showMessage(message, $.extend({type: 'important'}, getOptions(options))); + }, + special: function(message, options) + { + $.showMessage(message, $.extend({type: 'special'}, getOptions(options))); + } + }; + if(!window.messager) window.messager = $.messager; }(jQuery, window)); diff --git a/src/less/modules/messager.less b/src/less/modules/messager.less index cbb72e729e7bb155dbf1cb7342dc498a6c0a6a1c..54ffee1a4c720a8e15bc3533bd72af09f8fac95c 100644 --- a/src/less/modules/messager.less +++ b/src/less/modules/messager.less @@ -55,20 +55,31 @@ } } -.close-messager +.messager-actions { position: absolute; - right: 10px; - top: 5px; - background: none; - border: none; - color: #fafafa; - color: rgba(255, 255, 255, 0.6); - font-size: 20px; - - &:hover + right: 15px; + top: 10px; + + > .action { - color: #fff; + color: #fafafa; + color: rgba(255, 255, 255, 0.6); + background: none; + border: none; + text-shadow: none; + + &.close + { + opacity: 1; + font-size: 20px; + font-weight: normal; + } + + &:hover + { + color: #fff; + } } }