Skip to content

Commit 1da8f69

Browse files
authored
Merge pull request yannbf#26 from lohanidamodar/develop
Add auto adjusting textarea component
2 parents 724efcb + 54715b0 commit 1da8f69

File tree

6 files changed

+69
-0
lines changed

6 files changed

+69
-0
lines changed

src/app/app.imports.ts

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -90,6 +90,7 @@ import { BarcodescannerPage } from '../pages/miscellaneous/barcodescanner/barcod
9090
import { ExpandableHeaderPage } from '../pages/miscellaneous/expandable-header/expandable-header';
9191
import { FlashCardPage } from '../pages/miscellaneous/flash-card/flash-card';
9292
import { SideMenuPage } from '../pages/side-menu/side-menu';
93+
import { AutosizingTextarea } from '../pages/miscellaneous/autosizing-textarea/autosizing-textarea';
9394

9495
// Providers
9596
import { WeatherService } from '../pages/miscellaneous/weather/weather.service';
@@ -108,6 +109,7 @@ import { SplashScreen } from '@ionic-native/splash-screen';
108109

109110
// Directives
110111
import { SlidingDrawer } from '../components/sliding-drawer/sliding-drawer';
112+
import { Autosize } from '../components/autosize/autosize';
111113

112114
// Components
113115
import { Timer } from '../components/countdown-timer/timer';
@@ -204,6 +206,7 @@ export const Pages = [
204206
FlashCardPage,
205207
BarcodescannerPage,
206208
ExpandableHeaderPage,
209+
AutosizingTextarea,
207210

208211
// Modals
209212
PopupModalsPage,
@@ -261,4 +264,5 @@ export const Directives = [
261264
SlidingDrawer,
262265
Timer,
263266
TypingEffect,
267+
Autosize,
264268
]

src/components/autosize/autosize.ts

Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
1+
import {ElementRef, HostListener, Directive, OnInit} from '@angular/core';
2+
3+
@Directive({
4+
selector: 'ion-textarea[autosize]'
5+
})
6+
7+
export class Autosize implements OnInit {
8+
@HostListener('input', ['$event.target'])
9+
onInput(textArea:HTMLTextAreaElement):void {
10+
this.adjust();
11+
}
12+
13+
constructor(public element:ElementRef) {
14+
}
15+
16+
ngOnInit():void {
17+
setTimeout(() => this.adjust(), 0);
18+
}
19+
20+
adjust():void {
21+
let textArea = this.element.nativeElement.getElementsByTagName('textarea')[0];
22+
textArea.style.overflow = 'hidden';
23+
textArea.style.height = 'auto';
24+
textArea.style.height = textArea.scrollHeight + "px";
25+
}
26+
}
Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
<ion-header>
2+
3+
<ion-navbar>
4+
<ion-title>Autosizing Textarea</ion-title>
5+
</ion-navbar>
6+
7+
</ion-header>
8+
9+
10+
<ion-content padding>
11+
<ion-item>
12+
<ion-textarea name="dummyText" [(ngModel)]="dummyText" autosize></ion-textarea>
13+
</ion-item>
14+
</ion-content>
Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
page-autosizing-textarea {
2+
3+
}
Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
import { Component } from '@angular/core';
2+
import { NavController, NavParams } from 'ionic-angular';
3+
4+
@Component({
5+
selector: 'page-autosizing-textarea',
6+
templateUrl: 'autosizing-textarea.html',
7+
})
8+
export class AutosizingTextarea {
9+
dummyText: string = 'Hello I am autosizing textarea. I automatically adjusts to accommodate my content. I increases and decreases my size based on my content. Try by removing few lines or adding few new lines of text to see what I am able to do.';
10+
constructor(public navCtrl: NavController, public navParams: NavParams) {
11+
}
12+
13+
ionViewDidLoad() {
14+
15+
}
16+
17+
}

src/pages/miscellaneous/miscellaneous.ts

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@ import { TinderCardsPage } from './tinder-cards/tinder-cards';
1414
import { Component } from '@angular/core';
1515
import { RuntimePermissionsPage } from './runtime-permissions/runtime-permissions';
1616
import { ExpandableHeaderPage } from './expandable-header/expandable-header';
17+
import { AutosizingTextarea } from './autosizing-textarea/autosizing-textarea'
1718

1819
import { NavController, MenuController } from 'ionic-angular';
1920

@@ -79,6 +80,10 @@ export class MiscellaneousListPage {
7980
title: 'Expandable Header',
8081
page: ExpandableHeaderPage
8182
},
83+
{
84+
title: 'Autosizing Textarea',
85+
page: AutosizingTextarea
86+
}
8287
// {
8388
// title: 'Weather',
8489
// page: WeatherPage

0 commit comments

Comments
 (0)