Files
fission-console/console/ui/js/fn-code.js
T

72 lines
2.6 KiB
JavaScript

/* fn-code.js — создание функции из кода (независимый модуль) */
function onLangChangeCode() {
var lang = document.getElementById('cc-lang').value;
var t = LANG_TEMPLATES[lang];
if (t) {
document.getElementById('cc-entry').value = t.entrypoint;
document.getElementById('cc-code').value = t.code;
}
}
function openCreateCode() {
document.getElementById('cc-lang').value = 'python';
onLangChangeCode();
document.getElementById('cc-name').value = '';
document.getElementById('cc-route').value = '';
document.getElementById('cc-methods').value = 'GET';
document.getElementById('cc-timeout').value = '60';
document.getElementById('cc-schedule-enabled').checked = false;
document.getElementById('cc-cron').value = '';
toggleScheduleFields('cc');
var aiRes = document.getElementById('cc-ai-result');
if (aiRes) { aiRes.style.display = 'none'; aiRes.textContent = ''; }
document.getElementById('create-code-modal').classList.add('open');
document.getElementById('cc-name').focus();
}
function closeCreateCode() {
document.getElementById('create-code-modal').classList.remove('open');
}
async function submitCreateCode() {
const btn = document.getElementById('cc-submit');
btn.disabled = true;
const progress = startTimedStatus('Создаём функцию...', 'Создание функции...', explainDelay);
try {
const name = document.getElementById('cc-name').value.trim();
if (!name) throw new Error('name is required');
const lang = document.getElementById('cc-lang').value.trim();
if (!lang) throw new Error('language is required');
await requestJSON(API_BASE + '/functions', 'POST', {
name: name,
language: lang,
entrypoint: document.getElementById('cc-entry').value.trim(),
route: document.getElementById('cc-route').value.trim(),
methods: parseMethods(document.getElementById('cc-methods').value),
timeout: parseTimeout(document.getElementById('cc-timeout').value),
code: document.getElementById('cc-code').value
});
try {
await syncScheduleForFunction(name, 'cc');
} catch (scheduleErr) {
try {
await requestJSON(API_BASE + '/functions/' + encodeURIComponent(name), 'DELETE');
} catch (rollbackErr) {
scheduleErr.message += '; rollback failed: ' + rollbackErr.message;
}
throw scheduleErr;
}
closeCreateCode();
progress.stop('Функция создана: ' + name, 'ok');
await reloadAll();
} catch (e) {
progress.stop('Ошибка создания: ' + e.message, 'err');
} finally {
btn.disabled = false;
}
}