123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354 |
- (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);
|