1 files changed, 23 insertions, 3 deletions
diff --git a/latest/website_files/version-picker.js b/latest/website_files/version-picker.js
index b6f35f29c7..3174b5d0bc 100644
--- a/latest/website_files/version-picker.js
+++ b/latest/website_files/version-picker.js
@@ -100,10 +100,30 @@ function sortVersions(a, b) {
if (a === 'develop' || a === 'latest') return -1;
if (b === 'develop' || b === 'latest') return 1;
- const versionA = (a.match(/v\d+(\.\d+)+/) || [])[0];
- const versionB = (b.match(/v\d+(\.\d+)+/) || [])[0];
+ // If any of the versions do not confrom to a semantic version string, they
+ // will be sorted behind a valid version.
+ const versionA = (a.match(/v(\d+(\.\d+)+)/) || [])[1]?.split('.') ?? '';
+ const versionB = (b.match(/v(\d+(\.\d+)+)/) || [])[1]?.split('.') ?? '';
- return versionB.localeCompare(versionA);
+ for (let i = 0; i < Math.max(versionA.length, versionB.length); i++) {
+ if (versionB[i] === undefined) {
+ return -1;
+ }
+ if (versionA[i] === undefined) {
+ return 1;
+ }
+
+ const partA = parseInt(versionA[i], 10);
+ const partB = parseInt(versionB[i], 10);
+
+ if (partA > partB) {
+ return -1;
+ } else if (partB > partA) {
+ return 1;
+ }
+ }
+
+ return 0;
}
/**
|