grok_test / templates /index.html
broadfield-dev's picture
Update templates/index.html
c3cc77a verified
raw
history blame
4.76 kB
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>News Feed Hub</title>
<style>
body {
font-family: 'Arial', sans-serif;
margin: 0;
padding: 20px;
background-color: #f4f4f9;
color: #333;
}
h1 {
text-align: center;
color: #2c3e50;
}
.search-container {
text-align: center;
margin: 20px 0;
}
.search-bar {
width: 50%;
padding: 12px;
font-size: 16px;
border: 2px solid #3498db;
border-radius: 25px;
box-shadow: 0 2px 5px rgba(0,0,0,0.1);
outline: none;
transition: border-color 0.3s;
}
.search-bar:focus {
border-color: #2980b9;
}
.category-section {
margin: 30px 0;
}
.category-title {
background-color: #3498db;
color: white;
padding: 10px;
border-radius: 5px;
font-size: 1.4em;
text-align: center;
}
.tiles {
display: flex;
flex-wrap: wrap;
gap: 20px;
justify-content: center;
}
.article-tile {
background-color: white;
width: 300px;
padding: 15px;
border-radius: 8px;
box-shadow: 0 4px 8px rgba(0,0,0,0.1);
transition: transform 0.2s;
overflow: hidden;
}
.article-tile:hover {
transform: scale(1.05);
}
.article-tile img {
width: 100%;
height: 150px;
object-fit: cover;
border-radius: 5px;
}
.title a {
font-size: 1.1em;
color: #2c3e50;
text-decoration: none;
display: block;
margin: 10px 0;
}
.title a:hover {
color: #3498db;
}
.summary {
color: #555;
font-size: 0.9em;
margin: 5px 0;
}
.sentiment {
font-style: italic;
color: #7f8c8d;
font-size: 0.85em;
}
.published {
font-size: 0.8em;
color: #95a5a6;
}
#loading {
display: none;
position: fixed;
top: 0;
left: 0;
width: 100%;
height: 100%;
background: rgba(0,0,0,0.5);
z-index: 1000;
}
.loader {
position: absolute;
top: 50%;
left: 50%;
transform: translate(-50%, -50%);
width: 50px;
height: 50px;
border: 5px solid #f3f3f3;
border-top: 5px solid #3498db;
border-radius: 50%;
animation: spin 1s linear infinite;
}
@keyframes spin {
0% { transform: translate(-50%, -50%) rotate(0deg); }
100% { transform: translate(-50%, -50%) rotate(360deg); }
}
</style>
<script>
document.addEventListener('DOMContentLoaded', () => {
const form = document.querySelector('form');
const loading = document.getElementById('loading');
form.addEventListener('submit', () => {
loading.style.display = 'block';
});
window.addEventListener('load', () => {
loading.style.display = 'none';
});
});
</script>
</head>
<body>
<div id="loading"><div class="loader"></div></div>
<h1>News Feed Hub</h1>
<div class="search-container">
<form method="POST">
<input type="text" name="search" class="search-bar" placeholder="Search news semantically...">
</form>
</div>
{% for category, articles in categorized_articles.items() %}
<div class="category-section">
<div class="category-title">{{ category }}</div>
<div class="tiles">
{% for article in articles %}
<div class="article-tile">
<img src="{{ article.image }}" alt="Article Image">
<div class="title"><a href="{{ article.link }}" target="_blank">{{ article.title }}</a></div>
<div class="summary">{{ article.summary }}</div>
<div class="sentiment">Sentiment: {{ article.sentiment }}</div>
<div class="published">Published: {{ article.published }}</div>
</div>
{% endfor %}
</div>
</div>
{% endfor %}
</body>
</html>