Skip to content

Commit 45ac3e9

Browse files
committed
Minor: Add dynamic version select options
1 parent 92f0892 commit 45ac3e9

3 files changed

Lines changed: 115 additions & 2 deletions

File tree

7.0.0-beta2/script.js

Lines changed: 46 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -106,6 +106,52 @@
106106
dropdownExitTimers.push(leaveTimer);
107107
});
108108

109+
// Load versions from versions.json
110+
async function loadVersions() {
111+
try {
112+
const response = await fetch('/versions.json', { cache: 'force-cache' });
113+
if (!response.ok) throw new Error('Network response was not ok');
114+
const versions = await response.json();
115+
return versions;
116+
} catch (error) {
117+
console.error('Error fetching versions.json:', error);
118+
return null;
119+
}
120+
}
121+
122+
const $versionSelect = document.getElementById('version-select');
123+
async function populateVersionSelect() {
124+
if (!$versionSelect) return;
125+
126+
const versions = await loadVersions();
127+
if (!versions || !Array.isArray(versions) || versions.length === 0) return;
128+
129+
let currentVersion = (window.netlogo?.currentVersion) ||
130+
($versionSelect.dataset.currentVersion) ||
131+
($versionSelect.querySelector('option[value="this"]').textContent.trim());
132+
if (!currentVersion) return;
133+
134+
const optionNodes = versions.map((version) => {
135+
const isCurrent = version.name === currentVersion || version.value === currentVersion;
136+
const option = document.createElement('option');
137+
option.value = isCurrent ? 'this' : version.value;
138+
option.textContent = version.name;
139+
option.selected = isCurrent;
140+
if (version.urlPrefix) {
141+
option.dataset.urlPrefix = version.urlPrefix;
142+
}
143+
if (version.disabled) {
144+
option.disabled = true;
145+
}
146+
return option;
147+
});
148+
149+
$versionSelect.innerHTML = '';
150+
optionNodes.forEach((option) => $versionSelect.appendChild(option));
151+
}
152+
153+
setTimeout(populateVersionSelect, 0); // Populate after current call stack
154+
109155
// Version Change
110156
const CURRENT_VERSION = 'this'; // Default to current version
111157
function goToVersion({ version, urlPrefix }) {
@@ -168,7 +214,6 @@
168214
});
169215
}
170216

171-
const $versionSelect = document.getElementById('version-select');
172217
$versionSelect.selectedIndex = 0;
173218
$versionSelect.addEventListener('change', function (e) {
174219
e.preventDefault();

7.0.0/script.js

Lines changed: 46 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -106,6 +106,52 @@
106106
dropdownExitTimers.push(leaveTimer);
107107
});
108108

109+
// Load versions from versions.json
110+
async function loadVersions() {
111+
try {
112+
const response = await fetch('/versions.json', { cache: 'force-cache' });
113+
if (!response.ok) throw new Error('Network response was not ok');
114+
const versions = await response.json();
115+
return versions;
116+
} catch (error) {
117+
console.error('Error fetching versions.json:', error);
118+
return null;
119+
}
120+
}
121+
122+
const $versionSelect = document.getElementById('version-select');
123+
async function populateVersionSelect() {
124+
if (!$versionSelect) return;
125+
126+
const versions = await loadVersions();
127+
if (!versions || !Array.isArray(versions) || versions.length === 0) return;
128+
129+
let currentVersion = (window.netlogo?.currentVersion) ||
130+
($versionSelect.dataset.currentVersion) ||
131+
($versionSelect.querySelector('option[value="this"]').textContent.trim());
132+
if (!currentVersion) return;
133+
134+
const optionNodes = versions.map((version) => {
135+
const isCurrent = version.name === currentVersion || version.value === currentVersion;
136+
const option = document.createElement('option');
137+
option.value = isCurrent ? 'this' : version.value;
138+
option.textContent = version.name;
139+
option.selected = isCurrent;
140+
if (version.urlPrefix) {
141+
option.dataset.urlPrefix = version.urlPrefix;
142+
}
143+
if (version.disabled) {
144+
option.disabled = true;
145+
}
146+
return option;
147+
});
148+
149+
$versionSelect.innerHTML = '';
150+
optionNodes.forEach((option) => $versionSelect.appendChild(option));
151+
}
152+
153+
setTimeout(populateVersionSelect, 0); // Populate after current call stack
154+
109155
// Version Change
110156
const CURRENT_VERSION = 'this'; // Default to current version
111157
function goToVersion({ version, urlPrefix }) {
@@ -168,7 +214,6 @@
168214
});
169215
}
170216

171-
const $versionSelect = document.getElementById('version-select');
172217
$versionSelect.selectedIndex = 0;
173218
$versionSelect.addEventListener('change', function (e) {
174219
e.preventDefault();

versions.json

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
[
2+
{ "name": "7.0.0", "value": "7.0.0" },
3+
{ "name": "7.0.0-beta2", "value": "7.0.0-beta2" },
4+
{ "name": "6.4", "value": "6.4.0", "urlPrefix": "${CCL}/6.4.0/docs" },
5+
{ "name": "6.3.0", "value": "6.3.0", "urlPrefix": "${CCL}/6.3.0/docs" },
6+
{ "name": "6.2.2", "value": "6.2.2", "urlPrefix": "${CCL}/6.2.2/docs" },
7+
{ "name": "6.1.1", "value": "6.1.1", "urlPrefix": "${CCL}/6.1.1/docs" },
8+
{ "name": "6.0.4", "value": "6.0.4", "urlPrefix": "${CCL}/6.0.4/docs" },
9+
{ "name": "6.0beta", "value": "6.0-BETA1", "urlPrefix": "${CCL}/6.0-BETA1/docs" },
10+
{ "name": "5.3.1", "value": "5.3.1", "urlPrefix": "${CCL}/5.3.1/docs" },
11+
{ "name": "5.2.1", "value": "5.2.1", "urlPrefix": "${CCL}/5.2.1/docs" },
12+
{ "name": "5.1.0", "value": "5.1.0", "urlPrefix": "${CCL}/5.1.0/docs" },
13+
{ "name": "5.0", "value": "5.0", "urlPrefix": "${CCL}/5.0/docs" },
14+
{ "name": "4.1", "value": "4.1", "urlPrefix": "${CCL}/4.1/docs" },
15+
{ "name": "4.0", "value": "4.0", "urlPrefix": "${CCL}/4.0/docs" },
16+
{ "name": "3.1", "value": "3.1", "urlPrefix": "${CCL}/3.1/docs" },
17+
{ "name": "3.0", "value": "3.0", "urlPrefix": "${CCL}/3.0/docs" },
18+
{ "name": "2.1", "value": "2.1", "disabled": true },
19+
{ "name": "2.0", "value": "2.0", "disabled": true },
20+
{ "name": "1.2", "value": "1.2", "disabled": true },
21+
{ "name": "1.1", "value": "1.1", "disabled": true },
22+
{ "name": "1.0", "value": "1.0", "disabled": true }
23+
]

0 commit comments

Comments
 (0)