Skip to content

Commit d5eaa37

Browse files
committed
Add stepSize for slider input fields
1 parent 084c6ff commit d5eaa37

File tree

5 files changed

+55
-2
lines changed

5 files changed

+55
-2
lines changed

src/fieldArguments/inputFieldArguments/InputFieldArgumentFactory.ts

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,12 +13,14 @@ import { DefaultValueInputFieldArgument } from './arguments/DefaultValueInputFie
1313
import { PlaceholderInputFieldArgument } from './arguments/PlaceholderInputFieldArgument';
1414
import { InputFieldArgumentType } from '../../parsers/inputFieldParser/InputFieldConfigs';
1515
import { UseLinksInputFieldArgument } from './arguments/UseLinksInputFieldArgument';
16+
import { StepSizeValueInputFieldArgument } from './arguments/StepSizeValueInputFieldArgument';
1617

1718
export const INPUT_FIELD_ARGUMENT_MAP = {
1819
[InputFieldArgumentType.CLASS]: ClassInputFieldArgument,
1920
[InputFieldArgumentType.ADD_LABELS]: AddLabelsInputFieldArgument,
2021
[InputFieldArgumentType.MIN_VALUE]: MinValueInputFieldArgument,
2122
[InputFieldArgumentType.MAX_VALUE]: MaxValueInputFieldArgument,
23+
[InputFieldArgumentType.STEP_SIZE]: StepSizeValueInputFieldArgument,
2224
[InputFieldArgumentType.OPTION]: OptionInputFieldArgument,
2325
[InputFieldArgumentType.TITLE]: TitleInputFieldArgument,
2426
[InputFieldArgumentType.OPTION_QUERY]: OptionQueryInputFieldArgument,
Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,31 @@
1+
import { AbstractInputFieldArgument } from '../AbstractInputFieldArgument';
2+
import { ErrorLevel, MetaBindParsingError } from '../../../utils/errors/MetaBindErrors';
3+
import { type InputFieldArgumentConfig, InputFieldArgumentConfigs } from '../../../parsers/inputFieldParser/InputFieldConfigs';
4+
import { type ParsingResultNode } from '../../../parsers/nomParsers/GeneralParsers';
5+
6+
export class StepSizeValueInputFieldArgument extends AbstractInputFieldArgument {
7+
value: number = 0;
8+
9+
_parseValue(value: ParsingResultNode[]): void {
10+
this.value = Number.parseFloat(value[0].value);
11+
if (Number.isNaN(this.value)) {
12+
throw new MetaBindParsingError(
13+
ErrorLevel.WARNING,
14+
'failed to set value for input field argument',
15+
"value of argument 'stepSize' must be of type number",
16+
);
17+
}
18+
if (this.value <= 0) {
19+
throw new MetaBindParsingError(
20+
ErrorLevel.WARNING,
21+
'failed to set value for input field argument',
22+
"value of argument 'stepSize' must be a positive number",
23+
);
24+
25+
}
26+
}
27+
28+
public getConfig(): InputFieldArgumentConfig {
29+
return InputFieldArgumentConfigs.stepSize;
30+
}
31+
}

src/inputFields/_new/fields/Slider/SliderComponent.svelte

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22
export let value: number;
33
export let minValue: number;
44
export let maxValue: number;
5+
export let stepSize: number;
56
export let addLabels: boolean;
67
export let onValueChange: (value: number) => void;
78
@@ -12,11 +13,11 @@
1213

1314
{#if addLabels}
1415
<span class='meta-bind-plugin-slider-input-label'>{minValue}</span>
15-
<input type='range' tabindex='0' min={minValue} max={maxValue} bind:value={value}
16+
<input type='range' tabindex='0' min={minValue} max={maxValue} step={stepSize} bind:value={value}
1617
on:input={() => onValueChange(value)}>
1718
<span class='meta-bind-plugin-slider-input-label'>{maxValue}</span>
1819
{:else}
19-
<input type='range' tabindex='0' min={minValue} max={maxValue} bind:value={value}
20+
<input type='range' tabindex='0' min={minValue} max={maxValue} step={stepSize} bind:value={value}
2021
on:input={() => onValueChange(value)}>
2122
{/if}
2223

src/inputFields/_new/fields/Slider/SliderIPF.ts

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,12 +8,15 @@ import { InputFieldArgumentType } from '../../../../parsers/inputFieldParser/Inp
88
export class SliderIPF extends NewAbstractInputField<number, number> {
99
minValue: number;
1010
maxValue: number;
11+
stepSize: number;
1112

1213
constructor(renderChild: InputFieldMDRC) {
1314
super(renderChild);
1415

16+
// FIXME: Check that minvalue < maxvalue.
1517
this.minValue = this.renderChild.getArgument(InputFieldArgumentType.MIN_VALUE)?.value ?? 0;
1618
this.maxValue = this.renderChild.getArgument(InputFieldArgumentType.MAX_VALUE)?.value ?? 100;
19+
this.stepSize = this.renderChild.getArgument(InputFieldArgumentType.STEP_SIZE)?.value ?? 1;
1720
}
1821

1922
protected filterValue(value: any): number | undefined {
@@ -51,6 +54,7 @@ export class SliderIPF extends NewAbstractInputField<number, number> {
5154
return {
5255
minValue: this.minValue,
5356
maxValue: this.maxValue,
57+
stepSize: this.stepSize,
5458
addLabels: this.renderChild.getArgument(InputFieldArgumentType.ADD_LABELS)?.value === true,
5559
};
5660
}

src/parsers/inputFieldParser/InputFieldConfigs.ts

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,7 @@ export enum InputFieldArgumentType {
3030
ADD_LABELS = 'addLabels',
3131
MIN_VALUE = 'minValue',
3232
MAX_VALUE = 'maxValue',
33+
STEP_SIZE = 'stepSize',
3334
OPTION = 'option',
3435
TITLE = 'title',
3536
OPTION_QUERY = 'optionQuery',
@@ -231,6 +232,20 @@ export const InputFieldArgumentConfigs: Record<InputFieldArgumentType, InputFiel
231232
],
232233
allowMultiple: false,
233234
},
235+
[InputFieldArgumentType.STEP_SIZE]: {
236+
type: InputFieldArgumentType.STEP_SIZE,
237+
allowedFieldTypes: [InputFieldType.SLIDER],
238+
values: [
239+
[
240+
{
241+
name: 'value',
242+
allowed: ['number'],
243+
description: 'the step size for sliders',
244+
},
245+
],
246+
],
247+
allowMultiple: false,
248+
},
234249
[InputFieldArgumentType.OFF_VALUE]: {
235250
type: InputFieldArgumentType.OFF_VALUE,
236251
allowedFieldTypes: [InputFieldType.TOGGLE],

0 commit comments

Comments
 (0)