diff options
author | Stas Medvedev <medvedevsa97@gmail.com> | 2024-06-13 02:39:09 +0300 |
---|---|---|
committer | Stas Medvedev <medvedevsa97@gmail.com> | 2024-06-13 02:39:09 +0300 |
commit | d76981975476c561e3164f53d48eea305dd9756a (patch) | |
tree | a6fc886b949469e48206699388e56ad286ccf62d /templates/partials/code | |
parent | 0c1a65570be7f34f12a35da45669676f4479abd4 (diff) |
правки фронта, новая цветовая схема (синий, серый)
countdown executeCode
Diffstat (limited to 'templates/partials/code')
-rw-r--r-- | templates/partials/code/index.html | 67 | ||||
-rw-r--r-- | templates/partials/code/textarea.html | 34 |
2 files changed, 101 insertions, 0 deletions
diff --git a/templates/partials/code/index.html b/templates/partials/code/index.html new file mode 100644 index 0000000..9b39e59 --- /dev/null +++ b/templates/partials/code/index.html @@ -0,0 +1,67 @@ +<div class="flex flex-col w-full"> + <div class="flex flex-wrap p-2"> + <p class="w-full md:w-min text-nowrap m-auto">Python 3.10 (sandbox)</p> + <a + href="https://cgit.yetsam.ru/yetsam.git" + class="text-neutral-400 underline hover:text-secondary-600 decoration-secondary-600 w-full md:w-min text-nowrap m-auto"> + go to source code (click me) + </a> + + </div> + + {% include 'partials/code/textarea.html' %} + + <div class="flex w-full justify-between p-2"> + <p class="underline" id="output"></p> + <button onclick="clearEditor()" class="bg-secondary-200 hover:bg-secondary-300 px-2 rounded-md ">Очистить</button> + <button onclick="executeCode()" class="bg-primary-200 hover:bg-primary-300 px-2 rounded-md"> + Выполнить + </button> + </div> + <div class="w-full bg-white min-h-20 border-2 p-2" id="code-result"> + <p class="text-gray-200">Нажмите "Выполнить"</p> + </div> +</div> + +<script> + function executeCode(){ + fetch('/restricted_exec',{ + method: "POST", + headers: { + 'Content-Type': 'application/json' + }, + body: JSON.stringify({ + code: document.codeEditor.getValue() + }) + }) + .then(response => { + response.json() + .then(data => { + const div = document.getElementById('code-result') + div.replaceChildren([]) + data.forEach(line => { + const p = document.createElement('p') + p.innerHTML = line + div.appendChild(p) + }) + + }) + }) + } + function clearEditor(){ + document.codeEditor.getDoc().setValue('\n'.repeat(15)) + } + let countdown = 4 + function countdownTimer(){ + if (countdown > 0){ + countdown--; + document.getElementById('output').innerHTML = `Вывод: (${countdown})` + setTimeout(countdownTimer, 1000) + } else { + document.getElementById('output').innerHTML = `Вывод:` + executeCode() + } + } + countdownTimer() + +</script> diff --git a/templates/partials/code/textarea.html b/templates/partials/code/textarea.html new file mode 100644 index 0000000..a13ba69 --- /dev/null +++ b/templates/partials/code/textarea.html @@ -0,0 +1,34 @@ + +<textarea id="code" name="code" class="w-full"> +from base64 import b64decode +from datetime import datetime +from time import sleep + +# Внимание, пасхалка ! +# Выполни код что бы увидеть расшифрованное сообщение +b64message = '0K3RgtC+0YIg0LrQvtC0LCDQsdGL0Lsg0LLRi9C/0L7Qu9C90LXQvSwg0L3QsCDQsdC10LrQtdC90LTQtS4=' + +def decode_message(b64message: str): + sleep(.5) # Удали эту строку если жалко пол секунды + return b64decode(b64message.encode()).decode('utf-8') + +start_time = datetime.now() +print(f'Время начала: {start_time}') +print(decode_message(b64message)) +print(f'Время выполнения: {(datetime.now() - start_time)}') +</textarea> + +<script> + document.addEventListener("DOMContentLoaded", function () { + document.codeEditor = CodeMirror.fromTextArea(document.getElementById("code"), { + value: "blah", + lineNumbers: true, + mode: "python", + theme: "default", // Вы можете изменить тему на любую другую из доступных в CodeMirror + indentUnit: 4, + matchBrackets: true, + }); + document.codeEditor.setSize('100%','100%') + }); + +</script> |