Component text can be truncated

- BaseComponentContext has new field terminalWidth.
- StringToStyleExpressionRenderer contains new format
  for "truncate-" prefixes and this is something
  what template can use to instruct max length based
  on terminal width.
- Change single/multi selectors to use this feature.
- Fixes #543
This commit is contained in:
Janne Valkealahti
2022-10-14 17:13:07 +01:00
parent 4c48017a97
commit feba345f00
11 changed files with 198 additions and 15 deletions

View File

@@ -39,6 +39,7 @@ import org.springframework.shell.component.support.SelectorItem;
import org.springframework.shell.standard.AbstractShellComponent;
import org.springframework.shell.standard.ShellComponent;
import org.springframework.shell.standard.ShellMethod;
import org.springframework.shell.standard.ShellOption;
import org.springframework.util.StringUtils;
@ShellComponent
@@ -75,10 +76,16 @@ public class ComponentCommands extends AbstractShellComponent {
}
@ShellMethod(key = "component single", value = "Single selector", group = "Components")
public String singleSelector() {
public String singleSelector(
@ShellOption(defaultValue = ShellOption.NULL) Boolean longKeys
) {
List<SelectorItem<String>> items = new ArrayList<>();
items.add(SelectorItem.of("key1", "value1"));
items.add(SelectorItem.of("key2", "value2"));
if (longKeys != null && longKeys == true) {
items.add(SelectorItem.of("key3 long long long long long", "value3"));
items.add(SelectorItem.of("key4 long long long long long long long long long long", "value4"));
}
SingleItemSelector<String, SelectorItem<String>> component = new SingleItemSelector<>(getTerminal(),
items, "testSimple", null);
component.setResourceLoader(getResourceLoader());
@@ -90,11 +97,17 @@ public class ComponentCommands extends AbstractShellComponent {
}
@ShellMethod(key = "component multi", value = "Multi selector", group = "Components")
public String multiSelector() {
public String multiSelector(
@ShellOption(defaultValue = ShellOption.NULL) Boolean longKeys
) {
List<SelectorItem<String>> items = new ArrayList<>();
items.add(SelectorItem.of("key1", "value1"));
items.add(SelectorItem.of("key2", "value2", false, true));
items.add(SelectorItem.of("key3", "value3"));
if (longKeys != null && longKeys == true) {
items.add(SelectorItem.of("key4 long long long long long", "value4", false, true));
items.add(SelectorItem.of("key5 long long long long long long long long long long", "value5"));
}
MultiItemSelector<String, SelectorItem<String>> component = new MultiItemSelector<>(getTerminal(),
items, "testSimple", null);
component.setResourceLoader(getResourceLoader());