diff options
Diffstat (limited to 'ext/mixed/js')
| -rw-r--r-- | ext/mixed/js/dom-data-binder.js | 29 | 
1 files changed, 16 insertions, 13 deletions
| diff --git a/ext/mixed/js/dom-data-binder.js b/ext/mixed/js/dom-data-binder.js index 93fe956e..b33def8f 100644 --- a/ext/mixed/js/dom-data-binder.js +++ b/ext/mixed/js/dom-data-binder.js @@ -317,7 +317,7 @@ class DOMDataBinder {                      case 'text':                          return `${element.value}`;                      case 'number': -                        return this._getInputNumberValue(element); +                        return DOMDataBinder.convertToNumber(element.value, element);                  }                  break;              case 'TEXTAREA': @@ -327,26 +327,29 @@ class DOMDataBinder {          return null;      } -    _getInputNumberValue(element) { -        let value = parseFloat(element.value); +    // Utilities + +    static convertToNumber(value, constraints) { +        value = parseFloat(value);          if (!Number.isFinite(value)) { return 0; } -        let {min, max, step} = element; -        min = this._stringValueToNumberOrNull(min); -        max = this._stringValueToNumberOrNull(max); -        step = this._stringValueToNumberOrNull(step); +        let {min, max, step} = constraints; +        min = DOMDataBinder.convertToNumberOrNull(min); +        max = DOMDataBinder.convertToNumberOrNull(max); +        step = DOMDataBinder.convertToNumberOrNull(step);          if (typeof min === 'number') { value = Math.max(value, min); }          if (typeof max === 'number') { value = Math.min(value, max); }          if (typeof step === 'number' && step !== 0) { value = Math.round(value / step) * step; }          return value;      } -    _stringValueToNumberOrNull(value) { -        if (typeof value !== 'string' || value.length === 0) { -            return null; +    static convertToNumberOrNull(value) { +        if (typeof value !== 'number') { +            if (typeof value !== 'string' || value.length === 0) { +                return null; +            } +            value = parseFloat(value);          } - -        const number = parseFloat(value); -        return !Number.isNaN(number) ? number : null; +        return !Number.isNaN(value) ? value : null;      }  } |