From 4c1b28505c0bb79ac3dc02baf6a5c6be50bbe0ef Mon Sep 17 00:00:00 2001 From: "kamil.orwat" Date: Tue, 29 Apr 2025 15:33:05 +0200 Subject: [PATCH 01/13] Slider, range and color arguments --- .../es/aem/acm/core/code/ArgumentType.java | 5 +- .../vml/es/aem/acm/core/code/Arguments.java | 32 ++++++ .../es/aem/acm/core/code/CodeRepository.java | 3 +- .../aem/acm/core/code/arg/ColorArgument.java | 10 ++ .../aem/acm/core/code/arg/RangeArgument.java | 74 +++++++++++++ .../aem/acm/core/code/arg/SliderArgument.java | 38 +++++++ .../snippet/available/core/argument/color.yml | 13 +++ .../snippet/available/core/argument/range.yml | 14 +++ .../available/core/argument/slider.yml | 7 ++ .../src/components/CodeArgumentInput.tsx | 101 +++++++++++++++++- ui.frontend/src/utils/api.types.ts | 34 +++++- 11 files changed, 324 insertions(+), 7 deletions(-) create mode 100644 core/src/main/java/com/vml/es/aem/acm/core/code/arg/ColorArgument.java create mode 100644 core/src/main/java/com/vml/es/aem/acm/core/code/arg/RangeArgument.java create mode 100644 core/src/main/java/com/vml/es/aem/acm/core/code/arg/SliderArgument.java create mode 100644 ui.content/src/main/content/jcr_root/conf/acm/settings/snippet/available/core/argument/color.yml create mode 100644 ui.content/src/main/content/jcr_root/conf/acm/settings/snippet/available/core/argument/range.yml create mode 100644 ui.content/src/main/content/jcr_root/conf/acm/settings/snippet/available/core/argument/slider.yml diff --git a/core/src/main/java/com/vml/es/aem/acm/core/code/ArgumentType.java b/core/src/main/java/com/vml/es/aem/acm/core/code/ArgumentType.java index c160d469..78a2c08b 100644 --- a/core/src/main/java/com/vml/es/aem/acm/core/code/ArgumentType.java +++ b/core/src/main/java/com/vml/es/aem/acm/core/code/ArgumentType.java @@ -8,5 +8,8 @@ public enum ArgumentType { STRING, TEXT, SELECT, - MULTISELECT + MULTISELECT, + SLIDER, + COLOR, + RANGE } diff --git a/core/src/main/java/com/vml/es/aem/acm/core/code/Arguments.java b/core/src/main/java/com/vml/es/aem/acm/core/code/Arguments.java index 32564dd5..0249f116 100644 --- a/core/src/main/java/com/vml/es/aem/acm/core/code/Arguments.java +++ b/core/src/main/java/com/vml/es/aem/acm/core/code/Arguments.java @@ -5,6 +5,8 @@ import com.vml.es.aem.acm.core.code.arg.*; import com.vml.es.aem.acm.core.util.GroovyUtils; import groovy.lang.Closure; + +import java.awt.*; import java.io.Serializable; import java.util.HashMap; import java.util.LinkedHashMap; @@ -146,6 +148,36 @@ public void integerNumber(String name, Closure options) { add(argument); } + public void slider(String name) { + slider(name, null); + } + + public void slider(String name, Closure options) { + SliderArgument argument = new SliderArgument(name); + GroovyUtils.with(argument, options); + add(argument); + } + + public void color(String name) { + color(name, null); + } + + public void color(String name, Closure options) { + ColorArgument argument = new ColorArgument(name); + GroovyUtils.with(argument, options); + add(argument); + } + + public void range(String name) { + range(name, null); + } + + public void range(String name, Closure options) { + RangeArgument argument = new RangeArgument(name); + GroovyUtils.with(argument, options); + add(argument); + } + public void decimalNumber(String name) { decimalNumber(name, null); } diff --git a/core/src/main/java/com/vml/es/aem/acm/core/code/CodeRepository.java b/core/src/main/java/com/vml/es/aem/acm/core/code/CodeRepository.java index fd8df8b0..487279d7 100644 --- a/core/src/main/java/com/vml/es/aem/acm/core/code/CodeRepository.java +++ b/core/src/main/java/com/vml/es/aem/acm/core/code/CodeRepository.java @@ -19,8 +19,7 @@ public class CodeRepository { public @interface Config { @AttributeDefinition( name = "Class Links", - description = - "Mapping of class prefixes to their corresponding URLs in the format 'prefix=url'.") + description = "Mapping of class prefixes to their corresponding URLs in the format 'prefix=url'.") String[] classLinks() default { "com.vml.es.aem.acm.core=https://github.com/wttech/acm/blob/main/core/src/main/java", "org.apache.sling.api=https://github.com/apache/sling-org-apache-sling-api/tree/master/src/main/java" diff --git a/core/src/main/java/com/vml/es/aem/acm/core/code/arg/ColorArgument.java b/core/src/main/java/com/vml/es/aem/acm/core/code/arg/ColorArgument.java new file mode 100644 index 00000000..deba8414 --- /dev/null +++ b/core/src/main/java/com/vml/es/aem/acm/core/code/arg/ColorArgument.java @@ -0,0 +1,10 @@ +package com.vml.es.aem.acm.core.code.arg; + +import com.vml.es.aem.acm.core.code.Argument; +import com.vml.es.aem.acm.core.code.ArgumentType; + +public class ColorArgument extends Argument { + public ColorArgument(String name) { + super(name, ArgumentType.COLOR); + } +} diff --git a/core/src/main/java/com/vml/es/aem/acm/core/code/arg/RangeArgument.java b/core/src/main/java/com/vml/es/aem/acm/core/code/arg/RangeArgument.java new file mode 100644 index 00000000..fe6cd8e0 --- /dev/null +++ b/core/src/main/java/com/vml/es/aem/acm/core/code/arg/RangeArgument.java @@ -0,0 +1,74 @@ +package com.vml.es.aem.acm.core.code.arg; + +import com.vml.es.aem.acm.core.code.Argument; +import com.vml.es.aem.acm.core.code.ArgumentType; +import java.io.Serializable; +import java.util.List; + +public class RangeArgument extends Argument { + private Number min; + private Number max; + private Number step; + + public RangeArgument(String name) { + super(name, ArgumentType.RANGE); + } + + public void setValue(List value) { + if (value.size() != 2) { + throw new IllegalArgumentException( + String.format("Range value must be a list of two elements but specified '%s'!", value)); + } + super.setValue(new Range(value.get(0), value.get(1))); + } + + public Number getMin() { + return min; + } + + public void setMin(Number min) { + this.min = min; + } + + public Number getStep() { + return step; + } + + public void setStep(Number step) { + this.step = step; + } + + public Number getMax() { + return max; + } + + public void setMax(Number max) { + this.max = max; + } + + public static class Range implements Serializable { + private Number start; + private Number end; + + public Range(Number start, Number end) { + this.start = start; + this.end = end; + } + + public Number getStart() { + return start; + } + + public void setStart(Number start) { + this.start = start; + } + + public Number getEnd() { + return end; + } + + public void setEnd(Number end) { + this.end = end; + } + } +} diff --git a/core/src/main/java/com/vml/es/aem/acm/core/code/arg/SliderArgument.java b/core/src/main/java/com/vml/es/aem/acm/core/code/arg/SliderArgument.java new file mode 100644 index 00000000..46d16a9a --- /dev/null +++ b/core/src/main/java/com/vml/es/aem/acm/core/code/arg/SliderArgument.java @@ -0,0 +1,38 @@ +package com.vml.es.aem.acm.core.code.arg; + +import com.vml.es.aem.acm.core.code.Argument; +import com.vml.es.aem.acm.core.code.ArgumentType; + +public class SliderArgument extends Argument { + private Number min; + private Number max; + private Number step; + + public SliderArgument(String name) { + super(name, ArgumentType.SLIDER); + } + + public Number getMin() { + return min; + } + + public void setMin(Number min) { + this.min = min.doubleValue(); + } + + public Number getMax() { + return max; + } + + public void setMax(Number max) { + this.max = max.doubleValue(); + } + + public Number getStep() { + return step; + } + + public void setStep(Number step) { + this.step = step.doubleValue(); + } +} diff --git a/ui.content/src/main/content/jcr_root/conf/acm/settings/snippet/available/core/argument/color.yml b/ui.content/src/main/content/jcr_root/conf/acm/settings/snippet/available/core/argument/color.yml new file mode 100644 index 00000000..24058e4e --- /dev/null +++ b/ui.content/src/main/content/jcr_root/conf/acm/settings/snippet/available/core/argument/color.yml @@ -0,0 +1,13 @@ +group: Argument +name: argument_color +content: | + args.color("${1:name}") { label = "${2:label}"; value = ${3:value} } +documentation: | + An argument that displays a color picker.
+
+ **Example**:
+ ```groovy + args.color("color") {label = "background color"; value = "#ff0000"} + ``` +
+ value must be a string with a hex color code
\ No newline at end of file diff --git a/ui.content/src/main/content/jcr_root/conf/acm/settings/snippet/available/core/argument/range.yml b/ui.content/src/main/content/jcr_root/conf/acm/settings/snippet/available/core/argument/range.yml new file mode 100644 index 00000000..d8648028 --- /dev/null +++ b/ui.content/src/main/content/jcr_root/conf/acm/settings/snippet/available/core/argument/range.yml @@ -0,0 +1,14 @@ +group: Argument +name: argument_range +content: | + args.range("${1:name}") { label = "${2:label}"; value = ${3:value}; min=${4:min}; max=${5:max}; step=${6:step} } +documentation: | + An argument that displays a range slider.
+ For single values, use slider argument
+
+ **Example**:
+ ```groovy + args.range("range") {label = "my range"; value = [10d, 60]; step=10; min=10; max=65} + ``` +
+ value must be an array of two numbers
diff --git a/ui.content/src/main/content/jcr_root/conf/acm/settings/snippet/available/core/argument/slider.yml b/ui.content/src/main/content/jcr_root/conf/acm/settings/snippet/available/core/argument/slider.yml new file mode 100644 index 00000000..0c02be53 --- /dev/null +++ b/ui.content/src/main/content/jcr_root/conf/acm/settings/snippet/available/core/argument/slider.yml @@ -0,0 +1,7 @@ +group: Argument +name: argument_slider +content: | + args.slider("${1:name}") { label = "${2:label}"; value = ${3:value}; min=${4:min}; max=${5:max}; step=${6:step} } +documentation: | + An argument that displays a slider.
+ For range values, use range argument
diff --git a/ui.frontend/src/components/CodeArgumentInput.tsx b/ui.frontend/src/components/CodeArgumentInput.tsx index 7324f858..eaf58c5c 100644 --- a/ui.frontend/src/components/CodeArgumentInput.tsx +++ b/ui.frontend/src/components/CodeArgumentInput.tsx @@ -1,10 +1,37 @@ -import { Checkbox, CheckboxGroup, DatePicker, Flex, Item, ListView, NumberField, Picker, Radio, RadioGroup, Switch, TextArea, TextField, View } from '@adobe/react-spectrum'; +import { + Checkbox, + CheckboxGroup, ColorEditor, ColorPicker, + DatePicker, + Flex, + Item, + ListView, + NumberField, parseColor, + Picker, + Radio, + RadioGroup, RangeSlider, + Slider, + Switch, + TextArea, + TextField, + View +} from '@adobe/react-spectrum'; import { Editor } from '@monaco-editor/react'; import { Field } from '@react-spectrum/label'; import React from 'react'; import { Controller, useFormContext } from 'react-hook-form'; import useFormCrossFieldValidation from '../hooks/form.ts'; -import { Argument, ArgumentValue, isBoolArgument, isDateTimeArgument, isMultiSelectArgument, isNumberArgument, isSelectArgument, isStringArgument, isTextArgument } from '../utils/api.types.ts'; +import { + Argument, + ArgumentValue, + isBoolArgument, isColorArgument, + isDateTimeArgument, + isMultiSelectArgument, + isNumberArgument, isRangeArgument, + isSelectArgument, + isSliderArgument, + isStringArgument, + isTextArgument +} from '../utils/api.types.ts'; import { Dates } from '../utils/dates.ts'; import { Strings } from '../utils/strings.ts'; import styles from './CodeArgumentInput.module.css'; @@ -237,6 +264,76 @@ const CodeArgumentInput: React.FC = ({ arg }) => { )} /> ); + } else if (isSliderArgument(arg)) { + return ( + ( + + + + {fieldState.error &&

{fieldState.error.message}

} +
+
+ )} + /> + ); + } else if (isColorArgument(arg)) { + return ( + ( + + + field.onChange(value.toString("hex"))} + > + + + {fieldState.error &&

{fieldState.error.message}

} +
+
+ )} + /> + ); + } else if (isRangeArgument(arg)) { + return ( + ( + + + + {fieldState.error &&

{fieldState.error.message}

} +
+
+ )} + /> + ); } else { return null; } diff --git a/ui.frontend/src/utils/api.types.ts b/ui.frontend/src/utils/api.types.ts index 677d670a..4f27a7a9 100644 --- a/ui.frontend/src/utils/api.types.ts +++ b/ui.frontend/src/utils/api.types.ts @@ -23,8 +23,8 @@ export type Description = { }; }; -export type ArgumentType = 'BOOL' | 'STRING' | 'TEXT' | 'SELECT' | 'MULTISELECT' | 'INTEGER' | 'DECIMAL' | 'DATETIME'; -export type ArgumentValue = string | string[] | number | number[] | boolean | null | undefined; +export type ArgumentType = 'BOOL' | 'STRING' | 'TEXT' | 'SELECT' | 'MULTISELECT' | 'INTEGER' | 'DECIMAL' | 'DATETIME' | 'SLIDER' | 'COLOR' | 'RANGE'; +export type ArgumentValue = string | string[] | number | number[] | boolean | null | undefined | RangeValue; export type ArgumentValues = Record; export const ArgumentGroupDefault = 'general'; @@ -58,6 +58,24 @@ export type NumberArgument = Argument & { max: number; }; +export type SliderArgument = Argument & { + min: number; + max: number; + step: number; + offset: number +}; + +type RangeValue = { + start: number; + end: number; +} + +export type RangeArgument = Argument & { + min: number; + max: number; + step: number; +}; + export type SelectArgument = Argument & { options: Record; display: 'AUTO' | 'DROPDOWN' | 'RADIO'; @@ -92,6 +110,18 @@ export function isNumberArgument(arg: Argument): arg is NumberArg return arg.type === 'INTEGER' || arg.type === 'DECIMAL'; } +export function isSliderArgument(arg: Argument): arg is SliderArgument { + return arg.type === 'SLIDER'; +} + +export function isColorArgument(arg: Argument): arg is Argument { + return arg.type === 'COLOR'; +} + +export function isRangeArgument(arg: Argument): arg is RangeArgument { + return arg.type === 'RANGE'; +} + export function isMultiSelectArgument(arg: Argument): arg is MultiSelectArgument { return arg.type === 'MULTISELECT'; } From 53b1d20b6d9ef277eeb5901fc77ca18226b2b242 Mon Sep 17 00:00:00 2001 From: "kamil.orwat" Date: Tue, 29 Apr 2025 15:35:02 +0200 Subject: [PATCH 02/13] formatting --- .../vml/es/aem/acm/core/code/Arguments.java | 1 - .../src/components/CodeArgumentInput.tsx | 58 ++++--------------- .../src/components/ImmersiveEditor.tsx | 2 +- ui.frontend/src/utils/api.types.ts | 4 +- 4 files changed, 15 insertions(+), 50 deletions(-) diff --git a/core/src/main/java/com/vml/es/aem/acm/core/code/Arguments.java b/core/src/main/java/com/vml/es/aem/acm/core/code/Arguments.java index 0249f116..9e76cbd0 100644 --- a/core/src/main/java/com/vml/es/aem/acm/core/code/Arguments.java +++ b/core/src/main/java/com/vml/es/aem/acm/core/code/Arguments.java @@ -6,7 +6,6 @@ import com.vml.es.aem.acm.core.util.GroovyUtils; import groovy.lang.Closure; -import java.awt.*; import java.io.Serializable; import java.util.HashMap; import java.util.LinkedHashMap; diff --git a/ui.frontend/src/components/CodeArgumentInput.tsx b/ui.frontend/src/components/CodeArgumentInput.tsx index eaf58c5c..09217284 100644 --- a/ui.frontend/src/components/CodeArgumentInput.tsx +++ b/ui.frontend/src/components/CodeArgumentInput.tsx @@ -1,20 +1,4 @@ -import { - Checkbox, - CheckboxGroup, ColorEditor, ColorPicker, - DatePicker, - Flex, - Item, - ListView, - NumberField, parseColor, - Picker, - Radio, - RadioGroup, RangeSlider, - Slider, - Switch, - TextArea, - TextField, - View -} from '@adobe/react-spectrum'; +import { Checkbox, CheckboxGroup, ColorEditor, ColorPicker, DatePicker, Flex, Item, ListView, NumberField, parseColor, Picker, Radio, RadioGroup, RangeSlider, Slider, Switch, TextArea, TextField, View } from '@adobe/react-spectrum'; import { Editor } from '@monaco-editor/react'; import { Field } from '@react-spectrum/label'; import React from 'react'; @@ -23,14 +7,16 @@ import useFormCrossFieldValidation from '../hooks/form.ts'; import { Argument, ArgumentValue, - isBoolArgument, isColorArgument, + isBoolArgument, + isColorArgument, isDateTimeArgument, isMultiSelectArgument, - isNumberArgument, isRangeArgument, + isNumberArgument, + isRangeArgument, isSelectArgument, isSliderArgument, isStringArgument, - isTextArgument + isTextArgument, } from '../utils/api.types.ts'; import { Dates } from '../utils/dates.ts'; import { Strings } from '../utils/strings.ts'; @@ -272,15 +258,8 @@ const CodeArgumentInput: React.FC = ({ arg }) => { rules={controllerRules(arg)} render={({ field, fieldState }) => ( - - + + {fieldState.error &&

{fieldState.error.message}

}
@@ -295,14 +274,8 @@ const CodeArgumentInput: React.FC = ({ arg }) => { rules={controllerRules(arg)} render={({ field, fieldState }) => ( - - field.onChange(value.toString("hex"))} - > + + field.onChange(value.toString('hex'))}> {fieldState.error &&

{fieldState.error.message}

} @@ -319,15 +292,8 @@ const CodeArgumentInput: React.FC = ({ arg }) => { rules={controllerRules(arg)} render={({ field, fieldState }) => ( - - + + {fieldState.error &&

{fieldState.error.message}

}
diff --git a/ui.frontend/src/components/ImmersiveEditor.tsx b/ui.frontend/src/components/ImmersiveEditor.tsx index 81145cba..eef6c289 100644 --- a/ui.frontend/src/components/ImmersiveEditor.tsx +++ b/ui.frontend/src/components/ImmersiveEditor.tsx @@ -75,7 +75,7 @@ const ImmersiveEditor = ({ containerProps, syntaxError, } // @ts-expect-error: Accessing private API of the suggest widget to modify its behavior - const {widget} = mountedEditor.getContribution('editor.contrib.suggestController'); + const { widget } = mountedEditor.getContribution('editor.contrib.suggestController'); if (widget) { const suggestWidget = widget.value; if (suggestWidget && suggestWidget._setDetailsVisible) { diff --git a/ui.frontend/src/utils/api.types.ts b/ui.frontend/src/utils/api.types.ts index 4f27a7a9..12c9b1af 100644 --- a/ui.frontend/src/utils/api.types.ts +++ b/ui.frontend/src/utils/api.types.ts @@ -62,13 +62,13 @@ export type SliderArgument = Argument & { min: number; max: number; step: number; - offset: number + offset: number; }; type RangeValue = { start: number; end: number; -} +}; export type RangeArgument = Argument & { min: number; From 802ee5662bfdb829791c9cb37d0c4a91a802c5aa Mon Sep 17 00:00:00 2001 From: "kamil.orwat" Date: Wed, 30 Apr 2025 07:58:42 +0200 Subject: [PATCH 03/13] Improved documentation --- .../acm/settings/snippet/available/core/argument/color.yml | 3 ++- .../acm/settings/snippet/available/core/argument/range.yml | 3 ++- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/ui.content/src/main/content/jcr_root/conf/acm/settings/snippet/available/core/argument/color.yml b/ui.content/src/main/content/jcr_root/conf/acm/settings/snippet/available/core/argument/color.yml index 24058e4e..60c76cae 100644 --- a/ui.content/src/main/content/jcr_root/conf/acm/settings/snippet/available/core/argument/color.yml +++ b/ui.content/src/main/content/jcr_root/conf/acm/settings/snippet/available/core/argument/color.yml @@ -3,7 +3,8 @@ name: argument_color content: | args.color("${1:name}") { label = "${2:label}"; value = ${3:value} } documentation: | - An argument that displays a color picker.
+ An argument that allows to choose a value from color picker.
+ It returns a string with the color hex code.

**Example**:
```groovy diff --git a/ui.content/src/main/content/jcr_root/conf/acm/settings/snippet/available/core/argument/range.yml b/ui.content/src/main/content/jcr_root/conf/acm/settings/snippet/available/core/argument/range.yml index d8648028..e55cf832 100644 --- a/ui.content/src/main/content/jcr_root/conf/acm/settings/snippet/available/core/argument/range.yml +++ b/ui.content/src/main/content/jcr_root/conf/acm/settings/snippet/available/core/argument/range.yml @@ -3,7 +3,8 @@ name: argument_range content: | args.range("${1:name}") { label = "${2:label}"; value = ${3:value}; min=${4:min}; max=${5:max}; step=${6:step} } documentation: | - An argument that displays a range slider.
+ An argument that allows to select a numerical range with start and end values.
+ It returns object with values start and end.
For single values, use slider argument

**Example**:
From acac1ff40f486f245d08bccac1af25b2b8c5484f Mon Sep 17 00:00:00 2001 From: "kamil.orwat" Date: Wed, 30 Apr 2025 10:40:02 +0200 Subject: [PATCH 04/13] removed useless code --- .../main/java/com/vml/es/aem/acm/core/code/Arguments.java | 1 - .../com/vml/es/aem/acm/core/code/arg/SliderArgument.java | 6 +++--- 2 files changed, 3 insertions(+), 4 deletions(-) diff --git a/core/src/main/java/com/vml/es/aem/acm/core/code/Arguments.java b/core/src/main/java/com/vml/es/aem/acm/core/code/Arguments.java index 9e76cbd0..66dbbc16 100644 --- a/core/src/main/java/com/vml/es/aem/acm/core/code/Arguments.java +++ b/core/src/main/java/com/vml/es/aem/acm/core/code/Arguments.java @@ -5,7 +5,6 @@ import com.vml.es.aem.acm.core.code.arg.*; import com.vml.es.aem.acm.core.util.GroovyUtils; import groovy.lang.Closure; - import java.io.Serializable; import java.util.HashMap; import java.util.LinkedHashMap; diff --git a/core/src/main/java/com/vml/es/aem/acm/core/code/arg/SliderArgument.java b/core/src/main/java/com/vml/es/aem/acm/core/code/arg/SliderArgument.java index 46d16a9a..e8ba5a9f 100644 --- a/core/src/main/java/com/vml/es/aem/acm/core/code/arg/SliderArgument.java +++ b/core/src/main/java/com/vml/es/aem/acm/core/code/arg/SliderArgument.java @@ -17,7 +17,7 @@ public Number getMin() { } public void setMin(Number min) { - this.min = min.doubleValue(); + this.min = min; } public Number getMax() { @@ -25,7 +25,7 @@ public Number getMax() { } public void setMax(Number max) { - this.max = max.doubleValue(); + this.max = max; } public Number getStep() { @@ -33,6 +33,6 @@ public Number getStep() { } public void setStep(Number step) { - this.step = step.doubleValue(); + this.step = step; } } From 8b95ad2c8aae10519a13d0a0e3129bc5383159b0 Mon Sep 17 00:00:00 2001 From: Krystian Panek Date: Mon, 5 May 2025 07:31:19 +0200 Subject: [PATCH 05/13] Bundle up fix --- core/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/core/pom.xml b/core/pom.xml index 98d832f8..d276d469 100644 --- a/core/pom.xml +++ b/core/pom.xml @@ -49,7 +49,7 @@ From 03d92ce23005fd4e65dd369ad152aa7da059fac7 Mon Sep 17 00:00:00 2001 From: Krystian Panek Date: Mon, 5 May 2025 09:37:44 +0200 Subject: [PATCH 06/13] Bug fixes, Jackson private --- core/pom.xml | 23 ++++++++----- .../acm/core/code/arg/DateTimeArgument.java | 1 + .../vml/es/aem/acm/core/util/YamlUtils.java | 34 ++++++------------- .../snippet/available/core/argument/range.yml | 13 ++----- .../available/core/argument/slider.yml | 6 ++-- .../src/components/CodeArgumentInput.tsx | 1 - 6 files changed, 31 insertions(+), 47 deletions(-) diff --git a/core/pom.xml b/core/pom.xml index d276d469..748dd791 100644 --- a/core/pom.xml +++ b/core/pom.xml @@ -25,7 +25,7 @@ acm.core AEM Content Manager - Core - Core bundle for AEM Content Manager (tool for migrating content and managing permissions) + Core bundle for AEM Content Manager false false @@ -49,7 +49,7 @@ @@ -244,10 +244,22 @@ DynamicImport-Package: * jackson-databind - 2.9.5 + 2.17.2 com.fasterxml.jackson.core provided + + com.fasterxml.jackson.dataformat + jackson-dataformat-yaml + 2.17.2 + provided + + + com.fasterxml.jackson.dataformat + jackson-dataformat-csv + 2.17.2 + provided + com.fasterxml.jackson.datatype jackson-datatype-jsr310 @@ -297,11 +309,6 @@ DynamicImport-Package: * groovy-templates 4.0.9 - - org.yaml - snakeyaml - 1.32 - diff --git a/core/src/main/java/com/vml/es/aem/acm/core/code/arg/DateTimeArgument.java b/core/src/main/java/com/vml/es/aem/acm/core/code/arg/DateTimeArgument.java index 8f497575..5cfea92f 100644 --- a/core/src/main/java/com/vml/es/aem/acm/core/code/arg/DateTimeArgument.java +++ b/core/src/main/java/com/vml/es/aem/acm/core/code/arg/DateTimeArgument.java @@ -7,6 +7,7 @@ import java.util.Arrays; public class DateTimeArgument extends Argument { + private DateTimeArgument.Variant variant = DateTimeArgument.Variant.DATETIME; private LocalDateTime min; diff --git a/core/src/main/java/com/vml/es/aem/acm/core/util/YamlUtils.java b/core/src/main/java/com/vml/es/aem/acm/core/util/YamlUtils.java index 857c915d..e44ec165 100644 --- a/core/src/main/java/com/vml/es/aem/acm/core/util/YamlUtils.java +++ b/core/src/main/java/com/vml/es/aem/acm/core/util/YamlUtils.java @@ -1,38 +1,24 @@ package com.vml.es.aem.acm.core.util; -import java.io.BufferedInputStream; +import com.fasterxml.jackson.databind.ObjectMapper; +import com.fasterxml.jackson.dataformat.yaml.YAMLFactory; +import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; -import java.io.OutputStreamWriter; -import org.yaml.snakeyaml.DumperOptions; -import org.yaml.snakeyaml.Yaml; -import org.yaml.snakeyaml.constructor.Constructor; -import org.yaml.snakeyaml.introspector.BeanAccess; -import org.yaml.snakeyaml.representer.Representer; public final class YamlUtils { - private static final Yaml YAML; + private static final ObjectMapper YAML_MAPPER = new ObjectMapper(new YAMLFactory()); - static { - YAML = customYaml(); + private YamlUtils() { + // intentionally empty } - private static Yaml customYaml() { - Constructor constructor = new Constructor(); - constructor.getPropertyUtils().setSkipMissingProperties(true); - DumperOptions options = new DumperOptions(); - Representer representer = new Representer(); - Yaml yaml = new Yaml(constructor, representer, options); - yaml.setBeanAccess(BeanAccess.FIELD); - return yaml; + public static T readYaml(InputStream inputStream, Class clazz) throws IOException { + return YAML_MAPPER.readValue(inputStream, clazz); } - public static T readYaml(InputStream inputStream, Class clazz) { - return YAML.loadAs(new BufferedInputStream(inputStream), clazz); - } - - public static void writeYaml(OutputStream outputStream, Object data) { - YAML.dump(data, new OutputStreamWriter(outputStream)); + public static void writeYaml(OutputStream outputStream, Object data) throws IOException { + YAML_MAPPER.writeValue(outputStream, data); } } diff --git a/ui.content/src/main/content/jcr_root/conf/acm/settings/snippet/available/core/argument/range.yml b/ui.content/src/main/content/jcr_root/conf/acm/settings/snippet/available/core/argument/range.yml index e55cf832..b65f2fbb 100644 --- a/ui.content/src/main/content/jcr_root/conf/acm/settings/snippet/available/core/argument/range.yml +++ b/ui.content/src/main/content/jcr_root/conf/acm/settings/snippet/available/core/argument/range.yml @@ -1,15 +1,6 @@ group: Argument name: argument_range content: | - args.range("${1:name}") { label = "${2:label}"; value = ${3:value}; min=${4:min}; max=${5:max}; step=${6:step} } + args.range("${1:name}") { label = "${2:label}"; value = ${3:value}; min = ${4:min}; max = ${5:max}; step = ${6:step} } documentation: | - An argument that allows to select a numerical range with start and end values.
- It returns object with values start and end.
- For single values, use slider argument
-
- **Example**:
- ```groovy - args.range("range") {label = "my range"; value = [10d, 60]; step=10; min=10; max=65} - ``` -
- value must be an array of two numbers
+ An argument that allows to select a range number with min and max values. diff --git a/ui.content/src/main/content/jcr_root/conf/acm/settings/snippet/available/core/argument/slider.yml b/ui.content/src/main/content/jcr_root/conf/acm/settings/snippet/available/core/argument/slider.yml index 0c02be53..c35e1a39 100644 --- a/ui.content/src/main/content/jcr_root/conf/acm/settings/snippet/available/core/argument/slider.yml +++ b/ui.content/src/main/content/jcr_root/conf/acm/settings/snippet/available/core/argument/slider.yml @@ -1,7 +1,7 @@ group: Argument name: argument_slider content: | - args.slider("${1:name}") { label = "${2:label}"; value = ${3:value}; min=${4:min}; max=${5:max}; step=${6:step} } + args.slider("${1:name}") { label = "${2:label}"; value = ${3:value}; min = ${4:min}; max = ${5:max}; step = ${6:step} } documentation: | - An argument that displays a slider.
- For range values, use range argument
+ An argument that allows to select a number from a range. + The value is a number that is within the range of min and max. diff --git a/ui.frontend/src/components/CodeArgumentInput.tsx b/ui.frontend/src/components/CodeArgumentInput.tsx index fea73ef0..385ca19d 100644 --- a/ui.frontend/src/components/CodeArgumentInput.tsx +++ b/ui.frontend/src/components/CodeArgumentInput.tsx @@ -97,7 +97,6 @@ const CodeArgumentInput: React.FC = ({ arg }) => { errorMessage={fieldState.error ? fieldState.error.message : undefined} validationState={fieldState.error ? 'invalid' : 'valid'} aria-label={`Argument '${arg.name}'`} - width="100%" />
)} From 87413e228315e6c53804df4deb9c7d58bee687bb Mon Sep 17 00:00:00 2001 From: "kamil.orwat" Date: Mon, 5 May 2025 11:10:31 +0200 Subject: [PATCH 07/13] extended color arg and renamed slider to number and range to numberrange --- .../vml/es/aem/acm/core/code/Arguments.java | 16 +++---- .../aem/acm/core/code/arg/ColorArgument.java | 46 +++++++++++++++++++ ...liderArgument.java => NumberArgument.java} | 6 ++- ...Argument.java => NumberRangeArgument.java} | 7 ++- .../src/components/CodeArgumentInput.tsx | 39 ++++++++++++++-- ui.frontend/src/utils/api.types.ts | 6 ++- 6 files changed, 104 insertions(+), 16 deletions(-) rename core/src/main/java/com/vml/es/aem/acm/core/code/arg/{SliderArgument.java => NumberArgument.java} (86%) rename core/src/main/java/com/vml/es/aem/acm/core/code/arg/{RangeArgument.java => NumberRangeArgument.java} (92%) diff --git a/core/src/main/java/com/vml/es/aem/acm/core/code/Arguments.java b/core/src/main/java/com/vml/es/aem/acm/core/code/Arguments.java index 66dbbc16..c55fef9c 100644 --- a/core/src/main/java/com/vml/es/aem/acm/core/code/Arguments.java +++ b/core/src/main/java/com/vml/es/aem/acm/core/code/Arguments.java @@ -146,12 +146,12 @@ public void integerNumber(String name, Closure options) { add(argument); } - public void slider(String name) { - slider(name, null); + public void number(String name) { + number(name, null); } - public void slider(String name, Closure options) { - SliderArgument argument = new SliderArgument(name); + public void number(String name, Closure options) { + NumberArgument argument = new NumberArgument(name); GroovyUtils.with(argument, options); add(argument); } @@ -166,12 +166,12 @@ public void color(String name, Closure options) { add(argument); } - public void range(String name) { - range(name, null); + public void numberRange(String name) { + numberRange(name, null); } - public void range(String name, Closure options) { - RangeArgument argument = new RangeArgument(name); + public void numberRange(String name, Closure options) { + NumberRangeArgument argument = new NumberRangeArgument(name); GroovyUtils.with(argument, options); add(argument); } diff --git a/core/src/main/java/com/vml/es/aem/acm/core/code/arg/ColorArgument.java b/core/src/main/java/com/vml/es/aem/acm/core/code/arg/ColorArgument.java index deba8414..b6a87bce 100644 --- a/core/src/main/java/com/vml/es/aem/acm/core/code/arg/ColorArgument.java +++ b/core/src/main/java/com/vml/es/aem/acm/core/code/arg/ColorArgument.java @@ -2,9 +2,55 @@ import com.vml.es.aem.acm.core.code.Argument; import com.vml.es.aem.acm.core.code.ArgumentType; +import java.util.Arrays; public class ColorArgument extends Argument { + private ColorArgument.Format format = ColorArgument.Format.RGBA; + public ColorArgument(String name) { super(name, ArgumentType.COLOR); } + + public Format getFormat() { + return format; + } + + public void setVariant(String format) { + this.format = ColorArgument.Format.of(format); + } + + public void setVariant(ColorArgument.Format format) { + this.format = format; + } + + public void hex() { + this.format = ColorArgument.Format.HEX; + } + + public void hsl() { + this.format = ColorArgument.Format.HSL; + } + + public void rgba() { + this.format = ColorArgument.Format.RGBA; + } + + public void hsb() { + this.format = ColorArgument.Format.HSB; + } + + public enum Format { + HEX, + HSL, + RGBA, + HSB; + + public static ColorArgument.Format of(String name) { + return Arrays.stream(ColorArgument.Format.values()) + .filter(r -> r.name().equalsIgnoreCase(name)) + .findFirst() + .orElseThrow(() -> + new IllegalArgumentException(String.format("Color format '%s' is not supported!", name))); + } + } } diff --git a/core/src/main/java/com/vml/es/aem/acm/core/code/arg/SliderArgument.java b/core/src/main/java/com/vml/es/aem/acm/core/code/arg/NumberArgument.java similarity index 86% rename from core/src/main/java/com/vml/es/aem/acm/core/code/arg/SliderArgument.java rename to core/src/main/java/com/vml/es/aem/acm/core/code/arg/NumberArgument.java index e8ba5a9f..4c2905fc 100644 --- a/core/src/main/java/com/vml/es/aem/acm/core/code/arg/SliderArgument.java +++ b/core/src/main/java/com/vml/es/aem/acm/core/code/arg/NumberArgument.java @@ -3,12 +3,14 @@ import com.vml.es.aem.acm.core.code.Argument; import com.vml.es.aem.acm.core.code.ArgumentType; -public class SliderArgument extends Argument { +public class NumberArgument extends Argument { private Number min; + private Number max; + private Number step; - public SliderArgument(String name) { + public NumberArgument(String name) { super(name, ArgumentType.SLIDER); } diff --git a/core/src/main/java/com/vml/es/aem/acm/core/code/arg/RangeArgument.java b/core/src/main/java/com/vml/es/aem/acm/core/code/arg/NumberRangeArgument.java similarity index 92% rename from core/src/main/java/com/vml/es/aem/acm/core/code/arg/RangeArgument.java rename to core/src/main/java/com/vml/es/aem/acm/core/code/arg/NumberRangeArgument.java index fe6cd8e0..c7ca744a 100644 --- a/core/src/main/java/com/vml/es/aem/acm/core/code/arg/RangeArgument.java +++ b/core/src/main/java/com/vml/es/aem/acm/core/code/arg/NumberRangeArgument.java @@ -5,12 +5,14 @@ import java.io.Serializable; import java.util.List; -public class RangeArgument extends Argument { +public class NumberRangeArgument extends Argument { private Number min; + private Number max; + private Number step; - public RangeArgument(String name) { + public NumberRangeArgument(String name) { super(name, ArgumentType.RANGE); } @@ -48,6 +50,7 @@ public void setMax(Number max) { public static class Range implements Serializable { private Number start; + private Number end; public Range(Number start, Number end) { diff --git a/ui.frontend/src/components/CodeArgumentInput.tsx b/ui.frontend/src/components/CodeArgumentInput.tsx index 385ca19d..8fd4a5ca 100644 --- a/ui.frontend/src/components/CodeArgumentInput.tsx +++ b/ui.frontend/src/components/CodeArgumentInput.tsx @@ -1,4 +1,25 @@ -import { Checkbox, CheckboxGroup, ColorEditor, ColorPicker, DatePicker, Flex, Item, ListView, NumberField, parseColor, Picker, Radio, RadioGroup, RangeSlider, Slider, Switch, TextArea, TextField, View } from '@adobe/react-spectrum'; +import { + Button, + Checkbox, + CheckboxGroup, + ColorEditor, ColorFormat, + ColorPicker, + DatePicker, + Flex, + Item, + ListView, + NumberField, + parseColor, + Picker, + Radio, + RadioGroup, + RangeSlider, + Slider, + Switch, + TextArea, + TextField, + View +} from '@adobe/react-spectrum'; import { Editor } from '@monaco-editor/react'; import { Field } from '@react-spectrum/label'; import React from 'react'; @@ -275,8 +296,20 @@ const CodeArgumentInput: React.FC = ({ arg }) => { render={({ field, fieldState }) => ( - field.onChange(value.toString('hex'))}> - + field.onChange(value.toString(arg.format.toLowerCase() as ColorFormat))}> + + {fieldState.error &&

{fieldState.error.message}

}
diff --git a/ui.frontend/src/utils/api.types.ts b/ui.frontend/src/utils/api.types.ts index 12c9b1af..2e03a579 100644 --- a/ui.frontend/src/utils/api.types.ts +++ b/ui.frontend/src/utils/api.types.ts @@ -65,6 +65,10 @@ export type SliderArgument = Argument & { offset: number; }; +export type ColorArgument = Argument & { + format: 'HEX' | 'RGBA' | 'HSL' | 'HSB'; +} + type RangeValue = { start: number; end: number; @@ -114,7 +118,7 @@ export function isSliderArgument(arg: Argument): arg is SliderArg return arg.type === 'SLIDER'; } -export function isColorArgument(arg: Argument): arg is Argument { +export function isColorArgument(arg: Argument): arg is ColorArgument { return arg.type === 'COLOR'; } From b887c02f366402121f7d7ebe01dc398801ced6c3 Mon Sep 17 00:00:00 2001 From: "kamil.orwat" Date: Mon, 5 May 2025 12:53:08 +0200 Subject: [PATCH 08/13] changes from review --- .../snippet/available/core/argument/color.yml | 8 +++----- .../core/argument/{slider.yml => number.yml} | 9 +++++++-- .../available/core/argument/numberRange.yml | 11 +++++++++++ .../snippet/available/core/argument/range.yml | 6 ------ .../src/components/CodeArgumentInput.tsx | 18 ++++++++---------- ui.frontend/src/utils/api.types.ts | 2 +- 6 files changed, 30 insertions(+), 24 deletions(-) rename ui.content/src/main/content/jcr_root/conf/acm/settings/snippet/available/core/argument/{slider.yml => number.yml} (50%) create mode 100644 ui.content/src/main/content/jcr_root/conf/acm/settings/snippet/available/core/argument/numberRange.yml delete mode 100644 ui.content/src/main/content/jcr_root/conf/acm/settings/snippet/available/core/argument/range.yml diff --git a/ui.content/src/main/content/jcr_root/conf/acm/settings/snippet/available/core/argument/color.yml b/ui.content/src/main/content/jcr_root/conf/acm/settings/snippet/available/core/argument/color.yml index 60c76cae..3f0d23ff 100644 --- a/ui.content/src/main/content/jcr_root/conf/acm/settings/snippet/available/core/argument/color.yml +++ b/ui.content/src/main/content/jcr_root/conf/acm/settings/snippet/available/core/argument/color.yml @@ -1,14 +1,12 @@ group: Argument name: argument_color content: | - args.color("${1:name}") { label = "${2:label}"; value = ${3:value} } + args.color("${1:name}") { label = "${2:label}"; value = ${3:value}; rgba() } documentation: | An argument that allows to choose a value from color picker.
It returns a string with the color hex code.

**Example**:
```groovy - args.color("color") {label = "background color"; value = "#ff0000"} - ``` -
- value must be a string with a hex color code
\ No newline at end of file + args.color("color") { label = "background color"; value = "#ff0000"; hex() } + ``` \ No newline at end of file diff --git a/ui.content/src/main/content/jcr_root/conf/acm/settings/snippet/available/core/argument/slider.yml b/ui.content/src/main/content/jcr_root/conf/acm/settings/snippet/available/core/argument/number.yml similarity index 50% rename from ui.content/src/main/content/jcr_root/conf/acm/settings/snippet/available/core/argument/slider.yml rename to ui.content/src/main/content/jcr_root/conf/acm/settings/snippet/available/core/argument/number.yml index c35e1a39..1e045e1a 100644 --- a/ui.content/src/main/content/jcr_root/conf/acm/settings/snippet/available/core/argument/slider.yml +++ b/ui.content/src/main/content/jcr_root/conf/acm/settings/snippet/available/core/argument/number.yml @@ -1,7 +1,12 @@ group: Argument -name: argument_slider +name: argument_number content: | - args.slider("${1:name}") { label = "${2:label}"; value = ${3:value}; min = ${4:min}; max = ${5:max}; step = ${6:step} } + args.number("${1:name}") { label = "${2:label}"; value = ${3:value}; min = ${4:min}; max = ${5:max}; step = ${6:step} } documentation: | An argument that allows to select a number from a range. The value is a number that is within the range of min and max. +
+ **Example**:
+ ```groovy + args.number("number") { label = "number"; value = 50; min = 10; max = 60; step = 0.5 } + ``` diff --git a/ui.content/src/main/content/jcr_root/conf/acm/settings/snippet/available/core/argument/numberRange.yml b/ui.content/src/main/content/jcr_root/conf/acm/settings/snippet/available/core/argument/numberRange.yml new file mode 100644 index 00000000..917cd3f9 --- /dev/null +++ b/ui.content/src/main/content/jcr_root/conf/acm/settings/snippet/available/core/argument/numberRange.yml @@ -0,0 +1,11 @@ +group: Argument +name: argument_numberRange +content: | + args.numberRange("${1:name}") { label = "${2:label}"; value = ${3:value}; min = ${4:min}; max = ${5:max}; step = ${6:step} } +documentation: | + An argument that allows to select a range number with min and max values. +
+ **example**:
+ ```groovy + args.numberRange("range") { label = "range"; value = [10, 90]; min = 0; max = 100; step = 5 } + ``` diff --git a/ui.content/src/main/content/jcr_root/conf/acm/settings/snippet/available/core/argument/range.yml b/ui.content/src/main/content/jcr_root/conf/acm/settings/snippet/available/core/argument/range.yml deleted file mode 100644 index b65f2fbb..00000000 --- a/ui.content/src/main/content/jcr_root/conf/acm/settings/snippet/available/core/argument/range.yml +++ /dev/null @@ -1,6 +0,0 @@ -group: Argument -name: argument_range -content: | - args.range("${1:name}") { label = "${2:label}"; value = ${3:value}; min = ${4:min}; max = ${5:max}; step = ${6:step} } -documentation: | - An argument that allows to select a range number with min and max values. diff --git a/ui.frontend/src/components/CodeArgumentInput.tsx b/ui.frontend/src/components/CodeArgumentInput.tsx index 8fd4a5ca..428f4db8 100644 --- a/ui.frontend/src/components/CodeArgumentInput.tsx +++ b/ui.frontend/src/components/CodeArgumentInput.tsx @@ -2,7 +2,8 @@ import { Button, Checkbox, CheckboxGroup, - ColorEditor, ColorFormat, + ColorEditor, + ColorFormat, ColorPicker, DatePicker, Flex, @@ -18,7 +19,7 @@ import { Switch, TextArea, TextField, - View + View, } from '@adobe/react-spectrum'; import { Editor } from '@monaco-editor/react'; import { Field } from '@react-spectrum/label'; @@ -300,14 +301,11 @@ const CodeArgumentInput: React.FC = ({ arg }) => { {...field} label={argLabel(arg)} aria-label={`Argument '${arg.name}'`} - value={field.value ? parseColor(field.value) : ""} - onChange={(value) => field.onChange(value.toString(arg.format.toLowerCase() as ColorFormat))}> - - diff --git a/ui.frontend/src/utils/api.types.ts b/ui.frontend/src/utils/api.types.ts index 2e03a579..2ee15916 100644 --- a/ui.frontend/src/utils/api.types.ts +++ b/ui.frontend/src/utils/api.types.ts @@ -67,7 +67,7 @@ export type SliderArgument = Argument & { export type ColorArgument = Argument & { format: 'HEX' | 'RGBA' | 'HSL' | 'HSB'; -} +}; type RangeValue = { start: number; From e70503f4ba8259ceff0ff5be321a7e63ebc20262 Mon Sep 17 00:00:00 2001 From: "kamil.orwat" Date: Tue, 6 May 2025 10:58:05 +0200 Subject: [PATCH 09/13] refactored inputs --- .../es/aem/acm/core/code/ArgumentType.java | 1 - .../vml/es/aem/acm/core/code/Arguments.java | 24 +++--- .../acm/core/code/arg/DecimalArgument.java | 44 +++++++++++ .../core/code/arg/DecimalRangeArgument.java | 78 ++++++++++++++++++ .../acm/core/code/arg/IntegerArgument.java | 44 +++++++++++ ...rgument.java => IntegerRangeArgument.java} | 38 ++++----- .../aem/acm/core/code/arg/NumberArgument.java | 40 ---------- .../available/core/argument/decimal.yml | 7 +- .../available/core/argument/decimalRange.yml | 11 +++ .../available/core/argument/integer.yml | 8 +- .../available/core/argument/integerRange.yml | 11 +++ .../available/core/argument/number.yml | 12 --- .../available/core/argument/numberRange.yml | 11 --- .../src/components/CodeArgumentInput.tsx | 79 ++++++++++--------- ui.frontend/src/utils/api.types.ts | 11 +-- 15 files changed, 273 insertions(+), 146 deletions(-) create mode 100644 core/src/main/java/com/vml/es/aem/acm/core/code/arg/DecimalRangeArgument.java rename core/src/main/java/com/vml/es/aem/acm/core/code/arg/{NumberRangeArgument.java => IntegerRangeArgument.java} (57%) delete mode 100644 core/src/main/java/com/vml/es/aem/acm/core/code/arg/NumberArgument.java create mode 100644 ui.content/src/main/content/jcr_root/conf/acm/settings/snippet/available/core/argument/decimalRange.yml create mode 100644 ui.content/src/main/content/jcr_root/conf/acm/settings/snippet/available/core/argument/integerRange.yml delete mode 100644 ui.content/src/main/content/jcr_root/conf/acm/settings/snippet/available/core/argument/number.yml delete mode 100644 ui.content/src/main/content/jcr_root/conf/acm/settings/snippet/available/core/argument/numberRange.yml diff --git a/core/src/main/java/com/vml/es/aem/acm/core/code/ArgumentType.java b/core/src/main/java/com/vml/es/aem/acm/core/code/ArgumentType.java index 78a2c08b..370d8157 100644 --- a/core/src/main/java/com/vml/es/aem/acm/core/code/ArgumentType.java +++ b/core/src/main/java/com/vml/es/aem/acm/core/code/ArgumentType.java @@ -9,7 +9,6 @@ public enum ArgumentType { TEXT, SELECT, MULTISELECT, - SLIDER, COLOR, RANGE } diff --git a/core/src/main/java/com/vml/es/aem/acm/core/code/Arguments.java b/core/src/main/java/com/vml/es/aem/acm/core/code/Arguments.java index c55fef9c..bdf54f81 100644 --- a/core/src/main/java/com/vml/es/aem/acm/core/code/Arguments.java +++ b/core/src/main/java/com/vml/es/aem/acm/core/code/Arguments.java @@ -146,32 +146,32 @@ public void integerNumber(String name, Closure options) { add(argument); } - public void number(String name) { - number(name, null); + public void color(String name) { + color(name, null); } - public void number(String name, Closure options) { - NumberArgument argument = new NumberArgument(name); + public void color(String name, Closure options) { + ColorArgument argument = new ColorArgument(name); GroovyUtils.with(argument, options); add(argument); } - public void color(String name) { - color(name, null); + public void integerRange(String name) { + integerRange(name, null); } - public void color(String name, Closure options) { - ColorArgument argument = new ColorArgument(name); + public void integerRange(String name, Closure options) { + IntegerRangeArgument argument = new IntegerRangeArgument(name); GroovyUtils.with(argument, options); add(argument); } - public void numberRange(String name) { - numberRange(name, null); + public void decimalRange(String name) { + decimalRange(name, null); } - public void numberRange(String name, Closure options) { - NumberRangeArgument argument = new NumberRangeArgument(name); + public void decimalRange(String name, Closure options) { + DecimalRangeArgument argument = new DecimalRangeArgument(name); GroovyUtils.with(argument, options); add(argument); } diff --git a/core/src/main/java/com/vml/es/aem/acm/core/code/arg/DecimalArgument.java b/core/src/main/java/com/vml/es/aem/acm/core/code/arg/DecimalArgument.java index 43a783b2..2ed751c3 100644 --- a/core/src/main/java/com/vml/es/aem/acm/core/code/arg/DecimalArgument.java +++ b/core/src/main/java/com/vml/es/aem/acm/core/code/arg/DecimalArgument.java @@ -3,6 +3,7 @@ import com.vml.es.aem.acm.core.code.Argument; import com.vml.es.aem.acm.core.code.ArgumentType; import java.math.BigDecimal; +import java.util.Arrays; public class DecimalArgument extends Argument { @@ -10,6 +11,10 @@ public class DecimalArgument extends Argument { private BigDecimal max; + private Display display = Display.INPUT; + + private BigDecimal step; + public DecimalArgument(String name) { super(name, ArgumentType.DECIMAL); } @@ -29,4 +34,43 @@ public BigDecimal getMax() { public void setMax(BigDecimal max) { this.max = max; } + + public void input() { + this.display = Display.INPUT; + } + + public void slider() { + this.display = Display.SLIDER; + } + + public void slider(BigDecimal min, BigDecimal max) { + this.display = Display.SLIDER; + this.min = min; + this.max = max; + } + + public Display getDisplay() { + return display; + } + + public BigDecimal getStep() { + return step; + } + + public void setStep(BigDecimal step) { + this.step = step; + } + + public enum Display { + INPUT, + SLIDER; + + public static DecimalArgument.Display of(String name) { + return Arrays.stream(DecimalArgument.Display.values()) + .filter(r -> r.name().equalsIgnoreCase(name)) + .findFirst() + .orElseThrow(() -> new IllegalArgumentException( + String.format("Decimal argument cannot be displayed as '%s'!", name))); + } + } } diff --git a/core/src/main/java/com/vml/es/aem/acm/core/code/arg/DecimalRangeArgument.java b/core/src/main/java/com/vml/es/aem/acm/core/code/arg/DecimalRangeArgument.java new file mode 100644 index 00000000..ec958afc --- /dev/null +++ b/core/src/main/java/com/vml/es/aem/acm/core/code/arg/DecimalRangeArgument.java @@ -0,0 +1,78 @@ +package com.vml.es.aem.acm.core.code.arg; + +import com.vml.es.aem.acm.core.code.Argument; +import com.vml.es.aem.acm.core.code.ArgumentType; +import java.io.Serializable; +import java.math.BigDecimal; +import java.util.List; + +public class DecimalRangeArgument extends Argument { + private BigDecimal min; + + private BigDecimal max; + + private BigDecimal step; + + public DecimalRangeArgument(String name) { + super(name, ArgumentType.RANGE); + } + + public void setValue(List value) { + if (value.size() != 2) { + throw new IllegalArgumentException( + String.format("Range value must be a list of two elements but specified '%s'!", value)); + } + super.setValue(new Range(value.get(0), value.get(1))); + } + + public BigDecimal getMin() { + return min; + } + + public void setMin(BigDecimal min) { + this.min = min; + } + + public BigDecimal getStep() { + return step; + } + + public void setStep(BigDecimal step) { + this.step = step; + } + + public BigDecimal getMax() { + return max; + } + + public void setMax(BigDecimal max) { + this.max = max; + } + + public static class Range implements Serializable { + private BigDecimal start; + + private BigDecimal end; + + public Range(BigDecimal start, BigDecimal end) { + this.start = start; + this.end = end; + } + + public BigDecimal getStart() { + return start; + } + + public void setStart(BigDecimal start) { + this.start = start; + } + + public BigDecimal getEnd() { + return end; + } + + public void setEnd(BigDecimal end) { + this.end = end; + } + } +} diff --git a/core/src/main/java/com/vml/es/aem/acm/core/code/arg/IntegerArgument.java b/core/src/main/java/com/vml/es/aem/acm/core/code/arg/IntegerArgument.java index c2d02f04..96f52556 100644 --- a/core/src/main/java/com/vml/es/aem/acm/core/code/arg/IntegerArgument.java +++ b/core/src/main/java/com/vml/es/aem/acm/core/code/arg/IntegerArgument.java @@ -2,6 +2,7 @@ import com.vml.es.aem.acm.core.code.Argument; import com.vml.es.aem.acm.core.code.ArgumentType; +import java.util.Arrays; public class IntegerArgument extends Argument { @@ -9,6 +10,10 @@ public class IntegerArgument extends Argument { private Integer max; + private Display display = Display.INPUT; + + private Integer step; + public IntegerArgument(String name) { super(name, ArgumentType.INTEGER); } @@ -28,4 +33,43 @@ public Integer getMax() { public void setMax(Integer max) { this.max = max; } + + public void input() { + this.display = Display.INPUT; + } + + public void slider() { + this.display = Display.SLIDER; + } + + public void slider(Integer min, Integer max) { + this.display = Display.SLIDER; + this.min = min; + this.max = max; + } + + public Display getDisplay() { + return display; + } + + public Integer getStep() { + return step; + } + + public void setStep(Integer step) { + this.step = step; + } + + public enum Display { + INPUT, + SLIDER; + + public static IntegerArgument.Display of(String name) { + return Arrays.stream(IntegerArgument.Display.values()) + .filter(r -> r.name().equalsIgnoreCase(name)) + .findFirst() + .orElseThrow(() -> new IllegalArgumentException( + String.format("Decimal argument cannot be displayed as '%s'!", name))); + } + } } diff --git a/core/src/main/java/com/vml/es/aem/acm/core/code/arg/NumberRangeArgument.java b/core/src/main/java/com/vml/es/aem/acm/core/code/arg/IntegerRangeArgument.java similarity index 57% rename from core/src/main/java/com/vml/es/aem/acm/core/code/arg/NumberRangeArgument.java rename to core/src/main/java/com/vml/es/aem/acm/core/code/arg/IntegerRangeArgument.java index c7ca744a..233739ac 100644 --- a/core/src/main/java/com/vml/es/aem/acm/core/code/arg/NumberRangeArgument.java +++ b/core/src/main/java/com/vml/es/aem/acm/core/code/arg/IntegerRangeArgument.java @@ -5,18 +5,18 @@ import java.io.Serializable; import java.util.List; -public class NumberRangeArgument extends Argument { - private Number min; +public class IntegerRangeArgument extends Argument { + private Integer min; - private Number max; + private Integer max; - private Number step; + private Integer step; - public NumberRangeArgument(String name) { + public IntegerRangeArgument(String name) { super(name, ArgumentType.RANGE); } - public void setValue(List value) { + public void setValue(List value) { if (value.size() != 2) { throw new IllegalArgumentException( String.format("Range value must be a list of two elements but specified '%s'!", value)); @@ -24,53 +24,53 @@ public void setValue(List value) { super.setValue(new Range(value.get(0), value.get(1))); } - public Number getMin() { + public Integer getMin() { return min; } - public void setMin(Number min) { + public void setMin(Integer min) { this.min = min; } - public Number getStep() { + public Integer getStep() { return step; } - public void setStep(Number step) { + public void setStep(Integer step) { this.step = step; } - public Number getMax() { + public Integer getMax() { return max; } - public void setMax(Number max) { + public void setMax(Integer max) { this.max = max; } public static class Range implements Serializable { - private Number start; + private Integer start; - private Number end; + private Integer end; - public Range(Number start, Number end) { + public Range(Integer start, Integer end) { this.start = start; this.end = end; } - public Number getStart() { + public Integer getStart() { return start; } - public void setStart(Number start) { + public void setStart(Integer start) { this.start = start; } - public Number getEnd() { + public Integer getEnd() { return end; } - public void setEnd(Number end) { + public void setEnd(Integer end) { this.end = end; } } diff --git a/core/src/main/java/com/vml/es/aem/acm/core/code/arg/NumberArgument.java b/core/src/main/java/com/vml/es/aem/acm/core/code/arg/NumberArgument.java deleted file mode 100644 index 4c2905fc..00000000 --- a/core/src/main/java/com/vml/es/aem/acm/core/code/arg/NumberArgument.java +++ /dev/null @@ -1,40 +0,0 @@ -package com.vml.es.aem.acm.core.code.arg; - -import com.vml.es.aem.acm.core.code.Argument; -import com.vml.es.aem.acm.core.code.ArgumentType; - -public class NumberArgument extends Argument { - private Number min; - - private Number max; - - private Number step; - - public NumberArgument(String name) { - super(name, ArgumentType.SLIDER); - } - - public Number getMin() { - return min; - } - - public void setMin(Number min) { - this.min = min; - } - - public Number getMax() { - return max; - } - - public void setMax(Number max) { - this.max = max; - } - - public Number getStep() { - return step; - } - - public void setStep(Number step) { - this.step = step; - } -} diff --git a/ui.content/src/main/content/jcr_root/conf/acm/settings/snippet/available/core/argument/decimal.yml b/ui.content/src/main/content/jcr_root/conf/acm/settings/snippet/available/core/argument/decimal.yml index 777764a2..593000e1 100644 --- a/ui.content/src/main/content/jcr_root/conf/acm/settings/snippet/available/core/argument/decimal.yml +++ b/ui.content/src/main/content/jcr_root/conf/acm/settings/snippet/available/core/argument/decimal.yml @@ -1,6 +1,11 @@ group: Argument name: argument_decimal content: | - args.decimalNumber("${1:name}") { label = "${2:label}"; value = "${3:value}" } + args.decimalNumber("${1:name}") { label = "${2:label}"; value = ${3:value} } documentation: | An argument holding a decimal number value.
+ This argument can be also displayed as a slider.
+ **Example**:
+ ```groovy + args.decimalNumber("someName") { label = "Some label"; value = 20.00; min = 10.00; max = 60.00; step = 0.5; slider() } + ``` diff --git a/ui.content/src/main/content/jcr_root/conf/acm/settings/snippet/available/core/argument/decimalRange.yml b/ui.content/src/main/content/jcr_root/conf/acm/settings/snippet/available/core/argument/decimalRange.yml new file mode 100644 index 00000000..a9381734 --- /dev/null +++ b/ui.content/src/main/content/jcr_root/conf/acm/settings/snippet/available/core/argument/decimalRange.yml @@ -0,0 +1,11 @@ +group: Argument +name: argument_decimalRange +content: | + args.decimalRange("${1:name}") { label = "${2:label}"; value = ${3:value}; min = ${4:min}; max = ${5:max}; step = ${6:step} } +documentation: | + An argument that allows to select a range decimal with min and max values. +
+ **example**:
+ ```groovy + args.decimalRange("range") { label = "range"; value = [10.00, 90.00]; min = 0.00; max = 100.00; step = 0.5 } + ``` diff --git a/ui.content/src/main/content/jcr_root/conf/acm/settings/snippet/available/core/argument/integer.yml b/ui.content/src/main/content/jcr_root/conf/acm/settings/snippet/available/core/argument/integer.yml index 7e6b73b3..ac9e3a54 100644 --- a/ui.content/src/main/content/jcr_root/conf/acm/settings/snippet/available/core/argument/integer.yml +++ b/ui.content/src/main/content/jcr_root/conf/acm/settings/snippet/available/core/argument/integer.yml @@ -1,6 +1,12 @@ group: Argument name: argument_integer content: | - args.integerNumber("${1:name}") { label = "${2:label}"; value = "${3:value}" } + args.integerNumber("${1:name}") { label = "${2:label}"; value = ${3:value} } documentation: | An argument holding a integer number value.
+ This argument can be also displayed as a slider.
+ **Example**:
+ ```groovy + args.integerNumber("someName") { label = "Some label"; value = 20; min = 10; max = 60; step = 2; slider() } + ``` + diff --git a/ui.content/src/main/content/jcr_root/conf/acm/settings/snippet/available/core/argument/integerRange.yml b/ui.content/src/main/content/jcr_root/conf/acm/settings/snippet/available/core/argument/integerRange.yml new file mode 100644 index 00000000..d2d0be62 --- /dev/null +++ b/ui.content/src/main/content/jcr_root/conf/acm/settings/snippet/available/core/argument/integerRange.yml @@ -0,0 +1,11 @@ +group: Argument +name: argument_integerRange +content: | + args.integerRange("${1:name}") { label = "${2:label}"; value = ${3:value}; min = ${4:min}; max = ${5:max}; step = ${6:step} } +documentation: | + An argument that allows to select a range integer with min and max values. +
+ **example**:
+ ```groovy + args.integerRange("range") { label = "range"; value = [10, 90]; min = 0; max = 100; step = 5 } + ``` diff --git a/ui.content/src/main/content/jcr_root/conf/acm/settings/snippet/available/core/argument/number.yml b/ui.content/src/main/content/jcr_root/conf/acm/settings/snippet/available/core/argument/number.yml deleted file mode 100644 index 1e045e1a..00000000 --- a/ui.content/src/main/content/jcr_root/conf/acm/settings/snippet/available/core/argument/number.yml +++ /dev/null @@ -1,12 +0,0 @@ -group: Argument -name: argument_number -content: | - args.number("${1:name}") { label = "${2:label}"; value = ${3:value}; min = ${4:min}; max = ${5:max}; step = ${6:step} } -documentation: | - An argument that allows to select a number from a range. - The value is a number that is within the range of min and max. -
- **Example**:
- ```groovy - args.number("number") { label = "number"; value = 50; min = 10; max = 60; step = 0.5 } - ``` diff --git a/ui.content/src/main/content/jcr_root/conf/acm/settings/snippet/available/core/argument/numberRange.yml b/ui.content/src/main/content/jcr_root/conf/acm/settings/snippet/available/core/argument/numberRange.yml deleted file mode 100644 index 917cd3f9..00000000 --- a/ui.content/src/main/content/jcr_root/conf/acm/settings/snippet/available/core/argument/numberRange.yml +++ /dev/null @@ -1,11 +0,0 @@ -group: Argument -name: argument_numberRange -content: | - args.numberRange("${1:name}") { label = "${2:label}"; value = ${3:value}; min = ${4:min}; max = ${5:max}; step = ${6:step} } -documentation: | - An argument that allows to select a range number with min and max values. -
- **example**:
- ```groovy - args.numberRange("range") { label = "range"; value = [10, 90]; min = 0; max = 100; step = 5 } - ``` diff --git a/ui.frontend/src/components/CodeArgumentInput.tsx b/ui.frontend/src/components/CodeArgumentInput.tsx index 428f4db8..5a0b9c08 100644 --- a/ui.frontend/src/components/CodeArgumentInput.tsx +++ b/ui.frontend/src/components/CodeArgumentInput.tsx @@ -36,7 +36,6 @@ import { isNumberArgument, isRangeArgument, isSelectArgument, - isSliderArgument, isStringArgument, isTextArgument, } from '../utils/api.types.ts'; @@ -250,44 +249,46 @@ const CodeArgumentInput: React.FC = ({ arg }) => { /> ); } else if (isNumberArgument(arg)) { - return ( - ( - - - - )} - /> - ); - } else if (isSliderArgument(arg)) { - return ( - ( - - - - {fieldState.error &&

{fieldState.error.message}

} -
-
- )} - /> - ); + if (arg.display === 'SLIDER') { + return( + ( + + + + {fieldState.error &&

{fieldState.error.message}

} +
+
+ )} + /> + ) + } else { + return ( + ( + + + + )} + /> + ); + } } else if (isColorArgument(arg)) { return ( & { export type NumberArgument = Argument & { min: number; max: number; -}; - -export type SliderArgument = Argument & { - min: number; - max: number; step: number; - offset: number; + display: 'INPUT' | 'SLIDER'; }; export type ColorArgument = Argument & { @@ -114,10 +109,6 @@ export function isNumberArgument(arg: Argument): arg is NumberArg return arg.type === 'INTEGER' || arg.type === 'DECIMAL'; } -export function isSliderArgument(arg: Argument): arg is SliderArgument { - return arg.type === 'SLIDER'; -} - export function isColorArgument(arg: Argument): arg is ColorArgument { return arg.type === 'COLOR'; } From af304f402e3e33243243818a77388a9d6222f1ae Mon Sep 17 00:00:00 2001 From: "kamil.orwat" Date: Tue, 6 May 2025 11:02:35 +0200 Subject: [PATCH 10/13] formattings + cleanup --- .../snippet/available/core/argument/color.yml | 2 +- .../src/components/CodeArgumentInput.tsx | 18 +++--------------- ui.frontend/src/utils/api.types.ts | 2 +- 3 files changed, 5 insertions(+), 17 deletions(-) diff --git a/ui.content/src/main/content/jcr_root/conf/acm/settings/snippet/available/core/argument/color.yml b/ui.content/src/main/content/jcr_root/conf/acm/settings/snippet/available/core/argument/color.yml index 3f0d23ff..29a7b893 100644 --- a/ui.content/src/main/content/jcr_root/conf/acm/settings/snippet/available/core/argument/color.yml +++ b/ui.content/src/main/content/jcr_root/conf/acm/settings/snippet/available/core/argument/color.yml @@ -4,7 +4,7 @@ content: | args.color("${1:name}") { label = "${2:label}"; value = ${3:value}; rgba() } documentation: | An argument that allows to choose a value from color picker.
- It returns a string with the color hex code.
+ It returns a string with the color in selected format, RGBA is the default

**Example**:
```groovy diff --git a/ui.frontend/src/components/CodeArgumentInput.tsx b/ui.frontend/src/components/CodeArgumentInput.tsx index 5a0b9c08..bc21797c 100644 --- a/ui.frontend/src/components/CodeArgumentInput.tsx +++ b/ui.frontend/src/components/CodeArgumentInput.tsx @@ -26,19 +26,7 @@ import { Field } from '@react-spectrum/label'; import React from 'react'; import { Controller, useFormContext } from 'react-hook-form'; import useFormCrossFieldValidation from '../hooks/form.ts'; -import { - Argument, - ArgumentValue, - isBoolArgument, - isColorArgument, - isDateTimeArgument, - isMultiSelectArgument, - isNumberArgument, - isRangeArgument, - isSelectArgument, - isStringArgument, - isTextArgument, -} from '../utils/api.types.ts'; +import { Argument, ArgumentValue, isBoolArgument, isColorArgument, isDateTimeArgument, isMultiSelectArgument, isNumberArgument, isRangeArgument, isSelectArgument, isStringArgument, isTextArgument } from '../utils/api.types.ts'; import { Dates } from '../utils/dates.ts'; import { Strings } from '../utils/strings.ts'; import styles from './CodeArgumentInput.module.css'; @@ -250,7 +238,7 @@ const CodeArgumentInput: React.FC = ({ arg }) => { ); } else if (isNumberArgument(arg)) { if (arg.display === 'SLIDER') { - return( + return ( = ({ arg }) => {
)} /> - ) + ); } else { return ( ; From 23806cc739406091422afffc753b1dbdfd907aab Mon Sep 17 00:00:00 2001 From: "kamil.orwat" Date: Fri, 9 May 2025 15:39:03 +0200 Subject: [PATCH 11/13] Implemented changes from CR --- .../es/aem/acm/core/code/ArgumentType.java | 2 +- .../vml/es/aem/acm/core/code/Arguments.java | 4 --- .../aem/acm/core/code/arg/ColorArgument.java | 4 +-- .../core/code/arg/DecimalRangeArgument.java | 35 +++---------------- .../core/code/arg/IntegerRangeArgument.java | 35 +++---------------- .../acm/core/util/RangeArgumentObject.java | 30 ++++++++++++++++ .../snippet/available/core/argument/color.yml | 2 +- .../available/core/argument/decimal.yml | 2 +- .../available/core/argument/decimalRange.yml | 2 +- .../available/core/argument/integerRange.yml | 2 +- ui.frontend/src/utils/api.types.ts | 8 ++--- 11 files changed, 49 insertions(+), 77 deletions(-) create mode 100644 core/src/main/java/com/vml/es/aem/acm/core/util/RangeArgumentObject.java diff --git a/core/src/main/java/com/vml/es/aem/acm/core/code/ArgumentType.java b/core/src/main/java/com/vml/es/aem/acm/core/code/ArgumentType.java index 370d8157..b45f9f4c 100644 --- a/core/src/main/java/com/vml/es/aem/acm/core/code/ArgumentType.java +++ b/core/src/main/java/com/vml/es/aem/acm/core/code/ArgumentType.java @@ -10,5 +10,5 @@ public enum ArgumentType { SELECT, MULTISELECT, COLOR, - RANGE + NUMBER_RANGE } diff --git a/core/src/main/java/com/vml/es/aem/acm/core/code/Arguments.java b/core/src/main/java/com/vml/es/aem/acm/core/code/Arguments.java index bdf54f81..0528ec70 100644 --- a/core/src/main/java/com/vml/es/aem/acm/core/code/Arguments.java +++ b/core/src/main/java/com/vml/es/aem/acm/core/code/Arguments.java @@ -156,10 +156,6 @@ public void color(String name, Closure options) { add(argument); } - public void integerRange(String name) { - integerRange(name, null); - } - public void integerRange(String name, Closure options) { IntegerRangeArgument argument = new IntegerRangeArgument(name); GroovyUtils.with(argument, options); diff --git a/core/src/main/java/com/vml/es/aem/acm/core/code/arg/ColorArgument.java b/core/src/main/java/com/vml/es/aem/acm/core/code/arg/ColorArgument.java index b6a87bce..83d15eac 100644 --- a/core/src/main/java/com/vml/es/aem/acm/core/code/arg/ColorArgument.java +++ b/core/src/main/java/com/vml/es/aem/acm/core/code/arg/ColorArgument.java @@ -15,11 +15,11 @@ public Format getFormat() { return format; } - public void setVariant(String format) { + public void setFormat(String format) { this.format = ColorArgument.Format.of(format); } - public void setVariant(ColorArgument.Format format) { + public void setFormat(ColorArgument.Format format) { this.format = format; } diff --git a/core/src/main/java/com/vml/es/aem/acm/core/code/arg/DecimalRangeArgument.java b/core/src/main/java/com/vml/es/aem/acm/core/code/arg/DecimalRangeArgument.java index ec958afc..266ecea8 100644 --- a/core/src/main/java/com/vml/es/aem/acm/core/code/arg/DecimalRangeArgument.java +++ b/core/src/main/java/com/vml/es/aem/acm/core/code/arg/DecimalRangeArgument.java @@ -2,11 +2,11 @@ import com.vml.es.aem.acm.core.code.Argument; import com.vml.es.aem.acm.core.code.ArgumentType; -import java.io.Serializable; +import com.vml.es.aem.acm.core.util.RangeArgumentObject; import java.math.BigDecimal; import java.util.List; -public class DecimalRangeArgument extends Argument { +public class DecimalRangeArgument extends Argument> { private BigDecimal min; private BigDecimal max; @@ -14,7 +14,7 @@ public class DecimalRangeArgument extends Argument { private BigDecimal step; public DecimalRangeArgument(String name) { - super(name, ArgumentType.RANGE); + super(name, ArgumentType.NUMBER_RANGE); } public void setValue(List value) { @@ -22,7 +22,7 @@ public void setValue(List value) { throw new IllegalArgumentException( String.format("Range value must be a list of two elements but specified '%s'!", value)); } - super.setValue(new Range(value.get(0), value.get(1))); + super.setValue(new RangeArgumentObject<>(value.get(0), value.get(1))); } public BigDecimal getMin() { @@ -48,31 +48,4 @@ public BigDecimal getMax() { public void setMax(BigDecimal max) { this.max = max; } - - public static class Range implements Serializable { - private BigDecimal start; - - private BigDecimal end; - - public Range(BigDecimal start, BigDecimal end) { - this.start = start; - this.end = end; - } - - public BigDecimal getStart() { - return start; - } - - public void setStart(BigDecimal start) { - this.start = start; - } - - public BigDecimal getEnd() { - return end; - } - - public void setEnd(BigDecimal end) { - this.end = end; - } - } } diff --git a/core/src/main/java/com/vml/es/aem/acm/core/code/arg/IntegerRangeArgument.java b/core/src/main/java/com/vml/es/aem/acm/core/code/arg/IntegerRangeArgument.java index 233739ac..59d2fd55 100644 --- a/core/src/main/java/com/vml/es/aem/acm/core/code/arg/IntegerRangeArgument.java +++ b/core/src/main/java/com/vml/es/aem/acm/core/code/arg/IntegerRangeArgument.java @@ -2,10 +2,10 @@ import com.vml.es.aem.acm.core.code.Argument; import com.vml.es.aem.acm.core.code.ArgumentType; -import java.io.Serializable; +import com.vml.es.aem.acm.core.util.RangeArgumentObject; import java.util.List; -public class IntegerRangeArgument extends Argument { +public class IntegerRangeArgument extends Argument> { private Integer min; private Integer max; @@ -13,7 +13,7 @@ public class IntegerRangeArgument extends Argument { private Integer step; public IntegerRangeArgument(String name) { - super(name, ArgumentType.RANGE); + super(name, ArgumentType.NUMBER_RANGE); } public void setValue(List value) { @@ -21,7 +21,7 @@ public void setValue(List value) { throw new IllegalArgumentException( String.format("Range value must be a list of two elements but specified '%s'!", value)); } - super.setValue(new Range(value.get(0), value.get(1))); + super.setValue(new RangeArgumentObject<>(value.get(0), value.get(1))); } public Integer getMin() { @@ -47,31 +47,4 @@ public Integer getMax() { public void setMax(Integer max) { this.max = max; } - - public static class Range implements Serializable { - private Integer start; - - private Integer end; - - public Range(Integer start, Integer end) { - this.start = start; - this.end = end; - } - - public Integer getStart() { - return start; - } - - public void setStart(Integer start) { - this.start = start; - } - - public Integer getEnd() { - return end; - } - - public void setEnd(Integer end) { - this.end = end; - } - } } diff --git a/core/src/main/java/com/vml/es/aem/acm/core/util/RangeArgumentObject.java b/core/src/main/java/com/vml/es/aem/acm/core/util/RangeArgumentObject.java new file mode 100644 index 00000000..00e4a8d0 --- /dev/null +++ b/core/src/main/java/com/vml/es/aem/acm/core/util/RangeArgumentObject.java @@ -0,0 +1,30 @@ +package com.vml.es.aem.acm.core.util; + +import java.io.Serializable; + +public class RangeArgumentObject> implements Serializable { + private T start; + + private T end; + + public RangeArgumentObject(T start, T end) { + this.start = start; + this.end = end; + } + + public T getStart() { + return start; + } + + public void setStart(T start) { + this.start = start; + } + + public T getEnd() { + return end; + } + + public void setEnd(T end) { + this.end = end; + } +} diff --git a/ui.content/src/main/content/jcr_root/conf/acm/settings/snippet/available/core/argument/color.yml b/ui.content/src/main/content/jcr_root/conf/acm/settings/snippet/available/core/argument/color.yml index 29a7b893..b176f038 100644 --- a/ui.content/src/main/content/jcr_root/conf/acm/settings/snippet/available/core/argument/color.yml +++ b/ui.content/src/main/content/jcr_root/conf/acm/settings/snippet/available/core/argument/color.yml @@ -1,7 +1,7 @@ group: Argument name: argument_color content: | - args.color("${1:name}") { label = "${2:label}"; value = ${3:value}; rgba() } + args.color("${1:name}") { label = "${2:label}"; value = ${3:value} } documentation: | An argument that allows to choose a value from color picker.
It returns a string with the color in selected format, RGBA is the default
diff --git a/ui.content/src/main/content/jcr_root/conf/acm/settings/snippet/available/core/argument/decimal.yml b/ui.content/src/main/content/jcr_root/conf/acm/settings/snippet/available/core/argument/decimal.yml index 593000e1..c01c3b87 100644 --- a/ui.content/src/main/content/jcr_root/conf/acm/settings/snippet/available/core/argument/decimal.yml +++ b/ui.content/src/main/content/jcr_root/conf/acm/settings/snippet/available/core/argument/decimal.yml @@ -4,7 +4,7 @@ content: | args.decimalNumber("${1:name}") { label = "${2:label}"; value = ${3:value} } documentation: | An argument holding a decimal number value.
- This argument can be also displayed as a slider.
+ can be displayed as an input and slider.
**Example**:
```groovy args.decimalNumber("someName") { label = "Some label"; value = 20.00; min = 10.00; max = 60.00; step = 0.5; slider() } diff --git a/ui.content/src/main/content/jcr_root/conf/acm/settings/snippet/available/core/argument/decimalRange.yml b/ui.content/src/main/content/jcr_root/conf/acm/settings/snippet/available/core/argument/decimalRange.yml index a9381734..df0814fb 100644 --- a/ui.content/src/main/content/jcr_root/conf/acm/settings/snippet/available/core/argument/decimalRange.yml +++ b/ui.content/src/main/content/jcr_root/conf/acm/settings/snippet/available/core/argument/decimalRange.yml @@ -1,5 +1,5 @@ group: Argument -name: argument_decimalRange +name: argument_decimal_range content: | args.decimalRange("${1:name}") { label = "${2:label}"; value = ${3:value}; min = ${4:min}; max = ${5:max}; step = ${6:step} } documentation: | diff --git a/ui.content/src/main/content/jcr_root/conf/acm/settings/snippet/available/core/argument/integerRange.yml b/ui.content/src/main/content/jcr_root/conf/acm/settings/snippet/available/core/argument/integerRange.yml index d2d0be62..f4cbed5e 100644 --- a/ui.content/src/main/content/jcr_root/conf/acm/settings/snippet/available/core/argument/integerRange.yml +++ b/ui.content/src/main/content/jcr_root/conf/acm/settings/snippet/available/core/argument/integerRange.yml @@ -1,5 +1,5 @@ group: Argument -name: argument_integerRange +name: argument_integer_range content: | args.integerRange("${1:name}") { label = "${2:label}"; value = ${3:value}; min = ${4:min}; max = ${5:max}; step = ${6:step} } documentation: | diff --git a/ui.frontend/src/utils/api.types.ts b/ui.frontend/src/utils/api.types.ts index 44f98df0..1d1736cf 100644 --- a/ui.frontend/src/utils/api.types.ts +++ b/ui.frontend/src/utils/api.types.ts @@ -23,7 +23,7 @@ export type Description = { }; }; -export type ArgumentType = 'BOOL' | 'STRING' | 'TEXT' | 'SELECT' | 'MULTISELECT' | 'INTEGER' | 'DECIMAL' | 'DATETIME' | 'COLOR' | 'RANGE'; +export type ArgumentType = 'BOOL' | 'STRING' | 'TEXT' | 'SELECT' | 'MULTISELECT' | 'INTEGER' | 'DECIMAL' | 'DATETIME' | 'COLOR' | 'NUMBER_RANGE'; export type ArgumentValue = string | string[] | number | number[] | boolean | null | undefined | RangeValue; export type ArgumentValues = Record; @@ -69,7 +69,7 @@ type RangeValue = { end: number; }; -export type RangeArgument = Argument & { +export type NumberRangeArgument = Argument & { min: number; max: number; step: number; @@ -113,8 +113,8 @@ export function isColorArgument(arg: Argument): arg is ColorArgum return arg.type === 'COLOR'; } -export function isRangeArgument(arg: Argument): arg is RangeArgument { - return arg.type === 'RANGE'; +export function isRangeArgument(arg: Argument): arg is NumberRangeArgument { + return arg.type === 'NUMBER_RANGE'; } export function isMultiSelectArgument(arg: Argument): arg is MultiSelectArgument { From f9d692fab0da0367e65be6488830552e798e1c76 Mon Sep 17 00:00:00 2001 From: "kamil.orwat" Date: Mon, 12 May 2025 10:33:24 +0200 Subject: [PATCH 12/13] formatting --- .../core/argument/{decimalRange.yml => decimal_range.yml} | 0 .../core/argument/{integerRange.yml => integer_range.yml} | 0 ui.frontend/src/utils/monaco/groovy/completions/core.ts | 4 ++-- 3 files changed, 2 insertions(+), 2 deletions(-) rename ui.content/src/main/content/jcr_root/conf/acm/settings/snippet/available/core/argument/{decimalRange.yml => decimal_range.yml} (100%) rename ui.content/src/main/content/jcr_root/conf/acm/settings/snippet/available/core/argument/{integerRange.yml => integer_range.yml} (100%) diff --git a/ui.content/src/main/content/jcr_root/conf/acm/settings/snippet/available/core/argument/decimalRange.yml b/ui.content/src/main/content/jcr_root/conf/acm/settings/snippet/available/core/argument/decimal_range.yml similarity index 100% rename from ui.content/src/main/content/jcr_root/conf/acm/settings/snippet/available/core/argument/decimalRange.yml rename to ui.content/src/main/content/jcr_root/conf/acm/settings/snippet/available/core/argument/decimal_range.yml diff --git a/ui.content/src/main/content/jcr_root/conf/acm/settings/snippet/available/core/argument/integerRange.yml b/ui.content/src/main/content/jcr_root/conf/acm/settings/snippet/available/core/argument/integer_range.yml similarity index 100% rename from ui.content/src/main/content/jcr_root/conf/acm/settings/snippet/available/core/argument/integerRange.yml rename to ui.content/src/main/content/jcr_root/conf/acm/settings/snippet/available/core/argument/integer_range.yml diff --git a/ui.frontend/src/utils/monaco/groovy/completions/core.ts b/ui.frontend/src/utils/monaco/groovy/completions/core.ts index bd158e2c..d6fd2552 100644 --- a/ui.frontend/src/utils/monaco/groovy/completions/core.ts +++ b/ui.frontend/src/utils/monaco/groovy/completions/core.ts @@ -1,7 +1,7 @@ import { Monaco } from '@monaco-editor/react'; import * as monaco from 'monaco-editor'; +import { MarkdownString } from 'monaco-editor/esm/vs/base/common/htmlContent'; import { LANGUAGE_ID } from '../../groovy.ts'; -import {MarkdownString} from "monaco-editor/esm/vs/base/common/htmlContent"; export function registerCoreCompletions(instance: Monaco) { registerScriptCompletions(instance); @@ -76,7 +76,7 @@ printf("Hello %s! You have %d new message(s)!", "John", 5) \`\`\` `), range, - } + }, ]; return { suggestions }; From 8ad36a30985cfd5bda3f4c3868820d41546860d5 Mon Sep 17 00:00:00 2001 From: Krystian Panek Date: Thu, 15 May 2025 07:38:31 +0200 Subject: [PATCH 13/13] Minor imprs --- .../vml/es/aem/acm/core/code/Arguments.java | 5 ++ .../aem/acm/core/code/ArgumentsValueMap.java | 68 +++++++++---------- .../core/code/arg/DecimalRangeArgument.java | 6 +- .../core/code/arg/IntegerRangeArgument.java | 6 +- .../com/vml/es/aem/acm/core/util/Range.java | 3 +- .../acm/core/util/RangeArgumentObject.java | 30 -------- .../snippet/available/core/argument/color.yml | 9 +-- .../available/core/argument/decimal.yml | 5 +- .../available/core/argument/decimal_range.yml | 6 +- .../available/core/argument/integer.yml | 5 +- .../available/core/argument/integer_range.yml | 6 +- 11 files changed, 61 insertions(+), 88 deletions(-) delete mode 100644 core/src/main/java/com/vml/es/aem/acm/core/util/RangeArgumentObject.java diff --git a/core/src/main/java/com/vml/es/aem/acm/core/code/Arguments.java b/core/src/main/java/com/vml/es/aem/acm/core/code/Arguments.java index 921a9ebd..e39d36d5 100644 --- a/core/src/main/java/com/vml/es/aem/acm/core/code/Arguments.java +++ b/core/src/main/java/com/vml/es/aem/acm/core/code/Arguments.java @@ -41,6 +41,11 @@ public ValueMap getValues() { return new ArgumentsValueMap(props); } + @JsonIgnore + public ValueMap values() { + return getValues(); + } + public T getValue(String name, Class type) { return getValues().get(name, type); } diff --git a/core/src/main/java/com/vml/es/aem/acm/core/code/ArgumentsValueMap.java b/core/src/main/java/com/vml/es/aem/acm/core/code/ArgumentsValueMap.java index 747e5699..7c1276ae 100644 --- a/core/src/main/java/com/vml/es/aem/acm/core/code/ArgumentsValueMap.java +++ b/core/src/main/java/com/vml/es/aem/acm/core/code/ArgumentsValueMap.java @@ -10,70 +10,64 @@ import org.apache.sling.api.wrappers.ValueMapDecorator; public class ArgumentsValueMap extends ValueMapDecorator { - /** - * Creates a new wrapper around a given map. - * - * @param base wrapped object - */ + public ArgumentsValueMap(Map base) { super(base); } - /** - * {@inheritDoc} - */ @SuppressWarnings("unchecked") public T get(String name, Class type) { - Object obj = get(name); + Object value = get(name); + // LocalDateTime conversion - if (obj instanceof Date && type == LocalDateTime.class) { + if (value instanceof Date && type == LocalDateTime.class) { // Convert Date to LocalDateTime - return (T) DateUtils.toLocalDateTime((Date) obj); - } else if (obj instanceof Calendar && type == LocalDateTime.class) { + return (T) DateUtils.toLocalDateTime((Date) value); + } else if (value instanceof Calendar && type == LocalDateTime.class) { // Convert Calendar to LocalDateTime - return (T) DateUtils.toLocalDateTime((Calendar) obj); - } else if (obj instanceof LocalDateTime && type == Date.class) { + return (T) DateUtils.toLocalDateTime((Calendar) value); + } else if (value instanceof LocalDateTime && type == Date.class) { // Convert LocalDateTime to Date - return (T) DateUtils.toDate((LocalDateTime) obj); - } else if (obj instanceof LocalDateTime && type == Calendar.class) { + return (T) DateUtils.toDate((LocalDateTime) value); + } else if (value instanceof LocalDateTime && type == Calendar.class) { // Convert LocalDateTime to Calendar - return (T) DateUtils.toCalendar((LocalDateTime) obj); - } else if (obj instanceof LocalDateTime && type == LocalDate.class) { + return (T) DateUtils.toCalendar((LocalDateTime) value); + } else if (value instanceof LocalDateTime && type == LocalDate.class) { // Convert LocalDateTime to LocalDate - return (T) ((LocalDateTime) obj).toLocalDate(); + return (T) ((LocalDateTime) value).toLocalDate(); } // LocalDate conversion - if (obj instanceof Date && type == LocalDate.class) { + if (value instanceof Date && type == LocalDate.class) { // Convert Date to LocalDate - return (T) DateUtils.toLocalDateTime((Date) obj).toLocalDate(); - } else if (obj instanceof Calendar && type == LocalDate.class) { + return (T) DateUtils.toLocalDateTime((Date) value).toLocalDate(); + } else if (value instanceof Calendar && type == LocalDate.class) { // Convert Calendar to LocalDate - return (T) DateUtils.toLocalDateTime((Calendar) obj).toLocalDate(); - } else if (obj instanceof LocalDate && type == Date.class) { + return (T) DateUtils.toLocalDateTime((Calendar) value).toLocalDate(); + } else if (value instanceof LocalDate && type == Date.class) { // Convert LocalDate to Date - return (T) DateUtils.toDate(((LocalDate) obj).atTime(LocalTime.MIN)); - } else if (obj instanceof LocalDate && type == Calendar.class) { + return (T) DateUtils.toDate(((LocalDate) value).atTime(LocalTime.MIN)); + } else if (value instanceof LocalDate && type == Calendar.class) { // Convert LocalDate to Calendar - return (T) DateUtils.toCalendar(((LocalDate) obj).atTime(LocalTime.MIN)); - } else if (obj instanceof LocalDate && type == LocalDateTime.class) { + return (T) DateUtils.toCalendar(((LocalDate) value).atTime(LocalTime.MIN)); + } else if (value instanceof LocalDate && type == LocalDateTime.class) { // Convert LocalDate to LocalDateTime - return (T) ((LocalDate) obj).atTime(LocalTime.MIN); + return (T) ((LocalDate) value).atTime(LocalTime.MIN); } // String conversion - if (obj instanceof String && type == LocalDateTime.class) { + if (value instanceof String && type == LocalDateTime.class) { // Convert String to LocalDateTime - return (T) DateUtils.toLocalDateTime((String) obj); - } else if (obj instanceof String && type == Date.class) { + return (T) DateUtils.toLocalDateTime((String) value); + } else if (value instanceof String && type == Date.class) { // Convert String to Date - return (T) DateUtils.fromString((String) obj); - } else if (obj instanceof String && type == Calendar.class) { + return (T) DateUtils.fromString((String) value); + } else if (value instanceof String && type == Calendar.class) { // Convert String to Calendar - return (T) DateUtils.toCalendar((String) obj); - } else if (obj instanceof String && type == LocalDate.class) { + return (T) DateUtils.toCalendar((String) value); + } else if (value instanceof String && type == LocalDate.class) { // Convert String to LocalDate - return (T) DateUtils.toLocalDate((String) obj); + return (T) DateUtils.toLocalDate((String) value); } return super.get(name, type); diff --git a/core/src/main/java/com/vml/es/aem/acm/core/code/arg/DecimalRangeArgument.java b/core/src/main/java/com/vml/es/aem/acm/core/code/arg/DecimalRangeArgument.java index 266ecea8..b8b27a77 100644 --- a/core/src/main/java/com/vml/es/aem/acm/core/code/arg/DecimalRangeArgument.java +++ b/core/src/main/java/com/vml/es/aem/acm/core/code/arg/DecimalRangeArgument.java @@ -2,11 +2,11 @@ import com.vml.es.aem.acm.core.code.Argument; import com.vml.es.aem.acm.core.code.ArgumentType; -import com.vml.es.aem.acm.core.util.RangeArgumentObject; +import com.vml.es.aem.acm.core.util.Range; import java.math.BigDecimal; import java.util.List; -public class DecimalRangeArgument extends Argument> { +public class DecimalRangeArgument extends Argument> { private BigDecimal min; private BigDecimal max; @@ -22,7 +22,7 @@ public void setValue(List value) { throw new IllegalArgumentException( String.format("Range value must be a list of two elements but specified '%s'!", value)); } - super.setValue(new RangeArgumentObject<>(value.get(0), value.get(1))); + super.setValue(new Range<>(value.get(0), value.get(1))); } public BigDecimal getMin() { diff --git a/core/src/main/java/com/vml/es/aem/acm/core/code/arg/IntegerRangeArgument.java b/core/src/main/java/com/vml/es/aem/acm/core/code/arg/IntegerRangeArgument.java index 59d2fd55..2d79e370 100644 --- a/core/src/main/java/com/vml/es/aem/acm/core/code/arg/IntegerRangeArgument.java +++ b/core/src/main/java/com/vml/es/aem/acm/core/code/arg/IntegerRangeArgument.java @@ -2,10 +2,10 @@ import com.vml.es.aem.acm.core.code.Argument; import com.vml.es.aem.acm.core.code.ArgumentType; -import com.vml.es.aem.acm.core.util.RangeArgumentObject; +import com.vml.es.aem.acm.core.util.Range; import java.util.List; -public class IntegerRangeArgument extends Argument> { +public class IntegerRangeArgument extends Argument> { private Integer min; private Integer max; @@ -21,7 +21,7 @@ public void setValue(List value) { throw new IllegalArgumentException( String.format("Range value must be a list of two elements but specified '%s'!", value)); } - super.setValue(new RangeArgumentObject<>(value.get(0), value.get(1))); + super.setValue(new Range<>(value.get(0), value.get(1))); } public Integer getMin() { diff --git a/core/src/main/java/com/vml/es/aem/acm/core/util/Range.java b/core/src/main/java/com/vml/es/aem/acm/core/util/Range.java index 09e3a72b..00ba7015 100644 --- a/core/src/main/java/com/vml/es/aem/acm/core/util/Range.java +++ b/core/src/main/java/com/vml/es/aem/acm/core/util/Range.java @@ -1,8 +1,9 @@ package com.vml.es.aem.acm.core.util; +import java.io.Serializable; import org.apache.commons.lang3.StringUtils; -public class Range> { +public class Range> implements Serializable { private final T start; diff --git a/core/src/main/java/com/vml/es/aem/acm/core/util/RangeArgumentObject.java b/core/src/main/java/com/vml/es/aem/acm/core/util/RangeArgumentObject.java deleted file mode 100644 index 00e4a8d0..00000000 --- a/core/src/main/java/com/vml/es/aem/acm/core/util/RangeArgumentObject.java +++ /dev/null @@ -1,30 +0,0 @@ -package com.vml.es.aem.acm.core.util; - -import java.io.Serializable; - -public class RangeArgumentObject> implements Serializable { - private T start; - - private T end; - - public RangeArgumentObject(T start, T end) { - this.start = start; - this.end = end; - } - - public T getStart() { - return start; - } - - public void setStart(T start) { - this.start = start; - } - - public T getEnd() { - return end; - } - - public void setEnd(T end) { - this.end = end; - } -} diff --git a/ui.content/src/main/content/jcr_root/conf/acm/settings/snippet/available/core/argument/color.yml b/ui.content/src/main/content/jcr_root/conf/acm/settings/snippet/available/core/argument/color.yml index b176f038..1a691a6d 100644 --- a/ui.content/src/main/content/jcr_root/conf/acm/settings/snippet/available/core/argument/color.yml +++ b/ui.content/src/main/content/jcr_root/conf/acm/settings/snippet/available/core/argument/color.yml @@ -4,9 +4,10 @@ content: | args.color("${1:name}") { label = "${2:label}"; value = ${3:value} } documentation: | An argument that allows to choose a value from color picker.
- It returns a string with the color in selected format, RGBA is the default
-
- **Example**:
+ Supported formats: `rgba()` (default), `hex()`, `hsl()`, `hsb()`. + + For example: ```groovy - args.color("color") { label = "background color"; value = "#ff0000"; hex() } + args.color("primaryColor") { label = "Primary Color"; value = "rgba(255, 0, 0, 1)" } + args.color("backgroundColor") { label = "Background Color"; value = "#ff0000"; hex() } ``` \ No newline at end of file diff --git a/ui.content/src/main/content/jcr_root/conf/acm/settings/snippet/available/core/argument/decimal.yml b/ui.content/src/main/content/jcr_root/conf/acm/settings/snippet/available/core/argument/decimal.yml index 72a7cdae..c9239abd 100644 --- a/ui.content/src/main/content/jcr_root/conf/acm/settings/snippet/available/core/argument/decimal.yml +++ b/ui.content/src/main/content/jcr_root/conf/acm/settings/snippet/available/core/argument/decimal.yml @@ -4,8 +4,9 @@ content: | args.decimalNumber("${1:name}") { label = "${2:label}"; value = ${3:value} } documentation: | An argument holding a decimal number value.
- can be displayed as an input and slider.
- **Example**:
+ Can be displayed as `input()` or `slider()`. + + For example: ```groovy args.decimalNumber("discount") { label = "Discount (%)"; value = 15.5 } args.decimalNumber("weight") { label = "Weight (kg)"; value = 75.3 } diff --git a/ui.content/src/main/content/jcr_root/conf/acm/settings/snippet/available/core/argument/decimal_range.yml b/ui.content/src/main/content/jcr_root/conf/acm/settings/snippet/available/core/argument/decimal_range.yml index df0814fb..b8aba25b 100644 --- a/ui.content/src/main/content/jcr_root/conf/acm/settings/snippet/available/core/argument/decimal_range.yml +++ b/ui.content/src/main/content/jcr_root/conf/acm/settings/snippet/available/core/argument/decimal_range.yml @@ -3,9 +3,9 @@ name: argument_decimal_range content: | args.decimalRange("${1:name}") { label = "${2:label}"; value = ${3:value}; min = ${4:min}; max = ${5:max}; step = ${6:step} } documentation: | - An argument that allows to select a range decimal with min and max values. -
- **example**:
+ An argument that allows to select a decimal range with min and max values. + + For example: ```groovy args.decimalRange("range") { label = "range"; value = [10.00, 90.00]; min = 0.00; max = 100.00; step = 0.5 } ``` diff --git a/ui.content/src/main/content/jcr_root/conf/acm/settings/snippet/available/core/argument/integer.yml b/ui.content/src/main/content/jcr_root/conf/acm/settings/snippet/available/core/argument/integer.yml index 9a55366d..3ebaaf4e 100644 --- a/ui.content/src/main/content/jcr_root/conf/acm/settings/snippet/available/core/argument/integer.yml +++ b/ui.content/src/main/content/jcr_root/conf/acm/settings/snippet/available/core/argument/integer.yml @@ -4,8 +4,9 @@ content: | args.integerNumber("${1:name}") { label = "${2:label}"; value = ${3:value} } documentation: | An argument holding a integer number value.
- This argument can be also displayed as a slider.
- **Example**:
+ This argument can be also displayed as a slider. + + For example: ```groovy args.integerNumber("proportion") { label = "Proportion"; value = 20; min = 10; max = 60; step = 2; slider() } args.integerNumber("maxSize") { label = "Max Size"; value = 30 } diff --git a/ui.content/src/main/content/jcr_root/conf/acm/settings/snippet/available/core/argument/integer_range.yml b/ui.content/src/main/content/jcr_root/conf/acm/settings/snippet/available/core/argument/integer_range.yml index f4cbed5e..ea0aac65 100644 --- a/ui.content/src/main/content/jcr_root/conf/acm/settings/snippet/available/core/argument/integer_range.yml +++ b/ui.content/src/main/content/jcr_root/conf/acm/settings/snippet/available/core/argument/integer_range.yml @@ -3,9 +3,9 @@ name: argument_integer_range content: | args.integerRange("${1:name}") { label = "${2:label}"; value = ${3:value}; min = ${4:min}; max = ${5:max}; step = ${6:step} } documentation: | - An argument that allows to select a range integer with min and max values. -
- **example**:
+ An argument that allows to select a integer range with min and max values. + + For example: ```groovy args.integerRange("range") { label = "range"; value = [10, 90]; min = 0; max = 100; step = 5 } ```