├── .gitignore
├── .npmignore
├── README.md
├── dist
└── react-diff.js
├── lib
└── react-diff.js
└── package.json
/.gitignore:
--------------------------------------------------------------------------------
1 | .idea
2 | *.iml
3 | node_modules/
--------------------------------------------------------------------------------
/.npmignore:
--------------------------------------------------------------------------------
1 | **/.*
2 | example
3 | script
4 | specs
5 | bower.json
6 | karma.conf.js
7 | webpack.config.js
8 |
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | # react-diff
2 |
3 | Highlights differences between two strings, uses the [diff](https://www.npmjs.com/package/diff) module
4 |
5 | ## Installation
6 |
7 | ```
8 | npm install react-diff
9 | ```
10 |
11 | ## Demo
12 |
13 | http://cezary.github.io/react-diff/
14 |
15 | ## Example
16 |
17 | ```javascript
18 | var React = require('react');
19 | var Diff = require('react-diff');
20 |
21 | var Component = React.createClass({
22 | render: function() {
23 | return (
24 |
25 | );
26 | }
27 | });
28 | ```
29 |
30 | ## License
31 |
32 | MIT
33 |
--------------------------------------------------------------------------------
/dist/react-diff.js:
--------------------------------------------------------------------------------
1 | 'use strict';
2 |
3 | var React = require('react');
4 | var jsdiff = require('diff');
5 |
6 | var fnMap = {
7 | 'chars': jsdiff.diffChars,
8 | 'words': jsdiff.diffWords,
9 | 'sentences': jsdiff.diffSentences,
10 | 'json': jsdiff.diffJson
11 | };
12 |
13 | module.exports = React.createClass({
14 | displayName: 'Diff',
15 |
16 | getDefaultProps: function getDefaultProps() {
17 | return {
18 | inputA: '',
19 | inputB: '',
20 | type: 'chars'
21 | };
22 | },
23 |
24 | propTypes: {
25 | inputA: React.PropTypes.oneOfType([React.PropTypes.string, React.PropTypes.object]),
26 | inputB: React.PropTypes.oneOfType([React.PropTypes.string, React.PropTypes.object]),
27 | type: React.PropTypes.oneOf(['chars', 'words', 'sentences', 'json'])
28 | },
29 |
30 | render: function render() {
31 | var diff = fnMap[this.props.type](this.props.inputA, this.props.inputB);
32 | var result = diff.map(function (part, index) {
33 | var spanStyle = {
34 | backgroundColor: part.added ? 'lightgreen' : part.removed ? 'salmon' : 'lightgrey'
35 | };
36 | return React.createElement(
37 | 'span',
38 | { key: index, style: spanStyle },
39 | part.value
40 | );
41 | });
42 | return React.createElement(
43 | 'pre',
44 | { className: 'diff-result' },
45 | result
46 | );
47 | }
48 | });
49 |
50 |
--------------------------------------------------------------------------------
/lib/react-diff.js:
--------------------------------------------------------------------------------
1 | var React = require('react');
2 | var jsdiff = require('diff');
3 |
4 | var fnMap = {
5 | 'chars': jsdiff.diffChars,
6 | 'words': jsdiff.diffWords,
7 | 'sentences': jsdiff.diffSentences,
8 | 'json': jsdiff.diffJson
9 | };
10 |
11 | module.exports = React.createClass({
12 | displayName: 'Diff',
13 |
14 | getDefaultProps: function() {
15 | return {
16 | inputA: '',
17 | inputB: '',
18 | type: 'chars'
19 | };
20 | },
21 |
22 | propTypes: {
23 | inputA: React.PropTypes.oneOfType([
24 | React.PropTypes.string,
25 | React.PropTypes.object
26 | ]),
27 | inputB: React.PropTypes.oneOfType([
28 | React.PropTypes.string,
29 | React.PropTypes.object
30 | ]),
31 | type: React.PropTypes.oneOf([
32 | 'chars',
33 | 'words',
34 | 'sentences',
35 | 'json'
36 | ])
37 | },
38 |
39 | render: function () {
40 | var diff = fnMap[this.props.type](this.props.inputA, this.props.inputB);
41 | var result = diff.map(function(part, index) {
42 | var spanStyle = {
43 | backgroundColor: part.added ? 'lightgreen' : part.removed ? 'salmon' : 'lightgrey'
44 | };
45 | return {part.value}
46 | });
47 | return (
48 |
49 | {result}
50 |
51 | );
52 | },
53 | });
54 |
--------------------------------------------------------------------------------
/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "react-diff",
3 | "version": "0.0.7",
4 | "description": "Highlight differences between inputs",
5 | "main": "dist/react-diff.js",
6 | "scripts": {
7 | "build": "./node_modules/.bin/babel lib/react-diff.js > dist/react-diff.js"
8 | },
9 | "repository": {
10 | "type": "git",
11 | "url": "https://github.com/cezary/react-diff.git"
12 | },
13 | "keywords": [
14 | "react",
15 | "diff"
16 | ],
17 | "author": "Cezary Wojtkowski ",
18 | "license": "MIT",
19 | "bugs": {
20 | "url": "https://github.com/cezary/react-diff/issues"
21 | },
22 | "homepage": "https://github.com/cezary/react-diff",
23 | "peerDependencies": {
24 | "react": ">=0.12.0"
25 | },
26 | "dependencies": {
27 | "diff": "^1.2.0"
28 | },
29 | "devDependencies": {
30 | "babel": "^5.1.10"
31 | }
32 | }
33 |
--------------------------------------------------------------------------------