VaKeR CYBER ARMY
Logo of a company Server : Apache/2.4.41 (Ubuntu)
System : Linux absol.cf 5.4.0-198-generic #218-Ubuntu SMP Fri Sep 27 20:18:53 UTC 2024 x86_64
User : www-data ( 33)
PHP Version : 7.4.33
Disable Function : pcntl_alarm,pcntl_fork,pcntl_waitpid,pcntl_wait,pcntl_wifexited,pcntl_wifstopped,pcntl_wifsignaled,pcntl_wifcontinued,pcntl_wexitstatus,pcntl_wtermsig,pcntl_wstopsig,pcntl_signal,pcntl_signal_get_handler,pcntl_signal_dispatch,pcntl_get_last_error,pcntl_strerror,pcntl_sigprocmask,pcntl_sigwaitinfo,pcntl_sigtimedwait,pcntl_exec,pcntl_getpriority,pcntl_setpriority,pcntl_async_signals,pcntl_unshare,
Directory :  /var/www/html/libs/absol-full/dist/js/

Upload File :
current_dir [ Writeable ] document_root [ Writeable ]

 

Current File : /var/www/html/libs/absol-full/dist/js/mdls__absol-acomp__js__numberinput__NITextController.js
/*** module: node_modules/absol-acomp/js/numberinput/NITextController.js ***/
"use strict";

Object.defineProperty(exports, "__esModule", {
  value: true
});
exports.default = void 0;

var _keyboard = require("absol/src/Input/keyboard");

var _Text = require("absol/src/HTML5/Text");

var _utils = require("../utils");

var _ResizeSystem = _interopRequireDefault(require("absol/src/HTML5/ResizeSystem"));

var _noop = _interopRequireDefault(require("absol/src/Code/noop"));


/***
 *
 * @param {NumberInput} elt
 * @constructor
 */
function NITextController(elt) {
  this.elt = elt;
  /***
   *
   * @type {HTMLInputElement|AElement}
   */

  this.$input = this.elt.$input;
  Object.keys(NITextController.prototype).forEach(key => {
    if (key.startsWith('on')) this[key] = this[key].bind(this);
  });
  this.elt.$input.on('keydown', this.onKeyDown).on('paste', this.onKeyDown).on('blur', this.onBlur);
}

NITextController.prototype.estimateWidthBy = function (text) {
  if (this.elt.hasClass('as-pressing')) return;
  var bound = this.elt.getBoundingClientRect();
  var width = (0, _Text.measureText)(text, this.$input.getComputedStyleValue('font')).width;
  this.elt.addStyle('--text-width', width + 'px');
  var newBound = this.elt.getBoundingClientRect();
  if (newBound.width !== bound.width) _ResizeSystem.default.requestUpdateUpSignal(this.elt, true);
};

NITextController.prototype.flushTextToValue = function () {
  var thousandsSeparator = this.elt.thousandsSeparator || '';
  var decimalSeparator = this.elt.decimalSeparator;
  var text = this.$input.value;
  var floatText = text.split(thousandsSeparator).join('').split(decimalSeparator).join('.');
  this.elt._value = parseFloat(floatText);
  if (!(0, _utils.isRealNumber)(this.elt._value)) this.elt._value = null;
  this.elt._value = this.elt.value; //normalize value
};

NITextController.prototype.flushValueToText = function () {
  var formatter;
  var opt = Object.assign({}, this.elt._format);
  var value = this.elt.value;
  var text, parts;

  if (value === null) {
    text = '';
  } else if (opt.locales === 'none') {
    if (opt.maximumFractionDigits === 20) {
      text = value + '';
    } else if (opt.maximumFractionDigits === opt.minimumIntegerDigits) {
      text = value.toFixed(opt.maximumFractionDigits);
    } else {
      text = value + '';
      parts = text.split('.');
      parts[1] = parts[1] || '';

      if (parts[1].length < opt.minimumIntegerDigits) {
        text = value.toFixed(opt.minimumIntegerDigits);
      }
    }
  } else {
    formatter = new Intl.NumberFormat(this.elt._format.locales, opt);
    text = formatter.format(value);
  }

  this.$input.value = text;
  this.estimateWidthBy(text);
};

NITextController.prototype.reformat = function () {
  var thousandsSeparator = this.elt.thousandsSeparator || '';
  var decimalSeparator = this.elt.decimalSeparator;
  var caretPos = this.$input.selectionEnd;
  var value = this.$input.value;
  var parts = value.split(decimalSeparator);
  var caretWTSPos = value.substring(0, caretPos).split(thousandsSeparator).join('').length;
  parts[0] = parts[0].split('').filter(x => x.match(/[0-9\-]/)).reduce((ac, c, i, arr) => {
    ac += c;

    if (i + 1 < arr.length && (arr.length - i) % 3 === 1 && arr[i] !== '-') {
      ac += thousandsSeparator;
    }

    return ac;
  }, '');
  if (parts[1]) parts[1] = parts[1].split('').filter(x => x.match(/[0-9]/)).join('');
  var newValue = parts.join(decimalSeparator);
  var newCaretPos = 0;
  var counter = 0;

  for (newCaretPos = 0; newCaretPos < newValue.length && counter < caretWTSPos; ++newCaretPos) {
    if (newValue[newCaretPos].match(/[0-9\-]/) || newValue[newCaretPos] === decimalSeparator) {
      counter++;
    }
  }

  this.$input.value = newValue;
  this.$input.setSelectionRange(newCaretPos, newCaretPos);
  this.estimateWidthBy(newValue);
};

NITextController.prototype.onBlur = function () {
  this.flushValueToText();
  this.elt.notifyChanged({
    by: 'blur'
  });
};
/***
 * @param {KeyboardEvent|ClipboardEvent|{}} event
 * @param {boolean=} event
 */


NITextController.prototype.onKeyDown = function (event, dontInsert) {
  var key = event.type === 'keydown' ? (0, _keyboard.keyboardEventToKeyBindingIdent)(event) : '';

  if (key.length === 1 && !key.match(/[0-9.,\-]/) || key.match(/^shift-.$/)) {
    event.preventDefault();
    return;
  }

  var thousandsSeparator = this.elt.thousandsSeparator;
  var decimalSeparator = this.elt.decimalSeparator;
  var value = this.$input.value;
  var sStart = this.$input.selectionStart;
  var sEnd = this.$input.selectionEnd;
  var sDir = this.$input.selectionDirection;
  var onKeys = {};

  onKeys.unidentified = () => {
    var oldText = this.$input.value;
    setTimeout(() => {
      var newText = this.$input.value;
      if (oldText === newText) return;
      var key = newText[sStart];
      if (!key) return; //todo

      var fakeEvent = {
        type: 'keydown',
        preventDefault: _noop.default,
        key: key
      };

      if (key.match(/^[0-9.]$/)) {
        this.onKeyDown(fakeEvent, true);
      } else {
        this.$input.value = oldText;
        this.$input.setSelectionRange(sStart, sStart);
        this.onKeyDown(fakeEvent);
      }
    }, 10);
  };

  onKeys.process = () => {
    setTimeout(() => {
      this.flushTextToValue();
    }, 10);
  };

  onKeys.paste = () => {
    var clipboardData = event.clipboardData || window.clipboardData;
    var pastedData = clipboardData.getData('Text');
    var hasSeparator = value.indexOf(decimalSeparator) >= 0;
    pastedData = pastedData.split('').filter(c => {
      if (c.match(/[0-9]/)) return true;

      if (!hasSeparator && c === hasSeparator) {
        hasSeparator = true;
        return true;
      }
    }).join('');
    if (this.elt.readOnly) return;

    if (!dontInsert) {
      this.$input.value = value.substring(0, sStart) + pastedData + value.substring(sEnd);
      this.$input.setSelectionRange(sStart + pastedData.length, sStart + pastedData.length);
    }

    this.reformat();
    this.flushTextToValue();
  };

  onKeys.arrowleft = () => {
    if (sStart === sEnd) {
      if (value[sStart - 2] === thousandsSeparator) {
        this.$input.setSelectionRange(sStart - 2, sStart - 2);
      } else if (sStart > 0) {
        this.$input.setSelectionRange(sStart - 1, sStart - 1);
      }
    } else {
      this.$input.setSelectionRange(sStart, sStart);
    }
  };

  onKeys['shift-arrowleft'] = () => {
    var newSStart;
    var newSEnd;

    if (sDir === 'backward') {
      newSStart = sEnd;
      newSEnd = sStart - 1;
    } else {
      newSStart = sStart;
      newSEnd = sEnd - 1;
    }

    if (value[newSEnd - 1] === thousandsSeparator) newSEnd--;
    newSEnd = Math.max(0, newSEnd);

    if (newSStart <= newSEnd) {
      this.$input.setSelectionRange(newSStart, newSEnd, "forward");
    } else {
      this.$input.setSelectionRange(newSEnd, newSStart, "backward");
    }
  };

  onKeys.arrowright = () => {
    if (sStart === sEnd) {
      if (value[sStart] === thousandsSeparator) {
        this.$input.setSelectionRange(sStart + 2, sStart + 2);
      } else if (sStart < value.length) {
        this.$input.setSelectionRange(sStart + 1, sStart + 1);
      }
    } else {
      this.$input.setSelectionRange(sStart, sStart);
    }
  };

  onKeys['shift-arrowright'] = () => {
    var newSStart;
    var newSEnd;

    if (sDir === 'backward') {
      newSStart = sEnd;
      newSEnd = sStart + 1;
    } else {
      newSStart = sStart;
      newSEnd = sEnd + 1;
    }

    if (value[newSEnd - 1] === thousandsSeparator) newSEnd++;
    newSEnd = Math.min(value.length, newSEnd);

    if (newSStart <= newSEnd) {
      this.$input.setSelectionRange(newSStart, newSEnd, "forward");
    } else {
      this.$input.setSelectionRange(newSEnd, newSStart, "backward");
    }
  };

  onKeys.number = () => {
    if (this.elt.readOnly) return;

    if (!dontInsert) {
      this.$input.value = value.substring(0, sStart) + key + value.substring(sEnd);
      this.$input.setSelectionRange(sStart + 1, sStart + 1);
    }

    this.reformat();
    this.flushTextToValue();
  };

  onKeys['-'] = () => {
    if (this.elt.readOnly) return;
    if (value.indexOf('-') >= 0 || sStart > 0) return;
    this.$input.value = '-' + value.substring(sEnd);
    this.$input.setSelectionRange(1, 1);
    this.reformat();
    this.flushTextToValue();
  };

  onKeys.backspace = () => {
    if (this.elt.readOnly) return;
    var delStart, delEnd;

    if (sStart === sEnd) {
      if (sStart > 0) {
        delStart = sStart - 1;
        delEnd = sStart;
      }
    } else {
      delStart = sStart;
      delEnd = sEnd;
    }

    if (delStart === undefined || delEnd === undefined) return;
    this.$input.value = value.substring(0, delStart) + value.substring(delEnd);
    this.$input.setSelectionRange(delStart, delStart);
    this.reformat();
    this.flushTextToValue();
  };

  onKeys.enter = () => {
    if (this.elt.readOnly) return;
    this.flushValueToText();
    this.$input.setSelectionRange(this.$input.value.length, this.$input.value.length);
    this.elt.notifyChanged({
      by: 'enter'
    });
  };

  onKeys.delete = () => {
    if (this.elt.readOnly) return;
    var delStart, delEnd;

    if (sStart === sEnd) {
      if (sStart < value.length) {
        delStart = sStart;
        delEnd = sStart + 1;
        if (value[delStart] === thousandsSeparator) delEnd++;
      }
    } else {
      delStart = sStart;
      delEnd = sEnd;
    }

    if ((0, _utils.isNaturalNumber)(delStart) && (0, _utils.isNaturalNumber)(delEnd)) {
      this.$input.value = value.substring(0, delStart) + value.substring(delEnd);
      this.$input.setSelectionRange(delStart, delStart);
      this.reformat();
      this.flushTextToValue();
    }
  };

  onKeys.decimalSeparator = () => {
    if (this.elt.readOnly) return;
    var idx = value.indexOf(decimalSeparator);

    if (idx >= 0) {
      if (idx < sStart) {
        this.$input.value = value.substring(0, sStart).replace(decimalSeparator, '') + decimalSeparator + value.substring(sEnd);
        this.$input.setSelectionRange(sStart, sStart);
      } else if (idx < sEnd) {
        this.$input.value = value.substring(0, sStart) + decimalSeparator + value.substring(sEnd);
        this.$input.setSelectionRange(sStart + 1, sStart + 1);
      } else {
        this.$input.value = value.substring(0, sStart) + decimalSeparator + value.substring(sEnd).replace(decimalSeparator, '');
        this.$input.setSelectionRange(sStart + 1, sStart + 1);
      }
    } else {
      this.$input.value = value.substring(0, sStart) + decimalSeparator + value.substring(sEnd);
      this.$input.setSelectionRange(sStart + 1, sStart + 1);
    }

    this.reformat();
    this.flushTextToValue();
  };

  if (key === 'arrowup') {
    if (sStart === 0 && sEnd === 0) {
      this.elt.nextStep();
      event.preventDefault();
      this.$input.setSelectionRange(0, 0);
    }
  } else if (key === 'arrowdown') {
    if (sStart === value.length && sEnd === value.length) {
      this.elt.prevStep();
      event.preventDefault();
      this.$input.setSelectionRange(this.$input.value.length, this.$input.value.length);
    }
  } else if (key === 'ctrl-x') {
    onKeys.delete();
  } else if (onKeys[event.type]) {
    event.preventDefault();
    onKeys[event.type]();
  } else if (onKeys[key]) {
    event.preventDefault();
    onKeys[key]();
  } else if (key.match(/^[0-9.]$/)) {
    event.preventDefault();
    onKeys.number();
  } else if (key === decimalSeparator) {
    event.preventDefault();
    onKeys.decimalSeparator();
  }
};

var _default = NITextController;
exports.default = _default;

VaKeR 2022