(pl)(census) handle edge cases (hide histogram of age by age, hide comparison with last year if not available)

This commit is contained in:
Andrea Vos 2024-03-17 16:23:26 +01:00
parent 2faf01072f
commit e1c131fb76
2 changed files with 30 additions and 18 deletions

View File

@ -61,7 +61,7 @@ Osoby niebinarne są niebinarne, niezależnie jaką płeć im przypisało społe
Natomiast niezaprzeczalnie istnieją różnice w socjalizacji chcemy zbadać jak mocno, o ile w ogóle,
wpływają one na czyjąś tożsamość, decyzje oraz podejście do niebinarności.
{census_comparisons}
{census_comparisons:by_location,by_agab}
{graph=/docs-local/spis-2024/%group%/age}
@ -228,18 +228,17 @@ Na pierwszy rzut oka, wyniki pytania nt. form używanych w mowie są bardzo podo
{census_groups}
{json=spis-2024/%group%/stats.json=pronounGroups.unikanie form nacechowanych płciowo}% osób respondenckich
używa wobec siebie [form unikających deklarowania płci](/unikanie),
({json=spis-2024/%group%/stats.json=@diff.spis-2023.pronounGroups.unikanie form nacechowanych płciowo} p.p. w stosunku do zeszłego roku).
używa wobec siebie [form unikających deklarowania płci](/unikanie){optional}, ({json=spis-2024/%group%/stats.json=@diff.spis-2023.pronounGroups.unikanie form nacechowanych płciowo} p.p. w stosunku do zeszłego roku){/optional}.
{json=spis-2024/%group%/stats.json=pronounGroupsAggr.łącznie: binarne}% osób używa form binarnych (rodzaj męski i/lub żeński) ({json=spis-2024/%group%/stats.json=@diff.spis-2023.pronounGroupsAggr.łącznie: binarne} p.p.),
ale tylko {json=spis-2024/%group%/stats.json=pronounGroupsAggr.łącznie: wyłącznie binarne}% _wyłącznie_ form binarnych ({json=spis-2024/%group%/stats.json=@diff.spis-2023.pronounGroupsAggr.łącznie: wyłącznie binarne} p.p.).
{json=spis-2024/%group%/stats.json=pronounGroupsAggr.łącznie: binarne zamiennie}% osób używa zamienne form męskich i żeńskich ({json=spis-2024/%group%/stats.json=@diff.spis-2023.pronounGroupsAggr.łącznie: binarne zamiennie} p.p.).
{json=spis-2024/%group%/stats.json=pronounGroupsAggr.łącznie: binarne}% osób używa form binarnych (rodzaj męski i/lub żeński){optional} ({json=spis-2024/%group%/stats.json=@diff.spis-2023.pronounGroupsAggr.łącznie: binarne} p.p.){/optional},
ale tylko {json=spis-2024/%group%/stats.json=pronounGroupsAggr.łącznie: wyłącznie binarne}% _wyłącznie_ form binarnych{optional} ({json=spis-2024/%group%/stats.json=@diff.spis-2023.pronounGroupsAggr.łącznie: wyłącznie binarne} p.p.){/optional}.
{json=spis-2024/%group%/stats.json=pronounGroupsAggr.łącznie: binarne zamiennie}% osób używa zamienne form męskich i żeńskich{optional} ({json=spis-2024/%group%/stats.json=@diff.spis-2023.pronounGroupsAggr.łącznie: binarne zamiennie} p.p.){/optional}.
{json=spis-2024/%group%/stats.json=pronounGroupsAggr.łącznie: niebinarne}% osób używa form niebinarnych (dokładnie tyle samo, co w zeszłorocznym spisie),
przy czym {json=spis-2024/%group%/stats.json=pronounGroupsAggr.łącznie: wyłącznie niebinarne}% _wyłącznie_ form niebinarnych ({json=spis-2024/%group%/stats.json=@diff.spis-2023.pronounGroupsAggr.łącznie: wyłącznie niebinarne} p.p.).
{json=spis-2024/%group%/stats.json=pronounGroupsAggr.łącznie: niebinarne}% osób używa form niebinarnych{optional} (dokładnie tyle samo, co w zeszłorocznym spisie){/optional},
przy czym {json=spis-2024/%group%/stats.json=pronounGroupsAggr.łącznie: wyłącznie niebinarne}% _wyłącznie_ form niebinarnych{optional} ({json=spis-2024/%group%/stats.json=@diff.spis-2023.pronounGroupsAggr.łącznie: wyłącznie niebinarne} p.p.){/optional}.
{json=spis-2024/%group%/stats.json=pronounGroupsAggr.łącznie: mnogie}% osób używa którejś z (lub kilku) form mnogich ({json=spis-2024/%group%/stats.json=@diff.spis-2023.pronounGroupsAggr.łącznie: mnogie} p.p.).
Spadek ich popularności o {json=spis-2024/%group%/stats.json=^diff.spis-2022.pronounGroupsAggr.łącznie: mnogie} punkta procentowego to najistotniejsza różnica w stosunku do odpowiedzi na pytanie nt. mowy z zeszłorocznego spisu.
{json=spis-2024/%group%/stats.json=pronounGroupsAggr.łącznie: mnogie}% osób używa którejś z (lub kilku) form mnogich{optional} ({json=spis-2024/%group%/stats.json=@diff.spis-2023.pronounGroupsAggr.łącznie: mnogie} p.p.){/optional}.
{optional}Spadek ich popularności o {json=spis-2024/%group%/stats.json=^diff.spis-2022.pronounGroupsAggr.łącznie: mnogie} punkta procentowego to najistotniejsza różnica w stosunku do odpowiedzi na pytanie nt. mowy z zeszłorocznego spisu.{/optional}
{/census_groups}

View File

@ -2,13 +2,22 @@ let jsons = undefined;
let census_groups = {};
let census_comparisons = {};
const mainPlusDetails = (dict, wide) => (_, content) => {
const mainPlusDetails = (dict, wide) => (_, keys, content) => {
let selectedDict = {};
if (keys === undefined) {
selectedDict = dict;
} else {
for (let key of keys.substring(1).split(',')) {
selectedDict[key] = dict[key];
}
}
return `
<div class="${wide ? 'wide-escape' : ''}">
<p>${content.replace(/%group%/g, 'general').replace(/<iframe class="graph" /g, '<iframe class="graph border" ')}</p>${
Object.keys(dict).map((group) => `
<details class="border mb-3">
<summary class="bg-light px-2 py-1" onclick="this.parentElement.querySelector('iframe.graph').contentDocument.location.reload()">${dict[group]}</summary>
Object.keys(selectedDict).map((group) => `
<details class="border mb-3" open>
<summary class="bg-light px-2 py-1" onclick="this.parentElement.querySelector('iframe.graph').contentDocument.location.reload()">${selectedDict[group]}</summary>
<div class="border-top p-md-3 bg-white">${content.replace(/%group%/g, group)}</div>
</details>`)
.join('\n')
@ -106,7 +115,7 @@ export default async function parseMarkdown(markdown, translator) {
.replace(/<table>/g, '<div class="table-responsive"><table class="table table-striped small">')
.replace(/<\/table>/g, '</table></div>')
.replace(/<a href="http/g, '<a target="_blank" rel="noopener" href="http')
.replace(/<p>{details=(.+?)}<\/p>(.+?)<p>{\/details}<\/p>/gms, '<details class="border mb-3"><summary class="bg-light p-3">$1</summary><div class="border-top p-3 bg-white">$2</div></details>')
.replace(/<p>{details=(.+?)}<\/p>(.+?)<p>{\/details}<\/p>/gms, '<details open class="border mb-3"><summary class="bg-light p-3">$1</summary><div class="border-top p-3 bg-white">$2</div></details>')
.replace(/<img (.*?)>/g, (_, attrs) => {
let classNames = 'border';
const m = attrs.match(/alt="\{(.*)\}/);
@ -128,9 +137,8 @@ export default async function parseMarkdown(markdown, translator) {
census_comparisons = JSON.parse(value.replace(/&quot;/g, '"'));
return '';
})
.replace(/<p>{census_groups}<\/p>(.+?)<p>{\/census_groups}<\/p>/gms, mainPlusDetails(census_groups, false))
.replace(/<p>{census_comparisons}<\/p>(.+?)<p>{\/census_comparisons}<\/p>/gms, mainPlusDetails(census_comparisons, true))
.replace(/<p>{census_groups(:.+?)?}<\/p>(.+?)<p>{\/census_groups}<\/p>/gms, mainPlusDetails(census_groups, false))
.replace(/<p>{census_comparisons(:.+?)?}<\/p>(.+?)<p>{\/census_comparisons}<\/p>/gms, mainPlusDetails(census_comparisons, true))
.replace(/{json=([^=}]+)=([^=}]+)}/g, fetchJson)
.replace(/<h1 id="🏳️🌈-/g, '<h1 id="') // license header
@ -141,6 +149,11 @@ export default async function parseMarkdown(markdown, translator) {
content = content.replace(/{table_of_contents}/g, generateToC(content, translator));
content = content.replace(/{optional}(.+?){\/optional}/gms, (_, content) => {
if (content.includes('badge bg-danger')) { return ''; }
return content;
});
const titleMatch = content.match('<h1[^>]*>(.+?)</h1>');
const title = titleMatch ? titleMatch[1] : null;
const imgMatch = content.match('<img src="([^"]+)"[^>]*>');