Skip to content

Commit

Permalink
Sort versions in the documentation version picker appropriately. (#16966
Browse files Browse the repository at this point in the history
)

Fixes #16964 

This adds a proper sorter for versions which takes into account semantic
versions, rather than just relying on localeCompare.
  • Loading branch information
Half-Shot authored Mar 14, 2024
1 parent acc2f00 commit 1198f64
Show file tree
Hide file tree
Showing 2 changed files with 24 additions and 3 deletions.
1 change: 1 addition & 0 deletions changelog.d/16966.doc
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
Fix the sort order for the documentation version picker, so that newer releases appear above older ones.
26 changes: 23 additions & 3 deletions docs/website_files/version-picker.js
Original file line number Diff line number Diff line change
Expand Up @@ -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;
}

/**
Expand Down

0 comments on commit 1198f64

Please sign in to comment.