ambiente-prova/view/index.js
2025-08-23 19:51:01 -03:00

118 lines
3.2 KiB
JavaScript

let input = document.querySelector('#input');
let editor = new SimpleMDE({ element: input });
let output = document.querySelector('#output');
let converter = new showdown.Converter();
function render () {
output.innerHTML = converter.makeHtml(editor.value());
localStorage.setItem('save', editor.value())
}
editor.codemirror.on("change", render);
editor.value(localStorage.getItem('save'));
let submitButton = document.querySelector('#submit-button');
let answerInput = document.querySelector('#answer-input');
let resultStatus = document.querySelector('#result-status');
let inputOutputLog = document.querySelector('#io-log');
let wrongResultInfo = document.querySelector('#wrong-result-info');
let wrongResultTestInput = document.querySelector('#test-input');
let wrongResultExpectedOutput = document.querySelector('#test-output');
let wrongResultProgramOutput = document.querySelector('#wrong-output');
function errorResultStatus(textContent) {
resultStatus.style.color = 'white';
resultStatus.textContent = textContent;
resultStatus.style.backgroundColor = 'red';
resultStatus.style.border = '1px solid darkred';
}
submitButton.onclick = async function () {
wrongResultInfo.style.display = 'none';
submitButton.disabled = true;
answerInput.disabled = true;
resultStatus.style.color = 'black';
resultStatus.textContent = 'Aguardando servidor...'
resultStatus.style.backgroundColor = 'rgb(255 238 7 / 37%)';
resultStatus.style.border = '1px solid #695e0066';
let form = new FormData(document.querySelector('form'));
form.append("answer", answerInput.value);
let reply = await fetch('http://localhost:8001/answer',
{
method: 'POST',
mode: 'no-cors',
body: form,
}
);
submitButton.disabled = false;
answerInput.disabled = false;
if (!reply.ok)
return;
let replyJson = await reply.json();
// caso algo de anormal aconteça no servidor
if (reply.status != 200) {
errorResultStatus('status code: ' + reply.status);
return;
}
console.log(replyJson);
switch (replyJson.status) {
case 'comp-exec':
errorResultStatus('Erro de compilação ou execução');
inputOutputLog.textContent = replyJson.message;
return;
case 'wrong':
errorResultStatus('Incorreto');
wrongResultInfo.style.display = 'block';
wrongResultTestInput.textContent = replyJson.input;
wrongResultExpectedOutput.textContent = replyJson.expected;
wrongResultProgramOutput.textContent = replyJson.output;
inputOutputLog.textContent = replyJson.message;
return;
case 'pass':
resultStatus.textContent = 'Successo';
resultStatus.style.color = 'white';
resultStatus.style.backgroundColor = 'green';
resultStatus.style.border = '1px solid darkgreen';
inputOutputLog.textContent = replyJson.output;
return;
}
}
hotkeys.filter = function(){
return true;
}
hotkeys('ctrl+s', (event) => {
alert('salvo!')
event.preventDefault();
} );
hotkeys('ctrl+enter', () => {
submitButton.click();
} );