From 5e59b187f2d24b864edd97815bab30d14900b42d Mon Sep 17 00:00:00 2001 From: Arunoda Susiripala Date: Tue, 30 Aug 2016 05:37:34 +0530 Subject: [PATCH 01/47] Initial Release. --- .babelrc | 3 ++ .eslintrc | 17 ++++++++ .gitignore | 4 ++ .npmignore | 2 + .scripts/get_gh_pages_url.js | 11 ++++++ .scripts/mocha_runner.js | 33 ++++++++++++++++ .scripts/prepublish.sh | 16 ++++++++ .scripts/publish_storybook.sh | 47 ++++++++++++++++++++++ .scripts/user/prepublish.sh | 1 + .scripts/user/pretest.js | 1 + .storybook/config.js | 12 ++++++ CONTRIBUTING.md | 7 ++++ LICENSE | 21 ++++++++++ README.md | 3 ++ package.json | 64 ++++++++++++++++++++++++++++++ register.js | 1 + src/index.js | 19 +++++++++ src/register.js | 74 +++++++++++++++++++++++++++++++++++ src/stories/index.js | 0 src/tests/index.js | 5 +++ 20 files changed, 341 insertions(+) create mode 100644 .babelrc create mode 100644 .eslintrc create mode 100644 .gitignore create mode 100644 .npmignore create mode 100644 .scripts/get_gh_pages_url.js create mode 100644 .scripts/mocha_runner.js create mode 100644 .scripts/prepublish.sh create mode 100644 .scripts/publish_storybook.sh create mode 100644 .scripts/user/prepublish.sh create mode 100644 .scripts/user/pretest.js create mode 100644 .storybook/config.js create mode 100644 CONTRIBUTING.md create mode 100644 LICENSE create mode 100644 README.md create mode 100644 package.json create mode 100644 register.js create mode 100644 src/index.js create mode 100644 src/register.js create mode 100644 src/stories/index.js create mode 100644 src/tests/index.js diff --git a/.babelrc b/.babelrc new file mode 100644 index 000000000000..e68d2fea1136 --- /dev/null +++ b/.babelrc @@ -0,0 +1,3 @@ +{ + "presets": ["es2015", "stage-2", "react"] +} diff --git a/.eslintrc b/.eslintrc new file mode 100644 index 000000000000..4b01e776c82c --- /dev/null +++ b/.eslintrc @@ -0,0 +1,17 @@ +{ + "extends": "airbnb", + "rules": { + "arrow-body-style": 0, + "prefer-arrow-callback": 0, + "func-names": 0, + "react/jsx-no-bind": 0, + "react/jsx-uses-react": 1, + "react/prefer-stateless-function": 0 + }, + "parserOptions": { + "ecmaVersion": 6, + "ecmaFeatures": { + "experimentalObjectRestSpread": true + } + } +} diff --git a/.gitignore b/.gitignore new file mode 100644 index 000000000000..06b809a44b37 --- /dev/null +++ b/.gitignore @@ -0,0 +1,4 @@ +node_modules +*.log +.idea +dist diff --git a/.npmignore b/.npmignore new file mode 100644 index 000000000000..b467c377fd1b --- /dev/null +++ b/.npmignore @@ -0,0 +1,2 @@ +src +.babelrc diff --git a/.scripts/get_gh_pages_url.js b/.scripts/get_gh_pages_url.js new file mode 100644 index 000000000000..062c690d8bea --- /dev/null +++ b/.scripts/get_gh_pages_url.js @@ -0,0 +1,11 @@ +// IMPORTANT +// --------- +// This is an auto generated file with React CDK. +// Do not modify this file. + +const parse = require('git-url-parse'); +var ghUrl = process.argv[2]; +const parsedUrl = parse(ghUrl); + +const ghPagesUrl = 'https://' + parsedUrl.owner + '.github.io/' + parsedUrl.name; +console.log(ghPagesUrl); diff --git a/.scripts/mocha_runner.js b/.scripts/mocha_runner.js new file mode 100644 index 000000000000..87d88197cbc9 --- /dev/null +++ b/.scripts/mocha_runner.js @@ -0,0 +1,33 @@ +// IMPORTANT +// --------- +// This is an auto generated file with React CDK. +// Do not modify this file. +// Use `.scripts/user/pretest.js instead`. + +require('babel-core/register'); +require('babel-polyfill'); + +// Add jsdom support, which is required for enzyme. +var jsdom = require('jsdom').jsdom; + +var exposedProperties = ['window', 'navigator', 'document']; + +global.document = jsdom(''); +global.window = document.defaultView; +Object.keys(document.defaultView).forEach((property) => { + if (typeof global[property] === 'undefined') { + exposedProperties.push(property); + global[property] = document.defaultView[property]; + } +}); + +global.navigator = { + userAgent: 'node.js' +}; + +process.on('unhandledRejection', function (error) { + console.error('Unhandled Promise Rejection:'); + console.error(error && error.stack || error); +}); + +require('./user/pretest.js'); diff --git a/.scripts/prepublish.sh b/.scripts/prepublish.sh new file mode 100644 index 000000000000..a25d40dee4ed --- /dev/null +++ b/.scripts/prepublish.sh @@ -0,0 +1,16 @@ +#!/bin/bash + +# IMPORTANT +# --------- +# This is an auto generated file with React CDK. +# Do not modify this file. +# Use `.scripts/user/prepublish.sh instead`. + +echo "=> Transpiling 'src' into ES5 ..." +echo "" +rm -rf ./dist +./node_modules/.bin/babel --ignore tests,stories --plugins "transform-runtime" ./src --out-dir ./dist +echo "" +echo "=> Transpiling completed." + +. .scripts/user/prepublish.sh diff --git a/.scripts/publish_storybook.sh b/.scripts/publish_storybook.sh new file mode 100644 index 000000000000..f8457308528e --- /dev/null +++ b/.scripts/publish_storybook.sh @@ -0,0 +1,47 @@ +#!/bin/bash + +# IMPORTANT +# --------- +# This is an auto generated file with React CDK. +# Do not modify this file. + +set -e # exit with nonzero exit code if anything fails + +# get GIT url + +GIT_URL=`git config --get remote.origin.url` +if [[ $GIT_URL == "" ]]; then + echo "This project is not configured with a remote git repo". + exit 1 +fi + +# clear and re-create the out directory +rm -rf .out || exit 0; +mkdir .out; + +# run our compile script, discussed above +build-storybook -o .out + +# go to the out directory and create a *new* Git repo +cd .out +git init + +# inside this git repo we'll pretend to be a new user +git config user.name "GH Pages Bot" +git config user.email "hello@ghbot.com" + +# The first and only commit to this new Git repo contains all the +# files present with the commit message "Deploy to GitHub Pages". +git add . +git commit -m "Deploy Storybook to GitHub Pages" + +# Force push from the current repo's master branch to the remote +# repo's gh-pages branch. (All previous history on the gh-pages branch +# will be lost, since we are overwriting it.) We redirect any output to +# /dev/null to hide any sensitive credential data that might otherwise be exposed. +git push --force --quiet $GIT_URL master:gh-pages > /dev/null 2>&1 +cd .. +rm -rf .out + +echo "" +echo "=> Storybook deployed to: `node .scripts/get_gh_pages_url.js $GIT_URL`" diff --git a/.scripts/user/prepublish.sh b/.scripts/user/prepublish.sh new file mode 100644 index 000000000000..fdb64997963e --- /dev/null +++ b/.scripts/user/prepublish.sh @@ -0,0 +1 @@ +# Use this file to your own code to run at NPM `prepublish` event. diff --git a/.scripts/user/pretest.js b/.scripts/user/pretest.js new file mode 100644 index 000000000000..a81bd36c2255 --- /dev/null +++ b/.scripts/user/pretest.js @@ -0,0 +1 @@ +// Use this file to setup any test utilities. diff --git a/.storybook/config.js b/.storybook/config.js new file mode 100644 index 000000000000..d279dbf59011 --- /dev/null +++ b/.storybook/config.js @@ -0,0 +1,12 @@ +// IMPORTANT +// --------- +// This is an auto generated file with React CDK. +// Do not modify this file. + +import { configure } from '@kadira/storybook'; + +function loadStories() { + require('../src/stories'); +} + +configure(loadStories, module); diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md new file mode 100644 index 000000000000..3b228bda329f --- /dev/null +++ b/CONTRIBUTING.md @@ -0,0 +1,7 @@ +# Contributing to Storybook Addon Notes Component + +We welcome your help to make this component better. This document will help to streamline the contributing process and save everyone's precious time. + +## Development Setup + +This component has been setup with [React CDK](https://github.com/kadirahq/react-cdk). Refer [React CDK documentation](https://github.com/kadirahq/react-cdk)) to get started with the development. diff --git a/LICENSE b/LICENSE new file mode 100644 index 000000000000..c2d2a91d0e89 --- /dev/null +++ b/LICENSE @@ -0,0 +1,21 @@ +The MIT License (MIT) + +Copyright (c) 2016 Your Name. + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. diff --git a/README.md b/README.md new file mode 100644 index 000000000000..1ce5c4806403 --- /dev/null +++ b/README.md @@ -0,0 +1,3 @@ +# Storybook Addon Notes Component + +Storybook Addon Notes Component diff --git a/package.json b/package.json new file mode 100644 index 000000000000..a45bc541f5c6 --- /dev/null +++ b/package.json @@ -0,0 +1,64 @@ +{ + "name": "@kadira/storybook-addon-notes", + "version": "0.0.0", + "description": "Write notes for your Storybook stories.", + "repository": { + "type": "git", + "url": "https://github.com/kadirahq/storybook-addon-notes.git" + }, + "license": "MIT", + "scripts": { + "prepublish": ". ./.scripts/prepublish.sh", + "lint": "eslint src", + "lintfix": "eslint src --fix", + "testonly": "mocha --require .scripts/mocha_runner src/**/tests/**/*.js", + "test": "npm run lint && npm run testonly", + "test-watch": "npm run testonly -- --watch --watch-extensions js", + "storybook": "start-storybook -p 9010", + "publish-storybook": "bash .scripts/publish_storybook.sh" + }, + "devDependencies": { + "react": "^15.0.0", + "react-dom": "^15.0.0", + + "babel-core": "^6.5.0", + "babel-loader": "^6.2.4", + "babel-polyfill": "^6.5.0", + "babel-preset-es2015": "^6.5.0", + "babel-preset-react": "^6.5.0", + "babel-preset-stage-2": "^6.5.0", + "babel-plugin-transform-runtime": "^6.5.0", + "babel-cli": "^6.5.0", + + "eslint": "^2.7.0", + "babel-eslint": "^6.0.2", + "eslint-config-airbnb": "^7.0.0", + "eslint-plugin-babel": "^3.2.0", + "eslint-plugin-react": "^4.3.0", + + "mocha": "^2.4.5", + "chai": "^3.5.0", + "sinon": "^1.17.3", + "enzyme": "^2.2.0", + "react-addons-test-utils": "^15.0.0", + "jsdom": "^8.3.1", + "eslint-plugin-jsx-a11y": "^0.6.2", + + "@kadira/storybook": "^2.5.2", + "git-url-parse": "^6.0.1" + }, + "peerDependencies": { + "react": "^0.14.7 || ^15.0.0", + "@kadira/storybook-addons": "^v1.3.1" + }, + "dependencies": { + "babel-runtime": "^6.5.0" + }, + "main": "dist/index.js", + "engines": { + "npm": "^3.0.0" + }, + "keywords": [ + "react", "storybook", "addon" + ] +} diff --git a/register.js b/register.js new file mode 100644 index 000000000000..18cdafda57c4 --- /dev/null +++ b/register.js @@ -0,0 +1 @@ +require('./dist/register.js'); diff --git a/src/index.js b/src/index.js new file mode 100644 index 000000000000..318effe60a8a --- /dev/null +++ b/src/index.js @@ -0,0 +1,19 @@ +import React from 'react'; +import addons from '@kadira/storybook-addons'; + +export class WithNotes extends React.Component { + render() { + const { children, notes } = this.props; + const channel = addons.getChannel(); + + // send the notes to the channel. + channel.emit('kadira/notes/add_notes', notes); + // return children elements. + return children; + } +} + +WithNotes.propTypes = { + children: React.PropTypes.node, + notes: React.PropTypes.string, +}; diff --git a/src/register.js b/src/register.js new file mode 100644 index 000000000000..019f56c0aa1c --- /dev/null +++ b/src/register.js @@ -0,0 +1,74 @@ +import React from 'react'; +import addons from '@kadira/storybook-addons'; + +const styles = { + notesPanel: { + margin: 10, + fontFamily: 'Arial', + fontSize: 14, + color: '#444', + width: '100%', + overflow: 'auto', + }, +}; + +export class Notes extends React.Component { + constructor(...args) { + super(...args); + this.state = { text: '' }; + this.onAddNotes = this.onAddNotes.bind(this); + } + + componentDidMount() { + const { channel, api } = this.props; + // Listen to the notes and render it. + channel.on('kadira/notes/add_notes', this.onAddNotes); + + // Clear the current notes on every story change. + this.stopListeningOnStory = api.onStory(() => { + this.onAddNotes(''); + }); + } + + // This is some cleanup tasks when the Notes panel is unmounting. + componentWillUnmount() { + if (this.stopListeningOnStory) { + this.stopListeningOnStory(); + } + + this.unmounted = true; + const { channel } = this.props; + channel.removeListener('kadira/notes/add_notes', this.onAddNotes); + } + + onAddNotes(text) { + this.setState({ text }); + } + + render() { + const { text } = this.state; + const textAfterFormatted = text ? text.trim().replace(/\n/g, '
') : ''; + + return ( +
+
+
+ ); + } +} + +Notes.propTypes = { + channel: React.PropTypes.object, + api: React.PropTypes.object, +}; + +// Register the addon with a unique name. +addons.register('kadira/notes', (api) => { + // Also need to set a unique name to the panel. + addons.addPanel('kadira/notes/panel', { + title: 'Notes', + render: () => ( + + ), + }); +}); diff --git a/src/stories/index.js b/src/stories/index.js new file mode 100644 index 000000000000..e69de29bb2d1 diff --git a/src/tests/index.js b/src/tests/index.js new file mode 100644 index 000000000000..d06c3dd08746 --- /dev/null +++ b/src/tests/index.js @@ -0,0 +1,5 @@ +const { describe, it } = global; + +describe('Storybook Addon Notes', () => { + it('should have some tests'); +}); From 71a4f59e6d16f683fb03f3d0bb9c74c6a24c5bfd Mon Sep 17 00:00:00 2001 From: Arunoda Susiripala Date: Tue, 30 Aug 2016 05:53:35 +0530 Subject: [PATCH 02/47] Update README.md --- README.md | 40 ++++++++++++++++++++++++++++++++++++++-- docs/.DS_Store | Bin 0 -> 6148 bytes docs/demo.png | Bin 0 -> 159616 bytes 3 files changed, 38 insertions(+), 2 deletions(-) create mode 100644 docs/.DS_Store create mode 100644 docs/demo.png diff --git a/README.md b/README.md index 1ce5c4806403..2e2373bd5fe7 100644 --- a/README.md +++ b/README.md @@ -1,3 +1,39 @@ -# Storybook Addon Notes Component +# Storybook Addon Notes -Storybook Addon Notes Component +This [Storybook](https://getstorybook.io) addon allows you to write notes for your stories. + +![Storybook Addon Notes Demo](docs/demo.png) + +### Getting Started + +npm i --save @kadira/storybook-addon-notes + +Then create a file called `addons.js` in your storybook config. + +Add following content to it: + +```js +import '@kadira/storybook/addons'; +import '@kadira/storybook-addon-notes/register'; +``` + +Then write your stories like this: + +```js +import React from 'react'; +import { storiesOf, action } from '@kadira/storybook'; +import Button from './Button'; +import { WithNotes } from '@kadira/storybook-addon-notes'; + +storiesOf('Button', module) + .add('with text', () => ( + + + + )) + .add('with some emoji', () => ( + + + + )); +``` diff --git a/docs/.DS_Store b/docs/.DS_Store new file mode 100644 index 0000000000000000000000000000000000000000..dc73dc59899e348372db48cd2424dd44cc88a621 GIT binary patch literal 6148 zcmeHKJxc>Y5PhR50yZfvx3p1AP>J0VqF^Bi`2(6LS_Dr-`|JGK@y&;jaIv*8GcfaZ z=jQF+zT)NK)sQj1cKu;|Z@QnBfIYr+RxrxkqFy@J{wR z|AQ-yaEc)=a7-LCj&RBB1N7NBPUvHcXPn>Rmg6_R!Sl_sS<;` ztbwf~Gc<83(Ww$w3~@U1CF*Km>*#cd?aXyzXNen%*zU|1D~D9ajHy5>u&KblPY2rn zujs$r|2IiFO9fJaf2Dx*rnBjUM~dFsIh^*|Lcgc~7;CMZ!CEoVS}`ZuiVxT7ijMib W2DXkyXWr<<{1H%H(o%uHP~aPytsR#D literal 0 HcmV?d00001 diff --git a/docs/demo.png b/docs/demo.png new file mode 100644 index 0000000000000000000000000000000000000000..1a1d1226df93eb8cbe11ee609262658342016c79 GIT binary patch literal 159616 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 FzX0Ry8L$8V literal 0 HcmV?d00001 From 2f40184c9d3f756f8ed1d74278dba301da34add1 Mon Sep 17 00:00:00 2001 From: Arunoda Susiripala Date: Tue, 30 Aug 2016 05:54:01 +0530 Subject: [PATCH 03/47] Remove unwanted files. --- docs/.DS_Store | Bin 6148 -> 0 bytes 1 file changed, 0 insertions(+), 0 deletions(-) delete mode 100644 docs/.DS_Store diff --git a/docs/.DS_Store b/docs/.DS_Store deleted file mode 100644 index dc73dc59899e348372db48cd2424dd44cc88a621..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 6148 zcmeHKJxc>Y5PhR50yZfvx3p1AP>J0VqF^Bi`2(6LS_Dr-`|JGK@y&;jaIv*8GcfaZ z=jQF+zT)NK)sQj1cKu;|Z@QnBfIYr+RxrxkqFy@J{wR z|AQ-yaEc)=a7-LCj&RBB1N7NBPUvHcXPn>Rmg6_R!Sl_sS<;` ztbwf~Gc<83(Ww$w3~@U1CF*Km>*#cd?aXyzXNen%*zU|1D~D9ajHy5>u&KblPY2rn zujs$r|2IiFO9fJaf2Dx*rnBjUM~dFsIh^*|Lcgc~7;CMZ!CEoVS}`ZuiVxT7ijMib W2DXkyXWr<<{1H%H(o%uHP~aPytsR#D From 7c7bec390cc829f2baa297af97c357c04785f8dd Mon Sep 17 00:00:00 2001 From: Arunoda Susiripala Date: Tue, 30 Aug 2016 05:54:23 +0530 Subject: [PATCH 04/47] 1.0.0 --- package.json | 10 ++++------ 1 file changed, 4 insertions(+), 6 deletions(-) diff --git a/package.json b/package.json index a45bc541f5c6..e2a041cef441 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "@kadira/storybook-addon-notes", - "version": "0.0.0", + "version": "1.0.0", "description": "Write notes for your Storybook stories.", "repository": { "type": "git", @@ -20,7 +20,6 @@ "devDependencies": { "react": "^15.0.0", "react-dom": "^15.0.0", - "babel-core": "^6.5.0", "babel-loader": "^6.2.4", "babel-polyfill": "^6.5.0", @@ -29,13 +28,11 @@ "babel-preset-stage-2": "^6.5.0", "babel-plugin-transform-runtime": "^6.5.0", "babel-cli": "^6.5.0", - "eslint": "^2.7.0", "babel-eslint": "^6.0.2", "eslint-config-airbnb": "^7.0.0", "eslint-plugin-babel": "^3.2.0", "eslint-plugin-react": "^4.3.0", - "mocha": "^2.4.5", "chai": "^3.5.0", "sinon": "^1.17.3", @@ -43,7 +40,6 @@ "react-addons-test-utils": "^15.0.0", "jsdom": "^8.3.1", "eslint-plugin-jsx-a11y": "^0.6.2", - "@kadira/storybook": "^2.5.2", "git-url-parse": "^6.0.1" }, @@ -59,6 +55,8 @@ "npm": "^3.0.0" }, "keywords": [ - "react", "storybook", "addon" + "react", + "storybook", + "addon" ] } From 6e6300d0d7975a684bc593543b4109115c5ea0b8 Mon Sep 17 00:00:00 2001 From: Arunoda Susiripala Date: Tue, 30 Aug 2016 05:55:01 +0530 Subject: [PATCH 05/47] Update CHANGELOG.md --- CHANGELOG.md | 6 ++++++ 1 file changed, 6 insertions(+) create mode 100644 CHANGELOG.md diff --git a/CHANGELOG.md b/CHANGELOG.md new file mode 100644 index 000000000000..16f1d0219f27 --- /dev/null +++ b/CHANGELOG.md @@ -0,0 +1,6 @@ +# ChangeLog + +### v1.0.0 +30-August-2016 + +* Initial version From 839206c2da2c226c424e41ab2d6678a8b7873b94 Mon Sep 17 00:00:00 2001 From: Arunoda Susiripala Date: Tue, 30 Aug 2016 05:57:36 +0530 Subject: [PATCH 06/47] Update docs. --- README.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/README.md b/README.md index 2e2373bd5fe7..878c90bba118 100644 --- a/README.md +++ b/README.md @@ -6,7 +6,9 @@ This [Storybook](https://getstorybook.io) addon allows you to write notes for yo ### Getting Started +```sh npm i --save @kadira/storybook-addon-notes +``` Then create a file called `addons.js` in your storybook config. From b513446b621782b92ab7847d2a53705375bf3ebd Mon Sep 17 00:00:00 2001 From: Arunoda Susiripala Date: Tue, 30 Aug 2016 05:57:43 +0530 Subject: [PATCH 07/47] 1.0.1 --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index e2a041cef441..9be9b40550a2 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "@kadira/storybook-addon-notes", - "version": "1.0.0", + "version": "1.0.1", "description": "Write notes for your Storybook stories.", "repository": { "type": "git", From f3acfe027407b92c3fd98f33343edc4303b6cedc Mon Sep 17 00:00:00 2001 From: Arunoda Susiripala Date: Tue, 30 Aug 2016 05:58:13 +0530 Subject: [PATCH 08/47] Update CHANGELOG.md --- CHANGELOG.md | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 16f1d0219f27..ac02677abb34 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,10 @@ # ChangeLog +### v1.0.1 +30-August-2016 + +* Update docs. + ### v1.0.0 30-August-2016 From 23dcc339d65659f17cb02019537e6d9b185cfc93 Mon Sep 17 00:00:00 2001 From: greenkeeperio-bot Date: Thu, 15 Sep 2016 04:09:04 +0530 Subject: [PATCH 09/47] chore(package): update eslint-plugin-react to version 6.2.2 https://greenkeeper.io/ --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 9be9b40550a2..949ddbc97b4e 100644 --- a/package.json +++ b/package.json @@ -32,7 +32,7 @@ "babel-eslint": "^6.0.2", "eslint-config-airbnb": "^7.0.0", "eslint-plugin-babel": "^3.2.0", - "eslint-plugin-react": "^4.3.0", + "eslint-plugin-react": "^6.2.2", "mocha": "^2.4.5", "chai": "^3.5.0", "sinon": "^1.17.3", From 2745ec855e6b5ff0dbd6df7702a2dadc7bbbcf19 Mon Sep 17 00:00:00 2001 From: Muhammed Thanish Date: Tue, 27 Sep 2016 12:17:11 +0530 Subject: [PATCH 10/47] Initial version --- .babelrc | 3 ++ .gitignore | 2 ++ .npmignore | 2 ++ .scripts/npm-prepublish.js | 9 ++++++ CHANGELOG.md | 6 ++++ README.md | 8 +++++ package.json | 19 ++++++++++++ src/index.js | 63 ++++++++++++++++++++++++++++++++++++++ 8 files changed, 112 insertions(+) create mode 100644 .babelrc create mode 100644 .gitignore create mode 100644 .npmignore create mode 100644 .scripts/npm-prepublish.js create mode 100644 CHANGELOG.md create mode 100644 README.md create mode 100644 package.json create mode 100644 src/index.js diff --git a/.babelrc b/.babelrc new file mode 100644 index 000000000000..c14b2828d168 --- /dev/null +++ b/.babelrc @@ -0,0 +1,3 @@ +{ + "presets": ["react-app"] +} diff --git a/.gitignore b/.gitignore new file mode 100644 index 000000000000..f06235c460c2 --- /dev/null +++ b/.gitignore @@ -0,0 +1,2 @@ +node_modules +dist diff --git a/.npmignore b/.npmignore new file mode 100644 index 000000000000..f9e4b95b69d7 --- /dev/null +++ b/.npmignore @@ -0,0 +1,2 @@ +node_modules +.babelrc diff --git a/.scripts/npm-prepublish.js b/.scripts/npm-prepublish.js new file mode 100644 index 000000000000..af186127d93a --- /dev/null +++ b/.scripts/npm-prepublish.js @@ -0,0 +1,9 @@ +var path = require('path'); +var shell = require('shelljs'); +var babel = ['node_modules', '.bin', 'babel'].join(path.sep); + +// required for react-app preset +process.env.NODE_ENV = 'production'; + +shell.rm('-rf', 'dist') +shell.exec(babel + ' --ignore __tests__ src --out-dir dist') diff --git a/CHANGELOG.md b/CHANGELOG.md new file mode 100644 index 000000000000..70edbe1b5500 --- /dev/null +++ b/CHANGELOG.md @@ -0,0 +1,6 @@ +## Changelog + +### v1.0.0 +26-Sep-2016 + +* Implement send and receive functions diff --git a/README.md b/README.md new file mode 100644 index 000000000000..cdd7b75a9de7 --- /dev/null +++ b/README.md @@ -0,0 +1,8 @@ +# Post Message Channel + +Post Message channel for Kadira Storybooks. This channel can be used when the Storybook Renderer runs inside an iframe or a child window. A channel can be created using the `createChannel` function. + +```js +import createChannel from '@kadira/storybook-channel-postmsg' +const channel = createChannel({ key: 'postmsg-key' }) +``` diff --git a/package.json b/package.json new file mode 100644 index 000000000000..b9cf2130bfa9 --- /dev/null +++ b/package.json @@ -0,0 +1,19 @@ +{ + "name": "@kadira/storybook-channel-postmsg", + "version": "1.0.0", + "description": "", + "main": "dist/index.js", + "scripts": { + "prepublish": "node .scripts/npm-prepublish.js", + "test": "echo \"Error: no test specified\" && exit 1" + }, + "license": "MIT", + "devDependencies": { + "babel-cli": "^6.11.4", + "babel-preset-react-app": "^0.2.1", + "shelljs": "^0.7.3" + }, + "dependencies": { + "@kadira/storybook-channel": "^1.1.0" + } +} diff --git a/src/index.js b/src/index.js new file mode 100644 index 000000000000..606840180098 --- /dev/null +++ b/src/index.js @@ -0,0 +1,63 @@ +import Channel from '@kadira/storybook-channel'; + +export default function createChannel({ key }) { + const transport = new PostmsgTransport({ key }); + return new Channel({ transport }); +} + +export class PostmsgTransport { + constructor({ key }) { + this._key = key; + this._buffer = []; + this._handler = null; + window.addEventListener('message', this._handleEvent.bind(this), false); + document.addEventListener('DOMContentLoaded', () => this._flush()); + } + + setHandler(handler) { + this._handler = handler; + } + + send(event) { + const iframeWindow = this._getWindow(); + if (!iframeWindow) { + return new Promise((resolve, reject) => { + this._buffer.push({ event, resolve, reject }); + }); + } + const data = JSON.stringify({ key: this._key, event }); + iframeWindow.postMessage(data, '*'); + return Promise.resolve(null); + } + + _flush() { + const buffer = this._buffer; + this._buffer = []; + buffer.forEach(item => { + this.send(item.event) + .then(item.resolve) + .catch(item.reject); + }); + } + + _getWindow() { + if (window.top === window.self) { + // FIXME this is a really bad idea! use a better way to do this. + // This finds the storybook preview iframe to send messages to. + const iframes = document.getElementsByTagName('iframe'); + if (!iframes.length) { + return null; + } + return iframes[0].contentWindow; + } + return window.top; + } + + _handleEvent(e) { + const { key, event } = JSON.parse(e.data); + if (key !== this._key) { + return null; + } + this._handler(event); + } +} From 78ebfb3a7c8942bb0c61431a10e55fca1c577d77 Mon Sep 17 00:00:00 2001 From: Muhammed Thanish Date: Tue, 27 Sep 2016 15:03:01 +0530 Subject: [PATCH 11/47] Select the iframe by id --- src/index.js | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/index.js b/src/index.js index 606840180098..8a7efcc6dea0 100644 --- a/src/index.js +++ b/src/index.js @@ -44,11 +44,11 @@ export class PostmsgTransport { if (window.top === window.self) { // FIXME this is a really bad idea! use a better way to do this. // This finds the storybook preview iframe to send messages to. - const iframes = document.getElementsByTagName('iframe'); - if (!iframes.length) { + const iframe = document.getElementById('storybook-preview-iframe'); + if (!iframe) { return null; } - return iframes[0].contentWindow; + return iframe.contentWindow; } return window.top; } From f5d45c8958e2098cfffc2f986100f2dfe911d9a6 Mon Sep 17 00:00:00 2001 From: greenkeeperio-bot Date: Tue, 27 Sep 2016 15:03:52 +0530 Subject: [PATCH 12/47] chore(package): update mocha to version 3.1.0 https://greenkeeper.io/ --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 949ddbc97b4e..fbd3aab7d96c 100644 --- a/package.json +++ b/package.json @@ -33,7 +33,7 @@ "eslint-config-airbnb": "^7.0.0", "eslint-plugin-babel": "^3.2.0", "eslint-plugin-react": "^6.2.2", - "mocha": "^2.4.5", + "mocha": "^3.1.0", "chai": "^3.5.0", "sinon": "^1.17.3", "enzyme": "^2.2.0", From 2abaa5fca36985fdd1db32a513244aaeb9b7b81b Mon Sep 17 00:00:00 2001 From: Muhammed Thanish Date: Tue, 27 Sep 2016 15:03:54 +0530 Subject: [PATCH 13/47] Update CHANGELOG --- CHANGELOG.md | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 70edbe1b5500..7c5aa7d28621 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,10 @@ ## Changelog +### v1.0.1 +26-Sep-2016 + +* Select the iframe by id (getElementById) + ### v1.0.0 26-Sep-2016 From 9f6bb93fa3c192080a1387077067b9d8847bebaf Mon Sep 17 00:00:00 2001 From: Muhammed Thanish Date: Tue, 27 Sep 2016 15:03:59 +0530 Subject: [PATCH 14/47] 1.0.1 --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index b9cf2130bfa9..17f6463469ca 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "@kadira/storybook-channel-postmsg", - "version": "1.0.0", + "version": "1.0.1", "description": "", "main": "dist/index.js", "scripts": { From d3ffa8ae22609a0f148e698bbc18eb5b7843ebac Mon Sep 17 00:00:00 2001 From: greenkeeperio-bot Date: Tue, 27 Sep 2016 15:31:51 +0530 Subject: [PATCH 15/47] chore(package): update @kadira/storybook to version 2.20.0 https://greenkeeper.io/ --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 949ddbc97b4e..c4cca7dc6c98 100644 --- a/package.json +++ b/package.json @@ -40,7 +40,7 @@ "react-addons-test-utils": "^15.0.0", "jsdom": "^8.3.1", "eslint-plugin-jsx-a11y": "^0.6.2", - "@kadira/storybook": "^2.5.2", + "@kadira/storybook": "^2.20.0", "git-url-parse": "^6.0.1" }, "peerDependencies": { From f11868859d70e7e8a181d41fab6acb0464314562 Mon Sep 17 00:00:00 2001 From: greenkeeperio-bot Date: Tue, 27 Sep 2016 22:48:21 +0530 Subject: [PATCH 16/47] chore(package): update babel-eslint to version 7.0.0 https://greenkeeper.io/ --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 949ddbc97b4e..10cb92bc9e66 100644 --- a/package.json +++ b/package.json @@ -29,7 +29,7 @@ "babel-plugin-transform-runtime": "^6.5.0", "babel-cli": "^6.5.0", "eslint": "^2.7.0", - "babel-eslint": "^6.0.2", + "babel-eslint": "^7.0.0", "eslint-config-airbnb": "^7.0.0", "eslint-plugin-babel": "^3.2.0", "eslint-plugin-react": "^6.2.2", From e3e250a35615ffbef98e124d9efa4700465b723f Mon Sep 17 00:00:00 2001 From: greenkeeperio-bot Date: Wed, 28 Sep 2016 11:58:32 +0530 Subject: [PATCH 17/47] chore(package): update sinon to version 1.17.6 https://greenkeeper.io/ --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index aea0277cefa1..2a0868388699 100644 --- a/package.json +++ b/package.json @@ -35,7 +35,7 @@ "eslint-plugin-react": "^6.2.2", "mocha": "^3.1.0", "chai": "^3.5.0", - "sinon": "^1.17.3", + "sinon": "^1.17.6", "enzyme": "^2.2.0", "react-addons-test-utils": "^15.0.0", "jsdom": "^8.3.1", From b3b26e72cba9c817170cea3754468ed120e102b9 Mon Sep 17 00:00:00 2001 From: greenkeeperio-bot Date: Wed, 28 Sep 2016 11:58:32 +0530 Subject: [PATCH 18/47] chore(package): update react-addons-test-utils to version 15.3.2 https://greenkeeper.io/ --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index aea0277cefa1..083f64124e0a 100644 --- a/package.json +++ b/package.json @@ -37,7 +37,7 @@ "chai": "^3.5.0", "sinon": "^1.17.3", "enzyme": "^2.2.0", - "react-addons-test-utils": "^15.0.0", + "react-addons-test-utils": "^15.3.2", "jsdom": "^8.3.1", "eslint-plugin-jsx-a11y": "^0.6.2", "@kadira/storybook": "^2.20.0", From eeccda1013a05a22f8fc1e342e7978fb94041e6e Mon Sep 17 00:00:00 2001 From: greenkeeperio-bot Date: Wed, 28 Sep 2016 11:58:32 +0530 Subject: [PATCH 19/47] chore(package): update react to version 15.3.2 https://greenkeeper.io/ --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index aea0277cefa1..718b709a99b8 100644 --- a/package.json +++ b/package.json @@ -18,7 +18,7 @@ "publish-storybook": "bash .scripts/publish_storybook.sh" }, "devDependencies": { - "react": "^15.0.0", + "react": "^15.3.2", "react-dom": "^15.0.0", "babel-core": "^6.5.0", "babel-loader": "^6.2.4", From 1bcb2759de8ae7913991c3e82cd503612ccfafdf Mon Sep 17 00:00:00 2001 From: greenkeeperio-bot Date: Wed, 28 Sep 2016 11:58:32 +0530 Subject: [PATCH 20/47] chore(package): update eslint-config-airbnb to version 12.0.0 https://greenkeeper.io/ --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index aea0277cefa1..7627b7f66a57 100644 --- a/package.json +++ b/package.json @@ -30,7 +30,7 @@ "babel-cli": "^6.5.0", "eslint": "^2.7.0", "babel-eslint": "^7.0.0", - "eslint-config-airbnb": "^7.0.0", + "eslint-config-airbnb": "^12.0.0", "eslint-plugin-babel": "^3.2.0", "eslint-plugin-react": "^6.2.2", "mocha": "^3.1.0", From 05e10a1143eb57a9c462aceae5a77747f61efd0c Mon Sep 17 00:00:00 2001 From: greenkeeperio-bot Date: Wed, 28 Sep 2016 11:58:32 +0530 Subject: [PATCH 21/47] chore(package): update eslint to version 3.6.1 https://greenkeeper.io/ --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index aea0277cefa1..93bff4885fb6 100644 --- a/package.json +++ b/package.json @@ -28,7 +28,7 @@ "babel-preset-stage-2": "^6.5.0", "babel-plugin-transform-runtime": "^6.5.0", "babel-cli": "^6.5.0", - "eslint": "^2.7.0", + "eslint": "^3.6.1", "babel-eslint": "^7.0.0", "eslint-config-airbnb": "^7.0.0", "eslint-plugin-babel": "^3.2.0", From ab92d7327e6a060244ad1c3e285f9146435c579b Mon Sep 17 00:00:00 2001 From: greenkeeperio-bot Date: Wed, 28 Sep 2016 11:59:51 +0530 Subject: [PATCH 22/47] chore(package): update react-dom to version 15.3.2 https://greenkeeper.io/ --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 34163bd6c3f7..546d97ac1b0f 100644 --- a/package.json +++ b/package.json @@ -19,7 +19,7 @@ }, "devDependencies": { "react": "^15.3.2", - "react-dom": "^15.0.0", + "react-dom": "^15.3.2", "babel-core": "^6.5.0", "babel-loader": "^6.2.4", "babel-polyfill": "^6.5.0", From ea53caf88f3ac13e56e2b60c39844651ed17b784 Mon Sep 17 00:00:00 2001 From: greenkeeperio-bot Date: Wed, 28 Sep 2016 15:04:35 +0530 Subject: [PATCH 23/47] chore(package): update @kadira/storybook to version 2.20.1 https://greenkeeper.io/ --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index d793efc43ab0..24d1564fe067 100644 --- a/package.json +++ b/package.json @@ -40,7 +40,7 @@ "react-addons-test-utils": "^15.3.2", "jsdom": "^8.3.1", "eslint-plugin-jsx-a11y": "^0.6.2", - "@kadira/storybook": "^2.20.0", + "@kadira/storybook": "^2.20.1", "git-url-parse": "^6.0.1" }, "peerDependencies": { From af176853982ce2b4ff4ae71aefcb6bda36568dd2 Mon Sep 17 00:00:00 2001 From: Aruna Herath Date: Wed, 28 Sep 2016 16:36:23 +0530 Subject: [PATCH 24/47] Remove serialization step because postMessage api does it Also fixes possible error when _handleEvent tries parse a non-string. --- src/index.js | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/src/index.js b/src/index.js index 8a7efcc6dea0..e07d86320b9c 100644 --- a/src/index.js +++ b/src/index.js @@ -25,7 +25,7 @@ export class PostmsgTransport { this._buffer.push({ event, resolve, reject }); }); } - const data = JSON.stringify({ key: this._key, event }); + const data = { key: this._key, event }; iframeWindow.postMessage(data, '*'); return Promise.resolve(null); } @@ -54,7 +54,10 @@ export class PostmsgTransport { } _handleEvent(e) { - const { key, event } = JSON.parse(e.data); + if(!e.data || typeof(e.data) !== 'object') { + return; + } + const { key, event } = e.data; if (key !== this._key) { return null; } From ae0c7654f90a2ce1b0c6307cac7f8db5d829afd0 Mon Sep 17 00:00:00 2001 From: Muhammed Thanish Date: Wed, 28 Sep 2016 17:03:48 +0530 Subject: [PATCH 25/47] Update CHANGELOG --- CHANGELOG.md | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 7c5aa7d28621..d58194755a51 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,10 @@ ## Changelog +### v1.0.2 +28-Sep-2016 + +* Do not serialize data because objects can be sent over postMessage [PR1](https://github.com/kadirahq/storybook-channel-postmsg/pull/1) + ### v1.0.1 26-Sep-2016 From 0ecc7bcd8fcabe7829c2ef2e393878440e7805fc Mon Sep 17 00:00:00 2001 From: Muhammed Thanish Date: Wed, 28 Sep 2016 17:03:52 +0530 Subject: [PATCH 26/47] 1.0.2 --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 17f6463469ca..0a63bcfaf1c7 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "@kadira/storybook-channel-postmsg", - "version": "1.0.1", + "version": "1.0.2", "description": "", "main": "dist/index.js", "scripts": { From 046a5d1938d2437b8bd006f08df77d4bc82d0549 Mon Sep 17 00:00:00 2001 From: Muhammed Thanish Date: Thu, 29 Sep 2016 16:42:06 +0530 Subject: [PATCH 27/47] Stringify data before sending over channel --- package.json | 3 ++- src/index.js | 14 +++++++++----- 2 files changed, 11 insertions(+), 6 deletions(-) diff --git a/package.json b/package.json index 0a63bcfaf1c7..4d1f026b9b5f 100644 --- a/package.json +++ b/package.json @@ -14,6 +14,7 @@ "shelljs": "^0.7.3" }, "dependencies": { - "@kadira/storybook-channel": "^1.1.0" + "@kadira/storybook-channel": "^1.1.0", + "json-stringify-safe": "^5.0.1" } } diff --git a/src/index.js b/src/index.js index e07d86320b9c..ed2cdcd17390 100644 --- a/src/index.js +++ b/src/index.js @@ -1,4 +1,5 @@ import Channel from '@kadira/storybook-channel'; +import stringify from 'json-stringify-safe'; export default function createChannel({ key }) { const transport = new PostmsgTransport({ key }); @@ -25,7 +26,7 @@ export class PostmsgTransport { this._buffer.push({ event, resolve, reject }); }); } - const data = { key: this._key, event }; + const data = stringify({ key: this._key, event }); iframeWindow.postMessage(data, '*'); return Promise.resolve(null); } @@ -54,13 +55,16 @@ export class PostmsgTransport { } _handleEvent(e) { - if(!e.data || typeof(e.data) !== 'object') { + if(!e.data || typeof(e.data) !== 'string') { return; } - const { key, event } = e.data; - if (key !== this._key) { + try { + const { key, event } = JSON.parse(e.data); + if (key === this._key) { + this._handler(event); + } + } catch (e) { return null; } - this._handler(event); } } From a71688464637c1f9d8a47129fe21eaae7fd41db0 Mon Sep 17 00:00:00 2001 From: Muhammed Thanish Date: Thu, 29 Sep 2016 16:53:38 +0530 Subject: [PATCH 28/47] Update CHANGELOG --- CHANGELOG.md | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index d58194755a51..b1ae4317c385 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,10 @@ ## Changelog +### v1.0.3 +28-Sep-2016 + +* Serialize data because some objects throw error when sent over postMessage [PR3](https://github.com/kadirahq/storybook-channel-postmsg/pull/3) + ### v1.0.2 28-Sep-2016 From 98fd5b2e53b36e51fd5440057e473d3c264c931e Mon Sep 17 00:00:00 2001 From: Muhammed Thanish Date: Thu, 29 Sep 2016 16:53:47 +0530 Subject: [PATCH 29/47] 1.0.3 --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 4d1f026b9b5f..186892dd636c 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "@kadira/storybook-channel-postmsg", - "version": "1.0.2", + "version": "1.0.3", "description": "", "main": "dist/index.js", "scripts": { From 0b91b38efc47213a6a42d7e195c8421b92585eee Mon Sep 17 00:00:00 2001 From: Brian Douglas Date: Fri, 14 Oct 2016 18:53:03 -0700 Subject: [PATCH 30/47] add note about version quirement --- README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/README.md b/README.md index 878c90bba118..30f3aa338778 100644 --- a/README.md +++ b/README.md @@ -5,6 +5,7 @@ This [Storybook](https://getstorybook.io) addon allows you to write notes for yo ![Storybook Addon Notes Demo](docs/demo.png) ### Getting Started +**note: addons require @kadira/storybook 2.x or greater* ```sh npm i --save @kadira/storybook-addon-notes From 6f1deb3d2cb05ba5cc17ec90c038107cadf01b16 Mon Sep 17 00:00:00 2001 From: Aruna Herath Date: Thu, 20 Oct 2016 14:02:35 +0530 Subject: [PATCH 31/47] Take the call to handlers out of try block so they can throw. --- src/index.js | 13 +++++++++---- 1 file changed, 9 insertions(+), 4 deletions(-) diff --git a/src/index.js b/src/index.js index ed2cdcd17390..fb99c7e4d4b7 100644 --- a/src/index.js +++ b/src/index.js @@ -58,13 +58,18 @@ export class PostmsgTransport { if(!e.data || typeof(e.data) !== 'string') { return; } + let data; try { - const { key, event } = JSON.parse(e.data); - if (key === this._key) { - this._handler(event); - } + data = JSON.parse(e.data); } catch (e) { return null; } + if(!data || typeof(data) !== 'object') { + return null; + } + const { key, event } = data; + if (key === this._key) { + this._handler(event); + } } } From 5b83b688fad7eef04b32dd6aeda498b61d23f73f Mon Sep 17 00:00:00 2001 From: Muhammed Thanish Date: Fri, 28 Oct 2016 16:25:28 +0530 Subject: [PATCH 32/47] Update CHANGELOG --- CHANGELOG.md | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index b1ae4317c385..051a864d0030 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,10 @@ ## Changelog +### v1.0.4 +28-Oct-2016 + +* Allow message handlers to throw errors [PR4](https://github.com/kadirahq/storybook-channel-postmsg/pull/4) + ### v1.0.3 28-Sep-2016 From fe700807502f04bb6070d22a7d40b5186e1e928f Mon Sep 17 00:00:00 2001 From: Muhammed Thanish Date: Fri, 28 Oct 2016 16:25:31 +0530 Subject: [PATCH 33/47] 1.0.4 --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 186892dd636c..97a2078354a6 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "@kadira/storybook-channel-postmsg", - "version": "1.0.3", + "version": "1.0.4", "description": "", "main": "dist/index.js", "scripts": { From 7574f20cf6eb0e4eb10c994be4ffdb4c45a5145e Mon Sep 17 00:00:00 2001 From: Muhammed Thanish Date: Fri, 28 Oct 2016 16:28:36 +0530 Subject: [PATCH 34/47] Use a constant key to identify messages --- src/index.js | 13 +++++++------ 1 file changed, 7 insertions(+), 6 deletions(-) diff --git a/src/index.js b/src/index.js index fb99c7e4d4b7..294e3bc4aa29 100644 --- a/src/index.js +++ b/src/index.js @@ -1,14 +1,15 @@ import Channel from '@kadira/storybook-channel'; import stringify from 'json-stringify-safe'; -export default function createChannel({ key }) { - const transport = new PostmsgTransport({ key }); +export const KEY = 'storybook-channel'; + +export default function createChannel() { + const transport = new PostmsgTransport(); return new Channel({ transport }); } export class PostmsgTransport { - constructor({ key }) { - this._key = key; + constructor() { this._buffer = []; this._handler = null; window.addEventListener('message', this._handleEvent.bind(this), false); @@ -26,7 +27,7 @@ export class PostmsgTransport { this._buffer.push({ event, resolve, reject }); }); } - const data = stringify({ key: this._key, event }); + const data = stringify({ key: KEY, event }); iframeWindow.postMessage(data, '*'); return Promise.resolve(null); } @@ -68,7 +69,7 @@ export class PostmsgTransport { return null; } const { key, event } = data; - if (key === this._key) { + if (key === KEY) { this._handler(event); } } From 8c37bae18dbd087c17ff49b4791478d9bc9249d8 Mon Sep 17 00:00:00 2001 From: Muhammed Thanish Date: Fri, 28 Oct 2016 16:58:38 +0530 Subject: [PATCH 35/47] Update CHANGELOG --- CHANGELOG.md | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 051a864d0030..7a31f9ccd771 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,10 @@ ## Changelog +### v1.1.0 +28-Oct-2016 + +* Use a constant key to identify relavent messages [PR6](https://github.com/kadirahq/storybook-channel-postmsg/pull/6) + ### v1.0.4 28-Oct-2016 From 5fa7953257ad5bffe07d036d4ee7eb1b492eacc2 Mon Sep 17 00:00:00 2001 From: Muhammed Thanish Date: Fri, 28 Oct 2016 16:58:47 +0530 Subject: [PATCH 36/47] 1.1.0 --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 97a2078354a6..334784693dbd 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "@kadira/storybook-channel-postmsg", - "version": "1.0.4", + "version": "1.1.0", "description": "", "main": "dist/index.js", "scripts": { From a66e500d0a201f091e41f1fb53c1715ce66b98ab Mon Sep 17 00:00:00 2001 From: Muhammed Thanish Date: Thu, 10 Nov 2016 14:50:45 +0530 Subject: [PATCH 37/47] Identify the page using a param --- src/index.js | 13 +++++++++---- 1 file changed, 9 insertions(+), 4 deletions(-) diff --git a/src/index.js b/src/index.js index 294e3bc4aa29..5a6785bc80fa 100644 --- a/src/index.js +++ b/src/index.js @@ -3,17 +3,22 @@ import stringify from 'json-stringify-safe'; export const KEY = 'storybook-channel'; -export default function createChannel() { - const transport = new PostmsgTransport(); +export default function createChannel({ page }) { + const transport = new PostmsgTransport({ page }); return new Channel({ transport }); } export class PostmsgTransport { - constructor() { + constructor(config) { + this._config = config; this._buffer = []; this._handler = null; window.addEventListener('message', this._handleEvent.bind(this), false); document.addEventListener('DOMContentLoaded', () => this._flush()); + // Check whether the config.page parameter has a valid value + if (config.page !== 'manager' && config.page !== 'preview') { + throw new Error(`postmsg-channel: "config.page" cannot be "${config.page}"`); + } } setHandler(handler) { @@ -43,7 +48,7 @@ export class PostmsgTransport { } _getWindow() { - if (window.top === window.self) { + if (this._config.page === 'manager') { // FIXME this is a really bad idea! use a better way to do this. // This finds the storybook preview iframe to send messages to. const iframe = document.getElementById('storybook-preview-iframe'); From b016a0226790ddb2d0a5e4a6709dcde6f7a2994d Mon Sep 17 00:00:00 2001 From: Muhammed Thanish Date: Thu, 17 Nov 2016 15:07:17 +0530 Subject: [PATCH 38/47] Update CHANGELOG --- CHANGELOG.md | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 7a31f9ccd771..5fbbcf964e31 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,10 @@ ## Changelog +### v2.0.0 +17-Nov-2016 + +* Identify the page with a parameter [PR7](https://github.com/kadirahq/storybook-channel-postmsg/pull/7) + ### v1.1.0 28-Oct-2016 From f40a3f00e958577221ab7a36e04c54ea5c935e26 Mon Sep 17 00:00:00 2001 From: Muhammed Thanish Date: Thu, 17 Nov 2016 15:07:22 +0530 Subject: [PATCH 39/47] 2.0.0 --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 334784693dbd..484586435cb9 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "@kadira/storybook-channel-postmsg", - "version": "1.1.0", + "version": "2.0.0", "description": "", "main": "dist/index.js", "scripts": { From 2a93e7f7582d398f0035b1dd5efcba9e2cb7a47b Mon Sep 17 00:00:00 2001 From: Espen Hovlandsdal Date: Tue, 22 Nov 2016 18:48:00 +0100 Subject: [PATCH 40/47] Fix stories not being listed when storybook is iframed --- src/index.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/index.js b/src/index.js index 5a6785bc80fa..0bb347bae9f8 100644 --- a/src/index.js +++ b/src/index.js @@ -57,7 +57,7 @@ export class PostmsgTransport { } return iframe.contentWindow; } - return window.top; + return window.parent; } _handleEvent(e) { From 86a1ce23ae2d97f4c422c73b95e3ecd44d723cd9 Mon Sep 17 00:00:00 2001 From: Muhammed Thanish Date: Thu, 24 Nov 2016 14:34:39 +0530 Subject: [PATCH 41/47] Update CHANGELOG --- CHANGELOG.md | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 5fbbcf964e31..ce23646e2edf 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,10 @@ ## Changelog +### v2.0.1 +24-Nov-2016 + +* Fix empty story list when loading in an iframe [PR8](https://github.com/kadirahq/storybook-channel-postmsg/pull/8) + ### v2.0.0 17-Nov-2016 From 8b28a78f3248190927a6dea3ef75935b7f955858 Mon Sep 17 00:00:00 2001 From: Muhammed Thanish Date: Thu, 24 Nov 2016 14:34:43 +0530 Subject: [PATCH 42/47] 2.0.1 --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 484586435cb9..eae1ab5d2e59 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "@kadira/storybook-channel-postmsg", - "version": "2.0.0", + "version": "2.0.1", "description": "", "main": "dist/index.js", "scripts": { From 0635aa6801277554e8872f484f42a91a48cc8945 Mon Sep 17 00:00:00 2001 From: Oleg Proskurin Date: Thu, 1 Dec 2016 16:46:08 +0700 Subject: [PATCH 43/47] Update README --save -> --save-dev --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 30f3aa338778..12f2699a02a5 100644 --- a/README.md +++ b/README.md @@ -8,7 +8,7 @@ This [Storybook](https://getstorybook.io) addon allows you to write notes for yo **note: addons require @kadira/storybook 2.x or greater* ```sh -npm i --save @kadira/storybook-addon-notes +npm i --save-dev @kadira/storybook-addon-notes ``` Then create a file called `addons.js` in your storybook config. From 70dc05c578bdd8c4f82f7a27eafef0f01019c561 Mon Sep 17 00:00:00 2001 From: Norbert de Langen Date: Sat, 15 Apr 2017 17:14:51 +0200 Subject: [PATCH 44/47] Update README.md --- README.md | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/README.md b/README.md index 12f2699a02a5..72bd78e1c085 100644 --- a/README.md +++ b/README.md @@ -2,6 +2,12 @@ This [Storybook](https://getstorybook.io) addon allows you to write notes for your stories. +--- + +**This repo has been deprecated because it's now included in https://github.com/storybooks/storybook** + +--- + ![Storybook Addon Notes Demo](docs/demo.png) ### Getting Started From 9da8a98fd59f4bfaf6d1c58076a18ce2a521c106 Mon Sep 17 00:00:00 2001 From: Norbert de Langen Date: Sat, 15 Apr 2017 17:54:55 +0200 Subject: [PATCH 45/47] Update README.md --- README.md | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/README.md b/README.md index cdd7b75a9de7..37a5c28d8e67 100644 --- a/README.md +++ b/README.md @@ -2,6 +2,12 @@ Post Message channel for Kadira Storybooks. This channel can be used when the Storybook Renderer runs inside an iframe or a child window. A channel can be created using the `createChannel` function. +--- + +**This repo has been deprecated because it's now included in https://github.com/storybooks/storybook** + +--- + ```js import createChannel from '@kadira/storybook-channel-postmsg' const channel = createChannel({ key: 'postmsg-key' }) From afd0d20b559e79162daf5050437916cd86b95024 Mon Sep 17 00:00:00 2001 From: Norbert de Langen Date: Sat, 15 Apr 2017 21:42:01 +0200 Subject: [PATCH 46/47] FIX linting --- packages/addon-notes/src/register.js | 6 ++---- packages/channel-postmessage/src/index.js | 8 +++----- 2 files changed, 5 insertions(+), 9 deletions(-) diff --git a/packages/addon-notes/src/register.js b/packages/addon-notes/src/register.js index 019f56c0aa1c..5257c94db88a 100644 --- a/packages/addon-notes/src/register.js +++ b/packages/addon-notes/src/register.js @@ -63,12 +63,10 @@ Notes.propTypes = { }; // Register the addon with a unique name. -addons.register('kadira/notes', (api) => { +addons.register('kadira/notes', api => { // Also need to set a unique name to the panel. addons.addPanel('kadira/notes/panel', { title: 'Notes', - render: () => ( - - ), + render: () => , }); }); diff --git a/packages/channel-postmessage/src/index.js b/packages/channel-postmessage/src/index.js index 0bb347bae9f8..d3a73b82db33 100644 --- a/packages/channel-postmessage/src/index.js +++ b/packages/channel-postmessage/src/index.js @@ -41,9 +41,7 @@ export class PostmsgTransport { const buffer = this._buffer; this._buffer = []; buffer.forEach(item => { - this.send(item.event) - .then(item.resolve) - .catch(item.reject); + this.send(item.event).then(item.resolve).catch(item.reject); }); } @@ -61,7 +59,7 @@ export class PostmsgTransport { } _handleEvent(e) { - if(!e.data || typeof(e.data) !== 'string') { + if (!e.data || typeof e.data !== 'string') { return; } let data; @@ -70,7 +68,7 @@ export class PostmsgTransport { } catch (e) { return null; } - if(!data || typeof(data) !== 'object') { + if (!data || typeof data !== 'object') { return null; } const { key, event } = data; From bf06bf42c802ea70e34c4646f3fe00c45af7f175 Mon Sep 17 00:00:00 2001 From: Norbert de Langen Date: Sat, 15 Apr 2017 21:52:25 +0200 Subject: [PATCH 47/47] REMOVE testing and listing from project --- packages/addon-notes/package.json | 16 +--------------- 1 file changed, 1 insertion(+), 15 deletions(-) diff --git a/packages/addon-notes/package.json b/packages/addon-notes/package.json index 9564db3963fc..7bd7b691d61c 100644 --- a/packages/addon-notes/package.json +++ b/packages/addon-notes/package.json @@ -9,7 +9,7 @@ "license": "MIT", "scripts": { "prepublish": ". ./.scripts/prepublish.sh", - "test": "mocha --require .scripts/mocha_runner src/**/tests/**/*.j", + "test": "echo \"Error: no test specified\" && exit 0", "storybook": "start-storybook -p 9010", "publish-storybook": "bash .scripts/publish_storybook.sh" }, @@ -24,18 +24,7 @@ "babel-preset-stage-2": "^6.5.0", "babel-plugin-transform-runtime": "^6.5.0", "babel-cli": "^6.5.0", - "eslint": "^3.6.1", - "babel-eslint": "^7.0.0", - "eslint-config-airbnb": "^12.0.0", - "eslint-plugin-babel": "^3.2.0", - "eslint-plugin-react": "^6.2.2", - "mocha": "^3.1.0", - "chai": "^3.5.0", - "sinon": "^1.17.6", - "enzyme": "^2.2.0", "react-addons-test-utils": "^15.3.2", - "jsdom": "^8.3.1", - "eslint-plugin-jsx-a11y": "^0.6.2", "@kadira/storybook": "^2.20.1", "git-url-parse": "^6.0.1" }, @@ -47,9 +36,6 @@ "babel-runtime": "^6.5.0" }, "main": "dist/index.js", - "engines": { - "npm": "^3.0.0" - }, "keywords": [ "react", "storybook",