Initial commit: Organize project structure
- Create organized directory structure (src/, docs/, data/, static/, templates/) - Add comprehensive .gitignore for Python projects - Move Python source files to src/ - Move documentation files to docs/ with project/ and user/ subdirectories - Move database files to data/ - Update all database path references in Python code - Maintain Flask static/ and templates/ directories 🤖 Generated with [Claude Code](https://claude.ai/code) Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
216
templates/index.html
Normal file
216
templates/index.html
Normal file
@@ -0,0 +1,216 @@
|
||||
<!DOCTYPE html>
|
||||
<html lang="ro">
|
||||
<head>
|
||||
<meta charset="UTF-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||
<title>Resurse educaționale - INDEX-SISTEM-JOCURI</title>
|
||||
<link rel="stylesheet" href="{{ url_for('static', filename='style.css') }}">
|
||||
</head>
|
||||
<body>
|
||||
<div class="container">
|
||||
<!-- Header with dropdown filters - exactly matching mockup -->
|
||||
<div class="filters-header">
|
||||
<form method="POST" action="{{ url_for('search') }}" id="searchForm">
|
||||
<div class="filters-row">
|
||||
<!-- Row 1: Valori, Durată, Tematică, Domeniu -->
|
||||
<select name="valori" class="filter-select">
|
||||
<option value="">– Valori –</option>
|
||||
{% for option in filters.get('valori', []) %}
|
||||
<option value="{{ option }}">{{ option }}</option>
|
||||
{% endfor %}
|
||||
</select>
|
||||
|
||||
<select name="durata" class="filter-select">
|
||||
<option value="">– Durată –</option>
|
||||
{% for option in filters.get('durata', []) %}
|
||||
<option value="{{ option }}">{{ option }}</option>
|
||||
{% endfor %}
|
||||
</select>
|
||||
|
||||
<select name="tematica" class="filter-select">
|
||||
<option value="">– Tematică –</option>
|
||||
{% for option in filters.get('tematica', []) %}
|
||||
<option value="{{ option }}">{{ option }}</option>
|
||||
{% endfor %}
|
||||
</select>
|
||||
|
||||
<select name="domeniu" class="filter-select">
|
||||
<option value="">– Domeniu –</option>
|
||||
{% for option in filters.get('domeniu', []) %}
|
||||
<option value="{{ option }}">{{ option }}</option>
|
||||
{% endfor %}
|
||||
</select>
|
||||
</div>
|
||||
|
||||
<div class="filters-row">
|
||||
<!-- Row 2: Metodă, Materiale necesare, Numărul de participanți -->
|
||||
<select name="metoda" class="filter-select">
|
||||
<option value="">– Metodă –</option>
|
||||
{% for option in filters.get('metoda', []) %}
|
||||
<option value="{{ option }}">{{ option }}</option>
|
||||
{% endfor %}
|
||||
</select>
|
||||
|
||||
<select name="materiale" class="filter-select">
|
||||
<option value="">– Materiale necesare –</option>
|
||||
{% for option in filters.get('materiale', []) %}
|
||||
<option value="{{ option }}">{{ option }}</option>
|
||||
{% endfor %}
|
||||
</select>
|
||||
|
||||
<select name="participanti" class="filter-select">
|
||||
<option value="">– Numărul de participanți –</option>
|
||||
{% for option in filters.get('participanti', []) %}
|
||||
<option value="{{ option }}">{{ option }}</option>
|
||||
{% endfor %}
|
||||
</select>
|
||||
</div>
|
||||
|
||||
<div class="filters-row">
|
||||
<!-- Row 3: Competențe Europene, Competențe Impactate, Vârsta -->
|
||||
<select name="competente_fizice" class="filter-select">
|
||||
<option value="">– Competențe Europene –</option>
|
||||
{% for option in filters.get('competente_fizice', []) %}
|
||||
<option value="{{ option }}">{{ option }}</option>
|
||||
{% endfor %}
|
||||
</select>
|
||||
|
||||
<select name="competente_impactate" class="filter-select">
|
||||
<option value="">– Competențe Impactate –</option>
|
||||
{% for option in filters.get('competente_impactate', []) %}
|
||||
<option value="{{ option }}">{{ option }}</option>
|
||||
{% endfor %}
|
||||
</select>
|
||||
|
||||
<select name="varsta" class="filter-select">
|
||||
<option value="">– Vârsta –</option>
|
||||
{% for option in filters.get('varsta', []) %}
|
||||
<option value="{{ option }}">{{ option }}</option>
|
||||
{% endfor %}
|
||||
</select>
|
||||
</div>
|
||||
|
||||
<!-- Search box and buttons section -->
|
||||
<div class="search-section">
|
||||
<input type="text" name="search_query" class="search-input"
|
||||
placeholder="cuvinte cheie" value="{{ request.form.get('search_query', '') }}">
|
||||
|
||||
<button type="submit" class="btn-aplica">Aplică</button>
|
||||
<button type="button" class="btn-reseteaza" onclick="resetForm()">Resetează</button>
|
||||
</div>
|
||||
</form>
|
||||
</div>
|
||||
|
||||
<!-- Branding section -->
|
||||
<div class="branding">
|
||||
<div class="initiative">
|
||||
<p>Inițiativa:</p>
|
||||
<div class="logo-container">
|
||||
<img src="{{ url_for('static', filename='logo-noi-orizonturi.png') }}"
|
||||
alt="Noi Orizonturi" class="brand-logo"
|
||||
onerror="this.style.display='none'; this.nextElementSibling.style.display='block';">
|
||||
<span class="brand-text" style="display:none;">Noi Orizonturi</span>
|
||||
</div>
|
||||
</div>
|
||||
<div class="support">
|
||||
<p>Sprijinită de:</p>
|
||||
<div class="logo-container">
|
||||
<img src="{{ url_for('static', filename='logo-telekom.png') }}"
|
||||
alt="Telekom" class="brand-logo"
|
||||
onerror="this.style.display='none'; this.nextElementSibling.style.display='block';">
|
||||
<span class="brand-text" style="display:none;">Telekom</span>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- Welcome section -->
|
||||
<div class="welcome-section">
|
||||
<h1>Resurse educaționale</h1>
|
||||
<p class="subtitle">
|
||||
Sistemul de indexare și căutare pentru activități educaționale
|
||||
</p>
|
||||
<p class="description">
|
||||
Caută prin colecția de <strong>2000+ activități</strong> din <strong>200+ fișiere</strong>
|
||||
folosind filtrele de mai sus sau introdu cuvinte cheie în caseta de căutare.
|
||||
</p>
|
||||
|
||||
<!-- Statistics -->
|
||||
<div class="stats-container">
|
||||
<div class="stat-item">
|
||||
<span class="stat-number" id="total-activities">-</span>
|
||||
<span class="stat-label">Activități indexate</span>
|
||||
</div>
|
||||
<div class="stat-item">
|
||||
<span class="stat-number" id="total-files">-</span>
|
||||
<span class="stat-label">Fișiere procesate</span>
|
||||
</div>
|
||||
<div class="stat-item">
|
||||
<span class="stat-number" id="categories-count">-</span>
|
||||
<span class="stat-label">Categorii disponibile</span>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- Quick start buttons -->
|
||||
<div class="quick-start">
|
||||
<h3>🚀 Start rapid:</h3>
|
||||
<div class="quick-buttons">
|
||||
<button onclick="quickSearch('team building')" class="quick-btn">Team Building</button>
|
||||
<button onclick="quickSearch('jocuri cercetășești')" class="quick-btn">Jocuri Scout</button>
|
||||
<button onclick="quickSearch('8-11 ani')" class="quick-btn">Cubs (8-11 ani)</button>
|
||||
<button onclick="quickSearch('fără materiale')" class="quick-btn">Fără materiale</button>
|
||||
<button onclick="quickSearch('orientare')" class="quick-btn">Orientare</button>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- Footer -->
|
||||
<footer class="footer">
|
||||
<p>
|
||||
🎮 <strong>INDEX-SISTEM-JOCURI v1.0</strong> |
|
||||
Dezvoltat cu Claude AI |
|
||||
<a href="/api/statistics" target="_blank">📊 Statistici</a>
|
||||
</p>
|
||||
<p class="footer-note">
|
||||
Pentru probleme tehnice sau sugestii, contactați administratorul sistemului.
|
||||
</p>
|
||||
</footer>
|
||||
</div>
|
||||
|
||||
<script>
|
||||
// Load statistics on page load
|
||||
async function loadStats() {
|
||||
try {
|
||||
const response = await fetch('/api/statistics');
|
||||
const stats = await response.json();
|
||||
|
||||
document.getElementById('total-activities').textContent = stats.total_activities || '0';
|
||||
document.getElementById('categories-count').textContent = Object.keys(stats.categories || {}).length;
|
||||
|
||||
// Estimate total files from categories
|
||||
const totalFiles = Object.values(stats.file_statistics || [])
|
||||
.reduce((sum, stat) => sum + (stat.files_processed || 0), 0);
|
||||
document.getElementById('total-files').textContent = totalFiles || '0';
|
||||
|
||||
} catch (error) {
|
||||
console.error('Error loading statistics:', error);
|
||||
}
|
||||
}
|
||||
|
||||
function resetForm() {
|
||||
document.getElementById('searchForm').reset();
|
||||
// Also redirect to clear URL parameters
|
||||
window.location.href = '{{ url_for("index") }}';
|
||||
}
|
||||
|
||||
function quickSearch(query) {
|
||||
document.querySelector('input[name="search_query"]').value = query;
|
||||
document.getElementById('searchForm').submit();
|
||||
}
|
||||
|
||||
// Initialize page
|
||||
document.addEventListener('DOMContentLoaded', function() {
|
||||
loadStats();
|
||||
});
|
||||
</script>
|
||||
</body>
|
||||
</html>
|
||||
Reference in New Issue
Block a user