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__Time24Input.js
/*** module: node_modules/absol-acomp/js/Time24Input.js ***/
"use strict";

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

var _ACore = _interopRequireWildcard(require("../ACore"));

var _ChromeTime24Picker = _interopRequireDefault(require("./ChromeTime24Picker"));

var _datetime = require("absol/src/Time/datetime");

var _EventEmitter = require("absol/src/HTML5/EventEmitter");

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

var _TimeInput = _interopRequireDefault(require("./TimeInput"));

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

var _DelaySignal = _interopRequireDefault(require("absol/src/HTML5/DelaySignal"));

var _LanguageSystem = _interopRequireDefault(require("absol/src/HTML5/LanguageSystem"));

var _MultiLanguageCSS = require("./MultiLanguageCSS");




/**
 * @extends AElement
 * @constructor
 */
function Time24Input() {
  var t = _LanguageSystem.default.getText('txt_next_day');

  if (t) {
    t = '(' + t + ')';
    this.nextDateText = t;
  }

  this.domSignal = new _DelaySignal.default();
  this.$clockBtn = (0, _ACore.$)('.as-time-input-icon-btn', this);
  this.$text = (0, _ACore.$)('.as-time-input-text', this);
  this.$clearBtn = (0, _ACore.$)('button.as-time-input-clear-btn', this).on('click', this.clear.bind(this));
  this._hour = 0;
  this._minute = 0;
  this._nd = false;
  this._dayOffset = 0;
  this._format = 'HH:mm ND';
  this._firedValue = 'NOT_FIRED';
  this.textCtrl = new T24ITextController(this);
  this.notNull = true;
  this.dropdownCtn = new T24DropdownController(this);
  setTimeout(() => {}, 1000);
  /**
   * @type {string}
   * @name format
   * @memberof Time24Input#
   */

  /**
   * @type {number|null}
   * @name hour
   * @memberof Time24Input#
   */

  /**
   * @type {number|null}
   * @name minute
   * @memberof Time24Input#
   */

  /**
   * @type {number} always is a number, set dayOffset, keep value
   * @name dayOffset
   * @memberof Time24Input#
   */

  /**
   * computed from other
   * @type {number|null}
   * @name value
   * @memberof Time24Input#
   */

  /**
   * @type {boolean}
   * @name nd
   * @memberof Time24Input#
   */
}

Time24Input.tag = 'Time24Input'.toLowerCase();
Time24Input.prototype.nextDateText = '(Next day)';

Time24Input.render = function () {
  return (0, _ACore._)({
    class: ['ac-time-input', 'as-time-24-input'],
    extendEvent: ['change'],
    child: [{
      tag: 'input',
      class: 'as-time-input-text',
      attr: {
        type: 'text',
        spellcheck: "false"
      }
    }, {
      tag: 'button',
      class: 'as-time-input-clear-btn',
      child: 'span.mdi.mdi-close-circle'
    }, {
      tag: 'button',
      class: 'as-time-input-icon-btn',
      child: 'span.mdi.mdi-clock-outline'
    }]
  });
};

Time24Input.prototype._notifyChange = function (event) {
  this._firedValue = this.value;
  this.emit('change', {
    type: 'change',
    originalEvent: event && (event.originalEvent || event.originEvent) || event
  }, this);
};

Time24Input.prototype.notifyIfChange = function () {
  if (this._firedValue !== this.value) {
    this._notifyChange();
  }
};

Time24Input.prototype.clear = function (event) {
  if (this.value !== null && !this.notNull) {
    this.value = null;

    this._notifyChange(event);
  }
};

Time24Input.prototype.share = {
  $picker: null,

  /***
   * @type Time24Input
   */
  $holdingInput: null,
  $follower: null,
  $closeBtn: null
};
Time24Input.property = {};
Time24Input.property.hour = {
  set: function (value) {
    if ((0, _utils.isRealNumber)(value)) {
      value = Math.round(value);

      if (value < 0) {
        value = Math.ceil(-value / 24) * 24 + value;
      }

      value = value % 24;
    } else {
      value = null;
    }

    this._hour = value;
    this.textCtrl.updateTextFromValue();
  },
  get: function () {
    return this._hour;
  }
};
Time24Input.property.minute = {
  set: function (value) {
    if ((0, _utils.isRealNumber)(value)) {
      value = Math.round(value);

      if (value < 0) {
        value = Math.ceil(-value / 60) * 60 + value;
      }

      value = value % 60;
    } else {
      value = null;
    }

    this._minute = value;
    this.textCtrl.updateTextFromValue();
  },
  get: function () {
    return this._minute;
  }
};
Time24Input.property.nd = {
  set: function (value) {
    this._nd = !!value;
    this.textCtrl.updateTextFromValue();
  },
  get: function () {
    var value = this._nd;
    var hour = this.hour;
    var minute = this.minute;
    var dayOffset = this.dayOffset;
    var mh;

    if ((0, _utils.isRealNumber)(dayOffset)) {
      if ((0, _utils.isNaturalNumber)(hour)) {
        mh = (0, _utils.millisToClock)(dayOffset);

        if (hour < mh.hour) {
          value = true;
        } else if (hour === mh.hour) {
          if ((0, _utils.isRealNumber)(minute) && minute < mh.minute) {
            value = true;
          }
        }
      }
    }

    return value;
  }
};
Time24Input.property.dayOffset = {
  set: function (dayOffset) {
    var value = this.value;
    this._dayOffset = (0, _utils.isRealNumber)(dayOffset) ? (0, _utils.normalizeMinuteOfMillis)(dayOffset) : 0;
    this.value = value;
  },
  get: function () {
    if (this.notNull) {
      return this._dayOffset || 0;
    } else {
      return this._dayOffset;
    }
  }
};
Time24Input.property.value = {
  set: function (value) {
    value = (0, _utils.isRealNumber)(value) ? (0, _utils.normalizeMinuteOfMillis)(Math.min(Math.max(value, 0), _datetime.MILLIS_PER_DAY)) : null;
    var clockTime;

    if (value !== null) {
      clockTime = (0, _utils.millisToClock)(value + this.dayOffset);
      this._hour = clockTime.hour;
      this._minute = clockTime.minute;
      if (value === _datetime.MILLIS_PER_DAY) this._nd = true;
    } else {
      this._hour = null;
      this._minute = null;
    }

    this.textCtrl.updateTextFromValue();
    this._firedValue = this.value;
  },
  get: function () {
    if (!(0, _utils.isRealNumber)(this._hour) || !(0, _utils.isRealNumber)(this._minute)) return null;
    var mil = (0, _utils.clockToMillis)(this._hour, this._minute);
    if (mil < this.dayOffset || mil === this.dayOffset && this._nd) mil += _datetime.MILLIS_PER_DAY;
    mil -= this.dayOffset;
    return mil;
  }
};
Time24Input.property.displayTime = {
  get: function () {
    var value = this.value;

    if ((0, _utils.isRealNumber)(value)) {
      return value + this.dayOffset;
    } else {
      return null;
    }
  }
};
Time24Input.property.notNull = {
  set: function (value) {
    if (value) {
      if (this.value === null) {
        this.value = 0;
      }

      this.addClass('as-must-not-null');
    } else {
      this.removeClass('as-must-not-null');
    }

    this._firedValue = this.value;
  },
  get: function () {
    return this.hasClass('as-must-not-null');
  }
};
Time24Input.property.disabled = {
  set: function (value) {
    value = !!value;
    this._disabled = value;
    if (value) this.addClass('as-disabled');else this.removeClass('as-disabled');
    this.$text.disabled = value;
  },
  get: function () {
    return this._disabled;
  }
};
Time24Input.property.readOnly = _TimeInput.default.property.readOnly;
Time24Input.property.format = {
  set: function (value) {
    this._format = value || 'HH:mm';

    if (this._format.indexOf('ND') < 0) {
      this._format = this._format.trimEnd() + ' ND';
    }

    this.textCtrl.updateTextFromValue();
  },
  get: function () {
    return this._format;
  }
};
Time24Input.eventHandler = {};

Time24Input.eventHandler.pickerChange = function (event) {
  if (this.dayOffset === null) this.dayOffset = 0;
};

Time24Input.eventHandler.clickClockBtn = function () {
  this._attachPicker();
};

_ACore.default.install(Time24Input);

var _default = Time24Input;
/**
 *
 * @param {Time24Input} elt
 * @constructor
 */

exports.default = _default;

function T24DropdownController(elt) {
  this.elt = elt;
  this.$clockBtn = elt.$clockBtn.on('click', this.ev_clickClockBtn.bind(this));
  this.disabledButtton = false;
  this.ev_clickOut = this.ev_clickOut.bind(this);
}

T24DropdownController.prototype.share = {
  $picker: null,
  $holdingInput: null,

  /**
   * @type {Follower|null}
   */
  $follower: null,

  /**
   * @type {T24DropdownController|null}
   */
  holder: null
};

T24DropdownController.prototype.prepare = function () {
  var share = this.share;
  if (share.$picker) return;
  (0, _MultiLanguageCSS.loadLanguageModule)();
  share.$picker = (0, _ACore._)({
    tag: _ChromeTime24Picker.default.tag,
    on: {
      change: event => {
        if (share.holder) {
          share.holder.onPickerChange(event);
        }
      }
    }
  });
  share.$picker.nextDateText = this.elt.nextDateText;
  /**
   * @type {Follower}
   */

  share.$follower = (0, _ACore._)({
    tag: 'follower',
    class: ['as-chrome-time-24-picker-follower', 'as-dropdown-box-common-style'],
    child: [this.share.$picker, {
      class: 'as-dropdown-box-footer',
      child: [{
        class: 'as-dropdown-box-footer-right',
        child: ['<a data-ml-key="txt_close" class="as-select-list-box-close-btn"></a>']
      }]
    }]
  });
  share.$follower.cancelWaiting();
  this.share.$closeBtn = (0, _ACore.$)('.as-select-list-box-close-btn', this.share.$follower);
};

T24DropdownController.prototype.attach = function () {
  this.prepare();
  var share = this.share;

  if (share.holder) {
    share.holder.release();
  }

  share.holder = this;
  this.disabledButtton = true;
  share.$follower.addTo(document.body);
  share.$follower.followTarget = this.elt;
  share.$follower.addStyle('visibility', 'hidden');
  var hour = this.elt.hour;
  var min = this.elt.minute;
  var dayOffset = this.elt.dayOffset;
  share.$picker.dayOffset = dayOffset;
  var offsetClock = (0, _utils.millisToClock)(dayOffset);
  var value = 0;

  if ((0, _utils.isRealNumber)(hour)) {
    if (!(0, _utils.isRealNumber)(min)) {
      if (hour === offsetClock.hour) {
        min = offsetClock.hour;
      } else {
        min = 0;
      }
    }

    value = (0, _utils.clockToMillis)(hour, min) - dayOffset;
    if (value < 0) value += _datetime.MILLIS_PER_DAY;
  } else if ((0, _utils.isRealNumber)(min)) {
    if (min >= offsetClock.minute) {
      hour = offsetClock.hour;
    } else {
      hour = (offsetClock.hour + 1) % 24;
    }

    value = (0, _utils.clockToMillis)(hour, min) - dayOffset;
    if (value < 0) value += _datetime.MILLIS_PER_DAY;
  }

  if (value === 0 && this.elt.nd) value = _datetime.MILLIS_PER_DAY;
  share.$picker.value = value;
  setTimeout(() => {
    document.addEventListener('click', this.ev_clickOut);
    share.$follower.removeStyle('visibility');
    share.$picker.scrollIntoSelected();
  }, 10);
};

T24DropdownController.prototype.release = function () {
  var share = this.share;
  if (share.holder !== this) return;
  share.$follower.remove();
  share.$follower.followTarget = null;
  share.holder = null;
  setTimeout(() => {
    this.disabledButtton = false;
    document.removeEventListener('click', this.ev_clickOut);
  }, 100);
};

T24DropdownController.prototype.onPickerChange = function (event) {
  this.elt.value = this.share.$picker.value;

  this.elt._notifyChange(event);

  _ResizeSystem.default.requestUpdateSignal();
};

T24DropdownController.prototype.ev_clickClockBtn = function () {
  if (this.disabledButtton) return;
  this.attach();
};

T24DropdownController.prototype.ev_clickOut = function (event) {
  if ((0, _EventEmitter.hitElement)(this.share.$follower, event) && !(0, _EventEmitter.hitElement)(this.share.$closeBtn, event)) return;
  this.release();
};

var STATE_NEW = 1;
var STATE_EDITED = 2;
var STATE_NONE = 0;
/**
 *
 * @param {Time24Input} elt
 * @constructor
 */

function T24ITextController(elt) {
  this.elt = elt;
  this.domSignal = elt.domSignal;
  this.$text = this.elt.$text;
  this.$text.on('keydown', this.ev_keydown.bind(this)).on('pointerup', this.autoSelect.bind(this)).on('blur', () => {
    this.loadValueFromInput();
    this.elt.notifyIfChange();
  });
  this.editingData = {};
}

T24ITextController.prototype.tokenRegex = /(\([^)]*\))|([^.\/:\-,\\\u0020\u0009\u000D\u200B]+)|([.\/:\-,\\]+)/i;
var CHAR_NBSP = '\u00A0';
T24ITextController.prototype.tokenMap = {
  h: 'h',
  H: 'H',
  HH: 'H',
  hh: 'h',
  m: 'm',
  mm: 'm',
  a: 'a',
  ND: 'ND'
};

T24ITextController.prototype.makeTokenDict = function (s) {
  var rgx = new RegExp(this.tokenRegex.source, 'g');
  var rgxFormat = new RegExp(this.tokenRegex.source, 'g');
  var format = this.elt.format + ' ND';
  var tokenMap = this.tokenMap;
  var tokenMatched = rgx.exec(s);
  var formatToken = rgxFormat.exec(format);
  var text, ident;
  var idx;
  var res = {};

  while (tokenMatched && formatToken) {
    ident = formatToken[2];

    if (tokenMap[ident]) {
      text = tokenMatched[0];
      idx = tokenMatched.index;
      res[tokenMap[ident]] = {
        text: text,
        idx: idx,
        length: text.length,
        sourceText: s,
        value: ident === 'a' || ident === 'ND' ? text : parseInt(text)
      };

      if (ident === 'ND') {
        res[tokenMap[ident]].value = res[tokenMap[ident]].value !== CHAR_NBSP;
      }
    }

    tokenMatched = rgx.exec(s);
    formatToken = rgxFormat.exec(format);
  }

  Object.defineProperty(res, 'minute', {
    enumerable: false,
    get: function () {
      var token = this['m'] || this['mm'];

      if (token) {
        return token.value;
      } else return null;
    }
  });
  Object.defineProperty(res, 'hour24', {
    enumerable: false,
    get: function () {
      var token = this['H'];

      if (token && (0, _utils.isNaturalNumber)(token.value)) {
        return token.value;
      }

      token = this['h'];
      var tokenA = this['A'];

      if (token && (0, _utils.isNaturalNumber)(token.value)) {
        if (tokenA.value === 'PM') {
          return 12 + token.value % 12;
        } else return token.value % 12;
      }

      return null;
    }
  });
  return res;
};

T24ITextController.prototype.formatText = function (h, m, nd) {
  var text = this.elt.format;
  text = text.replace(new RegExp(this.tokenRegex.source, 'g'), all => {
    switch (all) {
      case 'm':
      case 'mm':
        return (0, _utils.isRealNumber)(m) ? (0, _utils.zeroPadding)(m, all.length) : all;

      case 'hh':
      case 'h':
        return (0, _utils.isRealNumber)(h) ? (0, _utils.zeroPadding)(h % 12 ? h : 12, all.length) : all;

      case 'HH':
      case 'H':
        return (0, _utils.isRealNumber)(h) ? (0, _utils.zeroPadding)(h, all.length) : all;

      case 'a':
        return (0, _utils.isRealNumber)(h) ? h > 12 ? 'PM' : 'AM' : 'all';

      case 'ND':
        return nd ? this.elt.nextDateText : CHAR_NBSP;

      default:
        return all;
    }
  });
  return text;
};

T24ITextController.prototype.updateTextFromValue = function () {
  var value = this.elt.value;
  var hour = this.elt.hour;
  var minute = this.elt.minute;
  var nd = this.elt.nd;
  var text = this.formatText(hour, minute, nd);

  if ((0, _utils.isRealNumber)(value)) {
    this.elt.removeClass('as-value-null');
  } else {
    this.elt.addClass('as-value-null');
  }

  this.$text.value = text;
};

T24ITextController.prototype.loadValueFromInput = function () {
  var tkDick = this.makeTokenDict(this.$text.value);
  var hour = NaN;
  var minute = NaN;
  var nd = false;

  if (tkDick.H) {
    hour = Math.min(23, Math.max(0, tkDick.H.value));
  } else if (tkDick.h) {
    hour = Math.min(12, Math.max(1, tkDick.h.value));

    if (tkDick.a && tkDick.a.value === 'PM') {
      hour += 12;
    }
  }

  if (tkDick.m) {
    minute = Math.min(59, Math.max(0, tkDick.m.value));
  }

  if (tkDick.nd) {
    nd = tkDick.nd.value;
  }

  this.elt._hour = hour;
  this.elt._minute = minute;
  this.elt._nd = nd;
};

T24ITextController.prototype.autoSelect = function () {
  var token = this.tokenAt(this.$text.selectionStart);
  var tokenEnd = this.tokenAt(this.$text.selectionEnd);

  if (token) {
    if (tokenEnd.idx === token.idx) {
      token.select();
      this.editingData.state = STATE_NEW;
    } else {
      this.$text.select();
      this.editingData.state = STATE_NONE;
    }
  }
};

T24ITextController.prototype.editPrevToken = function () {
  var token = this.tokenAt(this.$text.selectionStart);
  if (!token) return false;
  var cIdx = token.idx;

  for (var i = token.idx - 1; i >= 0; --i) {
    token = this.tokenAt(i);

    if (token && token.idx !== cIdx) {
      token.select();
      this.editingData.state = STATE_NEW;
      break;
    }
  }
};

T24ITextController.prototype.editNextToken = function () {
  var token = this.tokenAt(this.$text.selectionStart);
  if (!token) return false;
  var cIdx = token.idx;
  var l = this.$text.value.length;

  for (var i = token.idx + token.length; i < l; ++i) {
    token = this.tokenAt(i);

    if (token && token.idx !== cIdx) {
      token.select();
      this.editingData.state = STATE_NEW;
      break;
    }
  }
};

T24ITextController.prototype.tokenAt = function (start) {
  var tokenizedText = new TITokenizedText(this.$text.value, this.elt.format);
  var nearestDistance = Infinity;
  var nearestIdx = -1;
  var n = Math.min(tokenizedText.textTokens.length, tokenizedText.formatTokens.length);
  var i, textToken, formatToken;
  var distance;

  for (i = 0; i < n; ++i) {
    formatToken = tokenizedText.formatTokens[i];
    if (!(0, _utils.isDateTimeFormatToken)(formatToken.content)) continue;
    textToken = tokenizedText.textTokens[i];

    if (start >= textToken.idx && start < textToken.idx + textToken.length) {
      nearestIdx = i;
      nearestDistance = 0;
      break;
    }

    if (start < textToken.idx) {
      distance = textToken.idx - start;

      if (distance < nearestDistance) {
        nearestDistance = distance;
        nearestIdx = i;
      }
    }

    if (start >= textToken.idx + textToken.length) {
      distance = start - textToken.idx - textToken.length;

      if (distance < nearestDistance) {
        nearestDistance = distance;
        nearestIdx = i;
      }
    }
  }

  if (nearestIdx < 0) return null;
  formatToken = tokenizedText.formatTokens[nearestIdx];
  textToken = tokenizedText.textTokens[nearestIdx];
  var self = this;
  return {
    idx: textToken.idx,
    text: textToken.content,
    length: textToken.length,
    ident: formatToken.content,
    input: this.$text,
    sourceText: tokenizedText.text,
    // isAvailable: function () {
    //     return this.sourceText === this.input.value;
    // },
    select: function () {
      this.input.setSelectionRange(this.idx, this.idx + this.length);
    },
    replace: function (newText, selecting) {
      tokenizedText.setTokenText(this.ident, newText);
      var hour = tokenizedText.getTokenText('HH') || tokenizedText.getTokenText('H');
      var minute = tokenizedText.getTokenText('mm') || tokenizedText.getTokenText('m');
      var nd = tokenizedText.getTokenText('ND') !== CHAR_NBSP;
      var newND = self.isNextDate(parseInt(hour, 10), parseInt(minute, 10), nd);

      if (newND !== nd) {
        tokenizedText.setTokenText('ND', newND ? self.elt.nextDateText : CHAR_NBSP);
      }

      this.input.value = tokenizedText.getText(true);
      this.length = newText.length;

      if (selecting) {
        this.select();
      }
    }
  };
};
/**
 *
 * @param h
 * @param m
 * @param nd - referent result if can not detect
 * @returns {boolean}
 */


T24ITextController.prototype.isNextDate = function (h, m, nd) {
  var dayOffset = this.elt.dayOffset;
  if (!(0, _utils.isNaturalNumber)(dayOffset)) return !!nd;
  var oH = Math.floor(dayOffset / 36e5);
  var oM = Math.floor(dayOffset / 6e4) % 60;
  if (!(0, _utils.isNaturalNumber)(h)) return !!nd;
  if (h < oH) return true;
  if (!(0, _utils.isNaturalNumber)(m)) return !!nd;

  if (h === oH) {
    if (m < oM) return true;
    if (m === oM) return !!nd;
    return false;
  }
};

T24ITextController.prototype.correctingInput = function () {//nothing todo now
};

T24ITextController.prototype.ev_keydown = function (event) {
  var token = this.tokenAt(this.$text.selectionStart);
  var endToken = this.tokenAt(this.$text.selectionEnd); // var tokenDict = this.makeTokenDict(this.$text.value);

  var format = this.elt.format;

  if (!token) {
    if (event.key === 'Enter') {
      this.correctingInput();
      this.loadValueFromInput();
      this.elt.notifyIfChange(event);
    }

    return;
  }

  var newTokenText;
  var value;

  if (event.key.startsWith('Arrow')) {
    event.preventDefault();

    switch (event.key) {
      case 'ArrowLeft':
        this.editPrevToken();
        break;

      case 'ArrowRight':
        this.editNextToken();
        break;

      case 'ArrowUp':
      case 'ArrowDown':
        switch (token.ident) {
          case "H":
          case "HH":
            value = parseInt(token.text);

            if (isNaN(value)) {
              this.editingData.H = event.key === 'ArrowUp' ? 0 : 23;
            } else {
              this.editingData.H = (value + (event.key === 'ArrowUp' ? 1 : 23)) % 24;
            }

            newTokenText = (0, _utils.zeroPadding)(this.editingData.H, token.ident.length);
            token.replace(newTokenText, true);
            break;

          case "hh":
          case 'h':
            value = parseInt(token.text);

            if (isNaN(value)) {
              this.editingData.h = event.key === 'ArrowUp' ? 1 : 12;
            } else {
              this.editingData.h = 1 + (value + (event.key === 'ArrowUp' ? 0 : 10)) % 12;
            }

            newTokenText = this.editingData.h + '';

            while (newTokenText.length < token.ident.length) newTokenText = '0' + newTokenText;

            token.replace(newTokenText, true);
            break;

          case "mm":
          case 'm':
            value = parseInt(token.text);

            if (isNaN(value)) {
              this.editingData.m = event.key === 'ArrowUp' ? 0 : 59;
            } else {
              this.editingData.m = (value + (event.key === 'ArrowUp' ? 1 : 59)) % 60;
            }

            newTokenText = this.editingData.m + '';

            while (newTokenText.length < token.ident.length) newTokenText = '0' + newTokenText;

            token.replace(newTokenText, true);
            break;

          case 'a':
            value = token.text;
            this.editingData.a = value === 'PM' ? "AM" : "PM";
            newTokenText = this.editingData.a;
            token.replace(newTokenText, true);
            break;

          case 'ND':
            value = token.text !== CHAR_NBSP;
            this.editingData.nd = !value;
            newTokenText = this.editingData.nd ? this.elt.nextDateText : CHAR_NBSP;
            token.replace(newTokenText, true);
            break;
        }

        break;
    }
  } else if (event.key === "Delete" || event.key === 'Backspace') {
    event.preventDefault();

    if (endToken.idx !== token.idx) {
      if (this.elt.notNull) {
        this.$text.value = (0, _datetime.formatDateTime)((0, _datetime.beginOfDay)(new Date()), format).replace('ND', CHAR_NBSP);
      } else {
        this.$text.value = format.replace('ND', CHAR_NBSP);
      }

      this.$text.select();
    } else {
      if (this.elt.notNull) {
        if (token.ident === 'ND') {
          token.replace(CHAR_NBSP, true);
        } else token.replace(token.ident === 'a' ? 'AM' : (0, _utils.zeroPadding)(token.ident === 'hh' || token.ident === 'h' ? 12 : 0, token.ident.length), true);
      } else {
        token.replace(token.ident, true);
      }

      if (event.key === "Delete") this.editNextToken();else this.editPrevToken();
    }
  } else if (event.key === "Enter" || event.key === 'Tab') {
    this.correctingInput();
    this.loadValueFromInput();
    this.elt.notifyIfChange(event);
  } else if (event.ctrlKey) {
    switch (event.key) {
      case 'a':
      case 'A':
        break;

      case 'c':
      case 'C':
        break;

      case 'x':
      case 'X':
        this.domSignal.once('clear_value', function () {
          this.$text.value = format;
          this.$text.select();
        }.bind(this));
        this.domSignal.emit('clear_value');
        break;

      default:
        event.preventDefault();
    }
  } else if (event.key.match(/^[0-9]$/g)) {
    event.preventDefault();
    var dVal = parseInt(event.key);

    if (this.editingData.state === STATE_NEW) {
      switch (token.ident) {
        case 'm':
        case 'mm':
          token.replace((0, _utils.zeroPadding)(dVal, token.ident.length), true);
          this.editingData.state = STATE_EDITED;

          if (dVal > 5) {
            this.editNextToken();
          }

          break;

        case 'h':
        case 'hh':
          token.replace((0, _utils.zeroPadding)(dVal, token.ident.length), true);
          this.editingData.state = STATE_EDITED;

          if (dVal > 1) {
            this.editNextToken();
          }

          break;

        case 'H':
        case 'HH':
          token.replace((0, _utils.zeroPadding)(dVal, token.ident.length), true);
          this.editingData.state = STATE_EDITED;

          if (dVal > 2) {
            this.editNextToken();
          }

          break;

        case 'ND':
          value = token.text !== CHAR_NBSP;
          this.editingData.nd = !value;
          newTokenText = this.editingData.nd ? this.elt.nextDateText : CHAR_NBSP;
          token.replace(newTokenText, true);
          break;
      }
    } else {
      switch (token.ident) {
        case 'm':
        case 'mm':
          dVal = (parseInt(token.text.split('').pop(), 10) || 0) * 10 + dVal;
          dVal = Math.max(0, Math.min(59, dVal));
          this.editingData.m = dVal;
          token.replace((0, _utils.zeroPadding)(dVal, token.ident.length), true);
          this.editNextToken();
          break;

        case 'h':
        case 'hh':
          dVal = (parseInt(token.text.split('').pop()) || 0) * 10 + dVal;
          dVal = Math.max(1, Math.min(12, dVal));
          this.editingData.h = dVal;
          token.replace((0, _utils.zeroPadding)(dVal, token.ident.length), true);
          this.editNextToken();
          break;

        case 'H':
        case 'HH':
          dVal = (parseInt(token.text.split('').pop()) || 0) * 10 + dVal;
          dVal = Math.max(0, Math.min(23, dVal));
          this.editingData.H = dVal;
          token.replace((0, _utils.zeroPadding)(dVal, token.ident.length), true);
          this.editNextToken();
          break;
      }
    }
  } else if (event.key.match(/^[aApPSCsc]$/) && token.ident === 'a') {
    event.preventDefault();

    if (event.key.match(/^[aAsS]$/)) {
      token.replace('AM', true);
      this.editingData.a = "AM";
    } else {
      token.replace('PM', true);
      this.editingData.a = "PM";
    }

    this.editNextToken();
  } else if (token.ident === 'ND') {
    event.preventDefault();
    value = token.text !== CHAR_NBSP;
    this.editingData.nd = !value;
    newTokenText = this.editingData.nd ? this.elt.nextDateText : CHAR_NBSP;
    token.replace(newTokenText, true);
  } else {
    event.preventDefault();
  }
};

function TITokenizedText(text, format) {
  this.text = text;
  this.format = format;
  /**
   *
   * @type {{content: string, idx: number, length: number}[]}
   */

  this.formatTokens = this.makeTokens(format);
  /**
   *
   * @type {{content: string, idx: number, length: number}[]}
   */

  this.textTokens = this.makeTokens(text);
}

TITokenizedText.prototype.tokenRegex = /(\([^)]*\))|([^.\/:\-,\\\u0020\u0009\u000D\u200B]+)|([.\/:\-,\\]+)/i; // var CHAR_NBSP = '\u00A0';

TITokenizedText.prototype.spaceRegex = /[\u0020\u0009\u000D\u200B]+/;
TITokenizedText.prototype.tokenMap = {
  h: 'h',
  H: 'H',
  HH: 'H',
  hh: 'h',
  m: 'm',
  mm: 'm',
  a: 'a',
  ND: 'ND'
};
/**
 *
 * @param {string} text
 * @returns {{content: string, idx: number, length: number}[]}
 */

TITokenizedText.prototype.makeTokens = function (text) {
  var rgx = new RegExp(this.tokenRegex.source, 'g');
  var matched = rgx.exec(text);
  var res = [];

  while (matched) {
    res.push({
      content: matched[0],
      idx: matched.index,
      length: matched[0].length
    });
    matched = rgx.exec(text);
  }

  return res;
};

TITokenizedText.prototype.setTokenText = function (tkName, content) {
  tkName = this.tokenMap[tkName] || tkName;
  var di = 0;
  var formatToken;
  var textToken;
  var found = false;

  for (var i = 0; i < this.formatTokens.length; ++i) {
    formatToken = this.formatTokens[i];
    textToken = this.textTokens[i];

    if (!textToken) {
      textToken = {
        content: formatToken.content,
        idx: formatToken.idx,
        length: formatToken.length
      };
      this.textTokens.push(textToken);
      di = this.text.length - textToken.idx;
      this.text += textToken.content;
    }

    if (di !== 0) {
      textToken.idx += di;
    }

    if ((this.tokenMap[formatToken.content] || formatToken.content) === tkName) {
      found = true;
      this.text = this.text.substring(0, textToken.idx + di) + content + this.text.substring(textToken.idx + di + textToken.length);
      di += content.length - textToken.length;
      textToken.length = content.length;
      textToken.content = content;
    }
  }

  return this;
};

TITokenizedText.prototype.getTokenText = function (tkName) {
  var res = null;
  tkName = this.tokenMap[tkName] || tkName;

  for (var i = 0; i < this.formatTokens.length; ++i) {
    if ((this.tokenMap[this.formatTokens[i].content] || this.formatTokens[i].content) === tkName) {
      res = this.textTokens[i].content;
      break;
    }
  }

  return res;
};

TITokenizedText.prototype.getToken = function (tkName) {
  var res = null;
  tkName = this.tokenMap[tkName] || tkName;

  for (var i = 0; i < this.formatTokens.length; ++i) {
    if ((this.tokenMap[this.formatTokens[i].content] || this.formatTokens[i].content) === tkName) {
      res = Object.assign({}, this.textTokens[i]);
      break;
    }
  }

  return res;
};

TITokenizedText.prototype.getText = function (extractByFormat) {
  var res = this.text;

  if (extractByFormat) {
    if (this.formatTokens.length < this.textTokens.length) {
      res = res.substring(0, this.textTokens[this.formatTokens.length - 1].idx + this.textTokens[this.formatTokens.length - 1].length);
    } else if (this.formatTokens.length > this.textTokens.length) {
      res += this.format.substring(this.textTokens[this.textTokens.length - 1].idx + this.textTokens[this.textTokens.length - 1].length);
    }
  }

  return res;
};

VaKeR 2022