Skip to content

Commit 3150e52

Browse files
author
Sal Niro
committed
init
1 parent 938b0dc commit 3150e52

File tree

12 files changed

+4487
-0
lines changed

12 files changed

+4487
-0
lines changed

.babelrc

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
{
2+
"presets": ["react", "es2015"]
3+
}

.gitignore

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
.idea
2+
node_modules
3+
demo/bundle.js

.npmignore

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,2 @@
1+
.babelrc
2+
demo

README.md

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
### react-codemirror2
2+
3+
```
4+
import CodeMirror from 'react-codemirror2'
5+
6+
<CodeMirror
7+
value='foo'
8+
options={{theme: 'material'}}
9+
onChange={(value) => {
10+
console.log(value);
11+
}} />
12+
```
13+
14+
// TODO

demo/index.html

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
<!DOCTYPE html>
2+
<html lang="en">
3+
<head>
4+
<title>react-codemirror2</title>
5+
</head>
6+
<body>
7+
<div id="app"></div>
8+
<script src="/bundle.js"></script>
9+
</body>
10+
</html>

demo/index.jsx

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
import React from 'react';
2+
import {render} from 'react-dom';
3+
import CodeMirror from '../index.jsx';
4+
5+
require('./index.scss');
6+
7+
render(
8+
<CodeMirror
9+
value='foo'
10+
options={{theme: 'material', viewportMargin: Infinity}}
11+
onChange={(value) => console.log(value)}/>
12+
, document.getElementById('app'));

demo/index.scss

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,2 @@
1+
@import '../node_modules/codemirror/lib/codemirror';
2+
@import '../node_modules/codemirror/theme/material';

demo/server.js

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
let express = require('express');
2+
let app = express();
3+
4+
app.set('port', 5000);
5+
6+
app.use(express.static('.'));
7+
8+
app.use(function (req, res, next) {
9+
if (req.path.substr(-1) === '/' && req.path.length > 1) {
10+
let query = req.url.slice(req.path.length);
11+
res.redirect(301, req.path.slice(0, -1) + query);
12+
} else {
13+
next();
14+
}
15+
});
16+
17+
app.all('/*', function (req, res, next) {
18+
res.sendFile(`${__dirname}/index.html`)
19+
});
20+
21+
app.listen(app.get('port'), function () {
22+
console.log(`react-codemirror2 demo listening on port ${app.get('port')}`);
23+
});

demo/webpack.config.js

Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,32 @@
1+
let path = require('path');
2+
let context = path.resolve(__dirname, '..');
3+
4+
let config = {
5+
6+
entry: path.normalize(`${context}/demo/index.jsx`),
7+
output: {
8+
path: path.normalize(`${context}/demo/`),
9+
filename: 'bundle.js'
10+
},
11+
module: {
12+
rules: [{
13+
test: /\.jsx?/,
14+
exclude: /(node_modules)/,
15+
use: [{
16+
loader: 'babel-loader'
17+
}]
18+
}, {
19+
test: /(\.scss)$/,
20+
exclude: /(node_modules)/,
21+
use: [{
22+
loader: 'style-loader'
23+
}, {
24+
loader: 'css-loader'
25+
}, {
26+
loader: 'sass-loader'
27+
}]
28+
}]
29+
}
30+
};
31+
32+
module.exports = config;

index.jsx

Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,30 @@
1+
import React from 'react';
2+
let codemirror = require('codemirror');
3+
4+
export default class CodeMirror extends React.Component {
5+
6+
componentDidMount() {
7+
8+
this.editor = codemirror(this.ref);
9+
this.editor.on('change', () => this.props.onChange(this.editor.getValue()));
10+
11+
this.hydrate(this.props);
12+
}
13+
14+
componentWillReceiveProps(nextProps) {
15+
16+
this.hydrate(nextProps);
17+
}
18+
19+
hydrate(props) {
20+
21+
Object.keys(props.options || {}).forEach(key => this.editor.setOption(key, props.options[key]));
22+
this.editor.setValue(props.value || '');
23+
}
24+
25+
render() {
26+
return (
27+
<div ref={(self) => this.ref = self}/>
28+
)
29+
}
30+
}

0 commit comments

Comments
 (0)