ion-cleave-directive
Version:
A cleaveJS package ready to use on Ionic
131 lines (125 loc) • 10.1 kB
JavaScript
import { Directive, ElementRef, HostListener, Inject, Input, Optional, NgModule } from '@angular/core';
import { NG_VALUE_ACCESSOR } from '@angular/forms';
import Cleave from 'cleave.js';
/**
* @fileoverview added by tsickle
* @suppress {checkTypes} checked by tsc
*/
class IonCleaveDirective {
/**
* @param {?} elementRef
* @param {?} valueAccessors
*/
constructor(elementRef, valueAccessors) {
this.elementRef = elementRef;
this.valueAccessors = valueAccessors;
}
/**
* @param {?} cleave
* @return {?}
*/
set cleave(cleave) {
this._cleave = cleave;
this.setCleave();
}
/**
* @return {?}
*/
ngOnInit() {
if (!this.valueAccessors) {
console.warn('Note: The cleave directive should be used with the ngModel, formControl or formControlName directives.');
return;
}
if (this.valueAccessors.length) {
this._valueAccessor = this.valueAccessors[0];
this._writeValue = this._valueAccessor.writeValue;
this._valueAccessor.writeValue = (value) => {
if (this._writeValue) {
this._writeValue.call(this._valueAccessor, value);
}
this.setCleave();
};
}
}
/**
* @return {?}
*/
ngOnDestroy() {
if (this._valueAccessor && this._writeValue) {
this._valueAccessor.writeValue = this._writeValue;
}
if (this._cleaveInstance) {
this._cleaveInstance.destroy();
}
}
/**
* @param {?} value
* @return {?}
*/
onInput(value) {
this._value = value;
}
/**
* @return {?}
*/
setCleave() {
if (this._cleaveInstance) {
this._cleaveInstance.destroy();
}
const /** @type {?} */ el = this.elementRef.nativeElement;
this._cleaveInstance = new Cleave(el, Object.assign({}, this._cleave, { onValueChanged: ({ target }) => {
if (target.value !== this._value) {
this.dispatchEvent(el, 'input');
}
} }));
// hack for model -> view cleave
setTimeout(() => this.dispatchEvent(el, 'input'), 0);
}
/**
* @param {?} el
* @param {?} eventType
* @return {?}
*/
dispatchEvent(el, eventType) {
const /** @type {?} */ event = document.createEvent('Event');
event.initEvent(eventType, false, false);
el.dispatchEvent(event);
}
}
IonCleaveDirective.decorators = [
{ type: Directive, args: [{
selector: 'ion-input[cleave],textarea[cleave],input[cleave]',
},] },
];
/** @nocollapse */
IonCleaveDirective.ctorParameters = () => [
{ type: ElementRef, },
{ type: Array, decorators: [{ type: Inject, args: [NG_VALUE_ACCESSOR,] }, { type: Optional },] },
];
IonCleaveDirective.propDecorators = {
"cleave": [{ type: Input },],
"onInput": [{ type: HostListener, args: ['input', ['$event.target.value'],] },],
};
/**
* @fileoverview added by tsickle
* @suppress {checkTypes} checked by tsc
*/
class IonCleaveDirectiveModule {
}
IonCleaveDirectiveModule.decorators = [
{ type: NgModule, args: [{
imports: [],
declarations: [IonCleaveDirective],
exports: [IonCleaveDirective],
},] },
];
/**
* @fileoverview added by tsickle
* @suppress {checkTypes} checked by tsc
*/
/**
* @fileoverview added by tsickle
* @suppress {checkTypes} checked by tsc
*/
export { IonCleaveDirective, IonCleaveDirectiveModule };
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmd4LWNsZWF2ZS1kaXJlY3RpdmUuanMubWFwIiwic291cmNlcyI6WyJuZzovL25neC1jbGVhdmUtZGlyZWN0aXZlL25neC1jbGVhdmUuZGlyZWN0aXZlLnRzIiwibmc6Ly9uZ3gtY2xlYXZlLWRpcmVjdGl2ZS9uZ3gtY2xlYXZlLWRpcmVjdGl2ZS5tb2R1bGUudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgRGlyZWN0aXZlLFxuICBFbGVtZW50UmVmLFxuICBIb3N0TGlzdGVuZXIsXG4gIEluamVjdCxcbiAgSW5wdXQsXG4gIE9uRGVzdHJveSxcbiAgT25Jbml0LFxuICBPcHRpb25hbCxcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQge1xuICBDb250cm9sVmFsdWVBY2Nlc3NvcixcbiAgTkdfVkFMVUVfQUNDRVNTT1IsXG59IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcblxuaW1wb3J0IENsZWF2ZSBmcm9tICdjbGVhdmUuanMnO1xuXG5ARGlyZWN0aXZlKHtcbiAgc2VsZWN0b3I6ICdpbnB1dFtjbGVhdmVdLHRleHRhcmVhW2NsZWF2ZV0nLFxufSlcbmV4cG9ydCBjbGFzcyBOZ3hDbGVhdmVEaXJlY3RpdmUgaW1wbGVtZW50cyBPbkluaXQsIE9uRGVzdHJveSB7XG5cbiAgQElucHV0KCkgc2V0IGNsZWF2ZSAoY2xlYXZlOiBhbnkpIHtcblxuICAgIHRoaXMuX2NsZWF2ZSA9IGNsZWF2ZTtcblxuICAgIHRoaXMuc2V0Q2xlYXZlKCk7XG5cbiAgfVxuXG4gIHByaXZhdGUgX2NsZWF2ZTogYW55O1xuICBwcml2YXRlIF9jbGVhdmVJbnN0YW5jZTogQ2xlYXZlO1xuICBwcml2YXRlIF92YWx1ZTogc3RyaW5nO1xuICBwcml2YXRlIF92YWx1ZUFjY2Vzc29yOiBDb250cm9sVmFsdWVBY2Nlc3NvcjtcbiAgcHJpdmF0ZSBfd3JpdGVWYWx1ZTogKHZhbHVlKSA9PiB2b2lkO1xuXG4gIGNvbnN0cnVjdG9yIChcbiAgICBwcml2YXRlIGVsZW1lbnRSZWY6IEVsZW1lbnRSZWYsXG4gICAgQEluamVjdChOR19WQUxVRV9BQ0NFU1NPUikgQE9wdGlvbmFsKCkgcHJpdmF0ZSB2YWx1ZUFjY2Vzc29yczogQ29udHJvbFZhbHVlQWNjZXNzb3JbXSxcbiAgKSB7XG4gIH1cblxuICBuZ09uSW5pdCAoKSB7XG5cbiAgICBpZiAoIXRoaXMudmFsdWVBY2Nlc3NvcnMpIHtcblxuICAgICAgY29uc29sZS53YXJuKCdOb3RlOiBUaGUgY2xlYXZlIGRpcmVjdGl2ZSBzaG91bGQgYmUgdXNlZCB3aXRoIHRoZSBuZ01vZGVsLCBmb3JtQ29udHJvbCBvciBmb3JtQ29udHJvbE5hbWUgZGlyZWN0aXZlcy4nKTtcblxuICAgICAgcmV0dXJuO1xuXG4gICAgfVxuXG4gICAgaWYgKHRoaXMudmFsdWVBY2Nlc3NvcnMubGVuZ3RoKSB7XG5cbiAgICAgIHRoaXMuX3ZhbHVlQWNjZXNzb3IgPSB0aGlzLnZhbHVlQWNjZXNzb3JzWzBdO1xuXG4gICAgICB0aGlzLl93cml0ZVZhbHVlID0gdGhpcy5fdmFsdWVBY2Nlc3Nvci53cml0ZVZhbHVlO1xuICAgICAgdGhpcy5fdmFsdWVBY2Nlc3Nvci53cml0ZVZhbHVlID0gKHZhbHVlKSA9PiB7XG5cbiAgICAgICAgaWYgKHRoaXMuX3dyaXRlVmFsdWUpIHtcbiAgICAgICAgICB0aGlzLl93cml0ZVZhbHVlLmNhbGwodGhpcy5fdmFsdWVBY2Nlc3NvciwgdmFsdWUpO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5zZXRDbGVhdmUoKTtcblxuICAgICAgfTtcblxuICAgIH1cblxuICB9XG5cbiAgbmdPbkRlc3Ryb3kgKCkge1xuXG4gICAgaWYgKHRoaXMuX3ZhbHVlQWNjZXNzb3IgJiYgdGhpcy5fd3JpdGVWYWx1ZSkge1xuXG4gICAgICB0aGlzLl92YWx1ZUFjY2Vzc29yLndyaXRlVmFsdWUgPSB0aGlzLl93cml0ZVZhbHVlO1xuXG4gICAgfVxuXG4gICAgaWYgKHRoaXMuX2NsZWF2ZUluc3RhbmNlKSB7XG5cbiAgICAgIHRoaXMuX2NsZWF2ZUluc3RhbmNlLmRlc3Ryb3koKTtcblxuICAgIH1cblxuICB9XG5cbiAgQEhvc3RMaXN0ZW5lcignaW5wdXQnLCBbJyRldmVudC50YXJnZXQudmFsdWUnXSlcbiAgb25JbnB1dCAodmFsdWU6IHN0cmluZyk6IHZvaWQge1xuXG4gICAgdGhpcy5fdmFsdWUgPSB2YWx1ZTtcblxuICB9XG5cbiAgcHJpdmF0ZSBzZXRDbGVhdmUgKCkge1xuXG4gICAgaWYgKHRoaXMuX2NsZWF2ZUluc3RhbmNlKSB7XG5cbiAgICAgIHRoaXMuX2NsZWF2ZUluc3RhbmNlLmRlc3Ryb3koKTtcblxuICAgIH1cblxuICAgIGNvbnN0IGVsID0gdGhpcy5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQ7XG4gICAgdGhpcy5fY2xlYXZlSW5zdGFuY2UgPSBuZXcgQ2xlYXZlKGVsLCB7XG4gICAgICAuLi50aGlzLl9jbGVhdmUsXG4gICAgICBvblZhbHVlQ2hhbmdlZDogKHsgdGFyZ2V0IH0pID0+IHtcbiAgICAgICAgaWYgKHRhcmdldC52YWx1ZSAhPT0gdGhpcy5fdmFsdWUpIHtcblxuICAgICAgICAgIHRoaXMuZGlzcGF0Y2hFdmVudChlbCwgJ2lucHV0Jyk7XG5cbiAgICAgICAgfVxuICAgICAgfSxcbiAgICB9KTtcblxuICAgIC8vIGhhY2sgZm9yIG1vZGVsIC0+IHZpZXcgY2xlYXZlXG4gICAgc2V0VGltZW91dCgoKSA9PiB0aGlzLmRpc3BhdGNoRXZlbnQoZWwsICdpbnB1dCcpLCAwKTtcblxuICB9XG5cbiAgcHJpdmF0ZSBkaXNwYXRjaEV2ZW50IChlbCwgZXZlbnRUeXBlKSB7XG5cbiAgICBjb25zdCBldmVudCA9IGRvY3VtZW50LmNyZWF0ZUV2ZW50KCdFdmVudCcpO1xuICAgIGV2ZW50LmluaXRFdmVudChldmVudFR5cGUsIGZhbHNlLCBmYWxzZSk7XG4gICAgZWwuZGlzcGF0Y2hFdmVudChldmVudCk7XG5cbiAgfVxuXG59XG4iLCJpbXBvcnQgeyBOZ01vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgTmd4Q2xlYXZlRGlyZWN0aXZlIH0gZnJvbSAnLi9uZ3gtY2xlYXZlLmRpcmVjdGl2ZSc7XG5cbkBOZ01vZHVsZSh7XG4gIGltcG9ydHM6IFtdLFxuICBkZWNsYXJhdGlvbnM6IFtOZ3hDbGVhdmVEaXJlY3RpdmVdLFxuICBleHBvcnRzOiBbTmd4Q2xlYXZlRGlyZWN0aXZlXSxcbn0pXG5leHBvcnQgY2xhc3MgTmd4Q2xlYXZlRGlyZWN0aXZlTW9kdWxlIHtcbn1cbiJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7OztBQUFBOzs7OztJQW9DRSxZQUNVLFlBQ3VDO1FBRHZDLGVBQVUsR0FBVixVQUFVO1FBQzZCLG1CQUFjLEdBQWQsY0FBYztLQUU5RDs7Ozs7UUFsQlksTUFBTSxDQUFFLE1BQVc7UUFFOUIsSUFBSSxDQUFDLE9BQU8sR0FBRyxNQUFNLENBQUM7UUFFdEIsSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDOzs7OztJQWdCbkIsUUFBUTtRQUVOLElBQUksQ0FBQyxJQUFJLENBQUMsY0FBYyxFQUFFO1lBRXhCLE9BQU8sQ0FBQyxJQUFJLENBQUMsd0dBQXdHLENBQUMsQ0FBQztZQUV2SCxPQUFPO1NBRVI7UUFFRCxJQUFJLElBQUksQ0FBQyxjQUFjLENBQUMsTUFBTSxFQUFFO1lBRTlCLElBQUksQ0FBQyxjQUFjLEdBQUcsSUFBSSxDQUFDLGNBQWMsQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUU3QyxJQUFJLENBQUMsV0FBVyxHQUFHLElBQUksQ0FBQyxjQUFjLENBQUMsVUFBVSxDQUFDO1lBQ2xELElBQUksQ0FBQyxjQUFjLENBQUMsVUFBVSxHQUFHLENBQUMsS0FBSztnQkFFckMsSUFBSSxJQUFJLENBQUMsV0FBVyxFQUFFO29CQUNwQixJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsY0FBYyxFQUFFLEtBQUssQ0FBQyxDQUFDO2lCQUNuRDtnQkFFRCxJQUFJLENBQUMsU0FBUyxFQUFFLENBQUM7YUFFbEIsQ0FBQztTQUVIO0tBRUY7Ozs7SUFFRCxXQUFXO1FBRVQsSUFBSSxJQUFJLENBQUMsY0FBYyxJQUFJLElBQUksQ0FBQyxXQUFXLEVBQUU7WUFFM0MsSUFBSSxDQUFDLGNBQWMsQ0FBQyxVQUFVLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQztTQUVuRDtRQUVELElBQUksSUFBSSxDQUFDLGVBQWUsRUFBRTtZQUV4QixJQUFJLENBQUMsZUFBZSxDQUFDLE9BQU8sRUFBRSxDQUFDO1NBRWhDO0tBRUY7Ozs7O0lBR0QsT0FBTyxDQUFFLEtBQWE7UUFFcEIsSUFBSSxDQUFDLE1BQU0sR0FBRyxLQUFLLENBQUM7Ozs7O0lBSWQsU0FBUztRQUVmLElBQUksSUFBSSxDQUFDLGVBQWUsRUFBRTtZQUV4QixJQUFJLENBQUMsZUFBZSxDQUFDLE9BQU8sRUFBRSxDQUFDO1NBRWhDO1FBRUQsdUJBQU0sRUFBRSxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUMsYUFBYSxDQUFDO1FBQ3pDLElBQUksQ0FBQyxlQUFlLEdBQUcsSUFBSSxNQUFNLENBQUMsRUFBRSxvQkFDL0IsSUFBSSxDQUFDLE9BQU8sSUFDZixjQUFjLEVBQUUsQ0FBQyxFQUFFLE1BQU0sRUFBRTtnQkFDekIsSUFBSSxNQUFNLENBQUMsS0FBSyxLQUFLLElBQUksQ0FBQyxNQUFNLEVBQUU7b0JBRWhDLElBQUksQ0FBQyxhQUFhLENBQUMsRUFBRSxFQUFFLE9BQU8sQ0FBQyxDQUFDO2lCQUVqQzthQUNGLElBQ0QsQ0FBQzs7UUFHSCxVQUFVLENBQUMsTUFBTSxJQUFJLENBQUMsYUFBYSxDQUFDLEVBQUUsRUFBRSxPQUFPLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQzs7Ozs7OztJQUkvQyxhQUFhLENBQUUsRUFBRSxFQUFFLFNBQVM7UUFFbEMsdUJBQU0sS0FBSyxHQUFHLFFBQVEsQ0FBQyxXQUFXLENBQUMsT0FBTyxDQUFDLENBQUM7UUFDNUMsS0FBSyxDQUFDLFNBQVMsQ0FBQyxTQUFTLEVBQUUsS0FBSyxFQUFFLEtBQUssQ0FBQyxDQUFDO1FBQ3pDLEVBQUUsQ0FBQyxhQUFhLENBQUMsS0FBSyxDQUFDLENBQUM7Ozs7WUExRzNCLFNBQVMsU0FBQztnQkFDVCxRQUFRLEVBQUUsZ0NBQWdDO2FBQzNDOzs7O1lBakJDLFVBQVU7d0NBb0NQLE1BQU0sU0FBQyxpQkFBaUIsY0FBRyxRQUFROzs7dUJBaEJyQyxLQUFLO3dCQWlFTCxZQUFZLFNBQUMsT0FBTyxFQUFFLENBQUMscUJBQXFCLENBQUM7Ozs7Ozs7QUN2RmhEOzs7WUFHQyxRQUFRLFNBQUM7Z0JBQ1IsT0FBTyxFQUFFLEVBQUU7Z0JBQ1gsWUFBWSxFQUFFLENBQUMsa0JBQWtCLENBQUM7Z0JBQ2xDLE9BQU8sRUFBRSxDQUFDLGtCQUFrQixDQUFDO2FBQzlCOzs7Ozs7Ozs7Ozs7Ozs7In0=