Improve prompts, treat invalid json as string on insert/edit
This commit is contained in:
		@@ -82,7 +82,7 @@ class Editor
 | 
				
			|||||||
                    $this->redrawEditor();
 | 
					                    $this->redrawEditor();
 | 
				
			||||||
                    break;
 | 
					                    break;
 | 
				
			||||||
                case 'k{DOWN}':
 | 
					                case 'k{DOWN}':
 | 
				
			||||||
                    $this->currentRow = min(count($this->list), $this->currentRow + 1);
 | 
					                    $this->currentRow = min(count($this->list) - 1, $this->currentRow + 1);
 | 
				
			||||||
                    $this->redrawEditor();
 | 
					                    $this->redrawEditor();
 | 
				
			||||||
                    break;
 | 
					                    break;
 | 
				
			||||||
                case 'k{PGUP}':
 | 
					                case 'k{PGUP}':
 | 
				
			||||||
@@ -102,7 +102,7 @@ class Editor
 | 
				
			|||||||
                    $parent = $this->list->getEntryForIndex($parentIndex);
 | 
					                    $parent = $this->list->getEntryForIndex($parentIndex);
 | 
				
			||||||
                    
 | 
					                    
 | 
				
			||||||
                    if ($parent->node instanceof ObjectNode) {
 | 
					                    if ($parent->node instanceof ObjectNode) {
 | 
				
			||||||
                        $newVal = $this->ask("\e[33;1mnew key:\e[0m ", $entry->key);
 | 
					                        $newVal = $this->ask("\e[0;33mnew key:\e[0m ", $entry->key);
 | 
				
			||||||
                        if ($newVal !== null) {
 | 
					                        if ($newVal !== null) {
 | 
				
			||||||
                            $entry->key = $newVal;
 | 
					                            $entry->key = $newVal;
 | 
				
			||||||
                            $this->redrawEditor();
 | 
					                            $this->redrawEditor();
 | 
				
			||||||
@@ -121,6 +121,10 @@ class Editor
 | 
				
			|||||||
                        $newVal = $this->ask("\e[33;1mnew value:\e[0m ", $val);
 | 
					                        $newVal = $this->ask("\e[33;1mnew value:\e[0m ", $val);
 | 
				
			||||||
                        if ($newVal !== null) {
 | 
					                        if ($newVal !== null) {
 | 
				
			||||||
                            $val = json_decode($newVal);
 | 
					                            $val = json_decode($newVal);
 | 
				
			||||||
 | 
					                            // If the string decodes to null, but isn't 'null', treat it as a string
 | 
				
			||||||
 | 
					                            if ($val === null && $newVal !== 'null') {
 | 
				
			||||||
 | 
					                                $val = $newVal;
 | 
				
			||||||
 | 
					                            }
 | 
				
			||||||
                            $node->value = $val;
 | 
					                            $node->value = $val;
 | 
				
			||||||
                            $this->redrawEditor();
 | 
					                            $this->redrawEditor();
 | 
				
			||||||
                        } else {
 | 
					                        } else {
 | 
				
			||||||
@@ -287,7 +291,7 @@ class Editor
 | 
				
			|||||||
        $coll = $this->list->findNearestCollection($this->currentRow);
 | 
					        $coll = $this->list->findNearestCollection($this->currentRow);
 | 
				
			||||||
        $node = $this->list->getNodeForIndex($coll);
 | 
					        $node = $this->list->getNodeForIndex($coll);
 | 
				
			||||||
        if ($node instanceof ObjectNode) {
 | 
					        if ($node instanceof ObjectNode) {
 | 
				
			||||||
            $key = $this->ask("\e[97mkey:\e[0m ");
 | 
					            $key = $this->ask("\e[0;33mkey:\e[0m ");
 | 
				
			||||||
            if ($key === null) {
 | 
					            if ($key === null) {
 | 
				
			||||||
                $this->redrawInfoBar();
 | 
					                $this->redrawInfoBar();
 | 
				
			||||||
                return;
 | 
					                return;
 | 
				
			||||||
@@ -295,9 +299,15 @@ class Editor
 | 
				
			|||||||
        }
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        if ($value === null)
 | 
					        if ($value === null)
 | 
				
			||||||
            $value = $this->ask("\e[97mvalue:\e[0m ");
 | 
					            $value = $this->ask("\e[0;32mvalue:\e[0m ");
 | 
				
			||||||
        if ($value !== null) {
 | 
					        if ($value !== null) {
 | 
				
			||||||
            $value = json_decode($value);
 | 
					            $newvalue = json_decode($value);
 | 
				
			||||||
 | 
					            // If the string decodes to null, but isn't 'null', treat it as a string
 | 
				
			||||||
 | 
					            if ($newvalue === null && $value !== 'null') {
 | 
				
			||||||
 | 
					                $newvalue = $value;
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					            $value = $newvalue;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
            $valueNode = match (true) {
 | 
					            $valueNode = match (true) {
 | 
				
			||||||
                is_array($value) => new ArrayNode([]),
 | 
					                is_array($value) => new ArrayNode([]),
 | 
				
			||||||
                is_object($value) => new ObjectNode([]),
 | 
					                is_object($value) => new ObjectNode([]),
 | 
				
			||||||
@@ -411,10 +421,13 @@ class Editor
 | 
				
			|||||||
        $keys = [
 | 
					        $keys = [
 | 
				
			||||||
            'e' => 'Edit',
 | 
					            'e' => 'Edit',
 | 
				
			||||||
            'E' => 'Edit key',
 | 
					            'E' => 'Edit key',
 | 
				
			||||||
            'i' => 'Insert',
 | 
					            'I' => 'Insert',
 | 
				
			||||||
 | 
					            'i' => 'Insert value',
 | 
				
			||||||
            'D' => 'Delete',
 | 
					            'D' => 'Delete',
 | 
				
			||||||
            'C' => 'Copy',
 | 
					            //'C' => 'Copy',
 | 
				
			||||||
            'P' => 'Paste',
 | 
					            //'P' => 'Paste',
 | 
				
			||||||
 | 
					            '^R' => 'Read',
 | 
				
			||||||
 | 
					            '^W' => 'Write',
 | 
				
			||||||
            '^C' => 'Exit',
 | 
					            '^C' => 'Exit',
 | 
				
			||||||
        ];
 | 
					        ];
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -86,7 +86,7 @@ class Menu
 | 
				
			|||||||
            $item = $item . str_repeat(" ", $width - 2 - mb_strlen($item)) . "\e[40;37m";
 | 
					            $item = $item . str_repeat(" ", $width - 2 - mb_strlen($item)) . "\e[40;37m";
 | 
				
			||||||
            $item = (($n == $this->index)?"\e[37;44m":"\e[40;37m") . $item;
 | 
					            $item = (($n == $this->index)?"\e[37;44m":"\e[40;37m") . $item;
 | 
				
			||||||
            $this->terminal
 | 
					            $this->terminal
 | 
				
			||||||
                ->writeAt($left, $top + 3 + $n, self::U_EDGE_VERTICAL.$item.self::U_EDGE_VERTICAL_SCROLL);
 | 
					                ->writeAt($left, $top + 3 + $n, self::U_EDGE_VERTICAL.$item.self::U_EDGE_VERTICAL_THUMB);
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
        echo "\e[0m";
 | 
					        echo "\e[0m";
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user