- 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>
216 lines
9.9 KiB
HTML
216 lines
9.9 KiB
HTML
<!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> |