Implement folding (use '+' key), clean up code

This commit is contained in:
2024-10-03 01:44:10 +02:00
parent 989cc89e4b
commit 1cccfc0187
4 changed files with 90 additions and 26 deletions

View File

@ -47,12 +47,14 @@ class TreeList implements Countable
if ($node instanceof ArrayNode) {
$index = 0;
if ($node->isCollapsed()) return;
foreach ($node->items as $item) {
$this->parseNode($item, [ ...$path, $key ], $index++);
}
if (!Settings::$compactGroups)
$this->list[$entryKey.'$'] = new Entry(depth: $level, key: $key, node: $node, closer: true);
} elseif ($node instanceof ObjectNode) {
if ($node->isCollapsed()) return;
foreach ($node->properties as $nodekey=>$item) {
$this->parseNode($item, [ ...$path, $key ], $nodekey);
}
@ -172,8 +174,18 @@ class TreeList implements Countable
}
if ($entry->node instanceof ArrayNode) {
echo "[" . (Settings::$compactGroups ? "…]":"");
if ($entry->node->isCollapsed()) {
echo " \e[90m\u{25ba} \e[2m".count($entry->node->items)."\e[22m";
} else {
echo " \e[90m\u{25bc}";
}
} elseif ($entry->node instanceof ObjectNode) {
echo "{" . (Settings::$compactGroups ? "…}":"");
if ($entry->node->isCollapsed()) {
echo " \e[90m\u{25ba} \e[2m".count($entry->node->properties)."\e[22m";
} else {
echo " \e[90m\u{25bc}";
}
} elseif ($entry->node instanceof ValueNode) {
$value = $entry->node->value;
echo match (gettype($value)) {