ngx-lower-case-directive
Version:
This directive helps to convert an input text value to lower case.
58 lines • 7.59 kB
JavaScript
import { Directive, HostListener, Input, } from '@angular/core';
import * as i0 from "@angular/core";
export class NgxLowerCaseDirective {
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.toLowerCase();
this.dispatchEvent(el, 'input');
}
onBlur(el, value) {
if ((!this.lowerCase || 'blur' === this.lowerCase) && 'function' === typeof value.toLowerCase && value.toLowerCase() !== value) {
this.convertValue(el, value);
this.dispatchEvent(el, 'blur'); // in case updateOn is set to blur
}
}
onInput(el, value) {
if (!this.lowerCase && 'function' === typeof value.toLowerCase && value.toLowerCase() !== 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 */ NgxLowerCaseDirective.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.2.3", ngImport: i0, type: NgxLowerCaseDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive });
/** @nocollapse */ /** @nocollapse */ NgxLowerCaseDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "12.0.0", version: "13.2.3", type: NgxLowerCaseDirective, selector: "input[lowerCase]:not([upperCase]),textarea[lowerCase]:not([upperCase])", inputs: { lowerCase: "lowerCase" }, 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: NgxLowerCaseDirective, decorators: [{
type: Directive,
args: [{
selector: 'input[lowerCase]:not([upperCase]),textarea[lowerCase]:not([upperCase])',
}]
}], propDecorators: { lowerCase: [{
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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmd4LWxvd2VyLWNhc2UuZGlyZWN0aXZlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vcHJvamVjdHMvbmd4LWxvd2VyLWNhc2UtZGlyZWN0aXZlL3NyYy9saWIvbmd4LWxvd2VyLWNhc2UuZGlyZWN0aXZlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDTCxTQUFTLEVBQ1QsWUFBWSxFQUNaLEtBQUssR0FDTixNQUFNLGVBQWUsQ0FBQzs7QUFLdkIsTUFBTSxPQUFPLHFCQUFxQjtJQUl4QixRQUFRLENBQUUsRUFBRTtRQUVsQixPQUFPO1lBQ0wsS0FBSyxFQUFFLEVBQUUsQ0FBQyxjQUFjO1lBQ3hCLEdBQUcsRUFBRSxFQUFFLENBQUMsWUFBWTtTQUNyQixDQUFDO0lBRUosQ0FBQztJQUVPLFFBQVEsQ0FBRSxFQUFFLEVBQUUsS0FBSyxFQUFFLEdBQUc7UUFFOUIsRUFBRSxDQUFDLGNBQWMsR0FBRyxLQUFLLENBQUM7UUFDMUIsRUFBRSxDQUFDLFlBQVksR0FBRyxHQUFHLENBQUM7UUFFdEIsRUFBRSxDQUFDLEtBQUssRUFBRSxDQUFDO0lBRWIsQ0FBQztJQUVPLGFBQWEsQ0FBRSxFQUFFLEVBQUUsU0FBUztRQUVsQyxNQUFNLEtBQUssR0FBRyxRQUFRLENBQUMsV0FBVyxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBQzVDLEtBQUssQ0FBQyxTQUFTLENBQUMsU0FBUyxFQUFFLEtBQUssRUFBRSxLQUFLLENBQUMsQ0FBQztRQUN6QyxFQUFFLENBQUMsYUFBYSxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBRTFCLENBQUM7SUFFTyxZQUFZLENBQUUsRUFBRSxFQUFFLEtBQUs7UUFFN0IsRUFBRSxDQUFDLEtBQUssR0FBRyxLQUFLLENBQUMsV0FBVyxFQUFFLENBQUM7UUFFL0IsSUFBSSxDQUFDLGFBQWEsQ0FBQyxFQUFFLEVBQUUsT0FBTyxDQUFDLENBQUM7SUFFbEMsQ0FBQztJQUdELE1BQU0sQ0FBRSxFQUFPLEVBQUUsS0FBYTtRQUU1QixJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsU0FBUyxJQUFJLE1BQU0sS0FBSyxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksVUFBVSxLQUFLLE9BQU8sS0FBSyxDQUFDLFdBQVcsSUFBSSxLQUFLLENBQUMsV0FBVyxFQUFFLEtBQUssS0FBSyxFQUFFO1lBRTlILElBQUksQ0FBQyxZQUFZLENBQUMsRUFBRSxFQUFFLEtBQUssQ0FBQyxDQUFDO1lBQzdCLElBQUksQ0FBQyxhQUFhLENBQUMsRUFBRSxFQUFFLE1BQU0sQ0FBQyxDQUFDLENBQUMsa0NBQWtDO1NBRW5FO0lBRUgsQ0FBQztJQUdELE9BQU8sQ0FBRSxFQUFPLEVBQUUsS0FBYTtRQUU3QixJQUFJLENBQUMsSUFBSSxDQUFDLFNBQVMsSUFBSSxVQUFVLEtBQUssT0FBTyxLQUFLLENBQUMsV0FBVyxJQUFJLEtBQUssQ0FBQyxXQUFXLEVBQUUsS0FBSyxLQUFLLEVBQUU7WUFFL0YsSUFBSSxFQUFFLEtBQUssRUFBRSxHQUFHLEVBQUUsR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQyxDQUFDO1lBRXZDLElBQUksS0FBSyxDQUFDLENBQUMsQ0FBQyxLQUFLLEdBQUcsSUFBSSxLQUFLLEtBQUssQ0FBQyxJQUFJLEdBQUcsS0FBSyxDQUFDLEVBQUU7Z0JBRWhELEtBQUssR0FBRyxDQUFDLENBQUM7Z0JBQ1YsR0FBRyxHQUFHLENBQUMsQ0FBQzthQUVUO1lBRUQsSUFBSSxDQUFDLFlBQVksQ0FBQyxFQUFFLEVBQUUsS0FBSyxDQUFDLENBQUM7WUFFN0IsSUFBSSxDQUFDLFFBQVEsQ0FBQyxFQUFFLEVBQUUsS0FBSyxFQUFFLEdBQUcsQ0FBQyxDQUFDO1NBRS9CO0lBRUgsQ0FBQzs7d0pBdEVVLHFCQUFxQjs0SUFBckIscUJBQXFCOzJGQUFyQixxQkFBcUI7a0JBSGpDLFNBQVM7bUJBQUM7b0JBQ1QsUUFBUSxFQUFFLHdFQUF3RTtpQkFDbkY7OEJBR1UsU0FBUztzQkFBakIsS0FBSztnQkFxQ04sTUFBTTtzQkFETCxZQUFZO3VCQUFDLE1BQU0sRUFBRSxDQUFDLGVBQWUsRUFBRSxxQkFBcUIsQ0FBQztnQkFhOUQsT0FBTztzQkFETixZQUFZO3VCQUFDLE9BQU8sRUFBRSxDQUFDLGVBQWUsRUFBRSxxQkFBcUIsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIERpcmVjdGl2ZSxcbiAgSG9zdExpc3RlbmVyLFxuICBJbnB1dCxcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5cbkBEaXJlY3RpdmUoe1xuICBzZWxlY3RvcjogJ2lucHV0W2xvd2VyQ2FzZV06bm90KFt1cHBlckNhc2VdKSx0ZXh0YXJlYVtsb3dlckNhc2VdOm5vdChbdXBwZXJDYXNlXSknLFxufSlcbmV4cG9ydCBjbGFzcyBOZ3hMb3dlckNhc2VEaXJlY3RpdmUge1xuXG4gIEBJbnB1dCgpIGxvd2VyQ2FzZTogc3RyaW5nO1xuXG4gIHByaXZhdGUgZ2V0Q2FyZXQgKGVsKSB7XG5cbiAgICByZXR1cm4ge1xuICAgICAgc3RhcnQ6IGVsLnNlbGVjdGlvblN0YXJ0LFxuICAgICAgZW5kOiBlbC5zZWxlY3Rpb25FbmQsXG4gICAgfTtcblxuICB9XG5cbiAgcHJpdmF0ZSBzZXRDYXJldCAoZWwsIHN0YXJ0LCBlbmQpIHtcblxuICAgIGVsLnNlbGVjdGlvblN0YXJ0ID0gc3RhcnQ7XG4gICAgZWwuc2VsZWN0aW9uRW5kID0gZW5kO1xuXG4gICAgZWwuZm9jdXMoKTtcblxuICB9XG5cbiAgcHJpdmF0ZSBkaXNwYXRjaEV2ZW50IChlbCwgZXZlbnRUeXBlKSB7XG5cbiAgICBjb25zdCBldmVudCA9IGRvY3VtZW50LmNyZWF0ZUV2ZW50KCdFdmVudCcpO1xuICAgIGV2ZW50LmluaXRFdmVudChldmVudFR5cGUsIGZhbHNlLCBmYWxzZSk7XG4gICAgZWwuZGlzcGF0Y2hFdmVudChldmVudCk7XG5cbiAgfVxuXG4gIHByaXZhdGUgY29udmVydFZhbHVlIChlbCwgdmFsdWUpIHtcblxuICAgIGVsLnZhbHVlID0gdmFsdWUudG9Mb3dlckNhc2UoKTtcblxuICAgIHRoaXMuZGlzcGF0Y2hFdmVudChlbCwgJ2lucHV0Jyk7XG5cbiAgfVxuXG4gIEBIb3N0TGlzdGVuZXIoJ2JsdXInLCBbJyRldmVudC50YXJnZXQnLCAnJGV2ZW50LnRhcmdldC52YWx1ZSddKVxuICBvbkJsdXIgKGVsOiBhbnksIHZhbHVlOiBzdHJpbmcpOiB2b2lkIHtcblxuICAgIGlmICgoIXRoaXMubG93ZXJDYXNlIHx8ICdibHVyJyA9PT0gdGhpcy5sb3dlckNhc2UpICYmICdmdW5jdGlvbicgPT09IHR5cGVvZiB2YWx1ZS50b0xvd2VyQ2FzZSAmJiB2YWx1ZS50b0xvd2VyQ2FzZSgpICE9PSB2YWx1ZSkge1xuXG4gICAgICB0aGlzLmNvbnZlcnRWYWx1ZShlbCwgdmFsdWUpO1xuICAgICAgdGhpcy5kaXNwYXRjaEV2ZW50KGVsLCAnYmx1cicpOyAvLyBpbiBjYXNlIHVwZGF0ZU9uIGlzIHNldCB0byBibHVyXG5cbiAgICB9XG5cbiAgfVxuXG4gIEBIb3N0TGlzdGVuZXIoJ2lucHV0JywgWyckZXZlbnQudGFyZ2V0JywgJyRldmVudC50YXJnZXQudmFsdWUnXSlcbiAgb25JbnB1dCAoZWw6IGFueSwgdmFsdWU6IHN0cmluZyk6IHZvaWQge1xuXG4gICAgaWYgKCF0aGlzLmxvd2VyQ2FzZSAmJiAnZnVuY3Rpb24nID09PSB0eXBlb2YgdmFsdWUudG9Mb3dlckNhc2UgJiYgdmFsdWUudG9Mb3dlckNhc2UoKSAhPT0gdmFsdWUpIHtcblxuICAgICAgbGV0IHsgc3RhcnQsIGVuZCB9ID0gdGhpcy5nZXRDYXJldChlbCk7XG5cbiAgICAgIGlmICh2YWx1ZVswXSA9PT0gJyAnICYmIHN0YXJ0ID09PSAxICYmIGVuZCA9PT0gMSkge1xuXG4gICAgICAgIHN0YXJ0ID0gMDtcbiAgICAgICAgZW5kID0gMDtcblxuICAgICAgfVxuXG4gICAgICB0aGlzLmNvbnZlcnRWYWx1ZShlbCwgdmFsdWUpO1xuXG4gICAgICB0aGlzLnNldENhcmV0KGVsLCBzdGFydCwgZW5kKTtcblxuICAgIH1cblxuICB9XG5cbn1cbiJdfQ==