Skip to content

Commit 6c2385d

Browse files
Merge pull request #773 from plotly/adaptive_numeric
smarter up/down behaviour for sizeref
2 parents 25722c1 + 6599216 commit 6c2385d

File tree

3 files changed

+15
-5
lines changed

3 files changed

+15
-5
lines changed

src/components/fields/Numeric.js

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@ export class UnconnectedNumeric extends Component {
2020
defaultValue={this.props.defaultValue}
2121
placeholder={placeholder}
2222
step={this.props.step}
23+
stepmode={this.props.stepmode}
2324
min={this.props.min}
2425
max={this.props.max}
2526
onChange={this.props.updatePlot}
@@ -41,6 +42,7 @@ UnconnectedNumeric.propTypes = {
4142
hideArrows: PropTypes.bool,
4243
showSlider: PropTypes.bool,
4344
step: PropTypes.number,
45+
stepmode: PropTypes.string,
4446
updatePlot: PropTypes.func,
4547
...Field.propTypes,
4648
};

src/components/widgets/NumericInput.js

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -80,15 +80,17 @@ export default class NumericInput extends Component {
8080
}
8181

8282
incrementValue(direction) {
83-
const {defaultValue, min, step = 1} = this.props;
83+
const {defaultValue, min, step = 1, stepmode = 'absolute'} = this.props;
8484
const {value} = this.state;
8585

8686
let valueUpdate;
8787
if (isNumeric(value)) {
88+
const x = parseFloat(value);
89+
const absMode = stepmode === 'absolute';
8890
if (direction === 'increase') {
89-
valueUpdate = parseFloat(value) + step;
91+
valueUpdate = absMode ? x + step : x * (1 + step);
9092
} else {
91-
valueUpdate = parseFloat(value) - step;
93+
valueUpdate = absMode ? x - step : x / (1 + step);
9294
}
9395
} else {
9496
// if we are multi-valued and the user is incrementing or decrementing
@@ -176,6 +178,7 @@ NumericInput.propTypes = {
176178
showArrows: PropTypes.bool,
177179
showSlider: PropTypes.bool,
178180
step: PropTypes.number,
181+
stepmode: PropTypes.string,
179182
value: PropTypes.any,
180183
};
181184

src/default_panels/StyleTracesPanel.js

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -56,7 +56,7 @@ const StyleTracesPanel = (props, {localize: _}) => (
5656
</ShowInLegend>
5757
</PlotlySection>
5858
<PlotlySection name={_('Cones & Streamtubes')}>
59-
<Numeric label={_('Size')} attr="sizeref" />
59+
<Numeric label={_('Size')} attr="sizeref" stepmode="relative" />
6060
<Dropdown
6161
label={_('Size Mode')}
6262
options={[{label: _('scaled'), value: 'scaled'}, {label: _('absolute'), value: 'absolute'}]}
@@ -243,13 +243,18 @@ const StyleTracesPanel = (props, {localize: _}) => (
243243
<MarkerColor suppressMultiValuedMessage label={_('Color')} attr="marker.color" />
244244
<NumericFraction label={_('Point Opacity')} attr="marker.opacity" />
245245
<MarkerSize label={_('Size')} attr="marker.size" />
246+
<NumericReciprocal
247+
label={_('Size Scale')}
248+
attr="marker.sizeref"
249+
step={0.2}
250+
stepmode="relative"
251+
/>
246252
<Radio
247253
label={_('Size Mode')}
248254
attr="marker.sizemode"
249255
options={[{label: _('Area'), value: 'area'}, {label: _('Diameter'), value: 'diameter'}]}
250256
/>
251257
<Numeric label={_('Minimum Size')} attr="marker.sizemin" />
252-
<NumericReciprocal label={_('Size Scale')} attr="marker.sizeref" />
253258
<SymbolSelector label={_('Symbol')} attr="marker.symbol" />
254259
<Numeric label={_('Border Width')} attr="marker.line.width" />
255260
<MultiColorPicker label={_('Border Color')} attr="marker.line.color" />

0 commit comments

Comments
 (0)