ngx-upper-case-directive
Version:
This directive helps to convert an input text value to upper case.
58 lines • 7.59 kB
JavaScript
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==