Advertisement
MrMGomes

Untitled

Apr 25th, 2018
74
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. import { Directive, Attribute, Component } from '@angular/core';
  2.  
  3. @Directive({
  4.   selector: '[mask]',
  5.   host: {
  6.     '(keyup)': 'onInputChange($event)'
  7.   }
  8. })
  9. export class InputMask {
  10.  
  11.   pattern: string;
  12.  
  13.   constructor(
  14.     @Attribute('mask') pattern: string
  15.   ) {
  16.     this.pattern = pattern;
  17.   }
  18.  
  19.   onInputChange(e) {
  20.     try {
  21.  
  22.       let value = e.target.value,
  23.         caret = e.target.selectionStart,
  24.         pattern = this.pattern,
  25.         reserve = pattern.replace(/\*/, 'g'),
  26.         applied = '',
  27.         ordinal = 0;
  28.  
  29.       if (e.keyCode === 8 || e.key === 'Backspace' || e.keyCode === 46 || e.key === 'Delete') {
  30.         if (value.length) {
  31.           while (value.length && pattern[value.length] && pattern[value.length] !== '*') {
  32.             value = value.substring(0, value.length - 1);
  33.           }
  34.           if (pattern.substring(0, value.length).indexOf('*') < 0) {
  35.             value = value.substring(0, value.length - 1);
  36.           }
  37.         }
  38.       }
  39.  
  40.       for (var i = 0; i < value.length; i++) {
  41.         if (i < pattern.length) {
  42.           if (value[i] === pattern[ordinal]) {
  43.             applied += value[i];
  44.             ordinal++;
  45.           } else if (reserve.indexOf(value[i]) > -1) {
  46.           } else {
  47.             while (ordinal < pattern.length && pattern[ordinal] !== '*') {
  48.               applied += pattern[ordinal];
  49.               ordinal++;
  50.             }
  51.             applied += value[i];
  52.             ordinal++;
  53.             while (ordinal < pattern.length && pattern[ordinal] !== '*') {
  54.               applied += pattern[ordinal];
  55.               ordinal++;
  56.             }
  57.           }
  58.         }
  59.       }
  60.       e.target.value = applied;
  61.       if (caret < value.length) {
  62.         e.target.setSelectionRange(caret, caret);
  63.       }
  64.     } catch (ex) {
  65.       console.error(ex.message);
  66.     }
  67.  
  68.   }
  69.  
  70. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement