Instruções
Construir um alternador de tema
Neste laboratório, você construirá um app que alterna entre diferentes temas. Quando você alterna para um tema diferente, a cor de fundo mudará e uma mensagem diferente será exibida.
Objetivo: Cumprir as user stories abaixo e fazer todos os testes passarem para completar o laboratório.
Histórias de usuário:
1. Você deve ter um elemento
button com o texto Switch Theme.
2. Seu elemento button deve ter os seguintes atributos:
- Um atributo
iddefinido como"theme-switcher-button". - Um atributo
aria-haspopupdefinido como"true". - Um atributo
aria-expandeddefinido como"false". - Um atributo
aria-controlsdefinido como"theme-dropdown".
ul com os seguintes atributos:
- Um atributo
iddefinido como"theme-dropdown". - Um atributo
roledefinido como"menu". - Um atributo
aria-labelledbydefinido como"theme-switcher-button". - Um atributo
hidden.
ul deve ter pelo menos dois elementos li com um atributo role definido como "menuitem" e um texto de sua escolha representando um tema diferente.
5. Cada um dos seus elementos li deve ter um atributo id que comece com theme- e termine com o tema que você definiu para o texto do elemento li. Por exemplo, se um dos seus temas for Light, então seu id deve ser theme-light.
6. Você deve ter um elemento com um atributo aria-live definido como "polite".
7. Você deve ter um array themes com pelo menos dois objetos que contenham cada um uma propriedade name e message. O name representará um tema diferente e a message será exibida quando o tema for alterado. Você é livre para criar valores de name e message de sua escolha, mas os valores de name devem corresponder ao conteúdo de texto dos seus elementos li.
8. Quando um usuário clica no botão #theme-switcher-button, o elemento #theme-dropdown deve exibir os temas disponíveis.
9. Quando o elemento #theme-dropdown for exibido, o atributo aria-expanded deve ser definido como "true" para o elemento button.
10. Quando o usuário clicar no #theme-switcher-button enquanto o elemento #theme-dropdown estiver exibido, o menu deve ser fechado, o atributo hidden deve ser adicionado e o atributo aria-expanded deve ser definido como "false".
11. Quando um usuário clica no #theme-switcher-button e seleciona um tema, a classe correspondente theme-<name> deve ser adicionada ao elemento body e a mensagem de tema relacionada que você definiu no array themes deve ser exibida no elemento com aria-live="polite".
12. Quando um usuário clica no #theme-switcher-button e seleciona um tema diferente do atual, a classe de tema do body e a mensagem de status devem ser atualizadas para corresponder à nova seleção.
O que fazer:
Testes:
- Você deve ter um elemento `button`.
- Seu elemento `button` deve conter o texto `Switch Theme`.
- Seu elemento `button` deve ter um atributo `id` definido como `"theme-switcher-button"`.
- Seu elemento `button` deve ter um atributo `aria-haspopup` definido como `"true"`.
- Seu elemento `button` deve ter um atributo `aria-expanded` definido como `"false"`.
- Seu elemento `button` deve ter um atributo `aria-controls` definido como `"theme-dropdown"`.
- Você deve ter um elemento `ul`.
- Seu elemento `ul` deve ter um atributo `id` definido como `"theme-dropdown"`.
- Seu elemento `ul` deve ter um atributo `role` definido como `"menu"`.
- Seu elemento `ul` deve ter um atributo `aria-labelledby` definido como `"theme-switcher-button"`.
- Seu elemento `ul` deve ter um atributo `hidden`.
- Seu elemento `ul` deve conter pelo menos dois elementos `li`.
- Cada um dos seus elementos `li` deve ter um atributo `role` definido como `"menuitem"`.
- Cada um dos seus elementos `li` deve conter um texto que represente um tema.
- Cada um dos seus elementos `li` deve ter um atributo `id` que comece com `theme-` e termine com o tema correspondente para esse elemento. Certifique-se de que o valor do seu `id` esteja todo em letras minúsculas.
- Você deve ter um elemento com um atributo `aria-live` definido como `"polite"`.
- Você deve ter um array `themes`.
- Seu array `themes` deve conter pelo menos dois objetos.
- Seu array `themes` deve conter pelo menos dois objetos, cada um com uma propriedade `name` e `message`.
- Seus valores das propriedades `name` e `message` devem ser strings que não estejam vazias.
- Cada um dos seus valores da propriedade `name` deve corresponder ao texto do conteúdo de um dos seus elementos `li`. Certifique-se de que esses valores estejam todos em minúsculas.
- Quando um usuário clica no `#theme-switcher-button` para exibir as opções de tema, o atributo `hidden` deve ser removido do elemento `#theme-dropdown`.
- Quando o elemento `#theme-dropdown` for exibido, o atributo `aria-expanded` deve ser definido como `"true"` para o elemento `button`.
- Quando o usuário clicar no `#theme-switcher-button` enquanto o elemento `#theme-dropdown` estiver exibido, o menu dropdown deve ser definido como `hidden`.
- Quando o usuário clicar no `#theme-switcher-button` enquanto o elemento `#theme-dropdown` estiver exibido, o atributo `aria-expanded` deve ser definido como `"false"`.
- Quando um usuário clica no `#theme-switcher-button` e seleciona um tema, a classe correspondente `theme-<name>` deve ser adicionada ao elemento `body`.
- Quando um usuário clica no `#theme-switcher-button` e seleciona um tema, uma `message` relacionada ao `theme` selecionado do array `themes` deve ser exibida no elemento com `aria-live="polite"`.
- Quando um usuário clica no `#theme-switcher-button` e seleciona dois temas diferentes, a classe do `body` e a mensagem de status devem ser atualizadas para corresponder a cada tema selecionado.
Preview