@ioniczoo/chameleon-mask-directive
Version:
Maks Directive for Ionic Designed to Work with Numbers
72 lines (63 loc) • 1.84 kB
text/typescript
import { Directive, Attribute, NgModule } from '@angular/core';
/**
* Cameleão Mask Directive
*
* Mask Directive for Ionic Designed to Work with Numbers
*
* @example
*<ion-input type="text" mask="(**) * ****-****"></ion-input>
*
*- This will be util to numbers like (77) 9 9933-8525
*
*/
export class MaskDirective {
private pattern: string;
/**
* Gets pattern that will be applied to the entry using the "mask"
*
* @param {string} maskPattern Original Mask
* @return {void}
*/
constructor(
maskPattern: string
) {
this.pattern = maskPattern;
}
/**
* Called when a javascript event with the attribute 'target.value' is triggered (keydown, keyup, keypress)
*
* @param {jsEvent} event javascript event with the attribute 'target.value'
*/
private onInputChange(event): void {
if (event.keyCode != 8 || event.which != 8 || event.key != "Backspace")
event.target.value = this.mask(event.target.value)
}
/**
* Applies the mask pattern corresponding to the string and its length
*
* @param {string} origin String to apply the mask pattern
* @return {string} String with the mask pattern correspondent
*/
private mask(origin: string): string {
var left, right, part = origin.length;
if (part >= this.pattern.length) return origin.slice(0, this.pattern.length - 1);
while (this.pattern[part] && this.pattern[part] != '*') {
left = origin.slice(0, part)
right = origin.slice(part)
origin = left + this.pattern[part] + right;
part = origin.length;
}
return origin;
}
}
export class MaskDirectiveModule {}