datafield-1.x-dev/js/formatnumber.js

js/formatnumber.js
/**
 * @file
 * Get data field to number format field widget.
 */

function use_telphone(input) {
  input.addEventListener('input', function () {
    let separator = input.getAttribute("separator") || ' ';
    let step = parseInt(input.getAttribute("step"), 10) || 2;
    let value = input.value.replace(new RegExp(`\\${separator}`, 'g'), '');
    let formattedValue = value.match(new RegExp(`.{1,${step}}`, 'g'))?.join(separator) || '';
    input.value = formattedValue;
  });
}

function use_number(input) {

  if (!input.value.trim()) {
    input.type = 'number';
    return;
  }
  const value = input.value.replace(/[^\d.-]/g, '');
  input.type = 'number';
  input.value = value;
}

function use_text(input) {
  if (!input.value.trim()) {
    input.type = 'text';
    return;
  }

  const value = Number(input.value);
  if (!isNaN(value)) {
    const formattedValue = value.toLocaleString(navigator.language);
    input.type = 'text';
    input.value = formattedValue;
  } else {
    input.type = 'text';
  }
}

(function (Drupal, $, drupalSettings, once) {
  'use strict';
  Drupal.behaviors.formatNumber = {
    attach: function (context) {
      $(once('text-format-number', '.text-format-number', context)).each(function () {
        const value = this.value
        const field_type = this.hasAttribute('field_type') ? this.getAttribute('field_type') : null;
        const scale = this.hasAttribute('scale') ? parseFloat(this.getAttribute('scale')) : null;
        const onInvalidPaste = 'error'
        const allowDecimalPadding = false
        const decimalPlaces = field_type.includes('int') ? 0 : scale || 3
        let maximumValue = this.getAttribute('max')
        let minimumValue = this.getAttribute('min')
        const showWarnings = false

        if (value && parseFloat(value) > parseFloat(maximumValue)) maximumValue = value
        if (value && parseFloat(value) < parseFloat(minimumValue)) minimumValue = value
        if (maximumValue < 0) maximumValue = 0
        if (minimumValue > 0) minimumValue = 0

        let config = {
          modifyValueOnWheel: false,
          onInvalidPaste: onInvalidPaste,
          allowDecimalPadding: allowDecimalPadding,
          decimalPlaces: decimalPlaces,
          showWarnings: showWarnings,
          modifyValueOnUpDownArrow: false,
        }

        if (/^-?\d+(\.\d+)?$/.test(maximumValue)) {
          config.maximumValue = maximumValue
        }
        if (/^-?\d+(\.\d+)?$/.test(minimumValue)) {
          config.minimumValue = minimumValue
        }

        let language = drupalSettings.auto_numeric.language;
        if (language) {
          let option = AutoNumeric.getPredefinedOptions()[language];
          let newOption = Object.assign({}, option);
          newOption.currencySymbol = '';
          config = { ...config, ...newOption }
          new AutoNumeric(this, config);
        }
      });
    }
  };
}(Drupal, jQuery, drupalSettings, once));

Главная | Обратная связь

drupal hosting | друпал хостинг | it patrol .inc