blob: 55eef833162ab1b502a7fd30c841e07041942c50 [file] [log] [blame]
var $ = require('../util/jquery');
var defineClass = require('../util/define-class');
var message = require('./message');
var Messages = defineClass({
publics: {
push: function(messageData) {
var messageObject = new message.Message(messageData);
/*
* Implementation notes: slideDown won't work properly (won't be able to
* calculate goal height) unless the element is in the DOM tree prior
* to the call, so we hide first, attach, and then animate. slideDown
* implicitly shows the element.
*
* Similarly, we use animate rather than fadeIn because fadeIn implicitly
* hides the element upon completion, resulting in an abrupt void in the
* element flow. Instead, we want to keep the element taking up space
* while invisible until we've collapsed the height via slideUp.
*/
messageObject.$.hide();
this.$.append(messageObject.$);
messageObject.$
.slideDown(Messages.slideDown)
.delay(Messages.ttl)
.animate({ opacity: 0 }, Messages.fade)
.slideUp(Messages.slideUp, function() {
messageObject.$.remove();
});
}
},
constants: ['$'],
init: function() {
this.$ = $('<ul>').addClass('messages');
}
});
Messages.slideDown = 150;
Messages.ttl = 9000;
Messages.fade = 1000;
Messages.slideUp = 300;
module.exports = Messages;