54 lines
1.9 KiB
JavaScript
54 lines
1.9 KiB
JavaScript
(function($) {
|
|
|
|
/*
|
|
* Auto-growing textareas; technique ripped from Facebook
|
|
*/
|
|
$.fn.autogrow = function(options) {
|
|
|
|
this.filter('textarea').each(function() {
|
|
|
|
var $this = $(this),
|
|
minHeight = $this.height(),
|
|
lineHeight = $this.css('lineHeight');
|
|
|
|
var shadow = $('<div></div>').css({
|
|
position: 'absolute',
|
|
top: -10000,
|
|
left: -10000,
|
|
width: $(this).width() - parseInt($this.css('paddingLeft')) - parseInt($this.css('paddingRight')),
|
|
fontSize: $this.css('fontSize'),
|
|
fontFamily: $this.css('fontFamily'),
|
|
lineHeight: $this.css('lineHeight'),
|
|
resize: 'none'
|
|
}).appendTo(document.body);
|
|
|
|
var update = function() {
|
|
|
|
var times = function(string, number) {
|
|
for (var i = 0, r = ''; i < number; i ++) r += string;
|
|
return r;
|
|
};
|
|
|
|
var val = this.value.replace(/</g, '<')
|
|
.replace(/>/g, '>')
|
|
.replace(/&/g, '&')
|
|
.replace(/\n$/, '<br/> ')
|
|
.replace(/\n/g, '<br/>')
|
|
.replace(/ {2,}/g, function(space) { return times(' ', space.length -1) + ' ' });
|
|
|
|
shadow.html(val);
|
|
$(this).css('height', Math.max(shadow.height() + 20, minHeight));
|
|
|
|
}
|
|
|
|
$(this).change(update).keyup(update).keydown(update);
|
|
|
|
update.apply(this);
|
|
|
|
});
|
|
|
|
return this;
|
|
|
|
}
|
|
|
|
})(jQuery); |