teste-1-1 / index.html
Rwhehhehe's picture
Add 3 files
9e2e9ef verified
<!DOCTYPE html><html lang="pt-BR">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Jornal Oliveira</title>
<style>
:root {
--bg-main: #C3CA92;
--card-bg: #A4B17B;
--card-bg-alt: #859864;
--header-bg: #697E50;
--button-bg: #697E50;
--text-main: #20331B;
--text-light: #FFFFFF;
--alert-bg: #e53e3e;
}
* { box-sizing: border-box; }
body {
margin:0; padding:0;
font-family: Arial, sans-serif;
background-color: var(--bg-main);
color: var(--text-main);
}
header {
background-color: var(--header-bg);
color: var(--text-light);
padding: 1rem;
text-align: center;
}
nav {
background-color: var(--header-bg);
padding: 0.5rem;
display: flex;
flex-wrap: wrap;
gap: 0.5rem;
justify-content: center;
}
nav button {
background-color: var(--button-bg);
color: var(--text-light);
border: none;
padding: 0.5rem 1rem;
border-radius: 4px;
cursor: pointer;
transition: background-color 0.3s;
}
nav button:hover {
background-color: var(--card-bg-alt);
}
.container {
max-width: 800px;
margin: 1rem auto;
padding: 0 1rem;
}
.card {
background-color: var(--card-bg);
padding: 1rem;
margin-bottom: 1rem;
border-radius: 8px;
box-shadow: 0 2px 4px rgba(0,0,0,0.1);
}
.hidden { display: none; }
input, select, textarea {
width: 100%;
padding: 0.5rem;
margin-bottom: 0.5rem;
border: 1px solid #ccc;
border-radius: 4px;
font-size: 1rem;
}
button.primary {
background-color: var(--button-bg);
color: var(--text-light);
}
footer {
background-color: var(--header-bg);
color: var(--text-light);
text-align: center;
padding: 1rem;
margin-top: 2rem;
}
.alert {
background-color: var(--alert-bg);
color: var(--text-light);
padding: 0.5rem;
border-radius: 4px;
margin-bottom: 0.5rem;
}
</style>
</head>
<body>
<header>
<h1>Jornal Oliveira</h1>
<p>Feito de alunos para alunos</p>
</header>
<nav>
<button onclick="filterArticles('Colunas')">Colunas</button>
<button onclick="filterArticles('Notícias da Escola')">Notícias da Escola</button>
<button onclick="filterArticles('Entrevistas')">Entrevistas</button>
<button onclick="filterArticles('Opinião')">Opinião</button>
<button onclick="filterArticles('Cultura e Arte')">Cultura e Arte</button>
<button onclick="filterArticles('Esportes')">Esportes</button>
<button onclick="filterArticles('Humor')">Humor</button>
<button onclick="filterArticles('Você Sabia?')">Você Sabia?</button>
<button onclick="filterArticles('Projetos e Grêmios')">Projetos e Grêmios</button>
<button onclick="filterArticles('Fala Estudante')">Fala Estudante</button>
<button onclick="filterArticles('Investigação')">Investigação</button>
<button id="openLogin" class="primary">Painel</button>
</nav><div class="container" id="articlesSection">
<h2>Artigos Publicados</h2>
<div id="articlesList"></div>
</div><div id="loginModal" class="hidden">
<div class="card" style="max-width:300px;margin:2rem auto;">
<h3>Acesso ao Painel</h3>
<input id="accessCode" type="password" placeholder="Código de Acesso">
<button id="loginSubmit" class="primary">Entrar</button>
<div id="loginError" class="alert hidden">Código inválido.</div>
</div>
</div><div class="container hidden" id="publishPanel">
<div class="card">
<h3>Publicar Nova Matéria</h3>
<input id="pubAuthor" type="text" placeholder="Seu Nome (obrigatório)">
<input id="pubTitle" type="text" placeholder="Título da Matéria">
<select id="pubCategory">
<option value="">Selecione categoria</option>
</select>
<textarea id="pubContent" rows="5" placeholder="Conteúdo da matéria"></textarea>
<input id="pubParticipants" type="text" placeholder="Quem participou (opcional)">
<button id="btnPublish" class="primary">Publicar</button>
</div>
</div><footer>
<p>Jornal Oliveira © 2025</p>
</footer><script>
const ACCESS_CODE = '1903A';
const categories = ['Colunas','Notícias da Escola','Entrevistas','Opinião','Cultura e Arte','Esportes','Humor','Você Sabia?','Projetos e Grêmios','Fala Estudante','Investigação'];
let articles = JSON.parse(localStorage.getItem('jo_published') || '[]');
// Init
window.addEventListener('DOMContentLoaded', () => {
const sel = document.getElementById('pubCategory');
categories.forEach(c => {
const o = document.createElement('option'); o.value=c; o.textContent=c;
sel.appendChild(o);
});
if(!articles.length){
articles.push({ title:'Bem-vindo ao Jornal Oliveira!', author:'Equipe', date:new Date().toLocaleDateString('pt-BR'), category:'Colunas', content:'Primeira matéria do nosso jornal.' });
localStorage.setItem('jo_published',JSON.stringify(articles));
}
renderArticles();
});
function renderArticles(filter='Todas'){
const list=document.getElementById('articlesList'); list.innerHTML='';
let arr=articles.slice().sort((a,b)=>new Date(b.date)-new Date(a.date));
if(filter!=='Todas') arr=arr.filter(a=>a.category===filter);
if(!arr.length){ list.innerHTML='<p>Nenhuma matéria encontrada.</p>'; return; }
arr.forEach(a=>{
const card=document.createElement('div'); card.className='card';
card.innerHTML=`<h3>${a.title}</h3><p><strong>${a.author}</strong> - ${a.date} | <em>${a.category}</em></p><p>${a.content}</p>${a.participants?'<p><em>Participantes: '+a.participants+'</em></p>':''}`;
list.appendChild(card);
});
}
function filterArticles(cat){ renderArticles(cat); }
// Login Panel
document.getElementById('openLogin').onclick=()=>{
document.getElementById('loginModal').classList.remove('hidden');
};
document.getElementById('loginSubmit').onclick=()=>{
const code=document.getElementById('accessCode').value.trim();
if(code===ACCESS_CODE){
document.getElementById('loginModal').classList.add('hidden');
document.getElementById('publishPanel').classList.remove('hidden');
} else {
document.getElementById('loginError').classList.remove('hidden');
}
};
// Publish
document.getElementById('btnPublish').onclick=()=>{
const author=document.getElementById('pubAuthor').value.trim();
const title=document.getElementById('pubTitle').value.trim();
const category=document.getElementById('pubCategory').value;
const content=document.getElementById('pubContent').value.trim();
const participants=document.getElementById('pubParticipants').value.trim();
if(!author||!title||!category||!content){ alert('Preencha todos os campos obrigatórios!'); return; }
const newArt={ author,title,category,content,date:new Date().toLocaleDateString('pt-BR'),participants };
articles.unshift(newArt);
localStorage.setItem('jo_published',JSON.stringify(articles));
renderArticles(); alert('Matéria publicada!');
document.getElementById('pubAuthor').value='';document.getElementById('pubTitle').value='';document.getElementById('pubContent').value='';document.getElementById('pubParticipants').value='';
};
</script><p style="border-radius: 8px; text-align: center; font-size: 12px; color: #fff; margin-top: 16px;position: fixed; left: 8px; bottom: 8px; z-index: 10; background: rgba(0, 0, 0, 0.8); padding: 4px 8px;">Made with <img src="https://enzostvs-deepsite.hf.space/logo.svg" alt="DeepSite Logo" style="width: 16px; height: 16px; vertical-align: middle;display:inline-block;margin-right:3px;filter:brightness(0) invert(1);"><a href="https://enzostvs-deepsite.hf.space" style="color: #fff;text-decoration: underline;" target="_blank" >DeepSite</a> - 🧬 <a href="https://enzostvs-deepsite.hf.space?remix=Rwhehhehe/teste-1-1" style="color: #fff;text-decoration: underline;" target="_blank" >Remix</a></p></body>
</html>