_onFocusInAndMouseEnter(e) {
        //TODO Create separate handlers for the focus and mouseenter events
        this.isEditing = false; // Just in case no `keyUp` event have been sent (i.e. if the user lost the focus from the current window while typing)

        if (!this.formulaMode && this.settings.unformatOnHover && e.type === 'mouseenter' && e.altKey) {
            this.constructor._unformatAltHovered(this);

            return;
        }

        if (e.type === 'focus') { //TODO Move that back to the 'focus' event handler when the separation between the 'focus' and 'mouseenter' handler will be done
            // Keep track if the element is currently focused
            this.isFocused = true;
            this.rawValueOnFocus = this.rawValue; // Keep track of the initial rawValue. This is needed to define if a change event must be dispatched later
        }

        if (e.type === 'focus' && this.settings.unformatOnHover && this.hoveredWithAlt) {
            this.constructor._reformatAltHovered(this);
        }

        if (e.type === 'focus' || e.type === 'mouseenter' && !this.isFocused) {
            let elementValueToSet = null; // Store the value we want to set on the element, and only call `_setElementValue()` once

            if (this.settings.emptyInputBehavior === AutoNumeric.options.emptyInputBehavior.focus &&
                this.rawValue < 0 && this.settings.negativeBracketsTypeOnBlur !== null && this.settings.isNegativeSignAllowed) { //FIXME this is called a second time in _addGroupSeparators too. Prevent this, if possible.
                // Only remove the brackets if the value is negative
                elementValueToSet = this.constructor._removeBrackets(AutoNumericHelper.getElementValue(this.domElement), this.settings);
                //FIXME The element value is set here, why continue and set it again later in that same parent logic block?
            }

            // Use the `rawValue`, multiplied by `rawValueDivisor` if defined
            const rawValueToFormat = this._getRawValueToFormat(this.rawValue);

            // Modify the element value according to the number of decimal places to show on focus or the `showOnlyNumbersOnFocus` option
            if (rawValueToFormat !== '') {
                // Round the given value according to the object state (focus/unfocused)
                const roundedValue = this.constructor._roundFormattedValueShownOnFocusOrBlur(rawValueToFormat, this.settings, this.isFocused);

                if (this.settings.showOnlyNumbersOnFocus === AutoNumeric.options.showOnlyNumbersOnFocus.onlyNumbers) {
                    //TODO Use a `this.settingsOverride` object instead of modifying the `this.settings` object
                    this.settings.digitGroupSeparator = '';
                    this.settings.currencySymbol      = '';
                    this.settings.suffixText          = '';
                    elementValueToSet = roundedValue.replace('.', this.settings.decimalCharacter);
                } else {
                    let formattedValue;
                    if (AutoNumericHelper.isNull(roundedValue)) {
                        formattedValue = '';
                    } else {
                        formattedValue = this.constructor._addGroupSeparators(roundedValue.replace('.', this.settings.decimalCharacter), this.settings, this.isFocused, rawValueToFormat);
                    }

                    elementValueToSet = formattedValue;
                }
            }

            // In order to send a 'native' change event when blurring the input, we need to first store the initial input value on focus.
            if (AutoNumericHelper.isNull(elementValueToSet)) {
                this.valueOnFocus = '';
            } else {
                this.valueOnFocus = elementValueToSet;
            }

            this.lastVal = this.valueOnFocus;
            const isEmptyValue = this.constructor._isElementValueEmptyOrOnlyTheNegativeSign(this.valueOnFocus, this.settings);
            const orderedValue = this.constructor._orderValueCurrencySymbolAndSuffixText(this.valueOnFocus, this.settings, true); // This displays the currency sign on hover even if the rawValue is empty
            const orderedValueTest = (isEmptyValue && orderedValue !== '') && this.settings.emptyInputBehavior === AutoNumeric.options.emptyInputBehavior.focus;
            if (orderedValueTest) {
                elementValueToSet = orderedValue;
            }

            if (!AutoNumericHelper.isNull(elementValueToSet)) {
                this._setElementValue(elementValueToSet);
            }

            if (orderedValueTest && orderedValue === this.settings.currencySymbol && this.settings.currencySymbolPlacement === AutoNumeric.options.currencySymbolPlacement.suffix) {
                // If there is a currency symbol and its on the right hand side, then we place the caret accordingly on the far left side
                AutoNumericHelper.setElementSelection(e.target, 0);
            }
        }
    }
Handler for 'focusin' and 'mouseenter' events
On focusin, multiple things happens :
- If `Alt` is pressed, unformat
- Remove the separators if `showOnlyNumbersOnFocus` is set
- Depending on `emptyInputBehavior`, reformat the empty formatted value
- Display the correct number of decimal places (on focus/blur)
- Place the caret correctly if the element is empty

Note: On focusin, the `rawValue` is never changed. Only the formatted value can be modified.

@param {KeyboardEvent|MouseEvent} e
@private