UNPKG

ngx-trim-directive

Version:
1 lines 10.3 kB
{"version":3,"file":"ngx-trim-directive.mjs","sources":["../../../projects/ngx-trim-directive/src/lib/ngx-trim.directive.ts","../../../projects/ngx-trim-directive/src/lib/ngx-trim-directive.module.ts","../../../projects/ngx-trim-directive/src/public-api.ts","../../../projects/ngx-trim-directive/src/ngx-trim-directive.ts"],"sourcesContent":["import { Directive, ElementRef, HostListener, Input, OnDestroy, OnInit, Optional } from '@angular/core';\nimport { ControlValueAccessor, NgControl } from '@angular/forms';\n\n@Directive({\n selector: 'input[trim],textarea[trim]',\n})\nexport class NgxTrimDirective implements OnInit, OnDestroy {\n\n private _trim: TrimOption = '';\n @Input('trim')\n public set trim(trimOption: TrimOption) {\n if (trimOption !== '' && trimOption !== 'blur' && trimOption !== false) {\n console.warn(`Note: The value ${JSON.stringify(trimOption)} is not assignable to the trim attribute.\n Only blank string (\"\"), \"blur\" or false is allowed.`);\n\n this._trim = false;\n return;\n }\n\n this._trim = trimOption;\n\n setTimeout( // fix the `Expression has changed after it was checked` error\n\n () => {\n\n const elem = this.elementRef.nativeElement;\n\n const eleValue = elem.value;\n\n if (trimOption !== false && eleValue !== eleValue.trim()) {\n\n // initially trim the value if needed\n NgxTrimDirective.dispatchEvent(elem, 'blur');\n }\n\n },\n\n );\n }\n\n public get trim() {\n return this._trim;\n }\n\n @Input() trimOnWriteValue = true;\n\n private _valueAccessor: ControlValueAccessor | null = null;\n private _writeValue: ((value: any) => void) | null = null;\n\n constructor(\n private elementRef: ElementRef,\n @Optional() private ngControl: NgControl,\n ) {\n }\n\n private static getCaret(el: TrimElement) {\n\n return {\n start: el.selectionStart,\n end: el.selectionEnd,\n };\n\n }\n\n private static setCaret(el: TrimElement, start: number | null, end: number | null) {\n\n el.selectionStart = start;\n el.selectionEnd = end;\n\n el.focus();\n\n }\n\n private static dispatchEvent(el: TrimElement, eventType: string) {\n\n const event = new Event(eventType);\n el.dispatchEvent(event);\n\n }\n\n private static TrimOption(el: TrimElement, value: string) {\n\n el.value = value.trim();\n\n NgxTrimDirective.dispatchEvent(el, 'input');\n\n }\n\n ngOnInit(): void {\n\n if (!this.ngControl) {\n\n console.warn(\n 'Note: The trim directive should be used with one of ngModel, formControl or formControlName directives.');\n\n return;\n\n }\n\n this._valueAccessor = this.ngControl.valueAccessor;\n\n if (this._valueAccessor) {\n this._writeValue = this._valueAccessor.writeValue;\n this._valueAccessor.writeValue = (value) => {\n const _value =\n this.trim === false || !value || 'function' !== typeof value.trim || !this.trimOnWriteValue\n ? value\n : value.trim();\n\n if (this._writeValue) {\n this._writeValue.call(this._valueAccessor, _value);\n }\n\n if (value !== _value) {\n if ((this._valueAccessor as any)['onChange']) {\n (this._valueAccessor as any)['onChange'](_value);\n }\n\n if ((this._valueAccessor as any)['onTouched']) {\n (this._valueAccessor as any)['onTouched']();\n }\n }\n\n };\n }\n\n }\n\n ngOnDestroy(): void {\n\n if (this._valueAccessor && this._writeValue) {\n\n this._valueAccessor.writeValue = this._writeValue;\n\n }\n\n }\n\n @HostListener('blur', [\n '$event.target',\n '$event.target.value',\n ])\n onBlur(el: any, value: string): void {\n if (this.trim === false) {\n\n return;\n\n }\n\n if ((this.trim === '' || 'blur' === this.trim) && 'function' === typeof value.trim && value.trim() !== value) {\n\n NgxTrimDirective.TrimOption(el, value);\n NgxTrimDirective.dispatchEvent(el, 'blur'); // in case updateOn is set to blur\n\n }\n\n }\n\n @HostListener('input', [\n '$event.target',\n '$event.target.value',\n ])\n onInput(el: any, value: string): void {\n\n if (this.trim === false) {\n\n return;\n\n }\n\n if (this.trim === '' && 'function' === typeof value.trim && value.trim() !== value) {\n\n let { start, end } = NgxTrimDirective.getCaret(el);\n\n if (value[0] === ' ' && start === 1 && end === 1) {\n\n start = 0;\n end = 0;\n\n }\n\n NgxTrimDirective.TrimOption(el, value);\n\n NgxTrimDirective.setCaret(el, start, end);\n\n }\n\n }\n\n}\n\ntype TrimElement = HTMLInputElement | HTMLTextAreaElement;\n\nexport type TrimOption = '' | 'blur' | false;\n","import { NgModule } from '@angular/core';\nimport { NgxTrimDirective } from './ngx-trim.directive';\n\n\n\n@NgModule({\n declarations: [\n NgxTrimDirective,\n ],\n imports: [],\n exports: [\n NgxTrimDirective,\n ],\n})\nexport class NgxTrimDirectiveModule {\n}\n","/*\n * Public API Surface of ngx-trim-directive\n */\n\nexport * from './lib/ngx-trim.directive';\nexport * from './lib/ngx-trim-directive.module';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}