angular2-text-mask
Version:
Angular 2 directive for input text masking
139 lines • 6.08 kB
JavaScript
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
var core_1 = require("@angular/core");
var forms_1 = require("@angular/forms");
var platform_browser_1 = require("@angular/platform-browser");
var textMaskCore_1 = require("text-mask-core/dist/textMaskCore");
var TextMaskConfig = /** @class */ (function () {
function TextMaskConfig() {
}
return TextMaskConfig;
}());
exports.TextMaskConfig = TextMaskConfig;
exports.MASKEDINPUT_VALUE_ACCESSOR = {
provide: forms_1.NG_VALUE_ACCESSOR,
useExisting: core_1.forwardRef(function () { return MaskedInputDirective; }),
multi: true
};
/**
* We must check whether the agent is Android because composition events
* behave differently between iOS and Android.
*/
function _isAndroid() {
var userAgent = platform_browser_1.ɵgetDOM() ? platform_browser_1.ɵgetDOM().getUserAgent() : '';
return /android (\d+)/.test(userAgent.toLowerCase());
}
var MaskedInputDirective = /** @class */ (function () {
function MaskedInputDirective(_renderer, _elementRef, _compositionMode) {
this._renderer = _renderer;
this._elementRef = _elementRef;
this._compositionMode = _compositionMode;
this.textMaskConfig = {
mask: [],
guide: true,
placeholderChar: '_',
pipe: undefined,
keepCharPositions: false,
};
this.onChange = function (_) { };
this.onTouched = function () { };
/** Whether the user is creating a composition string (IME events). */
this._composing = false;
if (this._compositionMode == null) {
this._compositionMode = !_isAndroid();
}
}
MaskedInputDirective.prototype.ngOnChanges = function (changes) {
this._setupMask(true);
if (this.textMaskInputElement !== undefined) {
this.textMaskInputElement.update(this.inputElement.value);
}
};
MaskedInputDirective.prototype.writeValue = function (value) {
this._setupMask();
// set the initial value for cases where the mask is disabled
var normalizedValue = value == null ? '' : value;
this._renderer.setProperty(this.inputElement, 'value', normalizedValue);
if (this.textMaskInputElement !== undefined) {
this.textMaskInputElement.update(value);
}
};
MaskedInputDirective.prototype.registerOnChange = function (fn) { this.onChange = fn; };
MaskedInputDirective.prototype.registerOnTouched = function (fn) { this.onTouched = fn; };
MaskedInputDirective.prototype.setDisabledState = function (isDisabled) {
this._renderer.setProperty(this._elementRef.nativeElement, 'disabled', isDisabled);
};
MaskedInputDirective.prototype._handleInput = function (value) {
if (!this._compositionMode || (this._compositionMode && !this._composing)) {
this._setupMask();
if (this.textMaskInputElement !== undefined) {
this.textMaskInputElement.update(value);
// get the updated value
value = this.inputElement.value;
this.onChange(value);
}
}
};
MaskedInputDirective.prototype._setupMask = function (create) {
if (create === void 0) { create = false; }
if (!this.inputElement) {
if (this._elementRef.nativeElement.tagName.toUpperCase() === 'INPUT') {
// `textMask` directive is used directly on an input element
this.inputElement = this._elementRef.nativeElement;
}
else {
// `textMask` directive is used on an abstracted input element, `md-input-container`, etc
this.inputElement = this._elementRef.nativeElement.getElementsByTagName('INPUT')[0];
}
}
if (this.inputElement && create) {
this.textMaskInputElement = textMaskCore_1.createTextMaskInputElement(Object.assign({ inputElement: this.inputElement }, this.textMaskConfig));
}
};
MaskedInputDirective.prototype._compositionStart = function () { this._composing = true; };
MaskedInputDirective.prototype._compositionEnd = function (value) {
this._composing = false;
this._compositionMode && this._handleInput(value);
};
MaskedInputDirective.decorators = [
{ type: core_1.Directive, args: [{
host: {
'(input)': '_handleInput($event.target.value)',
'(blur)': 'onTouched()',
'(compositionstart)': '_compositionStart()',
'(compositionend)': '_compositionEnd($event.target.value)'
},
selector: '[textMask]',
exportAs: 'textMask',
providers: [exports.MASKEDINPUT_VALUE_ACCESSOR]
},] },
];
/** @nocollapse */
MaskedInputDirective.ctorParameters = function () { return [
{ type: core_1.Renderer2, },
{ type: core_1.ElementRef, },
{ type: undefined, decorators: [{ type: core_1.Optional }, { type: core_1.Inject, args: [forms_1.COMPOSITION_BUFFER_MODE,] },] },
]; };
MaskedInputDirective.propDecorators = {
'textMaskConfig': [{ type: core_1.Input, args: ['textMask',] },],
};
return MaskedInputDirective;
}());
exports.MaskedInputDirective = MaskedInputDirective;
var TextMaskModule = /** @class */ (function () {
function TextMaskModule() {
}
TextMaskModule.decorators = [
{ type: core_1.NgModule, args: [{
declarations: [MaskedInputDirective],
exports: [MaskedInputDirective]
},] },
];
/** @nocollapse */
TextMaskModule.ctorParameters = function () { return []; };
return TextMaskModule;
}());
exports.TextMaskModule = TextMaskModule;
var textMaskCore_2 = require("text-mask-core/dist/textMaskCore");
exports.conformToMask = textMaskCore_2.conformToMask;
//# sourceMappingURL=angular2TextMask.js.map