diff --git a/assets/app.js b/assets/app.js index d93b098..d7cda98 100644 --- a/assets/app.js +++ b/assets/app.js @@ -10,19 +10,14 @@ import './styles/app.css'; import './utils.js'; import './opening_hours.js'; import './josm.js'; - +import './edit.js'; // Attendre le chargement du DOM document.addEventListener('DOMContentLoaded', () => { console.log('DOMContentLoaded'); - - - - - updateMapHeightForLargeScreens() - + const randombg = genererCouleurPastel(); // Appliquer la couleur au body document.body.style.backgroundColor = randombg; @@ -56,61 +51,6 @@ document.addEventListener('DOMContentLoaded', () => { openingHoursFormManager.init(); - // lister les changesets de l'utilisateur osm-commerces - async function listChangesets() { - // const changesets = await fetch('https://api.openstreetmap.org/api/0.6/changesets?display_name=osm-commerce-fr'); - // Ajouter le header Accept pour demander du JSON - const options = { - headers: { - 'Accept': 'application/json' - } - }; - const changesets = await fetch('https://api.openstreetmap.org/api/0.6/changesets?display_name=osm-commerce-fr', options); - const data = await changesets.json(); - console.log(data.changesets.length); - - // Grouper les changesets par période - const now = new Date(); - const last24h = new Date(now - 24 * 60 * 60 * 1000); - const last7days = new Date(now - 7 * 24 * 60 * 60 * 1000); - const last30days = new Date(now - 30 * 24 * 60 * 60 * 1000); - - const stats = { - last24h: 0, - last7days: 0, - last30days: 0 - }; - - data.changesets.forEach(changeset => { - const changesetDate = new Date(changeset.closed_at); - - if (changesetDate >= last24h) { - stats.last24h++; - } - if (changesetDate >= last7days) { - stats.last7days++; - } - if (changesetDate >= last30days) { - stats.last30days++; - } - }); - - // Afficher les statistiques - const historyDiv = document.getElementById('userChangesHistory'); - if (historyDiv) { - historyDiv.innerHTML = ` -
-

Changesets créés :

-
-
Dernières 24h :
${stats.last24h}
-
7 derniers jours :
${stats.last7days}
-
30 derniers jours :
${stats.last30days}
-
-
- `; - } - } - // Vérifier si l'élément avec l'ID 'userChangesHistory' existe avant d'appeler la fonction if (document.getElementById('userChangesHistory')) { listChangesets(); @@ -118,32 +58,6 @@ document.addEventListener('DOMContentLoaded', () => { console.log('userChangesHistory non trouvé'); } - - - /** - * mettre à jour la barre de progression - * pour le formulaire de modification - */ - function updateCompletionProgress() { - const inputs = document.querySelectorAll('input[type="text"]'); - let filledInputs = 0; - let totalInputs = inputs.length; - - inputs.forEach(input => { - if (input.value.trim() !== '') { - filledInputs++; - } - }); - - const completionPercentage = (filledInputs / totalInputs) * 100; - const progressBar = document.querySelector('#completion_progress .progress-bar'); - if (progressBar) { - progressBar.style.width = completionPercentage + '%'; - progressBar.setAttribute('aria-valuenow', completionPercentage); - document.querySelector('#completion_display').innerHTML = `Votre commerce est complété à ${Math.round(completionPercentage)}%`; - } - } - document.querySelectorAll('input[type="text"]').forEach(input => { input.addEventListener('blur', updateCompletionProgress); }); @@ -165,24 +79,6 @@ document.addEventListener('DOMContentLoaded', () => { - function parseCuisine() { - const cuisineInput = document.querySelector('input[name="commerce_tag_value__cuisine"]'); - - // Récupérer tous les checkboxes de type de cuisine - const cuisineCheckboxes = document.querySelectorAll('input[name="cuisine_type"]'); - - // Ajouter un écouteur d'événement sur chaque checkbox - cuisineCheckboxes.forEach(checkbox => { - checkbox.addEventListener('change', () => { - // Récupérer toutes les checkboxes cochées - const checkedCuisines = Array.from(document.querySelectorAll('input[name="cuisine_type"]:checked')) - .map(input => input.value); - - // Mettre à jour l'input avec les valeurs séparées par des points-virgules - cuisineInput.value = checkedCuisines.join(';'); - }); - }); - } parseCuisine(); diff --git a/assets/edit.js b/assets/edit.js new file mode 100644 index 0000000..abc0d3c --- /dev/null +++ b/assets/edit.js @@ -0,0 +1,46 @@ + +/** + * mettre à jour la barre de progression + * pour le formulaire de modification + */ +function updateCompletionProgress() { + const inputs = document.querySelectorAll('input[type="text"]'); + let filledInputs = 0; + let totalInputs = inputs.length; + + inputs.forEach(input => { + if (input.value.trim() !== '') { + filledInputs++; + } + }); + + const completionPercentage = (filledInputs / totalInputs) * 100; + const progressBar = document.querySelector('#completion_progress .progress-bar'); + if (progressBar) { + progressBar.style.width = completionPercentage + '%'; + progressBar.setAttribute('aria-valuenow', completionPercentage); + document.querySelector('#completion_display').innerHTML = `Votre commerce est complété à ${Math.round(completionPercentage)}%`; + } +} + +function parseCuisine() { + const cuisineInput = document.querySelector('input[name="commerce_tag_value__cuisine"]'); + + // Récupérer tous les checkboxes de type de cuisine + const cuisineCheckboxes = document.querySelectorAll('input[name="cuisine_type"]'); + + // Ajouter un écouteur d'événement sur chaque checkbox + cuisineCheckboxes.forEach(checkbox => { + checkbox.addEventListener('change', () => { + // Récupérer toutes les checkboxes cochées + const checkedCuisines = Array.from(document.querySelectorAll('input[name="cuisine_type"]:checked')) + .map(input => input.value); + + // Mettre à jour l'input avec les valeurs séparées par des points-virgules + cuisineInput.value = checkedCuisines.join(';'); + }); + }); +} + +window.updateCompletionProgress = updateCompletionProgress; +window.parseCuisine = parseCuisine; \ No newline at end of file diff --git a/assets/josm.js b/assets/josm.js index c8cd1ef..81b0c78 100644 --- a/assets/josm.js +++ b/assets/josm.js @@ -74,3 +74,4 @@ function openInJOSM(map, map_is_loaded, osmElements) { document.body.removeChild(tempLink); } +window.openInJOSM = openInJOSM; \ No newline at end of file diff --git a/assets/opening_hours.js b/assets/opening_hours.js index 6c83869..e781053 100644 --- a/assets/opening_hours.js +++ b/assets/opening_hours.js @@ -1,23 +1,35 @@ - +/** + * Gestion du formulaire d'horaires d'ouverture + * + */ const openingHoursFormManager = { defaultOpeningHours: '', - init: function () { + inputSelector: '', + init: function (inputSelector = 'input[name="custom__opening_hours"]') { // Rechercher l'élément par son attribut name plutôt que par son id - const openingHoursInput = document.querySelector('input[name="custom__opening_hours"]'); + this.setInputSelector(inputSelector); + const openingHoursInput = document.querySelector(inputSelector); if (!openingHoursInput) { - console.warn('Élément input[name="custom__opening_hours"] non trouvé'); + console.warn('Élément ', inputSelector, ' non trouvé'); return; } this.defaultOpeningHours = openingHoursInput.value; - this.makeForm(); + this.makeForm(inputSelector); if (this.defaultOpeningHours !== '') { - this.parseOpeningHoursValue(); + this.parseOpeningHoursValue(inputSelector); } }, - parseOpeningHoursValue: function () { + setInputSelector: function (inputSelector) { + this.inputSelector = inputSelector; + }, + /** + * convertir les checkboxes et inputs en horaires OSM dans l'input de référence + * @param {string} inputSelector + */ + parseOpeningHoursValue: function (inputSelector = 'input[name="custom__opening_hours"]') { // Analyser la chaîne d'horaires d'ouverture const parsedOpeningHours = {}; @@ -78,8 +90,8 @@ const openingHoursFormManager = { console.log(parsedOpeningHours); }, - makeForm: function () { - const customOpeningHours = document.querySelector('input[name="custom__opening_hours"]'); + makeForm: function (inputSelector = 'input[name="custom__opening_hours"]') { + const customOpeningHours = document.querySelector(inputSelector); console.log('makeForm customOpeningHours', customOpeningHours); if (customOpeningHours) { @@ -146,7 +158,7 @@ const openingHoursFormManager = { // Ajouter l'événement pour afficher/masquer les plages horaires input.addEventListener('change', (e) => { horairesContainer.classList.toggle('d-none', !e.target.checked); - this.convertToOSMOpeningHours(); + this.convertToOSMOpeningHours(inputSelector); }); }); @@ -318,7 +330,7 @@ const openingHoursFormManager = { return container; }, - convertToOSMOpeningHours: function () { + convertToOSMOpeningHours: function (inputSelector = 'input[name="custom__opening_hours"]') { const jours = { 'Lundi': 'Mo', 'Mardi': 'Tu', @@ -363,7 +375,7 @@ const openingHoursFormManager = { } // Mettre à jour l'input custom__opening_hours - const customOpeningHours = document.querySelector('input[name="custom__opening_hours"]'); + const customOpeningHours = document.querySelector(inputSelector); if (customOpeningHours) { customOpeningHours.value = osmFormat; } @@ -386,3 +398,4 @@ const openingHoursFormManager = { return null; } } +window.openingHoursFormManager = openingHoursFormManager; \ No newline at end of file diff --git a/assets/utils.js b/assets/utils.js index cf5875f..834878e 100644 --- a/assets/utils.js +++ b/assets/utils.js @@ -61,16 +61,6 @@ const genererCouleurPastel = () => { }; -function updateMapHeightForLargeScreens() { - - const mapFound = document.querySelector('#map'); - if (mapFound && window.innerHeight > 800 && window.innerWidth > 800) { - mapFound.style.height = '80vh'; - } else { - console.log('window.innerHeight', window.innerHeight); - } -} - async function searchInseeCode(query) { try { @@ -90,4 +80,86 @@ async function searchInseeCode(query) { console.error('Erreur lors de la recherche du code INSEE:', error); return []; } -} \ No newline at end of file +} + + +function updateMapHeightForLargeScreens() { + + const mapFound = document.querySelector('#map'); + if (mapFound && window.innerHeight > 800 && window.innerWidth > 800) { + + mapFound.style.height = window.innerWidth * 0.8 + 'px'; + } else { + console.log('window.innerHeight', window.innerHeight); + } +} + +// lister les changesets de l'utilisateur osm-commerces +async function listChangesets() { + // Ajouter le header Accept pour demander du JSON + const options = { + headers: { + 'Accept': 'application/json' + } + }; + const changesets = await fetch('https://api.openstreetmap.org/api/0.6/changesets?display_name=osm-commerce-fr', options); + const data = await changesets.json(); + console.log(data.changesets.length); + + // Grouper les changesets par période + const now = new Date(); + const last24h = new Date(now - 24 * 60 * 60 * 1000); + const last7days = new Date(now - 7 * 24 * 60 * 60 * 1000); + const last30days = new Date(now - 30 * 24 * 60 * 60 * 1000); + + const stats = { + last24h: 0, + last7days: 0, + last30days: 0 + }; + + data.changesets.forEach(changeset => { + const changesetDate = new Date(changeset.closed_at); + + if (changesetDate >= last24h) { + stats.last24h++; + } + if (changesetDate >= last7days) { + stats.last7days++; + } + if (changesetDate >= last30days) { + stats.last30days++; + } + }); + + // Afficher les statistiques + const historyDiv = document.getElementById('userChangesHistory'); + if (historyDiv) { + historyDiv.innerHTML = ` +
+

Changesets créés :

+
+
Dernières 24h :
${stats.last24h}
+
7 derniers jours :
${stats.last7days}
+
30 derniers jours :
${stats.last30days}
+
+
+ `; + } +} + + + +function openInPanoramax() { + const center = map.getCenter(); + const zoom = map.getZoom(); + const panoramaxUrl = `https://api.panoramax.xyz/?focus=map&map=${zoom}/${center.lat}/${center.lng}`; + window.open(panoramaxUrl); +} + +window.openInPanoramax = openInPanoramax; +window.listChangesets = listChangesets; +window.updateMapHeightForLargeScreens = updateMapHeightForLargeScreens; +window.searchInseeCode = searchInseeCode; +window.genererCouleurPastel = genererCouleurPastel; +window.check_validity = check_validity; diff --git a/templates/public/edit.html.twig b/templates/public/edit.html.twig index fa49fe2..8dc99e5 100644 --- a/templates/public/edit.html.twig +++ b/templates/public/edit.html.twig @@ -181,17 +181,11 @@ {{ parent() }} {% endblock %} \ No newline at end of file diff --git a/templates/public/edit/address.html.twig b/templates/public/edit/address.html.twig index 30e95fc..53d5292 100644 --- a/templates/public/edit/address.html.twig +++ b/templates/public/edit/address.html.twig @@ -3,10 +3,11 @@ {# {{ dump(commerce_overpass)}} #}
-
+
- - + +
+
diff --git a/templates/public/edit/opening_hours.html.twig b/templates/public/edit/opening_hours.html.twig index b1e2094..d860204 100644 --- a/templates/public/edit/opening_hours.html.twig +++ b/templates/public/edit/opening_hours.html.twig @@ -1,25 +1,24 @@
-

- - {{ 'display.opening_hours'|trans }}

-

{{ 'display.opening_hours_description'|trans }}

+

+ + {{ 'display.opening_hours'|trans }}

+

{{ 'display.opening_hours_description'|trans }}

- {% if commerce_overpass.tags_converted.opening_hours is defined and commerce_overpass.tags_converted.opening_hours != '' %} - - {% else %} - -
- {% endif %} - - {#
- Exemples : -
    -
  • Écrivez "24/7" pour indiquer que le commerce est ouvert 24 heures sur 24
  • -
  • Écrivez "Mo-Fr 9:00 - 18:00" pour indiquer que le commerce est ouvert du lundi au vendredi de 9h à 18h
  • -
  • Pour des horaires plus complexes, écrivez "Mo-Fr 9:00 - 18:00; Sa 9:00 - 12:00" pour indiquer que le commerce est ouvert du lundi au vendredi de 9h à 18h et le samedi de 9h à 12h
  • -
-
#} -
- - -
\ No newline at end of file + {% if commerce_overpass.tags_converted.opening_hours is defined and commerce_overpass.tags_converted.opening_hours != '' %} + + {% else %} + +
+ {% endif %} +
+
\ No newline at end of file