Changed around line 1
+ document.addEventListener('DOMContentLoaded', () => {
+ const editor = document.getElementById('codeEditor');
+ const runButton = document.getElementById('runButton');
+ const clearButton = document.getElementById('clearButton');
+ const outputDisplay = document.getElementById('outputDisplay');
+ const languageSelect = document.getElementById('languageSelect');
+ const themeToggle = document.getElementById('themeToggle');
+
+ let isDark = false;
+
+ themeToggle.addEventListener('click', () => {
+ isDark = !isDark;
+ document.body.setAttribute('data-theme', isDark ? 'dark' : 'light');
+ });
+
+ const executeCode = () => {
+ const code = editor.value;
+ const language = languageSelect.value;
+
+ outputDisplay.innerHTML = '';
+
+ try {
+ if (language === 'js') {
+ // Create a safe evaluation environment
+ const consoleLogs = [];
+ const safeConsole = {
+ log: (...args) => consoleLogs.push(args.join(' ')),
+ error: (...args) => consoleLogs.push(`Error: ${args.join(' ')}`),
+ warn: (...args) => consoleLogs.push(`Warning: ${args.join(' ')}`)
+ };
+
+ const safeEval = new Function('console', `
+ try {
+ ${code}
+ } catch (error) {
+ console.error(error.message);
+ }
+ `);
+
+ safeEval(safeConsole);
+ outputDisplay.innerHTML = consoleLogs.join('\n');
+ } else if (language === 'html') {
+ const iframe = document.createElement('iframe');
+ iframe.style.width = '100%';
+ iframe.style.height = '100%';
+ iframe.style.border = 'none';
+ outputDisplay.appendChild(iframe);
+ iframe.contentDocument.open();
+ iframe.contentDocument.write(code);
+ iframe.contentDocument.close();
+ } else if (language === 'css') {
+ const style = document.createElement('style');
+ style.textContent = code;
+ outputDisplay.appendChild(style);
+ }
+ } catch (error) {
+ outputDisplay.innerHTML = `Error: ${error.message}`;
+ }
+ };
+
+ runButton.addEventListener('click', executeCode);
+ clearButton.addEventListener('click', () => {
+ editor.value = '';
+ outputDisplay.innerHTML = '';
+ });
+
+ // Enable Ctrl+Enter to run code
+ editor.addEventListener('keydown', (e) => {
+ if (e.ctrlKey && e.key === 'Enter') {
+ executeCode();
+ }
+ });
+ });