Eventos perto de você Ative sua localização
AgendaSul
👋 Bem-vindo
📍 Ative sua localização
0 eventos
próximos
//======================================================
// AGENDA SUL V2
// PORTAL
//======================================================
//======================================================
// AGENDA SUL V2
// PORTAL PROFISSIONAL
// PARTE 01
//======================================================
//======================================================
// CONFIGURAÇÕES
//======================================================
const SCRIPT_URL =
"https://script.google.com/macros/s/AKfycbzWVX_EfUMPLwAiTRPThC1B4m9FnG5H93d10Xqr-0ijFEdpwcNSq8Tzt9jS-qgnAB0D/exec";
const CENTRO_INICIAL = [-26.25,-50.30];
const ZOOM_INICIAL = 8;
const INTERVALO_ATUALIZACAO = 30000;
//======================================================
// VARIÃVEIS
//======================================================
let mapa;
let cluster;
let popupAtual=null;
let rotaAtual=null;
let usuario=null;
let eventos=[];
let eventosFiltrados=[];
//======================================================
// CORRIGE COORDENADAS
//======================================================
function corrigirCoordenada(valor){
if(valor===undefined) return null;
if(valor===null) return null;
valor=String(valor).trim();
if(valor==="") return null;
valor=valor.replace(",", ".");
if(valor.includes(".")){
return parseFloat(valor);
}
if(valor.startsWith("-26")){
return parseFloat(
"-26."+valor.substring(3)
);
}
if(valor.startsWith("-27")){
return parseFloat(
"-27."+valor.substring(3)
);
}
if(valor.startsWith("-28")){
return parseFloat(
"-28."+valor.substring(3)
);
}
if(valor.startsWith("-29")){
return parseFloat(
"-29."+valor.substring(3)
);
}
if(valor.startsWith("-49")){
return parseFloat(
"-49."+valor.substring(3)
);
}
if(valor.startsWith("-50")){
return parseFloat(
"-50."+valor.substring(3)
);
}
if(valor.startsWith("-51")){
return parseFloat(
"-51."+valor.substring(3)
);
}
return parseFloat(valor);
}
//====================================================
// TRAÇAR ROTA
//====================================================
function tracarRota(evento){
if(!usuario){
alert("Primeiro ative sua localização.");
return;
}
if(!evento.latitude || !evento.longitude){
alert("Este evento não possui localização.");
return;
}
// Remove rota anterior
if(rotaAtual){
mapa.removeControl(rotaAtual);
}
// Cria nova rota
rotaAtual=L.Routing.control({
waypoints:[
L.latLng(
usuario.latitude,
usuario.longitude
),
L.latLng(
Number(evento.latitude),
Number(evento.longitude)
)
],
routeWhileDragging:false,
addWaypoints:false,
draggableWaypoints:false,
fitSelectedRoutes:true,
showAlternatives:false,
createMarker:function(){
return null;
}
}).addTo(mapa);
// Quando encontrar a rota
rotaAtual.on("routesfound",function(e){
const rota=e.routes[0];
const km=(rota.summary.totalDistance/1000).toFixed(1);
const tempo=Math.round(
rota.summary.totalTime/60
);
L.popup()
.setLatLng([
Number(evento.latitude),
Number(evento.longitude)
])
.setContent(`
${evento.titulo}
🚗 ${tempo} minutos
📍 ${km} km
`)
.openOn(mapa);
});
}
//====================================================
// GOOGLE MAPS
//====================================================
//======================================================
// INICIAR PORTAL
//======================================================
window.addEventListener(
"DOMContentLoaded",
iniciarPortal
);
async function iniciarPortal(){
console.log("AgendaSul iniciado.");
iniciarMapa();
await carregarEventos();
iniciarPesquisa();
iniciarFiltros();
iniciarSliderDistancia();
iniciarPainelLocalizacao();
iniciarTopoCompacto();
}
//====================================================
// SLIDER DISTÂNCIA
//====================================================
//====================================================
// SLIDER DISTÂNCIA
//====================================================
//====================================================
// SLIDER DISTÂNCIA
//====================================================
//====================================================
// SLIDER DISTÂNCIA
//====================================================
function iniciarSliderDistancia(){
const slider = document.getElementById("filtroDistancia");
if(!slider) return;
slider.addEventListener("input",function(){
atualizarDistancia(this);
});
atualizarDistancia(slider);
}
//====================================================
// ATUALIZA DISTÂNCIA
//====================================================
//====================================================
// ATUALIZA DISTÂNCIA
//====================================================
function atualizarDistancia(slider){
if(!slider) return;
const valor = parseInt(slider.value);
const texto =
valor <= 0
? "500 metros"
: valor + " km";
document.getElementById("textoDistancia").textContent = texto;
aplicarFiltros();
atualizarPainelResumo();
atualizarMapaDistancia();
}
//====================================================
// MAPA DISTÂNCIA
//====================================================
let circuloPesquisa = null;
function atualizarMapaDistancia(){
if(!usuario || !mapa) return;
const slider =
document.getElementById(
"filtroDistanciaResumo"
);
if(!slider) return;
const km = parseInt(slider.value);
const metros = (km <= 0) ? 500 : km * 1000;
if(circuloPesquisa){
mapa.removeLayer(circuloPesquisa);
}
circuloPesquisa = L.circle(
[
usuario.latitude,
usuario.longitude
],
{
radius: metros,
color:"#2563EB",
fillColor:"#2563EB",
fillOpacity:0.08,
weight:2
}
).addTo(mapa);
//------------------------------------------------
// ZOOM AUTOMÁTICO
//------------------------------------------------
let zoom = 8;
if(km <= 0){
zoom = 17;
}else if(km <= 1){
zoom = 15;
}else if(km <= 5){
zoom = 13;
}else if(km <= 10){
zoom = 12;
}else if(km <= 20){
zoom = 11;
}else if(km <= 50){
zoom = 10;
}else if(km <= 100){
zoom = 9;
}else{
zoom = 8;
}
mapa.setView(
[
usuario.latitude,
usuario.longitude
],
zoom,
{
animate:true,
duration:0.7
}
);
}
//====================================================
// TOPO LIMPO NO CELULAR
//====================================================
function iniciarTopoCompacto(){
const topo = document.getElementById("topo");
const btnToggle = document.getElementById("btnToggleTopo");
if(!topo || !btnToggle) return;
btnToggle.addEventListener("click", function(){
topo.classList.toggle("aberto");
});
function ajustarTopo(){
if(window.innerWidth > 768){
topo.classList.add("aberto");
}else{
topo.classList.remove("aberto");
}
}
ajustarTopo();
window.addEventListener("resize", ajustarTopo);
}
//======================================================
// MAPA
//======================================================
function iniciarMapa(){
mapa=L.map(
"mapa",
{
zoomControl:true
}
).setView(
CENTRO_INICIAL,
ZOOM_INICIAL
);
L.tileLayer(
"https://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png",
{
attribution:"© OpenStreetMap",
maxZoom:19
}
).addTo(mapa);
cluster=L.markerClusterGroup({
showCoverageOnHover:false,
spiderfyOnMaxZoom:true,
disableClusteringAtZoom:15
});
mapa.addLayer(cluster);
L.control.scale({
metric:true,
imperial:false
}).addTo(mapa);
}
//======================================================
// API
//======================================================
async function carregarEventos(){
try{
const resposta=
await fetch(
SCRIPT_URL+"?api=portal",
{
cache:"no-cache"
}
);
if(!resposta.ok){
throw new Error(
"Erro ao acessar API."
);
}
eventos=
await resposta.json();
eventos.forEach(function(e){
e.latitude=
corrigirCoordenada(
e.latitude
);
e.longitude=
corrigirCoordenada(
e.longitude
);
});
eventosFiltrados = [
...eventos
];
// Preenche o filtro de cidades
carregarFiltroCidades();
console.log(
"Eventos carregados:",
eventos.length
);
renderizarPortal();
}
catch(erro){
console.error(
erro
);
document
.getElementById(
"listaEventos"
)
.innerHTML=`
Não foi possÃvel carregar os eventos.
`;
}
}
//====================================================
// GEOLOCALIZAÇÃO
//====================================================
function localizarUsuario(){
if(!navigator.geolocation){
alert("Seu navegador não suporta geolocalização.");
return;
}
navigator.geolocation.getCurrentPosition(
function(pos){
usuario={
latitude:pos.coords.latitude,
longitude:pos.coords.longitude
};
// Remove marcador anterior
if(window.marcadorUsuario){
mapa.removeLayer(window.marcadorUsuario);
}
// Cria marcador da localização
window.marcadorUsuario=L.circleMarker(
[
usuario.latitude,
usuario.longitude
],
{
radius:8,
color:"#2563EB",
fillColor:"#2563EB",
fillOpacity:0.8,
weight:3
}
)
.addTo(mapa)
.bindPopup("📍 Você está aqui")
.openPopup();
// Centraliza o mapa
mapa.flyTo(
[
usuario.latitude,
usuario.longitude
],
13,
{
animate:true,
duration:1.5
}
);
// Esconde o botão
const botao=document.getElementById("btnAtivarLocalizacao");
if(botao){
botao.style.display="none";
}
console.log(
"Localização obtida:",
usuario.latitude,
usuario.longitude
);
calcularDistancias();
},
function(erro){
console.error(erro);
switch(erro.code){
case erro.PERMISSION_DENIED:
alert("Você negou a permissão para acessar sua localização.");
break;
case erro.POSITION_UNAVAILABLE:
alert("Não foi possível determinar sua localização.");
break;
case erro.TIMEOUT:
alert("O tempo para localizar você expirou.");
break;
default:
alert("Erro desconhecido ao obter sua localização.");
}
},
{
enableHighAccuracy:true,
timeout:15000,
maximumAge:0
}
);
}
//====================================================
// DISTÂNCIAS
//====================================================
function calcularDistancias(){
if(!usuario) return;
eventos.forEach(function(evento){
if(
!evento.latitude ||
!evento.longitude
){
evento.distancia=999999;
return;
}
evento.distancia=
calcularKm(
usuario.latitude,
usuario.longitude,
Number(evento.latitude),
Number(evento.longitude)
);
});
eventos.sort(function(a,b){
return a.distancia-b.distancia;
});
eventosFiltrados=[
...eventos
];
renderizarPortal();
atualizarPainelResumo();
}
//====================================================
// PAINEL INTELIGENTE
//====================================================
function atualizarPainelResumo(){
if(!usuario) return;
//------------------------------------------------
// SAUDAÇÃO
//------------------------------------------------
const hora=new Date().getHours();
let saudacao="👋 Bem-vindo";
if(hora>=5 && hora<12){
saudacao="☀️ Bom dia";
}else if(hora>=12 && hora<18){
saudacao="🌤 Boa tarde";
}else{
saudacao="🌙 Boa noite";
}
document.getElementById("saudacao").textContent=saudacao;
//------------------------------------------------
// EVENTOS ATÉ 20 KM
//------------------------------------------------
const proximos=eventos.filter(function(e){
return e.distancia!==undefined && e.distancia<=20;
});
document.getElementById("totalEventos").textContent=proximos.length;
//------------------------------------------------
// CIDADE
//------------------------------------------------
if(proximos.length){
document.getElementById("cidadeUsuario").textContent=
"📍 Próximo de "+proximos[0].cidade;
}else{
document.getElementById("cidadeUsuario").textContent=
"Nenhum evento encontrado até 20 km";
}
//------------------------------------------------
// CONTADORES
//------------------------------------------------
let baile=0;
let show=0;
let festa=0;
let igreja=0;
let rodeio=0;
let infantil=0;
proximos.forEach(function(e){
const cat=String(
e.categoria||""
).toLowerCase();
if(cat.includes("baile")) baile++;
if(cat.includes("show")) show++;
if(cat.includes("festa")) festa++;
if(cat.includes("igreja")) igreja++;
if(cat.includes("rodeio")) rodeio++;
if(cat.includes("infantil")) infantil++;
});
document.getElementById("qtBaile").textContent=baile;
document.getElementById("qtShow").textContent=show;
document.getElementById("qtFesta").textContent=festa;
document.getElementById("qtIgreja").textContent=igreja;
document.getElementById("qtRodeio").textContent=rodeio;
document.getElementById("qtInfantil").textContent=infantil;
//------------------------------------------------
// EVENTO MAIS PRÓXIMO
//------------------------------------------------
if(proximos.length){
proximos.sort(function(a,b){
return a.distancia-b.distancia;
});
const e=proximos[0];
document.getElementById(
"eventoMaisProximo"
).innerHTML=`
${e.titulo}
📍 ${e.cidade}
🚗 ${e.distancia.toFixed(1)} km
📅 ${formatarData(e.data)}
às
${formatarHora(e.hora)}
`;
}
}
//====================================================
// HAVERSINE
//====================================================
function calcularKm(
lat1,
lon1,
lat2,
lon2
){
const R=6371;
const dLat=(lat2-lat1)*Math.PI/180;
const dLon=(lon2-lon1)*Math.PI/180;
const a=
Math.sin(dLat/2)**2+
Math.cos(lat1*Math.PI/180)*
Math.cos(lat2*Math.PI/180)*
Math.sin(dLon/2)**2;
const c=
2*
Math.atan2(
Math.sqrt(a),
Math.sqrt(1-a)
);
return R*c;
}
//====================================================
// RENDERIZAR PORTAL
//====================================================
function renderizarPortal(){
desenharMarcadores();
desenharLista();
}
//====================================================
// MARCADORES
//====================================================
function desenharMarcadores(){
cluster.clearLayers();
eventosFiltrados.forEach(function(evento){
if(!evento.latitude) return;
if(!evento.longitude) return;
const marcador=L.marker([
Number(evento.latitude),
Number(evento.longitude)
]);
marcador.bindPopup(
criarPopup(evento)
);
marcador.on("click",function(){
abrirEvento(evento.id);
});
cluster.addLayer(marcador);
});
}
//====================================================
// LISTA
//====================================================
function desenharLista(){
const lista=document.getElementById("listaEventos");
lista.innerHTML="";
if(eventosFiltrados.length===0){
lista.innerHTML=`
Nenhum evento encontrado.
`;
return;
}
eventosFiltrados.forEach(function(evento){
lista.appendChild(
criarCard(evento)
);
});
}
//====================================================
// CARD
//====================================================
//====================================================
// CARD PROFISSIONAL
//====================================================
//====================================================
// CARD PREMIUM AGENDASUL
//====================================================
function criarCard(evento){
const card=document.createElement("div");
card.className="cardEvento";
//------------------------------------------------
// IMAGEM
//------------------------------------------------
const foto=
evento.imagem1 ||
"https://placehold.co/900x600?text=AgendaSul";
//------------------------------------------------
// CATEGORIA
//------------------------------------------------
const categoria=
evento.categoria ||
"Evento";
//------------------------------------------------
// DATA
//------------------------------------------------
let dia="--";
let mes="---";
if(evento.data){
const partes=evento.data.split("/");
if(partes.length===3){
dia=partes[0];
const meses=[
"JAN",
"FEV",
"MAR",
"ABR",
"MAI",
"JUN",
"JUL",
"AGO",
"SET",
"OUT",
"NOV",
"DEZ"
];
mes=meses[
Number(partes[1])-1
];
}
}
//------------------------------------------------
// DISTÂNCIA
//------------------------------------------------
const distancia=
evento.distancia
?
evento.distancia.toFixed(1)+" km"
:
"--";
//------------------------------------------------
// HTML
//------------------------------------------------
card.innerHTML=`
${categoria.toUpperCase()}
${evento.titulo}
${formatarData(evento.data)}
${formatarHora(evento.hora)}
${evento.local}
${evento.cidade}
Apenas ${distancia} de você
${evento.descricao||""}
`;
//------------------------------------------------
// CARD
//------------------------------------------------
card.onclick=function(){
abrirEvento(evento.id);
};
//------------------------------------------------
// MAPA
//------------------------------------------------
card
.querySelector(".btnMapa")
.onclick=function(e){
e.stopPropagation();
tracarRota(evento);
};
//------------------------------------------------
// INGRESSOS
//------------------------------------------------
card
.querySelector(".btnIngresso")
.onclick=function(e){
e.stopPropagation();
abrirIngresso(evento.ingressos);
};
return card;
}
//====================================================
// POPUP
//====================================================
//====================================================
// POPUP
//====================================================
function criarPopup(evento){
return `
${evento.titulo}
${evento.cidade}
${evento.local}
${formatarData(evento.data)}
${formatarHora(evento.hora)}
`;
}
//====================================================
// ABRIR EVENTO
//====================================================
function abrirEvento(id){
const evento=
eventos.find(
e=>String(e.id)==String(id)
);
if(!evento) return;
mapa.flyTo(
[
Number(evento.latitude),
Number(evento.longitude)
],
15,
{
animate:true,
duration:1.4
}
);
if(popupAtual){
mapa.closePopup(
popupAtual
);
}
popupAtual=L.popup()
.setLatLng([
Number(evento.latitude),
Number(evento.longitude)
])
.setContent(
criarPopup(evento)
)
.openOn(mapa);
}
//====================================================
// INGRESSOS
//====================================================
function abrirIngresso(url){
if(!url) return;
window.open(
url,
"_blank"
);
}
//====================================================
// PESQUISA
//====================================================
function iniciarPesquisa(){
const txt = document.getElementById("txtPesquisa");
if(!txt) return;
txt.addEventListener("input", function(){
aplicarFiltros();
});
}
//====================================================
// FILTROS
//====================================================
function iniciarFiltros(){
const cidade = document.getElementById("filtroCidade");
const categoria = document.getElementById("filtroCategoria");
const periodo = document.getElementById("filtroPeriodo");
const distancia = document.getElementById("filtroDistancia");
const ordenacao = document.getElementById("ordenacao");
const limpar = document.getElementById("btnLimparFiltros");
if(cidade){
cidade.addEventListener("change", aplicarFiltros);
}
if(categoria){
categoria.addEventListener("change", aplicarFiltros);
}
if(periodo){
periodo.addEventListener("change", aplicarFiltros);
}
if(distancia){
distancia.addEventListener("change", aplicarFiltros);
}
if(ordenacao){
ordenacao.addEventListener("change", aplicarFiltros);
}
if(limpar){
limpar.addEventListener("click", limparFiltros);
}
}
function aplicarFiltroTempo(tipo){
const hoje=new Date();
eventosFiltrados=eventos.filter(function(e){
if(!e.data) return false;
const p=e.data.split("/");
if(p.length!=3) return false;
const data=new Date(
Number(p[2]),
Number(p[1])-1,
Number(p[0])
);
const dias=(data-hoje)/86400000;
switch(tipo){
case "todos":
return true;
case "hoje":
return dias>=0 && dias<1;
case "semana":
return dias>=0 && dias<=7;
case "mes":
return (
data.getMonth()==hoje.getMonth()
&&
data.getFullYear()==hoje.getFullYear()
);
}
return true;
});
renderizarPortal();
}
function limparFiltros(){
document.getElementById("txtPesquisa").value="";
document.getElementById("filtroCidade").value="";
document.getElementById("filtroCategoria").value="";
document.getElementById("filtroPeriodo").value="todos";
document.getElementById("filtroDistancia").value=20;
document.getElementById("textoDistancia").textContent="Até 20 km";
document.getElementById("ordenacao").value="proximos";
aplicarFiltros();
}
//====================================================
// VALIDAR PERÍODO
//====================================================
function validarPeriodo(
evento,
tipo
){
if(
tipo=="todos"
)
return true;
if(
!evento.data
)
return false;
const partes=
evento.data.split("/");
if(
partes.length!=3
)
return false;
const dataEvento=
new Date(
Number(partes[2]),
Number(partes[1])-1,
Number(partes[0])
);
const hoje=
new Date();
hoje.setHours(
0,0,0,0
);
const diff=
Math.floor(
(dataEvento-hoje)/86400000
);
switch(tipo){
case "hoje":
return diff===0;
case "amanha":
return diff===1;
case "semana":
return diff>=0 && diff<=7;
case "30dias":
return diff>=0 && diff<=30;
case "mes":
return(
dataEvento.getMonth()==
hoje.getMonth()
&&
dataEvento.getFullYear()==
hoje.getFullYear()
);
}
return true;
}
//====================================================
// ORDENAR EVENTOS
//====================================================
function ordenarEventos(){
const tipo=
document
.getElementById("ordenacao")
.value;
switch(tipo){
case "proximos":
eventosFiltrados.sort(function(a,b){
return (a.distancia||999999)-(b.distancia||999999);
});
break;
case "nome":
eventosFiltrados.sort(function(a,b){
return String(a.titulo||"")
.localeCompare(
String(b.titulo||""),
"pt-BR"
);
});
break;
case "cidade":
eventosFiltrados.sort(function(a,b){
return String(a.cidade||"")
.localeCompare(
String(b.cidade||""),
"pt-BR"
);
});
break;
case "data":
eventosFiltrados.sort(function(a,b){
return converterData(a.data)-converterData(b.data);
});
break;
}
}
//====================================================
// CONVERTER DATA
//====================================================
function converterData(data){
if(!data)
return new Date(2099,0,1);
const p=data.split("/");
if(p.length!=3)
return new Date(2099,0,1);
return new Date(
Number(p[2]),
Number(p[1])-1,
Number(p[0])
);
}
//====================================================
// CARREGAR CIDADES
//====================================================
//====================================================
// CARREGAR CIDADES
//====================================================
function carregarFiltroCidades(){
const select = document.getElementById("filtroCidade");
if(!select) return;
select.innerHTML =
'
';
const cidades = [];
eventos.forEach(function(e){
const nome = String(e.cidade || "")
.trim();
if(nome && !cidades.includes(nome)){
cidades.push(nome);
}
});
cidades.sort(function(a,b){
return a.localeCompare(b,"pt-BR");
});
cidades.forEach(function(cidade){
const option =
document.createElement("option");
option.value = cidade;
option.textContent = cidade;
select.appendChild(option);
});
console.log("Cidades carregadas:", cidades);
}
//====================================================
// APLICAR FILTROS
//====================================================
function aplicarFiltros(){
const pesquisa=
document
.getElementById("txtPesquisa")
.value
.toLowerCase()
.trim();
const cidade=
document
.getElementById("filtroCidade")
.value
.toLowerCase();
const categoria=
document
.getElementById("filtroCategoria")
.value
.toLowerCase();
const periodo=
document
.getElementById("filtroPeriodo")
.value;
const distanciaMax=
parseFloat(
document.getElementById("filtroDistancia").value
);
eventosFiltrados=
eventos.filter(function(evento){
//-------------------------
// PESQUISA
//-------------------------
if(pesquisa){
const texto=(
String(evento.titulo||"")+" "+
String(evento.cidade||"")+" "+
String(evento.local||"")+" "+
String(evento.categoria||"")+" "+
String(evento.organizador||"")
)
.toLowerCase();
if(!texto.includes(pesquisa))
return false;
}
//-------------------------
// CIDADE
//-------------------------
if(cidade){
const cidadeEvento = String(evento.cidade || "")
.trim()
.toLowerCase();
const cidadeFiltro = cidade
.trim()
.toLowerCase();
if(cidadeEvento !== cidadeFiltro){
return false;
}
}
//-------------------------
// CATEGORIA
//-------------------------
if(categoria){
const categoriaEvento = String(evento.categoria || "")
.trim()
.toLowerCase();
const categoriaFiltro = categoria
.trim()
.toLowerCase();
if(categoriaEvento !== categoriaFiltro){
return false;
}
}
//-------------------------
//-------------------------
// DISTÂNCIA
//-------------------------
if(usuario && evento.distancia != null){
const limite =
(distanciaMax <= 0)
? 0.5
: distanciaMax;
if(evento.distancia > limite){
return false;
}
}
//-------------------------
// DATA
//-------------------------
if(
!validarPeriodo(
evento,
periodo
)
){
return false;
}
return true;
});
ordenarEventos();
renderizarPortal();
const info=document.getElementById("totalEventosDistancia");
if(info){
info.innerHTML=
eventosFiltrados.length+
" eventos encontrados";
}
}
//====================================================
// ATUALIZAÇÃO AUTOMÃTICA
//====================================================
//====================================================
// DEBUG
//====================================================
console.log("AgendaSul Portal carregado.");
//====================================================
// FORMATAR DATA
//====================================================
function formatarData(data){
if(!data) return "";
try{
// Formato ISO
if(String(data).includes("T")){
const d=new Date(data);
return d.toLocaleDateString("pt-BR");
}
return data;
}catch(e){
return data;
}
}
//====================================================
// FORMATAR HORA
//====================================================
function formatarHora(hora){
if(!hora) return "";
try{
if(String(hora).includes("T")){
const d=new Date(hora);
return d.toLocaleTimeString(
"pt-BR",
{
hour:"2-digit",
minute:"2-digit"
}
);
}
return hora;
}catch(e){
return hora;
}
}
//====================================================
// PAINEL LOCALIZAÇÃO
//====================================================
//====================================================
// BOTÃO LOCALIZAÇÃO
//====================================================
function iniciarPainelLocalizacao(){
const botao = document.getElementById("btnAtivarLocalizacao");
if(!botao) return;
botao.addEventListener("click", localizarUsuario);
}
//====================================================
// ABRIR NO GOOGLE MAPS
//====================================================
function abrirGoogleMaps(id){
if(!usuario){
alert("Ative sua localização primeiro.");
return;
}
const evento = eventos.find(function(e){
return String(e.id) === String(id);
});
if(!evento){
alert("Evento não encontrado.");
return;
}
const url =
"https://www.google.com/maps/dir/" +
usuario.latitude + "," +
usuario.longitude + "/" +
evento.latitude + "," +
evento.longitude;
window.open(url, "_blank");
}
//====================================================
// MAIS FILTROS
//====================================================
const btnMostrarFiltros = document.getElementById("btnMostrarFiltros");
const painelFiltros = document.getElementById("maisFiltros");
if(btnMostrarFiltros && painelFiltros){
btnMostrarFiltros.addEventListener("click", function(){
painelFiltros.classList.toggle("ativo");
if(painelFiltros.classList.contains("ativo")){
this.innerHTML = `
Ocultar filtros
`;
}else{
this.innerHTML = `
Mais filtros
`;
}
});
}
//====================================================
// ESCONDER PESQUISA E FILTROS AO ROLAR
//====================================================
//==========================================
// TOPO INTELIGENTE
//==========================================
//====================================================
// RESUMO CLICÁVEL
//====================================================
document.querySelectorAll(".itemResumo")
.forEach(function(item){
item.addEventListener("click",function(){
const categoria=
this.dataset.categoria;
document.getElementById(
"filtroCategoria"
).value=categoria;
aplicarFiltros();
window.scrollTo({
top:document.getElementById("listaEventos").offsetTop,
behavior:"smooth"
});
});
});