From b89d900fe3f2ac08db298ae00592da2e7ee6be08 Mon Sep 17 00:00:00 2001 From: MarcosViniciusG Date: Wed, 5 Jun 2024 11:10:54 -0300 Subject: [PATCH 1/6] =?UTF-8?q?test(devs):=20adicionado=20teste=20do=20fil?= =?UTF-8?q?tro=20da=20p=C3=A1gina=20de=20administa=C3=A7=C3=A3o?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- lgbtq_connect/includes/admin/admin_script.js | 10 +++++++--- tests/js/math.test.js | 5 ----- 2 files changed, 7 insertions(+), 8 deletions(-) delete mode 100644 tests/js/math.test.js diff --git a/lgbtq_connect/includes/admin/admin_script.js b/lgbtq_connect/includes/admin/admin_script.js index a40a9777..45e1b830 100644 --- a/lgbtq_connect/includes/admin/admin_script.js +++ b/lgbtq_connect/includes/admin/admin_script.js @@ -1,7 +1,7 @@ class Filtro { static status = "Todos"; static nome = ""; - static servico = "todos"; + static servico = ""; static realizarFiltragem(arr) { const self = this; @@ -20,7 +20,7 @@ class Filtro { } static checarNome(formulario) { - return(formulario.nome.toLowerCase().trim().startsWith(this.nome)); + return(formulario.nome.toLowerCase().trim().startsWith(this.nome.toLowerCase().trim())); } static checarServico(formulario) { @@ -278,7 +278,7 @@ function filtrar(elemento) { if(filtro_nome) { - Filtro.nome = filtro_nome.value.toLowerCase().trim(); + Filtro.nome = filtro_nome.value } if (filtro_servico) @@ -310,3 +310,7 @@ window.onload = function () { initMapAdmin(); }; +// Exporta as classes +module.exports = { + Filtro +}; \ No newline at end of file diff --git a/tests/js/math.test.js b/tests/js/math.test.js deleted file mode 100644 index 6c5b0a9c..00000000 --- a/tests/js/math.test.js +++ /dev/null @@ -1,5 +0,0 @@ -import {Mapa} from '../../lgbtq_connect/assets/js/script.js'; - -test('adds 1 + 2 to equal 3', () => { - expect(Mapa.sum(1, 2)).toBe(3); -}); From 15e4fb165269f9a73d6fc721bae406d12643d289 Mon Sep 17 00:00:00 2001 From: MarcosViniciusG Date: Wed, 5 Jun 2024 11:24:46 -0300 Subject: [PATCH 2/6] =?UTF-8?q?test(devs):=20adicionado=20m=C3=A9todo=20de?= =?UTF-8?q?=20reiniciar=20o=20filtro=20da=20classe=20Filtro?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- lgbtq_connect/includes/admin/admin_script.js | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/lgbtq_connect/includes/admin/admin_script.js b/lgbtq_connect/includes/admin/admin_script.js index 45e1b830..a74520dd 100644 --- a/lgbtq_connect/includes/admin/admin_script.js +++ b/lgbtq_connect/includes/admin/admin_script.js @@ -31,6 +31,13 @@ class Filtro { return true; } } + + static reiniciarFiltro() + { + this.status="Todos"; + this.nome=""; + this.servico=""; + } } function mostrarDescricaoCompleta(id) { @@ -312,5 +319,8 @@ window.onload = function () { // Exporta as classes module.exports = { - Filtro + Filtro, + adicionarZero, + formatarDataHora, + gerarLinhas }; \ No newline at end of file From 9a263ce37dab7e50c0b5ccf4b91850734a65d6a2 Mon Sep 17 00:00:00 2001 From: MarcosViniciusG Date: Thu, 6 Jun 2024 12:37:26 -0300 Subject: [PATCH 3/6] =?UTF-8?q?test(devs):=20foram=20adicionados=203=20con?= =?UTF-8?q?juntos=20de=20testes=20para=20o=20JavaScript=20-=20foi=20adicio?= =?UTF-8?q?nado=20um=20conjunto=20de=20testes=20para=20o=20filtro=20na=20p?= =?UTF-8?q?=C3=A1gina=20do=20admin=20-=20foi=20adicionado=20um=20conjunto?= =?UTF-8?q?=20de=20testes=20para=20a=20ordena=C3=A7=C3=A3o=20na=20p=C3=A1g?= =?UTF-8?q?ina=20do=20admin=20-=20foi=20adicionado=20um=20conjunto=20de=20?= =?UTF-8?q?testes=20para=20a=20tabela=20na=20p=C3=A1gina=20do=20admin=20-?= =?UTF-8?q?=20o=20c=C3=B3digo=20do=20admin=5Fscript.js=20foi=20refatorado?= =?UTF-8?q?=20para=20maior=20facilidade=20nos=20testes=20unit=C3=A1rios=20?= =?UTF-8?q?-=20alguns=20outros=20arquivos=20foram=20modificados?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- lgbtq_connect/includes/admin/admin_script.js | 336 +++++++++--------- .../includes/admin/pagina_administracao.php | 6 +- lgbtq_connect/includes/admin/style-admin.css | 5 + lgbtq_connect/index.php | 6 + tests/js/filtro_admin.test.js | 63 ++++ tests/js/ordenacao_admin.test.js | 78 ++++ tests/js/tabela_admin.test.js | 74 ++++ 7 files changed, 399 insertions(+), 169 deletions(-) create mode 100644 tests/js/filtro_admin.test.js create mode 100644 tests/js/ordenacao_admin.test.js create mode 100644 tests/js/tabela_admin.test.js diff --git a/lgbtq_connect/includes/admin/admin_script.js b/lgbtq_connect/includes/admin/admin_script.js index a74520dd..dde0298d 100644 --- a/lgbtq_connect/includes/admin/admin_script.js +++ b/lgbtq_connect/includes/admin/admin_script.js @@ -40,27 +40,122 @@ class Filtro { } } -function mostrarDescricaoCompleta(id) { - var descricaoResumida = document.getElementById('descricaoResumida_' + id); - var descricaoCompleta = document.getElementById('descricaoCompleta_' + id); - var botao = document.querySelector('button[data-id="' + id + '"]'); +class Ordenador { + static coluna = "nome"; + static ordem = "asc"; - if (descricaoResumida.style.display === 'none') { - descricaoResumida.style.display = 'inline'; - descricaoCompleta.style.display = 'none'; - botao.innerText = 'Ver mais'; - } else { - descricaoResumida.style.display = 'none'; - descricaoCompleta.style.display = 'inline'; - botao.innerText = 'Ver menos'; + static realizarOrdenacao(arr) { + const self = this; + return arr.sort(function (a, b) { + const aValue = a[self.coluna].trim().toLowerCase(); + const bValue = b[self.coluna].trim().toLowerCase(); + + return (self.ordem === 'asc') ? aValue.localeCompare(bValue) : bValue.localeCompare(aValue); + }); } } + +// Classe Singleton com todo os métodos e atributos relacionado a tabela +class Tabela { + static adicionarZero(numero) { + return numero < 10 ? '0' + numero : numero; + } + + static formatarDataHora(data) { + const dia = Tabela.adicionarZero(data.getDate()); + const mes = Tabela.adicionarZero(data.getMonth() + 1); // Adiciona 1 porque os meses são indexados de 0 a 11 + const ano = data.getFullYear(); + const hora = Tabela.adicionarZero(data.getHours()); + const minutos = Tabela.adicionarZero(data.getMinutes()); + const segundos = Tabela.adicionarZero(data.getSeconds()); + + return `${dia}/${mes}/${ano} ${hora}:${minutos}:${segundos}`; + } + + constructor(arr, tabela) { + if(Tabela.instance) + return Tabela.instance + + this.arr = arr; + this.tabela = tabela; + Tabela.instance = this; + } + + // Limpa o conteúdo da tabela + excluirLinhas() { + const tbody = this.tabela.querySelector('tbody'); + tbody.innerHTML=""; + } + + // Gera novas linhas na tabela de acordo com a array definida + gerarLinhas() + { + const STATUS_BOTOES = { + "Aprovado" : ` + + `, + "Negado" : ` + + `, + "Pendente" : ` + + + ` + } + const tbody = this.tabela.querySelector('tbody'); + + this.arr.forEach(dados => { + const linha = document.createElement('tr'); + linha.id = "formulario-" + dados.id; + let descricao; + let data = new Date(dados.data_hora); + let dataFormatada = Tabela.formatarDataHora(data); + if (dados.descricao.length > 10){ + descricao = ` + ${dados.descricao.substring(0, 10)}... + + + ` + } + else { + descricao = dados.descricao; + } + + let acoes = STATUS_BOTOES[dados.situacao]; + + linha.innerHTML = ` + ${dados.nome} + ${dados.email} + ${dados.latitude} + ${dados.longitude} + ${dados.servico} + ${descricao} + ${dataFormatada} + ${dados.situacao} + +
+ + + ${acoes} + + + + `; + tbody.appendChild(linha); + }); + } +} + function destacarLinhaTabela(id) { - var tabela = document.getElementById("tabela"); - var linha = document.getElementById(id); + let tabela = document.getElementById("tabela"); + let linha = document.getElementById(("formulario-" +id)); + + if(linha===null) { + return; + } // Loop para remover a linha-destacada de todas as linhas - for (var i = 0, row; (row = tabela.rows[i]); i++) { + for (let i = 0, row; (row = tabela.rows[i]); i++) { row.classList.remove('linha-destacada'); } @@ -73,6 +168,22 @@ function destacarLinhaTabela(id) { }, 2000); } +function mostrarDescricaoCompleta(id) { + var descricaoResumida = document.getElementById('descricaoResumida_' + id); + var descricaoCompleta = document.getElementById('descricaoCompleta_' + id); + var botao = document.querySelector('button[data-id="' + id + '"]'); + + if (descricaoResumida.style.display === 'none') { + descricaoResumida.style.display = 'inline'; + descricaoCompleta.style.display = 'none'; + botao.innerText = 'Ver mais'; + } else { + descricaoResumida.style.display = 'none'; + descricaoCompleta.style.display = 'inline'; + botao.innerText = 'Ver menos'; + } +} + function initMapAdmin() { if(document.getElementById('mapa_admin') == null) { @@ -94,93 +205,6 @@ function initMapAdmin() { }); } -function initSortButtons() { - // Adiciona um evento de clique aos botões de ordenação - var sortButtons = document.querySelectorAll('.sort-btn'); - - sortButtons.forEach(function(button) { - button.addEventListener('click', function() { - var table = button.closest('table'); - var columnIndex = Array.from(button.parentNode.parentNode.children).indexOf(button.parentNode); - var order = button.getAttribute('data-order') || 'asc'; - - order = (order === 'asc') ? 'desc' : 'asc'; - button.setAttribute('data-order', order); - - // Atualiza o ícone do botão de ordenação - var icon = button.querySelector('.sort-icon'); - - // Remove e adiciona a classe do ícone com base na direção da ordenação - if (order === 'asc') { - icon.innerHTML = '▾'; // Triângulo para baixo (ordem crescente) - } else { - icon.innerHTML = '▴'; // Triângulo para cima (ordem decrescente) - } - - // Obtém todas as linhas da tabela, exceto a primeira (cabeçalho) - var rows = Array.from(table.querySelectorAll('tbody > tr')); - - // Determina o critério de ordenação com base na classe do botão - if (button.classList.contains('sort-by-date')) { - rows.sort(function(a, b) { - var aValue = new Date(a.children[columnIndex].textContent.trim().replace(/(\d{2})\/(\d{2})\/(\d{4}) (\d{2}):(\d{2}):(\d{2})/, '$3-$2-$1T$4:$5:$6')); - var bValue = new Date(b.children[columnIndex].textContent.trim().replace(/(\d{2})\/(\d{2})\/(\d{4}) (\d{2}):(\d{2}):(\d{2})/, '$3-$2-$1T$4:$5:$6')); - - return (order === 'asc') ? aValue - bValue : bValue - aValue; - }); - } else if (button.classList.contains('sort-by-email')) { - rows.sort(function(a, b) { - var aValue = a.children[columnIndex].textContent.trim().toLowerCase(); - var bValue = b.children[columnIndex].textContent.trim().toLowerCase(); - - return (order === 'asc') ? aValue.localeCompare(bValue) : bValue.localeCompare(aValue); - }); - } else { - // Caso padrão: ordenação por texto - rows.sort(function(a, b) { - var aValue = a.children[columnIndex].textContent.trim().toLowerCase(); - var bValue = b.children[columnIndex].textContent.trim().toLowerCase(); - - return (order === 'asc') ? aValue.localeCompare(bValue) : bValue.localeCompare(aValue); - }); - } - - // Limpa o conteúdo da tabela antes de reordenar - while (table.querySelector('tbody').firstChild) { - table.querySelector('tbody').removeChild(table.querySelector('tbody').firstChild); - } - - // Reinsere as linhas ordenadas na tabela - rows.forEach(function(row) { - table.querySelector('tbody').appendChild(row); - }); - }); - }); -} - -// Limpa o conteúdo da tabela -function excluirLinhas(tabela) -{ - while (tabela.querySelector('tbody').firstChild) { - tabela.querySelector('tbody').removeChild(tabela.querySelector('tbody').firstChild); - } -} - -function adicionarZero(numero) { - return numero < 10 ? '0' + numero : numero; -} - -function formatarDataHora(data) { - const dia = adicionarZero(data.getDate()); - const mes = adicionarZero(data.getMonth() + 1); // Adiciona 1 porque os meses são indexados de 0 a 11 - const ano = data.getFullYear(); - const hora = adicionarZero(data.getHours()); - const minutos = adicionarZero(data.getMinutes()); - const segundos = adicionarZero(data.getSeconds()); - - return `${dia}/${mes}/${ano} ${hora}:${minutos}:${segundos}`; -} - function confirmarAcao(mensagem, formulario, acao) { // Seleciona o modal e seus elementos var modal = document.getElementById('confirmModal'); @@ -213,64 +237,6 @@ function confirmarAcao(mensagem, formulario, acao) { }; } -function gerarLinhas(tabela, arr) -{ - const STATUS_BOTOES = { - "Aprovado" : ` - - `, - "Negado" : ` - - `, - "Pendente" : ` - - - ` - } - var tbody = tabela.querySelector('tbody'); - - arr.forEach(dados => { - var linha = document.createElement('tr'); - linha.id = dados.id; - var descricao; - var data = new Date(dados.data_hora); - var dataFormatada = formatarDataHora(data); - if (dados.descricao.length > 10){ - descricao = ` - ${dados.descricao.substring(0, 10)}... - - - ` - } - else { - descricao = dados.descricao; - } - - acoes = STATUS_BOTOES[dados.situacao]; - - linha.innerHTML = ` - ${dados.nome} - ${dados.email} - ${dados.latitude} - ${dados.longitude} - ${dados.servico} - ${descricao} - ${dataFormatada} - ${dados.situacao} - - - - - ${acoes} - - - - `; - tbody.appendChild(linha); - }); -} - - function filtrar(elemento) { let arr = []; @@ -299,8 +265,48 @@ function filtrar(elemento) { `; const tabela = document.getElementById("tabela"); - excluirLinhas(tabela); - gerarLinhas(tabela, arr); + const tabelaObj = new Tabela([], tabela); + tabelaObj.arr = arr; + + tabelaObj.excluirLinhas() + tabelaObj.gerarLinhas(); +} + +function ordenar(elemento) { + let order = elemento.getAttribute('data-order') || 'asc'; + + order = (order === 'asc') ? 'desc' : 'asc'; + elemento.setAttribute('data-order', order); + + // Atualiza o ícone do botão de ordenação + var icon = elemento.querySelector('.sort-icon'); + + // Remove e adiciona a classe do ícone com base na direção da ordenação + if (order === 'asc') { + icon.innerHTML = '▾'; // Triângulo para baixo (ordem crescente) + } else { + icon.innerHTML = '▴'; // Triângulo para cima (ordem decrescente) + } + + Ordenador.ordem = order; + + // Determina o critério de ordenação com base na classe do botão + if (elemento.classList.contains('sort-by-date')) { + Ordenador.coluna = "data_hora" + } + else if (elemento.classList.contains('sort-by-email')) { + Ordenador.coluna = "email" + } + else { + // Caso padrão: ordenação por nome + Ordenador.coluna = "nome" + } + + const tabelaObj = new Tabela([], tabela); + tabelaObj.arr = Ordenador.realizarOrdenacao(tabelaObj.arr); + + tabelaObj.excluirLinhas(); + tabelaObj.gerarLinhas() } // Adiciona um evento de clique a todos os botões de "Ver mais/menos" @@ -313,14 +319,12 @@ document.querySelectorAll('.ver-mais-btn').forEach(function(button) { // Inicializa o mapa e os botões de ordenação quando a página carrega window.onload = function () { - initSortButtons(); initMapAdmin(); }; // Exporta as classes module.exports = { Filtro, - adicionarZero, - formatarDataHora, - gerarLinhas + Ordenador, + Tabela, }; \ No newline at end of file diff --git a/lgbtq_connect/includes/admin/pagina_administracao.php b/lgbtq_connect/includes/admin/pagina_administracao.php index e0d342f3..c63dc112 100644 --- a/lgbtq_connect/includes/admin/pagina_administracao.php +++ b/lgbtq_connect/includes/admin/pagina_administracao.php @@ -93,13 +93,13 @@ function mostrar_dados() { - - + + - + diff --git a/lgbtq_connect/includes/admin/style-admin.css b/lgbtq_connect/includes/admin/style-admin.css index d66fecb9..9ef3385b 100644 --- a/lgbtq_connect/includes/admin/style-admin.css +++ b/lgbtq_connect/includes/admin/style-admin.css @@ -59,6 +59,11 @@ button[data-id]:hover { text-decoration: underline; } +@keyframes fadeOut { + 0% { background-color: #90cc90!important;} + 100% { background-color: transparent!important;} +} + .linha-destacada { animation: fadeOut 2s ease; } diff --git a/lgbtq_connect/index.php b/lgbtq_connect/index.php index 61395a06..5a484da6 100644 --- a/lgbtq_connect/index.php +++ b/lgbtq_connect/index.php @@ -61,6 +61,11 @@ function enfileirar_scripts_admin() { wp_localize_script('admin_script.js', 'formularios_todos', $formularios); } +function enfileirar_styles_admin() +{ + wp_enqueue_style('admin-style', plugin_dir_url(__FILE__) . 'includes/admin/style-admin.css', array(), '1.0'); +} + // Função para criar a tabela na ativação do plugin function add_tabela_bd() { global $wpdb; @@ -91,6 +96,7 @@ function enfileirar_scripts() { } add_action('admin_enqueue_scripts', 'enfileirar_scripts_admin'); +add_action('admin_enqueue_scripts', 'enfileirar_styles_admin'); // Função para adicionar o shortcode function meu_plugin_shortcode() { diff --git a/tests/js/filtro_admin.test.js b/tests/js/filtro_admin.test.js new file mode 100644 index 00000000..5936ba26 --- /dev/null +++ b/tests/js/filtro_admin.test.js @@ -0,0 +1,63 @@ +import {Filtro} from '../../lgbtq_connect/includes/admin/admin_script.js'; + +describe("filtro (página do admin)", () => { + let arr = []; + let arr_filtrada; + + let formulario1 = { + nome: "Cabana", + situacao: "Aprovado", + servico: "entretenimento" + } + let formulario2 = { + nome: "pizza", + situacao: "Negado", + servico: "bar/restaurante" + } + let formulario3 = { + nome: "Escola", + situacao: "Pendente", + servico: "ensino" + } + + arr.push(formulario1, formulario2, formulario3); + test('filtro por nome está funcionando', () => { + Filtro.reiniciarFiltro(); + Filtro.nome="Cabana "; + arr_filtrada = Filtro.realizarFiltragem(arr); + expect(arr_filtrada).toContain(formulario1); + expect(arr_filtrada).toHaveLength(1); + }) + + test('filtro por status está funcionando', () => { + Filtro.reiniciarFiltro(); + Filtro.status="Pendente"; + arr_filtrada = Filtro.realizarFiltragem(arr); + expect(arr_filtrada).toContain(formulario3); + expect(arr_filtrada).toHaveLength(1); + }) + + test('filtro por serviço está funcionando', () => { + Filtro.reiniciarFiltro(); + Filtro.servico="ensino" + arr_filtrada = Filtro.realizarFiltragem(arr) + expect(arr_filtrada).toContain(formulario3); + expect(arr_filtrada).toHaveLength(1); + }) + + test('todos os filtros ao mesmo tempo estão funcionando com valores não-nulos', () => { + Filtro.reiniciarFiltro(); + Filtro.nome=" Cabana "; + Filtro.status="Aprovado"; + Filtro.servico="entretenimento" + arr_filtrada = Filtro.realizarFiltragem(arr) + expect(arr_filtrada).toContain(formulario1); + expect(arr_filtrada).toHaveLength(1); + }) + + test('todos os filtros ao mesmo tempo estão funcionando com valores nulos', () => { + Filtro.reiniciarFiltro(); + arr_filtrada = Filtro.realizarFiltragem(arr) + expect(arr_filtrada).toHaveLength(3); + }) +}) \ No newline at end of file diff --git a/tests/js/ordenacao_admin.test.js b/tests/js/ordenacao_admin.test.js new file mode 100644 index 00000000..b7ada2ec --- /dev/null +++ b/tests/js/ordenacao_admin.test.js @@ -0,0 +1,78 @@ +import {Ordenador} from '../../lgbtq_connect/includes/admin/admin_script.js'; + +describe("ordenador (página do admin)", () => { + let arr = []; + + let formulario1 = { + "id": 1, + "nome": "Cabana", + "email": "exemplo1@gmail.com", + "latitude": 50.2, + "longitude": 20.3, + "data_hora": "2024-01-01 00:00:00", + "servico": "entretenimento", + "descricao": "Bom demais", + "situacao": "Aprovado" + } + + let formulario2 = { + "id": 1, + "nome": "Pizza", + "email": "exemplo2@gmail.com", + "latitude": 50.2, + "longitude": 20.3, + "data_hora": "2024-01-02 00:00:00", + "servico": "bar/restaurante", + "descricao": "Bom demais", + "situacao": "Aprovado" + } + + let formulario3 = { + "id": 1, + "nome": "Hamburguer", + "email": "exemplo3@gmail.com", + "latitude": 50.2, + "longitude": 20.3, + "data_hora": "2024-01-01 00:00:01", + "servico": "bar/restaurante", + "descricao": "Bom demais", + "situacao": "Aprovado" + } + + arr.push(formulario1, formulario2, formulario3); + test('ordenação por nome está funcionando', () => { + Ordenador.coluna = "nome"; + + Ordenador.ordem = "asc"; + arr = Ordenador.realizarOrdenacao(arr); + expect(arr[0]).toBe(formulario1); + + Ordenador.ordem = "desc"; + arr = Ordenador.realizarOrdenacao(arr); + expect(arr[0]).toBe(formulario2); + }) + + test('ordenação por email está funcionando', () => { + Ordenador.coluna = "email"; + + Ordenador.ordem = "asc"; + arr = Ordenador.realizarOrdenacao(arr); + expect(arr[0]).toBe(formulario1); + + Ordenador.ordem = "desc"; + arr = Ordenador.realizarOrdenacao(arr); + expect(arr[0]).toBe(formulario3); + }) + + test('ordenação por data e hora está funcionando', () => { + Ordenador.coluna = "data_hora"; + + Ordenador.ordem = "asc"; + arr = Ordenador.realizarOrdenacao(arr); + expect(arr[0]).toBe(formulario1); + + Ordenador.ordem = "desc"; + arr = Ordenador.realizarOrdenacao(arr); + expect(arr[0]).toBe(formulario2); + }) +}) \ No newline at end of file diff --git a/tests/js/tabela_admin.test.js b/tests/js/tabela_admin.test.js new file mode 100644 index 00000000..9a65e5a5 --- /dev/null +++ b/tests/js/tabela_admin.test.js @@ -0,0 +1,74 @@ +import {Tabela} from '../../lgbtq_connect/includes/admin/admin_script.js'; + +describe("manipulação da tabela do admin", () => { + + let arr=[]; + + let formulario1 = { + "id": 1, + "nome": "Cabana", + "email": "exemplo1@gmail.com", + "latitude": 50.2, + "longitude": 20.3, + "data_hora": "2024-01-01 00:00:00", + "servico": "entretenimento", + "descricao": "Bom demais", + "situacao": "Aprovado" + } + + arr.push(formulario1); + + test('a geração de linhas está funcionando', () => { + document.body.innerHTML = + '
Nome Email Nome Email Latitude Longitude Serviço DescriçãoData e hora Data e hora Status Ações
' + + ' ' + + ' ' + + ' ' + + ' ' + + ' ' + + ' ' + + ' ' + + ' ' + + ' ' + + ' ' + + ' ' + + ' ' + + ' ' + + ' '; + + const tabela = document.getElementById('tabela'); + const tabelaObj = new Tabela(arr, tabela); + tabelaObj.gerarLinhas(); + + // Verifica se o nome está correto + expect(document.getElementById("formulario-1-nome").innerHTML).toBe("Cabana"); + + // Verifica se o email está correto + expect(document.getElementById("formulario-1-email").innerHTML).toBe("exemplo1@gmail.com"); + + // Verifica se a latitude está correta + expect(document.getElementById("formulario-1-latitude").innerHTML).toBe("50.2"); + + // Verifica se a longitude está correta + expect(document.getElementById("formulario-1-longitude").innerHTML).toBe("20.3"); + + // Verifica se a data e hora está correta + expect(document.getElementById("formulario-1-data_hora").innerHTML).toBe("01/01/2024 00:00:00"); + + // Verifica se o serviço está correto + expect(document.getElementById("formulario-1-servico").innerHTML).toBe("entretenimento"); + + // Verifica se a descrição está correta + expect(document.getElementById("formulario-1-descricao").innerHTML).toBe("Bom demais"); + + // Verifica se a situação está correta + expect(document.getElementById("formulario-1-situacao").innerHTML).toBe("Aprovado"); + }) + + test('a exclusão de linhas está funcionando', () => { + const tabelaObj = new Tabela(arr, tabela); + + tabelaObj.excluirLinhas(); + expect(tabela.querySelector("tbody").innerHTML).toBe(""); + }) +}) \ No newline at end of file From 51151c80f58803b153cfdfc5ce91e3cad49ad354 Mon Sep 17 00:00:00 2001 From: MarcosViniciusG Date: Fri, 7 Jun 2024 10:27:29 -0300 Subject: [PATCH 4/6] =?UTF-8?q?bugfix(usu=C3=A1rios):=20a=20fun=C3=A7?= =?UTF-8?q?=C3=A3o=20de=20destacar=20a=20linha=20de=20tabela=20corresponde?= =?UTF-8?q?nte=20ao=20marcador=20no=20mapa=20voltou=20a=20funcionar?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- lgbtq_connect/includes/admin/admin_script.js | 5 ----- lgbtq_connect/includes/admin/pagina_administracao.php | 2 -- lgbtq_connect/includes/admin/style-admin.css | 6 +++--- 3 files changed, 3 insertions(+), 10 deletions(-) diff --git a/lgbtq_connect/includes/admin/admin_script.js b/lgbtq_connect/includes/admin/admin_script.js index dde0298d..d4f775a3 100644 --- a/lgbtq_connect/includes/admin/admin_script.js +++ b/lgbtq_connect/includes/admin/admin_script.js @@ -161,11 +161,6 @@ function destacarLinhaTabela(id) { linha.classList.add('linha-destacada'); // Adiciona a classe 'linha-destacada' linha.scrollIntoView({ behavior: 'smooth' }); // Rola a página para a linha - - // Remove a classe linha-destacada depois de um determinado tempo - setTimeout(function () { - linha.classList.remove('linha-destacada'); - }, 2000); } function mostrarDescricaoCompleta(id) { diff --git a/lgbtq_connect/includes/admin/pagina_administracao.php b/lgbtq_connect/includes/admin/pagina_administracao.php index c63dc112..d06a69e6 100644 --- a/lgbtq_connect/includes/admin/pagina_administracao.php +++ b/lgbtq_connect/includes/admin/pagina_administracao.php @@ -39,8 +39,6 @@ function mostrar_dados() { - -
diff --git a/lgbtq_connect/includes/admin/style-admin.css b/lgbtq_connect/includes/admin/style-admin.css index 9ef3385b..001350b4 100644 --- a/lgbtq_connect/includes/admin/style-admin.css +++ b/lgbtq_connect/includes/admin/style-admin.css @@ -60,11 +60,11 @@ button[data-id]:hover { } @keyframes fadeOut { - 0% { background-color: #90cc90!important;} - 100% { background-color: transparent!important;} + 0% { background-color: #90cc90;} + 100% { background-color: transparent;} } -.linha-destacada { +.linha-destacada td{ animation: fadeOut 2s ease; } From 8b3ebec02f91bfe9f535f7eec58e51e641198fbe Mon Sep 17 00:00:00 2001 From: MarcosViniciusG Date: Wed, 12 Jun 2024 14:38:50 -0300 Subject: [PATCH 5/6] =?UTF-8?q?refactor(devs):=20refatorado=20o=20c=C3=B3d?= =?UTF-8?q?igo=20JS=20da=20parte=20de=20pesquisas=20no=20mapa=20-=20tamb?= =?UTF-8?q?=C3=A9m=20foi=20modificado=20o=20index.html=20para=20acomodar?= =?UTF-8?q?=20essas=20novas=20mudan=C3=A7as=20-=20foi=20adicionado=20uma?= =?UTF-8?q?=20imagem=20para=20a=20fonte=20da=20imagem=20customizada=20ser?= =?UTF-8?q?=20local?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- lgbtq_connect/assets/imgs/custom_marker.png | Bin 0 -> 35808 bytes lgbtq_connect/assets/index.html | 4 +- lgbtq_connect/assets/js/funcionalidades.js | 219 ++++++++++---------- 3 files changed, 106 insertions(+), 117 deletions(-) create mode 100644 lgbtq_connect/assets/imgs/custom_marker.png diff --git a/lgbtq_connect/assets/imgs/custom_marker.png b/lgbtq_connect/assets/imgs/custom_marker.png new file mode 100644 index 0000000000000000000000000000000000000000..902fc3bcac51fe811904ab4c2f6bd19c8a03db7b GIT binary patch literal 35808 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 C$
- +
@@ -49,7 +49,7 @@
- +
diff --git a/lgbtq_connect/assets/js/funcionalidades.js b/lgbtq_connect/assets/js/funcionalidades.js index 59f72f51..8933b529 100644 --- a/lgbtq_connect/assets/js/funcionalidades.js +++ b/lgbtq_connect/assets/js/funcionalidades.js @@ -1,137 +1,121 @@ -var resultados = []; // Array para armazenar os locais relacionados -var isSearchingIndex = false; // Status de busca no index -var isSearchingForm = false; // Status de busca no form - -function searchButtonClicked() { - if (!isSearchingIndex) { - isSearchingIndex = true; - var searchTerm = document.getElementById('searchInputIndex').value; - searchLocations(searchTerm, 'listaResultadosIndex'); +class Pesquisador { + constructor(listaId) { + this.listaId = listaId; + this.flag = false; } - return false; -} -function searchButtonClickedForm() { - if (!isSearchingForm) { - isSearchingForm = true; - var searchTerm = document.getElementById('searchInputForm').value; - searchLocations(searchTerm, 'listaResultadosForms'); - } - return false; -} + pesquisarLocalizacoes(query) { + if(this.flag) { + return; + } + + this.flag = true; -function searchLocations(query, resultListId) { - resultados = []; - var apiUrl = 'https://nominatim.openstreetmap.org/search?format=json&q=' + encodeURIComponent(query); - fetch(apiUrl) - .then(response => response.json()) - .then(data => { - data.forEach(location => { - resultados.push({ - display_name: location.display_name, - lat: location.lat, - lon: location.lon + let resultados = []; + const self = this; + let apiUrl = 'https://nominatim.openstreetmap.org/search?format=json&q=' + encodeURIComponent(query); + fetch(apiUrl) + .then(response => response.json()) + .then(data => { + data.forEach(location => { + resultados.push({ + display_name: location.display_name, + lat: location.lat, + lon: location.lon + }); }); - }); - imprimirResultados(resultados, resultListId); + self.imprimirResultados(resultados); - // Atualiza o estado da busca após a conclusão - if (resultListId === 'listaResultadosIndex') { - isSearchingIndex = false; // Marca a busca na página inicial como concluída - } else if (resultListId === 'listaResultadosForms') { - isSearchingForm = false; // Marca a busca no formulário como concluída - } - }) - .catch(error => { - console.error('Erro ao buscar locais:', error); + self.flag = false; // Marca a busca no formulário como concluída + }) + .catch(error => { + console.error('Erro ao buscar locais:', error); - // Em caso de erro, atualiza o estado da busca para permitir novas buscas - if (resultListId === 'listaResultadosIndex') { - isSearchingIndex = false; // Marca a busca na página inicial como concluída - } else if (resultListId === 'listaResultadosForms') { - isSearchingForm = false; // Marca a busca no formulário como concluída - } - }); -} + self.flag = false; // Marca a busca no formulário como concluída + }); + } -function imprimirResultados(resultados, resultListId) { - var listaResultadosOcultados = []; - var listaResultados = document.getElementById(resultListId); - listaResultados.innerHTML = ''; - var count = 0; - var div = document.createElement('div'); - resultados.forEach(resultado => { - var divResultado = document.createElement('div'); - divResultado.classList.add('celula_resultado'); - divResultado.style.borderRadius = '3px'; - divResultado.style.margin = '5px 5px 5px 0px'; - divResultado.style.cursor = 'pointer'; - divResultado.innerHTML = '' + resultado.display_name; - divResultado.addEventListener('click', function () { - changeMapLocation(resultado.lat, resultado.lon); + imprimirResultados(resultados) { + let listaResultadosOcultados = []; + const listaResultados = document.getElementById(this.listaId); + listaResultados.innerHTML = ''; + let count = 0; + const div = document.createElement('div'); + resultados.forEach(resultado => { + const divResultado = document.createElement('div'); + divResultado.classList.add('celula_resultado'); + divResultado.style.borderRadius = '3px'; + divResultado.style.margin = '5px 5px 5px 0px'; + divResultado.style.cursor = 'pointer'; + divResultado.innerHTML = '' + resultado.display_name; + divResultado.addEventListener('click', function () { + if (pagina) { + pagina.mapa.mudarLocalizacao([resultado.lat, resultado.lon]); + } + }); + count += 1; + if(count <=5){ + div.appendChild(divResultado); + } else { + divResultado.style.display = 'none'; + listaResultadosOcultados.push(divResultado); + div.appendChild(divResultado); + } }); - count += 1; - if(count <=5){ - div.appendChild(divResultado); - } else { - divResultado.style.display = 'none'; - listaResultadosOcultados.push(divResultado); - div.appendChild(divResultado); - } - }); - listaResultados.appendChild(div); + listaResultados.appendChild(div); - if (count > 5){ - // Adicionando botão "Ver Mais" - var verMaisButton = document.createElement('button'); - verMaisButton.textContent = 'Ver Mais'; - verMaisButton.setAttribute('type', 'button'); - verMaisButton.setAttribute('class', 'ver'); - verMaisButton.addEventListener('click', function() { - MostrarMaisResultados(); - }); + if (count > 5){ + // Adicionando botão "Ver Mais" + const verMaisButton = document.createElement('button'); + verMaisButton.textContent = 'Ver Mais'; + verMaisButton.setAttribute('type', 'button'); + verMaisButton.setAttribute('class', 'ver'); + verMaisButton.addEventListener('click', function() { + MostrarMaisResultados(); + }); - listaResultados.appendChild(verMaisButton); + listaResultados.appendChild(verMaisButton); - // Adicionando botão "Ver Menos" - var verMenosButton = document.createElement('button'); - verMenosButton.textContent = 'Ver Menos'; - verMenosButton.setAttribute('type', 'button'); - verMenosButton.setAttribute('class', 'ver'); - verMenosButton.addEventListener('click', function() { - MostrarMenosResultados(); - }); - verMenosButton.style.display = 'none'; + // Adicionando botão "Ver Menos" + const verMenosButton = document.createElement('button'); + verMenosButton.textContent = 'Ver Menos'; + verMenosButton.setAttribute('type', 'button'); + verMenosButton.setAttribute('class', 'ver'); + verMenosButton.addEventListener('click', function() { + MostrarMenosResultados(); + }); + verMenosButton.style.display = 'none'; - listaResultados.appendChild(verMenosButton); + listaResultados.appendChild(verMenosButton); - // Função para mostrar mais resultados - function MostrarMaisResultados() { - listaResultadosOcultados.forEach(resultado => { - resultado.style.display = 'block'; - }); - verMaisButton.style.display = 'none'; - verMenosButton.style.display = 'block'; - } + // Função para mostrar mais resultados + function MostrarMaisResultados() { + listaResultadosOcultados.forEach(resultado => { + resultado.style.display = 'block'; + }); + verMaisButton.style.display = 'none'; + verMenosButton.style.display = 'block'; + } - // Função para mostrar menos resultados - function MostrarMenosResultados() { - listaResultadosOcultados.forEach(resultado => { - resultado.style.display = 'none'; - }); - verMaisButton.style.display = 'block'; - verMenosButton.style.display = 'none'; + // Função para mostrar menos resultados + function MostrarMenosResultados() { + listaResultadosOcultados.forEach(resultado => { + resultado.style.display = 'none'; + }); + verMaisButton.style.display = 'block'; + verMenosButton.style.display = 'none'; + } } } } -function changeMapLocation(latitude, longitude) { - if (pagina) - { - pagina.mapa.mudarLocalizacao([latitude, longitude]); - } +function pesquisar(id, listaId) { + const el = document.getElementById(id); + let query = el.value; + const pesquisador = new Pesquisador(listaId) + pesquisador.pesquisarLocalizacoes(query); } function mostrarOutro() { @@ -158,4 +142,9 @@ function updateSelectValue(){ } } -document.getElementById("meu_formulario").addEventListener("submit",updateSelectValue); \ No newline at end of file +document.getElementById("meu_formulario").addEventListener("submit",updateSelectValue); + +// Exporta as classes +module.exports = { + Pesquisador +}; \ No newline at end of file From 12fcf143f77ed7a8e863852a1747813b5cabf49c Mon Sep 17 00:00:00 2001 From: MarcosViniciusG Date: Thu, 20 Jun 2024 09:44:44 -0300 Subject: [PATCH 6/6] =?UTF-8?q?refactor(devs):=20retirado=20o=20m=C3=A9tod?= =?UTF-8?q?o=20est=C3=A1tico=20sum=20da=20classe=20Mapa?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- lgbtq_connect/assets/js/script.js | 4 ---- 1 file changed, 4 deletions(-) diff --git a/lgbtq_connect/assets/js/script.js b/lgbtq_connect/assets/js/script.js index b5b1d154..ec640df5 100644 --- a/lgbtq_connect/assets/js/script.js +++ b/lgbtq_connect/assets/js/script.js @@ -50,10 +50,6 @@ class Mapa { this.mapa.remove() this.mapa = null; } - - static sum(a, b) { - return a+b; - } } class Pagina {
Nome Email LatitudeLongitudeServiçoDescriçãoData e hora StatusAções