$mode]); $target = \implode( '&', \array_map( fn ($key) => \rosavox\helpers\string_coin( '{{key}}={{value}}', [ 'key' => $key, 'value' => $a[$key], ] ), \array_keys($a) ) ); \rosavox\helpers\navigate('?' . $target); } ?>
\implode( "\n", \array_map( fn ($entry) => \rosavox\helpers\render( 'docs-list-entry', [ 'link' => \rosavox\helpers\string_coin( '?mode=edit&id={{id}}', [ 'id' => $entry['id'], ] ), 'text' => $entry['doc']['title'], ] ), \rosavox\logic\docs_list() ) ), 'link_new' => '?mode=make', ] ) ); break; } case 'make': { echo( \rosavox\helpers\render( 'docs-edit', [ 'id' => '', 'title' => '', 'authors' => '', 'content' => '', 'reasoning' => '', 'link_back' => '?mode=list', ] ) ); break; } case 'edit': { $doc = \rosavox\logic\docs_read($id); echo( \rosavox\helpers\render( 'docs-edit', [ 'id' => $id_encoded, 'title' => $doc['title'], 'authors' => \implode(', ', $doc['authors']), 'content' => $doc['content'], 'reasoning' => $doc['reasoning'], 'link_back' => '?mode=list', ] ) ); break; } case 'save': { $doc = [ 'title' => $_GET['title'], 'authors' => \explode(',', $_GET['authors']), 'content' => $_GET['content'], 'reasoning' => (empty($_GET['reasoning']) ? null : $_GET['reasoning']), ]; if ($id === null) { $id = \rosavox\logic\docs_create($doc); } else { \rosavox\logic\docs_update($id, $doc); } // nav('edit', ['id' => \rosavox\logic\docs_id_encode($id)]); nav('list', []); break; } default: { throw (new \Exception(\sprintf('invalid mode: %s', $mode))); break; } } ?>