diff --git a/dist/GestureView.js b/dist/components/GestureView.js similarity index 92% rename from dist/GestureView.js rename to dist/components/GestureView.js index aee5208..7541ae1 100644 --- a/dist/GestureView.js +++ b/dist/components/GestureView.js @@ -1,9 +1,5 @@ 'use strict'; -Object.defineProperty(exports, '__esModule', { - value: true -}); - var _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; } @@ -20,7 +16,7 @@ var _reactNative = require('react-native'); var _reactNative2 = _interopRequireDefault(_reactNative); -exports['default'] = _reactNative2['default'].createClass({ +var GestureView = _reactNative2['default'].createClass({ displayName: 'GestureView', mixins: [(0, _mixinsEvents2['default'])(['onLayout']), (0, _mixinsDraggable2['default'])()], @@ -67,4 +63,5 @@ exports['default'] = _reactNative2['default'].createClass({ ); } }); -module.exports = exports['default']; \ No newline at end of file + +module.exports = GestureView; \ No newline at end of file diff --git a/dist/create.js b/dist/create.js index 1d0f775..5ad62d8 100644 --- a/dist/create.js +++ b/dist/create.js @@ -4,7 +4,11 @@ Object.defineProperty(exports, '__esModule', { value: true }); -var _ramda = require('ramda'); +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; } + +var _curry = require('curry'); + +var _curry2 = _interopRequireDefault(_curry); function createGesture(responder, transducer, getInitialLayout, draggable) { return draggable.onDragStart.flatMap(function () { @@ -12,5 +16,5 @@ function createGesture(responder, transducer, getInitialLayout, draggable) { }); }; -exports['default'] = (0, _ramda.curry)(createGesture); +exports['default'] = (0, _curry2['default'])(createGesture); module.exports = exports['default']; \ No newline at end of file diff --git a/dist/index.js b/dist/index.js index 8c30a0d..aa5a8e9 100644 --- a/dist/index.js +++ b/dist/index.js @@ -6,7 +6,7 @@ module.exports = { create: require('./create'), draggable: require('./mixins/draggable'), events: require('./mixins/events'), - GestureView: require('./GestureView'), + GestureView: require('./components/GestureView'), responders: { general: require('./responder/general'), oneFinger: require('./responder/oneFinger'), diff --git a/dist/responder/general.js b/dist/responder/general.js index fd5f198..c110783 100644 --- a/dist/responder/general.js +++ b/dist/responder/general.js @@ -11,7 +11,6 @@ Object.defineProperty(exports, '__esModule', { value: true }); -exports['default'] = genernalResponder; function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; } @@ -23,6 +22,10 @@ var _immutable = require('immutable'); var _immutable2 = _interopRequireDefault(_immutable); +var _curry = require('curry'); + +var _curry2 = _interopRequireDefault(_curry); + function toImmutableTouch(touch) { return _immutable2['default'].Map({ timestamp: touch.timestamp, @@ -79,4 +82,5 @@ function genernalResponder(n, onMove, getInitialLayout) { }); } +exports['default'] = (0, _curry2['default'])(genernalResponder); module.exports = exports['default']; \ No newline at end of file diff --git a/package.json b/package.json index 62a58fb..067b61d 100644 --- a/package.json +++ b/package.json @@ -6,7 +6,8 @@ "scripts": { "test": "standard src/*.js && mocha --compilers js:babel/register --recursive --require should", "start": "node_modules/.bin/babel src --out-dir dist", - "watch": "node_modules/.bin/babel src --out-dir dist --watch" + "watch": "node_modules/.bin/babel src --out-dir dist --watch", + "docgen": "react-docgen ./src/components/* | ./scripts/build-docs.sh" }, "repository": { "type": "git", @@ -32,6 +33,7 @@ "babel": "^5.8.29", "mocha": "^2.3.3", "proxyquire": "^1.7.3", + "react-docgen": "^2.4.0", "should": "^7.1.1", "sinon": "^1.17.2", "standard": "^5.3.1" diff --git a/scripts/build-docs.sh b/scripts/build-docs.sh new file mode 100755 index 0000000..6230fe3 --- /dev/null +++ b/scripts/build-docs.sh @@ -0,0 +1,42 @@ +#!/usr/bin/env node + +/** + * This example script expects a JSON blob generated by react-docgen as input, + * e.g. react-docgen components/* | buildDocs.sh + */ + +var fs = require('fs'); +var generateMarkdown = require('./generateMarkdown'); +var path = require('path'); + +var json = ''; +process.stdin.setEncoding('utf8'); +process.stdin.on('readable', function() { + var chunk = process.stdin.read(); + if (chunk !== null) { + json += chunk; + } +}); + +process.stdin.on('end', function() { + buildDocs(JSON.parse(json)); +}); + +function buildDocs(api) { + // api is an object keyed by filepath. We use the file name as component name. + for (var filepath in api) { + var name = getComponentName(filepath); + var markdown = generateMarkdown(name, api[filepath]); + fs.writeFileSync(name + '.md', markdown); + process.stdout.write(filepath + ' -> ' + name + '.md\n'); + } +} + +function getComponentName(filepath) { + var name = path.basename(filepath); + var ext; + while ((ext = path.extname(name))) { + name = name.substring(0, name.length - ext.length); + } + return name; +} diff --git a/scripts/generateMarkdown.js b/scripts/generateMarkdown.js new file mode 100644 index 0000000..b4018c0 --- /dev/null +++ b/scripts/generateMarkdown.js @@ -0,0 +1,80 @@ +/** + * Copyright (c) 2015, Facebook, Inc. + * All rights reserved. + * + * This source code is licensed under the BSD-style license found in the + * LICENSE file in the root directory of this source tree. An additional grant + * of patent rights can be found in the PATENTS file in the same directory. + */ +"use strict"; + +function stringOfLength(string, length) { + var newString = ''; + for (var i = 0; i < length; i++) { + newString += string; + } + return newString; +} + +function generateTitle(name) { + var title = '`' + name + '` (component)'; + return title + '\n' + stringOfLength('=', title.length) + '\n'; +} + +function generateDesciption(description) { + return description + '\n'; +} + +function generatePropType(type) { + var values; + if (Array.isArray(type.value)) { + values = '(' + + type.value.map(function(typeValue) { + return typeValue.name || typeValue.value; + }).join('|') + + ')'; + } else { + values = type.value; + } + + return 'type: `' + type.name + (values ? values: '') + '`\n'; +} + +function generatePropDefaultValue(value) { + return 'defaultValue: `' + value.value + '`\n'; +} + +function generateProp(propName, prop) { + return ( + '### `' + propName + '`' + (prop.required ? ' (required)' : '') + '\n' + + '\n' + + (prop.description ? prop.description + '\n\n' : '') + + (prop.type ? generatePropType(prop.type) : '') + + (prop.defaultValue ? generatePropDefaultValue(prop.defaultValue) : '') + + '\n' + ); +} + +function generateProps(props) { + var title = 'Props'; + + return ( + title + '\n' + + stringOfLength('-', title.length) + '\n' + + '\n' + + Object.keys(props).sort().map(function(propName) { + return generateProp(propName, props[propName]); + }).join('\n') + ); +} + +function generateMarkdown(name, reactAPI) { + var markdownString = + generateTitle(name) + '\n' + + generateDesciption(reactAPI.description) + '\n' + + generateProps(reactAPI.props); + + return markdownString; +} + +module.exports = generateMarkdown; diff --git a/src/GestureView.js b/src/components/GestureView.js similarity index 79% rename from src/GestureView.js rename to src/components/GestureView.js index f29b22c..91e1635 100644 --- a/src/GestureView.js +++ b/src/components/GestureView.js @@ -1,11 +1,12 @@ -import events from './mixins/events' -import draggableMixin from './mixins/draggable' -import React, { +const events = require('./mixins/events') +const draggableMixin = require('./mixins/draggable') +const React = require('react-native') +const { PropTypes, View -} from 'react-native' +} = React -export default React.createClass({ +var GestureView = React.createClass({ mixins: [events(['onLayout']), draggableMixin()], propTypes: { @@ -42,3 +43,5 @@ export default React.createClass({ ) } }) + +module.exports = GestureView diff --git a/src/create.js b/src/create.js index 6bdf6e6..67170ae 100644 --- a/src/create.js +++ b/src/create.js @@ -1,4 +1,4 @@ -import curry from 'curry' +const curry = require('curry') function createGesture (responder, transducer, getInitialLayout, draggable) { return draggable @@ -13,4 +13,4 @@ function createGesture (responder, transducer, getInitialLayout, draggable) { }) }; -export default curry(createGesture) +module.exports = curry(createGesture) diff --git a/src/drag.js b/src/drag.js index d87f51f..b3b4306 100644 --- a/src/drag.js +++ b/src/drag.js @@ -1,9 +1,9 @@ -import { map } from 'transducers.js' -import oneFingerResponder from './responder/oneFinger' +const map = require('transducers.js').map +const oneFingerResponder = require('./responder/oneFinger') -export let responder = oneFingerResponder +exports.responder = oneFingerResponder -export let transducer = map(function (gesture) { +exports.transducer = map(function (gesture) { let layout = gesture.get('initialLayout').set('rotate', 0) let initialTouch = gesture.get('initialTouches').get(0) let currentTouch = gesture.get('touches').get(0) diff --git a/src/index.js b/src/index.js index 47f1f1c..35b62fe 100644 --- a/src/index.js +++ b/src/index.js @@ -4,7 +4,7 @@ module.exports = { create: require('./create'), draggable: require('./mixins/draggable'), events: require('./mixins/events'), - GestureView: require('./GestureView'), + GestureView: require('./components/GestureView'), responders: { general: require('./responder/general'), oneFinger: require('./responder/oneFinger'), diff --git a/src/mixins/draggable.js b/src/mixins/draggable.js index c2a0ad2..b640aae 100644 --- a/src/mixins/draggable.js +++ b/src/mixins/draggable.js @@ -1,10 +1,12 @@ -import Rx from 'rx' -import create from '../create' -import { PanResponder } from 'react-native' +const Rx = require('rx') +const create = require('../create') +const React = require('react-native') + +const { PanResponder } = React function yes () { return true } -export default function draggableMixin (gestureDefs) { +module.exports = function draggableMixin (gestureDefs) { gestureDefs = gestureDefs || [] var target diff --git a/src/mixins/events.js b/src/mixins/events.js index 46f6a94..3ceb701 100644 --- a/src/mixins/events.js +++ b/src/mixins/events.js @@ -1,6 +1,6 @@ -import Rx from 'rx' +const Rx = require('rx') -export default function events (evs = []) { +module.exports = function events (evs = []) { var streams = evs.reduce(function (res, eventName) { res[eventName] = new Rx.Subject() return res diff --git a/src/pinch.js b/src/pinch.js index 947c27b..b68a96e 100644 --- a/src/pinch.js +++ b/src/pinch.js @@ -1,9 +1,9 @@ -import twoFingerResponder from './responder/twoFinger' -import { map } from 'transducers.js' +const twoFingerResponder = require('./responder/twoFinger') +const map = require('transducers.js').map -export let responder = twoFingerResponder +exports.responder = twoFingerResponder -export let transducer = map(function (gesture) { +exports.transducer = map(function (gesture) { let layout = gesture.get('initialLayout') let startX = layout.get('x') let startY = layout.get('y') diff --git a/src/responder/general.js b/src/responder/general.js index 35ba2a9..55e1320 100644 --- a/src/responder/general.js +++ b/src/responder/general.js @@ -6,9 +6,9 @@ * from this responder. */ -import Rx from 'rx' -import Immutable from 'immutable' -import curry from 'curry' +const Rx = require('rx') +const Immutable = require('immutable') +const curry = require('curry') function toImmutableTouch (touch) { return Immutable.Map({ @@ -81,4 +81,4 @@ function genernalResponder (n, onMove, getInitialLayout) { }) } -export default curry(genernalResponder) +module.exports = curry(genernalResponder) diff --git a/src/responder/oneFinger.js b/src/responder/oneFinger.js index b907f20..c9f5c9f 100644 --- a/src/responder/oneFinger.js +++ b/src/responder/oneFinger.js @@ -1,5 +1,5 @@ -import genernalResponder from './general' +const genernalResponder = require('./general') -export default function oneFingerResponder (onMove, getInitialLayout) { +module.exports = function oneFingerResponder (onMove, getInitialLayout) { return genernalResponder(1, onMove, getInitialLayout) } diff --git a/src/responder/twoFinger.js b/src/responder/twoFinger.js index 6ccd56e..8a751cb 100644 --- a/src/responder/twoFinger.js +++ b/src/responder/twoFinger.js @@ -12,8 +12,8 @@ * 6. centerDiff - the different of the center point */ -import { Map } from 'immutable' -import genernalResponder from './general' +const Map = require('immutable').Map +const genernalResponder = require('./general') function center (touches) { let a = touches.get(0) @@ -85,6 +85,6 @@ function extend (gesture) { return gesture.withMutations(mutate) } -export default function twoFingerResponder (onMove, getInitialLayout) { +module.exports = function twoFingerResponder (onMove, getInitialLayout) { return genernalResponder(2, onMove, getInitialLayout).map(extend) }