Skip to content

Commit d51688b

Browse files
committed
Everything working but CodeEditor
1 parent d264c65 commit d51688b

10 files changed

Lines changed: 97 additions & 28 deletions

File tree

content/github/getting-started-with-github/access-permissions-on-github.md

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -42,6 +42,10 @@ Organization members can have *owner*{% if currentVersion == "free-pro-team@late
4242
- "[Repository permission levels for an organization](/articles/repository-permission-levels-for-an-organization)"
4343
- "[About teams](/articles/about-teams)"
4444

45+
## Code Editor Component
46+
47+
48+
4549
{% if currentVersion == "free-pro-team@latest" %}
4650

4751
### Enterprise accounts

javascripts/index.js

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@ import { fillCsrf } from './get-csrf'
1818
import initializeEvents from './events'
1919
import CodeBlock from '../react/CodeBlock'
2020
import CoolTable from '../react/CoolTable'
21+
import CodeEditor from '../react/CodeEditor'
2122

2223
import 'react-tabs/style/react-tabs.css'
2324

@@ -42,5 +43,6 @@ document.addEventListener('DOMContentLoaded', async () => {
4243

4344
module.export = {
4445
CodeBlock,
45-
CoolTable
46+
CoolTable,
47+
CodeEditor
4648
}

lib/react/babel.js

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
const babel = require('@babel/core')
2+
3+
const reactBabelOptions = {
4+
presets: [
5+
'@babel/preset-env',
6+
'@babel/preset-react'
7+
],
8+
plugins: [
9+
'@babel/plugin-transform-react-jsx',
10+
'@babel/plugin-proposal-object-rest-spread',
11+
'@babel/plugin-proposal-class-properties',
12+
'@babel/transform-runtime'
13+
]
14+
}
15+
16+
const transform = code =>
17+
babel.transform(code, reactBabelOptions).code
18+
19+
module.exports = {
20+
transform: transform,
21+
reactBabelOptions: reactBabelOptions
22+
}

lib/react/engine.js

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,12 @@
11
const { renderToString } = require('react-dom/server')
2-
const transform = require('./transform')
2+
const { transform } = require('./babel')
33

44
// These all need to be here even though eslint doesn't think so
55
/* eslint-disable */
66
const React = require('react')
77
const CodeBlock = require('../../dist/react/CodeBlock')
88
const CoolTable = require('../../dist/react/CoolTable')
9+
const CodeEditor = require('../../dist/react/CodeEditor')
910
/* eslint-enable */
1011

1112
const renderReact = async componentStr => {

lib/react/transform.js

Lines changed: 0 additions & 13 deletions
This file was deleted.

package-lock.json

Lines changed: 22 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

package.json

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,7 @@
2828
"@octokit/rest": "^16.38.1",
2929
"@primer/css": "^15.1.0",
3030
"@primer/octicons": "^11.0.0",
31+
"ace-builds": "^1.4.12",
3132
"airtable": "^0.9.0",
3233
"algoliasearch": "^3.35.1",
3334
"babel-loader": "^8.1.0",
@@ -73,6 +74,7 @@
7374
"port-used": "^2.0.8",
7475
"querystring": "^0.2.0",
7576
"react": "^16.14.0",
77+
"react-ace": "^9.1.4",
7678
"react-data-grid": "^7.0.0-canary.24",
7779
"react-dom": "^16.14.0",
7880
"react-syntax-highlighter": "^15.2.1",

react/CodeEditor.js

Lines changed: 39 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,39 @@
1+
const React = require('react')
2+
const ReactDOM = require('react-dom')
3+
const AceEditor = require('react-ace')
4+
5+
require('ace-builds/src-noconflict/mode-java')
6+
require('ace-builds/src-noconflict/theme-github')
7+
8+
const timestamp = Date.now()
9+
10+
function onChange (newValue) {
11+
console.log('change', newValue)
12+
}
13+
14+
const CodeEditor = (props) => {
15+
return (
16+
<div language={props.language}>
17+
<AceEditor
18+
mode={props.language}
19+
theme='github'
20+
onChange={onChange}
21+
name={`code-editor-${timestamp}`}
22+
editorProps={{ $blockScrolling: true }}
23+
/>
24+
</div>
25+
)
26+
}
27+
28+
if (typeof window === 'undefined') {
29+
} else {
30+
const componentContainers = document.querySelectorAll('.react-component-CodeEditor')
31+
32+
for (const componentContainer of componentContainers) {
33+
const div = componentContainer.children[0]
34+
const language = div.getAttribute('language')
35+
ReactDOM.hydrate(React.createElement(CodeEditor, { language: language }), componentContainer)
36+
}
37+
}
38+
39+
module.exports = CodeEditor

server.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@ const dirTree = require('directory-tree')
1111
const port = Number(process.env.PORT) || 4000
1212
const app = express()
1313

14-
const transform = require('./lib/react/transform')
14+
const { transform } = require('./lib/react/babel')
1515

1616
const tree = dirTree('./react/')
1717
for (const index in tree.children) {

webpack.config.js

Lines changed: 2 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@ const path = require('path')
22
const MiniCssExtractPlugin = require('mini-css-extract-plugin')
33
const CopyWebpackPlugin = require('copy-webpack-plugin')
44
const { EnvironmentPlugin } = require('webpack')
5+
const { reactBabelOptions } = require('./lib/react/babel')
56

67
module.exports = {
78
entry: './javascripts/index.js',
@@ -19,18 +20,7 @@ module.exports = {
1920
],
2021
use: {
2122
loader: 'babel-loader',
22-
options: {
23-
presets: [
24-
'@babel/preset-env',
25-
'@babel/preset-react'
26-
],
27-
plugins: [
28-
'@babel/plugin-transform-react-jsx',
29-
'@babel/plugin-proposal-object-rest-spread',
30-
'@babel/plugin-transform-modules-commonjs',
31-
'@babel/plugin-proposal-class-properties'
32-
]
33-
}
23+
options: reactBabelOptions
3424
}
3525
},
3626
{

0 commit comments

Comments
 (0)