gridsome-source-confluence

Confluence source for Gridsome

Usage no npm install needed!

<script type="module">
  import gridsomeSourceConfluence from 'https://cdn.skypack.dev/gridsome-source-confluence';
</script>

README

gridsome-source-confluence

Confluence source for Gridsome.

Install

yarn:

yarn add gridsome-source-confluence

npm:

npm install gridsome-source-confluence

Usage

gridsome.config.js

module.exports = {
  plugins: [
    {
      use: 'gridsome-source-confluence',
      options: {
        base_url:  "https://example.atlassian.net",
        space_key: "AS",
        debug: true,
        public_only: true,
        rate_limit: true 
        download_images: true
      }
    }
  ],
}

Options

| Option | Explanation | Default | Example | Required | |-|-|-|-|-| | base_url | The base URL of your Confluence instance | - | https://example.atlassian.net | | | space_key | Force spaceKey(s) comma separated | - | "AX,BG" | | | public_only | Only retrieve public confluence pages | false | false | | | prefix | Prefix of all types | Confluence | false | | | download_images | Download images and replace img url | false | true | | | username | Username for the private confluence page | - | johndoe@atlassian.net | required if public_only is false| | password | Password for the private confluence page | - | supersecretpassword | required if public_only is false| | rate_limit | Rate limit request (max concurrent 50) | false | true | | | debug | Show debug information | false | true | |

Creating pages

You can automaticly create pages based on the Confluence data.

gridsome.server.js

module.exports = function (api) {
  api.createPages(async ({ graphql, createPage }) => {
    const { data } = await graphql(`{
      allConfluenceParent {
        edges {
          node {
            title
            body
            slug
          }
        }
      }
      allConfluenceChild {
        edges {
          node {
            title
            body
            slug
          }
        }
      }
    }`)

    data.allConfluenceParent.edges.forEach(({ node }) => {
      createPage({
        path: `${node.slug}`,
        component: './src/templates/ConfluenceBody.vue',
        context: {
          body: node.body,
          title: node.title
        }
      })
    })

    data.allConfluenceChild.edges.forEach(({ node }) => {
      createPage({
        path: `${node.slug}`,
        component: './src/templates/ConfluenceBody.vue',
        context: {
          body: node.body,
          title: node.title
        }
      })
    })
  })
}

src/templates/ConfluenceBody.vue

<template>
  <Layout>
    <h1>{{ $context.title }}</h1>
    <div v-html="$context.body"></div>
  </Layout>
</template>