Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- import { Directive, Attribute, Component } from '@angular/core';
- @Directive({
- selector: '[mask]',
- host: {
- '(keyup)': 'onInputChange($event)'
- }
- })
- export class InputMask {
- pattern: string;
- constructor(
- @Attribute('mask') pattern: string
- ) {
- this.pattern = pattern;
- }
- onInputChange(e) {
- try {
- let value = e.target.value,
- caret = e.target.selectionStart,
- pattern = this.pattern,
- reserve = pattern.replace(/\*/, 'g'),
- applied = '',
- ordinal = 0;
- if (e.keyCode === 8 || e.key === 'Backspace' || e.keyCode === 46 || e.key === 'Delete') {
- if (value.length) {
- while (value.length && pattern[value.length] && pattern[value.length] !== '*') {
- value = value.substring(0, value.length - 1);
- }
- if (pattern.substring(0, value.length).indexOf('*') < 0) {
- value = value.substring(0, value.length - 1);
- }
- }
- }
- for (var i = 0; i < value.length; i++) {
- if (i < pattern.length) {
- if (value[i] === pattern[ordinal]) {
- applied += value[i];
- ordinal++;
- } else if (reserve.indexOf(value[i]) > -1) {
- } else {
- while (ordinal < pattern.length && pattern[ordinal] !== '*') {
- applied += pattern[ordinal];
- ordinal++;
- }
- applied += value[i];
- ordinal++;
- while (ordinal < pattern.length && pattern[ordinal] !== '*') {
- applied += pattern[ordinal];
- ordinal++;
- }
- }
- }
- }
- e.target.value = applied;
- if (caret < value.length) {
- e.target.setSelectionRange(caret, caret);
- }
- } catch (ex) {
- console.error(ex.message);
- }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement