dev-novel
v0.0.6
Published
📓 Build an interactive JavaScript development page
Downloads
12
Readme
dev-novel
dev-novel is a clone of the well known storybook.js. It allows you to browse through example of a library. It's less complete than Storybook but works with every JS library, it's not linked to React components exclusively.
Getting started
Installation
$ npm i -D dev-novel
OR$ yarn add -D dev-novel
You will need your own build system (like webpack or rollup) to process the javascript and serve the page for you. You need to serve an index.html
with a body tag and voilà!
Usage
- First define your stories:
import { storiesOf } from 'dev-novel'
storiesOf('My first story')
.add('Hello world', (container: HTMLDivElement) => {
// create `<h1>Hello world</h1>`
const title = document.createElement('h1')
title.innerText = 'Hello world'
// display it into the story result
container.appendChild(title)
})
- You can add initializers / disposers that runs before and after your story:
This can be useful when you need to provide globals for your story, for instance depending onto another library.
import { registerInitializer, registerDisposer, storiesOf } from 'dev-novel'
registerInitializer(() => {
window._appState = {
user: {
firstName: 'Max',
lastName: 'Tyler'
}
}
})
registerDisposer(() => {
window._appState = undefined
delete window._appState
})
storiesOf('User profile')
.add('Display user fullname', (container: HTMLDivElement) => {
const span = document.createElement('span')
span.innerText = `${window._appState.user.firstName} ${window._appState.user.lastName}`
container.appendChild(span)
})
- Finally start dev-novel UI and open your page:
import { start, storiesOf } from 'dev-novel'
[...]
start({
projectName: ?string // name of the project to display in header of sidebar
projectLink: ?string // URL to link on the projectName
openAllStories?: boolean // open all parent stories item in the menu by default
})
Use the ActionLogger
With actions, you can inspect events and log them directly into the page. This is pretty neat when you are manually testing your components.
import { action, registerDisposer, storiesOf } from 'dev-novel'
// remove all event listeners when switching to another story
let eventDisposers = []
registerDisposer(() => {
eventDisposers.forEach(disposer => disposer())
eventDisposers = []
})
storiesOf('Button')
.add('click', container => {
const handler = action('button-click')
const button = document.createElement('button')
button.innerText = 'Click me!'
button.addEventListener('click', handler, false)
// remove event listener after story ran
const disposer = () => button.removeEventListener('click', handler, false)
eventDisposers.push(disposer)
// append button
container.appendChild(button)
})