Skip to content

Commit dfd4a61

Browse files
authored
Merge pull request #382 from mauromascarenhas/restore-form-functions
Restore form functions
2 parents f5057d6 + d0ca109 commit dfd4a61

File tree

5 files changed

+30
-4
lines changed

5 files changed

+30
-4
lines changed

pug/contents/text_inputs_content.html

+3-3
Original file line numberDiff line numberDiff line change
@@ -308,10 +308,10 @@ <h3 class="header">Textarea</h3>
308308
&lt;/form>
309309
&lt;/div>
310310
</code></pre>
311-
<p>advanced note: When dynamically changing the value of a textarea with methods like jQuery's <code class="language-markup">.val()</code>, you must trigger an autoresize on it afterwords because .val() does not automatically trigger the events we've binded to the textarea. </p>
311+
<p><strong><b>Advanced note:</b></strong> When dynamically changing the value of a textarea like setting <code class="language-markup">HTMLElement#value</code> attribute, you must trigger an autoresize on it afterwords because simply updating the element's value does not automatically trigger the events we've binded to the textarea.</p>
312312
<pre><code class="language-javascript">
313-
$('#textarea1').val('New Text');
314-
M.textareaAutoResize($('#textarea1'));
313+
document.querySelector("#textarea1").value = 'New Text';
314+
M.Forms.textareaAutoResize(document.querySelector('#textarea1'));
315315
</code></pre>
316316

317317

src/forms.ts

+6-1
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,12 @@ import { M } from "./global";
22

33
export class Forms {
44

5-
static textareaAutoResize(textarea: HTMLTextAreaElement) {
5+
/**
6+
* Resizes the given TextArea after updating the
7+
* value content dynamically.
8+
* @param textarea TextArea to be resized
9+
*/
10+
static textareaAutoResize(textarea: HTMLTextAreaElement){
611
if (!textarea) {
712
console.error('No textarea element found');
813
return;

src/global.ts

+1
Original file line numberDiff line numberDiff line change
@@ -50,6 +50,7 @@ export class M {
5050
static Collapsible: typeof Collapsible = Collapsible;
5151
static Datepicker: typeof Datepicker = Datepicker;
5252
static CharacterCounter: typeof CharacterCounter = CharacterCounter;
53+
static Forms: typeof Forms = Forms;
5354
static FormSelect: typeof FormSelect = FormSelect;
5455
static Modal: typeof Modal = Modal;
5556
static Pushpin: typeof Pushpin = Pushpin;

tests/spec/forms/formsFixture.html

+4
Original file line numberDiff line numberDiff line change
@@ -46,3 +46,7 @@
4646
<label for="datetime-input">datetime</label>
4747
<input id="datetime-input" type="datetime-local" />
4848
</div>
49+
<div class="input-field">
50+
<textarea id="textarea" class="materialize-textarea"></textarea>
51+
<label for="textarea">Textarea</label>
52+
</div>

tests/spec/forms/formsSpec.js

+16
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,22 @@ describe('Forms:', function() {
1515
window.location.hash = "";
1616
});
1717

18+
describe('TextArea Resize', () => {
19+
it("Should resize", () => {
20+
const el = document.querySelector("#textarea");
21+
const pHeight = el.clientHeight;
22+
el.value = `
23+
Lorem ipsum dolor sit amet, consectetur adipiscing elit. Proin eleifend urna orci, vitae sagittis ligula maximus quis. Duis eleifend ipsum vitae facilisis tincidunt. Aliquam condimentum consequat ex, ut commodo purus tristique at. Donec malesuada fringilla libero vel sodales. Nulla finibus volutpat lectus a varius. Praesent consequat ornare pulvinar. Quisque nec massa diam.
24+
Nunc commodo tempus suscipit. Phasellus iaculis at lorem sit amet venenatis. Curabitur quis felis elementum enim fermentum dapibus. In pretium finibus mollis. Nam aliquet tristique diam sit amet ullamcorper. Suspendisse interdum, est sed aliquam dignissim, dolor augue tristique dui, non luctus felis dolor a dui. Suspendisse lacinia lorem nec enim ultricies maximus. Aenean quam erat, finibus non aliquam nec, pharetra vel metus. Nulla dignissim maximus cursus.
25+
Integer massa est, semper eget sem quis, bibendum scelerisque odio. Nam sit amet urna auctor, luctus odio in, semper dui. Sed ut gravida libero, ac consectetur sem. Etiam pharetra pulvinar leo, eget imperdiet purus faucibus in. Cras blandit mi ullamcorper nulla viverra posuere. Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. Donec pretium euismod tortor a lacinia. Vivamus ultrices vulputate purus et blandit. Fusce mi quam, consequat vitae pretium sed, tempus at ligula.
26+
Suspendisse sodales et dolor vitae sollicitudin. Curabitur sed vestibulum sapien. Integer porttitor pulvinar ullamcorper. Sed ultrices varius augue, at bibendum magna congue sit amet. Nam enim purus, fermentum sed feugiat viverra, accumsan nec diam. Donec a auctor est. Aenean non ante metus. Pellentesque ante ligula, varius vel dignissim in, euismod vel diam. Donec est ante, rhoncus at eros sed, cursus pulvinar enim. In pellentesque, erat eu egestas tempor, ipsum turpis ornare dui, sed fringilla sem lorem in ligula.
27+
Integer facilisis arcu eu posuere placerat. Nam vel leo magna. Proin mattis feugiat nisi, quis tincidunt magna pulvinar tincidunt. Aliquam eget nunc sapien. Maecenas vitae orci nunc. Nulla condimentum sapien quis sapien varius suscipit. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Phasellus non finibus nisl, et venenatis massa.
28+
`.trim();
29+
M.Forms.textareaAutoResize(el);
30+
expect(el.clientHeight).toBeGreaterThan(pHeight);
31+
});
32+
});
33+
1834
// No active class added, because it is now a css feature only
1935
/*
2036
it("should keep label active while focusing on input", function () {

0 commit comments

Comments
 (0)