1;ufsm.ramais = (function(){ 2 let ESTADO = { 3 itensCarregados: [], 4 itensFiltrados: [], 5 paginaAtual: 1, 6 itensPorPagina: (window.ufsmRamaisData && ufsmRamaisData.itensPagina) || 15 7 }; 8 9 let ELEMENTOS = { 10 CAMPUS: document.querySelector('#ramais-filtro-campus'), 11 PREDIO: document.querySelector('#ramais-filtro-predio'), 12 SETOR: document.querySelector('#ramais-filtro-setor'), 13 SALA: document.querySelector('#ramais-filtro-sala'), 14 BUSCA: document.querySelector('#ramais-busca-geral'), 15 TBODY: document.querySelector('#ramais-resultados'), 16 NAV: document.querySelector('#ramais-nav') 17 }; 18 19 let NAO_INFORMADO = '-'; 20 let TIMEOUT_BUSCA_LIVRE = null; 21 22 function normalizar(texto){ 23 return (texto || '').toString().toLowerCase().normalize('NFD').replace(/[\u0300-\u036f]/g, ''); 24 } 25 26 function celulaTelefone(telefone){ 27 if(!telefone) return NAO_INFORMADO; 28 29 let numeroLimpo = telefone.toString().replace(/[^\d+]/g, ''); 30 31 return {tag: 'a', properties: {href: `tel:${numeroLimpo}`}, content: telefone}; 32 } 33 34 function buscaServidor(e = null, pagina = 1){ 35 if(e) e.preventDefault(); 36 37 ufsm.utils.overlay({targetSelector: '#ramais-resultados-container'}); 38 39 let corpo = new URLSearchParams({ 40 action: 'ufsm_ramais_busca', 41 nonce: ufsmRamaisData.nonce, 42 widget_number: ufsmRamaisData.widgetNumber || '', 43 campus: ELEMENTOS.CAMPUS ? ELEMENTOS.CAMPUS.value : '', 44 predio: ELEMENTOS.PREDIO ? ELEMENTOS.PREDIO.value : '', 45 setor: ELEMENTOS.SETOR ? ELEMENTOS.SETOR.value : '', 46 sala: ELEMENTOS.SALA ? ELEMENTOS.SALA.value : '' 47 }); 48 49 fetch(ufsmRamaisData.ajax_url, {method: 'POST', body: corpo}) 50 .then(resposta => resposta.json()) 51 .then(dados => { 52 if(dados.success){ 53 ESTADO.itensCarregados = dados.data.itens; 54 aplicaBuscaLivre(pagina); 55 }else exibeErro(); 56 }) 57 .catch(exibeErro) 58 .finally(() => ufsm.utils.overlay({targetSelector: '#ramais-resultados-container'})); 59 } 60 61 function aplicaBuscaLivre(pagina = 1){ 62 let termo = normalizar(ELEMENTOS.BUSCA ? ELEMENTOS.BUSCA.value : ''); 63 64 ESTADO.itensFiltrados = !termo 65 ? ESTADO.itensCarregados 66 : ESTADO.itensCarregados.filter(item => 67 normalizar(item.ramal).includes(termo) 68 || normalizar(item.campus).includes(termo) 69 || normalizar(item.predio).includes(termo) 70 || normalizar(item.setor).includes(termo) 71 || normalizar(item.sala).includes(termo) 72 ); 73 74 renderiza(pagina); 75 } 76 77 function filtraLocal(){ 78 clearTimeout(TIMEOUT_BUSCA_LIVRE); 79 TIMEOUT_BUSCA_LIVRE = setTimeout(() => aplicaBuscaLivre(1), 200); 80 } 81 82 function renderiza(pagina){ 83 ESTADO.paginaAtual = pagina; 84 85 let total = ESTADO.itensFiltrados.length; 86 87 ufsm.utils.dom.removeAllChilds({element: ELEMENTOS.TBODY}); 88 89 if(!total){ 90 ufsm.utils.dom.appendChild({element: ELEMENTOS.NAV, content: 'Nenhum ramal encontrado para os filtros selecionados.', clearBeforeAppend: true}); 91 ELEMENTOS.TBODY.appendChild(ufsm.utils.dom.createElement({ 92 tag: 'tr', 93 content: {tag: 'td', properties: {colspan: 6}, classes: 'text-center', content: 'Nenhum ramal encontrado para os filtros selecionados.'} 94 })); 95 return; 96 } 97 98 let inicio = (pagina - 1) * ESTADO.itensPorPagina; 99 let itensPagina = ESTADO.itensFiltrados.slice(inicio, inicio + ESTADO.itensPorPagina); 100 101 itensPagina.forEach(item => { 102 ELEMENTOS.TBODY.appendChild(ufsm.utils.bs.tr({ 103 fields: [ 104 item.ramal || NAO_INFORMADO, 105 celulaTelefone(item.telefone_externo), 106 item.setor || NAO_INFORMADO, 107 item.sala || NAO_INFORMADO, 108 item.predio || NAO_INFORMADO, 109 item.campus || NAO_INFORMADO 110 ] 111 })); 112 }); 113 114 let paginacao = ufsm.utils.bs.paginationRow({ 115 target_page: pagina, 116 max_results: ESTADO.itensPorPagina, 117 result_count: total, 118 action_function_select: 'ufsm.ramais.irParaPagina', 119 action_function_pagination: (link, indice) => link.setAttribute('onclick', `ufsm.ramais.irParaPagina(null, ${indice})`), 120 text_function: (inicial, final, totalItens) => `Exibindo do ${inicial} ao ${final} de ${totalItens} ramais` 121 }); 122 123 ufsm.utils.dom.appendChild({element: ELEMENTOS.NAV, content: paginacao, clearBeforeAppend: true}); 124 } 125 126 function irParaPagina(e = null, pagina = null){ 127 pagina = pagina || (e && e.target ? parseInt(e.target.value, 10) : 1); 128 renderiza(pagina); 129 } 130 131 function exibeErro(){ 132 ufsm.utils.dom.removeAllChilds({element: ELEMENTOS.TBODY}); 133 ufsm.utils.dom.appendChild({element: ELEMENTOS.NAV, content: 'Erro ao buscar os ramais.', clearBeforeAppend: true}); 134 ELEMENTOS.TBODY.appendChild(ufsm.utils.dom.createElement({ 135 tag: 'tr', 136 content: {tag: 'td', properties: {colspan: 6}, content: ufsm.utils.bs.alertError()} 137 })); 138 } 139 140 function inicializa(){ 141 if(ELEMENTOS.BUSCA) ELEMENTOS.BUSCA.addEventListener('input', filtraLocal); 142 143 buscaServidor(null, 1); 144 } 145 146 return { 147 busca: buscaServidor, 148 filtrar: filtraLocal, 149 irParaPagina: irParaPagina, 150 inicializa: inicializa 151 }; 152})(); 153ufsm.utils.dom.ready({callback: ufsm.ramais.inicializa});
Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.