diff options
author | Jack Moore <hello@jacklmoore.com> | 2014-01-10 21:26:56 -0500 |
---|---|---|
committer | Jack Moore <hello@jacklmoore.com> | 2014-01-10 21:26:56 -0500 |
commit | f8daa2717660d19f2dfdcbded60d9b3e77c6f902 (patch) | |
tree | c8feca9bba8974ef6db5283485f29f9ed3786c43 | |
parent | ec26d7c3f94075a96de37fa5414fb519b7584367 (diff) | |
download | autosize-f8daa2717660d19f2dfdcbded60d9b3e77c6f902.zip autosize-f8daa2717660d19f2dfdcbded60d9b3e77c6f902.tar.gz autosize-f8daa2717660d19f2dfdcbded60d9b3e77c6f902.tar.bz2 |
Allow correct width calculation of hidden textarea elements, when they have a specified width. Fixes #1341.18.3
(fixes minor issues with nealbowers’ commit.)
-rw-r--r-- | autosize.jquery.json | 2 | ||||
-rw-r--r-- | bower.json | 2 | ||||
-rw-r--r-- | jquery.autosize.js | 19 | ||||
-rw-r--r-- | jquery.autosize.min.js | 4 | ||||
-rw-r--r-- | package.json | 2 | ||||
-rw-r--r-- | readme.md | 3 |
6 files changed, 19 insertions, 13 deletions
diff --git a/autosize.jquery.json b/autosize.jquery.json index 38dd13c..02d94c8 100644 --- a/autosize.jquery.json +++ b/autosize.jquery.json @@ -2,7 +2,7 @@ "name": "autosize", "title": "Autosize", "description": "Automatically adjust textarea height based on user input.", - "version": "1.18.2", + "version": "1.18.3", "dependencies": { "jquery": ">=1.7" }, @@ -1,7 +1,7 @@ { "name": "jquery-autosize", "description": "Automatically adjust textarea height based on user input.", - "version": "1.18.2", + "version": "1.18.3", "dependencies": { "jquery": ">=1.7" }, diff --git a/jquery.autosize.js b/jquery.autosize.js index 8b31a7e..f478a82 100644 --- a/jquery.autosize.js +++ b/jquery.autosize.js @@ -1,5 +1,5 @@ /*! - Autosize v1.18.2 - 2014-01-06 + Autosize v1.18.3 - 2014-01-10 Automatically adjust textarea height based on user input. (c) 2014 Jack Moore - http://www.jacklmoore.com/autosize license: http://www.opensource.org/licenses/mit-license.php @@ -91,24 +91,27 @@ }); // The mirror width must exactly match the textarea width, so using getBoundingClientRect because it doesn't round the sub-pixel value. + // window.getComputedStyle, getBoundingClientRect returning a width are unsupported, but also unneeded in IE8 and lower. function setWidth() { var width; var style = window.getComputedStyle ? window.getComputedStyle(ta, null) : false; if (style) { + width = ta.getBoundingClientRect().width; + if (width === 0) { + width = parseInt(style.width,10); + } + $.each(['paddingLeft', 'paddingRight', 'borderLeftWidth', 'borderRightWidth'], function(i,val){ width -= parseInt(style[val],10); }); + } else { + width = Math.max($ta.width(), 0); } - if (!style || width == 0) { - // window.getComputedStyle, getBoundingClientRect returning a width are unsupported and unneeded in IE8 and lower. - // In some situations, if the element is offscreen, then the above approach will result in 0 width, - // but the approach below works. - mirror.style.width = Math.max($ta.width(), 0); - } - mirror.style.width = width + 'px'; + + mirror.style.width = width + 'px'; } function initMirror() { diff --git a/jquery.autosize.min.js b/jquery.autosize.min.js index b22a242..3f7375f 100644 --- a/jquery.autosize.min.js +++ b/jquery.autosize.min.js @@ -1,7 +1,7 @@ /*! - Autosize v1.18.2 - 2014-01-06 + Autosize v1.18.3 - 2014-01-10 Automatically adjust textarea height based on user input. (c) 2014 Jack Moore - http://www.jacklmoore.com/autosize license: http://www.opensource.org/licenses/mit-license.php */ -(function(e){var t,o={className:"autosizejs",append:"",callback:!1,resizeDelay:10},i='<textarea tabindex="-1" style="position:absolute; top:-999px; left:0; right:auto; bottom:auto; border:0; padding: 0; -moz-box-sizing:content-box; -webkit-box-sizing:content-box; box-sizing:content-box; word-wrap:break-word; height:0 !important; min-height:0 !important; overflow:hidden; transition:none; -webkit-transition:none; -moz-transition:none;"/>',n=["fontFamily","fontSize","fontWeight","fontStyle","letterSpacing","textTransform","wordSpacing","textIndent"],s=e(i).data("autosize",!0)[0];s.style.lineHeight="99px","99px"===e(s).css("lineHeight")&&n.push("lineHeight"),s.style.lineHeight="",e.fn.autosize=function(i){return this.length?(i=e.extend({},o,i||{}),s.parentNode!==document.body&&e(document.body).append(s),this.each(function(){function o(){var t,o=window.getComputedStyle?window.getComputedStyle(u,null):!1;o?(t=u.getBoundingClientRect().width,e.each(["paddingLeft","paddingRight","borderLeftWidth","borderRightWidth"],function(e,i){t-=parseInt(o[i],10)}),s.style.width=t+"px"):s.style.width=Math.max(p.width(),0)+"px"}function a(){var a={};if(t=u,s.className=i.className,d=parseInt(p.css("maxHeight"),10),e.each(n,function(e,t){a[t]=p.css(t)}),e(s).css(a),o(),window.chrome){var r=u.style.width;u.style.width="0px",u.offsetWidth,u.style.width=r}}function r(){var e,n;t!==u?a():o(),s.value=u.value+i.append,s.style.overflowY=u.style.overflowY,n=parseInt(u.style.height,10),s.scrollTop=0,s.scrollTop=9e4,e=s.scrollTop,d&&e>d?(u.style.overflowY="scroll",e=d):(u.style.overflowY="hidden",c>e&&(e=c)),e+=w,n!==e&&(u.style.height=e+"px",f&&i.callback.call(u,u))}function l(){clearTimeout(h),h=setTimeout(function(){var e=p.width();e!==g&&(g=e,r())},parseInt(i.resizeDelay,10))}var d,c,h,u=this,p=e(u),w=0,f=e.isFunction(i.callback),z={height:u.style.height,overflow:u.style.overflow,overflowY:u.style.overflowY,wordWrap:u.style.wordWrap,resize:u.style.resize},g=p.width();p.data("autosize")||(p.data("autosize",!0),("border-box"===p.css("box-sizing")||"border-box"===p.css("-moz-box-sizing")||"border-box"===p.css("-webkit-box-sizing"))&&(w=p.outerHeight()-p.height()),c=Math.max(parseInt(p.css("minHeight"),10)-w||0,p.height()),p.css({overflow:"hidden",overflowY:"hidden",wordWrap:"break-word",resize:"none"===p.css("resize")||"vertical"===p.css("resize")?"none":"horizontal"}),"onpropertychange"in u?"oninput"in u?p.on("input.autosize keyup.autosize",r):p.on("propertychange.autosize",function(){"value"===event.propertyName&&r()}):p.on("input.autosize",r),i.resizeDelay!==!1&&e(window).on("resize.autosize",l),p.on("autosize.resize",r),p.on("autosize.resizeIncludeStyle",function(){t=null,r()}),p.on("autosize.destroy",function(){t=null,clearTimeout(h),e(window).off("resize",l),p.off("autosize").off(".autosize").css(z).removeData("autosize")}),r())})):this}})(window.jQuery||window.$);
\ No newline at end of file +(function(e){var t,o={className:"autosizejs",append:"",callback:!1,resizeDelay:10},i='<textarea tabindex="-1" style="position:absolute; top:-999px; left:0; right:auto; bottom:auto; border:0; padding: 0; -moz-box-sizing:content-box; -webkit-box-sizing:content-box; box-sizing:content-box; word-wrap:break-word; height:0 !important; min-height:0 !important; overflow:hidden; transition:none; -webkit-transition:none; -moz-transition:none;"/>',n=["fontFamily","fontSize","fontWeight","fontStyle","letterSpacing","textTransform","wordSpacing","textIndent"],s=e(i).data("autosize",!0)[0];s.style.lineHeight="99px","99px"===e(s).css("lineHeight")&&n.push("lineHeight"),s.style.lineHeight="",e.fn.autosize=function(i){return this.length?(i=e.extend({},o,i||{}),s.parentNode!==document.body&&e(document.body).append(s),this.each(function(){function o(){var t,o=window.getComputedStyle?window.getComputedStyle(u,null):!1;o?(t=u.getBoundingClientRect().width,0===t&&(t=parseInt(o.width,10)),e.each(["paddingLeft","paddingRight","borderLeftWidth","borderRightWidth"],function(e,i){t-=parseInt(o[i],10)})):t=Math.max(p.width(),0),s.style.width=t+"px"}function a(){var a={};if(t=u,s.className=i.className,d=parseInt(p.css("maxHeight"),10),e.each(n,function(e,t){a[t]=p.css(t)}),e(s).css(a),o(),window.chrome){var r=u.style.width;u.style.width="0px",u.offsetWidth,u.style.width=r}}function r(){var e,n;t!==u?a():o(),s.value=u.value+i.append,s.style.overflowY=u.style.overflowY,n=parseInt(u.style.height,10),s.scrollTop=0,s.scrollTop=9e4,e=s.scrollTop,d&&e>d?(u.style.overflowY="scroll",e=d):(u.style.overflowY="hidden",c>e&&(e=c)),e+=w,n!==e&&(u.style.height=e+"px",f&&i.callback.call(u,u))}function l(){clearTimeout(h),h=setTimeout(function(){var e=p.width();e!==g&&(g=e,r())},parseInt(i.resizeDelay,10))}var d,c,h,u=this,p=e(u),w=0,f=e.isFunction(i.callback),z={height:u.style.height,overflow:u.style.overflow,overflowY:u.style.overflowY,wordWrap:u.style.wordWrap,resize:u.style.resize},g=p.width();p.data("autosize")||(p.data("autosize",!0),("border-box"===p.css("box-sizing")||"border-box"===p.css("-moz-box-sizing")||"border-box"===p.css("-webkit-box-sizing"))&&(w=p.outerHeight()-p.height()),c=Math.max(parseInt(p.css("minHeight"),10)-w||0,p.height()),p.css({overflow:"hidden",overflowY:"hidden",wordWrap:"break-word",resize:"none"===p.css("resize")||"vertical"===p.css("resize")?"none":"horizontal"}),"onpropertychange"in u?"oninput"in u?p.on("input.autosize keyup.autosize",r):p.on("propertychange.autosize",function(){"value"===event.propertyName&&r()}):p.on("input.autosize",r),i.resizeDelay!==!1&&e(window).on("resize.autosize",l),p.on("autosize.resize",r),p.on("autosize.resizeIncludeStyle",function(){t=null,r()}),p.on("autosize.destroy",function(){t=null,clearTimeout(h),e(window).off("resize",l),p.off("autosize").off(".autosize").css(z).removeData("autosize")}),r())})):this}})(window.jQuery||window.$);
\ No newline at end of file diff --git a/package.json b/package.json index 9abd1c2..bc30933 100644 --- a/package.json +++ b/package.json @@ -1,7 +1,7 @@ { "name": "jquery-autosize", "description": "Automatically adjust textarea height based on user input.", - "version": "1.18.2", + "version": "1.18.3", "dependencies": {}, "keywords": [ "form", @@ -4,6 +4,9 @@ Small jQuery plugin to allow dynamic resizing of textarea height, so that it gro ## Changelog
+### v1.18.3 - 2014/1/10
+* Allow correct width calculation of hidden textarea elements, when they have a specified width. Fixes #134
+
### v1.18.2 - 2014/1/6
* Checked getComputedStyle return value to avoid potential error exception. Fixes #133
|