Skip to content

Commit f32633f

Browse files
committed
update-sites/stats: add site sort modes
1 parent 25e9e80 commit f32633f

File tree

1 file changed

+105
-30
lines changed

1 file changed

+105
-30
lines changed

_pages/update-sites/stats.md

Lines changed: 105 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -49,7 +49,14 @@ section: Extend:Update Sites
4949
<div id="controls">
5050
<div class="grid">
5151
<label class="heading">Update Site:</label>
52-
<select id="site" onchange="updateChart()"></select>
52+
<div class="widgets">
53+
<select id="sort" onchange="updateSiteList()">
54+
<option value="alpha">Sort: A-Z</option>
55+
<option value="ips">Sort: Most Used</option>
56+
<option value="date">Sort: Newest</option>
57+
</select>
58+
<select id="site" onchange="updateChart()"></select>
59+
</div>
5360

5461
<label class="heading">Compare To:</label>
5562
<div class="widgets">
@@ -106,6 +113,79 @@ section: Extend:Update Sites
106113
return { site, op, site2, timeWindow, countType, rollingAverage };
107114
}
108115

116+
function updateSiteList() {
117+
const sortMode = document.getElementById('sort').value;
118+
const siteSelect = document.getElementById('site');
119+
const site2Select = document.getElementById('site2');
120+
121+
// Remember current selections
122+
const currentSite = siteSelect.value;
123+
const currentSite2 = site2Select.value;
124+
125+
// Sort sites according to selected mode
126+
let sortedSites = [...window.availableSites];
127+
128+
switch (sortMode) {
129+
case 'alpha':
130+
sortedSites.sort();
131+
break;
132+
case 'ips':
133+
sortedSites.sort((a, b) => {
134+
const ipsA = window.sitesMetadata[a]?.total_unique_ips || 0;
135+
const ipsB = window.sitesMetadata[b]?.total_unique_ips || 0;
136+
return ipsB - ipsA; // Descending
137+
});
138+
break;
139+
case 'date':
140+
sortedSites.sort((a, b) => {
141+
const dateA = window.sitesMetadata[a]?.date_range?.start || '00000000';
142+
const dateB = window.sitesMetadata[b]?.date_range?.start || '00000000';
143+
return dateB.localeCompare(dateA); // Newest first
144+
});
145+
break;
146+
}
147+
148+
// Clear and repopulate dropdowns
149+
siteSelect.innerHTML = '';
150+
site2Select.innerHTML = '';
151+
152+
for (const siteName of sortedSites) {
153+
const siteOption = new Option();
154+
const site2Option = new Option();
155+
siteOption.value = site2Option.value = siteName;
156+
157+
// Add metadata to option text if available
158+
const metadata = window.sitesMetadata[siteName];
159+
if (metadata && metadata.total_unique_ips) {
160+
siteOption.innerHTML = site2Option.innerHTML =
161+
`${siteName} (${metadata.total_unique_ips.toLocaleString()})`;
162+
} else {
163+
siteOption.innerHTML = site2Option.innerHTML = siteName;
164+
}
165+
166+
siteSelect.appendChild(siteOption);
167+
site2Select.appendChild(site2Option);
168+
}
169+
170+
// Restore selections if possible
171+
if (sortedSites.includes(currentSite)) {
172+
siteSelect.value = currentSite;
173+
} else if (sortedSites.length > 0) {
174+
siteSelect.selectedIndex = 0;
175+
}
176+
177+
if (sortedSites.includes(currentSite2)) {
178+
site2Select.value = currentSite2;
179+
} else if (sortedSites.includes('Java-8')) {
180+
site2Select.value = 'Java-8';
181+
} else if (sortedSites.length > 1) {
182+
site2Select.selectedIndex = 1;
183+
}
184+
185+
// Update chart with new selection
186+
updateChart();
187+
}
188+
109189
function updateCompareMode() {
110190
const op = document.getElementById('op').value;
111191
const site2Select = document.getElementById('site2');
@@ -432,30 +512,22 @@ section: Extend:Update Sites
432512
const sitesData = await response.json();
433513
window.sitesMetadata = sitesData;
434514

435-
// Extract site names and sort them
436-
window.availableSites = Object.keys(sitesData).sort();
515+
// Extract site names (will be sorted by updateSiteList)
516+
window.availableSites = Object.keys(sitesData);
437517

438-
// Add sites as options to dropdown list
518+
// Set default selections
439519
const siteSelect = document.getElementById('site');
440520
const site2Select = document.getElementById('site2');
441-
for (const siteName of window.availableSites) {
442-
const siteOption = new Option();
443-
const site2Option = new Option();
444-
siteOption.value = site2Option.value = siteName;
445-
446-
// Add metadata to option text if available
447-
const metadata = sitesData[siteName];
448-
if (metadata && metadata.total_unique_ips) {
449-
siteOption.innerHTML = site2Option.innerHTML =
450-
`${siteName} (${metadata.total_unique_ips.toLocaleString()})`;
451-
} else {
452-
siteOption.innerHTML = site2Option.innerHTML = siteName;
453-
}
454521

455-
if (siteName === 'Fiji') siteOption.selected = true;
456-
else if (siteName === 'Java-8') site2Option.selected = true;
457-
siteSelect.appendChild(siteOption);
458-
site2Select.appendChild(site2Option);
522+
// Populate and sort site lists
523+
updateSiteList();
524+
525+
// Set initial selections after population
526+
if (window.availableSites.includes('Fiji')) {
527+
siteSelect.value = 'Fiji';
528+
}
529+
if (window.availableSites.includes('Java-8')) {
530+
site2Select.value = 'Java-8';
459531
}
460532

461533
// Initialize compare mode state and chart
@@ -466,18 +538,21 @@ section: Extend:Update Sites
466538
console.error('Failed to initialize page:', error);
467539
// Fallback to hardcoded list if sites.json fails
468540
window.availableSites = ['Java-8', 'Fiji'];
541+
window.sitesMetadata = {}; // Empty metadata for fallback
542+
469543
const siteSelect = document.getElementById('site');
470544
const site2Select = document.getElementById('site2');
471-
for (const siteName of window.availableSites) {
472-
const siteOption = new Option();
473-
const site2Option = new Option();
474-
siteOption.value = site2Option.value =
475-
siteOption.innerHTML = site2Option.innerHTML = siteName;
476-
if (siteName === 'Fiji') siteOption.selected = true;
477-
else if (siteName === 'Java-8') site2Option.selected = true;
478-
siteSelect.appendChild(siteOption);
479-
site2Select.appendChild(site2Option);
545+
546+
updateSiteList();
547+
548+
// Set fallback selections
549+
if (window.availableSites.includes('Fiji')) {
550+
siteSelect.value = 'Fiji';
551+
}
552+
if (window.availableSites.includes('Java-8')) {
553+
site2Select.value = 'Java-8';
480554
}
555+
481556
updateCompareMode();
482557
updateChart();
483558
}

0 commit comments

Comments
 (0)