View file Mememaker 2.0/ragecomic/scripts/jquery.autogrow.js

File size: 3.23Kb
(function (jQuery) {
    var self = null;
    jQuery.fn.autogrow = function (o) {
        return this.each(function () {
            new jQuery.autogrow(this, o);
        });
    };
    jQuery.autogrow = function (e, o) {
        this.options = o || {};
        this.dummy = null;
        this.interval = null;
        this.line_height = this.options.lineHeight || parseInt(jQuery(e).css('line-height'));
        this.min_height = this.options.minHeight || parseInt(jQuery(e).css('min-height'));
        this.max_height = this.options.maxHeight || parseInt(jQuery(e).css('max-height'));;
        this.textarea = jQuery(e);
        if (this.line_height == NaN) this.line_height = 0;
        this.init();
    };
    jQuery.autogrow.fn = jQuery.autogrow.prototype = {
        autogrow: '1.2.2'
    };
    jQuery.autogrow.fn.extend = jQuery.autogrow.extend = jQuery.extend;
    jQuery.autogrow.fn.extend({
        init: function () {
            var self = this;
            this.textarea.css({
                overflow: 'hidden',
                display: 'block'
            });
            this.textarea.bind('focus', function () {
                self.startExpand()
            }).bind('blur', function () {
                self.stopExpand()
            });
            this.checkExpand();
        },
        startExpand: function () {
            var self = this;
            this.interval = window.setInterval(function () {
                self.checkExpand()
            }, 400);
        },
        stopExpand: function () {
            clearInterval(this.interval);
        },
        checkExpand: function () {
            if (this.dummy == null) {
                this.dummy = jQuery('<div></div>');
                this.dummy.css({
                    'font-size': this.textarea.css('font-size'),
                    'font-family': this.textarea.css('font-family'),
                    'width': this.textarea.css('width'),
                    'padding': this.textarea.css('padding'),
                    'line-height': this.line_height + 'px',
                    'overflow-x': 'hidden',
                    'position': 'absolute',
                    'top': 0,
                    'left': -9999
                }).appendTo('body');
            }
            var html = this.textarea.val().replace(/(<|>)/g, '');
            if ($.browser.msie) {
                html = html.replace(/\n/g, '<BR>new');
            } else {
                html = html.replace(/\n/g, '<br>new');
            }
            if (this.dummy.html() != html) {
                this.dummy.html(html);
                if (this.max_height > 0 && (this.dummy.height() + this.line_height > this.max_height)) {
                    this.textarea.css('overflow-y', 'auto');
                } else {
                    this.textarea.css('overflow-y', 'hidden');
                    if (this.textarea.height() < this.dummy.height() + this.line_height || (this.dummy.height() < this.textarea.height())) {
                        this.textarea.animate({
                            height: (this.dummy.height() + this.line_height) + 'px'
                        }, 100);
                    }
                }
            }
        }
    });
})(jQuery);