src/input.manager.ts
        
                                    constructor(htmlInputElement: any)
                                 | 
                            
| 
                                         Defined in src/input.manager.ts:3 
                                     | 
                                
| setCursorAt | 
            setCursorAt(position: number)
                                 | 
                            
| 
                                         Defined in src/input.manager.ts:8 
                                     | 
                                
| 
            
                                         
                                            Returns:      
                                void
            
                                         | 
                            
| updateValueAndCursor | 
            updateValueAndCursor(newRawValue: string, oldLength: number, selectionStart: number)
                                 | 
                            
| 
                                         Defined in src/input.manager.ts:21 
                                     | 
                                
| 
            
                                         
                                            Returns:      
                                void
            
                                         | 
                            
| canInputMoreNumbers | 
                                    canInputMoreNumbers:      | 
                            
| 
                                         Defined in src/input.manager.ts:28 
                                     | 
                                
| inputSelection | 
                                    inputSelection:      | 
                            
| 
                                         Defined in src/input.manager.ts:38 
                                     | 
                                
| rawValue | 
                                    rawValue:      | 
                            
| 
                                         Defined in src/input.manager.ts:78 
                                     | 
                                
| storedRawValue | 
                                    storedRawValue:      | 
                            
| 
                                         Defined in src/input.manager.ts:90 
                                     | 
                                
export class InputManager {
    private _storedRawValue: string;
    constructor(private htmlInputElement: any) {
    }
    setCursorAt(position: number): void {
        if (this.htmlInputElement.setSelectionRange) {
            this.htmlInputElement.focus();
            this.htmlInputElement.setSelectionRange(position, position);
        } else if (this.htmlInputElement.createTextRange) {
            let textRange = this.htmlInputElement.createTextRange();
            textRange.collapse(true);
            textRange.moveEnd("character", position);
            textRange.moveStart("character", position);
            textRange.select();
        }
    }
    updateValueAndCursor(newRawValue: string, oldLength: number, selectionStart: number): void {
        this.rawValue = newRawValue;
        let newLength = newRawValue.length;
        selectionStart = selectionStart - (oldLength - newLength);
        this.setCursorAt(selectionStart);
    }
    get canInputMoreNumbers(): boolean {
        let haventReachedMaxLength = !(this.rawValue.length >= this.htmlInputElement.maxLength && this.htmlInputElement.maxLength >= 0);
        let selectionStart = this.inputSelection.selectionStart;
        let selectionEnd = this.inputSelection.selectionEnd;
        let haveNumberSelected = !!(selectionStart != selectionEnd &&
                                    this.htmlInputElement.value.substring(selectionStart, selectionEnd).match(/[^0-9\u0660-\u0669\u06F0-\u06F9]/));
        let startWithZero = (this.htmlInputElement.value.substring(0, 1) == "0");
        return haventReachedMaxLength || haveNumberSelected || startWithZero;
    }
    get inputSelection(): any {
        let selectionStart = 0;
        let selectionEnd = 0;
        if (typeof this.htmlInputElement.selectionStart == "number" && typeof this.htmlInputElement.selectionEnd == "number") {
            selectionStart = this.htmlInputElement.selectionStart;
            selectionEnd = this.htmlInputElement.selectionEnd;
        } else {
            let range = (<any>document).selection.createRange();
            if (range && range.parentElement() == this.htmlInputElement) {
                let lenght = this.htmlInputElement.value.length;
                let normalizedValue = this.htmlInputElement.value.replace(/\r\n/g, "\n");
                let startRange = this.htmlInputElement.createTextRange();
                startRange.moveToBookmark(range.getBookmark());
                let endRange = this.htmlInputElement.createTextRange();
                endRange.collapse(false);
                if (startRange.compareEndPoints("StartToEnd", endRange) > -1) {
                    selectionStart = selectionEnd = lenght;
                } else {
                    selectionStart = -startRange.moveStart("character", -lenght);
                    selectionStart += normalizedValue.slice(0, selectionStart).split("\n").length - 1;
                    if (startRange.compareEndPoints("EndToEnd", endRange) > -1) {
                        selectionEnd = lenght;
                    } else {
                        selectionEnd = -startRange.moveEnd("character", -lenght);
                        selectionEnd += normalizedValue.slice(0, selectionEnd).split("\n").length - 1;
                    }
                }
            }
        }
        return {
            selectionStart: selectionStart,
            selectionEnd: selectionEnd
        };
    }
    get rawValue(): string {
        return this.htmlInputElement && this.htmlInputElement.value;
    }
    set rawValue(value: string) {
        this._storedRawValue = value;
        if (this.htmlInputElement) {
            this.htmlInputElement.value = value;
        }
    }
    get storedRawValue(): string {
        return this._storedRawValue;
    }
}