I wrote a quick plugin to replace alert (I didn't like that I couldn't
copy and paste from the alert window, and that it was modal).  I
decided to use window.open instead of absolute divs to show it.  I've
also used toJSON plugin for when an object is passed in.  Faced a
couple of problems with getting outerWidth of the browser in IE, and
using scrollWidth/scrollHeight to determine window size, which I'm
unsure I solved right.  feedback?

<body>
<script src="jquery.js"></script>
<script src="json.js"></script>
<script>

(function($){
        $.alert = function(obj,options) {
                var defaults = {
                        maxWidth: 800,
                        maxHeight: 1000
                };
                var options = $.extend(defaults, options);
                w = window.open('','','width=100,height=100,resizable=1');
                if(typeof obj == "object"){
                    obj = "\n$.toJSON("+obj+"):\n" + $.toJSON(obj);
                }
                w.document.write("<body topmargin=0 leftmargin=0 style='padding:
0px;height:100%'><textarea id='ta1' wrap='off' style='background-
color:#c0c0c0;color:black;font:8pt lucida console;width:100%;height:
100%'>"+obj+"</textarea></body>");
        var innerWidth = w.innerWidth ||
w.document.documentElement.clientWidth || w.document.body.clientWidth;
        var innerHeight = w.innerHeight ||
w.document.documentElement.clientHeight ||
w.document.body.clientHeight;
        var outerWidth = w.outerWidth+12 || innerWidth+32;
        var outerHeight = w.outerHeight+12 || innerHeight+51;
        var ta = $('#ta1',w.document)
        var scrollX = ta[0].scrollWidth+(outerWidth-innerWidth);
                var scrollY = ta[0].scrollHeight+(outerHeight-innerHeight);
                w.resizeTo((scrollX>options.maxWidth)?options.maxWidth:scrollX,
(scrollY>options.maxHeight)?options.maxHeight:scrollY);
                return this;
                //if returning something else use "return this.pushStack
(somethingElse)" so that .end() returns this
        };
})(jQuery);
    $.alert(jQuery.data);


    var obj = {one:"1",two:"2",three:"3",four:function(){test=1}};
    $.alert(obj);

</script>
</body>

Reply via email to