You are on page 1of 8

<deck name="Código TI"><fields><rich-text name='Frente' sides='11' ></rich-

text><rich-text name='Verso' sides='01'


></rich-text></fields><cards><card><field name='Frente'><h1>adopt.js</h1>
<p>// GeneratePetInfo.js</p>
<p>// Get the pet's name from the URL<br>let pathArray =
window.location.pathname.split('/');<br>let currentPetName =
pathArray[pathArray.length - 1].replace('.html', '');</p>
<p>// Fetch the XML
data<br>fetch('/src/xml/pets/pets.xml')<br>&nbsp; .then(response =&gt;
response.text())<br>&nbsp; .then(data =&gt; {<br>&nbsp; &nbsp; let parser = new
DOMParser();<br>&nbsp; &nbsp; let xmlDoc = parser.parseFromString(data,
"text/xml");</p>
<p>&nbsp; &nbsp; // Find the pet in the XML document<br>&nbsp; &nbsp; let pets =
xmlDoc.getElementsByTagName('pet');<br>&nbsp; &nbsp; let currentPet;<br>&nbsp;
&nbsp; for(let pet of pets) {<br>&nbsp; &nbsp; &nbsp; let lname =
pet.getElementsByTagName('lname')[0].textContent;<br>&nbsp; &nbsp; &nbsp;
if(lname === currentPetName) {<br>&nbsp; &nbsp; &nbsp; &nbsp; currentPet =
pet;<br>&nbsp; &nbsp; &nbsp; &nbsp; break;<br>&nbsp; &nbsp; &nbsp; }<br>&nbsp;
&nbsp; }</p>
<p>&nbsp; &nbsp; // Extract the pet's info<br>&nbsp; &nbsp; let lname =
currentPet.getElementsByTagName('lname')[0].textContent;<br>&nbsp; &nbsp; let
name = currentPet.getElementsByTagName('name')[0].textContent;<br>&nbsp; &nbsp;
let type = currentPet.getElementsByTagName('type')[0].textContent;<br>&nbsp;
&nbsp; let gender = currentPet.getElementsByTagName('gender')
[0].textContent;<br>&nbsp; &nbsp; let dob =
currentPet.getElementsByTagName('dob')[0].textContent;<br>&nbsp; &nbsp; let age
= currentPet.getElementsByTagName('age')[0].textContent;<br>&nbsp; &nbsp; let
size = currentPet.getElementsByTagName('size')[0].textContent;<br>&nbsp; &nbsp;
let location = currentPet.getElementsByTagName('location')
[0].textContent;<br>&nbsp; &nbsp; let info =
currentPet.getElementsByTagName('info')[0].textContent;</p>
<p>&nbsp; &nbsp; // Generate the HTML<br>&nbsp; &nbsp; let html = `<br>&nbsp;
&nbsp; &nbsp; &lt;section id="adopt"&gt;<br>&nbsp; &nbsp; &nbsp; &nbsp; &lt;div
class="adopt-pet"&gt;<br>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &lt;div id="pet-
gallery"&gt;<br>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &lt;div class="big-
image"&gt;<br>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &lt;img id="big"
src="/src/img/pets/${lname}1.png"&gt;<br>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &lt;/div&gt;<br>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &lt;div
class="small-images"&gt;<br>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&lt;img class="small active" src="/src/img/pets/${lname}1.png"&gt;<br>&nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &lt;img class="small"
src="/src/img/pets/${lname}2.png"&gt;<br>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &lt;img class="small" src="/src/img/pets/$
{lname}3.png"&gt;<br>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&lt;/div&gt;<br>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &lt;/div&gt;<br>&nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &lt;div class="adopt-info"&gt;<br>&nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &lt;p&gt;Hi! I am...&lt;/p&gt;<br>&nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &lt;hr&gt;<br>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&lt;h1&gt;${name}&lt;/h1&gt;<br>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&lt;h2&gt;${type} | ${gender}&lt;/h2&gt;<br>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &lt;hr&gt;<br>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&lt;h3&gt;Location&lt;/h3&gt;<br>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&lt;p&gt;${location}&lt;/p&gt;<br>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&lt;h3&gt;Date of Birth&lt;/h3&gt;<br>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&lt;p&gt;${dob}&lt;/p&gt;<br>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&lt;h3&gt;Age&lt;/h3&gt;<br>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &lt;p&gt;$
{age}&lt;/p&gt;<br>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&lt;h3&gt;Size&lt;/h3&gt;<br>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &lt;p&gt;
${size}&lt;/p&gt;<br>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &lt;/div&gt;<br>&nbsp;
&nbsp; &nbsp; &nbsp; &lt;/div&gt;<br>&nbsp; &nbsp; &nbsp; &nbsp; &lt;div
class="adopt-story"&gt;<br>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &lt;a
href="/src/pages/nav/contact.html#form""&gt;&lt;button class="float-
right"&gt;Adopt me!&lt;/button&gt;&lt;/a&gt;<br>&nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &lt;h1&gt;My Story&lt;/h1&gt;<br>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&lt;p&gt;${info}&lt;/p&gt;<br>&nbsp; &nbsp; &nbsp; &nbsp; &lt;/div&gt;<br>&nbsp;
&nbsp; &nbsp; &lt;/section&gt;<br>&nbsp; &nbsp; &nbsp; &lt;div class="ask-
share"&gt;<br>&nbsp; &nbsp; &nbsp; &nbsp; &lt;div class="ask"&gt;<br>&nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &lt;a
href="/src/pages/nav/contact.html#form"&gt;<br>&nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &lt;h1&gt;Ask About
&lt;span&gt;${name}&lt;/span&gt;&lt;/h1&gt;<br>&nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &lt;/a&gt;<br>&nbsp; &nbsp; &nbsp; &nbsp; &lt;/div&gt;<br>&nbsp; &nbsp;
&nbsp; &nbsp; &lt;div id="share-button" class="share"&gt;<br>&nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &lt;img src="/src/img/ui/share.png"
alt="Share"&gt;<br>&nbsp; &nbsp; &nbsp; &nbsp; &lt;/div&gt;<br>&nbsp; &nbsp;
&nbsp; &lt;/div&gt;<br>&nbsp; &nbsp; &nbsp; &lt;div class="pets-
container"&gt;<br>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &lt;!-- Generated by
adoptOtherPets.js --&gt;<br>&nbsp; &nbsp; &nbsp; &lt;/div&gt;<br>&nbsp; &nbsp;
`;</p>
<p>&nbsp; &nbsp; // Get a reference to the main element<br>&nbsp; &nbsp; let
mainElement = document.querySelector('main');</p>
<p>&nbsp; &nbsp; // Add the generated HTML to the main element<br>&nbsp; &nbsp;
mainElement.innerHTML += html;<br>&nbsp; });</p></field><field
name='Verso'><p>Este código JavaScript é usado para gerar dinamicamente uma
página web de adoção de animais a partir de dados obtidos de um arquivo XML.
Aqui está o que cada parte do código faz:</p>
<p>1. `let pathArray = window.location.pathname.split('/');`</p>
<p>&nbsp; &nbsp;O código obtém o caminho atual da URL e divide-o em várias
partes com base no separador '/'. Ele armazena as partes resultantes no array
`pathArray`.</p>
<p>2. `let currentPetName = pathArray[pathArray.length - 1].replace('.html',
'');`</p>
<p>&nbsp; &nbsp;Ele extrai o nome do animal de estimação da última parte do
caminho, removendo a extensão '.html'. Este nome será usado para encontrar as
informações corretas do animal de estimação no arquivo XML.</p>
<p>3. `fetch('/src/xml/pets/pets.xml').then(response =&gt;
response.text()).then(data =&gt; {...});`</p>
<p>&nbsp; &nbsp;Ele recupera o arquivo XML do servidor e o converte em texto. O
código dentro do bloco `.then(data =&gt; {...})` é executado uma vez que os
dados são recebidos e convertidos em texto.</p>
<p>4. `let parser = new DOMParser(); let xmlDoc = parser.parseFromString(data,
"text/xml");`</p>
<p>&nbsp; &nbsp;Ele usa um DOMParser para transformar o texto XML em um
documento XML que pode ser manipulado.</p>
<p>5. O loop `for` percorre todos os elementos 'pet' no documento XML. Ele
verifica cada um para ver se o texto do elemento 'lname' corresponde ao
`currentPetName`. Se encontrar uma correspondência, ele armazena esse elemento
'pet' na variável `currentPet` e termina o loop.</p>
<p>6. Em seguida, ele extrai várias informações do elemento `currentPet` (como
nome, tipo, gênero, data de nascimento, idade, tamanho, localização e outras
informações) e as armazena em variáveis separadas.</p>
<p>7. O código então gera uma string HTML que contém todas essas informações no
formato desejado. A string HTML também contém várias imagens do animal de
estimação (cujo caminho é baseado no 'lname') e um botão para adotar o animal de
estimação.</p>
<p>8. `let mainElement = document.querySelector('main');`</p>
<p>&nbsp; &nbsp;Ele seleciona o elemento 'main' na página HTML.</p>
<p>9. `mainElement.innerHTML += html;`</p>
<p>&nbsp; &nbsp;Finalmente, ele adiciona a string HTML gerada ao 'innerHTML' do
elemento 'main', efetivamente adicionando todas as informações e imagens do
animal de estimação à página web.</p></field></card><card><field
name='Frente'><h1>share.js</h1>
<p>document.addEventListener('click', function(event) {<br>&nbsp; &nbsp; let
target = event.target;<br>&nbsp; &nbsp; while (target != null) {<br>&nbsp;
&nbsp; &nbsp; if (target.classList.contains('share')) {<br>&nbsp; &nbsp; &nbsp;
&nbsp; var textToCopy = window.location.href;<br>&nbsp; &nbsp; &nbsp; &nbsp;
navigator.clipboard.writeText(textToCopy)<br>&nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; .then(function() {<br>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
alert("Link copied to clipboard!");<br>&nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; })<br>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; .catch(function(error)
{<br>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; console.error("Something went
wrong", error);<br>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; });<br>&nbsp; &nbsp;
&nbsp; &nbsp; break;<br>&nbsp; &nbsp; &nbsp; }<br>&nbsp; &nbsp; &nbsp; target =
target.parentElement;<br>&nbsp; &nbsp; }<br>&nbsp;
});<br>&nbsp;&nbsp;</p></field><field name='Verso'><p>Este código JavaScript
está criando um ouvinte de eventos que responde quando ocorre um clique em algum
lugar do documento. Aqui está o que cada parte do código está fazendo:</p>
<p>1. `document.addEventListener('click', function(event) {...});`</p>
<p>&nbsp; &nbsp;Esta linha está adicionando um ouvinte de evento de clique ao
documento inteiro. Sempre que um clique ocorrer em algum lugar do documento, a
função fornecida será chamada. Essa função recebe um objeto de evento como
argumento, que contém informações sobre o evento de clique.</p>
<p>2. `let target = event.target;`</p>
<p>&nbsp; &nbsp;Aqui, estamos pegando o elemento exato que foi clicado.
`event.target` é o elemento que disparou o evento, neste caso, o elemento que
foi clicado.</p>
<p>3. `while (target != null) {...}`</p>
<p>&nbsp; &nbsp;Este é um loop que continuará a ser executado enquanto `target`
for diferente de `null`. Este loop é útil para verificar não apenas o elemento
que foi clicado diretamente, mas também seus elementos ancestrais (pai, avô,
etc.).</p>
<p>4. `if (target.classList.contains('share')) {...}`</p>
<p>&nbsp; &nbsp;Aqui, estamos verificando se o elemento clicado (ou um dos seus
ancestrais) tem a classe CSS 'share'. Se tiver, o código dentro do bloco `if`
será executado.</p>
<p>5. `var textToCopy = window.location.href;`</p>
<p>&nbsp; &nbsp;Se o elemento clicado tiver a classe 'share', esta linha pegará
a URL da página atual (usando `window.location.href`) e armazenará na variável
`textToCopy`.</p>
<p>6. `navigator.clipboard.writeText(textToCopy) {...}`</p>
<p>&nbsp; &nbsp;Aqui, o código está tentando copiar o conteúdo de `textToCopy`
(que é a URL da página atual) para a área de transferência do usuário.</p>
<p>7. `.then(function() { alert("Link copied to clipboard!"); })`</p>
<p>&nbsp; &nbsp;Se a cópia para a área de transferência for bem-sucedida, uma
caixa de alerta será exibida dizendo "Link copied to clipboard!".</p>
<p>8. `.catch(function(error) { console.error("Something went wrong",
error); });`</p>
<p>&nbsp; &nbsp;Se houver um erro ao tentar copiar para a área de transferência,
a mensagem de erro será exibida no console do navegador.</p>
<p>9. `break;`</p>
<p>&nbsp; &nbsp;Isso termina o loop `while`. É necessário porque, uma vez que o
texto foi copiado com sucesso para a área de transferência (ou um erro foi
encontrado), não há necessidade de continuar verificando os elementos
ancestrais.</p>
<p>10. `target = target.parentElement;`</p>
<p>&nbsp; &nbsp; Se o elemento clicado (ou um de seus ancestrais) não tiver a
classe 'share', então a referência do `target` é atualizada para o elemento pai
do `target` atual. Isso significa que o loop `while` irá verificar o elemento
pai em seguida. Se o elemento pai também não tiver a classe 'share', então o seu
pai será verificado, e assim por diante, até que um elemento com a classe
'share' seja encontrado ou todos os elementos ancestrais tenham sido
verificados.</p></field></card><card><field name='Frente'><h1>pet.js</h1>
<p>fetch('/src/xml/pets/pets.xml')<br>&nbsp; .then(response =&gt;
response.text())<br>&nbsp; .then(data =&gt; {<br>&nbsp; &nbsp; // Now 'data' is
the XML file as a string<br>&nbsp; &nbsp; let parser = new
DOMParser();<br>&nbsp; &nbsp; let xmlDoc = parser.parseFromString(data,
"text/xml");</p>
<p>&nbsp; &nbsp; // Get all the &lt;pet&gt; elements<br>&nbsp; &nbsp; let pets =
xmlDoc.getElementsByTagName('pet');</p>
<p>&nbsp; &nbsp; // For each &lt;pet&gt;, create the corresponding
HTML<br>&nbsp; &nbsp; for (let pet of pets) {<br>&nbsp; &nbsp; &nbsp; let lname
= pet.getElementsByTagName('lname')[0].textContent;<br>&nbsp; &nbsp; &nbsp; let
name = pet.getElementsByTagName('name')[0].textContent;<br>&nbsp; &nbsp; &nbsp;
let type = pet.getElementsByTagName('type')[0].textContent;<br>&nbsp; &nbsp;
&nbsp; let location = pet.getElementsByTagName('location')
[0].textContent;<br>&nbsp; &nbsp; &nbsp; let image = `/src/img/pets/$
{lname}1.png`;<br>&nbsp; &nbsp;&nbsp;<br>&nbsp; &nbsp; &nbsp; // Create the
HTML<br>&nbsp; &nbsp; &nbsp; let html = `<br>&nbsp; &nbsp; &nbsp; &nbsp; &lt;div
class="pet"&gt;<br>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &lt;div class="pet-
image"&gt;<br>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &lt;img src="$
{image}" /&gt;<br>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &lt;/div&gt;<br>&nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &lt;div class="info-pet"&gt;<br>&nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &lt;p&gt;meet&lt;/p&gt;<br>&nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &lt;h1&gt;&lt;a href="/src/pages/pets/${lname}.html"&gt;$
{name}&lt;/a&gt;&lt;/h1&gt;<br>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&lt;h3&gt;${type}&lt;/h3&gt;<br>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&lt;div class="location"&gt;<br>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&lt;span class="material-symbols-outlined"&gt; location_on
&lt;/span&gt;<br>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &lt;h2&gt;$
{location}&lt;/h2&gt;<br>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&lt;/div&gt;<br>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &lt;div
class="learn"&gt;<br>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&lt;h4&gt;&lt;a href="/src/pages/pets/${lname}.html"&gt;learn
more&lt;/a&gt;&lt;/h4&gt;<br>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&lt;span class="material-symbols-outlined"&gt;<br>&nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; arrow_forward_ios<br>&nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &lt;/span&gt;<br>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&lt;/div&gt;<br>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &lt;/div&gt;<br>&nbsp; &nbsp;
&nbsp; &nbsp; &lt;/div&gt;<br>&nbsp; &nbsp; &nbsp; `;<br>&nbsp;
&nbsp;&nbsp;<br>&nbsp; &nbsp; &nbsp; // Add the HTML to your container<br>&nbsp;
&nbsp; &nbsp; document.querySelector('.pets-container').innerHTML +=
html;<br>&nbsp; &nbsp; }<br>&nbsp; });</p></field><field name='Verso'><p>Este
código JavaScript usa a API Fetch para buscar um arquivo XML localizado em
'/src/xml/pets/pets.xml'. A informação deste arquivo é então usada para criar
elementos HTML dinamicamente. Aqui está o que o código faz em detalhes:</p>
<p>1. `fetch('/src/xml/pets/pets.xml')`: Busca o arquivo XML localizado em
'/src/xml/pets/pets.xml'.</p>
<p>2. `.then(response =&gt; response.text())`: Transforma a resposta da fetch em
texto.</p>
<p>3. `.then(data =&gt; {...})`: Em seguida, lida com o texto como `data`.
Dentro deste bloco de código, o texto é tratado como um arquivo XML.</p>
<p>4. `let parser = new DOMParser(); let xmlDoc = parser.parseFromString(data,
"text/xml");`: Cria um novo DOMParser e usa isso para transformar a string
`data` (que é o arquivo XML) em um objeto XML que o JavaScript pode
trabalhar.</p>
<p>5. `let pets = xmlDoc.getElementsByTagName('pet');`: Seleciona todos os
elementos 'pet' do arquivo XML e os coloca na variável `pets`.</p>
<p>6. Em seguida, para cada `pet` em `pets`, extrai as informações desejadas
(como `lname`, `name`, `type`, `location`) de cada elemento 'pet'. Usa essas
informações para criar uma URL para uma imagem e para criar um bloco de
HTML.</p>
<p>7. Este bloco de HTML é então anexado ao final do conteúdo do elemento com a
classe `.pets-container`.</p>
<p>Em resumo, o código está pegando um arquivo XML, lendo as informações dele, e
então usando essas informações para criar elementos HTML
dinamicamente.</p></field></card><card><field
name='Frente'><h1>adoptAnotherPet.js</h1>
<p>&nbsp;</p>
<p>fetch('/src/xml/pets/pets.xml')<br>&nbsp; .then(response =&gt;
response.text())<br>&nbsp; .then(data =&gt; {<br>&nbsp; &nbsp; let parser = new
DOMParser();<br>&nbsp; &nbsp; let xmlDoc = parser.parseFromString(data,
"text/xml");</p>
<p>&nbsp; &nbsp; let pets =
Array.from(xmlDoc.getElementsByTagName('pet'));<br>&nbsp; &nbsp; let
selectedPets = [];</p>
<p>&nbsp; &nbsp; // Get the current pet from the URL<br>&nbsp; &nbsp; let
pathArray = window.location.pathname.split('/');<br>&nbsp; &nbsp; let currentPet
= pathArray[pathArray.length - 1].replace('.html', '');</p>
<p>&nbsp; &nbsp; // Filter out the current pet<br>&nbsp; &nbsp; pets =
pets.filter(pet =&gt; pet.getElementsByTagName('lname')[0].textContent !==
currentPet);</p>
<p>&nbsp; &nbsp; // Generate 4 random pets<br>&nbsp; &nbsp; for(let i = 0; i
&lt; 3; i++) {<br>&nbsp; &nbsp; &nbsp; let randomIndex =
Math.floor(Math.random() * pets.length);<br>&nbsp; &nbsp; &nbsp;
selectedPets.push(pets[randomIndex]);<br>&nbsp; &nbsp; &nbsp;
pets.splice(randomIndex, 1); &nbsp;// remove selected pet from the pets
array<br>&nbsp; &nbsp; }</p>
<p>&nbsp; &nbsp; // Generate the HTML for each selected pet<br>&nbsp; &nbsp;
for(let pet of selectedPets) {<br>&nbsp; &nbsp; &nbsp; let lname =
pet.getElementsByTagName('lname')[0].textContent;<br>&nbsp; &nbsp; &nbsp; let
name = pet.getElementsByTagName('name')[0].textContent;<br>&nbsp; &nbsp; &nbsp;
let type = pet.getElementsByTagName('type')[0].textContent;<br>&nbsp; &nbsp;
&nbsp; let location = pet.getElementsByTagName('location')
[0].textContent;<br>&nbsp; &nbsp; &nbsp; let image = `/src/img/pets/$
{lname}1.png`;</p>
<p>&nbsp; &nbsp; &nbsp; let html = `<br>&nbsp; &nbsp; &nbsp; &nbsp; &lt;div
class="pet"&gt;<br>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &lt;div class="pet-
image"&gt;<br>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &lt;img src="$
{image}" /&gt;<br>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &lt;/div&gt;<br>&nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &lt;div class="info-pet"&gt;<br>&nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &lt;p&gt;meet&lt;/p&gt;<br>&nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &lt;h1&gt;&lt;a href="/src/pages/pets/${lname}.html"&gt;$
{name}&lt;/a&gt;&lt;/h1&gt;<br>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&lt;h3&gt;${type}&lt;/h3&gt;<br>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&lt;div class="location"&gt;<br>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&lt;span class="material-symbols-outlined"&gt; location_on
&lt;/span&gt;<br>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &lt;h2&gt;$
{location}&lt;/h2&gt;<br>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&lt;/div&gt;<br>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &lt;div
class="learn"&gt;<br>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&lt;h4&gt;&lt;a href="/src/pages/pets/${lname}.html"&gt;learn
more&lt;/a&gt;&lt;/h4&gt;<br>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&lt;span class="material-symbols-outlined"&gt;<br>&nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; arrow_forward_ios<br>&nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &lt;/span&gt;<br>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&lt;/div&gt;<br>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &lt;/div&gt;<br>&nbsp; &nbsp;
&nbsp; &nbsp; &lt;/div&gt;<br>&nbsp; &nbsp; &nbsp; `;<br>&nbsp;
&nbsp;&nbsp;<br>&nbsp; &nbsp; &nbsp; document.querySelector('.pets-
container').innerHTML += html;<br>&nbsp; &nbsp; }<br>&nbsp;
});</p></field><field name='Verso'><p>Este código em JavaScript está buscando
dados de um arquivo XML, selecionando aleatoriamente 3 'pets' desses dados e
gerando HTML para exibir informações sobre cada 'pet'. Aqui está o que cada
parte do código está fazendo:</p>
<p>1. `fetch('/src/xml/pets/pets.xml')`</p>
<p>&nbsp; &nbsp;Este comando está usando a função `fetch` para buscar o arquivo
XML dos pets localizado em '/src/xml/pets/pets.xml'.</p>
<p>2. `.then(response =&gt; response.text())`</p>
<p>&nbsp; &nbsp;Após a obtenção bem sucedida do arquivo XML, este comando está
transformando a resposta em texto.</p>
<p>3. `let parser = new DOMParser(); let xmlDoc = parser.parseFromString(data,
"text/xml");`</p>
<p>&nbsp; &nbsp;Aqui, está sendo criado um novo objeto `DOMParser` e usado para
transformar a string de dados do XML em um documento XML que o JavaScript possa
manipular.</p>
<p>4. `let pets = Array.from(xmlDoc.getElementsByTagName('pet'));`</p>
<p>&nbsp; &nbsp;Esta linha está criando uma lista de todos os elementos 'pet' no
documento XML.</p>
<p>5. `let selectedPets = [];`</p>
<p>&nbsp; &nbsp;Este comando cria um array vazio chamado `selectedPets`, que
será usado para armazenar os 3 pets selecionados.</p>
<p>6. O bloco de código seguinte está obtendo o 'pet' atual da URL e removendo-o
da lista de pets, para que ele não seja selecionado novamente.</p>
<p>7. O próximo bloco de código está selecionando aleatoriamente 3 pets da lista
e os adicionando ao array `selectedPets`. Ele também remove o 'pet' selecionado
da lista de 'pets' para que não possa ser selecionado novamente.</p>
<p>8. Finalmente, o último bloco de código está gerando HTML para cada 'pet'
selecionado e adicionando esse HTML a um elemento com a classe 'pets-container'.
Para cada 'pet', ele cria um div com a imagem do 'pet', o nome, o tipo e a
localização. Ele também cria um link para a página do 'pet' e um botão "learn
more".</p></field></card><card><field name='Frente'><h1>pet-images.js</h1>
<p><br>document.body.addEventListener('click', function(e) {<br>&nbsp; &nbsp;
var smallImage = e.target;<br>&nbsp; &nbsp;&nbsp;<br>&nbsp; &nbsp; if
(smallImage.matches('.small')) {<br>&nbsp; &nbsp; &nbsp; &nbsp; var bigImage =
document.getElementById('big');<br>&nbsp; &nbsp; &nbsp; &nbsp;&nbsp;<br>&nbsp;
&nbsp; &nbsp; &nbsp; bigImage.src = smallImage.src;<br>&nbsp; &nbsp; &nbsp;
&nbsp; document.querySelector('.active').classList.remove('active');<br>&nbsp;
&nbsp; &nbsp; &nbsp; smallImage.classList.add('active');<br>&nbsp;
&nbsp; }<br>});</p></field><field name='Verso'><p>Este código JavaScript está a
utilizar a delegação de eventos para adicionar um ouvinte de eventos de clique
ao elemento `body` do documento HTML. É utilizado para uma funcionalidade
frequentemente vista em galerias de imagens onde, ao clicar numa miniatura, a
imagem grande actualmente exibida é alterada.</p>
<p>Aqui está uma decomposição do que o código faz:</p>
<p>1. Configura um ouvinte de eventos de clique em todo o corpo do documento:
`document.body.addEventListener('click', function(e) {...})`. Qualquer clique no
corpo do documento irá desencadear esta função.</p>
<p>2. Quando ocorre um evento de clique, o `target` do evento (o elemento que
foi realmente clicado) é guardado na variável `smallImage`.</p>
<p>3. Verifica se o elemento clicado (`smallImage`) tem a classe `small` com o
método `matches`. Se tiver, o código dentro da declaração `if` é executado.</p>
<p>4. Dentro da declaração `if`, encontra o elemento com o ID `big` e atribui-o
à variável `bigImage`.</p>
<p>5. Define o atributo `src` de `bigImage` para o atributo `src` de
`smallImage`. Isto faz com que a imagem grande mostre a mesma imagem que a
pequena que foi clicada.</p>
<p>6. Encontra o elemento com a classe `active`, remove essa classe dele usando
`classList.remove`.</p>
<p>7. Finalmente, adiciona a classe `active` à `smallImage` (a que foi clicada)
com `classList.add`.</p>
<p>Este comportamento sugere que a classe "active" pode ser usada para destacar
a miniatura que está a ser exibida como a imagem
grande.</p></field></card><card><field name='Frente'><h1>faq.js</h1>
<p>document.getElementById('faq').addEventListener('click', function()
{<br>&nbsp; &nbsp; let resultDiv = document.getElementById('result');<br>&nbsp;
&nbsp;&nbsp;<br>&nbsp; &nbsp; // If the resultDiv is not empty, clear it and
return<br>&nbsp; &nbsp; if (resultDiv.innerHTML.trim() !== "") {<br>&nbsp;
&nbsp; &nbsp; &nbsp; resultDiv.innerHTML = "";<br>&nbsp; &nbsp; &nbsp; &nbsp;
return;<br>&nbsp; &nbsp; }<br>&nbsp; &nbsp;&nbsp;<br>&nbsp; &nbsp; // If the
resultDiv is empty, fetch the data and populate it<br>&nbsp; &nbsp;
fetch('/src/xml/faq/faq.xml')<br>&nbsp; &nbsp; &nbsp; &nbsp; .then(response
=&gt; response.text())<br>&nbsp; &nbsp; &nbsp; &nbsp; .then(data =&gt;
{<br>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; let parser = new
DOMParser();<br>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; let xml =
parser.parseFromString(data, "application/xml");<br>&nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp;&nbsp;<br>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; let faqis =
xml.getElementsByTagName('faqi');<br>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
let result = '';</p>
<p>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; for(let i = 0; i &lt; faqis.length;
i++) {<br>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; let pergunta =
faqis[i].getElementsByTagName('pergunta')[0].textContent;<br>&nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; let resposta =
faqis[i].getElementsByTagName('resposta')[0].textContent;</p>
<p>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; result += `&lt;dt
class="faq-item"&gt;&lt;span class="qa"&gt;Q.&lt;/span&gt;
${pergunta}&lt;/dt&gt;&lt;dd&gt;&lt;span class="qa"&gt;A.&lt;/span&gt; $
{resposta}&lt;/dd&gt;`;<br>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }</p>
<p>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; resultDiv.innerHTML = `&lt;dl&gt;$
{result}&lt;/dl&gt;`;</p>
<p>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; let questions =
resultDiv.getElementsByTagName('dt');<br>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; for (let i = 0; i &lt; questions.length; i++) {<br>&nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; questions[i].addEventListener('click',
function() {<br>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; let answer = this.nextElementSibling;<br>&nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; if (answer.style.display === 'none')
{<br>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; answer.style.display = 'block';<br>&nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; } else {<br>&nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
answer.style.display = 'none';<br>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; }<br>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; });</p>
<p>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; setTimeout(function()
{<br>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
questions[i].style.opacity = '1';<br>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; }, i * 200);&nbsp;<br>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; }<br>&nbsp; &nbsp; &nbsp; &nbsp; })<br>&nbsp; &nbsp; &nbsp;
&nbsp; .catch((error) =&gt; {<br>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
console.error('Error:', error);<br>&nbsp; &nbsp; &nbsp; &nbsp;
});<br>});</p></field><field name='Verso'><p>Este código JavaScript é um exemplo
de como se pode implementar uma seção de Perguntas Frequentes (FAQ) em um site,
pegando perguntas e respostas de um arquivo XML e exibindo-as de forma dinâmica
no navegador. Vou detalhar cada parte:</p>
<p>1. `document.getElementById('faq').addEventListener('click', function()
{...}`</p>
<p>&nbsp; &nbsp;Este é um ouvinte de evento que aciona a função anônima quando o
elemento com o ID 'faq' é clicado.</p>
<p>2. `let resultDiv = document.getElementById('result');`</p>
<p>&nbsp; &nbsp;Aqui, está buscando o elemento com o ID 'result' e o armazenando
na variável `resultDiv`.</p>
<p>3. O bloco de código `if...else...` verifica se `resultDiv` está vazio. Se
não estiver, o código limpa `resultDiv` e retorna; se estiver, ele segue para a
próxima parte do código.</p>
<p>4. `fetch('/src/xml/faq/faq.xml')`&nbsp;</p>
<p>&nbsp; &nbsp;Esta linha busca o arquivo `faq.xml` do servidor. O método
`fetch` retorna uma promessa que resolve para o objeto de resposta.</p>
<p>5. `.then(response =&gt; response.text())`</p>
<p>&nbsp; &nbsp;Aqui, estamos convertendo a resposta obtida em texto.</p>
<p>6. `.then(data =&gt; {...}`&nbsp;</p>
<p>&nbsp; &nbsp;Este bloco de código é acionado após a conversão da resposta em
texto ser bem-sucedida. Aqui, o texto da resposta é analisado como um documento
XML e usado para criar elementos de perguntas e respostas.</p>
<p>7. `let parser = new DOMParser();`</p>
<p>&nbsp; &nbsp;`let xml = parser.parseFromString(data, "application/xml");`</p>
<p>&nbsp; &nbsp;Esta parte está criando um novo DOMParser e utilizando-o para
converter o texto XML em um objeto de documento XML.</p>
<p>8. O loop `for` seguinte percorre todos os elementos 'faqi' no documento XML.
Para cada 'faqi', extrai o texto das perguntas e respostas e os concatena em uma
string HTML.</p>
<p>9. Após o loop, a string HTML é usada para preencher o `innerHTML` de
`resultDiv`.</p>
<p>10. O próximo loop `for` adiciona um ouvinte de clique a cada pergunta.
Quando uma pergunta é clicada, a resposta correspondente é exibida ou
ocultada.</p>
<p>11. O `setTimeout` é utilizado para gradualmente aumentar a opacidade de cada
pergunta, dando um efeito de "fade-in".</p>
<p>12. `.catch((error) =&gt; { console.error('Error:', error); });`</p>
<p>&nbsp; &nbsp; Esta é a parte de tratamento de erro da promessa. Se houver
algum erro ao buscar ou processar o arquivo XML, ele será registrado no
console.</p></field></card></cards></deck>

You might also like