summary refs log tree commit diff
path: root/latest/docs/website_files/version-picker.js
diff options
context:
space:
mode:
Diffstat (limited to 'latest/docs/website_files/version-picker.js')
-rw-r--r--latest/docs/website_files/version-picker.js26
1 files changed, 23 insertions, 3 deletions
diff --git a/latest/docs/website_files/version-picker.js b/latest/docs/website_files/version-picker.js

index b6f35f29c7..3174b5d0bc 100644 --- a/latest/docs/website_files/version-picker.js +++ b/latest/docs/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; } /**