diff --git a/docs/pt_BR/README.md b/docs/pt_BR/README.md deleted file mode 100644 index 43668627..00000000 --- a/docs/pt_BR/README.md +++ /dev/null @@ -1,510 +0,0 @@ -

- -

- -

- - - - - - - - - - - - - - - -

- ---- -## Contents - - * [Instalação](#instalação) - * [Modo de Usar](#modo-de-usar) - * [Instalação Rápida](#instalação-rápida) - * [Exemplos](#exemplos) - * [API](#api) - * [Traduções](#traduções) - * [Integrações](#integrações) - - -### Instalação - -```bash -composer require php-school/cli-menu -``` - -### Modo de Usar - -#### Instalação rápida -Um exemplo básico bem simples de menu onde será apenas exibido o text do item selecionado, apenas para você iniciar. -```php -getSelectedItem()->getText(); -}; - -$menu = (new CliMenuBuilder) - ->setTitle('Basic CLI Menu') - ->addItem('First Item', $itemCallable) - ->addItem('Second Item', $itemCallable) - ->addItem('Third Item', $itemCallable) - ->addLineBreak('-') - ->build(); - -$menu->open(); -``` - - -#### Exemplos - -Veja mais [exemplos](examples) na pasta de exemplos e execute-os para ver todas as possibilidades. - -##### Menu Básico -basic - -##### Menu Básico com Separação -basic-seperation - -##### Menu Básico com Separação bem louca -crazy-seperation - -##### Estilos Personalizados -custom-styles - -##### Separação Útil -useful-seperation - -##### Itens adicionais -item-extra - -##### Remover padrão -remove-defaults - -##### Sub-menu -submenu -submenu-options - -##### Desabilitar Itens & Sub-menus -submenu - -##### Mensagem instantânea -submenu - -##### Caixa de confirmação -submenu - -### API - -O objeto `CliMenu` construído pela classe Builder - -```php -$menu = (new CliMenuBuilder) - /** - * Customise - **/ - ->build(); -``` - -Assim que você tem o objeto de menu, você pode abri-lo e fecha-lo da seguinte forma: - -```php -$menu->open(); -$menu->close(); -``` - -#### Aparência - -Você pode trocar a cor do primeiro plano e do plano de fundo do menu para qualquer uma das seguintes cores - -* black (Preto) -* red (Vermelho) -* green (Verde) -* yellow (Amarelo) -* blue (Azul) -* magenta (Magenta) -* cyan (Ciano) -* white (Branco) - -```php -$menu = (new CliMenuBuilder) - ->setForegroundColour('green') - ->setBackgroundColour('black') - ->build(); -``` - -A largura (width), o espaçamento (padding) e a margem (margin) também podem ser personalizadas: - -```php -$menu = (new CliMenuBuilder) - ->setWidth(200) - ->setPadding(10) - ->setMargin(5) - ->build(); -``` - -Modificar o texto do botão de sair: - -```php -$menu = (new CliMenuBuilder) - ->setExitButtonText("Don't you want me baby?") - ->build(); -``` - -Você pode remover o botão de sair, caso assim deseje: - -```php -$menu = (new CliMenuBuilder) - ->disableDefaultItems() - ->build(); -``` - -Observação: Isto também irá desabilitar o botão Voltar (Go Back) para os sub-menus. - -O marcador exibido ao lado do do item ativo pode ser modificado, caracteres UTF-8 são suportados. -O marcador for itens não selecionados também pode ser modificado. Se você quiser desabilita-lo, apenas defina-o como um caractere de espaço. - -```php -$menu = (new CliMenuBuilder) - ->setUnselectedMarker('❅') - ->setSelectedMarker('✏') - - //disable unselected marker - ->setUnselectedMarker(' ') - ->build(); -``` - -Você pode definir um título para o seu menu e definir um separar personalizado, uma linha que será exibida abaixo do título. -Qualquer texto que você passar para `setTitleSeparator` será repetido pelo tamanho da largura do Menu. - -```php -$menu = (new CliMenuBuilder) - ->setTitle('One Menu to rule them all!') - ->setTitleSeparator('*-') - ->build(); -``` - -#### Item Extra - -Você pode, opcionalmente, exibir algum texto arbitrário do lado direito de item. Você pode personalizar este texto e -você pode indicar em quais itens ele será exibido. Nós usamos esta função para exibir o texto `[COMPLETED]` nos exercícios -que foram completados, onde o menu exibe a lista de exercícios para uma aplicação de workshop. - -O terceiro parâmetro do método `addItem` é um boolean que define se será exibido o item extra ou não. O padrão é false. - -```php -$menu = (new CliMenuBuilder) - ->setItemExtra('✔') - ->addItem('Exercise 1', function (CliMenu $menu) { echo 'I am complete!'; }, true) - ->build(); -``` - -#### Itens - -Existem alguns tipos de itens que você pode adicionar ao seu menu - -* Item Selecionável - Este é o tipo de item que você precisa para qualquer coisa que for selecionável (você pode apertar enter e isso irá invocar o método invocável) -* Item de Quebra de Linha - Este item é usado para separar áreas, ele pode abranger várias linhas e será da largura do Menu. Qualquer string passada será repetida. -* Item Estático - Este item irá exibir qualquer texto que for fornecido, muito útil para cabeçalhos. -* Item Ascii Art - Este item é um tipo especial e permite o uso de Ascii art. Ele automaticamente cuida do espaçamento e do alinhamento. -* Item de Sub Menu - Item especial para permitir um item abrir outro menu. Muito útil para quando for criar um menu de opções. - -#### Item Selecionável - -```php -$menu = (new CliMenuBuilder) - ->addItem('The Item Text', function (CliMenu $menu) { - echo 'I am alive!'; - }) - ->build(); -``` - -Você pode adicionar múltiplos itens de uma única vez, como no exemplo: - -```php -$callable = function (CliMenu $menu) { - echo 'I am alive!'; -}; - -$menu = (new CliMenuBuilder) - ->addItems([ - ['Item 1', $callable], - ['Item 2', $callable], - ['Item 3', $callable], - ]) - ->build(); -``` - -Observação: Você pode adicionar quantos itens você quiser e todos eles podem ter diferentes ações. A ação a ser executada -é o que for definido como segundo parâmetro e ele deve ser um tipo válido PHP de `callable`. Preferencialmente, utilize classes -do tipo `Invokable` para manter suas ações isoladas e para que possam ser facilmente testadas. - -#### Item de Quebra de Linha - -```php -$menu = (new CliMenuBuilder) - ->addLineBreak('<3', 2) - ->build(); -``` - -O código acima irá repetir uma sequência de caracteres `<3` sobre o Menu por 2 linhas. - -#### Item Estático - -Itens estáticos são similares aos de QUebra de linha, no entanto, eles não repetem e não são preenchidos. É exibido como ele é. -Se o texto for mais longo que a largura do menu, ele será exibido na linha subsequente. - -```php -$menu = (new CliMenuBuilder) - ->addStaticItem('AREA 1') - //add some items here - ->addStaticItem('AREA 2') - //add some boring items here - ->addStaticItem('AREA 51') - //add some top secret items here - ->build(); -``` - -#### Ascii Art Item - -O código abaixo irá colocar a arte Ascii no centro do seu menu. Use uma das constantes abaixo para alterar o alinhamento: - -* AsciiArtItem::POSITION_CENTER -* AsciiArtItem::POSITION_LEFT -* AsciiArtItem::POSITION_RIGHT - -```php - -$art = <<addAsciiArt($art, AsciiArtItem::POSITION_CENTER) - ->build(); -``` - -#### Item de Sub Menu - -Sub-menus são muito poderosos. Você pode adicionar Menus aos Menus, MASOQUÊ?? Você pode ter um seu menu principal e também opções para o seu menu. -As itens de opções serão iguais itens normais de menu, excepto que quando você pressiona-lo, irá entrar em outro menu, no qual -qual pode ter estilos e cores diferenciados. - -```php - -$callable = function (CliMenu $menu) { - echo "I'm just a boring selectable item"; -}; - -$menu = (new CliMenuBuilder) - ->addItem('Normal Item', $callable) - ->addSubMenu('Super Sub Menu') - ->setTitle('Behold the awesomeness') - ->addItem(/** **/) - ->end() - ->build(); -``` - -Neste exemplo, um único sub-menu será criado. Assim que entrarmos no sub-menu, você será capaz de retornar ao menu principal. -ou então sair completamente do menu. Um botão Go Back (Voltar) será automaticamente adicionado, e você pode personalizar o texto deles dessa forma: - -```php -->addSubMenu('Super Sub Menu') - ->setTitle('Behold the awesomeness') - ->setGoBackButtonText('Descend to chaos') -``` - -Existem algumas coisas para se prestar atenção na sintaxe e no processo de criação aqui - -1. `addSubMenu` retorna uma instância de `CliMenuBuilder` assim você pode personalizar do jeito que precisar no objeto pai -2. Se você não modificar os estilos do sub-menu (ex, cores) ele irá herdar os estilos do menu pai -3. Você pode chamar o método `end()` na instância do sub-menu `CliMenuBuilder` para recuperar a instância pai `CliMenuBuilder` novamente. Isto é bem útil quando for fazer encadeamentos. - -Se você precisar da instância `CliMenu` do Sub Menu você pode recupera-lo após o menu principal ser construído. - -```php -$mainMenuBuilder = new CliMenuBuilder; -$subMenuBuilder = $mainMenuBuilder->addSubMenu('Super Sub Menu'); - -$menu = $mainMenuBuilder->build(); -$subMenu = $mainMenuBuilder->getSubMenu('Super Sub Menu'); -``` - -Você apenas pode fazer isso após o menu principal ter sido construído. Isto acontece porque o builder do menu principal toma conta de criar todos os sub menus. - -#### Desabilitando Itens & Sub Menus - -Neste exemplo nós estamos desabilitando alguns itens e um sub-menu, porém ainda iremos exibi-los na saída. - -```php -$itemCallable = function (CliMenu $menu) { - echo $menu->getSelectedItem()->getText(); -}; - -$menu = (new CliMenuBuilder) - ->setTitle('Basic CLI Menu Disabled Items') - ->addItem('First Item', $itemCallable) - ->addItem('Second Item', $itemCallable, false, true) - ->addItem('Third Item', $itemCallable, false, true) - ->addSubMenu('Submenu') - ->setTitle('Basic CLI Menu Disabled Items > Submenu') - ->addItem('You can go in here!', $itemCallable) - ->end() - ->addSubMenu('Disabled Submenu') - ->setTitle('Basic CLI Menu Disabled Items > Disabled Submenu') - ->addItem('Nope can\'t see this!', $itemCallable) - ->disableMenu() - ->end() - ->addLineBreak('-') - ->build(); -``` - -O terceiro parâmetro do método `->addItem` é o que realmente desabilita o item enquanto o `->disableMenu()` desabilita o menu relevante. - -O resultado é um menu completo com algumas linhas escurecidas para denotar que elas estão desabilitadas. Quando um usuário navega, -estes itens são "pulados" e o menu o joga para o próximo menu selecionável. - -#### Re-desenhando o menu - -Você pode modificar o menu e os seus estilos quando estiver executando uma ação e então você pode redesenha-los. Neste exemplo nós trocaremos -a cor de fundo dentro de uma ação. - - -```php -$itemCallable = function (CliMenu $menu) { - $menu->getStyle()->setBg($menu->getStyle()->getBg() === 'red' ? 'blue' : 'red'); - $menu->redraw(); -}; - -$menu = (new CliMenuBuilder) - ->setTitle('Basic CLI Menu') - ->addItem('First Item', $itemCallable) - ->addItem('Second Item', $itemCallable) - ->addItem('Third Item', $itemCallable) - ->addLineBreak('-') - ->build(); - -$menu->open(); -``` - -#### Recuperando, Removendo e Adicionando Itens - -Você também pode interagir com os itens do menu dentro de uma ação: - -```php -use PhpSchool\CliMenu\MenuItem\LineBreakItem; - -require_once(__DIR__ . '/../vendor/autoload.php'); - -$itemCallable = function (CliMenu $menu) { - foreach ($menu->getItems() as $item) { - $menu->removeItem($item); - } - - $menu->addItem(new LineBreakItem('-')); - - $menu->redraw(); -}; - -$menu = (new CliMenuBuilder) - ->setTitle('Basic CLI Menu') - ->addItem('First Item', $itemCallable) - ->addItem('Second Item', $itemCallable) - ->addItem('Third Item', $itemCallable) - ->addLineBreak('-') - ->build(); - -$menu->open(); -``` - -#### Diálogos (Caixas de Mensagem) - -##### Instântaneo (Flash) - -Exibe uma mensagem de uma linha sobre o menu. Ele possui um objeto de estilização separado e que possui uma cor -diferenciada do menu principal por padrão. Pode ser modificado para se encaixar no seu próprio estilo. A caixa de mensagem -é fechada assim que qualquer tecla for pressionada. No exemplo abaixo nós trocamos a cor de fundo para verde. - - -```php -use PhpSchool\CliMenu\CliMenu; -use PhpSchool\CliMenu\CliMenuBuilder; - -require_once(__DIR__ . '/../vendor/autoload.php'); - -$itemCallable = function (CliMenu $menu) { - $flash = $menu->flash("PHP School FTW!!"); - $flash->getStyle()->setBg('green'); - $flash->display(); -}; - -$menu = (new CliMenuBuilder) - ->setTitle('Basic CLI Menu') - ->addItem('First Item', $itemCallable) - ->addItem('Second Item', $itemCallable) - ->addItem('Third Item', $itemCallable) - ->addLineBreak('-') - ->build(); - -$menu->open(); -``` - -##### Confirmação - -Caixas de seleção são muito similares do tipo flash, excepto que neste tipo é mostrado um botão que deve ser selecionado -para que a caixa desapareça. O texto do botão também pode ser customizado. - -```php -use PhpSchool\CliMenu\CliMenu; -use PhpSchool\CliMenu\CliMenuBuilder; - -require_once(__DIR__ . '/../vendor/autoload.php'); - -$itemCallable = function (CliMenu $menu) { - $menu->confirm('PHP School FTW!') - ->display('OK!'); -}; - -$menu = (new CliMenuBuilder) - ->setTitle('Basic CLI Menu') - ->addItem('First Item', $itemCallable) - ->addItem('Second Item', $itemCallable) - ->addItem('Third Item', $itemCallable) - ->addLineBreak('-') - ->build(); - -$menu->open(); -``` - ---- - -Conforme você for brincando com nossa aplicação você irá fazer coisas semelhantes a isto... - -![Learn You PHP CLI Menu](https://cloud.githubusercontent.com/assets/2174476/11409864/be082444-93ba-11e5-84ab-1b6cfa38aef8.png) - -Você pode ver o código de construção neste link para mais clareza e em como fazer configurações mais avançadas: -[PHP School](https://github.com/php-school/php-workshop/blob/3240d3217bbf62b1063613fc13eb5adff2299bbe/src/Factory/MenuFactory.php) - -### Traduções -_(As traduções podem não estar atualizadas haja visto que são feitas pela comunidade)_ -Ver este documento em [Inglês (en_US)](https://github.com/php-school/cli-menu/blob/master/README.md) - - -### Integrações - - * [Symfony Console](https://github.com/RedAntNL/console)