Growlみたいなポップアップメッセージを表示する

そんなライブラリを書きなぐってみました。
とりあえずこんなの

id:phaに教えてもらって、Growlをインストールしたんです。そしたら、メッセージがかっこいいじゃないですか。っつことで、こんなのを作ってみました。

面白いことに、これで、JavaScriptソースコードが52行。YAHOO UIを使ってますが、52行でこれが作れるJavaScriptがすばらしすぐる。

(function() {
        var Dom = YAHOO.util.Dom;
        var Event = YAHOO.util.Event;
        var Anim = YAHOO.util.Anim;
        NiceMessage = {
                addMessage: function(msg, option) {
                        if (!option) option = {};
                        var width = Dom.getViewportWidth();
                        var box = document.createElement('div');
                        box.innerHTML = msg;
                        Dom.addClass(box, 'nice-message');
                        if (option.width) Dom.setStyle(box, 'width', option.width);
                        if (option.color) Dom.setStyle(box, 'color', option.color);
                        if (option.backgroundColor) Dom.setStyle(box, 'backgroundColor', option.backgroundColor);
                        if (option.border) Dom.setStyle(box, 'border', option.border);
                        if (!option.duration) option.duration = 1000;
                        if (!option.showTime) option.showTime = 1000;
                        var y = NiceMessage.getY();
                        document.body.appendChild(box);
                        Dom.setX(box, width - parseInt(Dom.getStyle(box, 'width')) - 20);
                        Dom.setY(box, y + 10);
                        var attr = {
                                opacity: {from: 0, to: 1}
                        };
                        var anim = new Anim(box, attr, option.duration / 1000);
                        anim.onComplete.subscribe(function() {
                                setTimeout(function() {
                                        var attr = {
                                                opacity: {from: 1, to: 0}
                                        };
                                        var fade = new Anim(box, attr, option.duration / 1000);
                                        fade.onComplete.subscribe(function() {
                                                box.parentNode.removeChild(box);
                                        });
                                        fade.animate();
                                }, option.showTime);
                        });
                        anim.animate();
                },

                getY: function() {
                        var scrollTop = Dom.getDocumentScrollTop();
                        var els = Dom.getElementsByClassName('nice-message');
                        var bottom = 0;
                        for (var i = 0, len = els.length; i < len; i++) {
                                var region = Dom.getRegion(els[i]);
                                bottom = bottom < region.bottom ? region.bottom : bottom;
                        }
                        return bottom < scrollTop ? scrollTop : bottom;
                }
        };
})();