Remove winning party

This commit is contained in:
Andras Schmelczer 2026-04-09 21:58:24 +01:00
parent 8614acdfae
commit a98c54c5b8
12 changed files with 36 additions and 89 deletions

View file

@ -78,8 +78,6 @@ const descriptions: Record<string, Record<string, string>> = {
'% Mixed':
'Pourcentage de la population se déclarant Métisse ou de plusieurs groupes ethniques',
'% Other': 'Pourcentage de la population se déclarant dun autre groupe ethnique',
'Winning party':
'Parti vainqueur dans la circonscription lors des élections générales de 2024',
'Voter turnout (%)':
'Pourcentage délecteurs inscrits ayant voté aux élections générales de 2024',
'% Labour': 'Part des voix travaillistes aux élections générales de 2024',
@ -166,8 +164,6 @@ const descriptions: Record<string, Record<string, string>> = {
'% Mixed':
'Anteil der Bevölkerung, der sich als gemischt oder mehreren ethnischen Gruppen zugehörig identifiziert',
'% Other': 'Anteil der Bevölkerung, der sich einer anderen ethnischen Gruppe zuordnet',
'Winning party':
'Siegreiche Partei im Wahlkreis bei der Parlamentswahl 2024',
'Voter turnout (%)':
'Anteil der registrierten Wähler, die bei der Parlamentswahl 2024 gewählt haben',
'% Labour': 'Labour-Stimmenanteil bei der Parlamentswahl 2024',
@ -238,7 +234,6 @@ const descriptions: Record<string, Record<string, string>> = {
'% East Asian': '东亚裔人口比例',
'% Mixed': '混血或多族裔人口比例',
'% Other': '其他族裔人口比例',
'Winning party': '2024年大选中该选区获胜的政党',
'Voter turnout (%)': '2024年大选中登记选民的投票率',
'% Labour': '2024年大选中工党得票率',
'% Conservative': '2024年大选中保守党得票率',
@ -317,8 +312,6 @@ const descriptions: Record<string, Record<string, string>> = {
'% East Asian': 'A kelet-ázsiaiként azonosított lakosság aránya',
'% Mixed': 'A vegyes vagy több etnikai csoporthoz tartozóként azonosított lakosság aránya',
'% Other': 'Az egyéb etnikai csoportba tartozóként azonosított lakosság aránya',
'Winning party':
'A 2024-es parlamenti választáson a választókerületben győztes párt',
'Voter turnout (%)':
'A regisztrált választók szavazási aránya a 2024-es parlamenti választáson',
'% Labour': 'A Munkáspárt szavazataránya a 2024-es parlamenti választáson',

View file

@ -109,8 +109,6 @@ export const details: Record<string, Record<string, string>> = {
"Provient du Census 2021. Pourcentage de la population de l'autorité locale s'identifiant comme Mixte ou appartenant à plusieurs groupes ethniques (Blanc et Noir caribéen, Blanc et Noir africain, Blanc et Asiatique, ou tout autre fond mixte ou multiple).",
'% Other':
"Provient du Census 2021. Pourcentage de la population de l'autorité locale s'identifiant comme appartenant à un autre groupe ethnique (Arabe ou tout autre groupe ethnique non couvert par les catégories principales).",
'Winning party':
"Le parti politique qui a obtenu le plus de votes dans la circonscription couvrant ce code postal, lors des élections générales britanniques de juillet 2024. Basé sur les résultats au scrutin uninominal majoritaire publiés par le Parlement britannique. Les circonscriptions ont été redessinées pour 2024 selon la révision de la Commission des limites de 2023.",
'Voter turnout (%)':
"La proportion de l'électorat inscrit qui a voté de manière valide lors des élections générales britanniques de juillet 2024. Calculée comme le nombre de votes valides divisé par la taille de l'électorat. Une participation plus élevée est généralement corrélée avec des zones plus aisées et des scrutins plus serrés.",
'% Labour':
@ -243,8 +241,6 @@ export const details: Record<string, Record<string, string>> = {
'Aus dem Census 2021. Prozentsatz der Bevölkerung der Gemeinde, die sich als gemischt oder mit mehreren ethnischen Zugehörigkeiten identifiziert (Weiß und Schwarzkaribisch, Weiß und Schwarzafrikanisch, Weiß und Asiatisch oder sonstiger gemischter Hintergrund).',
'% Other':
'Aus dem Census 2021. Prozentsatz der Bevölkerung der Gemeinde, die sich als einer anderen ethnischen Gruppe zugehörig identifiziert (Arabisch oder eine andere ethnische Gruppe, die nicht von den Hauptkategorien abgedeckt wird).',
'Winning party':
'Die politische Partei, die im Wahlkreis dieser Postleitzahl bei der britischen Parlamentswahl im Juli 2024 die meisten Stimmen erhalten hat. Basierend auf den Ergebnissen des Mehrheitswahlrechts, veröffentlicht vom britischen Parlament. Die Wahlkreise wurden für 2024 nach der Überprüfung der Boundary Commission 2023 neu eingeteilt.',
'Voter turnout (%)':
'Der Anteil der registrierten Wahlberechtigten, die bei der britischen Parlamentswahl im Juli 2024 eine gültige Stimme abgegeben haben. Berechnet als gültige Stimmen geteilt durch die Größe der Wählerschaft. Eine höhere Wahlbeteiligung korreliert im Allgemeinen mit wohlhabenderen Gebieten und knapperen Ergebnissen.',
'% Labour':
@ -375,8 +371,6 @@ export const details: Record<string, Record<string, string>> = {
'来自2021年Census。地方政府人口中认同为<E5908C><E4B8BA>血或多种族群体白人与黑人加勒比裔、白人与黑人非洲裔、白人与亚洲裔或其他混血或多种族背景的百分比。',
'% Other':
'来自2021年Census。地方政府人口中认同为其他族裔群体阿拉伯人或其他未被主要类别涵盖的族裔的百分比。',
'Winning party':
'在2024年7月英国大选中该邮编所属选区得票最多的政党。基于英国议会公布的简单多数制选举结果。选区根据2023年边界委员会审查进行了重新划分。',
'Voter turnout (%)':
'2024年7月英国大选中投出有效选票的登记选民比例。计算方式为有效票数除以选民总数。较高的投票率通常与较富裕地区和竞争更激烈的选举相关。',
'% Labour':
@ -509,8 +503,6 @@ export const details: Record<string, Record<string, string>> = {
'A 2021-es Census alapján. A helyi hatóság területén vegyes vagy többes etnikai csoportként (fehér és fekete karibi, fehér és fekete afrikai, fehér és ázsiai, vagy bármely más vegyes vagy többes háttér) azonosított népesség százaléka.',
'% Other':
'A 2021-es Census alapján. A helyi hatóság területén egyéb etnikai csoportként (arab vagy bármely más, a főkategóriák által nem lefedett etnikai csoport) azonosított népesség százaléka.',
'Winning party':
'Az a politikai párt, amely a legtöbb szavazatot kapta az adott irányítószámhoz tartozó választókerületben a 2024. júliusi brit parlamenti választáson. Az Egyesült Királyság Parlamentje által közzétett, egyéni választókerületi rendszer szerinti eredmények alapján. A választókerületeket a 2023-as Határbizottsági felülvizsgálat alapján alakították át 2024-re.',
'Voter turnout (%)':
'A regisztrált szavazók azon aránya, akik érvényes szavazatot adtak le a 2024. júliusi brit parlamenti választáson. Az érvényes szavazatok száma osztva a választói névjegyzékben szereplők számával. A magasabb részvétel általában a tehetősebb területekkel és a szorosabb versenyekkel korrelál.',
'% Labour':

View file

@ -477,7 +477,7 @@ const de: Translations = {
dsElectionName: 'Ergebnisse der Parlamentswahl 2024',
dsElectionOrigin: 'Britisches Parlament',
dsElectionUse:
'Ergebnisse auf Kandidatenebene der britischen Parlamentswahl vom Juli 2024. Aggregiert auf Wahlkreisebene: siegreiche Partei, Wahlbeteiligung (%) und Mehrheit (%). Über den Wahlkreiscode (pcon) aus dem NSPL-Postleitzahlenverzeichnis mit Immobilien verknüpft.',
'Ergebnisse auf Kandidatenebene der britischen Parlamentswahl vom Juli 2024. Aggregiert auf Wahlkreisebene: Wahlbeteiligung (%) und Parteistimmenanteile (%). Über den Wahlkreiscode (pcon) aus dem NSPL-Postleitzahlenverzeichnis mit Immobilien verknüpft.',
// FAQ section titles
faqFindingTitle: 'Ihr Gebiet finden',
faqCommuteTitle: 'Pendelweg und Reisezeit',
@ -786,7 +786,6 @@ const de: Translations = {
'% Other': '% Sonstige',
// ─ Feature names (Politics) ─
'Winning party': 'Siegreiche Partei',
'Voter turnout (%)': 'Wahlbeteiligung (%)',
'% Labour': '% Labour',
'% Conservative': '% Conservative',
@ -805,12 +804,6 @@ const de: Translations = {
'Max available download speed (Mbps)': 'Max. verfügbare Downloadgeschwindigkeit (Mbps)',
// ─ Enum values ─
Labour: 'Labour',
Conservative: 'Conservative',
'Liberal Democrat': 'Liberal Democrat',
'Reform UK': 'Reform UK',
Green: 'Grüne',
'Other parties': 'Sonstige Parteien',
Detached: 'Freistehend',
'Semi-Detached': 'Doppelhaushälfte',
Terraced: 'Reihenhaus',

View file

@ -471,7 +471,7 @@ const en = {
dsElectionName: '2024 General Election Results',
dsElectionOrigin: 'UK Parliament',
dsElectionUse:
'Candidate-level results for the July 2024 UK General Election. Aggregated to constituency level: winning party, voter turnout (%), and majority (%). Joined to properties via the parliamentary constituency code (pcon) from the NSPL postcode lookup.',
'Candidate-level results for the July 2024 UK General Election. Aggregated to constituency level: voter turnout (%) and party vote shares (%). Joined to properties via the parliamentary constituency code (pcon) from the NSPL postcode lookup.',
// FAQ section titles
faqFindingTitle: 'Finding Your Area',
faqCommuteTitle: 'Commute and Travel',
@ -771,7 +771,6 @@ const en = {
'% Other': '% Other',
// ─ Feature names (Politics) ─
'Winning party': 'Winning party',
'Voter turnout (%)': 'Voter turnout (%)',
'% Labour': '% Labour',
'% Conservative': '% Conservative',
@ -790,12 +789,6 @@ const en = {
'Max available download speed (Mbps)': 'Max available download speed (Mbps)',
// ─ Enum values ─
Labour: 'Labour',
Conservative: 'Conservative',
'Liberal Democrat': 'Liberal Democrat',
'Reform UK': 'Reform UK',
Green: 'Green',
'Other parties': 'Other parties',
Detached: 'Detached',
'Semi-Detached': 'Semi-Detached',
Terraced: 'Terraced',

View file

@ -481,7 +481,7 @@ const fr: Translations = {
dsElectionName: 'Résultats des élections générales 2024',
dsElectionOrigin: 'Parlement britannique',
dsElectionUse:
'Résultats par candidat des élections générales britanniques de juillet 2024. Agrégés au niveau de la circonscription : parti vainqueur, participation électorale (%) et majorité (%). Reliés aux propriétés via le code de circonscription parlementaire (pcon) du répertoire de codes postaux NSPL.',
'Résultats par candidat des élections générales britanniques de juillet 2024. Agrégés au niveau de la circonscription : participation électorale (%) et parts des voix par parti (%). Reliés aux propriétés via le code de circonscription parlementaire (pcon) du répertoire de codes postaux NSPL.',
// FAQ section titles
faqFindingTitle: 'Trouver votre quartier',
faqCommuteTitle: 'Trajet et déplacements',
@ -787,7 +787,6 @@ const fr: Translations = {
'% Other': '% Autres',
// ─ Feature names (Politics) ─
'Winning party': 'Parti vainqueur',
'Voter turnout (%)': 'Participation électorale (%)',
'% Labour': '% Travaillistes',
'% Conservative': '% Conservateurs',
@ -806,12 +805,6 @@ const fr: Translations = {
'Max available download speed (Mbps)': 'Débit descendant max. disponible (Mbps)',
// ─ Enum values ─
Labour: 'Travailliste',
Conservative: 'Conservateur',
'Liberal Democrat': 'Libéral-démocrate',
'Reform UK': 'Reform UK',
Green: 'Vert',
'Other parties': 'Autres partis',
Detached: 'Individuelle',
'Semi-Detached': 'Jumelée',
Terraced: 'Mitoyenne',

View file

@ -476,7 +476,7 @@ const hu: Translations = {
dsElectionName: '2024-es parlamenti választási eredmények',
dsElectionOrigin: 'Egyesült Királyság Parlamentje',
dsElectionUse:
'Jelöltszintű eredmények a 2024. júliusi brit parlamenti választásról. Választókerületi szintre aggregálva: győztes párt, részvételi arány (%) és többség (%). Az ingatlanokhoz az NSPL irányítószám-keresőből származó parlamenti választókerületi kódon (pcon) keresztül csatolva.',
'Jelöltszintű eredmények a 2024. júliusi brit parlamenti választásról. Választókerületi szintre aggregálva: részvételi arány (%) és pártszavazatarányok (%). Az ingatlanokhoz az NSPL irányítószám-keresőből származó parlamenti választókerületi kódon (pcon) keresztül csatolva.',
// FAQ section titles
faqFindingTitle: 'Területed megtalálása',
faqCommuteTitle: 'Ingazás és utazás',
@ -780,7 +780,6 @@ const hu: Translations = {
'% Other': '% egyéb',
// ─ Feature names (Politics) ─
'Winning party': 'Győztes párt',
'Voter turnout (%)': 'Választási részvétel (%)',
'% Labour': '% Munkáspárt',
'% Conservative': '% Konzervatív',
@ -799,12 +798,6 @@ const hu: Translations = {
'Max available download speed (Mbps)': 'Max elérhető letöltési sebesség (Mbps)',
// ─ Enum values ─
Labour: 'Munkáspárt',
Conservative: 'Konzervatív',
'Liberal Democrat': 'Liberális Demokrata',
'Reform UK': 'Reform UK',
Green: 'Zöld',
'Other parties': 'Egyéb pártok',
Detached: 'Különálló',
'Semi-Detached': 'Ikerház',
Terraced: 'Sorház',

View file

@ -462,7 +462,7 @@ const zh: Translations = {
dsElectionName: '2024年大选结果',
dsElectionOrigin: '英国议会',
dsElectionUse:
'2024年7月英国大选的候选人级别结果。聚合到选区级别获胜政党、投票率(%)和多数票%。通过NSPL邮编查询中的议会选区代码pcon关联到房产。',
'2024年7月英国大选的候选人级别结果。聚合到选区级别投票率(%)和各政党得票率%。通过NSPL邮编查询中的议会选区代码pcon关联到房产。',
// FAQ section titles
faqFindingTitle: '寻找理想区域',
faqCommuteTitle: '通勤与出行',
@ -754,7 +754,6 @@ const zh: Translations = {
'% Other': '% 其他',
// ─ Feature names (Politics) ─
'Winning party': '获胜政党',
'Voter turnout (%)': '投票率(%',
'% Labour': '% 工党',
'% Conservative': '% 保守党',
@ -772,12 +771,6 @@ const zh: Translations = {
'Max available download speed (Mbps)': '最大可用下载速度Mbps',
// ─ Enum values ─
Labour: '工党',
Conservative: '保守党',
'Liberal Democrat': '自由民主党',
'Reform UK': '英国改革党',
Green: '绿党',
'Other parties': '其他政党',
Detached: '独立式住宅',
'Semi-Detached': '半独立式住宅',
Terraced: '联排住宅',

View file

@ -232,14 +232,6 @@ export const ENUM_PALETTE: [number, number, number][] = [
* Any value not listed falls back to ENUM_PALETTE by index.
*/
export const ENUM_COLOR_OVERRIDES: Record<string, Record<string, [number, number, number]>> = {
'Winning party': {
Labour: [220, 36, 31], // Labour red
Conservative: [0, 135, 220], // Conservative blue
'Liberal Democrat': [253, 187, 48], // Lib Dem gold
'Reform UK': [18, 178, 196], // Reform teal
Green: [106, 176, 35], // Green party green
'Other parties': [148, 130, 160], // muted purple
},
'Property type': {
Detached: [249, 115, 22], // orange
'Semi-Detached': [59, 130, 246], // blue

View file

@ -86,6 +86,32 @@ export function formatNumber(value: number | undefined, decimals = 0): string {
return decimals > 0 ? value.toFixed(decimals) : Math.round(value).toLocaleString();
}
/**
* Compute percentages that always sum to exactly 100, using the largest-remainder
* (Hamilton) method. Floors each raw percentage, then distributes the residual to
* the segments with the largest fractional parts. Eliminates rounding drift where
* three 33.3% segments would otherwise display as "33%, 33%, 33% = 99%".
*
* Assumes `total` equals (or closely equals) the sum of `values`.
*/
export function roundedPercentages(values: number[], total: number, decimals = 0): number[] {
if (total <= 0 || values.length === 0) return values.map(() => 0);
const scale = 10 ** decimals;
const targetSum = 100 * scale;
const raw = values.map((v) => (v / total) * 100 * scale);
const floors = raw.map((r) => Math.floor(r));
const result = floors.slice();
let diff = targetSum - floors.reduce((a, b) => a + b, 0);
const order = raw
.map((r, i) => ({ i, frac: r - floors[i] }))
.sort((a, b) => b.frac - a.frac);
for (let k = 0; k < order.length && diff > 0; k++) {
result[order[k].i] += 1;
diff -= 1;
}
return result.map((v) => v / scale);
}
export function formatRelativeTime(isoDate: string): string {
// eslint-disable-next-line @typescript-eslint/no-var-requires
const i18n = require('../i18n').default as {