UNPKG

ngx-upper-case-directive

Version:

This directive helps to convert an input text value to upper case.

58 lines 7.59 kB
import { Directive, HostListener, Input, } from '@angular/core'; import * as i0 from "@angular/core"; export class NgxUpperCaseDirective { getCaret(el) { return { start: el.selectionStart, end: el.selectionEnd, }; } setCaret(el, start, end) { el.selectionStart = start; el.selectionEnd = end; el.focus(); } dispatchEvent(el, eventType) { const event = document.createEvent('Event'); event.initEvent(eventType, false, false); el.dispatchEvent(event); } convertValue(el, value) { el.value = value.toUpperCase(); this.dispatchEvent(el, 'input'); } onBlur(el, value) { if ((!this.upperCase || 'blur' === this.upperCase) && 'function' === typeof value.toUpperCase && value.toUpperCase() !== value) { this.convertValue(el, value); this.dispatchEvent(el, 'blur'); // in case updateOn is set to blur } } onInput(el, value) { if (!this.upperCase && 'function' === typeof value.toUpperCase && value.toUpperCase() !== value) { let { start, end } = this.getCaret(el); if (value[0] === ' ' && start === 1 && end === 1) { start = 0; end = 0; } this.convertValue(el, value); this.setCaret(el, start, end); } } } /** @nocollapse */ /** @nocollapse */ NgxUpperCaseDirective.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.2.3", ngImport: i0, type: NgxUpperCaseDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive }); /** @nocollapse */ /** @nocollapse */ NgxUpperCaseDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "12.0.0", version: "13.2.3", type: NgxUpperCaseDirective, selector: "input[upperCase]:not([lowerCase]),textarea[upperCase]:not([lowerCase])", inputs: { upperCase: "upperCase" }, host: { listeners: { "blur": "onBlur($event.target,$event.target.value)", "input": "onInput($event.target,$event.target.value)" } }, ngImport: i0 }); i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.2.3", ngImport: i0, type: NgxUpperCaseDirective, decorators: [{ type: Directive, args: [{ selector: 'input[upperCase]:not([lowerCase]),textarea[upperCase]:not([lowerCase])', }] }], propDecorators: { upperCase: [{ type: Input }], onBlur: [{ type: HostListener, args: ['blur', ['$event.target', '$event.target.value']] }], onInput: [{ type: HostListener, args: ['input', ['$event.target', '$event.target.value']] }] } }); //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmd4LXVwcGVyLWNhc2UuZGlyZWN0aXZlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vcHJvamVjdHMvbmd4LXVwcGVyLWNhc2UtZGlyZWN0aXZlL3NyYy9saWIvbmd4LXVwcGVyLWNhc2UuZGlyZWN0aXZlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDTCxTQUFTLEVBQ1QsWUFBWSxFQUNaLEtBQUssR0FDTixNQUFNLGVBQWUsQ0FBQzs7QUFLdkIsTUFBTSxPQUFPLHFCQUFxQjtJQUl4QixRQUFRLENBQUUsRUFBRTtRQUVsQixPQUFPO1lBQ0wsS0FBSyxFQUFFLEVBQUUsQ0FBQyxjQUFjO1lBQ3hCLEdBQUcsRUFBRSxFQUFFLENBQUMsWUFBWTtTQUNyQixDQUFDO0lBRUosQ0FBQztJQUVPLFFBQVEsQ0FBRSxFQUFFLEVBQUUsS0FBSyxFQUFFLEdBQUc7UUFFOUIsRUFBRSxDQUFDLGNBQWMsR0FBRyxLQUFLLENBQUM7UUFDMUIsRUFBRSxDQUFDLFlBQVksR0FBRyxHQUFHLENBQUM7UUFFdEIsRUFBRSxDQUFDLEtBQUssRUFBRSxDQUFDO0lBRWIsQ0FBQztJQUVPLGFBQWEsQ0FBRSxFQUFFLEVBQUUsU0FBUztRQUVsQyxNQUFNLEtBQUssR0FBRyxRQUFRLENBQUMsV0FBVyxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBQzVDLEtBQUssQ0FBQyxTQUFTLENBQUMsU0FBUyxFQUFFLEtBQUssRUFBRSxLQUFLLENBQUMsQ0FBQztRQUN6QyxFQUFFLENBQUMsYUFBYSxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBRTFCLENBQUM7SUFFTyxZQUFZLENBQUUsRUFBRSxFQUFFLEtBQUs7UUFFN0IsRUFBRSxDQUFDLEtBQUssR0FBRyxLQUFLLENBQUMsV0FBVyxFQUFFLENBQUM7UUFFL0IsSUFBSSxDQUFDLGFBQWEsQ0FBQyxFQUFFLEVBQUUsT0FBTyxDQUFDLENBQUM7SUFFbEMsQ0FBQztJQUdELE1BQU0sQ0FBRSxFQUFPLEVBQUUsS0FBYTtRQUU1QixJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsU0FBUyxJQUFJLE1BQU0sS0FBSyxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksVUFBVSxLQUFLLE9BQU8sS0FBSyxDQUFDLFdBQVcsSUFBSSxLQUFLLENBQUMsV0FBVyxFQUFFLEtBQUssS0FBSyxFQUFFO1lBRTlILElBQUksQ0FBQyxZQUFZLENBQUMsRUFBRSxFQUFFLEtBQUssQ0FBQyxDQUFDO1lBQzdCLElBQUksQ0FBQyxhQUFhLENBQUMsRUFBRSxFQUFFLE1BQU0sQ0FBQyxDQUFDLENBQUMsa0NBQWtDO1NBRW5FO0lBRUgsQ0FBQztJQUdELE9BQU8sQ0FBRSxFQUFPLEVBQUUsS0FBYTtRQUU3QixJQUFJLENBQUMsSUFBSSxDQUFDLFNBQVMsSUFBSSxVQUFVLEtBQUssT0FBTyxLQUFLLENBQUMsV0FBVyxJQUFJLEtBQUssQ0FBQyxXQUFXLEVBQUUsS0FBSyxLQUFLLEVBQUU7WUFFL0YsSUFBSSxFQUFFLEtBQUssRUFBRSxHQUFHLEVBQUUsR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQyxDQUFDO1lBRXZDLElBQUksS0FBSyxDQUFDLENBQUMsQ0FBQyxLQUFLLEdBQUcsSUFBSSxLQUFLLEtBQUssQ0FBQyxJQUFJLEdBQUcsS0FBSyxDQUFDLEVBQUU7Z0JBRWhELEtBQUssR0FBRyxDQUFDLENBQUM7Z0JBQ1YsR0FBRyxHQUFHLENBQUMsQ0FBQzthQUVUO1lBRUQsSUFBSSxDQUFDLFlBQVksQ0FBQyxFQUFFLEVBQUUsS0FBSyxDQUFDLENBQUM7WUFFN0IsSUFBSSxDQUFDLFFBQVEsQ0FBQyxFQUFFLEVBQUUsS0FBSyxFQUFFLEdBQUcsQ0FBQyxDQUFDO1NBRS9CO0lBRUgsQ0FBQzs7d0pBdEVVLHFCQUFxQjs0SUFBckIscUJBQXFCOzJGQUFyQixxQkFBcUI7a0JBSGpDLFNBQVM7bUJBQUM7b0JBQ1QsUUFBUSxFQUFFLHdFQUF3RTtpQkFDbkY7OEJBR1UsU0FBUztzQkFBakIsS0FBSztnQkFxQ04sTUFBTTtzQkFETCxZQUFZO3VCQUFDLE1BQU0sRUFBRSxDQUFDLGVBQWUsRUFBRSxxQkFBcUIsQ0FBQztnQkFhOUQsT0FBTztzQkFETixZQUFZO3VCQUFDLE9BQU8sRUFBRSxDQUFDLGVBQWUsRUFBRSxxQkFBcUIsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIERpcmVjdGl2ZSxcbiAgSG9zdExpc3RlbmVyLFxuICBJbnB1dCxcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5cbkBEaXJlY3RpdmUoe1xuICBzZWxlY3RvcjogJ2lucHV0W3VwcGVyQ2FzZV06bm90KFtsb3dlckNhc2VdKSx0ZXh0YXJlYVt1cHBlckNhc2VdOm5vdChbbG93ZXJDYXNlXSknLFxufSlcbmV4cG9ydCBjbGFzcyBOZ3hVcHBlckNhc2VEaXJlY3RpdmUge1xuXG4gIEBJbnB1dCgpIHVwcGVyQ2FzZTogc3RyaW5nO1xuXG4gIHByaXZhdGUgZ2V0Q2FyZXQgKGVsKSB7XG5cbiAgICByZXR1cm4ge1xuICAgICAgc3RhcnQ6IGVsLnNlbGVjdGlvblN0YXJ0LFxuICAgICAgZW5kOiBlbC5zZWxlY3Rpb25FbmQsXG4gICAgfTtcblxuICB9XG5cbiAgcHJpdmF0ZSBzZXRDYXJldCAoZWwsIHN0YXJ0LCBlbmQpIHtcblxuICAgIGVsLnNlbGVjdGlvblN0YXJ0ID0gc3RhcnQ7XG4gICAgZWwuc2VsZWN0aW9uRW5kID0gZW5kO1xuXG4gICAgZWwuZm9jdXMoKTtcblxuICB9XG5cbiAgcHJpdmF0ZSBkaXNwYXRjaEV2ZW50IChlbCwgZXZlbnRUeXBlKSB7XG5cbiAgICBjb25zdCBldmVudCA9IGRvY3VtZW50LmNyZWF0ZUV2ZW50KCdFdmVudCcpO1xuICAgIGV2ZW50LmluaXRFdmVudChldmVudFR5cGUsIGZhbHNlLCBmYWxzZSk7XG4gICAgZWwuZGlzcGF0Y2hFdmVudChldmVudCk7XG5cbiAgfVxuXG4gIHByaXZhdGUgY29udmVydFZhbHVlIChlbCwgdmFsdWUpIHtcblxuICAgIGVsLnZhbHVlID0gdmFsdWUudG9VcHBlckNhc2UoKTtcblxuICAgIHRoaXMuZGlzcGF0Y2hFdmVudChlbCwgJ2lucHV0Jyk7XG5cbiAgfVxuXG4gIEBIb3N0TGlzdGVuZXIoJ2JsdXInLCBbJyRldmVudC50YXJnZXQnLCAnJGV2ZW50LnRhcmdldC52YWx1ZSddKVxuICBvbkJsdXIgKGVsOiBhbnksIHZhbHVlOiBzdHJpbmcpOiB2b2lkIHtcblxuICAgIGlmICgoIXRoaXMudXBwZXJDYXNlIHx8ICdibHVyJyA9PT0gdGhpcy51cHBlckNhc2UpICYmICdmdW5jdGlvbicgPT09IHR5cGVvZiB2YWx1ZS50b1VwcGVyQ2FzZSAmJiB2YWx1ZS50b1VwcGVyQ2FzZSgpICE9PSB2YWx1ZSkge1xuXG4gICAgICB0aGlzLmNvbnZlcnRWYWx1ZShlbCwgdmFsdWUpO1xuICAgICAgdGhpcy5kaXNwYXRjaEV2ZW50KGVsLCAnYmx1cicpOyAvLyBpbiBjYXNlIHVwZGF0ZU9uIGlzIHNldCB0byBibHVyXG5cbiAgICB9XG5cbiAgfVxuXG4gIEBIb3N0TGlzdGVuZXIoJ2lucHV0JywgWyckZXZlbnQudGFyZ2V0JywgJyRldmVudC50YXJnZXQudmFsdWUnXSlcbiAgb25JbnB1dCAoZWw6IGFueSwgdmFsdWU6IHN0cmluZyk6IHZvaWQge1xuXG4gICAgaWYgKCF0aGlzLnVwcGVyQ2FzZSAmJiAnZnVuY3Rpb24nID09PSB0eXBlb2YgdmFsdWUudG9VcHBlckNhc2UgJiYgdmFsdWUudG9VcHBlckNhc2UoKSAhPT0gdmFsdWUpIHtcblxuICAgICAgbGV0IHsgc3RhcnQsIGVuZCB9ID0gdGhpcy5nZXRDYXJldChlbCk7XG5cbiAgICAgIGlmICh2YWx1ZVswXSA9PT0gJyAnICYmIHN0YXJ0ID09PSAxICYmIGVuZCA9PT0gMSkge1xuXG4gICAgICAgIHN0YXJ0ID0gMDtcbiAgICAgICAgZW5kID0gMDtcblxuICAgICAgfVxuXG4gICAgICB0aGlzLmNvbnZlcnRWYWx1ZShlbCwgdmFsdWUpO1xuXG4gICAgICB0aGlzLnNldENhcmV0KGVsLCBzdGFydCwgZW5kKTtcblxuICAgIH1cblxuICB9XG5cbn1cbiJdfQ==