-
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathscript.js
More file actions
102 lines (84 loc) · 2.75 KB
/
script.js
File metadata and controls
102 lines (84 loc) · 2.75 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
// Initialize CodeMirror editor
let editor = CodeMirror.fromTextArea(document.getElementById("editor"), {
mode: "javascript",
theme: "dracula",
lineNumbers: true,
extraKeys: {
"Ctrl-Space": "autocomplete" // Trigger autocomplete manually
}
});
// Load the saved code (if any) from localStorage
const savedCode = localStorage.getItem("code");
if (savedCode) {
editor.setValue(savedCode);
}
// Change editor mode based on language select
document
.getElementById("languageSelect")
.addEventListener("change", function () {
editor.setOption("mode", this.value);
});
const runButton = document.getElementById("runButton");
const output = document.getElementById("output");
// Run code when 'Run' button is clicked
runButton.addEventListener("click", () => {
const code = editor.getValue();
const mode = document.getElementById("languageSelect").value;
// Save the code to localStorage
localStorage.setItem("code", code);
const outputContent = document.getElementById("outputContent");
// Clear previous output content
outputContent.textContent = "";
try {
if (mode === "javascript") {
let logData = "";
// Capture console.log
const originalLog = console.log;
console.log = (...args) => {
logData += args.join(" ") + "\n";
originalLog(...args);
};
const result = eval(code);
if (result !== undefined) logData += result + "\n";
console.log = originalLog;
outputContent.textContent =
logData.trim() || "✅ Code executed (no output)";
} else {
outputContent.textContent = "⚠️ Only JavaScript execution is supported.";
}
} catch (err) {
outputContent.textContent = "❌ Error: " + err.message;
}
// Enable resizer
enableResizer();
});
// Improved resizing logic for the output section
function enableResizer() {
const resizer = document.getElementById("resizer");
let isResizing = false;
const minHeight = 100;
const maxHeightRatio = 0.8;
const startResizing = (e) => {
isResizing = true;
document.body.style.cursor = "ns-resize";
document.addEventListener("mousemove", resize);
document.addEventListener("mouseup", stopResizing);
};
const resize = (e) => {
if (!isResizing) return;
const windowHeight = window.innerHeight;
const maxHeight = windowHeight * maxHeightRatio;
const newHeight = Math.min(
Math.max(windowHeight - e.clientY, minHeight),
maxHeight
);
output.style.height = `${newHeight}px`;
};
const stopResizing = () => {
isResizing = false;
document.body.style.cursor = "default";
document.removeEventListener("mousemove", resize);
document.removeEventListener("mouseup", stopResizing);
};
resizer.addEventListener("mousedown", startResizing);
}