-
Notifications
You must be signed in to change notification settings - Fork 87
/
Copy pathoptimized.js
59 lines (47 loc) · 1.43 KB
/
optimized.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
import hljs from'highlight.js/lib/highlight';
import React from'react';
class Highlight extends React.Component {
componentDidMount() {
this.highlightCode();
}
componentDidUpdate() {
this.highlightCode();
}
highlightCode() {
const {className, languages} = this.props;
const nodes = this.el.querySelectorAll('pre code');
if ((languages.length === 0) && className) {
languages.push(className);
}
languages.forEach(lang => {
hljs.registerLanguage(lang, require('highlight.js/lib/languages/' + lang));
});
for (let i = 0; i < nodes.length; i++) {
hljs.highlightBlock(nodes[i])
}
}
setEl = (el) => {
this.el = el;
};
render() {
const {children, className, element: Element, innerHTML} = this.props;
const props = { ref: this.setEl, className };
if (innerHTML) {
props.dangerouslySetInnerHTML = { __html: children };
if (Element) {
return <Element {...props} />;
}
return <div {...props} />;
}
if (Element) {
return <Element {...props}>{children}</Element>;
}
return <pre ref={this.setEl}><code className={className}>{children}</code></pre>;
}
}
Highlight.defaultProps = {
innerHTML: false,
className: '',
languages: [],
};
export default Highlight;