42
42
.hero .mdc-textfield {
43
43
min-width : 240px ;
44
44
}
45
+
46
+ .demo-note {
47
+ padding : 20px ;
48
+ margin : 20px 0 ;
49
+ background-color : # f2f2f2 ;
50
+ }
51
+
52
+ .custom-textfield-input {
53
+ width : 300px ;
54
+ }
55
+
56
+ .full-width-textarea-example {
57
+ margin-top : 16px ;
58
+ }
59
+
45
60
</ style >
46
61
</ head >
47
62
< body >
60
75
< section class ="hero ">
61
76
< div class ="mdc-textfield ">
62
77
< input type ="text " class ="mdc-textfield__input " id ="my-textfield "
63
- name ="email " aria-controls ="my-textfield-helptext "
64
- data-demo-no-auto-js autocomplete ="email ">
78
+ aria-controls ="my-textfield-helptext " data-demo-no-auto-js >
65
79
< label for ="my-textfield " class ="mdc-textfield__label "> Text Field</ label >
80
+ < div class ="mdc-textfield__bottom-line "> </ div >
66
81
</ div >
67
82
</ section >
68
83
73
88
</ em > </ section >
74
89
75
90
< section class ="example ">
76
- < h2 > Full Functionality JS Component (Floating Label, Validation, Autocomplete )</ h2 >
91
+ < h2 > Full Functionality JS Component (Floating Label, Validation)</ h2 >
77
92
< section id ="demo-textfield-wrapper ">
78
93
< div class ="mdc-textfield ">
79
94
< input type ="text " class ="mdc-textfield__input " id ="my-textfield "
80
- name ="email " aria-controls ="my-textfield-helptext "
81
- data-demo-no-auto-js autocomplete ="email ">
95
+ aria-controls ="my-textfield-helptext " data-demo-no-auto-js >
82
96
< label for ="my-textfield " class ="mdc-textfield__label "> Email Address</ label >
97
+ < div class ="mdc-textfield__bottom-line "> </ div >
83
98
</ div >
84
99
< p id ="my-textfield-helptext " class ="mdc-textfield-helptext "
85
100
aria-hidden ="true " style ="display:none; ">
@@ -128,6 +143,7 @@ <h2>Password field with validation</h2>
128
143
aria-controls ="pw-validation-msg "
129
144
autocomplete ="current-password ">
130
145
< label for ="pw " class ="mdc-textfield__label "> Choose password</ label >
146
+ < div class ="mdc-textfield__bottom-line "> </ div >
131
147
</ div >
132
148
< p class ="mdc-textfield-helptext mdc-textfield-helptext--persistent mdc-textfield-helptext--validation-msg "
133
149
id ="pw-validation-msg ">
@@ -138,7 +154,7 @@ <h2>Password field with validation</h2>
138
154
< h2 > Textfield box</ h2 >
139
155
< div id ="demo-tf-box-wrapper ">
140
156
< div id ="tf-box-example " class ="mdc-textfield mdc-textfield--box " data-demo-no-auto-js >
141
- < input type ="text " id ="tf-box " class ="mdc-textfield__input " required
157
+ < input required pattern =" .{8,} " type ="text " id ="tf-box " class ="mdc-textfield__input "
142
158
aria-controls ="name-validation-message ">
143
159
< label for ="tf-box " class ="mdc-textfield__label "> Your Name</ label >
144
160
< div class ="mdc-textfield__bottom-line "> </ div >
@@ -194,12 +210,73 @@ <h2>Textfield box</h2>
194
210
} , 0 ) ;
195
211
</ script >
196
212
</ section >
213
+
214
+ < section class ="example ">
215
+ < h2 > Textfield - Leading/Trailing icons</ h2 >
216
+ < div class ="demo-note ">
217
+ < em >
218
+ Note: Some implementations utilizing leading and trailing icons may wish to set a width on the
219
+ < code > input</ code > element to achieve uniform widths on textfields.
220
+ This demo achieves that by adding a custom class name: < code > custom-textfield-input</ code > and setting
221
+ some style:
222
+ </ em >
223
+ < br />
224
+ <!--
225
+ The following text formatting achieves the visual output we are aiming for
226
+ since the <pre> tag honors whitespace and line breaks.
227
+ -->
228
+ < pre >
229
+ < code > .custom-textfield-input {
230
+ width: 300px;
231
+ }</ code > </ pre >
232
+ </ div >
233
+ < div id ="demo-tf-box-leading-wrapper ">
234
+ < div id ="tf-box-leading-example "
235
+ class ="mdc-textfield mdc-textfield--box mdc-textfield--with-leading-icon " data-demo-no-auto-js >
236
+ < i class ="material-icons mdc-textfield__icon " tabindex ="0 "> event</ i >
237
+ < input type ="text " id ="tf-box-leading " class ="mdc-textfield__input custom-textfield-input ">
238
+ < label for ="tf-box-leading " class ="mdc-textfield__label "> Your name</ label >
239
+ < div class ="mdc-textfield__bottom-line "> </ div >
240
+ </ div >
241
+ </ div >
242
+ < div id ="demo-tf-box-trailing-wrapper ">
243
+ < div id ="tf-box-trailing-example "
244
+ class ="mdc-textfield mdc-textfield--box mdc-textfield--with-trailing-icon " data-demo-no-auto-js >
245
+ < input type ="text " id ="tf-box-trailing " class ="mdc-textfield__input custom-textfield-input ">
246
+ < label for ="tf-box-trailing " class ="mdc-textfield__label "> Your other name</ label >
247
+ < i class ="material-icons mdc-textfield__icon " tabindex ="0 "> delete</ i >
248
+ < div class ="mdc-textfield__bottom-line "> </ div >
249
+ </ div >
250
+ </ div >
251
+ < div >
252
+ < input id ="box-disable-leading-trailing " type ="checkbox ">
253
+ < label for ="box-disable-leading-trailing "> Disabled</ label >
254
+ </ div >
255
+ < div >
256
+ < input id ="box-rtl-leading-trailing " type ="checkbox ">
257
+ < label for ="box-rtl-leading-trailing "> RTL</ label >
258
+ </ div >
259
+ < div >
260
+ < input id ="box-dark-theme-leading-trailing " type ="checkbox ">
261
+ < label for ="box-dark-theme-leading-trailing "> Dark Theme</ label >
262
+ </ div >
263
+ < div >
264
+ < input id ="box-dense-leading-trailing " type ="checkbox ">
265
+ < label for ="box-dense-leading-trailing "> Dense</ label >
266
+ </ div >
267
+ < div >
268
+ < input id ="box-unclickable-leading-trailing " type ="checkbox ">
269
+ < label for ="box-unclickable-leading-trailing "> Unclickable icons</ label >
270
+ </ div >
271
+ </ section >
272
+
197
273
< section class ="example ">
198
274
< h2 > CSS Only Textfield</ h2 >
199
275
< div class ="mdc-form-field mdc-form-field--align-end ">
200
276
< div class ="mdc-textfield " data-demo-no-auto-js >
201
277
< input type ="text " class ="mdc-textfield__input " id ="css-only-textfield "
202
278
placeholder ="Name ">
279
+ < div class ="mdc-textfield__bottom-line "> </ div >
203
280
</ div >
204
281
< label for ="css-only-textfield "> Your name:</ label >
205
282
</ div >
@@ -221,51 +298,55 @@ <h2>Preventing FOUC</h2>
221
298
< label for ="fouc " class ="mdc-textfield__label mdc-textfield__label--float-above ">
222
299
Label floating above
223
300
</ label >
301
+ < div class ="mdc-textfield__bottom-line "> </ div >
224
302
</ div >
225
303
</ section >
304
+
226
305
< section class ="example ">
227
- < h2 > Multi-line Textfields </ h2 >
228
- < section id ="demo-textfield-multiline -wrapper " style =" overflow:hidden; ">
229
- < div class ="mdc-textfield mdc-textfield--multiline ">
230
- < textarea id ="multi-line " class ="mdc-textfield__input " rows ="8 " cols ="40 "> </ textarea >
231
- < label for ="multi-line " class ="mdc-textfield__label "> Multi-line Label</ label >
306
+ < h2 > Textarea </ h2 >
307
+ < section id ="demo-textfield-textarea -wrapper ">
308
+ < div class ="mdc-textfield mdc-textfield--textarea ">
309
+ < textarea id ="textarea " class ="mdc-textfield__input " rows ="8 " cols ="40 "> </ textarea >
310
+ < label for ="textarea " class ="mdc-textfield__label "> Textarea Label</ label >
232
311
</ div >
233
312
</ section >
234
313
< div >
235
- < input id ="multi -disable " type ="checkbox ">
236
- < label for ="multi -disable "> Disabled</ label >
314
+ < input id ="textarea -disable " type ="checkbox ">
315
+ < label for ="textarea -disable "> Disabled</ label >
237
316
</ div >
238
317
< div >
239
- < input id ="multi -rtl " type ="checkbox ">
240
- < label for ="multi -rtl "> RTL</ label >
318
+ < input id ="textarea -rtl " type ="checkbox ">
319
+ < label for ="textarea -rtl "> RTL</ label >
241
320
</ div >
242
321
< div >
243
- < input id ="multi -dark-theme " type ="checkbox ">
244
- < label for ="multi -dark-theme "> Dark Theme</ label >
322
+ < input id ="textarea -dark-theme " type ="checkbox ">
323
+ < label for ="textarea -dark-theme "> Dark Theme</ label >
245
324
</ div >
246
325
< div >
247
- < input id ="multi -required " type ="checkbox ">
248
- < label for ="multi -required "> Required</ label >
326
+ < input id ="textarea -required " type ="checkbox ">
327
+ < label for ="textarea -required "> Required</ label >
249
328
</ div >
250
329
</ section >
330
+
251
331
< section class ="example ">
252
- < h2 > Multi-line Textfields - CSS Only</ h2 >
253
- < label for ="css-only-multiline " style ="margin-bottom:4px; "> About you:</ label >
254
- < div class ="mdc-textfield mdc-textfield--multiline " data-demo-no-auto-js >
255
- < textarea class ="mdc-textfield__input "
256
- id ="css-only-multiline "
257
- rows ="8 " cols ="40 "
258
- placeholder ="Tell the world something about yourself! "> </ textarea >
259
- </ div >
332
+ < h2 > CSS Only Textarea</ h2 >
333
+ < section >
334
+ < div class ="mdc-textfield mdc-textfield--textarea " data-demo-no-auto-js >
335
+ < textarea id ="textarea-css-only " class ="mdc-textfield__input " rows ="8 " cols ="40 " placeholder ="Enter something about yourself "> </ textarea >
336
+ </ div >
337
+ </ section >
260
338
</ section >
339
+
261
340
< section class ="example ">
262
- < h2 > Full-Width Textfields </ h2 >
341
+ < h2 > Full-Width Textfield and Textarea </ h2 >
263
342
< div id ="demo-fullwidth-wrapper ">
264
- < div class ="mdc-textfield mdc-textfield--fullwidth " data-demo-no-auto-js >
343
+ < div class ="mdc-textfield mdc-textfield--fullwidth ">
265
344
< input class ="mdc-textfield__input " type ="text " placeholder ="Subject " aria-label ="Subject ">
345
+ < div class ="mdc-textfield__bottom-line "> </ div >
266
346
</ div >
267
- < div class ="mdc-textfield mdc-textfield--multiline mdc-textfield--fullwidth " data-demo-no-auto-js >
268
- < textarea class ="mdc-textfield__input " placeholder ="Message " rows ="8 " cols ="40 " aria-label ="Message "> </ textarea >
347
+ < div class ="mdc-textfield mdc-textfield--textarea mdc-textfield--fullwidth full-width-textarea-example ">
348
+ < textarea id ="full-width-textarea " class ="mdc-textfield__input " rows ="8 "> </ textarea >
349
+ < label for ="full-width-textarea " class ="mdc-textfield__label "> Textarea Label</ label >
269
350
</ div >
270
351
</ div >
271
352
< div >
@@ -293,6 +374,55 @@ <h2>Full-Width Textfields</h2>
293
374
}
294
375
} ) ( ) ;
295
376
</ script >
377
+ < script >
378
+ setTimeout ( function ( ) {
379
+ var tfLeadingEl = document . getElementById ( 'tf-box-leading-example' ) ;
380
+ var tfLeading = new mdc . textfield . MDCTextfield ( tfLeadingEl ) ;
381
+ var wrapperLeading = document . getElementById ( 'demo-tf-box-leading-wrapper' ) ;
382
+
383
+ var tfTrailingEl = document . getElementById ( 'tf-box-trailing-example' ) ;
384
+ var tfTrailing = new mdc . textfield . MDCTextfield ( tfTrailingEl ) ;
385
+ var wrapperTrailing = document . getElementById ( 'demo-tf-box-trailing-wrapper' ) ;
386
+
387
+ var tfIcons = document . querySelectorAll ( '.mdc-textfield__icon' ) ;
388
+
389
+ document . getElementById ( 'box-disable-leading-trailing' ) . addEventListener ( 'change' , function ( evt ) {
390
+ tfLeading . disabled = evt . target . checked ;
391
+ tfTrailing . disabled = evt . target . checked ;
392
+ } ) ;
393
+
394
+ document . getElementById ( 'box-rtl-leading-trailing' ) . addEventListener ( 'change' , function ( evt ) {
395
+ if ( evt . target . checked ) {
396
+ wrapperLeading . setAttribute ( 'dir' , 'rtl' ) ;
397
+ wrapperTrailing . setAttribute ( 'dir' , 'rtl' ) ;
398
+ } else {
399
+ wrapperLeading . removeAttribute ( 'dir' ) ;
400
+ wrapperTrailing . removeAttribute ( 'dir' ) ;
401
+ }
402
+ tfLeading . ripple . layout ( ) ;
403
+ tfTrailing . ripple . layout ( ) ;
404
+ } ) ;
405
+
406
+ document . getElementById ( 'box-dark-theme-leading-trailing' ) . addEventListener ( 'change' , function ( evt ) {
407
+ wrapperLeading . classList [ evt . target . checked ? 'add' : 'remove' ] ( 'mdc-theme--dark' ) ;
408
+ wrapperTrailing . classList [ evt . target . checked ? 'add' : 'remove' ] ( 'mdc-theme--dark' ) ;
409
+ } ) ;
410
+
411
+ document . getElementById ( 'box-dense-leading-trailing' ) . addEventListener ( 'change' , function ( evt ) {
412
+ tfLeadingEl . classList [ evt . target . checked ? 'add' : 'remove' ] ( 'mdc-textfield--dense' ) ;
413
+ tfLeading . ripple . layout ( ) ;
414
+ tfTrailingEl . classList [ evt . target . checked ? 'add' : 'remove' ] ( 'mdc-textfield--dense' ) ;
415
+ tfTrailing . ripple . layout ( ) ;
416
+ } ) ;
417
+
418
+ document . getElementById ( 'box-unclickable-leading-trailing' ) . addEventListener ( 'change' , function ( evt ) {
419
+ [ ] . slice . call ( tfIcons ) . forEach ( function ( icon ) {
420
+ icon . setAttribute ( 'tabindex' , evt . target . checked ? '-1' : '0' ) ;
421
+ } ) ;
422
+ } ) ;
423
+
424
+ } , 0 ) ;
425
+ </ script >
296
426
< script >
297
427
( function ( ) {
298
428
var section = document . getElementById ( 'demo-textfield-wrapper' ) ;
@@ -347,26 +477,26 @@ <h2>Full-Width Textfields</h2>
347
477
</ script >
348
478
< script >
349
479
( function ( ) {
350
- var section = document . getElementById ( 'demo-textfield-multiline -wrapper' ) ;
480
+ var section = document . getElementById ( 'demo-textfield-textarea -wrapper' ) ;
351
481
var tfRoot = section . querySelector ( '.mdc-textfield' ) ;
352
482
var tf = new mdc . textfield . MDCTextfield ( tfRoot ) ;
353
- document . getElementById ( 'multi -disable' ) . addEventListener ( 'change' , function ( evt ) {
483
+ document . getElementById ( 'textarea -disable' ) . addEventListener ( 'change' , function ( evt ) {
354
484
var target = evt . target ;
355
485
tf . disabled = target . checked ;
356
486
} ) ;
357
- document . getElementById ( 'multi -rtl' ) . addEventListener ( 'change' , function ( evt ) {
487
+ document . getElementById ( 'textarea -rtl' ) . addEventListener ( 'change' , function ( evt ) {
358
488
var target = evt . target ;
359
489
if ( target . checked ) {
360
490
section . setAttribute ( 'dir' , 'rtl' ) ;
361
491
} else {
362
492
section . removeAttribute ( 'dir' ) ;
363
493
}
364
494
} ) ;
365
- document . getElementById ( 'multi -dark-theme' ) . addEventListener ( 'change' , function ( evt ) {
495
+ document . getElementById ( 'textarea -dark-theme' ) . addEventListener ( 'change' , function ( evt ) {
366
496
var target = evt . target ;
367
497
section . classList [ target . checked ? 'add' : 'remove' ] ( 'mdc-theme--dark' ) ;
368
498
} ) ;
369
- document . getElementById ( 'multi -required' ) . addEventListener ( 'change' , function ( evt ) {
499
+ document . getElementById ( 'textarea -required' ) . addEventListener ( 'change' , function ( evt ) {
370
500
var target = evt . target ;
371
501
tfRoot . querySelector ( '.mdc-textfield__input' ) . required = target . checked ;
372
502
} ) ;
@@ -376,7 +506,7 @@ <h2>Full-Width Textfields</h2>
376
506
( function ( ) {
377
507
var section = document . getElementById ( 'demo-fullwidth-wrapper' ) ;
378
508
var tfRoot = section . querySelector ( '.mdc-textfield' ) ;
379
- var tfMultiRoot = section . querySelector ( '.mdc-textfield--multiline ' ) ;
509
+ var tfMultiRoot = section . querySelector ( '.mdc-textfield--textarea ' ) ;
380
510
var tf = new mdc . textfield . MDCTextfield ( tfRoot ) ;
381
511
var tfMulti = new mdc . textfield . MDCTextfield ( tfMultiRoot ) ;
382
512
0 commit comments