diff --git a/40-env-update.sh b/40-env-update.sh new file mode 100755 index 000000000..fc13da397 --- /dev/null +++ b/40-env-update.sh @@ -0,0 +1,20 @@ +#! /bin/bash + +if [ -z "$API_URL" ] + +then + echo No API Environment Variable Set. Set "-e API_URL='your-server.tld'" in your Docker Config +else + if [ -f /api_set ] + then + echo API URL Already set to $API_URL + else + echo Setting API URL to: $API_URL + sed -i 's#var apiUrl = localStorageGetItem("api-url") || "https://ce.judge0.com";#var apiUrl = '"$API_URL"'#' /usr/share/nginx/html/js/ide.js + + echo Disabling messages from public Judge CE API + sed -i "s^loadMessages();^^1" /usr/share/nginx/html/js/ide.js + + touch /api_set + fi +fi diff --git a/Dockerfile b/Dockerfile new file mode 100644 index 000000000..bd095e56d --- /dev/null +++ b/Dockerfile @@ -0,0 +1,5 @@ +FROM nginx +ADD 40-env-update.sh /docker-entrypoint.d +RUN chmod +x /docker-entrypoint.d/40-env-update.sh +COPY . /usr/share/nginx/html + diff --git a/js/ide.js b/js/ide.js index 61c3ed522..cfb020398 100755 --- a/js/ide.js +++ b/js/ide.js @@ -1,9 +1,8 @@ -var defaultUrl = localStorageGetItem("api-url") || "https://ce.judge0.com"; -var apiUrl = defaultUrl; +var apiUrl = localStorageGetItem("api-url") || "https://ce.judge0.com"; var wait = localStorageGetItem("wait") || true; var check_timeout = 300; -var blinkStatusLine = ((localStorageGetItem("blink") || "true") === "true"); +var blinkStatusLine = (localStorageGetItem("blink") || "true") === "true"; var editorMode = localStorageGetItem("editorMode") || "normal"; var editorModeObject = null; @@ -36,69 +35,76 @@ var timeEnd; var messagesData; var layoutConfig = { - settings: { - showPopoutIcon: false, - reorderEnabled: true - }, - dimensions: { - borderWidth: 3, - headerHeight: 22 + settings: { + showPopoutIcon: false, + reorderEnabled: true, + }, + dimensions: { + borderWidth: 3, + headerHeight: 22, + }, + content: [ + { + type: "column", + content: [ + { + type: "component", + height: 70, + componentName: "source", + id: "source", + title: "SOURCE", + isClosable: false, + componentState: { + readOnly: false, + }, + }, + { + type: "stack", + content: [ + { + type: "component", + componentName: "stdin", + id: "stdin", + title: "Input", + isClosable: false, + componentState: { + readOnly: false, + }, + }, + { + type: "component", + componentName: "stdout", + id: "stdout", + title: "Output", + isClosable: false, + componentState: { + readOnly: true, + }, + }, + ], + }, + ], }, - content: [{ - type: "column", - content: [{ - type: "component", - height: 70, - componentName: "source", - id: "source", - title: "SOURCE", - isClosable: false, - componentState: { - readOnly: false - } - }, { - type: "stack", - content: [{ - type: "component", - componentName: "stdin", - id: "stdin", - title: "Input", - isClosable: false, - componentState: { - readOnly: false - } - }, { - type: "component", - componentName: "stdout", - id: "stdout", - title: "Output", - isClosable: false, - componentState: { - readOnly: true - } - }] - }] - }] + ], }; function encode(str) { - return btoa(unescape(encodeURIComponent(str || ""))); + return btoa(unescape(encodeURIComponent(str || ""))); } function decode(bytes) { - var escaped = escape(atob(bytes || "")); - try { - return decodeURIComponent(escaped); - } catch { - return unescape(escaped); - } + var escaped = escape(atob(bytes || "")); + try { + return decodeURIComponent(escaped); + } catch { + return unescape(escaped); + } } function localStorageSetItem(key, value) { try { localStorage.setItem(key, value); - } catch (ignorable) { - } + } catch (ignorable) {} } function localStorageGetItem(key) { @@ -110,91 +116,100 @@ function localStorageGetItem(key) { } function showMessages() { - var width = $updates.offset().left - parseFloat($updates.css("padding-left")) - - $navigationMessage.parent().offset().left - parseFloat($navigationMessage.parent().css("padding-left")) - 5; - - if (width < 200 || messagesData === undefined) { - return; - } + var width = + $updates.offset().left - + parseFloat($updates.css("padding-left")) - + $navigationMessage.parent().offset().left - + parseFloat($navigationMessage.parent().css("padding-left")) - + 5; + + if (width < 200 || messagesData === undefined) { + return; + } - var messages = messagesData["messages"]; + var messages = messagesData["messages"]; - $navigationMessage.css("animation-duration", messagesData["duration"]); - $navigationMessage.parent().width(width - 5); + $navigationMessage.css("animation-duration", messagesData["duration"]); + $navigationMessage.parent().width(width - 5); - var combinedMessage = ""; - for (var i = 0; i < messages.length; ++i) { - combinedMessage += `${messages[i]}`; - if (i != messages.length - 1) { - combinedMessage += " ".repeat(Math.min(200, messages[i].length)); - } + var combinedMessage = ""; + for (var i = 0; i < messages.length; ++i) { + combinedMessage += `${messages[i]}`; + if (i != messages.length - 1) { + combinedMessage += " ".repeat(Math.min(200, messages[i].length)); } + } - $navigationMessage.html(combinedMessage); + $navigationMessage.html(combinedMessage); } function loadMessages() { - $.ajax({ - url: `https://minio.judge0.com/public/ide/messages.json?${Date.now()}`, - type: "GET", - headers: { - "Accept": "application/json" - }, - success: function (data, textStatus, jqXHR) { - messagesData = data; - showMessages(); - } - }); + $.ajax({ + url: `https://minio.judge0.com/public/ide/messages.json?${Date.now()}`, + type: "GET", + headers: { + Accept: "application/json", + }, + success: function (data, textStatus, jqXHR) { + messagesData = data; + showMessages(); + }, + }); } function showError(title, content) { - $("#site-modal #title").html(title); - $("#site-modal .content").html(content); - $("#site-modal").modal("show"); + $("#site-modal #title").html(title); + $("#site-modal .content").html(content); + $("#site-modal").modal("show"); } function handleError(jqXHR, textStatus, errorThrown) { - showError(`${jqXHR.statusText} (${jqXHR.status})`, `
${JSON.stringify(jqXHR, null, 4)}`);
+ showError(
+ `${jqXHR.statusText} (${jqXHR.status})`,
+ `${JSON.stringify(jqXHR, null, 4)}`
+ );
}
function handleRunError(jqXHR, textStatus, errorThrown) {
- handleError(jqXHR, textStatus, errorThrown);
- $runBtn.removeClass("loading");
+ handleError(jqXHR, textStatus, errorThrown);
+ $runBtn.removeClass("loading");
}
function handleResult(data) {
- timeEnd = performance.now();
- console.log("It took " + (timeEnd - timeStart) + " ms to get submission result.");
-
- var status = data.status;
- var stdout = decode(data.stdout);
- var compile_output = decode(data.compile_output);
- var time = (data.time === null ? "-" : data.time + "s");
- var memory = (data.memory === null ? "-" : data.memory + "KB");
-
- $statusLine.html(`${status.description}, ${time}, ${memory}`);
-
- if (blinkStatusLine) {
- $statusLine.addClass("blink");
- setTimeout(function() {
- blinkStatusLine = false;
- localStorageSetItem("blink", "false");
- $statusLine.removeClass("blink");
- }, 3000);
- }
+ timeEnd = performance.now();
+ console.log(
+ "It took " + (timeEnd - timeStart) + " ms to get submission result."
+ );
+
+ var status = data.status;
+ var stdout = decode(data.stdout);
+ var compile_output = decode(data.compile_output);
+ var time = data.time === null ? "-" : data.time + "s";
+ var memory = data.memory === null ? "-" : data.memory + "KB";
+
+ $statusLine.html(`${status.description}, ${time}, ${memory}`);
+
+ if (blinkStatusLine) {
+ $statusLine.addClass("blink");
+ setTimeout(function () {
+ blinkStatusLine = false;
+ localStorageSetItem("blink", "false");
+ $statusLine.removeClass("blink");
+ }, 3000);
+ }
- var output = [compile_output, stdout].join("\n").trim();
+ var output = [compile_output, stdout].join("\n").trim();
- stdoutEditor.setValue(output);
+ stdoutEditor.setValue(output);
- if (output !== "") {
- var dot = document.getElementById("stdout-dot");
- if (!dot.parentElement.classList.contains("lm_active")) {
- dot.hidden = false;
- }
+ if (output !== "") {
+ var dot = document.getElementById("stdout-dot");
+ if (!dot.parentElement.classList.contains("lm_active")) {
+ dot.hidden = false;
}
+ }
- $runBtn.removeClass("loading");
+ $runBtn.removeClass("loading");
}
function getIdFromURI() {
@@ -203,391 +218,418 @@ function getIdFromURI() {
}
function downloadSource() {
- var value = parseInt($selectLanguage.val());
- download(sourceEditor.getValue(), fileNames[value], "text/plain");
+ var value = parseInt($selectLanguage.val());
+ download(sourceEditor.getValue(), fileNames[value], "text/plain");
}
function loadSavedSource() {
- snippet_id = getIdFromURI();
-
- if (snippet_id.length == 36) {
- $.ajax({
- 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",
- type: "GET",
- success: function(data, textStatus, jqXHR) {
- sourceEditor.setValue(decode(data["source_code"]));
- $selectLanguage.dropdown("set selected", data["language_id"]);
- $compilerOptions.val(data["compiler_options"]);
- $commandLineArguments.val(data["command_line_arguments"]);
- stdinEditor.setValue(decode(data["stdin"]));
- stdoutEditor.setValue(decode(data["stdout"]));
- var time = (data.time === null ? "-" : data.time + "s");
- var memory = (data.memory === null ? "-" : data.memory + "KB");
- $statusLine.html(`${data.status.description}, ${time}, ${memory}`);
- changeEditorLanguage();
- },
- error: handleRunError
- });
- } else {
- loadRandomLanguage();
- }
+ snippet_id = getIdFromURI();
+
+ if (snippet_id.length == 36) {
+ $.ajax({
+ 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",
+ type: "GET",
+ success: function (data, textStatus, jqXHR) {
+ sourceEditor.setValue(decode(data["source_code"]));
+ $selectLanguage.dropdown("set selected", data["language_id"]);
+ $compilerOptions.val(data["compiler_options"]);
+ $commandLineArguments.val(data["command_line_arguments"]);
+ stdinEditor.setValue(decode(data["stdin"]));
+ stdoutEditor.setValue(decode(data["stdout"]));
+ var time = data.time === null ? "-" : data.time + "s";
+ var memory = data.memory === null ? "-" : data.memory + "KB";
+ $statusLine.html(`${data.status.description}, ${time}, ${memory}`);
+ changeEditorLanguage();
+ },
+ error: handleRunError,
+ });
+ } else {
+ loadRandomLanguage();
+ }
}
function run() {
- if (sourceEditor.getValue().trim() === "") {
- showError("Error", "Source code can't be empty!");
- return;
- } else {
- $runBtn.addClass("loading");
- }
-
- document.getElementById("stdout-dot").hidden = true;
+ if (sourceEditor.getValue().trim() === "") {
+ showError("Error", "Source code can't be empty!");
+ return;
+ } else {
+ $runBtn.addClass("loading");
+ }
- stdoutEditor.setValue("");
+ document.getElementById("stdout-dot").hidden = true;
- var x = layout.root.getItemsById("stdout")[0];
- x.parent.header.parent.setActiveContentItem(x);
+ stdoutEditor.setValue("");
- var sourceValue = encode(sourceEditor.getValue());
- var stdinValue = encode(stdinEditor.getValue());
- var languageId = resolveLanguageId($selectLanguage.val());
- var compilerOptions = $compilerOptions.val();
- var commandLineArguments = $commandLineArguments.val();
+ var x = layout.root.getItemsById("stdout")[0];
+ x.parent.header.parent.setActiveContentItem(x);
- if (parseInt(languageId) === 44) {
- sourceValue = sourceEditor.getValue();
- }
+ var sourceValue = encode(sourceEditor.getValue());
+ var stdinValue = encode(stdinEditor.getValue());
+ var languageId = resolveLanguageId($selectLanguage.val());
+ var compilerOptions = $compilerOptions.val();
+ var commandLineArguments = $commandLineArguments.val();
- var data = {
- source_code: sourceValue,
- language_id: languageId,
- stdin: stdinValue,
- compiler_options: compilerOptions,
- command_line_arguments: commandLineArguments,
- redirect_stderr_to_stdout: true
- };
-
- var sendRequest = function(data) {
- timeStart = performance.now();
- $.ajax({
- url: apiUrl + `/submissions?base64_encoded=true&wait=${wait}`,
- type: "POST",
- async: true,
- contentType: "application/json",
- data: JSON.stringify(data),
- xhrFields: {
- withCredentials: apiUrl.indexOf("/secure") != -1 ? true : false
- },
- success: function (data, textStatus, jqXHR) {
- console.log(`Your submission token is: ${data.token}`);
- if (wait == true) {
- handleResult(data);
- } else {
- setTimeout(fetchSubmission.bind(null, data.token), check_timeout);
- }
- },
- error: handleRunError
- });
- }
+ if (parseInt(languageId) === 44) {
+ sourceValue = sourceEditor.getValue();
+ }
- var fetchAdditionalFiles = false;
- if (parseInt(languageId) === 82) {
- if (sqliteAdditionalFiles === "") {
- fetchAdditionalFiles = true;
- $.ajax({
- url: `https://minio.judge0.com/public/ide/sqliteAdditionalFiles.base64.txt?${Date.now()}`,
- type: "GET",
- async: true,
- contentType: "text/plain",
- success: function (responseData, textStatus, jqXHR) {
- sqliteAdditionalFiles = responseData;
- data["additional_files"] = sqliteAdditionalFiles;
- sendRequest(data);
- },
- error: handleRunError
- });
- }
- else {
- data["additional_files"] = sqliteAdditionalFiles;
+ var data = {
+ source_code: sourceValue,
+ language_id: languageId,
+ stdin: stdinValue,
+ compiler_options: compilerOptions,
+ command_line_arguments: commandLineArguments,
+ redirect_stderr_to_stdout: true,
+ };
+
+ var sendRequest = function (data) {
+ timeStart = performance.now();
+ $.ajax({
+ url: apiUrl + `/submissions?base64_encoded=true&wait=${wait}`,
+ type: "POST",
+ async: true,
+ contentType: "application/json",
+ data: JSON.stringify(data),
+ xhrFields: {
+ withCredentials: apiUrl.indexOf("/secure") != -1 ? true : false,
+ },
+ success: function (data, textStatus, jqXHR) {
+ console.log(`Your submission token is: ${data.token}`);
+ if (wait == true) {
+ handleResult(data);
+ } else {
+ setTimeout(fetchSubmission.bind(null, data.token), check_timeout);
}
+ },
+ error: handleRunError,
+ });
+ };
+
+ var fetchAdditionalFiles = false;
+ if (parseInt(languageId) === 82) {
+ if (sqliteAdditionalFiles === "") {
+ fetchAdditionalFiles = true;
+ $.ajax({
+ url: `https://minio.judge0.com/public/ide/sqliteAdditionalFiles.base64.txt?${Date.now()}`,
+ type: "GET",
+ async: true,
+ contentType: "text/plain",
+ success: function (responseData, textStatus, jqXHR) {
+ sqliteAdditionalFiles = responseData;
+ data["additional_files"] = sqliteAdditionalFiles;
+ sendRequest(data);
+ },
+ error: handleRunError,
+ });
+ } else {
+ data["additional_files"] = sqliteAdditionalFiles;
}
+ }
- if (!fetchAdditionalFiles) {
- sendRequest(data);
- }
+ if (!fetchAdditionalFiles) {
+ sendRequest(data);
+ }
}
function fetchSubmission(submission_token) {
- $.ajax({
- url: apiUrl + "/submissions/" + submission_token + "?base64_encoded=true",
- type: "GET",
- async: true,
- success: function (data, textStatus, jqXHR) {
- if (data.status.id <= 2) { // In Queue or Processing
- setTimeout(fetchSubmission.bind(null, submission_token), check_timeout);
- return;
- }
- handleResult(data);
- },
- error: handleRunError
- });
+ $.ajax({
+ url: apiUrl + "/submissions/" + submission_token + "?base64_encoded=true",
+ type: "GET",
+ async: true,
+ success: function (data, textStatus, jqXHR) {
+ if (data.status.id <= 2) {
+ // In Queue or Processing
+ setTimeout(fetchSubmission.bind(null, submission_token), check_timeout);
+ return;
+ }
+ handleResult(data);
+ },
+ error: handleRunError,
+ });
}
function changeEditorLanguage() {
- monaco.editor.setModelLanguage(sourceEditor.getModel(), $selectLanguage.find(":selected").attr("mode"));
- currentLanguageId = parseInt($selectLanguage.val());
- $(".lm_title")[0].innerText = fileNames[currentLanguageId];
- apiUrl = resolveApiUrl($selectLanguage.val());
+ monaco.editor.setModelLanguage(
+ sourceEditor.getModel(),
+ $selectLanguage.find(":selected").attr("mode")
+ );
+ currentLanguageId = parseInt($selectLanguage.val());
+ $(".lm_title")[0].innerText = fileNames[currentLanguageId];
+ apiUrl = resolveApiUrl($selectLanguage.val());
}
function insertTemplate() {
- currentLanguageId = parseInt($selectLanguage.val());
- sourceEditor.setValue(sources[currentLanguageId]);
- stdinEditor.setValue(inputs[currentLanguageId] || "");
- $compilerOptions.val(compilerOptions[currentLanguageId] || "");
- changeEditorLanguage();
+ currentLanguageId = parseInt($selectLanguage.val());
+ sourceEditor.setValue(sources[currentLanguageId]);
+ stdinEditor.setValue(inputs[currentLanguageId] || "");
+ $compilerOptions.val(compilerOptions[currentLanguageId] || "");
+ changeEditorLanguage();
}
function loadRandomLanguage() {
- var values = [];
- for (var i = 0; i < $selectLanguage[0].options.length; ++i) {
- values.push($selectLanguage[0].options[i].value);
- }
- // $selectLanguage.dropdown("set selected", values[Math.floor(Math.random() * $selectLanguage[0].length)]);
- $selectLanguage.dropdown("set selected", values[19]);
- apiUrl = resolveApiUrl($selectLanguage.val())
- insertTemplate();
+ var values = [];
+ for (var i = 0; i < $selectLanguage[0].options.length; ++i) {
+ values.push($selectLanguage[0].options[i].value);
+ }
+ // $selectLanguage.dropdown("set selected", values[Math.floor(Math.random() * $selectLanguage[0].length)]);
+ $selectLanguage.dropdown("set selected", values[19]);
+ apiUrl = resolveApiUrl($selectLanguage.val());
+ insertTemplate();
}
function resizeEditor(layoutInfo) {
- if (editorMode != "normal") {
- var statusLineHeight = $("#editor-status-line").height();
- layoutInfo.height -= statusLineHeight;
- layoutInfo.contentHeight -= statusLineHeight;
- }
+ if (editorMode != "normal") {
+ var statusLineHeight = $("#editor-status-line").height();
+ layoutInfo.height -= statusLineHeight;
+ layoutInfo.contentHeight -= statusLineHeight;
+ }
}
function disposeEditorModeObject() {
- try {
- editorModeObject.dispose();
- editorModeObject = null;
- } catch(ignorable) {
- }
+ try {
+ editorModeObject.dispose();
+ editorModeObject = null;
+ } catch (ignorable) {}
}
function changeEditorMode() {
- disposeEditorModeObject();
-
- if (editorMode == "vim") {
- editorModeObject = MonacoVim.initVimMode(sourceEditor, $("#editor-status-line")[0]);
- } else if (editorMode == "emacs") {
- var statusNode = $("#editor-status-line")[0];
- editorModeObject = new MonacoEmacs.EmacsExtension(sourceEditor);
- editorModeObject.onDidMarkChange(function(e) {
- statusNode.textContent = e ? "Mark Set!" : "Mark Unset";
- });
- editorModeObject.onDidChangeKey(function(str) {
- statusNode.textContent = str;
- });
- editorModeObject.start();
- }
+ disposeEditorModeObject();
+
+ if (editorMode == "vim") {
+ editorModeObject = MonacoVim.initVimMode(
+ sourceEditor,
+ $("#editor-status-line")[0]
+ );
+ } else if (editorMode == "emacs") {
+ var statusNode = $("#editor-status-line")[0];
+ editorModeObject = new MonacoEmacs.EmacsExtension(sourceEditor);
+ editorModeObject.onDidMarkChange(function (e) {
+ statusNode.textContent = e ? "Mark Set!" : "Mark Unset";
+ });
+ editorModeObject.onDidChangeKey(function (str) {
+ statusNode.textContent = str;
+ });
+ editorModeObject.start();
+ }
}
function resolveLanguageId(id) {
- id = parseInt(id);
- return languageIdTable[id] || id;
+ id = parseInt(id);
+ return languageIdTable[id] || id;
}
function resolveApiUrl(id) {
- id = parseInt(id);
- return languageApiUrlTable[id] || defaultUrl;
+ id = parseInt(id);
+ return languageApiUrlTable[id] || apiUrl;
}
function editorsUpdateFontSize(fontSize) {
- sourceEditor.updateOptions({fontSize: fontSize});
- stdinEditor.updateOptions({fontSize: fontSize});
- stdoutEditor.updateOptions({fontSize: fontSize});
+ sourceEditor.updateOptions({ fontSize: fontSize });
+ stdinEditor.updateOptions({ fontSize: fontSize });
+ stdoutEditor.updateOptions({ fontSize: fontSize });
}
function updateScreenElements() {
- var display = window.innerWidth <= 1200 ? "none" : "";
- $(".wide.screen.only").each(function(index) {
- $(this).css("display", display);
- });
+ var display = window.innerWidth <= 1200 ? "none" : "";
+ $(".wide.screen.only").each(function (index) {
+ $(this).css("display", display);
+ });
}
-$(window).resize(function() {
- layout.updateSize();
- updateScreenElements();
- showMessages();
+$(window).resize(function () {
+ layout.updateSize();
+ updateScreenElements();
+ showMessages();
});
$(document).ready(function () {
- updateScreenElements();
-
- console.log("Hey, Judge0 IDE is open-sourced: https://github.com/judge0/ide. Have fun!");
-
- $selectLanguage = $("#select-language");
- $selectLanguage.change(function (e) {
- if (!isEditorDirty) {
- insertTemplate();
- } else {
- changeEditorLanguage();
- }
- });
+ updateScreenElements();
- $compilerOptions = $("#compiler-options");
- $commandLineArguments = $("#command-line-arguments");
- $commandLineArguments.attr("size", $commandLineArguments.attr("placeholder").length);
+ console.log(
+ "Hey, Judge0 IDE is open-sourced: https://github.com/judge0/ide. Have fun!"
+ );
- $insertTemplateBtn = $("#insert-template-btn");
- $insertTemplateBtn.click(function (e) {
- if (isEditorDirty && confirm("Are you sure? Your current changes will be lost.")) {
- insertTemplate();
- }
- });
-
- $runBtn = $("#run-btn");
- $runBtn.click(function (e) {
- run();
- });
-
- $navigationMessage = $("#navigation-message span");
- $updates = $("#judge0-more");
-
- $(`input[name="editor-mode"][value="${editorMode}"]`).prop("checked", true);
- $("input[name=\"editor-mode\"]").on("change", function(e) {
- editorMode = e.target.value;
- localStorageSetItem("editorMode", editorMode);
+ $selectLanguage = $("#select-language");
+ $selectLanguage.change(function (e) {
+ if (!isEditorDirty) {
+ insertTemplate();
+ } else {
+ changeEditorLanguage();
+ }
+ });
+
+ $compilerOptions = $("#compiler-options");
+ $commandLineArguments = $("#command-line-arguments");
+ $commandLineArguments.attr(
+ "size",
+ $commandLineArguments.attr("placeholder").length
+ );
+
+ $insertTemplateBtn = $("#insert-template-btn");
+ $insertTemplateBtn.click(function (e) {
+ if (
+ isEditorDirty &&
+ confirm("Are you sure? Your current changes will be lost.")
+ ) {
+ insertTemplate();
+ }
+ });
+
+ $runBtn = $("#run-btn");
+ $runBtn.click(function (e) {
+ run();
+ });
+
+ $navigationMessage = $("#navigation-message span");
+ $updates = $("#judge0-more");
+
+ $(`input[name="editor-mode"][value="${editorMode}"]`).prop("checked", true);
+ $('input[name="editor-mode"]').on("change", function (e) {
+ editorMode = e.target.value;
+ localStorageSetItem("editorMode", editorMode);
+
+ resizeEditor(sourceEditor.getLayoutInfo());
+ changeEditorMode();
+
+ sourceEditor.focus();
+ });
+
+ $statusLine = $("#status-line");
+
+ $(document).on("keydown", "body", function (e) {
+ var keyCode = e.keyCode || e.which;
+ if (keyCode == 120) {
+ // F9
+ e.preventDefault();
+ run();
+ } else if (keyCode == 119) {
+ // F8
+ e.preventDefault();
+ var url = prompt("Enter URL of Judge0 API:", apiUrl);
+ if (url != null) {
+ url = url.trim();
+ }
+ if (url != null && url != "") {
+ apiUrl = url;
+ localStorageSetItem("api-url", apiUrl);
+ }
+ } else if (keyCode == 118) {
+ // F7
+ e.preventDefault();
+ wait = !wait;
+ localStorageSetItem("wait", wait);
+ alert(`Submission wait is ${wait ? "ON. Enjoy" : "OFF"}.`);
+ } else if (event.ctrlKey && keyCode == 107) {
+ // Ctrl++
+ e.preventDefault();
+ fontSize += 1;
+ editorsUpdateFontSize(fontSize);
+ } else if (event.ctrlKey && keyCode == 109) {
+ // Ctrl+-
+ e.preventDefault();
+ fontSize -= 1;
+ editorsUpdateFontSize(fontSize);
+ }
+ });
+
+ $("select.dropdown").dropdown();
+ $(".ui.dropdown").dropdown();
+ $(".ui.dropdown.site-links").dropdown({ action: "hide", on: "hover" });
+ $(".ui.checkbox").checkbox();
+ $(".message .close").on("click", function () {
+ $(this).closest(".message").transition("fade");
+ });
+
+ loadMessages();
+
+ require([
+ "vs/editor/editor.main",
+ "monaco-vim",
+ "monaco-emacs",
+ ], function (ignorable, MVim, MEmacs) {
+ layout = new GoldenLayout(layoutConfig, $("#site-content"));
+
+ MonacoVim = MVim;
+ MonacoEmacs = MEmacs;
+
+ layout.registerComponent("source", function (container, state) {
+ sourceEditor = monaco.editor.create(container.getElement()[0], {
+ automaticLayout: true,
+ theme: "vs-dark",
+ scrollBeyondLastLine: true,
+ readOnly: state.readOnly,
+ language: "cpp",
+ minimap: {
+ enabled: false,
+ },
+ });
- resizeEditor(sourceEditor.getLayoutInfo());
- changeEditorMode();
+ changeEditorMode();
- sourceEditor.focus();
- });
+ sourceEditor.getModel().onDidChangeContent(function (e) {
+ currentLanguageId = parseInt($selectLanguage.val());
+ isEditorDirty = sourceEditor.getValue() != sources[currentLanguageId];
+ });
- $statusLine = $("#status-line");
-
- $(document).on("keydown", "body", function (e) {
- var keyCode = e.keyCode || e.which;
- if (keyCode == 120) { // F9
- e.preventDefault();
- run();
- } else if (keyCode == 119) { // F8
- e.preventDefault();
- var url = prompt("Enter URL of Judge0 API:", apiUrl);
- if (url != null) {
- url = url.trim();
- }
- if (url != null && url != "") {
- apiUrl = url;
- localStorageSetItem("api-url", apiUrl);
- }
- } else if (keyCode == 118) { // F7
- e.preventDefault();
- wait = !wait;
- localStorageSetItem("wait", wait);
- alert(`Submission wait is ${wait ? "ON. Enjoy" : "OFF"}.`);
- } else if (event.ctrlKey && keyCode == 107) { // Ctrl++
- e.preventDefault();
- fontSize += 1;
- editorsUpdateFontSize(fontSize);
- } else if (event.ctrlKey && keyCode == 109) { // Ctrl+-
- e.preventDefault();
- fontSize -= 1;
- editorsUpdateFontSize(fontSize);
- }
+ sourceEditor.onDidLayoutChange(resizeEditor);
});
- $("select.dropdown").dropdown();
- $(".ui.dropdown").dropdown();
- $(".ui.dropdown.site-links").dropdown({action: "hide", on: "hover"});
- $(".ui.checkbox").checkbox();
- $(".message .close").on("click", function () {
- $(this).closest(".message").transition("fade");
+ layout.registerComponent("stdin", function (container, state) {
+ stdinEditor = monaco.editor.create(container.getElement()[0], {
+ automaticLayout: true,
+ theme: "vs-dark",
+ scrollBeyondLastLine: false,
+ readOnly: state.readOnly,
+ language: "plaintext",
+ minimap: {
+ enabled: false,
+ },
+ });
});
- loadMessages();
-
- require(["vs/editor/editor.main", "monaco-vim", "monaco-emacs"], function (ignorable, MVim, MEmacs) {
- layout = new GoldenLayout(layoutConfig, $("#site-content"));
-
- MonacoVim = MVim;
- MonacoEmacs = MEmacs;
-
- layout.registerComponent("source", function (container, state) {
- sourceEditor = monaco.editor.create(container.getElement()[0], {
- automaticLayout: true,
- theme: "vs-dark",
- scrollBeyondLastLine: true,
- readOnly: state.readOnly,
- language: "cpp",
- minimap: {
- enabled: false
- }
- });
-
- changeEditorMode();
-
- sourceEditor.getModel().onDidChangeContent(function (e) {
- currentLanguageId = parseInt($selectLanguage.val());
- isEditorDirty = sourceEditor.getValue() != sources[currentLanguageId];
- });
-
- sourceEditor.onDidLayoutChange(resizeEditor);
- });
-
- layout.registerComponent("stdin", function (container, state) {
- stdinEditor = monaco.editor.create(container.getElement()[0], {
- automaticLayout: true,
- theme: "vs-dark",
- scrollBeyondLastLine: false,
- readOnly: state.readOnly,
- language: "plaintext",
- minimap: {
- enabled: false
- }
- });
- });
-
- layout.registerComponent("stdout", function (container, state) {
- stdoutEditor = monaco.editor.create(container.getElement()[0], {
- automaticLayout: true,
- theme: "vs-dark",
- scrollBeyondLastLine: false,
- readOnly: state.readOnly,
- language: "plaintext",
- minimap: {
- enabled: false
- }
- });
-
- container.on("tab", function(tab) {
- tab.element.append("");
- tab.element.on("mousedown", function(e) {
- e.target.closest(".lm_tab").children[3].hidden = true;
- });
- });
- });
+ layout.registerComponent("stdout", function (container, state) {
+ stdoutEditor = monaco.editor.create(container.getElement()[0], {
+ automaticLayout: true,
+ theme: "vs-dark",
+ scrollBeyondLastLine: false,
+ readOnly: state.readOnly,
+ language: "plaintext",
+ minimap: {
+ enabled: false,
+ },
+ });
- layout.on("initialised", function () {
- $(".monaco-editor")[0].appendChild($("#editor-status-line")[0]);
- if (getIdFromURI()) {
- loadSavedSource();
- } else {
- loadRandomLanguage();
- }
- $("#site-navigation").css("border-bottom", "1px solid black");
- sourceEditor.focus();
- editorsUpdateFontSize(fontSize);
+ container.on("tab", function (tab) {
+ tab.element.append('');
+ tab.element.on("mousedown", function (e) {
+ e.target.closest(".lm_tab").children[3].hidden = true;
});
+ });
+ });
- layout.init();
+ layout.on("initialised", function () {
+ $(".monaco-editor")[0].appendChild($("#editor-status-line")[0]);
+ if (getIdFromURI()) {
+ loadSavedSource();
+ } else {
+ loadRandomLanguage();
+ }
+ $("#site-navigation").css("border-bottom", "1px solid black");
+ sourceEditor.focus();
+ editorsUpdateFontSize(fontSize);
});
+
+ layout.init();
+ });
});
// Template Sources
-var assemblySource = "\
+var assemblySource =
+ "\
section .text\n\
global _start\n\
\n\
@@ -610,38 +652,42 @@ msg db 'hello, world', 0xa\n\
len equ $ - msg\n\
";
-var bashSource = "echo \"hello, world\"";
+var bashSource = 'echo "hello, world"';
-var basicSource = "PRINT \"hello, world\"";
+var basicSource = 'PRINT "hello, world"';
-var cSource = "\
+var cSource =
+ '\
// Powered by Judge0\n\
#include