Widget:Test3: mudanças entre as edições

Desfeita a edição 86708 de Renee (Discussão)
Sem resumo de edição
Etiqueta: Revertido
(Desfeita a edição 86708 de Renee (Discussão))
Etiqueta: Desfazer
Linha 275: Linha 275:
     };
     };


        const mapTypeSelect = document.getElementById('mapType');
    const mapTypeSelect = document.getElementById('mapType');
        const specificOptionSelect = document.getElementById('specificOption');
    const specificOptionSelect = document.getElementById('specificOption');
        const filterOptions = document.getElementById('filterOptions');
    const filterOptions = document.getElementById('filterOptions');
        const tagButtons = document.getElementById('tagButtons');
    const tagButtons = document.getElementById('tagButtons');
        const imageContainer = document.getElementById('imageContainer');
    const imageContainer = document.getElementById('imageContainer');
        const enableFilter = document.getElementById('enableFilter');
    const enableFilter = document.getElementById('enableFilter');
        const searchIdsInput = document.getElementById('searchIds');
    const filterTypeSelect = document.getElementById('filterType');
        const filterButton = document.getElementById('filterButton');
    const searchIdsInput = document.getElementById('searchIds');
    const filterButton = document.getElementById('filterButton');


        function updateTags() {
    function updateTags() {
            const selectedMapType = mapTypeSelect.value;
        const selectedMapType = mapTypeSelect.value;
            const selectedOption = specificOptionSelect.value;
        const selectedOption = specificOptionSelect.value;


            let tags = [];
        let tags = [];
            if (selectedMapType && selectedOption) {
        if (selectedMapType && selectedOption) {
                const options = specificOptions[selectedMapType];
            const options = specificOptions[selectedMapType];
                if (options && options[selectedOption]) {
            if (options && options[selectedOption]) {
                    options[selectedOption].forEach(item => {
                options[selectedOption].forEach(item => {
                        tags = [...new Set([...tags, ...item.tags])];
                    tags = [...new Set([...tags, ...item.tags])];
                    });
                });
                }
             }
             }
        }


            tagButtons.innerHTML = '';
        tagButtons.innerHTML = '';


            const disabledTags = {
        const disabledTags = {
                'Areia': 'Areia',
            'Areia': 'Areia',
                'Gelo': 'Gelo',
            'Gelo': 'Gelo',
                'Grama': 'Grama',
            'Grama': 'Grama',
                'Pedra': 'Pedra',
            'Pedra': 'Pedra',
                'Subaquático': 'Água',
            'Subaquático': 'Água',
                'Terra': 'Terra',
            'Terra': 'Terra',
                'Pisos': 'Piso'
            'Pisos': 'Piso'
            };
        };


            tags.forEach(tag => {
        tags.forEach(tag => {
                const button = document.createElement('button');
            const button = document.createElement('button');
                button.textContent = tag;
            button.textContent = tag;
                button.classList.add('tag-button');
            button.classList.add('tag-button');
                if (disabledTags[selectedOption] === tag) {
            if (disabledTags[selectedOption] === tag) {
                    button.disabled = true; // Desabilitar a tag correspondente ao Local do X
                button.disabled = true; // Desabilitar a tag correspondente ao Local do X
                    button.classList.add('disabled');
                button.classList.add('disabled');
            }
            button.addEventListener('click', () => {
                if (!button.disabled) {
                    button.classList.toggle('selected');
                 }
                 }
                button.addEventListener('click', () => {
                    if (!button.disabled) {
                        button.classList.toggle('selected');
                    }
                });
                tagButtons.appendChild(button);
             });
             });
            tagButtons.appendChild(button);
        });


            tagButtons.classList.toggle('hidden', tags.length === 0);
        tagButtons.classList.toggle('hidden', tags.length === 0);
        }
    }


        function filterImages() {
    function filterImages() {
            const selectedTags = Array.from(document.querySelectorAll('.tag-button.selected')).map(btn => btn.textContent);
        const selectedTags = Array.from(document.querySelectorAll('.tag-button.selected')).map(btn => btn.textContent);
            const selectedMapType = mapTypeSelect.value;
        const selectedMapType = mapTypeSelect.value;
            const selectedOption = specificOptionSelect.value;
        const selectedOption = specificOptionSelect.value;
            const filterById = searchIdsInput.value.trim();
        const filterById = searchIdsInput.value.trim();


            imageContainer.innerHTML = '';
        imageContainer.innerHTML = '';


            let itemsToFilter = [];
        let itemsToFilter = [];


            if (selectedMapType) {
        if (selectedMapType) {
                const options = specificOptions[selectedMapType];
            const options = specificOptions[selectedMapType];
                if (options) {
            if (options) {
                    if (selectedOption && options[selectedOption]) {
                if (selectedOption && options[selectedOption]) {
                        itemsToFilter = options[selectedOption];
                    itemsToFilter = options[selectedOption];
                    }
                 }
                 }
             } else {
             }
                // Se nenhum tipo de mapa for selecionado, reunir itens de todos os tipos de mapa
        } else {
                for (const mapType in specificOptions) {
            // Se nenhum tipo de mapa for selecionado, reunir itens de todos os tipos de mapa
                    for (const local in specificOptions[mapType]) {
            for (const mapType in specificOptions) {
                        itemsToFilter = itemsToFilter.concat(specificOptions[mapType][local]);
                for (const local in specificOptions[mapType]) {
                    }
                    itemsToFilter = itemsToFilter.concat(specificOptions[mapType][local]);
                 }
                 }
             }
             }
        }


            if (itemsToFilter.length > 0) {
        if (itemsToFilter.length > 0) {
                const filteredItems = itemsToFilter.filter(item => {
            const filteredItems = itemsToFilter.filter(item => {
                    const matchesTag = selectedTags.length === 0 || selectedTags.some(tag => item.tags.includes(tag));
                const matchesTag = selectedTags.length === 0 || selectedTags.some(tag => item.tags.includes(tag));
                    const matchesId = filterById === '' || filterById.split(',').map(id => id.trim()).includes(item.id);
                const matchesId = filterById === '' || filterById.split(',').map(id => id.trim()).includes(item.id);
                    const matchesLocal = selectedOption === '' || item.tags.includes(selectedOption);
                const matchesLocal = selectedOption === '' || item.tags.includes(selectedOption);
               
                return matchesTag && matchesId && matchesLocal;
            });


                    return matchesTag && matchesId && matchesLocal;
            filteredItems.forEach(item => {
                 });
                const itemDiv = document.createElement('div');
                 itemDiv.classList.add('image-item');


                 filteredItems.forEach(item => {
                 const img = document.createElement('img');
                    const itemDiv = document.createElement('div');
                img.src = item.imageUrl;
                    itemDiv.classList.add('image-item');
                img.alt = `Mapa ${item.id}`;
                itemDiv.appendChild(img);


                    const img = document.createElement('img');
                const infoDiv = document.createElement('div');
                    img.src = item.imageUrl;
                infoDiv.classList.add('image-info');
                    img.alt = `Mapa ${item.id}`;
                infoDiv.innerHTML = `
                    <strong>Número do Mapa:</strong> ${item.id}<br>
                    <strong>Local:</strong> ${item.local}<br>
                    <strong>Coordenada:</strong> ${item.coordinates}<br>
                    <strong>Tag(s):</strong> ${item.tags.join(', ')}
                `;
                itemDiv.appendChild(infoDiv);


                    // Append da imagem e outras informações
                imageContainer.appendChild(itemDiv);
                    itemDiv.appendChild(img);
            });
                    // ... Adicionar outras informações se necessário ...


                    imageContainer.appendChild(itemDiv);
            if (filteredItems.length === 0) {
                 });
                 imageContainer.innerHTML = '<p>Nenhuma imagem encontrada para os critérios selecionados.</p>';
             }
             }
         }
         }
    }


         // Eventos
document.getElementById('enableFilter').addEventListener('change', function() {
         mapTypeSelect.addEventListener('change', () => {
    const filterOptions = document.getElementById('filterOptions');
    if (this.checked) {
        filterOptions.classList.remove('hidden');
    } else {
         filterOptions.classList.add('hidden');
    }
});
 
    function handleFilterChange() {
        const isFilterEnabled = enableFilter.checked;
 
         if (isFilterEnabled) {
            mapTypeSelect.disabled = true;
            specificOptionSelect.disabled = true;
            filterOptions.classList.remove('hidden');
            tagButtons.classList.add('hidden');
 
            filterTypeSelect.value = 'number';
            filterButton.addEventListener('click', () => {
                // Desmarcar todas as tags ao ativar o filtro
                document.querySelectorAll('.tag-button.selected').forEach(btn => btn.classList.remove('selected'));
                filterImages();
            });
 
            mapTypeSelect.value = '';
            specificOptionSelect.value = '';
            searchIdsInput.value = '';
            imageContainer.innerHTML = '';
        } else {
            mapTypeSelect.disabled = false;
            specificOptionSelect.disabled = false;
            filterOptions.classList.add('hidden');
            tagButtons.classList.remove('hidden');
 
            searchIdsInput.value = '';
            imageContainer.innerHTML = '';
             updateTags();
             updateTags();
         });
         }
    }


         specificOptionSelect.addEventListener('change', () => {
    enableFilter.addEventListener('change', handleFilterChange);
            updateTags();
    mapTypeSelect.addEventListener('change', () => {
         });
        updateTags();
         filterImages();
    });
    specificOptionSelect.addEventListener('change', () => {
        updateTags();
         filterImages();
    });


        filterButton.addEventListener('click', () => {
    // Inicializa a exibição das tags e imagens
            filterImages();
    updateTags();
        });
</script>


        enableFilter.addEventListener('change', () => {
            if (enableFilter.checked) {
                filterOptions.classList.remove('hidden');
                tagButtons.classList.add('hidden');
                mapTypeSelect.disabled = true;
                specificOptionSelect.disabled = true;
            } else {
                filterOptions.classList.add('hidden');
                tagButtons.classList.add('hidden');
                mapTypeSelect.disabled = false;
                specificOptionSelect.disabled = false;
                mapTypeSelect.value = '';
                specificOptionSelect.value = '';
            }
        });
    </script>
</body>
</body>
</html>
</html>
5 805

edições