ion-cleave-directive
Version:
A cleaveJS package ready to use on Ionic
129 lines (128 loc) • 10.4 kB
JavaScript
/**
* @fileoverview added by tsickle
* @suppress {checkTypes} checked by tsc
*/
import { Directive, ElementRef, HostListener, Inject, Input, Optional, } from '@angular/core';
import { NG_VALUE_ACCESSOR, } from '@angular/forms';
import Cleave from 'cleave.js';
export 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'],] },],
};
function IonCleaveDirective_tsickle_Closure_declarations() {
/** @type {!Array<{type: !Function, args: (undefined|!Array<?>)}>} */
IonCleaveDirective.decorators;
/**
* @nocollapse
* @type {function(): !Array<(null|{type: ?, decorators: (undefined|!Array<{type: !Function, args: (undefined|!Array<?>)}>)})>}
*/
IonCleaveDirective.ctorParameters;
/** @type {!Object<string,!Array<{type: !Function, args: (undefined|!Array<?>)}>>} */
IonCleaveDirective.propDecorators;
/** @type {?} */
IonCleaveDirective.prototype._cleave;
/** @type {?} */
IonCleaveDirective.prototype._cleaveInstance;
/** @type {?} */
IonCleaveDirective.prototype._value;
/** @type {?} */
IonCleaveDirective.prototype._valueAccessor;
/** @type {?} */
IonCleaveDirective.prototype._writeValue;
/** @type {?} */
IonCleaveDirective.prototype.elementRef;
/** @type {?} */
IonCleaveDirective.prototype.valueAccessors;
}
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmd4LWNsZWF2ZS5kaXJlY3RpdmUuanMiLCJzb3VyY2VSb290Ijoibmc6Ly9uZ3gtY2xlYXZlLWRpcmVjdGl2ZS8iLCJzb3VyY2VzIjpbIm5neC1jbGVhdmUuZGlyZWN0aXZlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7QUFBQSxPQUFPLEVBQ0wsU0FBUyxFQUNULFVBQVUsRUFDVixZQUFZLEVBQ1osTUFBTSxFQUNOLEtBQUssRUFHTCxRQUFRLEdBQ1QsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUVMLGlCQUFpQixHQUNsQixNQUFNLGdCQUFnQixDQUFDO0FBRXhCLE9BQU8sTUFBTSxNQUFNLFdBQVcsQ0FBQztBQUsvQixNQUFNOzs7OztJQWdCSixZQUNVLFlBQ3VDO1FBRHZDLGVBQVUsR0FBVixVQUFVO1FBQzZCLG1CQUFjLEdBQWQsY0FBYztLQUU5RDs7Ozs7UUFsQlksTUFBTSxDQUFFLE1BQVc7UUFFOUIsSUFBSSxDQUFDLE9BQU8sR0FBRyxNQUFNLENBQUM7UUFFdEIsSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDOzs7OztJQWdCbkIsUUFBUTtRQUVOLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxDQUFDLENBQUM7WUFFekIsT0FBTyxDQUFDLElBQUksQ0FBQyx3R0FBd0csQ0FBQyxDQUFDO1lBRXZILE1BQU0sQ0FBQztTQUVSO1FBRUQsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDO1lBRS9CLElBQUksQ0FBQyxjQUFjLEdBQUcsSUFBSSxDQUFDLGNBQWMsQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUU3QyxJQUFJLENBQUMsV0FBVyxHQUFHLElBQUksQ0FBQyxjQUFjLENBQUMsVUFBVSxDQUFDO1lBQ2xELElBQUksQ0FBQyxjQUFjLENBQUMsVUFBVSxHQUFHLENBQUMsS0FBSyxFQUFFLEVBQUU7Z0JBRXpDLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDO29CQUNyQixJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsY0FBYyxFQUFFLEtBQUssQ0FBQyxDQUFDO2lCQUNuRDtnQkFFRCxJQUFJLENBQUMsU0FBUyxFQUFFLENBQUM7YUFFbEIsQ0FBQztTQUVIO0tBRUY7Ozs7SUFFRCxXQUFXO1FBRVQsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLGNBQWMsSUFBSSxJQUFJLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQztZQUU1QyxJQUFJLENBQUMsY0FBYyxDQUFDLFVBQVUsR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDO1NBRW5EO1FBRUQsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxDQUFDLENBQUM7WUFFekIsSUFBSSxDQUFDLGVBQWUsQ0FBQyxPQUFPLEVBQUUsQ0FBQztTQUVoQztLQUVGOzs7OztJQUdELE9BQU8sQ0FBRSxLQUFhO1FBRXBCLElBQUksQ0FBQyxNQUFNLEdBQUcsS0FBSyxDQUFDOzs7OztJQUlkLFNBQVM7UUFFZixFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsZUFBZSxDQUFDLENBQUMsQ0FBQztZQUV6QixJQUFJLENBQUMsZUFBZSxDQUFDLE9BQU8sRUFBRSxDQUFDO1NBRWhDO1FBRUQsdUJBQU0sRUFBRSxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUMsYUFBYSxDQUFDO1FBQ3pDLElBQUksQ0FBQyxlQUFlLEdBQUcsSUFBSSxNQUFNLENBQUMsRUFBRSxvQkFDL0IsSUFBSSxDQUFDLE9BQU8sSUFDZixjQUFjLEVBQUUsQ0FBQyxFQUFFLE1BQU0sRUFBRSxFQUFFLEVBQUU7Z0JBQzdCLEVBQUUsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxLQUFLLEtBQUssSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUM7b0JBRWpDLElBQUksQ0FBQyxhQUFhLENBQUMsRUFBRSxFQUFFLE9BQU8sQ0FBQyxDQUFDO2lCQUVqQzthQUNGLElBQ0QsQ0FBQzs7UUFHSCxVQUFVLENBQUMsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxFQUFFLEVBQUUsT0FBTyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7Ozs7Ozs7SUFJL0MsYUFBYSxDQUFFLEVBQUUsRUFBRSxTQUFTO1FBRWxDLHVCQUFNLEtBQUssR0FBRyxRQUFRLENBQUMsV0FBVyxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBQzVDLEtBQUssQ0FBQyxTQUFTLENBQUMsU0FBUyxFQUFFLEtBQUssRUFBRSxLQUFLLENBQUMsQ0FBQztRQUN6QyxFQUFFLENBQUMsYUFBYSxDQUFDLEtBQUssQ0FBQyxDQUFDOzs7O1lBMUczQixTQUFTLFNBQUM7Z0JBQ1QsUUFBUSxFQUFFLGdDQUFnQzthQUMzQzs7OztZQWpCQyxVQUFVO3dDQW9DUCxNQUFNLFNBQUMsaUJBQWlCLGNBQUcsUUFBUTs7O3VCQWhCckMsS0FBSzt3QkFpRUwsWUFBWSxTQUFDLE9BQU8sRUFBRSxDQUFDLHFCQUFxQixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgRGlyZWN0aXZlLFxuICBFbGVtZW50UmVmLFxuICBIb3N0TGlzdGVuZXIsXG4gIEluamVjdCxcbiAgSW5wdXQsXG4gIE9uRGVzdHJveSxcbiAgT25Jbml0LFxuICBPcHRpb25hbCxcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQge1xuICBDb250cm9sVmFsdWVBY2Nlc3NvcixcbiAgTkdfVkFMVUVfQUNDRVNTT1IsXG59IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcblxuaW1wb3J0IENsZWF2ZSBmcm9tICdjbGVhdmUuanMnO1xuXG5ARGlyZWN0aXZlKHtcbiAgc2VsZWN0b3I6ICdpbnB1dFtjbGVhdmVdLHRleHRhcmVhW2NsZWF2ZV0nLFxufSlcbmV4cG9ydCBjbGFzcyBOZ3hDbGVhdmVEaXJlY3RpdmUgaW1wbGVtZW50cyBPbkluaXQsIE9uRGVzdHJveSB7XG5cbiAgQElucHV0KCkgc2V0IGNsZWF2ZSAoY2xlYXZlOiBhbnkpIHtcblxuICAgIHRoaXMuX2NsZWF2ZSA9IGNsZWF2ZTtcblxuICAgIHRoaXMuc2V0Q2xlYXZlKCk7XG5cbiAgfVxuXG4gIHByaXZhdGUgX2NsZWF2ZTogYW55O1xuICBwcml2YXRlIF9jbGVhdmVJbnN0YW5jZTogQ2xlYXZlO1xuICBwcml2YXRlIF92YWx1ZTogc3RyaW5nO1xuICBwcml2YXRlIF92YWx1ZUFjY2Vzc29yOiBDb250cm9sVmFsdWVBY2Nlc3NvcjtcbiAgcHJpdmF0ZSBfd3JpdGVWYWx1ZTogKHZhbHVlKSA9PiB2b2lkO1xuXG4gIGNvbnN0cnVjdG9yIChcbiAgICBwcml2YXRlIGVsZW1lbnRSZWY6IEVsZW1lbnRSZWYsXG4gICAgQEluamVjdChOR19WQUxVRV9BQ0NFU1NPUikgQE9wdGlvbmFsKCkgcHJpdmF0ZSB2YWx1ZUFjY2Vzc29yczogQ29udHJvbFZhbHVlQWNjZXNzb3JbXSxcbiAgKSB7XG4gIH1cblxuICBuZ09uSW5pdCAoKSB7XG5cbiAgICBpZiAoIXRoaXMudmFsdWVBY2Nlc3NvcnMpIHtcblxuICAgICAgY29uc29sZS53YXJuKCdOb3RlOiBUaGUgY2xlYXZlIGRpcmVjdGl2ZSBzaG91bGQgYmUgdXNlZCB3aXRoIHRoZSBuZ01vZGVsLCBmb3JtQ29udHJvbCBvciBmb3JtQ29udHJvbE5hbWUgZGlyZWN0aXZlcy4nKTtcblxuICAgICAgcmV0dXJuO1xuXG4gICAgfVxuXG4gICAgaWYgKHRoaXMudmFsdWVBY2Nlc3NvcnMubGVuZ3RoKSB7XG5cbiAgICAgIHRoaXMuX3ZhbHVlQWNjZXNzb3IgPSB0aGlzLnZhbHVlQWNjZXNzb3JzWzBdO1xuXG4gICAgICB0aGlzLl93cml0ZVZhbHVlID0gdGhpcy5fdmFsdWVBY2Nlc3Nvci53cml0ZVZhbHVlO1xuICAgICAgdGhpcy5fdmFsdWVBY2Nlc3Nvci53cml0ZVZhbHVlID0gKHZhbHVlKSA9PiB7XG5cbiAgICAgICAgaWYgKHRoaXMuX3dyaXRlVmFsdWUpIHtcbiAgICAgICAgICB0aGlzLl93cml0ZVZhbHVlLmNhbGwodGhpcy5fdmFsdWVBY2Nlc3NvciwgdmFsdWUpO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5zZXRDbGVhdmUoKTtcblxuICAgICAgfTtcblxuICAgIH1cblxuICB9XG5cbiAgbmdPbkRlc3Ryb3kgKCkge1xuXG4gICAgaWYgKHRoaXMuX3ZhbHVlQWNjZXNzb3IgJiYgdGhpcy5fd3JpdGVWYWx1ZSkge1xuXG4gICAgICB0aGlzLl92YWx1ZUFjY2Vzc29yLndyaXRlVmFsdWUgPSB0aGlzLl93cml0ZVZhbHVlO1xuXG4gICAgfVxuXG4gICAgaWYgKHRoaXMuX2NsZWF2ZUluc3RhbmNlKSB7XG5cbiAgICAgIHRoaXMuX2NsZWF2ZUluc3RhbmNlLmRlc3Ryb3koKTtcblxuICAgIH1cblxuICB9XG5cbiAgQEhvc3RMaXN0ZW5lcignaW5wdXQnLCBbJyRldmVudC50YXJnZXQudmFsdWUnXSlcbiAgb25JbnB1dCAodmFsdWU6IHN0cmluZyk6IHZvaWQge1xuXG4gICAgdGhpcy5fdmFsdWUgPSB2YWx1ZTtcblxuICB9XG5cbiAgcHJpdmF0ZSBzZXRDbGVhdmUgKCkge1xuXG4gICAgaWYgKHRoaXMuX2NsZWF2ZUluc3RhbmNlKSB7XG5cbiAgICAgIHRoaXMuX2NsZWF2ZUluc3RhbmNlLmRlc3Ryb3koKTtcblxuICAgIH1cblxuICAgIGNvbnN0IGVsID0gdGhpcy5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQ7XG4gICAgdGhpcy5fY2xlYXZlSW5zdGFuY2UgPSBuZXcgQ2xlYXZlKGVsLCB7XG4gICAgICAuLi50aGlzLl9jbGVhdmUsXG4gICAgICBvblZhbHVlQ2hhbmdlZDogKHsgdGFyZ2V0IH0pID0+IHtcbiAgICAgICAgaWYgKHRhcmdldC52YWx1ZSAhPT0gdGhpcy5fdmFsdWUpIHtcblxuICAgICAgICAgIHRoaXMuZGlzcGF0Y2hFdmVudChlbCwgJ2lucHV0Jyk7XG5cbiAgICAgICAgfVxuICAgICAgfSxcbiAgICB9KTtcblxuICAgIC8vIGhhY2sgZm9yIG1vZGVsIC0+IHZpZXcgY2xlYXZlXG4gICAgc2V0VGltZW91dCgoKSA9PiB0aGlzLmRpc3BhdGNoRXZlbnQoZWwsICdpbnB1dCcpLCAwKTtcblxuICB9XG5cbiAgcHJpdmF0ZSBkaXNwYXRjaEV2ZW50IChlbCwgZXZlbnRUeXBlKSB7XG5cbiAgICBjb25zdCBldmVudCA9IGRvY3VtZW50LmNyZWF0ZUV2ZW50KCdFdmVudCcpO1xuICAgIGV2ZW50LmluaXRFdmVudChldmVudFR5cGUsIGZhbHNlLCBmYWxzZSk7XG4gICAgZWwuZGlzcGF0Y2hFdmVudChldmVudCk7XG5cbiAgfVxuXG59XG4iXX0=