From 7ae8c9f6a7d7e4a227925f9ac9d75fb0cafa5614 Mon Sep 17 00:00:00 2001 From: Bryan Housel Date: Sat, 2 Jun 2018 12:19:43 -0400 Subject: [PATCH] Make min/max field values work for inputted values also (previous commit only worked for the up/down buttons) --- modules/ui/fields/input.js | 41 +++++++++++++++++++++++--------------- 1 file changed, 25 insertions(+), 16 deletions(-) diff --git a/modules/ui/fields/input.js b/modules/ui/fields/input.js index 8bac53446..3ba76dad7 100644 --- a/modules/ui/fields/input.js +++ b/modules/ui/fields/input.js @@ -83,31 +83,40 @@ export function uiFieldText(field, context) { spinControl.selectAll('button') .on('click', function(d) { d3_event.preventDefault(); - var num = parseInt(input.node().value || 0, 10); - if (isNaN(num)) { - num = 0; - } - - num = num + d; - - if (field.minValue !== undefined) { - num = Math.max(num, field.minValue); - } - if (field.maxValue !== undefined) { - num = Math.min(num, field.maxValue); - } - - input.node().value = num; + input.node().value = parsed(input.node().value) + d; change()(); }); } } + // parse as a number + function parsed(val) { + return parseInt(val || 0, 10) || 0; + } + + // clamp number to min/max + function clamped(num) { + if (field.minValue !== undefined) { + num = Math.max(num, field.minValue); + } + if (field.maxValue !== undefined) { + num = Math.min(num, field.maxValue); + } + return num; + } + + function change(onInput) { return function() { var t = {}; - t[field.key] = utilGetSetValue(input) || undefined; + var val = utilGetSetValue(input) || undefined; + + if (!onInput && field.type === 'number') { + val = clamped(parsed(val)) + ''; + utilGetSetValue(input, val); + } + t[field.key] = val; dispatch.call('change', this, t, onInput); }; }