-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathapp.js
56 lines (47 loc) · 1.65 KB
/
app.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
// <!-- Update your existing CodeMirror initialization script -->
const editor = CodeMirror.fromTextArea(document.getElementById('code'), {
lineNumbers: true,
theme: 'dracula',
autoCloseTags: true,
lineWrapping: true,
autoCloseBrackets: true,
mode: 'javascript', // Add this line for JavaScript syntax highlighting
hint: CodeMirror.hint.javascript, // Enable autocomplete for JavaScript
extraKeys: { 'Ctrl-Space': 'autocomplete' }, // Optional: Enable Ctrl-Space for autocomplete
});
const outputElement = document.getElementById('output');
const consoleOutput = [];
const originalConsoleLog = console.log;
// Enable autocomplete
CodeMirror.registerHelper('hint', 'javascript', CodeMirror.hint.javascript);
editor.on('change', () => {
try {
// Clear previous output and console output
outputElement.innerHTML = '';
consoleOutput.length = 0; // Clear the console output array
const code = editor.getValue();
// Override console.log to capture output
console.log = function (...args) {
consoleOutput.push(args);
originalConsoleLog.apply(console, args);
};
// Execute the code using eval
eval(code);
// Display console.log output
consoleOutput.forEach(entry => {
entry.forEach(item => {
if (typeof item === 'object') {
outputElement.innerHTML += JSON.stringify(item) + ' ';
} else {
outputElement.innerHTML += item + ' ';
}
});
outputElement.innerHTML += '<br>';
});
// Restore original console.log
console.log = originalConsoleLog;
} catch (error) {
// Display error message in real-time
outputElement.innerHTML = error;
}
});