UNPKG

@angularfy/autonumeric

Version:
254 lines 19.1 kB
/** * @fileoverview added by tsickle * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc */ import { Directive, ElementRef, EventEmitter, forwardRef, Input, Output, Renderer2, } from '@angular/core'; import { NG_VALUE_ACCESSOR } from '@angular/forms'; import AutoNumeric from 'autonumeric'; import { AutonumericDefaults } from './autonumeric-defaults.service'; /** @type {?} */ export const AUTONUMERIC_CONTROL_VALUE_ACCESSOR = { provide: NG_VALUE_ACCESSOR, useExisting: forwardRef((/** * @return {?} */ () => AutonumericDirective)), multi: true }; export class AutonumericDirective { /** * @param {?} elm * @param {?} defaults * @param {?} renderer */ constructor(elm, defaults, renderer) { this.elm = elm; this.defaults = defaults; this.renderer = renderer; /* Defines the strategy to apply when options change. * reset will drop any previous options * update will change old values one by one but keep those that are not mentioned in the new options */ this.strategy = 'reset'; this.isDisabled = false; this.formatted = new EventEmitter(); this.rawValueModified = new EventEmitter(); this.onChangeFn = (/** * @return {?} */ () => { }); this.onTouchedFn = (/** * @return {?} */ () => { }); } /** * @return {?} */ ngOnInit() { } /** * @private * @param {?} options * @return {?} */ normalize(options) { /** @type {?} */ const normalized = {}; Object.keys(AutoNumeric.options).forEach((/** * @param {?} key * @return {?} */ key => { if (typeof options[key] === 'undefined') { normalized[key] = ((/** @type {?} */ (this.defaults)))[key]; } else { normalized[key] = options[key]; } })); return normalized; } /** * @return {?} */ ngAfterViewInit() { this.instance = new AutoNumeric(this.elm.nativeElement, this.getOptions()); this.setDisabledState(this.isDisabled); this.unsubscribeFormat = this.renderer.listen(this.elm.nativeElement, 'autoNumeric:formatted', (/** * @param {?} $event * @return {?} */ ($event) => { this.formatted.emit($event); })); this.unsubscribeRawValueModified = this.renderer.listen(this.elm.nativeElement, 'autoNumeric:rawValueModified', (/** * @param {?} $event * @return {?} */ ($event) => { this.onChangeFn($event.detail.newRawValue); this.rawValueModified.emit($event); })); } /** * @private * @return {?} */ getOptions() { if (this.options === undefined && this.predefined === undefined) { return this.defaults; } if (this.options !== undefined && this.predefined !== undefined) { throw new Error('predefined attribute could not be combined with options. Please use either predefined or options'); } if (this.options !== undefined) { return this.normalize(this.options); } /** @type {?} */ const predefined = AutoNumeric.getPredefinedOptions()[this.predefined]; return this.normalize(predefined); } /** * @param {?} changes * @return {?} */ ngOnChanges(changes) { if (!this.instance) { return; } if (changes.options || changes.predefined) { if (this.strategy === 'reset') { this.instance.options.reset(); } this.instance.update(this.getOptions()); } } /** * @return {?} */ ngOnDestroy() { this.unsubscribeFormat(); this.unsubscribeRawValueModified(); try { this.instance.remove(); // remove listeners } catch (e) { } } /** * @param {?} value * @return {?} */ writeValue(value) { if (this.instance) { this.instance.set(value); } else { // autonumeric hasn't been initialised yet, store the value for later use this.initialValue = value; } } /** * @param {?} fn * @return {?} */ registerOnChange(fn) { this.onChangeFn = fn; } /** * @param {?} fn * @return {?} */ registerOnTouched(fn) { this.onTouchedFn = fn; } /** * @param {?} isDisabled * @return {?} */ setDisabledState(isDisabled) { this.isDisabled = isDisabled; if (this.instance) { if (this.isDisabled) { this.renderer.setProperty(this.instance.domElement, 'disabled', 'disabled'); } else { this.renderer.removeAttribute(this.instance.domElement, 'disabled'); } } } } AutonumericDirective.decorators = [ { type: Directive, args: [{ selector: '[autonumeric]', providers: [AUTONUMERIC_CONTROL_VALUE_ACCESSOR], // tslint:disable-next-line:use-host-property-decorator host: { '(blur)': 'onTouchedFn()' }, },] } ]; /** @nocollapse */ AutonumericDirective.ctorParameters = () => [ { type: ElementRef }, { type: AutonumericDefaults }, { type: Renderer2 } ]; AutonumericDirective.propDecorators = { strategy: [{ type: Input }], options: [{ type: Input }], predefined: [{ type: Input }], formatted: [{ type: Output }], rawValueModified: [{ type: Output }] }; if (false) { /** @type {?} */ AutonumericDirective.prototype.strategy; /** @type {?} */ AutonumericDirective.prototype.options; /** @type {?} */ AutonumericDirective.prototype.predefined; /** @type {?} */ AutonumericDirective.prototype.instance; /** * @type {?} * @private */ AutonumericDirective.prototype.isDisabled; /** * @type {?} * @private */ AutonumericDirective.prototype.initialValue; /** @type {?} */ AutonumericDirective.prototype.unsubscribeFormat; /** @type {?} */ AutonumericDirective.prototype.unsubscribeRawValueModified; /** @type {?} */ AutonumericDirective.prototype.formatted; /** @type {?} */ AutonumericDirective.prototype.rawValueModified; /** @type {?} */ AutonumericDirective.prototype.onChangeFn; /** @type {?} */ AutonumericDirective.prototype.onTouchedFn; /** * @type {?} * @private */ AutonumericDirective.prototype.elm; /** * @type {?} * @private */ AutonumericDirective.prototype.defaults; /** * @type {?} * @private */ AutonumericDirective.prototype.renderer; } //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXV0b251bWVyaWMuZGlyZWN0aXZlLmpzIiwic291cmNlUm9vdCI6Im5nOi8vQGFuZ3VsYXJmeS9hdXRvbnVtZXJpYy8iLCJzb3VyY2VzIjpbImxpYi9hdXRvbnVtZXJpYy5kaXJlY3RpdmUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7OztBQUFBLE9BQU8sRUFFTCxTQUFTLEVBQ1QsVUFBVSxFQUNWLFlBQVksRUFDWixVQUFVLEVBQ1YsS0FBSyxFQUlMLE1BQU0sRUFDTixTQUFTLEdBRVYsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUF1QixpQkFBaUIsRUFBQyxNQUFNLGdCQUFnQixDQUFDO0FBQ3ZFLE9BQU8sV0FBVyxNQUFNLGFBQWEsQ0FBQztBQUN0QyxPQUFPLEVBQUMsbUJBQW1CLEVBQUMsTUFBTSxnQ0FBZ0MsQ0FBQzs7QUFHbkUsTUFBTSxPQUFPLGtDQUFrQyxHQUFRO0lBQ3JELE9BQU8sRUFBRSxpQkFBaUI7SUFDMUIsV0FBVyxFQUFFLFVBQVU7OztJQUFDLEdBQUcsRUFBRSxDQUFDLG9CQUFvQixFQUFDO0lBQ25ELEtBQUssRUFBRSxJQUFJO0NBQ1o7QUFVRCxNQUFNLE9BQU8sb0JBQW9COzs7Ozs7SUE0Qi9CLFlBQ1UsR0FBZSxFQUNmLFFBQTZCLEVBQzdCLFFBQW1CO1FBRm5CLFFBQUcsR0FBSCxHQUFHLENBQVk7UUFDZixhQUFRLEdBQVIsUUFBUSxDQUFxQjtRQUM3QixhQUFRLEdBQVIsUUFBUSxDQUFXOzs7OztRQXhCN0IsYUFBUSxHQUF1QixPQUFPLENBQUM7UUFPL0IsZUFBVSxHQUFHLEtBQUssQ0FBQztRQUszQixjQUFTLEdBQUcsSUFBSSxZQUFZLEVBQUUsQ0FBQztRQUUvQixxQkFBZ0IsR0FBRyxJQUFJLFlBQVksRUFBRSxDQUFDO1FBQ3RDLGVBQVU7OztRQUF5QixHQUFHLEVBQUU7UUFDeEMsQ0FBQyxFQUFDO1FBRUYsZ0JBQVc7OztRQUFHLEdBQUcsRUFBRTtRQUNuQixDQUFDLEVBQUM7SUFPRixDQUFDOzs7O0lBRUQs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LENBQUMsa0NBQWtDLENBQUM7O2dCQUUvQyxJQUFJLEVBQUU7b0JBQ0osUUFBUSxFQUFFLGVBQWU7aUJBQzFCO2FBQ0Y7Ozs7WUE3QkMsVUFBVTtZQWFKLG1CQUFtQjtZQUx6QixTQUFTOzs7dUJBNEJSLEtBQUs7c0JBR0wsS0FBSzt5QkFFTCxLQUFLO3dCQU9MLE1BQU07K0JBRU4sTUFBTTs7OztJQWRQLHdDQUN1Qzs7SUFFdkMsdUNBQzRCOztJQUM1QiwwQ0FDbUI7O0lBQ25CLHdDQUFjOzs7OztJQUNkLDBDQUEyQjs7Ozs7SUFDM0IsNENBQTBCOztJQUMxQixpREFBOEI7O0lBQzlCLDJEQUF3Qzs7SUFDeEMseUNBQytCOztJQUMvQixnREFDc0M7O0lBQ3RDLDBDQUNFOztJQUVGLDJDQUNFOzs7OztJQUdBLG1DQUF1Qjs7Ozs7SUFDdkIsd0NBQXFDOzs7OztJQUNyQyx3Q0FBMkIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xyXG4gIEFmdGVyVmlld0luaXQsXHJcbiAgRGlyZWN0aXZlLFxyXG4gIEVsZW1lbnRSZWYsXHJcbiAgRXZlbnRFbWl0dGVyLFxyXG4gIGZvcndhcmRSZWYsXHJcbiAgSW5wdXQsXHJcbiAgT25DaGFuZ2VzLFxyXG4gIE9uRGVzdHJveSxcclxuICBPbkluaXQsXHJcbiAgT3V0cHV0LFxyXG4gIFJlbmRlcmVyMixcclxuICBTaW1wbGVDaGFuZ2VzLFxyXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQge0NvbnRyb2xWYWx1ZUFjY2Vzc29yLCBOR19WQUxVRV9BQ0NFU1NPUn0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xyXG5pbXBvcnQgQXV0b051bWVyaWMgZnJvbSAnYXV0b251bWVyaWMnO1xyXG5pbXBvcnQge0F1dG9udW1lcmljRGVmYXVsdHN9IGZyb20gJy4vYXV0b251bWVyaWMtZGVmYXVsdHMuc2VydmljZSc7XHJcbmltcG9ydCB7QXV0b251bWVyaWNPcHRpb25zfSBmcm9tICcuL2F1dG9udW1lcmljLm1vZGVsJztcclxuXHJcbmV4cG9ydCBjb25zdCBBVVRPTlVNRVJJQ19DT05UUk9MX1ZBTFVFX0FDQ0VTU09SOiBhbnkgPSB7XHJcbiAgcHJvdmlkZTogTkdfVkFMVUVfQUNDRVNTT1IsXHJcbiAgdXNlRXhpc3Rpbmc6IGZvcndhcmRSZWYoKCkgPT4gQXV0b251bWVyaWNEaXJlY3RpdmUpLFxyXG4gIG11bHRpOiB0cnVlXHJcbn07XHJcblxyXG5ARGlyZWN0aXZlKHtcclxuICBzZWxlY3RvcjogJ1thdXRvbnVtZXJpY10nLFxyXG4gIHByb3ZpZGVyczogW0FVVE9OVU1FUklDX0NPTlRST0xfVkFMVUVfQUNDRVNTT1JdLFxyXG4gIC8vIHRzbGludDpkaXNhYmxlLW5leHQtbGluZTp1c2UtaG9zdC1wcm9wZXJ0eS1kZWNvcmF0b3JcclxuICBob3N0OiB7XHJcbiAgICAnKGJsdXIpJzogJ29uVG91Y2hlZEZuKCknXHJcbiAgfSxcclxufSlcclxuZXhwb3J0IGNsYXNzIEF1dG9udW1lcmljRGlyZWN0aXZlIGltcGxlbWVudHMgT25Jbml0LCBBZnRlclZpZXdJbml0LCBPbkNoYW5nZXMsIE9uRGVzdHJveSwgQ29udHJvbFZhbHVlQWNjZXNzb3Ige1xyXG5cclxuICAvKiBEZWZpbmVzIHRoZSBzdHJhdGVneSB0byBhcHBseSB3aGVuIG9wdGlvbnMgY2hhbmdlLlxyXG4gICAqIHJlc2V0IHdpbGwgZHJvcCBhbnkgcHJldmlvdXMgb3B0aW9uc1xyXG4gICAqIHVwZGF0ZSB3aWxsIGNoYW5nZSBvbGQgdmFsdWVzIG9uZSBieSBvbmUgYnV0IGtlZXAgdGhvc2UgdGhhdCBhcmUgbm90IG1lbnRpb25lZCBpbiB0aGUgbmV3IG9wdGlvbnNcclxuICAgKi9cclxuICBASW5wdXQoKVxyXG4gIHN0cmF0ZWd5OiAncmVzZXQnIHwgJ3VwZGF0ZScgPSAncmVzZXQnO1xyXG5cclxuICBASW5wdXQoKVxyXG4gIG9wdGlvbnM6IEF1dG9udW1lcmljT3B0aW9ucztcclxuICBASW5wdXQoKVxyXG4gIHByZWRlZmluZWQ6IHN0cmluZztcclxuICBpbnN0YW5jZTogYW55O1xyXG4gIHByaXZhdGUgaXNEaXNhYmxlZCA9IGZhbHNlO1xyXG4gIHByaXZhdGUgaW5pdGlhbFZhbHVlOiBhbnk7XHJcbiAgdW5zdWJzY3JpYmVGb3JtYXQ6ICgpID0+IHZvaWQ7XHJcbiAgdW5zdWJzY3JpYmVSYXdWYWx1ZU1vZGlmaWVkOiAoKSA9PiB2b2lkO1xyXG4gIEBPdXRwdXQoKVxyXG4gIGZvcm1hdHRlZCA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcclxuICBAT3V0cHV0KClcclxuICByYXdWYWx1ZU1vZGlmaWVkID0gbmV3IEV2ZW50RW1pdHRlcigpO1xyXG4gIG9uQ2hhbmdlRm46ICh2YWx1ZTogYW55KSA9PiB2b2lkID0gKCkgPT4ge1xyXG4gIH07XHJcblxyXG4gIG9uVG91Y2hlZEZuID0gKCkgPT4ge1xyXG4gIH07XHJcblxyXG4gIGNvbnN0cnVjdG9yKFxyXG4gICAgcHJpdmF0ZSBlbG06IEVsZW1lbnRSZWYsXHJcbiAgICBwcml2YXRlIGRlZmF1bHRzOiBBdXRvbnVtZXJpY0RlZmF1bHRzLFxyXG4gICAgcHJpdmF0ZSByZW5kZXJlcjogUmVuZGVyZXIyLFxyXG4gICkge1xyXG4gIH1cclxuXHJcbiAgbmdPbkluaXQoKTogdm9pZCB7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIG5vcm1hbGl6ZShvcHRpb25zOiBhbnkpIHtcclxuICAgIGNvbnN0IG5vcm1hbGl6ZWQgPSB7fTtcclxuICAgIE9iamVjdC5rZXlzKEF1dG9OdW1lcmljLm9wdGlvbnMpLmZvckVhY2goa2V5ID0+IHtcclxuICAgICAgaWYgKHR5cGVvZiBvcHRpb25zW2tleV0gPT09ICd1bmRlZmluZWQnKSB7XHJcbiAgICAgICAgbm9ybWFsaXplZFtrZXldID0gKHRoaXMuZGVmYXVsdHMgYXMgYW55KVtrZXldO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIG5vcm1hbGl6ZWRba2V5XSA9IG9wdGlvbnNba2V5XTtcclxuICAgICAgfVxyXG4gICAgfSk7XHJcbiAgICByZXR1cm4gbm9ybWFsaXplZDtcclxuICB9XHJcblxyXG4gIG5nQWZ0ZXJWaWV3SW5pdCgpOiB2b2lkIHtcclxuICAgIHRoaXMuaW5zdGFuY2UgPSBuZXcgQXV0b051bWVyaWMoXHJcbiAgICAgIHRoaXMuZWxtLm5hdGl2ZUVsZW1lbnQsXHJcbiAgICAgIHRoaXMuZ2V0T3B0aW9ucygpXHJcbiAgICApO1xyXG4gICAgdGhpcy5zZXREaXNhYmxlZFN0YXRlKHRoaXMuaXNEaXNhYmxlZCk7XHJcbiAgICB0aGlzLnVuc3Vic2NyaWJlRm9ybWF0ID0gdGhpcy5yZW5kZXJlci5saXN0ZW4odGhpcy5lbG0ubmF0aXZlRWxlbWVudCwgJ2F1dG9OdW1lcmljOmZvcm1hdHRlZCcsICgkZXZlbnQpID0+IHtcclxuICAgICAgdGhpcy5mb3JtYXR0ZWQuZW1pdCgkZXZlbnQpO1xyXG4gICAgfSk7XHJcbiAgICB0aGlzLnVuc3Vic2NyaWJlUmF3VmFsdWVNb2RpZmllZCA9IHRoaXMucmVuZGVyZXIubGlzdGVuKHRoaXMuZWxtLm5hdGl2ZUVsZW1lbnQsICdhdXRvTnVtZXJpYzpyYXdWYWx1ZU1vZGlmaWVkJywgKCRldmVudCkgPT4ge1xyXG4gICAgICB0aGlzLm9uQ2hhbmdlRm4oJGV2ZW50LmRldGFpbC5uZXdSYXdWYWx1ZSk7XHJcbiAgICAgIHRoaXMucmF3VmFsdWVNb2RpZmllZC5lbWl0KCRldmVudCk7XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgZ2V0T3B0aW9ucygpIHtcclxuICAgIGlmICh0aGlzLm9wdGlvbnMgPT09IHVuZGVmaW5lZCAmJiB0aGlzLnByZWRlZmluZWQgPT09IHVuZGVmaW5lZCkge1xyXG4gICAgICByZXR1cm4gdGhpcy5kZWZhdWx0cztcclxuICAgIH1cclxuICAgIGlmICh0aGlzLm9wdGlvbnMgIT09IHVuZGVmaW5lZCAmJiB0aGlzLnByZWRlZmluZWQgIT09IHVuZGVmaW5lZCkge1xyXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ3ByZWRlZmluZWQgYXR0cmlidXRlIGNvdWxkIG5vdCBiZSBjb21iaW5lZCB3aXRoIG9wdGlvbnMuIFBsZWFzZSB1c2UgZWl0aGVyIHByZWRlZmluZWQgb3Igb3B0aW9ucycpO1xyXG4gICAgfVxyXG4gICAgaWYgKHRoaXMub3B0aW9ucyAhPT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgIHJldHVybiB0aGlzLm5vcm1hbGl6ZSh0aGlzLm9wdGlvbnMpO1xyXG4gICAgfVxyXG4gICAgY29uc3QgcHJlZGVmaW5lZCA9IEF1dG9OdW1lcmljLmdldFByZWRlZmluZWRPcHRpb25zKClbdGhpcy5wcmVkZWZpbmVkXTtcclxuICAgIHJldHVybiB0aGlzLm5vcm1hbGl6ZShwcmVkZWZpbmVkKTtcclxuICB9XHJcblxyXG4gIG5nT25DaGFuZ2VzKGNoYW5nZXM6IFNpbXBsZUNoYW5nZXMpOiB2b2lkIHtcclxuICAgIGlmICghdGhpcy5pbnN0YW5jZSkge1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcbiAgICBpZiAoY2hhbmdlcy5vcHRpb25zIHx8IGNoYW5nZXMucHJlZGVmaW5lZCkge1xyXG4gICAgICBpZiAodGhpcy5zdHJhdGVneSA9PT0gJ3Jlc2V0Jykge1xyXG4gICAgICAgIHRoaXMuaW5zdGFuY2Uub3B0aW9ucy5yZXNldCgpO1xyXG4gICAgICB9XHJcbiAgICAgIHRoaXMuaW5zdGFuY2UudXBkYXRlKHRoaXMuZ2V0T3B0aW9ucygpKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIG5nT25EZXN0cm95KCk6IHZvaWQge1xyXG4gICAgdGhpcy51bnN1YnNjcmliZUZvcm1hdCgpO1xyXG4gICAgdGhpcy51bnN1YnNjcmliZVJhd1ZhbHVlTW9kaWZpZWQoKTtcclxuICAgIHRyeSB7XHJcbiAgICAgIHRoaXMuaW5zdGFuY2UucmVtb3ZlKCk7IC8vIHJlbW92ZSBsaXN0ZW5lcnNcclxuICAgIH0gY2F0Y2ggKGUpIHtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHdyaXRlVmFsdWUodmFsdWU6IGFueSk6IHZvaWQge1xyXG4gICAgaWYgKHRoaXMuaW5zdGFuY2UpIHtcclxuICAgICAgdGhpcy5pbnN0YW5jZS5zZXQodmFsdWUpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgLy8gYXV0b251bWVyaWMgaGFzbid0IGJlZW4gaW5pdGlhbGlzZWQgeWV0LCBzdG9yZSB0aGUgdmFsdWUgZm9yIGxhdGVyIHVzZVxyXG4gICAgICB0aGlzLmluaXRpYWxWYWx1ZSA9IHZhbHVlO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcmVnaXN0ZXJPbkNoYW5nZShmbjogYW55KTogdm9pZCB7XHJcbiAgICB0aGlzLm9uQ2hhbmdlRm4gPSBmbjtcclxuICB9XHJcblxyXG4gIHJlZ2lzdGVyT25Ub3VjaGVkKGZuOiAoKSA9PiB2b2lkKTogdm9pZCB7XHJcbiAgICB0aGlzLm9uVG91Y2hlZEZuID0gZm47XHJcbiAgfVxyXG5cclxuICBzZXREaXNhYmxlZFN0YXRlKGlzRGlzYWJsZWQ6IGJvb2xlYW4pOiB2b2lkIHtcclxuICAgIHRoaXMuaXNEaXNhYmxlZCA9IGlzRGlzYWJsZWQ7XHJcbiAgICBpZiAodGhpcy5pbnN0YW5jZSkge1xyXG4gICAgICBpZiAodGhpcy5pc0Rpc2FibGVkKSB7XHJcbiAgICAgICAgdGhpcy5yZW5kZXJlci5zZXRQcm9wZXJ0eSh0aGlzLmluc3RhbmNlLmRvbUVsZW1lbnQsICdkaXNhYmxlZCcsICdkaXNhYmxlZCcpO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHRoaXMucmVuZGVyZXIucmVtb3ZlQXR0cmlidXRlKHRoaXMuaW5zdGFuY2UuZG9tRWxlbWVudCwgJ2Rpc2FibGVkJyk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcbn1cclxuIl19