`;
- }).join('');
-
- // Add pagination info
- if (state.pagination.totalPages > 1) {
- html += `
+ })
+ .join("");
+
+ // Add pagination info
+ if (state.pagination.totalPages > 1) {
+ html += `
`;
- }
-
- elements.schoolsGrid.innerHTML = html;
-
- // Add click handlers
- elements.schoolsGrid.querySelectorAll('.school-card').forEach(card => {
- card.addEventListener('click', () => {
- const urn = parseInt(card.dataset.urn);
- openSchoolModal(urn);
- });
+ }
+
+ elements.schoolsGrid.innerHTML = html;
+
+ // Add click handlers
+ elements.schoolsGrid.querySelectorAll(".school-card").forEach((card) => {
+ card.addEventListener("click", () => {
+ const urn = parseInt(card.dataset.urn);
+ openSchoolModal(urn);
});
+ });
}
async function loadMoreSchools() {
- state.pagination.page++;
- const params = new URLSearchParams();
-
- const search = elements.schoolSearch.value.trim();
- if (search) params.append('search', search);
-
- const localAuthority = elements.localAuthorityFilter.value;
- if (localAuthority) params.append('local_authority', localAuthority);
-
- const type = elements.typeFilter.value;
- if (type) params.append('school_type', type);
-
- params.append('page', state.pagination.page);
- params.append('page_size', state.pagination.pageSize);
-
- const data = await fetchAPI(`/api/schools?${params.toString()}`, { useCache: false });
-
- if (data && data.schools.length > 0) {
- state.schools = [...state.schools, ...data.schools];
- renderSchools(state.schools);
- }
+ state.pagination.page++;
+ const params = new URLSearchParams();
+
+ const search = elements.schoolSearch.value.trim();
+ if (search) params.append("search", search);
+
+ const localAuthority = elements.localAuthorityFilter.value;
+ if (localAuthority) params.append("local_authority", localAuthority);
+
+ const type = elements.typeFilter.value;
+ if (type) params.append("school_type", type);
+
+ params.append("page", state.pagination.page);
+ params.append("page_size", state.pagination.pageSize);
+
+ const data = await fetchAPI(`/api/schools?${params.toString()}`, {
+ useCache: false,
+ });
+
+ if (data && data.schools.length > 0) {
+ state.schools = [...state.schools, ...data.schools];
+ renderSchools(state.schools);
+ }
}
function renderRankings(rankings, metric) {
- if (rankings.length === 0) {
- showEmptyState(elements.rankingsList, 'No ranking data available for this year/metric');
- return;
- }
-
- elements.rankingsList.innerHTML = rankings.map((school, index) => {
- const value = school[metric];
- if (value === null || value === undefined) return '';
-
- return `
+ if (rankings.length === 0) {
+ showEmptyState(
+ elements.rankingsList,
+ "No ranking data available for this year/metric",
+ );
+ return;
+ }
+
+ elements.rankingsList.innerHTML = rankings
+ .map((school, index) => {
+ const value = school[metric];
+ if (value === null || value === undefined) return "";
+
+ return `
`;
- }).filter(Boolean).join('');
-
- // Add click handlers
- elements.rankingsList.querySelectorAll('.ranking-item').forEach(item => {
- item.addEventListener('click', () => {
- const urn = parseInt(item.dataset.urn);
- openSchoolModal(urn);
- });
+ })
+ .filter(Boolean)
+ .join("");
+
+ // Add click handlers
+ elements.rankingsList.querySelectorAll(".ranking-item").forEach((item) => {
+ item.addEventListener("click", () => {
+ const urn = parseInt(item.dataset.urn);
+ openSchoolModal(urn);
});
+ });
}
function renderSelectedSchools() {
- if (state.selectedSchools.length === 0) {
- elements.selectedSchools.innerHTML = `
+ if (state.selectedSchools.length === 0) {
+ elements.selectedSchools.innerHTML = `
`;
- elements.chartsSection.style.display = 'none';
- return;
- }
-
- elements.selectedSchools.innerHTML = state.selectedSchools.map((school, index) => `
+ elements.chartsSection.style.display = "none";
+ return;
+ }
+
+ elements.selectedSchools.innerHTML = state.selectedSchools
+ .map(
+ (school, index) => `
${escapeHtml(school.school_name)}
- `).join('');
-
- // Add remove handlers
- elements.selectedSchools.querySelectorAll('.remove').forEach(btn => {
- btn.addEventListener('click', (e) => {
- e.stopPropagation();
- const urn = parseInt(btn.dataset.urn);
- removeFromComparison(urn);
- });
+ `,
+ )
+ .join("");
+
+ // Add remove handlers
+ elements.selectedSchools.querySelectorAll(".remove").forEach((btn) => {
+ btn.addEventListener("click", (e) => {
+ e.stopPropagation();
+ const urn = parseInt(btn.dataset.urn);
+ removeFromComparison(urn);
});
-
- elements.chartsSection.style.display = 'block';
- updateComparisonChart();
+ });
+
+ elements.chartsSection.style.display = "block";
+ updateComparisonChart();
}
async function updateComparisonChart() {
- if (state.selectedSchools.length === 0) return;
-
- const data = await loadComparison();
- if (!data) return;
-
- const metric = elements.metricSelect.value;
-
- // Prepare chart data
- const datasets = [];
- const allYears = new Set();
-
- state.selectedSchools.forEach((school, index) => {
- const schoolData = data.comparison[school.urn];
- if (!schoolData) return;
-
- const yearlyData = schoolData.yearly_data;
- yearlyData.forEach(d => allYears.add(d.year));
-
- const sortedData = yearlyData.sort((a, b) => a.year - b.year);
-
- datasets.push({
- label: schoolData.school_info.school_name,
- data: sortedData.map(d => ({ x: d.year, y: d[metric] })),
- borderColor: CHART_COLORS[index % CHART_COLORS.length],
- backgroundColor: CHART_COLORS[index % CHART_COLORS.length] + '20',
- borderWidth: 3,
- pointRadius: 5,
- pointHoverRadius: 7,
- tension: 0.3,
- fill: false,
- });
+ if (state.selectedSchools.length === 0) return;
+
+ const data = await loadComparison();
+ if (!data) return;
+
+ const metric = elements.metricSelect.value;
+
+ // Prepare chart data
+ const datasets = [];
+ const allYears = new Set();
+
+ state.selectedSchools.forEach((school, index) => {
+ const schoolData = data.comparison[school.urn];
+ if (!schoolData) return;
+
+ const yearlyData = schoolData.yearly_data;
+ yearlyData.forEach((d) => allYears.add(d.year));
+
+ const sortedData = yearlyData.sort((a, b) => a.year - b.year);
+
+ datasets.push({
+ label: schoolData.school_info.school_name,
+ data: sortedData.map((d) => ({ x: d.year, y: d[metric] })),
+ borderColor: CHART_COLORS[index % CHART_COLORS.length],
+ backgroundColor: CHART_COLORS[index % CHART_COLORS.length] + "20",
+ borderWidth: 3,
+ pointRadius: 5,
+ pointHoverRadius: 7,
+ tension: 0.3,
+ fill: false,
});
-
- const years = Array.from(allYears).sort();
-
- // Destroy existing chart
- if (comparisonChart) {
- comparisonChart.destroy();
- }
-
- // Create new chart
- const ctx = elements.comparisonChart.getContext('2d');
- comparisonChart = new Chart(ctx, {
- type: 'line',
- data: {
- labels: years,
- datasets: datasets,
+ });
+
+ const years = Array.from(allYears).sort();
+
+ // Destroy existing chart
+ if (comparisonChart) {
+ comparisonChart.destroy();
+ }
+
+ // Create new chart
+ const ctx = elements.comparisonChart.getContext("2d");
+ comparisonChart = new Chart(ctx, {
+ type: "line",
+ data: {
+ labels: years,
+ datasets: datasets,
+ },
+ options: {
+ responsive: true,
+ maintainAspectRatio: true,
+ aspectRatio: 2,
+ plugins: {
+ legend: {
+ position: "bottom",
+ labels: {
+ font: { family: "'DM Sans', sans-serif", size: 12 },
+ padding: 20,
+ usePointStyle: true,
+ },
},
- options: {
- responsive: true,
- maintainAspectRatio: true,
- aspectRatio: 2,
- plugins: {
- legend: {
- position: 'bottom',
- labels: {
- font: { family: "'DM Sans', sans-serif", size: 12 },
- padding: 20,
- usePointStyle: true,
- },
- },
- title: {
- display: true,
- text: getMetricLabel(metric),
- font: { family: "'Playfair Display', serif", size: 18, weight: 600 },
- padding: { bottom: 20 },
- },
- tooltip: {
- backgroundColor: '#1a1612',
- titleFont: { family: "'DM Sans', sans-serif" },
- bodyFont: { family: "'DM Sans', sans-serif" },
- padding: 12,
- cornerRadius: 8,
- },
- },
- scales: {
- x: {
- title: {
- display: true,
- text: 'Academic Year',
- font: { family: "'DM Sans', sans-serif", weight: 500 },
- },
- grid: { display: false },
- },
- y: {
- title: {
- display: true,
- text: getMetricLabel(metric),
- font: { family: "'DM Sans', sans-serif", weight: 500 },
- },
- grid: { color: '#e5dfd5' },
- },
- },
- interaction: {
- intersect: false,
- mode: 'index',
- },
+ title: {
+ display: true,
+ text: getMetricLabel(metric),
+ font: { family: "'Playfair Display', serif", size: 18, weight: 600 },
+ padding: { bottom: 20 },
},
- });
-
- // Update comparison table
- updateComparisonTable(data.comparison, metric, years);
+ tooltip: {
+ backgroundColor: "#1a1612",
+ titleFont: { family: "'DM Sans', sans-serif" },
+ bodyFont: { family: "'DM Sans', sans-serif" },
+ padding: 12,
+ cornerRadius: 8,
+ },
+ },
+ scales: {
+ x: {
+ title: {
+ display: true,
+ text: "Academic Year",
+ font: { family: "'DM Sans', sans-serif", weight: 500 },
+ },
+ grid: { display: false },
+ },
+ y: {
+ title: {
+ display: true,
+ text: getMetricLabel(metric),
+ font: { family: "'DM Sans', sans-serif", weight: 500 },
+ },
+ grid: { color: "#e5dfd5" },
+ },
+ },
+ interaction: {
+ intersect: false,
+ mode: "index",
+ },
+ },
+ });
+
+ // Update comparison table
+ updateComparisonTable(data.comparison, metric, years);
}
function updateComparisonTable(comparison, metric, years) {
- const lastYear = years[years.length - 1];
- const prevYear = years.length > 1 ? years[years.length - 2] : null;
-
- // Build header with explicit year ranges
- let headerHtml = '
School | ';
- years.forEach(year => {
- headerHtml += `
${year} | `;
+ const lastYear = years[years.length - 1];
+ const prevYear = years.length > 1 ? years[years.length - 2] : null;
+
+ // Build header with explicit year ranges
+ let headerHtml = "
School | ";
+ years.forEach((year) => {
+ headerHtml += `
${year} | `;
+ });
+ if (prevYear) {
+ headerHtml += `
Δ 1yr | `;
+ }
+ if (years.length > 2) {
+ headerHtml += `
Variability | `;
+ }
+ elements.tableHeader.innerHTML = headerHtml;
+
+ // Build body
+ let bodyHtml = "";
+ state.selectedSchools.forEach((school, index) => {
+ const schoolData = comparison[school.urn];
+ if (!schoolData) return;
+
+ const yearlyMap = {};
+ schoolData.yearly_data.forEach((d) => {
+ yearlyMap[d.year] = d[metric];
+ });
+
+ const lastValue = yearlyMap[lastYear];
+ const prevValue = prevYear ? yearlyMap[prevYear] : null;
+
+ // Calculate 1-year change
+ const oneYearChange =
+ prevValue != null && lastValue != null ? lastValue - prevValue : null;
+ const oneYearChangeStr =
+ oneYearChange !== null ? oneYearChange.toFixed(1) : "N/A";
+ const oneYearClass =
+ oneYearChange !== null
+ ? oneYearChange >= 0
+ ? "positive"
+ : "negative"
+ : "";
+
+ // Calculate variability (standard deviation)
+ const values = years
+ .map((y) => yearlyMap[y])
+ .filter((v) => v != null && v !== 0);
+ let variabilityStr = "N/A";
+ if (values.length >= 2) {
+ const mean = values.reduce((a, b) => a + b, 0) / values.length;
+ const squaredDiffs = values.map((v) => Math.pow(v - mean, 2));
+ const variance = squaredDiffs.reduce((a, b) => a + b, 0) / values.length;
+ const stdDev = Math.sqrt(variance);
+ variabilityStr = "±" + stdDev.toFixed(1);
+ }
+
+ const color = CHART_COLORS[index % CHART_COLORS.length];
+
+ bodyHtml += `
`;
+ bodyHtml += `| ${escapeHtml(schoolData.school_info.school_name)} | `;
+ years.forEach((year) => {
+ const value = yearlyMap[year];
+ bodyHtml += `${value != null ? formatMetricValue(value, metric) : "-"} | `;
});
if (prevYear) {
- headerHtml += `Δ 1yr | `;
+ bodyHtml += `${oneYearChangeStr !== "N/A" ? (oneYearChange >= 0 ? "+" : "") + oneYearChangeStr : oneYearChangeStr} | `;
}
if (years.length > 2) {
- headerHtml += `Variability | `;
+ bodyHtml += `${variabilityStr} | `;
}
- elements.tableHeader.innerHTML = headerHtml;
-
- // Build body
- let bodyHtml = '';
- state.selectedSchools.forEach((school, index) => {
- const schoolData = comparison[school.urn];
- if (!schoolData) return;
-
- const yearlyMap = {};
- schoolData.yearly_data.forEach(d => {
- yearlyMap[d.year] = d[metric];
- });
-
- const lastValue = yearlyMap[lastYear];
- const prevValue = prevYear ? yearlyMap[prevYear] : null;
-
- // Calculate 1-year change
- const oneYearChange = prevValue != null && lastValue != null ? (lastValue - prevValue) : null;
- const oneYearChangeStr = oneYearChange !== null ? oneYearChange.toFixed(1) : 'N/A';
- const oneYearClass = oneYearChange !== null ? (oneYearChange >= 0 ? 'positive' : 'negative') : '';
-
- // Calculate variability (standard deviation)
- const values = years.map(y => yearlyMap[y]).filter(v => v != null && v !== 0);
- let variabilityStr = 'N/A';
- if (values.length >= 2) {
- const mean = values.reduce((a, b) => a + b, 0) / values.length;
- const squaredDiffs = values.map(v => Math.pow(v - mean, 2));
- const variance = squaredDiffs.reduce((a, b) => a + b, 0) / values.length;
- const stdDev = Math.sqrt(variance);
- variabilityStr = '±' + stdDev.toFixed(1);
- }
-
- const color = CHART_COLORS[index % CHART_COLORS.length];
-
- bodyHtml += `
`;
- bodyHtml += `| ${escapeHtml(schoolData.school_info.school_name)} | `;
- years.forEach(year => {
- const value = yearlyMap[year];
- bodyHtml += `${value != null ? formatMetricValue(value, metric) : '-'} | `;
- });
- if (prevYear) {
- bodyHtml += `${oneYearChangeStr !== 'N/A' ? (oneYearChange >= 0 ? '+' : '') + oneYearChangeStr : oneYearChangeStr} | `;
- }
- if (years.length > 2) {
- bodyHtml += `${variabilityStr} | `;
- }
- bodyHtml += `
`;
- });
- elements.tableBody.innerHTML = bodyHtml;
+ bodyHtml += ``;
+ });
+ elements.tableBody.innerHTML = bodyHtml;
}
async function openSchoolModal(urn) {
- // Show loading state immediately
- elements.modal.classList.add('active');
- document.body.style.overflow = 'hidden';
- elements.modalStats.innerHTML = '
';
- elements.modalSchoolName.textContent = 'Loading...';
- elements.modalMeta.innerHTML = '';
-
- const data = await loadSchoolDetails(urn);
- if (!data) {
- elements.modalStats.innerHTML = '
Unable to load school data
';
- return;
- }
-
- state.currentSchoolData = data;
-
- elements.modalSchoolName.textContent = data.school_info.school_name;
- elements.modalMeta.innerHTML = `
-
${escapeHtml(data.school_info.local_authority || '')}
-
${escapeHtml(data.school_info.school_type || '')}
+ // Show loading state immediately
+ elements.modal.classList.add("active");
+ document.body.style.overflow = "hidden";
+ elements.modalStats.innerHTML =
+ '
';
+ elements.modalSchoolName.textContent = "Loading...";
+ elements.modalMeta.innerHTML = "";
+
+ const data = await loadSchoolDetails(urn);
+ if (!data) {
+ elements.modalStats.innerHTML =
+ '
Unable to load school data
';
+ return;
+ }
+
+ state.currentSchoolData = data;
+
+ elements.modalSchoolName.textContent = data.school_info.school_name;
+ elements.modalMeta.innerHTML = `
+
${escapeHtml(data.school_info.local_authority || "")}
+
${escapeHtml(data.school_info.school_type || "")}
Primary
`;
-
- // Get latest year data with actual results
- const sortedData = data.yearly_data.sort((a, b) => b.year - a.year);
- const latest = sortedData.find(d => d.rwm_expected_pct !== null) || sortedData[0];
-
- elements.modalStats.innerHTML = `
+
+ // Get latest year data with actual results
+ const sortedData = data.yearly_data.sort((a, b) => b.year - a.year);
+ const latest =
+ sortedData.find((d) => d.rwm_expected_pct !== null) || sortedData[0];
+
+ elements.modalStats.innerHTML = `
KS2 Results (${latest.year})
-
${formatMetricValue(latest.rwm_expected_pct, 'rwm_expected_pct')}
+
${formatMetricValue(latest.rwm_expected_pct, "rwm_expected_pct")}
RWM Expected
-
${formatMetricValue(latest.rwm_high_pct, 'rwm_high_pct')}
+
${formatMetricValue(latest.rwm_high_pct, "rwm_high_pct")}
RWM Higher
-
${formatMetricValue(latest.gps_expected_pct, 'gps_expected_pct')}
+
${formatMetricValue(latest.gps_expected_pct, "gps_expected_pct")}
GPS Expected
-
${formatMetricValue(latest.science_expected_pct, 'science_expected_pct')}
+
${formatMetricValue(latest.science_expected_pct, "science_expected_pct")}
Science Expected
@@ -913,15 +974,15 @@ async function openSchoolModal(urn) {
Progress Scores
-
${formatMetricValue(latest.reading_progress, 'reading_progress')}
+
${formatMetricValue(latest.reading_progress, "reading_progress")}
Reading
-
${formatMetricValue(latest.writing_progress, 'writing_progress')}
+
${formatMetricValue(latest.writing_progress, "writing_progress")}
Writing
-
${formatMetricValue(latest.maths_progress, 'maths_progress')}
+
${formatMetricValue(latest.maths_progress, "maths_progress")}
Maths
@@ -930,125 +991,131 @@ async function openSchoolModal(urn) {
School Context
-
${latest.total_pupils || '-'}
+
${latest.total_pupils || "-"}
Total Pupils
-
${formatMetricValue(latest.disadvantaged_pct, 'disadvantaged_pct')}
+
${formatMetricValue(latest.disadvantaged_pct, "disadvantaged_pct")}
% Disadvantaged
-
${formatMetricValue(latest.eal_pct, 'eal_pct')}
+
${formatMetricValue(latest.eal_pct, "eal_pct")}
% EAL
-
${formatMetricValue(latest.sen_support_pct, 'sen_support_pct')}
+
${formatMetricValue(latest.sen_support_pct, "sen_support_pct")}
% SEN Support
`;
-
- function getProgressClass(value) {
- if (value === null || value === undefined) return '';
- return value >= 0 ? 'positive' : 'negative';
- }
-
- // Create chart
- if (schoolDetailChart) {
- schoolDetailChart.destroy();
- }
-
- const validData = sortedData.filter(d => d.rwm_expected_pct !== null).reverse();
- const years = validData.map(d => d.year);
- const ctx = elements.schoolDetailChart.getContext('2d');
-
- schoolDetailChart = new Chart(ctx, {
- type: 'bar',
- data: {
- labels: years,
- datasets: [
- {
- label: 'Reading %',
- data: validData.map(d => d.reading_expected_pct),
- backgroundColor: '#2d7d7d',
- borderRadius: 4,
- },
- {
- label: 'Writing %',
- data: validData.map(d => d.writing_expected_pct),
- backgroundColor: '#c9a227',
- borderRadius: 4,
- },
- {
- label: 'Maths %',
- data: validData.map(d => d.maths_expected_pct),
- backgroundColor: '#e07256',
- borderRadius: 4,
- },
- ],
+
+ function getProgressClass(value) {
+ if (value === null || value === undefined) return "";
+ return value >= 0 ? "positive" : "negative";
+ }
+
+ // Create chart
+ if (schoolDetailChart) {
+ schoolDetailChart.destroy();
+ }
+
+ const validData = sortedData
+ .filter((d) => d.rwm_expected_pct !== null)
+ .reverse();
+ const years = validData.map((d) => d.year);
+ const ctx = elements.schoolDetailChart.getContext("2d");
+
+ schoolDetailChart = new Chart(ctx, {
+ type: "bar",
+ data: {
+ labels: years,
+ datasets: [
+ {
+ label: "Reading %",
+ data: validData.map((d) => d.reading_expected_pct),
+ backgroundColor: "#2d7d7d",
+ borderRadius: 4,
},
- options: {
- responsive: true,
- maintainAspectRatio: true,
- aspectRatio: 2,
- plugins: {
- legend: {
- position: 'bottom',
- labels: {
- font: { family: "'DM Sans', sans-serif" },
- usePointStyle: true,
- },
- },
- title: {
- display: true,
- text: 'KS2 Attainment Over Time (% meeting expected standard)',
- font: { family: "'Playfair Display', serif", size: 16, weight: 600 },
- },
- },
- scales: {
- y: {
- beginAtZero: true,
- max: 100,
- grid: { color: '#e5dfd5' },
- },
- x: {
- grid: { display: false },
- },
- },
+ {
+ label: "Writing %",
+ data: validData.map((d) => d.writing_expected_pct),
+ backgroundColor: "#c9a227",
+ borderRadius: 4,
},
- });
-
- // Update add to compare button
- const isSelected = state.selectedSchools.some(s => s.urn === data.school_info.urn);
- elements.addToCompare.textContent = isSelected ? 'Remove from Compare' : 'Add to Compare';
- elements.addToCompare.dataset.urn = data.school_info.urn;
+ {
+ label: "Maths %",
+ data: validData.map((d) => d.maths_expected_pct),
+ backgroundColor: "#e07256",
+ borderRadius: 4,
+ },
+ ],
+ },
+ options: {
+ responsive: true,
+ maintainAspectRatio: true,
+ aspectRatio: 2,
+ plugins: {
+ legend: {
+ position: "bottom",
+ labels: {
+ font: { family: "'DM Sans', sans-serif" },
+ usePointStyle: true,
+ },
+ },
+ title: {
+ display: true,
+ text: "KS2 Attainment Over Time (% meeting expected standard)",
+ font: { family: "'Playfair Display', serif", size: 16, weight: 600 },
+ },
+ },
+ scales: {
+ y: {
+ beginAtZero: true,
+ max: 100,
+ grid: { color: "#e5dfd5" },
+ },
+ x: {
+ grid: { display: false },
+ },
+ },
+ },
+ });
+
+ // Update add to compare button
+ const isSelected = state.selectedSchools.some(
+ (s) => s.urn === data.school_info.urn,
+ );
+ elements.addToCompare.textContent = isSelected
+ ? "Remove from Compare"
+ : "Add to Compare";
+ elements.addToCompare.dataset.urn = data.school_info.urn;
}
function closeModal() {
- elements.modal.classList.remove('active');
- document.body.style.overflow = '';
- state.currentSchoolData = null;
+ elements.modal.classList.remove("active");
+ document.body.style.overflow = "";
+ state.currentSchoolData = null;
}
function addToComparison(school) {
- if (state.selectedSchools.some(s => s.urn === school.urn)) return;
- if (state.selectedSchools.length >= 5) {
- alert('Maximum 5 schools can be compared at once');
- return;
- }
-
- state.selectedSchools.push(school);
- renderSelectedSchools();
+ if (state.selectedSchools.some((s) => s.urn === school.urn)) return;
+ if (state.selectedSchools.length >= 5) {
+ alert("Maximum 5 schools can be compared at once");
+ return;
+ }
+
+ state.selectedSchools.push(school);
+ renderSelectedSchools();
}
function removeFromComparison(urn) {
- state.selectedSchools = state.selectedSchools.filter(s => s.urn !== urn);
- renderSelectedSchools();
+ state.selectedSchools = state.selectedSchools.filter((s) => s.urn !== urn);
+ renderSelectedSchools();
}
function showEmptyState(container, message) {
- container.innerHTML = `
+ container.innerHTML = `