From bcbd6140527f92a6d8fbdabcbe8e10953a7a0bd3 Mon Sep 17 00:00:00 2001 From: JakeSCahill Date: Wed, 11 Dec 2024 16:22:37 +0000 Subject: [PATCH 1/2] Add template for autogenerated index pages from filtered docs --- src/helpers/get-index-data.js | 17 +++++++++++++++++ src/partials/article.hbs | 2 ++ src/partials/index-list.hbs | 18 ++++++++++++++++++ 3 files changed, 37 insertions(+) create mode 100644 src/helpers/get-index-data.js create mode 100644 src/partials/index-list.hbs diff --git a/src/helpers/get-index-data.js b/src/helpers/get-index-data.js new file mode 100644 index 00000000..b5f4cc43 --- /dev/null +++ b/src/helpers/get-index-data.js @@ -0,0 +1,17 @@ + +module.exports = ({ data: { root } }) => { + const { page } = root + const indexKey = page.attributes['index-data'] + if (!indexKey) return null + const indexData = page.component.asciidoc.attributes[indexKey] + if (!indexData) return null + try { + const parsedData = JSON.parse(indexData) + const currentPageUrl = page.url + const filteredData = parsedData.filter((item) => item.url !== currentPageUrl) + return filteredData + } catch (error) { + console.log(`Error parsing JSON attribute "${indexKey}" in ${page.url} component. Index page will be empty. Make sure the generate-index-data extension is correctly configured.\n\n ${error}`) + return null + } +} diff --git a/src/partials/article.hbs b/src/partials/article.hbs index 03910d48..264c8fb0 100644 --- a/src/partials/article.hbs +++ b/src/partials/article.hbs @@ -36,6 +36,8 @@ {{> component-home-v2}} {{else if (eq page.attributes.role 'bloblang-playground')}} {{> bloblang-playground}} +{{else if (eq page.attributes.role 'index-list')}} + {{> index-list}} {{else if (eq page.layout 'index')}} {{> index}} {{else if (eq page.attributes.role 'related-labs')}} diff --git a/src/partials/index-list.hbs b/src/partials/index-list.hbs new file mode 100644 index 00000000..dda7a950 --- /dev/null +++ b/src/partials/index-list.hbs @@ -0,0 +1,18 @@ +{{{page.contents}}} + +{{#with (get-index-data) as |indexData|}} + {{#if indexData}} + + {{else}} +

No index data found.

+ {{/if}} +{{/with}} From a560ae411d23eae1dc8bd8b3510a784259ece2aa Mon Sep 17 00:00:00 2001 From: JakeSCahill Date: Thu, 12 Dec 2024 10:19:15 +0000 Subject: [PATCH 2/2] Support filtering by component and version --- src/helpers/get-index-data.js | 29 ++++++++++++++++++++++++++--- 1 file changed, 26 insertions(+), 3 deletions(-) diff --git a/src/helpers/get-index-data.js b/src/helpers/get-index-data.js index b5f4cc43..def60172 100644 --- a/src/helpers/get-index-data.js +++ b/src/helpers/get-index-data.js @@ -1,17 +1,40 @@ - module.exports = ({ data: { root } }) => { const { page } = root const indexKey = page.attributes['index-data'] if (!indexKey) return null + const indexData = page.component.asciidoc.attributes[indexKey] if (!indexData) return null + const matchComponentVersion = page.attributes['match-component-version'] + try { const parsedData = JSON.parse(indexData) const currentPageUrl = page.url - const filteredData = parsedData.filter((item) => item.url !== currentPageUrl) + const currentComponent = page.component.name + const currentVersion = page.version + + const filteredData = parsedData.reduce((acc, item) => { + if (item.pages && Array.isArray(item.pages)) { + const filteredPages = item.pages.filter((page) => { + const isNotCurrentPage = page.url !== currentPageUrl + + // Optional filtering by component and version + const matchesComponentVersion = !matchComponentVersion || ( + item.component === currentComponent && item.version === currentVersion + ) + + return isNotCurrentPage && matchesComponentVersion + }) + acc.push(...filteredPages) + } + return acc + }, []) + return filteredData } catch (error) { - console.log(`Error parsing JSON attribute "${indexKey}" in ${page.url} component. Index page will be empty. Make sure the generate-index-data extension is correctly configured.\n\n ${error}`) + console.log( + `Error parsing JSON attribute "${indexKey}" in ${page.url} component. Index page will be empty. Make sure the generate-index-data extension is correctly configured.\n\n ${error}` + ) return null } }