UNPKG

asciidoctor-extension-interactive-runner

Version:

Turn static Asciidoc code listings into interactive playgrounds in web browsers.

84 lines (55 loc) 2.24 kB
# Asciidoctor Interactive Runner [![.github/workflows/test.yml](https://github.com/thom4parisot/asciidoctor-extension-interactive-runner/actions/workflows/test.yml/badge.svg)](https://github.com/thom4parisot/asciidoctor-extension-interactive-runner/actions/workflows/test.yml) > Transform static Asciidoc code listings into **interactive playgrounds** in web browsers. Turn them in microservices too! Target the code listings with the `%interactive` option and you're almost done! At the moment, the extension is only compatible with **JavaScript** source code, handled with the [runkit runner][]. ![](demo.gif) # Install ```bash npm install asciidoctor.js asciidoctor-extension-interactive-runner ``` # Usage ## Turning listings into interactive playgrounds Add the `%interactive` option to a source element, combined with the `javascript` language syntax. ```adoc [source%interactive,javascript] ---- const {camelCase} = require('lodash'); console.log(camelCase('get content')); // <1> ---- <1> Now you can see the output of this line in the browser. ``` ## Ephemeral microservices, HTTP(S) servers The extra option `%endpoint` transforms the interactive code in an ephemeral web service. ```adoc [source%interactive%endpoint,javascript] ---- const micro = require('micro'); const {random} = require('pokemon'); const server = micro((req, res) => random()); server.listen(4000); ---- ``` **Limitation**: you have to name the variable `server` or to make it as the `module.exports` for this feature to work. ## Specify a Runtime version You can specify a Node version with the `runner-node` Asciidoc attribute. Without specifying it, it is assumed it is the Node version converting the Asciidoc document. ```adoc :runner-node: v16 [source%interactive,javascript] ---- console.log(process.version); ---- ``` ## Asciidoctor Conversion ```js const asciidoctor = require('@asciidoctor/core')(); const runnerExtension = require('asciidoctor-extension-interactive-runner'); runnerExtension.register(asciidoctor.Extensions); asciidoctor.convertFile('path/to/content.adoc', { to_file: 'path/to/content.html', backend: 'html5', }) ``` # License [MIT License](LICENSE). [runkit runner]: https://runkit.com/npm/