215 lines
No EOL
11 KiB
Twig
215 lines
No EOL
11 KiB
Twig
{% extends 'base.html.twig' %}
|
|
|
|
{% block title %}Pages Wiki non disponibles en français{% endblock %}
|
|
|
|
{% block body %}
|
|
<div class="container mt-4">
|
|
{% include 'admin/_wiki_navigation.html.twig' %}
|
|
|
|
<h1>Pages Wiki non disponibles en français</h1>
|
|
<p class="lead">Liste des pages du wiki OSM qui n'ont pas de traduction française, groupées par langue d'origine.</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 %}
|
|
|
|
<div class="card mb-4">
|
|
<div class="card-header">
|
|
<h2>Statistiques</h2>
|
|
</div>
|
|
<div class="card-body">
|
|
<div class="row">
|
|
<div class="col-md-4">
|
|
<div class="card text-white bg-primary mb-3">
|
|
<div class="card-body">
|
|
<h5 class="card-title">Total des pages</h5>
|
|
<p class="card-text display-4">{{ all_pages|length }}</p>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
<div class="col-md-4">
|
|
<div class="card text-white bg-success mb-3">
|
|
<div class="card-body">
|
|
<h5 class="card-title">Pages en anglais</h5>
|
|
<p class="card-text display-4">{{ grouped_pages['En']|default([])|length }}</p>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
<div class="col-md-4">
|
|
<div class="card text-white bg-info mb-3">
|
|
<div class="card-body">
|
|
<h5 class="card-title">Langues différentes</h5>
|
|
<p class="card-text display-4">{{ grouped_pages|length }}</p>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
|
|
<!-- Pages groupées par langue -->
|
|
<div class="accordion" id="languageAccordion">
|
|
{% for lang_prefix, pages in grouped_pages %}
|
|
<div class="accordion-item">
|
|
<h2 class="accordion-header" id="heading{{ lang_prefix }}">
|
|
<button class="accordion-button {% if lang_prefix != 'En' %}collapsed{% endif %}" type="button" data-bs-toggle="collapse" data-bs-target="#collapse{{ lang_prefix }}" aria-expanded="{{ lang_prefix == 'En' ? 'true' : 'false' }}" aria-controls="collapse{{ lang_prefix }}">
|
|
{% if lang_prefix == 'En' %}
|
|
<strong class="text-success">Pages en anglais ({{ pages|length }})</strong>
|
|
{% elseif lang_prefix == 'Other' %}
|
|
<strong>Autres pages ({{ pages|length }})</strong>
|
|
{% else %}
|
|
<strong>Pages en {{ lang_prefix }} ({{ pages|length }})</strong>
|
|
{% endif %}
|
|
</button>
|
|
</h2>
|
|
<div id="collapse{{ lang_prefix }}" class="accordion-collapse collapse {% if lang_prefix == 'En' %}show{% endif %}" aria-labelledby="heading{{ lang_prefix }}" data-bs-parent="#languageAccordion">
|
|
<div class="accordion-body">
|
|
{% if lang_prefix == 'En' %}
|
|
<div class="mb-3">
|
|
<button id="copyEnglishTitlesBtn" class="btn btn-outline-primary">
|
|
<i class="bi bi-clipboard"></i> Copier les titres au format MediaWiki
|
|
</button>
|
|
<span id="copyStatus" class="ms-2 text-success" style="display: none;">
|
|
<i class="bi bi-check-circle"></i> Copié !
|
|
</span>
|
|
</div>
|
|
{% endif %}
|
|
<div class="table-responsive">
|
|
<table class="table table-striped table-hover">
|
|
<thead class="thead-dark">
|
|
<tr>
|
|
<th>Titre</th>
|
|
<th>Score de décrépitude</th>
|
|
<th>Actions</th>
|
|
</tr>
|
|
</thead>
|
|
<tbody>
|
|
{% for page in pages %}
|
|
<tr>
|
|
<td>
|
|
<div class="d-flex align-items-center">
|
|
{% if page.description_img_url is defined and page.description_img_url %}
|
|
<div class="me-3">
|
|
<img src="{{ page.description_img_url }}" alt="{{ page.title }}"
|
|
style="max-width: 80px; max-height: 60px; object-fit: contain;">
|
|
</div>
|
|
{% endif %}
|
|
<div>
|
|
<strong>{{ page.title }}</strong>
|
|
{% if page.is_english %}
|
|
<span class="badge bg-success">Priorité</span>
|
|
{% endif %}
|
|
</div>
|
|
</div>
|
|
</td>
|
|
<td>
|
|
{% if page.outdatedness_score is defined %}
|
|
<div class="progress" style="height: 20px;">
|
|
{% set score_class = page.outdatedness_score > 70 ? 'bg-danger' : (page.outdatedness_score > 40 ? 'bg-warning' : 'bg-success') %}
|
|
<div class="progress-bar {{ score_class }}" role="progressbar"
|
|
style="width: {{ page.outdatedness_score }}%;"
|
|
aria-valuenow="{{ page.outdatedness_score }}"
|
|
aria-valuemin="0"
|
|
aria-valuemax="100">
|
|
{{ page.outdatedness_score }}
|
|
</div>
|
|
</div>
|
|
{% else %}
|
|
<span class="text-muted">Non disponible</span>
|
|
{% endif %}
|
|
</td>
|
|
<td>
|
|
<div class="btn-group" role="group">
|
|
<a href="{{ page.url }}" target="_blank" class="btn btn-sm btn-outline-primary" title="Voir la page originale">
|
|
<i class="bi bi-eye"></i> Voir
|
|
</a>
|
|
{% set fr_url = page.url|replace({'/wiki/': '/wiki/FR:'}) %}
|
|
<a href="{{ fr_url }}" target="_blank" class="btn btn-sm btn-success" title="Créer la traduction française">
|
|
<i class="bi bi-plus-circle"></i> Traduire
|
|
</a>
|
|
</div>
|
|
</td>
|
|
</tr>
|
|
{% endfor %}
|
|
</tbody>
|
|
</table>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
{% endfor %}
|
|
</div>
|
|
|
|
<div class="card mt-4 mb-4">
|
|
<div class="card-header">
|
|
<h2>À propos des pages non disponibles en français</h2>
|
|
</div>
|
|
<div class="card-body">
|
|
<p>Ces pages sont des contenus du wiki OpenStreetMap qui n'ont pas encore été traduits en français.</p>
|
|
<p>Contribuer à la traduction de ces pages permet de :</p>
|
|
<ul>
|
|
<li>Rendre la documentation OSM plus accessible aux contributeurs francophones</li>
|
|
<li>Améliorer la qualité des contributions en français</li>
|
|
<li>Faciliter l'apprentissage et l'utilisation d'OpenStreetMap pour les nouveaux utilisateurs</li>
|
|
</ul>
|
|
<p><strong>Priorité aux pages anglaises :</strong> Les pages commençant par "En:" sont prioritaires car l'anglais est la langue principale du wiki OSM.</p>
|
|
</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 %}
|
|
|
|
{% block javascripts %}
|
|
{{ parent() }}
|
|
<script>
|
|
document.addEventListener('DOMContentLoaded', function() {
|
|
const copyButton = document.getElementById('copyEnglishTitlesBtn');
|
|
const copyStatus = document.getElementById('copyStatus');
|
|
|
|
if (copyButton) {
|
|
copyButton.addEventListener('click', function() {
|
|
// Get all English page titles from the table
|
|
const englishSection = document.getElementById('collapseEn');
|
|
const titleElements = englishSection.querySelectorAll('tbody tr td:first-child strong');
|
|
|
|
// Format titles in MediaWiki format
|
|
let mediawikiText = '';
|
|
const rows = englishSection.querySelectorAll('tbody tr');
|
|
|
|
rows.forEach(function(row) {
|
|
const title = row.querySelector('td:first-child strong').textContent.trim();
|
|
const imgElement = row.querySelector('td:first-child img');
|
|
|
|
if (imgElement) {
|
|
const imgSrc = imgElement.getAttribute('src');
|
|
mediawikiText += '* [[' + title + ']] - Image: ' + imgSrc + '\n';
|
|
} else {
|
|
mediawikiText += '* [[' + title + ']]\n';
|
|
}
|
|
});
|
|
|
|
// Copy to clipboard
|
|
navigator.clipboard.writeText(mediawikiText).then(function() {
|
|
// Show success message
|
|
copyStatus.style.display = 'inline';
|
|
|
|
// Hide success message after 3 seconds
|
|
setTimeout(function() {
|
|
copyStatus.style.display = 'none';
|
|
}, 3000);
|
|
}).catch(function(err) {
|
|
console.error('Erreur lors de la copie: ', err);
|
|
alert('Erreur lors de la copie dans le presse-papier. Veuillez réessayer.');
|
|
});
|
|
});
|
|
}
|
|
});
|
|
</script>
|
|
{% endblock %} |