Skip to content

Commit 660fff2

Browse files
authoredMar 13, 2018
Merge pull request #51 from akiran/rewrite
Upgrading to React16
2 parents 433f71c + fe96677 commit 660fff2

14 files changed

+80
-299
lines changed
 

‎.gitignore

+1
Original file line numberDiff line numberDiff line change
@@ -29,3 +29,4 @@ node_modules
2929
.sass-cache
3030
build
3131
lib
32+
package-lock.json

‎.npmignore

-1
This file was deleted.

‎docs/_default.scss

-152
This file was deleted.

‎docs/docs.scss

-1
This file was deleted.

‎docs/index.html

-9
This file was deleted.

‎docs/index.jsx

-25
This file was deleted.

‎docs/snippets/html.md

-5
This file was deleted.

‎docs/snippets/html.txt

-3
This file was deleted.

‎gulpfile.js

-36
This file was deleted.

‎karma.conf.js

+16-4
Original file line numberDiff line numberDiff line change
@@ -32,15 +32,27 @@ module.exports = function(config) {
3232

3333
webpack: {
3434
module: {
35-
loaders: [
36-
{test: /\.(js|jsx)$/, loaders: ['babel']},
37-
]
35+
rules: [
36+
{
37+
test: /\.(js|jsx)$/,
38+
use: {
39+
loader: 'babel-loader',
40+
options: {
41+
presets: ['env'],
42+
plugins: [
43+
'transform-class-properties',
44+
'transform-react-jsx',
45+
],
46+
},
47+
},
48+
},
49+
],
3850
},
3951
externals: {
4052
react: 'React'
4153
},
4254
resolve: {
43-
root: __dirname
55+
modules: [__dirname, 'node_modules']
4456
}
4557
},
4658
webpackServer: {

‎package.json

+16-12
Original file line numberDiff line numberDiff line change
@@ -4,8 +4,7 @@
44
"description": "React component for syntax highlighting",
55
"main": "index.js",
66
"scripts": {
7-
"start": "gulp server",
8-
"prepublish": "babel ./src --out-dir ./lib",
7+
"prepublish": "babel ./src --out-dir ./lib --plugins=transform-class-properties,transform-react-jsx --presets=env",
98
"test": "karma start --single-run",
109
"dev-test": "karma start"
1110
},
@@ -27,21 +26,20 @@
2726
},
2827
"homepage": "https://github.com/akiran/react-highlight",
2928
"dependencies": {
30-
"highlight.js": "^9.11.0",
31-
"react": "^15.5.4",
32-
"react-dom": "^15.5.4"
29+
"highlight.js": "^9.11.0"
3330
},
3431
"devDependencies": {
3532
"autoprefixer": "^6.7.7",
36-
"babel": "^5.8.38",
37-
"babel-core": "^5.8.38",
33+
"babel-cli": "^6.26.0",
34+
"babel-core": "^6.26.0",
3835
"babel-eslint": "^6.1.2",
39-
"babel-loader": "^5.4.2",
36+
"babel-loader": "^7.1.2",
37+
"babel-plugin-transform-class-properties": "^6.24.1",
38+
"babel-plugin-transform-react-jsx": "^6.24.1",
39+
"babel-preset-env": "^1.6.0",
4040
"es5-shim": "^4.5.9",
4141
"eslint": "^3.19.0",
4242
"eslint-plugin-react": "^6.10.3",
43-
"gulp": "^3.9.1",
44-
"gulp-ruby-sass": "^2.1.1",
4543
"html-loader": "^0.4.5",
4644
"jasmine-core": "^2.5.2",
4745
"jsx-loader": "^0.13.2",
@@ -54,7 +52,13 @@
5452
"node-libs-browser": "^2.0.0",
5553
"phantomjs-prebuilt": "^2.1.14",
5654
"raw-loader": "^0.5.1",
57-
"webpack": "^1.15.0",
58-
"webpack-dev-server": "^1.16.3"
55+
"react": "^15.5.4",
56+
"react-dom": "^15.5.4",
57+
"webpack": "^3.6.0",
58+
"webpack-dev-server": "^2.9.1"
59+
},
60+
"peerDependencies": {
61+
"react": "^15.0.0 || ^16.0.0",
62+
"react-dom": "^15.0.0 || ^16.0.0"
5963
}
6064
}

‎src/index.js

+17-17
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,5 @@
11
import hljs from 'highlight.js';
22
import React from 'react';
3-
import ReactDOM from 'react-dom';
43

54
class Highlight extends React.Component {
65
componentDidMount() {
@@ -12,32 +11,33 @@ class Highlight extends React.Component {
1211
}
1312

1413
highlightCode() {
15-
const domNode = ReactDOM.findDOMNode(this);
16-
const nodes = domNode.querySelectorAll('pre code');
14+
const nodes = this.el.querySelectorAll('pre code');
1715

18-
let i;
19-
for (i = 0; i < nodes.length; i++) {
20-
hljs.highlightBlock(nodes[i]);
16+
for (let i = 0; i < nodes.length; i++) {
17+
hljs.highlightBlock(nodes[i])
2118
}
2219
}
2320

21+
setEl = (el) => {
22+
this.el = el;
23+
};
24+
2425
render() {
25-
const {children, className, element, innerHTML} = this.props;
26-
let Element = element ? React.DOM[element] : null;
26+
const {children, className, element: Element, innerHTML} = this.props;
27+
const props = { ref: this.setEl, className };
2728

2829
if (innerHTML) {
29-
if (!Element) {
30-
Element = React.DOM.div
31-
}
32-
33-
return Element({dangerouslySetInnerHTML: {__html: children}, className: className || null}, null);
34-
} else {
30+
props.dangerouslySetInnerHTML = { __html: children };
3531
if (Element) {
36-
return Element({className}, children);
37-
} else {
38-
return <pre><code className={className}>{children}</code></pre>;
32+
return <Element {...props} />;
3933
}
34+
return <div {...props} />;
35+
}
36+
37+
if (Element) {
38+
return <Element {...props}>{children}</Element>;
4039
}
40+
return <pre ref={this.setEl}><code className={className}>{children}</code></pre>;
4141
}
4242
}
4343

‎src/optimized.js

+17-17
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,5 @@
11
import hljs from'highlight.js/lib/highlight';
22
import React from'react';
3-
import ReactDOM from'react-dom';
43

54
class Highlight extends React.Component {
65
componentDidMount() {
@@ -13,8 +12,7 @@ class Highlight extends React.Component {
1312

1413
highlightCode() {
1514
const {className, languages} = this.props;
16-
const domNode = ReactDOM.findDOMNode(this);
17-
const nodes = domNode.querySelectorAll('pre code');
15+
const nodes = this.el.querySelectorAll('pre code');
1816

1917
if ((languages.length === 0) && className) {
2018
languages.push(className);
@@ -24,29 +22,31 @@ class Highlight extends React.Component {
2422
hljs.registerLanguage(lang, require('highlight.js/lib/languages/' + lang));
2523
});
2624

27-
let i;
28-
for (i = 0; i < nodes.length; i++) {
29-
hljs.highlightBlock(nodes[i]);
25+
for (let i = 0; i < nodes.length; i++) {
26+
hljs.highlightBlock(nodes[i])
3027
}
3128
}
3229

30+
setEl = (el) => {
31+
this.el = el;
32+
};
33+
3334
render() {
34-
const {children, className, element, innerHTML} = this.props;
35-
let Element = element ? React.DOM[element] : null;
35+
const {children, className, element: Element, innerHTML} = this.props;
36+
const props = { ref: this.setEl, className };
3637

3738
if (innerHTML) {
38-
if (!Element) {
39-
Element = React.DOM.div
40-
}
41-
42-
return Element({dangerouslySetInnerHTML: {__html: children}, className: className || null}, null);
43-
} else {
39+
props.dangerouslySetInnerHTML = { __html: children };
4440
if (Element) {
45-
return Element({className}, children);
46-
} else {
47-
return <pre><code className={className}>{children}</code></pre>;
41+
return <Element {...props} />;
4842
}
43+
return <div {...props} />;
44+
}
45+
46+
if (Element) {
47+
return <Element {...props}>{children}</Element>;
4948
}
49+
return <pre ref={this.setEl}><code className={className}>{children}</code></pre>;
5050
}
5151
}
5252

‎webpack.config.js

+13-17
Original file line numberDiff line numberDiff line change
@@ -1,36 +1,32 @@
1-
var webpack = require('webpack');
2-
var path = require('path');
3-
var autoprefixer = require('autoprefixer');
1+
var webpack = require('webpack')
2+
var path = require('path')
3+
var autoprefixer = require('autoprefixer')
44

55
module.exports = {
66
devtool: '#inline-source-map',
7-
entry: {
8-
'docs.js': './docs/index'
9-
},
7+
entry: './src/index',
108
output: {
119
path: path.join(__dirname, 'build'),
12-
filename: '[name]',
10+
filename: '[name]'
1311
},
1412
module: {
1513
loaders: [
16-
{test: /\.(js|jsx)$/, loaders: ['babel']},
14+
{ test: /\.(js|jsx)$/, loaders: ['babel'] },
1715
// {
1816
// test: /\.scss$/,
19-
// loader: "style!css!postcss!sass?outputStyle=expanded&includePaths[]=" +
17+
// loader: "style!css!postcss!sass?outputStyle=expanded&includePaths[]=" +
2018
// (path.resolve(__dirname, './node_modules')) + "&includePaths[]=" + (path.resolve(__dirname, './bower_components'))
2119
// },
22-
{ test: /\.md$/, loader: 'raw!markdown' },
23-
],
20+
{ test: /\.md$/, loader: 'raw!markdown' }
21+
]
2422
},
25-
postcss: [ autoprefixer({ browsers: ['last 2 version'] }) ],
26-
resolve : {
27-
alias: {
28-
29-
},
23+
postcss: [autoprefixer({ browsers: ['last 2 version'] })],
24+
resolve: {
25+
alias: {},
3026
extensions: ['', '.js', '.jsx']
3127
},
3228
plugins: [
3329
new webpack.HotModuleReplacementPlugin(),
3430
new webpack.IgnorePlugin(/vertx/)
3531
]
36-
};
32+
}

0 commit comments

Comments
 (0)
Please sign in to comment.