Showing
7 changed files
with
1668 additions
and
7 deletions
... | @@ -2,6 +2,8 @@ | ... | @@ -2,6 +2,8 @@ |
2 | --text-color:#fffde7; | 2 | --text-color:#fffde7; |
3 | --background-color:#ff94c2; | 3 | --background-color:#ff94c2; |
4 | --accent-color:#ba2d65; | 4 | --accent-color:#ba2d65; |
5 | + --output-color:#ff7043; | ||
6 | + --output-accent-color:#c63f17; | ||
5 | } | 7 | } |
6 | 8 | ||
7 | body{ | 9 | body{ |
... | @@ -87,25 +89,45 @@ a{ | ... | @@ -87,25 +89,45 @@ a{ |
87 | } | 89 | } |
88 | } | 90 | } |
89 | button{ | 91 | button{ |
90 | - background-color:#60ad5e; | 92 | + background-color:var(--output-color); |
91 | border:none; | 93 | border:none; |
92 | color:var(--text-color); | 94 | color:var(--text-color); |
93 | font-size:50px; | 95 | font-size:50px; |
94 | - padding:12px 24px 24px 24px; | 96 | + padding: 24px; |
95 | border-radius: 4px; | 97 | border-radius: 4px; |
96 | } | 98 | } |
97 | button:hover{ | 99 | button:hover{ |
98 | - background-color:#005005; | 100 | + background-color:var(--output-accent-color); |
99 | border-radius: 4px; | 101 | border-radius: 4px; |
100 | } | 102 | } |
101 | .controls{ | 103 | .controls{ |
102 | - padding:12px 24px; | ||
103 | height:70px; | 104 | height:70px; |
104 | font-size:100px; | 105 | font-size:100px; |
105 | display:flex; | 106 | display:flex; |
106 | justify-content:space-around; | 107 | justify-content:space-around; |
107 | border-radius:4px; | 108 | border-radius:4px; |
109 | + margin: 23px; | ||
110 | +} | ||
111 | +#output{ | ||
112 | + width:50%; | ||
113 | + margin-left:20px; | ||
114 | + display:flex; | ||
115 | + border: 3px solid var(--accent-color); | ||
116 | + height:700px; | ||
108 | } | 117 | } |
109 | #recordButton{ | 118 | #recordButton{ |
119 | + line-height: 22px; | ||
120 | +} | ||
121 | +#transcribeButton{ | ||
122 | + line-height: 22px; | ||
123 | +} | ||
124 | +.output_bar{ | ||
125 | + display:flex; | ||
126 | + justify-content:space-around; | ||
127 | + color:black; | ||
128 | + border: 3px solid var(--accent-color); | ||
129 | + margin: 20px; | ||
130 | +} | ||
131 | +.ttp{ | ||
110 | 132 | ||
111 | } | 133 | } |
... | \ No newline at end of file | ... | \ No newline at end of file | ... | ... |
... | @@ -10,6 +10,65 @@ | ... | @@ -10,6 +10,65 @@ |
10 | <script src="menu.js" defer></script> | 10 | <script src="menu.js" defer></script> |
11 | <link rel="preconnect" href="https://fonts.gstatic.com"> | 11 | <link rel="preconnect" href="https://fonts.gstatic.com"> |
12 | <link href="https://fonts.googleapis.com/css2?family=Source+Sans+Pro:wght@300&display=swap" rel="stylesheet"> | 12 | <link href="https://fonts.googleapis.com/css2?family=Source+Sans+Pro:wght@300&display=swap" rel="stylesheet"> |
13 | + <script src="https://cdn.rawgit.com/mattdiamond/Recorderjs/08e7abd9/dist/recorder.js"></script> | ||
14 | + <script defer src="client.js"></script> | ||
15 | + <meta name="description" content="Free and open-source online code editor that allows you to write and execute code from a rich set of languages."> | ||
16 | + <meta name="keywords" content="online editor, online code editor, online ide, online compiler, online interpreter, run code online, learn programming online, | ||
17 | + online debugger, programming in browser, online code runner, online code execution, debug online, debug C code online, debug C++ code online, | ||
18 | + programming online, snippet, snippets, code snippet, code snippets, pastebin, execute code, programming in browser, run c online, run C++ online, | ||
19 | + run java online, run python online, run ruby online, run c# online, run rust online, run pascal online, run basic online"> | ||
20 | + | ||
21 | + | ||
22 | + <meta property="og:title" content="Judge0 IDE - Free and open-source online code editor"> | ||
23 | + <meta property="og:description" content="Free and open-source online code editor that allows you to write and execute code from a rich set of languages."> | ||
24 | + <meta property="og:image" content="https://raw.githubusercontent.com/judge0/ide/master/.github/wallpaper.png"> | ||
25 | + | ||
26 | + <script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.4.1/jquery.min.js" integrity="sha256-CSXorXvZcTkaix6Yvo6HppcZGetbYMGWSFlBw8HfCJo=" crossorigin="anonymous"></script> | ||
27 | + | ||
28 | + <script src="https://cdnjs.cloudflare.com/ajax/libs/golden-layout/1.5.9/goldenlayout.min.js" integrity="sha256-NhJAZDfGgv4PiB+GVlSrPdh3uc75XXYSM4su8hgTchI=" crossorigin="anonymous"></script> | ||
29 | + | ||
30 | + | ||
31 | + <script> | ||
32 | + var require = { | ||
33 | + paths: { | ||
34 | + "vs": "https://unpkg.com/monaco-editor/min/vs", | ||
35 | + "monaco-vim": "https://unpkg.com/monaco-vim/dist/monaco-vim", | ||
36 | + "monaco-emacs": "https://unpkg.com/monaco-emacs/dist/monaco-emacs" | ||
37 | + } | ||
38 | + }; | ||
39 | + </script> | ||
40 | + <script src="https://unpkg.com/monaco-editor/min/vs/loader.js"></script> | ||
41 | + <script src="https://unpkg.com/monaco-editor@0.23.0/min/vs/editor/editor.main.nls.js"></script> | ||
42 | + <script src="https://unpkg.com/monaco-editor@0.23.0/min/vs/editor/editor.main.js"></script> | ||
43 | + | ||
44 | + <script src="https://cdnjs.cloudflare.com/ajax/libs/semantic-ui/2.4.1/semantic.min.js" integrity="sha256-t8GepnyPmw9t+foMh3mKNvcorqNHamSKtKRxxpUEgFI=" crossorigin="anonymous"></script> | ||
45 | + | ||
46 | + <link href="https://fonts.googleapis.com/css?family=Exo+2" rel="stylesheet"> | ||
47 | + | ||
48 | + <script type="text/javascript" src="third_party/download.js"></script> | ||
49 | + | ||
50 | + <script type="text/javascript" src="js/ide.js" defer></script> | ||
51 | + | ||
52 | + <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/semantic-ui/2.4.1/semantic.min.css" integrity="sha256-9mbkOfVho3ZPXfM7W8sV2SndrGDuh7wuyLjtsWeTI1Q=" crossorigin="anonymous" /> | ||
53 | + <script src="https://cdnjs.cloudflare.com/ajax/libs/semantic-ui/2.4.1/semantic.min.js" integrity="sha256-t8GepnyPmw9t+foMh3mKNvcorqNHamSKtKRxxpUEgFI=" crossorigin="anonymous"></script> | ||
54 | + <script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.4.1/jquery.min.js" integrity="sha256-CSXorXvZcTkaix6Yvo6HppcZGetbYMGWSFlBw8HfCJo=" crossorigin="anonymous"></script> | ||
55 | + | ||
56 | + <script src="https://cdnjs.cloudflare.com/ajax/libs/golden-layout/1.5.9/goldenlayout.min.js" integrity="sha256-NhJAZDfGgv4PiB+GVlSrPdh3uc75XXYSM4su8hgTchI=" crossorigin="anonymous"></script> | ||
57 | + <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/golden-layout/1.5.9/css/goldenlayout-base.css" integrity="sha256-oIDR18yKFZtfjCJfDsJYpTBv1S9QmxYopeqw2dO96xM=" crossorigin="anonymous" /> | ||
58 | + <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/golden-layout/1.5.9/css/goldenlayout-dark-theme.css" integrity="sha256-ygw8PvSDJJUGLf6Q9KIQsYR3mOmiQNlDaxMLDOx9xL0=" crossorigin="anonymous" /> | ||
59 | + <script> | ||
60 | + var require = { | ||
61 | + paths: { | ||
62 | + "vs": "https://unpkg.com/monaco-editor/min/vs", | ||
63 | + "monaco-vim": "https://unpkg.com/monaco-vim/dist/monaco-vim", | ||
64 | + "monaco-emacs": "https://unpkg.com/monaco-emacs/dist/monaco-emacs" | ||
65 | + } | ||
66 | + }; | ||
67 | + </script> | ||
68 | + <script src="https://unpkg.com/monaco-editor/min/vs/loader.js"></script> | ||
69 | + <script src="https://unpkg.com/monaco-editor@0.23.0/min/vs/editor/editor.main.nls.js"></script> | ||
70 | + <script src="https://unpkg.com/monaco-editor@0.23.0/min/vs/editor/editor.main.js"></script> | ||
71 | + | ||
13 | </head> | 72 | </head> |
14 | <body> | 73 | <body> |
15 | <nav class="menu"> | 74 | <nav class="menu"> |
... | @@ -32,8 +91,17 @@ | ... | @@ -32,8 +91,17 @@ |
32 | <button id="recordButton">Speech</button> | 91 | <button id="recordButton">Speech</button> |
33 | <button id="transcribeButton" disabled>To text</button> | 92 | <button id="transcribeButton" disabled>To text</button> |
34 | </div> | 93 | </div> |
94 | + <div class="output_bar"> | ||
95 | + <h3>Transcription Raw Data</h3> | ||
96 | + <h3 style= "width:174.462px; text-align:center">TTP</h3> | ||
97 | + </div> | ||
35 | <div id="output"></div> | 98 | <div id="output"></div> |
36 | - <script src="https://cdn.rawgit.com/mattdiamond/Recorderjs/08e7abd9/dist/recorder.js"></script> | 99 | + <div class="ttp"> |
37 | - <script src="\client.js"></script> | 100 | + <div class="item no-left-padding borderless"> |
101 | + <button id="run-btn" class="ui primary labeled icon button"><i class="play icon"></i>Run (F9)</button> | ||
102 | + </div> | ||
103 | + <div id="site-content"></div> | ||
104 | + </div> | ||
105 | + | ||
38 | </body> | 106 | </body> |
39 | </html> | 107 | </html> |
... | \ No newline at end of file | ... | \ No newline at end of file | ... | ... |
Voicoding_web/client.js
0 → 100644
1 | +let rec = null; | ||
2 | +let audioStream = null; | ||
3 | +const recordButton = document.getElementById("recordButton"); | ||
4 | +const transcribeButton = document.getElementById("transcribeButton"); | ||
5 | +recordButton.addEventListener("click", startRecording); | ||
6 | +transcribeButton.addEventListener("click", transcribeText); | ||
7 | +let cnt = 0; | ||
8 | +function startRecording() { | ||
9 | + let constraints = { audio: true, video:false } | ||
10 | + recordButton.disabled = true; | ||
11 | + transcribeButton.disabled = false; | ||
12 | + navigator.mediaDevices.getUserMedia(constraints).then(function(stream) { | ||
13 | + const audioContext = new window.AudioContext(); | ||
14 | + audioStream = stream; | ||
15 | + const input = audioContext.createMediaStreamSource(stream); | ||
16 | + rec = new Recorder(input, { numChannels:1 }) | ||
17 | + rec.record() | ||
18 | + }).catch(function(err) { | ||
19 | + recordButton.disabled = false; | ||
20 | + transcribeButton.disabled = true; | ||
21 | + }); | ||
22 | +} | ||
23 | +function transcribeText() { | ||
24 | + transcribeButton.disabled = true; | ||
25 | + recordButton.disabled = false; | ||
26 | + rec.stop(); | ||
27 | + audioStream.getAudioTracks()[0].stop(); | ||
28 | + rec.exportWAV(uploadSoundData); | ||
29 | +} | ||
30 | +function uploadSoundData(blob) { | ||
31 | + let filename = new Date().toISOString(); | ||
32 | + let xhr = new XMLHttpRequest(); | ||
33 | + let formData = new FormData(); | ||
34 | + xhr.onload = function(e) { | ||
35 | + if(this.readyState === 4) { | ||
36 | + document.getElementById("output").innerHTML += `${cnt++}: ${JSON.parse(e.target.responseText)}<br>`; | ||
37 | + } | ||
38 | + }; | ||
39 | + formData.append("audio_data", blob, filename); | ||
40 | + xhr.open("POST", "/upload_sound", true); | ||
41 | + xhr.send(formData); | ||
42 | +} | ||
... | \ No newline at end of file | ... | \ No newline at end of file |
Voicoding_web/css/ide.css
0 → 100644
1 | + | ||
2 | +body { | ||
3 | + background: url(/images/judge0_background.png) no-repeat center center fixed; | ||
4 | + -webkit-background-size: cover; | ||
5 | + -moz-background-size: cover; | ||
6 | + -o-background-size: cover; | ||
7 | + background-size: cover; | ||
8 | +} | ||
9 | + | ||
10 | +.ui[class*="left action"].input>.dropdown { | ||
11 | + border-radius: 0 .28571429rem .28571429rem 0; | ||
12 | +} | ||
13 | + | ||
14 | +.ui.selection.dropdown { | ||
15 | + width: 205px; | ||
16 | +} | ||
17 | + | ||
18 | +.lm_header .lm_tab { | ||
19 | + padding-bottom: 3px; | ||
20 | + height: 16px; | ||
21 | + font-family: "Droid Sans Mono", monospace, monospace, "Droid Sans Fallback"; | ||
22 | + font-size: 14px; | ||
23 | +} | ||
24 | + | ||
25 | +.lm_header .lm_tab.lm_active { | ||
26 | + box-shadow: none; | ||
27 | + padding-bottom: 3px; | ||
28 | +} | ||
29 | + | ||
30 | +#site-navigation { | ||
31 | + border-radius: 0; | ||
32 | + margin: 0; | ||
33 | + background: #1e1e1e; | ||
34 | + border-bottom: 1px solid rgba(255, 255, 255, 0.08); | ||
35 | + height: 45px; | ||
36 | +} | ||
37 | + | ||
38 | +#navigation-message { | ||
39 | + font-size: 1.2em; | ||
40 | + white-space: nowrap; | ||
41 | + overflow: hidden; | ||
42 | +} | ||
43 | + | ||
44 | +@keyframes slide { | ||
45 | + 0% { transform: translateX(570px); } | ||
46 | + 100% { transform: translateX(-100%); } | ||
47 | +} | ||
48 | +@-webkit-keyframes slide { | ||
49 | + 0% { transform: translateX(570px); } | ||
50 | + 100% { transform: translateX(-100%); } | ||
51 | +} | ||
52 | + | ||
53 | +.navigation-message-text { | ||
54 | + white-space: nowrap; | ||
55 | + -moz-animation: slide 60s linear infinite; | ||
56 | + -webkit-animation: slide 60s linear infinite; | ||
57 | + animation: slide 60s linear infinite; | ||
58 | +} | ||
59 | + | ||
60 | +.navigation-message-text:hover { | ||
61 | + -moz-animation-play-state: paused; | ||
62 | + -webkit-animation-play-state: paused; | ||
63 | + animation-play-state: paused; | ||
64 | +} | ||
65 | + | ||
66 | +#navigation-message a { | ||
67 | + color: #41a5f1; | ||
68 | + font-weight: bold; | ||
69 | +} | ||
70 | + | ||
71 | +#site-icon { | ||
72 | + width: 30px; | ||
73 | + height: 30px; | ||
74 | + vertical-align: middle; | ||
75 | +} | ||
76 | + | ||
77 | +#site-header { | ||
78 | + padding-left: 0; | ||
79 | + padding-top: 0; | ||
80 | + padding-bottom: 0; | ||
81 | +} | ||
82 | + | ||
83 | +#site-header h2 { | ||
84 | + display: inline; | ||
85 | + vertical-align: middle; | ||
86 | + font-family: 'Exo 2', sans-serif; | ||
87 | +} | ||
88 | + | ||
89 | +#site-content { | ||
90 | + height: calc(100% - 45px - 19px); | ||
91 | +} | ||
92 | + | ||
93 | +#site-modal .header { | ||
94 | + color: #db2828; | ||
95 | +} | ||
96 | + | ||
97 | +#site-footer, #status-line, #donate-line { | ||
98 | + background-color: #0E6EB8; | ||
99 | + bottom: 0; | ||
100 | + font-family: "Droid Sans Mono", monospace, monospace, "Droid Sans Fallback"; | ||
101 | + font-size: 13px; | ||
102 | + height: 19px; | ||
103 | + padding-left: 16px; | ||
104 | + padding-right: 16px; | ||
105 | + position: fixed; | ||
106 | +} | ||
107 | + | ||
108 | +#site-footer { | ||
109 | + color: #41a5f1; | ||
110 | + left: 0; | ||
111 | + text-align: center; | ||
112 | + width: 100%; | ||
113 | +} | ||
114 | + | ||
115 | +#site-footer a { | ||
116 | + color: #41a5f1; | ||
117 | + font-weight: bold; | ||
118 | +} | ||
119 | + | ||
120 | +#site-footer a:hover { | ||
121 | + color: #a0d2f8; | ||
122 | +} | ||
123 | + | ||
124 | +#donate-line { | ||
125 | + float: left; | ||
126 | + left: 0; | ||
127 | + text-align: left; | ||
128 | + width: fit-content; | ||
129 | +} | ||
130 | + | ||
131 | +#status-line { | ||
132 | + color: #fff; | ||
133 | + float: right; | ||
134 | + right: 0; | ||
135 | + text-align: right; | ||
136 | + width: fit-content; | ||
137 | +} | ||
138 | + | ||
139 | +#editor-status-line { | ||
140 | + background: transparent; | ||
141 | + color: #fff; | ||
142 | + font-family: monospace; | ||
143 | + height: 19px; | ||
144 | + padding: 0px 16px; | ||
145 | + width: inherit; | ||
146 | +} | ||
147 | + | ||
148 | +#editor-status-line input[type=text] { | ||
149 | + background: transparent; | ||
150 | + border: none; | ||
151 | + color: #fff; | ||
152 | + font-family: monospace; | ||
153 | + outline: none; | ||
154 | +} | ||
155 | + | ||
156 | +#editor-status-line input[type=text]::selection { | ||
157 | + background-color: #cce2ff; | ||
158 | + color: #fff; | ||
159 | +} | ||
160 | + | ||
161 | +.blink { | ||
162 | + animation: blinker 1s linear infinite; | ||
163 | +} | ||
164 | + | ||
165 | +@keyframes blinker { | ||
166 | + 50% { | ||
167 | + background: #FFD700; | ||
168 | + } | ||
169 | +} | ||
170 | + | ||
171 | +.dot { | ||
172 | + background: #0E6EB8; | ||
173 | + position: absolute; | ||
174 | + border-radius: 50px; | ||
175 | + width: 5px; | ||
176 | + height: 5px; | ||
177 | + right: 7.5px; | ||
178 | + top: 7.5px; | ||
179 | +} | ||
180 | + | ||
181 | +.no-left-padding { | ||
182 | + padding-left: 0 !important; | ||
183 | +} | ||
184 | + | ||
185 | +input[type="text"] { | ||
186 | + width: 205px !important; | ||
187 | +} | ||
... | \ No newline at end of file | ... | \ No newline at end of file |
Voicoding_web/js/ide.js
0 → 100644
1 | +var defaultUrl = localStorageGetItem("api-url") || "https://ce.judge0.com"; | ||
2 | +var apiUrl = defaultUrl; | ||
3 | +var wait = localStorageGetItem("wait") || false; | ||
4 | +var check_timeout = 300; | ||
5 | + | ||
6 | +var blinkStatusLine = ((localStorageGetItem("blink") || "true") === "true"); | ||
7 | +var editorMode = localStorageGetItem("editorMode") || "normal"; | ||
8 | +var redirectStderrToStdout = ((localStorageGetItem("redirectStderrToStdout") || "false") === "true"); | ||
9 | +var editorModeObject = null; | ||
10 | + | ||
11 | +var fontSize = 14; | ||
12 | + | ||
13 | +var MonacoVim; | ||
14 | +var MonacoEmacs; | ||
15 | + | ||
16 | +var layout; | ||
17 | + | ||
18 | +var sourceEditor; | ||
19 | +var stdinEditor; | ||
20 | +var stdoutEditor; | ||
21 | +var stderrEditor; | ||
22 | +var compileOutputEditor; | ||
23 | +var sandboxMessageEditor; | ||
24 | + | ||
25 | +var isEditorDirty = false; | ||
26 | +var currentLanguageId; | ||
27 | + | ||
28 | +var $selectLanguage; | ||
29 | +var $compilerOptions; | ||
30 | +var $commandLineArguments; | ||
31 | +var $insertTemplateBtn; | ||
32 | +var $runBtn; | ||
33 | +var $navigationMessage; | ||
34 | +var $updates; | ||
35 | +var $statusLine; | ||
36 | + | ||
37 | +var timeStart; | ||
38 | +var timeEnd; | ||
39 | + | ||
40 | +var messagesData; | ||
41 | + | ||
42 | +var layoutConfig = { | ||
43 | + settings: { | ||
44 | + showPopoutIcon: false, | ||
45 | + reorderEnabled: true | ||
46 | + }, | ||
47 | + dimensions: { | ||
48 | + borderWidth: 3, | ||
49 | + headerHeight: 22 | ||
50 | + }, | ||
51 | + content: [{ | ||
52 | + type: "row", | ||
53 | + content: [{ | ||
54 | + type: "component", | ||
55 | + componentName: "source", | ||
56 | + title: "SOURCE", | ||
57 | + isClosable: false, | ||
58 | + componentState: { | ||
59 | + readOnly: false | ||
60 | + }, | ||
61 | + width: 60 | ||
62 | + }, { | ||
63 | + type: "column", | ||
64 | + content: [{ | ||
65 | + type: "stack", | ||
66 | + content: [{ | ||
67 | + type: "component", | ||
68 | + componentName: "stdin", | ||
69 | + title: "STDIN", | ||
70 | + isClosable: false, | ||
71 | + componentState: { | ||
72 | + readOnly: false | ||
73 | + } | ||
74 | + }] | ||
75 | + }, { | ||
76 | + type: "stack", | ||
77 | + content: [{ | ||
78 | + type: "component", | ||
79 | + componentName: "stdout", | ||
80 | + title: "STDOUT", | ||
81 | + isClosable: false, | ||
82 | + componentState: { | ||
83 | + readOnly: true | ||
84 | + } | ||
85 | + }, { | ||
86 | + type: "component", | ||
87 | + componentName: "stderr", | ||
88 | + title: "STDERR", | ||
89 | + isClosable: false, | ||
90 | + componentState: { | ||
91 | + readOnly: true | ||
92 | + } | ||
93 | + }, { | ||
94 | + type: "component", | ||
95 | + componentName: "compile output", | ||
96 | + title: "COMPILE OUTPUT", | ||
97 | + isClosable: false, | ||
98 | + componentState: { | ||
99 | + readOnly: true | ||
100 | + } | ||
101 | + }, { | ||
102 | + type: "component", | ||
103 | + componentName: "sandbox message", | ||
104 | + title: "SANDBOX MESSAGE", | ||
105 | + isClosable: false, | ||
106 | + componentState: { | ||
107 | + readOnly: true | ||
108 | + } | ||
109 | + }] | ||
110 | + }] | ||
111 | + }] | ||
112 | + }] | ||
113 | +}; | ||
114 | + | ||
115 | +function encode(str) { | ||
116 | + return btoa(unescape(encodeURIComponent(str || ""))); | ||
117 | +} | ||
118 | + | ||
119 | +function decode(bytes) { | ||
120 | + var escaped = escape(atob(bytes || "")); | ||
121 | + try { | ||
122 | + return decodeURIComponent(escaped); | ||
123 | + } catch { | ||
124 | + return unescape(escaped); | ||
125 | + } | ||
126 | +} | ||
127 | + | ||
128 | +function localStorageSetItem(key, value) { | ||
129 | + try { | ||
130 | + localStorage.setItem(key, value); | ||
131 | + } catch (ignorable) { | ||
132 | + } | ||
133 | +} | ||
134 | + | ||
135 | +function localStorageGetItem(key) { | ||
136 | + try { | ||
137 | + return localStorage.getItem(key); | ||
138 | + } catch (ignorable) { | ||
139 | + return null; | ||
140 | + } | ||
141 | +} | ||
142 | + | ||
143 | +function showMessages() { | ||
144 | + var width = $updates.offset().left - parseFloat($updates.css("padding-left")) - | ||
145 | + $navigationMessage.parent().offset().left - parseFloat($navigationMessage.parent().css("padding-left")) - 5; | ||
146 | + | ||
147 | + if (width < 200 || messagesData === undefined) { | ||
148 | + return; | ||
149 | + } | ||
150 | + | ||
151 | + var messages = messagesData["messages"]; | ||
152 | + | ||
153 | + $navigationMessage.css("animation-duration", messagesData["duration"]); | ||
154 | + $navigationMessage.parent().width(width - 5); | ||
155 | + | ||
156 | + var combinedMessage = ""; | ||
157 | + for (var i = 0; i < messages.length; ++i) { | ||
158 | + combinedMessage += `${messages[i]}`; | ||
159 | + if (i != messages.length - 1) { | ||
160 | + combinedMessage += " ".repeat(Math.min(200, messages[i].length)); | ||
161 | + } | ||
162 | + } | ||
163 | + | ||
164 | + $navigationMessage.html(combinedMessage); | ||
165 | +} | ||
166 | + | ||
167 | +function loadMessages() { | ||
168 | + $.ajax({ | ||
169 | + url: `https://minio.judge0.com/public/ide/messages.json?${Date.now()}`, | ||
170 | + type: "GET", | ||
171 | + headers: { | ||
172 | + "Accept": "application/json" | ||
173 | + }, | ||
174 | + success: function (data, textStatus, jqXHR) { | ||
175 | + messagesData = data; | ||
176 | + showMessages(); | ||
177 | + } | ||
178 | + }); | ||
179 | +} | ||
180 | + | ||
181 | +function showError(title, content) { | ||
182 | + $("#site-modal #title").html(title); | ||
183 | + $("#site-modal .content").html(content); | ||
184 | + $("#site-modal").modal("show"); | ||
185 | +} | ||
186 | + | ||
187 | +function handleError(jqXHR, textStatus, errorThrown) { | ||
188 | + showError(`${jqXHR.statusText} (${jqXHR.status})`, `<pre>${JSON.stringify(jqXHR, null, 4)}</pre>`); | ||
189 | +} | ||
190 | + | ||
191 | +function handleRunError(jqXHR, textStatus, errorThrown) { | ||
192 | + handleError(jqXHR, textStatus, errorThrown); | ||
193 | + $runBtn.removeClass("loading"); | ||
194 | +} | ||
195 | + | ||
196 | +function handleResult(data) { | ||
197 | + timeEnd = performance.now(); | ||
198 | + console.log("It took " + (timeEnd - timeStart) + " ms to get submission result."); | ||
199 | + | ||
200 | + var status = data.status; | ||
201 | + var stdout = decode(data.stdout); | ||
202 | + var stderr = decode(data.stderr); | ||
203 | + var compile_output = decode(data.compile_output); | ||
204 | + var sandbox_message = decode(data.message); | ||
205 | + var time = (data.time === null ? "-" : data.time + "s"); | ||
206 | + var memory = (data.memory === null ? "-" : data.memory + "KB"); | ||
207 | + | ||
208 | + $statusLine.html(`${status.description}, ${time}, ${memory}`); | ||
209 | + | ||
210 | + if (blinkStatusLine) { | ||
211 | + $statusLine.addClass("blink"); | ||
212 | + setTimeout(function() { | ||
213 | + blinkStatusLine = false; | ||
214 | + localStorageSetItem("blink", "false"); | ||
215 | + $statusLine.removeClass("blink"); | ||
216 | + }, 3000); | ||
217 | + } | ||
218 | + | ||
219 | + stdoutEditor.setValue(stdout); | ||
220 | + stderrEditor.setValue(stderr); | ||
221 | + compileOutputEditor.setValue(compile_output); | ||
222 | + sandboxMessageEditor.setValue(sandbox_message); | ||
223 | + | ||
224 | + if (stdout !== "") { | ||
225 | + var dot = document.getElementById("stdout-dot"); | ||
226 | + if (!dot.parentElement.classList.contains("lm_active")) { | ||
227 | + dot.hidden = false; | ||
228 | + } | ||
229 | + } | ||
230 | + if (stderr !== "") { | ||
231 | + var dot = document.getElementById("stderr-dot"); | ||
232 | + if (!dot.parentElement.classList.contains("lm_active")) { | ||
233 | + dot.hidden = false; | ||
234 | + } | ||
235 | + } | ||
236 | + if (compile_output !== "") { | ||
237 | + var dot = document.getElementById("compile-output-dot"); | ||
238 | + if (!dot.parentElement.classList.contains("lm_active")) { | ||
239 | + dot.hidden = false; | ||
240 | + } | ||
241 | + } | ||
242 | + if (sandbox_message !== "") { | ||
243 | + var dot = document.getElementById("sandbox-message-dot"); | ||
244 | + if (!dot.parentElement.classList.contains("lm_active")) { | ||
245 | + dot.hidden = false; | ||
246 | + } | ||
247 | + } | ||
248 | + | ||
249 | + $runBtn.removeClass("loading"); | ||
250 | +} | ||
251 | + | ||
252 | +function getIdFromURI() { | ||
253 | + var uri = location.search.substr(1).trim(); | ||
254 | + return uri.split("&")[0]; | ||
255 | +} | ||
256 | + | ||
257 | +function downloadSource() { | ||
258 | + var value = parseInt($selectLanguage.val()); | ||
259 | + download(sourceEditor.getValue(), fileNames[value], "text/plain"); | ||
260 | +} | ||
261 | + | ||
262 | +function loadSavedSource() { | ||
263 | + snippet_id = getIdFromURI(); | ||
264 | + | ||
265 | + if (snippet_id.length == 36) { | ||
266 | + $.ajax({ | ||
267 | + url: apiUrl + "/submissions/" + snippet_id + "?fields=source_code,language_id,stdin,stdout,stderr,compile_output,message,time,memory,status,compiler_options,command_line_arguments&base64_encoded=true", | ||
268 | + type: "GET", | ||
269 | + success: function(data, textStatus, jqXHR) { | ||
270 | + sourceEditor.setValue(decode(data["source_code"])); | ||
271 | + $selectLanguage.dropdown("set selected", data["language_id"]); | ||
272 | + $compilerOptions.val(data["compiler_options"]); | ||
273 | + $commandLineArguments.val(data["command_line_arguments"]); | ||
274 | + stdinEditor.setValue(decode(data["stdin"])); | ||
275 | + stdoutEditor.setValue(decode(data["stdout"])); | ||
276 | + stderrEditor.setValue(decode(data["stderr"])); | ||
277 | + compileOutputEditor.setValue(decode(data["compile_output"])); | ||
278 | + sandboxMessageEditor.setValue(decode(data["message"])); | ||
279 | + var time = (data.time === null ? "-" : data.time + "s"); | ||
280 | + var memory = (data.memory === null ? "-" : data.memory + "KB"); | ||
281 | + $statusLine.html(`${data.status.description}, ${time}, ${memory}`); | ||
282 | + changeEditorLanguage(); | ||
283 | + }, | ||
284 | + error: handleRunError | ||
285 | + }); | ||
286 | + } else { | ||
287 | + loadRandomLanguage(); | ||
288 | + } | ||
289 | +} | ||
290 | + | ||
291 | +function run() { | ||
292 | + if (sourceEditor.getValue().trim() === "") { | ||
293 | + showError("Error", "Source code can't be empty!"); | ||
294 | + return; | ||
295 | + } else { | ||
296 | + $runBtn.addClass("loading"); | ||
297 | + } | ||
298 | + | ||
299 | + document.getElementById("stdout-dot").hidden = true; | ||
300 | + document.getElementById("stderr-dot").hidden = true; | ||
301 | + document.getElementById("compile-output-dot").hidden = true; | ||
302 | + document.getElementById("sandbox-message-dot").hidden = true; | ||
303 | + | ||
304 | + stdoutEditor.setValue(""); | ||
305 | + stderrEditor.setValue(""); | ||
306 | + compileOutputEditor.setValue(""); | ||
307 | + sandboxMessageEditor.setValue(""); | ||
308 | + | ||
309 | + var sourceValue = encode(sourceEditor.getValue()); | ||
310 | + var stdinValue = encode(stdinEditor.getValue()); | ||
311 | + var languageId = resolveLanguageId($selectLanguage.val()); | ||
312 | + var compilerOptions = $compilerOptions.val(); | ||
313 | + var commandLineArguments = $commandLineArguments.val(); | ||
314 | + | ||
315 | + if (parseInt(languageId) === 44) { | ||
316 | + sourceValue = sourceEditor.getValue(); | ||
317 | + } | ||
318 | + | ||
319 | + var data = { | ||
320 | + source_code: sourceValue, | ||
321 | + language_id: languageId, | ||
322 | + stdin: stdinValue, | ||
323 | + compiler_options: compilerOptions, | ||
324 | + command_line_arguments: commandLineArguments, | ||
325 | + redirect_stderr_to_stdout: redirectStderrToStdout | ||
326 | + }; | ||
327 | + | ||
328 | + var sendRequest = function(data) { | ||
329 | + timeStart = performance.now(); | ||
330 | + $.ajax({ | ||
331 | + url: apiUrl + `/submissions?base64_encoded=true&wait=${wait}`, | ||
332 | + type: "POST", | ||
333 | + async: true, | ||
334 | + contentType: "application/json", | ||
335 | + data: JSON.stringify(data), | ||
336 | + xhrFields: { | ||
337 | + withCredentials: apiUrl.indexOf("/secure") != -1 ? true : false | ||
338 | + }, | ||
339 | + success: function (data, textStatus, jqXHR) { | ||
340 | + console.log(`Your submission token is: ${data.token}`); | ||
341 | + if (wait == true) { | ||
342 | + handleResult(data); | ||
343 | + } else { | ||
344 | + setTimeout(fetchSubmission.bind(null, data.token), check_timeout); | ||
345 | + } | ||
346 | + }, | ||
347 | + error: handleRunError | ||
348 | + }); | ||
349 | + } | ||
350 | + | ||
351 | + var fetchAdditionalFiles = false; | ||
352 | + if (parseInt(languageId) === 82) { | ||
353 | + if (sqliteAdditionalFiles === "") { | ||
354 | + fetchAdditionalFiles = true; | ||
355 | + $.ajax({ | ||
356 | + url: `https://minio.judge0.com/public/ide/sqliteAdditionalFiles.base64.txt?${Date.now()}`, | ||
357 | + type: "GET", | ||
358 | + async: true, | ||
359 | + contentType: "text/plain", | ||
360 | + success: function (responseData, textStatus, jqXHR) { | ||
361 | + sqliteAdditionalFiles = responseData; | ||
362 | + data["additional_files"] = sqliteAdditionalFiles; | ||
363 | + sendRequest(data); | ||
364 | + }, | ||
365 | + error: handleRunError | ||
366 | + }); | ||
367 | + } | ||
368 | + else { | ||
369 | + data["additional_files"] = sqliteAdditionalFiles; | ||
370 | + } | ||
371 | + } | ||
372 | + | ||
373 | + if (!fetchAdditionalFiles) { | ||
374 | + sendRequest(data); | ||
375 | + } | ||
376 | +} | ||
377 | + | ||
378 | +function fetchSubmission(submission_token) { | ||
379 | + $.ajax({ | ||
380 | + url: apiUrl + "/submissions/" + submission_token + "?base64_encoded=true", | ||
381 | + type: "GET", | ||
382 | + async: true, | ||
383 | + success: function (data, textStatus, jqXHR) { | ||
384 | + if (data.status.id <= 2) { // In Queue or Processing | ||
385 | + setTimeout(fetchSubmission.bind(null, submission_token), check_timeout); | ||
386 | + return; | ||
387 | + } | ||
388 | + handleResult(data); | ||
389 | + }, | ||
390 | + error: handleRunError | ||
391 | + }); | ||
392 | +} | ||
393 | + | ||
394 | +function changeEditorLanguage() { | ||
395 | + monaco.editor.setModelLanguage(sourceEditor.getModel(), $selectLanguage.find(":selected").attr("mode")); | ||
396 | + currentLanguageId = parseInt($selectLanguage.val()); | ||
397 | + $(".lm_title")[0].innerText = fileNames[currentLanguageId]; | ||
398 | + apiUrl = resolveApiUrl($selectLanguage.val()); | ||
399 | +} | ||
400 | + | ||
401 | +function insertTemplate() { | ||
402 | + currentLanguageId = parseInt($selectLanguage.val()); | ||
403 | + sourceEditor.setValue(sources[currentLanguageId]); | ||
404 | + changeEditorLanguage(); | ||
405 | +} | ||
406 | + | ||
407 | +function loadRandomLanguage() { | ||
408 | + // $selectLanguage.dropdown("set selected", values[Math.floor(Math.random() * $selectLanguage[0].length)]); | ||
409 | + $selectLanguage.dropdown("set selected", 71); | ||
410 | + apiUrl = resolveApiUrl($selectLanguage.val()); | ||
411 | + insertTemplate(); | ||
412 | +} | ||
413 | + | ||
414 | +function resizeEditor(layoutInfo) { | ||
415 | + if (editorMode != "normal") { | ||
416 | + var statusLineHeight = $("#editor-status-line").height(); | ||
417 | + layoutInfo.height -= statusLineHeight; | ||
418 | + layoutInfo.contentHeight -= statusLineHeight; | ||
419 | + } | ||
420 | +} | ||
421 | + | ||
422 | +function disposeEditorModeObject() { | ||
423 | + try { | ||
424 | + editorModeObject.dispose(); | ||
425 | + editorModeObject = null; | ||
426 | + } catch(ignorable) { | ||
427 | + } | ||
428 | +} | ||
429 | + | ||
430 | +function changeEditorMode() { | ||
431 | + disposeEditorModeObject(); | ||
432 | + | ||
433 | + if (editorMode == "vim") { | ||
434 | + editorModeObject = MonacoVim.initVimMode(sourceEditor, $("#editor-status-line")[0]); | ||
435 | + } else if (editorMode == "emacs") { | ||
436 | + var statusNode = $("#editor-status-line")[0]; | ||
437 | + editorModeObject = new MonacoEmacs.EmacsExtension(sourceEditor); | ||
438 | + editorModeObject.onDidMarkChange(function(e) { | ||
439 | + statusNode.textContent = e ? "Mark Set!" : "Mark Unset"; | ||
440 | + }); | ||
441 | + editorModeObject.onDidChangeKey(function(str) { | ||
442 | + statusNode.textContent = str; | ||
443 | + }); | ||
444 | + editorModeObject.start(); | ||
445 | + } | ||
446 | +} | ||
447 | + | ||
448 | +function resolveLanguageId(id) { | ||
449 | + id = parseInt(id); | ||
450 | + return languageIdTable[id] || id; | ||
451 | +} | ||
452 | + | ||
453 | +function resolveApiUrl(id) { | ||
454 | + id = parseInt(id); | ||
455 | + return languageApiUrlTable[id] || defaultUrl; | ||
456 | +} | ||
457 | + | ||
458 | +function editorsUpdateFontSize(fontSize) { | ||
459 | + sourceEditor.updateOptions({fontSize: fontSize}); | ||
460 | + stdinEditor.updateOptions({fontSize: fontSize}); | ||
461 | + stdoutEditor.updateOptions({fontSize: fontSize}); | ||
462 | + stderrEditor.updateOptions({fontSize: fontSize}); | ||
463 | + compileOutputEditor.updateOptions({fontSize: fontSize}); | ||
464 | + sandboxMessageEditor.updateOptions({fontSize: fontSize}); | ||
465 | +} | ||
466 | + | ||
467 | +function updateScreenElements() { | ||
468 | + var display = window.innerWidth <= 1200 ? "none" : ""; | ||
469 | + $(".wide.screen.only").each(function(index) { | ||
470 | + $(this).css("display", display); | ||
471 | + }); | ||
472 | +} | ||
473 | + | ||
474 | +$(window).resize(function() { | ||
475 | + layout.updateSize(); | ||
476 | + updateScreenElements(); | ||
477 | + showMessages(); | ||
478 | +}); | ||
479 | + | ||
480 | +$(document).ready(function () { | ||
481 | + updateScreenElements(); | ||
482 | + | ||
483 | + console.log("Hey, Judge0 IDE is open-sourced: https://github.com/judge0/ide. Have fun!"); | ||
484 | + | ||
485 | + $selectLanguage = $("#select-language"); | ||
486 | + $selectLanguage.change(function (e) { | ||
487 | + if (!isEditorDirty) { | ||
488 | + insertTemplate(); | ||
489 | + } else { | ||
490 | + changeEditorLanguage(); | ||
491 | + } | ||
492 | + }); | ||
493 | + | ||
494 | + $compilerOptions = $("#compiler-options"); | ||
495 | + $commandLineArguments = $("#command-line-arguments"); | ||
496 | + $commandLineArguments.attr("size", $commandLineArguments.attr("placeholder").length); | ||
497 | + | ||
498 | + $insertTemplateBtn = $("#insert-template-btn"); | ||
499 | + $insertTemplateBtn.click(function (e) { | ||
500 | + if (isEditorDirty && confirm("Are you sure? Your current changes will be lost.")) { | ||
501 | + insertTemplate(); | ||
502 | + } | ||
503 | + }); | ||
504 | + | ||
505 | + $runBtn = $("#run-btn"); | ||
506 | + $runBtn.click(function (e) { | ||
507 | + run(); | ||
508 | + }); | ||
509 | + | ||
510 | + $navigationMessage = $("#navigation-message span"); | ||
511 | + $updates = $("#judge0-more"); | ||
512 | + | ||
513 | + $(`input[name="editor-mode"][value="${editorMode}"]`).prop("checked", true); | ||
514 | + $("input[name=\"editor-mode\"]").on("change", function(e) { | ||
515 | + editorMode = e.target.value; | ||
516 | + localStorageSetItem("editorMode", editorMode); | ||
517 | + | ||
518 | + resizeEditor(sourceEditor.getLayoutInfo()); | ||
519 | + changeEditorMode(); | ||
520 | + | ||
521 | + sourceEditor.focus(); | ||
522 | + }); | ||
523 | + | ||
524 | + $("input[name=\"redirect-output\"]").prop("checked", redirectStderrToStdout) | ||
525 | + $("input[name=\"redirect-output\"]").on("change", function(e) { | ||
526 | + redirectStderrToStdout = e.target.checked; | ||
527 | + localStorageSetItem("redirectStderrToStdout", redirectStderrToStdout); | ||
528 | + }); | ||
529 | + | ||
530 | + $statusLine = $("#status-line"); | ||
531 | + | ||
532 | + $("body").keydown(function (e) { | ||
533 | + var keyCode = e.keyCode || e.which; | ||
534 | + if (keyCode == 120) { // F9 | ||
535 | + e.preventDefault(); | ||
536 | + run(); | ||
537 | + } else if (keyCode == 119) { // F8 | ||
538 | + e.preventDefault(); | ||
539 | + var url = prompt("Enter URL of Judge0 API:", apiUrl); | ||
540 | + if (url != null) { | ||
541 | + url = url.trim(); | ||
542 | + } | ||
543 | + if (url != null && url != "") { | ||
544 | + apiUrl = url; | ||
545 | + localStorageSetItem("api-url", apiUrl); | ||
546 | + } | ||
547 | + } else if (keyCode == 118) { // F7 | ||
548 | + e.preventDefault(); | ||
549 | + wait = !wait; | ||
550 | + localStorageSetItem("wait", wait); | ||
551 | + alert(`Submission wait is ${wait ? "ON. Enjoy" : "OFF"}.`); | ||
552 | + } else if (event.ctrlKey && keyCode == 107) { // Ctrl++ | ||
553 | + e.preventDefault(); | ||
554 | + fontSize += 1; | ||
555 | + editorsUpdateFontSize(fontSize); | ||
556 | + } else if (event.ctrlKey && keyCode == 109) { // Ctrl+- | ||
557 | + e.preventDefault(); | ||
558 | + fontSize -= 1; | ||
559 | + editorsUpdateFontSize(fontSize); | ||
560 | + } | ||
561 | + }); | ||
562 | + | ||
563 | + $("select.dropdown").dropdown(); | ||
564 | + $(".ui.dropdown").dropdown(); | ||
565 | + $(".ui.dropdown.site-links").dropdown({action: "hide", on: "hover"}); | ||
566 | + $(".ui.checkbox").checkbox(); | ||
567 | + $(".message .close").on("click", function () { | ||
568 | + $(this).closest(".message").transition("fade"); | ||
569 | + }); | ||
570 | + | ||
571 | + loadMessages(); | ||
572 | + | ||
573 | + require(["vs/editor/editor.main", "monaco-vim", "monaco-emacs"], function (ignorable, MVim, MEmacs) { | ||
574 | + layout = new GoldenLayout(layoutConfig, $("#site-content")); | ||
575 | + | ||
576 | + MonacoVim = MVim; | ||
577 | + MonacoEmacs = MEmacs; | ||
578 | + | ||
579 | + layout.registerComponent("source", function (container, state) { | ||
580 | + sourceEditor = monaco.editor.create(container.getElement()[0], { | ||
581 | + automaticLayout: true, | ||
582 | + theme: "vs-dark", | ||
583 | + scrollBeyondLastLine: true, | ||
584 | + readOnly: state.readOnly, | ||
585 | + language: "python", | ||
586 | + minimap: { | ||
587 | + enabled: false | ||
588 | + } | ||
589 | + }); | ||
590 | + | ||
591 | + changeEditorMode(); | ||
592 | + | ||
593 | + sourceEditor.getModel().onDidChangeContent(function (e) { | ||
594 | + currentLanguageId = parseInt($selectLanguage.val()); | ||
595 | + isEditorDirty = sourceEditor.getValue() != sources[currentLanguageId]; | ||
596 | + }); | ||
597 | + | ||
598 | + sourceEditor.onDidLayoutChange(resizeEditor); | ||
599 | + }); | ||
600 | + | ||
601 | + layout.registerComponent("stdin", function (container, state) { | ||
602 | + stdinEditor = monaco.editor.create(container.getElement()[0], { | ||
603 | + automaticLayout: true, | ||
604 | + theme: "vs-dark", | ||
605 | + scrollBeyondLastLine: false, | ||
606 | + readOnly: state.readOnly, | ||
607 | + language: "plaintext", | ||
608 | + minimap: { | ||
609 | + enabled: false | ||
610 | + } | ||
611 | + }); | ||
612 | + }); | ||
613 | + | ||
614 | + layout.registerComponent("stdout", function (container, state) { | ||
615 | + stdoutEditor = monaco.editor.create(container.getElement()[0], { | ||
616 | + automaticLayout: true, | ||
617 | + theme: "vs-dark", | ||
618 | + scrollBeyondLastLine: false, | ||
619 | + readOnly: state.readOnly, | ||
620 | + language: "plaintext", | ||
621 | + minimap: { | ||
622 | + enabled: false | ||
623 | + } | ||
624 | + }); | ||
625 | + | ||
626 | + container.on("tab", function(tab) { | ||
627 | + tab.element.append("<span id=\"stdout-dot\" class=\"dot\" hidden></span>"); | ||
628 | + tab.element.on("mousedown", function(e) { | ||
629 | + e.target.closest(".lm_tab").children[3].hidden = true; | ||
630 | + }); | ||
631 | + }); | ||
632 | + }); | ||
633 | + | ||
634 | + layout.registerComponent("stderr", function (container, state) { | ||
635 | + stderrEditor = monaco.editor.create(container.getElement()[0], { | ||
636 | + automaticLayout: true, | ||
637 | + theme: "vs-dark", | ||
638 | + scrollBeyondLastLine: false, | ||
639 | + readOnly: state.readOnly, | ||
640 | + language: "plaintext", | ||
641 | + minimap: { | ||
642 | + enabled: false | ||
643 | + } | ||
644 | + }); | ||
645 | + | ||
646 | + container.on("tab", function(tab) { | ||
647 | + tab.element.append("<span id=\"stderr-dot\" class=\"dot\" hidden></span>"); | ||
648 | + tab.element.on("mousedown", function(e) { | ||
649 | + e.target.closest(".lm_tab").children[3].hidden = true; | ||
650 | + }); | ||
651 | + }); | ||
652 | + }); | ||
653 | + | ||
654 | + layout.registerComponent("compile output", function (container, state) { | ||
655 | + compileOutputEditor = monaco.editor.create(container.getElement()[0], { | ||
656 | + automaticLayout: true, | ||
657 | + theme: "vs-dark", | ||
658 | + scrollBeyondLastLine: false, | ||
659 | + readOnly: state.readOnly, | ||
660 | + language: "plaintext", | ||
661 | + minimap: { | ||
662 | + enabled: false | ||
663 | + } | ||
664 | + }); | ||
665 | + | ||
666 | + container.on("tab", function(tab) { | ||
667 | + tab.element.append("<span id=\"compile-output-dot\" class=\"dot\" hidden></span>"); | ||
668 | + tab.element.on("mousedown", function(e) { | ||
669 | + e.target.closest(".lm_tab").children[3].hidden = true; | ||
670 | + }); | ||
671 | + }); | ||
672 | + }); | ||
673 | + | ||
674 | + layout.registerComponent("sandbox message", function (container, state) { | ||
675 | + sandboxMessageEditor = monaco.editor.create(container.getElement()[0], { | ||
676 | + automaticLayout: true, | ||
677 | + theme: "vs-dark", | ||
678 | + scrollBeyondLastLine: false, | ||
679 | + readOnly: state.readOnly, | ||
680 | + language: "plaintext", | ||
681 | + minimap: { | ||
682 | + enabled: false | ||
683 | + } | ||
684 | + }); | ||
685 | + | ||
686 | + container.on("tab", function(tab) { | ||
687 | + tab.element.append("<span id=\"sandbox-message-dot\" class=\"dot\" hidden></span>"); | ||
688 | + tab.element.on("mousedown", function(e) { | ||
689 | + e.target.closest(".lm_tab").children[3].hidden = true; | ||
690 | + }); | ||
691 | + }); | ||
692 | + }); | ||
693 | + | ||
694 | + layout.on("initialised", function () { | ||
695 | + $(".monaco-editor")[0].appendChild($("#editor-status-line")[0]); | ||
696 | + if (getIdFromURI()) { | ||
697 | + loadSavedSource(); | ||
698 | + } else { | ||
699 | + loadRandomLanguage(); | ||
700 | + } | ||
701 | + $("#site-navigation").css("border-bottom", "1px solid black"); | ||
702 | + sourceEditor.focus(); | ||
703 | + editorsUpdateFontSize(fontSize); | ||
704 | + }); | ||
705 | + | ||
706 | + layout.init(); | ||
707 | + }); | ||
708 | +}); | ||
709 | + | ||
710 | +// Template Sources | ||
711 | +var assemblySource = "\ | ||
712 | +section .text\n\ | ||
713 | + global _start\n\ | ||
714 | +\n\ | ||
715 | +_start:\n\ | ||
716 | +\n\ | ||
717 | + xor eax, eax\n\ | ||
718 | + lea edx, [rax+len]\n\ | ||
719 | + mov al, 1\n\ | ||
720 | + mov esi, msg\n\ | ||
721 | + mov edi, eax\n\ | ||
722 | + syscall\n\ | ||
723 | +\n\ | ||
724 | + xor edi, edi\n\ | ||
725 | + lea eax, [rdi+60]\n\ | ||
726 | + syscall\n\ | ||
727 | +\n\ | ||
728 | +section .rodata\n\ | ||
729 | +\n\ | ||
730 | +msg db 'hello, world', 0xa\n\ | ||
731 | +len equ $ - msg\n\ | ||
732 | +"; | ||
733 | + | ||
734 | +var bashSource = "echo \"hello, world\""; | ||
735 | + | ||
736 | +var basicSource = "PRINT \"hello, world\""; | ||
737 | + | ||
738 | +var cSource = "\ | ||
739 | +// Powered by Judge0\n\ | ||
740 | +#include <stdio.h>\n\ | ||
741 | +\n\ | ||
742 | +int main(void) {\n\ | ||
743 | + printf(\"Hello Judge0!\\n\");\n\ | ||
744 | + return 0;\n\ | ||
745 | +}\n\ | ||
746 | +"; | ||
747 | + | ||
748 | +var csharpSource = "\ | ||
749 | +public class Hello {\n\ | ||
750 | + public static void Main() {\n\ | ||
751 | + System.Console.WriteLine(\"hello, world\");\n\ | ||
752 | + }\n\ | ||
753 | +}\n\ | ||
754 | +"; | ||
755 | + | ||
756 | +var cppSource = "\ | ||
757 | +#include <iostream>\n\ | ||
758 | +\n\ | ||
759 | +int main() {\n\ | ||
760 | + std::cout << \"hello, world\" << std::endl;\n\ | ||
761 | + return 0;\n\ | ||
762 | +}\n\ | ||
763 | +"; | ||
764 | + | ||
765 | +var clojureSource = "(println \"hello, world\")\n"; | ||
766 | + | ||
767 | +var cobolSource = "\ | ||
768 | +IDENTIFICATION DIVISION.\n\ | ||
769 | +PROGRAM-ID. MAIN.\n\ | ||
770 | +PROCEDURE DIVISION.\n\ | ||
771 | +DISPLAY \"hello, world\".\n\ | ||
772 | +STOP RUN.\n\ | ||
773 | +"; | ||
774 | + | ||
775 | +var lispSource = "(write-line \"hello, world\")"; | ||
776 | + | ||
777 | +var dSource = "\ | ||
778 | +import std.stdio;\n\ | ||
779 | +\n\ | ||
780 | +void main()\n\ | ||
781 | +{\n\ | ||
782 | + writeln(\"hello, world\");\n\ | ||
783 | +}\n\ | ||
784 | +"; | ||
785 | + | ||
786 | +var elixirSource = "IO.puts \"hello, world\""; | ||
787 | + | ||
788 | +var erlangSource = "\ | ||
789 | +main(_) ->\n\ | ||
790 | + io:fwrite(\"hello, world\\n\").\n\ | ||
791 | +"; | ||
792 | + | ||
793 | +var executableSource = "\ | ||
794 | +Judge0 IDE assumes that content of executable is Base64 encoded.\n\ | ||
795 | +\n\ | ||
796 | +This means that you should Base64 encode content of your binary,\n\ | ||
797 | +paste it here and click \"Run\".\n\ | ||
798 | +\n\ | ||
799 | +Here is an example of compiled \"hello, world\" NASM program.\n\ | ||
800 | +Content of compiled binary is Base64 encoded and used as source code.\n\ | ||
801 | +\n\ | ||
802 | +https://ide.judge0.com/?kS_f\n\ | ||
803 | +"; | ||
804 | + | ||
805 | +var fsharpSource = "printfn \"hello, world\"\n"; | ||
806 | + | ||
807 | +var fortranSource = "\ | ||
808 | +program main\n\ | ||
809 | + print *, \"hello, world\"\n\ | ||
810 | +end\n\ | ||
811 | +"; | ||
812 | + | ||
813 | +var goSource = "\ | ||
814 | +package main\n\ | ||
815 | +\n\ | ||
816 | +import \"fmt\"\n\ | ||
817 | +\n\ | ||
818 | +func main() {\n\ | ||
819 | + fmt.Println(\"hello, world\")\n\ | ||
820 | +}\n\ | ||
821 | +"; | ||
822 | + | ||
823 | +var groovySource = "println \"hello, world\"\n"; | ||
824 | + | ||
825 | +var haskellSource = "main = putStrLn \"hello, world\""; | ||
826 | + | ||
827 | +var javaSource = "\ | ||
828 | +public class Main {\n\ | ||
829 | + public static void main(String[] args) {\n\ | ||
830 | + System.out.println(\"hello, world\");\n\ | ||
831 | + }\n\ | ||
832 | +}\n\ | ||
833 | +"; | ||
834 | + | ||
835 | +var javaScriptSource = "console.log(\"hello, world\");"; | ||
836 | + | ||
837 | +var kotlinSource = "\ | ||
838 | +fun main() {\n\ | ||
839 | + println(\"hello, world\")\n\ | ||
840 | +}\n\ | ||
841 | +"; | ||
842 | + | ||
843 | +var luaSource = "print(\"hello, world\")"; | ||
844 | + | ||
845 | +var objectiveCSource = "\ | ||
846 | +#import <Foundation/Foundation.h>\n\ | ||
847 | +\n\ | ||
848 | +int main() {\n\ | ||
849 | + @autoreleasepool {\n\ | ||
850 | + char name[10];\n\ | ||
851 | + scanf(\"%s\", name);\n\ | ||
852 | + NSString *message = [NSString stringWithFormat:@\"hello, %s\\n\", name];\n\ | ||
853 | + printf(\"%s\", message.UTF8String);\n\ | ||
854 | + }\n\ | ||
855 | + return 0;\n\ | ||
856 | +}\n\ | ||
857 | +"; | ||
858 | + | ||
859 | +var ocamlSource = "print_endline \"hello, world\""; | ||
860 | + | ||
861 | +var octaveSource = "printf(\"hello, world\\n\");"; | ||
862 | + | ||
863 | +var pascalSource = "\ | ||
864 | +program Hello;\n\ | ||
865 | +begin\n\ | ||
866 | + writeln ('hello, world')\n\ | ||
867 | +end.\n\ | ||
868 | +"; | ||
869 | + | ||
870 | +var perlSource = "\ | ||
871 | +my $name = <STDIN>;\n\ | ||
872 | +print \"hello, $name\";\n\ | ||
873 | +"; | ||
874 | + | ||
875 | +var phpSource = "\ | ||
876 | +<?php\n\ | ||
877 | +print(\"hello, world\\n\");\n\ | ||
878 | +?>\n\ | ||
879 | +"; | ||
880 | + | ||
881 | +var plainTextSource = "hello, world\n"; | ||
882 | + | ||
883 | +var prologSource = "\ | ||
884 | +:- initialization(main).\n\ | ||
885 | +main :- write('hello, world\\n').\n\ | ||
886 | +"; | ||
887 | + | ||
888 | +var pythonSource = "print(\"hello, world\")"; | ||
889 | + | ||
890 | +var rSource = "cat(\"hello, world\\n\")"; | ||
891 | + | ||
892 | +var rubySource = "puts \"hello, world\""; | ||
893 | + | ||
894 | +var rustSource = "\ | ||
895 | +fn main() {\n\ | ||
896 | + println!(\"hello, world\");\n\ | ||
897 | +}\n\ | ||
898 | +"; | ||
899 | + | ||
900 | +var scalaSource = "\ | ||
901 | +object Main {\n\ | ||
902 | + def main(args: Array[String]) = {\n\ | ||
903 | + val name = scala.io.StdIn.readLine()\n\ | ||
904 | + println(\"hello, \"+ name)\n\ | ||
905 | + }\n\ | ||
906 | +}\n\ | ||
907 | +"; | ||
908 | + | ||
909 | +var sqliteSource = "\ | ||
910 | +-- On Judge0 IDE your SQL script is run on chinook database (https://www.sqlitetutorial.net/sqlite-sample-database).\n\ | ||
911 | +-- For more information about how to use SQL with Judge0 API please\n\ | ||
912 | +-- watch this asciicast: https://asciinema.org/a/326975.\n\ | ||
913 | +SELECT\n\ | ||
914 | + Name, COUNT(*) AS num_albums\n\ | ||
915 | +FROM artists JOIN albums\n\ | ||
916 | +ON albums.ArtistID = artists.ArtistID\n\ | ||
917 | +GROUP BY Name\n\ | ||
918 | +ORDER BY num_albums DESC\n\ | ||
919 | +LIMIT 4;\n\ | ||
920 | +"; | ||
921 | +var sqliteAdditionalFiles = ""; | ||
922 | + | ||
923 | +var swiftSource = "\ | ||
924 | +import Foundation\n\ | ||
925 | +let name = readLine()\n\ | ||
926 | +print(\"hello, \\(name!)\")\n\ | ||
927 | +"; | ||
928 | + | ||
929 | +var typescriptSource = "console.log(\"hello, world\");"; | ||
930 | + | ||
931 | +var vbSource = "\ | ||
932 | +Public Module Program\n\ | ||
933 | + Public Sub Main()\n\ | ||
934 | + Console.WriteLine(\"hello, world\")\n\ | ||
935 | + End Sub\n\ | ||
936 | +End Module\n\ | ||
937 | +"; | ||
938 | + | ||
939 | +var c3Source = "\ | ||
940 | +// On the Judge0 IDE, C3 is automatically\n\ | ||
941 | +// updated every hour to the latest commit on master branch.\n\ | ||
942 | +module main;\n\ | ||
943 | +\n\ | ||
944 | +extern func void printf(char *str, ...);\n\ | ||
945 | +\n\ | ||
946 | +func int main()\n\ | ||
947 | +{\n\ | ||
948 | + printf(\"hello, world\\n\");\n\ | ||
949 | + return 0;\n\ | ||
950 | +}\n\ | ||
951 | +"; | ||
952 | + | ||
953 | +var javaTestSource = "\ | ||
954 | +import static org.junit.jupiter.api.Assertions.assertEquals;\n\ | ||
955 | +\n\ | ||
956 | +import org.junit.jupiter.api.Test;\n\ | ||
957 | +\n\ | ||
958 | +class MainTest {\n\ | ||
959 | + static class Calculator {\n\ | ||
960 | + public int add(int x, int y) {\n\ | ||
961 | + return x + y;\n\ | ||
962 | + }\n\ | ||
963 | + }\n\ | ||
964 | +\n\ | ||
965 | + private final Calculator calculator = new Calculator();\n\ | ||
966 | +\n\ | ||
967 | + @Test\n\ | ||
968 | + void addition() {\n\ | ||
969 | + assertEquals(2, calculator.add(1, 1));\n\ | ||
970 | + }\n\ | ||
971 | +}\n\ | ||
972 | +"; | ||
973 | + | ||
974 | +var mpiccSource = "\ | ||
975 | +// Try adding \"-n 5\" (without quotes) into command line arguments. \n\ | ||
976 | +#include <mpi.h>\n\ | ||
977 | +\n\ | ||
978 | +#include <stdio.h>\n\ | ||
979 | +\n\ | ||
980 | +int main()\n\ | ||
981 | +{\n\ | ||
982 | + MPI_Init(NULL, NULL);\n\ | ||
983 | +\n\ | ||
984 | + int world_size;\n\ | ||
985 | + MPI_Comm_size(MPI_COMM_WORLD, &world_size);\n\ | ||
986 | +\n\ | ||
987 | + int world_rank;\n\ | ||
988 | + MPI_Comm_rank(MPI_COMM_WORLD, &world_rank);\n\ | ||
989 | +\n\ | ||
990 | + printf(\"Hello from processor with rank %d out of %d processors.\\n\", world_rank, world_size);\n\ | ||
991 | +\n\ | ||
992 | + MPI_Finalize();\n\ | ||
993 | +\n\ | ||
994 | + return 0;\n\ | ||
995 | +}\n\ | ||
996 | +"; | ||
997 | + | ||
998 | +var mpicxxSource = "\ | ||
999 | +// Try adding \"-n 5\" (without quotes) into command line arguments. \n\ | ||
1000 | +#include <mpi.h>\n\ | ||
1001 | +\n\ | ||
1002 | +#include <iostream>\n\ | ||
1003 | +\n\ | ||
1004 | +int main()\n\ | ||
1005 | +{\n\ | ||
1006 | + MPI_Init(NULL, NULL);\n\ | ||
1007 | +\n\ | ||
1008 | + int world_size;\n\ | ||
1009 | + MPI_Comm_size(MPI_COMM_WORLD, &world_size);\n\ | ||
1010 | +\n\ | ||
1011 | + int world_rank;\n\ | ||
1012 | + MPI_Comm_rank(MPI_COMM_WORLD, &world_rank);\n\ | ||
1013 | +\n\ | ||
1014 | + std::cout << \"Hello from processor with rank \"\n\ | ||
1015 | + << world_rank << \" out of \" << world_size << \" processors.\\n\";\n\ | ||
1016 | +\n\ | ||
1017 | + MPI_Finalize();\n\ | ||
1018 | +\n\ | ||
1019 | + return 0;\n\ | ||
1020 | +}\n\ | ||
1021 | +"; | ||
1022 | + | ||
1023 | +var mpipySource = "\ | ||
1024 | +# Try adding \"-n 5\" (without quotes) into command line arguments. \n\ | ||
1025 | +from mpi4py import MPI\n\ | ||
1026 | +\n\ | ||
1027 | +comm = MPI.COMM_WORLD\n\ | ||
1028 | +world_size = comm.Get_size()\n\ | ||
1029 | +world_rank = comm.Get_rank()\n\ | ||
1030 | +\n\ | ||
1031 | +print(f\"Hello from processor with rank {world_rank} out of {world_size} processors\")\n\ | ||
1032 | +"; | ||
1033 | + | ||
1034 | +var nimSource = "\ | ||
1035 | +# On the Judge0 IDE, Nim is automatically\n\ | ||
1036 | +# updated every day to the latest stable version.\n\ | ||
1037 | +echo \"hello, world\"\n\ | ||
1038 | +"; | ||
1039 | + | ||
1040 | +var pythonForMlSource = "\ | ||
1041 | +import mlxtend\n\ | ||
1042 | +import numpy\n\ | ||
1043 | +import pandas\n\ | ||
1044 | +import scipy\n\ | ||
1045 | +import sklearn\n\ | ||
1046 | +\n\ | ||
1047 | +print(\"hello, world\")\n\ | ||
1048 | +"; | ||
1049 | + | ||
1050 | +var bosqueSource = "\ | ||
1051 | +// On the Judge0 IDE, Bosque (https://github.com/microsoft/BosqueLanguage)\n\ | ||
1052 | +// is automatically updated every hour to the latest commit on master branch.\n\ | ||
1053 | +\n\ | ||
1054 | +namespace NSMain;\n\ | ||
1055 | +\n\ | ||
1056 | +concept WithName {\n\ | ||
1057 | + invariant $name != \"\";\n\ | ||
1058 | +\n\ | ||
1059 | + field name: String;\n\ | ||
1060 | +}\n\ | ||
1061 | +\n\ | ||
1062 | +concept Greeting {\n\ | ||
1063 | + abstract method sayHello(): String;\n\ | ||
1064 | + \n\ | ||
1065 | + virtual method sayGoodbye(): String {\n\ | ||
1066 | + return \"goodbye\";\n\ | ||
1067 | + }\n\ | ||
1068 | +}\n\ | ||
1069 | +\n\ | ||
1070 | +entity GenericGreeting provides Greeting {\n\ | ||
1071 | + const instance: GenericGreeting = GenericGreeting@{};\n\ | ||
1072 | +\n\ | ||
1073 | + override method sayHello(): String {\n\ | ||
1074 | + return \"hello world\";\n\ | ||
1075 | + }\n\ | ||
1076 | +}\n\ | ||
1077 | +\n\ | ||
1078 | +entity NamedGreeting provides WithName, Greeting {\n\ | ||
1079 | + override method sayHello(): String {\n\ | ||
1080 | + return String::concat(\"hello\", \" \", this.name);\n\ | ||
1081 | + }\n\ | ||
1082 | +}\n\ | ||
1083 | +\n\ | ||
1084 | +entrypoint function main(arg?: String): String {\n\ | ||
1085 | + var val = arg ?| \"\";\n\ | ||
1086 | + if (val == \"1\") {\n\ | ||
1087 | + return GenericGreeting@{}.sayHello();\n\ | ||
1088 | + }\n\ | ||
1089 | + elif (val == \"2\") {\n\ | ||
1090 | + return GenericGreeting::instance.sayHello();\n\ | ||
1091 | + }\n\ | ||
1092 | + else {\n\ | ||
1093 | + return NamedGreeting@{name=\"bob\"}.sayHello();\n\ | ||
1094 | + }\n\ | ||
1095 | +}\n\ | ||
1096 | +"; | ||
1097 | + | ||
1098 | +var cppTestSource = "\ | ||
1099 | +#include <gtest/gtest.h>\n\ | ||
1100 | +\n\ | ||
1101 | +int add(int x, int y) {\n\ | ||
1102 | + return x + y;\n\ | ||
1103 | +}\n\ | ||
1104 | +\n\ | ||
1105 | +TEST(AdditionTest, NeutralElement) {\n\ | ||
1106 | + EXPECT_EQ(1, add(1, 0));\n\ | ||
1107 | + EXPECT_EQ(1, add(0, 1));\n\ | ||
1108 | + EXPECT_EQ(0, add(0, 0));\n\ | ||
1109 | +}\n\ | ||
1110 | +\n\ | ||
1111 | +TEST(AdditionTest, CommutativeProperty) {\n\ | ||
1112 | + EXPECT_EQ(add(2, 3), add(3, 2));\n\ | ||
1113 | +}\n\ | ||
1114 | +\n\ | ||
1115 | +int main(int argc, char **argv) {\n\ | ||
1116 | + ::testing::InitGoogleTest(&argc, argv);\n\ | ||
1117 | + return RUN_ALL_TESTS();\n\ | ||
1118 | +}\n\ | ||
1119 | +"; | ||
1120 | + | ||
1121 | +var csharpTestSource ="\ | ||
1122 | +using NUnit.Framework;\n\ | ||
1123 | +\n\ | ||
1124 | +public class Calculator\n\ | ||
1125 | +{\n\ | ||
1126 | + public int add(int a, int b)\n\ | ||
1127 | + {\n\ | ||
1128 | + return a + b;\n\ | ||
1129 | + }\n\ | ||
1130 | +}\n\ | ||
1131 | +\n\ | ||
1132 | +[TestFixture]\n\ | ||
1133 | +public class Tests\n\ | ||
1134 | +{\n\ | ||
1135 | + private Calculator calculator;\n\ | ||
1136 | +\n\ | ||
1137 | + [SetUp]\n\ | ||
1138 | + protected void SetUp()\n\ | ||
1139 | + {\n\ | ||
1140 | + calculator = new Calculator();\n\ | ||
1141 | + }\n\ | ||
1142 | +\n\ | ||
1143 | + [Test]\n\ | ||
1144 | + public void NeutralElement()\n\ | ||
1145 | + {\n\ | ||
1146 | + Assert.AreEqual(1, calculator.add(1, 0));\n\ | ||
1147 | + Assert.AreEqual(1, calculator.add(0, 1));\n\ | ||
1148 | + Assert.AreEqual(0, calculator.add(0, 0));\n\ | ||
1149 | + }\n\ | ||
1150 | +\n\ | ||
1151 | + [Test]\n\ | ||
1152 | + public void CommutativeProperty()\n\ | ||
1153 | + {\n\ | ||
1154 | + Assert.AreEqual(calculator.add(2, 3), calculator.add(3, 2));\n\ | ||
1155 | + }\n\ | ||
1156 | +}\n\ | ||
1157 | +"; | ||
1158 | + | ||
1159 | +var sources = { | ||
1160 | + 45: assemblySource, | ||
1161 | + 46: bashSource, | ||
1162 | + 47: basicSource, | ||
1163 | + 48: cSource, | ||
1164 | + 49: cSource, | ||
1165 | + 50: cSource, | ||
1166 | + 51: csharpSource, | ||
1167 | + 52: cppSource, | ||
1168 | + 53: cppSource, | ||
1169 | + 54: cppSource, | ||
1170 | + 55: lispSource, | ||
1171 | + 56: dSource, | ||
1172 | + 57: elixirSource, | ||
1173 | + 58: erlangSource, | ||
1174 | + 44: executableSource, | ||
1175 | + 59: fortranSource, | ||
1176 | + 60: goSource, | ||
1177 | + 61: haskellSource, | ||
1178 | + 62: javaSource, | ||
1179 | + 63: javaScriptSource, | ||
1180 | + 64: luaSource, | ||
1181 | + 65: ocamlSource, | ||
1182 | + 66: octaveSource, | ||
1183 | + 67: pascalSource, | ||
1184 | + 68: phpSource, | ||
1185 | + 43: plainTextSource, | ||
1186 | + 69: prologSource, | ||
1187 | + 70: pythonSource, | ||
1188 | + 71: pythonSource, | ||
1189 | + 72: rubySource, | ||
1190 | + 73: rustSource, | ||
1191 | + 74: typescriptSource, | ||
1192 | + 75: cSource, | ||
1193 | + 76: cppSource, | ||
1194 | + 77: cobolSource, | ||
1195 | + 78: kotlinSource, | ||
1196 | + 79: objectiveCSource, | ||
1197 | + 80: rSource, | ||
1198 | + 81: scalaSource, | ||
1199 | + 82: sqliteSource, | ||
1200 | + 83: swiftSource, | ||
1201 | + 84: vbSource, | ||
1202 | + 85: perlSource, | ||
1203 | + 86: clojureSource, | ||
1204 | + 87: fsharpSource, | ||
1205 | + 88: groovySource, | ||
1206 | + 1001: cSource, | ||
1207 | + 1002: cppSource, | ||
1208 | + 1003: c3Source, | ||
1209 | + 1004: javaSource, | ||
1210 | + 1005: javaTestSource, | ||
1211 | + 1006: mpiccSource, | ||
1212 | + 1007: mpicxxSource, | ||
1213 | + 1008: mpipySource, | ||
1214 | + 1009: nimSource, | ||
1215 | + 1010: pythonForMlSource, | ||
1216 | + 1011: bosqueSource, | ||
1217 | + 1012: cppTestSource, | ||
1218 | + 1013: cSource, | ||
1219 | + 1014: cppSource, | ||
1220 | + 1015: cppTestSource, | ||
1221 | + 1021: csharpSource, | ||
1222 | + 1022: csharpSource, | ||
1223 | + 1023: csharpTestSource, | ||
1224 | + 1024: fsharpSource | ||
1225 | +}; | ||
1226 | + | ||
1227 | +var fileNames = { | ||
1228 | + 45: "main.asm", | ||
1229 | + 46: "script.sh", | ||
1230 | + 47: "main.bas", | ||
1231 | + 48: "main.c", | ||
1232 | + 49: "main.c", | ||
1233 | + 50: "main.c", | ||
1234 | + 51: "Main.cs", | ||
1235 | + 52: "main.cpp", | ||
1236 | + 53: "main.cpp", | ||
1237 | + 54: "main.cpp", | ||
1238 | + 55: "script.lisp", | ||
1239 | + 56: "main.d", | ||
1240 | + 57: "script.exs", | ||
1241 | + 58: "main.erl", | ||
1242 | + 44: "a.out", | ||
1243 | + 59: "main.f90", | ||
1244 | + 60: "main.go", | ||
1245 | + 61: "main.hs", | ||
1246 | + 62: "Main.java", | ||
1247 | + 63: "script.js", | ||
1248 | + 64: "script.lua", | ||
1249 | + 65: "main.ml", | ||
1250 | + 66: "script.m", | ||
1251 | + 67: "main.pas", | ||
1252 | + 68: "script.php", | ||
1253 | + 43: "text.txt", | ||
1254 | + 69: "main.pro", | ||
1255 | + 70: "script.py", | ||
1256 | + 71: "script.py", | ||
1257 | + 72: "script.rb", | ||
1258 | + 73: "main.rs", | ||
1259 | + 74: "script.ts", | ||
1260 | + 75: "main.c", | ||
1261 | + 76: "main.cpp", | ||
1262 | + 77: "main.cob", | ||
1263 | + 78: "Main.kt", | ||
1264 | + 79: "main.m", | ||
1265 | + 80: "script.r", | ||
1266 | + 81: "Main.scala", | ||
1267 | + 82: "script.sql", | ||
1268 | + 83: "Main.swift", | ||
1269 | + 84: "Main.vb", | ||
1270 | + 85: "script.pl", | ||
1271 | + 86: "main.clj", | ||
1272 | + 87: "script.fsx", | ||
1273 | + 88: "script.groovy", | ||
1274 | + 1001: "main.c", | ||
1275 | + 1002: "main.cpp", | ||
1276 | + 1003: "main.c3", | ||
1277 | + 1004: "Main.java", | ||
1278 | + 1005: "MainTest.java", | ||
1279 | + 1006: "main.c", | ||
1280 | + 1007: "main.cpp", | ||
1281 | + 1008: "script.py", | ||
1282 | + 1009: "main.nim", | ||
1283 | + 1010: "script.py", | ||
1284 | + 1011: "main.bsq", | ||
1285 | + 1012: "main.cpp", | ||
1286 | + 1013: "main.c", | ||
1287 | + 1014: "main.cpp", | ||
1288 | + 1015: "main.cpp", | ||
1289 | + 1021: "Main.cs", | ||
1290 | + 1022: "Main.cs", | ||
1291 | + 1023: "Test.cs", | ||
1292 | + 1024: "script.fsx" | ||
1293 | +}; | ||
1294 | + | ||
1295 | +var languageIdTable = { | ||
1296 | + 1001: 1, | ||
1297 | + 1002: 2, | ||
1298 | + 1003: 3, | ||
1299 | + 1004: 4, | ||
1300 | + 1005: 5, | ||
1301 | + 1006: 6, | ||
1302 | + 1007: 7, | ||
1303 | + 1008: 8, | ||
1304 | + 1009: 9, | ||
1305 | + 1010: 10, | ||
1306 | + 1011: 11, | ||
1307 | + 1012: 12, | ||
1308 | + 1013: 13, | ||
1309 | + 1014: 14, | ||
1310 | + 1015: 15, | ||
1311 | + 1021: 21, | ||
1312 | + 1022: 22, | ||
1313 | + 1023: 23, | ||
1314 | + 1024: 24 | ||
1315 | +} | ||
1316 | + | ||
1317 | +var extraApiUrl = "https://extra-ce.judge0.com"; | ||
1318 | +var languageApiUrlTable = { | ||
1319 | + 1001: extraApiUrl, | ||
1320 | + 1002: extraApiUrl, | ||
1321 | + 1003: extraApiUrl, | ||
1322 | + 1004: extraApiUrl, | ||
1323 | + 1005: extraApiUrl, | ||
1324 | + 1006: extraApiUrl, | ||
1325 | + 1007: extraApiUrl, | ||
1326 | + 1008: extraApiUrl, | ||
1327 | + 1009: extraApiUrl, | ||
1328 | + 1010: extraApiUrl, | ||
1329 | + 1011: extraApiUrl, | ||
1330 | + 1012: extraApiUrl, | ||
1331 | + 1013: extraApiUrl, | ||
1332 | + 1014: extraApiUrl, | ||
1333 | + 1015: extraApiUrl, | ||
1334 | + 1021: extraApiUrl, | ||
1335 | + 1022: extraApiUrl, | ||
1336 | + 1023: extraApiUrl, | ||
1337 | + 1024: extraApiUrl | ||
1338 | +} |
Voicoding_web/js/package-lock.json
0 → 100644
... | @@ -4,6 +4,7 @@ const recordButton = document.getElementById("recordButton"); | ... | @@ -4,6 +4,7 @@ const recordButton = document.getElementById("recordButton"); |
4 | const transcribeButton = document.getElementById("transcribeButton"); | 4 | const transcribeButton = document.getElementById("transcribeButton"); |
5 | recordButton.addEventListener("click", startRecording); | 5 | recordButton.addEventListener("click", startRecording); |
6 | transcribeButton.addEventListener("click", transcribeText); | 6 | transcribeButton.addEventListener("click", transcribeText); |
7 | +let cnt = 0; | ||
7 | function startRecording() { | 8 | function startRecording() { |
8 | let constraints = { audio: true, video:false } | 9 | let constraints = { audio: true, video:false } |
9 | recordButton.disabled = true; | 10 | recordButton.disabled = true; |
... | @@ -32,7 +33,7 @@ function uploadSoundData(blob) { | ... | @@ -32,7 +33,7 @@ function uploadSoundData(blob) { |
32 | let formData = new FormData(); | 33 | let formData = new FormData(); |
33 | xhr.onload = function(e) { | 34 | xhr.onload = function(e) { |
34 | if(this.readyState === 4) { | 35 | if(this.readyState === 4) { |
35 | - document.getElementById("output").innerHTML += '<br><br><strong>Result: </strong>' + JSON.parse(e.target.responseText); | 36 | + document.getElementById("output").innerHTML += `${cnt++}: ${JSON.parse(e.target.responseText)}<br>`; |
36 | } | 37 | } |
37 | }; | 38 | }; |
38 | formData.append("audio_data", blob, filename); | 39 | formData.append("audio_data", blob, filename); | ... | ... |
-
Please register or login to post a comment