views:

343

answers:

1

I was playing around with the jquery autogrow plugin, which expands the height of the text automatically as the text needs it. The problem is that with every key down, the bottom border of the textarea jitters in a noticeable way. I'm not sure what the problem could be, so I'm going to go out on a limb and post the 132 lines of this GPL plugin here. Any hints where the problem could be or how to circumvent it?

         /* 

      Auto Expanding Text Area (1.2.2)  by Chrys Bader */

        (function(jQuery) {
           var self = null;     
           jQuery.fn.autogrow = function(o){
             return this.each(function() {  
                new jQuery.autogrow(this, o);
             });
           };


      /**
      * The autogrow object.
      *
      * @constructor
      * @name jQuery.autogrow
      * @param Object e The textarea to create the autogrow for.
      * @param Hash o A set of key/value pairs to set as configuration properties.
      * @cat Plugins/autogrow
      */      

     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;

       // Only one textarea activated at a time, the one being used
       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');
      }
// Strip HTML tags    
var html = this.textarea.val().replace(/(<|>)/g,'');
// IE is different, as per usual      
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);
+1  A: 

In regard to jeerose's comment:

http://www.aclevercookie.com/aclevercookiecom-breached-problem-resolved/

It has been brought to my attention by visitors that their virus protection goes off when they come to this blog. I investigated the matter and found that harmful code had been injected into the source of the site.

This has been resolved and measures have been taken to increase the security of the site.

Thanks for the report, and I apologize for the alarm.

Which doesn't seem to be true. As my antivirus still fires when opening that site

jitter
More of a comment jitter but yes... you're right.
jeerose
Yeah I know but was too long to fit into comment field. And this way more people read it and don't go onto this site unti he really clears the problem
jitter