diff --git a/assets/js/main.js b/assets/js/main.js index 963da7034..ec19a20a4 100644 --- a/assets/js/main.js +++ b/assets/js/main.js @@ -37,6 +37,30 @@ document.addEventListener("DOMContentLoaded", () => { } } + document.querySelectorAll('.btn-check[data-version]').forEach(el => { + el.addEventListener('change', () => { + const activeVersions = Array.from( + document.querySelectorAll('.btn-check[data-version]:checked') + ).map(e => e.dataset.version); + + const items = document.querySelectorAll('[data-versions]'); + + items.forEach((item) => { + const versions = item.dataset.versions + .trim() + .split(/\s+/); + + const match = + activeVersions.length === 0 + ? true + : activeVersions.some(v => versions.includes(v)); + + item.classList.toggle('d-none', !match); + }); + + }); + }); + document.querySelectorAll('.code-copy-btn').forEach((button) => { button.addEventListener('click', () => { const codeBlock = button.nextElementSibling?.querySelector('code'); diff --git a/assets/scss/docs.scss b/assets/scss/docs.scss index 4ab4ddb8c..4f3a03aa6 100644 --- a/assets/scss/docs.scss +++ b/assets/scss/docs.scss @@ -5,3 +5,4 @@ @import 'docs/iconstage'; @import 'docs/preview'; @import 'docs/misc'; +@import "docs/version-filter"; diff --git a/assets/scss/docs/_version-filter.scss b/assets/scss/docs/_version-filter.scss new file mode 100644 index 000000000..732b4f4ac --- /dev/null +++ b/assets/scss/docs/_version-filter.scss @@ -0,0 +1,16 @@ +.version-badge { + cursor: pointer; + user-select: none; + transition: all .2s ease; + opacity: .6; +} + +/* checked state */ +.btn-check:checked + .version-badge { + opacity: 1; +} + +/* hover */ +.version-badge:hover { + opacity: .85; +} diff --git a/tmpl/html/docs/_filters.html.twig b/tmpl/html/docs/_filters.html.twig index b07ca2643..40da8cffb 100644 --- a/tmpl/html/docs/_filters.html.twig +++ b/tmpl/html/docs/_filters.html.twig @@ -7,5 +7,26 @@ {%- endif -%} - + {%- if showVersionFilter is not defined or showVersionFilter -%} +