diff --git a/expandable.jquery.json b/expandable.jquery.json index 6606e19..aaba57b 100644 --- a/expandable.jquery.json +++ b/expandable.jquery.json @@ -6,7 +6,7 @@ "expandable", "textarea" ], - "version": "1.1.1", + "version": "1.1.2", "author": { "name": "Brandon Aaron", "url": "http://brandonaaron.net" diff --git a/jquery.expandable.js b/jquery.expandable.js index 19eabc3..9017b7b 100644 --- a/jquery.expandable.js +++ b/jquery.expandable.js @@ -1,101 +1,109 @@ /*! Copyright (c) 2013 Brandon Aaron (http://brandonaaron.net) * Licensed under the MIT License (LICENSE.txt). * - * Version 1.1.1 + * Version 1.1.2 * * Contributions by: * - Karl Swedberg * - Pistos */ -(function($) { - -$.fn.extend({ - expandable: function(givenOptions) { - var options = $.extend({ - duration: 'normal', - interval: 750, - within: 1, - by: 2, - maxRows: false, - init: false - }, givenOptions); +(function (factory) { + if (typeof define === 'function' && define.amd) { + // AMD. Register as an anonymous module. + define(['jquery'], factory); + } else { + // Browser globals + factory(jQuery); + } +}(function ($) { - return this.filter('textarea').each(function() { - var $this = $(this).css({ display: 'block', overflow: 'hidden' }), - minHeight = $this.height(), - heightDiff = this.offsetHeight - minHeight, - rowSize = ( parseInt($this.css('lineHeight'), 10) || parseInt($this.css('fontSize'), 10) ), - // $mirror is used for determining the height of the text within the textarea - // it isn't perfect but is pretty close - // white-space rules from: http://petesbloggerama.blogspot.com/2007/02/firefox-ie-word-wrap-word-break-tables.html - $mirror = $('
').appendTo('body'), - maxHeight = false, - interval; + $.fn.extend({ + expandable: function(givenOptions) { + var options = $.extend({ + duration: 'normal', + interval: 750, + within: 1, + by: 2, + maxRows: false, + init: false + }, givenOptions); - if ( options.maxRows ) { - maxHeight = options.maxRows * rowSize; - } + return this.filter('textarea').each(function() { + var $this = $(this).css({ display: 'block', overflow: 'hidden' }), + minHeight = $this.height(), + heightDiff = this.offsetHeight - minHeight, + rowSize = ( parseInt($this.css('lineHeight'), 10) || parseInt($this.css('fontSize'), 10) ), + // $mirror is used for determining the height of the text within the textarea + // it isn't perfect but is pretty close + // white-space rules from: http://petesbloggerama.blogspot.com/2007/02/firefox-ie-word-wrap-word-break-tables.html + $mirror = $('').appendTo('body'), + maxHeight = false, + interval; - // copy styles from textarea to mirror to mirror the textarea as best possible - $.each('borderTopWidth borderRightWidth borderBottomWidth borderLeftWidth paddingTop paddingRight paddingBottom paddingLeft fontSize fontFamily fontWeight fontStyle fontStretch fontVariant wordSpacing lineHeight width'.split(' '), function(i,prop) { - $mirror.css(prop, $this.css(prop)); - }); + if ( options.maxRows ) { + maxHeight = options.maxRows * rowSize; + } - // setup events - $this - .bind('keypress', function(event) { if ( event.keyCode == '13' ) check(); }) - .bind('focus blur', function(event) { - if ( event.type == 'blur' ) clearInterval( interval ); - if ( event.type == 'focus' ) interval = setInterval(check, options.interval); + // copy styles from textarea to mirror to mirror the textarea as best possible + $.each('borderTopWidth borderRightWidth borderBottomWidth borderLeftWidth paddingTop paddingRight paddingBottom paddingLeft fontSize fontFamily fontWeight fontStyle fontStretch fontVariant wordSpacing lineHeight width'.split(' '), function(i,prop) { + $mirror.css(prop, $this.css(prop)); }); - function check() { - var text = $this.val(), newHeight, height, usedHeight, usedRows, availableRows; - // copy textarea value to the $mirror - // encode any html passed in and replace new lines with a