From e0fc5266e827733eb2447cdc0a0800582ae6da3a Mon Sep 17 00:00:00 2001
From: mmalerba
Date: Thu, 20 Jul 2017 10:57:50 -0700
Subject: [PATCH] fix(input): add overflow:hidden when calculating autosize
height (#5773)
---
e2e/components/input-e2e.spec.ts | 21 +++++++++++++++++++++
src/demo-app/input/input-demo.html | 3 ++-
src/e2e-app/input/input-e2e.html | 6 ++++++
src/lib/input/autosize.ts | 3 +++
4 files changed, 32 insertions(+), 1 deletion(-)
diff --git a/e2e/components/input-e2e.spec.ts b/e2e/components/input-e2e.spec.ts
index 484ed708acbe..b5be90caacad 100644
--- a/e2e/components/input-e2e.spec.ts
+++ b/e2e/components/input-e2e.spec.ts
@@ -1,4 +1,5 @@
import {browser, by, element} from 'protractor';
+import {screenshot} from '../screenshot';
describe('input', () => {
@@ -53,4 +54,24 @@ describe('input', () => {
expect(input.getAttribute('value')).toBe('abc123');
});
});
+
+ describe('autosize-textarea', () => {
+ beforeEach(() => browser.get('/input'));
+
+ it('should resize correctly', () => {
+ let input = element(by.id('autosize-text-area'));
+ input.sendKeys('aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa');
+ screenshot('autosize multiple rows');
+ });
+
+ it('should enfore max rows', () => {
+ let input = element(by.id('autosize-text-area'));
+ input.sendKeys(
+ 'aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa' +
+ 'aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa' +
+ 'aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa' +
+ 'aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa');
+ screenshot('autosize more than max rows');
+ });
+ });
});
diff --git a/src/demo-app/input/input-demo.html b/src/demo-app/input/input-demo.html
index f3b5cc952d94..fb7a77e6d2ad 100644
--- a/src/demo-app/input/input-demo.html
+++ b/src/demo-app/input/input-demo.html
@@ -394,13 +394,14 @@ Textarea
Textarea Autosize
Regular <textarea>
-
+
<textarea> with md-input-container
diff --git a/src/e2e-app/input/input-e2e.html b/src/e2e-app/input/input-e2e.html
index 811883152282..eec53d27dd16 100644
--- a/src/e2e-app/input/input-e2e.html
+++ b/src/e2e-app/input/input-e2e.html
@@ -14,4 +14,10 @@
+
+
+
+
+
diff --git a/src/lib/input/autosize.ts b/src/lib/input/autosize.ts
index 255b3dd49261..796b03ca0ce7 100644
--- a/src/lib/input/autosize.ts
+++ b/src/lib/input/autosize.ts
@@ -136,10 +136,13 @@ export class MdTextareaAutosize implements AfterViewInit {
}
// Reset the textarea height to auto in order to shrink back to its default size.
+ // Also temporarily force overflow:hidden, so scroll bars do not interfere with calculations.
textarea.style.height = 'auto';
+ textarea.style.overflow = 'hidden';
// Use the scrollHeight to know how large the textarea *would* be if fit its entire value.
textarea.style.height = `${textarea.scrollHeight}px`;
+ textarea.style.overflow = '';
this._previousValue = textarea.value;
}