A Brest (Finistère), au second tour de l’élection municipale de 2020, le maire sortant, François Cuillandre (Parti socialiste), a récolté un peu moins de la moitié des voix (49,69 %), mais plus de trois quarts des sièges du conseil municipal (42 sur 55). Une erreur ? Absolument pas : ce résultat est le fruit du mode de scrutin qui a cours pour les élections municipales dans les 35 000 communes de France, et qui sera employé les dimanches 15 et 22 mars.
Une fois que les électeurs ont voté, comment les sièges d’un conseil municipal sont-ils répartis ? Le code électoral explique tout… ou presque, avec des expressions compliquées comme « représentation proportionnelle » et « plus forte moyenne ». Les Décodeurs vous aident à y voir plus clair.
Première étape : la prime majoritaire
La première étape de la répartition des sièges est simple : la moitié va d’office à la liste arrivée en tête, quelle que soit son avance sur les listes concurrentes. C’est ce qu’on appelle la « prime majoritaire ». Lorsque le conseil municipal compte un nombre impair de sièges, le diviser par deux ne donne pas un nombre entier. Comme il est impossible de partager un siège, le résultat doit alors être arrondi au nombre entier supérieur.
`;
else
text_elt += `>
${r.text}
`;
text_container.innerHTML += text_elt;
number_of_slides++;
}
text_container.innerHTML += « ;
// INIT GRAPH HERE
const graph_utils = init_graph(graph_container_etape1);
// END INIT
let current_slide_id;
function draw_graph(id_slide, force = false) {
const is_not_empty = graph_container_etape1.querySelector(« div ») !== null;
//if (is_not_empty) graph_container_etape1.classList.add(« fade-out-class »);
// UPDATE FONCTION HERE
update_graph(graph_utils, graph_container_etape1, id_slide);
// END UPDATE
current_slide_id = id_slide;
}
function delete_graph() {
graph_container_etape1.classList.add(« fade-out-class »);
setTimeout(() => {
graph_container_etape1.innerHTML = « »;
current_chart_id = null;
graph_container_etape1.classList.remove(« fade-out-class »);
}, duration_fade);
}
const first_slide = overall_container.querySelector(
« .d_scroll_slide:first-child »
);
let current_slide = get_current_slide_in_view();
let current_slide_count = current_slide
? +current_slide.dataset.count
: null;
draw_graph(current_slide_count);
document.addEventListener(« scroll », (event) => {
// Go into sticky mode at the first slide
const overall_container_bb = overall_container.getBoundingClientRect();
if (
!graph_container_etape1.classList.contains(« d_sticky ») &&
overall_container_bb.y < 0
)
graph_container_etape1.classList.add(« d_sticky »);
if (
graph_container_etape1.classList.contains(« d_sticky ») &&
overall_container_bb.y > 0
)
graph_container_etape1.classList.remove(« d_sticky »);
// What if we reach the end
if (
!graph_container_etape1.classList.contains(« d_fixed_end ») &&
overall_container_bb.bottom < screen_height
)
graph_container_etape1.classList.add(« d_fixed_end »);
if (
graph_container_etape1.classList.contains(« d_fixed_end ») &&
overall_container_bb.bottom > screen_height
)
graph_container_etape1.classList.remove(« d_fixed_end »);
// Scrolling down
if (
current_slide == null &&
first_slide.getBoundingClientRect().top < 0
) {
current_slide_count = 0;
current_slide = text_container.querySelector(
`.d_scroll_slide[data-count= »${current_slide_count} »]`
);
draw_graph(current_slide_count);
} else if (
current_slide_count === 0 &&
first_slide.getBoundingClientRect().top > 0
) {
current_slide_count = null;
current_slide = null;
draw_graph(current_slide_count);
}
if (
current_slide &&
current_slide_count < number_of_slides – 1 &&
current_slide.getBoundingClientRect().bottom < 0
) {
current_slide_count += 1;
current_slide = text_container.querySelector(
`.d_scroll_slide[data-count= »${current_slide_count} »]`
);
if (current_slide.querySelector(« .d_scroll_flat »)) delete_graph();
draw_graph(current_slide_count);
}
// Going back up
else if (
current_slide &&
current_slide_count > 0 &&
current_slide.getBoundingClientRect().top > 0
) {
current_slide_count -= 1;
current_slide = text_container.querySelector(
`.d_scroll_slide[data-count= »${current_slide_count} »]`
);
//console.log(« NEW SLIDE Up », current_slide_count)
if (current_slide.querySelector(« .d_scroll_flat »)) delete_graph();
draw_graph(current_slide_count);
}
});
function get_current_slide_in_view() {
/* CASE FIRST CHILD IS INVISIBLE */
const first_slide = overall_container.querySelector(
« .d_scroll_slide:first-child »
);
const bbox = first_slide.getBoundingClientRect();
if (bbox.top > screen_height) return null;
/* CASE AT LEAST ONE CHILD IS VISIBLE */
for (let slide of overall_container.querySelectorAll(
`.d_scroll_slide`
)) {
if (is_visible(slide)) return slide;
}
/* CASE LAST CHILD IS INVISIBLE TODO */
}
function is_visible(slide) {
const bbox = slide.getBoundingClientRect();
return bbox.bottom > 0 && bbox.top < screen_height;
}
}
run_miniscrolly_attribution_sieges_etape1(
« #d_miniscrolly_attribution_sieges_etape1 »,
textesAttributionSiegesMunicipales,
init_graph_miniscrolly_attribution_sieges_etape1,
update_graph_miniscrolly_attribution_sieges_etape1
);
make_tooltip_steffen(« #decoupe path »,false);
Deuxième étape : le quotient électoral
Il vous reste 84.56% de cet article à lire. La suite est réservée aux abonnés.














