Atualização do calendario

This commit is contained in:
2026-03-23 09:40:59 -03:00
parent c49f619569
commit f675979736
2 changed files with 597 additions and 414 deletions

View File

@@ -81,187 +81,266 @@
<!-- MÊS -->
<div class="month-title">
<span></span>
Janeiro, 2025
<span></span>
</div>
<div class="calendar-header">
<!-- ESQUERDA (SETAS + MÊS) -->
<div class="mes-nav">
<button class="seta antGrande"></button>
<span class="titulo-mes">Janeiro, 2025</span>
<button class="seta proxGrande"></button>
</div>
<!-- DIREITA (DIA / SEMANA / MÊS) -->
<div class="view-switch">
<button>Dia</button>
<button>Semana</button>
<button class="active">Mês</button>
</div>
</div>
<!-- CALENDÁRIO GRANDE -->
<div class="calendar-area" id="calendarArea"></div>
</div>
<!-- SCRIPT -->
<script>
/* ===== MINI CALENDÁRIO ===== */
<script>
/* ===== VARIÁVEIS ===== */
let dataMini = new Date();
let dataGrande = new Date();
let dataAtual = new Date();
/* ===== MESES ===== */
const meses = [
"Janeiro", "Fevereiro", "Março", "Abril",
"Maio", "Junho", "Julho", "Agosto",
"Setembro", "Outubro", "Novembro", "Dezembro"
];
function renderCalendario() {
const mesEl = document.getElementById("mes");
const diasEl = document.getElementById("dias");
/* ===== MINI CALENDÁRIO ===== */
function renderCalendario() {
const mesEl = document.getElementById("mes");
const diasEl = document.getElementById("dias");
const meses = [
"Janeiro", "Fevereiro", "Março", "Abril",
"Maio", "Junho", "Julho", "Agosto",
"Setembro", "Outubro", "Novembro", "Dezembro"
];
let ano = dataMini.getFullYear();
let mes = dataMini.getMonth();
let ano = dataAtual.getFullYear();
let mes = dataAtual.getMonth();
mesEl.textContent = `${meses[mes]} ${ano}`;
mesEl.textContent = `${meses[mes]} ${ano}`;
let primeiroDia = new Date(ano, mes, 1).getDay();
let ultimoDia = new Date(ano, mes + 1, 0).getDate();
let ultimoDiaMesAnterior = new Date(ano, mes, 0).getDate();
let primeiroDia = new Date(ano, mes, 1).getDay();
let ultimoDia = new Date(ano, mes + 1, 0).getDate();
let ultimoDiaMesAnterior = new Date(ano, mes, 0).getDate();
diasEl.innerHTML = "";
diasEl.innerHTML = "";
let diaAtualNum = 1;
let diaSeguinte = 1;
let diaAtual = 1;
let diaSeguinte = 1;
let totalCelulas = primeiroDia + ultimoDia;
let totalLinhas = Math.ceil(totalCelulas / 7);
if (totalLinhas < 4) totalLinhas = 4;
let totalCelulas = primeiroDia + ultimoDia;
let totalLinhas = Math.ceil(totalCelulas / 7);
if (totalLinhas < 4) totalLinhas = 4;
for (let semana = 0; semana < totalLinhas; semana++) {
let linha = document.createElement("tr");
for (let semana = 0; semana < totalLinhas; semana++) {
let linha = document.createElement("tr");
for (let diaSemana = 0; diaSemana < 7; diaSemana++) {
let pos = semana * 7 + diaSemana;
for (let diaSemana = 0; diaSemana < 7; diaSemana++) {
let pos = semana * 7 + diaSemana;
if (pos < primeiroDia) {
let dia = ultimoDiaMesAnterior - (primeiroDia - pos - 1);
linha.innerHTML += `<td class="outromes">${dia}</td>`;
}
else if (diaAtualNum <= ultimoDia) {
let hoje = new Date();
if (pos < primeiroDia) {
let dia = ultimoDiaMesAnterior - (primeiroDia - pos - 1);
linha.innerHTML += `<td class="outromes">${dia}</td>`;
}
else if (diaAtual <= ultimoDia) {
let hoje = new Date();
let classeHoje =
diaAtualNum === hoje.getDate() &&
mes === hoje.getMonth() &&
ano === hoje.getFullYear()
? "today"
: "";
let classeHoje =
diaAtual === hoje.getDate() &&
mes === hoje.getMonth() &&
ano === hoje.getFullYear()
? "today"
: "";
linha.innerHTML += `<td class="${classeHoje}">${diaAtual}</td>`;
diaAtual++;
}
else {
linha.innerHTML += `<td class="outromes">${diaSeguinte}</td>`;
diaSeguinte++;
}
}
diasEl.appendChild(linha);
linha.innerHTML += `<td class="${classeHoje}">${diaAtualNum}</td>`;
diaAtualNum++;
}
else {
linha.innerHTML += `<td class="outromes">${diaSeguinte}</td>`;
diaSeguinte++;
}
}
document.querySelector(".prox").onclick = () => {
dataAtual.setMonth(dataAtual.getMonth() + 1);
renderCalendario();
};
diasEl.appendChild(linha);
}
}
document.querySelector(".ant").onclick = () => {
dataAtual.setMonth(dataAtual.getMonth() - 1);
renderCalendario();
};
/* ===== CALENDÁRIO GRANDE ===== */
function renderCalendarioGrande() {
const area = document.getElementById("calendarArea");
const titulo = document.querySelector(".titulo-mes");
/* ===== CALENDÁRIO GRANDE ===== */
let ano = dataGrande.getFullYear();
let mes = dataGrande.getMonth();
function renderCalendarioGrande() {
const area = document.getElementById("calendarArea");
area.innerHTML = "";
/* ATUALIZA TÍTULO */
titulo.textContent = `${meses[mes]}, ${ano}`;
for (let i = 0; i < 35; i++) {
area.innerHTML += `<div class="dia-box"></div>`;
area.innerHTML = "";
/* DIAS DA SEMANA */
const diasSemana = ["Dom", "Seg", "Ter", "Qua", "Qui", "Sex", "Sab"];
diasSemana.forEach(dia => {
area.innerHTML += `<div class="dia-semana">${dia}</div>`;
});
let primeiroDia = new Date(ano, mes, 1).getDay();
let ultimoDia = new Date(ano, mes + 1, 0).getDate();
let ultimoMesAnterior = new Date(ano, mes, 0).getDate();
let total = primeiroDia + ultimoDia;
let linhas = Math.ceil(total / 7);
let diaAtualNum = 1;
let proxMes = 1;
for (let i = 0; i < linhas * 7; i++) {
let classe = "dia-box";
let numero = "";
if (i < primeiroDia) {
numero = ultimoMesAnterior - (primeiroDia - i - 1);
classe += " outro-mes";
}
else if (diaAtualNum <= ultimoDia) {
numero = diaAtualNum;
let hoje = new Date();
if (
diaAtualNum === hoje.getDate() &&
mes === hoje.getMonth() &&
ano === hoje.getFullYear()
) {
classe += " today";
}
diaAtualNum++;
}
else {
numero = proxMes++;
classe += " outro-mes";
}
/* ===== DADOS ===== */
area.innerHTML += `<div class="${classe}">${numero}</div>`;
}
}
let agendaData = [
{
hora: "08:15 09:15",
titulo: "Coçar oq fazer",
link: "https://youtube.com",
cor: "azul"
},
{
hora: "09:00 10:00",
titulo: "COMO QUE DIMINUI A FONTE?",
link: "https://sccor.com",
cor: "azul"
},
{
hora: "11:00 11:45",
titulo: "Pintar boobie-goods",
cor: "rosa"
},
{
hora: "18:20 23:00",
titulo: "Ir pro curso (infelizmente)",
link: "dom 4, BBP",
cor: "azul"
}
];
/* ===== ATUALIZAÇÕES ===== */
function atualizarMini() {
renderCalendario();
}
let feriadosData = [
{ texto: "15 Proclamação da República" },
{ texto: "20 Dia Nacional da Consciência Negra" }
];
function atualizarGrande() {
renderCalendarioGrande();
}
/* ===== RENDER AGENDA ===== */
/* ===== SETAS MINI ===== */
document.querySelector(".prox").onclick = () => {
dataMini.setMonth(dataMini.getMonth() + 1);
atualizarMini();
};
function renderAgenda() {
const container = document.getElementById("agenda");
document.querySelector(".ant").onclick = () => {
dataMini.setMonth(dataMini.getMonth() - 1);
atualizarMini();
};
container.innerHTML = `
<div class="agenda-header">
<strong>HOJE</strong> ${new Date().toLocaleDateString()}
</div>
`;
/* ===== SETAS GRANDE ===== */
document.querySelector(".antGrande").onclick = () => {
dataGrande.setMonth(dataGrande.getMonth() - 1);
atualizarGrande();
};
agendaData.forEach(ev => {
container.innerHTML += `
<div class="evento ${ev.cor}">
<div class="hora">${ev.hora}</div>
<div class="titulo">${ev.titulo}</div>
${ev.link ? `<div class="link">${ev.link}</div>` : ""}
</div>
`;
});
document.querySelector(".proxGrande").onclick = () => {
dataGrande.setMonth(dataGrande.getMonth() + 1);
atualizarGrande();
};
/* ===== BOTÕES DIA / SEMANA / MÊS ===== */
const botoesView = document.querySelectorAll(".view-switch button");
botoesView.forEach(btn => {
btn.addEventListener("click", () => {
botoesView.forEach(b => b.classList.remove("active"));
btn.classList.add("active");
const tipo = btn.textContent;
if (tipo === "Dia") {
alert("Modo DIA (você pode implementar depois)");
}
/* ===== RENDER FERIADOS ===== */
function renderFeriados() {
const container = document.getElementById("feriados");
container.innerHTML = `
<div class="feriados-header">FERIADOS 🎉</div>
`;
feriadosData.forEach(f => {
container.innerHTML += `
<div class="feriado">
<span class="dot"></span>
<span>${f.texto}</span>
</div>
`;
});
else if (tipo === "Semana") {
alert("Modo SEMANA (você pode implementar depois)");
}
else {
atualizarGrande(); // Mês já funciona
}
});
});
/* ===== INICIAR ===== */
/* ===== AGENDA ===== */
function renderAgenda() {
const container = document.getElementById("agenda");
renderCalendario();
renderCalendarioGrande();
renderAgenda();
renderFeriados();
</script>
container.innerHTML = `
<div class="agenda-header">
<strong>HOJE</strong> ${new Date().toLocaleDateString()}
</div>
`;
agendaData.forEach(ev => {
container.innerHTML += `
<div class="evento ${ev.cor}">
<div class="hora">${ev.hora}</div>
<div class="titulo">${ev.titulo}</div>
${ev.link ? `<div class="link">${ev.link}</div>` : ""}
</div>
`;
});
}
/* ===== FERIADOS ===== */
function renderFeriados() {
const container = document.getElementById("feriados");
container.innerHTML = `
<div class="feriados-header">FERIADOS 🎉</div>
`;
feriadosData.forEach(f => {
container.innerHTML += `
<div class="feriado">
<span class="dot"></span>
<span>${f.texto}</span>
</div>
`;
});
}
/* ===== DADOS ===== */
let agendaData = [
{ hora: "08:15 09:15", titulo: "Evento 1", cor: "azul" },
{ hora: "10:00 11:00", titulo: "Evento 2", cor: "rosa" }
];
let feriadosData = [
{ texto: "01 Ano Novo" }
];
/* ===== INICIAR ===== */
atualizarMini();
atualizarGrande();
renderAgenda();
renderFeriados();
</script>
</body>
</html>