wiki illustrations et team osm fr

This commit is contained in:
Tykayn 2025-08-31 23:15:03 +02:00 committed by tykayn
parent d7a54458dc
commit 77ad76cc7e
13 changed files with 78859 additions and 13414 deletions

View file

@ -18,6 +18,7 @@
<table class="table table-striped table-hover">
<thead class="thead-dark">
<tr>
<th rowspan="2">Image</th>
<th rowspan="2">Clé</th>
<th colspan="4" class="text-center">Différences FR vs EN</th>
<th rowspan="2" class="text-center">Score de<br>décrépitude</th>
@ -34,6 +35,11 @@
{% for key, languages in wiki_pages %}
{% if languages['en'] is defined and languages['fr'] is defined %}
<tr>
<td>
<img src="{{ languages['en'].description_img_url }}" alt="image" style="height: 2rem;">
</td>
<td>
<strong>{{ key }}</strong>
</td>
@ -147,7 +153,8 @@
<i class="bi bi-flag-fill"></i> EN
</a>
<a href="{{ path('app_admin_wiki_create_french', {'key': key}) }}"
class="btn btn-sm btn-outline-primary" title="Créer une traduction française">
class="btn btn-sm btn-outline-primary"
title="Créer une traduction française">
<i class="bi bi-translate"></i> créer FR
</a>
{# <a href="{{ path('app_admin_wiki_compare', {'key': key}) }}" #}
@ -187,43 +194,43 @@
{{ parent() }}
<script src="https://cdn.jsdelivr.net/npm/chart.js"></script>
<script>
document.addEventListener('DOMContentLoaded', function() {
document.addEventListener('DOMContentLoaded', function () {
// Collect data from the table
const labels = [];
const scores = [];
const colors = [];
{% for key, languages in wiki_pages %}
{% if languages['en'] is defined and languages['fr'] is defined %}
labels.push("{{ key }}");
{% set score = languages['en'].staleness_score|default(0) %}
scores.push({{ score }});
// Set color based on score
{% if score > 50 %}
colors.push('rgba(220, 53, 69, 0.7)'); // danger
{% elseif score > 20 %}
colors.push('rgba(255, 193, 7, 0.7)'); // warning
{% else %}
colors.push('rgba(25, 135, 84, 0.7)'); // success
{% endif %}
{% endif %}
{% if languages['en'] is defined and languages['fr'] is defined %}
labels.push("{{ key }}");
{% set score = languages['en'].staleness_score|default(0) %}
scores.push({{ score }});
// Set color based on score
{% if score > 50 %}
colors.push('rgba(220, 53, 69, 0.7)'); // danger
{% elseif score > 20 %}
colors.push('rgba(255, 193, 7, 0.7)'); // warning
{% else %}
colors.push('rgba(25, 135, 84, 0.7)'); // success
{% endif %}
{% endif %}
{% endfor %}
// Sort data by score (descending)
const indices = Array.from(Array(scores.length).keys())
.sort((a, b) => scores[b] - scores[a]);
const sortedLabels = indices.map(i => labels[i]);
const sortedScores = indices.map(i => scores[i]);
const sortedColors = indices.map(i => colors[i]);
// Limit to top 20 pages for readability
const displayLimit = 20;
const displayLabels = sortedLabels.slice(0, displayLimit);
const displayScores = sortedScores.slice(0, displayLimit);
const displayColors = sortedColors.slice(0, displayLimit);
// Create the chart
const ctx = document.getElementById('decrepitudeChart').getContext('2d');
new Chart(ctx, {
@ -247,7 +254,7 @@
},
tooltip: {
callbacks: {
label: function(context) {
label: function (context) {
return `Score: ${context.raw}`;
}
}

View file

@ -58,6 +58,37 @@
<a href="https://wiki.openstreetmap.org/Key:{{ key }}">en</a>
</h1>
<p class="lead">Comparaison détaillée des pages wiki en français et en anglais pour la clé OSM "{{ key }}".</p>
<div class="row mb-4">
<div class="col-md-6">
<div class="card">
<div class="card-header bg-primary text-white">
<h3>Page anglaise</h3>
</div>
<div class="card-body text-center">
{% if en_page.description_img_url is defined and en_page.description_img_url %}
<img src="{{ en_page.description_img_url }}" alt="{{ key }}" class="img-fluid" style="max-height: 200px; object-fit: contain;">
{% else %}
<div class="alert alert-secondary">Pas d'image d'illustration</div>
{% endif %}
</div>
</div>
</div>
<div class="col-md-6">
<div class="card">
<div class="card-header bg-info text-white">
<h3>Page française</h3>
</div>
<div class="card-body text-center">
{% if fr_page is defined and fr_page is not null and fr_page.description_img_url is defined and fr_page.description_img_url %}
<img src="{{ fr_page.description_img_url }}" alt="{{ key }}" class="img-fluid" style="max-height: 200px; object-fit: contain;">
{% else %}
<div class="alert alert-secondary">Pas d'image d'illustration</div>
{% endif %}
</div>
</div>
</div>
</div>
{% if fr_page is defined and fr_page is not null %}
@ -212,88 +243,87 @@
</div>
{% endif %}
{# {% if detailed_comparison and detailed_comparison.media_comparison %} #}
{# <div class="card mb-4"> #}
{# <div class="card-header"> #}
{# <h2>Comparaison des médias</h2> #}
{# </div> #}
{# <div class="card-body"> #}
{# <div class="row"> #}
{# <div class="col-md-6"> #}
{# <div class="card h-100"> #}
{# <div class="card-header bg-primary text-white"> #}
{# <h3>Images en anglais</h3> #}
{# <span class="badge bg-light text-dark">{{ en_page.media_count|default(0) }} images</span> #}
{# </div> #}
{# <div class="card-body"> #}
{% if detailed_comparison and detailed_comparison.media_comparison %}
<div class="card mb-4">
<div class="card-header">
<h2>Comparaison des médias</h2>
</div>
<div class="card-body">
<div class="row">
<div class="col-md-6">
<div class="card h-100">
<div class="card-header bg-primary text-white">
<h3>Images en anglais</h3>
<span class="badge bg-light text-dark">{{ en_page.media_count|default(0) }} images</span>
</div>
<div class="card-body">
<h4>Images uniquement en anglais
({{ detailed_comparison.media_comparison.en_only|length }} uniques
sur {{ detailed_comparison.media_comparison.en_only_count }} total)</h4>
<div class="row">
{% for media in detailed_comparison.media_comparison.en_only %}
<div class="col-12 mb-2">
<div class="card border-warning">
<img src="{{ media.src }}" class="card-img-top"
alt="{{ media.alt }}"
style="max-height: 150px; object-fit: contain;">
<div class="card-body p-2">
<p class="card-text small">{{ media.alt }}</p>
</div>
</div>
</div>
{% endfor %}
</div>
</div>
</div>
</div>
<div class="col-md-6">
<div class="card h-100">
<div class="card-header bg-info text-white">
<h3>Images en français</h3>
<span class="badge bg-light text-dark">{{ fr_page.media_count|default(0) }} images</span>
</div>
<div class="card-body">
<h4>Images communes ({{ detailed_comparison.media_comparison.common|length }})</h4>
<div class="row mb-3">
{% for media in detailed_comparison.media_comparison.common %}
<div class="col-md-6 mb-2">
<div class="card">
<img src="{{ media.fr.src }}" class="card-img-top"
alt="{{ media.fr.alt }}"
style="max-height: 150px; object-fit: contain;">
<div class="card-body p-2">
<p class="card-text small">{{ media.fr.alt }}</p>
</div>
</div>
</div>
{% endfor %}
</div>
{# <h4>Images uniquement en anglais #}
{# ({{ detailed_comparison.media_comparison.en_only|length }} uniques #}
{# sur {{ detailed_comparison.media_comparison.en_only_count }} total)</h4> #}
{# <div class="row"> #}
{# {% for media in detailed_comparison.media_comparison.en_only %} #}
{# <div class="col-12 mb-2"> #}
{# <div class="card border-warning"> #}
{# <img src="{{ media.src }}" class="card-img-top" #}
{# alt="{{ media.alt }}" #}
{# style="max-height: 150px; object-fit: contain;"> #}
{# <div class="card-body p-2"> #}
{# <p class="card-text small">{{ media.alt }}</p> #}
{# </div> #}
{# </div> #}
{# </div> #}
{# {% endfor %} #}
{# </div> #}
{# </div> #}
{# </div> #}
{# </div> #}
{# <div class="col-md-6"> #}
{# <div class="card h-100"> #}
{# <div class="card-header bg-info text-white"> #}
{# <h3>Images en français</h3> #}
{# <span class="badge bg-light text-dark">{{ fr_page.media_count|default(0) }} images</span> #}
{# </div> #}
{# <div class="card-body"> #}
{# <h4>Images communes ({{ detailed_comparison.media_comparison.common|length }})</h4> #}
{# <div class="row mb-3"> #}
{# {% for media in detailed_comparison.media_comparison.common %} #}
{# <div class="col-md-6 mb-2"> #}
{# <div class="card"> #}
{# <img src="{{ media.fr.src }}" class="card-img-top" #}
{# alt="{{ media.fr.alt }}" #}
{# style="max-height: 150px; object-fit: contain;"> #}
{# <div class="card-body p-2"> #}
{# <p class="card-text small">{{ media.fr.alt }}</p> #}
{# </div> #}
{# </div> #}
{# </div> #}
{# {% endfor %} #}
{# </div> #}
{# <h4>Images uniquement en français #}
{# ({{ detailed_comparison.media_comparison.fr_only|length }} uniques #}
{# sur {{ detailed_comparison.media_comparison.fr_only_count }} total)</h4> #}
{# <div class="row"> #}
{# {% for media in detailed_comparison.media_comparison.fr_only %} #}
{# <div class="col-12 mb-2"> #}
{# <div class="card border-info"> #}
{# <img src="{{ media.src }}" class="card-img-top" #}
{# alt="{{ media.alt }}" #}
{# style="max-height: 150px; object-fit: contain;"> #}
{# <div class="card-body p-2"> #}
{# <p class="card-text small">{{ media.alt }}</p> #}
{# </div> #}
{# </div> #}
{# </div> #}
{# {% endfor %} #}
{# </div> #}
{# </div> #}
{# </div> #}
{# </div> #}
{# </div> #}
{# </div> #}
{# </div> #}
{# {% endif %} #}
<h4>Images uniquement en français
({{ detailed_comparison.media_comparison.fr_only|length }} uniques
sur {{ detailed_comparison.media_comparison.fr_only_count }} total)</h4>
<div class="row">
{% for media in detailed_comparison.media_comparison.fr_only %}
<div class="col-12 mb-2">
<div class="card border-info">
<img src="{{ media.src }}" class="card-img-top"
alt="{{ media.alt }}"
style="max-height: 150px; object-fit: contain;">
<div class="card-body p-2">
<p class="card-text small">{{ media.alt }}</p>
</div>
</div>
</div>
{% endfor %}
</div>
</div>
</div>
</div>
</div>
</div>
</div>
{% endif %}
{# {% if detailed_comparison and detailed_comparison.link_comparison %} #}
{# <div class="card mb-4"> #}

View file

@ -89,10 +89,20 @@
{% for page in pages %}
<tr>
<td>
<strong>{{ page.title }}</strong>
{% if page.is_english %}
<span class="badge bg-success">Priorité</span>
{% endif %}
<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 %}
@ -171,9 +181,18 @@ document.addEventListener('DOMContentLoaded', function() {
// Format titles in MediaWiki format
let mediawikiText = '';
titleElements.forEach(function(element) {
const title = element.textContent.trim();
mediawikiText += '* [[' + title + ']]\n';
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