Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
42 changes: 33 additions & 9 deletions site/_includes/filterjs.html
Original file line number Diff line number Diff line change
Expand Up @@ -39,6 +39,7 @@
let card = cards[i];
let name = card.getAttribute('data-name').toUpperCase();
let version = card.getAttribute('data-version');
let maxVersion = card.getAttribute('data-max-version');

if (!isCompatible(version, targetVersion))
continue;
Expand All @@ -57,9 +58,10 @@
let card = cards[i];
let name = card.getAttribute('data-name').toUpperCase();
let version = card.getAttribute('data-version');
let maxVersion = card.getAttribute('data-max-version');

let searchMatches = name.indexOf(searchFilter) >= 0;
let versionMatches = targetVersion == '' || isCompatible(version, targetVersion);
let versionMatches = targetVersion == '' || isCompatible(version, targetVersion, maxVersion);
let isNewest = true;
if (name in versions) {
isNewest = versions[name] == version;
Expand All @@ -69,26 +71,48 @@
}
}

function isCompatible(pluginVersion, driverVersion) {
function isCompatible(pluginVersion, driverVersion, maxPluginVersion) {
// support truth table:
// plugin / driver
// 0.5.3.3 and 0.6.0.0: false
// 0.6.0.0 and 0.5.3.3: false
// 0.5.2.0 and 0.5.3.3: true
// 0.5.3.3 and 0.5.2.0: false

let pluginSplit = pluginVersion.split('.');
let driverSplit = driverVersion.split('.');
let pluginSplit = getIntSplit(pluginVersion);
let maxPluginSplit = getIntSplit(maxPluginVersion);
let driverSplit = getIntSplit(driverVersion);

if (pluginSplit[0] != driverSplit[0])
return false;
try {
if (pluginSplit[0] != driverSplit[0] || (maxPluginSplit != null && maxPluginSplit[0] != driverSplit[0])) {
return false;
}

if (pluginSplit[1] != driverSplit[1])
return false;
if (pluginSplit[1] != driverSplit[1] || (maxPluginSplit != null && maxPluginSplit[1] != driverSplit[1])) {
return false;
}

if (pluginSplit[2] > driverSplit[2] || (maxPluginSplit != null && maxPluginSplit[2] < driverSplit[2])) {
return false;
}

if (pluginSplit[2] > driverSplit[2])
// The final version number on a plugin's base version number is allowed through no matter what, this filtering is intentionally not applied:
// pluginSplit[2] == driverSplit[2] && pluginSplit[3] > driverSplit[3]
// Only the MaxSupportedPluginVersion is checked for the final version number
if (maxPluginSplit != null && maxPluginSplit[2] == driverSplit[2] && maxPluginSplit[3] < driverSplit[3])
return false;
} catch (e) {
console.error(`Failed to determine plugin version compatibility. Plugin version: ${pluginVersion}. Driver version: ${driverVersion}.\nError: ${e}`);
return false;
}

return true;
}

function getIntSplit(inputString) {
if (inputString)
return inputString.split('.').map((x) => Number(x));

return null;
}
</script>
2 changes: 1 addition & 1 deletion site/_layouts/plugins.html
Original file line number Diff line number Diff line change
Expand Up @@ -73,7 +73,7 @@
{% endif %}
{%- endcapture -%}
<div class="card mb-2 plugin-metadata-card"
data-name="{{ metadata.Name }}" data-version="{{ metadata.SupportedDriverVersion }}">
data-name="{{ metadata.Name }}" data-version="{{ metadata.SupportedDriverVersion }}" data-max-version="{{ metadata.MaxSupportedDriverVersion }}">
<div class="card-body d-flex flex-lg-row flex-column flex-wrap p-4 justify-content-end">
<div class="flex-fill">
<!-- version badges -->
Expand Down
Loading