// ==UserScript== // @name Comparatif carbone OSM itinéraire // @version 1 // @grant none // ==/UserScript== /** * comparatif des empreintes carbones sur un itinéraire fait sur OSM.org * @type {{bus: number, voiture_elec: number, tgv: number, voiture: number, velo_elec: number, avion: number}} */ const coefficients = { avion_condens: 0.285*3, avion: 0.285, voiture: 0.218, scoot: 0.062, moto: 0.191, bus: 0.0352, voiture_elec: 0.103, velo_elec: 0.01, metro: 0.004, tgv: 0.003, } function getDistanceFromElement () { const sidebarContent = document.getElementById('sidebar_content') if (!sidebarContent) { console.warn('Impossible de trouver l’élément #sidebar_content.') return null } const paragraphs = sidebarContent.querySelectorAll('p') for (const para of paragraphs) { if (para.innerText.includes('Distance')) { const indexOfKm = para.innerText.indexOf('km') let text = para.innerText let boom = text.trim().split(' ') console.log('para.innerText', para.innerText) const distance = parseFloat(boom[1]) return distance } } console.warn('Impossible de trouver la distance dans les paragraphes.') return null } function calculateEmissionsAndDisplay (distance) { if (!distance) { console.warn('La distance est undefined ou null.') return } const emissionsByMode = { avion_condens: distance * coefficients.avion_condens, avion: distance * coefficients.avion, bus: distance * coefficients.bus, moto: distance * coefficients.moto, scoot: distance * coefficients.scoot, voiture: distance * coefficients.voiture, voiture_elec: distance * coefficients.voiture_elec, tgv: distance * coefficients.tgv, velo_elec: distance * coefficients.velo_elec, } let textCompare = `

Impact climatique:

Véhicule CO2 kg eq.
Avion condensation inclue ${emissionsByMode.avion_condens.toFixed(1)}
Avion ${emissionsByMode.avion.toFixed(1)}
Bus thermique ${emissionsByMode.bus.toFixed(1)}
Moto ${emissionsByMode.moto.toFixed(1)}
Scooter ${emissionsByMode.scoot.toFixed(1)}
Voiture ${emissionsByMode.voiture.toFixed(1)}
Voiture électrique ⚡ ${emissionsByMode.voiture_elec.toFixed(1)}
🚴 Vélo Electrique ⚡ ${emissionsByMode.velo_elec.toFixed(1)}
🚇 Métro ${emissionsByMode.tgv.toFixed(1)}
TGV ${emissionsByMode.tgv.toFixed(1)}
🚴 Vélo ou marche 0
infos ADEME Émissions de gaz à effet de serre (GES) pour une personne sur cette distance, en équivalent CO2. Voyager à plusieurs divise les émissions de GES.
Sont incluses les émissions directes, la construction des véhicules (fabrication, maintenance et fin de vie) et la production et distribution de carburant et d'électricité. La construction des infrastructures (routes, rails, aéroports...) n'est pas incluse.
json
` let comparison_container = document.querySelector('#comparison_container') /** * on ajoute la div si elle manque */ if (!comparison_container) { const comparisonContainerAdd = document.createElement('div') comparisonContainerAdd.setAttribute('id', 'comparison_container') const sidebarContainer = document.getElementById('sidebar_content') sidebarContainer.insertBefore(comparisonContainerAdd, sidebarContainer.children[0]); comparison_container = document.querySelector('#comparison_container') } // on remplit les infos actualisées comparison_container.innerHTML = textCompare console.log('comparison_container', comparison_container.innerText) } function main () { const distance = getDistanceFromElement() if (distance) { calculateEmissionsAndDisplay(distance) } else { setTimeout(() => { const distance = getDistanceFromElement() if (distance) { calculateEmissionsAndDisplay(distance) } }, 5000) } } document.addEventListener('hashchange', () => main()) document.addEventListener('DOMContentLoaded', () => main()) document.addEventListener('mouseup', () => main()) setInterval(main(),1000) main()