osm-labo/templates/admin/wiki_osm_fr_groups.html.twig
2025-08-22 18:19:20 +02:00

238 lines
No EOL
13 KiB
Twig

{% extends 'base.html.twig' %}
{% block title %}Groupes OSM-FR{% endblock %}
{% block body %}
<div class="container mt-4">
{% include 'admin/_wiki_navigation.html.twig' %}
<h1>Groupes OSM-FR</h1>
<p class="lead">Liste des groupes de travail et des groupes locaux d'OpenStreetMap France.</p>
{% if last_updated %}
<div class="alert alert-info">
<i class="bi bi-info-circle"></i> Dernière mise à jour : {{ last_updated|date('d/m/Y H:i') }}
</div>
{% endif %}
<!-- Carte uMap des groupes locaux -->
<div class="card mb-4">
<div class="card-header bg-primary text-white">
<h2>
<a href="{{ umap_url }}">
Carte des groupes locaux
</a>
</h2>
</div>
<div class="card-body">
<div class="ratio ratio-16x9">
<iframe src="{{ umap_url }}" frameborder="0"></iframe>
</div>
<div class="mt-3">
<a href="{{ umap_url }}" target="_blank" class="btn btn-outline-primary">
<i class="bi bi-box-arrow-up-right"></i> Voir la carte en plein écran
</a>
</div>
</div>
</div>
<!-- Groupes de travail -->
<div class="card mb-4">
<div class="card-header bg-success text-white">
<h2>Groupes de travail</h2>
</div>
<div class="card-body">
{% if working_groups|length > 0 %}
<div class="accordion" id="workingGroupsAccordion">
{% for category, groups in working_groups %}
<div class="accordion-item">
<h2 class="accordion-header" id="heading{{ loop.index }}">
<button class="accordion-button {% if not loop.first %}collapsed{% endif %}"
type="button" data-bs-toggle="collapse"
data-bs-target="#collapse{{ loop.index }}"
aria-expanded="{{ loop.first ? 'true' : 'false' }}"
aria-controls="collapse{{ loop.index }}">
{{ category }} ({{ groups|length }})
</button>
</h2>
<div id="collapse{{ loop.index }}"
class="accordion-collapse collapse {% if loop.first %}show{% endif %}"
aria-labelledby="heading{{ loop.index }}" data-bs-parent="#workingGroupsAccordion">
<div class="accordion-body">
<div class="list-group">
{% for group in groups %}
<a href="{{ group.url }}" target="_blank"
class="list-group-item list-group-item-action">
<div class="d-flex w-100 justify-content-between">
<h5 class="mb-1">{{ group.name }}</h5>
</div>
{% if group.description %}
<p class="mb-1">{{ group.description }}</p>
{% endif %}
<small class="text-muted">
<i class="bi bi-box-arrow-up-right"></i> Voir sur le wiki
</small>
</a>
{% endfor %}
</div>
</div>
</div>
</div>
{% endfor %}
</div>
{% else %}
<div class="alert alert-info">
<p><i class="bi bi-info-circle"></i> Aucun groupe de travail n'a été trouvé.</p>
</div>
{% endif %}
</div>
</div>
<!-- Groupes locaux -->
<div class="card mb-4">
<div class="card-header bg-info text-white">
<h2>Groupes locaux</h2>
</div>
<div class="card-body">
{% if local_groups|length > 0 %}
<!-- Filtres -->
<div class="mb-4">
<div class="btn-group" role="group" aria-label="Filtres">
<button type="button" class="btn btn-outline-primary active filter-btn" data-filter="all">Tous</button>
<button type="button" class="btn btn-outline-primary filter-btn" data-filter="wiki">Wiki</button>
<button type="button" class="btn btn-outline-primary filter-btn" data-filter="framacalc">Framacalc</button>
<button type="button" class="btn btn-outline-primary filter-btn" data-filter="has-wiki">Avec page wiki</button>
<button type="button" class="btn btn-outline-primary filter-btn" data-filter="no-wiki">Sans page wiki</button>
</div>
</div>
<div class="row row-cols-1 row-cols-md-2 row-cols-lg-3 g-4">
{% for group in local_groups %}
{% set source = group.source|default('wiki') %}
{% set has_wiki = group.has_wiki_page|default(true) %}
{% set filter_classes = source ~ ' ' ~ (has_wiki ? 'has-wiki' : 'no-wiki') %}
<div class="col group-item {{ filter_classes }}">
<div class="card h-100 {% if source == 'framacalc' and not has_wiki %}border-danger{% endif %}">
{% if source == 'framacalc' %}
<div class="card-header bg-light">
<span class="badge bg-secondary">Framacalc</span>
{% if has_wiki %}
<span class="badge bg-success">Page wiki</span>
{% else %}
<span class="badge bg-danger">Pas de page wiki</span>
{% endif %}
</div>
{% endif %}
<div class="card-body">
<h5 class="card-title">{{ group.name }}</h5>
{% if group.description %}
<p class="card-text">{{ group.description }}</p>
{% endif %}
{% if source == 'framacalc' and group.contact %}
<p class="card-text"><small class="text-muted">Contact: {{ group.contact }}</small></p>
{% endif %}
{% if source == 'framacalc' and group.website %}
<p class="card-text">
<a href="{{ group.website }}" target="_blank" class="btn btn-sm btn-outline-secondary">
<i class="bi bi-globe"></i> Site web
</a>
</p>
{% endif %}
</div>
<div class="card-footer">
{% if source == 'wiki' or has_wiki %}
<a href="{{ group.url }}" target="_blank"
class="btn btn-sm btn-outline-primary">
<i class="bi bi-box-arrow-up-right"></i> Voir sur le wiki
</a>
{% else %}
<a href="https://wiki.openstreetmap.org/wiki/Special:Search?search={{ group.name|url_encode }}"
target="_blank" class="btn btn-sm btn-outline-danger">
<i class="bi bi-search"></i> Rechercher sur le wiki
</a>
{% endif %}
</div>
</div>
</div>
{% endfor %}
</div>
<!-- JavaScript pour les filtres -->
<script>
document.addEventListener('DOMContentLoaded', function() {
const filterButtons = document.querySelectorAll('.filter-btn');
const groupItems = document.querySelectorAll('.group-item');
filterButtons.forEach(button => {
button.addEventListener('click', function() {
// Remove active class from all buttons
filterButtons.forEach(btn => btn.classList.remove('active'));
// Add active class to clicked button
this.classList.add('active');
const filter = this.getAttribute('data-filter');
// Show/hide items based on filter
groupItems.forEach(item => {
if (filter === 'all') {
item.style.display = 'block';
} else {
if (item.classList.contains(filter)) {
item.style.display = 'block';
} else {
item.style.display = 'none';
}
}
});
});
});
});
</script>
{% else %}
<div class="alert alert-info">
<p><i class="bi bi-info-circle"></i> Aucun groupe local n'a été trouvé.</p>
</div>
{% endif %}
</div>
</div>
<div class="card mb-4">
<div class="card-header">
<h2>À propos des groupes OSM-FR</h2>
</div>
<div class="card-body">
<h5>Groupes de travail</h5>
<p>Les groupes de travail sont des équipes thématiques qui se concentrent sur des aspects spécifiques
d'OpenStreetMap en France. Ils permettent de coordonner les efforts sur des sujets particuliers
comme l'import de données, la cartographie des transports, etc.</p>
<h5>Groupes locaux</h5>
<p>Les groupes locaux sont des communautés géographiques de contributeurs OpenStreetMap. Ils organisent
des rencontres, des ateliers de cartographie et d'autres événements pour promouvoir OSM dans leur
région.</p>
<div class="d-grid gap-2 col-md-6 mx-auto mt-3">
<a href="https://wiki.openstreetmap.org/wiki/France/OSM-FR/Groupes_de_travail" target="_blank"
class="btn btn-outline-success">
<i class="bi bi-box-arrow-up-right"></i> Voir tous les groupes de travail sur le wiki
</a>
<a href="https://wiki.openstreetmap.org/wiki/France/OSM-FR#Groupes_locaux" target="_blank"
class="btn btn-outline-info">
<i class="bi bi-box-arrow-up-right"></i> Voir tous les groupes locaux sur le wiki
</a>
</div>
</div>
</div>
<div class="mt-3">
<a href="{{ path('app_admin_wiki') }}" class="btn btn-secondary">
<i class="bi bi-arrow-left"></i> Retour à la liste des pages wiki
</a>
</div>
</div>
{% endblock %}