5 805
edições
Sem resumo de edição |
Sem resumo de edição |
||
Linha 1: | Linha 1: | ||
< | <!DOCTYPE html> | ||
<html lang="pt-BR"> | |||
<head> | |||
<meta charset="UTF-8"> | |||
<meta name="viewport" content="width=device-width, initial-scale=1.0"> | |||
<title>Filtro de Mapas</title> | |||
<style> | |||
.hidden { | |||
display: none; | |||
} | |||
.image-container { | |||
display: flex; | |||
flex-wrap: wrap; | |||
gap: 10px; | |||
} | |||
.image-item { | |||
border: 1px solid #ccc; | |||
padding: 10px; | |||
width: 200px; | |||
text-align: center; | |||
} | |||
.image-info { | |||
margin-top: 10px; | |||
font-size: 14px; | |||
} | |||
.input-group { | |||
margin-bottom: 15px; | |||
} | |||
.maps__select { | |||
width: 100%; | |||
padding: 5px; | |||
} | } | ||
</script> | .maps__label { | ||
display: block; | |||
margin-bottom: 5px; | |||
font-weight: bold; | |||
} | |||
.filter-container { | |||
margin-top: 20px; | |||
margin-bottom: 10px; | |||
} | |||
</style> | |||
</head> | |||
<body> | |||
<form id="mapForm"> | |||
<div id="mapTypeSelection" class="input-group"> | |||
<select id="mapType" class="maps__select"> | |||
<option value="">Selecione um mapa</option> | |||
<option value="1">Mapa Vermelho</option> | |||
<option value="2">Mapa Verde</option> | |||
<option value="3">Mapa Roxo</option> | |||
</select> | |||
<label class="maps__label" for="mapType">Tipo de Mapa</label> | |||
</div> | |||
<div id="specificOptions" class="hidden input-group"> | |||
<select id="specificOption" class="maps__select"> | |||
<option value="">Selecione uma opção</option> | |||
<option value="Areia">Areia</option> | |||
<option value="Gelo">Gelo</option> | |||
<option value="Grama">Grama</option> | |||
<option value="Pedra">Pedra</option> | |||
<option value="Subaquático">Subaquático</option> | |||
<option value="Terra">Terra</option> | |||
<option value="Pisos">Pisos</option> | |||
</select> | |||
<label class="maps__label" for="specificOption">Local do X</label> | |||
</div> | |||
<div class="filter-container"> | |||
<input type="checkbox" id="enableFilter"> | |||
<label for="enableFilter" class="filter-label">Ativar filtro</label> | |||
</div> | |||
<div id="filterSection" class="hidden"> | |||
<div id="filterById" class="input-group"> | |||
<label for="filterOption" class="maps__label">Filtrar Por</label> | |||
<select id="filterOption" class="maps__select"> | |||
<option value="">Escolha uma Opção</option> | |||
<option value="number">Filtrar por Número</option> | |||
<option value="tag">Filtrar por Tag</option> | |||
</select> | |||
<input type="text" id="searchIds" placeholder="Digite os números separados por vírgula" | |||
class="mapsCalc__select"> | |||
</div> | |||
<div class="d-flex justify-center align-center flex-column"> | |||
<button type="button" id="filterButton" class="hover-minimize"> | |||
<img src="https://wiki.pokexgames.com/images/8/82/Botao_Filtrar_Mapas_Adv.png" | |||
alt="Imagem botão filtrar"> | |||
</button> | |||
</div> | |||
</div> | |||
<div id="imageContainer" class="image-container hidden"> | |||
<!-- As imagens e suas informações serão exibidas aqui --> | |||
</div> | |||
</form> | |||
<script> | |||
const specificOptions = { | |||
1: { // Mapa Vermelho | |||
'Areia': [ | |||
{ id: '101', local: 'Green Island', coordinates: '3780, 3326, 7', imageUrl: 'https://wiki.pokexgames.com/images/d/db/3780%2C_3326%2C_7.png', tag: 'Areia' }, | |||
], | |||
// Outras opções do Mapa Vermelho | |||
}, | |||
2: { // Mapa Verde | |||
'Grama': [ | |||
{ id: '102', local: 'Green Hills', coordinates: '3785, 3320, 7', imageUrl: 'https://wiki.pokexgames.com/images/1/12/Green_Hills.png', tag: 'Grama' }, | |||
], | |||
// Outras opções do Mapa Verde | |||
}, | |||
3: { // Mapa Roxo | |||
'Pedra': [ | |||
{ id: '103', local: 'Rocky Mountain', coordinates: '3790, 3315, 7', imageUrl: 'https://wiki.pokexgames.com/images/2/23/Rocky_Mountain.png', tag: 'Pedra' }, | |||
], | |||
// Outras opções do Mapa Roxo | |||
} | |||
}; | |||
document.getElementById('enableFilter').addEventListener('change', function () { | |||
const filterSection = document.getElementById('filterSection'); | |||
if (this.checked) { | |||
filterSection.classList.remove('hidden'); | |||
} else { | |||
filterSection.classList.add('hidden'); | |||
} | |||
}); | |||
document.getElementById('searchIds').addEventListener('keypress', function (event) { | |||
if (event.key === 'Enter') { | |||
event.preventDefault(); | |||
document.getElementById('filterButton').click(); | |||
} | |||
}); | |||
document.getElementById('mapType').addEventListener('change', function () { | |||
const selectedMapType = this.value; | |||
const specificOptionSelect = document.getElementById('specificOption'); | |||
if (selectedMapType && specificOptions[selectedMapType]) { | |||
specificOptionSelect.innerHTML = '<option value="">Selecione uma opção</option>'; | |||
const options = Object.keys(specificOptions[selectedMapType]); | |||
options.forEach(option => { | |||
specificOptionSelect.innerHTML += `<option value="${option}">${option}</option>`; | |||
}); | |||
document.getElementById('specificOptions').classList.remove('hidden'); | |||
} else { | |||
document.getElementById('specificOptions').classList.add('hidden'); | |||
} | |||
}); | |||
document.getElementById('specificOption').addEventListener('change', function () { | |||
const selectedMapType = document.getElementById('mapType').value; | |||
const selectedOption = this.value; | |||
const imageContainer = document.getElementById('imageContainer'); | |||
if (selectedMapType && selectedOption && specificOptions[selectedMapType][selectedOption]) { | |||
const images = specificOptions[selectedMapType][selectedOption]; | |||
let imagesHtml = ''; | |||
if (Array.isArray(images)) { | |||
images.forEach(image => { | |||
imagesHtml += ` | |||
<div class="image-item"> | |||
<img src="${image.imageUrl}" alt="${selectedOption}"> | |||
<div class="image-info"> | |||
<b>Número do Mapa</b>: ${image.id} <br> | |||
<b>Local</b>: ${image.local} <br> | |||
<b>Coordenada</b>: ${image.coordinates}<br> | |||
<b>Tag(s)</b>: ${image.tag} | |||
</div> | |||
</div> | |||
`; | |||
}); | |||
} else { | |||
imagesHtml = ` | |||
<div class="image-item"> | |||
<img src="${images.imageUrl}" alt="${selectedOption}"> | |||
<div class="image-info"> | |||
<b>Número do Mapa</b>: ${images.id} <br> | |||
<b>Local</b>: ${images.local} <br> | |||
<b>Coordenada</b>: ${images.coordinates} | |||
</div> | |||
</div> | |||
`; | |||
} | |||
imageContainer.innerHTML = imagesHtml; | |||
imageContainer.classList.remove('hidden'); | |||
} else { | |||
imageContainer.classList.add('hidden'); | |||
} | |||
}); | |||
document.getElementById('filterButton').addEventListener('click', function () { | |||
const searchIds = document.getElementById('searchIds').value.split(',').map(id => id.trim()); | |||
const imageContainer = document.getElementById('imageContainer'); | |||
if (searchIds.length > 0) { | |||
let imagesHtml = ''; | |||
let allImages = []; | |||
// Recolhe todas as imagens que correspondem aos IDs | |||
Object.keys(specificOptions).forEach(mapType => { | |||
const mapOptions = specificOptions[mapType]; | |||
Object.keys(mapOptions).forEach(option => { | |||
const images = mapOptions[option].filter(image => searchIds.includes(image.id)); | |||
allImages = allImages.concat(images); | |||
}); | |||
}); | |||
// Ordena as imagens pelo nome do local | |||
allImages.sort((a, b) => a.local.localeCompare(b.local)); | |||
// Gera o HTML para exibir as imagens ordenadas | |||
allImages.forEach(image => { | |||
imagesHtml += ` | |||
<div class="image-item"> | |||
<img src="${image.imageUrl}" alt="Imagem ID ${image.id}"> | |||
<div class="image-info"> | |||
<b>Número do Mapa</b>: ${image.id} <br> | |||
<b>Local</b>: ${image.local} <br> | |||
<b>Coordenada</b>: ${image.coordinates}<br> | |||
<b>Tag(s)</b>: ${image.tag} | |||
</div> | |||
</div> | |||
`; | |||
}); | |||
if (imagesHtml === '') { | |||
imageContainer.innerHTML = 'Nenhum mapa encontrado com o(s) número(s) informado(s).'; | |||
} else { | |||
imageContainer.innerHTML = imagesHtml; | |||
} | |||
imageContainer.classList.remove('hidden'); | |||
} else { | |||
imageContainer.classList.add('hidden'); | |||
} | |||
}); | |||
</script> | |||
</body> | |||
</html> |