@@ -42,6 +42,7 @@ define(['jquery'], function($) {
4242 */
4343 var calculateRows = function ( element ) {
4444 var currentRows = element . attr ( 'rows' ) ;
45+ var minRows = element . data ( 'min-rows' ) ;
4546 var maxRows = element . attr ( 'data-max-rows' ) ;
4647
4748 var height = element . height ( ) ;
@@ -58,13 +59,38 @@ define(['jquery'], function($) {
5859 // based on the row attribute.
5960 element . css ( 'height' , '' ) ;
6061
61- if ( maxRows && rows >= maxRows ) {
62+ if ( rows < minRows ) {
63+ return minRows ;
64+ } else if ( maxRows && rows >= maxRows ) {
6265 return maxRows ;
6366 } else {
6467 return rows ;
6568 }
6669 } ;
6770
71+ /**
72+ * Listener for change events to trigger resizing of the element.
73+ *
74+ * @method changeListener
75+ * @param {Event } e The triggered event.
76+ * @private
77+ */
78+ var changeListener = function ( e ) {
79+ var element = $ ( e . target ) ;
80+ var minRows = element . data ( 'min-rows' ) ;
81+ var currentRows = element . attr ( 'rows' ) ;
82+
83+ if ( typeof minRows === "undefined" ) {
84+ element . data ( 'min-rows' , currentRows ) ;
85+ }
86+ var rows = calculateRows ( element ) ;
87+
88+ if ( rows != currentRows ) {
89+ element . attr ( 'rows' , rows ) ;
90+ element . trigger ( EVENTS . ROW_CHANGE ) ;
91+ }
92+ } ;
93+
6894 /**
6995 * Add the event listeners for all text areas within the given element.
7096 *
@@ -73,16 +99,11 @@ define(['jquery'], function($) {
7399 * @public
74100 */
75101 var init = function ( root ) {
76- $ ( root ) . on ( 'input propertychange' , SELECTORS . ELEMENT , function ( e ) {
77- var element = $ ( e . target ) ;
78- var currentRows = element . attr ( 'rows' ) ;
79- var rows = calculateRows ( element ) ;
80-
81- if ( rows != currentRows ) {
82- element . attr ( 'rows' , rows ) ;
83- $ ( root ) . trigger ( EVENTS . ROW_CHANGE ) ;
84- }
85- } ) ;
102+ if ( $ ( root ) . data ( 'auto-rows' ) ) {
103+ $ ( root ) . on ( 'input propertychange' , changeListener . bind ( this ) ) ;
104+ } else {
105+ $ ( root ) . on ( 'input propertychange' , SELECTORS . ELEMENT , changeListener . bind ( this ) ) ;
106+ }
86107 } ;
87108
88109 return /** @module core/auto_rows */ {
0 commit comments