Aufregerthemen Schliessen

Le Tour de France Femmes 2023 commence ce dimanche, voici les ...

Le Tour de France Femmes 2023 commence ce dimanche voici les
Vous voulez profiter de la torpeur estivale pour faire une petite sieste devant le Tour féminin, mais vous ne voulez pas rater les ascensions ou les moments forts ? Ce guide – et ses rappels pour votre calendrier – a été créé pour vous.

Vous ne voulez rien rater de la seconde édition du Tour de France Femmes, vous êtes en vacances et vous profiteriez bien d’une petite sieste post-déjeuner ? Vous regardez la Grande Boucle d’un œil au bureau ? Notre guide de la sieste va sauver le sommeil de la fin de votre mois de juillet.

Pour les huit étapes du parcours officiel, nous avons recensé les sprints, les ascensions et les moments de tension (l’approche de la fin d’une étape ou avant une éventuelle bordure, par exemple) pour créer une chronologie prévisionnelle des moments à ne pas rater du 23 au 30 juillet. A l’inverse, nous avons identifié les temps potentiellement plus faibles, parfaits pour planifier un petit sieston, puisque c’est une pratique vertueuse (même si vous êtes au bureau, rappelons-le).

Une mise en garde néanmoins : si, grâce à l’analyse du parcours, nous pouvons prévoir les longues étapes de plaine, il nous est impossible d’anticiper une échappée pleine de panache, l’explosion en vol d’une sprinteuse en montagne ou encore une bordure inattendue entre Albi et Blagnac.

Nouveauté 2023 : comme chez les messieurs, nous avons ajouté la possibilité d’importer les moments forts dans votre calendrier numérique et ainsi de vous préparer des rappels, comme autant de réveils de la sieste.

Les lignes représentent la difficulté des ascensions, et non pas le profil exact de l'étape.
Temps faible
Sprint intermédiaire
Temps fort
Ascension
Sources : ASO, La Flamme rouge
`; document.body.appendChild(tooltip) tooltip.style.top = this.getBoundingClientRect().top - this.getBoundingClientRect().height + window.scrollY - (tooltip.offsetHeight + decalY) + 'px' tooltip.style.left = this.getBoundingClientRect().left + this.getBoundingClientRect().width / 2 - ((tooltip.getBoundingClientRect().width / 2) - decalX) + 'px' tooltip.addEventListener('click', () => this.remove()); }) elmt.addEventListener('mouseout', function() { let tooltip = document.querySelector('.tooltipdecodeurs'); if (tooltip != null) tooltip.remove() }) }) } const suisse = "", belgique = "", danemark = "", espagne = "", etapes = { "1": { "nom": "Clermont-Ferrand → Clermont-Ferrand", "type": "plat", "date": "23/07/2023", "distance": 123.8, "deniv": 1044, "rabe": "", "depart": "12:30", "arrivee": "15:36", "text_arr": "15:30" }, "2": { "nom": "Clermont-Ferrand → Mauriac", "type": "accidentée", "date": "24/07/2023", "distance": 151.7, "deniv": 2422, "rabe": "", "depart": "13:05", "arrivee": "17:45", "text_arr": "17:40" }, "3": { "nom": "Collonges-la-Rouge → Montignac-Lascaux", "type": "plat", "date": "25/07/2023", "distance": 147.2, "deniv": 1846, "rabe": "", "depart": "13:45", "arrivee": "17:45", "text_arr": "17:40" }, "4": { "nom": "Cahors → Rodez", "type": "accidentée", "date": "26/07/2023", "distance": 177.1, "deniv": 2503, "rabe": "", "depart": "12:40", "arrivee": "17:44", "text_arr": "17:40" }, "5": { "nom": "Onet-le-Château → Albi", "type": "plat", "date": "27/07/2023", "distance": 126.1, "deniv": 1722, "rabe": "", "depart": "14:20", "arrivee": "17:39", "text_arr": "17:30" }, "6": { "nom": "Albi → Blagnac", "type": "plat", "date": "28/07/2023", "distance": 122.1, "deniv": 1162, "rabe": "", "depart": "14:30", "arrivee": "17:38", "text_arr": "17:30" }, "7": { "nom": "Lannemezan → Tourmalet Bagnères-de-Bigorre", "type": "montagne", "date": "29/07/2023", "distance": 89.8, "deniv": 2613, "rabe": "", "depart": "16:25", "arrivee": "19:25", "text_arr": "19:20" }, "8": { "nom": "Pau → Pau", "type": "contre-la-montre", "date": "30/07/2023", "distance": "22.6", "deniv": 198, "rabe": "", "depart": "14:30", "arrivee": "17:30", "text_arr": "17:30" } }; moment.locale('fr', { months: "janvier_février_mars_avril_mai_juin_juillet_août_septembre_octobre_novembre_décembre".split("_"), monthsShort: "janv._févr._mars_avr._mai_juin_juil._août_sept._oct._nov._déc.".split("_"), weekdays: "dimanche_lundi_mardi_mercredi_jeudi_vendredi_samedi".split("_"), weekdaysShort: "dim._lun._mar._mer._jeu._ven._sam.".split("_"), weekdaysMin: "Di_Lu_Ma_Me_Je_Ve_Sa".split("_"), longDateFormat: { LT: "HH:mm", LTS: "HH:mm:ss", L: "DD/MM/YYYY", LL: "D MMMM YYYY", LLL: "D MMMM YYYY LT", LLLL: "dddd D MMMM YYYY LT" }, calendar: { sameDay: "[Aujourd'hui à] LT", nextDay: '[Demain à] LT', nextWeek: 'dddd [à] LT', lastDay: '[Hier à] LT', lastWeek: 'dddd [dernier à] LT', sameElse: 'L' }, ordinalParse: /\d{1}(er)/, ordinal: function(number) { return number + (number === 1 ? 'er' : ''); } }); var data = [{ "etape": 1, "quoi": "sieste", "nom": "", "km": "", "debut": "12:30", "fin": "14:42", "rabe": "" }, { "etape": 1, "quoi": "sprint", "nom": "Saint-Hippolyte", "km": "97.1", "debut": "14:42", "fin": "14:56", "rabe": "" }, { "etape": 1, "quoi": "sieste", "nom": "", "km": "", "debut": "14:56", "fin": "15:00", "rabe": "" }, { "etape": 1, "quoi": "cat3", "nom": "Côte de Durtol", "km": "114.5", "debut": "15:00", "fin": "15:22", "rabe": "1,7 km à 7,2 %" }, { "etape": 1, "quoi": "arrivée", "nom": "Arrivée à Clermont-Ferrand (Puy-de-Dôme)", "km": "123.8", "debut": "15:22", "fin": "15:36", "rabe": "" }, { "etape": 2, "quoi": "sieste", "nom": "", "km": "", "debut": "13:05", "fin": "14:30", "rabe": "" }, { "etape": 2, "quoi": "cat4", "nom": "Côte du Mont-Dore", "km": "42.6", "debut": "14:30", "fin": "14:40", "rabe": "1,3 km à 6,6 %" }, { "etape": 2, "quoi": "cat4", "nom": "Côte de la Stèle", "km": "51", "debut": "14:40", "fin": "14:52", "rabe": "1,8 km à 5,1 %" }, { "etape": 2, "quoi": "sieste", "nom": "", "km": "", "debut": "14:52", "fin": "16:00", "rabe": "" }, { "etape": 2, "quoi": "cat2", "nom": "Côte des Plaines (630 m)", "km": "105.1", "debut": "16:00", "fin": "16:20", "rabe": "4,5 km à 5,5 %" }, { "etape": 2, "quoi": "cat4", "nom": "Côte des Broissières", "km": "108.4", "debut": "16:20", "fin": "16:31", "rabe": "1,2 km à 7,2 %" }, { "etape": 2, "quoi": "sprint", "nom": "Mauriac", "km": "112.6", "debut": "16:31", "fin": "16:38", "rabe": "" }, { "etape": 2, "quoi": "cat4", "nom": "Côte de Merlhac", "km": "128.6", "debut": "16:38", "fin": "17:05", "rabe": "1,9 km à 5,5 %" }, { "etape": 2, "quoi": "cat3", "nom": "Côte de Trébiac", "km": "150.3", "debut": "17:05", "fin": "17:20", "rabe": "3,4 km à 5,8 %" }, { "etape": 2, "quoi": "arrivée", "nom": "Arrivée à Mauriac (Cantal)", "km": "151.7", "debut": "17:20", "fin": "17:45", "rabe": "" }, { "etape": 3, "quoi": "sieste", "nom": "", "km": "", "debut": "13:45", "fin": "14:20", "rabe": "" }, { "etape": 3, "quoi": "cat3", "nom": "Côte du Peyroux", "km": "27.2", "debut": "14:20", "fin": "14:29", "rabe": "4,8 km à 4 %" }, { "etape": 3, "quoi": "cat4", "nom": "Côte du Pératel", "km": "30.9", "debut": "14:29", "fin": "14:35", "rabe": "2 km à 5,3 %" }, { "etape": 3, "quoi": "sieste", "nom": "", "km": "", "debut": "14:35", "fin": "15:00", "rabe": "" }, { "etape": 3, "quoi": "cat4", "nom": "Côte de l'Escurotte", "km": "58.1", "debut": "15:00", "fin": "15:19", "rabe": "2,6 km à 4,7 %" }, { "etape": 3, "quoi": "sieste", "nom": "", "km": "", "debut": "15:19", "fin": "15:50", "rabe": "" }, { "etape": 3, "quoi": "cat4", "nom": "Côte des Andrieux", "km": "89.4", "debut": "15:50", "fin": "16:05", "rabe": "2,6 km à 4,1 %" }, { "etape": 3, "quoi": "cat4", "nom": "Côte de Saint-Robert", "km": "92.2", "debut": "16:05", "fin": "16:15", "rabe": "1,1 km à 6,2 %" }, { "etape": 3, "quoi": "sieste", "nom": "", "km": "", "debut": "16:15", "fin": "16:43", "rabe": "" }, { "etape": 3, "quoi": "sprint", "nom": "Badefols-d'Ans", "km": "121.4", "debut": "16:43", "fin": "17:02", "rabe": "" }, { "etape": 3, "quoi": "20km", "nom": "", "km": "127.20", "debut": "17:02", "fin": "17:20", "rabe": "" }, { "etape": 3, "quoi": "arrivée", "nom": "Arrivée à Collonges-la-Rouge (Corrèze)", "km": "147.20", "debut": "17:20", "fin": "17:44", "rabe": "" }, { "etape": 4, "quoi": "sieste", "nom": "", "km": "", "debut": "12:40", "fin": "13:00", "rabe": "" }, { "etape": 4, "quoi": "cat4", "nom": "Côte de Crayssac", "km": "16.5", "debut": "13:00", "fin": "13:08", "rabe": "2,3 km à 4,8 %" }, { "etape": 4, "quoi": "sieste", "nom": "", "km": "", "debut": "13:08", "fin": "14:45", "rabe": "" }, { "etape": 4, "quoi": "cat4", "nom": "Côte de Falgeyras", "km": "84.9", "debut": "14:45", "fin": "15:06", "rabe": "3 km à 4 %" }, { "etape": 4, "quoi": "sieste", "nom": "", "km": "", "debut": "15:06", "fin": "16:00", "rabe": "" }, { "etape": 4, "quoi": "sprint", "nom": "Rignac", "km": "130.6", "debut": "16:00", "fin": "16:24", "rabe": "" }, { "etape": 4, "quoi": "cat3", "nom": "Côte de Colombès", "km": "142.7", "debut": "16:24", "fin": "16:44", "rabe": "6,5 km à 4,2 %" }, { "etape": 4, "quoi": "cat2", "nom": "Côte de Moyrazès (722 m)", "km": "161.7", "debut": "16:44", "fin": "17:15", "rabe": "4,6 km à 5,5 %" }, { "etape": 4, "quoi": "cat3", "nom": "Côte de Lavernhe", "km": "168.20", "debut": "17:15", "fin": "17:28", "rabe": "2,2 km à 7,1 %" }, { "etape": 4, "quoi": "arrivée", "nom": "Arrivée à Rodez (Aveyron)", "km": "177.1", "debut": "17:28", "fin": "17:44", "rabe": "" }, { "etape": 5, "quoi": "sieste", "nom": "", "km": "", "debut": "14:20", "fin": "16:00", "rabe": "" }, { "etape": 5, "quoi": "cat3", "nom": "Côte de Najac", "km": "74.9", "debut": "16:00", "fin": "16:20", "rabe": "2,1 km à 7,4 %" }, { "etape": 5, "quoi": "cat3", "nom": "Côte de Laguépie", "km": "85.2", "debut": "16:20", "fin": "16:40", "rabe": "1,5 km à 9 %" }, { "etape": 5, "quoi": "sprint", "nom": "Monestiés", "km": "99.8", "debut": "16:40", "fin": "16:50", "rabe": "" }, { "etape": 5, "quoi": "cat4", "nom": "Côte de Monestiés", "km": "102.2", "debut": "16:50", "fin": "17:01", "rabe": "1,6 km à 6,4 %" }, { "etape": 5, "quoi": "20km", "nom": "", "km": "106.1", "debut": "17:01", "fin": "17:15", "rabe": "" }, { "etape": 5, "quoi": "arrivée", "nom": "Arrivée à Albi (Tarn)", "km": "126.1", "debut": "17:15", "fin": "17:39", "rabe": "" }, { "etape": 6, "quoi": "sieste", "nom": "", "km": "", "debut": "14:30", "fin": "15:10", "rabe": "" }, { "etape": 6, "quoi": "cat4", "nom": "Côte de la Cadène", "km": "30.9", "debut": "15:10", "fin": "15:17", "rabe": "2,5 km à 4,5 %" }, { "etape": 6, "quoi": "sieste", "nom": "", "km": "", "debut": "15:17", "fin": "15:38", "rabe": "" }, { "etape": 6, "quoi": "cat4", "nom": "Côte de Puycelsi", "km": "51.3", "debut": "15:38", "fin": "15:50", "rabe": "1,8 km à 6 %" }, { "etape": 6, "quoi": "cat4", "nom": "Côte du Clos Pourtié", "km": "58", "debut": "15:50", "fin": "16:00", "rabe": "2,6 km à 4,8 %" }, { "etape": 6, "quoi": "sieste", "nom": "", "km": "", "debut": "16:00", "fin": "16:20", "rabe": "" }, { "etape": 6, "quoi": "cat4", "nom": "Côte de la Gayre", "km": "81.8", "debut": "16:20", "fin": "16:40", "rabe": "1 km à 4,9 %" }, { "etape": 6, "quoi": "sprint", "nom": "Hameau de Rastel", "km": "92.5", "debut": "16:40", "fin": "16:59", "rabe": "" }, { "etape": 6, "quoi": "20km", "nom": "", "km": "102.1", "debut": "16:59", "fin": "17:20", "rabe": "" }, { "etape": 6, "quoi": "arrivée", "nom": "Arrivée à Blagnac (Haute-Garonne)", "km": "122.1", "debut": "17:20", "fin": "17:38", "rabe": "" }, { "etape": 7, "quoi": "sieste", "nom": "", "km": "", "debut": "16:25", "fin": "17:19", "rabe": "" }, { "etape": 7, "quoi": "sprint", "nom": "Sarrancolin", "km": "41.7", "debut": "17:19", "fin": "17:22", "rabe": "" }, { "etape": 7, "quoi": "cat1", "nom": "Col d'Aspin (1 490 m)", "km": "60.1", "debut": "17:22", "fin": "18:14", "rabe": "12 km à 6,5 %" }, { "etape": 7, "quoi": "suivre", "nom": "", "km": "", "debut": "18:14", "fin": "18:30", "rabe": "" }, { "etape": 7, "quoi": "hc", "nom": "Arrivée au Tourmalet (2 110 m)", "km": "89.8", "debut": "18:30", "fin": "19:25", "rabe": "17 km à 7,3 %" }, { "etape": 8, "quoi": "sieste", "nom": "", "km": "", "debut": "14:30", "fin": "16:30", "rabe": "" }, { "etape": 8, "quoi": "suivre", "nom": "Départ des coureuses du haut de tableau", "km": "", "debut": "16:30", "fin": "17:00", "rabe": "" }, { "etape": 8, "quoi": "arrivée", "nom": "Arrivée des dernières coureuses à Pau", "km": "22.6", "debut": "17:00", "fin": "17:30", "rabe": "" } ]; var dico = { "sieste": { "trad": "Sieste", "couleur": "#cecece" }, "pave": { "trad": "Secteur pavé" }, "hc": { "trad": "hors catégorie", "couleur": "#a50f15", "picto": "HC", "taille": 6 }, "cat1": { "trad": "de première catégorie", "couleur": "#ef3b2c", "picto": "1", "taille": 5 }, "cat2": { "trad": "de deuxième catégorie", "couleur": "#fb6a4a", "picto": "2", "taille": 4 }, "cat3": { "trad": "de troisième catégorie", "couleur": "#fc9272", "picto": "3", "taille": 3 }, "cat4": { "trad": "de quatrième catégorie", "couleur": "#fcbba1", "picto": "4", "taille": 2 }, "sprint": { "trad": "Sprint intermédiaire", "couleur": "#5DB142", "picto": "S" }, "20km": { "trad": "derniers kilomètres de l'étape", "couleur": "#a1a8ad" }, "10km": { "trad": "derniers kilomètres de l'étape", "couleur": "#a1a8ad" }, "arrivée": { "trad": "Fin de l'étape ", "couleur": "#788289" }, "suivre": { "trad": "Tranche à suivre" }, "départ": { "trad": "Départ", "couleur": "#788289" } }, cols = ["cat1", "cat2", "cat3", "cat4", "hc"], plat = [1, 2, 3, 4, 5, 6, 7, 8], corresArrivee = {}; var chevron = '', doigt = ''; /* fonction pour l'affichage de l'heure */ function aLaBonneHeure(heure) { return heure.replace(":", " h ").replace("h 00", "h") } function nettoyer(str) { return str.replace(/[&\/\\#,+()$~%.'":*?{}éàôïëêèç]/g, '').replace(/ /g, "").toLowerCase(); } function milliers(num) { resultat = num if (num = 1000000) { resultat = String((num / 1000000).toFixed(1)).replace(".", ",").replace(",0", "") + " million" + ((num >= 2000000) ? "s" : "") + " d'" } return resultat; } /* boucle pour trouver les étapes plates (côtes en dessous de la 2e catégorie) */ for (const [i, d] of data.entries()) { /* et on checke l'altitude de l'arrivée */ if (i 0) { f = data[i - 1]; if (d.etape != f.etape && dico[f.quoi].taille) { corresArrivee[f.etape] = dico[f.quoi].taille; } } if (d.quoi == "cat2" || d.quoi == "cat1" || d.quoi == "hc") { oudonc = plat.indexOf(d.etape) if (oudonc != -1) { /* si on a du gros col, on vire de la liste*/ plat.splice(oudonc, 1); } } } const finDuTour = moment(etapes[8].date, "DD/MM/YYYY").hours(18).minutes(30); var combien = Object.keys(etapes).length, largeur = document.getElementById("sieste2023").offsetWidth, hauteur = largeur / 6, hauteurbarre = hauteur / 7, hauteurgraphe = hauteur / 1.8, tps = d3.timeParse("%H:%M"), radius = 5, mobile = false, quelleCourbe = d3.curveStep, petitradius = 2.5, margin = { top: hauteur / 10, right: largeur / 12, bottom: hauteur / 3, left: largeur / 12 }, tailleTriangle = largeur / 6; /* en mobile */ if (largeur étape passée"; } /* la titraille */ contenu = "
Étape " + i + " (" + String(etapes[i].type).replace("contre-la-montre", "CLM") + ")"; contenu += " – "; if (largeur
" if (largeur " + cartouche + etapes[i].nom.replace("–", " – ").replace("Contre-la-montre", "CLM").replace("????????", espagne); contenu += " : "; } else { contenu += "
" + cartouche + etapes[i].nom.replace("–", " – ").replace("????????", espagne); contenu += " : "; } contenu += String(etapes[i].distance).replace(".", ",") + " km"; if (etapes[i].deniv) { contenu += ", " + milliers(etapes[i].deniv) + "m d'ascension" /*de D+*/ ; } contenu += "
"; /* on envoie tout */ d3.select("#etape" + i) .attr("data-rangement", ((classeenrabe == " passe") ? i + 21 : i)) .html(contenu) .classed(classeenrabe, true) /* le svg */ var svg = d3.select("#etape" + i).append("svg") .attr("width", "100%") .attr("viewBox", function(d) { if (plat.indexOf(i) != -1) { return "0 " + hauteur / 2.4 + " " + (largeur + margin.left + margin.right) + " " + (hauteur * .6 + margin.top + margin.bottom) } else { return "0 0 " + (largeur + margin.left + margin.right) + " " + (hauteur + margin.top + margin.bottom) } }); var graphe = svg.append("g") .attr("class", "graphe") .attr("transform", "translate(" + margin.left + "," + (hauteur - (hauteurgraphe * 1.1)) + ")"); var barre = svg.append("g") .attr("class", "groupebarre") .attr("transform", "translate(" + margin.left + "," + hauteur + ")"); /* les données de la courbe */ var dataligne = [{ debut: etapes[i].depart, fin: etapes[i].depart, val: 1 }]; for (const [j, e] of data.entries()) { if (e.etape == i) { valeur = 1; if (dico[e.quoi].taille) { valeur = dico[e.quoi].taille; } /* bricolage pour la courbe, quand les durées sont supérieures à 40 minutes, soit 2400000 millisecondes */ if (tps(e.fin) - tps(e.debut) >= 2400000) { tdeb = moment(e.debut, "HH:mm"); tfin = moment(e.fin, "HH:mm"); milieu = (tfin.diff(tdeb) / 60000) / 2; nouveaumilieu = moment(e.debut, "HH:mm").add(milieu, "minutes"); /* on pousse */ dataligne.push({ debut: e.debut, fin: nouveaumilieu.format("HH:mm"), val: +valeur }); dataligne.push({ debut: nouveaumilieu.format("HH:mm"), fin: e.fin, val: +valeur }); } else { dataligne.push({ debut: e.debut, fin: e.fin, val: +valeur }); } } } dataligne.push({ debut: etapes[i].arrivee, fin: etapes[i].arrivee, val: dataligne[dataligne.length - 1].val }) /* la courbe */ var ligne = d3.line() .curve(quelleCourbe) .x(d => (x(tps(d.debut)) + x(tps(d.fin))) / 2) .y(d => y(d.val)); var aire = d3.area() .curve(quelleCourbe) .x(d => (x(tps(d.debut)) + x(tps(d.fin))) / 2) .y0(hauteurgraphe) .y1(d => y(d.val)); graphe.append("path") .data([dataligne]) .attr("class", "aire") .attr("d", aire); graphe.append("path") .data([dataligne]) .attr("class", "ligne") .attr("d", ligne); /* les petits cercles du début et de la fin les textes */ graphe.selectAll("circle") .data([etapes[i].depart, etapes[i].arrivee]) .enter() .append("circle") .attr("class", "petitpoint") .attr("cx", function(d, j) { if (j == 0) { return x(tps(d)) + petitradius; } else { return x(tps(d)) - petitradius; } }) .attr("cy", function(d, j) { alt = 1; if (j == 1) { if (corresArrivee[i]) { alt = corresArrivee[i]; } } return y(alt); }) .attr("r", petitradius); graphe.selectAll("text") .data([etapes[i].depart, etapes[i].arrivee]) .enter() .append("text") .attr("class", function(d, j) { if (j == 0) { return "texte depart passelect"; } else { return "texte arrivee passelect"; } }) .attr("x", function(d, j) { if (j == 0) { return x(tps(d)) - (petitradius * 2); } else { return x(tps(d)) + (petitradius * 2); } }) .attr("y", function(d, j) { alt = 1; if (j == 1) { if (corresArrivee[i]) { alt = corresArrivee[i]; } } return y(alt) + (petitradius * 1.5); }) .text(d => aLaBonneHeure(d.substring(0, d.length - 1) + "0")); var dataCotes = data.filter(d => +d.etape == i && cols.indexOf(d.quoi) != -1); /* les cercles */ graphe.selectAll("circle.cote") .data(dataCotes) .enter() .append("circle") .attr("class", "cote") .attr("cx", d => (x(tps(d.debut)) + x(tps(d.fin))) / 2) .attr("cy", d => y(dico[d.quoi].taille)) .attr("r", radius) .attr("data-tt", function(d) { d.km = +d.km; html = "
" + d.nom; if (d.rabe) { html += "" + d.rabe + ""; } html += "
"; html += "
KM " + String((etapes[i].distance - d.km).toFixed(1)).replace(".", ",").replace(",0", "") + " – ascension " + dico[d.quoi].trad + "
"; html += ""; html += "
Passage prévu entre " + d.debut.replace(":", " h ") + " et " + d.fin.replace(":", " h ") + "
"; html += ""; return html; }); /* le texte des ascensions */ graphe.selectAll("text.textecote") .data(dataCotes) .enter() .append("text") .attr("class", "textecote passelect") .attr("x", d => (x(tps(d.debut)) + x(tps(d.fin))) / 2) .attr("y", d => +(y(dico[d.quoi].taille) - radius * 1.8)) .text(d => d.quoi.replace("cat", "")); /* la texture */ var t = textures.lines() .orientation("diagonal") .size(6) .strokeWidth(2) .shapeRendering("crispEdges") .background("rgba(222, 163, 11 ,.1)") .stroke("rgb(222, 163, 11)"); svg.call(t); d3.select("#hachure rect").style("fill", t.url()) /* la barre */ barre.selectAll(".barre") .data(data) .enter() .filter(e => e.etape == i) .append("rect") .attr("class", function(d) { classe = "barre" if (d.quoi == "sieste") classe += " " + d.quoi return classe }) .attr("fill", d => ((d.quoi != "sieste") ? t.url() : "")) .attr("x", d => x(tps(d.debut))) .attr("width", d => x(tps(d.fin)) - x(tps(d.debut)) + 1) .attr("y", d => 0) .attr("height", d => hauteurbarre) .attr("data-tt", function(d) { if (d.quoi != "sieste") { html = "
" + d.nom; if (d.rabe) { html += "" + d.rabe + ""; } html += "
"; html += "
"; if (d.quoi != "suivre") { html += "KM " + String((etapes[i].distance - d.km).toFixed(1)).replace(".", ",").replace(",0", "") + " – "; } if (d.quoi != "sprint" && d.quoi != "arrivée" && d.quoi != "20km" && d.quoi != "10km" && d.quoi != "pave" && d.quoi != "suivre") { html += "ascension "; } html += dico[d.quoi].trad + "
"; html += ""; html += "
Passage prévu entre " + d.debut.replace(":", " h ") + " et " + d.fin.replace(":", " h ") + "
"; return html; } }); /* on colle le triangle */ barre.selectAll(".triangle") .data(data) .enter() .filter(e => e.etape == i && e.quoi == "sprint") .append("path") .attr("class", "triangle") .attr("d", triangle) .attr("transform", e => "translate(" + (x(tps(e.debut)) + x(tps(e.fin))) / 2 + "," + hauteurbarre + ")"); /* on filtre pour ne garder que les phases où il se passera des trucs */ var datatemp = []; for (const [j, e] of data.entries()) { if (e.etape == i && e.quoi !== "sieste") { datatemp.push(e); e.index = j; } } var heuresTemp = []; barre.selectAll("text") .data(datatemp) .enter() .filter(function(e, j) { if (j == 0) { heuresTemp.push(e); return e; } if (j > 0 && e.index - (datatemp[j - 1].index) > 1) { heuresTemp.push(e); return e; } }) .append("text") .attr("class", "axe passelect") .text((e, j) => ((mobile) ? e.debut : aLaBonneHeure(e.debut))) .attr("transform", e => "translate(" + x(tps(e.debut)) + "," + hauteurbarre * 2.6 + ")"); // on gère l'agenda if (classeenrabe == "") { d3.select("#etape" + i) .append("div") .attr("class", "agendaclic") .append("a") .attr("class", "afficheragenda") .attr("href", "#agenda" + i) .html("Ajouter des rappels à mon calendrier " + doigt); d3.select("#etape" + i) .append("div") .attr("class", "contenant_agenda") .attr("id", "agenda" + i); var agenda = element = document.querySelector("#etape" + i + " .contenant_agenda"), dateTemp = etapes[i].date.split("/"), dateEvenement = dateTemp[2] + "-" + dateTemp[1] + "-" + dateTemp[0]; for (const [j, e] of heuresTemp.entries()) { cal = ``; agenda.innerHTML += cal; } } }; // les événements au clic pour les agendas const show = (e) => { const getHeight = () => { e.style.display = 'block'; const height = e.scrollHeight + 'px'; e.style.display = ''; return height; }; const height = getHeight(); //get natural height e.classList.add('is-visible'); //make element visible e.style.height = height; //update max-height //once the transition is complete, remove inlinie max-height so the content can scale responsively window.setTimeout(() => { e.style.height = ''; }, 180); }; // hide element const hide = (e) => { //give the element a height to change from e.style.height = e.scrollHeight + 'px'; //set height back to 0 window.setTimeout(() => { e.style.height = '0'; }, 1); window.setTimeout(() => { e.classList.remove('is-visible'); }, 180); } const toggle = (e) => { if (e.classList.contains('is-visible')) { hide(e); return; } show(e); }; //listen for click event document.addEventListener('click', event => { if (!event.target.classList.contains('afficheragenda')) return; //Prevent default link behavior event.preventDefault(); const content = document.querySelector(event.target.hash); if (!content) return; toggle(content); }, false); /* on range les divs si les étapes sont passées */ var liste_etapes = document.querySelectorAll('.siesteparetape'); [].slice.call(liste_etapes).sort((a, b) => a.getAttribute('data-rangement') - b.getAttribute('data-rangement')) .forEach(function(ceci) { ceci.parentNode.appendChild(ceci) }); /* le tooltip*/ const isInApp = window.location.href.match(/apps.([a-z]+\-)?lemonde.fr/); tooltip_brt("circle.cote", 2, 14) tooltip_brt("rect.barre:not(.sieste)", 2, -5)
Ähnliche Shots
Nachrichtenarchiv
  • Daniel Donskoy
    Daniel Donskoy
    "The Masked Singer": Daniel Donskoy singt sich zum Sieg
    6 Nov 2022
    2
  • Oliver Bierhoff
    Oliver Bierhoff
    DFB: Vertrag mit Teammanager Oliver Bierhoff per sofort aufgelöst
    6 Dez 2022
    2
  • Hydroxychloroquine
    Hydroxychloroquine
    Corona in den USA: Donald Trump bewirbt Hydroxychloroquin und attackiert Anthony Fauci
    29 Jul 2020
    1
  • Izmir
    Izmir
    Waldbrand in der Türkei: Tausende im Einsatz gegen Flammen bei ...
    17 Aug 2024
    4
  • Tirage EuroMillions
    Tirage EuroMillions
    EuroMillions : le jackpot de plus de 213 millions d'euros remporté ce ...
    26 Jun 2024
    11
Die meist populären Shots dieser Woche