copy(web): replace em dashes in public copy
PR Checks / Frontend Typecheck + Tests (pull_request) Successful in 1m14s
PR Checks / Backend Smoke (pull_request) Successful in 10s
PR Checks / Build Backend (no push) (pull_request) Successful in 19s
PR Checks / Build Frontend (no push) (pull_request) Successful in 1m19s
PR Checks / Build Pipeline (no push) (pull_request) Successful in 11s
PR Checks / AI Code Review (Claude) (pull_request) Successful in 1m20s
PR Checks / Frontend Typecheck + Tests (pull_request) Successful in 1m14s
PR Checks / Backend Smoke (pull_request) Successful in 10s
PR Checks / Build Backend (no push) (pull_request) Successful in 19s
PR Checks / Build Frontend (no push) (pull_request) Successful in 1m19s
PR Checks / Build Pipeline (no push) (pull_request) Successful in 11s
PR Checks / AI Code Review (Claude) (pull_request) Successful in 1m20s
Rewrites every visitor-facing string that used an em dash, choosing the punctuation for what the dash was doing: a colon before a list or explanation, a comma for an aside, a full stop between two thoughts, parentheses for an aside mid-sentence. Covers page titles and meta descriptions, the home and admissions guide copy, school page headings and notes, the compare page, metric labels and tooltips. Two rewrites also fix the sentence around them: the closure banner no longer repeats "proposed for closure", and the cut-off caveat's list of priorities now parses. A lone dash marking a missing value in a table cell stays: it is a data convention, not prose. A Jest guard walks the source with the TypeScript parser and fails on any other em dash in a string or JSX text node. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
1 parent
271ffe92d4
commit
d1688ac150
39 files changed
+183
-111
No files matched your search
+14
-14
@@ -16,32 +16,32 @@ export const METRIC_EXPLANATIONS: Record<string, MetricExplanation> = {
|
||||
detail: 'The national average is around 60%. Higher means more pupils reached the expected level.',
|
||||
},
|
||||
rwm_high_pct: {
|
||||
label: 'Higher Standard — Reading, Writing & Maths',
|
||||
label: 'Higher Standard: Reading, Writing & Maths',
|
||||
plain: '% of pupils exceeding the expected level in all three subjects',
|
||||
detail: 'A more demanding threshold. The national average is around 8%.',
|
||||
},
|
||||
reading_expected_pct: {
|
||||
label: 'Reading — Expected Standard',
|
||||
label: 'Reading: Expected Standard',
|
||||
plain: '% of pupils achieving the expected standard in reading at age 11',
|
||||
},
|
||||
writing_expected_pct: {
|
||||
label: 'Writing — Expected Standard',
|
||||
label: 'Writing: Expected Standard',
|
||||
plain: '% of pupils achieving the expected standard in writing at age 11',
|
||||
},
|
||||
maths_expected_pct: {
|
||||
label: 'Maths — Expected Standard',
|
||||
label: 'Maths: Expected Standard',
|
||||
plain: '% of pupils achieving the expected standard in maths at age 11',
|
||||
},
|
||||
reading_high_pct: {
|
||||
label: 'Reading — Higher Standard',
|
||||
label: 'Reading: Higher Standard',
|
||||
plain: '% of pupils exceeding the expected level in reading',
|
||||
},
|
||||
writing_high_pct: {
|
||||
label: 'Writing — Higher Standard',
|
||||
label: 'Writing: Higher Standard',
|
||||
plain: '% of pupils exceeding the expected level in writing',
|
||||
},
|
||||
maths_high_pct: {
|
||||
label: 'Maths — Higher Standard',
|
||||
label: 'Maths: Higher Standard',
|
||||
plain: '% of pupils exceeding the expected level in maths',
|
||||
},
|
||||
gps_expected_pct: {
|
||||
@@ -90,7 +90,7 @@ export const METRIC_EXPLANATIONS: Record<string, MetricExplanation> = {
|
||||
detail: 'Lower is better. Persistent absence can significantly affect attainment.',
|
||||
},
|
||||
rwm_expected_disadvantaged_pct: {
|
||||
label: 'Disadvantaged Pupils — Reading, Writing & Maths',
|
||||
label: 'Disadvantaged Pupils: Reading, Writing & Maths',
|
||||
plain: '% of disadvantaged pupils achieving the expected standard in all three subjects',
|
||||
},
|
||||
disadvantaged_gap: {
|
||||
@@ -105,7 +105,7 @@ export const METRIC_EXPLANATIONS: Record<string, MetricExplanation> = {
|
||||
},
|
||||
sen_ehcp_pct: {
|
||||
label: 'Education, Health and Care Plan (EHCP)',
|
||||
plain: '% of pupils with a formal EHCP — a legal plan for pupils with significant additional needs',
|
||||
plain: '% of pupils with a formal EHCP (a legal plan for pupils with significant additional needs)',
|
||||
},
|
||||
eal_pct: {
|
||||
label: 'English as an Additional Language',
|
||||
@@ -128,26 +128,26 @@ export const METRIC_EXPLANATIONS: Record<string, MetricExplanation> = {
|
||||
detail: '0 = national average. Positive means better-than-expected progress; negative means lower-than-expected. A score above +0.5 is considered well above average.',
|
||||
},
|
||||
english_maths_standard_pass_pct: {
|
||||
label: 'English & Maths — Grade 4+ (Standard Pass)',
|
||||
label: 'English & Maths: Grade 4+ (Standard Pass)',
|
||||
plain: '% of pupils achieving at least a grade 4 in both English and Maths',
|
||||
detail: 'Grade 4 is the minimum "standard pass". Employers and colleges often require grade 4 in English and Maths.',
|
||||
},
|
||||
english_maths_strong_pass_pct: {
|
||||
label: 'English & Maths — Grade 5+ (Strong Pass)',
|
||||
label: 'English & Maths: Grade 5+ (Strong Pass)',
|
||||
plain: '% of pupils achieving at least a grade 5 in both English and Maths',
|
||||
detail: 'Grade 5 is a "strong pass". Many sixth forms and universities expect grade 5 in English and Maths.',
|
||||
},
|
||||
ebacc_entry_pct: {
|
||||
label: 'EBacc Entry',
|
||||
plain: '% of pupils who entered the English Baccalaureate — a set of GCSE subjects covering English, Maths, Sciences, a Language, and Humanities',
|
||||
plain: '% of pupils who entered the English Baccalaureate (a set of GCSE subjects covering English, Maths, Sciences, a Language and Humanities)',
|
||||
detail: 'EBacc entry keeps academic options open post-16. It is not a separate qualification.',
|
||||
},
|
||||
ebacc_standard_pass_pct: {
|
||||
label: 'EBacc — Grade 4+ (Standard Pass)',
|
||||
label: 'EBacc: Grade 4+ (Standard Pass)',
|
||||
plain: '% of pupils achieving grade 4 or above across all EBacc subjects',
|
||||
},
|
||||
ebacc_strong_pass_pct: {
|
||||
label: 'EBacc — Grade 5+ (Strong Pass)',
|
||||
label: 'EBacc: Grade 5+ (Strong Pass)',
|
||||
plain: '% of pupils achieving grade 5 or above across all EBacc subjects',
|
||||
},
|
||||
ebacc_avg_score: {
|
||||
|
||||
@@ -116,7 +116,7 @@ export function formatWithSuppression(value: number | null | undefined): { displ
|
||||
return { display: formatPercentage(value), suppressed: false };
|
||||
}
|
||||
|
||||
export const SUPPRESSED_TOOLTIP = 'Data not available — may be suppressed to protect small cohorts.';
|
||||
export const SUPPRESSED_TOOLTIP = 'Data not available. It may be suppressed to protect small cohorts.';
|
||||
|
||||
/**
|
||||
* Format a progress score (can be negative)
|
||||
@@ -750,7 +750,7 @@ export function buildSchoolSummary(
|
||||
if (admissions.first_preference_offer_pct != null) {
|
||||
const pct = Math.round(admissions.first_preference_offer_pct);
|
||||
parts.push(
|
||||
`oversubscribed — ${pct}% of first-choice applicants are offered a place`,
|
||||
`oversubscribed (${pct}% of first-choice applicants are offered a place)`,
|
||||
);
|
||||
} else {
|
||||
parts.push('oversubscribed');
|
||||
|
||||
Reference in new issue
Block a user