Au lendemain du premier tour des élections municipales, qui s’est tenu dimanche 15 mars, la question des alliances entre listes qualifiées devient cruciale : se maintenir, fusionner ou se désister pour favoriser un report de voix vers les candidats en tête ? A gauche comme à droite, les partis ont jusqu’à mardi 17 mars, à 18 heures, pour trancher et déposer leurs listes en vue du second tour, dimanche 22 mars.
Quels sont les accords qui peuvent être trouvés entre La France insoumise (LFI) et les candidats socialistes ou écologistes ? Quelles alliances entre la droite et le centre ? Des élus franchiront-ils le cordon sanitaire en rejoignant le Rassemblement national (RN) ?
Les Décodeurs recensent en temps réel les positions des têtes de liste dans une centaine de grandes villes (plus de 50 000 habitants) où un second tour aura lieu.
` : « »}
${d.ordre}
${d.ordre}
${d.tete_prenom} ${d.tete_nom}
(${nuances[nuance2].nom_court})
· ${pointToComma(Number.parseFloat(d.pct_exprimes).toFixed(1))} %
${d.qualifie == « Fusionnable » ? `
` : « »}
showDecision
? `${decisions[d.decision][1]} ${decisions[d.decision][0]}
${
d.texte_viz
? `
`
: « »
}`
: « »
}
`;
}
html = `
${h_candidats}
`;
let newRow = document.createElement(« div »);
newRow.setAttribute(« id », `d_${code_circo}`);
newRow.classList.add(« suiviDesistements__table__row »);
newRow.innerHTML = html;
communesContainer.append(newRow);
}
let dicoData = {};
for (const [i, d] of donneesDesistements.entries()) {
if (d.population >= seuil_population) {
if (!dicoData[d.code_circo]) {
dicoData[d.code_circo] = {
lib: d.lib,
population: d.population,
candidats: [],
configuration: d.configuration,
};
}
dicoData[d.code_circo][« candidats »].push(d);
}
}
// Sort dicoData by decreasing population and generate the rows
Object.entries(dicoData)
.sort(([, a], [, b]) => b.population – a.population)
.forEach(([code_circo, data]) => {
genererLigne(code_circo, data);
});
if (isMobile) {
document.querySelectorAll(« .candidat__decision__lien »).forEach((item) => {
item.addEventListener(« click », (event) => {
event.preventDefault();
});
});
}
make_tooltip_desist(« .candidat__decision__lien, .candidat__precision img »);
// Search input
document.querySelector(« .suiviDesistements__search__input »).addEventListener(« input », function () {
const search = cleanValue(this.value);
let rows = document.querySelectorAll(« .suiviDesistements__table__row »);
rows.forEach((row) => {
if (!search.length) {
row.classList.remove(« suiviDesistements__table__row–hidden »);
} else {
const targetText =
cleanValue(row.querySelector(« .suiviDesistements__table__row__communeLib »).textContent.replace(/s+/g, » « ).trim()) +
cleanValue(row.querySelector(« .suiviDesistements__table__row__candidats »).textContent.replace(/s+/g, » « ).trim());
row.classList.toggle(« suiviDesistements__table__row–hidden », !targetText.includes(search));
}
});
if (document.querySelectorAll(« .suiviDesistements__table__row–hidden »).length === rows.length) {
// No results
document.querySelector(« .suiviDesistements__table__noResults »).style.display = « flex »;
} else {
document.querySelector(« .suiviDesistements__table__noResults »).style.display = « none »;
}
});
// Reset search input
function remiseAZero() {
input = document.querySelector(« .suiviDesistements__search__input »);
input.value = null;
input.dispatchEvent(new Event(« input », { bubbles: true }));
}
document.querySelector(« .suiviDesistements__search__reset »).addEventListener(« click », remiseAZero);
document.onkeydown = function (evt) {
evt = evt || window.event;
if (evt.key === « Escape » || evt.key === « Esc » || evt.keyCode === 27) remiseAZero();
};
}
// UTILS
// Couleurs
// fonction qui convertit la recherche
function cleanValue(input) {
return input
.toLowerCase()
.replace(« st « , « saint « )
.trim()
.replace(/[àâä]/g, « a »)
.replace(/[æ]/g, « ae »)
.replace(/[ç]/g, « c »)
.replace(/[éèêë]/g, « e »)
.replace(/[îï]/g, « i »)
.replace(/[ô]/g, « o »)
.replace(/[œ]/g, « oe »)
.replace(/[ùûü]/g, « u »)
.replace(/-/g, » « )
.replace(/’/g, » « );
}
// une fonction qui passe la première lettre de tous les mots d’une string en cap
function capitalizeTxt(str) {
// ma fonction de détection
const estToutEnCap = (t) => […t].every((c) => c === c.toUpperCase());
if (!estToutEnCap(str)) return str;
const cap = (s) => `${s.charAt(0).toUpperCase().replace(« É », « E »).replace(« È », « E »)}${s.slice(1)}`;
let out = str.toLowerCase().split( » « ).map(cap).join( » « );
if (out.includes(« -« )) out = out.split(« -« ).map(cap).join(« -« );
return out.replace(« De La « , « de la « ).replace(« De « , « de « ).replace( » – « , « -« );
}
function pointToComma(num) {
return String(num).replace(« . », « , »);
}
function thousandSep(num) {
return String(num).replace(/B(?=(d{3})+(?!d))/g, » « );
}
function make_tooltip_desist(selector, is_live = false) {
let tooltipTriggers = getA(selector);
forEach(tooltipTriggers, function (elmt) {
elmt.addEventListener(« mouseover », function () {
display_tooltip_desist(elmt, is_live);
});
if(!isMobile){
elmt.addEventListener(« mouseout », function () {
//console.warn(« mouseout »);
document.querySelectorAll(« .tooltipdecodeurs »).forEach((tooltipElem) => {
tooltipElem.remove();
});
});
}
});
}
// TODO : permettre de cliquer le lien sur le tooltip
function display_tooltip_desist(elmt, is_live = false) {
document.querySelectorAll(« .tooltipdecodeurs »).forEach((tooltipElem) => {
tooltipElem.remove();
});
let tooltipElem = document.createElement(« div »);
tooltipElem.classList.add(« tooltipdecodeurs »);
tooltipElem.classList.add(« lmui-tooltip »);
let tt_html = ``;
if (elmt.hasAttribute(« data-tt-supertitle ») && elmt.getAttribute(« data-tt-supertitle ») != « ») {
tt_html += `
${elmt.getAttribute(« data-tt-supertitle »)}
`;
}
if (elmt.hasAttribute(« data-tt-title ») && elmt.getAttribute(« data-tt-title ») != « ») {
tt_html += `
${elmt.getAttribute(« data-tt-title »)}
`;
}
if (elmt.hasAttribute(« data-tt-desc ») && elmt.getAttribute(« data-tt-desc ») != « ») {
tt_html += `
${elmt.getAttribute(« data-tt-desc »)}
`;
}
if (elmt.hasAttribute(« data-tt-source ») && elmt.getAttribute(« data-tt-source ») != « ») {
tt_html += `
${elmt.getAttribute(« data-tt-source »)}
`;
}
tooltipElem.innerHTML = tt_html;
document.body.appendChild(tooltipElem);
/* le 14 c’est le décalage qui va bien */
const tt_top = elmt.getBoundingClientRect().top – 14 + window.scrollY – tooltipElem.offsetHeight;
tooltipElem.style.top = tt_top + « px »;
let tt_left;
if (is_live && tt_top < 0) {
tooltipElem.style.top = « 0px »;
tt_left = elmt.getBoundingClientRect().left + elmt.getBoundingClientRect().width + 2;
if (tt_left + tooltipElem.offsetWidth > window.innerWidth) {
tt_left = elmt.getBoundingClientRect().left – tooltipElem.offsetWidth – 2;
}
} else {
tt_left = elmt.getBoundingClientRect().left + elmt.getBoundingClientRect().width / 2 – tooltipElem.getBoundingClientRect().width / 2 + 2;
}
tooltipElem.style.left = tt_left + « px »;
if (is_live && tt_left < 0) {
tooltipElem.style.left = « 0px »;
} else if (is_live && tt_left + tooltipElem.offsetWidth > window.innerWidth) {
tooltipElem.style.left = window.innerWidth – tooltipElem.offsetWidth + « px »;
}
// tooltipElem.addEventListener(« click », function (event) {
// event.stopImmediatePropagation();
// });
tooltipElem.querySelector(« .lmui-tooltip__close »).addEventListener(« click », () => {
tooltipElem.remove();
});
}
async function initViz() {
nuances_ministere = await fetchNuances(nuances_ministereURL);
nuances_lemonde = await fetchNuances(nuances_lemondeURL);
nuances = { …nuances_ministere, …nuances_lemonde };
drawTable();
// console.warn(« <<<<<<<<<« );
}
initViz();
Il vous reste 0% de cet article à lire. La suite est réservée aux abonnés.




