The document describes code for generating an animal adoption website dynamically from XML data. It fetches pet data from an XML file, parses it, extracts information for the specific pet named in the URL, generates HTML displaying the pet details, and inserts it into the website.
The document describes code for generating an animal adoption website dynamically from XML data. It fetches pet data from an XML file, parses it, extracts information for the specific pet named in the URL, generates HTML displaying the pet details, and inserts it into the website.
The document describes code for generating an animal adoption website dynamically from XML data. It fetches pet data from an XML file, parses it, extracts information for the specific pet named in the URL, generates HTML displaying the pet details, and inserts it into the website.
></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> .then(response => response.text())<br> .then(data => {<br> let parser = new DOMParser();<br> let xmlDoc = parser.parseFromString(data, "text/xml");</p> <p> // Find the pet in the XML document<br> let pets = xmlDoc.getElementsByTagName('pet');<br> let currentPet;<br> for(let pet of pets) {<br> let lname = pet.getElementsByTagName('lname')[0].textContent;<br> if(lname === currentPetName) {<br> currentPet = pet;<br> break;<br> }<br> }</p> <p> // Extract the pet's info<br> let lname = currentPet.getElementsByTagName('lname')[0].textContent;<br> let name = currentPet.getElementsByTagName('name')[0].textContent;<br> let type = currentPet.getElementsByTagName('type')[0].textContent;<br> let gender = currentPet.getElementsByTagName('gender') [0].textContent;<br> let dob = currentPet.getElementsByTagName('dob')[0].textContent;<br> let age = currentPet.getElementsByTagName('age')[0].textContent;<br> let size = currentPet.getElementsByTagName('size')[0].textContent;<br> let location = currentPet.getElementsByTagName('location') [0].textContent;<br> let info = currentPet.getElementsByTagName('info')[0].textContent;</p> <p> // Generate the HTML<br> let html = `<br> <section id="adopt"><br> <div class="adopt-pet"><br> <div id="pet- gallery"><br> <div class="big- image"><br> <img id="big" src="/src/img/pets/${lname}1.png"><br> </div><br> <div class="small-images"><br> <img class="small active" src="/src/img/pets/${lname}1.png"><br> <img class="small" src="/src/img/pets/${lname}2.png"><br> <img class="small" src="/src/img/pets/$ {lname}3.png"><br> </div><br> </div><br> <div class="adopt-info"><br> <p>Hi! I am...</p><br> <hr><br> <h1>${name}</h1><br> <h2>${type} | ${gender}</h2><br> <hr><br> <h3>Location</h3><br> <p>${location}</p><br> <h3>Date of Birth</h3><br> <p>${dob}</p><br> <h3>Age</h3><br> <p>$ {age}</p><br> <h3>Size</h3><br> <p> ${size}</p><br> </div><br> </div><br> <div class="adopt-story"><br> <a href="/src/pages/nav/contact.html#form""><button class="float- right">Adopt me!</button></a><br> <h1>My Story</h1><br> <p>${info}</p><br> </div><br> </section><br> <div class="ask- share"><br> <div class="ask"><br> <a href="/src/pages/nav/contact.html#form"><br> <h1>Ask About <span>${name}</span></h1><br> </a><br> </div><br> <div id="share-button" class="share"><br> <img src="/src/img/ui/share.png" alt="Share"><br> </div><br> </div><br> <div class="pets- container"><br> <!-- Generated by adoptOtherPets.js --><br> </div><br> `;</p> <p> // Get a reference to the main element<br> let mainElement = document.querySelector('main');</p> <p> // Add the generated HTML to the main element<br> mainElement.innerHTML += html;<br> });</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> 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> 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 => response.text()).then(data => {...});`</p> <p> Ele recupera o arquivo XML do servidor e o converte em texto. O código dentro do bloco `.then(data => {...})` é 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> 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> Ele seleciona o elemento 'main' na página HTML.</p> <p>9. `mainElement.innerHTML += html;`</p> <p> 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> let target = event.target;<br> while (target != null) {<br> if (target.classList.contains('share')) {<br> var textToCopy = window.location.href;<br> navigator.clipboard.writeText(textToCopy)<br> .then(function() {<br> alert("Link copied to clipboard!");<br> })<br> .catch(function(error) {<br> console.error("Something went wrong", error);<br> });<br> break;<br> }<br> target = target.parentElement;<br> }<br> });<br> </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> 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> 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> 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> 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> 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> 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> 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> 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> 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> 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> .then(response => response.text())<br> .then(data => {<br> // Now 'data' is the XML file as a string<br> let parser = new DOMParser();<br> let xmlDoc = parser.parseFromString(data, "text/xml");</p> <p> // Get all the <pet> elements<br> let pets = xmlDoc.getElementsByTagName('pet');</p> <p> // For each <pet>, create the corresponding HTML<br> for (let pet of pets) {<br> let lname = pet.getElementsByTagName('lname')[0].textContent;<br> let name = pet.getElementsByTagName('name')[0].textContent;<br> let type = pet.getElementsByTagName('type')[0].textContent;<br> let location = pet.getElementsByTagName('location') [0].textContent;<br> let image = `/src/img/pets/$ {lname}1.png`;<br> <br> // Create the HTML<br> let html = `<br> <div class="pet"><br> <div class="pet- image"><br> <img src="$ {image}" /><br> </div><br> <div class="info-pet"><br> <p>meet</p><br> <h1><a href="/src/pages/pets/${lname}.html">$ {name}</a></h1><br> <h3>${type}</h3><br> <div class="location"><br> <span class="material-symbols-outlined"> location_on </span><br> <h2>$ {location}</h2><br> </div><br> <div class="learn"><br> <h4><a href="/src/pages/pets/${lname}.html">learn more</a></h4><br> <span class="material-symbols-outlined"><br> arrow_forward_ios<br> </span><br> </div><br> </div><br> </div><br> `;<br> <br> // Add the HTML to your container<br> document.querySelector('.pets-container').innerHTML += html;<br> }<br> });</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 => response.text())`: Transforma a resposta da fetch em texto.</p> <p>3. `.then(data => {...})`: 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> </p> <p>fetch('/src/xml/pets/pets.xml')<br> .then(response => response.text())<br> .then(data => {<br> let parser = new DOMParser();<br> let xmlDoc = parser.parseFromString(data, "text/xml");</p> <p> let pets = Array.from(xmlDoc.getElementsByTagName('pet'));<br> let selectedPets = [];</p> <p> // Get the current pet from the URL<br> let pathArray = window.location.pathname.split('/');<br> let currentPet = pathArray[pathArray.length - 1].replace('.html', '');</p> <p> // Filter out the current pet<br> pets = pets.filter(pet => pet.getElementsByTagName('lname')[0].textContent !== currentPet);</p> <p> // Generate 4 random pets<br> for(let i = 0; i < 3; i++) {<br> let randomIndex = Math.floor(Math.random() * pets.length);<br> selectedPets.push(pets[randomIndex]);<br> pets.splice(randomIndex, 1); // remove selected pet from the pets array<br> }</p> <p> // Generate the HTML for each selected pet<br> for(let pet of selectedPets) {<br> let lname = pet.getElementsByTagName('lname')[0].textContent;<br> let name = pet.getElementsByTagName('name')[0].textContent;<br> let type = pet.getElementsByTagName('type')[0].textContent;<br> let location = pet.getElementsByTagName('location') [0].textContent;<br> let image = `/src/img/pets/$ {lname}1.png`;</p> <p> let html = `<br> <div class="pet"><br> <div class="pet- image"><br> <img src="$ {image}" /><br> </div><br> <div class="info-pet"><br> <p>meet</p><br> <h1><a href="/src/pages/pets/${lname}.html">$ {name}</a></h1><br> <h3>${type}</h3><br> <div class="location"><br> <span class="material-symbols-outlined"> location_on </span><br> <h2>$ {location}</h2><br> </div><br> <div class="learn"><br> <h4><a href="/src/pages/pets/${lname}.html">learn more</a></h4><br> <span class="material-symbols-outlined"><br> arrow_forward_ios<br> </span><br> </div><br> </div><br> </div><br> `;<br> <br> document.querySelector('.pets- container').innerHTML += html;<br> }<br> });</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> 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 => response.text())`</p> <p> 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> 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> Esta linha está criando uma lista de todos os elementos 'pet' no documento XML.</p> <p>5. `let selectedPets = [];`</p> <p> 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> var smallImage = e.target;<br> <br> if (smallImage.matches('.small')) {<br> var bigImage = document.getElementById('big');<br> <br> bigImage.src = smallImage.src;<br> document.querySelector('.active').classList.remove('active');<br> smallImage.classList.add('active');<br> }<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> let resultDiv = document.getElementById('result');<br> <br> // If the resultDiv is not empty, clear it and return<br> if (resultDiv.innerHTML.trim() !== "") {<br> resultDiv.innerHTML = "";<br> return;<br> }<br> <br> // If the resultDiv is empty, fetch the data and populate it<br> fetch('/src/xml/faq/faq.xml')<br> .then(response => response.text())<br> .then(data => {<br> let parser = new DOMParser();<br> let xml = parser.parseFromString(data, "application/xml");<br> <br> let faqis = xml.getElementsByTagName('faqi');<br> let result = '';</p> <p> for(let i = 0; i < faqis.length; i++) {<br> let pergunta = faqis[i].getElementsByTagName('pergunta')[0].textContent;<br> let resposta = faqis[i].getElementsByTagName('resposta')[0].textContent;</p> <p> result += `<dt class="faq-item"><span class="qa">Q.</span> ${pergunta}</dt><dd><span class="qa">A.</span> $ {resposta}</dd>`;<br> }</p> <p> resultDiv.innerHTML = `<dl>$ {result}</dl>`;</p> <p> let questions = resultDiv.getElementsByTagName('dt');<br> for (let i = 0; i < questions.length; i++) {<br> questions[i].addEventListener('click', function() {<br> let answer = this.nextElementSibling;<br> if (answer.style.display === 'none') {<br> answer.style.display = 'block';<br> } else {<br> answer.style.display = 'none';<br> }<br> });</p> <p> setTimeout(function() {<br> questions[i].style.opacity = '1';<br> }, i * 200); <br> }<br> })<br> .catch((error) => {<br> console.error('Error:', error);<br> });<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> 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> 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')` </p> <p> 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 => response.text())`</p> <p> Aqui, estamos convertendo a resposta obtida em texto.</p> <p>6. `.then(data => {...}` </p> <p> 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> `let xml = parser.parseFromString(data, "application/xml");`</p> <p> 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) => { console.error('Error:', error); });`</p> <p> 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>