forked from appnexus/cmp
-
Notifications
You must be signed in to change notification settings - Fork 1
Expand file tree
/
Copy pathexample.jsx
More file actions
128 lines (111 loc) · 3.07 KB
/
Copy pathexample.jsx
File metadata and controls
128 lines (111 loc) · 3.07 KB
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
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
/* eslint-disable no-unused-vars, no-eval */
import { h, Component } from 'preact';
import style from './example.less';
import { Controlled as CodeMirror } from 'react-codemirror2';
import JSCode from 'codemirror/mode/javascript/javascript';
import {js_beautify as beautify} from 'js-beautify';
export default class Example extends Component {
log = (text) => {
this.setState({
logOutput: `[${new Date().toTimeString()}] - ${text}\n${this.state.logOutput || ''}`
});
};
execute = () => {
const myLogger = this.log;
const execute = this.formatCode(this.state.execute);
this.setState({execute});
eval(execute);
};
onChangeSetup = (cm, event, text) => {
this.setState({ setup: text });
};
onChangeExecute = (cm, event, text) => {
this.setState({ execute: text });
};
formatCode = (code) => {
if (code) {
return beautify(code.trim());
}
return code;
};
clearLog = () => {
this.setState({ logOutput: '' });
};
componentWillMount() {
// Always clear ALL event listeners before setting up the example
window.__tcfapi && window.__tcfapi('unregisterEventListener', 2, function () {}, {event: undefined});
}
componentDidMount() {
const myLogger = this.log;
const {setup, execute} = this.state;
this.setState({
setup: this.formatCode(setup),
execute: this.formatCode(execute)
});
if (setup) {
setTimeout(() => {
eval(setup);
}, 500)
}
}
render(props, state) {
const { execute, title, setup, logOutput, hasContent } = state;
return (
<div className={style.example}>
<div className={style.exampleName}>
{title}
</div>
<div className={style.exampleSections}>
{setup &&
<div className={style.exampleSection}>
<span className={style.exampleLabel}>
Setup
</span>
<CodeMirror
className={style.exampleContent}
value={setup}
onBeforeChange={this.onChangeSetup}
options={{
lineNumbers: true,
indentWithTabs: true,
smartIndent: true,
tabSize: 2,
mode: 'javascript',
readOnly: true
}} />
</div>}
{execute &&
<div className={style.exampleSection}>
<span className={style.exampleLabel}>
Code
<button className={style.execute} onClick={this.execute}>Execute</button>
</span>
<CodeMirror
className={style.exampleContent}
value={execute}
onBeforeChange={this.onChangeExecute}
options={{
lineNumbers: true,
indentWithTabs: true,
smartIndent: true,
tabSize: 2,
mode: 'javascript'
}} />
</div>}
{hasContent &&
<div className={style.exampleSection}>
<span className={style.exampleLabel}>My Content Area</span>
<div id='MyContentArea' className={style.contentArea} />
</div>}
<div className={style.exampleSection}>
<span className={style.exampleLabel}>
My Logger Output
<button className={style.execute} onClick={this.clearLog}>Clear</button>
</span>
<pre className={style.exampleContent}>{logOutput}</pre>
</div>
</div>
</div>
);
}
}