UNPKG

ng-form-helper

Version:

Feature set to use in your angular form

201 lines 17 kB
/** * @fileoverview added by tsickle * Generated from: lib/field-mask.directive.ts * @suppress {checkTypes,constantProperty,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc */ import * as tslib_1 from "tslib"; import { Directive, ElementRef, forwardRef, HostListener, Input, Renderer2 } from '@angular/core'; import { NG_VALUE_ACCESSOR } from '@angular/forms'; import { FormFieldDirective } from './form-field.directive'; var FieldMaskDirective = /** @class */ (function (_super) { tslib_1.__extends(FieldMaskDirective, _super); function FieldMaskDirective(element, renderer) { var _this = _super.call(this) || this; _this.element = element; _this.renderer = renderer; /** * The mask can't contain numbers */ _this.MASK_SHOULD_NOT_HAVE_NUMBERS = /[0-8]/gi; _this.MASK_MUST_FINISH_WITH_A_NUMBER = /\d$/; _this.generatedMaskConfig = {}; return _this; } Object.defineProperty(FieldMaskDirective.prototype, "setFormFieldMask", { set: /** * @param {?} formFieldMask * @return {?} */ function (formFieldMask) { this.generatedMaskConfig = this.generateMaskConfig(formFieldMask); }, enumerable: true, configurable: true }); /** * @private * @param {?} formFieldMask * @return {?} */ FieldMaskDirective.prototype.generateMaskConfig = /** * @private * @param {?} formFieldMask * @return {?} */ function (formFieldMask) { if (this.MASK_SHOULD_NOT_HAVE_NUMBERS.test(formFieldMask)) { throw new Error("Can't generate mask: \"" + formFieldMask + "\". Invalid charactere found.\n You should not use numeric character to compose the field mask."); } if (!this.MASK_MUST_FINISH_WITH_A_NUMBER.test(formFieldMask)) { throw new Error("Can't generate mask: \"" + formFieldMask + "\". Invalid format found.\n The mask must finish with a numeric character (9)."); } /** @type {?} */ var generatedMaskConfig = {}; /** @type {?} */ var decomposeGivenMask = formFieldMask.match(/(9+|[^9]+)/g); if (!decomposeGivenMask) { throw new Error("Can't generate mask: \"" + formFieldMask + "\". Invalid format found.\n You must have at least one 9 character in the mask."); } /** @type {?} */ var isNumeric = /^\d+$/; /** @type {?} */ var composeMask = ''; /** @type {?} */ var numberMapper = ''; /** @type {?} */ var numberGroup = 1; /** @type {?} */ var numericLength = 0; decomposeGivenMask.forEach((/** * @param {?} textGroup * @return {?} */ function (textGroup) { if (isNumeric.test(textGroup)) { numericLength += textGroup.length; composeMask += "$" + numberGroup++; /** @type {?} */ var currentNumberMapper = numberMapper + "([0-9]{1," + textGroup.length + "})"; numberMapper += "([0-9]{" + textGroup.length + "})"; generatedMaskConfig[String(numericLength)] = { valueStructure: new RegExp(currentNumberMapper, 'g'), maskStructure: composeMask }; return; } composeMask += textGroup; })); return generatedMaskConfig; }; /** * @private * @param {?} currentValue * @return {?} */ FieldMaskDirective.prototype.getPartialMask = /** * @private * @param {?} currentValue * @return {?} */ function (currentValue) { /** @type {?} */ var lengths = Object.keys(this.generatedMaskConfig); /** @type {?} */ var length = lengths.find((/** * @param {?} maxLength * @return {?} */ function (maxLength) { return currentValue.length <= Number(maxLength); })); length = length || lengths.pop() || ''; /** @type {?} */ var maskConfig = this.generatedMaskConfig[length]; return { valueStructure: maskConfig.valueStructure, maskStructure: maskConfig.maskStructure, maxLength: Number(length) }; }; /** * @param {?} event * @return {?} */ FieldMaskDirective.prototype.onInput = /** * @param {?} event * @return {?} */ function (event) { /** @type {?} */ var currentMaskedValue = this.getValueFromKeyboardEvent(event); // this validation is here for IE11 or lower... it emmits the input event for anything // and create a loop if (currentMaskedValue === this.oldState.value) { return; } /** @type {?} */ var currentValue = currentMaskedValue.replace(/[^0-9]/g, ''); /** @type {?} */ var maskConfig = this.getPartialMask(currentValue); if (currentValue.length > maskConfig.maxLength) { this.resetField(); return; } /** @type {?} */ var maskedValue = currentValue.replace(maskConfig.valueStructure, maskConfig.maskStructure); this.updateFieldValue(maskedValue); }; FieldMaskDirective.decorators = [ { type: Directive, args: [{ selector: '[formFieldMask]', providers: [ { provide: NG_VALUE_ACCESSOR, useExisting: forwardRef((/** * @return {?} */ function () { return FieldMaskDirective; })), multi: true } ] },] } ]; /** @nocollapse */ FieldMaskDirective.ctorParameters = function () { return [ { type: ElementRef }, { type: Renderer2 } ]; }; FieldMaskDirective.propDecorators = { setFormFieldMask: [{ type: Input, args: ['formFieldMask',] }], onInput: [{ type: HostListener, args: ['input', ['$event'],] }] }; return FieldMaskDirective; }(FormFieldDirective)); export { FieldMaskDirective }; if (false) { /** * The mask can't contain numbers * @type {?} * @private */ FieldMaskDirective.prototype.MASK_SHOULD_NOT_HAVE_NUMBERS; /** * @type {?} * @private */ FieldMaskDirective.prototype.MASK_MUST_FINISH_WITH_A_NUMBER; /** * @type {?} * @private */ FieldMaskDirective.prototype.generatedMaskConfig; /** * @type {?} * @protected */ FieldMaskDirective.prototype.element; /** * @type {?} * @protected */ FieldMaskDirective.prototype.renderer; } //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmllbGQtbWFzay5kaXJlY3RpdmUuanMiLCJzb3VyY2VSb290Ijoibmc6Ly9uZy1mb3JtLWhlbHBlci8iLCJzb3VyY2VzIjpbImxpYi9maWVsZC1tYXNrLmRpcmVjdGl2ZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7QUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLFVBQVUsRUFBRSxVQUFVLEVBQUUsWUFBWSxFQUFFLEtBQUssRUFBVSxTQUFTLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDMUcsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDbkQsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFFNUQ7SUFVd0MsOENBQWtCO0lBcUJ4RCw0QkFDWSxPQUFtQixFQUNuQixRQUFtQjtRQUYvQixZQUlFLGlCQUFPLFNBQ1I7UUFKVyxhQUFPLEdBQVAsT0FBTyxDQUFZO1FBQ25CLGNBQVEsR0FBUixRQUFRLENBQVc7Ozs7UUFsQmQsa0NBQTRCLEdBQUcsU0FBUyxDQUFDO1FBQ3pDLG9DQUE4QixHQUFHLEtBQUssQ0FBQztRQUVoRCx5QkFBbUIsR0FLdkIsRUFBRSxDQUFDOztJQWFQLENBQUM7SUFWRCxzQkFDSSxnREFBZ0I7Ozs7O1FBRHBCLFVBQ3FCLGFBQXFCO1lBQ3hDLElBQUksQ0FBQyxtQkFBbUIsR0FBRyxJQUFJLENBQUMsa0JBQWtCLENBQUMsYUFBYSxDQUFDLENBQUM7UUFDcEUsQ0FBQzs7O09BQUE7Ozs7OztJQVNPLCtDQUFrQjs7Ozs7SUFBMUIsVUFBMkIsYUFBcUI7UUFNOUMsSUFBSSxJQUFJLENBQUMsNEJBQTRCLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxFQUFFO1lBQ3pELE1BQU0sSUFBSSxLQUFLLENBQ2IsNEJBQXlCLGFBQWEsMkdBQzBCLENBQ2pFLENBQUM7U0FDSDtRQUVELElBQUksQ0FBQyxJQUFJLENBQUMsOEJBQThCLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxFQUFFO1lB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O29CQUNULFFBQVEsRUFBRSxpQkFBaUI7b0JBQzNCLFNBQVMsRUFBRTt3QkFDVDs0QkFDRSxPQUFPLEVBQUUsaUJBQWlCOzRCQUMxQixXQUFXLEVBQUUsVUFBVTs7OzRCQUFDLGNBQU0sT0FBQSxrQkFBa0IsRUFBbEIsQ0FBa0IsRUFBQzs0QkFDakQsS0FBSyxFQUFFLElBQUk7eUJBQ1o7cUJBQ0Y7aUJBQ0Y7Ozs7Z0JBYm1CLFVBQVU7Z0JBQTJDLFNBQVM7OzttQ0E4Qi9FLEtBQUssU0FBQyxlQUFlOzBCQTBGckIsWUFBWSxTQUFDLE9BQU8sRUFBRSxDQUFDLFFBQVEsQ0FBQzs7SUFvQm5DLHlCQUFDO0NBQUEsQUF4SUQsQ0FVd0Msa0JBQWtCLEdBOEh6RDtTQTlIWSxrQkFBa0I7Ozs7Ozs7SUFLN0IsMERBQTBEOzs7OztJQUMxRCw0REFBd0Q7Ozs7O0lBRXhELGlEQUtPOzs7OztJQVNMLHFDQUE2Qjs7Ozs7SUFDN0Isc0NBQTZCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgRGlyZWN0aXZlLCBFbGVtZW50UmVmLCBmb3J3YXJkUmVmLCBIb3N0TGlzdGVuZXIsIElucHV0LCBPbkluaXQsIFJlbmRlcmVyMiB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgTkdfVkFMVUVfQUNDRVNTT1IgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQgeyBGb3JtRmllbGREaXJlY3RpdmUgfSBmcm9tICcuL2Zvcm0tZmllbGQuZGlyZWN0aXZlJztcblxuQERpcmVjdGl2ZSh7XG4gIHNlbGVjdG9yOiAnW2Zvcm1GaWVsZE1hc2tdJyxcbiAgcHJvdmlkZXJzOiBbXG4gICAge1xuICAgICAgcHJvdmlkZTogTkdfVkFMVUVfQUNDRVNTT1IsXG4gICAgICB1c2VFeGlzdGluZzogZm9yd2FyZFJlZigoKSA9PiBGaWVsZE1hc2tEaXJlY3RpdmUpLFxuICAgICAgbXVsdGk6IHRydWVcbiAgICB9XG4gIF1cbn0pXG5leHBvcnQgY2xhc3MgRmllbGRNYXNrRGlyZWN0aXZlIGV4dGVuZHMgRm9ybUZpZWxkRGlyZWN0aXZlIGltcGxlbWVudHMgT25Jbml0IHtcblxuICAvKipcbiAgICogVGhlIG1hc2sgY2FuJ3QgY29udGFpbiBudW1iZXJzXG4gICAqL1xuICBwcml2YXRlIHJlYWRvbmx5IE1BU0tfU0hPVUxEX05PVF9IQVZFX05VTUJFUlMgPSAvWzAtOF0vZ2k7XG4gIHByaXZhdGUgcmVhZG9ubHkgTUFTS19NVVNUX0ZJTklTSF9XSVRIX0FfTlVNQkVSID0gL1xcZCQvO1xuXG4gIHByaXZhdGUgZ2VuZXJhdGVkTWFza0NvbmZpZzoge1xuICAgIFttYXhMZW5ndGg6IHN0cmluZ106IHtcbiAgICAgIHZhbHVlU3RydWN0dXJlOiBSZWdFeHA7XG4gICAgICBtYXNrU3RydWN0dXJlOiBzdHJpbmc7XG4gICAgfVxuICB9ID0ge307XG5cblxuICBASW5wdXQoJ2Zvcm1GaWVsZE1hc2snKVxuICBzZXQgc2V0Rm9ybUZpZWxkTWFzayhmb3JtRmllbGRNYXNrOiBzdHJpbmcpIHtcbiAgICB0aGlzLmdlbmVyYXRlZE1hc2tDb25maWcgPSB0aGlzLmdlbmVyYXRlTWFza0NvbmZpZyhmb3JtRmllbGRNYXNrKTtcbiAgfVxuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByb3RlY3RlZCBlbGVtZW50OiBFbGVtZW50UmVmLFxuICAgIHByb3RlY3RlZCByZW5kZXJlcjogUmVuZGVyZXIyXG4gICkge1xuICAgIHN1cGVyKCk7XG4gIH1cblxuICBwcml2YXRlIGdlbmVyYXRlTWFza0NvbmZpZyhmb3JtRmllbGRNYXNrOiBzdHJpbmcpOiB7XG4gICAgW21heExlbmd0aDogbnVtYmVyXToge1xuICAgICAgdmFsdWVTdHJ1Y3R1cmU6IFJlZ0V4cDtcbiAgICAgIG1hc2tTdHJ1Y3R1cmU6IHN0cmluZztcbiAgICB9XG4gIH0ge1xuICAgIGlmICh0aGlzLk1BU0tfU0hPVUxEX05PVF9IQVZFX05VTUJFUlMudGVzdChmb3JtRmllbGRNYXNrKSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICBgQ2FuJ3QgZ2VuZXJhdGUgbWFzazogXCIke2Zvcm1GaWVsZE1hc2t9XCIuIEludmFsaWQgY2hhcmFjdGVyZSBmb3VuZC5cbiAgICAgICAgWW91IHNob3VsZCBub3QgdXNlIG51bWVyaWMgY2hhcmFjdGVyIHRvIGNvbXBvc2UgdGhlIGZpZWxkIG1hc2suYFxuICAgICAgKTtcbiAgICB9XG5cbiAgICBpZiAoIXRoaXMuTUFTS19NVVNUX0ZJTklTSF9XSVRIX0FfTlVNQkVSLnRlc3QoZm9ybUZpZWxkTWFzaykpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgYENhbid0IGdlbmVyYXRlIG1hc2s6IFwiJHtmb3JtRmllbGRNYXNrfVwiLiBJbnZhbGlkIGZvcm1hdCBmb3VuZC5cbiAgICAgICAgVGhlIG1hc2sgbXVzdCBmaW5pc2ggd2l0aCBhIG51bWVyaWMgY2hhcmFjdGVyICg5KS5gXG4gICAgICApO1xuICAgIH1cblxuICAgIGNvbnN0IGdlbmVyYXRlZE1hc2tDb25maWc6IHtcbiAgICAgIFttYXhMZW5ndGg6IHN0cmluZ106IHtcbiAgICAgICAgdmFsdWVTdHJ1Y3R1cmU6IFJlZ0V4cDtcbiAgICAgICAgbWFza1N0cnVjdHVyZTogc3RyaW5nO1xuICAgICAgfVxuICAgIH0gPSB7fTtcblxuICAgIGNvbnN0IGRlY29tcG9zZUdpdmVuTWFzayA9IGZvcm1GaWVsZE1hc2subWF0Y2goLyg5K3xbXjldKykvZyk7XG4gICAgaWYgKCFkZWNvbXBvc2VHaXZlbk1hc2spIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgYENhbid0IGdlbmVyYXRlIG1hc2s6IFwiJHtmb3JtRmllbGRNYXNrfVwiLiBJbnZhbGlkIGZvcm1hdCBmb3VuZC5cbiAgICAgICAgWW91IG11c3QgaGF2ZSBhdCBsZWFzdCBvbmUgOSBjaGFyYWN0ZXIgaW4gdGhlIG1hc2suYFxuICAgICAgKTtcbiAgICB9XG5cbiAgICBjb25zdCBpc051bWVyaWMgPSAvXlxcZCskLztcbiAgICBsZXQgY29tcG9zZU1hc2sgPSAnJztcbiAgICBsZXQgbnVtYmVyTWFwcGVyID0gJyc7XG4gICAgbGV0IG51bWJlckdyb3VwID0gMTtcbiAgICBsZXQgbnVtZXJpY0xlbmd0aCA9IDA7XG5cbiAgICBkZWNvbXBvc2VHaXZlbk1hc2suZm9yRWFjaCh0ZXh0R3JvdXAgPT4ge1xuICAgICAgaWYgKGlzTnVtZXJpYy50ZXN0KHRleHRHcm91cCkpIHtcbiAgICAgICAgbnVtZXJpY0xlbmd0aCArPSB0ZXh0R3JvdXAubGVuZ3RoO1xuICAgICAgICBjb21wb3NlTWFzayArPSBgXFwkJHtudW1iZXJHcm91cCsrfWA7XG4gICAgICAgIGNvbnN0IGN1cnJlbnROdW1iZXJNYXBwZXIgPSBgJHtudW1iZXJNYXBwZXJ9KFswLTldezEsJHt0ZXh0R3JvdXAubGVuZ3RofX0pYDtcbiAgICAgICAgbnVtYmVyTWFwcGVyICs9IGAoWzAtOV17JHt0ZXh0R3JvdXAubGVuZ3RofX0pYDtcblxuICAgICAgICBnZW5lcmF0ZWRNYXNrQ29uZmlnW1N0cmluZyhudW1lcmljTGVuZ3RoKV0gPSB7XG4gICAgICAgICAgdmFsdWVTdHJ1Y3R1cmU6IG5ldyBSZWdFeHAoY3VycmVudE51bWJlck1hcHBlciwgJ2cnKSxcbiAgICAgICAgICBtYXNrU3RydWN0dXJlOiBjb21wb3NlTWFza1xuICAgICAgICB9O1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIGNvbXBvc2VNYXNrICs9IHRleHRHcm91cDtcbiAgICB9KTtcblxuICAgIHJldHVybiBnZW5lcmF0ZWRNYXNrQ29uZmlnO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXRQYXJ0aWFsTWFzayhjdXJyZW50VmFsdWU6IHN0cmluZyk6IHtcbiAgICB2YWx1ZVN0cnVjdHVyZTogUmVnRXhwO1xuICAgIG1hc2tTdHJ1Y3R1cmU6IHN0cmluZztcbiAgICBtYXhMZW5ndGg6IG51bWJlcjtcbiAgfSB7XG4gICAgY29uc3QgbGVuZ3RocyA9IE9iamVjdC5rZXlzKHRoaXMuZ2VuZXJhdGVkTWFza0NvbmZpZyk7XG4gICAgbGV0IGxlbmd0aCA9IGxlbmd0aHMuZmluZChtYXhMZW5ndGggPT4gY3VycmVudFZhbHVlLmxlbmd0aCA8PSBOdW1iZXIobWF4TGVuZ3RoKSk7XG4gICAgbGVuZ3RoID0gbGVuZ3RoIHx8IGxlbmd0aHMucG9wKCkgfHwgJyc7XG4gICAgY29uc3QgbWFza0NvbmZpZyA9IHRoaXMuZ2VuZXJhdGVkTWFza0NvbmZpZ1tsZW5ndGhdO1xuXG4gICAgcmV0dXJuIHtcbiAgICAgIHZhbHVlU3RydWN0dXJlOiBtYXNrQ29uZmlnLnZhbHVlU3RydWN0dXJlLFxuICAgICAgbWFza1N0cnVjdHVyZTogbWFza0NvbmZpZy5tYXNrU3RydWN0dXJlLFxuICAgICAgbWF4TGVuZ3RoOiBOdW1iZXIobGVuZ3RoKVxuICAgIH07XG4gIH1cblxuICBASG9zdExpc3RlbmVyKCdpbnB1dCcsIFsnJGV2ZW50J10pXG4gIG9uSW5wdXQoZXZlbnQ6IEtleWJvYXJkRXZlbnQpOiB2b2lkIHtcbiAgICBjb25zdCBjdXJyZW50TWFza2VkVmFsdWUgPSB0aGlzLmdldFZhbHVlRnJvbUtleWJvYXJkRXZlbnQoZXZlbnQpO1xuICAgIC8vICB0aGlzIHZhbGlkYXRpb24gaXMgaGVyZSBmb3IgSUUxMSBvciBsb3dlci4uLiBpdCBlbW1pdHMgdGhlIGlucHV0IGV2ZW50IGZvciBhbnl0aGluZ1xuICAgIC8vICBhbmQgY3JlYXRlIGEgbG9vcFxuICAgIGlmIChjdXJyZW50TWFza2VkVmFsdWUgPT09IHRoaXMub2xkU3RhdGUudmFsdWUpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCBjdXJyZW50VmFsdWUgPSBjdXJyZW50TWFza2VkVmFsdWUucmVwbGFjZSgvW14wLTldL2csICcnKTtcbiAgICBjb25zdCBtYXNrQ29uZmlnID0gdGhpcy5nZXRQYXJ0aWFsTWFzayhjdXJyZW50VmFsdWUpO1xuXG4gICAgaWYgKGN1cnJlbnRWYWx1ZS5sZW5ndGggPiBtYXNrQ29uZmlnLm1heExlbmd0aCkge1xuICAgICAgdGhpcy5yZXNldEZpZWxkKCk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgbWFza2VkVmFsdWUgPSBjdXJyZW50VmFsdWUucmVwbGFjZShtYXNrQ29uZmlnLnZhbHVlU3RydWN0dXJlLCBtYXNrQ29uZmlnLm1hc2tTdHJ1Y3R1cmUpO1xuICAgIHRoaXMudXBkYXRlRmllbGRWYWx1ZShtYXNrZWRWYWx1ZSk7XG4gIH1cbn1cbiJdfQ==