Socket
Socket
Sign inDemoInstall

asciidoctor-chart

Package Overview
Dependencies
14
Maintainers
1
Versions
5
Alerts
File Explorer

Advanced tools

Install Socket

Detect and block malicious and high-risk dependencies

Install

    asciidoctor-chart

Asciidoctor Chart extension


Version published
Weekly downloads
3
decreased by-50%
Maintainers
1
Install size
537 kB
Created
Weekly downloads
 

Readme

Source

:bar_chart: Asciidoctor Chart Extension

Travis build status

An extension for Asciidoctor.js to render charts.

Install

Node.js

Install the dependencies:

$ npm install asciidoctor.js asciidoctor-chart

Create a file named chart.js with the following content and run it:

const asciidoctor = require('asciidoctor.js')()
const chart = require('asciidoctor-chart')

const input = `
[chart,line]
....
January,February,March
28,48,40
65,59,80
....`

chart.register(asciidoctor.Extensions)
console.log(asciidoctor.convert(input)) // <1>

const registry = asciidoctor.Extensions.create()
chart.register(registry)
console.log(asciidoctor.convert(input, {'extension_registry': registry})) // <2>

<1> Register the extension in the global registry <2> Register the extension in a dedicated registry

IMPORTANT

To effectively render the chart in your HTML page you will need to add the Chartist CSS and JavaScript:

<!DOCTYPE html>
<html>
  <head>
    <link href="node_modules/chartist/dist/chartist.min.css" rel="stylesheet">
  </head>
  <body>
    <!-- Site content goes here !-->
    <script src="node_modules/chartist/dist/chartist.min.js"></script>
  </body>
</html>

You will also need to add this JavaScript (after chartist.min.js) to generate all the charts in your <body>:

document.body.querySelectorAll('div.ct-chart').forEach((node) => {
  const options = {
    height: node.dataset['chartHeight'],
    width: node.dataset['chartWidth'],
    colors: node.dataset['chartColors'].split(',')
  }
  const dataset = Object.assign({}, node.dataset)
  const series = Object.values(Object.keys(dataset)
    .filter(key => key.startsWith('chartSeries-'))
    .reduce((obj, key) => {
      obj[key] = dataset[key]
      return obj
    }, {})).map(value => value.split(','))
  const data = {
    labels: node.dataset['chartLabels'].split(','),
    series: series
  }
  Chartist[node.dataset['chartType']](node, data, options)
})

You can also render a chart from a csv file.

Create a file named sales.csv with the following content:

January,February,March
28,48,40
65,59,80

And use the following syntax:

chart::sales.csv[bar,800,500]

Browser

Install the dependencies:

$ npm install asciidoctor.js asciidoctor-chart

Create a file named chart.html with the following content and open it in your browser:

<html>
  <head>
    <script src="node_modules/asciidoctor.js/dist/browser/asciidoctor.js"></script>
    <script src="node_modules/asciidoctor-chart/dist/browser/asciidoctor-chart.js"></script>
    <link href="node_modules/chartist/dist/chartist.min.css" rel="stylesheet">
  </head>
  <body>
    <div id="content"></div>
    <script>
      var input = '[chart,line]\n' +
        '....\n' +
        'January,February,March\n' +
        '28,48,40\n' +
        '65,59,80\n' +
        '....'

      var asciidoctor = Asciidoctor()
      var chart = AsciidoctorChart

      const registry = asciidoctor.Extensions.create()
      chart.register(registry)
      var result = asciidoctor.convert(input, {'extension_registry': registry})
      document.getElementById('content').innerHTML = result
    </script>
    <script src="node_modules/chartist/dist/chartist.min.js"></script>
    <script>
      document.body.querySelectorAll('div.ct-chart').forEach((node) => {
        const options = {
          height: node.dataset['chartHeight'],
          width: node.dataset['chartWidth'],
          colors: node.dataset['chartColors'].split(',')
        }
        const dataset = Object.assign({}, node.dataset)
        const series = Object.values(Object.keys(dataset)
          .filter(key => key.startsWith('chartSeries-'))
          .reduce((obj, key) => {
            obj[key] = dataset[key]
            return obj
          }, {})).map(value => value.split(','))
        const data = {
          labels: node.dataset['chartLabels'].split(','),
          series: series
        }
        Chartist[node.dataset['chartType']](node, data, options)
      })
    </script>
  </body>
</html>

<1> Register the extension in the global registry <2> Register the extension in a dedicated registry

Usage

You can configure the type (line or bar), the height and the width in pixel:

Using positional attributes

// in this order: type, width, height
chart::sales.csv[bar,800,500]

Using named attributes

chart::sales.csv[height=500,width=800,type=line]

By default the chart will be a 600px * 400px line chart.

How ?

This extension is using Chartist.js to render responsives charts.

Keywords

FAQs

Last updated on 16 Jun 2020

Did you know?

Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.

Install

Related posts

SocketSocket SOC 2 Logo

Product

  • Package Alerts
  • Integrations
  • Docs
  • Pricing
  • FAQ
  • Roadmap

Stay in touch

Get open source security insights delivered straight into your inbox.


  • Terms
  • Privacy
  • Security

Made with ⚡️ by Socket Inc